From 56e05ab238fce6960b87de2628196b06e378157b Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Mon, 21 Nov 2016 12:18:18 +0000 Subject: [PATCH] Merge r1752331, r1752332, r1752333 from trunk: CMake: use CMAKE_REQUIRED_INCLUDES to find APR macros When using CMake with Visual Studio on Windows, invoking the CHECK_SYMBOL_EXISTS macro with the full paths to the include files seems to always result in failure. Instead, use the documented CMAKE_REQUIRED_INCLUDES variable to set the include directory, and pass only the headers' base names to CHECK_SYMBOL_EXISTS. CMake: use generator expressions to find output files Multi-configuration generators, like Visual Studio, use a different output directory (Debug, Release, etc.) for each configuration. To find the output files reliably, switch to using generator expressions instead of hardcoding the file paths for PDBs, export files, etc. CMake: quote installation paths Deal with installation paths with spaces in them (e.g. "C:\Program Files") by quoting the arguments to perl and xcopy. Submitted by: jchampion Reviewed/backported by: jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1770674 13f79535-47bb-0310-9956-ffa450edef68 --- CMakeLists.txt | 31 ++++++++++++++++--------------- STATUS | 6 ------ 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f7e1e71a1e2..7646903ae32 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -125,7 +125,8 @@ GET_MOD_ENABLE_RANK("ENABLE_MODULES setting" ${ENABLE_MODULES} enable_modules_ra # not defined to either 1 or 0) MACRO(CHECK_APR_FEATURE which_define) - CHECK_SYMBOL_EXISTS(${which_define} "${APR_INCLUDE_DIR}/apr.h;${APR_INCLUDE_DIR}/apu.h" tmp_${which_define}) + SET(CMAKE_REQUIRED_INCLUDES "${APR_INCLUDE_DIR}") + CHECK_SYMBOL_EXISTS(${which_define} "apr.h;apu.h" tmp_${which_define}) IF(${tmp_${which_define}}) CHECK_C_SOURCE_COMPILES("#include \"${APR_INCLUDE_DIR}/apr.h\" #include \"${APR_INCLUDE_DIR}/apu.h\" @@ -724,12 +725,12 @@ FOREACH (mod ${MODULE_PATHS}) SET(all_mod_sources ${tmp_mod_main_source} ${${mod_extra_sources}}) ADD_LIBRARY(${mod_name} SHARED ${all_mod_sources} build/win32/httpd.rc) SET(install_modules ${install_modules} ${mod_name}) - SET(install_modules_pdb ${install_modules_pdb} "${PROJECT_BINARY_DIR}/${mod_name}.pdb") + SET(install_modules_pdb ${install_modules_pdb} "$") IF("${${mod_name}_install_lib}") SET(installed_mod_libs_exps ${installed_mod_libs_exps} - "${PROJECT_BINARY_DIR}/${mod_name}.lib" - "${PROJECT_BINARY_DIR}/${mod_name}.exp" + "$" + "$/${mod_name}.exp" ) ENDIF() SET(mod_extra_libs "${mod_name}_extra_libs") @@ -764,7 +765,7 @@ SET_TARGET_PROPERTIES(libhttpd PROPERTIES LINK_FLAGS /base:@${PROJECT_BINARY_DIR}/BaseAddr.ref,libhttpd.dll ) SET(install_targets ${install_targets} libhttpd) -SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/libhttpd.pdb) +SET(install_bin_pdb ${install_bin_pdb} $) TARGET_LINK_LIBRARIES(libhttpd ${EXTRA_LIBS} ${APR_LIBRARIES} ${PCRE_LIBRARIES} ${HTTPD_SYSTEM_LIBS}) DEFINE_WITH_BLANKS(define_long_name "LONG_NAME" "Apache HTTP Server Core") SET_TARGET_PROPERTIES(libhttpd PROPERTIES COMPILE_FLAGS "-DAP_DECLARE_EXPORT ${define_long_name} -DBIN_NAME=libhttpd.dll ${EXTRA_COMPILE_FLAGS}") @@ -773,7 +774,7 @@ ADD_DEPENDENCIES(libhttpd test_char_header) ########### HTTPD EXECUTABLES ########## ADD_EXECUTABLE(httpd server/main.c build/win32/httpd.rc) SET(install_targets ${install_targets} httpd) -SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/httpd.pdb) +SET(install_bin_pdb ${install_bin_pdb} $) DEFINE_WITH_BLANKS(define_long_name "LONG_NAME" "Apache HTTP Server") SET_TARGET_PROPERTIES(httpd PROPERTIES COMPILE_FLAGS "-DAPP_FILE ${define_long_name} -DBIN_NAME=httpd.exe -DICON_FILE=${CMAKE_SOURCE_DIR}/build/win32/apache.ico ${EXTRA_COMPILE_FLAGS}") TARGET_LINK_LIBRARIES(httpd libhttpd ${EXTRA_LIBS}) @@ -796,7 +797,7 @@ FOREACH(pgm ${standard_support}) SET(extra_sources ${pgm}_extra_sources) ADD_EXECUTABLE(${pgm} support/${pgm}.c ${${extra_sources}} build/win32/httpd.rc) SET(install_targets ${install_targets} ${pgm}) - SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/${pgm}.pdb) + SET(install_bin_pdb ${install_bin_pdb} $) DEFINE_WITH_BLANKS(define_long_name "LONG_NAME" "Apache HTTP Server ${pgm} program") SET_TARGET_PROPERTIES(${pgm} PROPERTIES COMPILE_FLAGS "-DAPP_FILE ${define_long_name} -DBIN_NAME=${pgm}.exe ${EXTRA_COMPILE_FLAGS}") TARGET_LINK_LIBRARIES(${pgm} ${EXTRA_LIBS} ${APR_LIBRARIES}) @@ -805,7 +806,7 @@ ENDFOREACH() IF(OPENSSL_FOUND) ADD_EXECUTABLE(abs support/ab.c build/win32/httpd.rc) SET(install_targets ${install_targets} abs) - SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/abs.pdb) + SET(install_bin_pdb ${install_bin_pdb} $) SET_TARGET_PROPERTIES(abs PROPERTIES COMPILE_DEFINITIONS HAVE_OPENSSL) SET(tmp_includes ${HTTPD_INCLUDE_DIRECTORIES} ${OPENSSL_INCLUDE_DIR}) SET_TARGET_PROPERTIES(abs PROPERTIES INCLUDE_DIRECTORIES "${tmp_includes}") @@ -818,7 +819,7 @@ GET_PROPERTY(tmp_includes TARGET ab PROPERTY INCLUDE_DIRECTORIES) # getting duplicate manifest error with ApacheMonitor # ADD_EXECUTABLE(ApacheMonitor support/win32/ApacheMonitor.c support/win32/ApacheMonitor.rc) # SET(install_targets ${install_targets} ApacheMonitor) -# SET(install_bin_pdb ${install_bin_pdb} ${PROJECT_BINARY_DIR}/ApacheMonitor.pdb) +# SET(install_bin_pdb ${install_bin_pdb} $) # SET_TARGET_PROPERTIES(ApacheMonitor PROPERTIES WIN32_EXECUTABLE TRUE) # SET_TARGET_PROPERTIES(ApacheMonitor PROPERTIES COMPILE_FLAGS "-DAPP_FILE -DLONG_NAME=ApacheMonitor -DBIN_NAME=ApacheMonitor.exe ${EXTRA_COMPILE_FLAGS}") # TARGET_LINK_LIBRARIES(ApacheMonitor ${EXTRA_LIBS} ${HTTPD_SYSTEM_LIBS} comctl32 wtsapi32) @@ -875,7 +876,7 @@ INSTALL(DIRECTORY include/ DESTINATION include ) INSTALL(FILES ${other_installed_h} DESTINATION include) INSTALL(FILES ${installed_mod_libs_exps} DESTINATION lib) -INSTALL(FILES "${CMAKE_BINARY_DIR}/libhttpd.exp" DESTINATION LIB) +INSTALL(FILES "$/libhttpd.exp" DESTINATION LIB) IF(INSTALL_MANUAL) # Silly? This takes a while, and a dev doesn't need it. INSTALL(DIRECTORY docs/manual/ DESTINATION manual) @@ -884,22 +885,22 @@ ENDIF() INSTALL(DIRECTORY DESTINATION logs) INSTALL(DIRECTORY DESTINATION cgi-bin) -INSTALL(CODE "EXECUTE_PROCESS(COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/build/cpR_noreplace.pl ${CMAKE_CURRENT_SOURCE_DIR}/docs/error ${CMAKE_INSTALL_PREFIX}/error ifdestmissing)") +INSTALL(CODE "EXECUTE_PROCESS(COMMAND perl \"${CMAKE_CURRENT_SOURCE_DIR}/build/cpR_noreplace.pl\" \"${CMAKE_CURRENT_SOURCE_DIR}/docs/error\" \"${CMAKE_INSTALL_PREFIX}/error\" ifdestmissing)") -INSTALL(CODE "EXECUTE_PROCESS(COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/build/cpR_noreplace.pl ${CMAKE_CURRENT_SOURCE_DIR}/docs/docroot ${CMAKE_INSTALL_PREFIX}/htdocs ifdestmissing)") +INSTALL(CODE "EXECUTE_PROCESS(COMMAND perl \"${CMAKE_CURRENT_SOURCE_DIR}/build/cpR_noreplace.pl\" \"${CMAKE_CURRENT_SOURCE_DIR}/docs/docroot\" \"${CMAKE_INSTALL_PREFIX}/htdocs\" ifdestmissing)") -INSTALL(CODE "EXECUTE_PROCESS(COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/build/cpR_noreplace.pl ${CMAKE_CURRENT_SOURCE_DIR}/docs/icons ${CMAKE_INSTALL_PREFIX}/icons ifdestmissing)") +INSTALL(CODE "EXECUTE_PROCESS(COMMAND perl \"${CMAKE_CURRENT_SOURCE_DIR}/build/cpR_noreplace.pl\" \"${CMAKE_CURRENT_SOURCE_DIR}/docs/icons\" \"${CMAKE_INSTALL_PREFIX}/icons\" ifdestmissing)") # Copy generated .conf files from the build directory to the install, # without overwriting stuff already there. -INSTALL(CODE "EXECUTE_PROCESS(COMMAND perl ${CMAKE_CURRENT_SOURCE_DIR}/build/cpR_noreplace.pl ${CMAKE_BINARY_DIR}/conf ${CMAKE_INSTALL_PREFIX}/conf)") +INSTALL(CODE "EXECUTE_PROCESS(COMMAND perl \"${CMAKE_CURRENT_SOURCE_DIR}/build/cpR_noreplace.pl\" \"${CMAKE_BINARY_DIR}/conf\" \"${CMAKE_INSTALL_PREFIX}/conf\")") # But conf/original is supposed to be overwritten. # Note: FILE(TO_NATIVE_PATH ...) leaves the backslashes unescaped, which # generates warnings. Just do it manually since this build only supports # Windows anyway. STRING(REPLACE "/" "\\\\" native_src ${CMAKE_BINARY_DIR}/conf/original) STRING(REPLACE "/" "\\\\" native_dest ${CMAKE_INSTALL_PREFIX}/conf/original) -INSTALL(CODE "EXECUTE_PROCESS(COMMAND xcopy ${native_src} ${native_dest} /Q /S /Y)") +INSTALL(CODE "EXECUTE_PROCESS(COMMAND xcopy \"${native_src}\" \"${native_dest}\" /Q /S /Y)") STRING(TOUPPER "${CMAKE_BUILD_TYPE}" buildtype) MESSAGE(STATUS "") diff --git a/STATUS b/STATUS index 869f2e80212..7b5419f9de7 100644 --- a/STATUS +++ b/STATUS @@ -117,12 +117,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - *) CMake: fix various issues for Windows/Visual Studio build environments. - PR59685. - trunk patch: http://svn.apache.org/r1752331 - http://svn.apache.org/r1752332 - http://svn.apache.org/r1752333 - +1: jchampion, jim (by inspection), wrowe PATCHES PROPOSED TO BACKPORT FROM TRUNK: -- 2.47.2