1 cmake_minimum_required(VERSION 2.8)
5 set(INSPIRCD_BASE "${CMAKE_CURRENT_SOURCE_DIR}/../")
7 # Use our own NSIS template
8 set(CMAKE_MODULE_PATH "${INSPIRCD_BASE}/win")
10 # Grab version info from version.sh
11 file(STRINGS "${INSPIRCD_BASE}/src/version.sh" VERSIONSH)
12 string(REGEX REPLACE ".*InspIRCd-([0-9]*).*" "\\1" MAJOR_VERSION "${VERSIONSH}")
13 string(REGEX REPLACE ".*InspIRCd-[0-9]*\\.([0-9]*).*" "\\1" MINOR_VERSION "${VERSIONSH}")
14 string(REGEX REPLACE ".*InspIRCd-[0-9]*\\.[0-9]*\\.([0-9]*).*" "\\1" PATCH_VERSION "${VERSIONSH}")
15 set(FULL_VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}")
17 # Write out inspircd_version.h
18 file(WRITE "${INSPIRCD_BASE}/win/inspircd_version.h" "#define BRANCH \"${MAJOR_VERSION}.${MINOR_VERSION}\"\n")
19 file(APPEND "${INSPIRCD_BASE}/win/inspircd_version.h" "#define VERSION \"${FULL_VERSION}\"\n")
20 file(APPEND "${INSPIRCD_BASE}/win/inspircd_version.h" "#define REVISION \"0\"\n")
21 file(APPEND "${INSPIRCD_BASE}/win/inspircd_version.h" "#define SYSTEM \"${CMAKE_SYSTEM}\"\n")
24 # Without /SAFESEH:NO old libraries compiled with VS 2010 or older won't link correctly to VS2012 (eg, extra module libs)
25 set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
26 set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /SAFESEH:NO")
27 set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /SAFESEH:NO")
28 set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /SAFESEH:NO")
29 set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
30 set(CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL "${CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL} /SAFESEH:NO")
31 set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /SAFESEH:NO")
32 set(CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO} /SAFESEH:NO")
33 set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS_DEBUG} /SAFESEH:NO")
34 set(CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL "${CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL} /SAFESEH:NO")
35 set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /SAFESEH:NO")
36 set(CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO} /SAFESEH:NO")
39 file(GLOB INSPIRCD_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
40 "${INSPIRCD_BASE}/win/inspircd_win32wrapper.cpp"
41 "${INSPIRCD_BASE}/win/win32service.cpp" "${INSPIRCD_BASE}/src/*.cpp"
42 "${INSPIRCD_BASE}/src/modes/*.cpp"
43 "${INSPIRCD_BASE}/src/socketengines/socketengine_select.cpp"
44 "${INSPIRCD_BASE}/src/threadengines/threadengine_win32.cpp")
45 list(SORT INSPIRCD_SOURCES)
47 include_directories("${INSPIRCD_BASE}/win" "${INSPIRCD_BASE}/include")
49 include_directories(${EXTRA_INCLUDES})
50 link_directories(${EXTRA_LIBS})
53 add_library(win32_memory STATIC "${INSPIRCD_BASE}/win/inspircd_memory_functions.cpp")
56 configure_file("${INSPIRCD_BASE}/win/inspircd.rc.cmake" "${INSPIRCD_BASE}/win/inspircd.rc")
57 add_executable(inspircd ${INSPIRCD_SOURCES} "${INSPIRCD_BASE}/win/inspircd.rc")
58 target_link_libraries(inspircd win32_memory)
59 set_target_properties(inspircd PROPERTIES ENABLE_EXPORTS ON)
60 install(TARGETS inspircd DESTINATION .)
62 add_subdirectory(modules)
64 # Package any DLLs in win/
65 file(GLOB EXTRA_DLLS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${INSPIRCD_BASE}/win/*.dll")
66 install(FILES ${EXTRA_DLLS} DESTINATION .)
68 # Install example configs
69 file(GLOB_RECURSE EXAMPLE_CONFIGS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${INSPIRCD_BASE}/docs/conf/*.example")
70 install(FILES ${EXAMPLE_CONFIGS} DESTINATION conf)
72 # Create an empty data and logs directory and install them
73 file(MAKE_DIRECTORY data)
74 install(DIRECTORY "data" DESTINATION .)
75 file(MAKE_DIRECTORY logs)
76 install(DIRECTORY "logs" DESTINATION .)
78 if(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
79 include(InstallRequiredSystemLibraries)
81 set(CPACK_PACKAGE_NAME "InspIRCd IRC Daemon")
82 set(CPACK_PACKAGE_VENDOR "InspIRCd Development Team")
83 set(CPACK_PACKAGE_VERSION_MAJOR ${MAJOR_VERSION})
84 set(CPACK_PACKAGE_VERSION_MINOR ${MINOR_VERSION})
85 set(CPACK_PACKAGE_VERSION_PATCH ${PATCH_VERSION})
86 set(CPACK_PACKAGE_FILE_NAME "InspIRCd-${FULL_VERSION}")
87 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/../docs/COPYING")
89 set(CPACK_GENERATOR "NSIS")
90 set(CPACK_PACKAGE_INSTALL_DIRECTORY "InspIRCd")
91 # NSIS has a bug with full nix paths, so this must contain at least one backslash
92 set(CPACK_PACKAGE_ICON "${INSPIRCD_BASE}/win\\\\inspircd.ico")
93 set(CPACK_NSIS_MUI_ICON "${INSPIRCD_BASE}/win\\\\inspircd.ico")
94 set(CPACK_NSIS_MUI_UNIICON "${INSPIRCD_BASE}/win\\\\inspircd.ico")
95 set(CPACK_NSIS_INSTALLED_ICON_NAME "inspircd.exe")
96 set(CPACK_NSIS_URL_INFO_ABOUT "http://www.inspircd.org/")
97 set(CPACK_NSIS_COMPRESSOR "/SOLID lzma")
100 endif(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")