libtiff: test (cmake): skip script tests if tools aren't built

From bda075a7f3ed8b83b2c26a18361b3e93679c1ae8 Mon Sep 17 00:00:00 2001
From: Sam James <[EMAIL REDACTED]>
Date: Tue, 28 Jun 2022 06:22:15 +0100
Subject: [PATCH] test (cmake): skip script tests if tools aren't built

In Gentoo, we avoid building the tools for multilib (32-bit, x86) builds on
amd64/x86_64 because we only need the library to keep binary applications working.

This causes a test failure in e.g. tiffcp-thumbnail.sh as the 'thumbnail'
binary isn't built. Skip it if unavailable.

Fixes: https://gitlab.com/libtiff/libtiff/-/issues/421
Signed-off-by: Sam James <sam@gentoo.org>
---
 test/CMakeLists.txt | 166 +++++++++++++++++++++++---------------------
 1 file changed, 85 insertions(+), 81 deletions(-)

diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index b00c1f68..779c6e7e 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -216,11 +216,14 @@ endif()
 set(TEST_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/output")
 file(MAKE_DIRECTORY "${TEST_OUTPUT}")
 
-set(tiff_test_extra_args
-    "-DTIFFCP=$<TARGET_FILE:tiffcp>"
-    "-DTIFFINFO=$<TARGET_FILE:tiffinfo>"
-    "-DTIFFSPLIT=$<TARGET_FILE:tiffsplit>"
-    "-DLIBTIFF=$<TARGET_FILE:tiff>")
+set(tiff_test_extra_args "-DLIBTIFF=$<TARGET_FILE:tiff>")
+
+if(tiff-tools)
+  list(APPEND tiff_test_extra_args "-DTIFFCP=$<TARGET_FILE:tiffcp>")
+  list(APPEND tiff_test_extra_args "-DTIFFINFO=$<TARGET_FILE:tiffinfo>")
+  list(APPEND tiff_test_extra_args "-DTIFFSPLIT=$<TARGET_FILE:tiffsplit>")
+endif()
+
 if(WIN32)
   list(APPEND tiff_test_extra_args "-DWIN32=${WIN32}")
 endif()
@@ -361,79 +364,80 @@ foreach(target IN LISTS simple_tests)
   tiff_test_stdout_noargs("${target}" "${target}")
 endforeach()
 
-
-# PPM
-add_convert_test(ppm2tiff miniswhite "" "images/miniswhite-1c-1b.pbm" TRUE)
-add_convert_test(ppm2tiff minisblack "" "images/minisblack-1c-8b.pgm" TRUE)
-add_convert_test(ppm2tiff rgb        "" "images/rgb-3c-16b.ppm"       TRUE)
-add_convert_test(ppm2tiff rgb        "" "images/rgb-3c-8b.ppm"        TRUE)
-
-# tiffcp
-add_convert_test(tiffcp   g3         "-c g3"         "images/miniswhite-1c-1b.tiff" FALSE)
-add_convert_test(tiffcp   g31d       "-c g3:1d"      "images/miniswhite-1c-1b.tiff" FALSE)
-add_convert_test(tiffcp   g31dfill   "-c g3:1d:fill" "images/miniswhite-1c-1b.tiff" FALSE)
-add_convert_test(tiffcp   g32d       "-c g3:2d"      "images/miniswhite-1c-1b.tiff" FALSE)
-add_convert_test(tiffcp   g32dfill   "-c g3:2d:fill" "images/miniswhite-1c-1b.tiff" FALSE)
-add_convert_test(tiffcp   g4         "-c g4"         "images/miniswhite-1c-1b.tiff" FALSE)
-add_convert_test_multi(tiffcp tiffcp "" logluv "-c none" "-c sgilog" ""
-                       "images/logluv-3c-16b.tiff"    FALSE)
-add_convert_test_multi(tiffcp thumbnail "" thumbnail "-c g3:1d" "" ""
-                       "images/miniswhite-1c-1b.tiff"    FALSE)
-add_convert_test(tiffcp   none       "-c none"       "images/quad-lzw-compat.tiff" FALSE)
-add_convert_test(tiffcp   noner1     "-c none -r 1"  "images/lzw-single-strip.tiff" FALSE)
-add_convert_test(tiffcp   float64_lzw_2_le "-c lzw:2"       "images/test_float64_predictor2_le_lzw.tif" FALSE)
-add_convert_test(tiffcp   float64_lzw_2_be "-c lzw:2"       "images/test_float64_predictor2_be_lzw.tif" FALSE)
-
-# tiffdump
-add_reader_test(tiffdump "" "images/miniswhite-1c-1b.tiff")
-
-# tiffinfo
-add_reader_test(tiffinfo "-c -D -d -j -s" "images/custom_dir_EXIF_GPS.tiff")
-add_reader_test(tiffinfo "-c -D -d -j -s" "images/minisblack-1c-16b.tiff")
-add_reader_test(tiffinfo " " "images/tiff_with_subifd_chain.tif")
-
-# tiffcp split/join
-foreach(image ${UNCOMPRESSEDIMAGES})
-  list(APPEND ESCAPED_UNCOMPRESSED "${CMAKE_CURRENT_SOURCE_DIR}/${image}")
-endforeach()
-string(REPLACE ";" "^" ESCAPED_UNCOMPRESSED "${ESCAPED_UNCOMPRESSED}")
-add_test(NAME "tiffcp-split"
-         COMMAND "${CMAKE_COMMAND}"
-         "-DTESTFILES=${ESCAPED_UNCOMPRESSED}"
-         "-DCONJOINED=${TEST_OUTPUT}/tiffcp-split-conjoined.tiff"
-         "-DSPLITFILE=${TEST_OUTPUT}/tiffcp-split-split-"
-         ${tiff_test_extra_args}
-         -P "${CMAKE_CURRENT_SOURCE_DIR}/TiffSplitTest.cmake")
-add_test(NAME "tiffcp-split-join"
-         COMMAND "${CMAKE_COMMAND}"
-         "-DTESTFILES=${ESCAPED_UNCOMPRESSED}"
-         "-DCONJOINED=${TEST_OUTPUT}/tiffcp-split-join-conjoined.tiff"
-         "-DSPLITFILE=${TEST_OUTPUT}/tiffcp-split-join-split-"
-         "-DRECONJOINED=${TEST_OUTPUT}/tiffcp-split-join-reconjoined.tiff"
-         ${tiff_test_extra_args}
-         -P "${CMAKE_CURRENT_SOURCE_DIR}/TiffSplitTest.cmake")
-
-# PDF
-add_stdout_test(tiff2pdf "" "" "images/miniswhite-1c-1b.tiff" TRUE)
-
-# PS
-add_stdout_test(tiff2ps "ps-1" "-a -p -1" "images/miniswhite-1c-1b.tiff" TRUE)
-add_stdout_test(tiff2ps "ps-2" "-a -p -2" "images/miniswhite-1c-1b.tiff" TRUE)
-add_stdout_test(tiff2ps "ps-3" "-a -p -3" "images/miniswhite-1c-1b.tiff" TRUE)
-add_stdout_test(tiff2ps "eps-1" "-e -1" "images/miniswhite-1c-1b.tiff" TRUE)
-
-# BW
-add_convert_tests(tiff2bw default      ""                         RGBIMAGES TRUE)
-
-# RGBA
-add_convert_tests(tiff2rgba default    ""                         TIFFIMAGES TRUE)
-# RGBA (old-jpeg)
-add_convert_tests(tiff2rgba default    ""                         TIFFIMAGES_OJPEG TRUE)
-# Test rotations
-add_convert_tests(tiffcrop  R90        "-R90"                     TIFFIMAGES TRUE)
-# Test flip (mirror)
-add_convert_tests(tiffcrop  doubleflip "-F both"                  TIFFIMAGES TRUE)
-# Test extracting a section 60 pixels wide and 60 pixels high
-add_convert_tests(tiffcrop  extract    "-U px -E top -X 60 -Y 60" TIFFIMAGES TRUE)
-# Test extracting the first and fourth quarters from the left side.
-add_convert_tests(tiffcrop  extractz14 "-E left -Z1:4,2:4"        TIFFIMAGES TRUE)
+if(tiff-tools)
+  # PPM
+  add_convert_test(ppm2tiff miniswhite "" "images/miniswhite-1c-1b.pbm" TRUE)
+  add_convert_test(ppm2tiff minisblack "" "images/minisblack-1c-8b.pgm" TRUE)
+  add_convert_test(ppm2tiff rgb        "" "images/rgb-3c-16b.ppm"       TRUE)
+  add_convert_test(ppm2tiff rgb        "" "images/rgb-3c-8b.ppm"        TRUE)
+
+  # tiffcp
+  add_convert_test(tiffcp   g3         "-c g3"         "images/miniswhite-1c-1b.tiff" FALSE)
+  add_convert_test(tiffcp   g31d       "-c g3:1d"      "images/miniswhite-1c-1b.tiff" FALSE)
+  add_convert_test(tiffcp   g31dfill   "-c g3:1d:fill" "images/miniswhite-1c-1b.tiff" FALSE)
+  add_convert_test(tiffcp   g32d       "-c g3:2d"      "images/miniswhite-1c-1b.tiff" FALSE)
+  add_convert_test(tiffcp   g32dfill   "-c g3:2d:fill" "images/miniswhite-1c-1b.tiff" FALSE)
+  add_convert_test(tiffcp   g4         "-c g4"         "images/miniswhite-1c-1b.tiff" FALSE)
+  add_convert_test_multi(tiffcp tiffcp "" logluv "-c none" "-c sgilog" ""
+                         "images/logluv-3c-16b.tiff"    FALSE)
+  add_convert_test_multi(tiffcp thumbnail "" thumbnail "-c g3:1d" "" ""
+                         "images/miniswhite-1c-1b.tiff"    FALSE)
+  add_convert_test(tiffcp   none       "-c none"       "images/quad-lzw-compat.tiff" FALSE)
+  add_convert_test(tiffcp   noner1     "-c none -r 1"  "images/lzw-single-strip.tiff" FALSE)
+  add_convert_test(tiffcp   float64_lzw_2_le "-c lzw:2"       "images/test_float64_predictor2_le_lzw.tif" FALSE)
+  add_convert_test(tiffcp   float64_lzw_2_be "-c lzw:2"       "images/test_float64_predictor2_be_lzw.tif" FALSE)
+
+  # tiffdump
+  add_reader_test(tiffdump "" "images/miniswhite-1c-1b.tiff")
+
+  # tiffinfo
+  add_reader_test(tiffinfo "-c -D -d -j -s" "images/custom_dir_EXIF_GPS.tiff")
+  add_reader_test(tiffinfo "-c -D -d -j -s" "images/minisblack-1c-16b.tiff")
+  add_reader_test(tiffinfo " " "images/tiff_with_subifd_chain.tif")
+
+  # tiffcp split/join
+  foreach(image ${UNCOMPRESSEDIMAGES})
+    list(APPEND ESCAPED_UNCOMPRESSED "${CMAKE_CURRENT_SOURCE_DIR}/${image}")
+  endforeach()
+  string(REPLACE ";" "^" ESCAPED_UNCOMPRESSED "${ESCAPED_UNCOMPRESSED}")
+  add_test(NAME "tiffcp-split"
+           COMMAND "${CMAKE_COMMAND}"
+           "-DTESTFILES=${ESCAPED_UNCOMPRESSED}"
+           "-DCONJOINED=${TEST_OUTPUT}/tiffcp-split-conjoined.tiff"
+           "-DSPLITFILE=${TEST_OUTPUT}/tiffcp-split-split-"
+           ${tiff_test_extra_args}
+           -P "${CMAKE_CURRENT_SOURCE_DIR}/TiffSplitTest.cmake")
+  add_test(NAME "tiffcp-split-join"
+           COMMAND "${CMAKE_COMMAND}"
+           "-DTESTFILES=${ESCAPED_UNCOMPRESSED}"
+           "-DCONJOINED=${TEST_OUTPUT}/tiffcp-split-join-conjoined.tiff"
+           "-DSPLITFILE=${TEST_OUTPUT}/tiffcp-split-join-split-"
+           "-DRECONJOINED=${TEST_OUTPUT}/tiffcp-split-join-reconjoined.tiff"
+           ${tiff_test_extra_args}
+           -P "${CMAKE_CURRENT_SOURCE_DIR}/TiffSplitTest.cmake")
+
+  # PDF
+  add_stdout_test(tiff2pdf "" "" "images/miniswhite-1c-1b.tiff" TRUE)
+
+  # PS
+  add_stdout_test(tiff2ps "ps-1" "-a -p -1" "images/miniswhite-1c-1b.tiff" TRUE)
+  add_stdout_test(tiff2ps "ps-2" "-a -p -2" "images/miniswhite-1c-1b.tiff" TRUE)
+  add_stdout_test(tiff2ps "ps-3" "-a -p -3" "images/miniswhite-1c-1b.tiff" TRUE)
+  add_stdout_test(tiff2ps "eps-1" "-e -1" "images/miniswhite-1c-1b.tiff" TRUE)
+
+  # BW
+  add_convert_tests(tiff2bw default      ""                         RGBIMAGES TRUE)
+
+  # RGBA
+  add_convert_tests(tiff2rgba default    ""                         TIFFIMAGES TRUE)
+  # RGBA (old-jpeg)
+  add_convert_tests(tiff2rgba default    ""                         TIFFIMAGES_OJPEG TRUE)
+  # Test rotations
+  add_convert_tests(tiffcrop  R90        "-R90"                     TIFFIMAGES TRUE)
+  # Test flip (mirror)
+  add_convert_tests(tiffcrop  doubleflip "-F both"                  TIFFIMAGES TRUE)
+  # Test extracting a section 60 pixels wide and 60 pixels high
+  add_convert_tests(tiffcrop  extract    "-U px -E top -X 60 -Y 60" TIFFIMAGES TRUE)
+  # Test extracting the first and fourth quarters from the left side.
+  add_convert_tests(tiffcrop  extractz14 "-E left -Z1:4,2:4"        TIFFIMAGES TRUE)
+endif()