mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 17:56:01 +02:00
p2 generator for open source SDKs. This once includes MinGW for Wascana.
This commit is contained in:
parent
ac5006b94e
commit
5c28d8407c
8 changed files with 305 additions and 0 deletions
11
p2/org.eclipse.cdt.p2.generator/.classpath
Normal file
11
p2/org.eclipse.cdt.p2.generator/.classpath
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
|
||||||
|
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
|
||||||
|
<accessrules>
|
||||||
|
<accessrule kind="accessible" pattern="**/internal/provisional/**"/>
|
||||||
|
</accessrules>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="src" path="src"/>
|
||||||
|
<classpathentry kind="output" path="bin"/>
|
||||||
|
</classpath>
|
28
p2/org.eclipse.cdt.p2.generator/.project
Normal file
28
p2/org.eclipse.cdt.p2.generator/.project
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>org.eclipse.cdt.p2.generator</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.pde.ManifestBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.pde.SchemaBuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.pde.PluginNature</nature>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
|
@ -0,0 +1,7 @@
|
||||||
|
#Mon Dec 01 20:43:28 EST 2008
|
||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
||||||
|
org.eclipse.jdt.core.compiler.compliance=1.6
|
||||||
|
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
|
org.eclipse.jdt.core.compiler.source=1.6
|
16
p2/org.eclipse.cdt.p2.generator/META-INF/MANIFEST.MF
Normal file
16
p2/org.eclipse.cdt.p2.generator/META-INF/MANIFEST.MF
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
Manifest-Version: 1.0
|
||||||
|
Bundle-ManifestVersion: 2
|
||||||
|
Bundle-Name: Generator Plug-in
|
||||||
|
Bundle-SymbolicName: org.eclipse.cdt.p2.generator;singleton:=true
|
||||||
|
Bundle-Version: 1.0.0
|
||||||
|
Bundle-Activator: org.eclipse.cdt.p2.generator.Activator
|
||||||
|
Require-Bundle: org.eclipse.core.runtime,
|
||||||
|
org.eclipse.cdt.p2;bundle-version="5.0.0",
|
||||||
|
org.eclipse.equinox.p2.artifact.repository;bundle-version="1.0.2",
|
||||||
|
org.eclipse.equinox.p2.core;bundle-version="1.0.0",
|
||||||
|
org.eclipse.equinox.p2.metadata;bundle-version="1.0.0",
|
||||||
|
org.eclipse.equinox.p2.engine;bundle-version="1.0.1",
|
||||||
|
org.eclipse.equinox.p2.metadata.repository;bundle-version="1.0.0",
|
||||||
|
org.eclipse.equinox.p2.metadata.generator;bundle-version="1.0.1"
|
||||||
|
Bundle-ActivationPolicy: lazy
|
||||||
|
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
5
p2/org.eclipse.cdt.p2.generator/build.properties
Normal file
5
p2/org.eclipse.cdt.p2.generator/build.properties
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
source.. = src/
|
||||||
|
output.. = bin/
|
||||||
|
bin.includes = META-INF/,\
|
||||||
|
.,\
|
||||||
|
plugin.xml
|
18
p2/org.eclipse.cdt.p2.generator/plugin.xml
Normal file
18
p2/org.eclipse.cdt.p2.generator/plugin.xml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<?eclipse version="3.2"?>
|
||||||
|
<plugin>
|
||||||
|
<extension
|
||||||
|
id="mingwGenerator"
|
||||||
|
name="MinGW Generator"
|
||||||
|
point="org.eclipse.core.runtime.applications">
|
||||||
|
<application
|
||||||
|
cardinality="singleton-global"
|
||||||
|
thread="main"
|
||||||
|
visible="true">
|
||||||
|
<run
|
||||||
|
class="org.eclipse.cdt.p2.generator.MinGWGenerator">
|
||||||
|
</run>
|
||||||
|
</application>
|
||||||
|
</extension>
|
||||||
|
|
||||||
|
</plugin>
|
|
@ -0,0 +1,76 @@
|
||||||
|
package org.eclipse.cdt.p2.generator;
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.Plugin;
|
||||||
|
import org.osgi.framework.Bundle;
|
||||||
|
import org.osgi.framework.BundleContext;
|
||||||
|
import org.osgi.framework.ServiceReference;
|
||||||
|
import org.osgi.service.packageadmin.PackageAdmin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The activator class controls the plug-in life cycle
|
||||||
|
*/
|
||||||
|
public class Activator extends Plugin {
|
||||||
|
|
||||||
|
// The plug-in ID
|
||||||
|
public static final String PLUGIN_ID = "org.eclipse.cdt.p2.generator";
|
||||||
|
|
||||||
|
// The shared instance
|
||||||
|
private static Activator plugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The constructor
|
||||||
|
*/
|
||||||
|
public Activator() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
|
||||||
|
*/
|
||||||
|
public void start(BundleContext context) throws Exception {
|
||||||
|
super.start(context);
|
||||||
|
plugin = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
* @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
|
||||||
|
*/
|
||||||
|
public void stop(BundleContext context) throws Exception {
|
||||||
|
plugin = null;
|
||||||
|
super.stop(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the shared instance
|
||||||
|
*
|
||||||
|
* @return the shared instance
|
||||||
|
*/
|
||||||
|
public static Activator getDefault() {
|
||||||
|
return plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public <T> T getService(Class<T> clazz) {
|
||||||
|
BundleContext context = plugin.getBundle().getBundleContext();
|
||||||
|
ServiceReference ref = context.getServiceReference(clazz.getName());
|
||||||
|
return (ref != null) ? (T)context.getService(ref) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Bundle getBundle(String symbolicName) {
|
||||||
|
PackageAdmin packageAdmin = getService(PackageAdmin.class);
|
||||||
|
if (packageAdmin == null)
|
||||||
|
return null;
|
||||||
|
Bundle[] bundles = packageAdmin.getBundles(symbolicName, null);
|
||||||
|
if (bundles == null)
|
||||||
|
return null;
|
||||||
|
//Return the first bundle that is not installed or uninstalled
|
||||||
|
for (int i = 0; i < bundles.length; i++) {
|
||||||
|
if ((bundles[i].getState() & (Bundle.INSTALLED | Bundle.UNINSTALLED)) == 0) {
|
||||||
|
return bundles[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,144 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 Wind River Systems, Inc. and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Doug Schaefer - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.p2.generator;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.p2.internal.repo.artifact.InstallArtifactRepository;
|
||||||
|
import org.eclipse.cdt.p2.internal.touchpoint.SDKTouchpoint;
|
||||||
|
import org.eclipse.equinox.app.IApplication;
|
||||||
|
import org.eclipse.equinox.app.IApplicationContext;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.artifact.repository.ArtifactDescriptor;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.artifact.repository.IArtifactRepository;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.artifact.repository.IArtifactRepositoryManager;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.core.ProvisionException;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.metadata.IArtifactKey;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.metadata.IInstallableUnit;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.metadata.ProvidedCapability;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.metadata.RequiredCapability;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.metadata.MetadataFactory.InstallableUnitDescription;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.metadata.generator.MetadataGeneratorHelper;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepository;
|
||||||
|
import org.eclipse.equinox.internal.provisional.p2.metadata.repository.IMetadataRepositoryManager;
|
||||||
|
import org.eclipse.osgi.service.resolver.VersionRange;
|
||||||
|
import org.osgi.framework.Bundle;
|
||||||
|
import org.osgi.framework.Version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author DSchaefe
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class MinGWGenerator implements IApplication {
|
||||||
|
|
||||||
|
private static final String REPO_NAME = "MinGW";
|
||||||
|
|
||||||
|
IMetadataRepository metaRepo;
|
||||||
|
IArtifactRepository artiRepo;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object start(IApplicationContext context) throws Exception {
|
||||||
|
context.applicationRunning();
|
||||||
|
|
||||||
|
Activator.getDefault().getBundle("org.eclipse.equinox.p2.exemplarysetup").start(Bundle.START_TRANSIENT); //$NON-NLS-1$
|
||||||
|
|
||||||
|
URL repoLocation = new File("C:\\Wascana\\repo").toURI().toURL();
|
||||||
|
|
||||||
|
IMetadataRepositoryManager metaRepoMgr = Activator.getDefault().getService(IMetadataRepositoryManager.class);
|
||||||
|
IArtifactRepositoryManager artiRepoMgr = Activator.getDefault().getService(IArtifactRepositoryManager.class);
|
||||||
|
|
||||||
|
metaRepo = metaRepoMgr.createRepository(repoLocation, REPO_NAME, IMetadataRepositoryManager.TYPE_SIMPLE_REPOSITORY, null);
|
||||||
|
artiRepo = artiRepoMgr.createRepository(repoLocation, REPO_NAME, IArtifactRepositoryManager.TYPE_SIMPLE_REPOSITORY, null);
|
||||||
|
|
||||||
|
IInstallableUnit binutilsIU = createBinutils();
|
||||||
|
|
||||||
|
// toolchain
|
||||||
|
InstallableUnitDescription mingwToolchainDesc = createIUDesc(
|
||||||
|
"wascana.mingw",
|
||||||
|
new Version(1, 0, 0),
|
||||||
|
"MinGW Toolchain");
|
||||||
|
RequiredCapability[] mingwToolchainReqs = new RequiredCapability[] {
|
||||||
|
MetadataFactory.createRequiredCapability(
|
||||||
|
IInstallableUnit.NAMESPACE_IU_ID,
|
||||||
|
binutilsIU.getId(), new VersionRange(null), null, false, false)
|
||||||
|
};
|
||||||
|
mingwToolchainDesc.setRequiredCapabilities(mingwToolchainReqs);
|
||||||
|
mingwToolchainDesc.setProperty(IInstallableUnit.PROP_TYPE_CATEGORY, Boolean.TRUE.toString());
|
||||||
|
IInstallableUnit mingwToolchainIU = MetadataFactory.createInstallableUnit(mingwToolchainDesc);
|
||||||
|
|
||||||
|
metaRepo.addInstallableUnits(new IInstallableUnit[] {
|
||||||
|
binutilsIU,
|
||||||
|
// gccCoreIU,
|
||||||
|
// gccGppIU,
|
||||||
|
mingwToolchainIU,
|
||||||
|
// wascanaIU
|
||||||
|
});
|
||||||
|
|
||||||
|
System.out.println("done");
|
||||||
|
|
||||||
|
return EXIT_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stop() {
|
||||||
|
}
|
||||||
|
|
||||||
|
private IInstallableUnit createBinutils() throws ProvisionException, MalformedURLException {
|
||||||
|
String binutilsId = "wascana.mingw.binutils";
|
||||||
|
Version binutilsVersion = new Version("2.18.50.20080109-2");
|
||||||
|
InstallableUnitDescription binutilsDesc = createIUDesc(
|
||||||
|
binutilsId, binutilsVersion, "MinGW binutils");
|
||||||
|
binutilsDesc.setProperty(IInstallableUnit.PROP_TYPE_GROUP, Boolean.TRUE.toString());
|
||||||
|
IArtifactKey binutilsArti = addRemoteArtifact(
|
||||||
|
binutilsDesc,
|
||||||
|
binutilsId,
|
||||||
|
binutilsVersion,
|
||||||
|
new File("C:\\Wascana\\tars\\binutils-2.18.50-20080109-2.tar.gz").toURI().toURL(),
|
||||||
|
"mingw",
|
||||||
|
InstallArtifactRepository.GZIP_COMPRESSON);
|
||||||
|
binutilsDesc.setArtifacts(new IArtifactKey[] { binutilsArti });
|
||||||
|
return MetadataFactory.createInstallableUnit(binutilsDesc);
|
||||||
|
}
|
||||||
|
|
||||||
|
private InstallableUnitDescription createIUDesc(String id, Version version, String name) throws ProvisionException {
|
||||||
|
InstallableUnitDescription iuDesc = new MetadataFactory.InstallableUnitDescription();
|
||||||
|
iuDesc.setId(id);
|
||||||
|
iuDesc.setVersion(version);
|
||||||
|
iuDesc.setSingleton(true);
|
||||||
|
iuDesc.setProperty(IInstallableUnit.PROP_NAME, name);
|
||||||
|
iuDesc.setCapabilities(new ProvidedCapability[] {
|
||||||
|
MetadataFactory.createProvidedCapability(IInstallableUnit.NAMESPACE_IU_ID, id, version)
|
||||||
|
});
|
||||||
|
return iuDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
private IArtifactKey addRemoteArtifact(
|
||||||
|
InstallableUnitDescription iuDesc,
|
||||||
|
String id, Version version, URL location, String subdir, String compression) throws ProvisionException {
|
||||||
|
iuDesc.setTouchpointType(SDKTouchpoint.TOUCHPOINT_TYPE);
|
||||||
|
Map<String, String> tpdata = new HashMap<String, String>();
|
||||||
|
tpdata.put("uninstall", "uninstall()");
|
||||||
|
iuDesc.addTouchpointData(MetadataFactory.createTouchpointData(tpdata));
|
||||||
|
IArtifactKey artiKey = MetadataGeneratorHelper.createLauncherArtifactKey(id, version);
|
||||||
|
ArtifactDescriptor artiDesc = new ArtifactDescriptor(artiKey);
|
||||||
|
artiDesc.setProperty(InstallArtifactRepository.SUB_DIR, subdir);
|
||||||
|
artiDesc.setProperty(InstallArtifactRepository.COMPRESSION, compression);
|
||||||
|
artiDesc.setRepositoryProperty("artifact.reference", location.toString());
|
||||||
|
artiRepo.addDescriptor(artiDesc);
|
||||||
|
return artiKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue