summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore5
-rw-r--r--src/CMakeLists.txt79
-rw-r--r--src/bin/CMakeLists.txt2
-rw-r--r--src/bin/anoperc.cmake (renamed from src/bin/anoperc.in)0
4 files changed, 85 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..5c1b617a1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+/autom4te.cache
+Makefile
+config.cache
+config.log
+config.status
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
new file mode 100644
index 000000000..2a8c01d0e
--- /dev/null
+++ b/src/CMakeLists.txt
@@ -0,0 +1,79 @@
+# Find all the *.c and *.cpp files within the current source directory, and sort the list
+file(GLOB SRC_SRCS_C RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.c")
+file(GLOB SRC_SRCS_CPP RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.cpp")
+set(SRC_SRCS ${SRC_SRCS_C} ${SRC_SRCS_CPP})
+# If not using Visual Studio, don't include win32_memory.cpp, it's only required by Visual Studio to override it's override of the new/delete operators
+if(NOT MSVC)
+ list(REMOVE_ITEM SRC_SRCS win32_memory.cpp)
+endif(NOT MSVC)
+if(CMAKE244_OR_BETTER)
+ list(SORT SRC_SRCS)
+endif(CMAKE244_OR_BETTER)
+
+# Set all the files to use C++ as well as set their compile flags (use the module-specific compile flags, though)
+set_source_files_properties(${SRC_SRCS} PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}")
+
+# Iterate through all the source files
+foreach(SRC ${SRC_SRCS})
+ # Calculate the header file dependencies for the given source file
+ calculate_depends(${SRC})
+endforeach(SRC)
+
+# Under Windows, we also include a resource file to the build
+if(WIN32)
+ # Make sure that the resource file is seen as an RC file to be compiled with a resource compiler, not a C++ compiler
+ set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/win32.rc LANGUAGE RC)
+ # Add the resource file to the list of sources
+ append_to_list(SRC_SRCS ${CMAKE_CURRENT_BINARY_DIR}/win32.rc)
+ # For MinGW, we have to change the compile flags
+ if(MINGW)
+ set(RC_CFLAGS "-DMINGW -Ocoff -I${Anope_SOURCE_DIR}/include")
+ # If any sort of debugging is being enabled, add a _DEBUG define to the flags for the resource compiler
+ if(CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")
+ set(RC_CFLAGS "${RC_CFLAGS} -D_DEBUG")
+ endif(CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO")
+ set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/win32.rc COMPILE_FLAGS "${RC_CFLAGS}")
+ # For anything else, assumingly Visual Studio at this point, use a different set of compile flags
+ else(MINGW)
+ set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/win32.rc COMPILE_FLAGS "/i\"${Anope_SOURCE_DIR}/include\"")
+ endif(MINGW)
+ if(IN_SOURCE)
+ # Add the resource file to the list of files for CPack to ignore
+ add_to_cpack_ignored_files("win32.rc$" TRUE)
+ endif(IN_SOURCE)
+endif(WIN32)
+
+# Generate the Anope executable and set it's linker flags, also set it to export it's symbols even though it's not a module
+add_executable(${PROGRAM_NAME} ${SRC_SRCS})
+set_target_properties(${PROGRAM_NAME} PROPERTIES LINKER_LANGUAGE CXX LINK_FLAGS "${LDFLAGS}" ENABLE_EXPORTS ON)
+# On Windows, also link Anope to the wsock32 library, as well as set the version
+if(WIN32)
+ target_link_libraries(${PROGRAM_NAME} wsock32)
+ set_target_properties(${PROGRAM_NAME} PROPERTIES VERSION "${VERSION_DOTTED}")
+endif(WIN32)
+# Building the Anope executable requires the language files to be compiled first as well as the version.h header to be generated
+add_dependencies(${PROGRAM_NAME} language headers)
+
+# Get the filename of the Anope executable as it is in on this system
+get_target_property(SERVICES_BINARY ${PROGRAM_NAME} LOCATION)
+get_filename_component(SERVICES_BINARY ${SERVICES_BINARY} NAME)
+set(SERVICES_BIN "${SERVICES_BINARY}")
+if(IN_SOURCE)
+ # Add the Anope executable to the list of files for CPack to ignore
+ add_to_cpack_ignored_files("${SERVICES_BINARY}$" TRUE)
+endif(IN_SOURCE)
+
+# Generate sysconf.h from the earlier configuration
+configure_file(${Anope_SOURCE_DIR}/include/sysconf.h.cmake ${Anope_BINARY_DIR}/include/sysconf.h)
+
+# Go into the following directories and run their CMakeLists.txt as well
+add_subdirectory(bin)
+add_subdirectory(core)
+add_subdirectory(modules)
+add_subdirectory(protocol)
+add_subdirectory(tools)
+
+# Set Anope to be installed to the bin directory
+install(TARGETS ${PROGRAM_NAME}
+ DESTINATION .
+)
diff --git a/src/bin/CMakeLists.txt b/src/bin/CMakeLists.txt
index e6aea4ec4..34044ddf9 100644
--- a/src/bin/CMakeLists.txt
+++ b/src/bin/CMakeLists.txt
@@ -1,6 +1,6 @@
# If not on Windows, generate anoperc and install it along with mydbgen
if(NOT WIN32)
- configure_file(${Anope_SOURCE_DIR}/src/bin/anoperc.in ${Anope_BINARY_DIR}/src/bin/anoperc)
+ configure_file(${Anope_SOURCE_DIR}/src/bin/anoperc.cmake ${Anope_BINARY_DIR}/src/bin/anoperc)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/anoperc
DESTINATION .
)
diff --git a/src/bin/anoperc.in b/src/bin/anoperc.cmake
index 02c5bf18e..02c5bf18e 100644
--- a/src/bin/anoperc.in
+++ b/src/bin/anoperc.cmake