Author: brane Date: Tue Jul 3 11:42:06 2018 New Revision: 1834948 URL: http://svn.apache.org/viewvc?rev=1834948&view=rev Log: In the CMake build, make sure that the DLL import library is generated.
* CMakeLists.txt: Define the export blacklist as in SConstruct. Generate a Windows DEF file and add it to the shared-lib sources. * build/SerfWindowsToolkit.cmake (SerfWindowsGenDef): New function. Generates the DEF file, apparently just like build/gen_def.py. Modified: serf/trunk/CMakeLists.txt serf/trunk/build/SerfWindowsToolkit.cmake Modified: serf/trunk/CMakeLists.txt URL: http://svn.apache.org/viewvc/serf/trunk/CMakeLists.txt?rev=1834948&r1=1834947&r2=1834948&view=diff ============================================================================== --- serf/trunk/CMakeLists.txt (original) +++ serf/trunk/CMakeLists.txt Tue Jul 3 11:42:06 2018 @@ -115,7 +115,14 @@ set(SOURCES ) if(SERF_WINDOWS) - set(SHARED_SOURCES "serf.rc") + list(APPEND EXPORTS_BLACKLIST + "serf_connection_switch_protocol" + "serf_http_protocol_create" + "serf_https_protocol_create" + "serf_http_request_queue" + ) + SerfWindowsGenDef("${EXPORTS_BLACKLIST}" "${CMAKE_BINARY_DIR}/serf.def" ${HEADERS}) + set(SHARED_SOURCES "serf.rc" "${CMAKE_BINARY_DIR}/serf.def") # Static OpenSSL, APR and APR-Util need additional libraries that are not # linked by default by CMake. These will be ignored by the linker if they're Modified: serf/trunk/build/SerfWindowsToolkit.cmake URL: http://svn.apache.org/viewvc/serf/trunk/build/SerfWindowsToolkit.cmake?rev=1834948&r1=1834947&r2=1834948&view=diff ============================================================================== --- serf/trunk/build/SerfWindowsToolkit.cmake (original) +++ serf/trunk/build/SerfWindowsToolkit.cmake Tue Jul 3 11:42:06 2018 @@ -33,3 +33,37 @@ function(SerfWindowsProcessZLIB) if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") endif() endfunction(SerfWindowsProcessZLIB) + +# Generate a Windows DLL .def file from a list of headers. +function(SerfWindowsGenDef blacklist_ target_) + if(${CMAKE_SYSTEM_NAME} MATCHES "Windows") + set(func_search_rx_ "^(([a-zA-Z_0-9]+|\\*) )+\\*?(serf_[a-z][a-zA-Z_0-9]*)\\(") + set(type_search_rx_ "^extern const serf_bucket_type_t (serf_[a-z_]*);") + set(func_rx_ "^(([a-zA-Z_0-9]+|\\*) )+\\*?(serf_[a-z][a-zA-Z_0-9]*).*$") + set(type_rx_ "^extern const serf_bucket_type_t (serf_[a-z_]*).*$") + + foreach(file_ ${ARGN}) + message(STATUS "Looking for exports in ${file_}") + file(STRINGS ${file_} funcs_ REGEX "${func_search_rx_}") + file(STRINGS ${file_} types_ REGEX "${type_search_rx_}") + foreach(sym_ ${funcs_}) + string(REGEX REPLACE "${func_rx_}" "\\3" def_ ${sym_}) + list(APPEND defs_ ${def_}) + endforeach() + foreach(sym_ ${types_}) + string(REGEX REPLACE "${type_rx_}" "\\1" def_ ${sym_}) + list(APPEND defs_ ${def_}) + endforeach() + endforeach() + + list(SORT defs_) + list(REMOVE_DUPLICATES defs_) + file(WRITE ${target_} "EXPORTS\n") + foreach(def_ ${defs_}) + list(FIND blacklist_ "${def_}" skip_) + if(skip_ LESS 0) + file(APPEND ${target_} "${def_}\n") + endif() + endforeach() + endif() +endfunction(SerfWindowsGenDef)