summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt426
1 files changed, 383 insertions, 43 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 523d445ef..0aee569a3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,3 +1,5 @@
+#####################################################################
+#
# "Getting Started with CMake", a tutorial video by Eric Wing.
# Part 1 of 6: http://www.youtube.com/watch?v=CLvZTyji_Uw
# Part 2 of 6: http://www.youtube.com/watch?v=gUW-RrRQjEg
@@ -11,8 +13,22 @@
# WITH_* : option to use an external package or not
# ENABLE_* : option to use an internal feature/code or not
# HAVE_* : internal variable indicating if we have and are using something
-cmake_minimum_required( VERSION 2.8.4 )
-project( eAthena )
+#
+#####################################################################
+
+
+#cmake_minimum_required( VERSION 2.8.4 )
+# Functional changes from 2.8.3 to 2.8.4:
+# string(SUBSTRING) works with length -1 as "rest of string"
+# changes to some CPack generators
+# CYGWIN no longer defines WIN32
+# CMP0017: Prefer files from the CMake module directory when including from there.
+set( CMAKE_LEGACY_CYGWIN_WIN32 0 )
+cmake_minimum_required( VERSION 2.8.3 )
+project( eAthena C )
+if( CYGWIN )
+ unset( WIN32 )
+endif()
#
@@ -21,27 +37,49 @@ project( eAthena )
if( ALLOW_SAME_DIRECTORY )
elseif( "${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}" )
option( ALLOW_SAME_DIRECTORY "Allow CMake to build in the source directory." OFF )
- message( FATAL_ERROR "Do not use the source directory to build your files, instead create a separate folder and build there.\nExample:\n mkdir build\n cd build\n cmake -G\"Unix Makefiles\" ..\n make install\nTo skip this check, set ALLOW_SAME_DIRECTORY to 1 or ON" )
+ message( FATAL_ERROR
+ "Do not use the source directory to build your files, instead delete CMakeCache.txt, create a separate folder and build there.\n"
+ "Example: (build in subdir 'build' and install to source dir)\n"
+ " rm -f CMakeCache.txt\n"
+ " mkdir build\n"
+ " cd build\n"
+ " cmake -G\"Unix Makefiles\" -DINSTALL_TO_SOURCE=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo ..\n"
+ " make install\n"
+ " cd ..\n"
+ " rm -rf build\n"
+ "To skip this check, set ALLOW_SAME_DIRECTORY to ON (-DALLOW_SAME_DIRECTORY=ON)" )
endif()
#
# Global stuff
#
-set( GLOBAL_LIBRARIES CACHE INTERNAL "" )
-set( GLOBAL_INCLUDE_DIRS CACHE INTERNAL "" )
-set( GLOBAL_DEFINITIONS CACHE INTERNAL "" )
+set( GLOBAL_LIBRARIES ${LINK_LIBRARIES} CACHE INTERNAL "" )# list (comma separated values)
+set( GLOBAL_INCLUDE_DIRS ${INCLUDE_DIRECTORIES} CACHE INTERNAL "" )# list (comma separated values)
+set( GLOBAL_DEFINITIONS ${COMPILE_DEFINITIONS} CACHE INTERNAL "" )# string (space separated values -DFOO=bar)
mark_as_advanced( GLOBAL_LIBRARIES GLOBAL_INCLUDE_DIRS GLOBAL_DEFINITIONS )
if( WIN32 )
- list( APPEND GLOBAL_DEFINITIONS FD_SETSIZE=4096 )
- list( APPEND GLOBAL_LIBRARIES "oldnames.lib" "ws2_32.lib" )
+ set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DFD_SETSIZE=4096" )
endif()
if( MSVC )
- list( APPEND GLOBAL_DEFINITIONS _CRT_SECURE_NO_DEPRECATE _CRT_NONSTDC_NO_DEPRECATE DB_MANUAL_CAST_TO_UNION )
+ set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} "oldnames.lib" "ws2_32.lib" )
+ set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE" )
endif()
#
+# 3rd party
+#
+add_subdirectory( 3rdparty )
+include( CheckCSourceCompiles )
+include( CheckCSourceRuns )
+include( CheckIncludeFile )
+include( CheckFunctionExists )
+include( FindFunctionLibrary )
+include( TestBigEndian )
+
+
+#
# Find svnversion
#
message( STATUS "Detecting svnversion" )
@@ -60,20 +98,6 @@ message( STATUS "Detecting Subversion" )
find_package( Subversion )
message( STATUS "Detecting Subversion - done" )
-
-#
-# Find math library (FreeBSD)
-#
-message( STATUS "Detecting math library" )
-find_library( M_LIBRARIES m )
-mark_as_advanced( M_LIBRARIES )
-if( M_LIBRARIES )
- message( STATUS "Found m: ${M_LIBRARIES}" )
- list( APPEND GLOBAL_LIBRARIES ${M_LIBRARIES} )
-endif()
-message( STATUS "Detecting math library - done" )
-
-
#
# PACKETVER
#
@@ -87,17 +111,285 @@ endif()
# SVNVERSION
#
if( SVNVERSION_EXECUTABLE )
+ message( STATUS "Getting svn version" )
execute_process( COMMAND ${SVNVERSION_EXECUTABLE} ${PROJECT_SOURCE_DIR}
OUTPUT_VARIABLE SVNVERSION
OUTPUT_STRIP_TRAILING_WHITESPACE )
string( REGEX REPLACE "[^1234567890MSexported]" "_" SVNVERSION ${SVNVERSION} )
+ message( STATUS "Found version: ${SVNVERSION}" )
+ message( STATUS "Getting svn version - done" )
endif()
if( Subversion_FOUND AND SVNVERSION )
+ message( STATUS "Getting svn branch" )
Subversion_WC_INFO( ${PROJECT_SOURCE_DIR} eAthena )
if( eAthena_WC_URL )
string( REGEX MATCH "[^/]+$" BRANCH ${eAthena_WC_URL} )
set( SVNVERSION "${BRANCH}-${SVNVERSION}" )
+ message( STATUS "Found branch: ${BRANCH}" )
+ endif()
+ message( STATUS "Getting svn branch - done" )
+endif()
+
+
+#
+# math library (FreeBSD/Linux/Solaris)
+#
+message( STATUS "Detecting math library (m)" )
+CHECK_INCLUDE_FILE( math.h HAVE_MATH_H )
+if( NOT HAVE_MATH_H )
+ message( FATAL_ERROR "math.h not found" )
+endif()
+set( CMAKE_REQUIRED_LIBRARIES ${GLOBAL_LIBRARIES} )
+find_function_library( floor FUNCTION_FLOOR_LIBRARIES m )
+if( FUNCTION_FLOOR_LIBRARIES )
+ message( STATUS "Adding global library: ${FUNCTION_FLOOR_LIBRARIES}" )
+ set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${FUNCTION_FLOOR_LIBRARIES} )
+endif()
+message( STATUS "Detecting math library (m) - done" )
+
+
+#
+# dynamic loading library (Linux)
+#
+if( NOT WIN32 )
+message( STATUS "Detecting dynamic loading library (dl)" )
+set( CMAKE_REQUIRED_LIBRARIES ${GLOBAL_LIBRARIES} )
+find_function_library( dlopen FUNCTION_DLOPEN_LIBRARIES dl )
+if( FUNCTION_DLOPEN_LIBRARIES )
+ message( STATUS "Adding global library: ${FUNCTION_DLOPEN_LIBRARIES}" )
+ set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${FUNCTION_DLOPEN_LIBRARIES} )
+endif()
+message( STATUS "Detecting dynamic loading library (dl) - done" )
+endif()
+
+
+#
+# networking library (Solaris/MinGW)
+#
+if( NOT MSVC )
+message( STATUS "Detecting networking library (socket/nsl/ws2_32)" )
+set( CMAKE_REQUIRED_LIBRARIES ${GLOBAL_LIBRARIES} )
+find_function_library( bind FUNCTION_BIND_LIBRARIES socket ws2_32 )
+if( FUNCTION_BIND_LIBRARIES )
+ message( STATUS "Adding global library: ${FUNCTION_BIND_LIBRARIES}" )
+ set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${FUNCTION_BIND_LIBRARIES} )
+endif()
+set( CMAKE_REQUIRED_LIBRARIES ${GLOBAL_LIBRARIES} )
+find_function_library( gethostbyname FUNCTION_GETHOSTBYNAME_LIBRARIES nsl )
+if( FUNCTION_GETHOSTBYNAME_LIBRARIES )
+ message( STATUS "Adding global library: ${FUNCTION_GETHOSTBYNAME_LIBRARIES}" )
+ set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${FUNCTION_GETHOSTBYNAME_LIBRARIES} )
+endif()
+message( STATUS "Detecting networking library (socket/nsl/ws2_32) - done" )
+endif()
+
+
+#
+# Test for big endian
+#
+TEST_BIG_ENDIAN( BIG_ENDIAN )
+if( NOT DEFINED BIG_ENDIAN )
+ message( WARNING "unable to determine endianess, only LITTLE ENDIAN is supported" )
+elseif( BIG_ENDIAN )
+ message( FATAL_ERROR "bigendian is not supported" )
+endif()
+
+
+#
+# Test typecast to union
+#
+message( STATUS "Check for typecast to union" )
+set( SOURCECODE
+ "typedef union Foonion{\n"
+ " int i;\n"
+ " unsigned int ui;\n"
+ " const char* s;\n"
+ "} Foonion;\n"
+ "int get_i(Foonion onion){ return onion.i; }\n"
+ "int main(int argc, char** argv){\n"
+ " int i = 0;\n"
+ " return get_i(((Foonion)(int)i));\n"
+ "}\n"
+ )
+CHECK_C_SOURCE_COMPILES( "${SOURCECODE}" HAVE_TYPECAST_TO_UNION )
+if( HAVE_TYPECAST_TO_UNION )
+ message( STATUS "Check for typecast to union - yes" )
+else()
+ message( STATUS "Check for typecast to union - no" )
+ set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DDB_MANUAL_CAST_TO_UNION" )
+endif()
+
+
+#
+# Test monotonic clock
+#
+# CLOCK_MONOTONIC clock for clock_gettime
+# Normally defines _POSIX_TIMERS > 0 and _POSIX_MONOTONIC_CLOCK (for posix
+# compliant systems) and __FreeBSD_cc_version >= 500005 (for FreeBSD
+# >= 5.1.0, which does not have the posix defines (ref. r11983)) would be
+# checked but some systems define them even when they do not support it
+# (ref. bugreport:1003).
+#
+message( STATUS "Check for monotonic clock" )
+set( SOURCECODE
+ "#include <sys/time.h>\n"
+ "#include <time.h>\n"
+ "#include <unistd.h>\n"
+ "int main(int argc, char** argv){\n"
+ " struct timespec tval;\n"
+ " return clock_gettime(CLOCK_MONOTONIC, &tval);\n"
+ "}\n"
+ )
+find_library( RT_LIBRARY rt )# (optional, rt on Debian)
+mark_as_advanced( RT_LIBRARY )
+set( CMAKE_REQUIRED_LIBRARIES ${GLOBAL_LIBRARIES} ${RT_LIBRARY} )
+CHECK_C_SOURCE_RUNS( "${SOURCECODE}" HAVE_MONOTONIC_CLOCK )
+if( HAVE_MONOTONIC_CLOCK )
+ message( STATUS "Check for monotonic clock - yes" )
+ set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${RT_LIBRARY} )
+ set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DHAVE_MONOTONIC_CLOCK" )
+else()
+ message( STATUS "Check for monotonic clock - no" )
+endif()
+
+
+#
+# Test if function exists:
+# setrlimit - used to set the socket limit
+# strnlen - string length with upper scan bound
+# getpid - process id
+# gettid - thread id
+#
+CHECK_FUNCTION_EXISTS( setrlimit HAVE_SETRLIMIT )
+CHECK_FUNCTION_EXISTS( strnlen HAVE_STRNLEN )
+CHECK_FUNCTION_EXISTS( getpid HAVE_GETPID )
+CHECK_FUNCTION_EXISTS( gettid HAVE_GETTID )
+foreach( define HAVE_SETRLIMIT HAVE_STRNLEN HAVE_GETPID HAVE_GETTID )
+ if( ${define} )
+ set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -D${define}" )
+ endif()
+endforeach()
+
+
+#
+# Use RDTSC instruction as a timing source (time stamp counter on x86 since Pentium) (default=OFF)
+#
+# Enable it when you've timing issues. (ex: in conjunction with XEN or Other Virtualization mechanisms)
+# Please ensure that you've disabled dynamic CPU-Frequencys, such as power saving options.
+# (On the most modern Dedicated Servers cpufreq is preconfigured, see your distribution's manual how to disable it)
+#
+option( ENABLE_RDTSC "use RDTSC instruction as a timing source (default=OFF)" OFF )
+if( ENABLE_RDTSC )
+ set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DENABLE_RDTSC" )
+ message( STATUS "Enabled RDTSC as a timing source" )
+endif()
+
+
+#
+# Enable extra debug code (default=OFF)
+#
+option( ENABLE_EXTRA_DEBUG_CODE "enable extra debug code (default=OFF)" OFF )
+if( ENABLE_EXTRA_DEBUG_CODE )
+ set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DDEBUG" )
+ message( STATUS "Enabled extra DEBUG code" )
+endif()
+
+
+#
+# Enable builtin memory manager (default=default)
+#
+set( MEMMGR_OPTIONS "default;yes;no" )
+set( ENABLE_MEMMGR "default" CACHE STRING "enable builtin memory manager: ${MEMMGR_OPTIONS} (default=default)" )
+set_property( CACHE ENABLE_MEMMGR PROPERTY STRINGS ${MEMMGR_OPTIONS} )
+if( ENABLE_MEMMGR STREQUAL "default" )
+ # use source code default
+elseif( ENABLE_MEMMGR STREQUAL "yes" )
+ set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DUSE_MEMMGR" )
+ message( STATUS "Enabled the builtin memory manager" )
+elseif( ENABLE_MEMMGR STREQUAL "no" )
+ set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DNO_MEMMGR" )
+ message( STATUS "Disabled the builtin memory manager" )
+else()
+ message( FATAL_ERROR "invalid option ENABLE_MEMMGR=${ENABLE_MEMMGR} (valid options: ${MEMMGR_OPTIONS})" )
+endif()
+
+
+#
+# Enable memory library (default=system)
+#
+set( MEMORY_OPTIONS "system;memwatch;dmalloc;gcollect" )
+set( ENABLE_MEMORY "system" CACHE STRING "enable memory library: ${MEMORY_OPTIONS} (default=system)" )
+set_property( CACHE ENABLE_MEMORY PROPERTY STRINGS ${MEMORY_OPTIONS} )
+if( ENABLE_MEMORY STREQUAL "system" )
+ # use system functions
+
+elseif( ENABLE_MEMORY STREQUAL "memwatch" )
+ CHECK_INCLUDE_FILE( memwatch.h HAVE_MEMWATCH_H )
+ find_library( MEMWATCH_LIBRARY memwatch )
+ mark_as_advanced( MEMWATCH_LIBRARY )
+ if( HAVE_MEMWATCH_H AND MEMWATCH_LIBRARY )
+ message( STATUS "Adding global library: ${MEMWATCH_LIBRARY}" )
+ set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${MEMWATCH_LIBRARY} )
+ set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DMEMWATCH" )
+ message( STATUS "Enabled the memory library memwatch" )
+ else()
+ message( FATAL_ERROR "Failed to enable the memory library memwatch" )
+ endif()
+
+elseif( ENABLE_MEMORY STREQUAL "dmalloc" )
+ CHECK_INCLUDE_FILE( dmalloc.h HAVE_DMALLOC_H )
+ find_library( DMALLOC_LIBRARY dmalloc )
+ mark_as_advanced( DMALLOC_LIBRARY )
+ if( HAVE_DMALLOC_H AND DMALLOC_LIBRARY )
+ message( STATUS "Adding global library: ${DMALLOC_LIBRARY}" )
+ set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${DMALLOC_LIBRARY} )
+ set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DDMALLOC -DDMALLOC_FUNC_CHECK" )
+ message( STATUS "Enabled the memory library dmalloc" )
+ else()
+ message( FATAL_ERROR "Failed to enable the memory library dmalloc" )
+ endif()
+
+elseif( ENABLE_MEMORY STREQUAL "gcollect" )
+ CHECK_INCLUDE_FILE( gc.h HAVE_GC_H )
+ find_library( GC_LIBRARY gc )
+ mark_as_advanced( GC_LIBRARY )
+ if( HAVE_GC_H AND GC_LIBRARY )
+ message( STATUS "Adding global library: ${GC_LIBRARY}" )
+ set_property( CACHE GLOBAL_LIBRARIES PROPERTY VALUE ${GLOBAL_LIBRARIES} ${GC_LIBRARY} )
+ set_property( CACHE GLOBAL_DEFINITIONS PROPERTY VALUE "${GLOBAL_DEFINITIONS} -DGCOLLECT" )
+ message( STATUS "Enabled the memory library gcollect" )
+ else()
+ message( FATAL_ERROR "Failed to enable the memory library gcollect" )
+ endif()
+
+else()
+ message( FATAL_ERROR "invalid option ENABLE_MEMORY=${ENABLE_MEMORY} (valid options: ${MEMORY_OPTIONS})" )
+endif()
+
+
+#
+# Enable profiler (default=none)
+#
+set( PROFILER_OPTIONS "none;gprof" )
+set( ENABLE_PROFILER "none" CACHE STRING "enable profiler: ${PROFILER_OPTIONS} (default=none)" )
+set_property( CACHE ENABLE_PROFILER PROPERTY STRINGS ${PROFILER_OPTIONS} )
+if( ENABLE_PROFILER STREQUAL "none" )
+ # no profiler
+
+elseif( ENABLE_PROFILER STREQUAL "gprof" )
+ if( CMAKE_C_COMPILER_ID STREQUAL "GNU" )
+ if( NOT HAVE_GPROF_FLAGS )
+ set_property( CACHE CMAKE_C_FLAGS PROPERTY VALUE "${CMAKE_C_FLAGS} -pg" )
+ set_property( CACHE CMAKE_EXE_LINKER_FLAGS PROPERTY VALUE "${CMAKE_EXE_LINKER_FLAGS} -pg" )
+ set( HAVE_GPROF_FLAGS ON CACHE INTERNAL "" )
+ endif()
+ message( STATUS "Enabled the profiler gprof" )
+ else()
+ message( FATAL_ERROR "Failed to enable the profiler gprof - not GNU" )
endif()
+
+else()
+ message( FATAL_ERROR "invalid option ENABLE_PROFILER=${ENABLE_PROFILER} (valid options: ${PROFILER_OPTIONS})" )
endif()
@@ -110,13 +402,16 @@ set( CPACK_PACKAGE_VERSION ${SVNVERSION} )
set( CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE )
#set( CPACK_MONOLITHIC_INSTALL ON )
include( CPACK OPTIONAL RESULT_VARIABLE HAVE_CPACK )
-if( NOT HAVE_CPACK )
+if( HAVE_CPACK )
+ option( WITH_CPACK "enable building packages with CPack ('package' target)" ON )
+endif()
+if( NOT WITH_CPACK )
# empty replacements
macro( cpack_add_component_group )
endmacro()
macro( cpack_add_component )
endmacro()
- message( STATUS "CPACK not found, package creation disabled" )
+ message( STATUS "Disabled package creation" )
endif()
set( Runtime "Runtime files" CACHE INTERNAL "" )
@@ -135,8 +430,8 @@ cpack_add_component( Development_base DESCRIPTION ${Development_base} DISPLAY_NA
#
# install stuff
#
-option( WITH_COMPONENT_RUNTIME "install/package files needed to run the project" ON )
-option( WITH_COMPONENT_DEVELOPMENT "install/package files needed to build the project" OFF )
+option( INSTALL_COMPONENT_RUNTIME "install/package files needed to run the project" ON )
+option( INSTALL_COMPONENT_DEVELOPMENT "install/package files needed to build the project" OFF )
option( INSTALL_TO_PATH "copy files to INSTALL_PATH" OFF )
option( INSTALL_TO_SOURCE "copy files to source directory, skips what is already there (${CMAKE_CURRENT_SOURCE_DIR})" OFF )
option( INSTALL_TO_SUBDIR "copy files to subdirectory (${CMAKE_CURRENT_BINARY_DIR}/install)" OFF )
@@ -221,7 +516,7 @@ set( RUNTIME_DIRECTORIES
)
if( INSTALL_TO_SOURCE )# skip, already in the source dir
else()
- if( WITH_COMPONENT_RUNTIME )
+ if( INSTALL_COMPONENT_RUNTIME )
install( FILES ${RUNTIME_FILES}
DESTINATION "."
COMPONENT Runtime_base )
@@ -232,8 +527,8 @@ else()
PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE
PATTERN "conf/import-tmpl" EXCLUDE )
endforeach()
- endif()
- if( WITH_COMPONENT_DEVELOPMENT )
+ endif( INSTALL_COMPONENT_RUNTIME )
+ if( INSTALL_COMPONENT_DEVELOPMENT )
install( FILES ${DEVELOPMENT_FILES}
DESTINATION "."
COMPONENT Development_base )
@@ -243,23 +538,68 @@ else()
COMPONENT Development_base
PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE )
endforeach()
- endif()
+ endif( INSTALL_COMPONENT_DEVELOPMENT )
endif()
-if( WITH_COMPONENT_RUNTIME )
+if( INSTALL_COMPONENT_RUNTIME )
# templates
- install( DIRECTORY "save-tmpl/"
- DESTINATION "save"
- COMPONENT Runtime_templates
- PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE )
- install( DIRECTORY "conf/import-tmpl/"
- DESTINATION "conf/import"
- COMPONENT Runtime_templates
- PATTERN ${SVN_FOLDER_PATTERN} EXCLUDE )
-endif()
+ set( _TEMPLATES
+ "save-tmpl" "save"
+ "conf/import-tmpl" "conf/import"
+ )
+ set( INSTALL_TEMPLATES_FILE "${CMAKE_CURRENT_BINARY_DIR}/InstallTemplates.cmake" )
+ file( WRITE "${INSTALL_TEMPLATES_FILE}"
+ "macro( INSTALL_TEMPLATE _SRC _DST )\n"
+ " set( SRC \"${CMAKE_CURRENT_SOURCE_DIR}/\${_SRC}\" )\n"
+ " set( DST \"\${CMAKE_INSTALL_PREFIX}/\${_DST}\" )\n"
+ " if( EXISTS \"\${DST}\" )\n"
+ " message( \"-- Already exists: \${DST}\" )\n"
+ " else()\n"
+ " message( \"-- Installing template: \${DST}\" )\n"
+ " execute_process( COMMAND \"${CMAKE_COMMAND}\" -E copy \"\${SRC}\" \"\${DST}\" )\n"
+ " endif()\n"
+ "endmacro()\n"
+ )
+ while( _TEMPLATES )
+ list( GET _TEMPLATES 0 _SRC )
+ list( GET _TEMPLATES 1 _DST )
+ list( REMOVE_AT _TEMPLATES 0 1 )
+ if( IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${_SRC}" )
+ file( GLOB _PATHS "${CMAKE_CURRENT_SOURCE_DIR}/${_SRC}/*" )
+ foreach( _PATH IN ITEMS ${_PATHS} )
+ string( REPLACE "${CMAKE_CURRENT_SOURCE_DIR}/${_SRC}/" "" _PATH "${_PATH}" )
+ if( NOT "${_PATH}" MATCHES "${SVN_FOLDER_PATTERN}" )
+ list( APPEND _TEMPLATES "${_SRC}/${_PATH}" "${_DST}/${_PATH}" )
+ endif()
+ endforeach()
+ else()
+ file( APPEND "${INSTALL_TEMPLATES_FILE}" "INSTALL_TEMPLATE( \"${_SRC}\" \"${_DST}\" )\n" )
+ endif()
+ endwhile()
+ install( SCRIPT "${INSTALL_TEMPLATES_FILE}"
+ COMPONENT Runtime_templates )
+endif( INSTALL_COMPONENT_RUNTIME )
#
-# subdirectories
+# sources
#
-add_subdirectory( 3rdparty )
+set( TARGET_LIST CACHE INTERNAL "" )
add_subdirectory( src )
+
+
+#####################################################################
+# final checks and warnings
+#
+if( CMAKE_SIZEOF_VOID_P EQUAL 8 )
+ message( WARNING "64bit should work, but is not recommended." )
+elseif( NOT CMAKE_SIZEOF_VOID_P EQUAL 4 )
+ message( FATAL_ERROR "unexpected architecture (CMAKE_SIZEOF_VOID_P is ${CMAKE_SIZEOF_VOID_P})" )
+endif()
+list( LENGTH TARGET_LIST _LEN )
+if( _LEN EQUAL 0 )
+ message( FATAL_ERROR "no targets available" )
+endif()
+message( STATUS "Available targets:" )
+foreach( _TARGET IN ITEMS ${TARGET_LIST} )
+ message( STATUS "\t${_TARGET}" )
+endforeach()