瀏覽代碼

Pass CMAKE_OSX_{ARCHITECTURES, SYSROOT, DEPLOYMENT_TARGET} to external project

Jean-Christophe Fillion-Robin 14 年之前
父節點
當前提交
c31b382bf9

+ 45 - 0
CMake/ctkBlockSetCMakeOSXVariables.cmake

@@ -0,0 +1,45 @@
+###########################################################################
+#
+#  Library:   CTK
+#
+#  Copyright (c) Kitware Inc.
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.commontk.org/LICENSE
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+#
+###########################################################################
+
+#
+# ctkBlockSetCMakeOSXVariables
+#
+
+#
+# Adapted from Paraview/Superbuild/CMakeLists.txt
+#
+
+# Note: Change architecture *before* any enable_language() or project()
+#       calls so that it's set properly to detect 64-bit-ness...
+#       Currently, we default to 10.5. Obviously this may need to be re-evaluated when Lion comes out.
+#
+if(APPLE)
+  if(NOT CMAKE_OSX_DEPLOYMENT_TARGET OR "${CMAKE_OSX_DEPLOYMENT_TARGET}" STREQUAL "")
+    set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "force build for 64-bit Leopard" FORCE)
+    set(CMAKE_OSX_DEPLOYMENT_TARGET "10.5" CACHE STRING "force build for 64-bit Leopard" FORCE)
+    set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.5.sdk" CACHE PATH "force build for 64-bit Leopard" FORCE)
+  endif()
+
+  if(NOT "${CMAKE_OSX_SYSROOT}" STREQUAL "")
+    if(NOT EXISTS "${CMAKE_OSX_SYSROOT}")
+      message(FATAL_ERROR "error: CMAKE_OSX_SYSROOT='${CMAKE_OSX_SYSROOT}' does not exist")
+    endif()
+  endif()
+endif()

+ 9 - 0
CMakeExternals/DCMTK.cmake

@@ -20,6 +20,14 @@ IF(${add_project})
   
   IF(NOT DEFINED DCMTK_DIR)
 #     MESSAGE(STATUS "Adding project:${proj}")
+    # Set CMake OSX variable to pass down the external project
+    set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS)
+    if(APPLE)
+      list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS
+        -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+        -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
+    endif()
 
     ExternalProject_Add(${proj}
       SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}
@@ -31,6 +39,7 @@ IF(${add_project})
       BUILD_COMMAND ""
       CMAKE_ARGS
         ${ep_common_args}
+        ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
         -DBUILD_TESTING:BOOL=OFF
         -DDCMTK_BUILD_APPS:BOOL=ON # Build also dmctk tools (movescu, storescp, ...)
       )

+ 10 - 0
CMakeExternals/ITK.cmake

@@ -17,6 +17,15 @@ IF(${add_project})
   SET(ITK_DEPENDS ${proj})
   
   IF(NOT DEFINED ITK_DIR)
+    # Set CMake OSX variable to pass down the external project
+    set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS)
+    if(APPLE)
+      list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS
+        -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+        -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
+    endif()
+
 #     MESSAGE(STATUS "Adding project:${proj}")
     ExternalProject_Add(${proj}
       SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}
@@ -28,6 +37,7 @@ IF(${add_project})
       CMAKE_GENERATOR ${gen}
       CMAKE_ARGS
         ${ep_common_args}
+        ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
         -DBUILD_TESTING:BOOL=OFF
         -DBUILD_EXAMPLES:BOOL=OFF
         -DBUILD_SHARED_LIBS:BOOL=ON

+ 10 - 0
CMakeExternals/KWStyle.cmake

@@ -15,6 +15,15 @@ IF(CTK_USE_KWSTYLE)
   SET(kwstyle_DEPENDS ${proj})
   
   IF(NOT DEFINED CTK_KWSTYLE_EXECUTABLE)
