diff options
author | Alena Laskavaia | 2009-01-29 21:25:54 +0000 |
---|---|---|
committer | Alena Laskavaia | 2009-01-29 21:25:54 +0000 |
commit | dded7dda1014aeb6ad811e69a56e22e964268850 (patch) | |
tree | 0d32d8cd1429a98966400f025e7f48557186b382 | |
parent | d2df2e441557dda19abbd6bc4fcd23c7c69e39e6 (diff) | |
download | org.eclipse.cdt-dded7dda1014aeb6ad811e69a56e22e964268850.tar.gz org.eclipse.cdt-dded7dda1014aeb6ad811e69a56e22e964268850.tar.xz org.eclipse.cdt-dded7dda1014aeb6ad811e69a56e22e964268850.zip |
[261280] - extracted method to be more customizable and previous behavior only supported per project scanner discovery profile
-rw-r--r-- | build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCDMakefileGenerator.java | 79 |
1 files changed, 64 insertions, 15 deletions
diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCDMakefileGenerator.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCDMakefileGenerator.java index 76e38c4ccf2..aee6dfd21b2 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCDMakefileGenerator.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCDMakefileGenerator.java @@ -21,7 +21,11 @@ import java.util.List; import org.eclipse.cdt.make.core.MakeCorePlugin; import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector2; import org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes; +import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerConfigUtil; +import org.eclipse.cdt.make.internal.core.scannerconfig.gnu.GCCScannerConfigUtil; import org.eclipse.cdt.make.internal.core.scannerconfig.util.CCommandDSC; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; /** @@ -32,24 +36,29 @@ import org.eclipse.cdt.make.internal.core.scannerconfig.util.CCommandDSC; public class SCDMakefileGenerator extends DefaultRunSIProvider { private static final String ENDL = System.getProperty("line.separator"); //$NON-NLS-1$ private static final String DENDL = ENDL+ENDL; - + private String fMakeCommand = "-f ${project_name}_scd.mk "; + /* (non-Javadoc) * @see org.eclipse.cdt.make.internal.core.scannerconfig2.DefaultRunSIProvider#initialize() */ protected boolean initialize() { - boolean rc = super.initialize(); + String args = buildInfo.getProviderRunArguments(providerId); + if (null == args) + args = " -E -P -v -dD "; + else { + int nPos = args.indexOf('|'); + if(nPos > 0) { + fMakeCommand = args.substring(0, nPos); + args = args.substring(nPos + 1); + } + } + fCompileCommand = new Path(buildInfo.getProviderRunCommand(providerId)); + args = substituteDynamicVariables(args); + fCompileArguments = ScannerConfigUtil.tokenizeStringWithQuotes(args, "\"");//$NON-NLS-1$ + fWorkingDirectory = MakeCorePlugin.getWorkingDirectory(); + fMakeCommand = substituteDynamicVariables(fMakeCommand); - if (rc) { - fWorkingDirectory = MakeCorePlugin.getWorkingDirectory(); - // replace string variables in compile arguments - // TODO Vmir - use string variable replacement - for (int i = 0; i < fCompileArguments.length; ++i) { - fCompileArguments[i] = fCompileArguments[i].replaceAll("\\$\\{project_name\\}", //$NON-NLS-1$ - resource.getProject().getName()); - } - rc = generateMakefile(resource.getProject().getName()); - } - return rc; + return generateMakefile(resource.getProject().getName()); } /** @@ -86,14 +95,18 @@ public class SCDMakefileGenerator extends DefaultRunSIProvider { buffer.append(ENDL); buffer.append("\t@echo begin generating scanner info for $@"+ENDL+"\t"); //$NON-NLS-1$ //$NON-NLS-2$ buffer.append(cmd.getSCDRunnableCommand(true, true)); // quote includes and defines - buffer.append(" -E -P -v -dD "); //$NON-NLS-1$ + for (String arg : prepareArguments(buildInfo.isUseDefaultProviderCommand(providerId))) { + buffer.append(' '); + buffer.append(arg); + } + buffer.append(' '); buffer.append(cmd.appliesToCPPFileType() ? "specs.cpp" : "specs.c"); //$NON-NLS-1$ //$NON-NLS-2$ buffer.append(ENDL); buffer.append("\t@echo end generating scanner info for $@"); //$NON-NLS-1$ buffer.append(DENDL); } - File makefile = new File(fWorkingDirectory.toFile(), projectName+"_scd.mk"); //$NON-NLS-1$ + File makefile = new File(fWorkingDirectory.toFile(), getMakeFileName(projectName)); //$NON-NLS-1$ try { PrintStream ps = new PrintStream(new FileOutputStream(makefile)); ps.println(buffer.toString()); @@ -108,4 +121,40 @@ public class SCDMakefileGenerator extends DefaultRunSIProvider { return rc; } + + private String getMakeFileName(String projectName) { + String[] makeArgs = ScannerConfigUtil.tokenizeStringWithQuotes(fMakeCommand, "\"");//$NON-NLS-1$ + boolean found = false; + for(String arg : makeArgs) { + if(found) + return arg; + if(arg.equals("-f")) + found = true; + } + return projectName+"_scd.mk"; + } + + + protected String substituteDynamicVariables(String in) { + String string = in; +// TODO: replace it with Eclipse Dynamic Variable Resolver +// string = VariablesPlugin.getDefault().getStringVariableManager().performStringSubstitution(string, false); + string = string.replaceAll("\\$\\{project_name\\}", //$NON-NLS-1$ + resource.getProject().getName()); + string = string.replaceAll("\\$\\{plugin_state_location\\}", //$NON-NLS-1$ + MakeCorePlugin.getWorkingDirectory().toString()); + string = string.replaceAll("\\$\\{specs_file\\}", + GCCScannerConfigUtil.C_SPECS_FILE ); //$NON-NLS-1$ + return string; + } + + @Override + protected String[] getCommandLineOptions() { + return ScannerConfigUtil.tokenizeStringWithQuotes(fMakeCommand, "\""); + } + + @Override + protected IPath getCommandToLaunch() { + return new Path("make"); + } } |