From d1e09a669dca08b56c7d29056368505d566e5565 Mon Sep 17 00:00:00 2001 From: Sean Evoy Date: Thu, 29 Jul 2004 12:56:33 +0000 Subject: [PATCH] Commit for Vlad Hirsl -- The default external scanner info collector was having problems with the output of GCC in non-utf8 locales. It now makes sure the locale is set to utf-8 when it runs GCC on *nix systems --- .../DefaultExternalScannerInfoProvider.java | 9 +++++++++ .../core/scannerconfig/ScannerInfoCollector.java | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DefaultExternalScannerInfoProvider.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DefaultExternalScannerInfoProvider.java index 68ec365c9a2..35bd88e0629 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DefaultExternalScannerInfoProvider.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DefaultExternalScannerInfoProvider.java @@ -52,6 +52,7 @@ public class DefaultExternalScannerInfoProvider implements IExternalScannerInfoP private static final String EXTERNAL_SI_PROVIDER_ERROR = "ExternalScannerInfoProvider.Provider_Error"; //$NON-NLS-1$ private static final String EXTERNAL_SI_PROVIDER_CONSOLE_ID = MakeCorePlugin.getUniqueIdentifier() + ".ExternalScannerInfoProviderConsole"; //$NON-NLS-1$ + private static final String LANG_ENV_VAR = "LANG"; private IPath fWorkingDirectory; private IPath fCompileCommand; @@ -224,6 +225,14 @@ public class DefaultExternalScannerInfoProvider implements IExternalScannerInfoP Properties props = launcher.getEnvironment(); props.put("CWD", fWorkingDirectory.toOSString()); //$NON-NLS-1$ props.put("PWD", fWorkingDirectory.toOSString()); //$NON-NLS-1$ + // On POSIX (Linux, UNIX) systems reset LANG variable to English with UTF-8 encoding + // since GNU compilers can handle only UTF-8 characters. English language is chosen + // beacuse GNU compilers inconsistently handle different locales when generating + // output of the 'gcc -v' command. Include paths with locale characters will be + // handled properly regardless of the language as long as the encoding is set to UTF-8. + if (props.containsKey(LANG_ENV_VAR)) { + props.put(LANG_ENV_VAR, "en_US.UTF-8"); //$NON-NLS-1$ + } String[] env = null; ArrayList envList = new ArrayList(); Enumeration names = props.propertyNames(); diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoCollector.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoCollector.java index ab436e7104f..16f9eb468bd 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoCollector.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoCollector.java @@ -36,6 +36,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.ISafeRunnable; +import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.SubProgressMonitor; @@ -372,6 +373,9 @@ public class ScannerInfoCollector implements IScannerInfoCollector { * @param monitor */ public synchronized void updateScannerConfiguration(IProject project, IProgressMonitor monitor) throws CoreException { + if (monitor == null) { + monitor = new NullProgressMonitor(); + } currentProject = project; String projectName = project.getName(); // check TSO for the project