diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.ndk/src/com/android/ide/eclipse/ndk/internal/build/NdkEnvSupplier.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.ndk/src/com/android/ide/eclipse/ndk/internal/build/NdkEnvSupplier.java | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.ndk/src/com/android/ide/eclipse/ndk/internal/build/NdkEnvSupplier.java b/eclipse/plugins/com.android.ide.eclipse.ndk/src/com/android/ide/eclipse/ndk/internal/build/NdkEnvSupplier.java new file mode 100644 index 000000000..65645537f --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.ndk/src/com/android/ide/eclipse/ndk/internal/build/NdkEnvSupplier.java @@ -0,0 +1,121 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ide.eclipse.ndk.internal.build; + +import org.eclipse.cdt.managedbuilder.core.IConfiguration; +import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable; +import org.eclipse.cdt.managedbuilder.envvar.IConfigurationEnvironmentVariableSupplier; +import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider; +import org.eclipse.core.runtime.Platform; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +public class NdkEnvSupplier implements IConfigurationEnvironmentVariableSupplier { + + private static Map<String, IBuildEnvironmentVariable> mEnvVars; + + private synchronized void init() { + if (mEnvVars != null) + return; + + mEnvVars = new HashMap<String, IBuildEnvironmentVariable>(); + + if (Platform.getOS().equals(Platform.OS_WIN32)) { + // For Windows, need to add a shell to the path + IBuildEnvironmentVariable path = new IBuildEnvironmentVariable() { + @Override + public String getName() { + return "PATH"; //$NON-NLS-1$ + } + + @Override + public String getValue() { + // I'm giving MSYS precedence over Cygwin. I'm biased that + // way :) + // TODO using the default paths for now, need smarter ways + // to get at them + // Alternatively the user can add the bin to their path + // themselves. + File bin = new File("C:\\MinGW\\msys\\1.0\\bin"); //$NON-NLS-1$ + if (bin.isDirectory()) { + return bin.getAbsolutePath(); + } + + bin = new File("C:\\cygwin\\bin"); //$NON-NLS-1$ + if (bin.isDirectory()) + return bin.getAbsolutePath(); + + return null; + } + + @Override + public int getOperation() { + return ENVVAR_PREPEND; + } + + @Override + public String getDelimiter() { + return ";"; //$NON-NLS-1$ + } + }; + if (path.getValue() != null) + mEnvVars.put(path.getName(), path); + + // Since we're using real paths, need to tell cygwin it's OK + IBuildEnvironmentVariable cygwin = new IBuildEnvironmentVariable() { + @Override + public String getName() { + return "CYGWIN"; //$NON-NLS-1$ + } + + @Override + public String getValue() { + return "nodosfilewarning"; //$NON-NLS-1$ + } + + @Override + public int getOperation() { + return ENVVAR_REPLACE; + } + + @Override + public String getDelimiter() { + return null; + } + }; + + mEnvVars.put(cygwin.getName(), cygwin); + } + } + + @Override + public IBuildEnvironmentVariable getVariable(String variableName, + IConfiguration configuration, IEnvironmentVariableProvider provider) { + init(); + return mEnvVars.get(variableName); + } + + @Override + public IBuildEnvironmentVariable[] getVariables( + IConfiguration configuration, IEnvironmentVariableProvider provider) { + init(); + return mEnvVars.values().toArray(new IBuildEnvironmentVariable[mEnvVars.size()]); + } + +} |