Author: rinrab
Date: Wed Sep 11 12:18:44 2024
New Revision: 1920560

URL: http://svn.apache.org/viewvc?rev=1920560&view=rev
Log:
On the 'cmake' branch: swig: Generate external runtimes and wrap headers
for swig.

The generation will be done by creating CMake targets, which will invoke
the Python script.

* CMakeLists.txt
  (swigincludes): Update proxy path to one with the generated headers.
  (external-swig): Enumerate all headers, add a custom command for each
   header, and create a target that depends on all that commands.
  (swig_target_external_runtime): New function, that will create custom
   command for generating external runtime and add sources to the targets.
  (swig.python, swig.perl): Invoke swig_target_external_runtime for these
   targets to generate external runtimes.

Modified:
    subversion/branches/cmake/CMakeLists.txt

Modified: subversion/branches/cmake/CMakeLists.txt
URL: 
http://svn.apache.org/viewvc/subversion/branches/cmake/CMakeLists.txt?rev=1920560&r1=1920559&r2=1920560&view=diff
==============================================================================
--- subversion/branches/cmake/CMakeLists.txt (original)
+++ subversion/branches/cmake/CMakeLists.txt Wed Sep 11 12:18:44 2024
@@ -285,15 +285,63 @@ if(SVN_ENABLE_SWIG_PERL OR SVN_ENABLE_SW
 
   set(SWIG_INCLUDE_DIRECTORIES
     ${CMAKE_CURRENT_SOURCE_DIR}/subversion/bindings/swig/include
-    ${CMAKE_CURRENT_SOURCE_DIR}/subversion/bindings/swig/proxy
     ${CMAKE_CURRENT_SOURCE_DIR}/subversion/bindings/swig
     ${CMAKE_CURRENT_SOURCE_DIR}/subversion/include
+
+    ${CMAKE_CURRENT_BINARY_DIR}/subversion/bindings/swig/proxy
     ${CMAKE_CURRENT_BINARY_DIR}
   )
 
   add_library(external-swig INTERFACE)
+
+  file(GLOB swig_headers_input 
"${CMAKE_CURRENT_SOURCE_DIR}/subversion/include/*.h")
+  set(swig_headers_output)
+  foreach(swig_header ${swig_headers_input})
+    get_filename_component(filename ${swig_header} NAME_WLE)
+    set(output 
"${CMAKE_CURRENT_BINARY_DIR}/subversion/bindings/swig/proxy/${filename}_h.swg")
+    list(APPEND swig_headers_output ${output})
+
+    add_custom_command(
+      DEPENDS
+        "${swig_header}"
+      OUTPUT
+        "${output}"
+      WORKING_DIRECTORY
+        "${CMAKE_CURRENT_BINARY_DIR}"
+      COMMAND
+        "${CMAKE_COMMAND}" -E make_directory 
"${CMAKE_CURRENT_BINARY_DIR}/subversion/bindings/swig/proxy"
+      COMMAND
+        "${Python3_EXECUTABLE}"
+        "${CMAKE_CURRENT_SOURCE_DIR}/build/generator/swig/header_wrappers.py"
+        "${CMAKE_CURRENT_SOURCE_DIR}/build.conf"
+        "${SWIG_EXECUTABLE}"
+        "${swig_header}"
+      COMMAND_EXPAND_LISTS
+    )
+  endforeach()
+
+  add_custom_target(swig_headers DEPENDS ${swig_headers_output})
+  add_dependencies(external-swig swig_headers)
 endif()
 
+function(swig_target_external_runtime target lang)
+  set(swig_runtime_path 
"${CMAKE_CURRENT_BINARY_DIR}/subversion/bindings/swig/proxy/swig_${lang}_external_runtime.swg")
+  add_custom_command(
+    OUTPUT ${swig_runtime_path}
+    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+    COMMAND
+      ${CMAKE_COMMAND} -E make_directory "subversion/bindings/swig/proxy"
+    COMMAND
+      "${Python3_EXECUTABLE}"
+      "${CMAKE_CURRENT_SOURCE_DIR}/build/generator/swig/external_runtime.py"
+      "${CMAKE_CURRENT_SOURCE_DIR}/build.conf"
+      "${SWIG_EXECUTABLE}"
+      "${lang}"
+    COMMAND_EXPAND_LISTS
+  )
+  target_sources(${target} INTERFACE ${swig_runtime_path})
+endfunction()
+
 if(SVN_ENABLE_SWIG_PYTHON)
   find_package(PY3C REQUIRED)
 
@@ -306,6 +354,8 @@ if(SVN_ENABLE_SWIG_PYTHON)
     ${SWIG_INCLUDE_DIRECTORIES}
     ${CMAKE_CURRENT_SOURCE_DIR}/subversion/bindings/swig/python/libsvn_swig_py
   )
+
+  swig_target_external_runtime(external-python python)
 endif()
 
 if(SVN_ENABLE_SWIG_PERL)
@@ -323,6 +373,8 @@ if(SVN_ENABLE_SWIG_PERL)
   target_compile_definitions(external-perl INTERFACE "__inline__=__inline")
   target_compile_options(external-perl INTERFACE ${PERL_EXTRA_C_FLAGS})
   target_link_libraries(external-perl INTERFACE ${PERL_LIBRARY})
+
+  swig_target_external_runtime(external-perl perl)
 endif()
 
 function(target_exports target_name)


Reply via email to