public static void build(IConfiguration cfg, int flags, IProgressMonitor monitor) { if (cfg != null) { // IScannerConfigBuilderInfo buildInfo = // MakeCorePlugin.createScannerConfigBuildInfo(getProject(), BUILDER_ID); // autodiscoveryEnabled = buildInfo.isAutoDiscoveryEnabled(); // // if (autodiscoveryEnabled) { // monitor.beginTask("ScannerConfigBuilder.Invoking_Builder", 100); // //$NON-NLS-1$ // // monitor.subTask(MakeMessages.getString("ScannerConfigBuilder.Invoking_Builder") + // //$NON-NLS-1$ // getProject().getName()); // ScannerInfoCollector.getInstance().updateScannerConfiguration(getProject(), // new SubProgressMonitor(monitor, 100)); // } ICfgScannerConfigBuilderInfo2Set info = CfgScannerConfigProfileManager.getCfgScannerConfigBuildInfo(cfg); IProject project = cfg.getOwner().getProject(); Map<CfgInfoContext, IScannerConfigBuilderInfo2> infoMap = info.getInfoMap(); int num = infoMap.size(); if (num != 0) { Properties envProps = calcEnvironment(cfg); monitor.beginTask( MakeMessages.getString("ScannerConfigBuilder.Invoking_Builder"), num); // $NON-NLS-1$ for (Entry<CfgInfoContext, IScannerConfigBuilderInfo2> entry : infoMap.entrySet()) { try { CfgInfoContext c = entry.getKey(); IScannerConfigBuilderInfo2 buildInfo2 = entry.getValue(); build( c, buildInfo2, (flags & (~PERFORM_CORE_UPDATE)), envProps, new SubProgressMonitor(monitor, 1)); } catch (CoreException e) { // builder not installed or disabled // autodiscoveryEnabled = false; // autodiscoveryEnabled2 = false; ManagedBuilderCorePlugin.log(e); } } } if ((flags & PERFORM_CORE_UPDATE) != 0) CfgDiscoveredPathManager.getInstance() .updateCoreSettings(project, new IConfiguration[] {cfg}); } }
@Override public void process( TemplateCore template, ProcessArgument[] args, String processId, IProgressMonitor monitor) throws ProcessFailureException { String projectName = args[0].getSimpleValue(); String prefix = args[1].getSimpleValue(); String path = args[2].getSimpleValue(); IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); if (!project.exists()) return; IManagedBuildInfo buildInfo = ManagedBuildManager.getBuildInfo(project); if (buildInfo == null) return; IConfiguration[] configs = buildInfo.getManagedProject().getConfigurations(); for (IConfiguration config : configs) { IToolChain toolchain = config.getToolChain(); IOption option = toolchain.getOptionBySuperClassId("cdt.managedbuild.option.gnu.cross.prefix"); ManagedBuildManager.setOption(config, toolchain, option, prefix); option = toolchain.getOptionBySuperClassId("cdt.managedbuild.option.gnu.cross.path"); ManagedBuildManager.setOption(config, toolchain, option, path); ICfgScannerConfigBuilderInfo2Set cbi = CfgScannerConfigProfileManager.getCfgScannerConfigBuildInfo(config); Map<CfgInfoContext, IScannerConfigBuilderInfo2> map = cbi.getInfoMap(); for (CfgInfoContext cfgInfoContext : map.keySet()) { IScannerConfigBuilderInfo2 bi = map.get(cfgInfoContext); String providerId = "specsFile"; String runCommand = bi.getProviderRunCommand(providerId); bi.setProviderRunCommand(providerId, prefix + runCommand); try { bi.save(); } catch (CoreException e) { throw new ProcessFailureException(e); } // Clear the path info that was captured at project creation time // TODO we need an API to do this to avoid the discouraged access warnings. DiscoveredPathInfo pathInfo = new DiscoveredPathInfo(project); InfoContext infoContext = cfgInfoContext.toInfoContext(); // 1. Remove scanner info from .metadata/.plugins/org.eclipse.cdt.make.core/Project.sc DiscoveredScannerInfoStore dsiStore = DiscoveredScannerInfoStore.getInstance(); try { dsiStore.saveDiscoveredScannerInfoToState(project, infoContext, pathInfo); } catch (CoreException e) { e.printStackTrace(); } // 2. Remove scanner info from CfgDiscoveredPathManager cache and from the Tool CfgDiscoveredPathManager cdpManager = CfgDiscoveredPathManager.getInstance(); cdpManager.removeDiscoveredInfo(project, cfgInfoContext); // 3. Remove scanner info from SI collector IScannerConfigBuilderInfo2 buildInfo2 = map.get(cfgInfoContext); if (buildInfo2 != null) { ScannerConfigProfileManager scpManager = ScannerConfigProfileManager.getInstance(); String selectedProfileId = buildInfo2.getSelectedProfileId(); SCProfileInstance profileInstance = scpManager.getSCProfileInstance(project, infoContext, selectedProfileId); IScannerInfoCollector collector = profileInstance.getScannerInfoCollector(); if (collector instanceof IScannerInfoCollectorCleaner) { ((IScannerInfoCollectorCleaner) collector).deleteAll(project); } buildInfo2 = null; } } } ManagedBuildManager.saveBuildInfo(project, true); }