Skip to content

Commit

Permalink
Merge pull request #5744 from rouault/fix_5741_5742
Browse files Browse the repository at this point in the history
CMake: fix build without PNG and JPEG (fixes #5741, fixes #5742)
  • Loading branch information
rouault committed May 19, 2022
2 parents f6db5a9 + 87647ca commit 53d90b3
Show file tree
Hide file tree
Showing 12 changed files with 174 additions and 75 deletions.
10 changes: 10 additions & 0 deletions .github/workflows/cmake_builds.yml
Expand Up @@ -456,6 +456,16 @@ jobs:
- name: Build
shell: bash -l {0}
run: cmake --build $GITHUB_WORKSPACE/build --config RelWithDebInfo -j 2
- name: Configure with even less dependencies
shell: bash -l {0}
run: |
export CONDA_PREFIX_BACKUP=${CONDA_PREFIX}
conda deactivate
rm -f build/CMakeCache.txt
cmake -A ${architecture} -G "${generator}" -Werror=dev "-DCMAKE_C_COMPILER_LAUNCHER=clcache" "-DCMAKE_CXX_COMPILER_LAUNCHER=clcache" "-DPROJ_INCLUDE_DIR=${CONDA_PREFIX_BACKUP}/Library/include" "-DPROJ_LIBRARY=${CONDA_PREFIX_BACKUP}/Library/lib/proj.lib" -DCMAKE_UNITY_BUILD=${CMAKE_UNITY_BUILD} -S "$GITHUB_WORKSPACE" -B "$GITHUB_WORKSPACE/build" -DCMAKE_C_FLAGS=" /WX" -DCMAKE_CXX_FLAGS=" /WX" -DGDAL_USE_EXTERNAL_LIBS:BOOL=OFF -DGDAL_USE_PNG_INTERNAL=OFF -DGDAL_USE_JPEG_INTERNAL=OFF -DGDAL_USE_JPEG12_INTERNAL=OFF -DGDAL_USE_GIF_INTERNAL=OFF -DGDAL_USE_LERC_INTERNAL=OFF -DGDAL_USE_LERCV1_INTERNAL=OFF -DGDAL_USE_QHULL_INTERNAL=OFF -DGDAL_USE_OPENCAD_INTERNAL=OFF -DWERROR_DEV_FLAG="-Werror=dev"
- name: Build
shell: bash -l {0}
run: cmake --build $GITHUB_WORKSPACE/build --config RelWithDebInfo -j 2
- name: Show gdal.pc
shell: bash -l {0}
run: cat $GITHUB_WORKSPACE/build/gdal.pc
Expand Down
12 changes: 8 additions & 4 deletions frmts/grib/CMakeLists.txt
Expand Up @@ -107,14 +107,18 @@ if (GDAL_USE_PNG_INTERNAL)
gdal_add_vendored_lib(gdal_GRIB libpng)
target_compile_definitions(gdal_GRIB PRIVATE -DUSE_PNG)
target_sources(gdal_GRIB PRIVATE degrib/g2clib/pngunpack.c degrib/g2clib/dec_png.c)
else ()
endif()

if (GDAL_USE_ZLIB_INTERNAL)
gdal_add_vendored_lib(gdal_GRIB libz)
endif ()

if (GDAL_USE_PNG AND NOT GDAL_USE_PNG_INTERNAL)
target_compile_definitions(gdal_GRIB PRIVATE -DUSE_PNG)
gdal_target_link_libraries(gdal_GRIB PRIVATE PNG::PNG)
target_sources(gdal_GRIB PRIVATE degrib/g2clib/pngunpack.c degrib/g2clib/dec_png.c)
endif ()

if (GDAL_USE_ZLIB_INTERNAL)
gdal_add_vendored_lib(gdal_GRIB libz)
else ()
if (GDAL_USE_ZLIB AND NOT GDAL_USE_ZLIB_INTERNAL)
gdal_target_link_libraries(gdal_GRIB PRIVATE ZLIB::ZLIB)
endif ()
82 changes: 42 additions & 40 deletions frmts/gtiff/CMakeLists.txt
Expand Up @@ -108,43 +108,45 @@ if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.16)
PROPERTY SKIP_UNITY_BUILD_INCLUSION ON)
endif ()

