Author: brane
Date: Thu Jun 5 18:31:10 2025
New Revision: 1926158
URL: http://svn.apache.org/viewvc?rev=1926158&view=rev
Log:
In the CMake build, merge common parts of generating the list of shared lib
export symbols on various platforms.
* CMakeLists.txt: Merge generation of exported symbols for Winodws DLLs,
Darwin Mach-O dynamic libraries and and Elf shared objects into a single
custom command.
(serf_export_symbols): New, custom target for the generated symbols lists.
(serf_shared): Depend on serf_export_symbols, when available.
* build/SerfElfGenMap.cmake,
build/SerfMachGenExp.cmake,
build/SerfWindowsGenDef.cmake: Use the same variable name for the
exported symbols file in all three generators.
Modified:
serf/trunk/CMakeLists.txt
serf/trunk/build/SerfElfGenMap.cmake
serf/trunk/build/SerfMachGenExp.cmake
serf/trunk/build/SerfWindowsGenDef.cmake
Modified: serf/trunk/CMakeLists.txt
URL:
http://svn.apache.org/viewvc/serf/trunk/CMakeLists.txt?rev=1926158&r1=1926157&r2=1926158&view=diff
==============================================================================
--- serf/trunk/CMakeLists.txt (original)
+++ serf/trunk/CMakeLists.txt Thu Jun 5 18:31:10 2025
@@ -185,22 +185,37 @@ list(APPEND SOURCES
"protocols/http2_stream.c"
)
+# Generate lists of symbols to export from shared libraries.
if(SERF_WINDOWS)
- # Generate the .def file for the Windows DLL import library.
- set(SERF_DEF_FILE
"${CMAKE_CURRENT_BINARY_DIR}/libserf-${SERF_MAJOR_VERSION}.def")
+ set(export_symbols_ext_ "def")
+ set(export_symbols_gen_ SerfWindowsGenDef)
+elseif(SERF_DARWIN)
+ set(export_symbols_ext_ "exp")
+ set(export_symbols_gen_ SerfMachGenExp)
+elseif(SERF_ELF_TARGET)
+ set(export_symbols_ext_ "map")
+ set(export_symbols_gen_ SerfElfGenMap)
+endif()
+
+if(DEFINED export_symbols_gen_)
+ set(SERF_EXPORT_SYMBOLS
"${CMAKE_CURRENT_BINARY_DIR}/libserf-${SERF_MAJOR_VERSION}.${export_symbols_ext_}")
add_custom_command(
- OUTPUT "${SERF_DEF_FILE}"
+ OUTPUT "${SERF_EXPORT_SYMBOLS}"
DEPENDS ${HEADERS}
COMMAND ${CMAKE_COMMAND}
-DCMAKE_SYSTEM_NAME="${CMAKE_SYSTEM_NAME}"
-DCMAKE_MODULE_PATH="${CMAKE_MODULE_PATH}"
-DSERF_EXPORT_BLACKLIST="${EXPORTS_BLACKLIST}"
-DSERF_EXPORT_HEADERS="${HEADERS}"
- -DSERF_DEF_FILE="${SERF_DEF_FILE}"
- -P "build/SerfWindowsGenDef.cmake"
+ -DSERF_EXPORT_SYMBOLS="${SERF_EXPORT_SYMBOLS}"
+ -P "build/${export_symbols_gen_}.cmake"
WORKING_DIRECTORY "${SERF_SOURCE_DIR}"
)
- set(SHARED_SOURCES "serf.rc" "${SERF_DEF_FILE}")
+ add_custom_target(serf_export_symbols DEPENDS "${SERF_EXPORT_SYMBOLS}")
+endif()
+
+if(SERF_WINDOWS)
+ set(SHARED_SOURCES "serf.rc" "${SERF_EXPORT_SYMBOLS}")
# 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
@@ -213,41 +228,7 @@ if(SERF_WINDOWS)
"ws2_32.lib"
)
add_compile_definitions("SERF_HAVE_SSPI")
-endif(SERF_WINDOWS)
-
-if(SERF_DARWIN)
- set(SERF_EXP_FILE
"${CMAKE_CURRENT_BINARY_DIR}/libserf-${SERF_MAJOR_VERSION}.exp")
- add_custom_command(
- OUTPUT "${SERF_EXP_FILE}"
- DEPENDS ${HEADERS}
- COMMAND ${CMAKE_COMMAND}
- -DCMAKE_SYSTEM_NAME="${CMAKE_SYSTEM_NAME}"
- -DCMAKE_MODULE_PATH="${CMAKE_MODULE_PATH}"
- -DSERF_EXPORT_BLACKLIST="${EXPORTS_BLACKLIST}"
- -DSERF_EXPORT_HEADERS="${HEADERS}"
- -DSERF_EXP_FILE="${SERF_EXP_FILE}"
- -P "build/SerfMachGenExp.cmake"
- WORKING_DIRECTORY "${SERF_SOURCE_DIR}"
- )
- set(SHARED_SOURCES "${SERF_EXP_FILE}")
-endif(SERF_DARWIN)
-
-if(SERF_ELF_TARGET)
- set(SERF_MAP_FILE
"${CMAKE_CURRENT_BINARY_DIR}/libserf-${SERF_MAJOR_VERSION}.map")
- add_custom_command(
- OUTPUT "${SERF_MAP_FILE}"
- DEPENDS ${HEADERS}
- COMMAND ${CMAKE_COMMAND}
- -DCMAKE_SYSTEM_NAME="${CMAKE_SYSTEM_NAME}"
- -DCMAKE_MODULE_PATH="${CMAKE_MODULE_PATH}"
- -DSERF_EXPORT_BLACKLIST="${EXPORTS_BLACKLIST}"
- -DSERF_EXPORT_HEADERS="${HEADERS}"
- -DSERF_MAP_FILE="${SERF_MAP_FILE}"
- -P "build/SerfElfGenMap.cmake"
- WORKING_DIRECTORY "${SERF_SOURCE_DIR}"
- )
- set(SHARED_SOURCES "${SERF_MAP_FILE}")
-endif(SERF_ELF_TARGET)
+endif()
# Process build options for dependency search
if(SERF_WINDOWS)
@@ -408,19 +389,21 @@ if(NOT SKIP_SHARED)
set_target_properties(serf_shared PROPERTIES
VERSION ${SERF_VERSION}
SOVERSION ${SERF_SOVERSION})
+ if(DEFINED SERF_EXPORT_SYMBOLS)
+ add_dependencies(serf_shared serf_export_symbols)
+ if(SERF_DARWIN)
+ set_target_properties(serf_shared PROPERTIES
+ LINK_FLAGS "-Wl,-exported_symbols_list,${SERF_EXPORT_SYMBOLS}")
+ elseif(SERF_ELF_TARGET)
+ set_target_properties(serf_shared PROPERTIES
+ LINK_FLAGS "-Wl,--version-script,${SERF_EXPORT_SYMBOLS}")
+ endif()
+ endif()
if(SERF_DARWIN AND NOT RELATIVE_RPATH)
set_target_properties(serf_shared PROPERTIES
INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/${SERF_INSTALL_LIBRARIES}")
endif()
- if(SERF_DARWIN)
- set_target_properties(serf_shared PROPERTIES
- LINK_FLAGS "-Wl,-exported_symbols_list,${SERF_EXP_FILE}")
- endif()
- if(SERF_ELF_TARGET)
- set_target_properties(serf_shared PROPERTIES
- LINK_FLAGS "-Wl,--version-script,${SERF_MAP_FILE}")
- endif()
- set(SERF_TARGETS "serf_shared")
+ list(APPEND SERF_TARGETS serf_shared)
if(SERF_WINDOWS)
string(TOLOWER "${CMAKE_BUILD_TYPE}" config)
@@ -439,7 +422,7 @@ if(NOT SKIP_STATIC)
${SERF_PRIVATE_TARGETS}
${SERF_PUBLIC_TARGETS}
${SERF_STANDARD_LIBRARIES})
- list(APPEND SERF_TARGETS "serf_static")
+ list(APPEND SERF_TARGETS serf_static)
endif()
set_target_properties(${SERF_TARGETS}
Modified: serf/trunk/build/SerfElfGenMap.cmake
URL:
http://svn.apache.org/viewvc/serf/trunk/build/SerfElfGenMap.cmake?rev=1926158&r1=1926157&r2=1926158&view=diff
==============================================================================
--- serf/trunk/build/SerfElfGenMap.cmake (original)
+++ serf/trunk/build/SerfElfGenMap.cmake Thu Jun 5 18:31:10 2025
@@ -25,13 +25,13 @@ separate_arguments(SERF_EXPORT_BLACKLIST
separate_arguments(SERF_EXPORT_HEADERS)
SerfFindExports("${SERF_EXPORT_BLACKLIST}" exports_ ${SERF_EXPORT_HEADERS})
-file(WRITE "${SERF_MAP_FILE}"
+file(WRITE "${SERF_EXPORT_SYMBOLS}"
"{\n"
" global:\n")
foreach(symbol_ ${exports_})
- file(APPEND "${SERF_MAP_FILE}" " ${symbol_};\n")
+ file(APPEND "${SERF_EXPORT_SYMBOLS}" " ${symbol_};\n")
endforeach()
-file(APPEND "${SERF_MAP_FILE}"
+file(APPEND "${SERF_EXPORT_SYMBOLS}"
" local:\n"
" *;\n"
"};\n")
Modified: serf/trunk/build/SerfMachGenExp.cmake
URL:
http://svn.apache.org/viewvc/serf/trunk/build/SerfMachGenExp.cmake?rev=1926158&r1=1926157&r2=1926158&view=diff
==============================================================================
--- serf/trunk/build/SerfMachGenExp.cmake (original)
+++ serf/trunk/build/SerfMachGenExp.cmake Thu Jun 5 18:31:10 2025
@@ -25,7 +25,7 @@ separate_arguments(SERF_EXPORT_BLACKLIST
separate_arguments(SERF_EXPORT_HEADERS)
SerfFindExports("${SERF_EXPORT_BLACKLIST}" exports_ ${SERF_EXPORT_HEADERS})
-file(WRITE "${SERF_EXP_FILE}" "# Exported symbols\n")
+file(WRITE "${SERF_EXPORT_SYMBOLS}" "# Exported symbols\n")
foreach(symbol_ ${exports_})
- file(APPEND "${SERF_EXP_FILE}" "_${symbol_}\n")
+ file(APPEND "${SERF_EXPORT_SYMBOLS}" "_${symbol_}\n")
endforeach()
Modified: serf/trunk/build/SerfWindowsGenDef.cmake
URL:
http://svn.apache.org/viewvc/serf/trunk/build/SerfWindowsGenDef.cmake?rev=1926158&r1=1926157&r2=1926158&view=diff
==============================================================================
--- serf/trunk/build/SerfWindowsGenDef.cmake (original)
+++ serf/trunk/build/SerfWindowsGenDef.cmake Thu Jun 5 18:31:10 2025
@@ -25,7 +25,7 @@ separate_arguments(SERF_EXPORT_BLACKLIST
separate_arguments(SERF_EXPORT_HEADERS)
SerfFindExports("${SERF_EXPORT_BLACKLIST}" exports_ ${SERF_EXPORT_HEADERS})
-file(WRITE "${SERF_DEF_FILE}" "EXPORTS\n")
+file(WRITE "${SERF_EXPORT_SYMBOLS}" "EXPORTS\n")
foreach(symbol_ ${exports_})
- file(APPEND "${SERF_DEF_FILE}" "${symbol_}\n")
+ file(APPEND "${SERF_EXPORT_SYMBOLS}" "${symbol_}\n")
endforeach()