Author: rinrab
Date: Fri Jun 13 12:44:06 2025
New Revision: 1926386

URL: http://svn.apache.org/viewvc?rev=1926386&view=rev
Log:
Make APR and APR Util dependencies to be linked as PUBLIC, since our headers
require them.

* build/generator/gen_cmake.py
  (PUBLIC_LIB_DEPENDS): Define a white-list of libraries to consider as PUBLIC.
  (Generator::write): Prepare private_libs and public_libs separately.
* build/generator/templates/targets.cmake.ezt
  (libs): Link private_libs and public_libs separately.
* CMakeLists.txt: revert part of r1926360, where APR include dir is added to
  global include directories.

Patch by: brane
Reviewed by: dsahlberg, rinrab

Modified:
    subversion/trunk/CMakeLists.txt
    subversion/trunk/build/generator/gen_cmake.py
    subversion/trunk/build/generator/templates/targets.cmake.ezt

Modified: subversion/trunk/CMakeLists.txt
URL: 
http://svn.apache.org/viewvc/subversion/trunk/CMakeLists.txt?rev=1926386&r1=1926385&r2=1926386&view=diff
==============================================================================
--- subversion/trunk/CMakeLists.txt (original)
+++ subversion/trunk/CMakeLists.txt Fri Jun 13 12:44:06 2025
@@ -289,12 +289,6 @@ else()
   endif()
 endif()
 
-# APR and APR-Util include directories must be available to all our sources,
-# not just those that happen to link with one or the other of these libraries.
-get_target_property(_apr_include external-apr INTERFACE_INCLUDE_DIRECTORIES)
-get_target_property(_apu_include external-aprutil 
INTERFACE_INCLUDE_DIRECTORIES)
-include_directories(${_apr_include} ${_apu_include})
-
 ### ZLIB
 
 if(SVN_USE_PKG_CONFIG)

Modified: subversion/trunk/build/generator/gen_cmake.py
URL: 
http://svn.apache.org/viewvc/subversion/trunk/build/generator/gen_cmake.py?rev=1926386&r1=1926385&r2=1926386&view=diff
==============================================================================
--- subversion/trunk/build/generator/gen_cmake.py (original)
+++ subversion/trunk/build/generator/gen_cmake.py Fri Jun 13 12:44:06 2025
@@ -53,6 +53,10 @@ def get_module_name(name):
 
   return name[7:].upper()
 
+# APR and APR-Util are part of our public interface and should be
+# declared PUBLIC in library target dependencies.
+PUBLIC_LIB_DEPENDS = frozenset(["external-apr", "external-aprutil"])
+
 def get_output_name(target):
   if target.name.startswith("lib"):
     return target.name[3:] + "-1"
@@ -146,7 +150,8 @@ class Generator(gen_base.GeneratorBase):
           msvc_export.append("subversion/include/" + export)
 
       sources = []
-      libs = []
+      private_libs = []
+      public_libs = []
 
       for dep in self.get_dependencies(target.name):
         enable_condition += get_target_conditions(dep)
@@ -157,9 +162,9 @@ class Generator(gen_base.GeneratorBase):
         elif isinstance(dep, gen_base.TargetLinked):
           if dep.external_lib:
             if dep.name == "ra-libs":
-              libs.append("ra-libs")
+              private_libs.append("ra-libs")
             elif dep.name == "fs-libs":
-              libs.append("fs-libs")
+              private_libs.append("fs-libs")
             elif dep.name in ["apriconv",
                               "apr_memcache",
                               "magic",
@@ -170,9 +175,14 @@ class Generator(gen_base.GeneratorBase):
               # TODO:
               pass
             else:
-              libs.append("external-" + dep.name)
+              dep_name = "external-" + dep.name
+              if (dep_name in PUBLIC_LIB_DEPENDS
+                  and not isinstance(target, gen_base.TargetExe)):
+                public_libs.append(dep_name)
+              else:
+                private_libs.append(dep_name)
           else:
-            libs.append(dep.name)
+            private_libs.append(dep.name)
         elif isinstance(dep, gen_base.ObjectFile):
           for source in self.graph.get_sources(gen_base.DT_OBJECT, dep,
                                                gen_base.SourceFile):
@@ -212,7 +222,9 @@ class Generator(gen_base.GeneratorBase):
           output_name = get_output_name(target),
           type = target_type,
           sources = sources,
-          libs = libs,
+          libs = public_libs + private_libs,
+          public_libs = public_libs,
+          private_libs = private_libs,
           msvc_libs = msvc_libs,
           msvc_objects = msvc_objects,
           msvc_export = msvc_export,

Modified: subversion/trunk/build/generator/templates/targets.cmake.ezt
URL: 
http://svn.apache.org/viewvc/subversion/trunk/build/generator/templates/targets.cmake.ezt?rev=1926386&r1=1926385&r2=1926386&view=diff
==============================================================================
--- subversion/trunk/build/generator/templates/targets.cmake.ezt (original)
+++ subversion/trunk/build/generator/templates/targets.cmake.ezt Fri Jun 13 
12:44:06 2025
@@ -69,9 +69,12 @@ if ([targets.enable_condition])[is targe
     WORKING_DIRECTORY $<TARGET_FILE_DIR:[targets.name]>
   )
   set_tests_properties([targets.namespace].[targets.name] PROPERTIES 
ENVIRONMENT LD_LIBRARY_PATH=$<TARGET_FILE_DIR:[targets.name]>)
-  [end]target_link_libraries([targets.name] PRIVATE[for targets.libs]
-    [targets.libs][end]
-  )[if-any targets.msvc_libs]
+  [end][if-any targets.public_libs]target_link_libraries([targets.name] 
PUBLIC[for targets.public_libs]
+    [targets.public_libs][end]
+  )
+  [end][if-any targets.private_libs]target_link_libraries([targets.name] 
PRIVATE[for targets.private_libs]
+    [targets.private_libs][end]
+  )[end][if-any targets.msvc_libs]
   if (WIN32)
     target_link_libraries([targets.name] PRIVATE[for targets.msvc_libs] 
[targets.msvc_libs][end])
   endif()[end][if-any targets.msvc_objects]


Reply via email to