add_executable(generate_quant_table_md5sum EXCLUDE_FROM_ALL generate_quant_table_md5sum.cpp)
gdal_standard_includes(generate_quant_table_md5sum)
target_link_libraries(generate_quant_table_md5sum PRIVATE ${GDAL_LIB_TARGET_NAME})
if (GDAL_USE_TIFF_INTERNAL)
target_sources(generate_quant_table_md5sum PRIVATE $<TARGET_OBJECTS:libtiff> ../../port/cpl_md5.cpp)
target_include_directories(generate_quant_table_md5sum PRIVATE $<TARGET_PROPERTY:libtiff,SOURCE_DIR>)
if (RENAME_INTERNAL_TIFF_SYMBOLS)
target_compile_definitions(generate_quant_table_md5sum PRIVATE -DRENAME_INTERNAL_LIBTIFF_SYMBOLS)
endif ()
if (GDAL_USE_ZLIB_INTERNAL)
target_sources(generate_quant_table_md5sum PRIVATE $<TARGET_OBJECTS:libz>)
else ()
target_link_libraries(generate_quant_table_md5sum PRIVATE ZLIB::ZLIB)
endif ()
if (GDAL_USE_DEFLATE)
target_link_libraries(generate_quant_table_md5sum PRIVATE Deflate::Deflate)
endif ()
if (GDAL_USE_JPEG_INTERNAL)
target_sources(generate_quant_table_md5sum PRIVATE $<TARGET_OBJECTS:libjpeg>)
else ()
target_link_libraries(generate_quant_table_md5sum PRIVATE JPEG::JPEG)
endif ()
if (GDAL_USE_JPEG12_INTERNAL)
target_sources(generate_quant_table_md5sum PRIVATE $<TARGET_OBJECTS:libjpeg12>)
endif ()
if (GDAL_USE_ZSTD)
target_link_libraries(generate_quant_table_md5sum PRIVATE ${ZSTD_TARGET})
endif ()
if (GDAL_USE_LIBLZMA)
target_link_libraries(generate_quant_table_md5sum PRIVATE LibLZMA::LibLZMA)
endif ()
if (GDAL_USE_WEBP)
target_link_libraries(generate_quant_table_md5sum PRIVATE WEBP::WebP)
endif ()
if (GDAL_USE_LERC_INTERNAL)
target_sources(generate_quant_table_md5sum PRIVATE $<TARGET_OBJECTS:lerc>)
endif ()
else ()
target_link_libraries(generate_quant_table_md5sum PRIVATE TIFF::TIFF)
endif ()
if(GDAL_USE_JPEG OR GDAL_USE_JPEG_INTERNAL)
add_executable(generate_quant_table_md5sum EXCLUDE_FROM_ALL generate_quant_table_md5sum.cpp)
gdal_standard_includes(generate_quant_table_md5sum)
target_link_libraries(generate_quant_table_md5sum PRIVATE ${GDAL_LIB_TARGET_NAME})
if (GDAL_USE_TIFF_INTERNAL)
target_sources(generate_quant_table_md5sum PRIVATE $<TARGET_OBJECTS:libtiff> ../../port/cpl_md5.cpp)
target_include_directories(generate_quant_table_md5sum PRIVATE $<TARGET_PROPERTY:libtiff,SOURCE_DIR>)
if (RENAME_INTERNAL_TIFF_SYMBOLS)
target_compile_definitions(generate_quant_table_md5sum PRIVATE -DRENAME_INTERNAL_LIBTIFF_SYMBOLS)
endif ()
if (GDAL_USE_ZLIB_INTERNAL)
target_sources(generate_quant_table_md5sum PRIVATE $<TARGET_OBJECTS:libz>)
else ()
target_link_libraries(generate_quant_table_md5sum PRIVATE ZLIB::ZLIB)
endif ()
if (GDAL_USE_DEFLATE)
target_link_libraries(generate_quant_table_md5sum PRIVATE Deflate::Deflate)
endif ()
if (GDAL_USE_JPEG_INTERNAL)
target_sources(generate_quant_table_md5sum PRIVATE $<TARGET_OBJECTS:libjpeg>)
else ()
target_link_libraries(generate_quant_table_md5sum PRIVATE JPEG::JPEG)
endif ()
if (GDAL_USE_JPEG12_INTERNAL)
target_sources(generate_quant_table_md5sum PRIVATE $<TARGET_OBJECTS:libjpeg12>)
endif ()
if (GDAL_USE_ZSTD)
target_link_libraries(generate_quant_table_md5sum PRIVATE ${ZSTD_TARGET})
endif ()
if (GDAL_USE_LIBLZMA)
target_link_libraries(generate_quant_table_md5sum PRIVATE LibLZMA::LibLZMA)
endif ()
if (GDAL_USE_WEBP)
target_link_libraries(generate_quant_table_md5sum PRIVATE WEBP::WebP)
endif ()
if (GDAL_USE_LERC_INTERNAL)
target_sources(generate_quant_table_md5sum PRIVATE $<TARGET_OBJECTS:lerc>)
endif ()
else ()
target_link_libraries(generate_quant_table_md5sum PRIVATE TIFF::TIFF)
endif ()
endif()
2 changes: 1 addition & 1 deletion frmts/gtiff/libtiff/CMakeLists.txt
Expand Up @@ -86,7 +86,7 @@ if (NOT GDAL_USE_ZLIB_INTERNAL)
gdal_target_link_libraries(libtiff PRIVATE ZLIB::ZLIB)
endif ()

