Skip to content

Commit ba6c2ed

Browse files
committed
Respect BUILD_SHARED_LIBS for libappimage
1 parent f787f15 commit ba6c2ed

File tree

5 files changed

+70
-42
lines changed

5 files changed

+70
-42
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
2525

2626
include(cmake/reproducible_builds.cmake)
2727

28+
option(BUILD_SHARED_LIBS "Enable shared library build" On)
2829
option(LIBAPPIMAGE_DESKTOP_INTEGRATION_ENABLED "Enable desktop integration functions" On)
2930
option(LIBAPPIMAGE_THUMBNAILER_ENABLED "Enable thumbnailer functions" On)
3031
option(LIBAPPIMAGE_STANDALONE "Statically embbed dependencies" Off)

cmake/dependencies.cmake

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,6 @@ if(BUILD_TESTING)
3939
endif()
4040

4141
if (NOT LIBAPPIMAGE_SHARED_ONLY)
42-
import_pkgconfig_target(TARGET_NAME liblzma PKGCONFIG_TARGET liblzma)
43-
44-
import_pkgconfig_target(TARGET_NAME libzstd PKGCONFIG_TARGET libzstd)
45-
46-
4742
# as distros don't provide suitable squashfuse and squashfs-tools, those dependencies are bundled in, can, and should
4843
# be used from this repository for AppImageKit
4944
# for distro packaging, it can be linked to an existing package just fine
@@ -52,6 +47,9 @@ if (NOT LIBAPPIMAGE_SHARED_ONLY)
5247
if(NOT USE_SYSTEM_SQUASHFUSE)
5348
message(STATUS "Downloading and building squashfuse")
5449

50+
import_pkgconfig_target(TARGET_NAME liblzma PKGCONFIG_TARGET liblzma)
51+
import_pkgconfig_target(TARGET_NAME libzstd PKGCONFIG_TARGET libzstd)
52+
5553
# Check if fuse is installed to provide early error reports
5654
import_pkgconfig_target(TARGET_NAME libfuse PKGCONFIG_TARGET fuse)
5755

cmake/imported_dependencies.cmake.in

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
include(${CMAKE_CURRENT_LIST_DIR}/scripts.cmake)
2+
include(CMakeFindDependencyMacro)
23

34
# the names of the targets need to differ from the library filenames
45
# this is especially an issue with libcairo, where the library is called libcairo
@@ -10,4 +11,18 @@ if(NOT @LIBAPPIMAGE_SHARED_ONLY@)
1011
import_pkgconfig_target(TARGET_NAME libzlib PKGCONFIG_TARGET zlib)
1112
import_pkgconfig_target(TARGET_NAME libcairo PKGCONFIG_TARGET cairo)
1213
import_pkgconfig_target(TARGET_NAME librsvg PKGCONFIG_TARGET librsvg-2.0)
14+
15+
if(NOT @BUILD_SHARED_LIBS@)
16+
if (@USE_SYSTEM_SQUASHFUSE@)
17+
import_pkgconfig_target(TARGET_NAME liblzma PKGCONFIG_TARGET liblzma)
18+
import_pkgconfig_target(TARGET_NAME libzstd PKGCONFIG_TARGET libzstd)
19+
import_pkgconfig_target(TARGET_NAME libfuse PKGCONFIG_TARGET fuse)
20+
import_pkgconfig_target(TARGET_NAME libsquashfuse PKGCONFIG_TARGET squashfuse)
21+
endif()
22+
import_find_pkg_target(libarchive LibArchive LibArchive)
23+
find_dependency(Boost 1.53.0)
24+
if (@USE_SYSTEM_XDGUTILS@)
25+
find_dependency(XdgUtils COMPONENTS DesktopEntry BaseDir)
26+
endif()
27+
endif()
1328
endif()

cmake/scripts.cmake

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,15 @@ function(import_pkgconfig_target)
9999

100100
find_package(PkgConfig REQUIRED)
101101

102-
set(type "shared")
102+
# decide type based on BUILD_SHARED_LIBS unless overridden by STATIC
103103
if(IMPORT_PKGCONFIG_TARGET_STATIC)
104104
set(type "static")
105+
else()
106+
if(BUILD_SHARED_LIBS)
107+
set(type "shared")
108+
else()
109+
set(type "static")
110+
endif()
105111
endif()
106112

107113
message(STATUS "Importing target ${IMPORT_PKGCONFIG_TARGET_TARGET_NAME} via pkg-config (${IMPORT_PKGCONFIG_TARGET_PKGCONFIG_TARGET}, ${type})")
@@ -116,7 +122,7 @@ function(import_pkgconfig_target)
116122
return()
117123
endif()
118124

119-
if(IMPORT_PKGCONFIG_TARGET_STATIC)
125+
if(type STREQUAL "static")
120126
set(prefix ${IMPORT_PKGCONFIG_TARGET_TARGET_NAME}-IMPORTED_STATIC)
121127
else()
122128
set(prefix ${IMPORT_PKGCONFIG_TARGET_TARGET_NAME}-IMPORTED)

