Skip to content

Commit 6b49091

Browse files
committed
Respect BUILD_SHARED_LIBS for libappimage
1 parent f787f15 commit 6b49091

File tree

2 files changed

+44
-35
lines changed

2 files changed

+44
-35
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)

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)