Author: rinrab
Date: Mon Jun 9 13:41:13 2025
New Revision: 1926286
URL: http://svn.apache.org/viewvc?rev=1926286&view=rev
Log:
cmake: Generate def files in build time using an external script
extractor.cmake script (similarly to extractor.py).
* build/cmake/extractor.cmake: New file, with symbol scrapper code.
* CMakeLists.txt
(def generator): Generate def files using custom commands and
the extractor.cmake script.
Added:
subversion/trunk/build/cmake/extractor.cmake
Modified:
subversion/trunk/CMakeLists.txt
Modified: subversion/trunk/CMakeLists.txt
URL:
http://svn.apache.org/viewvc/subversion/trunk/CMakeLists.txt?rev=1926286&r1=1926285&r2=1926286&view=diff
==============================================================================
--- subversion/trunk/CMakeLists.txt (original)
+++ subversion/trunk/CMakeLists.txt Mon Jun 9 13:41:13 2025
@@ -516,52 +516,22 @@ function(target_exports target_name)
)
set(def_file_path ${CMAKE_BINARY_DIR}/${target_name}.def)
+ set(headers)
- # see build/generator/extractor.py
- set(func_regex "(^|\n)((([A-Za-z0-9_]+|[*])
)+[*]?)?((svn|apr)_[A-Za-z0-9_]+)[ \t\r\n]*\\(")
-
- set(defs)
foreach(file ${ARGN})
- file(READ ${file} contents)
- string(REGEX MATCHALL "${func_regex}" funcs ${contents})
-
- foreach(func_string ${funcs})
- string(REGEX MATCH "[A-Za-z0-9_]+[ \t\r\n]*\\($" func_name
${func_string})
- string(REGEX REPLACE "[ \t\r\n]*\\($" "" func_name ${func_name})
- list(APPEND defs "${func_name}")
- endforeach()
-
- get_filename_component(filename ${file} NAME)
- if(${filename} STREQUAL "svn_ctype.h")
- # See libsvn_subr/ctype.c for an explanation why we use CONSTANT and
not
- # DATA, even though it causes an LNK4087 warning!
- list(APPEND defs "svn_ctype_table = svn_ctype_table_internal CONSTANT")
- elseif(${filename} STREQUAL "svn_wc_private.h")
- # svn_wc__internal_walk_children() is now internal to libsvn_wc
- # but entries-dump.c still calls it
- list(APPEND defs "svn_wc__internal_walk_children")
- endif()
+ list(APPEND headers "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
endforeach()
- list(SORT defs)
- list(REMOVE_DUPLICATES defs)
-
- set(def_file_content "EXPORTS\n")
- foreach(def ${defs})
- list(FIND filter_names "${def}" skip)
- if(skip LESS 0)
- string(APPEND def_file_content "${def}\n")
- endif()
- endforeach()
-
- if(EXISTS "${def_file_path}")
- file(READ "${def_file_path}" old_file_content)
- else()
- set(old_file_content "NOT_EXISTS")
- endif()
- if(NOT ${old_file_content} STREQUAL ${def_file_content})
- file(WRITE "${def_file_path}" ${def_file_content})
- endif()
+ add_custom_command(
+ OUTPUT "${def_file_path}"
+ DEPENDS ${headers}
+ COMMAND ${CMAKE_COMMAND}
+ "-DEXPORT_HEADER_FILE_PATHS=${headers}"
+ "-DEXPORT_DEF_FILE_PATH=${def_file_path}"
+ "-DEXPORT_BLACKLIST=${filter_names}"
+ -P "${CMAKE_CURRENT_SOURCE_DIR}/build/cmake/extractor.cmake"
+ WORKING_DIRECTORY "${SERF_SOURCE_DIR}"
+ )
target_sources("${target_name}" PRIVATE "${def_file_path}")
endif()
Added: subversion/trunk/build/cmake/extractor.cmake
URL:
http://svn.apache.org/viewvc/subversion/trunk/build/cmake/extractor.cmake?rev=1926286&view=auto
==============================================================================
--- subversion/trunk/build/cmake/extractor.cmake (added)
+++ subversion/trunk/build/cmake/extractor.cmake Mon Jun 9 13:41:13 2025
@@ -0,0 +1,74 @@
+#
+# 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.
+#
+# extractor.cmake -- Extracts function names from header files and writes
+# them to a .def file.
+#
+# cmake -DEXPORT_HEADER_FILE_PATHS=<...path_to_header_files>
+# -DEXPORT_DEF_FILE_PATH=<path_to_def_file>
+# [-DEXPORT_BLACKLIST=<...symbols_to_ignore>]
+# -P extractor.cmake
+
+separate_arguments(EXPORT_HEADER_FILE_PATHS)
+separate_arguments(EXPORT_BLACKLIST)
+
+# see build/generator/extractor.py
+set(func_regex "(^|\n)((([A-Za-z0-9_]+|[*]) )+[*]?)?((svn|apr)_[A-Za-z0-9_]+)[
\t\r\n]*\\(")
+
+set(defs)
+foreach(file ${EXPORT_HEADER_FILE_PATHS})
+ file(READ ${file} contents)
+ string(REGEX MATCHALL "${func_regex}" funcs ${contents})
+
+ foreach(func_string ${funcs})
+ string(REGEX MATCH "[A-Za-z0-9_]+[ \t\r\n]*\\($" func_name ${func_string})
+ string(REGEX REPLACE "[ \t\r\n]*\\($" "" func_name ${func_name})
+ list(APPEND defs "${func_name}")
+ endforeach()
+
+ get_filename_component(filename ${file} NAME)
+ if(${filename} STREQUAL "svn_ctype.h")
+ # See libsvn_subr/ctype.c for an explanation why we use CONSTANT and not
+ # DATA, even though it causes an LNK4087 warning!
+ list(APPEND defs "svn_ctype_table = svn_ctype_table_internal CONSTANT")
+ elseif(${filename} STREQUAL "svn_wc_private.h")
+ # svn_wc__internal_walk_children() is now internal to libsvn_wc
+ # but entries-dump.c still calls it
+ list(APPEND defs "svn_wc__internal_walk_children")
+ endif()
+endforeach()
+
+list(SORT defs)
+list(REMOVE_DUPLICATES defs)
+
+set(def_file_content "EXPORTS\n")
+foreach(def ${defs})
+ list(FIND EXPORT_BLACKLIST "${def}" skip)
+ if(skip LESS 0)
+ string(APPEND def_file_content "${def}\n")
+ endif()
+endforeach()
+
+if(EXISTS "${EXPORT_DEF_FILE_PATH}")
+ file(READ "${EXPORT_DEF_FILE_PATH}" old_file_content)
+else()
+ set(old_file_content "NOT_EXISTS")
+endif()
+if(NOT ${old_file_content} STREQUAL ${def_file_content})
+ file(WRITE "${EXPORT_DEF_FILE_PATH}" ${def_file_content})
+endif()