11
11
package org .eclipse .cdt .build .gcc .core ;
12
12
13
13
import java .nio .file .Path ;
14
+ import java .util .ArrayList ;
15
+ import java .util .Arrays ;
16
+ import java .util .List ;
14
17
15
18
import org .eclipse .cdt .core .build .IToolChainProvider ;
19
+ import org .eclipse .cdt .core .envvar .EnvironmentVariable ;
16
20
import org .eclipse .cdt .core .envvar .IEnvironmentVariable ;
17
21
18
22
/**
@@ -28,7 +32,29 @@ public class ClangToolChain extends GCCToolChain {
28
32
29
33
public ClangToolChain (IToolChainProvider provider , Path pathToToolChain , String arch ,
30
34
IEnvironmentVariable [] envVars ) {
31
- super (provider , pathToToolChain , arch , envVars );
35
+ super (provider , pathToToolChain , arch , addClangEnvVars (envVars ));
36
+ }
37
+
38
+ private static IEnvironmentVariable [] addClangEnvVars (IEnvironmentVariable [] envVars ) {
39
+ List <IEnvironmentVariable > envVarsNew = new ArrayList <>(Arrays .asList (envVars ));
40
+ /*
41
+ * Set CC and CXX environment variables for clang and clang++. This is equivalent to setting these in the
42
+ * CMakeLists.txt:
43
+ * set(CMAKE_C_COMPILER clang)
44
+ * set(CMAKE_CXX_COMPILER clang++)
45
+ */
46
+ addIfAbsent ("cc" , "clang" , envVarsNew ); //$NON-NLS-1$ //$NON-NLS-2$
47
+ addIfAbsent ("cxx" , "clang++" , envVarsNew ); //$NON-NLS-1$ //$NON-NLS-2$
48
+
49
+ return envVarsNew .toArray (new EnvironmentVariable [0 ]);
50
+ }
51
+
52
+ private static void addIfAbsent (String name , String value , List <IEnvironmentVariable > envVarsNew ) {
53
+ boolean isAbsent = envVarsNew .stream ().noneMatch (ev -> ev .getName ().equals (name ));
54
+
55
+ if (isAbsent ) {
56
+ envVarsNew .add (new EnvironmentVariable (name , value , IEnvironmentVariable .ENVVAR_APPEND , null ));
57
+ }
32
58
}
33
59
34
60
@ Override
0 commit comments