123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- 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()
|