aboutsummaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/FindACE.cmake65
-rw-r--r--cmake/FindAce.cmake31
-rw-r--r--cmake/FindMySQL.cmake152
-rw-r--r--cmake/FindMySql.cmake102
-rw-r--r--cmake/FindOpenSSL.cmake92
-rw-r--r--cmake/FindPCHSupport.cmake (renamed from cmake/PCH.cmake)312
-rw-r--r--cmake/FindPlatform.cmake16
7 files changed, 481 insertions, 289 deletions
diff --git a/cmake/FindACE.cmake b/cmake/FindACE.cmake
new file mode 100644
index 00000000000..4ade5f64b03
--- /dev/null
+++ b/cmake/FindACE.cmake
@@ -0,0 +1,65 @@
+#
+# Find the ACE client includes and library
+#
+
+# This module defines
+# ACE_INCLUDE_DIR, where to find ace.h
+# ACE_LIBRARIES, the libraries to link against
+# ACE_FOUND, if false, you cannot build anything that requires ACE
+
+# also defined, but not for general use are
+# ACE_LIBRARY, where to find the ACE library.
+
+set( ACE_FOUND 0 )
+
+if ( UNIX )
+ FIND_PATH( ACE_INCLUDE_DIR
+ NAMES
+ ace/ACE.h
+ PATHS
+ /usr/include
+ /usr/include/ace
+ /usr/local/include
+ /usr/local/include/ace
+ $ENV{ACE_ROOT}
+ $ENV{ACE_ROOT}/include
+ ${CMAKE_SOURCE_DIR}/externals/ace
+ DOC
+ "Specify include-directories that might contain ace.h here."
+ )
+ FIND_LIBRARY( ACE_LIBRARY
+ NAMES
+ ace ACE
+ PATHS
+ /usr/lib
+ /usr/lib/ace
+ /usr/local/lib
+ /usr/local/lib/ace
+ /usr/local/ace/lib
+ $ENV{ACE_ROOT}/lib
+ $ENV{ACE_ROOT}
+ DOC "Specify library-locations that might contain the ACE library here."
+ )
+
+# FIND_LIBRARY( ACE_EXTRA_LIBRARIES
+# NAMES
+# z zlib
+# PATHS
+# /usr/lib
+# /usr/local/lib
+# DOC
+# "if more libraries are necessary to link into ACE, specify them here."
+# )
+
+ if ( ACE_LIBRARY )
+ if ( ACE_INCLUDE_DIR )
+ set( ACE_FOUND 1 )
+ message( STATUS "Found ACE library: ${ACE_LIBRARY}")
+ message( STATUS "Found ACE headers: ${ACE_INCLUDE_DIR}")
+ else ( ACE_INCLUDE_DIR )
+ message(FATAL_ERROR "Could not find ACE headers! Please install ACE libraries and headers")
+ endif ( ACE_INCLUDE_DIR )
+ endif ( ACE_LIBRARY )
+
+ mark_as_advanced( ACE_FOUND ACE_LIBRARY ACE_EXTRA_LIBRARIES ACE_INCLUDE_DIR )
+endif (UNIX)
diff --git a/cmake/FindAce.cmake b/cmake/FindAce.cmake
deleted file mode 100644
index 0721cdecfa4..00000000000
--- a/cmake/FindAce.cmake
+++ /dev/null
@@ -1,31 +0,0 @@
-# This script is taken from BFilter project, thanks to original authors.
-# - Locate the ACE library
-# This module defines
-# ACE_FOUND -- true if ACE was found
-# ACE_LIBRARY -- the library to link against
-# ACE_INCLUDE_DIR -- path to ace/ACE.h
-MACRO(FIND_ACE LIBNAME)
- GET_FILENAME_COMPONENT(parent_dir_ "${PROJECT_SOURCE_DIR}/.." ABSOLUTE)
- FIND_PATH(
- ACE_INCLUDE_DIR ace/ACE.h
- PATHS /usr/include /usr/local/include
- "${CMAKE_INSTALL_PREFIX}/include" "${parent_dir_}/ACE_wrappers"
- DOC "Path to ace/ACE.h"
- )
-
- # This prevents it being taken from cache. - but also broke cmake -i, so we dont use it
- # SET(ACE_LIBRARY ACE_LIBRARY-NOTFOUND)
-
- FIND_LIBRARY(
- ACE_LIBRARY "${LIBNAME}"
- PATHS /usr/lib /usr/local/lib
- "${CMAKE_INSTALL_PREFIX}/lib" "${parent_dir_}/ACE_wrappers/ace"
- DOC "Path to ACE library file"
- )
- IF(ACE_INCLUDE_DIR AND ACE_LIBRARY)
- SET(ACE_FOUND TRUE)
- ELSE(ACE_INCLUDE_DIR AND ACE_LIBRARY)
- SET(ACE_FOUND FALSE)
- ENDIF(ACE_INCLUDE_DIR AND ACE_LIBRARY)
-ENDMACRO(FIND_ACE)
-
diff --git a/cmake/FindMySQL.cmake b/cmake/FindMySQL.cmake
new file mode 100644
index 00000000000..aa62d89d9b5
--- /dev/null
+++ b/cmake/FindMySQL.cmake
@@ -0,0 +1,152 @@
+#
+# Find the MySQL client includes and library
+#
+
+# This module defines
+# MYSQL_INCLUDE_DIR, where to find mysql.h
+# MYSQL_LIBRARIES, the libraries to link against to connect to MySQL
+# MYSQL_FOUND, if false, you cannot build anything that requires MySQL.
+
+# also defined, but not for general use are
+# MYSQL_LIBRARY, where to find the MySQL library.
+
+set( MYSQL_FOUND 0 )
+
+if( UNIX )
+ set(MYSQL_CONFIG_PREFER_PATH "$ENV{MYSQL_HOME}/bin" CACHE FILEPATH
+ "preferred path to MySQL (mysql_config)"
+ )
+
+ find_program(MYSQL_CONFIG mysql_config
+ ${MYSQL_CONFIG_PREFER_PATH}
+ /usr/local/mysql/bin/
+ /usr/local/bin/
+ /usr/bin/
+ )
+
+ if( MYSQL_CONFIG )
+ message(STATUS "Using mysql-config: ${MYSQL_CONFIG}")
+ # set INCLUDE_DIR
+ exec_program(${MYSQL_CONFIG}
+ ARGS --include
+ OUTPUT_VARIABLE MY_TMP
+ )
+
+ string(REGEX REPLACE "-I([^ ]*)( .*)?" "\\1" MY_TMP "${MY_TMP}")
+ set(MYSQL_ADD_INCLUDE_PATH ${MY_TMP} CACHE FILEPATH INTERNAL)
+ #message("[DEBUG] MYSQL ADD_INCLUDE_PATH : ${MYSQL_ADD_INCLUDE_PATH}")
+ # set LIBRARY_DIR
+ exec_program(${MYSQL_CONFIG}
+ ARGS --libs_r
+ OUTPUT_VARIABLE MY_TMP
+ )
+ set(MYSQL_ADD_LIBRARIES "")
+ string(REGEX MATCHALL "-l[^ ]*" MYSQL_LIB_LIST "${MY_TMP}")
+ foreach(LIB ${MYSQL_LIB_LIST})
+ string(REGEX REPLACE "[ ]*-l([^ ]*)" "\\1" LIB "${LIB}")
+ list(APPEND MYSQL_ADD_LIBRARIES "${LIB}")
+ #message("[DEBUG] MYSQL ADD_LIBRARIES : ${MYSQL_ADD_LIBRARIES}")
+ endforeach(LIB ${MYSQL_LIB_LIST})
+
+ set(MYSQL_ADD_LIBRARIES_PATH "")
+ string(REGEX MATCHALL "-L[^ ]*" MYSQL_LIBDIR_LIST "${MY_TMP}")
+ foreach(LIB ${MYSQL_LIBDIR_LIST})
+ string(REGEX REPLACE "[ ]*-L([^ ]*)" "\\1" LIB "${LIB}")
+ list(APPEND MYSQL_ADD_LIBRARIES_PATH "${LIB}")
+ #message("[DEBUG] MYSQL ADD_LIBRARIES_PATH : ${MYSQL_ADD_LIBRARIES_PATH}")
+ endforeach(LIB ${MYSQL_LIBS})
+
+ else( MYSQL_CONFIG )
+ set(MYSQL_ADD_LIBRARIES "")
+ list(APPEND MYSQL_ADD_LIBRARIES "mysqlclient_r")
+ endif( MYSQL_CONFIG )
+endif( UNIX )
+
+find_path(MYSQL_INCLUDE_DIR
+ NAMES
+ mysql.h
+ PATHS
+ ${MYSQL_ADD_INCLUDE_PATH}
+ /usr/include
+ /usr/include/mysql
+ /usr/local/include
+ /usr/local/include/mysql
+ /usr/local/mysql/include
+ "C:/Program Files/MySQL/include"
+ "C:/Program Files/MySQL/MySQL Server 5.0/include"
+ "C:/Program Files/MySQL/MySQL Server 5.1/include"
+ "C:/MySQL/include"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/include"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.1;Location]/include"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/include"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.1;Location]/include"
+ "c:/msys/local/include"
+ DOC
+ "Specify the directory containing mysql.h."
+)
+
+if( UNIX )
+foreach(LIB ${MYSQL_ADD_LIBRARIES})
+ find_library( MYSQL_LIBRARY
+ NAMES
+ mysql libmysql ${LIB}
+ PATHS
+ ${MYSQL_ADD_LIBRARIES_PATH}
+ /usr/lib
+ /usr/lib/mysql
+ /usr/local/lib
+ /usr/local/lib/mysql
+ /usr/local/mysql/lib
+ DOC "Specify the location of the mysql library here."
+ )
+endforeach(LIB ${MYSQL_ADD_LIBRARY})
+endif( UNIX )
+
+if( WIN32 )
+ find_library( MYSQL_LIBRARY
+ NAMES
+ mysql libmysql ${LIB}
+ PATHS
+ ${MYSQL_ADD_LIBRARIES_PATH}
+ "C:/Program Files/MySQL/lib"
+ "C:/Program Files/MySQL/MySQL Server 5.0/lib/opt"
+ "C:/Program Files/MySQL/MySQL Server 5.1/lib/opt"
+ "C:/MySQL/lib/debug"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/lib/opt"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.1;Location]/lib/opt"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/lib/opt"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.1;Location]/lib/opt"
+ "c:/msys/local/include"
+ DOC "Specify the location of the mysql library here."
+ )
+endif( WIN32 )
+
+# On Windows you typically don't need to include any extra libraries
+# to build MYSQL stuff.
+
+if( NOT WIN32 )
+ find_library( MYSQL_EXTRA_LIBRARIES
+ NAMES
+ z zlib
+ PATHS
+ /usr/lib
+ /usr/local/lib
+ DOC
+ "if more libraries are necessary to link in a MySQL client (typically zlib), specify them here."
+ )
+else( NOT WIN32 )
+ set( MYSQL_EXTRA_LIBRARIES "" )
+endif( NOT WIN32 )
+
+if( MYSQL_LIBRARY )
+ if( MYSQL_INCLUDE_DIR )
+ set( MYSQL_FOUND 1 )
+ message(STATUS "Found MySQL library: ${MYSQL_LIBRARY}")
+ message(STATUS "Found MySQL headers: ${MYSQL_INCLUDE_DIR}")
+ else( MYSQL_INCLUDE_DIR )
+ message(FATAL_ERROR "Could not find MySQL headers! Please install the development-libraries and headers.")
+ endif( MYSQL_INCLUDE_DIR )
+ mark_as_advanced( MYSQL_FOUND MYSQL_LIBRARY MYSQL_EXTRA_LIBRARIES MYSQL_INCLUDE_DIR )
+else( MYSQL_LIBRARY )
+ message(FATAL_ERROR "Could not find the MySQL libraries! Please install the development-libraries and headers.")
+endif( MYSQL_LIBRARY )
diff --git a/cmake/FindMySql.cmake b/cmake/FindMySql.cmake
deleted file mode 100644
index e149cd4eaf0..00000000000
--- a/cmake/FindMySql.cmake
+++ /dev/null
@@ -1,102 +0,0 @@
-# - Find MySQL
-# Find the MySQL includes and client library
-# This module defines
-# MYSQL_INCLUDE_DIR, where to find mysql.h
-# MYSQL_LIBRARIES, the libraries needed to use MySQL.
-# MYSQL_FOUND, If false, do not try to use MySQL.
-#
-# Copyright (c) 2006, Jaroslaw Staniek, <js@iidea.pl>
-# Lot of adustmens by Michal Cihar <michal@cihar.com>
-#
-# vim: expandtab sw=4 ts=4 sts=4:
-#
-# Redistribution and use is allowed according to the terms of the BSD license.
-
-MACRO(FIND_MYSQL)
-if(UNIX)
- set(MYSQL_CONFIG_PREFER_PATH "$ENV{MYSQL_HOME}/bin" CACHE FILEPATH
- "preferred path to MySQL (mysql_config)")
- find_program(MYSQL_CONFIG mysql_config
- ${MYSQL_CONFIG_PREFER_PATH}
- /usr/local/mysql/bin/
- /usr/local/bin/
- /usr/bin/
- )
-
- if(MYSQL_CONFIG)
- message(STATUS "Using mysql-config: ${MYSQL_CONFIG}")
- # set INCLUDE_DIR
- exec_program(${MYSQL_CONFIG}
- ARGS --include
- OUTPUT_VARIABLE MY_TMP)
-
- string(REGEX REPLACE "-I([^ ]*)( .*)?" "\\1" MY_TMP "${MY_TMP}")
-
- set(MYSQL_ADD_INCLUDE_DIR ${MY_TMP} CACHE FILEPATH INTERNAL)
-
- # set LIBRARY_DIR
- exec_program(${MYSQL_CONFIG}
- ARGS --libs_r
- OUTPUT_VARIABLE MY_TMP)
-
- set(MYSQL_ADD_LIBRARIES "")
-
- string(REGEX MATCHALL "-l[^ ]*" MYSQL_LIB_LIST "${MY_TMP}")
- foreach(LIB ${MYSQL_LIB_LIST})
- string(REGEX REPLACE "[ ]*-l([^ ]*)" "\\1" LIB "${LIB}")
- list(APPEND MYSQL_ADD_LIBRARIES "${LIB}")
- endforeach(LIB ${MYSQL_LIBS})
-
- set(MYSQL_ADD_LIBRARY_PATH "")
-
- string(REGEX MATCHALL "-L[^ ]*" MYSQL_LIBDIR_LIST "${MY_TMP}")
- foreach(LIB ${MYSQL_LIBDIR_LIST})
- string(REGEX REPLACE "[ ]*-L([^ ]*)" "\\1" LIB "${LIB}")
- list(APPEND MYSQL_ADD_LIBRARY_PATH "${LIB}")
- endforeach(LIB ${MYSQL_LIBS})
-
- else(MYSQL_CONFIG)
- set(MYSQL_ADD_LIBRARIES "")
- list(APPEND MYSQL_ADD_LIBRARIES "mysqlclient")
- endif(MYSQL_CONFIG)
-else(UNIX)
- set(MYSQL_ADD_INCLUDE_DIR "c:/msys/local/include" CACHE FILEPATH INTERNAL)
- set(MYSQL_ADD_LIBRARY_PATH "c:/msys/local/lib" CACHE FILEPATH INTERNAL)
-ENDIF(UNIX)
-
-find_path(MYSQL_INCLUDE_DIR mysql.h
- /usr/local/include
- /usr/local/include/mysql
- /usr/local/mysql/include
- /usr/local/mysql/include/mysql
- /usr/include
- /usr/include/mysql
- ${MYSQL_ADD_INCLUDE_DIR}
-)
-
-set(TMP_MYSQL_LIBRARIES "")
-
-foreach(LIB ${MYSQL_ADD_LIBRARIES})
- find_library("MYSQL_LIBRARIES_${LIB}" NAMES ${LIB}
- PATHS
- ${MYSQL_ADD_LIBRARY_PATH}
- /usr/lib/mysql
- /usr/local/lib
- /usr/local/lib/mysql
- /usr/local/mysql/lib
- )
- list(APPEND TMP_MYSQL_LIBRARIES "${MYSQL_LIBRARIES_${LIB}}")
-endforeach(LIB ${MYSQL_ADD_LIBRARIES})
-
-set(MYSQL_LIBRARIES ${TMP_MYSQL_LIBRARIES} CACHE FILEPATH INTERNAL)
-
-if(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARIES)
- set(MYSQL_FOUND TRUE CACHE INTERNAL "MySQL found")
- message(STATUS "Found MySQL: ${MYSQL_INCLUDE_DIR}, ${MYSQL_LIBRARIES}")
-else(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARIES)
- set(MYSQL_FOUND FALSE CACHE INTERNAL "MySQL found")
- message(STATUS "MySQL not found.")
-endif(MYSQL_INCLUDE_DIR AND MYSQL_LIBRARIES)
-
-mark_as_advanced(MYSQL_INCLUDE_DIR MYSQL_LIBRARIES)
-ENDMACRO(FIND_MYSQL) \ No newline at end of file
diff --git a/cmake/FindOpenSSL.cmake b/cmake/FindOpenSSL.cmake
new file mode 100644
index 00000000000..d045b539b98
--- /dev/null
+++ b/cmake/FindOpenSSL.cmake
@@ -0,0 +1,92 @@
+#
+# Find the OpenSSL client includes and library
+#
+
+# This module defines
+# OPENSSL_INCLUDE_DIR, where to find openssl.h
+# OPENSSL_LIBRARIES, the libraries to link against to connect to MySQL
+# OPENSSL_FOUND, if false, you cannot build anything that requires MySQL.
+
+# also defined, but not for general use are
+# OPENSSL_LIBRARY, where to find the MySQL library.
+
+if( OPENSSL_INCLUDE_DIR AND OPENSSL_LIBRARIES )
+ # in cache already
+ set(OPENSSL_FOUND 1)
+else( OPENSSL_INCLUDE_DIR AND OPENSSL_LIBRARIES )
+ set(OPENSSL_FOUND 0)
+
+ if(WIN32)
+ if(PLATFORM MATCHES X64)
+ set(TMP_OPENSSL_INCLUDE_DIR
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;InstallLocation]/include/openssl"
+ )
+ set(TMP_OPENSSL_LIBRARIES
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (64-bit)_is1;InstallLocation]/lib"
+ )
+ else()
+ set(TMP_OPENSSL_INCLUDE_DIR
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]/include/openssl"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]/include/openssl"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]/include/openssl"
+ )
+ set(TMP_OPENSSL_LIBRARIES
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]/lib"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]/lib"
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\OpenSSL (32-bit)_is1;InstallLocation]/lib"
+ )
+ endif()
+ endif()
+
+ find_path(OPENSSL_INCLUDE_DIR
+ NAMES
+ ssl.h
+ PATHS
+ /usr/include
+ /usr/include/openssl
+ /usr/local/include
+ /usr/local/include/openssl
+ /usr/local/openssl/include
+ ${TMP_OPENSSL_INCLUDE_DIR}
+ DOC
+ "Specify the directory containing openssl.h."
+ )
+
+ find_library(OPENSSL_LIBRARIES
+ NAMES
+ ssleay32
+ ssl
+ PATHS
+ /usr/lib
+ /usr/lib/ssl
+ /usr/local/lib
+ /usr/local/lib/ssl
+ /usr/local/ssl/lib
+ ${TMP_OPENSSL_LIBRARIES}
+ DOC "Specify the OpenSSL library here."
+ )
+
+ if( WIN32 )
+ find_library(OPENSSL_EXTRA_LIBRARIES
+ NAMES
+ libeay32
+ PATHS
+ ${TMP_OPENSSL_LIBRARIES}
+ DOC
+ "if more libraries are necessary to link in a OpenSSL client, specify them here."
+ )
+ endif( WIN32 )
+
+ if( OPENSSL_LIBRARIES )
+ if( OPENSSL_INCLUDE_DIR )
+ set( OPENSSL_FOUND 1 )
+ message(STATUS "Found OpenSSL library: ${OPENSSL_LIBRARIES}")
+ message(STATUS "Found OpenSSL headers: ${OPENSSL_INCLUDE_DIR}")
+ else ( OPENSSL_INCLUDE_DIR )
+ message(FATAL_ERROR "Could not find OpenSSL headers! Please install the development-headers")
+ endif( OPENSSL_INCLUDE_DIR )
+ else( OPENSSL_LIBRARIES )
+ message(FATAL_ERROR "Could not find OpenSSL libraries! Please install the library before continuing")
+ endif( OPENSSL_LIBRARIES )
+ mark_as_advanced( OPENSSL_FOUND OPENSSL_LIBRARIES OPENSSL_EXTRA_LIBRARIES OPENSSL_INCLUDE_DIR )
+endif( OPENSSL_INCLUDE_DIR AND OPENSSL_LIBRARIES )
diff --git a/cmake/PCH.cmake b/cmake/FindPCHSupport.cmake
index e7da9349cb6..d96a287e1a3 100644
--- a/cmake/PCH.cmake
+++ b/cmake/FindPCHSupport.cmake
@@ -1,7 +1,4 @@
-#
-# This file is for CMake 2.6
-#
-# - Try to find precompiled headers support for GCC 3.4 and 4.x
+# - Try to find precompiled headers support for GCC 3.4 and 4.x (and MSVC)
# Once done this will define:
#
# Variable:
@@ -16,107 +13,116 @@
IF(CMAKE_COMPILER_IS_GNUCXX)
EXEC_PROGRAM(
- ${CMAKE_CXX_COMPILER}
- ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
- OUTPUT_VARIABLE gcc_compiler_version)
+ ${CMAKE_CXX_COMPILER}
+ ARGS ${CMAKE_CXX_COMPILER_ARG1} -dumpversion
+ OUTPUT_VARIABLE gcc_compiler_version
+ )
#MESSAGE("GCC Version: ${gcc_compiler_version}")
IF(gcc_compiler_version MATCHES "4\\.[0-9]\\.[0-9]")
+ SET(PCHSupport_FOUND TRUE)
+ ELSE(gcc_compiler_version MATCHES "4\\.[0-9]\\.[0-9]")
+ IF(gcc_compiler_version MATCHES "3\\.4\\.[0-9]")
SET(PCHSupport_FOUND TRUE)
+ ENDIF(gcc_compiler_version MATCHES "3\\.4\\.[0-9]")
ENDIF(gcc_compiler_version MATCHES "4\\.[0-9]\\.[0-9]")
-
+
SET(_PCH_include_prefix "-I")
+ELSE(CMAKE_COMPILER_IS_GNUCXX)
+
+ IF(WIN32)
+ SET(PCHSupport_FOUND TRUE) # for experimental msvc support
+ SET(_PCH_include_prefix "/I")
+ ELSE(WIN32)
+ SET(PCHSupport_FOUND FALSE)
+ ENDIF(WIN32)
+
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
-
-MACRO(_PCH_GET_COMPILE_FLAGS _out_compile_flags)
+MACRO(_PCH_GET_COMPILE_FLAGS _out_compile_flags)
STRING(TOUPPER "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}" _flags_var_name)
- SET(return_value ${${_flags_var_name}} )
-
+ SET(${_out_compile_flags} ${${_flags_var_name}} )
+
IF(CMAKE_COMPILER_IS_GNUCXX)
-
GET_TARGET_PROPERTY(_targetType ${_PCH_current_target} TYPE)
- IF(${_targetType} STREQUAL SHARED_LIBRARY)
- LIST(APPEND return_value "${return_value} -fPIC")
- ENDIF(${_targetType} STREQUAL SHARED_LIBRARY)
-
+ IF(${_targetType} STREQUAL SHARED_LIBRARY AND NOT WIN32)
+ LIST(APPEND ${_out_compile_flags} "${${_out_compile_flags}} -fPIC")
+ ENDIF()
+
+ ELSE(CMAKE_COMPILER_IS_GNUCXX)
+ ## TODO ... ? or does it work out of the box
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
-
+
GET_DIRECTORY_PROPERTY(DIRINC INCLUDE_DIRECTORIES )
FOREACH(item ${DIRINC})
- LIST(APPEND return_value "${_PCH_include_prefix}${item}")
+ LIST(APPEND ${_out_compile_flags} "${_PCH_include_prefix}${item}")
ENDFOREACH(item)
-
- SET(_build_type "${CMAKE_BUILD_TYPE}")
-
- #MESSAGE(STATUS "build type: `${CMAKE_BUILD_TYPE}'")
- IF (NOT _build_type)
- SET(_build_type "Debug")
- ENDIF (NOT _build_type)
-
- string(TOUPPER ${_build_type} _build_type)
- SET(_def_name "COMPILE_DEFINITIONS_${_build_type}")
- GET_DIRECTORY_PROPERTY(_directory_flags ${_def_name})
- FOREACH(item ${_directory_flags})
- LIST(APPEND return_value "-D${item}")
- ENDFOREACH(item)
- GET_DIRECTORY_PROPERTY(_directory_flags COMPILE_DEFINITIONS)
- LIST(APPEND ${_out_compile_flags} ${return_value})
- FOREACH(_def ${_directory_flags})
- LIST(APPEND ${_out_compile_flags} "-D${_def}")
- ENDFOREACH(_def)
+ GET_DIRECTORY_PROPERTY(_directory_flags DEFINITIONS)
+ GET_DIRECTORY_PROPERTY(_global_definitions DIRECTORY ${CMAKE_SOURCE_DIR} DEFINITIONS)
+ #MESSAGE("_directory_flags ${_directory_flags} ${_global_definitions}" )
+ LIST(APPEND ${_out_compile_flags} ${_directory_flags})
+ LIST(APPEND ${_out_compile_flags} ${_global_definitions})
LIST(APPEND ${_out_compile_flags} ${CMAKE_CXX_FLAGS} )
-
+
SEPARATE_ARGUMENTS(${_out_compile_flags})
-
-ENDMACRO(_PCH_GET_COMPILE_FLAGS)
-#
-#
-#
+ENDMACRO(_PCH_GET_COMPILE_FLAGS)
MACRO(_PCH_WRITE_PCHDEP_CXX _targetName _include_file _dephelp)
SET(${_dephelp} ${CMAKE_CURRENT_BINARY_DIR}/${_targetName}_pch_dephelp.cxx)
FILE(WRITE ${${_dephelp}}
-"#include \"${_include_file}\"
+"#include \"${_include_file}\"
int testfunction()
{
return 0;
}
"
- )
+ )
ENDMACRO(_PCH_WRITE_PCHDEP_CXX )
-#
-#
-#
-
MACRO(_PCH_GET_COMPILE_COMMAND out_command _input _output)
- FILE(TO_NATIVE_PATH ${_input} _native_input)
- FILE(TO_NATIVE_PATH ${_output} _native_output)
-
+ FILE(TO_NATIVE_PATH ${_input} _native_input)
+ FILE(TO_NATIVE_PATH ${_output} _native_output)
+
+
+ IF(CMAKE_COMPILER_IS_GNUCXX)
+ IF(CMAKE_CXX_COMPILER_ARG1)
+ # remove leading space in compiler argument
+ STRING(REGEX REPLACE "^ +" "" pchsupport_compiler_cxx_arg1 ${CMAKE_CXX_COMPILER_ARG1})
+
+ SET(${out_command}
+ ${CMAKE_CXX_COMPILER} ${pchsupport_compiler_cxx_arg1} ${_compile_FLAGS} -x c++-header -o ${_output} ${_input}
+ )
+ ELSE(CMAKE_CXX_COMPILER_ARG1)
+ SET(${out_command}
+ ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} -x c++-header -o ${_output} ${_input}
+ )
+ ENDIF(CMAKE_CXX_COMPILER_ARG1)
+ ELSE(CMAKE_COMPILER_IS_GNUCXX)
+
+ SET(_dummy_str "#include <${_input}>")
+ FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/pch_dummy.cpp ${_dummy_str})
+
+ SET(${out_command}
+ ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} /c /Fp${_native_output} /Yc${_native_input} pch_dummy.cpp
+ )
+ #/out:${_output}
+
+ ENDIF(CMAKE_COMPILER_IS_GNUCXX)
- IF(CMAKE_COMPILER_IS_GNUCXX)
- SET(${out_command}
- ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} -x c++-header -o ${_output} ${_input}
- )
- ENDIF(CMAKE_COMPILER_IS_GNUCXX)
-
ENDMACRO(_PCH_GET_COMPILE_COMMAND )
-#
-#
-#
+
MACRO(_PCH_GET_TARGET_COMPILE_FLAGS _cflags _header_name _pch_path _dowarn )
FILE(TO_NATIVE_PATH ${_pch_path} _native_pch_path)
-
+
IF(CMAKE_COMPILER_IS_GNUCXX)
# for use with distcc and gcc >4.0.1 if preprocessed files are accessible
# on all remote machines set
@@ -130,22 +136,22 @@ MACRO(_PCH_GET_TARGET_COMPILE_FLAGS _cflags _header_name _pch_path _dowarn )
SET(${_cflags} "${PCH_ADDITIONAL_COMPILER_FLAGS} -include ${CMAKE_CURRENT_BINARY_DIR}/${_header_name} " )
ENDIF (_dowarn)
ELSE(CMAKE_COMPILER_IS_GNUCXX)
-
- set(${_cflags} "/Fp${_native_pch_path} /Yu${_header_name}" )
-
- ENDIF(CMAKE_COMPILER_IS_GNUCXX)
-
+
+ set(${_cflags} "/Fp${_native_pch_path} /Yu${_header_name}" )
+
+ ENDIF(CMAKE_COMPILER_IS_GNUCXX)
+
ENDMACRO(_PCH_GET_TARGET_COMPILE_FLAGS )
MACRO(GET_PRECOMPILED_HEADER_OUTPUT _targetName _input _output)
GET_FILENAME_COMPONENT(_name ${_input} NAME)
GET_FILENAME_COMPONENT(_path ${_input} PATH)
- SET(_output "${CMAKE_CURRENT_BINARY_DIR}/${_name}.gch/${_targetName}_${CMAKE_BUILD_TYPE}.h++")
+ SET(_output "${CMAKE_CURRENT_BINARY_DIR}/${_name}.gch/${_targetName}_${CMAKE_BUILD_TYPE}.gch")
ENDMACRO(GET_PRECOMPILED_HEADER_OUTPUT _targetName _input)
MACRO(ADD_PRECOMPILED_HEADER_TO_TARGET _targetName _input _pch_output_to_use )
-
+
# to do: test whether compiler flags match between target _targetName
# and _pch_output_to_use
GET_FILENAME_COMPONENT(_name ${_input} NAME)
@@ -159,26 +165,26 @@ MACRO(ADD_PRECOMPILED_HEADER_TO_TARGET _targetName _input _pch_output_to_use )
_PCH_GET_TARGET_COMPILE_FLAGS(_target_cflags ${_name} ${_pch_output_to_use} ${_dowarn})
# MESSAGE("Add flags ${_target_cflags} to ${_targetName} " )
- SET_TARGET_PROPERTIES(${_targetName}
- PROPERTIES
- COMPILE_FLAGS ${_target_cflags}
- )
+ SET_TARGET_PROPERTIES(${_targetName}
+ PROPERTIES
+ COMPILE_FLAGS ${_target_cflags}
+ )
ADD_CUSTOM_TARGET(pch_Generate_${_targetName}
- DEPENDS ${_pch_output_to_use}
- )
-
+ DEPENDS ${_pch_output_to_use}
+ )
+
ADD_DEPENDENCIES(${_targetName} pch_Generate_${_targetName} )
-
+
ENDMACRO(ADD_PRECOMPILED_HEADER_TO_TARGET)
MACRO(ADD_PRECOMPILED_HEADER _targetName _input)
SET(_PCH_current_target ${_targetName})
-
+
IF(NOT CMAKE_BUILD_TYPE)
- MESSAGE(FATAL_ERROR
- "This is the ADD_PRECOMPILED_HEADER macro. "
+ MESSAGE(FATAL_ERROR
+ "This is the ADD_PRECOMPILED_HEADER macro. "
"You must set CMAKE_BUILD_TYPE!"
)
ENDIF(NOT CMAKE_BUILD_TYPE)
@@ -189,7 +195,6 @@ MACRO(ADD_PRECOMPILED_HEADER _targetName _input)
SET(_dowarn 1)
ENDIF("${ARGN}" STREQUAL "0")
-
GET_FILENAME_COMPONENT(_name ${_input} NAME)
GET_FILENAME_COMPONENT(_path ${_input} PATH)
GET_PRECOMPILED_HEADER_OUTPUT( ${_targetName} ${_input} _output)
@@ -200,42 +205,39 @@ MACRO(ADD_PRECOMPILED_HEADER _targetName _input)
_PCH_WRITE_PCHDEP_CXX(${_targetName} ${_input} _pch_dephelp_cxx)
IF(${_targetType} STREQUAL SHARED_LIBRARY)
- ADD_LIBRARY(${_targetName}_pch_dephelp SHARED ${_pch_dephelp_cxx} )
+ ADD_LIBRARY(${_targetName}_pch_dephelp STATIC ${_pch_dephelp_cxx} )
ELSE(${_targetType} STREQUAL SHARED_LIBRARY)
ADD_LIBRARY(${_targetName}_pch_dephelp STATIC ${_pch_dephelp_cxx})
ENDIF(${_targetType} STREQUAL SHARED_LIBRARY)
FILE(MAKE_DIRECTORY ${_outdir})
-
+
_PCH_GET_COMPILE_FLAGS(_compile_FLAGS)
-
+
#MESSAGE("_compile_FLAGS: ${_compile_FLAGS}")
- #message("COMMAND ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} -x c++-header -o ${_output} ${_input}")
+ #message("COMMAND ${CMAKE_CXX_COMPILER} ${_compile_FLAGS} -x c++-header -o ${_output} ${_input}")
SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_BINARY_DIR}/${_name} PROPERTIES GENERATED 1)
ADD_CUSTOM_COMMAND(
- OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_name}
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_name}
COMMAND ${CMAKE_COMMAND} -E copy ${_input} ${CMAKE_CURRENT_BINARY_DIR}/${_name} # ensure same directory! Required by gcc
DEPENDS ${_input}
)
-
+
#message("_command ${_input} ${_output}")
_PCH_GET_COMPILE_COMMAND(_command ${CMAKE_CURRENT_BINARY_DIR}/${_name} ${_output} )
- #message("${_command}")
-
+
#message(${_input} )
#message("_output ${_output}")
ADD_CUSTOM_COMMAND(
- OUTPUT ${_output}
+ OUTPUT ${_output}
COMMAND ${_command}
DEPENDS ${_input} ${CMAKE_CURRENT_BINARY_DIR}/${_name} ${_targetName}_pch_dephelp
- )
-
+ )
ADD_PRECOMPILED_HEADER_TO_TARGET(${_targetName} ${_input} ${_output} ${_dowarn})
ENDMACRO(ADD_PRECOMPILED_HEADER)
-
# Generates the use of precompiled in a target,
# without using depency targets (2 extra for each target)
# Using Visual, must also add ${_targetName}_pch to sources
@@ -243,73 +245,71 @@ ENDMACRO(ADD_PRECOMPILED_HEADER)
MACRO(GET_NATIVE_PRECOMPILED_HEADER _targetName _input)
- if(CMAKE_GENERATOR MATCHES Visual*)
+ if(CMAKE_GENERATOR MATCHES Visual*)
- SET(_dummy_str "#include \"${_input}\"\n"
- "// This is required to suppress LNK4221. Very annoying.\n"
- "void *g_${_targetName}Dummy = 0\;\n")
+ SET(_dummy_str "#include \"${_input}\"\n"
+ "// This is required to suppress LNK4221. Very annoying.\n"
+ "void *g_${_targetName}Dummy = 0\;\n")
- # Use of cxx extension for generated files (as Qt does)
- SET(${_targetName}_pch ${CMAKE_CURRENT_BINARY_DIR}/${_targetName}_pch.cxx)
- if(EXISTS ${${_targetName}_pch})
- # Check if contents is the same, if not rewrite
- # todo
- else(EXISTS ${${_targetName}_pch})
- FILE(WRITE ${${_targetName}_pch} ${_dummy_str})
- endif(EXISTS ${${_targetName}_pch})
- endif(CMAKE_GENERATOR MATCHES Visual*)
+ # Use of cxx extension for generated files (as Qt does)
+ SET(${_targetName}_pch ${CMAKE_CURRENT_BINARY_DIR}/${_targetName}_pch.cxx)
+ if(EXISTS ${${_targetName}_pch})
+ # Check if contents is the same, if not rewrite
+ # todo
+ else(EXISTS ${${_targetName}_pch})
+ FILE(WRITE ${${_targetName}_pch} ${_dummy_str})
+ endif(EXISTS ${${_targetName}_pch})
+ endif(CMAKE_GENERATOR MATCHES Visual*)
ENDMACRO(GET_NATIVE_PRECOMPILED_HEADER)
-
MACRO(ADD_NATIVE_PRECOMPILED_HEADER _targetName _input)
- IF( "${ARGN}" STREQUAL "0")
- SET(_dowarn 0)
- ELSE( "${ARGN}" STREQUAL "0")
- SET(_dowarn 1)
- ENDIF("${ARGN}" STREQUAL "0")
-
- if(CMAKE_GENERATOR MATCHES Visual*)
- # Auto include the precompile (useful for moc processing, since the use of
- # precompiled is specified at the target level
- # and I don't want to specifiy /F- for each moc/res/ui generated files (using Qt)
-
- GET_TARGET_PROPERTY(oldProps ${_targetName} COMPILE_FLAGS)
- if (${oldProps} MATCHES NOTFOUND)
- SET(oldProps "")
- endif(${oldProps} MATCHES NOTFOUND)
-
- SET(newProperties "${oldProps} /Yu\"${_input}\" /FI\"${_input}\"")
- SET_TARGET_PROPERTIES(${_targetName} PROPERTIES COMPILE_FLAGS "${newProperties}")
-
- #also inlude ${oldProps} to have the same compile options
- SET_SOURCE_FILES_PROPERTIES(${${_targetName}_pch} PROPERTIES COMPILE_FLAGS "${oldProps} /Yc\"${_input}\"")
-
- else(CMAKE_GENERATOR MATCHES Visual*)
-
- if (CMAKE_GENERATOR MATCHES Xcode)
- # For Xcode, cmake needs my patch to process
- # GCC_PREFIX_HEADER and GCC_PRECOMPILE_PREFIX_HEADER as target properties
-
- GET_TARGET_PROPERTY(oldProps ${_targetName} COMPILE_FLAGS)
- if (${oldProps} MATCHES NOTFOUND)
- SET(oldProps "")
- endif(${oldProps} MATCHES NOTFOUND)
-
- # When buiding out of the tree, precompiled may not be located
- # Use full path instead.
- GET_FILENAME_COMPONENT(fullPath ${_input} ABSOLUTE)
-
- SET_TARGET_PROPERTIES(${_targetName} PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${fullPath}")
- SET_TARGET_PROPERTIES(${_targetName} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES")
-
- else (CMAKE_GENERATOR MATCHES Xcode)
-
- #Fallback to the "old" precompiled suppport
- #ADD_PRECOMPILED_HEADER(${_targetName} ${_input} ${_dowarn})
- endif(CMAKE_GENERATOR MATCHES Xcode)
- endif(CMAKE_GENERATOR MATCHES Visual*)
-
-ENDMACRO(ADD_NATIVE_PRECOMPILED_HEADER)
+ IF( "${ARGN}" STREQUAL "0")
+ SET(_dowarn 0)
+ ELSE( "${ARGN}" STREQUAL "0")
+ SET(_dowarn 1)
+ ENDIF("${ARGN}" STREQUAL "0")
+
+ if(CMAKE_GENERATOR MATCHES Visual*)
+ # Auto include the precompile (useful for moc processing, since the use of
+ # precompiled is specified at the target level
+ # and I don't want to specifiy /F- for each moc/res/ui generated files (using Qt)
+
+ GET_TARGET_PROPERTY(oldProps ${_targetName} COMPILE_FLAGS)
+ if (${oldProps} MATCHES NOTFOUND)
+ SET(oldProps "")
+ endif(${oldProps} MATCHES NOTFOUND)
+
+ SET(newProperties "${oldProps} /Yu\"${_input}.h\" /FI\"${_input}.h\"")
+ SET_TARGET_PROPERTIES(${_targetName} PROPERTIES COMPILE_FLAGS "${newProperties}")
+
+ #also inlude ${oldProps} to have the same compile options
+ SET_SOURCE_FILES_PROPERTIES(${_input}.cpp PROPERTIES COMPILE_FLAGS "${oldProps} /Yc\"${_input}.h\"")
+
+ else(CMAKE_GENERATOR MATCHES Visual*)
+
+ if (CMAKE_GENERATOR MATCHES Xcode)
+ # For Xcode, cmake needs my patch to process
+ # GCC_PREFIX_HEADER and GCC_PRECOMPILE_PREFIX_HEADER as target properties
+
+ GET_TARGET_PROPERTY(oldProps ${_targetName} COMPILE_FLAGS)
+ if (${oldProps} MATCHES NOTFOUND)
+ SET(oldProps "")
+ endif(${oldProps} MATCHES NOTFOUND)
+
+ # When buiding out of the tree, precompiled may not be located
+ # Use full path instead.
+ GET_FILENAME_COMPONENT(fullPath ${_input} ABSOLUTE)
+
+ SET_TARGET_PROPERTIES(${_targetName} PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${fullPath}")
+ SET_TARGET_PROPERTIES(${_targetName} PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER "YES")
+
+ else (CMAKE_GENERATOR MATCHES Xcode)
+
+ #Fallback to the "old" precompiled suppport
+ #ADD_PRECOMPILED_HEADER(${_targetName} ${_input} ${_dowarn})
+ endif(CMAKE_GENERATOR MATCHES Xcode)
+ endif(CMAKE_GENERATOR MATCHES Visual*)
+ENDMACRO(ADD_NATIVE_PRECOMPILED_HEADER) \ No newline at end of file
diff --git a/cmake/FindPlatform.cmake b/cmake/FindPlatform.cmake
new file mode 100644
index 00000000000..60ce00149b3
--- /dev/null
+++ b/cmake/FindPlatform.cmake
@@ -0,0 +1,16 @@
+# default to x86 platform. We'll check for X64 in a bit
+SET(PLATFORM X86)
+
+# This definition is necessary to work around a bug with Intellisense described
+# here: http://tinyurl.com/2cb428. Syntax highlighting is important for proper
+# debugger functionality.
+
+IF(CMAKE_SIZEOF_VOID_P MATCHES 8)
+ MESSAGE(STATUS "Detected 64-bit platform.")
+ if(WIN32)
+ ADD_DEFINITIONS("-D_WIN64")
+ ENDIF()
+ SET (PLATFORM X64)
+ELSE()
+ MESSAGE(STATUS "Detected 32-bit platform.")
+ENDIF()