Author: rinrab
Date: Wed Jul 17 18:52:47 2024
New Revision: 1919320

URL: http://svn.apache.org/viewvc?rev=1919320&view=rev
Log:
On the 'cmake' branch: Build static libraries without 'lib' prefix and fix
bug with double 'lib' in name on Linux as implicit change.

Changes brief
-------------

- Skip 'lib' from the start of output name.

- Setup CMAKE_*_LIBRARY_PREFIX variables to add 'lib' to the start of shared
  library and implib names and to keep static libraries with the original
  name. 

How does it work?
-----------------

Firstly, when the output name is renamed to not contain 'lib' at the start, it
will build into just svn_client-1.lib, but since we set
CMAKE_SHARED_LIBRARY_PREFIX and CMAKE_IMPORT_LIBRARY_PREFIX to 'lib', it will
be prepended to the final output name automatically by CMake in shared
configuration, so it will be as it was before ('libsvn_client-1.lib'). Also
after this commit, the name will be left unchanged in static configuration
because CMAKE_STATIC_LIBRARY_PREFIX is set to empty. This repeats the behavior
of gen-win.

The another thing it fixes implicitly is the library names on Linux. On Linux
the CMAKE_SHARED_LIBRARY_PREFIX and CMAKE_IMPORT_LIBRARY_PREFIX variables are
automatically set to be 'lib', so before the OUTPUT_NAME has changed, the
libraries was compiling into files with double 'lib' in the name
(liblibsvn_client-1.so), which is incorrect. After this commit, their
behavior should be same as on Windows.

Also do a little refactoring of the abstraction of setting the name: the
output name is now passed from the generator (gen-cmake.py) to the template
using a field. This field contains a name without 'lib' prefix and also
'-1' postfix for major version. The template now only adds the content of
targets.output_name OUTPUT_NAME without any conversions.

Changes summary
---------------

* build/generator/gen_cmake.py
  (get_output_name): New function.
  (Generator.write): Add output_name field to the target.

* build/generator/templates/targets.cmake.ezt
  (output name): Simply pass output_name here instead of target name with
   '-1' added to the end.

* CMakeLists.txt
  (CMAKE_*_LIBRARY_PREFIX): Setup these vars and add some comments explaining
   them.

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

Modified: subversion/branches/cmake/CMakeLists.txt
URL: 
http://svn.apache.org/viewvc/subversion/branches/cmake/CMakeLists.txt?rev=1919320&r1=1919319&r2=1919320&view=diff
==============================================================================
--- subversion/branches/cmake/CMakeLists.txt (original)
+++ subversion/branches/cmake/CMakeLists.txt Wed Jul 17 18:52:47 2024
@@ -360,6 +360,15 @@ endif()
 #     -- "Link libraries to all targets added later."
 link_libraries(external-intl)
 
+# Build shared libraries and theirs implibs with 'lib' prefix, for example
+# libsvn_subr-1.[lib|a] and libsvn_subr-1.[dll|so]
+set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
+set(CMAKE_IMPORT_LIBRARY_PREFIX "lib")
+
+# This tells CMake to build static libraries without any prefix
+# (just svn_subr-1.[lib|a])
+set(CMAKE_STATIC_LIBRARY_PREFIX "")
+
 include("build/cmake/targets.cmake")
 
 if (SVN_BUILD_SVNXX)

Modified: subversion/branches/cmake/build/generator/gen_cmake.py
URL: 
http://svn.apache.org/viewvc/subversion/branches/cmake/build/generator/gen_cmake.py?rev=1919320&r1=1919319&r2=1919320&view=diff
==============================================================================
--- subversion/branches/cmake/build/generator/gen_cmake.py (original)
+++ subversion/branches/cmake/build/generator/gen_cmake.py Wed Jul 17 18:52:47 
2024
@@ -55,6 +55,12 @@ def get_module_name(name):
 
   return name[7:].upper()
 
+def get_output_name(name):
+  if name.startswith("lib"):
+    return name[3:] + "-1"
+  else:
+    return name
+
 class Generator(gen_base.GeneratorBase):
   _extension_map = {
     ('exe', 'target'): '.exe',
@@ -171,6 +177,7 @@ class Generator(gen_base.GeneratorBase):
 
         new_target = _eztdata(
           name = target.name,
+          output_name = get_output_name(target.name),
           type = target_type,
           sources = sources,
           libs = libs,

Modified: subversion/branches/cmake/build/generator/templates/targets.cmake.ezt
URL: 
http://svn.apache.org/viewvc/subversion/branches/cmake/build/generator/templates/targets.cmake.ezt?rev=1919320&r1=1919319&r2=1919320&view=diff
==============================================================================
--- subversion/branches/cmake/build/generator/templates/targets.cmake.ezt 
(original)
+++ subversion/branches/cmake/build/generator/templates/targets.cmake.ezt Wed 
Jul 17 18:52:47 2024
@@ -28,7 +28,7 @@ if ([targets.enable_condition])[is targe
   target_exports([targets.name][for targets.msvc_export]
     [targets.msvc_export][end]
   )[end]
-  set_target_properties([targets.name] PROPERTIES OUTPUT_NAME 
"[targets.name]-1")
+  set_target_properties([targets.name] PROPERTIES OUTPUT_NAME 
"[targets.output_name]")
   target_include_directories([targets.name] PUBLIC
     "${CMAKE_CURRENT_SOURCE_DIR}/subversion/include"
   )[if-any targets.group]


Reply via email to