/******************************************************************************* * Copyright (c) 2007, 2010 Intel Corporation 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: * Intel Corporation - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.managedbuilder.projectconverter; import org.eclipse.cdt.managedbuilder.core.IBuildObjectProperties; import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo; import org.eclipse.cdt.managedbuilder.core.IManagedProject; import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; import org.eclipse.cdt.managedbuilder.internal.core.Configuration; import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; /** * @noextend This class is not intended to be subclassed by clients. * @noinstantiate This class is not intended to be instantiated by clients. */ public class UpdateManagedProject31 { private static final String INEXISTEND_PROP_ID = ""; //$NON-NLS-1$ static void doProjectUpdate(IProgressMonitor monitor, final IProject project) throws CoreException { IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project); ((ManagedBuildInfo)info).setVersion(ManagedBuildManager.getBuildInfoVersion().toString()); info.setValid(true); adjustProperties(info); } private static void adjustProperties(IManagedBuildInfo info){ IManagedProject mProj = info.getManagedProject(); IConfiguration[] cfgs = mProj.getConfigurations(); for(int i = 0; i < cfgs.length; i++){ adjustProperties(cfgs[i]); } } private static void adjustProperties(IConfiguration cfg){ IBuildObjectProperties props = cfg.getBuildProperties(); if(props == null) return; boolean artefactTypeSupported = props.supportsType(ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_ID); boolean buildTypeSupported = props.supportsType(ManagedBuildManager.BUILD_TYPE_PROPERTY_ID); if(!artefactTypeSupported && !buildTypeSupported) return; String artefactType = artefactTypeSupported ? null : INEXISTEND_PROP_ID; String buildType = buildTypeSupported ? null : INEXISTEND_PROP_ID; String artExt = ((Configuration)cfg).getArtifactExtensionAttribute(false); String id = cfg.getId(); if(artefactType == null){ artefactType = getBuildArtefactTypeFromId(id); } if(buildType == null){ buildType = getBuildTypeFromId(id); } if(artefactType == null || buildType == null){ for(IToolChain tc = cfg.getToolChain(); tc != null && (artefactType == null || buildType == null); tc = tc.getSuperClass()){ id = tc.getId(); if(artefactType == null){ artefactType = getBuildArtefactTypeFromId(id); } if(buildType == null){ buildType = getBuildTypeFromId(id); } } } if(artefactType != null && artefactType != INEXISTEND_PROP_ID){ try { props.setProperty(ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_ID, artefactType); } catch (CoreException e) { ManagedBuilderCorePlugin.log(e); } } if(buildType != null && buildType != INEXISTEND_PROP_ID){ try { props.setProperty(ManagedBuildManager.BUILD_TYPE_PROPERTY_ID, buildType); } catch (CoreException e) { ManagedBuilderCorePlugin.log(e); } } if(artExt != null) cfg.setArtifactExtension(artExt); } private static String getBuildArtefactTypeFromId(String id){ if(id.indexOf(".exe") != -1) //$NON-NLS-1$ return ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_EXE; if(id.indexOf(".so") != -1) //$NON-NLS-1$ return ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_SHAREDLIB; if(id.indexOf(".lib") != -1) //$NON-NLS-1$ return ManagedBuildManager.BUILD_ARTEFACT_TYPE_PROPERTY_STATICLIB; return null; } private static String getBuildTypeFromId(String id){ if(id.indexOf(".debug") != -1) //$NON-NLS-1$ return ManagedBuildManager.BUILD_TYPE_PROPERTY_DEBUG; if(id.indexOf(".release") != -1) //$NON-NLS-1$ return ManagedBuildManager.BUILD_TYPE_PROPERTY_RELEASE; return null; } }