From 81b7aa657110db03ceb861d8206fc6e805ede9c8 Mon Sep 17 00:00:00 2001 From: cyberbotx Date: Wed, 17 Dec 2008 20:18:40 +0000 Subject: Massive cleanup of the CMakeLists.txt files to finalize them. Edited configuration scripts for *nix and Windows to use CMake as well as support both in-source and out-of-source builds. Changed directory structure for *nix to match Windows to remove some conditionals in both CMake and Anope itself. git-svn-id: http://anope.svn.sourceforge.net/svnroot/anope/trunk@1841 5417fbe8-f217-4b02-8779-1006273d7864 --- .BANNER | 2 +- CMakeLists.txt | 322 +++++++++--------- Config | 203 ++++++------ data/CMakeLists.txt | 3 +- include/CMakeLists.txt | 96 +----- include/extern.h | 2 +- include/modules.h | 2 +- include/sysconf.h.cmake | 6 - install.js | 775 +++++++++++++------------------------------- lang/CMakeLists.txt | 102 +++--- src/CMakeLists.txt | 201 +++--------- src/bin/CMakeLists.txt | 5 +- src/core/CMakeLists.txt | 73 +---- src/init.c | 6 +- src/main.c | 77 +++-- src/modulemanager.cpp | 6 +- src/modules.c | 7 +- src/modules/CMakeLists.txt | 67 +--- src/protocol/CMakeLists.txt | 67 +--- src/tools/CMakeLists.txt | 68 +--- src/win32.rc.cmake | 6 +- 21 files changed, 696 insertions(+), 1400 deletions(-) diff --git a/.BANNER b/.BANNER index 659c322af..f6a9f89a5 100644 --- a/.BANNER +++ b/.BANNER @@ -9,7 +9,7 @@ CURVER This program will help you to compile your Services, and ask you questions regarding the compile-time settings of it during the -process. For more options type ./Config --help +process. For more options type SOURCE_DIR/Config --help Anope is a set of Services for IRC networks that allows users to manage their nicks and channels in a secure and efficient way, diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e5205998..4d3ea3c1f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,113 +1,115 @@ +# This usage of CMake requires at least version 2.6 (I don't know if it'll work with earlier versions) cmake_minimum_required(VERSION 2.6) -# # If the user specifies -DCMAKE_BUILD_TYPE on the command line, take their definition # and dump it in the cache along with proper documentation, otherwise set CMAKE_BUILD_TYPE # to Debug prior to calling PROJECT() -# -if(NOT WIN32 OR NOT MSVC) +# Only do this if not using Visual Studio +if(NOT MSVC) if(CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.") else(CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE DEBUG CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.") endif(CMAKE_BUILD_TYPE) -endif(NOT WIN32 OR NOT MSVC) +endif(NOT MSVC) +# Set the project as C++ primarily, but have C enabled for the checks required later project(Anope CXX) enable_language(C) +# If running under MinGW, we have to force the resource compiler settings (hopefully this will be fixed in a later version of CMake) if(MINGW) set(CMAKE_RC_COMPILER_INIT windres) - #message(STATUS "CMAKE_RC_OUTPUT_EXTENSION: ${CMAKE_RC_OUTPUT_EXTENSION}") enable_language(RC) - #message(STATUS "CMAKE_RC_OUTPUT_EXTENSION: ${CMAKE_RC_OUTPUT_EXTENSION}") - #set(CMAKE_RC_OUTPUT_EXTENSION .o) - #message(STATUS "CMAKE_RC_OUTPUT_EXTENSION: ${CMAKE_RC_OUTPUT_EXTENSION}") set(CMAKE_RC_COMPILE_OBJECT " -o ") endif(MINGW) +# Include the checking functions used later in this CMakeLists.txt include(CheckFunctionExists) include(CheckIncludeFile) include(CheckTypeSize) include(CheckCXXCompilerFlag) include(CheckLibraryExists) -if(NOT WIN32) - option(USE_RUN_CC_PL "Use run-cc.pl for building" OFF) -endif(NOT WIN32) +# Add an optional variable for using run-cc.pl for building, Perl will be checked later regardless of this setting +option(USE_RUN_CC_PL "Use run-cc.pl for building" OFF) -if(WIN32 AND MSVC) +# If using Visual Studio, set the C++ flags accordingly +if(MSVC) + # Remove the default exception handling flags, also remove default warning level flag string(REPLACE "/EHsc " "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) string(REPLACE "/GX " "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) - set(CXXFLAGS "${CXXFLAGS} /W4 /EHs /RTC1 /D_WIN32 /DMSVCPP /I${Anope_SOURCE_DIR}/include /I${Anope_BINARY_DIR}/include /I${Anope_BINARY_DIR}/lang") + string(REPLACE "/W3 " "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) + # Set the compile flags to have warnings on the max setting (but disable a few annoying ones), exception handling turned on, the proper defines, and the include directories + set(CXXFLAGS "${CXXFLAGS} /W4 /wd4251 /wd4706 /wd4800 /EHs /D_WIN32 /DMSVCPP /I\"${Anope_SOURCE_DIR}/include\" /I\"${Anope_BINARY_DIR}/include\" /I\"${Anope_BINARY_DIR}/lang\"") + # Set the module-specific compile flags to include a define for module compiling set(MODULE_CXXFLAGS "${CXXFLAGS} /DMODULE_COMPILE") -else(WIN32 AND MSVC) +# Otherwise, we're not using Visual Studio +else(MSVC) + # Set the compile flags to have all warnings on (including shadowed variables) and the include directories set(CXXFLAGS "${CXXFLAGS} -Wall -Wshadow -I${Anope_SOURCE_DIR}/include -I${Anope_BINARY_DIR}/include -I${Anope_BINARY_DIR}/lang") + # If on a *nix system, also set the compile flags to remove GNU extensions (favor ISO C++) as well as reject non-ISO C++ code, also remove all leading underscores in exported symbols if(UNIX) set(CXXFLAGS "${CXXFLAGS} -ansi -pedantic -fno-leading-underscore") + # Set the module-specific compile flags to the same setting as the compile flags + set(MODULE_CXXFLAGS "${CXXFLAGS}") + # If we aren't on a *nix system, set the compile flags to include a define for Windows else(UNIX) set(CXXFLAGS "${CXXFLAGS} -D_WIN32") + # Also, if we are building under MinGW, add another define for MinGW if(MINGW) set(CXXFLAGS "${CXXFLAGS} -DMINGW") endif(MINGW) + # Set the module-specific compile flags to include a define for module compiling + set(MODULE_CXXFLAGS "${CXXFLAGS} -DMODULE_COMPILE") endif(UNIX) - set(MODULE_CXXFLAGS "${CXXFLAGS}") -endif(WIN32 AND MSVC) -#message(STATUS "CMAKE_CXX_CREATE_SHARED_MODULE: ${CMAKE_CXX_CREATE_SHARED_MODULE}") -#if(CMAKE_BUILD_TYPE) -# set(CXXFLAGS "${CXXFLAGS} ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}}") -#endif(CMAKE_BUILD_TYPE) +endif(MSVC) +# If CMake has found that the given system requires a special library for dl* calls, include it with the linker flags if(CMAKE_DL_LIBS) set(LDFLAGS "${LDFLAGS} ${CMAKE_DL_LIBS}") endif(CMAKE_DL_LIBS) + +# Under MinGW, the -shared flag isn't properly set in the module-specific linker flags, add it from the C flags for shared libraries if(MINGW) - set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS} -Wl,--enable-auto-import -Wl,--export-all-symbols") + set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS}") endif(MINGW) -#set(MY_COMPILER ${CMAKE_CXX_COMPILER}) -#set(MY_COMP_ARG) +# Under Windows, we set the executable name for Anope to be anope if(WIN32) set(PROGRAM_NAME anope) +# Under *nix, we set the executable name for Anope to be services else(WIN32) set(PROGRAM_NAME services) - #set(CMAKE_CXX_LINK_EXECUTABLE " ${CXXFLAGS} -o ${LDFLAGS}") - #set(CMAKE_CXX_CREATE_SHARED_MODULE " ${CXXFLAGS} -o ${LDFLAGS}") endif(WIN32) -if(NOT WIN32 OR NOT MSVC) +# If we are not using Visual Studio, we'll run the following checks +if(NOT MSVC) + # Check if the C++ compiler can accept the -pipe flag, and add it to the compile flags if it works check_cxx_compiler_flag(-pipe HAVE_PIPE_FLAG) if(HAVE_PIPE_FLAG) set(CXXFLAGS "${CXXFLAGS} -pipe") endif(HAVE_PIPE_FLAG) + # The following are additional library checks, they are not required for Windows if(NOT WIN32) - check_library_exists(nsl inet_ntoa "" HAVE_NSL_LIB) - if(HAVE_NSL_LIB) - set(LDFLAGS "${LDFLAGS} -lnsl") - endif(HAVE_NSL_LIB) + # Check if socket is within the socket library (if the library exists), and add it to the linker flags if needed check_library_exists(socket socket "" HAVE_SOCKET_LIB) if(HAVE_SOCKET_LIB) set(LDFLAGS "${LDFLAGS} -lsocket") endif(HAVE_SOCKET_LIB) - check_library_exists(resolv res_query "" HAVE_RESOLV_LIB) - if(HAVE_RESOLV_LIB) - set(LDFLAGS "${LDFLAGS} -lresolv") - endif(HAVE_RESOLV_LIB) - check_library_exists(bsd revoke "" HAVE_BSD_LIB) - if(HAVE_BSD_LIB) - set(LDFLAGS "${LDFLAGS} -lbsd") - endif(HAVE_BSD_LIB) endif(NOT WIN32) + # Check if va_list can be copied as an array, and if it can, set the flag for it try_run(RUN_VA_LIST_AS_ARRAY COMPILE_VA_LIST_AS_ARRAY ${Anope_SOURCE_DIR} ${Anope_SOURCE_DIR}/va_list_check.c ) if(COMPILE_VA_LIST_AS_ARRAY AND NOT RUN_VA_LIST_AS_ARRAY) set(HAVE_VA_LIST_AS_ARRAY 1) endif(COMPILE_VA_LIST_AS_ARRAY AND NOT RUN_VA_LIST_AS_ARRAY) -endif(NOT WIN32 OR NOT MSVC) +endif(NOT MSVC) +# If DEFUMASK wasn't passed to CMake, set a default depending on if RUNGROUP was passed in or not if(NOT DEFUMASK) if(RUNGROUP) set(DEFUMASK "007") @@ -115,18 +117,24 @@ if(NOT DEFUMASK) set(DEFUMASK "077") endif(RUNGROUP) endif(NOT DEFUMASK) + +# Check for the existance of the following include files check_include_file(sys/types.h HAVE_SYS_TYPES_H) check_include_file(execinfo.h HAVE_BACKTRACE) +check_include_file(strings.h HAVE_STRINGS_H) +check_include_file(sys/select.h HAVE_SYS_SELECT_H) + +# Check for the existance of the following functions check_function_exists(gethostbyname HAVE_GETHOSTBYNAME) check_function_exists(gettimeofday HAVE_GETTIMEOFDAY) check_function_exists(setgrent HAVE_SETGRENT) check_function_exists(strcasecmp HAVE_STRCASECMP) check_function_exists(stricmp HAVE_STRICMP) -check_include_file(strings.h HAVE_STRINGS_H) check_function_exists(strlcat HAVE_STRLCAT) check_function_exists(strlcpy HAVE_STRLCPY) -check_include_file(sys/select.h HAVE_SYS_SELECT_H) check_function_exists(umask HAVE_UMASK) + +# Check for the existance of the following types check_type_size(uint8_t UINT8_T) check_type_size(u_int8_t U_INT8_T) check_type_size(int16_t INT16_T) @@ -136,155 +144,148 @@ check_type_size(int32_t INT32_T) check_type_size(uint32_t UINT32_T) check_type_size(u_int32_t U_INT32_T) +# Strip the leading and trailing spaces from the compile flags if(CXXFLAGS) string(STRIP ${CXXFLAGS} CXXFLAGS) endif(CXXFLAGS) +# Strip the leading and trailing spaces from the linker flags if(LDFLAGS) string(STRIP ${LDFLAGS} LDFLAGS) endif(LDFLAGS) -#if(NOT WIN32) - find_program(GREP grep) - find_program(SH sh) - find_program(CHGRP chgrp) - find_program(CHMOD chmod) - #message(STATUS "grep: ${GREP}") - find_program(PERL perl) - if(PERL) - if(USE_RUN_CC_PL) - #set(MY_COMPILER ${Anope_SOURCE_DIR}/run-cc.pl) - #set(MY_COMP_ARG ${CMAKE_CXX_COMPILER}) - set(CMAKE_CXX_COMPILE_OBJECT "${Anope_SOURCE_DIR}/run-cc.pl ${CMAKE_CXX_COMPILE_OBJECT}") - set(CMAKE_CXX_LINK_EXECUTABLE "${Anope_SOURCE_DIR}/run-cc.pl ${CMAKE_CXX_LINK_EXECUTABLE}") - set(CMAKE_CXX_CREATE_SHARED_MODULE "${Anope_SOURCE_DIR}/run-cc.pl ${CMAKE_CXX_CREATE_SHARED_MODULE}") - endif(USE_RUN_CC_PL) - endif(PERL) -#endif(NOT WIN32) - -#set(CMAKE_BUILD_TYPE DEBUG) -#message(STATUS "CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}: ${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}}") -#message(STATUS "CMAKE_CXX_COMPILE_OBJECT: ${CMAKE_CXX_COMPILE_OBJECT}") -#set(CMAKE_CXX_COMPILE_OBJECT "${Anope_SOURCE_DIR}/run-cc.pl -o -c ") -#message(STATUS "CMAKE_CXX_COMPILE_OBJECT: ${CMAKE_CXX_COMPILE_OBJECT}") -# CMAKE_CXX_COMPILE_OBJECT: -o -c -# CMAKE_CXX_CREATE_SHARED_LIBRARY: -o -# CMAKE_CXX_CREATE_SHARED_MODULE: -o -# CMAKE_CXX_FLAGS_DEBUG: -g -# CMAKE_CXX_FLAGS_RELEASE: -O3 -DNDEBUG -# CMAKE_CXX_LINK_EXECUTABLE: -o -# CMAKE_CXX_OUTPUT_EXTENSION: .o -# CMAKE_SHARED_LIBRARY_CXX_FLAGS: -fPIC -# CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS: -shared -# CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG: -Wl,-soname, - -if(NOT BINDIR) - set(BINDIR "$ENV{HOME}/services") -endif(NOT BINDIR) - -if(DATADIR) - set(SERVICES_DIR "${DATADIR}") -else(DATADIR) - set(SERVICES_DIR "$ENV{HOME}/services") - #set(MODULE_PATH "$ENV{HOME}/services/modules/") - #set(DATADIR "${SERVICES_DIR}") -endif(DATADIR) -if(WIN32) - set(SERVICES_DIR "${SERVICES_DIR}/data") -endif(WIN32) -if(NOT DATADIR) - set(DATADIR "${SERVICES_DIR}") -endif(NOT DATADIR) - -#set(SERVICES_BINARY "") - +# Search for the following programs +find_program(GREP grep) +find_program(SH sh) +find_program(CHGRP chgrp) +find_program(CHMOD chmod) +find_program(PERL perl) + +# If perl is included on the system and the user wants to use run-cc.pl, change the commands for compiling and linking +if(PERL AND USE_RUN_CC_PL) + set(CMAKE_CXX_COMPILE_OBJECT "${PERL} ${Anope_SOURCE_DIR}/run-cc.pl ${CMAKE_CXX_COMPILE_OBJECT}") + set(CMAKE_CXX_LINK_EXECUTABLE "${PERL} ${Anope_SOURCE_DIR}/run-cc.pl ${CMAKE_CXX_LINK_EXECUTABLE}") + set(CMAKE_CXX_CREATE_SHARED_MODULE "${PERL} ${Anope_SOURCE_DIR}/run-cc.pl ${CMAKE_CXX_CREATE_SHARED_MODULE}") +endif(PERL AND USE_RUN_CC_PL) + +# If a INSTDIR wasn't passed in to CMake, set the default to the services directory under the user's home directory +if(NOT INSTDIR) + set(INSTDIR "$ENV{HOME}/services") +endif(NOT INSTDIR) + +# Set Anope's data install location to be the data directory under the install directory +set(DATADIR "${INSTDIR}/data") + +# Only process Anope's version on Windows, it's needed for win32.rc as well as version branding at link time if(WIN32) + # Find all lines in version.log that start with VERSION_ file(STRINGS ${Anope_SOURCE_DIR}/version.log VERSIONS REGEX "^VERSION_") - message(STATUS "VERSIONS: ${VERSIONS}") + # Iterate through the strings found foreach(VERSION_STR ${VERSIONS}) + # Get the length of the string string(LENGTH ${VERSION_STR} VERSION_LEN) + # Subtract 16 from the string's length (8 for VERSION_, 5 more for the type, 2 for the space and leading quote, 1 for the trailing quote) math(EXPR VERSION_NUM_LEN "${VERSION_LEN} - 16") + # Extract the type from the string string(SUBSTRING ${VERSION_STR} 8 5 VERSION_TYPE) + # Extract the actual value from the string string(SUBSTRING ${VERSION_STR} 15 ${VERSION_NUM_LEN} VERSION) - #message(STATUS "VERSION_TYPE: ${VERSION_TYPE} - VERSION: ${VERSION}") + # Set the version type to the value extract from above set(VERSION_${VERSION_TYPE} ${VERSION}) - #message(STATUS "VERSION_${VERSION_TYPE}: ${VERSION_${VERSION_TYPE}}") endforeach(VERSION_STR ${VERSIONS}) + # Set the version variables based on what was found above set(VERSION_COMMA "${VERSION_MAJOR},${VERSION_MINOR},${VERSION_PATCH},${VERSION_BUILD}") set(VERSION_DOTTED "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_BUILD}") set(VERSION_FULL "${VERSION_DOTTED}${VERSION_EXTRA}") - if(CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO") - set(FILEFLAGS "VS_FF_DEBUG") - else(CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO") - set(FILEFLAGS "0x0L") - endif(CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR CMAKE_BUILD_TYPE STREQUAL "RELWITHDEBINFO") - + # Generate the win32.rc file using the above variables configure_file(${Anope_SOURCE_DIR}/src/win32.rc.cmake ${Anope_BINARY_DIR}/src/win32.rc) endif(WIN32) +# Calculate dependencies for each header +# I would've done this inside the CMakeLists.txt for the include directory, but since it's added AFTER everything else, it won't help... + +# Firstly, find all the header files file(GLOB_RECURSE ALL_HEADERS "*.h") +# Iterate through the headers foreach(HEADER ${ALL_HEADERS}) + # Don't process the file if it's in an obsolete directory if(NOT HEADER MATCHES ".*obsolete.*") list(APPEND TMP_HEADERS ${HEADER}) + # In addition, also set up a variable to store the fullpath of the header, in a variable prefixed with just the header's filename for easy access later get_filename_component(HEADER_FILENAME ${HEADER} NAME) set(${HEADER_FILENAME}_FULLPATH ${HEADER}) endif(NOT HEADER MATCHES ".*obsolete.*") endforeach(HEADER) +# Set the list of headers to be all the non-obsolete ones, then sort the list set(ALL_HEADERS ${TMP_HEADERS}) list(SORT ALL_HEADERS) -message(STATUS "ALL_HEADERS: ${ALL_HEADERS}") -# Calculate dependencies for each header -# I would've done this inside the CMakeLists.txt for the include directory, but since it's added AFTER everything else, it won't help... +# This function will take a #include line and extract the filename minus the quotes +function(extract_include_filename INCLUDE FILENAME) + # Strip away leading and trailing whitespace from the line + string(STRIP ${INCLUDE} INCLUDE_STRIPPED) + # Find the filename including the quotes, it should be at the end of the line after whitespace was stripped + string(REGEX MATCH "\".*\"$" FILE ${INCLUDE_STRIPPED}) + # Get the length of the filename with quotes + string(LENGTH ${FILE} FILENAME_LEN) + # Subtract 2 from this length, for the quotes + math(EXPR FILENAME_LEN "${FILENAME_LEN} - 2") + # Overwrite the filename with a version sans quotes + string(SUBSTRING ${FILE} 1 ${FILENAME_LEN} FILE) + # Set the filename to the the given variable + set(${FILENAME} "${FILE}" PARENT_SCOPE) +endfunction(extract_include_filename) # Preparse step 1: get filenames sans paths +# Iterate through the headers foreach(HEADER ${ALL_HEADERS}) + # Find all the lines in the current header that have any form of #include on them, regardless of whitespace file(STRINGS ${HEADER} INCLUDES REGEX "^[ \t]*#[ \t]*include[ \t]*\".*\"[ \t]*$") - message(STATUS "${HEADER}'s includes: ${INCLUDES}") + # Get the filename only of the header we just checked get_filename_component(HEADER_FILENAME ${HEADER} NAME) + # Iterate through the strings containing #include (if any) foreach(INCLUDE ${INCLUDES}) - string(STRIP ${INCLUDE} INCLUDE) - string(REGEX MATCH "\".*\"$" FILENAME ${INCLUDE}) - string(LENGTH ${FILENAME} FILENAME_LEN) - math(EXPR FILENAME_LEN "${FILENAME_LEN} - 2") - string(SUBSTRING ${FILENAME} 1 ${FILENAME_LEN} FILENAME) - message(STATUS "INCLUDE FILENAME: ${FILENAME}") + # Extract the filename from the #include line + extract_include_filename(${INCLUDE} FILENAME) + # Append this filename to the list of headers for the header we are checking list(APPEND ${HEADER_FILENAME}_HEADERS ${FILENAME}) endforeach(INCLUDE) - if(${HEADER_FILENAME}_HEADERS) - message(STATUS "${HEADER_FILENAME}_HEADERS: ${${HEADER_FILENAME}_HEADERS}") - endif(${HEADER_FILENAME}_HEADERS) endforeach(HEADER) # Preparse step 2: for every header from above that had includes, recursively find the headers each header relies on +# Iterate through the headers (again) foreach(HEADER ${ALL_HEADERS}) + # Get the filename only of the current header get_filename_component(HEADER_FILENAME ${HEADER} NAME) + # If there were any include, we'll be checking them if(${HEADER_FILENAME}_HEADERS) + # Set the variables, old for all previously found headers, new for all newly found headers set(OLD_HEADERS) set(HEADERS ${${HEADER_FILENAME}_HEADERS}) set(NEW_HEADERS) - #message(STATUS "Before start of WHILE() for ${HEADER_FILENAME} - ${HEADERS}") + # Loop as long as there are still headers to be parsed while(HEADERS) + # Iterate through the list of the current headers foreach(CURR_HEADER ${HEADERS}) - #message(STATUS "CURR_HEADER: ${CURR_HEADER}") + # If that header has headers it relies on, we'll add them to the list of new headers if(${CURR_HEADER}_HEADERS) - #message(STATUS "${CURR_HEADER}_HEADERS: ${${CURR_HEADER}_HEADERS}") - #message(STATUS "NEW_HEADERS BEFORE: ${NEW_HEADERS}") foreach(CURR_HEADERS_HEADER ${${CURR_HEADER}_HEADERS}) list(APPEND NEW_HEADERS ${CURR_HEADERS_HEADER}) endforeach(CURR_HEADERS_HEADER) - #message(STATUS "NEW_HEADERS AFTER: ${NEW_HEADERS}") endif(${CURR_HEADER}_HEADERS) endforeach(CURR_HEADER) - #message(STATUS "NEW_HEADERS: ${NEW_HEADERS}") + # Append the headers we checked to the old headers list(APPEND OLD_HEADERS ${HEADERS}) + # Set the headers to check to the new headers (it may be empty and that'll exit the loop) set(HEADERS ${NEW_HEADERS}) + # Erase the new headers set(NEW_HEADERS) endwhile(HEADERS) + # OLD_HEADERS will now contain all headers that the current header relies on, remove duplicate headers from the list and sort the list list(REMOVE_DUPLICATES OLD_HEADERS) list(SORT OLD_HEADERS) - message(STATUS "${HEADER_FILENAME}'s OLD_HEADERS: ${OLD_HEADERS}") + # Set the current header's list of headers to the cleaned up list from above set(${HEADER_FILENAME}_HEADERS ${OLD_HEADERS}) endif(${HEADER_FILENAME}_HEADERS) endforeach(HEADER) @@ -295,82 +296,63 @@ set(language.h_FULLPATH ${Anope_BINARY_DIR}/lang/language.h) set(sysconf.h_FULLPATH ${Anope_BINARY_DIR}/include/sysconf.h) set(version.h_FULLPATH ${Anope_BINARY_DIR}/include/version.h) -# Final step: Replace the filename in each header's dependency list with full paths (MOVE TO OTHER CMakeLists.txt LATER!) -#foreach(HEADER ${ALL_HEADERS}) -# get_filename_component(HEADER_FILENAME ${HEADER} NAME) -# if(${HEADER_FILENAME}_HEADERS) -# set(NEW_HEADERS) -# foreach(CURR_HEADER ${${HEADER_FILENAME}_HEADERS}) -# list(APPEND NEW_HEADERS ${${CURR_HEADER}_FULLPATH}) -# endforeach(CURR_HEADER) -# message(STATUS "${HEADER_FILENAME}'s NEW_HEADERS: ${NEW_HEADERS}") -# set(${HEADER_FILENAME}_HEADERS ${NEW_HEADERS}) -# endif(${HEADER_FILENAME}_HEADERS) -#endforeach(HEADER) - +# This function is used in most of the src (sub)directories to calculate the header file dependencies for the given source file function(calculate_depends SRC) + # Find all the lines in the given source file that have any form of #include on them, regardless of whitespace file(STRINGS ${SRC} INCLUDES REGEX "^[ \t]*#[ \t]*include[ \t]*\".*\"[ \t]*$") - #message(STATUS "${SRC}'s includes: ${INCLUDES}") - #get_filename_component(HEADER_FILENAME ${HEADER} NAME) + # Reset the list of headers to empty set(HEADERS) + # Iterate through the strings containing #include (if any) foreach(INCLUDE ${INCLUDES}) - string(STRIP ${INCLUDE} INCLUDE) - string(REGEX MATCH "\".*\"$" FILENAME ${INCLUDE}) - string(LENGTH ${FILENAME} FILENAME_LEN) - math(EXPR FILENAME_LEN "${FILENAME_LEN} - 2") - string(SUBSTRING ${FILENAME} 1 ${FILENAME_LEN} FILENAME) - #message(STATUS "INCLUDE FILENAME: ${FILENAME}") - #list(APPEND ${HEADER_FILENAME}_HEADERS ${FILENAME}) + # Extract the filename from the #include line + extract_include_filename(${INCLUDE} FILENAME) + # Append the filename to the list of headers list(APPEND HEADERS ${FILENAME}) endforeach(INCLUDE) - #message(STATUS "${SRC}'s HEADERS: ${HEADERS}") + # Set the list of new headers to empty (this will store all the headers that the above list depends on) set(NEW_HEADERS) + # Iterate through the list of headers foreach(HEADER ${HEADERS}) - #message(STATUS "HEADER: ${HEADER} - ${HEADERS}_HEADERS: ${${HEADERS}_HEADERS}") + # If the current header has it's own headers to depend on, append those to the list of new headers if(${HEADER}_HEADERS) list(APPEND NEW_HEADERS ${${HEADER}_HEADERS}) endif(${HEADER}_HEADERS) endforeach(HEADER) + # If there were new headers, append them to the list of headers if(NEW_HEADERS) list(APPEND HEADERS ${NEW_HEADERS}) endif(NEW_HEADERS) + # If after all the above there is a list of header, we'll process them, converting them to full paths if(HEADERS) + # Remove duplicate headers from the list and sort the list list(REMOVE_DUPLICATES HEADERS) list(SORT HEADERS) - #message(STATUS "${SRC}'s HEADERS after NEW_HEADERS: ${HEADERS}") + # Set the list of full path headers to empty set(HEADERS_FULL) + # Iterate through the list of headers foreach(HEADER ${HEADERS}) - get_filename_component(HEADER_FILENAME ${HEADER} NAME) - list(APPEND HEADERS_FULL ${${HEADER_FILENAME}_FULLPATH}) + # Append the full path of the header to the full path headers list + list(APPEND HEADERS_FULL ${${HEADER}_FULLPATH}) endforeach(HEADER) - #message(STATUS "${SRC}'s HEADERS_FULL: ${HEADERS_FULL}") + # Set the given source file to depend on the headers given set_source_files_properties(${SRC} PROPERTIES OBJECT_DEPENDS "${HEADERS_FULL}") - list(APPEND ${PROGRAM_NAME}_HEADERS ${HEADERS_FULL}) endif(HEADERS) endfunction(calculate_depends) +# Go into the following directories and run their CMakeLists.txt as well add_subdirectory(data) add_subdirectory(lang) add_subdirectory(src) add_subdirectory(include) -#message("[in root] SERVICES_BIN: ${SERVICES_BIN}") - -#if(BINDIR) -# set(SERVICES_BIN "${BINDIR}/${SERVICES_BINARY}") -#else(BINDIR) -# set(SERVICES_BIN "$ENV{HOME}/services/${SERVICES_BINARY}") -# set(BINDIR "$ENV{HOME}/services") -#endif(BINDIR) - +# At install time, create the following additional directories install(CODE "file(MAKE_DIRECTORY \"${DATADIR}/backups\")") install(CODE "file(MAKE_DIRECTORY \"${DATADIR}/logs\")") install(CODE "file(MAKE_DIRECTORY \"${DATADIR}/modules/runtime\")") -if(NOT WIN32) - if(RUNGROUP) - install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"${DATADIR}/backups\")") - install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"${DATADIR}/logs\")") - install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"${DATADIR}/modules/runtime\")") - install(CODE "execute_process(COMMAND ${CHGRP} -R ${RUNGROUP} \"${DATADIR}\")") - endif(RUNGROUP) -endif(NOT WIN32) +# On non-Windows platforms, if RUNGROUP is set, change the permissions of the below directories, as well as the group of the data directory +if(NOT WIN32 AND RUNGROUP) + install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"${DATADIR}/backups\")") + install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"${DATADIR}/logs\")") + install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"${DATADIR}/modules/runtime\")") + install(CODE "execute_process(COMMAND ${CHGRP} -R ${RUNGROUP} \"${DATADIR}\")") +endif(NOT WIN32 AND RUNGROUP) diff --git a/Config b/Config index 37fb95300..36ae5b34e 100755 --- a/Config +++ b/Config @@ -2,7 +2,7 @@ # # Configuration script for Services. # -# Anope (c) 2003-2007 Anope team +# Anope (c) 2003-2008 Anope team # Contact us at dev@anope.org # # This program is free but copyrighted software; see the file COPYING for @@ -26,10 +26,10 @@ exists () { # because some shells don't have test -e } Load_Cache () { - if [ -f config.cache -a -r config.cache -a ! "$IGNORE_CACHE" ] ; then - echo "Using defaults from config.cache. To ignore, ./Config -nocache" + if [ -f $SOURCE_DIR/config.cache -a -r $SOURCE_DIR/config.cache -a ! "$IGNORE_CACHE" ] ; then + echo "Using defaults from config.cache. To ignore, $SOURCE_DIR/Config -nocache" echo "" - . config.cache + . $SOURCE_DIR/config.cache CAN_QUICK="yes" else CAN_QUICK="no" @@ -37,20 +37,15 @@ Load_Cache () { } Run_CMake () { - WITH_BIN="" - WITH_DATA="" + WITH_INST="" WITH_RUN="" WITH_PERM="" BUILD_TYPE="" RUN_CC_PL="" + GEN_TYPE="" - if [ "$BINDEST" != "" ] ; then - WITH_BIN="-DBINDIR:STRING=$BINDEST" - WITH_DATA="-DDATADIR:STRING=$DATDEST" - fi - - if [ "$DATDEST" != "" ] ; then - WITH_DATA="-DDATADIR:STRING=$DATDEST" + if [ "$INSTDEST" != "" ] ; then + WITH_INST="-DINSTDIR:STRING=$INSTDEST" fi if [ "$RUNGROUP" != "" ] ; then @@ -73,21 +68,30 @@ Run_CMake () { RUN_CC_PL="-DUSE_RUN_CC_PL:BOOLEAN=OFF" fi - echo "cmake $WITH_BIN $WITH_DATA $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL ." + case `uname -s` in + MINGW*) + GEN_TYPE="-G\"MSYS Makefiles\"" + ;; + esac + + echo "cmake $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $SOURCE_DIR" - cmake $WITH_BIN $WITH_DATA $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL . + cmake $WITH_INST $WITH_RUN $WITH_PERM $BUILD_TYPE $RUN_CC_PL $SOURCE_DIR + + echo "" + echo "Now run make to build Anope." } ECHO2SUF='' if [ "`echo -n a ; echo -n b`" = "ab" ] ; then ECHO2='echo -n' elif [ "`echo 'a\c' ; echo 'b\c'`" = "ab" ] ; then - ECHO2='echo' ; ECHO2SUF='\c' + ECHO2='echo' ; ECHO2SUF='\c' elif [ "`printf 'a' 2>&1 ; printf 'b' 2>&1`" = "ab" ] ; then - ECHO2='printf "%s"' + ECHO2='printf "%s"' else - # oh well... - ECHO2='echo' + # oh well... + ECHO2='echo' fi export ECHO2 ECHO2SUF @@ -95,53 +99,61 @@ export ECHO2 ECHO2SUF # Init values ########################################################################### -BINDEST=$HOME/services -DATDEST=$HOME/services +INSTDEST=$HOME/services RUNGROUP= UMASK= DEBUG="no" USE_RUN_CC_PL="no" CAN_QUICK="no" +SOURCE_DIR=`dirname $0` ########################################################################### # Check out the options ########################################################################### while [ $# -ge 1 ] ; do - if [ $1 = "--help" ] ; then - echo "Config utility for Anope" - echo "------------------------" - echo "Syntax: ./Config [options]" - echo "-nocache Ignore settings saved in config.cache" - echo "-nointro Skip intro (disclaimer, etc)" - echo "-quick Skip questions, go straight to cmake" - exit 0 - elif [ $1 = "-nocache" ] ; then - IGNORE_CACHE="1" - elif [ $1 = "-nointro" ] ; then - NO_INTRO="1" - elif [ $1 = "-quick" -o $1 = "-q" ] ; then - Load_Cache - if [ "$CAN_QUICK" = "yes" ] ; then - Run_CMake - else - echo "" - echo "Can't find cache file (config.cache), aborting..." - fi - exit 0 + if [ $1 = "--help" ] ; then + echo "Config utility for Anope" + echo "------------------------" + echo "Syntax: ./Config [options]" + echo "-nocache Ignore settings saved in config.cache" + echo "-nointro Skip intro (disclaimer, etc)" + echo "-quick Skip questions, go straight to cmake" + exit 0 + elif [ $1 = "-nocache" ] ; then + IGNORE_CACHE="1" + elif [ $1 = "-nointro" ] ; then + NO_INTRO="1" + elif [ $1 = "-quick" -o $1 = "-q" ] ; then + Load_Cache + if [ "$CAN_QUICK" = "yes" ] ; then + Run_CMake + else + echo "" + echo "Can't find cache file (config.cache), aborting..." fi - shift 1 + exit 0 + fi + shift 1 done ########################################################################### if [ ! "$NO_INTRO" ] ; then - clear - . ./version.log - cat .BANNER | sed "s/CURVER/$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH$VERSION_EXTRA/" | more - echo "" + case `uname -s` in + MINGW*) + PAGER=less + ;; + *) + PAGER=more + clear + ;; + esac + . $SOURCE_DIR/version.log + cat $SOURCE_DIR/.BANNER | sed "s/CURVER/$VERSION_MAJOR.$VERSION_MINOR.$VERSION_PATCH$VERSION_EXTRA/" | sed "s@SOURCE_DIR@$SOURCE_DIR@" | $PAGER + echo "" else - echo "" + echo "" fi echo "Beginning Services configuration." @@ -152,7 +164,7 @@ echo "" ########################################################################### if [ ! "$IGNORE_CACHE" ] ; then - Load_Cache + Load_Cache fi # Ask the user anything we need to know ahead of time. @@ -165,10 +177,10 @@ ok=0 echo "Note: press Return for the default, or enter a new value." echo "In what directory do you want the binaries to be installed?" while [ $ok -eq 0 ] ; do - echo2 "[$BINDEST] " + echo2 "[$INSTDEST] " if read INPUT ; then : ; else echo "" ; exit 1 ; fi if [ ! "$INPUT" ] ; then - INPUT=$BINDEST + INPUT=$INSTDEST fi if [ ! -d "$INPUT" ] ; then if exists "$INPUT" ; then @@ -189,46 +201,12 @@ while [ $ok -eq 0 ] ; do ok=1 fi done -BINDEST=$INPUT -DATDEST=$INPUT +INSTDEST=$INPUT echo "" #### -ok=0 -echo "Where do you want the data files to be installed?" -while [ $ok -eq 0 ] ; do - echo2 "[$DATDEST] " - if read INPUT ; then : ; else echo "" ; exit 1 ; fi - if [ ! "$INPUT" ] ; then - INPUT=$DATDEST - fi - if [ ! -d "$INPUT" ] ; then - if exists "$INPUT" ; then - echo "$INPUT exists, but is not a directory!" - else - echo "$INPUT does not exist. Create it?" - echo2 "[y] " - read YN - if [ "$YN" != "n" ] ; then - if mkdir -p $INPUT ; then - ok=1 - fi - fi - fi - elif exists "$INPUT/include/services.h" ; then - echo "You cannot use the Services source directory as a target directory." - else - ok=1 - fi -done -DATDEST=$INPUT -echo "" - -#### - - OLD_RUNGROUP="$RUNGROUP" if [ "$RUNGROUP" ] ; then echo "Which group should all Services data files be owned by? (If Services" @@ -242,41 +220,41 @@ fi echo2 "[$RUNGROUP] " if read INPUT ; then : ; else echo "" ; exit 1 ; fi if [ "$INPUT" ] ; then - if [ "$INPUT" = "none" ] ; then - RUNGROUP="" - else - RUNGROUP="$INPUT" - fi + if [ "$INPUT" = "none" ] ; then + RUNGROUP="" + else + RUNGROUP="$INPUT" + fi fi echo "" #### if [ ! "$UMASK" -o "$RUNGROUP" != "$OLD_RUNGROUP" ] ; then - if [ "$RUNGROUP" ] ; then - UMASK=007 - else - UMASK=077 - fi + if [ "$RUNGROUP" ] ; then + UMASK=007 + else + UMASK=077 + fi fi ok=0 echo "What should the default umask for data files be (in octal)?" echo "(077 = only accessible by owner; 007 = accessible by owner and group)" while [ $ok -eq 0 ] ; do - echo2 "[$UMASK] " - if read INPUT ; then : ; else echo "" ; exit 1 ; fi - if [ ! "$INPUT" ] ; then - INPUT=$UMASK - fi - if [ `echo "$INPUT" | grep -c '[^0-7]'` -gt 0 ] ; then - echo "$UMASK is not a valid octal number!" - else - if [ "`echo $INPUT | cut -c1`" != "0" ] ; then - INPUT=0$INPUT - fi - ok=1 + echo2 "[$UMASK] " + if read INPUT ; then : ; else echo "" ; exit 1 ; fi + if [ ! "$INPUT" ] ; then + INPUT=$UMASK + fi + if [ `echo "$INPUT" | grep -c '[^0-7]'` -gt 0 ] ; then + echo "$UMASK is not a valid octal number!" + else + if [ "`echo $INPUT | cut -c1`" != "0" ] ; then + INPUT=0$INPUT fi + ok=1 + fi done UMASK=$INPUT echo "" @@ -309,6 +287,8 @@ echo "You can optionally have the build run through run-cc.pl, which will" echo "cause warnings and errors (if any) to be colored yellow and run," echo "respectively. This relies on Perl being installed, so if you say yes" echo "to this without Perl, the option will be ignored." +echo "NOTE: If you are using MinGW, it is NOT recommended to say yes to" +echo "this, it may fail." echo "Would you like to utilize run-cc.pl?" echo2 "[$TEMP_YN] " read YN @@ -329,9 +309,8 @@ echo "" echo2 "Saving configuration results in config.cache... " -cat <config.cache -BINDEST="$BINDEST" -DATDEST="$DATDEST" +cat <$SOURCE_DIR/config.cache +INSTDEST="$INSTDEST" RUNGROUP="$RUNGROUP" UMASK=$UMASK DEBUG="$DEBUG" @@ -341,7 +320,7 @@ echo "done." ################################################################################ -# Build the configure string +# Build the CMake string ################################################################################ Run_CMake diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt index e0eb5e9cd..e7f346a25 100644 --- a/data/CMakeLists.txt +++ b/data/CMakeLists.txt @@ -1,5 +1,6 @@ +# Only install example.chk and example.conf from this directory +# NOTE: I would've had this just find all files in the directory, but that would include files not needed (like this file) set(DATA example.chk example.conf) install(FILES ${DATA} DESTINATION "${DATADIR}" ) - diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt index aacfd508c..cc0ffc614 100644 --- a/include/CMakeLists.txt +++ b/include/CMakeLists.txt @@ -1,89 +1,23 @@ -# NOTE: Need a better dependency system here! - -set(HEADERS_REL commands.h extern.h messages.h module.h modules.h pseudo.h services.h) - -set(commands.h_HEADERS modules.h) -set(extern.h_HEADERS slist.h) -set(messages.h_HEADERS modules.h) -set(module.h_HEADERS services.h commands.h ${Anope_BINARY_DIR}/lang/language.h modules.h ${CMAKE_CURRENT_BINARY_DIR}/version.h) -set(modules.h_HEADERS services.h) -set(pseudo.h_HEADERS commands.h ${Anope_BINARY_DIR}/lang/language.h timeout.h encrypt.h datafiles.h slist.h) -set(services.h_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/sysconf.h config.h sockets.h defs.h slist.h events.h bots.h account.h regchannel.h users.h extern.h configreader.h) - -if(WIN32) +# If we are building for Visual Studio OR if the system we are on doesn't have sh (which would be odd on a *nix system...), we'll build a C++ program to create version.h +if(MSVC OR NOT SH) + # Set version.sh.c to use C++ as well as set it's compile flags set_source_files_properties(version.sh.c PROPERTIES LANGUAGE CXX COMPILE_FLAGS "${CXXFLAGS}") - add_executable(version.sh version.sh.c) - set_target_properties(version.sh PROPERTIES LINK_FLAGS "${LDFLAGS}") + # Generate version_sh executable to create version.h from the contents of version.sh, setting it's linker flags as well + add_executable(version_sh version.sh.c) + set_target_properties(version_sh PROPERTIES LINK_FLAGS "${LDFLAGS}") + # Generate version.h from the above executable and the version.log file from the main source directory, with dependencies to the given headers and all source files in the main Anope build add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h - COMMAND version.sh ${Anope_SOURCE_DIR}/version.log ${CMAKE_CURRENT_SOURCE_DIR}/version.sh ${CMAKE_CURRENT_BINARY_DIR}/version.h - MAIN_DEPENDENCY version.sh DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${CMAKE_CURRENT_SOURCE_DIR}/pseudo.h ${CMAKE_CURRENT_SOURCE_DIR}/messages.h ${SRC_SRCS} + COMMAND version_sh ${Anope_SOURCE_DIR}/version.log ${CMAKE_CURRENT_SOURCE_DIR}/version.sh ${CMAKE_CURRENT_BINARY_DIR}/version.h + MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/version.sh DEPENDS version_sh ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${CMAKE_CURRENT_SOURCE_DIR}/pseudo.h ${CMAKE_CURRENT_SOURCE_DIR}/messages.h ${SRC_SRCS} ) -else(WIN32) +# For any non-Visual Studio platforms that do have sh, we will run version.h through the version.h shell script +else(MSVC OR NOT SH) + # Generate version.h from version.sh and the version.log file from the main source directory, with dependencies to the given headers and all source files in the main Anope build add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/version.h - #COMMAND ${CMAKE_COMMAND} -E copy ${Anope_SOURCE_DIR}/version.log ../ COMMAND ${SH} ${CMAKE_CURRENT_SOURCE_DIR}/version.sh ${Anope_SOURCE_DIR}/version.log ${CMAKE_CURRENT_BINARY_DIR}/version.h - #COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/version.h ${CMAKE_CURRENT_SOURCE_DIR}/ - #COMMAND ${CMAKE_COMMAND} -E remove ../version.log MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/version.sh DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${CMAKE_CURRENT_SOURCE_DIR}/pseudo.h ${CMAKE_CURRENT_SOURCE_DIR}/messages.h ${SRC_SRCS} - # MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/version.sh DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${CMAKE_CURRENT_SOURCE_DIR}/pseudo.h ${CMAKE_CURRENT_SOURCE_DIR}/messages.h ) -endif(WIN32) - -#foreach(HEADER ${HEADERS_REL}) -# if(NOT WIN32) -# add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/${HEADER} -# COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${CMAKE_CURRENT_SOURCE_DIR}/${HEADER} -# ) -# endif(NOT WIN32) -# set(HEADERS_FULL ${HEADERS_FULL} ${CMAKE_CURRENT_SOURCE_DIR}/${HEADER}) -# set(HEADERS) -# if(${HEADER}_HEADERS) -# foreach(HEADER_REL ${${HEADER}_HEADERS}) -# string(SUBSTRING ${HEADER_REL} 0 1 FIRST_CHAR) -# string(SUBSTRING ${HEADER_REL} 1 1 SECOND_CHAR) -# if(FIRST_CHAR STREQUAL "/" OR SECOND_CHAR STREQUAL ":") -# set(HEADERS ${HEADERS} ${HEADER_REL}) -# else(FIRST_CHAR STREQUAL "/" OR SECOND_CHAR STREQUAL ":") -# set(HEADERS ${HEADERS} ${Anope_SOURCE_DIR}/include/${HEADER_REL}) -# endif(FIRST_CHAR STREQUAL "/" OR SECOND_CHAR STREQUAL ":") -# endforeach(HEADER_REL) -# endif(${HEADER}_HEADERS) -# if(HEADERS) -# set_source_files_properties(${HEADER} PROPERTIES OBJECT_DEPENDS "${HEADERS}") -# endif(HEADERS) -#endforeach(HEADER) - -#set(HEADERS_FULL ${HEADERS_FULL} ${CMAKE_CURRENT_BINARY_DIR}/version.h) -#message(STATUS "HEADERS_FULL: ${HEADERS_FULL}") - -#add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/services.h -# COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${CMAKE_CURRENT_SOURCE_DIR}/services.h -# MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/extern.h DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/sysconf.h ${CMAKE_CURRENT_SOURCE_DIR}/config.h -#) -#add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/extern.h -# COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${CMAKE_CURRENT_SOURCE_DIR}/extern.h -# MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/slist.h -#) -#add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/pseudo.h -# COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${CMAKE_CURRENT_SOURCE_DIR}/pseudo.h -# MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/timeout.h DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/commands.h ${CMAKE_CURRENT_SOURCE_DIR}/encrypt.h ${CMAKE_CURRENT_SOURCE_DIR}/datafiles.h ${CMAKE_CURRENT_SOURCE_DIR}/slist.h -#) -#add_dependencies(${CMAKE_CURRENT_SOURCE_DIR}/version.h src_srcs) -#add_custom_target(include_version_h ALL DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/version.h) -#add_custom_target(include_version_h DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/version.h) -#add_dependencies(include_version_h src_srcs) - -#add_custom_target(include ALL) -#add_custom_target(include) -#add_custom_target(headers DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/version.h ${CMAKE_CURRENT_SOURCE_DIR}/services.h ${CMAKE_CURRENT_SOURCE_DIR}/extern.h ${CMAKE_CURRENT_SOURCE_DIR}/pseudo.h) -#add_custom_target(headers DEPENDS ${HEADERS_FULL}) -if(ALL_HEADERS) - set_source_files_properties(${ALL_HEADERS} PROPERTIES HEADER_FILE_ONLY TRUE) - add_custom_target(headers DEPENDS ${ALL_HEADERS}) -else(ALL_HEADERS) - add_custom_target(headers) -endif(ALL_HEADERS) -#add_dependencies(include include_version_h) +endif(MSVC OR NOT SH) -set(HEADERS_CLEAN ${CMAKE_CURRENT_BINARY_DIR}/version.h) -set_directory_properties(PROPERTIES CLEAN_NO_CUSTOM yes ADDITIONAL_MAKE_CLEAN_FILES "${HEADERS_CLEAN}") +# Add a custom target to the above file +add_custom_target(headers DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/version.h) diff --git a/include/extern.h b/include/extern.h index 8bbf3fde5..c10614133 100644 --- a/include/extern.h +++ b/include/extern.h @@ -569,7 +569,7 @@ E const char version_build[]; E char *version_protocol; E const char version_flags[]; -E const char *services_dir; +E std::string services_dir; E const char *log_filename; E int debug; E int readonly; diff --git a/include/modules.h b/include/modules.h index dc00807c9..32310617c 100644 --- a/include/modules.h +++ b/include/modules.h @@ -34,7 +34,7 @@ typedef void * ano_module_t; #define ano_modopen(file) dlopen(file, RTLD_LAZY) #define ano_moderr() dlerror() -#define ano_modsym(file, symbol) dlsym(file, DL_PREFIX symbol) +#define ano_modsym(file, symbol) dlsym(file, symbol) #define ano_modclose(file) dlclose(file) /* We call dlerror() here because it clears the module error after being * called. This previously read 'errno = 0', but that didn't work on diff --git a/include/sysconf.h.cmake b/include/sysconf.h.cmake index e7464492d..c19e634cf 100644 --- a/include/sysconf.h.cmake +++ b/include/sysconf.h.cmake @@ -17,14 +17,8 @@ #cmakedefine HAVE_SYS_SELECT_H 1 #cmakedefine HAVE_UMASK 1 #cmakedefine HAVE_VA_LIST_AS_ARRAY 1 -// Temporary, change elsewhere to be SERVICES_DIR/modules/ -#define MODULE_PATH "@SERVICES_DIR@/modules/" #cmakedefine RUNGROUP "@RUNGROUP@" #cmakedefine SERVICES_BIN "@SERVICES_BIN@" -#cmakedefine SERVICES_DIR "@SERVICES_DIR@" - -// Temporary, remove from here later as well as elsewhere in the code -#define DL_PREFIX "" #cmakedefine HAVE_UINT8_T 1 #cmakedefine HAVE_U_INT8_T 1 diff --git a/install.js b/install.js index 477f65b2f..7b112edd5 100644 --- a/install.js +++ b/install.js @@ -15,553 +15,240 @@ var anopeVersion = "Unknown"; var vMaj, vMin, vPat, vBuild, vExtra; -var drivesToCheck = ['C', 'D', 'E', 'F', 'G', 'H']; var installerResponses = new Array(); -var softwareVersions = { - 'Compiler' : false, - 'MySQLDB' : false - }; var installerQuestions = [ - { - 'question' : [ - 'Do you want to compile Anope with MySQL Support?', - 'NOTE: You will need to have installed MySQL 3.23 or Above' - ], - 'short' : 'Enable MySQL Support?', - 'options' : [ - 'yes', - 'no' - ], - 'default_answer' : 'no', - 'store_answer' : function (answer) { - if (answer == 'yes') { - if (!findMySQL()) { - WScript.Echo("\nERROR: Cannot find MySQL - See error messages above for details.\n"); - return false; - } - } - installerResponses['MySQL DB Support'] = answer; - return true; - }, - 'commit_config' : function() { - if (installerResponses['MySQL DB Support'] == 'yes') { - f.WriteLine("USE_MYSQL=1"); - f.WriteLine("MYSQL_LIB=\""+softwareVersions['MySQLDB'].installedDrive+":\\"+softwareVersions['MySQLDB'].libpaths[0]+"\""); - f.WriteLine("MYSQL_INC=\""+softwareVersions['MySQLDB'].installedDrive+":\\"+softwareVersions['MySQLDB'].incpaths[0]+"\""); - f.WriteLine("LIBS=$(LIBS) /LIBPATH:$(MYSQL_LIB)"); - f.WriteLine("MYSQL_LIB_PATH=/LIBPATH:$(MYSQL_LIB)"); - f.WriteLine("BASE_CFLAGS=$(BASE_CFLAGS) /I $(MYSQL_INC)"); - f.WriteLine("MYSQL_INC_PATH=/I $(MYSQL_INC)"); - f.WriteLine("BASE_CFLAGS=/D $(BASE_CFLAGS)"); - f.WriteLine("MYPASQL_BUILD=$(CC) /LD $(MYSQL_INC_PATH) src\\mypasql.c /link $(MYSQL_LIB_PATH) $(LFLAGS) /DEF:src\mypasql.def libmysql.lib zlib.lib ws2_32.lib advapi32.lib /NODEFAULTLIB:LIBCMTD.lib"); - f.WriteLine("LIBS=$(LIBS) libmysql.lib zlib.lib"); - } - else { - f.WriteLine("USE_MYSQL=0"); - } - } - }, - - ]; - -var buildPackages = [ - { - 'name' : 'Microsoft Visual Studio 2008 (New PSDK)', - 'libpaths' : [ - 'Program Files\\Microsoft Visual Studio 9.0\\VC\\Lib', - 'Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Lib' - ], - 'incpaths' : [ - 'Program Files\\Microsoft Visual Studio 9.0\\VC\\Include', - 'Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Include' - ], - 'nmake' : [ - 'Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Bin', - ], - 'additional_switches' : [ '/w' ], - 'installedDrive' : 'C' - }, - { - 'name' : 'Microsoft Visual Studio 2008 (64bit) (New PSDK)', - 'libpaths' : [ - 'Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\Lib', - 'Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Lib' - ], - 'incpaths' : [ - 'Program Files (x86)\\Microsoft Visual Studio 9.0\\VC\\Include', - 'Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Include' - ], - 'nmake' : [ - 'Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Bin', - ], - 'additional_switches' : [ '/w' ], - 'installedDrive' : 'C' - }, - - { - 'name' : 'Microsoft Visual Studio 2005 (New PSDK)', - 'libpaths' : [ - 'Program Files\\Microsoft Visual Studio 8\\VC\\Lib', - 'Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Lib' - ], - 'incpaths' : [ - 'Program Files\\Microsoft Visual Studio 8\\VC\\Include', - 'Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Include' - ], - 'nmake' : [ - 'Program Files\\Microsoft Platform SDK for Windows Server 2003 R2\\Bin', - '' - ], - 'additional_switches' : [ - '/w' - ], - 'installedDrive' : 'C' - }, - { - 'name' : 'Microsoft Visual Studio 2005 (Old PSDK)', - 'libpaths' : [ - 'Program Files\\Microsoft Visual Studio 8\\VC\\Lib', - 'Program Files\\Microsoft Platform SDK\\Lib' - ], - 'incpaths' : [ - 'Program Files\\Microsoft Visual Studio 8\\VC\\Include', - 'Program Files\\Microsoft Platform SDK\\Include' - ], - 'nmake' : [ - 'Program Files\\Microsoft Platform SDK\\Bin', - '' - ], - 'additional_switches' : [ - '/w' - ], - 'installedDrive' : 'C' - }, - - { - 'name' : 'Microsoft Visual Studio .NET 2003', - 'libpaths' : [ - 'Program Files\\Microsoft Visual Studio .NET 2003\\VC7\\Lib', - 'Program Files\\Microsoft Visual Studio .NET 2003\\VC7\\PlatformSDK\\Lib' - ], - 'incpaths' : [ - 'Program Files\\Microsoft Visual Studio .NET 2003\\VC7\\Include', - 'Program Files\\Microsoft Visual Studio .NET 2003\\VC7\\PlatformSDK\\Include' - ], - 'nmake' : [ - 'Program Files\\Microsoft Visual Studio .NET 2003\\VC7\\Bin', - '' - ], - 'additional_switches' : false, - 'installedDrive' : 'C' - }, - - { - 'name' : 'Microsoft Visual Studio 98', - 'libpaths' : [ - 'Program Files\\Microsoft Visual Studio\\VC98\\Lib' - ], - 'incpaths' : [ - 'Program Files\\Microsoft Visual Studio\\VC98\\Include' - ], - 'nmake' : [ - 'Program Files\\Microsoft Visual Studio\\VC98\\Bin', - '' - ], - 'additional_switches' : [ - '/QIfist' - ], - 'installedDrive' : 'C' - } - - ]; - - - var mysqlVersions = [ - { - 'name' : 'MySQL 5.1', - 'libpaths' : [ - 'Program Files\\MySQL\\MySQL Server 5.1\\Lib\\opt' - ], - 'incpaths' : [ - 'Program Files\\MySQL\\MySQL Server 5.1\\Include' - ], - 'dllfile' : 'Program Files\\MySQL\\MySQL Server 5.1\\bin\\libmsyql.dll', - 'installedDrive' : 'C' - }, - - { - 'name' : 'MySQL 5.0', - 'libpaths' : [ - 'Program Files\\MySQL\\MySQL Server 5.0\\Lib\\opt' - ], - 'incpaths' : [ - 'Program Files\\MySQL\\MySQL Server 5.0\\Include' - ], - 'dllfile' : 'Program Files\\MySQL\\MySQL Server 5.0\\Bin\\libmysql.dll', - 'installedDrive' : 'C' - }, - - { - 'name' : 'MySQL 4.1', - 'libpaths' : [ - 'Program Files\\MySQL\\MySQL Server 4.1\\Lib\\opt' - ], - 'incpaths' : [ - 'Program Files\\MySQL\\MySQL Server 4.1\\Include' - ], - 'dllfile' : 'Program Files\\MySQL\\MySQL Server 4.1\\Bin\\libmysql.dll', - 'installedDrive' : 'C' - }, - - { - 'name' : 'MySQL 4.0', - 'libpaths' : [ - 'Program Files\\MySQL\\MySQL Server 4.0\\Lib\\opt' - ], - 'incpaths' : [ - 'Program Files\\MySQL\\MySQL Server 4.0\\Include' - ], - 'dllfile' : 'Program Files\\MySQL\\MySQL Server 4.0\\Bin\\libmysql.dll', - 'installedDrive' : 'C' - }, - - { - 'name' : 'MySQL 3.23 or older (or other default path)', - 'libpaths' : [ - 'mysql\\lib\\opt' - ], - 'incpaths' : [ - 'mysql\\include' - ], - 'dllfile' : 'mysql\\Bin\\libmysql.dll', - 'installedDrive' : 'C' - } - - ]; - - var bannerReplacements = [ - { - 'findtext' : /CURVER/g, - 'replacement' : function() { FindAnopeVersion(); return anopeVersion; } - }, - { - 'findtext' : / For more options type .\/Config --help/g, - 'replacement' : function() { return ''; } - } - ]; - - - var fso = WScript.CreateObject("Scripting.FileSystemObject"); - var x, y, z; - - if (fso.FileExists('.BANNER')) { - var bannerStream = fso.OpenTextFile(".BANNER"); - var bannerText = bannerStream.ReadAll(); -