Skip to content

Commit

Permalink
[libarchive, libuv]Fix static linkage (#10769)
Browse files Browse the repository at this point in the history
* [libarchive] fix static linkage of libarchive in dependent ports (non yet)

* [libuv] fix static builds of dependent ports

* modernize portfiles

* remove POSIX_REGEX_LIB=NONE 
since it is added elsewhere

* remove debug message
  • Loading branch information
Neumann-A authored Apr 17, 2020
1 parent 5f77f3e commit 4d8237b
Show file tree
Hide file tree
Showing 6 changed files with 136 additions and 10 deletions.
2 changes: 1 addition & 1 deletion ports/libarchive/CONTROL
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Source: libarchive
Version: 3.4.1
Version: 3.4.1-1
Homepage: https://github.com/libarchive/libarchive
Description: Library for reading and writing streaming archives
Build-Depends: zlib
Expand Down
33 changes: 29 additions & 4 deletions ports/libarchive/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,25 @@ vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS
lzma ENABLE_LZMA
lzo ENABLE_LZO
openssl ENABLE_OPENSSL
# The below features should be added to CONTROL
#pcre ENABLE_PCREPOSIX
#nettle ENABLE_NETTLE
#expat ENABLE_EXPAT
#libgcc ENABLE_LibGCC
#cng ENABLE_CNG
#tar ENABLE_TAR
#cpio ENABLE_CPIO
#cat ENABLE_CAT
#xattr ENABLE_XATTR
#acl ENABLE_ACL
#iconv ENABLE_ICONV
)

if(FEATURES MATCHES "pcre")
else()
list(APPEND FEATURE_OPTIONS -DPOSIX_REGEX_LIB=NONE)
endif()

vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}
PREFER_NINJA
Expand All @@ -38,21 +55,29 @@ vcpkg_configure_cmake(
-DENABLE_CAT=OFF
-DENABLE_XATTR=OFF
-DENABLE_ACL=OFF
-DENABLE_TEST=OFF
-DENABLE_ICONV=OFF
-DPOSIX_REGEX_LIB=NONE
-DENABLE_TEST=OFF
-DENABLE_WERROR=OFF
)

vcpkg_install_cmake()
vcpkg_copy_pdbs()

foreach(_feature IN LISTS FEATURE_OPTIONS)
string(REPLACE "-D" "" _feature "${_feature}")
string(REPLACE "=" ";" _feature "${_feature}")
string(REPLACE "ON" "1" _feature "${_feature}")
string(REPLACE "OFF" "0" _feature "${_feature}")
list(GET _feature 0 _feature_name)
list(GET _feature 1 _feature_status)
set(${_feature_name} ${_feature_status})
endforeach()
configure_file("${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" "${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake" @ONLY)
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
foreach(HEADER ${CURRENT_PACKAGES_DIR}/include/archive.h ${CURRENT_PACKAGES_DIR}/include/archive_entry.h)
file(READ ${HEADER} CONTENTS)
string(REPLACE "(!defined LIBARCHIVE_STATIC)" "0" CONTENTS "${CONTENTS}")
file(WRITE ${HEADER} "${CONTENTS}")
endforeach()

file(COPY ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/libarchive)
file(RENAME ${CURRENT_PACKAGES_DIR}/share/libarchive/COPYING ${CURRENT_PACKAGES_DIR}/share/libarchive/copyright)
file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)
86 changes: 86 additions & 0 deletions ports/libarchive/vcpkg-cmake-wrapper.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
_find_package(${ARGS})

