15b90af24SBob Friesenhahn# CMake build for libtiff 25b90af24SBob Friesenhahn# Run "cmake" to generate the build files for your platform 35b90af24SBob Friesenhahn# 45b90af24SBob Friesenhahn# Copyright © 2015 Open Microscopy Environment / University of Dundee 55b90af24SBob Friesenhahn# Written by Roger Leigh <[email protected]> 65b90af24SBob Friesenhahn# 75b90af24SBob Friesenhahn# Permission to use, copy, modify, distribute, and sell this software and 85b90af24SBob Friesenhahn# its documentation for any purpose is hereby granted without fee, provided 95b90af24SBob Friesenhahn# that (i) the above copyright notices and this permission notice appear in 105b90af24SBob Friesenhahn# all copies of the software and related documentation, and (ii) the names of 115b90af24SBob Friesenhahn# Sam Leffler and Silicon Graphics may not be used in any advertising or 125b90af24SBob Friesenhahn# publicity relating to the software without the specific, prior written 135b90af24SBob Friesenhahn# permission of Sam Leffler and Silicon Graphics. 145b90af24SBob Friesenhahn# 155b90af24SBob Friesenhahn# THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 165b90af24SBob Friesenhahn# EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 175b90af24SBob Friesenhahn# WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 185b90af24SBob Friesenhahn# 195b90af24SBob Friesenhahn# IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR 205b90af24SBob Friesenhahn# ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, 215b90af24SBob Friesenhahn# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 225b90af24SBob Friesenhahn# WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 235b90af24SBob Friesenhahn# LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 245b90af24SBob Friesenhahn# OF THIS SOFTWARE. 255b90af24SBob Friesenhahn 26*e762ba3dSBob Friesenhahncmake_minimum_required(VERSION 2.8.9) 275b90af24SBob Friesenhahn 28*e762ba3dSBob Friesenhahn# Default policy is from 2.8.9 29*e762ba3dSBob Friesenhahncmake_policy(VERSION 2.8.9) 305b90af24SBob Friesenhahn# Set MacOSX @rpath usage globally. 315b90af24SBob Friesenhahnif (POLICY CMP0020) 325b90af24SBob Friesenhahn cmake_policy(SET CMP0020 NEW) 335b90af24SBob Friesenhahnendif(POLICY CMP0020) 345b90af24SBob Friesenhahnif (POLICY CMP0042) 355b90af24SBob Friesenhahn cmake_policy(SET CMP0042 NEW) 365b90af24SBob Friesenhahnendif(POLICY CMP0042) 375b90af24SBob Friesenhahn# Use new variable expansion policy. 385b90af24SBob Friesenhahnif (POLICY CMP0053) 395b90af24SBob Friesenhahn cmake_policy(SET CMP0053 NEW) 405b90af24SBob Friesenhahnendif(POLICY CMP0053) 415b90af24SBob Friesenhahnif (POLICY CMP0054) 425b90af24SBob Friesenhahn cmake_policy(SET CMP0054 NEW) 435b90af24SBob Friesenhahnendif(POLICY CMP0054) 445b90af24SBob Friesenhahn 45ba57d5f0SBob Friesenhahn# Read version information from configure.ac. 46ba57d5f0SBob FriesenhahnFILE(READ "${CMAKE_CURRENT_SOURCE_DIR}/configure.ac" configure) 47ba57d5f0SBob FriesenhahnSTRING(REGEX REPLACE ";" "\\\\;" configure "${configure}") 48ba57d5f0SBob FriesenhahnSTRING(REGEX REPLACE "\n" ";" configure "${configure}") 49ba57d5f0SBob Friesenhahnforeach(line ${configure}) 50ba57d5f0SBob Friesenhahn foreach(var LIBTIFF_MAJOR_VERSION LIBTIFF_MINOR_VERSION LIBTIFF_MICRO_VERSION LIBTIFF_ALPHA_VERSION 51ba57d5f0SBob Friesenhahn LIBTIFF_CURRENT LIBTIFF_REVISION LIBTIFF_AGE) 52ba57d5f0SBob Friesenhahn if(NOT ${var}) 53ba57d5f0SBob Friesenhahn string(REGEX MATCH "^${var}=(.*)" ${var}_MATCH "${line}") 54ba57d5f0SBob Friesenhahn if(${var}_MATCH) 55ba57d5f0SBob Friesenhahn string(REGEX REPLACE "^${var}=(.*)" "\\1" ${var} "${line}") 56ba57d5f0SBob Friesenhahn endif() 57ba57d5f0SBob Friesenhahn endif() 58ba57d5f0SBob Friesenhahn endforeach() 59ba57d5f0SBob Friesenhahnendforeach() 60ba57d5f0SBob Friesenhahn 61ba57d5f0SBob Friesenhahnmath(EXPR SO_MAJOR "${LIBTIFF_CURRENT} - ${LIBTIFF_AGE}") 62ba57d5f0SBob Friesenhahnset(SO_MINOR "${LIBTIFF_AGE}") 63ba57d5f0SBob Friesenhahnset(SO_REVISION "${LIBTIFF_REVISION}") 64ba57d5f0SBob Friesenhahn 65ba57d5f0SBob Friesenhahnmessage(STATUS "Building tiff version ${LIBTIFF_MAJOR_VERSION}.${LIBTIFF_MINOR_VERSION}.${LIBTIFF_MICRO_VERSION}${LIBTIFF_ALPHA_VERSION}") 66ba57d5f0SBob Friesenhahnmessage(STATUS "libtiff library version ${SO_MAJOR}.${SO_MINOR}.${SO_REVISION}") 67ba57d5f0SBob Friesenhahn 68ba57d5f0SBob Friesenhahnset(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") 69ba57d5f0SBob Friesenhahn 705b90af24SBob Friesenhahn# Project version 71*e762ba3dSBob Friesenhahnproject(tiff C) 72*e762ba3dSBob Friesenhahnset(VERSION "${LIBTIFF_MAJOR_VERSION}.${LIBTIFF_MINOR_VERSION}.${LIBTIFF_MICRO_VERSION}") 73*e762ba3dSBob Friesenhahnset(tiff_VERSION "${VERSION}") 74*e762ba3dSBob Friesenhahnset(tiff_VERSION_MAJOR "${LIBTIFF_MAJOR_VERSION}") 75*e762ba3dSBob Friesenhahnset(tiff_VERSION_MINOR "${LIBTIFF_MINOR_VERSION}") 76*e762ba3dSBob Friesenhahnset(tiff_VERSION_PATCH "${LIBTIFF_MICRO_VERSION}") 77*e762ba3dSBob Friesenhahn 785b90af24SBob Friesenhahn# the other tiff_VERSION_* variables are set automatically 79ba57d5f0SBob Friesenhahnset(tiff_VERSION_ALPHA "${LIBTIFF_ALPHA_VERSION}") 805b90af24SBob Friesenhahn# Library version (unlike libtool's baroque scheme, WYSIWYG here) 81ba57d5f0SBob Friesenhahnset(SO_COMPATVERSION "${SO_MAJOR}") 82ba57d5f0SBob Friesenhahnset(SO_VERSION "${SO_MAJOR}.${SO_MINOR}.${SO_REVISION}") 835b90af24SBob Friesenhahn 845b90af24SBob Friesenhahn# For autotools header compatibility 855b90af24SBob Friesenhahnset(PACKAGE_NAME "LibTIFF Software") 865b90af24SBob Friesenhahnset(PACKAGE_TARNAME "${PROJECT_NAME}") 875b90af24SBob Friesenhahnset(PACKAGE_VERSION "${PROJECT_VERSION}${tiff_VERSION_ALPHA}") 885b90af24SBob Friesenhahnset(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") 895b90af24SBob Friesenhahnset(PACKAGE_BUGREPORT "[email protected]") 905b90af24SBob Friesenhahn 915b90af24SBob Friesenhahninclude(GNUInstallDirs) 9280dc16cfSBob Friesenhahninclude(CheckCCompilerFlag) 935b90af24SBob Friesenhahninclude(CheckCSourceCompiles) 945b90af24SBob Friesenhahninclude(CheckIncludeFile) 955b90af24SBob Friesenhahninclude(CheckTypeSize) 965b90af24SBob Friesenhahninclude(CheckFunctionExists) 975b90af24SBob Friesenhahnenable_testing() 985b90af24SBob Friesenhahn 995b90af24SBob Friesenhahnmacro(current_date var) 1005b90af24SBob Friesenhahn if(UNIX) 1015b90af24SBob Friesenhahn execute_process(COMMAND "date" +"%Y%m%d" OUTPUT_VARIABLE ${var}) 1025b90af24SBob Friesenhahn endif() 1035b90af24SBob Friesenhahnendmacro() 1045b90af24SBob Friesenhahn 1055b90af24SBob Friesenhahncurrent_date(RELEASE_DATE) 1065b90af24SBob Friesenhahn 1075b90af24SBob Friesenhahnmacro(extra_dist) 1085b90af24SBob Friesenhahn foreach(file ${ARGV}) 1095b90af24SBob Friesenhahn file(RELATIVE_PATH relfile "${PROJECT_SOURCE_DIR}" 1105b90af24SBob Friesenhahn "${CMAKE_CURRENT_SOURCE_DIR}/${file}") 1115b90af24SBob Friesenhahn list(APPEND EXTRA_DIST "${relfile}") 1125b90af24SBob Friesenhahn endforeach() 1135b90af24SBob Friesenhahn set(EXTRA_DIST "${EXTRA_DIST}" PARENT_SCOPE) 1145b90af24SBob Friesenhahnendmacro() 1155b90af24SBob Friesenhahn 1165b90af24SBob Friesenhahnset(EXTRA_DIST 1175b90af24SBob Friesenhahn HOWTO-RELEASE 1185b90af24SBob Friesenhahn Makefile.vc 1195b90af24SBob Friesenhahn SConstruct 1205b90af24SBob Friesenhahn autogen.sh 1215b90af24SBob Friesenhahn configure.com 1225b90af24SBob Friesenhahn nmake.opt 1235b90af24SBob Friesenhahn libtiff-4.pc.in) 1245b90af24SBob Friesenhahn 12580dc16cfSBob Friesenhahn# These are annoyingly verbose, produce false positives or don't work 12680dc16cfSBob Friesenhahn# nicely with all supported compiler versions, so are disabled unless 12780dc16cfSBob Friesenhahn# explicitly enabled. 12880dc16cfSBob Friesenhahnoption(extra-warnings "Enable extra compiler warnings" OFF) 12980dc16cfSBob Friesenhahn 13080dc16cfSBob Friesenhahn# This will cause the compiler to fail when an error occurs. 13180dc16cfSBob Friesenhahnoption(fatal-warnings "Compiler warnings are errors" OFF) 13280dc16cfSBob Friesenhahn 13380dc16cfSBob Friesenhahn# Check if the compiler supports each of the following additional 13480dc16cfSBob Friesenhahn# flags, and enable them if supported. This greatly improves the 13580dc16cfSBob Friesenhahn# quality of the build by checking for a number of common problems, 13680dc16cfSBob Friesenhahn# some of which are quite serious. 13780dc16cfSBob Friesenhahnif(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR 13880dc16cfSBob Friesenhahn CMAKE_C_COMPILER_ID MATCHES "Clang") 13980dc16cfSBob Friesenhahn set(test_flags 14080dc16cfSBob Friesenhahn -Wall 14180dc16cfSBob Friesenhahn -Winline 14280dc16cfSBob Friesenhahn -W 14380dc16cfSBob Friesenhahn -Wformat-security 14480dc16cfSBob Friesenhahn -Wpointer-arith 14580dc16cfSBob Friesenhahn -Wdisabled-optimization 14680dc16cfSBob Friesenhahn -Wno-unknown-pragmas 14780dc16cfSBob Friesenhahn -Wdeclaration-after-statement 14880dc16cfSBob Friesenhahn -fstrict-aliasing) 14980dc16cfSBob Friesenhahn if(extra-warnings) 15080dc16cfSBob Friesenhahn list(APPEND test_flags 15180dc16cfSBob Friesenhahn -Wfloat-equal 15280dc16cfSBob Friesenhahn -Wmissing-prototypes 15380dc16cfSBob Friesenhahn -Wunreachable-code) 15480dc16cfSBob Friesenhahn endif() 15580dc16cfSBob Friesenhahn if(fatal-warnings) 15680dc16cfSBob Friesenhahn list(APPEND test_flags 15780dc16cfSBob Friesenhahn -Werror) 15880dc16cfSBob Friesenhahn endif() 15980dc16cfSBob Friesenhahnelseif(CMAKE_C_COMPILER_ID STREQUAL "MSVC") 16080dc16cfSBob Friesenhahn set(test_flags) 16180dc16cfSBob Friesenhahn if(extra-warnings) 16280dc16cfSBob Friesenhahn list(APPEND test_flags 16380dc16cfSBob Friesenhahn /W4) 16480dc16cfSBob Friesenhahn else() 16580dc16cfSBob Friesenhahn list(APPEND test_flags 16680dc16cfSBob Friesenhahn /W3) 16780dc16cfSBob Friesenhahn endif() 16880dc16cfSBob Friesenhahn if (fatal-warnings) 16980dc16cfSBob Friesenhahn list(APPEND test_flags 17080dc16cfSBob Friesenhahn /WX) 17180dc16cfSBob Friesenhahn endif() 17280dc16cfSBob Friesenhahnendif() 17380dc16cfSBob Friesenhahn 17480dc16cfSBob Friesenhahnforeach(flag ${test_flags}) 17580dc16cfSBob Friesenhahn string(REGEX REPLACE "[^A-Za-z0-9]" "_" flag_var "${flag}") 17680dc16cfSBob Friesenhahn set(test_c_flag "C_FLAG${flag_var}") 17780dc16cfSBob Friesenhahn CHECK_C_COMPILER_FLAG(${flag} "${test_c_flag}") 17880dc16cfSBob Friesenhahn if (${test_c_flag}) 17980dc16cfSBob Friesenhahn set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}") 18080dc16cfSBob Friesenhahn endif (${test_c_flag}) 18180dc16cfSBob Friesenhahnendforeach(flag ${test_flags}) 18280dc16cfSBob Friesenhahn 18380dc16cfSBob Friesenhahnif(MSVC) 18480dc16cfSBob Friesenhahn set(CMAKE_DEBUG_POSTFIX "d") 18580dc16cfSBob Friesenhahnendif() 18680dc16cfSBob Friesenhahn 187bcf0cb43SBob Friesenhahnoption(ld-version-script "Enable linker version script" ON) 1885b90af24SBob Friesenhahn# Check if LD supports linker scripts. 1895b90af24SBob Friesenhahnfile(WRITE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map" "VERS_1 { 1905b90af24SBob Friesenhahn global: sym; 1915b90af24SBob Friesenhahn}; 1925b90af24SBob Friesenhahn 1935b90af24SBob FriesenhahnVERS_2 { 1945b90af24SBob Friesenhahn global: sym; 1955b90af24SBob Friesenhahn} VERS_1; 1965b90af24SBob Friesenhahn") 1975b90af24SBob Friesenhahnset(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) 1985b90af24SBob Friesenhahnset(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS} "-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/conftest.map") 1995b90af24SBob Friesenhahncheck_c_source_compiles("int main(void){return 0;}" HAVE_LD_VERSION_SCRIPT) 2005b90af24SBob Friesenhahnset(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) 2015b90af24SBob Friesenhahnfile(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/conftest.map") 202bcf0cb43SBob Friesenhahnif (ld-version-script AND HAVE_LD_VERSION_SCRIPT) 2035b90af24SBob Friesenhahn set(HAVE_LD_VERSION_SCRIPT TRUE) 2045b90af24SBob Friesenhahnelse() 2055b90af24SBob Friesenhahn set(HAVE_LD_VERSION_SCRIPT FALSE) 2065b90af24SBob Friesenhahnendif() 2075b90af24SBob Friesenhahn 2085b90af24SBob Friesenhahn# Find libm, if available 2095b90af24SBob Friesenhahnfind_library(M_LIBRARY m) 2105b90af24SBob Friesenhahn 2115b90af24SBob Friesenhahncheck_include_file(assert.h HAVE_ASSERT_H) 2125b90af24SBob Friesenhahncheck_include_file(dlfcn.h HAVE_DLFCN_H) 2135b90af24SBob Friesenhahncheck_include_file(fcntl.h HAVE_FCNTL_H) 2145b90af24SBob Friesenhahncheck_include_file(inttypes.h HAVE_INTTYPES_H) 2155b90af24SBob Friesenhahncheck_include_file(io.h HAVE_IO_H) 2165b90af24SBob Friesenhahncheck_include_file(limits.h HAVE_LIMITS_H) 2175b90af24SBob Friesenhahncheck_include_file(malloc.h HAVE_MALLOC_H) 2185b90af24SBob Friesenhahncheck_include_file(memory.h HAVE_MEMORY_H) 2195b90af24SBob Friesenhahncheck_include_file(search.h HAVE_SEARCH_H) 2205b90af24SBob Friesenhahncheck_include_file(stdint.h HAVE_STDINT_H) 2215b90af24SBob Friesenhahncheck_include_file(string.h HAVE_STRING_H) 2225b90af24SBob Friesenhahncheck_include_file(strings.h HAVE_STRINGS_H) 2235b90af24SBob Friesenhahncheck_include_file(sys/time.h HAVE_SYS_TIME_H) 2245b90af24SBob Friesenhahncheck_include_file(sys/types.h HAVE_SYS_TYPES_H) 2255b90af24SBob Friesenhahncheck_include_file(unistd.h HAVE_UNISTD_H) 2265b90af24SBob Friesenhahn 2275b90af24SBob Friesenhahn# Inspired from /usr/share/autoconf/autoconf/c.m4 2285b90af24SBob Friesenhahnforeach(inline_keyword "inline" "__inline__" "__inline") 2295b90af24SBob Friesenhahn if(NOT DEFINED C_INLINE) 2305b90af24SBob Friesenhahn set(CMAKE_REQUIRED_DEFINITIONS_SAVE ${CMAKE_REQUIRED_DEFINITIONS}) 2315b90af24SBob Friesenhahn set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} 2325b90af24SBob Friesenhahn "-Dinline=${inline_keyword}") 2335b90af24SBob Friesenhahn check_c_source_compiles(" 2345b90af24SBob Friesenhahn typedef int foo_t; 2355b90af24SBob Friesenhahn static inline foo_t static_foo() {return 0;} 2365b90af24SBob Friesenhahn foo_t foo(){return 0;} 2375b90af24SBob Friesenhahn int main(int argc, char *argv[]) {return 0;}" 2385b90af24SBob Friesenhahn C_HAS_${inline_keyword}) 2395b90af24SBob Friesenhahn set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS_SAVE}) 2405b90af24SBob Friesenhahn if(C_HAS_${inline_keyword}) 2415b90af24SBob Friesenhahn set(C_INLINE TRUE) 2425b90af24SBob Friesenhahn set(INLINE_KEYWORD "${inline_keyword}") 2435b90af24SBob Friesenhahn endif() 2445b90af24SBob Friesenhahn endif() 2455b90af24SBob Friesenhahnendforeach() 2465b90af24SBob Friesenhahnif(NOT DEFINED C_INLINE) 2475b90af24SBob Friesenhahn set(INLINE_KEYWORD) 2485b90af24SBob Friesenhahnendif() 2495b90af24SBob Friesenhahn 2505b90af24SBob Friesenhahn# off_t and size_t checks omitted; not clear they are used at all 2515b90af24SBob Friesenhahn# Are off_t and size_t checks strictly necessary? 2525b90af24SBob Friesenhahn 2535b90af24SBob Friesenhahn# Check if sys/time.h and time.h allow use together 2545b90af24SBob Friesenhahncheck_c_source_compiles(" 2555b90af24SBob Friesenhahn#include <sys/time.h> 2565b90af24SBob Friesenhahn#include <time.h> 2575b90af24SBob Friesenhahnint main(void){return 0;}" 2585b90af24SBob Friesenhahn TIME_WITH_SYS_TIME) 2595b90af24SBob Friesenhahn 2605b90af24SBob Friesenhahn# Check if struct tm is in sys/time.h 2615b90af24SBob Friesenhahncheck_c_source_compiles(" 2625b90af24SBob Friesenhahn#include <sys/types.h> 2635b90af24SBob Friesenhahn#include <time.h> 2645b90af24SBob Friesenhahn 2655b90af24SBob Friesenhahnint main(void){ 2665b90af24SBob Friesenhahn struct tm tm; 2675b90af24SBob Friesenhahn int *p = &tm.tm_sec; 2685b90af24SBob Friesenhahn return !p; 2695b90af24SBob Friesenhahn}" 2705b90af24SBob Friesenhahn TM_IN_SYS_TIME) 2715b90af24SBob Friesenhahn 2725b90af24SBob Friesenhahn# Check type sizes 2735b90af24SBob Friesenhahn# NOTE: Could be replaced with C99 <stdint.h> 2745b90af24SBob Friesenhahncheck_type_size("signed short" SIZEOF_SIGNED_SHORT) 2755b90af24SBob Friesenhahncheck_type_size("unsigned short" SIZEOF_UNSIGNED_SHORT) 2765b90af24SBob Friesenhahncheck_type_size("signed int" SIZEOF_SIGNED_INT) 2775b90af24SBob Friesenhahncheck_type_size("unsigned int" SIZEOF_UNSIGNED_INT) 2785b90af24SBob Friesenhahncheck_type_size("signed long" SIZEOF_SIGNED_LONG) 2795b90af24SBob Friesenhahncheck_type_size("unsigned long" SIZEOF_UNSIGNED_LONG) 2805b90af24SBob Friesenhahncheck_type_size("signed long long" SIZEOF_SIGNED_LONG_LONG) 2815b90af24SBob Friesenhahncheck_type_size("unsigned long long" SIZEOF_UNSIGNED_LONG_LONG) 2825b90af24SBob Friesenhahncheck_type_size("unsigned char *" SIZEOF_UNSIGNED_CHAR_P) 2835b90af24SBob Friesenhahn 2845b90af24SBob Friesenhahnset(CMAKE_EXTRA_INCLUDE_FILES_SAVE ${CMAKE_EXTRA_INCLUDE_FILES}) 2855b90af24SBob Friesenhahnset(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} "stddef.h") 2865b90af24SBob Friesenhahncheck_type_size("size_t" SIZEOF_SIZE_T) 2875b90af24SBob Friesenhahncheck_type_size("ptrdiff_t" SIZEOF_PTRDIFF_T) 2885b90af24SBob Friesenhahnset(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES_SAVE}) 2895b90af24SBob Friesenhahn 2905b90af24SBob Friesenhahnmacro(report_values) 2915b90af24SBob Friesenhahn foreach(val ${ARGV}) 2925b90af24SBob Friesenhahn message(STATUS "${val} set to ${${val}}") 2935b90af24SBob Friesenhahn endforeach() 2945b90af24SBob Friesenhahnendmacro() 2955b90af24SBob Friesenhahn 2965b90af24SBob Friesenhahnset(TIFF_INT8_T "signed char") 2975b90af24SBob Friesenhahnset(TIFF_UINT8_T "unsigned char") 2985b90af24SBob Friesenhahn 2995b90af24SBob Friesenhahnset(TIFF_INT16_T "signed short") 3005b90af24SBob Friesenhahnset(TIFF_UINT16_T "unsigned short") 3015b90af24SBob Friesenhahn 3025b90af24SBob Friesenhahnif(SIZEOF_SIGNED_INT EQUAL 4) 3035b90af24SBob Friesenhahn set(TIFF_INT32_T "signed int") 3045b90af24SBob Friesenhahn set(TIFF_INT32_FORMAT "%d") 3055b90af24SBob Friesenhahnelseif(SIZEOF_SIGNED_LONG EQUAL 4) 3065b90af24SBob Friesenhahn set(TIFF_INT32_T "signed long") 3075b90af24SBob Friesenhahn set(TIFF_INT32_FORMAT "%ld") 3085b90af24SBob Friesenhahnendif() 3095b90af24SBob Friesenhahn 3105b90af24SBob Friesenhahnif(SIZEOF_UNSIGNED_INT EQUAL 4) 3115b90af24SBob Friesenhahn set(TIFF_UINT32_T "unsigned int") 3125b90af24SBob Friesenhahn set(TIFF_UINT32_FORMAT "%u") 3135b90af24SBob Friesenhahnelseif(SIZEOF_UNSIGNED_LONG EQUAL 4) 3145b90af24SBob Friesenhahn set(TIFF_UINT32_T "unsigned long") 3155b90af24SBob Friesenhahn set(TIFF_UINT32_FORMAT "%lu") 3165b90af24SBob Friesenhahnendif() 3175b90af24SBob Friesenhahn 3185b90af24SBob Friesenhahnif(SIZEOF_SIGNED_LONG EQUAL 8) 3195b90af24SBob Friesenhahn set(TIFF_INT64_T "signed long") 3205b90af24SBob Friesenhahn set(TIFF_INT64_FORMAT "%ld") 3215b90af24SBob Friesenhahnelseif(SIZEOF_SIGNED_LONG_LONG EQUAL 8) 3225b90af24SBob Friesenhahn set(TIFF_INT64_T "signed long long") 3235b90af24SBob Friesenhahn if (MINGW) 3245b90af24SBob Friesenhahn set(TIFF_INT64_FORMAT "%I64d") 3255b90af24SBob Friesenhahn else() 3265b90af24SBob Friesenhahn set(TIFF_INT64_FORMAT "%lld") 3275b90af24SBob Friesenhahn endif() 3285b90af24SBob Friesenhahnendif() 3295b90af24SBob Friesenhahn 3305b90af24SBob Friesenhahnif(SIZEOF_UNSIGNED_LONG EQUAL 8) 3315b90af24SBob Friesenhahn set(TIFF_UINT64_T "unsigned long") 3325b90af24SBob Friesenhahn set(TIFF_UINT64_FORMAT "%lu") 3335b90af24SBob Friesenhahnelseif(SIZEOF_UNSIGNED_LONG_LONG EQUAL 8) 3345b90af24SBob Friesenhahn set(TIFF_UINT64_T "unsigned long long") 3355b90af24SBob Friesenhahn if (MINGW) 3365b90af24SBob Friesenhahn set(TIFF_UINT64_FORMAT "%I64u") 3375b90af24SBob Friesenhahn else() 3385b90af24SBob Friesenhahn set(TIFF_UINT64_FORMAT "%llu") 3395b90af24SBob Friesenhahn endif() 3405b90af24SBob Friesenhahnendif() 3415b90af24SBob Friesenhahn 3425b90af24SBob Friesenhahnif(SIZEOF_UNSIGNED_INT EQUAL SIZEOF_SIZE_T) 3435b90af24SBob Friesenhahn set(TIFF_SIZE_T "unsigned int") 3445b90af24SBob Friesenhahn set(TIFF_SIZE_FORMAT "%u") 3455b90af24SBob Friesenhahnelseif(SIZEOF_UNSIGNED_LONG EQUAL SIZEOF_SIZE_T) 3465b90af24SBob Friesenhahn set(TIFF_SIZE_T "unsigned long") 3475b90af24SBob Friesenhahn set(TIFF_SIZE_FORMAT "%lu") 3485b90af24SBob Friesenhahnelseif(SIZEOF_UNSIGNED_LONG_LONG EQUAL SIZEOF_SIZE_T) 3495b90af24SBob Friesenhahn set(TIFF_SIZE_T "unsigned long") 3505b90af24SBob Friesenhahn if (MINGW) 3515b90af24SBob Friesenhahn set(TIFF_SIZE_FORMAT "%I64u") 3525b90af24SBob Friesenhahn else() 3535b90af24SBob Friesenhahn set(TIFF_SIZE_FORMAT "%llu") 3545b90af24SBob Friesenhahn endif() 3555b90af24SBob Friesenhahnendif() 3565b90af24SBob Friesenhahn 3575b90af24SBob Friesenhahnif(SIZEOF_SIGNED_INT EQUAL SIZEOF_UNSIGNED_CHAR_P) 3585b90af24SBob Friesenhahn set(TIFF_SSIZE_T "signed int") 3595b90af24SBob Friesenhahn set(TIFF_SSIZE_FORMAT "%d") 3605b90af24SBob Friesenhahnelseif(SIZEOF_SIGNED_LONG EQUAL SIZEOF_UNSIGNED_CHAR_P) 3615b90af24SBob Friesenhahn set(TIFF_SSIZE_T "signed long") 3625b90af24SBob Friesenhahn set(TIFF_SSIZE_FORMAT "%ld") 3635b90af24SBob Friesenhahnelseif(SIZEOF_SIGNED_LONG_LONG EQUAL SIZEOF_UNSIGNED_CHAR_P) 3645b90af24SBob Friesenhahn set(TIFF_SSIZE_T "signed long long") 3655b90af24SBob Friesenhahn if (MINGW) 3665b90af24SBob Friesenhahn set(TIFF_SSIZE_FORMAT "%I64d") 3675b90af24SBob Friesenhahn else() 3685b90af24SBob Friesenhahn set(TIFF_SSIZE_FORMAT "%lld") 3695b90af24SBob Friesenhahn endif() 3705b90af24SBob Friesenhahnendif() 3715b90af24SBob Friesenhahn 3725b90af24SBob Friesenhahnif(NOT SIZEOF_PTRDIFF_T) 3735b90af24SBob Friesenhahn set(TIFF_PTRDIFF_T "${TIFF_SSIZE_T}") 3745b90af24SBob Friesenhahn set(TIFF_PTRDIFF_FORMAT "${SSIZE_FORMAT}") 3755b90af24SBob Friesenhahnelse() 3765b90af24SBob Friesenhahn set(TIFF_PTRDIFF_T "ptrdiff_t") 3775b90af24SBob Friesenhahn set(TIFF_PTRDIFF_FORMAT "%ld") 3785b90af24SBob Friesenhahnendif() 3795b90af24SBob Friesenhahn 3805b90af24SBob Friesenhahn#report_values(TIFF_INT8_T TIFF_INT8_FORMAT 3815b90af24SBob Friesenhahn# TIFF_UINT8_T TIFF_UINT8_FORMAT 3825b90af24SBob Friesenhahn# TIFF_INT16_T TIFF_INT16_FORMAT 3835b90af24SBob Friesenhahn# TIFF_UINT16_T TIFF_UINT16_FORMAT 3845b90af24SBob Friesenhahn# TIFF_INT32_T TIFF_INT32_FORMAT 3855b90af24SBob Friesenhahn# TIFF_UINT32_T TIFF_UINT32_FORMAT 3865b90af24SBob Friesenhahn# TIFF_INT64_T TIFF_INT64_FORMAT 3875b90af24SBob Friesenhahn# TIFF_UINT64_T TIFF_UINT64_FORMAT 3885b90af24SBob Friesenhahn# TIFF_SSIZE_T TIFF_SSIZE_FORMAT 3895b90af24SBob Friesenhahn# TIFF_PTRDIFF_T TIFF_PTRDIFF_FORMAT) 3905b90af24SBob Friesenhahn 3915b90af24SBob Friesenhahn# Nonstandard int types 3925b90af24SBob Friesenhahncheck_type_size(INT8 int8) 3935b90af24SBob Friesenhahnset(HAVE_INT8 ${INT8}) 3945b90af24SBob Friesenhahncheck_type_size(INT16 int16) 3955b90af24SBob Friesenhahnset(HAVE_INT16 ${INT16}) 3965b90af24SBob Friesenhahncheck_type_size(INT32 int32) 3975b90af24SBob Friesenhahnset(HAVE_INT32 ${INT32}) 3985b90af24SBob Friesenhahn 3995b90af24SBob Friesenhahn# Check functions 4005b90af24SBob Friesenhahnset(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES}) 4015b90af24SBob Friesenhahnset(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${M_LIBRARY}) 4025b90af24SBob Friesenhahncheck_function_exists(floor HAVE_FLOOR) 4035b90af24SBob Friesenhahncheck_function_exists(pow HAVE_POW) 4045b90af24SBob Friesenhahncheck_function_exists(sqrt HAVE_SQRT) 4055b90af24SBob Friesenhahnset(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE}) 4065b90af24SBob Friesenhahn 4075b90af24SBob Friesenhahncheck_function_exists(isascii HAVE_ISASCII) 4085b90af24SBob Friesenhahncheck_function_exists(memmove HAVE_MEMMOVE) 4095b90af24SBob Friesenhahncheck_function_exists(memset HAVE_MEMSET) 4105b90af24SBob Friesenhahncheck_function_exists(mmap HAVE_MMAP) 4115b90af24SBob Friesenhahncheck_function_exists(setmode HAVE_SETMODE) 4125b90af24SBob Friesenhahncheck_function_exists(strcasecmp HAVE_STRCASECMP) 4135b90af24SBob Friesenhahncheck_function_exists(strchr HAVE_STRCHR) 4145b90af24SBob Friesenhahncheck_function_exists(strrchr HAVE_STRRCHR) 4155b90af24SBob Friesenhahncheck_function_exists(strstr HAVE_STRSTR) 4165b90af24SBob Friesenhahncheck_function_exists(strtol HAVE_STRTOL) 4175b90af24SBob Friesenhahncheck_function_exists(strtol HAVE_STRTOUL) 4185b90af24SBob Friesenhahncheck_function_exists(strtoull HAVE_STRTOULL) 4195b90af24SBob Friesenhahncheck_function_exists(getopt HAVE_GETOPT) 4205b90af24SBob Friesenhahncheck_function_exists(lfind HAVE_LFIND) 4215b90af24SBob Friesenhahn 42280dc16cfSBob Friesenhahn# May be inlined, so check it compiles: 42380dc16cfSBob Friesenhahncheck_c_source_compiles(" 42480dc16cfSBob Friesenhahn#include <stdio.h> 42580dc16cfSBob Friesenhahnint main(void) { 42680dc16cfSBob Friesenhahn char buf[10]; 42780dc16cfSBob Friesenhahn snprintf(buf, 10, \"Test %d\", 1); 42880dc16cfSBob Friesenhahn return 0; 42980dc16cfSBob Friesenhahn}" 43080dc16cfSBob Friesenhahn HAVE_SNPRINTF) 4315b90af24SBob Friesenhahn 432c65c7020SBob Friesenhahnif(NOT HAVE_SNPRINTF) 433c65c7020SBob Friesenhahn add_definitions(-DNEED_LIBPORT) 434c65c7020SBob Friesenhahnendif() 435c65c7020SBob Friesenhahn 4365b90af24SBob Friesenhahn# CPU bit order 4375b90af24SBob Friesenhahnset(fillorder FILLORDER_MSB2LSB) 4385b90af24SBob Friesenhahnif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "i.*86.*" OR 4395b90af24SBob Friesenhahn CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "amd64.*" OR 4405b90af24SBob Friesenhahn CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64.*") 4415b90af24SBob Friesenhahn set(fillorder FILLORDER_LSB2MSB) 4425b90af24SBob Friesenhahnendif() 4435b90af24SBob Friesenhahnset(HOST_FILLORDER ${fillorder} CACHE STRING "Native CPU bit order") 4445b90af24SBob Friesenhahnmark_as_advanced(HOST_FILLORDER) 4455b90af24SBob Friesenhahn 4465b90af24SBob Friesenhahn# CPU endianness 4475b90af24SBob Friesenhahninclude(TestBigEndian) 4485b90af24SBob Friesenhahntest_big_endian(bigendian) 4495b90af24SBob Friesenhahnif (bigendian) 4505b90af24SBob Friesenhahn set(bigendian ON) 4515b90af24SBob Friesenhahnelse() 4525b90af24SBob Friesenhahn set(bigendian OFF) 4535b90af24SBob Friesenhahnendif() 4545b90af24SBob Friesenhahnset(HOST_BIG_ENDIAN ${bigendian} CACHE STRING "Native CPU bit order") 4555b90af24SBob Friesenhahnmark_as_advanced(HOST_BIG_ENDIAN) 4565b90af24SBob Friesenhahnif (HOST_BIG_ENDIAN) 4575b90af24SBob Friesenhahn set(HOST_BIG_ENDIAN 1) 4585b90af24SBob Friesenhahnelse() 4595b90af24SBob Friesenhahn set(HOST_BIG_ENDIAN 0) 4605b90af24SBob Friesenhahnendif() 4615b90af24SBob Friesenhahn 4625b90af24SBob Friesenhahn# IEEE floating point 4635b90af24SBob Friesenhahnset(HAVE_IEEEFP 1 CACHE STRING "IEEE floating point is available") 4645b90af24SBob Friesenhahnmark_as_advanced(HAVE_IEEEFP) 4655b90af24SBob Friesenhahn 4665b90af24SBob Friesenhahnreport_values(CMAKE_HOST_SYSTEM_PROCESSOR HOST_FILLORDER 4675b90af24SBob Friesenhahn HOST_BIG_ENDIAN HAVE_IEEEFP) 4685b90af24SBob Friesenhahn 4695b90af24SBob Friesenhahn# Large file support 4705b90af24SBob Friesenhahnif (UNIX) 4715b90af24SBob Friesenhahn # This might not catch every possibility catered for by 4725b90af24SBob Friesenhahn # AC_SYS_LARGEFILE. 4735b90af24SBob Friesenhahn add_definitions(-D_FILE_OFFSET_BITS=64) 4745b90af24SBob Friesenhahn set(FILE_OFFSET_BITS 64) 4755b90af24SBob Friesenhahnendif() 4765b90af24SBob Friesenhahn 4775b90af24SBob Friesenhahn# Documentation install directory (default to cmake project docdir) 4785b90af24SBob Friesenhahnset(LIBTIFF_DOCDIR "${CMAKE_INSTALL_FULL_DOCDIR}") 4795b90af24SBob Friesenhahn 4805b90af24SBob Friesenhahn# Options to enable and disable internal codecs 4815b90af24SBob Friesenhahn 4825b90af24SBob Friesenhahnoption(ccitt "support for CCITT Group 3 & 4 algorithms" ON) 4835b90af24SBob Friesenhahnset(CCITT_SUPPORT ${ccitt}) 4845b90af24SBob Friesenhahn 4855b90af24SBob Friesenhahnoption(packbits "support for Macintosh PackBits algorithm" ON) 4865b90af24SBob Friesenhahnset(PACKBITS_SUPPORT ${packbits}) 4875b90af24SBob Friesenhahn 4885b90af24SBob Friesenhahnoption(lzw "support for LZW algorithm" ON) 4895b90af24SBob Friesenhahnset(LZW_SUPPORT ${lzw}) 4905b90af24SBob Friesenhahn 4915b90af24SBob Friesenhahnoption(thunder "support for ThunderScan 4-bit RLE algorithm" ON) 4925b90af24SBob Friesenhahnset(THUNDER_SUPPORT ${thunder}) 4935b90af24SBob Friesenhahn 4945b90af24SBob Friesenhahnoption(next "support for NeXT 2-bit RLE algorithm" ON) 4955b90af24SBob Friesenhahnset(NEXT_SUPPORT ${next}) 4965b90af24SBob Friesenhahn 4975b90af24SBob Friesenhahnoption(logluv "support for LogLuv high dynamic range algorithm" ON) 4985b90af24SBob Friesenhahnset(LOGLUV_SUPPORT ${logluv}) 4995b90af24SBob Friesenhahn 5005b90af24SBob Friesenhahn# Option for Microsoft Document Imaging 5015b90af24SBob Friesenhahnoption(mdi "support for Microsoft Document Imaging" ON) 5025b90af24SBob Friesenhahnset(MDI_SUPPORT ${mdi}) 5035b90af24SBob Friesenhahn 5045b90af24SBob Friesenhahn# ZLIB 5055b90af24SBob Friesenhahnoption(zlib "use zlib (required for Deflate compression)" ON) 5065b90af24SBob Friesenhahnif (zlib) 5075b90af24SBob Friesenhahn find_package(ZLIB) 5085b90af24SBob Friesenhahnendif() 5095b90af24SBob Friesenhahnset(ZLIB_SUPPORT 0) 5105b90af24SBob Friesenhahnif(ZLIB_FOUND) 5115b90af24SBob Friesenhahn set(ZLIB_SUPPORT 1) 5125b90af24SBob Friesenhahnendif() 5135b90af24SBob Friesenhahnset(ZIP_SUPPORT ${ZLIB_SUPPORT}) 5145b90af24SBob Friesenhahn# Option for Pixar log-format algorithm 5155b90af24SBob Friesenhahn 5165b90af24SBob Friesenhahn# Pixar log format 5175b90af24SBob Friesenhahnoption(pixarlog "support for Pixar log-format algorithm (requires Zlib)" ON) 5185b90af24SBob Friesenhahnset(PIXARLOG_SUPPORT FALSE) 5195b90af24SBob Friesenhahnif (ZLIB_SUPPORT) 5205b90af24SBob Friesenhahn if(pixarlog) 5215b90af24SBob Friesenhahn set(PIXARLOG_SUPPORT TRUE) 5225b90af24SBob Friesenhahn endif() 5235b90af24SBob Friesenhahnendif() 5245b90af24SBob Friesenhahn 5255b90af24SBob Friesenhahn# JPEG 5265b90af24SBob Friesenhahnoption(jpeg "use libjpeg (required for JPEG compression)" ON) 5275b90af24SBob Friesenhahnif (jpeg) 5285b90af24SBob Friesenhahn find_package(JPEG) 5295b90af24SBob Friesenhahnendif() 5305b90af24SBob Friesenhahnset(JPEG_SUPPORT FALSE) 5315b90af24SBob Friesenhahnif(JPEG_FOUND) 5325b90af24SBob Friesenhahn set(JPEG_SUPPORT TRUE) 5335b90af24SBob Friesenhahnendif() 5345b90af24SBob Friesenhahn 5355b90af24SBob Friesenhahnoption(old-jpeg "support for Old JPEG compression (read-only)" ON) 5365b90af24SBob Friesenhahnset(OJPEG_SUPPORT FALSE) 5375b90af24SBob Friesenhahnif (JPEG_SUPPORT) 5385b90af24SBob Friesenhahn if (old-jpeg) 5395b90af24SBob Friesenhahn set(OJPEG_SUPPORT TRUE) 5405b90af24SBob Friesenhahn endif() 5415b90af24SBob Friesenhahnendif() 5425b90af24SBob Friesenhahn 5435b90af24SBob Friesenhahn# JBIG-KIT 5445b90af24SBob Friesenhahnoption(jbig "use ISO JBIG compression (requires JBIT-KIT library)" ON) 5455b90af24SBob Friesenhahnif (jbig) 5465b90af24SBob Friesenhahn set(JBIG_FOUND 0) 5475b90af24SBob Friesenhahn find_path(JBIG_INCLUDE_DIR jbig.h) 5485b90af24SBob Friesenhahn set(JBIG_NAMES ${JBIG_NAMES} jbig libjbig) 5495b90af24SBob Friesenhahn find_library(JBIG_LIBRARY NAMES ${JBIG_NAMES}) 5505b90af24SBob Friesenhahn if (JBIG_INCLUDE_DIR AND JBIG_LIBRARY) 5515b90af24SBob Friesenhahn set(JBIG_FOUND 1) 5525b90af24SBob Friesenhahn set(JBIG_LIBRARIES ${JBIG_LIBRARY}) 5535b90af24SBob Friesenhahn endif() 5545b90af24SBob Friesenhahnendif() 5555b90af24SBob Friesenhahnset(JBIG_SUPPORT 0) 5565b90af24SBob Friesenhahnif(JBIG_FOUND) 5575b90af24SBob Friesenhahn set(JBIG_FOUND TRUE) 5585b90af24SBob Friesenhahn set(JBIG_SUPPORT 1) 5595b90af24SBob Friesenhahnelse() 5605b90af24SBob Friesenhahn set(JBIG_FOUND FALSE) 5615b90af24SBob Friesenhahnendif() 5625b90af24SBob Friesenhahn 5635b90af24SBob Friesenhahnset(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES}) 5645b90af24SBob Friesenhahnset(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES}) 5655b90af24SBob Friesenhahnset(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${JBIG_INCLUDE_DIR}) 5665b90af24SBob Friesenhahnset(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${JBIG_LIBRARY}) 5675b90af24SBob Friesenhahncheck_function_exists(jbg_newlen HAVE_JBG_NEWLEN) 5685b90af24SBob Friesenhahnset(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE}) 5695b90af24SBob Friesenhahnset(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE}) 5705b90af24SBob Friesenhahn 5715b90af24SBob Friesenhahn# liblzma2 5725b90af24SBob Friesenhahnoption(lzma "use liblzma (required for LZMA2 compression)" ON) 5735b90af24SBob Friesenhahnif (lzma) 5745b90af24SBob Friesenhahn find_package(LibLZMA) 5755b90af24SBob Friesenhahnendif() 5765b90af24SBob Friesenhahnset(LZMA_SUPPORT 0) 5775b90af24SBob Friesenhahnif(LIBLZMA_FOUND) 5785b90af24SBob Friesenhahn set(LZMA_SUPPORT 1) 5795b90af24SBob Friesenhahnendif() 5805b90af24SBob Friesenhahn 5815b90af24SBob Friesenhahn# 8/12-bit jpeg mode 5825b90af24SBob Friesenhahnoption(jpeg12 "enable libjpeg 8/12-bit dual mode (requires separate 5835b90af24SBob Friesenhahn12-bit libjpeg build)" ON) 5845b90af24SBob Friesenhahnset(JPEG12_INCLUDE_DIR JPEG12_INCLUDE_DIR-NOTFOUND CACHE PATH "Include directory for 12-bit libjpeg") 5855b90af24SBob Friesenhahnset(JPEG12_LIBRARY JPEG12_LIBRARY-NOTFOUND CACHE FILEPATH "12-bit libjpeg library") 5865b90af24SBob Friesenhahnset(JPEG12_FOUND FALSE) 5875b90af24SBob Friesenhahnif (JPEG12_INCLUDE_DIR AND JPEG12_LIBRARY) 5885b90af24SBob Friesenhahn set(JPEG12_LIBRARIES ${JPEG12_LIBRARY}) 5895b90af24SBob Friesenhahn set(JPEG12_FOUND TRUE) 5905b90af24SBob Friesenhahnendif() 5915b90af24SBob Friesenhahnif (JPEG12_FOUND) 5925b90af24SBob Friesenhahn set(JPEG_DUAL_MODE_8_12 1) 5935b90af24SBob Friesenhahn set(LIBJPEG_12_PATH "${JPEG12_INCLUDE_DIR}/jpeglib.h") 5945b90af24SBob Friesenhahnendif() 5955b90af24SBob Friesenhahn 5965b90af24SBob Friesenhahn# C++ support 5975b90af24SBob Friesenhahnoption(cxx "Enable C++ stream API building (requires C++ compiler)" ON) 5985b90af24SBob Friesenhahnset(CXX_SUPPORT FALSE) 5995b90af24SBob Friesenhahnif (cxx) 6005b90af24SBob Friesenhahn enable_language(CXX) 6015b90af24SBob Friesenhahn set(CXX_SUPPORT TRUE) 6025b90af24SBob Friesenhahnendif() 6035b90af24SBob Friesenhahn 6045b90af24SBob Friesenhahn# OpenGL and GLUT 6055b90af24SBob Friesenhahnfind_package(OpenGL) 6065b90af24SBob Friesenhahnfind_package(GLUT) 6075b90af24SBob Friesenhahnset(HAVE_OPENGL FALSE) 6085b90af24SBob Friesenhahnif(OPENGL_FOUND AND OPENGL_GLU_FOUND AND GLUT_FOUND) 6095b90af24SBob Friesenhahn set(HAVE_OPENGL TRUE) 6105b90af24SBob Friesenhahnendif() 6115b90af24SBob Friesenhahn# Purely to satisfy the generated headers: 6125b90af24SBob Friesenhahncheck_include_file(GL/gl.h HAVE_GL_GL_H) 6135b90af24SBob Friesenhahncheck_include_file(GL/glu.h HAVE_GL_GLU_H) 6145b90af24SBob Friesenhahncheck_include_file(GL/glut.h HAVE_GL_GLUT_H) 6155b90af24SBob Friesenhahncheck_include_file(GLUT/glut.h HAVE_GLUT_GLUT_H) 6165b90af24SBob Friesenhahncheck_include_file(OpenGL/gl.h HAVE_OPENGL_GL_H) 6175b90af24SBob Friesenhahncheck_include_file(OpenGL/glu.h HAVE_OPENGL_GLU_H) 6185b90af24SBob Friesenhahn 6195b90af24SBob Friesenhahn# Win32 IO 6205b90af24SBob Friesenhahnset(win32_io FALSE) 6215b90af24SBob Friesenhahnif(WIN32) 6225b90af24SBob Friesenhahn set(win32_io TRUE) 6235b90af24SBob Friesenhahnendif() 6245b90af24SBob Friesenhahnset(USE_WIN32_FILEIO ${win32_io} CACHE BOOL "Use win32 IO system (Microsoft Windows only)") 6255b90af24SBob Friesenhahnif (USE_WIN32_FILEIO) 6265b90af24SBob Friesenhahn set(USE_WIN32_FILEIO TRUE) 6275b90af24SBob Friesenhahnelse() 6285b90af24SBob Friesenhahn set(USE_WIN32_FILEIO FALSE) 6295b90af24SBob Friesenhahnendif() 6305b90af24SBob Friesenhahn 6315b90af24SBob Friesenhahn# Orthogonal features 6325b90af24SBob Friesenhahn 6335b90af24SBob Friesenhahn# Strip chopping 6345b90af24SBob Friesenhahnoption(strip-chopping "strip chopping (whether or not to convert single-strip uncompressed images to mutiple strips of specified size to reduce memory usage)" ON) 6355b90af24SBob Friesenhahnset(TIFF_DEFAULT_STRIP_SIZE 8192 CACHE STRING "default size of the strip in bytes (when strip chopping is enabled)") 6365b90af24SBob Friesenhahn 6375b90af24SBob Friesenhahnset(STRIPCHOP_DEFAULT) 6385b90af24SBob Friesenhahnif(strip-chopping) 6395b90af24SBob Friesenhahn set(STRIPCHOP_DEFAULT TRUE) 6405b90af24SBob Friesenhahn if(TIFF_DEFAULT_STRIP_SIZE) 6415b90af24SBob Friesenhahn set(STRIP_SIZE_DEFAULT "${TIFF_DEFAULT_STRIP_SIZE}") 6425b90af24SBob Friesenhahn endif() 6435b90af24SBob Friesenhahnendif() 6445b90af24SBob Friesenhahn 6455b90af24SBob Friesenhahn# Defer loading of strip/tile offsets 6465b90af24SBob Friesenhahnoption(defer-strile-load "enable deferred strip/tile offset/size loading (experimental)" OFF) 6475b90af24SBob Friesenhahnset(DEFER_STRILE_LOAD ${defer-strile-load}) 6485b90af24SBob Friesenhahn 6495b90af24SBob Friesenhahn# CHUNKY_STRIP_READ_SUPPORT 6505b90af24SBob Friesenhahnoption(chunky-strip-read "enable reading large strips in chunks for TIFFReadScanline() (experimental)" OFF) 6515b90af24SBob Friesenhahnset(CHUNKY_STRIP_READ_SUPPORT ${chunky-strip-read}) 6525b90af24SBob Friesenhahn 6535b90af24SBob Friesenhahn# SUBIFD support 6545b90af24SBob Friesenhahnset(SUBIFD_SUPPORT 1) 6555b90af24SBob Friesenhahn 6565b90af24SBob Friesenhahn# Default handling of ASSOCALPHA support. 6575b90af24SBob Friesenhahnoption(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) 6585b90af24SBob Friesenhahnif(extrasample-as-alpha) 6595b90af24SBob Friesenhahn set(DEFAULT_EXTRASAMPLE_AS_ALPHA 1) 6605b90af24SBob Friesenhahnendif() 6615b90af24SBob Friesenhahn 6625b90af24SBob Friesenhahn# Default handling of YCbCr subsampling support. 6635b90af24SBob Friesenhahn# See Bug 168 in Bugzilla, and JPEGFixupTestSubsampling() for details. 6645b90af24SBob Friesenhahnoption(check-ycbcr-subsampling "enable picking up YCbCr subsampling info from the JPEG data stream to support files lacking the tag" ON) 6655b90af24SBob Friesenhahnif (check-ycbcr-subsampling) 6665b90af24SBob Friesenhahn set(CHECK_JPEG_YCBCR_SUBSAMPLING 1) 6675b90af24SBob Friesenhahnendif() 6685b90af24SBob Friesenhahn 6695b90af24SBob Friesenhahn# Generate pkg-config file 6705b90af24SBob Friesenhahnset(prefix "${CMAKE_INSTALL_PREFIX}") 6715b90af24SBob Friesenhahnset(exec_prefix "${CMAKE_INSTALL_PREFIX}") 6725b90af24SBob Friesenhahnset(libdir "${CMAKE_INSTALL_FULL_LIBDIR}") 6735b90af24SBob Friesenhahnset(includedir "${CMAKE_INSTALL_FULL_INCLUDEDIR}") 6745b90af24SBob Friesenhahnconfigure_file(${CMAKE_CURRENT_SOURCE_DIR}/libtiff-4.pc.in 6755b90af24SBob Friesenhahn ${CMAKE_CURRENT_BINARY_DIR}/libtiff-4.pc) 6765b90af24SBob Friesenhahninstall(FILES ${CMAKE_CURRENT_BINARY_DIR}/libtiff-4.pc 6775b90af24SBob Friesenhahn DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/pkgconfig") 6785b90af24SBob Friesenhahn 6795b90af24SBob Friesenhahn# Includes used by libtiff (and tests) 6805b90af24SBob Friesenhahnif(ZLIB_INCLUDE_DIRS) 6815b90af24SBob Friesenhahn list(APPEND TIFF_INCLUDES ${ZLIB_INCLUDE_DIRS}) 6825b90af24SBob Friesenhahnendif() 6835b90af24SBob Friesenhahnif(JPEG_INCLUDE_DIR) 6845b90af24SBob Friesenhahn list(APPEND TIFF_INCLUDES ${JPEG_INCLUDE_DIR}) 6855b90af24SBob Friesenhahnendif() 6865b90af24SBob Friesenhahnif(JPEG12_INCLUDE_DIR) 6875b90af24SBob Friesenhahn list(APPEND TIFF_INCLUDES ${JPEG12_INCLUDE_DIR}) 6885b90af24SBob Friesenhahnendif() 6895b90af24SBob Friesenhahnif(JBIG_INCLUDE_DIR) 6905b90af24SBob Friesenhahn list(APPEND TIFF_INCLUDES ${JBIG_INCLUDE_DIR}) 6915b90af24SBob Friesenhahnendif() 6925b90af24SBob Friesenhahnif(LIBLZMA_INCLUDE_DIRS) 6935b90af24SBob Friesenhahn list(APPEND TIFF_INCLUDES ${LIBLZMA_INCLUDE_DIRS}) 6945b90af24SBob Friesenhahnendif() 6955b90af24SBob Friesenhahn 6965b90af24SBob Friesenhahn# Libraries required by libtiff 6975b90af24SBob Friesenhahnset(TIFF_LIBRARY_DEPS) 6985b90af24SBob Friesenhahnif(M_LIBRARY) 6995b90af24SBob Friesenhahn list(APPEND TIFF_LIBRARY_DEPS ${M_LIBRARY}) 7005b90af24SBob Friesenhahnendif() 7015b90af24SBob Friesenhahnif(ZLIB_LIBRARIES) 7025b90af24SBob Friesenhahn list(APPEND TIFF_LIBRARY_DEPS ${ZLIB_LIBRARIES}) 7035b90af24SBob Friesenhahnendif() 7045b90af24SBob Friesenhahnif(JPEG_LIBRARIES) 7055b90af24SBob Friesenhahn list(APPEND TIFF_LIBRARY_DEPS ${JPEG_LIBRARIES}) 7065b90af24SBob Friesenhahnendif() 7075b90af24SBob Friesenhahnif(JPEG12_LIBRARIES) 7085b90af24SBob Friesenhahn list(APPEND TIFF_LIBRARY_DEPS ${JPEG12_LIBRARIES}) 7095b90af24SBob Friesenhahnendif() 7105b90af24SBob Friesenhahnif(JBIG_LIBRARIES) 7115b90af24SBob Friesenhahn list(APPEND TIFF_LIBRARY_DEPS ${JBIG_LIBRARIES}) 7125b90af24SBob Friesenhahnendif() 7135b90af24SBob Friesenhahnif(LIBLZMA_LIBRARIES) 7145b90af24SBob Friesenhahn list(APPEND TIFF_LIBRARY_DEPS ${LIBLZMA_LIBRARIES}) 7155b90af24SBob Friesenhahnendif() 7165b90af24SBob Friesenhahn 7175b90af24SBob Friesenhahn#report_values(TIFF_INCLUDES TIFF_LIBRARY_DEPS) 7185b90af24SBob Friesenhahn 7195b90af24SBob Friesenhahn# Process subdirectories 7205b90af24SBob Friesenhahnadd_subdirectory(port) 7215b90af24SBob Friesenhahnadd_subdirectory(libtiff) 7225b90af24SBob Friesenhahnadd_subdirectory(tools) 7235b90af24SBob Friesenhahnadd_subdirectory(test) 7245b90af24SBob Friesenhahnadd_subdirectory(contrib) 7255b90af24SBob Friesenhahnadd_subdirectory(build) 7265b90af24SBob Friesenhahnadd_subdirectory(man) 7275b90af24SBob Friesenhahnadd_subdirectory(html) 7285b90af24SBob Friesenhahn 7295b90af24SBob Friesenhahn#message(STATUS "EXTRA_DIST: ${EXTRA_DIST}") 7305b90af24SBob Friesenhahn 7315b90af24SBob Friesenhahnmessage(STATUS "") 7325b90af24SBob Friesenhahnmessage(STATUS "Libtiff is now configured for ${host}") 7335b90af24SBob Friesenhahnmessage(STATUS "") 7345b90af24SBob Friesenhahnmessage(STATUS " Installation directory: ${prefix}") 7355b90af24SBob Friesenhahnmessage(STATUS " Documentation directory: ${LIBTIFF_DOCDIR}") 7365b90af24SBob Friesenhahnmessage(STATUS " C compiler: ${CMAKE_C_COMPILER}") 7375b90af24SBob Friesenhahnmessage(STATUS " C++ compiler: ${CMAKE_CXX_COMPILER}") 738ba57d5f0SBob Friesenhahnmessage(STATUS " Build shared libraries: ${BUILD_SHARED_LIBS}") 7395b90af24SBob Friesenhahnmessage(STATUS " Enable linker symbol versioning: ${HAVE_LD_VERSION_SCRIPT}") 7405b90af24SBob Friesenhahnmessage(STATUS " Support Microsoft Document Imaging: ${mdi}") 7415b90af24SBob Friesenhahnmessage(STATUS " Use win32 IO: ${USE_WIN32_FILEIO}") 7425b90af24SBob Friesenhahnmessage(STATUS "") 7435b90af24SBob Friesenhahnmessage(STATUS " Support for internal codecs:") 7445b90af24SBob Friesenhahnmessage(STATUS " CCITT Group 3 & 4 algorithms: ${ccitt}") 7455b90af24SBob Friesenhahnmessage(STATUS " Macintosh PackBits algorithm: ${packbits}") 7465b90af24SBob Friesenhahnmessage(STATUS " LZW algorithm: ${lzw}") 7475b90af24SBob Friesenhahnmessage(STATUS " ThunderScan 4-bit RLE algorithm: ${thunder}") 7485b90af24SBob Friesenhahnmessage(STATUS " NeXT 2-bit RLE algorithm: ${next}") 7495b90af24SBob Friesenhahnmessage(STATUS " LogLuv high dynamic range encoding: ${logluv}") 7505b90af24SBob Friesenhahnmessage(STATUS "") 7515b90af24SBob Friesenhahnmessage(STATUS " Support for external codecs:") 7525b90af24SBob Friesenhahnmessage(STATUS " ZLIB support: ${zlib} (requested) ${ZLIB_FOUND} (availability)") 7535b90af24SBob Friesenhahnmessage(STATUS " Pixar log-format algorithm: ${pixarlog} (requested) ${PIXARLOG_SUPPORT} (availability)") 7545b90af24SBob Friesenhahnmessage(STATUS " JPEG support: ${jpeg} (requested) ${JPEG_FOUND} (availability)") 7555b90af24SBob Friesenhahnmessage(STATUS " Old JPEG support: ${old-jpeg} (requested) ${JPEG_FOUND} (availability)") 7565b90af24SBob Friesenhahnmessage(STATUS " JPEG 8/12 bit dual mode: ${jpeg12} (requested) ${JPEG12_FOUND} (availability)") 7575b90af24SBob Friesenhahnmessage(STATUS " ISO JBIG support: ${jbig} (requested) ${JBIG_FOUND} (availability)") 7585b90af24SBob Friesenhahnmessage(STATUS " LZMA2 support: ${lzma} (requested) ${LIBLZMA_FOUND} (availability)") 7595b90af24SBob Friesenhahnmessage(STATUS "") 7605b90af24SBob Friesenhahnmessage(STATUS " C++ support: ${cxx} (requested) ${CXX_SUPPORT} (availability)") 7615b90af24SBob Friesenhahnmessage(STATUS "") 7625b90af24SBob Friesenhahn# message(STATUS " X Athena Widgets support: ${HAVE_XAW}") 7635b90af24SBob Friesenhahnmessage(STATUS " OpenGL support: ${HAVE_OPENGL}") 7645b90af24SBob Friesenhahnmessage(STATUS "") 765