From f4284ba6bdbe682b9d6737ba2d8ac9c7fbc1f0f5 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Mon, 22 Feb 2010 20:55:27 +0100 Subject: [PATCH] Fix BUILD/compile-pentium64-xxx scripts, when ccache is present. Fix contains of : - splitting CC/CXX if there are more that 2 space-delimited tokens, add the rest to CFLAGS (in this case CC was set to "ccache gcc --pipe", and this broke recognition of gcc compiler as CMake understands CC consisting of 2 space delimited tokens but not more) - add my_new.cc to mysys fle list if C++ operator new is not found. Always, not only for gcc (the original problem was that missing operator new when compiling with CXX=gcc) --- cmake/configure.pl | 32 ++++++++++++++++++++++++++++++++ mysys/CMakeLists.txt | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/cmake/configure.pl b/cmake/configure.pl index 52c57011ce0..5886a554789 100644 --- a/cmake/configure.pl +++ b/cmake/configure.pl @@ -38,6 +38,38 @@ sub set_installdir } } +# CMake understands CC and CXX env.variables correctly, if they contain 1 or 2 tokens +# e.g CXX=gcc and CXX="ccache gcc" are ok. However it could have a problem if there +# (recognizing gcc) with more tokens ,e.g CXX="ccache gcc --pipe". +# The problem is simply fixed by splitting compiler and flags, e.g +# CXX="ccache gcc --pipe" => CXX=ccache gcc CXXFLAGS=--pipe + +sub check_compiler +{ + my ($varname, $flagsvarname) = @_; + my @tokens = split(/ /,$ENV{$varname}); + if($#tokens >= 2) + { + $ENV{$varname} = $tokens[0]." ".$tokens[1]; + my $flags; + + for(my $i=2; $i<=$#tokens; $i++) + { + $flags= $flags." ".$tokens[$i]; + } + if(defined $ENV{$flagsvarname}) + { + $flags = $flags." ".$ENV{$flagsvarname}; + } + $ENV{$flagsvarname}=$flags; + print("$varname=$ENV{$varname}\n"); + print("$flagsvarname=$ENV{$flagsvarname}\n"); + } +} + +check_compiler("CC", "CFLAGS"); +check_compiler("CXX", "CXXFLAGS"); + foreach my $option (@ARGV) { if (substr ($option, 0, 2) == "--") diff --git a/mysys/CMakeLists.txt b/mysys/CMakeLists.txt index c035a2f0b49..2fbaac7fe72 100755 --- a/mysys/CMakeLists.txt +++ b/mysys/CMakeLists.txt @@ -42,7 +42,7 @@ IF (WIN32) SET (MYSYS_SOURCES ${MYSYS_SOURCES} my_winthread.c my_wincond.c my_winerr.c my_winfile.c my_windac.c my_conio.c) ENDIF() -IF(CMAKE_COMPILER_IS_GNUCC AND NOT HAVE_CXX_NEW) +IF(NOT HAVE_CXX_NEW) # gcc as C++ compiler does not have new/delete SET(MYSYS_SOURCES ${MYSYS_SOURCES} my_new.cc) ADD_DEFINITIONS( -DUSE_MYSYS_NEW)