aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorclick <none@none>2010-06-15 19:19:17 +0200
committerclick <none@none>2010-06-15 19:19:17 +0200
commitd63b601f61b06f50fb18ae4f45fb54de03094e12 (patch)
treebc8de717eb653ce43d622a22c749e0de271482e3
parent93f8d212e0ee9e5439cdc18ad1dc2567b40182fe (diff)
First part of supporting CMake under Windows - this is WIP, and if you want to work on it, be on IRC.
This is NOT a complete product, but we need all hands on deck to get this sorted out ASAP, and as such we throw it in. No changes are done to Windows buildmethods untill this is -completed- and -working-. --HG-- branch : trunk
-rw-r--r--CMakeLists.txt162
-rw-r--r--cmake/FindACE.cmake65
-rw-r--r--cmake/FindAce.cmake31
-rw-r--r--cmake/FindMySQL.cmake134
-rw-r--r--cmake/FindMySql.cmake115
-rw-r--r--cmake/FindOpenSSL.cmake76
-rw-r--r--cmake/FindPCHSupport.cmake (renamed from cmake/PCH.cmake)312
7 files changed, 510 insertions, 385 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 22339551127..e5c4111c58c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,12 +18,26 @@ if(BUILDING_IN_SOURCE)
message(FATAL_ERROR "This project requires an out of source build. Remove the file 'CMakeCache.txt' found in this directory before continuing, and create a separate build directory and run 'cmake path_to_project [options]' from there.")
endif(BUILDING_IN_SOURCE)
+#
+# Basic packagesearching and setup (further support will be needed, this is a preliminary release!)
+#
+
include(CheckIncludeFiles)
-include(cmake/FindAce.cmake)
-include(cmake/FindMySql.cmake)
+include(cmake/FindPCHSupport.cmake)
+include(cmake/FindACE.cmake)
+include(cmake/FindMySQL.cmake)
+include(cmake/FindOpenSSL.cmake)
+
+#
+# *nix-specific packages ( zlib and bzip2 libraries will be built from sourcetree on WIN32-platforms)
+#
+
+if(UNIX)
include(cmake/FindReadline.cmake)
include(cmake/FindTermcap.cmake)
-include(cmake/PCH.cmake)
+include(FindZLIB)
+include(FindBZip2)
+endif(UNIX)
# Select the Release build configuration by default.
if(NOT CMAKE_BUILD_TYPE)
@@ -39,7 +53,6 @@ add_custom_target(uninstall
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
)
-option(CENTOS "CENTOS" 0)
option(DO_AUTHSERVER "Build authserver" 1)
option(DO_WORLDSERVER "Build worldserver" 1)
option(DO_CLI "With CLI" 1)
@@ -49,38 +62,58 @@ option(DO_RA "With RA" 0)
option(DO_SCRIPTS "With trinityscripts" 1)
option(DO_SQL "Copy SQL files" 0)
option(DO_TOOLS "Build tools" 0)
+if( UNIX )
+option(CENTOS "CENTOS" 0)
option(DO_WARN "Enable all compile warnings" 0)
+endif( UNIX )
-if(PREFIX)
+if( UNIX )
+ if( CENTOS )
+ add_definitions(-DCENTOS)
+ find_termcap()
+ else( CENTOS )
+ find_readline()
+ endif( CENTOS )
+endif( UNIX )
+
+# Set up the installation-prefix
+
+if( PREFIX )
set(CMAKE_INSTALL_PREFIX ${PREFIX})
-endif(PREFIX)
+endif( PREFIX )
set(GENREV_SRC
src/genrevision/genrevision.cpp
)
-if(DO_DEBUG)
+# Handle debugmode compiles (this will require further work for proper WIN32-setups)
+if( DO_DEBUG )
set(CMAKE_BUILD_TYPE Debug)
+
add_executable(genrev
${GENREV_SRC}
)
+
add_custom_target("revision.h" ALL
COMMAND "${CMAKE_BINARY_DIR}/genrev"
${CMAKE_SOURCE_DIR}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/src/server/shared"
DEPENDS genrev
)
-else (DO_DEBUG)
+else ( DO_DEBUG )
+
add_executable(genrev
${GENREV_SRC}
)
+
add_custom_target("revision.h" ALL
COMMAND "${CMAKE_BINARY_DIR}/genrev"
${CMAKE_SOURCE_DIR}
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/src/server/shared"
DEPENDS genrev
)
-endif(DO_DEBUG)
+
+endif( DO_DEBUG )
execute_process(
COMMAND hg tip --template {rev}
@@ -93,10 +126,10 @@ message("* TrinityCore revision : ${HG_REVISION}")
message("* Build binaries in : ${CMAKE_BUILD_TYPE} mode")
message("")
-if(CONF_DIR)
-else(CONF_DIR)
+if( CONF_DIR )
+else( CONF_DIR )
set(CONF_DIR ${CMAKE_INSTALL_PREFIX}/etc)
-endif(CONF_DIR)
+endif( CONF_DIR )
set(LIBSDIR ${CMAKE_INSTALL_PREFIX}/lib)
@@ -105,30 +138,30 @@ message("* Install libraries to : ${LIBSDIR}")
message("* Install configs to : ${CONF_DIR}")
message("")
-if(DO_AUTHSERVER)
+if( DO_AUTHSERVER )
message("* Build authserver : Yes (default)")
-else(DO_AUTHSERVER)
+else( DO_AUTHSERVER )
message("* Build authserver : No")
-endif(DO_AUTHSERVER)
+endif( DO_AUTHSERVER )
-if(DO_WORLDSERVER)
+if( DO_WORLDSERVER )
message("* Build worldserver : Yes (default)")
-else(DO_WORLDSERVER)
+else( DO_WORLDSERVER )
message("* Build worldserver : No")
-endif(DO_WORLDSERVER)
+endif( DO_WORLDSERVER )
-if(DO_SCRIPTS)
+if( DO_SCRIPTS )
message("* Build Trinityscripts : Yes (default)")
- ADD_DEFINITIONS(-DDO_SCRIPTS)
-else (DO_SCRIPTS)
+ add_definitions(-DDO_SCRIPTS)
+else( DO_SCRIPTS )
message("* Build Trinityscripts : No")
-endif(DO_SCRIPTS)
+endif( DO_SCRIPTS )
-if(DO_TOOLS)
+if( DO_TOOLS )
message("* Build map/vmap tools : Yes")
-else(DO_TOOLS)
+else( DO_TOOLS )
message("* Build map/vmap tools : No (default)")
-endif(DO_TOOLS)
+endif( DO_TOOLS )
if(DO_CLI)
message("* Build with CLI : Yes (default)")
@@ -144,27 +177,29 @@ else(DO_RA)
message("* Build with RA : No (default)")
endif(DO_RA)
-if(DO_DEBUG)
+if( DO_DEBUG )
message("* Build in debug-mode : Yes")
add_definitions(-g -DTRINITY_DEBUG)
-else(DO_DEBUG)
+else( DO_DEBUG )
message("* Build in debug-mode : No (default)")
add_definitions(--no-warnings) # makes build look nice, no warnings shown at all, only errors
-endif(DO_DEBUG)
+endif( DO_DEBUG )
-if(DO_PCH)
+if( DO_PCH )
message("* Use PCH : Yes (default)")
-else (DO_PCH)
+else( DO_PCH )
message("* Use PCH : No")
-endif(DO_PCH)
-
-if(DO_WARN)
- message("* Show all warnings : Yes")
- add_definitions(-Wall -Wfatal-errors -Wextra)
-else(DO_WARN)
- message("* Show compile-warnings : No (default)")
- add_definitions(--no-warnings) # makes build look nice, no warnings shown at all, only errors
-endif(DO_WARN)
+endif( DO_PCH )
+
+if( UNIX )
+ if( DO_WARN )
+ message("* Show all warnings : Yes")
+ add_definitions(-Wall -Wfatal-errors -Wextra)
+ else( DO_WARN )
+ message("* Show compile-warnings : No (default)")
+ add_definitions(--no-warnings) # makes build look nice, no warnings shown at all, only errors
+ endif( DO_WARN )
+endif( UNIX )
if(DO_SQL)
message("* Install SQL-files : Yes")
@@ -174,61 +209,22 @@ endif(DO_SQL)
message("")
-find_library(SSLLIB NAMES ssl DOC "SSL library")
-find_library(ZLIB z "Zlib library")
-
-FIND_MYSQL()
-
-if(UNIX)
- if(CENTOS)
- add_definitions(-DCENTOS)
- FIND_TERMCAP()
- else(CENTOS)
- FIND_READLINE()
- endif(CENTOS)
-endif(UNIX)
-
-FIND_ACE(ACE)
-if(ACE_FOUND)
- message(STATUS "Found ACE: ${ACE_LIBRARY}")
- message(STATUS "Include dir is: ${ACE_INCLUDE_DIR}")
-else(ACE_FOUND)
- message(SEND_ERROR "** ACE library not found! Trinity Core cannot be compiled!")
- message(SEND_ERROR "** Please build ACE from http://www.cs.wustl.edu/~schmidt/ACE.html")
- #For now remove msg about install from repo, as ubuntu/debian don't have needed ver in repos.
- #message(SEND_ERROR "** your distro may provide a binary for ACE e.g. for ubuntu try apt-get install libace-dev")
- return()
- #set(BUILD_ACE 1)
- #set(ACE_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/dep/ACE_wrappers ${CMAKE_BINARY_DIR}/dep/ACE_wrappers")
- #set(ACE_LIBRARY ACE)
- #message(STATUS "I will try to build ACE from: ${ACE_INCLUDE_DIR}")
- #message(STATUS "And link using: ${ACE_LIBRARY}")
-endif(ACE_FOUND)
-
-#somehow line below don't work. so for now change it to if exist
-#check_include_files(${ACE_INCLUDE_DIR}/ace/Stack_Trace.h HAVE_ACE_STACK_TRACE_H)
-if(EXISTS ${ACE_INCLUDE_DIR}/ace/Stack_Trace.h)
- set(HAVE_ACE_STACK_TRACE_H 1)
-else(EXISTS ${ACE_INCLUDE_DIR}/ace/Stack_Trace.h)
- message(STATUS "** Your libace is out of date. Please update your libace!")
-endif(EXISTS ${ACE_INCLUDE_DIR}/ace/Stack_Trace.h)
-
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
+# Little tweak for OS X
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(MACOSX 1)
set(OSX_LIBS /opt/local/lib/libcrypto.dylib)
add_definitions(-D__ASSERTMACROS__)
endif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
-set(CMAKE_SKIP_BUILD_RPATH FALSE)
-set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
+set(CMAKE_SKIP_BUILD_RPATH 0)
+set(CMAKE_BUILD_WITH_INSTALL_RPATH 0)
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
-set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+set(CMAKE_INSTALL_RPATH_USE_LINK_PATH 1)
add_subdirectory(externals)
add_subdirectory(src)
-
if(DO_SQL)
- add_subdirectory(sql)
+add_subdirectory(sql)
endif(DO_SQL)
diff --git a/cmake/FindACE.cmake b/cmake/FindACE.cmake
new file mode 100644
index 00000000000..f49dc8cf73a
--- /dev/null
+++ b/cmake/FindACE.cmake
@@ -0,0 +1,65 @@
+#
+# Find the ACE client includes and library
+#
+
+# This module defines
+# ACE_INCLUDE_DIRECTORIES, 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_DIRECTORIES
+ 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_DIRECTORIES )
+ set( ACE_FOUND 1 )
+ message( STATUS "Found ACE library: ${ACE_LIBRARY}")
+ message( STATUS "Found ACE headers: ${ACE_INCLUDE_DIRECTORIES}")
+ else ( ACE_INCLUDE_DIRECTORIES )
+ message(FATAL_ERROR "Could not find ACE headers! Please install ACE libraries and headers")
+ endif ( ACE_INCLUDE_DIRECTORIES )
+ endif ( ACE_LIBRARY )
+
+ mark_as_advanced( ACE_FOUND ACE_LIBRARY ACE_EXTRA_LIBRARIES ACE_INCLUDE_DIRECTORIES )
+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..09db299f234
--- /dev/null
+++ b/cmake/FindMySQL.cmake
@@ -0,0 +1,134 @@
+#
+# Find the MySQL client includes and library
+#
+
+# This module defines
+# MYSQL_INCLUDE_DIRECTORY, 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_DIRECTORIES ${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 )
+endif( UNIX )
+
+find_path(MYSQL_INCLUDE_DIRECTORIES
+ NAMES
+ mysql.h
+ PATHS
+ ${MYSQL_ADD_LIBRARY_DIR}
+ /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."
+)
+
+find_library( MYSQL_LIBRARY
+ NAMES
+ mysql libmysql mysqlclient
+ PATHS
+ ${MYSQL_ADD_INCLUDE_PATH}
+ /usr/lib
+ /usr/lib/mysql
+ /usr/local/lib
+ /usr/local/lib/mysql
+ /usr/local/mysql/lib
+ "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."
+)
+
+# 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_DIRECTORIES )
+ set( MYSQL_FOUND 1 )
+ message(STATUS "Found MySQL library: ${MYSQL_LIBRARY}")
+ message(STATUS "Found MySQL headers: ${MYSQL_INCLUDE_DIRECTORIES}")
+ else( MYSQL_INCLUDE_DIRECTORIES )
+ message(FATAL_ERROR "Could not find MySQL headers! Please install the development-libraries and headers.")
+ endif( MYSQL_INCLUDE_DIRECTORIES )
+ mark_as_advanced( MYSQL_FOUND MYSQL_LIBRARY MYSQL_EXTRA_LIBRARIES MYSQL_INCLUDE_DIRECTORY )
+endif( MYSQL_LIBRARY )
+
diff --git a/cmake/FindMySql.cmake b/cmake/FindMySql.cmake
deleted file mode 100644
index edd24ba1708..00000000000
--- a/cmake/FindMySql.cmake
+++ /dev/null
@@ -1,115 +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
- ${MYSQL_ADD_INCLUDE_DIR}
- /usr/include
- /usr/include/mysql
- /usr/local/include
- /usr/local/include/mysql
- /usr/local/mysql/include
- /usr/local/mysql/include/mysql
- "C:/Program Files/MySQL/include"
- "C:/Program Files/MySQL/MySQL Server 5.0/include"
- "C:/MySQL/include"
- "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/include"
- "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/include"
- DOC "Specify the directory containing mysql.h."
-)
-
-set(TMP_MYSQL_LIBRARIES "")
-
-foreach(LIB ${MYSQL_ADD_LIBRARIES})
- find_library("MYSQL_LIBRARIES_${LIB}" NAMES ${LIB}
- PATHS
- ${MYSQL_ADD_LIBRARY_PATH}
- /usr/lib
- /usr/lib/mysql
- /usr/local/lib
- /usr/local/lib/mysql
- /usr/local/mysql/lib
- "C:/Program Files/MySQL/lib"
- "C:/Program Files/MySQL/MySQL Server 5.0/lib/opt"
- "C:/MySQL/lib/debug"
- "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MySQL AB\\MySQL Server 5.0;Location]/lib/opt"
- "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\MySQL AB\\MySQL Server 5.0;Location]/lib/opt"
- DOC "Specify the mysql library here."
- )
- 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)
diff --git a/cmake/FindOpenSSL.cmake b/cmake/FindOpenSSL.cmake
new file mode 100644
index 00000000000..f4d48e8122e
--- /dev/null
+++ b/cmake/FindOpenSSL.cmake
@@ -0,0 +1,76 @@
+#
+# Find the OpenSSL client includes and library
+#
+
+# This module defines
+# OPENSSL_INCLUDE_DIRECTORIES, 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_DIRECTORIES AND OPENSSL_LIBRARIES )
+ # in cache already
+ set(OPENSSL_FOUND 1)
+else( OPENSSL_INCLUDE_DIRECTORIES AND OPENSSL_LIBRARIES )
+ set(OPENSSL_FOUND 0)
+ find_path(OPENSSL_INCLUDE_DIRECTORIES
+ NAMES
+ ssl.h
+ PATHS
+ /usr/include
+ /usr/include/openssl
+ /usr/local/include
+ /usr/local/include/openssl
+ /usr/local/openssl/include
+ "C:/OpenSSL/include/openssl"
+ "C:/OpenSSL-Win32/include/openssl"
+ DOC
+ "Specify the directory containing openssl.h."
+ )
+
+ if( WIN32 )
+ set(TMP_OPENSSL_LIBRARIES "libeay32 ssleay32")
+ endif( WIN32 )
+
+ find_library(OPENSSL_LIBRARIES
+ NAMES
+ ssleay32
+ ssl
+ PATHS
+ /usr/lib
+ /usr/lib/ssl
+ /usr/local/lib
+ /usr/local/lib/ssl
+ /usr/local/ssl/lib
+ "C:/OpenSSL/lib"
+ "C:/OpenSSL-Win32/lib"
+ DOC "Specify the OpenSSL library here."
+ )
+
+ if( WIN32 )
+ find_library(OPENSSL_EXTRA_LIBRARIES
+ NAMES
+ libeay32
+ PATHS
+ "C:/OpenSSL/lib"
+ "C:/OpenSSL-Win32/lib"
+ DOC
+ "if more libraries are necessary to link in a OpenSSL client, specify them here."
+ )
+ endif( WIN32 )
+
+ if( OPENSSL_LIBRARIES )
+ if( OPENSSL_INCLUDE_DIRECTORIES )
+ set( OPENSSL_FOUND 1 )
+ message(STATUS "Found OpenSSL library: ${OPENSSL_LIBRARIES}")
+ message(STATUS "Found OpenSSL headers: ${OPENSSL_INCLUDE_DIRECTORIES}")
+ else ( OPENSSL_INCLUDE_DIRECTORIES )
+ message(FATAL_ERROR "Could not find OpenSSL headers! Please install the development-headers")
+ endif( OPENSSL_INCLUDE_DIRECTORIES )
+ 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_DIRECTORIES )
+endif( OPENSSL_INCLUDE_DIRECTORIES AND OPENSSL_LIBRARIES )
diff --git a/cmake/PCH.cmake b/cmake/FindPCHSupport.cmake
index e7da9349cb6..4874808a0f9 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}\" /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) \ No newline at end of file