| # Georgios Petasis, petasis@iit.demokritos.gr |
| |
| # The minimum version of cmake required. This may work also in 2.8, |
| # but I have not tested. My cmake is version 3.9.0. |
| cmake_minimum_required(VERSION 3.2 FATAL_ERROR) |
| if(POLICY CMP0074) |
| cmake_policy(SET CMP0074 NEW) |
| endif() |
| |
| # Rivet version: |
| # In order to avoid chasing around multiple definition of the module version we infer |
| # this information from the file VERSION, which must stay in the project root directory |
| # and assuming we are working from a direct child directory |
| SET ( RIVET_TOP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.." ) |
| # Read the file named VERSION from the top Rivet directory... |
| FILE ( READ "${RIVET_TOP_DIR}/VERSION" RIVET_VERSION_FROM_FILE ) |
| STRING ( REGEX MATCH "([0-9]+)\.([0-9]+)\.([0-9]+)" _ ${RIVET_VERSION_FROM_FILE} ) |
| SET ( RIVET_MAJOR_VERSION ${CMAKE_MATCH_1} ) |
| SET ( RIVET_MINOR_VERSION ${CMAKE_MATCH_2} ) |
| SET ( RIVET_PATCH_VERSION ${CMAKE_MATCH_3} ) |
| MESSAGE ( STATUS "Rivet version: ${RIVET_MAJOR_VERSION}.${RIVET_MINOR_VERSION}.${RIVET_PATCH_VERSION}" ) |
| |
| set(RIVET_VERSION |
| ${RIVET_MAJOR_VERSION}.${RIVET_MINOR_VERSION}.${RIVET_PATCH_VERSION}) |
| set(INIT_VERSION ${RIVET_MAJOR_VERSION}.${RIVET_MINOR_VERSION}) |
| |
| # Rivetlib version: |
| set(RIVETLIB_PACKAGE "rivetlib") |
| set(RIVETLIB_PACKAGE_VERSION ${INIT_VERSION}) |
| |
| # The arguments argument are optional, declares version and language |
| # (in this case C). |
| project(Rivet VERSION ${RIVET_VERSION} LANGUAGES C) |
| |
| # User options... |
| # =========================================================================== |
| set(with-tclsh "" CACHE FILEPATH "location of a working tclsh executable") |
| set(with-tcl "" CACHE PATH "directory containing tcl configuration (tclConfig.sh)") |
| set(with-post-max 0 CACHE STRING "BYTES Maximum size of data to be sent with a POST") |
| set(with-rivet-core "mod_rivet_ng" CACHE STRING "mod_rivet core directory") |
| set(with-upload-dir "/tmp" CACHE STRING "Default directory for uploads") |
| option(version-display "Display Rivet version in Apache signature" OFF) |
| option(head-requests "Returns real headers in response to a HEAD request" OFF) |
| option(single-thread "forces the worker brigde to create a single thread (debug)" OFF) |
| option(rivet-commands-export "prevent export from ::rivet namespace" ON) |
| option(import-rivet-commands "requires explicit namespace import" OFF) |
| option(virtual-interps-separation "to turn on virtual host separation" OFF) |
| option(requests-serialization "Forces HTTP requests serialization among threads(debug)" OFF) |
| option(upload-var "whether files are uploaded to Tcl variables" ON) |
| option(BUILD_SHARED_LIBS "build and link with shared libraries" ON) |
| option(TCL_THREADS "build with threads" ON) |
| option(TCL_MEM_DEBUG "build with memory debugging" OFF) |
| |
| include(CMakeDependentOption) |
| CMAKE_DEPENDENT_OPTION(BUILD_STATIC_LIBS "build as static library" ON |
| "NOT BUILD_SHARED_LIBS" OFF) |
| |
| # Offer the user the choice of overriding the installation directories |
| set(INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries") |
| set(INSTALL_BIN_DIR bin CACHE PATH "Installation directory for executables") |
| set(INSTALL_INCLUDE_DIR include CACHE PATH |
| "Installation directory for header files") |
| if(WIN32 AND NOT CYGWIN) |
| set(DEF_INSTALL_CMAKE_DIR CMake) |
| else() |
| set(DEF_INSTALL_CMAKE_DIR lib/CMake/Rivet) |
| endif() |
| set(INSTALL_CMAKE_DIR ${DEF_INSTALL_CMAKE_DIR} CACHE PATH |
| "Installation directory for CMake files") |
| |
| if(NOT CMAKE_BUILD_TYPE) |
| set(CMAKE_BUILD_TYPE Release) |
| endif() |
| |
| # Use GNU install directories |
| include(GNUInstallDirs) |
| |
| # Rivet source files... |
| # =========================================================================== |
| set(RIVET_SRC_DIR "${PROJECT_SOURCE_DIR}/../src") |
| set(RIVET_LIB_DIR "${PROJECT_SOURCE_DIR}/../rivet") |
| set(RIVET_CORE ${with-rivet-core}) |
| |
| set(rivetparser_sources |
| ${RIVET_SRC_DIR}/parser/rivetParser.c |
| ${RIVET_SRC_DIR}/parser/parserPkgInit.c |
| ) |
| |
| set(rivetlib_sources |
| ${RIVET_SRC_DIR}/librivet/rivetList.c |
| ${RIVET_SRC_DIR}/librivet/rivetCrypt.c |
| ${RIVET_SRC_DIR}/librivet/rivetWWW.c |
| ${RIVET_SRC_DIR}/librivet/rivetPkgInit.c |
| ) |
| |
| set(rivet_worker_mpm_sources |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/rivet_worker_mpm.c |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/worker_prefork_common.c |
| ) |
| |
| set(rivet_prefork_mpm_sources |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/rivet_prefork_mpm.c |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/worker_prefork_common.c |
| ) |
| |
| set(rivet_lazy_mpm_sources |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/rivet_lazy_mpm.c |
| ) |
| |
| set(mod_rivet_sources |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/mod_rivet.c |
| ${RIVET_SRC_DIR}/request/apache_multipart_buffer.c |
| ${RIVET_SRC_DIR}/request/apache_request.c |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/rivetCore.c |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/rivetInspect.c |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/rivetChannel.c |
| ${RIVET_SRC_DIR}/parser/rivetParser.c |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/TclWebapache.c |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/apache_config.c |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/mod_rivet_cache.c |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/mod_rivet_common.c |
| ${RIVET_SRC_DIR}/${RIVET_CORE}/mod_rivet_generator.c |
| ) |
| |
| # Add build targets... |
| # =========================================================================== |
| add_library(mod_rivet ${mod_rivet_sources}) |
| add_library(rivetparser ${rivetparser_sources}) |
| add_library(rivetlib ${rivetlib_sources}) |
| add_library(rivet_worker_mpm ${rivet_worker_mpm_sources}) |
| add_library(rivet_prefork_mpm ${rivet_prefork_mpm_sources}) |
| add_library(rivet_lazy_mpm ${rivet_lazy_mpm_sources}) |
| add_library(rivet::parser ALIAS rivetparser) |
| add_library(rivet::lib ALIAS rivetparser) |
| add_library(rivet::rivet ALIAS mod_rivet) |
| add_library(rivet::worker_mpm ALIAS rivet_worker_mpm) |
| add_library(rivet::prefork_mpm ALIAS rivet_prefork_mpm) |
| add_library(rivet::lazy_mpm ALIAS rivet_lazy_mpm) |
| |
| SET ( RIVET_LIB_SUFFIX ".so" ) |
| SET ( RIVET_LIB_PREFIX "lib" ) |
| |
| SET_TARGET_PROPERTIES(mod_rivet PROPERTIES PREFIX "" SUFFIX ${RIVET_LIB_SUFFIX}) |
| SET_TARGET_PROPERTIES(rivet_worker_mpm PROPERTIES PREFIX "" SUFFIX ${RIVET_LIB_SUFFIX}) |
| SET_TARGET_PROPERTIES(rivet_prefork_mpm PROPERTIES PREFIX "" SUFFIX ${RIVET_LIB_SUFFIX}) |
| SET_TARGET_PROPERTIES(rivet_lazy_mpm PROPERTIES PREFIX "" SUFFIX ${RIVET_LIB_SUFFIX}) |
| SET_TARGET_PROPERTIES(rivetparser PROPERTIES PREFIX ${RIVET_LIB_PREFIX}) |
| SET_TARGET_PROPERTIES(rivetlib PROPERTIES PREFIX ${RIVET_LIB_PREFIX}) |
| |
| # Definitions... |
| # =========================================================================== |
| target_compile_definitions (rivetparser PRIVATE |
| HAVE_CONFIG_H=1 USE_TCL_STUBS=1 START_TAG="<?" END_TAG="?>" ) |
| target_compile_definitions (rivetlib PRIVATE |
| HAVE_CONFIG_H=1 USE_TCL_STUBS=1 START_TAG="<?" END_TAG="?>" ) |
| target_compile_definitions (rivet_worker_mpm PRIVATE HAVE_CONFIG_H=1 ) |
| target_compile_definitions (rivet_prefork_mpm PRIVATE HAVE_CONFIG_H=1 ) |
| target_compile_definitions (rivet_lazy_mpm PRIVATE HAVE_CONFIG_H=1 ) |
| target_compile_definitions (mod_rivet PRIVATE |
| HAVE_CONFIG_H=1 START_TAG="<?" END_TAG="?>" ) |
| |
| # =========================================================================== |
| # Locate needed packages... |
| # =========================================================================== |
| list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_extra_modules") |
| include(checks) |
| |
| # Locate Tcl... |
| # =========================================================================== |
| MESSAGE ( STATUS "Searching for Tcl..." ) |
| if (NOT "${with-tcl}" STREQUAL "") |
| MESSAGE ( STATUS " Tcl lib directory manually set by -Dwith-tcl=" ${with-tcl} ) |
| get_filename_component(RIVET_TCL_ROOT "${with-tcl}" DIRECTORY) |
| MESSAGE ( STATUS " Setting Tcl root to: " ${RIVET_TCL_ROOT} ) |
| set ( CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${RIVET_TCL_ROOT} ) |
| set (TCL_ROOT ${RIVET_TCL_ROOT}) |
| set (TclStub_ROOT ${RIVET_TCL_ROOT}) |
| endif () |
| if (NOT "${with-tclsh}" STREQUAL "") |
| MESSAGE ( STATUS " Tclsh manually set by -Dwith-tclsh=" ${with-tclsh} ) |
| set (TCL_TCLSH ${with-tclsh}) |
| endif () |
| FIND_PACKAGE ( TCL 8.6.1 REQUIRED ) |
| FIND_PACKAGE ( TclStub 8.6.1 REQUIRED ) |
| MESSAGE ( STATUS " TCL_TCLSH: " ${TCL_TCLSH} ) |
| MESSAGE ( STATUS " TCL_INCLUDE_PATH: " ${TCL_INCLUDE_PATH} ) |
| MESSAGE ( STATUS " TCL_LIBRARY: " ${TCL_LIBRARY} ) |
| MESSAGE ( STATUS " TCL_STUB_LIBRARY: " ${TCL_STUB_LIBRARY} ) |
| |
| # Locate Apache... |
| # =========================================================================== |
| MESSAGE ( STATUS "Searching for Apache..." ) |
| find_package(APACHE REQUIRED) |
| MESSAGE ( STATUS " APACHE_INCLUDE_DIR: " ${APACHE_INCLUDE_DIR} ) |
| MESSAGE ( STATUS " APACHE_MODULE_DIR: " ${APACHE_MODULE_DIR} ) |
| MESSAGE ( STATUS " APACHE_LIB_DIR: " ${APACHE_LIB_DIR} ) |
| |
| # Locate Apr... |
| # =========================================================================== |
| MESSAGE ( STATUS "Searching for Apr..." ) |
| find_package(APR REQUIRED) |
| MESSAGE ( STATUS " APR_INCLUDE_DIR: " ${APR_INCLUDE_DIR} ) |
| MESSAGE ( STATUS " APR_LIBRARY: " ${APR_LIBRARY} ) |
| MESSAGE ( STATUS " APRUTIL_INCLUDE_DIR: " ${APRUTIL_INCLUDE_DIR} ) |
| MESSAGE ( STATUS " APRUTIL_LIBRARY: " ${APRUTIL_LIBRARY} ) |
| |
| find_package(Threads) |
| |
| # Set up include directories... |
| # =========================================================================== |
| set(RIVET_GENERATE_DIR ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}) |
| set(RIVET_GENERATE_DIR ${PROJECT_BINARY_DIR}/generated) |
| set(RIVET_INCLUDE_DIRS_PUBLIC |
| "${TCL_INCLUDE_PATH}" |
| "${APACHE_INCLUDE_DIR}" |
| "${APR_INCLUDE_DIR}" |
| "${APRUTIL_INCLUDE_DIR}" |
| ) |
| set(RIVET_INCLUDE_DIRS_PRIVATE |
| "${RIVET_SRC_DIR}" |
| "${RIVET_SRC_DIR}/${RIVET_CORE}" |
| "${RIVET_SRC_DIR}/parser" |
| "${RIVET_SRC_DIR}/request" |
| "${RIVET_GENERATE_DIR}" |
| "${PROJECT_BINARY_DIR}" |
| ) |
| |
| target_include_directories(rivetparser |
| PUBLIC ${RIVET_INCLUDE_DIRS_PUBLIC} PRIVATE ${RIVET_INCLUDE_DIRS_PRIVATE}) |
| target_include_directories(rivetlib |
| PUBLIC ${RIVET_INCLUDE_DIRS_PUBLIC} PRIVATE ${RIVET_INCLUDE_DIRS_PRIVATE}) |
| target_include_directories(rivet_worker_mpm |
| PUBLIC ${RIVET_INCLUDE_DIRS_PUBLIC} PRIVATE ${RIVET_INCLUDE_DIRS_PRIVATE}) |
| target_include_directories(rivet_prefork_mpm |
| PUBLIC ${RIVET_INCLUDE_DIRS_PUBLIC} PRIVATE ${RIVET_INCLUDE_DIRS_PRIVATE}) |
| target_include_directories(rivet_lazy_mpm |
| PUBLIC ${RIVET_INCLUDE_DIRS_PUBLIC} PRIVATE ${RIVET_INCLUDE_DIRS_PRIVATE}) |
| target_include_directories(mod_rivet |
| PUBLIC ${RIVET_INCLUDE_DIRS_PUBLIC} PRIVATE ${RIVET_INCLUDE_DIRS_PRIVATE}) |
| |
| # Set up libraries... |
| # =========================================================================== |
| target_link_libraries(rivetparser ${TCL_STUB_LIBRARY}) |
| target_link_libraries(rivetlib ${TCL_STUB_LIBRARY}) |
| target_link_libraries(mod_rivet ${TCL_LIBRARY}) |
| if(WIN32) |
| # Under Windows, we need to link with all libraries, even libhttpd.lib |
| MESSAGE ( STATUS "Searching for libhttpd.lib (Windows)..." ) |
| FIND_LIBRARY(APACHE_HTTPD_LIBRARY libhttpd libhttpd.lib |
| NAMES ${APACHE_HTTPD_NAMES} |
| PATHS ${APACHE_HTTPD_LIBRARY_HINTS} |
| ${APACHE_ROOT}/lib |
| ) |
| MESSAGE ( STATUS " APACHE_HTTPD_LIBRARY: " ${APACHE_HTTPD_LIBRARY} ) |
| |
| # Export all symbols from mod_rivet |
| #SET_TARGET_PROPERTIES(mod_rivet PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS TRUE) |
| |
| target_link_libraries(mod_rivet ${APR_LIBRARY} ${APACHE_HTTPD_LIBRARY} ) |
| target_link_libraries(rivet_worker_mpm ${APR_LIBRARY} ${APRUTIL_LIBRARY} ${APACHE_HTTPD_LIBRARY} mod_rivet) |
| target_link_libraries(rivet_prefork_mpm ${APR_LIBRARY} ${APACHE_HTTPD_LIBRARY} mod_rivet) |
| target_link_libraries(rivet_lazy_mpm ${APR_LIBRARY} ${APACHE_HTTPD_LIBRARY} mod_rivet) |
| # rivet_worker_mpm.c uses round(), which is available in C99 |
| SET_TARGET_PROPERTIES(rivet_worker_mpm PROPERTIES C_STANDARD 99) |
| if(MSVC) |
| # Libraries linked with tclstubs.lib library, cannot use /SAFESEH |
| SET_TARGET_PROPERTIES(rivetparser PROPERTIES LINK_FLAGS /SAFESEH:NO ) |
| SET_TARGET_PROPERTIES(rivetlib PROPERTIES LINK_FLAGS /SAFESEH:NO ) |
| endif(MSVC) |
| endif(WIN32) |
| |
| # Handle user options... |
| # =========================================================================== |
| MESSAGE( STATUS "Rivet version ${RIVET_VERSION}:") |
| MESSAGE( STATUS " Core in use: " ${RIVET_CORE}) |
| set(CONFIGURE_CMD "cmake -${CMAKE_ARGC} ${CMAKE_ARGV0}") |
| if(version-display) |
| set(DISPLAY_VERSION 1) |
| else(version-display) |
| set(DISPLAY_VERSION 0) |
| endif() |
| if(head-requests) |
| set(HEAD_REQUESTS 1) |
| endif() |
| set(MAX_POST ${with-post-max}) |
| if(single-thread) |
| set(MPM_SINGLE_TCL_THREAD 1) |
| endif() |
| set(NAMEOFEXECUTABLE ${TCL_TCLSH}) |
| if(import-rivet-commands) |
| message(STATUS " Forcing Rivet to import commands from ::rivet namespace") |
| set(NAMESPACE_IMPORT 1) |
| endif() |
| if(rivet-commands-export) |
| message(STATUS " Forcing Rivet to export commands from ::rivet namespace") |
| set(NAMESPACE_EXPORT 1) |
| endif() |
| set(SEPARATE_CHANNELS 0) |
| if(virtual-interps-separation) |
| set(SEPARATE_VIRTUAL_INTERPS 1) |
| endif() |
| if(requests-serialization) |
| set(SERIALIZE_HTTP_REQUESTS 1) |
| endif() |
| if(upload-var) |
| set(UPLOAD_FILES_TO_VAR 1) |
| endif() |
| set(UPLOAD_DIR ${with-upload-dir}) |
| |
| # Location of the Rivet library... |
| # =========================================================================== |
| if(NOT DEFINED RIVETLIB_DESTDIR) |
| set(RIVETLIB_DESTDIR "${APACHE_LIB_DIR}/rivet${RIVET_VERSION}") |
| endif(NOT DEFINED RIVETLIB_DESTDIR) |
| |
| if(TCL_THREADS) |
| set(TCL_THREADS 1) |
| if(NOT WIN32) |
| set(USE_THREAD_ALLOC 1) |
| set(_REENTRANT 1) |
| set(_THREAD_SAFE 1) |
| STRING (REGEX MATCH "SunOS" PROJECT_OS_SunOS ${CMAKE_SYSTEM_NAME}) |
| if(PROJECT_OS_SunOS) |
| set(_POSIX_PTHREAD_SEMANTICS 1) |
| endif(PROJECT_OS_SunOS) |
| endif(NOT WIN32) |
| endif(TCL_THREADS) |
| |
| # Definitions... |
| # =========================================================================== |
| if(_REENTRANT) |
| target_compile_definitions(rivetparser PRIVATE _REENTRANT=1) |
| target_compile_definitions(rivetlib PRIVATE _REENTRANT=1) |
| target_compile_definitions(rivet_worker_mpm PRIVATE _REENTRANT=1) |
| target_compile_definitions(rivet_prefork_mpm PRIVATE _REENTRANT=1) |
| target_compile_definitions(rivet_lazy_mpm PRIVATE _REENTRANT=1) |
| target_compile_definitions(mod_rivet PRIVATE _REENTRANT=1) |
| endif(_REENTRANT) |
| |
| if(CMAKE_SYSTEM_NAME STREQUAL "Linux") |
| target_compile_definitions(rivetparser PRIVATE LINUX=1) |
| target_compile_definitions(rivetlib PRIVATE LINUX=1) |
| target_compile_definitions(rivet_worker_mpm PRIVATE LINUX=1) |
| target_compile_definitions(rivet_prefork_mpm PRIVATE LINUX=1) |
| target_compile_definitions(rivet_lazy_mpm PRIVATE LINUX=1) |
| target_compile_definitions(mod_rivet PRIVATE LINUX=1) |
| endif(CMAKE_SYSTEM_NAME STREQUAL "Linux") |
| |
| # Set variables for generating config files... |
| # =========================================================================== |
| set(RIVET_AC_APPLE_UNIVERSAL_BUILD ${AC_APPLE_UNIVERSAL_BUILD}) |
| set(RIVET_CONFIGURE_CMD ${CONFIGURE_CMD}) |
| set(RIVET_DISPLAY_VERSION ${DISPLAY_VERSION}) |
| set(RIVET_HAVE_DLFCN_H ${HAVE_DLFCN_H}) |
| set(RIVET_HAVE_INTTYPES_H ${HAVE_INTTYPES_H}) |
| set(RIVET_HAVE_LIMITS_H ${HAVE_LIMITS_H}) |
| set(RIVET_HAVE_LSEEK64 ${HAVE_LSEEK64}) |
| set(RIVET_HAVE_MEMORY_H ${HAVE_MEMORY_H}) |
| set(RIVET_HAVE_NET_ERRNO_H ${HAVE_NET_ERRNO_H}) |
| set(RIVET_HAVE_OPEN64 ${HAVE_OPEN64}) |
| set(RIVET_HAVE_STDINT_H ${HAVE_STDINT_H}) |
| set(RIVET_HAVE_STDLIB_H ${HAVE_STDLIB_H}) |
| set(RIVET_HAVE_STRINGS_H ${HAVE_STRINGS_H}) |
| set(RIVET_HAVE_STRING_H ${HAVE_STRING_H}) |
| set(RIVET_HAVE_SYS_PARAM_H ${HAVE_SYS_PARAM_H}) |
| set(RIVET_HAVE_SYS_STAT_H ${HAVE_SYS_STAT_H}) |
| set(RIVET_HAVE_SYS_TYPES_H ${HAVE_SYS_TYPES_H}) |
| set(RIVET_HAVE_UNISTD_H ${HAVE_UNISTD_H}) |
| set(RIVET_HEAD_REQUESTS ${HEAD_REQUESTS}) |
| set(RIVET_MPM_SINGLE_TCL_THREAD ${MPM_SINGLE_TCL_THREAD}) |
| set(RIVET_NAMESPACE_EXPORT ${NAMESPACE_EXPORT}) |
| set(RIVET_NAMESPACE_IMPORT ${NAMESPACE_IMPORT}) |
| set(RIVET_HAVE_DIRENT_H ${HAVE_DIRENT_H}) |
| set(RIVET_NO_DIRENT_H ${NO_DIRENT_H}) |
| set(RIVET_NO_DLFCN_H ${NO_DLFCN_H}) |
| set(RIVET_NO_ERRNO_H ${NO_ERRNO_H}) |
| set(RIVET_NO_FLOAT_H ${NO_FLOAT_H}) |
| set(RIVET_HAVE_LIMITS_H ${HAVE_LIMITS_H}) |
| set(RIVET_NO_LIMITS_H ${NO_LIMITS_H}) |
| set(RIVET_NO_STDLIB_H ${NO_STDLIB_H}) |
| set(RIVET_NO_STRING_H ${NO_STRING_H}) |
| set(RIVET_NO_SYS_WAIT_H ${NO_SYS_WAIT_H}) |
| set(RIVET_NO_VALUES_H ${NO_VALUES_H}) |
| set(RIVET_NO_VIZ ${NO_VIZ}) |
| set(RIVET_SEPARATE_CHANNELS ${SEPARATE_CHANNELS}) |
| set(RIVET_SEPARATE_VIRTUAL_INTERPS ${SEPARATE_VIRTUAL_INTERPS}) |
| set(RIVET_SERIALIZE_HTTP_REQUESTS ${SERIALIZE_HTTP_REQUESTS}) |
| set(RIVET_STATIC_BUILD ${STATIC_BUILD}) |
| set(RIVET_STDC_HEADERS ${STDC_HEADERS}) |
| set(RIVET_TCL_MEM_DEBUG ${TCL_MEM_DEBUG}) |
| set(RIVET_TCL_THREADS ${TCL_THREADS}) |
| set(RIVET_TCL_WIDE_INT_IS_LONG ${TCL_WIDE_INT_IS_LONG}) |
| set(RIVET_TCL_WIDE_INT_TYPE ${TCL_WIDE_INT_TYPE}) |
| set(RIVET_UNDER_CE ${UNDER_CE}) |
| set(RIVET_UPLOAD_FILES_TO_VAR ${UPLOAD_FILES_TO_VAR}) |
| set(RIVET_UPLOAD_DIR ${UPLOAD_DIR}) |
| set(RIVET_USE_THREAD_ALLOC ${USE_THREAD_ALLOC}) |
| set(RIVET__ISOC99_SOURCE ${_ISOC99_SOURCE}) |
| set(RIVET__LARGEFILE64_SOURCE ${_LARGEFILE64_SOURCE}) |
| set(RIVET__LARGEFILE_SOURCE64 ${_LARGEFILE_SOURCE64}) |
| set(RIVET__OE_SOCKETS ${_OE_SOCKETS}) |
| set(RIVET__POSIX_PTHREAD_SEMANTICS ${_POSIX_PTHREAD_SEMANTICS}) |
| set(RIVET__REENTRANT ${_REENTRANT}) |
| set(RIVET__THREAD_SAFE ${_THREAD_SAFE}) |
| set(RIVET__WIN32_WCE ${_WIN32_WCE}) |
| set(RIVET__XOPEN_SOURCE_EXTENDED ${_XOPEN_SOURCE_EXTENDED}) |
| set(RIVET_HAVE_ROUND ${HAVE_ROUND}) |
| set(RIVET_NO_HAVE_ROUND ${NO_HAVE_ROUND}) |
| |
| # Generate headers rivet_config.h, config.h |
| # =========================================================================== |
| MESSAGE(STATUS "Generating: " ${RIVET_GENERATE_DIR}/rivet_config.h) |
| configure_file("${PROJECT_SOURCE_DIR}/cmake_extra_modules/rivet_config.h.cmake" |
| "${RIVET_GENERATE_DIR}/rivet_config.h" ) |
| MESSAGE(STATUS "Generating: " ${RIVET_GENERATE_DIR}/config.h) |
| configure_file("${PROJECT_SOURCE_DIR}/cmake_extra_modules/config.h.cmake" |
| "${RIVET_GENERATE_DIR}/config.h" ) |
| |
| # Generate init.tcl |
| # =========================================================================== |
| MESSAGE(STATUS "Generating: " ${RIVET_GENERATE_DIR}/init.tcl) |
| configure_file("${RIVET_LIB_DIR}/init.tcl.in" |
| "${RIVET_GENERATE_DIR}/init.tcl" @ONLY) |
| |
| # =========================================================================== |
| # Installation section... |
| # =========================================================================== |
| |
| MESSAGE ( STATUS |
| "==========================================================================" ) |
| MESSAGE ( STATUS "Rivet ${RIVET_VERSION} will be installed in the following " |
| "directories:" ) |
| MESSAGE ( STATUS " + mod_rivet.so: " ${APACHE_MODULE_DIR} ) |
| MESSAGE ( STATUS " (to override this location, use -DAPACHE_MODULE_DIR=...)") |
| MESSAGE ( STATUS " + Rivet library: " ${RIVETLIB_DESTDIR} ) |
| MESSAGE ( STATUS " (to override this location, use -DAPACHE_LIB_DIR=... or") |
| MESSAGE ( STATUS " -DRIVETLIB_DESTDIR=...)") |
| MESSAGE ( STATUS |
| "==========================================================================" ) |
| |
| # Library mod_rivet (mod_rivet.so) must be installed in the directory Apache2 |
| # searches for modules... |
| # =========================================================================== |
| if(WIN32) |
| install(TARGETS mod_rivet EXPORT Rivet_mod_rivet |
| RUNTIME DESTINATION ${APACHE_MODULE_DIR}) |
| else(WIN32) |
| install(TARGETS mod_rivet EXPORT Rivet_mod_rivet |
| LIBRARY DESTINATION ${APACHE_MODULE_DIR}) |
| endif(WIN32) |
| |
| # Install mpms... |
| # =========================================================================== |
| install(TARGETS rivet_worker_mpm rivet_prefork_mpm rivet_lazy_mpm |
| EXPORT Rivet_MPMs |
| ARCHIVE DESTINATION ${RIVETLIB_DESTDIR}/mpm |
| LIBRARY DESTINATION ${RIVETLIB_DESTDIR}/mpm |
| RUNTIME DESTINATION ${RIVETLIB_DESTDIR}/mpm) |
| |
| # Install libraries... |
| # =========================================================================== |
| install(TARGETS rivetparser rivetlib |
| EXPORT Rivet_Libraries |
| ARCHIVE DESTINATION ${RIVETLIB_DESTDIR} |
| LIBRARY DESTINATION ${RIVETLIB_DESTDIR} |
| RUNTIME DESTINATION ${RIVETLIB_DESTDIR}) |
| |
| # Install library files... |
| # =========================================================================== |
| install(FILES |
| ${RIVET_GENERATE_DIR}/init.tcl |
| ${RIVET_LIB_DIR}/default_request_handler.tcl |
| ${RIVET_LIB_DIR}/pkgIndex.tcl |
| DESTINATION ${RIVETLIB_DESTDIR}) |
| |
| # Install library directories... |
| # =========================================================================== |
| install(DIRECTORY ${RIVET_LIB_DIR}/rivet-tcl |
| DESTINATION ${RIVETLIB_DESTDIR}) |
| install(DIRECTORY |
| ${RIVET_LIB_DIR}/packages/asciiglyphs |
| ${RIVET_LIB_DIR}/packages/calendar |
| ${RIVET_LIB_DIR}/packages/dio |
| ${RIVET_LIB_DIR}/packages/entities |
| ${RIVET_LIB_DIR}/packages/form |
| ${RIVET_LIB_DIR}/packages/formbroker |
| ${RIVET_LIB_DIR}/packages/session |
| ${RIVET_LIB_DIR}/packages/tclrivet |
| DESTINATION ${RIVETLIB_DESTDIR}/packages) |
| |
| # Regenerate pkgIndex.tcl in all libraries... |
| # =========================================================================== |
| SET ( RIVET_LIBS_ARCH ${RIVETLIB_DESTDIR} ) |
| file(WRITE ${RIVETLIB_DESTDIR}/regenerate_pkgIndex.tcl |
| "puts \"Regenerating pkgIndex.tcl in [pwd]:\" |
| file delete {*}[glob [file join packages * pkgIndex.tcl]] pkgIndex.tcl |
| pkg_mkIndex -verbose [pwd] init.tcl packages/*/*.tcl *[info sharedlibextension]" |
| ) |
| install(CODE " |
| execute_process(COMMAND ${TCL_TCLSH} regenerate_pkgIndex.tcl |
| WORKING_DIRECTORY ${RIVETLIB_DESTDIR}) |
| file(REMOVE ${RIVETLIB_DESTDIR}/regenerate_pkgIndex.tcl) |
| " |
| ) |