+    # Set CMake OSX variable to pass down the external project
+    set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS)
+    if(APPLE)
+      list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS
+        -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+        -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
+    endif()
+
     ExternalProject_Add(${proj}
       SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}
       BINARY_DIR ${proj}-build
@@ -25,6 +34,7 @@ IF(CTK_USE_KWSTYLE)
       CMAKE_GENERATOR ${gen}
       CMAKE_ARGS
         ${ep_common_args}
+        ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
         -DBUILD_TESTING:BOOL=OFF
       DEPENDS
         ${proj_DEPENDENCIES}

+ 10 - 0
CMakeExternals/Log4Qt.cmake

@@ -18,6 +18,15 @@ IF(${add_project})
   SET(Log4Qt_DEPENDS ${proj})
   
   IF(NOT DEFINED Log4Qt_DIR)
+    # Set CMake OSX variable to pass down the external project
+    set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS)
+    if(APPLE)
+      list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS
+        -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+        -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
+    endif()
+
 #     MESSAGE(STATUS "Adding project:${proj}")
     ExternalProject_Add(${proj}
       SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}
@@ -29,6 +38,7 @@ IF(${add_project})
       INSTALL_COMMAND ""
       CMAKE_ARGS
         ${ep_common_args}
+        ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
         -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
       DEPENDS
         ${proj_DEPENDENCIES}

+ 10 - 1
CMakeExternals/OpenIGTLink.cmake

@@ -18,7 +18,15 @@ IF(${add_project})
   SET(OpenIGTLink_DEPENDS ${proj})
   
   IF(NOT DEFINED OpenIGTLink_DIR)
-    
+    # Set CMake OSX variable to pass down the external project
+    set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS)
+    if(APPLE)
+      list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS
+        -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+        -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
+    endif()
+
   #   MESSAGE(STATUS "Adding project:${proj}")
     ExternalProject_Add(${proj}
       SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}
@@ -29,6 +37,7 @@ IF(${add_project})
       CMAKE_GENERATOR ${gen}
       CMAKE_ARGS
         ${ep_common_args}
+        ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
       DEPENDS
         ${proj_DEPENDENCIES}
       )

+ 11 - 1
CMakeExternals/PythonQt.cmake

@@ -40,7 +40,16 @@ IF(${add_project})
     IF(NOT PYTHONLIBS_FOUND)
       MESSAGE(FATAL_ERROR "error: Python is required to build ${PROJECT_NAME}")
     ENDIF()
-      
+
+    # Set CMake OSX variable to pass down the external project
+    set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS)
+    if(APPLE)
+      list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS
+        -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+        -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
+    endif()
+
     ExternalProject_Add(${proj}
       SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}
       BINARY_DIR ${proj}-build
@@ -51,6 +60,7 @@ IF(${add_project})
       BUILD_COMMAND ""
       CMAKE_ARGS
         ${ep_common_args}
+        ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
         -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
         -DPYTHON_INCLUDE_DIR:PATH=${PYTHON_INCLUDE_DIR}
         -DPYTHON_LIBRARY:FILEPATH=${PYTHON_LIBRARY}

+ 11 - 1
CMakeExternals/PythonQtGenerator.cmake

@@ -11,7 +11,15 @@ IF(CTK_WRAP_PYTHONQT_FULL)
   ENDIF()
   
   IF(NOT DEFINED PYTHONQTGENERATOR_EXECUTABLE)
-    
+    # Set CMake OSX variable to pass down the external project
+    set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS)
+    if(APPLE)
+      list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS
+        -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+        -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
+    endif()
+
     #
     # PythonQtGenerator is the tool allowing to generate the PythonQt decorators using 
     # typesystem xml files. If called without any option, it will generate the bindings for Qt.
@@ -42,6 +50,7 @@ IF(CTK_WRAP_PYTHONQT_FULL)
         SOURCE_DIR ${CMAKE_BINARY_DIR}/PythonQt/generator
         CMAKE_ARGS
           ${ep_common_args}
+          ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
           -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
         DEPENDS
           "PythonQt" # To make sure the generator code is checked out, let's depent on PythonQt
