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