@@ -23,12 +23,14 @@ PROJECT(HTTPD C)
2323
2424INCLUDE (CheckSymbolExists)
2525INCLUDE (CheckCSourceCompiles)
26+ INCLUDE ("build/build-modules-c.cmake" )
2627
2728FIND_PACKAGE (LibXml2)
2829FIND_PACKAGE (Lua51)
2930FIND_PACKAGE (OpenSSL)
3031FIND_PACKAGE (ZLIB)
3132FIND_PACKAGE (CURL)
33+ FIND_PACKAGE (PCRE2 COMPONENTS 8BIT)
3234
3335# Options for support libraries not supported by cmake-bundled FindFOO
3436
@@ -49,7 +51,10 @@ ENDIF()
4951# PCRE names its libraries differently for debug vs. release builds.
5052# We can't query our own CMAKE_BUILD_TYPE at configure time.
5153# If the debug version exists in PREFIX/lib, default to that one.
52- IF (EXISTS "${CMAKE_INSTALL_PREFIX} /lib/pcre2-8d.lib" )
54+ IF (PCRE2_FOUND)
55+ SET (default_pcre_libraries "PCRE2::8BIT" )
56+ SET (default_pcre_cflags "-DHAVE_PCRE2" )
57+ ELSEIF (EXISTS "${CMAKE_INSTALL_PREFIX} /lib/pcre2-8d.lib" )
5358 SET (default_pcre_libraries ${CMAKE_INSTALL_PREFIX} /lib/pcre2-8d.lib)
5459 SET (default_pcre_cflags "-DHAVE_PCRE2" )
5560ELSEIF (EXISTS "${CMAKE_INSTALL_PREFIX} /lib/pcre2-8.lib" )
@@ -137,16 +142,6 @@ FOREACH(onelib ${APR_LIBRARIES})
137142 ENDIF ()
138143ENDFOREACH ()
139144
140- MACRO (DEFINE_WITH_BLANKS output_definition input_symbol input_value)
141- IF (MSVC_IDE OR ${CMAKE_MAJOR_VERSION} .${CMAKE_MINOR_VERSION} .${CMAKE_PATCH_VERSION} VERSION_GREATER 2.8.11)
142- SET (${output_definition} "-D${input_symbol} =\" ${input_value} \" " )
143- ELSE ()
144- # command-line tool + older cmake, where extra quotes must be added and
145- # escaped to survive
146- SET (${output_definition} "-D${input_symbol} =\"\\\" ${input_value} \\\"\" " )
147- ENDIF ()
148- ENDMACRO ()
149-
150145MACRO (GET_MOD_ENABLE_RANK macro_modname macro_mod_enable_val macro_output_rank)
151146 IF (${macro_mod_enable_val} STREQUAL "O" )
152147 SET (${macro_output_rank} 0)
@@ -558,6 +553,10 @@ IF(LIBXML2_FOUND)
558553ENDIF ()
559554SET (mod_proxy_scgi_extra_libs mod_proxy)
560555SET (mod_proxy_wstunnel_extra_libs mod_proxy)
556+ SET (mod_lbmethod_bybusyness_extra_libs mod_proxy)
557+ SET (mod_lbmethod_bytraffic_extra_libs mod_proxy)
558+ SET (mod_lbmethod_byrequests_extra_libs mod_proxy)
559+ SET (mod_lbmethod_heartbeat_extra_libs mod_proxy)
561560SET (mod_proxy_http2_requires NGHTTP2_FOUND)
562561SET (mod_proxy_http2_extra_defines ssize_t=long)
563562SET (mod_proxy_http2_extra_includes ${NGHTTP2_INCLUDE_DIR} )
@@ -648,26 +647,20 @@ SET(install_targets)
648647SET (install_bin_pdb)
649648SET (install_modules) # special handling vs. other installed targets
650649SET (install_modules_pdb)
651- SET (builtin_module_shortnames "win32 mpm_winnt http so" ) # core added automatically
650+ SET (builtin_module_shortnames)
651+ LIST (APPEND builtin_module_shortnames "win32" "mpm_winnt" "http" "so" ) # core added automatically
652652SET (extra_builtin_modules) # the ones specified with -DWITH_MODULES=
653653
654- IF (WITH_MODULES) # modules statically linked with the server
655- STRING (REPLACE "," ";" WITH_MODULE_LIST ${WITH_MODULES} )
656- FOREACH (static_mod ${WITH_MODULE_LIST} )
657- STRING (REGEX MATCH "[^/]+\\ .c" mod_basename ${static_mod} )
658- STRING (REGEX REPLACE "^mod_(.*)\\ .c" "\\ 1" mod_module_name ${mod_basename} )
659- SET (builtin_module_shortnames "${builtin_module_shortnames} ${mod_module_name} " )
660- CONFIGURE_FILE (${static_mod} ${PROJECT_BINARY_DIR} / COPYONLY )
661- SET (extra_builtin_modules ${extra_builtin_modules} ${PROJECT_BINARY_DIR} /${mod_basename} )
662- ENDFOREACH ()
663- 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)
664- IF (rv)
665- MESSAGE (FATAL_ERROR "build-modules-c.awk failed (${rv} )" )
666- ENDIF ()
667- ELSE ()
668- # no extra built-in modules; use the default modules.c to avoid the awk prereq
669- CONFIGURE_FILE (${CMAKE_CURRENT_SOURCE_DIR} /os/win32 /modules.c ${PROJECT_BINARY_DIR} / COPYONLY )
670- ENDIF ()
654+ STRING (REPLACE "," ";" WITH_MODULE_LIST "${WITH_MODULES} " )
655+ FOREACH (static_mod ${WITH_MODULE_LIST} )
656+ STRING (REGEX MATCH "[^/]+\\ .c" mod_basename ${static_mod} )
657+ STRING (REGEX REPLACE "^mod_(.*)\\ .c" "\\ 1" mod_module_name ${mod_basename} )
658+ LIST (APPEND builtin_module_shortnames "${mod_module_name} " )
659+ CONFIGURE_FILE (${static_mod} ${PROJECT_BINARY_DIR} / COPYONLY )
660+ SET (extra_builtin_modules ${extra_builtin_modules} ${PROJECT_BINARY_DIR} /${mod_basename} )
661+ ENDFOREACH ()
662+
663+ generate_builtin_modules_c("${PROJECT_BINARY_DIR} /modules.c" "${builtin_module_shortnames} " )
671664
672665# for easy reference from .dll/.so builds
673666CONFIGURE_FILE (os/win32 /BaseAddr.ref ${PROJECT_BINARY_DIR} / COPYONLY )
@@ -893,8 +886,11 @@ FOREACH (mod ${MODULE_PATHS})
893886 LINK_FLAGS /base:@${PROJECT_BINARY_DIR} /BaseAddr.ref,${mod_name} .so
894887 )
895888 TARGET_LINK_LIBRARIES (${mod_name} ${${mod_extra_libs} } libhttpd ${EXTRA_LIBS} ${APR_LIBRARIES} ${HTTPD_SYSTEM_LIBS} )
896- DEFINE_WITH_BLANKS(define_long_name "LONG_NAME" "${mod_name} for Apache HTTP Server" )
897- SET_TARGET_PROPERTIES (${mod_name} PROPERTIES COMPILE_FLAGS "${define_long_name} -DBIN_NAME=${mod_name} .so ${EXTRA_COMPILE_FLAGS} " )
889+ TARGET_COMPILE_DEFINITIONS (${mod_name} PRIVATE
890+ "LONG_NAME=${mod_name} for Apache HTTP Server"
891+ "BIN_NAME=${mod_name} .so"
892+ )
893+ TARGET_COMPILE_OPTIONS (${mod_name} PRIVATE "${EXTRA_COMPILE_FLAGS} " )
898894
899895 # Extra defines?
900896 SET (mod_extra_defines "${mod_name} _extra_defines" )
@@ -921,17 +917,27 @@ SET_TARGET_PROPERTIES(libhttpd PROPERTIES
921917SET (install_targets ${install_targets} libhttpd)
922918SET (install_bin_pdb ${install_bin_pdb} $<TARGET_PDB_FILE:libhttpd>)
923919TARGET_LINK_LIBRARIES (libhttpd ${EXTRA_LIBS} ${APR_LIBRARIES} ${PCRE_LIBRARIES} ${HTTPD_SYSTEM_LIBS} )
924- DEFINE_WITH_BLANKS(define_long_name "LONG_NAME" "Apache HTTP Server Core" )
925- SET_TARGET_PROPERTIES (libhttpd PROPERTIES COMPILE_FLAGS "-DAP_DECLARE_EXPORT -DAPREQ_DECLARE_EXPORT ${define_long_name} ${PCRE_CFLAGS} -DBIN_NAME=libhttpd.dll ${EXTRA_COMPILE_FLAGS} " )
920+ TARGET_COMPILE_DEFINITIONS (libhttpd PRIVATE
921+ "LONG_NAME=Apache HTTP Server Core"
922+ "BIN_NAME=libhttpd.dll"
923+ "AP_DECLARE_EXPORT"
924+ "APREQ_DECLARE_EXPORT"
925+ )
926+ TARGET_COMPILE_OPTIONS (libhttpd PRIVATE ${PCRE_CFLAGS} ${EXTRA_COMPILE_FLAGS} )
926927ADD_DEPENDENCIES (libhttpd test_char_header)
927928
928929########### HTTPD EXECUTABLES ##########
929930ADD_EXECUTABLE (httpd server/main.c build /win32 /httpd.rc)
930931SET (install_targets ${install_targets} httpd)
931932SET (install_bin_pdb ${install_bin_pdb} $<TARGET_PDB_FILE:httpd>)
932- DEFINE_WITH_BLANKS(define_long_name "LONG_NAME" "Apache HTTP Server" )
933+ TARGET_COMPILE_DEFINITIONS (httpd PRIVATE
934+ "APP_FILE"
935+ "LONG_NAME=Apache HTTP Server"
936+ "BIN_NAME=httpd.exe"
937+ "ICON_FILE=${CMAKE_SOURCE_DIR} /build/win32/apache.ico"
938+ )
939+ TARGET_COMPILE_OPTIONS (httpd PRIVATE "${EXTRA_COMPILE_FLAGS} " )
933940SET_TARGET_PROPERTIES (httpd PROPERTIES
934- COMPILE_FLAGS "-DAPP_FILE ${define_long_name} -DBIN_NAME=httpd.exe -DICON_FILE=${CMAKE_SOURCE_DIR} /build/win32/apache.ico ${EXTRA_COMPILE_FLAGS} "
935941 LINK_FLAGS "/stack:0x40000"
936942)
937943TARGET_LINK_LIBRARIES (httpd libhttpd ${EXTRA_LIBS} )
@@ -954,8 +960,12 @@ FOREACH(pgm ${standard_support})
954960 ADD_EXECUTABLE (${pgm} support/${pgm} .c ${${extra_sources} } build /win32 /httpd.rc)
955961 SET (install_targets ${install_targets} ${pgm} )
956962 SET (install_bin_pdb ${install_bin_pdb} $<TARGET_PDB_FILE:${pgm} >)
957- DEFINE_WITH_BLANKS(define_long_name "LONG_NAME" "Apache HTTP Server ${pgm} program" )
958- SET_TARGET_PROPERTIES (${pgm} PROPERTIES COMPILE_FLAGS "-DAPP_FILE ${define_long_name} -DBIN_NAME=${pgm} .exe ${EXTRA_COMPILE_FLAGS} " )
963+ TARGET_COMPILE_DEFINITIONS (${pgm} PRIVATE
964+ "APP_FILE"
965+ "LONG_NAME=Apache HTTP Server ${pgm} program"
966+ "BIN_NAME=${pgm} .exe"
967+ )
968+ TARGET_COMPILE_OPTIONS (${mod_name} PRIVATE "${EXTRA_COMPILE_FLAGS} " )
959969 TARGET_LINK_LIBRARIES (${pgm} ${EXTRA_LIBS} ${APR_LIBRARIES} )
960970ENDFOREACH ()
961971
@@ -964,8 +974,11 @@ SET(install_targets ${install_targets} ab)
964974SET (install_bin_pdb ${install_bin_pdb} $<TARGET_PDB_FILE:ab>)
965975SET (tmp_includes ${HTTPD_INCLUDE_DIRECTORIES} )
966976SET_TARGET_PROPERTIES (ab PROPERTIES INCLUDE_DIRECTORIES "${tmp_includes} " )
967- DEFINE_WITH_BLANKS(define_long_name "LONG_NAME" "Apache HTTP Server ab program" )
968- SET_TARGET_PROPERTIES (ab PROPERTIES COMPILE_FLAGS "-DAPP_FILE ${define_long_name} -DBIN_NAME=ab.exe ${EXTRA_COMPILE_FLAGS} " )
977+ TARGET_COMPILE_DEFINITIONS (ab PRIVATE
978+ "APP_FILE"
979+ "LONG_NAME=Apache HTTP Server ab program"
980+ "BIN_NAME=ab.exe"
981+ )
969982TARGET_LINK_LIBRARIES (ab ${EXTRA_LIBS} ${APR_LIBRARIES} Ws2_32.lib)
970983
971984IF (OPENSSL_FOUND)
@@ -975,8 +988,11 @@ IF(OPENSSL_FOUND)
975988 SET_TARGET_PROPERTIES (abs PROPERTIES COMPILE_DEFINITIONS HAVE_OPENSSL)
976989 SET (tmp_includes ${HTTPD_INCLUDE_DIRECTORIES} ${OPENSSL_INCLUDE_DIR} )
977990 SET_TARGET_PROPERTIES (abs PROPERTIES INCLUDE_DIRECTORIES "${tmp_includes} " )
978- DEFINE_WITH_BLANKS(define_long_name "LONG_NAME" "Apache HTTP Server ab/SSL program" )
979- SET_TARGET_PROPERTIES (abs PROPERTIES COMPILE_FLAGS "-DAPP_FILE ${define_long_name} -DBIN_NAME=abs.exe ${EXTRA_COMPILE_FLAGS} " )
991+ TARGET_COMPILE_DEFINITIONS (abs PRIVATE
992+ "APP_FILE"
993+ "LONG_NAME=Apache HTTP Server ab/SSL program"
994+ "BIN_NAME=abs.exe"
995+ )
980996 TARGET_LINK_LIBRARIES (abs ${EXTRA_LIBS} ${APR_LIBRARIES} ${OPENSSL_LIBRARIES} Ws2_32.lib)
981997ENDIF ()
982998
0 commit comments