@@ -59,6 +68,7 @@ IF(CTK_WRAP_PYTHONQT_FULL)
         SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}/generator
         CMAKE_ARGS
           ${ep_common_args}
+          ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
           -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
         )
     ENDIF()

+ 6 - 0
CMakeExternals/QtMobility.cmake

@@ -56,6 +56,12 @@ IF(${add_project})
           "${CTK_CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libQtServiceFrameworkd.so")
       SET(QTMOBILITY_QTSERVICEFW_LIBRARY_RELEASE
           "${CTK_CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libQtServiceFramework.so")
+      
+      IF(APPLE)
+        CONFIGURE_FILE(${qtmobility_patch_dir}/QtMobility-1.0.0-make-apple.cmake.in
+                     ${qtmobility_configured_patch_dir}/QtMobility-1.0.0-make-apple.cmake @ONLY)
+        SET(qtmobility_make_cmd ${CMAKE_COMMAND} -P ${qtmobility_configured_patch_dir}/QtMobility-1.0.0-make-apple.cmake)
+      ENDIF()
           
       CONFIGURE_FILE("${qtmobility_config_in}" "${qtmobility_config_out}" @ONLY)
     ELSEIF(WIN32)

+ 10 - 1
CMakeExternals/QtSOAP.cmake

@@ -19,7 +19,15 @@ IF(${add_project})
   SET(QtSOAP_DEPENDS ${proj})
 
   IF(NOT DEFINED QtSOAP_DIR)
-  
+    # Set CMake OSX variable to pass down the external project
+    set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS)
+    if(APPLE)
+      list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS
+        -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+        -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
+    endif()
+
     #     MESSAGE(STATUS "Adding project:${proj}")
     ExternalProject_Add(${proj}
       SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}
@@ -31,6 +39,7 @@ IF(${add_project})
       INSTALL_COMMAND ""
       CMAKE_ARGS
         ${ep_common_args}
+        ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
         -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
       DEPENDS
         ${proj_DEPENDENCIES}

+ 10 - 0
CMakeExternals/VTK.cmake

@@ -30,6 +30,15 @@ IF(${add_project} OR CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK)
   SET(VTK_DEPENDS ${proj})
   
   IF(NOT DEFINED VTK_DIR)
+    # Set CMake OSX variable to pass down the external project
+    set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS)
+    if(APPLE)
+      list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS
+        -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+        -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
+    endif()
+
 #     MESSAGE(STATUS "Adding project:${proj}")
     ExternalProject_Add(${proj}
       SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}
@@ -41,6 +50,7 @@ IF(${add_project} OR CTK_LIB_Scripting/Python/Core_PYTHONQT_USE_VTK)
       CMAKE_GENERATOR ${gen}
       CMAKE_ARGS
         ${ep_common_args}
+        ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
         -DBUILD_TESTING:BOOL=OFF
         ${additional_vtk_cmakevars}
         -DVTK_WRAP_TCL:BOOL=OFF

+ 10 - 0
CMakeExternals/XIP.cmake

@@ -17,6 +17,15 @@ IF(${add_project})
   SET(XIP_DEPENDS ${proj})
   
   IF(NOT DEFINED XIP_DIR)
+    # Set CMake OSX variable to pass down the external project
+    set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS)
+    if(APPLE)
+      list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS
+        -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+        -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
+    endif()
+
     #   MESSAGE(STATUS "Adding project:${proj}")
     ExternalProject_Add(${proj}
       SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}
@@ -28,6 +37,7 @@ IF(${add_project})
       CMAKE_GENERATOR ${gen}
       CMAKE_ARGS
         ${ep_common_args}
+        ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
         -DBUILD_TESTING:BOOL=OFF
         -DHAS_VTK:BOOL=OFF
         -DHAS_ITK:BOOL=OFF

+ 10 - 0
CMakeExternals/ZMQ.cmake

