diff options
Diffstat (limited to 'tiff/CMakeLists.txt')
-rw-r--r-- | tiff/CMakeLists.txt | 780 |
1 files changed, 95 insertions, 685 deletions
diff --git a/tiff/CMakeLists.txt b/tiff/CMakeLists.txt index efe857df..dddbaf6a 100644 --- a/tiff/CMakeLists.txt +++ b/tiff/CMakeLists.txt @@ -2,6 +2,7 @@ # Run "cmake" to generate the build files for your platform # # Copyright © 2015 Open Microscopy Environment / University of Dundee +# Copyright © 2021 Roger Leigh <rleigh@codelibre.net> # Written by Roger Leigh <rleigh@codelibre.net> # # Permission to use, copy, modify, distribute, and sell this software and @@ -23,718 +24,115 @@ # LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE # OF THIS SOFTWARE. -cmake_minimum_required(VERSION 2.8.11) # b/c of use of BUILD_INTERFACE generator expression - -# Default policy is from 2.8.9 -cmake_policy(VERSION 2.8.9) -# Set MacOSX @rpath usage globally. -if (POLICY CMP0020) - cmake_policy(SET CMP0020 NEW) -endif(POLICY CMP0020) -if (POLICY CMP0042) - cmake_policy(SET CMP0042 NEW) -endif(POLICY CMP0042) -# Use new variable expansion policy. -if (POLICY CMP0053) - cmake_policy(SET CMP0053 NEW) -endif(POLICY CMP0053) -if (POLICY CMP0054) - cmake_policy(SET CMP0054 NEW) -endif(POLICY CMP0054) +cmake_minimum_required(VERSION 3.9.0) -# Read version information from configure.ac. -FILE(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/configure.ac" configure REGEX "^LIBTIFF_.*=") -foreach(line ${configure}) - foreach(var LIBTIFF_MAJOR_VERSION LIBTIFF_MINOR_VERSION LIBTIFF_MICRO_VERSION LIBTIFF_ALPHA_VERSION - LIBTIFF_CURRENT LIBTIFF_REVISION LIBTIFF_AGE) - if(NOT ${var} AND line MATCHES "^${var}=(.*)") - set(${var} "${CMAKE_MATCH_1}") - break() - endif() - endforeach() -endforeach() - -math(EXPR SO_MAJOR "${LIBTIFF_CURRENT} - ${LIBTIFF_AGE}") -set(SO_MINOR "${LIBTIFF_AGE}") -set(SO_REVISION "${LIBTIFF_REVISION}") - -message(STATUS "Building tiff version ${LIBTIFF_MAJOR_VERSION}.${LIBTIFF_MINOR_VERSION}.${LIBTIFF_MICRO_VERSION}${LIBTIFF_ALPHA_VERSION}") -message(STATUS "libtiff library version ${SO_MAJOR}.${SO_MINOR}.${SO_REVISION}") - -set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") - -# Project version -project(tiff C) -set(VERSION "${LIBTIFF_MAJOR_VERSION}.${LIBTIFF_MINOR_VERSION}.${LIBTIFF_MICRO_VERSION}") -set(tiff_VERSION "${VERSION}") -set(tiff_VERSION_MAJOR "${LIBTIFF_MAJOR_VERSION}") -set(tiff_VERSION_MINOR "${LIBTIFF_MINOR_VERSION}") -set(tiff_VERSION_PATCH "${LIBTIFF_MICRO_VERSION}") - -# the other tiff_VERSION_* variables are set automatically -set(tiff_VERSION_ALPHA "${LIBTIFF_ALPHA_VERSION}") -# Library version (unlike libtool's baroque scheme, WYSIWYG here) -set(SO_COMPATVERSION "${SO_MAJOR}") -set(SO_VERSION "${SO_MAJOR}.${SO_MINOR}.${SO_REVISION}") - -# For autotools header compatibility -set(PACKAGE_NAME "LibTIFF Software") -set(PACKAGE_TARNAME "${PROJECT_NAME}") -set(PACKAGE_VERSION "${PROJECT_VERSION}${tiff_VERSION_ALPHA}") -set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") -set(PACKAGE_BUGREPORT "tiff@lists.maptools.org") - -include(GNUInstallDirs) -include(CheckCCompilerFlag) -include(CheckCSourceCompiles) -include(CheckIncludeFile) -include(CheckLibraryExists) -include(CheckTypeSize) -include(CheckSymbolExists) -enable_testing() - -macro(current_date var) - if(UNIX) - execute_process(COMMAND "date" +"%Y%m%d" OUTPUT_VARIABLE ${var}) - endif() -endmacro() - -current_date(RELEASE_DATE) - -macro(extra_dist) - foreach(file ${ARGV}) - file(RELATIVE_PATH relfile "${PROJECT_SOURCE_DIR}" - "${CMAKE_CURRENT_SOURCE_DIR}/${file}") - list(APPEND EXTRA_DIST "${relfile}") - endforeach() - set(EXTRA_DIST "${EXTRA_DIST}" PARENT_SCOPE) -endmacro() - -set(EXTRA_DIST - HOWTO-RELEASE - Makefile.vc - SConstruct - autogen.sh - configure.com - nmake.opt - libtiff-4.pc.in) - -# These are annoyingly verbose, produce false positives or don't work -# nicely with all supported compiler versions, so are disabled unless -# explicitly enabled. -option(extra-warnings "Enable extra compiler warnings" OFF) - -# This will cause the compiler to fail when an error occurs. -option(fatal-warnings "Compiler warnings are errors" OFF) - -# Check if the compiler supports each of the following additional -# flags, and enable them if supported. This greatly improves the -# quality of the build by checking for a number of common problems, -# some of which are quite serious. -if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR - CMAKE_C_COMPILER_ID MATCHES "Clang") - set(test_flags - -Wall - -Winline - -W - -Wformat-security - -Wpointer-arith - -Wdisabled-optimization - -Wno-unknown-pragmas - -Wdeclaration-after-statement - -fstrict-aliasing) - if(extra-warnings) - list(APPEND test_flags - -Wfloat-equal - -Wmissing-prototypes - -Wunreachable-code) - endif() - if(fatal-warnings) - list(APPEND test_flags - -Werror) - endif() -elseif(CMAKE_C_COMPILER_ID STREQUAL "MSVC") - set(test_flags) - if(extra-warnings) - list(APPEND test_flags - /W4) - else() - list(APPEND test_flags - /W3) - endif() - if (fatal-warnings) - list(APPEND test_flags - /WX) - endif() -endif() - -foreach(flag ${test_flags}) - string(REGEX REPLACE "[^A-Za-z0-9]" "_" flag_var "${flag}") - set(test_c_flag "C_FLAG${flag_var}") - CHECK_C_COMPILER_FLAG(${flag} "${test_c_flag}") - if (${test_c_flag}) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}") - endif (${test_c_flag}) -endforeach(flag ${test_flags}) - -if(MSVC) - set(CMAKE_DEBUG_POSTFIX "d") -endif() - -option(ld-version-script "Enable linker version script" ON) -# Check if LD supports linker scripts. -file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map" "VERS_1 { - global: sym; -}; - -VERS_2 { - global: sym; -} VERS_1; -") -set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) -set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/conftest.map") -check_c_source_compiles("int main(void){return 0;}" HAVE_LD_VERSION_SCRIPT) -set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) -file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map") -if (ld-version-script AND HAVE_LD_VERSION_SCRIPT) - set(HAVE_LD_VERSION_SCRIPT TRUE) -else() - set(HAVE_LD_VERSION_SCRIPT FALSE) -endif() +# Default policy is from 3.9.0 +cmake_policy(VERSION 3.9.0) -# Find libm, if available -if(NOT MINGW) - find_library(M_LIBRARY m) -endif() +# Find CMake modules in cmake/ +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake") -check_include_file(assert.h HAVE_ASSERT_H) -check_include_file(dlfcn.h HAVE_DLFCN_H) -check_include_file(fcntl.h HAVE_FCNTL_H) -check_include_file(inttypes.h HAVE_INTTYPES_H) -check_include_file(io.h HAVE_IO_H) -check_include_file(search.h HAVE_SEARCH_H) -check_include_file(stdint.h HAVE_STDINT_H) -check_include_file(string.h HAVE_STRING_H) -check_include_file(strings.h HAVE_STRINGS_H) -check_include_file(sys/time.h HAVE_SYS_TIME_H) -check_include_file(sys/types.h HAVE_SYS_TYPES_H) -check_include_file(unistd.h HAVE_UNISTD_H) - -# Inspired from /usr/share/autoconf/autoconf/c.m4 -foreach(inline_keyword "inline" "__inline__" "__inline") - if(NOT DEFINED C_INLINE) - set(CMAKE_REQUIRED_DEFINITIONS_SAVE ${CMAKE_REQUIRED_DEFINITIONS}) - set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} - "-Dinline=${inline_keyword}") - check_c_source_compiles(" - typedef int foo_t; - static inline foo_t static_foo() {return 0;} - foo_t foo(){return 0;} - int main(int argc, char *argv[]) {return 0;}" - C_HAS_${inline_keyword}) - set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS_SAVE}) - if(C_HAS_${inline_keyword}) - set(C_INLINE TRUE) - set(INLINE_KEYWORD "${inline_keyword}") - endif() - endif() -endforeach() -if(NOT DEFINED C_INLINE) - set(INLINE_KEYWORD) -endif() +# Read version information from configure.ac. +include(AutotoolsVersion) +message(STATUS "Building tiff version ${LIBTIFF_VERSION_FULL}") +message(STATUS "libtiff library version ${SO_VERSION}") +string(TIMESTAMP BUILD_DATE "%Y%m%d") +message(STATUS "libtiff build date: ${BUILD_DATE}") -# off_t and size_t checks omitted; not clear they are used at all -# Are off_t and size_t checks strictly necessary? - -# Check if sys/time.h and time.h allow use together -check_c_source_compiles(" -#include <sys/time.h> -#include <time.h> -int main(void){return 0;}" - TIME_WITH_SYS_TIME) - -# Check if struct tm is in sys/time.h -check_c_source_compiles(" -#include <sys/types.h> -#include <time.h> - -int main(void){ - struct tm tm; - int *p = &tm.tm_sec; - return !p; -}" - TM_IN_SYS_TIME) - -# Check type sizes -# NOTE: Could be replaced with C99 <stdint.h> -check_type_size("signed int" SIZEOF_SIGNED_INT) -check_type_size("unsigned int" SIZEOF_UNSIGNED_INT) -check_type_size("signed long" SIZEOF_SIGNED_LONG) -check_type_size("unsigned long" SIZEOF_UNSIGNED_LONG) -check_type_size("signed long long" SIZEOF_SIGNED_LONG_LONG) -check_type_size("unsigned long long" SIZEOF_UNSIGNED_LONG_LONG) -check_type_size("unsigned char *" SIZEOF_UNSIGNED_CHAR_P) - -set(CMAKE_EXTRA_INCLUDE_FILES_SAVE ${CMAKE_EXTRA_INCLUDE_FILES}) -set(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} "stddef.h") -check_type_size("size_t" SIZEOF_SIZE_T) -check_type_size("ptrdiff_t" SIZEOF_PTRDIFF_T) -set(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES_SAVE}) - -macro(report_values) - foreach(val ${ARGV}) - message(STATUS "${val} set to ${${val}}") - endforeach() -endmacro() - -set(TIFF_INT8_T "signed char") -set(TIFF_UINT8_T "unsigned char") - -set(TIFF_INT16_T "signed short") -set(TIFF_UINT16_T "unsigned short") - -if(SIZEOF_SIGNED_INT EQUAL 4) - set(TIFF_INT32_T "signed int") - set(TIFF_INT32_FORMAT "%d") -elseif(SIZEOF_SIGNED_LONG EQUAL 4) - set(TIFF_INT32_T "signed long") - set(TIFF_INT32_FORMAT "%ld") -endif() -if(SIZEOF_UNSIGNED_INT EQUAL 4) - set(TIFF_UINT32_T "unsigned int") - set(TIFF_UINT32_FORMAT "%u") -elseif(SIZEOF_UNSIGNED_LONG EQUAL 4) - set(TIFF_UINT32_T "unsigned long") - set(TIFF_UINT32_FORMAT "%lu") -endif() +set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") -if(SIZEOF_SIGNED_LONG EQUAL 8) - set(TIFF_INT64_T "signed long") - set(TIFF_INT64_FORMAT "%ld") -elseif(SIZEOF_SIGNED_LONG_LONG EQUAL 8) - set(TIFF_INT64_T "signed long long") - if (MINGW) - set(TIFF_INT64_FORMAT "%I64d") - else() - set(TIFF_INT64_FORMAT "%lld") - endif() -endif() -if(SIZEOF_UNSIGNED_LONG EQUAL 8) - set(TIFF_UINT64_T "unsigned long") - set(TIFF_UINT64_FORMAT "%lu") -elseif(SIZEOF_UNSIGNED_LONG_LONG EQUAL 8) - set(TIFF_UINT64_T "unsigned long long") - if (MINGW) - set(TIFF_UINT64_FORMAT "%I64u") - else() - set(TIFF_UINT64_FORMAT "%llu") - endif() -endif() +# Disable deprecated features to ensure clean build +add_definitions(-DTIFF_DISABLE_DEPRECATED) -if(SIZEOF_UNSIGNED_INT EQUAL SIZEOF_SIZE_T) - set(TIFF_SIZE_T "unsigned int") - set(TIFF_SIZE_FORMAT "%u") - set(TIFF_SSIZE_T "signed int") - set(TIFF_SSIZE_FORMAT "%d") -elseif(SIZEOF_UNSIGNED_LONG EQUAL SIZEOF_SIZE_T) - set(TIFF_SIZE_T "unsigned long") - set(TIFF_SIZE_FORMAT "%lu") - set(TIFF_SSIZE_T "signed long") - set(TIFF_SSIZE_FORMAT "%ld") -elseif(SIZEOF_UNSIGNED_LONG_LONG EQUAL SIZEOF_SIZE_T) - set(TIFF_SIZE_T "unsigned long long") - set(TIFF_SSIZE_T "signed long long") - if (MINGW) - set(TIFF_SIZE_FORMAT "%I64u") - set(TIFF_SSIZE_FORMAT "%I64d") - else() - set(TIFF_SIZE_FORMAT "%llu") - set(TIFF_SSIZE_FORMAT "%lld") - endif() -endif() -if(NOT SIZEOF_PTRDIFF_T) - set(TIFF_PTRDIFF_T "${TIFF_SSIZE_T}") - set(TIFF_PTRDIFF_FORMAT "${SSIZE_FORMAT}") -else() - set(TIFF_PTRDIFF_T "ptrdiff_t") - set(TIFF_PTRDIFF_FORMAT "%ld") -endif() +# Project definition +set(CMAKE_C_STANDARD 99) +project(tiff + VERSION "${LIBTIFF_VERSION}" + LANGUAGES C CXX) -#report_values(TIFF_INT8_T TIFF_INT8_FORMAT -# TIFF_UINT8_T TIFF_UINT8_FORMAT -# TIFF_INT16_T TIFF_INT16_FORMAT -# TIFF_UINT16_T TIFF_UINT16_FORMAT -# TIFF_INT32_T TIFF_INT32_FORMAT -# TIFF_UINT32_T TIFF_UINT32_FORMAT -# TIFF_INT64_T TIFF_INT64_FORMAT -# TIFF_UINT64_T TIFF_UINT64_FORMAT -# TIFF_SSIZE_T TIFF_SSIZE_FORMAT -# TIFF_PTRDIFF_T TIFF_PTRDIFF_FORMAT) - -check_symbol_exists(mmap "sys/mman.h" HAVE_MMAP) -check_symbol_exists(setmode "unistd.h" HAVE_SETMODE) -check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF) -check_symbol_exists(strcasecmp "strings.h" HAVE_STRCASECMP) -check_symbol_exists(strtol "stdlib.h" HAVE_STRTOL) -check_symbol_exists(strtoll "stdlib.h" HAVE_STRTOLL) -check_symbol_exists(strtoul "stdlib.h" HAVE_STRTOUL) -check_symbol_exists(strtoull "stdlib.h" HAVE_STRTOULL) -check_symbol_exists(getopt "unistd.h;stdio.h" HAVE_GETOPT) -check_symbol_exists(lfind "search.h" HAVE_LFIND) - -if(NOT HAVE_SNPRINTF) - add_definitions(-DNEED_LIBPORT) -endif() +# Autotools compatibility +include(AutotoolsCompat) -# CPU bit order -set(HOST_FILLORDER FILLORDER_MSB2LSB) -if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "i.*86.*" OR - CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "amd64.*" OR - # AMD64 on Windows - CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "AMD64" OR - CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64.*") - set(HOST_FILLORDER FILLORDER_LSB2MSB) -endif() +# Compiler checks (warning flags, etc.) +include(CompilerChecks) -# CPU endianness -include(TestBigEndian) -test_big_endian(HOST_BIG_ENDIAN) -if(HOST_BIG_ENDIAN) - add_definitions(-DWORDS_BIGENDIAN) -endif() +# Linker checks (version script, etc.) +include(LinkerChecks) -# IEEE floating point -set(HAVE_IEEEFP 1) +# Processor checks (endianness, fill order, floating point, etc.) +include(ProcessorChecks) -report_values(CMAKE_HOST_SYSTEM_PROCESSOR HOST_FILLORDER - HOST_BIG_ENDIAN HAVE_IEEEFP) +# Checks for headers +include(IncludeChecks) -# Large file support -if (UNIX OR MINGW) - # This might not catch every possibility catered for by - # AC_SYS_LARGEFILE. - add_definitions(-D_FILE_OFFSET_BITS=64) - set(FILE_OFFSET_BITS 64) -endif() +# Checks for functions and other symbols +include(SymbolChecks) +# Standard installation paths +include(GNUInstallDirs) # Documentation install directory (default to cmake project docdir) set(LIBTIFF_DOCDIR "${CMAKE_INSTALL_FULL_DOCDIR}") -# Options to enable and disable internal codecs - -option(ccitt "support for CCITT Group 3 & 4 algorithms" ON) -set(CCITT_SUPPORT ${ccitt}) - -option(packbits "support for Macintosh PackBits algorithm" ON) -set(PACKBITS_SUPPORT ${packbits}) - -option(lzw "support for LZW algorithm" ON) -set(LZW_SUPPORT ${lzw}) +# CTest testing +enable_testing() -option(thunder "support for ThunderScan 4-bit RLE algorithm" ON) -set(THUNDER_SUPPORT ${thunder}) +# Checks for type presence and size +include(TypeSizeChecks) -option(next "support for NeXT 2-bit RLE algorithm" ON) -set(NEXT_SUPPORT ${next}) +# Check for POSIX Large File Support (LFS) +include(LargeFileSupport) -option(logluv "support for LogLuv high dynamic range algorithm" ON) -set(LOGLUV_SUPPORT ${logluv}) +# Options for internal codec support +include(InternalCodecs) -# Option for Microsoft Document Imaging -option(mdi "support for Microsoft Document Imaging" ON) -set(MDI_SUPPORT ${mdi}) +# Check for Deflate codec +include(DeflateCodec) -# ZLIB -option(zlib "use zlib (required for Deflate compression)" ON) -if (zlib) - find_package(ZLIB) -endif() -set(ZLIB_SUPPORT 0) -if(ZLIB_FOUND) - set(ZLIB_SUPPORT 1) -endif() -set(ZIP_SUPPORT ${ZLIB_SUPPORT}) - - -# libdeflate -option(libdeflate "use libdeflate (optional for faster Deflate support, still requires zlib)" ON) -if (libdeflate) - set(DEFLATE_FOUND 0) - find_path(DEFLATE_INCLUDE_DIR libdeflate.h) - set(DEFLATE_NAMES ${DEFLATE_NAMES} deflate) - find_library(DEFLATE_LIBRARY NAMES ${DEFLATE_NAMES}) - if (DEFLATE_INCLUDE_DIR AND DEFLATE_LIBRARY) - set(DEFLATE_FOUND 1) - set(DEFLATE_LIBRARIES ${DEFLATE_LIBRARY}) - endif() -endif() -set(LIBDEFLATE_SUPPORT FALSE) -if(DEFLATE_FOUND) - set(LIBDEFLATE_SUPPORT TRUE) -endif() +# Check for PixarLog codec +include(PixarLogCodec) -if(LIBDEFLATE_SUPPORT AND NOT ZIP_SUPPORT) - message(WARNING "libdeflate available but zlib is not. libdeflate cannot be used") - set(LIBDEFLATE_SUPPORT FALSE) -endif() +# Check for JPEG codec +include(JPEGCodec) -set(LIBDEFLATE_SUPPORT ${LIBDEFLATE_SUPPORT}) +# Check for JBIG codec +include(JBIGCodec) +# Check for LERC codec +include(LERCCodec) -# Option for Pixar log-format algorithm +# Check for LZMA codec +include(LZMACodec) -# Pixar log format -option(pixarlog "support for Pixar log-format algorithm (requires Zlib)" ON) -set(PIXARLOG_SUPPORT FALSE) -if (ZLIB_SUPPORT) - if(pixarlog) - set(PIXARLOG_SUPPORT TRUE) - endif() -endif() +# Check for ZSTD codec +include(ZSTDCodec) -# JPEG -option(jpeg "use libjpeg (required for JPEG compression)" ON) -if (jpeg) - find_package(JPEG) -endif() -set(JPEG_SUPPORT FALSE) -if(JPEG_FOUND) - set(JPEG_SUPPORT TRUE) -endif() +# Check for WebP codec +include(WebPCodec) -option(old-jpeg "support for Old JPEG compression (read-only)" ON) -set(OJPEG_SUPPORT FALSE) -if (JPEG_SUPPORT) - if (old-jpeg) - set(OJPEG_SUPPORT TRUE) - endif() -endif() +# Option for C++ libtiffxx library +include(CXXLibrary) -# JBIG-KIT -option(jbig "use ISO JBIG compression (requires JBIT-KIT library)" ON) -if (jbig) - set(JBIG_FOUND 0) - find_path(JBIG_INCLUDE_DIR jbig.h) - set(JBIG_NAMES ${JBIG_NAMES} jbig libjbig) - find_library(JBIG_LIBRARY NAMES ${JBIG_NAMES}) - if (JBIG_INCLUDE_DIR AND JBIG_LIBRARY) - set(JBIG_FOUND 1) - set(JBIG_LIBRARIES ${JBIG_LIBRARY}) - endif() -endif() -set(JBIG_SUPPORT 0) -if(JBIG_FOUND) - set(JBIG_FOUND TRUE) - set(JBIG_SUPPORT 1) -else() - set(JBIG_FOUND FALSE) -endif() +# Checks for OpenGL support +include(OpenGLChecks) -set(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES}) -set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${JBIG_INCLUDE_DIR}) -check_symbol_exists(jbg_newlen "jbig.h" HAVE_JBG_NEWLEN) -set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE}) - -# liblzma2 -option(lzma "use liblzma (required for LZMA2 compression)" ON) -if (lzma) - find_package(LibLZMA) -endif() -set(LZMA_SUPPORT 0) -if(LIBLZMA_FOUND) - set(LZMA_SUPPORT 1) -endif() - -# libzstd -option(zstd "use libzstd (required for ZSTD compression)" ON) -if (zstd) - find_path(ZSTD_INCLUDE_DIR zstd.h) - find_library(ZSTD_LIBRARY NAMES zstd) - if (ZSTD_INCLUDE_DIR AND ZSTD_LIBRARY) - check_library_exists ("${ZSTD_LIBRARY}" ZSTD_decompressStream "" ZSTD_RECENT_ENOUGH) - if (ZSTD_RECENT_ENOUGH) - set(ZSTD_FOUND TRUE) - set(ZSTD_LIBRARIES ${ZSTD_LIBRARY}) - message(STATUS "Found ZSTD library: ${ZSTD_LIBRARY}") - else () - message(WARNING "Found ZSTD library, but not recent enough. Use zstd >= 1.0") - endif () - endif () -endif() -set(ZSTD_SUPPORT 0) -if(ZSTD_FOUND) - set(ZSTD_SUPPORT 1) -endif() - -# libwebp -option(webp "use libwebp (required for WEBP compression)" ON) -if (webp) - find_path(WEBP_INCLUDE_DIR /webp/decode.h) - find_library(WEBP_LIBRARY NAMES webp) -endif() -set(WEBP_SUPPORT 0) -set(WEBP_FOUND FALSE) -if (WEBP_INCLUDE_DIR AND WEBP_LIBRARY) - set(WEBP_SUPPORT 1) - set(WEBP_FOUND TRUE) - set(WEBP_LIBRARIES ${WEBP_LIBRARY}) - message(STATUS "Found WEBP library: ${WEBP_LIBRARY}") -endif() - -# 8/12-bit jpeg mode -option(jpeg12 "enable libjpeg 8/12-bit dual mode (requires separate -12-bit libjpeg build)" ON) -set(JPEG12_INCLUDE_DIR JPEG12_INCLUDE_DIR-NOTFOUND CACHE PATH "Include directory for 12-bit libjpeg") -set(JPEG12_LIBRARY JPEG12_LIBRARY-NOTFOUND CACHE FILEPATH "12-bit libjpeg library") -set(JPEG12_FOUND FALSE) -if (JPEG12_INCLUDE_DIR AND JPEG12_LIBRARY) - set(JPEG12_LIBRARIES ${JPEG12_LIBRARY}) - set(JPEG12_FOUND TRUE) -endif() -if (JPEG12_FOUND) - set(JPEG_DUAL_MODE_8_12 1) - set(LIBJPEG_12_PATH "${JPEG12_INCLUDE_DIR}/jpeglib.h") -endif() - -# C++ support -option(cxx "Enable C++ stream API building (requires C++ compiler)" ON) -set(CXX_SUPPORT FALSE) -if (cxx) - enable_language(CXX) - set(CXX_SUPPORT TRUE) -endif() - -# OpenGL and GLUT -find_package(OpenGL) -find_package(GLUT) -set(HAVE_OPENGL FALSE) -if(OPENGL_FOUND AND OPENGL_GLU_FOUND AND GLUT_FOUND) - set(HAVE_OPENGL TRUE) -endif() -# Purely to satisfy the generated headers: -check_include_file(GL/gl.h HAVE_GL_GL_H) -check_include_file(GL/glu.h HAVE_GL_GLU_H) -check_include_file(GL/glut.h HAVE_GL_GLUT_H) -check_include_file(GLUT/glut.h HAVE_GLUT_GLUT_H) -check_include_file(OpenGL/gl.h HAVE_OPENGL_GL_H) -check_include_file(OpenGL/glu.h HAVE_OPENGL_GLU_H) - -# Win32 IO -set(win32_io FALSE) -if(WIN32) - set(win32_io TRUE) -endif() - -set(USE_WIN32_FILEIO ${win32_io}) +# Windows support +include(WindowsSupport) # Orthogonal features +include(LibraryFeatures) -# Strip chopping -option(strip-chopping "strip chopping (whether or not to convert single-strip uncompressed images to mutiple strips of specified size to reduce memory usage)" ON) -set(TIFF_DEFAULT_STRIP_SIZE 8192 CACHE STRING "default size of the strip in bytes (when strip chopping is enabled)") - -set(STRIPCHOP_DEFAULT) -if(strip-chopping) - set(STRIPCHOP_DEFAULT TRUE) - if(TIFF_DEFAULT_STRIP_SIZE) - set(STRIP_SIZE_DEFAULT "${TIFF_DEFAULT_STRIP_SIZE}") - endif() -endif() - -# Defer loading of strip/tile offsets -option(defer-strile-load "enable deferred strip/tile offset/size loading (also available at runtime with the 'D' flag of TIFFOpen())" OFF) -set(DEFER_STRILE_LOAD ${defer-strile-load}) - -# CHUNKY_STRIP_READ_SUPPORT -option(chunky-strip-read "enable reading large strips in chunks for TIFFReadScanline() (experimental)" OFF) -set(CHUNKY_STRIP_READ_SUPPORT ${chunky-strip-read}) +# pkg-config support +include(PkgConfig) -# SUBIFD support -set(SUBIFD_SUPPORT 1) +# math.h/libm portability +find_package(CMath REQUIRED) -# Default handling of ASSOCALPHA support. -option(extrasample-as-alpha "the RGBA interface will treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA. Many packages produce RGBA files but don't mark the alpha properly" ON) -if(extrasample-as-alpha) - set(DEFAULT_EXTRASAMPLE_AS_ALPHA 1) -endif() +# Release support +include(Release) -# Default handling of YCbCr subsampling support. -# See Bug 168 in Bugzilla, and JPEGFixupTestSubsampling() for details. -option(check-ycbcr-subsampling "enable picking up YCbCr subsampling info from the JPEG data stream to support files lacking the tag" ON) -if (check-ycbcr-subsampling) - set(CHECK_JPEG_YCBCR_SUBSAMPLING 1) -endif() - -# Generate pkg-config file -set(prefix "${CMAKE_INSTALL_PREFIX}") -set(exec_prefix "${CMAKE_INSTALL_PREFIX}") -set(libdir "${CMAKE_INSTALL_FULL_LIBDIR}") -set(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}") -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libtiff-4.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/libtiff-4.pc) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libtiff-4.pc - DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig") - -# Includes used by libtiff (and tests) -if(ZLIB_INCLUDE_DIRS) - list(APPEND TIFF_INCLUDES ${ZLIB_INCLUDE_DIRS}) -endif() -if(DEFLATE_INCLUDE_DIR) - list(APPEND TIFF_INCLUDES ${DEFLATE_INCLUDE_DIR}) -endif() -if(JPEG_INCLUDE_DIR) - list(APPEND TIFF_INCLUDES ${JPEG_INCLUDE_DIR}) -endif() -if(JPEG12_INCLUDE_DIR) - list(APPEND TIFF_INCLUDES ${JPEG12_INCLUDE_DIR}) -endif() -if(JBIG_INCLUDE_DIR) - list(APPEND TIFF_INCLUDES ${JBIG_INCLUDE_DIR}) -endif() -if(LIBLZMA_INCLUDE_DIRS) - list(APPEND TIFF_INCLUDES ${LIBLZMA_INCLUDE_DIRS}) -endif() -if(ZSTD_INCLUDE_DIR) - list(APPEND TIFF_INCLUDES ${ZSTD_INCLUDE_DIR}) -endif() -if(WEBP_INCLUDE_DIR) - list(APPEND TIFF_INCLUDES ${WEBP_INCLUDE_DIR}) -endif() - -# Libraries required by libtiff -set(TIFF_LIBRARY_DEPS) -if(NOT MINGW AND M_LIBRARY) - list(APPEND TIFF_LIBRARY_DEPS "m") -endif() -if(ZLIB_LIBRARIES) - list(APPEND TIFF_LIBRARY_DEPS ${ZLIB_LIBRARIES}) -endif() -if(DEFLATE_LIBRARIES) - list(APPEND TIFF_LIBRARY_DEPS ${DEFLATE_LIBRARIES}) -endif() -if(JPEG_LIBRARIES) - list(APPEND TIFF_LIBRARY_DEPS ${JPEG_LIBRARIES}) -endif() -if(JPEG12_LIBRARIES) - list(APPEND TIFF_LIBRARY_DEPS ${JPEG12_LIBRARIES}) -endif() -if(JBIG_LIBRARIES) - list(APPEND TIFF_LIBRARY_DEPS ${JBIG_LIBRARIES}) -endif() -if(LIBLZMA_LIBRARIES) - list(APPEND TIFF_LIBRARY_DEPS ${LIBLZMA_LIBRARIES}) -endif() -if(ZSTD_LIBRARIES) - list(APPEND TIFF_LIBRARY_DEPS ${ZSTD_LIBRARIES}) -endif() -if(WEBP_LIBRARIES) - list(APPEND TIFF_LIBRARY_DEPS ${WEBP_LIBRARIES}) -endif() - -#report_values(TIFF_INCLUDES TIFF_LIBRARY_DEPS) # Process subdirectories add_subdirectory(port) @@ -746,10 +144,9 @@ add_subdirectory(build) add_subdirectory(man) add_subdirectory(html) -#message(STATUS "EXTRA_DIST: ${EXTRA_DIST}") message(STATUS "") -message(STATUS "Libtiff is now configured for ${host}") +message(STATUS "Libtiff is now configured for ${CMAKE_SYSTEM}") message(STATUS "") message(STATUS " Installation directory: ${prefix}") message(STATUS " Documentation directory: ${LIBTIFF_DOCDIR}") @@ -769,16 +166,29 @@ message(STATUS " NeXT 2-bit RLE algorithm: ${next}") message(STATUS " LogLuv high dynamic range encoding: ${logluv}") message(STATUS "") message(STATUS " Support for external codecs:") -message(STATUS " ZLIB support: ${zlib} (requested) ${ZLIB_FOUND} (availability)") -message(STATUS " libdeflate support: ${libdeflate} (requested) ${LIBDEFLATE_SUPPORT} (availability)") -message(STATUS " Pixar log-format algorithm: ${pixarlog} (requested) ${PIXARLOG_SUPPORT} (availability)") -message(STATUS " JPEG support: ${jpeg} (requested) ${JPEG_FOUND} (availability)") -message(STATUS " Old JPEG support: ${old-jpeg} (requested) ${JPEG_FOUND} (availability)") -message(STATUS " JPEG 8/12 bit dual mode: ${jpeg12} (requested) ${JPEG12_FOUND} (availability)") -message(STATUS " ISO JBIG support: ${jbig} (requested) ${JBIG_FOUND} (availability)") -message(STATUS " LZMA2 support: ${lzma} (requested) ${LIBLZMA_FOUND} (availability)") -message(STATUS " ZSTD support: ${zstd} (requested) ${ZSTD_FOUND} (availability)") -message(STATUS " WEBP support: ${webp} (requested) ${WEBP_FOUND} (availability)") +message(STATUS " ZLIB support: Requested:${zlib} Availability:${ZLIB_FOUND} Support:${ZLIB_SUPPORT}") +if(ZLIB_SUPPORT) + message(STATUS " libdeflate support: Requested:${libdeflate} Availability:${DEFLATE_FOUND} Support:${LIBDEFLATE_SUPPORT}") +else() + message(STATUS " libdeflate support: Requested:${libdeflate} Availability:${DEFLATE_FOUND} Support:${LIBDEFLATE_SUPPORT} (Depends on ZLIB Support)") +endif() +if(ZLIB_SUPPORT) + message(STATUS " Pixar log-format algorithm: Requested:${pixarlog} Availability:${ZLIB_FOUND} Support:${PIXARLOG_SUPPORT}") +else() + message(STATUS " Pixar log-format algorithm: Requested:${pixarlog} Availability:${ZLIB_FOUND} Support:${PIXARLOG_SUPPORT} (Depends on ZLIB Support)") +endif() +message(STATUS " JPEG support: Requested:${jpeg} Availability:${JPEG_FOUND} Support:${JPEG_SUPPORT}") +if(JPEG_SUPPORT) + message(STATUS " Old JPEG support: Requested:${old-jpeg} Availability:${JPEG_SUPPORT} Support:${OJPEG_SUPPORT}") +else() + message(STATUS " Old JPEG support: Requested:${old-jpeg} Availability:${JPEG_SUPPORT} Support:${OJPEG_SUPPORT} (Depends on JPEG Support)") +endif() +message(STATUS " JPEG 8/12 bit dual mode: Requested:${jpeg12} Availability:${JPEG12_FOUND} Support:${JPEG_DUAL_MODE_8_12}") +message(STATUS " ISO JBIG support: Requested:${jbig} Availability:${JBIG_FOUND} Support:${JBIG_SUPPORT}") +message(STATUS " LERC support: Requested:${lerc} Availability:${LERC_FOUND} Support:${LERC_SUPPORT}") +message(STATUS " LZMA2 support: Requested:${lzma} Availability:${LIBLZMA_FOUND} Support:${LZMA_SUPPORT}") +message(STATUS " ZSTD support: Requested:${zstd} Availability:${ZSTD_USABLE} Support:${ZSTD_SUPPORT}") +message(STATUS " WEBP support: Requested:${webp} Availability:${WEBP_FOUND} Support:${WEBP_SUPPORT}") message(STATUS "") message(STATUS " C++ support: ${cxx} (requested) ${CXX_SUPPORT} (availability)") message(STATUS "") |