[Cmake-commits] CMake branch, next, updated. v2.8.12.1-7223-gcec9e4f

Brad King brad.king at kitware.com
Wed Jan 22 08:47:37 EST 2014


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, next has been updated
       via  cec9e4fb914b7dc85b1414edc6393a9137ba68be (commit)
       via  e00db59d6c3f1c519f0f0d7a359d6d1be396b255 (commit)
       via  d2dea79b36833412884807e96821d1e68d620b4d (commit)
      from  1bf9ba29b69544f5f56f938729db044001105e90 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=cec9e4fb914b7dc85b1414edc6393a9137ba68be
commit cec9e4fb914b7dc85b1414edc6393a9137ba68be
Merge: 1bf9ba2 e00db59
Author:     Brad King <brad.king at kitware.com>
AuthorDate: Wed Jan 22 08:47:36 2014 -0500
Commit:     CMake Topic Stage <kwrobot at kitware.com>
CommitDate: Wed Jan 22 08:47:36 2014 -0500

    Merge topic 'qcc-id' into next
    
    e00db59d QNX: Introduce QCC compiler id for that QNX platform compiler.
    d2dea79b CMakeDetermine*Compiler: Fix typo 'lile' => 'like'


http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=e00db59d6c3f1c519f0f0d7a359d6d1be396b255
commit e00db59d6c3f1c519f0f0d7a359d6d1be396b255
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Mon Jan 20 17:57:40 2014 +0100
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jan 22 08:47:32 2014 -0500

    QNX: Introduce QCC compiler id for that QNX platform compiler.
    
    Introduce policy CMP0047 to control resetting the id for
    compatibility.
    
    De-duplicate content in the QNX platform file by including the GNU
    one. QNX is a form of GNU platform.
    
    Do not clear CMAKE_SHARED_LIBRARY_${lang}_FLAGS variables.  They
    are populated again later by the Compiler/GNU.cmake file anyway.
    
    Modify the CMAKE_CXX_COMPILE_OBJECT variable only when the QCC
    compiler id is in use, and the language is CXX.  Use the QNX
    recommended flag for QCC instead of the gcc compatible -x flag.
    
    Populate new module files to handle system includes and depfiles
    when using the QCC compiler.
    
    Remove code which unsets the system include and depfiles related
    variables.  When a GNU driver is used instead of the QCC one, the
    appropriate flags will be used.  These variables were previously
    cleared for lowest-common-denominator compatibility with both
    drivers.

diff --git a/Help/manual/cmake-policies.7.rst b/Help/manual/cmake-policies.7.rst
index 891333c..02f596b 100644
--- a/Help/manual/cmake-policies.7.rst
+++ b/Help/manual/cmake-policies.7.rst
@@ -98,3 +98,4 @@ All Policies
    /policy/CMP0044
    /policy/CMP0045
    /policy/CMP0046
+   /policy/CMP0047
diff --git a/Help/policy/CMP0047.rst b/Help/policy/CMP0047.rst
new file mode 100644
index 0000000..7b87c4d
--- /dev/null
+++ b/Help/policy/CMP0047.rst
@@ -0,0 +1,16 @@
+CMP0047
+-------
+
+Use QCC compiler id for the qcc drivers on QNX.
+
+CMake 2.8.12 and lower assigned the QNX qcc and QCC compiler drivers the "GNU"
+compiler id.
+
+The OLD behavior for this policy is to use the "GNU" compiler id for the qcc
+and QCC compiler drivers. The NEW behavior for this policy is to use the "QCC"
+compiler id for those drivers.
+
+This policy was introduced in CMake version 3.0.0.
+CMake version |release| warns when the policy is not set and uses
+OLD behavior.  Use the cmake_policy command to set it to OLD or
+NEW explicitly.
diff --git a/Modules/CMakeCCompilerId.c.in b/Modules/CMakeCCompilerId.c.in
index d53247a..52f9590 100644
--- a/Modules/CMakeCCompilerId.c.in
+++ b/Modules/CMakeCCompilerId.c.in
@@ -227,6 +227,10 @@ char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
 char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
 #endif
 
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto";
+#endif
+
 @CMAKE_C_COMPILER_ID_PLATFORM_CONTENT@
 @CMAKE_C_COMPILER_ID_ERROR_FOR_TEST@
 
diff --git a/Modules/CMakeCXXCompilerId.cpp.in b/Modules/CMakeCXXCompilerId.cpp.in
index b5d498d..25ceb3f 100644
--- a/Modules/CMakeCXXCompilerId.cpp.in
+++ b/Modules/CMakeCXXCompilerId.cpp.in
@@ -220,6 +220,10 @@ char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
 char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
 #endif
 
