Skip to content

Commit

Permalink
Merge branch 'fix-cmake-subproject' into 'master'
Browse files Browse the repository at this point in the history
Fix CMake build to be compatible with FetchContent

See merge request libtiff/libtiff!394
  • Loading branch information
rleigh-codelibre committed Oct 5, 2022
2 parents 99c2808 + 7d0ed2e commit 3a1647e
Show file tree
Hide file tree
Showing 10 changed files with 104 additions and 87 deletions.
21 changes: 14 additions & 7 deletions CMakeLists.txt
Expand Up @@ -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)

Expand Down
2 changes: 1 addition & 1 deletion cmake/Release.cmake
Expand Up @@ -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}"
Expand Down
17 changes: 10 additions & 7 deletions cmake/ZSTDCodec.cmake
Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion contrib/addtiffo/CMakeLists.txt
Expand Up @@ -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.
Expand Down
8 changes: 4 additions & 4 deletions contrib/dbs/CMakeLists.txt
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion contrib/iptcutil/CMakeLists.txt
Expand Up @@ -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)
59 changes: 33 additions & 26 deletions libtiff/CMakeLists.txt
Expand Up @@ -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}
Expand Down Expand Up @@ -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
Expand All @@ -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)
Expand All @@ -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()
10 changes: 5 additions & 5 deletions port/CMakeLists.txt
Expand Up @@ -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()
28 changes: 14 additions & 14 deletions test/CMakeLists.txt
Expand Up @@ -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)
Expand Down

0 comments on commit 3a1647e

Please sign in to comment.