diff --git a/CMakeLists.txt b/CMakeLists.txt index 26acca80..0f346627 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,26 +39,33 @@ message(STATUS "libtiff library version ${SO_VERSION}") string(TIMESTAMP BUILD_DATE "%Y%m%d") message(STATUS "libtiff build date: ${BUILD_DATE}") +# Project definition +set(CMAKE_C_STANDARD 99) +project(tiff + VERSION "${LIBTIFF_VERSION}" + LANGUAGES C CXX) -set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") +if(NOT CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) + # libtiff is being included as a subproject of some other project. + set(TIFF_INSTALL_DEFAULT OFF) + option(BUILD_SHARED_LIBS "Build shared libraries" ON) +else() + set(TIFF_INSTALL_DEFAULT ON) + set(tiff-install ON) +endif() option(tiff-tools "build TIFF tools" ON) option(tiff-tests "build TIFF tests" ON) option(tiff-contrib "build TIFF contrib" ON) option(tiff-docs "build TIFF documentation" ON) option(tiff-deprecated "build TIFF deprecated features" OFF) +option(tiff-install "install TIFF targets" ${TIFF_INSTALL_DEFAULT}) # Disable deprecated features to ensure clean build if (tiff-deprecated) add_definitions(-DTIFF_DISABLE_DEPRECATED) endif() -# Project definition -set(CMAKE_C_STANDARD 99) -project(tiff - VERSION "${LIBTIFF_VERSION}" - LANGUAGES C CXX) - # Autotools compatibility include(AutotoolsCompat) diff --git a/cmake/Release.cmake b/cmake/Release.cmake index fbf34cc6..5deba03d 100644 --- a/cmake/Release.cmake +++ b/cmake/Release.cmake @@ -23,7 +23,7 @@ # OF THIS SOFTWARE. -add_custom_target(release +add_custom_target(tiff_release COMMAND ${CMAKE_COMMAND} "-DSOURCE_DIR:PATH=${PROJECT_SOURCE_DIR}" "-DLIBTIFF_VERSION=${PROJECT_VERSION}" diff --git a/cmake/ZSTDCodec.cmake b/cmake/ZSTDCodec.cmake index d3d2de80..490d75c4 100644 --- a/cmake/ZSTDCodec.cmake +++ b/cmake/ZSTDCodec.cmake @@ -31,13 +31,16 @@ set(ZSTD_USABLE FALSE) find_package(ZSTD) if(ZSTD_FOUND) - set(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES}) - set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${ZSTD_INCLUDE_DIRS}) - set(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES}) - set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${ZSTD_LIBRARIES}) - check_symbol_exists(ZSTD_decompressStream "zstd.h" ZSTD_RECENT_ENOUGH) - set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE}) - set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE}) + if(NOT DEFINED ZSTD_HAVE_DECOMPRESS_STREAM) + set(CMAKE_REQUIRED_INCLUDES_SAVE ${CMAKE_REQUIRED_INCLUDES}) + set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${ZSTD_INCLUDE_DIRS}) + set(CMAKE_REQUIRED_LIBRARIES_SAVE ${CMAKE_REQUIRED_LIBRARIES}) + set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${ZSTD_LIBRARIES}) + check_symbol_exists(ZSTD_decompressStream "zstd.h" ZSTD_HAVE_DECOMPRESS_STREAM) + set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVE}) + set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES_SAVE}) + endif() + set(ZSTD_RECENT_ENOUGH ${ZSTD_HAVE_DECOMPRESS_STREAM}) if (ZSTD_RECENT_ENOUGH) set(ZSTD_USABLE TRUE) diff --git a/contrib/addtiffo/CMakeLists.txt b/contrib/addtiffo/CMakeLists.txt index 2f3959bc..7c86e950 100644 --- a/contrib/addtiffo/CMakeLists.txt +++ b/contrib/addtiffo/CMakeLists.txt @@ -23,7 +23,7 @@ # OF THIS SOFTWARE. add_executable(addtiffo addtiffo.c tif_overview.c tif_ovrcache.c tif_ovrcache.h) -target_link_libraries(addtiffo tiff port) +target_link_libraries(addtiffo tiff tiff_port) if(WEBP_SUPPORT AND EMSCRIPTEN) # Emscripten is pretty finnicky about linker flags. diff --git a/contrib/dbs/CMakeLists.txt b/contrib/dbs/CMakeLists.txt index b5681777..74b2a02a 100644 --- a/contrib/dbs/CMakeLists.txt +++ b/contrib/dbs/CMakeLists.txt @@ -23,16 +23,16 @@ # OF THIS SOFTWARE. add_executable(tiff-bi tiff-bi.c) -target_link_libraries(tiff-bi tiff port) +target_link_libraries(tiff-bi tiff tiff_port) add_executable(tiff-grayscale tiff-grayscale.c) -target_link_libraries(tiff-grayscale tiff port CMath::CMath) +target_link_libraries(tiff-grayscale tiff tiff_port CMath::CMath) add_executable(tiff-palette tiff-palette.c) -target_link_libraries(tiff-palette tiff port) +target_link_libraries(tiff-palette tiff tiff_port) add_executable(tiff-rgb tiff-rgb.c) -target_link_libraries(tiff-rgb tiff port CMath::CMath) +target_link_libraries(tiff-rgb tiff tiff_port CMath::CMath) if(WEBP_SUPPORT AND EMSCRIPTEN) # Emscripten is pretty finnicky about linker flags. diff --git a/contrib/iptcutil/CMakeLists.txt b/contrib/iptcutil/CMakeLists.txt index 39d908c6..d13319c6 100644 --- a/contrib/iptcutil/CMakeLists.txt +++ b/contrib/iptcutil/CMakeLists.txt @@ -23,4 +23,4 @@ # OF THIS SOFTWARE. add_executable(iptcutil iptcutil.c) -target_link_libraries(iptcutil tiff port) +target_link_libraries(iptcutil tiff tiff_port) diff --git a/libtiff/CMakeLists.txt b/libtiff/CMakeLists.txt index 3fab9b67..346c2f0d 100755 --- a/libtiff/CMakeLists.txt +++ b/libtiff/CMakeLists.txt @@ -46,6 +46,7 @@ set(tiff_private_HEADERS add_library(tiff libtiff.def) +add_library(TIFF::TIFF ALIAS tiff) target_sources(tiff PRIVATE ${tiff_public_HEADERS} @@ -169,21 +170,23 @@ if(HAVE_LD_VERSION_SCRIPT) "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libtiff.map") endif() -export(TARGETS tiff NAMESPACE TIFF:: FILE "${CMAKE_CURRENT_BINARY_DIR}/libtiffTargets.cmake") -install(TARGETS tiff EXPORT TiffTargets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) +if(tiff-install) + export(TARGETS tiff NAMESPACE TIFF:: FILE "${CMAKE_CURRENT_BINARY_DIR}/libtiffTargets.cmake") + install(TARGETS tiff EXPORT TiffTargets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) -install(FILES ${tiff_public_HEADERS} - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + install(FILES ${tiff_public_HEADERS} + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") -set(TIFF_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/tiff) -install(EXPORT TiffTargets - FILE TiffTargets.cmake - NAMESPACE TIFF:: - DESTINATION ${TIFF_CONFIGDIR} -) + set(TIFF_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/tiff) + install(EXPORT TiffTargets + FILE TiffTargets.cmake + NAMESPACE TIFF:: + DESTINATION ${TIFF_CONFIGDIR} + ) +endif() if(CXX_SUPPORT) set(tiffxx_HEADERS @@ -196,6 +199,8 @@ if(CXX_SUPPORT) add_library(tiffxx ../placeholder.h) endif() + add_library(TIFF::CXX ALIAS tiffxx) + target_sources(tiffxx PRIVATE ${tiffxx_HEADERS} tif_stream.cxx) @@ -213,24 +218,26 @@ if(CXX_SUPPORT) "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libtiffxx.map") endif() - install(TARGETS tiffxx - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - - install(FILES ${tiffxx_HEADERS} - DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + if(tiff-install) + install(TARGETS tiffxx + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install(FILES ${tiffxx_HEADERS} + DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}") + endif() + endif() if(NOT CMAKE_CROSSCOMPILING) - add_executable(mkg3states ../placeholder.h) - target_sources(mkg3states PRIVATE mkg3states.c tif_fax3.h) - target_link_libraries(mkg3states tiff port) + add_executable(tiff_mkg3states ../placeholder.h) + target_sources(tiff_mkg3states PRIVATE mkg3states.c tif_fax3.h) + target_link_libraries(tiff_mkg3states tiff tiff_port) - add_custom_target(faxtable - DEPENDS mkg3states + add_custom_target(tiff_faxtable + DEPENDS tiff_mkg3states COMMAND ${CMAKE_COMMAND} -E rm "tif_fax3sm.c" - COMMAND mkg3states -b -c const "tif_fax3sm.c" + COMMAND tiff_mkg3states -b -c const "tif_fax3sm.c" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") endif() diff --git a/port/CMakeLists.txt b/port/CMakeLists.txt index fd459162..04bd3ea8 100755 --- a/port/CMakeLists.txt +++ b/port/CMakeLists.txt @@ -31,21 +31,21 @@ set(port_HEADERS libport.h) # Only build if any needed features are missing if(NOT HAVE_GETOPT) - add_library(port STATIC ../placeholder.h) + add_library(tiff_port STATIC ../placeholder.h) # Add getopt if missing if(NOT HAVE_GETOPT) - target_sources(port PUBLIC + target_sources(tiff_port PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/getopt.c) endif() - target_include_directories(port PUBLIC + target_include_directories(tiff_port PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) else() # Dummy interface library - add_library(port INTERFACE) - target_include_directories(port INTERFACE + add_library(tiff_port INTERFACE) + target_include_directories(tiff_port INTERFACE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) endif() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 66de9376..a7ad8ec1 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -102,77 +102,77 @@ set(simple_tests) add_executable(test_signed_tags ../placeholder.h) target_sources(test_signed_tags PRIVATE test_signed_tags.c) -target_link_libraries(test_signed_tags PRIVATE tiff port) +target_link_libraries(test_signed_tags PRIVATE tiff tiff_port) list(APPEND simple_tests test_signed_tags) add_executable(ascii_tag ../placeholder.h) target_sources(ascii_tag PRIVATE ascii_tag.c) -target_link_libraries(ascii_tag PRIVATE tiff port) +target_link_libraries(ascii_tag PRIVATE tiff tiff_port) list(APPEND simple_tests ascii_tag) add_executable(long_tag ../placeholder.h) target_sources(long_tag PRIVATE long_tag.c check_tag.c) -target_link_libraries(long_tag PRIVATE tiff port) +target_link_libraries(long_tag PRIVATE tiff tiff_port) list(APPEND simple_tests long_tag) add_executable(short_tag ../placeholder.h) target_sources(short_tag PRIVATE short_tag.c check_tag.c) -target_link_libraries(short_tag PRIVATE tiff port) +target_link_libraries(short_tag PRIVATE tiff tiff_port) list(APPEND simple_tests short_tag) add_executable(strip_rw ../placeholder.h) target_sources(strip_rw PRIVATE strip_rw.c strip.c test_arrays.c test_arrays.h) -target_link_libraries(strip_rw PRIVATE tiff port) +target_link_libraries(strip_rw PRIVATE tiff tiff_port) list(APPEND simple_tests strip_rw) add_executable(rewrite ../placeholder.h) target_sources(rewrite PRIVATE rewrite_tag.c) -target_link_libraries(rewrite PRIVATE tiff port) +target_link_libraries(rewrite PRIVATE tiff tiff_port) list(APPEND simple_tests rewrite) if(JPEG_SUPPORT) add_executable(raw_decode ../placeholder.h) target_sources(raw_decode PRIVATE raw_decode.c) - target_link_libraries(raw_decode PRIVATE tiff port JPEG::JPEG) + target_link_libraries(raw_decode PRIVATE tiff tiff_port JPEG::JPEG) list(APPEND simple_tests raw_decode) endif() add_executable(custom_dir ../placeholder.h) target_sources(custom_dir PRIVATE custom_dir.c) -target_link_libraries(custom_dir PRIVATE tiff port) +target_link_libraries(custom_dir PRIVATE tiff tiff_port) list(APPEND simple_tests custom_dir) # Uses private functions from static library if(NOT BUILD_SHARED_LIBS) add_executable(rational_precision2double ../placeholder.h) target_sources(rational_precision2double PRIVATE rational_precision2double.c) - target_link_libraries(rational_precision2double PRIVATE tiff port) + target_link_libraries(rational_precision2double PRIVATE tiff tiff_port) list(APPEND simple_tests rational_precision2double) endif() add_executable(custom_dir_EXIF_231 ../placeholder.h) target_sources(custom_dir_EXIF_231 PRIVATE custom_dir_EXIF_231.c) -target_link_libraries(custom_dir_EXIF_231 PRIVATE tiff port) +target_link_libraries(custom_dir_EXIF_231 PRIVATE tiff tiff_port) list(APPEND simple_tests custom_dir_EXIF_231) add_executable(defer_strile_loading ../placeholder.h) target_sources(defer_strile_loading PRIVATE defer_strile_loading.c) -target_link_libraries(defer_strile_loading PRIVATE tiff port) +target_link_libraries(defer_strile_loading PRIVATE tiff tiff_port) list(APPEND simple_tests defer_strile_loading) add_executable(defer_strile_writing ../placeholder.h) target_sources(defer_strile_writing PRIVATE defer_strile_writing.c) -target_link_libraries(defer_strile_writing PRIVATE tiff port) +target_link_libraries(defer_strile_writing PRIVATE tiff tiff_port) list(APPEND simple_tests defer_strile_writing) add_executable(test_directory ../placeholder.h) target_sources(test_directory PRIVATE test_directory.c) -target_link_libraries(test_directory PRIVATE tiff port) +target_link_libraries(test_directory PRIVATE tiff tiff_port) list(APPEND simple_tests test_directory) add_executable(testtypes ../placeholder.h) target_sources(testtypes PRIVATE testtypes.c) -target_link_libraries(testtypes PRIVATE tiff port) +target_link_libraries(testtypes PRIVATE tiff tiff_port) list(APPEND simple_tests testtypes) if(WEBP_SUPPORT AND EMSCRIPTEN) diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index e0feaebe..2d203763 100755 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -24,83 +24,83 @@ add_executable(fax2ps ../placeholder.h) target_sources(fax2ps PRIVATE fax2ps.c) -target_link_libraries(fax2ps PRIVATE tiff port) +target_link_libraries(fax2ps PRIVATE tiff tiff_port) add_executable(fax2tiff ../placeholder.h) target_sources(fax2tiff PRIVATE fax2tiff.c) -target_link_libraries(fax2tiff PRIVATE tiff port) +target_link_libraries(fax2tiff PRIVATE tiff tiff_port) add_executable(pal2rgb ../placeholder.h) target_sources(pal2rgb PRIVATE pal2rgb.c) -target_link_libraries(pal2rgb PRIVATE tiff port) +target_link_libraries(pal2rgb PRIVATE tiff tiff_port) add_executable(ppm2tiff ../placeholder.h) target_sources(ppm2tiff PRIVATE ppm2tiff.c) -target_link_libraries(ppm2tiff PRIVATE tiff port) +target_link_libraries(ppm2tiff PRIVATE tiff tiff_port) add_executable(raw2tiff ../placeholder.h) target_sources(raw2tiff PRIVATE raw2tiff.c) -target_link_libraries(raw2tiff PRIVATE tiff port CMath::CMath) +target_link_libraries(raw2tiff PRIVATE tiff tiff_port CMath::CMath) add_executable(rgb2ycbcr ../placeholder.h) target_sources(rgb2ycbcr PRIVATE rgb2ycbcr.c) -target_link_libraries(rgb2ycbcr PRIVATE tiff port) +target_link_libraries(rgb2ycbcr PRIVATE tiff tiff_port) add_executable(thumbnail ../placeholder.h) target_sources(thumbnail PRIVATE thumbnail.c) -target_link_libraries(thumbnail PRIVATE tiff port CMath::CMath) +target_link_libraries(thumbnail PRIVATE tiff tiff_port CMath::CMath) add_executable(tiff2bw ../placeholder.h) target_sources(tiff2bw PRIVATE tiff2bw.c) -target_link_libraries(tiff2bw PRIVATE tiff port) +target_link_libraries(tiff2bw PRIVATE tiff tiff_port) add_executable(tiff2pdf ../placeholder.h) target_sources(tiff2pdf PRIVATE tiff2pdf.c) -target_link_libraries(tiff2pdf PRIVATE tiff port) +target_link_libraries(tiff2pdf PRIVATE tiff tiff_port) add_executable(tiff2ps ../placeholder.h) target_sources(tiff2ps PRIVATE tiff2ps.c) -target_link_libraries(tiff2ps PRIVATE tiff port CMath::CMath) +target_link_libraries(tiff2ps PRIVATE tiff tiff_port CMath::CMath) add_executable(tiff2rgba ../placeholder.h) target_sources(tiff2rgba PRIVATE tiff2rgba.c) -target_link_libraries(tiff2rgba PRIVATE tiff port) +target_link_libraries(tiff2rgba PRIVATE tiff tiff_port) add_executable(tiffcmp ../placeholder.h) target_sources(tiffcmp PRIVATE tiffcmp.c) -target_link_libraries(tiffcmp PRIVATE tiff port) +target_link_libraries(tiffcmp PRIVATE tiff tiff_port) add_executable(tiffcp ../placeholder.h) target_sources(tiffcp PRIVATE tiffcp.c) -target_link_libraries(tiffcp PRIVATE tiff port) +target_link_libraries(tiffcp PRIVATE tiff tiff_port) add_executable(tiffcrop ../placeholder.h) target_sources(tiffcrop PRIVATE tiffcrop.c) -target_link_libraries(tiffcrop PRIVATE tiff port CMath::CMath) +target_link_libraries(tiffcrop PRIVATE tiff tiff_port CMath::CMath) add_executable(tiffdither ../placeholder.h) target_sources(tiffdither PRIVATE tiffdither.c) -target_link_libraries(tiffdither PRIVATE tiff port) +target_link_libraries(tiffdither PRIVATE tiff tiff_port) add_executable(tiffdump ../placeholder.h) target_sources(tiffdump PRIVATE tiffdump.c) -target_link_libraries(tiffdump PRIVATE tiff port) +target_link_libraries(tiffdump PRIVATE tiff tiff_port) add_executable(tiffinfo ../placeholder.h) target_sources(tiffinfo PRIVATE tiffinfo.c) -target_link_libraries(tiffinfo PRIVATE tiff port) +target_link_libraries(tiffinfo PRIVATE tiff tiff_port) add_executable(tiffmedian ../placeholder.h) target_sources(tiffmedian PRIVATE tiffmedian.c) -target_link_libraries(tiffmedian PRIVATE tiff port) +target_link_libraries(tiffmedian PRIVATE tiff tiff_port) add_executable(tiffset ../placeholder.h) target_sources(tiffset PRIVATE tiffset.c) -target_link_libraries(tiffset PRIVATE tiff port) +target_link_libraries(tiffset PRIVATE tiff tiff_port) add_executable(tiffsplit ../placeholder.h) target_sources(tiffsplit PRIVATE tiffsplit.c) -target_link_libraries(tiffsplit PRIVATE tiff port) +target_link_libraries(tiffsplit PRIVATE tiff tiff_port) # rgb2ycbcr and thumbnail are intended to *NOT* be installed. They are for # testing purposes only. @@ -127,7 +127,7 @@ install(TARGETS fax2ps if(OPENGL_SUPPORT) add_executable(tiffgt ../placeholder.h) target_sources(tiffgt PRIVATE tiffgt.c) - target_link_libraries(tiffgt PRIVATE tiff port) + target_link_libraries(tiffgt PRIVATE tiff tiff_port) target_link_libraries(tiffgt PRIVATE OpenGL::GL GLUT::GLUT) install(TARGETS tiffgt