src/libappimage/CMakeLists.txt

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -14,49 +14,57 @@ if(LIBAPPIMAGE_DESKTOP_INTEGRATION_ENABLED)
1414
add_subdirectory(desktop_integration)
1515
list(APPEND libappimage_sources "$<TARGET_OBJECTS:appimage_desktop_integration>")
1616
endif()
17+
if(BUILD_SHARED_LIBS)
18+
add_library(libappimage SHARED ${libappimage_sources} libappimage_legacy.cpp)
1719

18-
add_library(libappimage_static STATIC ${libappimage_sources})
19-
add_library(libappimage SHARED ${libappimage_sources} libappimage_legacy.cpp)
20+
# For shared libraries, link privately to xdg-basedir
21+
target_link_libraries(libappimage PRIVATE xdg-basedir)
22+
else()
23+
add_library(libappimage STATIC ${libappimage_sources})
24+
# For static libraries, include xdg-basedir object files directly to avoid export issues
25+
target_sources(libappimage PRIVATE $<TARGET_OBJECTS:xdg-basedir>)
26+
get_target_property(XDG_BASEDIR_INCLUDES xdg-basedir INTERFACE_INCLUDE_DIRECTORIES)
27+
if(XDG_BASEDIR_INCLUDES)
28+
target_include_directories(libappimage PRIVATE ${XDG_BASEDIR_INCLUDES})
29+
endif()
30+
endif()
2031

2132
configure_file(config.h.in ${PROJECT_BINARY_DIR}/generated-headers/appimage/config.h)
2233

23-
foreach(target libappimage libappimage_static)
24-
configure_libappimage_module(${target})
25-
target_link_libraries(
26-
${target}
27-
PRIVATE libarchive
28-
PRIVATE xdg-basedir
29-
PRIVATE XdgUtils::DesktopEntry
30-
PRIVATE XdgUtils::BaseDir
31-
PRIVATE libappimage_hashlib
32-
# not linking publicly to squashfuse as headers are not needed when using libappimage
33-
# unit tests etc., which use squashfuse directly, must link to it explicitly
34-
PRIVATE libsquashfuse
35-
PRIVATE Boost::boost
36-
PUBLIC libappimage_shared
37-
PUBLIC pthread
38-
PRIVATE libgio
39-
PUBLIC libcairo
40-
PUBLIC librsvg
41-
PUBLIC dl
42-
)
43-
message(STATUS "IMAGE_MANIPULATION_BACKEND_LIBS ${IMAGE_MANIPULATION_BACKEND_LIBS}")
44-
if(LIBAPPIMAGE_STANDALONE)
45-
target_link_libraries(${target} PRIVATE -static-libgcc -static-libstdc++)
46-
endif()
34+
configure_libappimage_module(libappimage)
4735

48-
target_include_directories(
49-
${target}
50-
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
51-
PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/generated-headers>
52-
)
36+
target_link_libraries(
37+
libappimage
38+
PRIVATE libarchive
39+
PRIVATE XdgUtils::DesktopEntry
40+
PRIVATE XdgUtils::BaseDir
41+
PRIVATE libappimage_hashlib
42+
# not linking publicly to squashfuse as headers are not needed when using libappimage
43+
# unit tests etc., which use squashfuse directly, must link to it explicitly
44+
PRIVATE libsquashfuse
45+
PRIVATE Boost::boost
46+
PUBLIC libappimage_shared
47+
PUBLIC pthread
48+
PRIVATE libgio
49+
PUBLIC libcairo
50+
PUBLIC librsvg
51+
PUBLIC dl
52+
)
53+
message(STATUS "IMAGE_MANIPULATION_BACKEND_LIBS ${IMAGE_MANIPULATION_BACKEND_LIBS}")
54+
if(LIBAPPIMAGE_STANDALONE)
55+
target_link_libraries(libappimage PRIVATE -static-libgcc -static-libstdc++)
56+
endif()
5357

54-
set_property(TARGET libappimage PROPERTY PUBLIC_HEADER ${libappimage_public_header})
58+
target_include_directories(
59+
libappimage
60+
PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
61+
PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/generated-headers>
62+
)
5563

56-
set_property(TARGET libappimage PROPERTY VERSION ${libappimage_VERSION})
57-
set_property(TARGET libappimage PROPERTY SOVERSION ${libappimage_SOVERSION})
58-
endforeach()
64+
set_property(TARGET libappimage PROPERTY PUBLIC_HEADER ${libappimage_public_header})
5965

66+
set_property(TARGET libappimage PROPERTY VERSION ${libappimage_VERSION})
67+
set_property(TARGET libappimage PROPERTY SOVERSION ${libappimage_SOVERSION})
6068

6169
# install libappimage
6270
install(

0 commit comments

Comments
 (0)