diff options
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..e56fd2f --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,197 @@ +cmake_minimum_required(VERSION 2.8.11) + +project(Zopfli) + +# Check if Zopfli is the top-level project (standalone), or a subproject +set(zopfli_standalone FALSE) +get_directory_property(zopfli_parent_directory PARENT_DIRECTORY) +if(zopfli_parent_directory STREQUAL "") + set(zopfli_standalone TRUE) +endif() +unset(zopfli_parent_directory) + +# +# Options +# + +# ZOPFLI_BUILD_SHARED controls if Zopfli libraries are built as shared or +# static +# +# It defaults to the value of BUILD_SHARED_LIBS if set, and in most cases +# that should be used instead. The purpose of ZOPFLI_BUILD_SHARED is to allow +# overriding it when built as a subproject. +set(zopfli_shared_default OFF) +if(DEFINED BUILD_SHARED_LIBS) + set(zopfli_shared_default ${BUILD_SHARED_LIBS}) +endif() +option(ZOPFLI_BUILD_SHARED "Build Zopfli with shared libraries" ${zopfli_shared_default}) +unset(zopfli_shared_default) + +# ZOPFLI_BUILD_INSTALL controls if Zopfli adds an install target to the build +# +# When built standalone or as a shared library subproject, the default is ON, +# and for static library subproject the default is OFF. +if(zopfli_standalone OR ZOPFLI_BUILD_SHARED) + option(ZOPFLI_BUILD_INSTALL "Add Zopfli install target" ON) +else() + option(ZOPFLI_BUILD_INSTALL "Add Zopfli install target" OFF) +endif() + +# ZOPFLI_DEFAULT_RELEASE enables changing empty build type to Release +# +# Make based single-configuration generators default to an empty build type, +# which might be surprising, but could be useful if you want full control over +# compiler and linker flags. When ZOPFLI_DEFAULT_RELEASE is ON, change an +# empty default build type to Release. +option(ZOPFLI_DEFAULT_RELEASE "If CMAKE_BUILD_TYPE is empty, default to Release" ON) + +if(zopfli_standalone AND ZOPFLI_DEFAULT_RELEASE) + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + message(STATUS "CMAKE_BUILD_TYPE empty, defaulting to Release") + set(CMAKE_BUILD_TYPE Release) + endif() +endif() + +# +# Library version +# +set(ZOPFLI_VERSION_MAJOR 1) +set(ZOPFLI_VERSION_MINOR 0) +set(ZOPFLI_VERSION_PATCH 3) +set(ZOPFLI_VERSION ${ZOPFLI_VERSION_MAJOR}.${ZOPFLI_VERSION_MINOR}.${ZOPFLI_VERSION_PATCH}) + +if(ZOPFLI_BUILD_SHARED) + set(zopfli_library_type SHARED) +else() + set(zopfli_library_type STATIC) +endif() + +include(GNUInstallDirs) + +# +# libzopfli +# +add_library(libzopfli ${zopfli_library_type} + src/zopfli/blocksplitter.c + src/zopfli/cache.c + src/zopfli/deflate.c + src/zopfli/gzip_container.c + src/zopfli/hash.c + src/zopfli/katajainen.c + src/zopfli/lz77.c + src/zopfli/squeeze.c + src/zopfli/tree.c + src/zopfli/util.c + src/zopfli/zlib_container.c + src/zopfli/zopfli_lib.c +) +target_include_directories(libzopfli + INTERFACE + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/zopfli> + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> +) +set_target_properties(libzopfli PROPERTIES + OUTPUT_NAME zopfli + VERSION ${ZOPFLI_VERSION} + SOVERSION ${ZOPFLI_VERSION_MAJOR} +) +if(UNIX AND NOT (BEOS OR HAIKU)) + target_link_libraries(libzopfli m) +endif() + +# +# libzopflipng +# +add_library(libzopflipng ${zopfli_library_type} + src/zopflipng/zopflipng_lib.cc + src/zopflipng/lodepng/lodepng.cpp + src/zopflipng/lodepng/lodepng_util.cpp +) +target_link_libraries(libzopflipng libzopfli) +target_include_directories(libzopflipng + INTERFACE + $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/zopflipng> + $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> +) +set_target_properties(libzopflipng PROPERTIES + OUTPUT_NAME zopflipng + VERSION ${ZOPFLI_VERSION} + SOVERSION ${ZOPFLI_VERSION_MAJOR} +) + +# MSVC does not export symbols by default when building a DLL, this is a +# workaround for recent versions of CMake +if(MSVC AND ZOPFLI_BUILD_SHARED) + if(CMAKE_VERSION VERSION_LESS 3.4) + message(WARNING "Automatic export of all symbols to DLL not supported until CMake 3.4") + else() + set_target_properties(libzopfli PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) + set_target_properties(libzopflipng PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON) + endif() +endif() + +# +# zopfli +# +add_executable(zopfli src/zopfli/zopfli_bin.c) +target_link_libraries(zopfli libzopfli) +if(MSVC) + target_compile_definitions(zopfli PRIVATE _CRT_SECURE_NO_WARNINGS) +endif() + +# +# zopflipng +# +add_executable(zopflipng src/zopflipng/zopflipng_bin.cc) +target_link_libraries(zopflipng libzopflipng) +if(MSVC) + target_compile_definitions(zopflipng PRIVATE _CRT_SECURE_NO_WARNINGS) +endif() + +# Create aliases +# +# Makes targets available to projects using Zopfli as a subproject using the +# same names as in the config file package. +if(NOT CMAKE_VERSION VERSION_LESS 3.0) + add_library(Zopfli::libzopfli ALIAS libzopfli) + add_library(Zopfli::libzopflipng ALIAS libzopflipng) + add_executable(Zopfli::zopfli ALIAS zopfli) + add_executable(Zopfli::zopflipng ALIAS zopflipng) +endif() + +# +# Install +# +if(ZOPFLI_BUILD_INSTALL) + # Install binaries, libraries, and headers + install(TARGETS libzopfli libzopflipng zopfli zopflipng + EXPORT ZopfliTargets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + ) + install(FILES src/zopfli/zopfli.h src/zopflipng/zopflipng_lib.h + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ) + + # Install config file package + # + # This allows CMake based projects to use the installed libraries with + # find_package(Zopfli). + if(NOT CMAKE_VERSION VERSION_LESS 3.0) + include(CMakePackageConfigHelpers) + write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/ZopfliConfigVersion.cmake + VERSION ${ZOPFLI_VERSION} + COMPATIBILITY SameMajorVersion + ) + # Since we have no dependencies, use export file directly as config file + install(EXPORT ZopfliTargets + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Zopfli + NAMESPACE Zopfli:: + FILE ZopfliConfig.cmake + ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ZopfliConfigVersion.cmake + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/Zopfli + ) + endif() +endif() |