mirror of
https://github.com/nillerusr/source-engine.git
synced 2025-01-06 07:26:41 +00:00
365 lines
11 KiB
CMake
Executable File
365 lines
11 KiB
CMake
Executable File
#***************************************************************************
|
|
# Copyright: Matthias Schmieder,
|
|
# E-Mail: schmieder.matthias@gmail.com
|
|
# Year: 2016
|
|
#***************************************************************************
|
|
cmake_minimum_required(VERSION 2.8)
|
|
|
|
option(USE_ZLIB "Enables ZLIB compression" ON)
|
|
option(USE_BZIP2 "Enables BZIP2 compression" ON)
|
|
option(USE_LZMA "Enables LZMA compression" ON)
|
|
option(USE_PKCRYPT "Enables PKWARE traditional encryption" ON)
|
|
option(USE_AES "Enables AES encryption" ON)
|
|
option(BUILD_TEST "Builds minizip test executable" OFF)
|
|
|
|
# Set a consistent MACOSX_RPATH default across all CMake versions.
|
|
# When CMake 2.8.12 is required, change this default to 1.
|
|
# When CMake 3.0.0 is required, remove this block (see CMP0042).
|
|
if(NOT DEFINED CMAKE_MACOSX_RPATH)
|
|
set(CMAKE_MACOSX_RPATH 0)
|
|
endif()
|
|
|
|
project("minizip")
|
|
|
|
include(GNUInstallDirs)
|
|
|
|
set(INSTALL_BIN_DIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Installation directory for executables")
|
|
set(INSTALL_LIB_DIR ${CMAKE_INSTALL_LIBDIR} CACHE PATH "Installation directory for libraries")
|
|
set(INSTALL_INC_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Installation directory for headers")
|
|
set(INSTALL_MAN_DIR ${CMAKE_INSTALL_MANDIR} CACHE PATH "Installation directory for manual pages")
|
|
set(INSTALL_PKGCONFIG_DIR ${CMAKE_INSTALL_LIBDIR}/pkgconfig CACHE PATH "Installation directory for pkgconfig (.pc) files")
|
|
set(INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/minizip CACHE PATH "Installation directory for cmake files.")
|
|
|
|
set(VERSION "2.3.3")
|
|
|
|
# Set cmake debug postfix to d
|
|
set(CMAKE_DEBUG_POSTFIX "d")
|
|
|
|
# Ensure correct version of zlib is referenced
|
|
if(USE_ZLIB)
|
|
set(ZLIB_ROOT ${DEF_ZLIB_ROOT} CACHE PATH "Parent directory of zlib installation")
|
|
find_package(ZLIB REQUIRED)
|
|
if(ZLIB_FOUND)
|
|
include_directories(${ZLIB_INCLUDE_DIRS})
|
|
endif()
|
|
add_definitions(-DHAVE_ZLIB)
|
|
endif()
|
|
|
|
set(MINIZIP_PC ${CMAKE_CURRENT_BINARY_DIR}/minizip.pc)
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/minizip.pc.cmakein ${MINIZIP_PC} @ONLY)
|
|
|
|
set(PROJECT_NAME libminizip)
|
|
|
|
set(MINIZIP_SRC
|
|
mz_os.c
|
|
mz_compat.c
|
|
mz_strm.c
|
|
mz_strm_buf.c
|
|
mz_strm_mem.c
|
|
mz_strm_posix.c
|
|
mz_strm_split.c
|
|
mz_zip.c)
|
|
|
|
set(MINIZIP_PUBLIC_HEADERS
|
|
mz.h
|
|
mz_os.h
|
|
mz_compat.h
|
|
mz_strm.h
|
|
mz_strm_buf.h
|
|
mz_strm_mem.h
|
|
mz_strm_posix.h
|
|
mz_strm_split.h
|
|
mz_zip.h)
|
|
|
|
if(WIN32)
|
|
list(APPEND MINIZIP_SRC "mz_os_win32.c" "mz_strm_win32.c")
|
|
list(APPEND MINIZIP_PUBLIC_HEADERS "mz_os_win32.h" "mz_strm_win32.h")
|
|
|
|
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
|
|
endif()
|
|
|
|
if("${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsStore")
|
|
add_definitions(-DMZ_USE_WINRT_API)
|
|
endif()
|
|
|
|
if(UNIX)
|
|
add_compile_options(-O3)
|
|
|
|
list(APPEND MINIZIP_SRC "mz_os_posix.c")
|
|
list(APPEND MINIZIP_PUBLIC_HEADERS "mz_os_posix.h")
|
|
|
|
set(define_lfs_macros TRUE)
|
|
|
|
if(ANDROID)
|
|
string(REGEX REPLACE "android-([0-9+])" "\\1"
|
|
android_api "${ANDROID_PLATFORM}")
|
|
if(${android_api} LESS 24)
|
|
set(define_lfs_macros FALSE)
|
|
endif()
|
|
endif()
|
|
|
|
if(define_lfs_macros)
|
|
add_definitions(-D__USE_FILE_OFFSET64)
|
|
add_definitions(-D__USE_LARGEFILE64)
|
|
add_definitions(-D_LARGEFILE64_SOURCE)
|
|
add_definitions(-D_FILE_OFFSET_BITS=64)
|
|
endif()
|
|
|
|
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|
find_package(PkgConfig REQUIRED)
|
|
|
|
pkg_check_modules(LIBBSD libbsd REQUIRED)
|
|
|
|
include_directories(${LIBBSD_INCLUDE_DIRS})
|
|
link_directories(${LIBBSD_LIBRARY_DIRS})
|
|
endif()
|
|
endif()
|
|
|
|
if(USE_PKCRYPT)
|
|
add_definitions(-DHAVE_PKCRYPT)
|
|
|
|
list(APPEND MINIZIP_SRC "mz_strm_pkcrypt.c")
|
|
list(APPEND MINIZIP_PUBLIC_HEADERS "mz_strm_pkcrypt.h")
|
|
endif()
|
|
|
|
if(USE_AES)
|
|
add_definitions(-DHAVE_AES)
|
|
|
|
list(APPEND MINIZIP_SRC "mz_strm_aes.c")
|
|
list(APPEND MINIZIP_PUBLIC_HEADERS "mz_strm_aes.h")
|
|
|
|
set(AES_SRC
|
|
lib/aes/aescrypt.c
|
|
lib/aes/aeskey.c
|
|
lib/aes/aestab.c
|
|
lib/aes/hmac.c
|
|
lib/aes/pwd2key.c
|
|
lib/aes/sha1.c)
|
|
|
|
set(AES_PUBLIC_HEADERS
|
|
lib/aes/aes.h
|
|
lib/aes/aesopt.h
|
|
lib/aes/aestab.h
|
|
lib/aes/brg_endian.h
|
|
lib/aes/brg_types.h
|
|
lib/aes/hmac.h
|
|
lib/aes/pwd2key.h
|
|
lib/aes/sha1.h)
|
|
|
|
include_directories(lib/aes)
|
|
|
|
source_group("AES" FILES ${AES_SRC} ${AES_PUBLIC_HEADERS})
|
|
endif()
|
|
|
|
if(USE_ZLIB)
|
|
add_definitions(-DHAVE_ZLIB)
|
|
|
|
list(APPEND MINIZIP_SRC "mz_strm_zlib.c")
|
|
list(APPEND MINIZIP_PUBLIC_HEADERS "mz_strm_zlib.h")
|
|
|
|
include(CheckFunctionExists)
|
|
set(CMAKE_REQUIRED_LIBRARIES ZLIB::ZLIB)
|
|
CHECK_FUNCTION_EXISTS(z_get_crc_table
|
|
NEEDS_Z_PREFIX)
|
|
|
|
if(NEEDS_Z_PREFIX)
|
|
add_definitions(-DZ_PREFIX)
|
|
endif()
|
|
endif()
|
|
|
|
if(USE_BZIP2)
|
|
add_definitions(-DHAVE_BZIP2)
|
|
add_definitions(-DBZ_NO_STDIO)
|
|
|
|
list(APPEND MINIZIP_SRC "mz_strm_bzip.c")
|
|
list(APPEND MINIZIP_PUBLIC_HEADERS "mz_strm_bzip.h")
|
|
|
|
set(BZIP2_SRC
|
|
lib/bzip2/blocksort.c
|
|
lib/bzip2/bzlib.c
|
|
lib/bzip2/compress.c
|
|
lib/bzip2/crctable.c
|
|
lib/bzip2/decompress.c
|
|
lib/bzip2/huffman.c
|
|
lib/bzip2/randtable.c)
|
|
|
|
set(BZIP2_PUBLIC_HEADERS
|
|
lib/bzip2/bzlib.h
|
|
lib/bzip2/bzlib_private.h)
|
|
|
|
include_directories(lib/bzip2)
|
|
|
|
source_group("BZip2" FILES ${BZIP2_SRC} ${BZIP2_PUBLIC_HEADERS})
|
|
endif()
|
|
|
|
if(USE_LZMA)
|
|
add_definitions(-DHAVE_LZMA)
|
|
add_definitions(-DHAVE_CONFIG_H)
|
|
add_definitions(-DLZMA_API_STATIC)
|
|
|
|
list(APPEND MINIZIP_SRC "mz_strm_lzma.c")
|
|
list(APPEND MINIZIP_PUBLIC_HEADERS "mz_strm_lzma.h")
|
|
|
|
set(LZMA_CHECK_SRC
|
|
lib/liblzma/check/check.c
|
|
lib/liblzma/check/crc32_fast.c
|
|
lib/liblzma/check/crc32_table.c)
|
|
set(LZMA_COMMON_SRC
|
|
lib/liblzma/common/alone_decoder.c
|
|
lib/liblzma/common/alone_encoder.c
|
|
lib/liblzma/common/common.c
|
|
lib/liblzma/common/filter_encoder.c)
|
|
set(LZMA_LZ_SRC
|
|
lib/liblzma/lz/lz_decoder.c
|
|
lib/liblzma/lz/lz_encoder.c
|
|
lib/liblzma/lz/lz_encoder_mf.c)
|
|
set(LZMA_LZMA_SRC
|
|
lib/liblzma/lzma/fastpos.h
|
|
lib/liblzma/lzma/fastpos_table.c
|
|
lib/liblzma/lzma/lzma_decoder.c
|
|
lib/liblzma/lzma/lzma_encoder.c
|
|
lib/liblzma/lzma/lzma_encoder_optimum_fast.c
|
|
lib/liblzma/lzma/lzma_encoder_optimum_normal.c
|
|
lib/liblzma/lzma/lzma_encoder_presets.c)
|
|
set(LZMA_RANGECODER_SRC
|
|
lib/liblzma/rangecoder/price_table.c)
|
|
|
|
set(LZMA_CONFIG_HEADERS
|
|
lib/liblzma/config.h)
|
|
set(LZMA_API_HEADERS
|
|
lib/liblzma/api/lzma.h
|
|
lib/liblzma/api/lzma/base.h
|
|
lib/liblzma/api/lzma/check.h
|
|
lib/liblzma/api/lzma/container.h
|
|
lib/liblzma/api/lzma/filter.h
|
|
lib/liblzma/api/lzma/lzma12.h
|
|
lib/liblzma/api/lzma/version.h
|
|
lib/liblzma/api/lzma/vli.h)
|
|
set(LZMA_CHECK_HEADERS
|
|
lib/liblzma/check/check.h
|
|
lib/liblzma/check/crc32_table_be.h
|
|
lib/liblzma/check/crc32_table_le.h
|
|
lib/liblzma/check/crc_macros.h)
|
|
set(LZMA_COMMON_HEADERS
|
|
lib/liblzma/common/alone_decoder.h
|
|
lib/liblzma/common/common.h
|
|
lib/liblzma/common/filter_encoder.h
|
|
lib/liblzma/common/index.h
|
|
lib/liblzma/common/memcmplen.h
|
|
lib/liblzma/common/sysdefs.h
|
|
lib/liblzma/common/tuklib_common.h
|
|
lib/liblzma/common/tuklib_config.h
|
|
lib/liblzma/common/tuklib_integer.h)
|
|
set(LZMA_LZ_HEADERS
|
|
lib/liblzma/lz/lz_decoder.h
|
|
lib/liblzma/lz/lz_encoder.h
|
|
lib/liblzma/lz/lz_encoder_hash.h
|
|
lib/liblzma/lz/lz_encoder_hash_table.h)
|
|
set(LZMA_LZMA_HEADERS
|
|
lib/liblzma/lzma/lzma2_encoder.h
|
|
lib/liblzma/lzma/lzma_common.h
|
|
lib/liblzma/lzma/lzma_decoder.h
|
|
lib/liblzma/lzma/lzma_encoder.h
|
|
lib/liblzma/lzma/lzma_encoder_private.h)
|
|
set(LZMA_RANGECODER_HEADERS
|
|
lib/liblzma/rangecoder/price.h
|
|
lib/liblzma/rangecoder/range_common.h
|
|
lib/liblzma/rangecoder/range_decoder.h
|
|
lib/liblzma/rangecoder/range_encoder.h)
|
|
|
|
set(LZMA_PUBLIC_HEADERS
|
|
${LZMA_CONFIG_HEADERS}
|
|
${LZMA_API_HEADERS}
|
|
${LZMA_CHECK_HEADERS}
|
|
${LZMA_COMMON_HEADERS}
|
|
${LZMA_LZ_HEADERS}
|
|
${LZMA_LZMA_HEADERS}
|
|
${LZMA_RANGECODER_HEADERS})
|
|
|
|
set(LZMA_SRC
|
|
${LZMA_CHECK_SRC}
|
|
${LZMA_COMMON_SRC}
|
|
${LZMA_LZ_SRC}
|
|
${LZMA_LZMA_SRC}
|
|
${LZMA_RANGECODER_SRC})
|
|
|
|
include_directories(lib/liblzma
|
|
lib/liblzma/api
|
|
lib/liblzma/check
|
|
lib/liblzma/common
|
|
lib/liblzma/lz
|
|
lib/liblzma/lzma
|
|
lib/liblzma/rangecoder)
|
|
|
|
source_group("LZMA" FILES ${LZMA_CONFIG_HEADERS})
|
|
source_group("LZMA\\API" FILES ${LZMA_API_HEADERS})
|
|
source_group("LZMA\\Check" FILES ${LZMA_CHECK_SRC} ${LZMA_CHECK_HEADERS})
|
|
source_group("LZMA\\Common" FILES ${LZMA_COMMON_SRC} ${LZMA_COMMON_HEADERS})
|
|
source_group("LZMA\\LZ" FILES ${LZMA_LZ_SRC} ${LZMA_LZ_HEADERS})
|
|
source_group("LZMA\\LZMA" FILES ${LZMA_LZMA_SRC} ${LZMA_LZMA_HEADERS})
|
|
source_group("LZMA\\RangeCoder" FILES ${LZMA_RANGECODER_SRC} ${LZMA_RANGECODER_HEADERS})
|
|
endif()
|
|
|
|
# Enable x86 optimizations if supported
|
|
if(CMAKE_C_COMPILER MATCHES ".*clang")
|
|
include(CheckCCompilerFlag)
|
|
macro(enable_option_if_supported option variable)
|
|
check_c_compiler_flag("-Werror=unused-command-line-argument ${option}" ${variable})
|
|
if(${variable})
|
|
add_compile_options(${option})
|
|
endif()
|
|
endmacro()
|
|
|
|
enable_option_if_supported(-msse3 check_opt_sse3)
|
|
enable_option_if_supported(-msse4.1 check_opt_sse41)
|
|
enable_option_if_supported(-maes check_opt_aes)
|
|
endif()
|
|
|
|
# Create minizip library
|
|
source_group("Minizip" FILES ${MINIZIP_SRC} ${MINIZIP_PUBLIC_HEADERS})
|
|
|
|
add_library(${PROJECT_NAME}
|
|
${MINIZIP_SRC} ${MINIZIP_PUBLIC_HEADERS}
|
|
${AES_SRC} ${AES_PUBLIC_HEADERS}
|
|
${BZIP2_SRC} ${BZIP2_PUBLIC_HEADERS}
|
|
${LZMA_SRC} ${LZMA_PUBLIC_HEADERS})
|
|
|
|
if (MINGW AND BUILD_SHARED_LIBS)
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES ARCHIVE_OUTPUT_NAME "minizip")
|
|
endif ()
|
|
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE C PREFIX ""
|
|
POSITION_INDEPENDENT_CODE 1)
|
|
if(USE_ZLIB)
|
|
target_link_libraries(${PROJECT_NAME} ZLIB::ZLIB)
|
|
endif()
|
|
if(USE_LZMA)
|
|
set_target_properties(${PROJECT_NAME} PROPERTIES C_STANDARD 99)
|
|
endif()
|
|
if(UNIX)
|
|
target_link_libraries(${PROJECT_NAME} ${LIBBSD_LIBRARIES})
|
|
endif()
|
|
|
|
target_include_directories(${PROJECT_NAME} PUBLIC $<INSTALL_INTERFACE:${INSTALL_INC_DIR}>)
|
|
|
|
install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME}
|
|
INCLUDES DESTINATION "${INSTALL_INC_DIR}"
|
|
RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
|
|
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
|
|
LIBRARY DESTINATION "${INSTALL_LIB_DIR}")
|
|
|
|
install(EXPORT ${PROJECT_NAME}
|
|
DESTINATION "${INSTALL_CMAKE_DIR}"
|
|
NAMESPACE "MINIZIP::")
|
|
|
|
install(FILES ${MINIZIP_PUBLIC_HEADERS} DESTINATION "${INSTALL_INC_DIR}")
|
|
install(FILES ${MINIZIP_PC} DESTINATION "${INSTALL_PKGCONFIG_DIR}")
|
|
|
|
if(BUILD_TEST)
|
|
add_executable(minizip "minizip.c")
|
|
target_link_libraries(minizip ${PROJECT_NAME})
|
|
|
|
install(TARGETS minizip
|
|
RUNTIME DESTINATION "bin")
|
|
endif()
|