+#ifdef __QNXNTO__
+char const* qnxnto = "INFO" ":" "qnxnto";
+#endif
+
 @CMAKE_CXX_COMPILER_ID_PLATFORM_CONTENT@
 @CMAKE_CXX_COMPILER_ID_ERROR_FOR_TEST@
 
diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake
index 2bcf3d1..067892d 100644
--- a/Modules/CMakeDetermineCompilerId.cmake
+++ b/Modules/CMakeDetermineCompilerId.cmake
@@ -48,6 +48,21 @@ function(CMAKE_DETERMINE_COMPILER_ID lang flagvar src)
     CMAKE_DETERMINE_COMPILER_ID_VENDOR(${lang})
   endif()
 
+  if (COMPILER_QNXNTO AND CMAKE_${lang}_COMPILER_ID STREQUAL GNU)
+    execute_process(
+      COMMAND "${CMAKE_${lang}_COMPILER}"
+      -V
+      OUTPUT_VARIABLE output ERROR_VARIABLE output
+      RESULT_VARIABLE result
+      TIMEOUT 10
+      )
+    if (output MATCHES "targets available")
+      set(CMAKE_${lang}_COMPILER_ID QCC)
+      # http://community.qnx.com/sf/discussion/do/listPosts/projects.community/discussion.qnx_momentics_community_support.topc3555?_pagenum=2
+      # The qcc driver does not itself have a version.
+    endif()
+  endif()
+
   # if the format is unknown after all files have been checked, put "Unknown" in the cache
   if(NOT CMAKE_EXECUTABLE_FORMAT)
     set(CMAKE_EXECUTABLE_FORMAT "Unknown" CACHE INTERNAL "Executable file format")
@@ -369,6 +384,9 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
         string(REGEX REPLACE "^0+([0-9])" "\\1" SIMULATE_VERSION "${SIMULATE_VERSION}")
         string(REGEX REPLACE "\\.0+([0-9])" ".\\1" SIMULATE_VERSION "${SIMULATE_VERSION}")
       endif()
+      if("${info}" MATCHES ".*INFO:qnxnto")
+        set(COMPILER_QNXNTO 1)
+      endif()
     endforeach()
 
     # Detect the exact architecture from the PE header.
@@ -459,6 +477,7 @@ function(CMAKE_DETERMINE_COMPILER_ID_CHECK lang file)
   set(CMAKE_${lang}_SIMULATE_ID "${CMAKE_${lang}_SIMULATE_ID}" PARENT_SCOPE)
   set(CMAKE_${lang}_SIMULATE_VERSION "${CMAKE_${lang}_SIMULATE_VERSION}" PARENT_SCOPE)
   set(CMAKE_EXECUTABLE_FORMAT "${CMAKE_EXECUTABLE_FORMAT}" PARENT_SCOPE)
+  set(COMPILER_QNXNTO "${COMPILER_QNXNTO}" PARENT_SCOPE)
 endfunction()
 
 #-----------------------------------------------------------------------------
diff --git a/Modules/Platform/QNX-QCC-C.cmake b/Modules/Platform/QNX-QCC-C.cmake
new file mode 100644
index 0000000..e5721a7
--- /dev/null
+++ b/Modules/Platform/QNX-QCC-C.cmake
@@ -0,0 +1,4 @@
+
+include(Platform/QNX)
+
+__compiler_qcc(C)
diff --git a/Modules/Platform/QNX-QCC-CXX.cmake b/Modules/Platform/QNX-QCC-CXX.cmake
new file mode 100644
index 0000000..e490bbe
--- /dev/null
+++ b/Modules/Platform/QNX-QCC-CXX.cmake
@@ -0,0 +1,4 @@
+
+include(Platform/QNX)
+
+__compiler_qcc(CXX)
diff --git a/Modules/Platform/QNX.cmake b/Modules/Platform/QNX.cmake
index 9afde05..cc551bd 100644
--- a/Modules/Platform/QNX.cmake
+++ b/Modules/Platform/QNX.cmake
@@ -1,24 +1,6 @@
 set(QNXNTO 1)
 
-# The QNX GCC does not seem to have -isystem so remove the flag.
-set(CMAKE_INCLUDE_SYSTEM_FLAG_C)
-set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX)
-# ... Nor does the driver support appropriate flags to create depfiles.
-set(CMAKE_DEPFILE_FLAGS_C)
-set(CMAKE_DEPFILE_FLAGS_CXX)
-
 set(CMAKE_DL_LIBS "")
