aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt11
-rw-r--r--configure.ac20
-rw-r--r--src/Makefile.am2
-rw-r--r--src/grids.cpp34
-rw-r--r--src/lib_proj.cmake9
5 files changed, 65 insertions, 11 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bb8ae88f..97a0b90a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -137,9 +137,14 @@ ENDIF()
# Check for libtiff
################################################################################
-find_package(TIFF REQUIRED)
-if(NOT TIFF_FOUND)
- message(SEND_ERROR "libtiff dependency not found!")
+option(DISABLE_TIFF_IS_STRONGLY_DISCOURAGED "Disable TIFF support (strongly discouraged !)" OFF)
+mark_as_advanced(DISABLE_TIFF_IS_STRONGLY_DISCOURAGED)
+if(NOT DISABLE_TIFF_IS_STRONGLY_DISCOURAGED)
+ find_package(TIFF REQUIRED)
+ if(NOT TIFF_FOUND)
+ message(SEND_ERROR "libtiff dependency not found!")
+ endif()
+ add_definitions(-DTIFF_ENABLED)
endif()
################################################################################
diff --git a/configure.ac b/configure.ac
index 7c04f60b..4aff6d74 100644
--- a/configure.ac
+++ b/configure.ac
@@ -300,15 +300,25 @@ dnl ---------------------------------------------------------------------------
dnl Check for libtiff
dnl ---------------------------------------------------------------------------
-if test "x$TIFF_CFLAGS$TIFF_LIBS" = "x" ; then
- if $PKG_CONFIG libtiff; then
- PKG_CHECK_MODULES([TIFF], [libtiff])
- else
- PKG_CHECK_MODULES([TIFF], [libtiff-4])
+AC_ARG_ENABLE([tiff-is-strongly-discouraged],
+ AS_HELP_STRING([--disable-tiff-is-strongly-discouraged],
+ [Disable TIFF support. Strongly discouraged !]),
+ [enable_tiff=no],
+ [enable_tiff=yes])
+
+if test "x$enable_tiff" = "xyes" -o "x$enable_tiff" = ""; then
+ if test "x$TIFF_CFLAGS$TIFF_LIBS" = "x" ; then
+ if $PKG_CONFIG libtiff; then
+ PKG_CHECK_MODULES([TIFF], [libtiff])
+ else
+ PKG_CHECK_MODULES([TIFF], [libtiff-4])
+ fi
fi
+ TIFF_ENABLED_FLAGS=-DTIFF_ENABLED
fi
AC_SUBST(TIFF_CFLAGS,$TIFF_CFLAGS)
AC_SUBST(TIFF_LIBS,$TIFF_LIBS)
+AC_SUBST(TIFF_ENABLED_FLAGS,$TIFF_ENABLED_FLAGS)
dnl ---------------------------------------------------------------------------
dnl Check for external Google Test
diff --git a/src/Makefile.am b/src/Makefile.am
index 89f8dc0c..9a4b3cae 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -7,7 +7,7 @@ TESTS = geodtest
check_PROGRAMS = geodtest
AM_CPPFLAGS = -DPROJ_LIB=\"$(pkgdatadir)\" \
- -DMUTEX_@MUTEX_SETTING@ @JNI_INCLUDE@ -I$(top_srcdir)/include @SQLITE3_CFLAGS@ @TIFF_CFLAGS@
+ -DMUTEX_@MUTEX_SETTING@ @JNI_INCLUDE@ -I$(top_srcdir)/include @SQLITE3_CFLAGS@ @TIFF_CFLAGS@ @TIFF_ENABLED_FLAGS@
AM_CXXFLAGS = @CXX_WFLAGS@ @FLTO_FLAG@
include_HEADERS = proj.h proj_experimental.h proj_constants.h proj_api.h geodesic.h \
diff --git a/src/grids.cpp b/src/grids.cpp
index ca3ddfcc..090f7320 100644
--- a/src/grids.cpp
+++ b/src/grids.cpp
@@ -36,7 +36,9 @@
#include "proj/internal/lru_cache.hpp"
#include "proj_internal.h"
+#ifdef TIFF_ENABLED
#include "tiffio.h"
+#endif
#include <algorithm>
#include <cmath>
@@ -279,6 +281,8 @@ static bool IsTIFF(size_t header_size, const unsigned char *header) {
(header[3] == 0x2B && header[2] == 0)));
}
+#ifdef TIFF_ENABLED
+
// ---------------------------------------------------------------------------
enum class TIFFDataType { Int16, UInt16, Int32, UInt32, Float32, Float64 };
@@ -1044,6 +1048,8 @@ class GTiffVGridShiftSet : public VerticalShiftGridSet, public GTiffDataset {
open(PJ_CONTEXT *ctx, PAFile fp, const std::string &filename);
};
+#endif // TIFF_ENABLED
+
// ---------------------------------------------------------------------------
template <class GridType, class GenericGridType>
@@ -1107,6 +1113,7 @@ insertIntoHierarchy(PJ_CONTEXT *ctx, std::unique_ptr<GridType> &&grid,
}
}
+#ifdef TIFF_ENABLED
// ---------------------------------------------------------------------------
class GTiffVGrid : public VerticalShiftGrid {
@@ -1260,6 +1267,7 @@ GTiffVGridShiftSet::open(PJ_CONTEXT *ctx, PAFile fp,
}
return set;
}
+#endif // TIFF_ENABLED
// ---------------------------------------------------------------------------
@@ -1307,10 +1315,16 @@ VerticalShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) {
pj_ctx_fseek(ctx, fp, SEEK_SET, 0);
if (IsTIFF(header_size, header)) {
+#ifdef TIFF_ENABLED
auto set = GTiffVGridShiftSet::open(ctx, fp, filename);
if (!set)
pj_ctx_set_errno(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
return set;
+#else
+ pj_log(ctx, PJ_LOG_ERROR, "TIFF grid, but TIFF support disabled in this build");
+ pj_ctx_fclose(ctx, fp);
+ return nullptr;
+#endif
}
pj_log(ctx, PJ_LOG_DEBUG_MAJOR, "Unrecognized vertical grid format");
@@ -1816,6 +1830,8 @@ std::unique_ptr<NTv2GridSet> NTv2GridSet::open(PJ_CONTEXT *ctx, PAFile fp,
return set;
}
+#ifdef TIFF_ENABLED
+
// ---------------------------------------------------------------------------
class GTiffHGridShiftSet : public HorizontalShiftGridSet, public GTiffDataset {
@@ -2079,6 +2095,7 @@ GTiffHGridShiftSet::open(PJ_CONTEXT *ctx, PAFile fp,
}
return set;
}
+#endif // TIFF_ENABLED
// ---------------------------------------------------------------------------
@@ -2151,10 +2168,16 @@ HorizontalShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) {
return NTv2GridSet::open(ctx, fp, filename);
} else if (IsTIFF(header_size,
reinterpret_cast<const unsigned char *>(header))) {
+#ifdef TIFF_ENABLED
auto set = GTiffHGridShiftSet::open(ctx, fp, filename);
if (!set)
pj_ctx_set_errno(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
return set;
+#else
+ pj_log(ctx, PJ_LOG_ERROR, "TIFF grid, but TIFF support disabled in this build");
+ pj_ctx_fclose(ctx, fp);
+ return nullptr;
+#endif
}
pj_log(ctx, PJ_LOG_DEBUG_MAJOR, "Unrecognized horizontal grid format");
@@ -2201,6 +2224,7 @@ const HorizontalShiftGrid *HorizontalShiftGridSet::gridAt(double lon,
return nullptr;
}
+#ifdef TIFF_ENABLED
// ---------------------------------------------------------------------------
class GTiffGenericGridShiftSet : public GenericShiftGridSet,
@@ -2298,6 +2322,7 @@ void GTiffGenericGrid::insertGrid(PJ_CONTEXT *ctx,
m_children.emplace_back(std::move(subgrid));
}
}
+#endif // TIFF_ENABLED
// ---------------------------------------------------------------------------
@@ -2329,6 +2354,8 @@ bool NullGenericShiftGrid::valueAt(int, int, int, float &out) const {
// ---------------------------------------------------------------------------
+#ifdef TIFF_ENABLED
+
std::unique_ptr<GTiffGenericGridShiftSet>
GTiffGenericGridShiftSet::open(PJ_CONTEXT *ctx, PAFile fp,
const std::string &filename) {
@@ -2373,6 +2400,7 @@ GTiffGenericGridShiftSet::open(PJ_CONTEXT *ctx, PAFile fp,
}
return set;
}
+#endif // TIFF_ENABLED
// ---------------------------------------------------------------------------
@@ -2425,10 +2453,16 @@ GenericShiftGridSet::open(PJ_CONTEXT *ctx, const std::string &filename) {
pj_ctx_fseek(ctx, fp, SEEK_SET, 0);
if (IsTIFF(header_size, header)) {
+#ifdef TIFF_ENABLED
auto set = GTiffGenericGridShiftSet::open(ctx, fp, filename);
if (!set)
pj_ctx_set_errno(ctx, PJD_ERR_FAILED_TO_LOAD_GRID);
return set;
+#else
+ pj_log(ctx, PJ_LOG_ERROR, "TIFF grid, but TIFF support disabled in this build");
+ pj_ctx_fclose(ctx, fp);
+ return nullptr;
+#endif
}
pj_log(ctx, PJ_LOG_DEBUG_MAJOR, "Unrecognized generic grid format");
diff --git a/src/lib_proj.cmake b/src/lib_proj.cmake
index f94f0562..d4c95092 100644
--- a/src/lib_proj.cmake
+++ b/src/lib_proj.cmake
@@ -436,8 +436,13 @@ if(USE_THREAD AND Threads_FOUND AND CMAKE_USE_PTHREADS_INIT)
target_link_libraries(${PROJ_CORE_TARGET} ${CMAKE_THREAD_LIBS_INIT})
endif()
-include_directories(${SQLITE3_INCLUDE_DIR} ${TIFF_INCLUDE_DIR})
-target_link_libraries(${PROJ_CORE_TARGET} ${SQLITE3_LIBRARY} ${TIFF_LIBRARY})
+include_directories(${SQLITE3_INCLUDE_DIR})
+target_link_libraries(${PROJ_CORE_TARGET} ${SQLITE3_LIBRARY})
+
+if(NOT DISABLE_TIFF_IS_STRONGLY_DISCOURAGED)
+ include_directories(${TIFF_INCLUDE_DIR})
+ target_link_libraries(${PROJ_CORE_TARGET} ${TIFF_LIBRARY})
+endif()
if(MSVC)
target_compile_definitions(${PROJ_CORE_TARGET}