xref: /libtiff-4.0.7/CMakeLists.txt (revision e762ba3d)
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