From 9d0a0fe3f2689dc5db5335374d86778bfb675592 Mon Sep 17 00:00:00 2001 From: Laurent Gomila Date: Sun, 1 Jan 2012 22:50:44 +0100 Subject: [PATCH] Improved the definition of options in CMake files, they can now be overriden by a parent CMakeLists.txt --- CMakeLists.txt | 54 +++++++++++++++++++++++++------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 463e473a..bcc9b574 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,17 @@ cmake_minimum_required(VERSION 2.8) +# define a macro that helps defining an option +macro(sfml_set_option var default type docstring) + if(NOT ${var}) + set(${var} ${default}) + endif() + set(${var} ${${var}} CACHE ${type} ${docstring} FORCE) +endmacro() + # set a default build type if none was provided # this has to be done before the project() instruction! -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build (Debug or Release)" FORCE) -endif() +sfml_set_option(CMAKE_BUILD_TYPE Release STRING "Choose the type of build (Debug or Release)") # project name project(SFML) @@ -22,24 +28,24 @@ set(VERSION_PATCH 0) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) # add an option for choosing the build type (shared or static) -set(BUILD_SHARED_LIBS TRUE CACHE BOOL "TRUE to build SFML as shared libraries, FALSE to build it as static libraries") +sfml_set_option(BUILD_SHARED_LIBS TRUE BOOL "TRUE to build SFML as shared libraries, FALSE to build it as static libraries") # add an option for building the examples -set(BUILD_EXAMPLES FALSE CACHE BOOL "TRUE to build the SFML examples, FALSE to ignore them") +sfml_set_option(BUILD_EXAMPLES FALSE BOOL "TRUE to build the SFML examples, FALSE to ignore them") # add an option for building the API documentation -set(BUILD_DOC FALSE CACHE BOOL "TRUE to generate the API documentation, FALSE to ignore it") +sfml_set_option(BUILD_DOC FALSE BOOL "TRUE to generate the API documentation, FALSE to ignore it") # Mac OS X specific options if(MACOSX) # add an option to build frameworks instead of dylibs (release only) - set(BUILD_FRAMEWORKS FALSE CACHE BOOL "TRUE to build SFML as frameworks libraries (release only), FALSE to build according to BUILD_SHARED_LIBS") + sfml_set_option(BUILD_FRAMEWORKS FALSE BOOL "TRUE to build SFML as frameworks libraries (release only), FALSE to build according to BUILD_SHARED_LIBS") # add an option to let the user specify a custom directory for frameworks installation (SFML, sndfile, ...) - set(CMAKE_INSTALL_FRAMEWORK_PREFIX "/Library/Frameworks" CACHE STRING "Frameworks installation directory") + sfml_set_option(CMAKE_INSTALL_FRAMEWORK_PREFIX "/Library/Frameworks" STRING "Frameworks installation directory") # add an option to automatically install Xcode 4 templates - set(INSTALL_XCODE4_TEMPLATES FALSE CACHE BOOL "TRUE to automatically install the Xcode 4 templates, FALSE to do nothing about it") + sfml_set_option(INSTALL_XCODE4_TEMPLATES FALSE BOOL "TRUE to automatically install the Xcode 4 templates, FALSE to do nothing about it") endif() # define SFML_STATIC if the build type is not set to 'shared' @@ -54,7 +60,7 @@ endif() # define an option for choosing between static and dynamic C runtime (Windows only) if(WINDOWS) - set(STATIC_STD_LIBS FALSE CACHE BOOL "TRUE to statically link to the standard libraries, FALSE to use them as DLLs") + sfml_set_option(STATIC_STD_LIBS FALSE BOOL "TRUE to statically link to the standard libraries, FALSE to use them as DLLs") # for VC++, we can apply it globally by modifying the compiler flags if(COMPILER_MSVC AND STATIC_STD_LIBS) @@ -74,28 +80,22 @@ set(CMAKE_SKIP_BUILD_RPATH TRUE) # Setup Mac OS X stuff if(MACOSX) # multi arch support - by default : i386 and x86_64 - if(NOT CMAKE_OSX_ARCHITECTURES) - set(CMAKE_OSX_ARCHITECTURES "i386;x86_64" CACHE STRING "Build architectures for OSX" FORCE) - endif() + sfml_set_option(CMAKE_OSX_ARCHITECTURES "i386;x86_64" STRING "Build architectures for OSX") # multi SDK support - by default we choose the older SDK available starting by 10.5 SDK if(NOT OSX_CONFIG_HAS_BEEN_RUN_BEFORE) if(EXISTS /Developer/SDKs/MacOSX10.5.sdk) # target 10.5 system - set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.5.sdk" - CACHE STRING "The product will be built against the headers and libraries located inside the indicated SDK. Set to empty string for default value." - FORCE) - set(CMAKE_OSX_DEPLOYMENT_TARGET "10.5" - CACHE STRING "Minimum OS X version to target for deployment (at runtime); ewer APIs weak linked." - FORCE) + sfml_set_option(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.5.sdk" + STRING "The product will be built against the headers and libraries located inside the indicated SDK. Set to empty string for default value.") + sfml_set_option(CMAKE_OSX_DEPLOYMENT_TARGET "10.5" + STRING "Minimum OS X version to target for deployment (at runtime); ewer APIs weak linked.") elseif(EXISTS /Developer/SDKs/MacOSX10.6.sdk) # target 10.6 system - set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.6.sdk" - CACHE STRING "The product will be built against the headers and libraries located inside the indicated SDK. Set to empty string for default value." - FORCE) - set(CMAKE_OSX_DEPLOYMENT_TARGET "10.6" - CACHE STRING "Minimum OS X version to target for deployment (at runtime); newer APIs weak linked." - FORCE) + sfml_set_option(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.6.sdk" + STRING "The product will be built against the headers and libraries located inside the indicated SDK. Set to empty string for default value.") + sfml_set_option(CMAKE_OSX_DEPLOYMENT_TARGET "10.6" + STRING "Minimum OS X version to target for deployment (at runtime); newer APIs weak linked.") else() # use default SDK. endif() @@ -115,13 +115,13 @@ if(MACOSX) if(BUILD_FRAMEWORKS) # requirement #1 if(NOT CMAKE_BUILD_TYPE STREQUAL "Release") - message(WARNING "CMAKE_BUILD_TYPE should be \"Release\" when BUILD_FRAMEWORKS is TRUE") + message(FATAL_ERROR "CMAKE_BUILD_TYPE should be \"Release\" when BUILD_FRAMEWORKS is TRUE") return() endif() # requirement #2 if(NOT BUILD_SHARED_LIBS) - message(WARNING "BUILD_SHARED_LIBS should be TRUE when BUILD_FRAMEWORKS is TRUE") + message(FATAL_ERROR "BUILD_SHARED_LIBS should be TRUE when BUILD_FRAMEWORKS is TRUE") return() endif() endif()