if (NOT GDAL_USE_JPEG_INTERNAL)
if (GDAL_USE_JPEG AND NOT GDAL_USE_JPEG_INTERNAL)
# Use a separate object library so that external libjpeg headers are only applied to tif_jpeg.c and tif_ojpeg.c, but
# not tif_jpeg_12.c !
add_library(libtiff_jpeg OBJECT tif_jpeg.c tif_ojpeg.c)
Expand Down
25 changes: 18 additions & 7 deletions frmts/mrf/CMakeLists.txt
@@ -1,8 +1,6 @@
add_gdal_driver(
TARGET gdal_MRF
SOURCES BitMask2D.h
JPEG_band.cpp
PNG_band.cpp
marfa.h
marfa_dataset.cpp
mrf_band.cpp
Expand All @@ -11,13 +9,26 @@ add_gdal_driver(
Packer.h
Packer_RLE.cpp
Packer_RLE.h
JPNG_band.cpp
Tif_band.cpp
BUILTIN)
gdal_standard_includes(gdal_MRF)

if (GDAL_USE_JPEG OR GDAL_USE_JPEG_INTERNAL)
target_compile_definitions(gdal_MRF PRIVATE -DHAVE_JPEG)
target_sources(gdal_MRF PRIVATE JPEG_band.cpp)
endif()

if (GDAL_USE_PNG OR GDAL_USE_PNG_INTERNAL)
target_compile_definitions(gdal_MRF PRIVATE -DHAVE_PNG)
target_sources(gdal_MRF PRIVATE PNG_band.cpp)
endif()

if ((GDAL_USE_JPEG OR GDAL_USE_JPEG_INTERNAL) AND (GDAL_USE_PNG OR GDAL_USE_PNG_INTERNAL))
target_sources(gdal_MRF PRIVATE JPNG_band.cpp)
endif()

# Internal libs first
if (GDAL_USE_JPEG12_INTERNAL)
if ((GDAL_USE_JPEG OR GDAL_USE_JPEG_INTERNAL) AND GDAL_USE_JPEG12_INTERNAL)
target_sources(gdal_MRF PRIVATE JPEG12_band.cpp)
target_compile_definitions(gdal_MRF PRIVATE -DJPEG12_SUPPORTED)
target_include_directories(gdal_MRF PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
Expand Down Expand Up @@ -48,11 +59,11 @@ endif ()

# Now external libs

if (NOT GDAL_USE_JPEG_INTERNAL)
if (GDAL_USE_JPEG AND NOT GDAL_USE_JPEG_INTERNAL)
gdal_target_link_libraries(gdal_MRF PRIVATE JPEG::JPEG)
endif ()

if (NOT GDAL_USE_PNG_INTERNAL)
if (GDAL_USE_PNG AND NOT GDAL_USE_PNG_INTERNAL)
gdal_target_link_libraries(gdal_MRF PRIVATE PNG::PNG)
endif ()

Expand All @@ -72,4 +83,4 @@ endif ()
if (GDAL_USE_BRUNSLI)
target_compile_definitions(gdal_MRF PRIVATE -DBRUNSLI)
gdal_target_link_libraries(gdal_MRF PRIVATE BRUNSLI::ENCODE BRUNSLI::DECODE)
endif ()
endif ()
2 changes: 1 addition & 1 deletion frmts/mrf/GNUmakefile
Expand Up @@ -19,7 +19,7 @@ LO_O_OBJ = $(addsuffix .lo,$(basename $(O_OBJ)))
DEPENDS = marfa.h

# For GDAL < 2.1
CPPFLAGS := $(GDAL_INCLUDE) $(CPPFLAGS)
CPPFLAGS := $(GDAL_INCLUDE) $(CPPFLAGS) -DHAVE_PNG -DHAVE_JPEG

# JPEG12_ENABLED is set only with the internal jpeg library
ifeq ($(JPEG12_ENABLED),yes)
Expand Down
2 changes: 2 additions & 0 deletions frmts/mrf/makefile.vc
Expand Up @@ -16,6 +16,8 @@ GDAL_ROOT = ..\..
OBJ = Packer_RLE.obj Tif_band.obj PNG_band.obj JPEG_band.obj JPNG_band.obj\
mrf_band.obj mrf_overview.obj mrf_util.obj marfa_dataset.obj

EXTRAFLAGS = -DHAVE_PNG -DHAVE_JPEG


# Internal libraries

Expand Down
13 changes: 11 additions & 2 deletions frmts/mrf/marfa.h
Expand Up @@ -93,7 +93,16 @@ NAMESPACE_MRF_START
// These are a pain to maintain in sync. They should be replaced with
// C++11 uniform initializers. The externs reside in util.cpp
enum ILCompression {
IL_PNG = 0, IL_PPNG, IL_JPEG, IL_JPNG, IL_NONE, IL_ZLIB, IL_TIF,
#ifdef HAVE_PNG
IL_PNG, IL_PPNG,
#endif
#ifdef HAVE_JPEG
IL_JPEG,
#endif
#if defined(HAVE_PNG) && defined(HAVE_JPEG)
IL_JPNG,
#endif
IL_NONE, IL_ZLIB, IL_TIF,
#if defined(LERC)
IL_LERC,
#endif
Expand Down Expand Up @@ -677,7 +686,7 @@ class JPEG_Codec {

private:
// not implemented. but suppress MSVC warning about 'assignment operator could not be generated'
JPEG_Codec& operator= (const JPEG_Codec& src);
JPEG_Codec& operator= (const JPEG_Codec& src);
};

class JPEG_Band final: public MRFRasterBand {
Expand Down
24 changes: 20 additions & 4 deletions frmts/mrf/marfa_dataset.cpp
Expand Up @@ -739,11 +739,12 @@ static CPLErr Init_Raster(ILImage& image, MRFDataset* ds, CPLXMLNode* defimage)
}

// Page Encoding, defaults to PNG
image.comp = CompToken(CPLGetXMLValue(defimage, "Compression", "PNG"));
const char* pszCompression = CPLGetXMLValue(defimage, "Compression", "PNG");
image.comp = CompToken(pszCompression);
if (image.comp == IL_ERR_COMP) {
CPLError(CE_Failure, CPLE_IllegalArg,
"GDAL MRF: Compression %s is unknown",
CPLGetXMLValue(defimage, "Compression", nullptr));
pszCompression);
return CE_Failure;
}

Expand Down Expand Up @@ -1110,8 +1111,12 @@ CPLXMLNode* MRFDataset::BuildConfig()
XMLSetAttributeVal(raster, "Size", full.size, "%.0f");
XMLSetAttributeVal(raster, "PageSize", full.pagesize, "%.0f");

#ifdef HAVE_PNG
if (full.comp != IL_PNG)
#endif
{
CPLCreateXMLElementAndValue(raster, "Compression", CompName(full.comp));
}

if (full.dt != GDT_Byte)
CPLCreateXMLElementAndValue(raster, "DataType", GDALGetDataTypeName(full.dt));
Expand Down Expand Up @@ -1600,13 +1605,20 @@ GDALDataset* MRFDataset::CreateCopy(const char* pszFilename,
char** papszCWROptions = nullptr;
papszCWROptions = CSLAddNameValue(papszCWROptions, "COMPRESSED", "TRUE");

#ifdef HAVE_JPEG
// Use the Zen version of the CopyWholeRaster if input has a dataset mask and JPEGs are generated
if (GMF_PER_DATASET == poSrcDS->GetRasterBand(1)->GetMaskFlags() &&
(poDS->current.comp == IL_JPEG || poDS->current.comp == IL_JPNG)) {
(poDS->current.comp == IL_JPEG
#ifdef HAVE_PNG
|| poDS->current.comp == IL_JPNG
#endif
)) {
err = poDS->ZenCopy(poSrcDS, pfnProgress, pProgressData);
nCloneFlags ^= GCIF_MASK; // Turn the external mask off
}
else {
else
#endif
{
err = GDALDatasetCopyWholeRaster((GDALDatasetH)poSrcDS,
(GDALDatasetH)poDS, papszCWROptions, pfnProgress, pProgressData);
}
Expand Down Expand Up @@ -1928,7 +1940,11 @@ MRFDataset::Create(const char* pszName,
// Use the full, set some initial parameters
ILImage& img = poDS->full;
img.size = ILSize(nXSize, nYSize, 1, nBandsIn);
#ifdef HAVE_PNG
img.comp = IL_PNG;
#else
img.comp = IL_NONE;
#endif
img.order = (nBandsIn < 5) ? IL_Interleaved : IL_Separate;
img.pagesize = ILSize(512, 512, 1, 1);
img.quality = 85;
Expand Down

0 comments on commit 53d90b3

Please sign in to comment.