Skip to content

Commit 31356bb

Browse files
committed
Specify link dependencies for static build
For static linking we need to specify the link dependencies via the pkg-config and FindLibSolv.cmake files as well, so statically linked application can refer to them.
1 parent 1602dc2 commit 31356bb

4 files changed

Lines changed: 58 additions & 6 deletions

File tree

CMakeLists.txt

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ ENDIF (NOT PKGCONFIG_INSTALL_DIR)
5757

5858
# where to look first for cmake modules, before ${CMAKE_ROOT}/Modules/ is checked
5959
SET (CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
60-
INSTALL( FILES ${CMAKE_MODULE_PATH}/FindLibSolv.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}/share/cmake/Modules )
6160

6261
# for shared libraries on windows (DLLs), we just export all symbols for now
6362
SET(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
@@ -434,6 +433,32 @@ ENDIF (ENABLE_RPMDB)
434433
IF (ENABLE_HAIKU)
435434
SET (SYSTEM_LIBRARIES ${HAIKU_SYSTEM_LIBRARIES} ${SYSTEM_LIBRARIES})
436435
ENDIF (ENABLE_HAIKU)
436+
437+
# For static libs we need to remember the link dependencies as well
438+
IF (ENABLE_STATIC)
439+
foreach( _lib_dep_path ${SYSTEM_LIBRARIES})
440+
get_filename_component( _lib_dep_dir ${_lib_dep_path} PATH )
441+
get_filename_component( _lib_dep ${_lib_dep_path} NAME_WE )
442+
443+
string( REGEX REPLACE "^lib" "" _lib_dep ${_lib_dep} )
444+
445+
set( _newDirEntry "-L${_lib_dep_dir}")
446+
set( _newFileEntry "-l${_lib_dep}" )
447+
448+
list (FIND SOLVEXT_LIB_DEPENDENCIES_LIST ${_newDirEntry} _index)
449+
if (${_index} LESS_EQUAL -1)
450+
list( APPEND SOLVEXT_LIB_DEPENDENCIES_LIST ${_newDirEntry} )
451+
endif()
452+
453+
list (FIND SOLVEXT_LIB_DEPENDENCIES_LIST ${_newFileEntry} _index)
454+
if (${_index} LESS_EQUAL -1)
455+
list( APPEND SOLVEXT_LIB_DEPENDENCIES_LIST ${_newFileEntry} )
456+
endif()
457+
458+
endforeach()
459+
list(JOIN SOLVEXT_LIB_DEPENDENCIES_LIST " " SOLVEXT_LIB_DEPENDENCIES )
460+
ENDIF()
461+
437462
IF (HAVE_LINKER_AS_NEEDED)
438463
SET (SYSTEM_LIBRARIES "-Wl,--as-needed" ${SYSTEM_LIBRARIES})
439464
ENDIF (HAVE_LINKER_AS_NEEDED)
@@ -449,6 +474,11 @@ ADD_SUBDIRECTORY (doc)
449474

450475
MESSAGE (STATUS "Version: ${VERSION}")
451476

477+
# FindLibsolv
478+
SET( LIBSOLV_EXT_DEPS "set(LIBSOLV_EXT_LIBRARY_DEPS ${SOLVEXT_LIB_DEPENDENCIES} )" )
479+
CONFIGURE_FILE (${CMAKE_MODULE_PATH}/FindLibSolv.cmake.in ${CMAKE_BINARY_DIR}/cmake/modules/FindLibSolv.cmake @ONLY)
480+
INSTALL( FILES ${CMAKE_BINARY_DIR}/cmake/modules/FindLibSolv.cmake DESTINATION ${CMAKE_INSTALL_PREFIX}/share/cmake/Modules )
481+
452482
####################################################################
453483
# RPM SPEC #
454484
####################################################################
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ MARK_AS_ADVANCED(
6666
LibSolv_INCLUDE_DIRS
6767
)
6868

69+
@LIBSOLV_EXT_DEPS@
70+
6971
# Look for components
7072
FOREACH(COMPONENT ${LibSolv_FIND_COMPONENTS})
7173
STRING(TOUPPER ${COMPONENT} _UPPERCOMPONENT)
@@ -75,13 +77,13 @@ FOREACH(COMPONENT ${LibSolv_FIND_COMPONENTS})
7577
SET(LibSolv_${COMPONENT}_FIND_QUIETLY ${LibSolv_FIND_QUIETLY})
7678
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibSolv_${COMPONENT} DEFAULT_MSG LIBSOLV_${_UPPERCOMPONENT}_LIBRARY)
7779
MARK_AS_ADVANCED(
78-
LIBSOLV_${_UPPERCOMPONENT}_FOUND
79-
LIBSOLV_${_UPPERCOMPONENT}_LIBRARY
80+
LIBSOLV_${_UPPERCOMPONENT}_FOUND
81+
LIBSOLV_${_UPPERCOMPONENT}_LIBRARY
8082
)
8183
IF(LIBSOLV_${_UPPERCOMPONENT}_FOUND)
82-
SET(LibSolv_LIBRARIES ${LibSolv_LIBRARIES} ${LIBSOLV_${_UPPERCOMPONENT}_LIBRARY})
84+
SET(LibSolv_LIBRARIES ${LibSolv_LIBRARIES} ${LIBSOLV_${_UPPERCOMPONENT}_LIBRARY} ${LIBSOLV_${_UPPERCOMPONENT}_LIBRARY_DEPS})
8385
ELSE()
84-
SET(LibSolv_FOUND FALSE)
86+
SET(LibSolv_FOUND FALSE)
8587
ENDIF()
8688
ENDFOREACH()
8789

libsolvext.pc.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ Name: libsolvext
55
Description: Library for reading repositories
66
Version: @VERSION@
77
Requires: libsolv
8-
Libs: -L${libdir} -lsolvext
8+
Libs: -L${libdir} -lsolvext @SOLVEXT_LIB_DEPENDENCIES@
99
Cflags: -I${includedir}

package/libsolv.spec.in

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,26 @@ Group: Development/Libraries/C and C++
160160
%if %{with shared}
161161
Requires: %{libname} = %version
162162
%endif
163+
164+
%if %{with static}
165+
Requires: libxml2-devel
166+
Requires: zlib-devel
167+
%if %{with bz2}
168+
%if 0%{?suse_version}
169+
Requires: libbz2-devel
170+
%else
171+
Requires: bzip2-devel
172+
%endif
173+
174+
%endif
175+
%if %{with xz}
176+
Requires: xz-devel
177+
%endif
178+
179+
%if %{with zstd}
180+
Requires: libzstd-devel
181+
%endif
182+
%endif
163183
Requires: rpm-devel
164184
Conflicts: libsatsolver-devel
165185

0 commit comments

Comments
 (0)