# "a" (Linux) or "lib" (Windows)
string(REPLACE "." "" libext "${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(_ldflags "")
set(LIBCURL_PC_LIBS_PRIVATE "")
- # For processing full path libraries into -L and -l ld options,
- # the directories that go with the -L option are cached, so they
- # only get added once per such directory.
- unset(_libcurl_libs_dirs)
- # To avoid getting unnecessary -L options for known system directories,
- # _libcurl_libs_dirs is seeded with them.
+ # Avoid getting unnecessary -L options for known system directories.
+ unset(_sys_libdirs)
foreach(_libdir IN LISTS CMAKE_SYSTEM_PREFIX_PATH)
if(_libdir MATCHES "/$")
set(_libdir "${_libdir}lib")
set(_libdir "${_libdir}/lib")
endif()
if(IS_DIRECTORY "${_libdir}")
- list(APPEND _libcurl_libs_dirs "${_libdir}")
+ list(APPEND _sys_libdirs "${_libdir}")
endif()
if(DEFINED CMAKE_LIBRARY_ARCHITECTURE)
set(_libdir "${_libdir}/${CMAKE_LIBRARY_ARCHITECTURE}")
if(IS_DIRECTORY "${_libdir}")
- list(APPEND _libcurl_libs_dirs "${_libdir}")
+ list(APPEND _sys_libdirs "${_libdir}")
endif()
endif()
endforeach()
- foreach(_lib IN LISTS CURL_LIBDIRS)
- set(LIBCURL_PC_LIBS_PRIVATE "${LIBCURL_PC_LIBS_PRIVATE} -L${_lib}")
+ foreach(_libdir IN LISTS CURL_LIBDIRS)
+ list(FIND _sys_libdirs "${_libdir}" _libdir_index)
+ if(_libdir_index LESS 0)
+ list(APPEND _ldflags "-L${_libdir}")
+ endif()
endforeach()
foreach(_lib IN LISTS CMAKE_C_IMPLICIT_LINK_LIBRARIES CURL_LIBS)
continue()
endif()
endif()
- if(_lib MATCHES "^-")
- set(LIBCURL_PC_LIBS_PRIVATE "${LIBCURL_PC_LIBS_PRIVATE} ${_lib}")
+ if(_lib MATCHES "^-") # '-framework <name>'
+ list(APPEND _ldflags "${_lib}")
elseif(_lib MATCHES ".*/.*")
# This gets a bit more complex, because we want to specify the
# directory separately, and only once per directory
- string(REGEX REPLACE "^(.*)/[^/]*$" "\\1" _libdir "${_lib}")
- string(REGEX REPLACE "^.*/([^/.]*).*$" "\\1" _libname "${_lib}")
+ get_filename_component(_libdir ${_lib} DIRECTORY)
+ get_filename_component(_libname ${_lib} NAME_WE)
if(_libname MATCHES "^lib")
- list(FIND _libcurl_libs_dirs "${_libdir}" _libdir_index)
+ list(FIND _sys_libdirs "${_libdir}" _libdir_index)
if(_libdir_index LESS 0)
- list(APPEND _libcurl_libs_dirs "${_libdir}")
- set(LIBCURL_PC_LIBS_PRIVATE "${LIBCURL_PC_LIBS_PRIVATE} -L${_libdir}")
+ list(APPEND _ldflags "-L${_libdir}")
endif()
string(REGEX REPLACE "^lib" "" _libname "${_libname}")
- set(LIBCURL_PC_LIBS_PRIVATE "${LIBCURL_PC_LIBS_PRIVATE} -l${_libname}")
+ list(APPEND LIBCURL_PC_LIBS_PRIVATE "-l${_libname}")
else()
- set(LIBCURL_PC_LIBS_PRIVATE "${LIBCURL_PC_LIBS_PRIVATE} ${_lib}")
+ list(APPEND LIBCURL_PC_LIBS_PRIVATE "${_lib}")
endif()
else()
- set(LIBCURL_PC_LIBS_PRIVATE "${LIBCURL_PC_LIBS_PRIVATE} -l${_lib}")
+ list(APPEND LIBCURL_PC_LIBS_PRIVATE "-l${_lib}")
endif()
endforeach()
if(LIBCURL_PC_REQUIRES_PRIVATE)
string(REPLACE ";" "," LIBCURL_PC_REQUIRES_PRIVATE "${LIBCURL_PC_REQUIRES_PRIVATE}")
endif()
+ if(LIBCURL_PC_LIBS_PRIVATE)
+ string(REPLACE ";" " " LIBCURL_PC_LIBS_PRIVATE "${LIBCURL_PC_LIBS_PRIVATE}")
+ endif()
+ if(_ldflags)
+ list(REMOVE_DUPLICATES _ldflags)
+ string(REPLACE ";" " " _ldflags "${_ldflags}")
+ set(LIBCURL_PC_LIBS_PRIVATE "${_ldflags} ${LIBCURL_PC_LIBS_PRIVATE}")
+ string(STRIP "${LIBCURL_PC_LIBS_PRIVATE}" LIBCURL_PC_LIBS_PRIVATE)
+ endif()
set(LIBCURL_PC_CFLAGS_PRIVATE "-DCURL_STATICLIB")
# Merge pkg-config private fields into public ones when static-only