load("@cmake_configure_file//:cmake_configure_file.bzl", "cmake_configure_file") load("@rules_cc//cc:cc_library.bzl", "cc_library") # Common defines for tif_config.h (platform-independent) _TIF_CONFIG_COMMON_DEFINES = [ "CCITT_SUPPORT=1", "CHECK_JPEG_YCBCR_SUBSAMPLING=1", "HAVE_ASSERT_H=1", "HAVE_FCNTL_H=1", "HAVE_SETMODE=1", "HAVE_SYS_TYPES_H=1", "PACKAGE_NAME=libtiff", "PACKAGE_BUGREPORT=tiff@lists.maptools.org", "PACKAGE_TARNAME=tiff", "PACKAGE_URL=http://www.simplesystems.org/libtiff/", "SIZEOF_SIZE_T=8", "STRIP_SIZE_DEFAULT=8192", "TIFF_MAX_DIR_COUNT=1048576", "VAR=", "LIBJPEG_12_PATH=", ] # Unix/Linux/macOS specific defines _TIF_CONFIG_UNIX_DEFINES = _TIF_CONFIG_COMMON_DEFINES + [ "HAVE_UNISTD_H=1", ] # Windows specific defines (no unistd.h) _TIF_CONFIG_WINDOWS_DEFINES = _TIF_CONFIG_COMMON_DEFINES + [ "HAVE_IO_H=1", ] # Generate config headers into libtiff/ subdirectory cmake_configure_file( name = "tif_config_h", src = "libtiff/tif_config.h.cmake.in", out = "libtiff/tif_config.h", defines = select({ "@platforms//os:windows": _TIF_CONFIG_WINDOWS_DEFINES, "//conditions:default": _TIF_CONFIG_UNIX_DEFINES, }), ) cmake_configure_file( name = "tiffconf_h", src = "libtiff/tiffconf.h.cmake.in", out = "libtiff/tiffconf.h", defines = [ "TIFF_INT8_T=int8_t", "TIFF_INT16_T=int16_t", "TIFF_INT32_T=int32_t", "TIFF_INT64_T=int64_t", "TIFF_UINT8_T=uint8_t", "TIFF_UINT16_T=uint16_t", "TIFF_UINT32_T=uint32_t", "TIFF_UINT64_T=uint64_t", "TIFF_SSIZE_T=int64_t", "HOST_BIG_ENDIAN=0", "HAVE_IEEEFP=1", "CCITT_SUPPORT=1", "LOGLUV_SUPPORT=1", "LZW_SUPPORT=1", "NEXT_SUPPORT=1", "PACKBITS_SUPPORT=1", "PIXARLOG_SUPPORT=1", "THUNDER_SUPPORT=1", "ZIP_SUPPORT=1", "LIBDEFLATE_SUPPORT=1", "STRIPCHOP_DEFAULT=TIFF_STRIPCHOP", "SUBIFD_SUPPORT=1", "DEFAULT_EXTRASAMPLE_AS_ALPHA=1", "CHECK_JPEG_YCBCR_SUBSAMPLING=1", "MDI_SUPPORT=1", "VAR=", ], ) cmake_configure_file( name = "tiffvers_h", src = "libtiff/tiffvers.h.cmake.in", out = "libtiff/tiffvers.h", defines = [ "LIBTIFF_VERSION=4.7.1", "LIBTIFF_RELEASE_DATE=20250911", "LIBTIFF_MAJOR_VERSION=4", "LIBTIFF_MINOR_VERSION=7", "LIBTIFF_MICRO_VERSION=1", "VAR=", # Appears in a comment, but cmake_configure_file requires it ], ) TIFF_PUBLIC_HEADERS = [ "libtiff/tiff.h", "libtiff/tiffio.h", ":tiffconf_h", ":tiffvers_h", ] TIFF_PRIVATE_HEADERS = [ "libtiff/t4.h", "libtiff/tif_dir.h", "libtiff/tif_predict.h", "libtiff/tiffiop.h", "libtiff/uvcode.h", ":tif_config_h", "libtiff/tif_hash_set.h", "libtiff/tif_fax3.h", ] # Platform-independent source files TIFF_COMMON_SRCS = [ "libtiff/tif_aux.c", "libtiff/tif_close.c", "libtiff/tif_codec.c", "libtiff/tif_color.c", "libtiff/tif_compress.c", "libtiff/tif_dir.c", "libtiff/tif_dirinfo.c", "libtiff/tif_dirread.c", "libtiff/tif_dirwrite.c", "libtiff/tif_dumpmode.c", "libtiff/tif_error.c", "libtiff/tif_extension.c", "libtiff/tif_fax3.c", "libtiff/tif_fax3sm.c", "libtiff/tif_flush.c", "libtiff/tif_getimage.c", "libtiff/tif_hash_set.c", "libtiff/tif_jbig.c", "libtiff/tif_jpeg.c", "libtiff/tif_jpeg_12.c", "libtiff/tif_lerc.c", "libtiff/tif_luv.c", "libtiff/tif_lzma.c", "libtiff/tif_lzw.c", "libtiff/tif_next.c", "libtiff/tif_ojpeg.c", "libtiff/tif_open.c", "libtiff/tif_packbits.c", "libtiff/tif_pixarlog.c", "libtiff/tif_predict.c", "libtiff/tif_print.c", "libtiff/tif_read.c", "libtiff/tif_strip.c", "libtiff/tif_swab.c", "libtiff/tif_thunder.c", "libtiff/tif_tile.c", "libtiff/tif_version.c", "libtiff/tif_warning.c", "libtiff/tif_webp.c", "libtiff/tif_write.c", "libtiff/tif_zip.c", "libtiff/tif_zstd.c", ] # Implementation library - compiles tiff internally # This is a private target that builds the actual library cc_library( name = "tiff_impl", srcs = TIFF_COMMON_SRCS + select({ "@platforms//os:windows": ["libtiff/tif_win32.c"], "//conditions:default": ["libtiff/tif_unix.c"], }) + TIFF_PRIVATE_HEADERS + TIFF_PUBLIC_HEADERS, includes = ["libtiff"], linkstatic = True, local_defines = select({ "@platforms//os:windows": ["_CRT_SECURE_NO_WARNINGS"], "//conditions:default": [], }), visibility = ["//visibility:private"], deps = [ "@libdeflate", "@zlib", ], ) # Public library - exposes headers to users cc_library( name = "tiff", hdrs = TIFF_PUBLIC_HEADERS, implementation_deps = [":tiff_impl"], includes = [ "libtiff", ], visibility = ["//visibility:public"], ) alias( name = "libtiff", actual = ":tiff", )