-set(CMAKE_SHARED_LIBRARY_C_FLAGS "")
-set(CMAKE_SHARED_LIBRARY_CXX_FLAGS "")
-set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared")
-set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Wl,-rpath,")
-set(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG_SEP ":")
-set(CMAKE_SHARED_LIBRARY_RPATH_LINK_C_FLAG "-Wl,-rpath-link,")
-set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-Wl,-soname,")
-set(CMAKE_EXE_EXPORTS_C_FLAG "-Wl,--export-dynamic")
-# http://www.qnx.com/developers/docs/6.4.0/neutrino/utilities/q/qcc.html#examples
-set(CMAKE_C_COMPILE_OPTIONS_TARGET "-V")
-set(CMAKE_CXX_COMPILE_OPTIONS_TARGET "-V")
 
 # Shared libraries with no builtin soname may not be linked safely by
 # specifying the file path.
@@ -32,8 +14,22 @@ foreach(type SHARED_LIBRARY SHARED_MODULE EXE)
   set(CMAKE_${type}_LINK_STATIC_C_FLAGS "-Wl,-Bstatic")
   set(CMAKE_${type}_LINK_DYNAMIC_C_FLAGS "-Wl,-Bdynamic")
 endforeach()
-# force the language to be c++ since qnx only has gcc and not g++ and c++?
-set(CMAKE_CXX_COMPILE_OBJECT
-  "<CMAKE_CXX_COMPILER> -x c++ <DEFINES> <FLAGS> -o <OBJECT> -c <SOURCE>")
 
-include(Platform/UnixPaths)
+include(Platform/GNU)
+unset(CMAKE_LIBRARY_ARCHITECTURE_REGEX)
+
+macro(__compiler_qcc lang)
+  # http://www.qnx.com/developers/docs/6.4.0/neutrino/utilities/q/qcc.html#examples
+  set(CMAKE_${lang}_COMPILE_OPTIONS_TARGET "-V")
+
+  set(CMAKE_INCLUDE_SYSTEM_FLAG_${lang} "-Wp,-isystem,")
+  set(CMAKE_DEPFILE_FLAGS_${lang} "-Wc,-MMD,<DEPFILE>,-MT,<OBJECT>,-MF,<DEPFILE>")
+
+  if (lang STREQUAL CXX)
+    # If the toolchain uses qcc for CMAKE_CXX_COMPILER instead of QCC, the
+    # default for the driver is not c++.
+    set(CMAKE_CXX_COMPILE_OBJECT
+    "<CMAKE_CXX_COMPILER> -lang-c++ <DEFINES> <FLAGS> -o <OBJECT> -c <SOURCE>")
+  endif()
+
+endmacro()
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index 8a7eee4..03486d8 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -748,7 +748,12 @@ void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
 {
   std::string compilerIdVar = "CMAKE_" + lang + "_COMPILER_ID";
   const char* compilerId = mf->GetDefinition(compilerIdVar.c_str());
-  if(compilerId && strcmp(compilerId, "AppleClang") == 0)
+  if(!compilerId)
+    {
+    return;
+    }
+
+  if(strcmp(compilerId, "AppleClang") == 0)
     {
     cmPolicies* policies = this->CMakeInstance->GetPolicies();
     switch(mf->GetPolicyStatus(cmPolicies::CMP0025))
@@ -778,6 +783,37 @@ void cmGlobalGenerator::CheckCompilerIdCompatibility(cmMakefile* mf,
         break;
       }
     }
+
+  if(strcmp(compilerId, "QCC") == 0)
+    {
+    cmPolicies* policies = this->CMakeInstance->GetPolicies();
+    switch(mf->GetPolicyStatus(cmPolicies::CMP0047))
+      {
+      case cmPolicies::WARN:
+        if(!this->CMakeInstance->GetIsInTryCompile())
+          {
+          cmOStringStream w;
+          w << policies->GetPolicyWarning(cmPolicies::CMP0047) << "\n"
+            "Converting " << lang <<
+            " compiler id \"QCC\" to \"GNU\" for compatibility."
+            ;
+          mf->IssueMessage(cmake::AUTHOR_WARNING, w.str());
+          }
+      case cmPolicies::OLD:
+        // OLD behavior is to convert QCC to GNU.
+        mf->AddDefinition(compilerIdVar.c_str(), "GNU");
+        break;
+      case cmPolicies::REQUIRED_IF_USED:
+      case cmPolicies::REQUIRED_ALWAYS:
+        mf->IssueMessage(
+          cmake::FATAL_ERROR,
+          policies->GetRequiredPolicyError(cmPolicies::CMP0047)
+          );
+      case cmPolicies::NEW:
+        // NEW behavior is to keep QCC.
+        break;
+      }
+    }
 }
 
 //----------------------------------------------------------------------------
diff --git a/Source/cmPolicies.cxx b/Source/cmPolicies.cxx
index 020a782..a1451f1 100644
--- a/Source/cmPolicies.cxx
+++ b/Source/cmPolicies.cxx
@@ -336,6 +336,11 @@ cmPolicies::cmPolicies()
     CMP0046, "CMP0046",
     "Error on non-existent dependency in add_dependencies.",
     3,0,0,0, cmPolicies::WARN);
