1
0
Эх сурвалжийг харах

Merge topic 'objc-env-vars'

13ea190725 Help: Add 3.17.3 release note for Objective C/C++ compiler selection
16bf978e0c Merge branch 'backport-3.16-objc-env-vars' into objc-env-vars
67b9f55d46 Objective C/C++: Honor CC and CXX env vars to select compiler
ab9be6662f Help: Document OBJC and OBJCXX env vars for Objective C/C++ compilers

Acked-by: Kitware Robot <[email protected]>
Merge-request: !4746
Brad King 5 жил өмнө
parent
commit
a9559ccba5

+ 14 - 0
Help/envvar/OBJC.rst

@@ -0,0 +1,14 @@
+OBJC
+----
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling ``OBJC`` language files. Will only be used
+by CMake on the first configuration to determine ``OBJC`` compiler, after
+which the value for ``OBJC`` is stored in the cache as
+:variable:`CMAKE_OBJC_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration
+run (including the first), the environment variable will be ignored if the
+:variable:`CMAKE_OBJC_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
+
+If ``OBJC`` is not defined, the :envvar:`CC` environment variable will
+be checked instead.

+ 14 - 0
Help/envvar/OBJCXX.rst

@@ -0,0 +1,14 @@
+OBJCXX
+------
+
+.. include:: ENV_VAR.txt
+
+Preferred executable for compiling ``OBJCXX`` language files. Will only be used
+by CMake on the first configuration to determine ``OBJCXX`` compiler, after
+which the value for ``OBJCXX`` is stored in the cache as
+:variable:`CMAKE_OBJCXX_COMPILER <CMAKE_<LANG>_COMPILER>`. For any configuration
+run (including the first), the environment variable will be ignored if the
+:variable:`CMAKE_OBJCXX_COMPILER <CMAKE_<LANG>_COMPILER>` variable is defined.
+
+If ``OBJCXX`` is not defined, the :envvar:`CXX` environment variable will
+be checked instead.

+ 2 - 0
Help/manual/cmake-env-variables.7.rst

@@ -63,6 +63,8 @@ Environment Variables for Languages
    /envvar/CXXFLAGS
    /envvar/CXXFLAGS
    /envvar/FC
    /envvar/FC
    /envvar/FFLAGS
    /envvar/FFLAGS
+   /envvar/OBJC
+   /envvar/OBJCXX
    /envvar/RC
    /envvar/RC
    /envvar/RCFLAGS
    /envvar/RCFLAGS
    /envvar/SWIFTC
    /envvar/SWIFTC

+ 7 - 0
Help/release/3.16.rst

@@ -303,3 +303,10 @@ Changes made since CMake 3.16.0 include the following.
   Additionally, the modules no longer expose their internal ``_Python*``
   Additionally, the modules no longer expose their internal ``_Python*``
   cache entries publicly.  CMake 3.16.0 through 3.16.4 accidentally
   cache entries publicly.  CMake 3.16.0 through 3.16.4 accidentally
   made them visible as advanced cache entries.
   made them visible as advanced cache entries.
+
+3.16.7
+------
+
+* Selection of the Objective C or C++ compiler now considers the
+  :envvar:`CC` or :envvar:`CXX` environment variable if the
+  :envvar:`OBJC` or :envvar:`OBJCXX` environment variable is not set.

+ 4 - 0
Help/release/3.17.rst

@@ -337,6 +337,10 @@ Changes made since CMake 3.17.0 include the following.
 3.17.3
 3.17.3
 ------
 ------
 
 
