You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ri...@apache.org on 2024/07/17 18:52:48 UTC

svn commit: r1919320 - in /subversion/branches/cmake: CMakeLists.txt build/generator/gen_cmake.py build/generator/templates/targets.cmake.ezt

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]



Re: svn commit: r1919320 - in /subversion/branches/cmake: CMakeLists.txt build/generator/gen_cmake.py build/generator/templates/targets.cmake.ezt

Posted by Daniel Sahlberg <da...@gmail.com>.
Den tors 18 juli 2024 kl 18:12 skrev Timofei Zhakov <ti...@chemodax.net>:

> Hi,
>
> I just double checked and it worked correctly. The problem might be
> because the targets.cmake file didn't regenerate. Did you run
> `./gen-make.py -t cmake`?
>
> Thanks.
>

Doh. I'm stupid. Ignore me!

Kind regards,
Daniel

Re: svn commit: r1919320 - in /subversion/branches/cmake: CMakeLists.txt build/generator/gen_cmake.py build/generator/templates/targets.cmake.ezt

Posted by Timofei Zhakov <ti...@chemodax.net>.
On Thu, Jul 18, 2024 at 6:06 PM Daniel Sahlberg
<da...@gmail.com> wrote:
>
> Den ons 17 juli 2024 kl 20:52 skrev <ri...@apache.org>:
> [...]
>>
>> +# 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")
>
>
> This doesn't seem to work. I still get (for example) liblibsvn_subr-1.so. Do we have to make it conditional on platform?
>
> Kind regards,
> Daniel

Hi,

I just double checked and it worked correctly. The problem might be
because the targets.cmake file didn't regenerate. Did you run
`./gen-make.py -t cmake`?

Thanks.


--
Timofei Zhakov

Re: svn commit: r1919320 - in /subversion/branches/cmake: CMakeLists.txt build/generator/gen_cmake.py build/generator/templates/targets.cmake.ezt

Posted by Daniel Sahlberg <da...@gmail.com>.
Den ons 17 juli 2024 kl 20:52 skrev <ri...@apache.org>:
[...]

> +# 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")
>

This doesn't seem to work. I still get (for example) liblibsvn_subr-1.so.
Do we have to make it conditional on platform?

Kind regards,
Daniel

Re: svn commit: r1919320 - in /subversion/branches/cmake: CMakeLists.txt build/generator/gen_cmake.py build/generator/templates/targets.cmake.ezt

Posted by Daniel Sahlberg <da...@gmail.com>.
Den ons 17 juli 2024 kl 20:52 skrev <ri...@apache.org>:
[...]

> +# 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")
>

This doesn't seem to work. I still get (for example) liblibsvn_subr-1.so.
Do we have to make it conditional on platform?

Kind regards,
Daniel