]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Remove awk dependency when building using CMake. Before this awk was required
authorYann Ylavic <ylavic@apache.org>
Tue, 10 Jun 2025 10:51:35 +0000 (10:51 +0000)
committerYann Ylavic <ylavic@apache.org>
Tue, 10 Jun 2025 10:51:35 +0000 (10:51 +0000)
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

CMakeLists.txt
README.cmake
build/build-modules-c.cmake [new file with mode: 0644]
build/modules.c.in [new file with mode: 0644]

index 9b38f699dbe46fdc18a129f72b64ee75d1f1d766..170076bdd407a9d982bd7e33971d4cc06b01c8ec 100644 (file)
@@ -21,6 +21,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
 
 INCLUDE(CheckSymbolExists)
 INCLUDE(CheckCSourceCompiles)
+INCLUDE("build/build-modules-c.cmake")
 
 FIND_PACKAGE(LibXml2)
 FIND_PACKAGE(Lua51)
@@ -607,26 +608,20 @@ SET(install_targets)
 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)
index f262c143ec6790f53801803b467e40745c9088bb..cbd3565f7fc73162031e990661606df272f52b04 100644 (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
   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.)
 
@@ -100,8 +99,6 @@ How to build
 
 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
diff --git a/build/build-modules-c.cmake b/build/build-modules-c.cmake
new file mode 100644 (file)
index 0000000..491ff3c
--- /dev/null
@@ -0,0 +1,27 @@
+# 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()
diff --git a/build/modules.c.in b/build/modules.c.in
new file mode 100644 (file)
index 0000000..fa0a9fa
--- /dev/null
@@ -0,0 +1,41 @@
+/*\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