+* Selection of the Objective C or C++ compiler now considers the
+  :envvar:`CC` or :envvar:`CXX` environment variable if the
+  :envvar:`OBJC` or :envvar:`OBJCXX` environment variable is not set.
+
 * The :module:`FindPkgConfig` module now extracts include directories
 * The :module:`FindPkgConfig` module now extracts include directories
   prefixed with ``-isystem`` into the ``*_INCLUDE_DIRS`` variables and
   prefixed with ``-isystem`` into the ``*_INCLUDE_DIRS`` variables and
   :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target properties.
   :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` target properties.

+ 12 - 9
Modules/CMakeDetermineOBJCCompiler.cmake

@@ -34,16 +34,19 @@ else()
   if(NOT CMAKE_OBJC_COMPILER)
   if(NOT CMAKE_OBJC_COMPILER)
     set(CMAKE_OBJC_COMPILER_INIT NOTFOUND)
     set(CMAKE_OBJC_COMPILER_INIT NOTFOUND)
 
 
-    # prefer the environment variable OBJC
-    if($ENV{OBJC} MATCHES ".+")
-      get_filename_component(CMAKE_OBJC_COMPILER_INIT $ENV{OBJC} PROGRAM PROGRAM_ARGS CMAKE_OBJC_FLAGS_ENV_INIT)
-      if(CMAKE_OBJC_FLAGS_ENV_INIT)
-        set(CMAKE_OBJC_COMPILER_ARG1 "${CMAKE_OBJC_FLAGS_ENV_INIT}" CACHE STRING "First argument to Objective-C compiler")
+    # prefer the environment variable OBJC or CC
+    foreach(var OBJC CC)
+      if($ENV{${var}} MATCHES ".+")
+        get_filename_component(CMAKE_OBJC_COMPILER_INIT $ENV{${var}} PROGRAM PROGRAM_ARGS CMAKE_OBJC_FLAGS_ENV_INIT)
+        if(CMAKE_OBJC_FLAGS_ENV_INIT)
+          set(CMAKE_OBJC_COMPILER_ARG1 "${CMAKE_OBJC_FLAGS_ENV_INIT}" CACHE STRING "First argument to Objective-C compiler")
+        endif()
+        if(NOT EXISTS ${CMAKE_OBJC_COMPILER_INIT})
+          message(FATAL_ERROR "Could not find compiler set in environment variable ${var}:\n  $ENV{${var}}")
+        endif()
+        break()
       endif()
       endif()
-      if(NOT EXISTS ${CMAKE_OBJC_COMPILER_INIT})
-        message(FATAL_ERROR "Could not find compiler set in environment variable OBJC:\n$ENV{OBJC}.")
-      endif()
-    endif()
+    endforeach()
 
 
     # next try prefer the compiler specified by the generator
     # next try prefer the compiler specified by the generator
     if(CMAKE_GENERATOR_OBJC)
     if(CMAKE_GENERATOR_OBJC)

+ 12 - 9
Modules/CMakeDetermineOBJCXXCompiler.cmake

@@ -36,16 +36,19 @@ else()
   if(NOT CMAKE_OBJCXX_COMPILER)
   if(NOT CMAKE_OBJCXX_COMPILER)
     set(CMAKE_OBJCXX_COMPILER_INIT NOTFOUND)
     set(CMAKE_OBJCXX_COMPILER_INIT NOTFOUND)
 
 
-    # prefer the environment variable OBJCXX
-    if($ENV{OBJCXX} MATCHES ".+")
-      get_filename_component(CMAKE_OBJCXX_COMPILER_INIT $ENV{OBJCXX} PROGRAM PROGRAM_ARGS CMAKE_OBJCXX_FLAGS_ENV_INIT)
-      if(CMAKE_OBJCXX_FLAGS_ENV_INIT)
-        set(CMAKE_OBJCXX_COMPILER_ARG1 "${CMAKE_OBJCXX_FLAGS_ENV_INIT}" CACHE STRING "First argument to Objective-C++ compiler")
+    # prefer the environment variable OBJCXX or CXX
+    foreach(var OBJCXX CXX)
+      if($ENV{${var}} MATCHES ".+")
+        get_filename_component(CMAKE_OBJCXX_COMPILER_INIT $ENV{${var}} PROGRAM PROGRAM_ARGS CMAKE_OBJCXX_FLAGS_ENV_INIT)
+        if(CMAKE_OBJCXX_FLAGS_ENV_INIT)
+          set(CMAKE_OBJCXX_COMPILER_ARG1 "${CMAKE_OBJCXX_FLAGS_ENV_INIT}" CACHE STRING "First argument to Objective-C++ compiler")
+        endif()
+        if(NOT EXISTS ${CMAKE_OBJCXX_COMPILER_INIT})
+          message(FATAL_ERROR "Could not find compiler set in environment variable ${var}:\n  $ENV{${var}}")
+        endif()
+        break()
       endif()
       endif()
-      if(NOT EXISTS ${CMAKE_OBJCXX_COMPILER_INIT})
-        message(FATAL_ERROR "Could not find compiler set in environment variable OBJCXX:\n$ENV{OBJCXX}.\n${CMAKE_OBJCXX_COMPILER_INIT}")
-      endif()
-    endif()
+    endforeach()
 
 
     # next prefer the generator specified compiler
     # next prefer the generator specified compiler
     if(CMAKE_GENERATOR_OBJCXX)
     if(CMAKE_GENERATOR_OBJCXX)