Teach compiler identification to support values such as

  export CC='gcc -g -O2'

by separating the arguments on spaces.  We already do this for the
values of CFLAGS, CXXFLAGS, and FFLAGS.
---

Hi Alan,

The standard way to do the "set and forget" approach with environment
variables is

  export CC=gcc
  export CXX=g++
  export FC=gfortran
  export CFLAGS='-g -fvisibility=hidden'
  export CXXFLAGS='-g -fvisibility=hidden'
  export FFLAGS='-g -fvisibility=hidden'

An argument in the "CC" value is meant for wrappers like ccache:

  export CC="ccache gcc"
  export CXX="ccache g++"
  export FC="ccache gfortran"

which take only *one* argument.

Alan W. Irwin wrote:
> I expect the dropped -fPIC problem will occur whenever there are two flags
> of any kind.

It's not just the -fPIC that gets dropped.  The whole compiler
identification fails:

  -- The C compiler identification is unknown
  -- The CXX compiler identification is unknown
  -- The Fortran compiler identification is unknown

Once that happens then the flag lookup fails for all kinds of things
including -fPIC.  An error is reported in CMakeFiles/CMakeError.log:

  Compiling the C compiler identification source file "CMakeCCompilerId.c" 
failed.
  Compiler: /usr/bin/gcc -g -fvisibility=hidden
  ...
  cc1: error: unrecognised debug output level " -fvisibility=hidden"

I can reproduce this error message with

  $ touch foo.c
  $ gcc '-g -fvisibility=hidden' foo.c
  cc1: error: unrecognised debug output level " -fvisibility=hidden"

During compiler identification all arguments get treated as a single
argument with spaces.  AFAIK this never worked, but in earlier CMake
versions we used a different scheme to add -fPIC and other platform
flags that did not depend on the compiler identification (but which
failed in other cases).

Anyway, this patch should fix it.  Please test.

Thanks,
-Brad


 Modules/CMakeDetermineCompilerId.cmake |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/Modules/CMakeDetermineCompilerId.cmake 
b/Modules/CMakeDetermineCompilerId.cmake
index bddd6a1..4a800a8 100644
--- a/Modules/CMakeDetermineCompilerId.cmake
+++ b/Modules/CMakeDetermineCompilerId.cmake
@@ -19,6 +19,7 @@
 FUNCTION(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
   # Make sure the compiler arguments are clean.
   STRING(STRIP "${CMAKE_${lang}_COMPILER_ARG1}" CMAKE_${lang}_COMPILER_ID_ARG1)
+  STRING(REGEX REPLACE " +" ";" CMAKE_${lang}_COMPILER_ID_ARG1 
"${CMAKE_${lang}_COMPILER_ID_ARG1}")

   # Make sure user-specified compiler flags are used.
   IF(CMAKE_${lang}_FLAGS)
-- 
1.6.6.1

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to