for -DWITH_MODULES option.
* build/build-modules-c.cmake:
(generate_builtin_modules_c): Function to generate modules.c.
* CMakeLists.txt
(): Use generate_builtin_modules_c() instead of `awk -f build/build-modules-c.awk`
to generate modules.c file.
* README.cmake:
(Prerequisites, How to build): Do not mention awk as prerequisite.
Follow-up to r1919413: CMake: Use configure_file() instead of file(write)
to generate modules.c file because configure_file() doesn't change
timestamp of file if contents is the the same.
Follow-up to r1919587: CMake: Fix type in variable name (MODULES_SYNMBOLS -> MODULES_SYMBOLS)
Merges r1919413, r1919587, r1919602 from trunk
Submitted by: ivan
Reviewed by: CTR
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@
1926319 13f79535-47bb-0310-9956-
ffa450edef68
INCLUDE(CheckSymbolExists)
INCLUDE(CheckCSourceCompiles)
+INCLUDE("build/build-modules-c.cmake")
FIND_PACKAGE(LibXml2)
FIND_PACKAGE(Lua51)
SET(install_bin_pdb)
SET(install_modules) # special handling vs. other installed targets
SET(install_modules_pdb)
-SET(builtin_module_shortnames "win32 mpm_winnt http so") # core added automatically
+SET(builtin_module_shortnames)
+LIST(APPEND builtin_module_shortnames "win32" "mpm_winnt" "http" "so") # core added automatically
SET(extra_builtin_modules) # the ones specified with -DWITH_MODULES=
-IF(WITH_MODULES) # modules statically linked with the server
- STRING(REPLACE "," ";" WITH_MODULE_LIST ${WITH_MODULES})
- FOREACH(static_mod ${WITH_MODULE_LIST})
- STRING(REGEX MATCH "[^/]+\\.c" mod_basename ${static_mod})
- STRING(REGEX REPLACE "^mod_(.*)\\.c" "\\1" mod_module_name ${mod_basename})
- SET(builtin_module_shortnames "${builtin_module_shortnames} ${mod_module_name}")
- CONFIGURE_FILE(${static_mod} ${PROJECT_BINARY_DIR}/ COPYONLY)
- SET(extra_builtin_modules ${extra_builtin_modules} ${PROJECT_BINARY_DIR}/${mod_basename})
- ENDFOREACH()
- EXECUTE_PROCESS(COMMAND cmd /c "echo ${builtin_module_shortnames}| awk -f ${CMAKE_CURRENT_SOURCE_DIR}/build/build-modules-c.awk > ${PROJECT_BINARY_DIR}/modules.c" RESULT_VARIABLE rv)
- IF(rv)
- MESSAGE(FATAL_ERROR "build-modules-c.awk failed (${rv})")
- ENDIF()
-ELSE()
- # no extra built-in modules; use the default modules.c to avoid the awk prereq
- CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/os/win32/modules.c ${PROJECT_BINARY_DIR}/ COPYONLY)
-ENDIF()
+STRING(REPLACE "," ";" WITH_MODULE_LIST "${WITH_MODULES}")
+FOREACH(static_mod ${WITH_MODULE_LIST})
+ STRING(REGEX MATCH "[^/]+\\.c" mod_basename ${static_mod})
+ STRING(REGEX REPLACE "^mod_(.*)\\.c" "\\1" mod_module_name ${mod_basename})
+ LIST(APPEND builtin_module_shortnames "${mod_module_name}")
+ CONFIGURE_FILE(${static_mod} ${PROJECT_BINARY_DIR}/ COPYONLY)
+ SET(extra_builtin_modules ${extra_builtin_modules} ${PROJECT_BINARY_DIR}/${mod_basename})
+ENDFOREACH()
+
+generate_builtin_modules_c("${PROJECT_BINARY_DIR}/modules.c" "${builtin_module_shortnames}")
# for easy reference from .dll/.so builds
CONFIGURE_FILE(os/win32/BaseAddr.ref ${PROJECT_BINARY_DIR}/ COPYONLY)
cmake version 3.1.3 or later is required to work with current OpenSSL
releases. (OpenSSL is an optional prerequisite of httpd.)
* Perl
-* If the WITH_MODULES feature is used: awk
* If using a command-line compiler: compiler and linker and related tools
(Refer to the cmake documentation for more information.)
2. Make sure cmake and Perl are in PATH. Additionally, some backends
require compile tools in PATH. (Hint: "Visual Studio Command Prompt")
- In the unlikely event that you use -DWITH_MODULES, described below, make
- sure awk is in PATH.
3. cmake -G "some backend, like 'NMake Makefiles'"
-DCMAKE_INSTALL_PREFIX=d:/path/to/httpdinst
--- /dev/null
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+function(generate_builtin_modules_c output_filename module_list)
+ list(PREPEND module_list "core")
+
+ foreach(module ${module_list})
+ string(APPEND MODULES_EXTERN "extern module ${module}_module;\n")
+ string(APPEND MODULES_PRELINK " &${module}_module,\n")
+ string(APPEND MODULES_SYMBOLS " {\"${module}_module\", &${module}_module},\n")
+ string(APPEND MODULES_PRELOAD " &${module}_module,\n")
+ endforeach()
+
+ configure_file("build/modules.c.in" ${output_filename})
+endfunction()
--- /dev/null
+/*\r
+ * modules.c --- automatically generated by Apache\r
+ * configuration script. DO NOT HAND EDIT!!!!!\r
+ */\r
+\r
+#include "ap_config.h"\r
+#include "httpd.h"\r
+#include "http_config.h"\r
+\r
+@MODULES_EXTERN@\r
+/*\r
+ * Modules which implicitly form the\r
+ * list of activated modules on startup,\r
+ * i.e. these are the modules which are\r
+ * initially linked into the Apache processing\r
+ * [extendable under run-time via AddModule]\r
+ */\r
+AP_DECLARE_DATA module *ap_prelinked_modules[] = {\r
+@MODULES_PRELINK@\r
+ NULL\r
+};\r
+\r
+/*\r
+ * We need the symbols as strings for <IfModule> containers\r
+ */\r
+ap_module_symbol_t ap_prelinked_module_symbols[] = {\r
+@MODULES_SYMBOLS@\r
+ {NULL, NULL}\r
+};\r
+\r
+/*\r
+ * Modules which initially form the\r
+ * list of available modules on startup,\r
+ * i.e. these are the modules which are\r
+ * initially loaded into the Apache process\r
+ * [extendable under run-time via LoadModule]\r
+ */\r
+module *ap_preloaded_modules[] = {\r
+@MODULES_PRELOAD@\r
+ NULL\r
+};\r