SVN commit 1304626 by lunakl: make --build-native create env with compilers that are available M +2 -1 client.h M +8 -34 local.cpp M +15 -6 main.cpp --- trunk/icecream/client/client.h #1304625:1304626 @@ -47,9 +47,10 @@ /* In local.cpp. */ extern int build_local (CompileJob& job, MsgChannel *daemon, struct rusage *usage =0); -extern std::string find_compiler( CompileJob::Language lang ); extern std::string find_compiler( const CompileJob& job ); extern bool compiler_is_clang( const CompileJob& job ); +extern bool compiler_only_rewrite_includes( const CompileJob& job ); +extern std::string compiler_path_lookup(const std::string& compiler); /* In remote.cpp - permill is the probability it will be compiled three times */ extern int build_remote (CompileJob &job, MsgChannel *scheduler, const Environments &envs, int permill); --- trunk/icecream/client/local.cpp #1304625:1304626 @@ -42,33 +42,8 @@ #define CLIENT_DEBUG 0 -/* - * Get the name of the compiler depedant on the - * language of the job and the environment - * variable set. This is useful for native cross-compilers. - * (arm-linux-gcc for example) - */ - -static string get_compiler_name( CompileJob::Language lang ) +string compiler_path_lookup(const string& compiler) { - string compiler_name = "gcc"; - - const char* env; - if ( (env = getenv( "ICECC_CC" )) ) - compiler_name = env; - - if (lang == CompileJob::Lang_CXX) { - compiler_name = "g++"; - if ((env = getenv ("ICECC_CXX"))) - compiler_name = env; - } - - return compiler_name; -} - - -static string path_lookup(const string& compiler) -{ if ( compiler.at( 0 ) == '/' ) return compiler; @@ -123,6 +98,12 @@ return best_match; } +/* + * Get the name of the compiler depedant on the + * language of the job and the environment + * variable set. This is useful for native cross-compilers. + * (arm-linux-gcc for example) + */ string find_compiler( const CompileJob& job ) { if (job.language() == CompileJob::Lang_C) { @@ -133,16 +114,9 @@ if (const char* env = getenv ("ICECC_CXX")) return env; } - return path_lookup(job.compilerName()); + return compiler_path_lookup(job.compilerName()); } -string find_compiler( CompileJob::Language lang ) -{ - string compiler = get_compiler_name( lang ); - - return path_lookup(compiler); -} - bool compiler_is_clang( const CompileJob& job ) { return job.compilerName().find("clang") != string::npos; --- trunk/icecream/client/main.cpp #1304625:1304626 @@ -157,7 +157,7 @@ static int create_native() { struct stat st; - string gcc, gpp; + string gcc, gpp, clang; // perhaps we're on gentoo if ( !lstat("/usr/bin/gcc-config", &st) ) { @@ -165,11 +165,19 @@ gcc=gccpath + "gcc"; gpp=gccpath + "g++"; } else { - gcc = find_compiler( CompileJob::Lang_C ); - gpp = find_compiler( CompileJob::Lang_CXX ); + gcc = compiler_path_lookup( "gcc" ); + gpp = compiler_path_lookup( "g++" ); } - if ( gcc.empty() || gpp.empty()) + clang = compiler_path_lookup( "clang" ); + + // both C and C++ compiler are required + if ( gcc.empty()) + gpp.clear(); + if ( gpp.empty()) + gcc.clear(); + + if ( gcc.empty() && gpp.empty() && clang.empty()) return 1; if ( lstat( PLIBDIR "/icecc-create-env", &st ) ) { @@ -177,11 +185,12 @@ return 1; } - char **argv = new char*[4]; + char **argv = new char*[5]; argv[0] = strdup( PLIBDIR "/icecc-create-env" ); argv[1] = strdup( gcc.c_str() ); argv[2] = strdup( gpp.c_str() ); - argv[3] = NULL; + argv[3] = strdup( clang.c_str() ); + argv[4] = NULL; return execv(argv[0], argv);