Remove awk dependency when building using CMake. Before this awk was required

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.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1919413 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Ivan Zhakov
2024-07-20 16:18:18 +00:00
parent 152035066b
commit 55c5d07a2d
3 changed files with 96 additions and 21 deletions

View File

@ -23,6 +23,7 @@ PROJECT(HTTPD C)
INCLUDE(CheckSymbolExists) INCLUDE(CheckSymbolExists)
INCLUDE(CheckCSourceCompiles) INCLUDE(CheckCSourceCompiles)
INCLUDE("build/build-modules-c.cmake")
FIND_PACKAGE(LibXml2) FIND_PACKAGE(LibXml2)
FIND_PACKAGE(Lua51) FIND_PACKAGE(Lua51)
@ -656,26 +657,20 @@ SET(install_targets)
SET(install_bin_pdb) SET(install_bin_pdb)
SET(install_modules) # special handling vs. other installed targets SET(install_modules) # special handling vs. other installed targets
SET(install_modules_pdb) 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= 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}")
STRING(REPLACE "," ";" WITH_MODULE_LIST ${WITH_MODULES}) FOREACH(static_mod ${WITH_MODULE_LIST})
FOREACH(static_mod ${WITH_MODULE_LIST}) STRING(REGEX MATCH "[^/]+\\.c" mod_basename ${static_mod})
STRING(REGEX MATCH "[^/]+\\.c" mod_basename ${static_mod}) STRING(REGEX REPLACE "^mod_(.*)\\.c" "\\1" mod_module_name ${mod_basename})
STRING(REGEX REPLACE "^mod_(.*)\\.c" "\\1" mod_module_name ${mod_basename}) LIST(APPEND builtin_module_shortnames "${mod_module_name}")
SET(builtin_module_shortnames "${builtin_module_shortnames} ${mod_module_name}") CONFIGURE_FILE(${static_mod} ${PROJECT_BINARY_DIR}/ COPYONLY)
CONFIGURE_FILE(${static_mod} ${PROJECT_BINARY_DIR}/ COPYONLY) SET(extra_builtin_modules ${extra_builtin_modules} ${PROJECT_BINARY_DIR}/${mod_basename})
SET(extra_builtin_modules ${extra_builtin_modules} ${PROJECT_BINARY_DIR}/${mod_basename}) ENDFOREACH()
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) generate_builtin_modules_c("${PROJECT_BINARY_DIR}/modules.c" "${builtin_module_shortnames}")
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()
# for easy reference from .dll/.so builds # for easy reference from .dll/.so builds
CONFIGURE_FILE(os/win32/BaseAddr.ref ${PROJECT_BINARY_DIR}/ COPYONLY) CONFIGURE_FILE(os/win32/BaseAddr.ref ${PROJECT_BINARY_DIR}/ COPYONLY)

View File

@ -34,7 +34,6 @@ The following tools must be in PATH:
cmake version 3.1.3 or later is required to work with current OpenSSL cmake version 3.1.3 or later is required to work with current OpenSSL
releases. (OpenSSL is an optional prerequisite of httpd.) releases. (OpenSSL is an optional prerequisite of httpd.)
* Perl * Perl
* If the WITH_MODULES feature is used: awk
* If using a command-line compiler: compiler and linker and related tools * If using a command-line compiler: compiler and linker and related tools
(Refer to the cmake documentation for more information.) (Refer to the cmake documentation for more information.)
@ -100,8 +99,6 @@ How to build
2. Make sure cmake and Perl are in PATH. Additionally, some backends 2. Make sure cmake and Perl are in PATH. Additionally, some backends
require compile tools in PATH. (Hint: "Visual Studio Command Prompt") 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'" 3. cmake -G "some backend, like 'NMake Makefiles'"
-DCMAKE_INSTALL_PREFIX=d:/path/to/httpdinst -DCMAKE_INSTALL_PREFIX=d:/path/to/httpdinst

View File

@ -0,0 +1,83 @@
# 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")
set(content "")
string(APPEND content "/*\n")
string(APPEND content " * modules.c --- automatically generated by Apache\n")
string(APPEND content " * configuration script. DO NOT HAND EDIT!!!!!\n")
string(APPEND content " */\n")
string(APPEND content "\n")
string(APPEND content "#include \"ap_config.h\"\n")
string(APPEND content "#include \"httpd.h\"\n")
string(APPEND content "#include \"http_config.h\"\n")
string(APPEND content "\n")
foreach(module ${module_list})
string(APPEND content "extern module ${module}_module\;\n")
endforeach()
string(APPEND content "\n")
string(APPEND content "/*\n")
string(APPEND content " * Modules which implicitly form the\n")
string(APPEND content " * list of activated modules on startup,\n")
string(APPEND content " * i.e. these are the modules which are\n")
string(APPEND content " * initially linked into the Apache processing\n")
string(APPEND content " * [extendable under run-time via AddModule]\n")
string(APPEND content " */\n")
string(APPEND content "AP_DECLARE_DATA module *ap_prelinked_modules[] = {\n")
foreach(module ${module_list})
string(APPEND content " &${module}_module,\n")
endforeach()
string(APPEND content " NULL\n")
string(APPEND content "}\;\n")
string(APPEND content "\n")
string(APPEND content "/*\n")
string(APPEND content " * We need the symbols as strings for <IfModule> containers\n")
string(APPEND content " */\n")
string(APPEND content "\n")
string(APPEND content "ap_module_symbol_t ap_prelinked_module_symbols[] = {\n")
foreach(module ${module_list})
string(APPEND content " {\"${module}_module\", &${module}_module},\n")
endforeach()
string(APPEND content " {NULL, NULL}\n")
string(APPEND content "}\;\n")
string(APPEND content "\n")
string(APPEND content "/*\n")
string(APPEND content " * Modules which initially form the\n")
string(APPEND content " * list of available modules on startup,\n")
string(APPEND content " * i.e. these are the modules which are\n")
string(APPEND content " * initially loaded into the Apache process\n")
string(APPEND content " * [extendable under run-time via LoadModule]\n")
string(APPEND content " */\n")
string(APPEND content "module *ap_preloaded_modules[] = {\n")
foreach(module ${module_list})
string(APPEND content " &${module}_module,\n")
endforeach()
string(APPEND content " NULL\n")
string(APPEND content "}\;\n")
string(APPEND content "\n")
file(WRITE ${output_filename} ${content})
endfunction()