if("@VCPKG_LIBRARY_LINKAGE@" STREQUAL "static")
if(@ENABLE_BZip2@)
find_package(BZip2 REQUIRED)
list(APPEND LibArchive_LIBRARIES BZip2::BZip2)
endif()
if(@ENABLE_LIBXML2@)
find_package(LibXml2 REQUIRED)
list(APPEND LibArchive_LIBRARIES LibXml2::LibXml2)
endif()
if(@ENABLE_LZ4@)
find_package(lz4 REQUIRED)
list(APPEND LibArchive_LIBRARIES lz4::lz4)
endif()
if(@ENABLE_LZMA@)
find_package(LibLZMA REQUIRED)
list(APPEND LibArchive_LIBRARIES LibLZMA::LibLZMA)
endif()
if(@ENABLE_LZO@)
find_library(LZO_LIBRARY_DEBUG NAMES lzo2d lzo2 NAMES_PER_DIR PATH_SUFFIXES lib PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug" NO_DEFAULT_PATH)
find_library(LZO_LIBRARY_RELEASE NAMES lzo2 NAMES_PER_DIR PATH_SUFFIXES lib PATHS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}" NO_DEFAULT_PATH)
if(LZO_LIBRARY_RELEASE)
list(APPEND LibArchive_LIBRARIES optimized ${LZO_LIBRARY_RELEASE})
endif()
if(LZO_LIBRARY_DEBUG)
list(APPEND LibArchive_LIBRARIES debug ${LZO_LIBRARY_DEBUG})
endif()
endif()
if(@ENABLE_OPENSSL@)
find_package(OpenSSL REQUIRED)
list(APPEND LibArchive_LIBRARIES OpenSSL::Crypto)
endif()

if(TARGET LibArchive::LibArchive)
if(@ENABLE_BZip2@)
target_link_libraries(LibArchive::LibArchive INTERFACE BZip2::BZip2)
endif()
if(@ENABLE_LIBXML2@)
target_link_libraries(LibArchive::LibArchive INTERFACE LibXml2::LibXml2)
endif()
if(@ENABLE_LZ4@)
target_link_libraries(LibArchive::LibArchive INTERFACE lz4::lz4)
endif()
if(@ENABLE_LZMA@)
target_link_libraries(LibArchive::LibArchive INTERFACE LibLZMA::LibLZMA)
endif()
if(@ENABLE_LZO@)
if(LZO_LIBRARY_RELEASE)
list(APPEND interface_lib \$<\$<NOT:\$<CONFIG:DEBUG>>:${LZO_LIBRARY_RELEASE}>)
endif()
if(LZO_LIBRARY_DEBUG)
list(APPEND interface_lib \$<\$<CONFIG:DEBUG>:${LZO_LIBRARY_DEBUG}>)
endif()
set_property(TARGET LibArchive::LibArchive APPEND PROPERTY INTERFACE_LINK_LIBRARIES ${interface_lib})
endif()
if(@ENABLE_OPENSSL@)
target_link_libraries(LibArchive::LibArchive INTERFACE OpenSSL::Crypto)
endif()
endif()
endif()


# TODO in some future
# if(@ENABLE_PCREPOSIX@)
# endif()
# if(@ENABLE_NETTLE@)
# endif()
# if(@ENABLE_EXPAT@)
# endif()
# if(@ENABLE_LibGCC@)
# endif()
# if(@ENABLE_CNG@)
# endif()
# if(@ENABLE_TAR@)
# endif()
# if(@ENABLE_CPIO@)
# endif()
# if(@ENABLE_CAT@)
# endif()
# if(@ENABLE_XATTR@)
# endif()
# if(@ENABLE_ACL@)
# endif()
# if(@ENABLE_ICONV@)
# endif()
2 changes: 1 addition & 1 deletion ports/libuv/CONTROL
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Source: libuv
Version: 1.34.2
Version: 1.34.2-1
Homepage: https://github.com/libuv/libuv
Description: libuv is a multi-platform support library with a focus on asynchronous I/O.
7 changes: 3 additions & 4 deletions ports/libuv/portfile.cmake
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
include(vcpkg_common_functions)

vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO libuv/libuv
Expand Down Expand Up @@ -32,8 +30,9 @@ if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
string(REPLACE "defined(USING_UV_SHARED)" "1" UV_H "${UV_H}")
else()
string(REPLACE "defined(USING_UV_SHARED)" "0" UV_H "${UV_H}")
configure_file("${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake" "${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake" @ONLY)
endif()
file(WRITE ${CURRENT_PACKAGES_DIR}/include/uv.h "${UV_H}")

file(COPY ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/libuv)
file(RENAME ${CURRENT_PACKAGES_DIR}/share/libuv/LICENSE ${CURRENT_PACKAGES_DIR}/share/libuv/copyright)
file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright)

16 changes: 16 additions & 0 deletions ports/libuv/vcpkg-cmake-wrapper.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
_find_package(${ARGS})

if(WIN32)
list(APPEND LibUV_LIBRARIES iphlpapi psapi shell32 userenv ws2_32)
if(TARGET LibUV::LibUV)
target_link_libraries(LibUV::LibUV INTERFACE iphlpapi psapi shell32 userenv ws2_32)
endif()
endif()
include(CMakeFindDependencyMacro)
find_dependency(Threads)
list(APPEND LibUV_LIBRARIES Threads::Threads)
if(TARGET LibUV::LibUV)
target_link_libraries(LibUV::LibUV INTERFACE Threads::Threads)
endif()


0 comments on commit 4d8237b

Please sign in to comment.