build: link vercmp with a static copy of libalpm

This has historically been the case in autotools since we want vercmp to
not break mid-transaction in an install script.

For convenience, we create libalpm.a and use this to optionally generate
libalpm.so (when not configured with -Dbuildstatic=true) as well as to
link any binary which explicitly wishes to be built statically "with
libalpm", but does not care where a function is defined. meson then
treats this correctly: it builds the object file only once for both
libraries, and the compiler strips out unused functionality from the
final static binary.

Currently the only binary which requires this is vercmp.

Fixes FS#61719

Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Eli Schwartz 2019-02-11 11:19:26 -05:00 committed by Allan McRae
parent 86004227d1
commit 477a66cd0e

View file

@ -355,15 +355,24 @@ libcommon = static_library(
include_directories : includes,
install : false)
libalpm = library(
libalpm_a = static_library(
'alpm',
libalpm_sources,
version : libalpm_version,
include_directories : includes,
dependencies : [crypto_provider, libarchive, libcurl] + gpgme_libs,
link_with : [libcommon],
install : true)
if not get_option('buildstatic')
libalpm = shared_library(
'alpm',
version : libalpm_version,
link_whole: [libalpm_a],
install : true)
else
libalpm = libalpm_a
endif
install_headers(
'lib/libalpm/alpm.h',
'lib/libalpm/alpm_list.h')
@ -414,7 +423,7 @@ executable(
'vercmp',
vercmp_sources,
include_directories : includes,
link_with : [libalpm],
link_with : [libalpm_a],
install : true,
)