]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - win/CMakeLists.txt
Merge insp20
[user/henk/code/inspircd.git] / win / CMakeLists.txt
1 cmake_minimum_required(VERSION 2.8)
2
3 project(InspIRCd CXX)
4
5 set(CONFIG_DIR "conf" CACHE PATH "Configuration file path")
6 set(MODULE_DIR "modules" CACHE PATH "Module path")
7 set(DATA_DIR "data" CACHE PATH "Data path")
8 set(LOG_DIR "logs" CACHE PATH "Log file path")
9
10 set(EXTRA_INCLUDES "" CACHE PATH "Extra include paths")
11 set(EXTRA_LIBS "" CACHE PATH "Extra library paths")
12
13 set(INSPIRCD_BASE "${CMAKE_CURRENT_SOURCE_DIR}/../")
14
15 set(SYSTEM_NAME_VERSION ${CMAKE_SYSTEM})
16 set(SOCKETENGINE "select")
17
18 # Build with multiple processes
19 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
20
21 # Use our own NSIS template
22 set(CMAKE_MODULE_PATH "${INSPIRCD_BASE}/win")
23
24 # Grab version info from version.sh
25 file(STRINGS "${INSPIRCD_BASE}/src/version.sh" VERSIONSH)
26 string(REGEX REPLACE ".*InspIRCd-([0-9]*).*" "\\1" VERSION_MAJOR "${VERSIONSH}")
27 string(REGEX REPLACE ".*InspIRCd-[0-9]*\\.([0-9]*).*" "\\1" VERSION_MINOR "${VERSIONSH}")
28 string(REGEX REPLACE ".*InspIRCd-[0-9]*\\.[0-9]*\\.([0-9]*).*" "\\1" VERSION_PATCH "${VERSIONSH}")
29
30 if(MSVC)
31         # Without /SAFESEH:NO old libraries compiled with VS 2010 or older won't link correctly to VS2012 (eg, extra module libs)
32         set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
33         set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /SAFESEH:NO")
34         set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /SAFESEH:NO")
35         set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /SAFESEH:NO")
36         set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
37         set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL} /SAFESEH:NO")
38         set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /SAFESEH:NO")
39         set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /SAFESEH:NO")
40         set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
41         set(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL "${CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL} /SAFESEH:NO")
42         set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /SAFESEH:NO")
43         set(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO} /SAFESEH:NO")
44 endif(MSVC)
45
46 file(GLOB INSPIRCD_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
47 "${INSPIRCD_BASE}/win/inspircd_win32wrapper.cpp"
48 "${INSPIRCD_BASE}/win/win32service.cpp" "${INSPIRCD_BASE}/src/*.cpp"
49 "${INSPIRCD_BASE}/src/modes/*.cpp"
50 "${INSPIRCD_BASE}/src/socketengines/socketengine_select.cpp"
51 "${INSPIRCD_BASE}/src/threadengines/threadengine_win32.cpp")
52 list(SORT INSPIRCD_SOURCES)
53
54 include_directories("${INSPIRCD_BASE}/win" "${INSPIRCD_BASE}/include")
55
56 include_directories(${EXTRA_INCLUDES})
57 link_directories(${EXTRA_LIBS})
58
59 if(MSVC)
60         add_library(win32_memory STATIC "${INSPIRCD_BASE}/win/inspircd_memory_functions.cpp")
61 endif(MSVC)
62
63 configure_file("${INSPIRCD_BASE}/win/inspircd.rc.cmake" "${INSPIRCD_BASE}/win/inspircd.rc")
64 configure_file("${INSPIRCD_BASE}/make/template/config.h" "${INSPIRCD_BASE}/include/config.h")
65
66 add_executable(inspircd ${INSPIRCD_SOURCES} "${INSPIRCD_BASE}/win/inspircd.rc")
67 target_link_libraries(inspircd win32_memory)
68 set_target_properties(inspircd PROPERTIES ENABLE_EXPORTS ON)
69 install(TARGETS inspircd DESTINATION .)
70
71 add_subdirectory(modules)
72
73 # Package any DLLs in win/
74 file(GLOB EXTRA_DLLS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${INSPIRCD_BASE}/win/*.dll")
75 install(FILES ${EXTRA_DLLS} DESTINATION .)
76
77 # Install example configs
78 file(GLOB_RECURSE EXAMPLE_CONFIGS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${INSPIRCD_BASE}/docs/conf/*.example")
79 install(FILES ${EXAMPLE_CONFIGS} DESTINATION conf)
80
81 # Install nationalchars files
82 file(GLOB_RECURSE EXAMPLE_LOCALES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${INSPIRCD_BASE}/locales/*")
83 install(FILES ${EXAMPLE_LOCALES} DESTINATION locales)
84
85 # Create an empty data and logs directory and install them
86 file(MAKE_DIRECTORY ${DATA_DIR})
87 install(DIRECTORY ${DATA_DIR} DESTINATION .)
88 file(MAKE_DIRECTORY ${LOG_DIR})
89 install(DIRECTORY ${LOG_DIR} DESTINATION .)
90
91 if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
92         include(InstallRequiredSystemLibraries)
93
94         set(CPACK_PACKAGE_NAME "InspIRCd IRC Daemon")
95         set(CPACK_PACKAGE_VENDOR "InspIRCd Development Team")
96         set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
97         set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
98         set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH})
99         set(CPACK_PACKAGE_FILE_NAME "InspIRCd-${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
100         set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/../docs/COPYING")
101
102         set(CPACK_GENERATOR "NSIS")
103         set(CPACK_PACKAGE_INSTALL_DIRECTORY "InspIRCd")
104         # NSIS has a bug with full nix paths, so this must contain at least one backslash
105         set(CPACK_PACKAGE_ICON "${INSPIRCD_BASE}/win\\\\inspircd.ico")
106         set(CPACK_NSIS_MUI_ICON "${INSPIRCD_BASE}/win\\\\inspircd.ico")
107         set(CPACK_NSIS_MUI_UNIICON "${INSPIRCD_BASE}/win\\\\inspircd.ico")
108         set(CPACK_NSIS_INSTALLED_ICON_NAME "inspircd.exe")
109         set(CPACK_NSIS_URL_INFO_ABOUT "http://www.inspircd.org/")
110         set(CPACK_NSIS_COMPRESSOR "/SOLID zlib")
111
112         include(CPack)
113 endif(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")