mirror of
https://github.com/Xahau/xahaud.git
synced 2025-11-04 18:55:49 +00:00
164 lines
5.9 KiB
CMake
164 lines
5.9 KiB
CMake
#[===================================================================[
|
|
NIH dep: libarchive
|
|
#]===================================================================]
|
|
|
|
option (local_libarchive "use local build of libarchive." OFF)
|
|
add_library (archive_lib UNKNOWN IMPORTED GLOBAL)
|
|
|
|
if (NOT local_libarchive)
|
|
if (NOT WIN32)
|
|
find_package(libarchive_pc REQUIRED)
|
|
endif ()
|
|
if (archive)
|
|
message (STATUS "Found libarchive using pkg-config. Using ${archive}.")
|
|
set_target_properties (archive_lib PROPERTIES
|
|
IMPORTED_LOCATION_DEBUG
|
|
${archive}
|
|
IMPORTED_LOCATION_RELEASE
|
|
${archive}
|
|
INTERFACE_INCLUDE_DIRECTORIES
|
|
${LIBARCHIVE_INCLUDE_DIR})
|
|
# pkg-config can return extra info for static lib linking
|
|
# this is probably needed/useful generally, but apply
|
|
# to APPLE for now (mostly for homebrew)
|
|
if (APPLE AND static AND libarchive_PC_STATIC_LIBRARIES)
|
|
message(STATUS "NOTE: libarchive static libs: ${libarchive_PC_STATIC_LIBRARIES}")
|
|
# also, APPLE seems to need iconv...maybe linux does too (TBD)
|
|
target_link_libraries (archive_lib
|
|
INTERFACE iconv ${libarchive_PC_STATIC_LIBRARIES})
|
|
endif ()
|
|
else ()
|
|
## now try searching using the minimal find module that cmake provides
|
|
find_package(LibArchive 3.4.3 QUIET)
|
|
if (LibArchive_FOUND)
|
|
if (static)
|
|
# find module doesn't find static libs currently, so we re-search
|
|
get_filename_component(_loc ${LibArchive_LIBRARY} DIRECTORY)
|
|
find_library(_la_static
|
|
NAMES libarchive.a archive_static.lib archive.lib
|
|
PATHS ${_loc})
|
|
if (_la_static)
|
|
set (_la_lib ${_la_static})
|
|
else ()
|
|
message (WARNING "unable to find libarchive static lib - switching to local build")
|
|
set (local_libarchive ON CACHE BOOL "" FORCE)
|
|
endif ()
|
|
else ()
|
|
set (_la_lib ${LibArchive_LIBRARY})
|
|
endif ()
|
|
if (NOT local_libarchive)
|
|
message (STATUS "Found libarchive using module/config. Using ${_la_lib}.")
|
|
set_target_properties (archive_lib PROPERTIES
|
|
IMPORTED_LOCATION_DEBUG
|
|
${_la_lib}
|
|
IMPORTED_LOCATION_RELEASE
|
|
${_la_lib}
|
|
INTERFACE_INCLUDE_DIRECTORIES
|
|
${LibArchive_INCLUDE_DIRS})
|
|
endif ()
|
|
else ()
|
|
set (local_libarchive ON CACHE BOOL "" FORCE)
|
|
endif ()
|
|
endif ()
|
|
endif()
|
|
|
|
if (local_libarchive)
|
|
set (lib_post "")
|
|
if (MSVC)
|
|
set (lib_post "_static")
|
|
endif ()
|
|
ExternalProject_Add (libarchive
|
|
PREFIX ${nih_cache_path}
|
|
GIT_REPOSITORY https://github.com/libarchive/libarchive.git
|
|
GIT_TAG v3.4.3
|
|
CMAKE_ARGS
|
|
# passing the compiler seems to be needed for windows CI, sadly
|
|
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
|
|
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:-DCMAKE_VERBOSE_MAKEFILE=ON>
|
|
-DCMAKE_DEBUG_POSTFIX=_d
|
|
$<$<NOT:$<BOOL:${is_multiconfig}>>:-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}>
|
|
-DENABLE_LZ4=ON
|
|
-ULZ4_*
|
|
-DLZ4_INCLUDE_DIR=$<JOIN:$<TARGET_PROPERTY:lz4_lib,INTERFACE_INCLUDE_DIRECTORIES>,::>
|
|
# because we are building a static lib, this lz4 library doesn't
|
|
# actually matter since you can't generally link static libs to other static
|
|
# libs. The include files are needed, but the library itself is not (until
|
|
# we link our application, at which point we use the lz4 we built above).
|
|
# nonetheless, we need to provide a library to libarchive else it will
|
|
# NOT include lz4 support when configuring
|
|
-DLZ4_LIBRARY=$<IF:$<CONFIG:Debug>,$<TARGET_PROPERTY:lz4_lib,IMPORTED_LOCATION_DEBUG>,$<TARGET_PROPERTY:lz4_lib,IMPORTED_LOCATION_RELEASE>>
|
|
-DENABLE_WERROR=OFF
|
|
-DENABLE_TAR=OFF
|
|
-DENABLE_TAR_SHARED=OFF
|
|
-DENABLE_INSTALL=ON
|
|
-DENABLE_NETTLE=OFF
|
|
-DENABLE_OPENSSL=OFF
|
|
-DENABLE_LZO=OFF
|
|
-DENABLE_LZMA=OFF
|
|
-DENABLE_ZLIB=OFF
|
|
-DENABLE_BZip2=OFF
|
|
-DENABLE_LIBXML2=OFF
|
|
-DENABLE_EXPAT=OFF
|
|
-DENABLE_PCREPOSIX=OFF
|
|
-DENABLE_LibGCC=OFF
|
|
-DENABLE_CNG=OFF
|
|
-DENABLE_CPIO=OFF
|
|
-DENABLE_CPIO_SHARED=OFF
|
|
-DENABLE_CAT=OFF
|
|
-DENABLE_CAT_SHARED=OFF
|
|
-DENABLE_XATTR=OFF
|
|
-DENABLE_ACL=OFF
|
|
-DENABLE_ICONV=OFF
|
|
-DENABLE_TEST=OFF
|
|
-DENABLE_COVERAGE=OFF
|
|
$<$<BOOL:${MSVC}>:
|
|
"-DCMAKE_C_FLAGS=-GR -Gd -fp:precise -FS -MP"
|
|
"-DCMAKE_C_FLAGS_DEBUG=-MTd"
|
|
"-DCMAKE_C_FLAGS_RELEASE=-MT"
|
|
>
|
|
LIST_SEPARATOR ::
|
|
LOG_BUILD ON
|
|
LOG_CONFIGURE ON
|
|
BUILD_COMMAND
|
|
${CMAKE_COMMAND}
|
|
--build .
|
|
--config $<CONFIG>
|
|
--target archive_static
|
|
--parallel ${ep_procs}
|
|
$<$<BOOL:${is_multiconfig}>:
|
|
COMMAND
|
|
${CMAKE_COMMAND} -E copy
|
|
<BINARY_DIR>/libarchive/$<CONFIG>/${ep_lib_prefix}archive${lib_post}$<$<CONFIG:Debug>:_d>${ep_lib_suffix}
|
|
<BINARY_DIR>/libarchive
|
|
>
|
|
TEST_COMMAND ""
|
|
INSTALL_COMMAND ""
|
|
DEPENDS lz4_lib
|
|
BUILD_BYPRODUCTS
|
|
<BINARY_DIR>/libarchive/${ep_lib_prefix}archive${lib_post}${ep_lib_suffix}
|
|
<BINARY_DIR>/libarchive/${ep_lib_prefix}archive${lib_post}_d${ep_lib_suffix}
|
|
)
|
|
ExternalProject_Get_Property (libarchive BINARY_DIR)
|
|
ExternalProject_Get_Property (libarchive SOURCE_DIR)
|
|
if (CMAKE_VERBOSE_MAKEFILE)
|
|
print_ep_logs (libarchive)
|
|
endif ()
|
|
file (MAKE_DIRECTORY ${SOURCE_DIR}/libarchive)
|
|
set_target_properties (archive_lib PROPERTIES
|
|
IMPORTED_LOCATION_DEBUG
|
|
${BINARY_DIR}/libarchive/${ep_lib_prefix}archive${lib_post}_d${ep_lib_suffix}
|
|
IMPORTED_LOCATION_RELEASE
|
|
${BINARY_DIR}/libarchive/${ep_lib_prefix}archive${lib_post}${ep_lib_suffix}
|
|
INTERFACE_INCLUDE_DIRECTORIES
|
|
${SOURCE_DIR}/libarchive
|
|
INTERFACE_COMPILE_DEFINITIONS
|
|
LIBARCHIVE_STATIC)
|
|
endif()
|
|
|
|
add_dependencies (archive_lib libarchive)
|
|
target_link_libraries (archive_lib INTERFACE lz4_lib)
|
|
target_link_libraries (ripple_libs INTERFACE archive_lib)
|
|
exclude_if_included (libarchive)
|
|
exclude_if_included (archive_lib)
|