@@ -18,6 +18,15 @@ IF(${add_project})
   SET(ZMQ_DEPENDS ${proj})
   
   IF(NOT DEFINED ZMQ_DIR)
+    # Set CMake OSX variable to pass down the external project
+    set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS)
+    if(APPLE)
+      list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS
+        -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+        -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
+        -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
+    endif()
+
   #   MESSAGE(STATUS "Adding project:${proj}")
     ExternalProject_Add(${proj}
       SOURCE_DIR ${CMAKE_BINARY_DIR}/${proj}
@@ -29,6 +38,7 @@ IF(${add_project})
       CMAKE_GENERATOR ${gen}
       CMAKE_ARGS
         ${ep_common_args}
+        ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
         -DBUILD_TESTING:BOOL=OFF
         -DBUILD_SHARED_LIBS:BOOL=ON 
         -DZMQ_BUILD_DEVICES:BOOL=ON

+ 7 - 0
CMakeLists.txt

@@ -47,6 +47,13 @@ FOREACH(policy ${project_policies})
 ENDFOREACH()
 
 #-----------------------------------------------------------------------------
+if(APPLE)
+  # Note: By setting CMAKE_OSX_* variables before any enable_language() or project() calls,
+  #       we ensure that the bitness will be properly detected.
+  include(${CMAKE_SOURCE_DIR}/CMake/ctkBlockSetCMakeOSXVariables.cmake)
+endif()
+
+#-----------------------------------------------------------------------------
 PROJECT(CTK)
 #-----------------------------------------------------------------------------
 

+ 11 - 0
SuperBuild.cmake

@@ -215,6 +215,16 @@ ENDFOREACH()
 # ENDFOREACH()
 
 #-----------------------------------------------------------------------------
+# Set CMake OSX variable to pass down the external project
+set(CMAKE_OSX_EXTERNAL_PROJECT_ARGS)
+if(APPLE)
+  list(APPEND CMAKE_OSX_EXTERNAL_PROJECT_ARGS
+    -DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
+    -DCMAKE_OSX_SYSROOT=${CMAKE_OSX_SYSROOT}
+    -DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET})
+endif()
+    
+#-----------------------------------------------------------------------------
 # CTK Configure
 #
 SET(proj CTK-Configure)
@@ -224,6 +234,7 @@ ExternalProject_Add(${proj}
   CMAKE_GENERATOR ${gen}
   CMAKE_ARGS
     ${ctk_superbuild_boolean_args}
+    ${CMAKE_OSX_EXTERNAL_PROJECT_ARGS}
     -DCTK_SUPERBUILD:BOOL=OFF
     -DDOCUMENTATION_ARCHIVES_OUTPUT_DIRECTORY:PATH=${DOCUMENTATION_ARCHIVES_OUTPUT_DIRECTORY}
     -DDOXYGEN_EXECUTABLE:FILEPATH=${DOXYGEN_EXECUTABLE}

+ 20 - 0
Utilities/QtMobility/QtMobility-1.0.0-make-apple.cmake.in

@@ -0,0 +1,20 @@
+
+if(APPLE)
+  set(ENV{MACOSX_DEPLOYMENT_TARGET} "@CMAKE_OSX_DEPLOYMENT_TARGET@")
+
+  set(CMAKE_OSX_ARCHITECTURES "@CMAKE_OSX_ARCHITECTURES@")
+  set(archflags)
+  foreach(arch ${CMAKE_OSX_ARCHITECTURES})
+    set(archflags "${archflags} -arch ${arch}")
+  endforeach()
+  set(ENV{ARCHFLAGS} "${archflags}")
+
+  set(CMAKE_CXX_HAS_ISYSROOT "@CMAKE_CXX_HAS_ISYSROOT@")
+  if(CMAKE_CXX_HAS_ISYSROOT)
+    set(ENV{SDKROOT} "@CMAKE_OSX_SYSROOT@")
+  endif()
+endif()
+
+execute_process(
+  COMMAND make
+  )