+
+  this->DefinePolicy(
+    CMP0047, "CMP0047",
+    "Use QCC compiler id for the qcc drivers on QNX.",
+    3,0,0,0, cmPolicies::WARN);
 }
 
 cmPolicies::~cmPolicies()
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index 38f47f1..d1bba7b 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -100,6 +100,7 @@ public:
     CMP0044, ///< Case sensitive <LANG>_COMPILER_ID generator expressions
     CMP0045, ///< Error on non-existent target in get_target_property
     CMP0046, ///< Error on non-existent dependency in add_dependencies
+    CMP0047, ///< Use QCC compiler id for the qcc drivers on QNX.
 
     /** \brief Always the last entry.
      *

http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d2dea79b36833412884807e96821d1e68d620b4d
commit d2dea79b36833412884807e96821d1e68d620b4d
Author:     Stephen Kelly <steveire at gmail.com>
AuthorDate: Tue Jan 21 13:17:36 2014 +0100
Commit:     Brad King <brad.king at kitware.com>
CommitDate: Wed Jan 22 08:43:58 2014 -0500

    CMakeDetermine*Compiler: Fix typo 'lile' => 'like'

diff --git a/Modules/CMakeDetermineASMCompiler.cmake b/Modules/CMakeDetermineASMCompiler.cmake
index 247de6f..ca7eb8b 100644
--- a/Modules/CMakeDetermineASMCompiler.cmake
+++ b/Modules/CMakeDetermineASMCompiler.cmake
@@ -124,7 +124,7 @@ endif()
 # e.g. powerpc-linux-gas, arm-elf-gas or i586-mingw32msvc-gas , optionally
 # with a 3-component version number at the end
 # The other tools of the toolchain usually have the same prefix
-# NAME_WE cannot be used since then this test will fail for names lile
+# NAME_WE cannot be used since then this test will fail for names like
 # "arm-unknown-nto-qnx6.3.0-gas.exe", where BASENAME would be
 # "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
 if (NOT _CMAKE_TOOLCHAIN_PREFIX)
diff --git a/Modules/CMakeDetermineCCompiler.cmake b/Modules/CMakeDetermineCCompiler.cmake
index 438a98a..c3f5a66 100644
--- a/Modules/CMakeDetermineCCompiler.cmake
+++ b/Modules/CMakeDetermineCCompiler.cmake
@@ -149,7 +149,7 @@ endif ()
 # e.g. powerpc-linux-gcc, arm-elf-gcc or i586-mingw32msvc-gcc, optionally
 # with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
 # The other tools of the toolchain usually have the same prefix
-# NAME_WE cannot be used since then this test will fail for names lile
+# NAME_WE cannot be used since then this test will fail for names like
 # "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
 # "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
 if (CMAKE_CROSSCOMPILING  AND NOT _CMAKE_TOOLCHAIN_PREFIX)
diff --git a/Modules/CMakeDetermineCXXCompiler.cmake b/Modules/CMakeDetermineCXXCompiler.cmake
index 5f9d9bf..21864f1 100644
--- a/Modules/CMakeDetermineCXXCompiler.cmake
+++ b/Modules/CMakeDetermineCXXCompiler.cmake
@@ -145,7 +145,7 @@ endif ()
 # e.g. powerpc-linux-g++, arm-elf-g++ or i586-mingw32msvc-g++ , optionally
 # with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
 # The other tools of the toolchain usually have the same prefix
-# NAME_WE cannot be used since then this test will fail for names lile
+# NAME_WE cannot be used since then this test will fail for names like
 # "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
 # "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
 
diff --git a/Modules/CMakeDetermineFortranCompiler.cmake b/Modules/CMakeDetermineFortranCompiler.cmake
index 8e2065d..4c8a8f2 100644
--- a/Modules/CMakeDetermineFortranCompiler.cmake
+++ b/Modules/CMakeDetermineFortranCompiler.cmake
@@ -193,7 +193,7 @@ endif ()
 # e.g. powerpc-linux-gfortran, arm-elf-gfortran or i586-mingw32msvc-gfortran , optionally
 # with a 3-component version number at the end (e.g. arm-eabi-gcc-4.5.2).
 # The other tools of the toolchain usually have the same prefix
-# NAME_WE cannot be used since then this test will fail for names lile
+# NAME_WE cannot be used since then this test will fail for names like
 # "arm-unknown-nto-qnx6.3.0-gcc.exe", where BASENAME would be
 # "arm-unknown-nto-qnx6" instead of the correct "arm-unknown-nto-qnx6.3.0-"
 if (CMAKE_CROSSCOMPILING  AND NOT _CMAKE_TOOLCHAIN_PREFIX)

-----------------------------------------------------------------------

Summary of changes:


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list