From ba57d5f0b7dd9a47ba3ef276aa7e4dbc067809a8 Mon Sep 17 00:00:00 2001 From: Bob Friesenhahn Date: Tue, 1 Sep 2015 02:51:50 +0000 Subject: [PATCH] * CMakeLists.txt, libtiff/test/Makefile.am: Applied patches by Roger Leigh (via tiff mailing list on 2015-08-31. CMake reads all version information directly from configure.ac to avoid duplication of values. This basically greps over the file for the LIBTIFF_* variables, then translates them to the form needed for cmake. This includes the release version and libtool shared library version information. Make shared/static library building configurable. Currently it always builds shared libraries, with static libs having a _static suffix (copying zlib, but it means it's got a non-standard name). CMake has a -DBUILD_SHARED_LIBS=ON|OFF option to select one or the other, which is now used instead. There's now a single "tiff" target to build either shared or static as required, and all the tests and tools are linked with this. Note: the Windows tests fail when linked with a static libtiff (says: libtiff.dll not found). Not really a regression since this was not tested up to this point, and it's likely the unit tests haven't (ever?) been run on Windows with a static libtiff, so there's some additional portability issue here to address. Works fine on UNIX systems, and fine on Windows with the default to build a DLL. Add a missing file which wasn't being distributed, causing unit tests to fail. Note that "find . -name '*.cmake'" lists all the CMake files which need distributing in addition to all the CMakeLists.txt files (which now are distributed). --- CMakeLists.txt | 34 ++++++++++++++++++++++++++++++---- ChangeLog | 33 ++++++++++++++++++++++++++++++++- libtiff/CMakeLists.txt | 24 ++++-------------------- test/Makefile.am | 3 ++- test/Makefile.in | 3 ++- 5 files changed, 70 insertions(+), 27 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e98a98c1..22284cc1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -42,13 +42,38 @@ if (POLICY CMP0054) cmake_policy(SET CMP0054 NEW) endif(POLICY CMP0054) +# Read version information from configure.ac. +FILE(READ "${CMAKE_CURRENT_SOURCE_DIR}/configure.ac" configure) +STRING(REGEX REPLACE ";" "\\\\;" configure "${configure}") +STRING(REGEX REPLACE "\n" ";" configure "${configure}") +foreach(line ${configure}) + foreach(var LIBTIFF_MAJOR_VERSION LIBTIFF_MINOR_VERSION LIBTIFF_MICRO_VERSION LIBTIFF_ALPHA_VERSION + LIBTIFF_CURRENT LIBTIFF_REVISION LIBTIFF_AGE) + if(NOT ${var}) + string(REGEX MATCH "^${var}=(.*)" ${var}_MATCH "${line}") + if(${var}_MATCH) + string(REGEX REPLACE "^${var}=(.*)" "\\1" ${var} "${line}") + endif() + endif() + endforeach() +endforeach() + +math(EXPR SO_MAJOR "${LIBTIFF_CURRENT} - ${LIBTIFF_AGE}") +set(SO_MINOR "${LIBTIFF_AGE}") +set(SO_REVISION "${LIBTIFF_REVISION}") + +message(STATUS "Building tiff version ${LIBTIFF_MAJOR_VERSION}.${LIBTIFF_MINOR_VERSION}.${LIBTIFF_MICRO_VERSION}${LIBTIFF_ALPHA_VERSION}") +message(STATUS "libtiff library version ${SO_MAJOR}.${SO_MINOR}.${SO_REVISION}") + +set(BUILD_SHARED_LIBS ON CACHE BOOL "Build shared libraries") + # Project version -project(tiff VERSION 4.0.5 LANGUAGES C) +project(tiff VERSION "${LIBTIFF_MAJOR_VERSION}.${LIBTIFF_MINOR_VERSION}.${LIBTIFF_MICRO_VERSION}" LANGUAGES C) # the other tiff_VERSION_* variables are set automatically -set(tiff_VERSION_ALPHA beta) +set(tiff_VERSION_ALPHA "${LIBTIFF_ALPHA_VERSION}") # Library version (unlike libtool's baroque scheme, WYSIWYG here) -set(SO_COMPATVERSION 5) -set(SO_VERSION 5.2.2) +set(SO_COMPATVERSION "${SO_MAJOR}") +set(SO_VERSION "${SO_MAJOR}.${SO_MINOR}.${SO_REVISION}") # For autotools header compatibility set(PACKAGE_NAME "LibTIFF Software") @@ -704,6 +729,7 @@ message(STATUS " Installation directory: ${prefix}") message(STATUS " Documentation directory: ${LIBTIFF_DOCDIR}") message(STATUS " C compiler: ${CMAKE_C_COMPILER}") message(STATUS " C++ compiler: ${CMAKE_CXX_COMPILER}") +message(STATUS " Build shared libraries: ${BUILD_SHARED_LIBS}") message(STATUS " Enable linker symbol versioning: ${HAVE_LD_VERSION_SCRIPT}") message(STATUS " Support Microsoft Document Imaging: ${mdi}") message(STATUS " Use win32 IO: ${USE_WIN32_FILEIO}") diff --git a/ChangeLog b/ChangeLog index 1933ae42..f41492ee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,35 @@ +2015-08-31 Bob Friesenhahn + + * CMakeLists.txt, libtiff/test/Makefile.am: Applied patches by + Roger Leigh (via tiff mailing list on 2015-08-31. + + CMake reads all version information directly from configure.ac to + avoid duplication of values. This basically greps over the file + for the LIBTIFF_* variables, then translates them to the form + needed for cmake. This includes the release version and libtool + shared library version information. + + Make shared/static library building configurable. Currently it + always builds shared libraries, with static libs having a _static + suffix (copying zlib, but it means it's got a non-standard name). + CMake has a -DBUILD_SHARED_LIBS=ON|OFF option to select one or the + other, which is now used instead. There's now a single "tiff" + target to build either shared or static as required, and all the + tests and tools are linked with this. Note: the Windows tests fail + when linked with a static libtiff (says: libtiff.dll not found). + Not really a regression since this was not tested up to this + point, and it's likely the unit tests haven't (ever?) been run on + Windows with a static libtiff, so there's some additional + portability issue here to address. Works fine on UNIX systems, + and fine on Windows with the default to build a DLL. + + Add a missing file which wasn't being distributed, causing unit + tests to fail. Note that "find . -name '*.cmake'" lists all the + CMake files which need distributing in addition to all the + CMakeLists.txt files (which now are distributed). + 2015-08-31 Even Rouault - + * libtiff/tif_predict.c: pedantic change to add explicit masking with 0xff before casting to uchar in floating-point horizontal differencing and accumulation routines. @@ -18,6 +48,7 @@ undefined behaviour with shifts (gcc -fsanitize=shift) 2015-08-30 Even Rouault + * libtiff/tif_fax3.c, libtiff/tif_lzw.c, libtiff/tif_predict.c: add explicit masking with 0xff before casting to unsigned char (make icc -check=conversions happy) diff --git a/libtiff/CMakeLists.txt b/libtiff/CMakeLists.txt index 58eb1280..087dfa9e 100644 --- a/libtiff/CMakeLists.txt +++ b/libtiff/CMakeLists.txt @@ -114,7 +114,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${TIFF_INCLUDES}) -add_library(tiff SHARED ${tiff_SOURCES} ${tiff_HEADERS} ${nodist_tiff_HEADERS} +add_library(tiff ${tiff_SOURCES} ${tiff_HEADERS} ${nodist_tiff_HEADERS} ${tiff_port_SOURCES} libtiff.def) target_link_libraries(tiff ${TIFF_LIBRARY_DEPS}) set_target_properties(tiff PROPERTIES SOVERSION ${SO_COMPATVERSION}) @@ -130,15 +130,7 @@ if(HAVE_LD_VERSION_SCRIPT) "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libtiff.map") endif() -add_library(tiff_static STATIC ${tiff_SOURCES} ${tiff_HEADERS}) -target_link_libraries(tiff_static ${TIFF_LIBRARY_DEPS} port) -if (NOT WIN32) - # Windows static and DLL import libraries both use .lib so the - # static lib can't use the same name as the DLL - set_target_properties(tiff_static PROPERTIES OUTPUT_NAME tiff) -endif() - -install(TARGETS tiff tiff_static +install(TARGETS tiff RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) @@ -147,7 +139,7 @@ install(FILES ${tiff_HEADERS} ${nodist_tiff_HEADERS} DESTINATION "${CMAKE_INSTALL_FULL_INCLUDEDIR}") if(cxx) - add_library(tiffxx SHARED ${tiffxx_SOURCES} ${tiffxx_HEADERS}) + add_library(tiffxx ${tiffxx_SOURCES} ${tiffxx_HEADERS}) target_link_libraries(tiffxx tiff) set_target_properties(tiffxx PROPERTIES SOVERSION ${SO_COMPATVERSION}) if(NOT CYGWIN) @@ -162,15 +154,7 @@ if(cxx) "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/libtiffxx.map") endif() - add_library(tiffxx_static STATIC ${tiffxx_SOURCES} ${tiffxx_HEADERS}) - target_link_libraries(tiffxx_static tiff_staticport) - if (NOT WIN32) - # Windows static and DLL import libraries both use .lib so the - # static lib can't use the same name as the DLL - set_target_properties(tiffxx_static PROPERTIES OUTPUT_NAME tiffxx) - endif() - - install(TARGETS tiffxx tiffxx_static + install(TARGETS tiffxx RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_FULL_LIBDIR}) diff --git a/test/Makefile.am b/test/Makefile.am index bc506096..0aca56fc 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -39,7 +39,8 @@ EXTRA_DIST = \ CMakeLists.txt \ common.sh \ TiffSplitTest.cmake \ - TiffTestCommon.cmake + TiffTestCommon.cmake \ + TiffTest.cmake # All of the tests to execute via 'make check' TESTS = $(check_PROGRAMS) $(TESTSCRIPTS) diff --git a/test/Makefile.in b/test/Makefile.in index 2c8dbff6..0b2cf1d6 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -643,7 +643,8 @@ EXTRA_DIST = \ CMakeLists.txt \ common.sh \ TiffSplitTest.cmake \ - TiffTestCommon.cmake + TiffTestCommon.cmake \ + TiffTest.cmake # Extra files which should be cleaned by 'make clean'