# frmts/* compilation

message(STATUS "--------- CONFIGURING gdal/frmts ----------")

set(FRMTS_SOURCES_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(GDAL_FORMAT_LIST)
set(FRMTS_CXX_FLAGS)

# Raw
# -----------------------------------------------------------------------------
option(GDAL_WITH_raw "Compilation of PNG format" ON)
mark_as_advanced(GDAL_WITH_raw)

if(GDAL_WITH_raw)
  file(GLOB gdalraw_SRC "${FRMTS_SOURCES_DIR}/raw/*.cpp")
  set(FRMTS_SRC ${FRMTS_SRC} ${gdalraw_SRC})
  set(FRMTS_INCLUDE ${FRMTS_INCLUDE} "${FRMTS_SOURCES_DIR}/raw")
  set(FRMTS_CXX_FLAGS "${FRMTS_CXX_FLAGS} -DFRMT_raw")
endif(GDAL_WITH_raw)

# Virtual GDAL Datasets
# -----------------------------------------------------------------------------
option(GDAL_WITH_vrt "Compilation of VRT format" ON)
mark_as_advanced(GDAL_WITH_vrt)

if(GDAL_WITH_vrt)
  file(GLOB gdalvrt_SRC "${FRMTS_SOURCES_DIR}/vrt/*.cpp")
  set(FRMTS_SRC ${FRMTS_SRC} ${gdalvrt_SRC})
  set(FRMTS_INCLUDE ${FRMTS_INCLUDE} "${FRMTS_SOURCES_DIR}")
  set(FRMTS_CXX_FLAGS "${FRMTS_CXX_FLAGS} -DFRMT_vrt")
endif(GDAL_WITH_vrt)

# ZLIB (not optional)
# -----------------------------------------------------------------------------
if(GDAL_WITH_zlib)
  if(NOT GDAL_USE_EXTERNAL_zlib)
    file(GLOB gdalformat_SRC
      "${FRMTS_SOURCES_DIR}/zlib/*.cpp"
      "${FRMTS_SOURCES_DIR}/zlib/*.c")
    set(FRMTS_SRC ${FRMTS_SRC} ${gdalformat_SRC})
    set(FRMTS_INCLUDE ${FRMTS_INCLUDE} "${FRMTS_SOURCES_DIR}/zlib")
  endif(NOT GDAL_USE_EXTERNAL_zlib)
endif(GDAL_WITH_zlib)

# TIFF GEOTIFF
# -----------------------------------------------------------------------------
option(GDAL_WITH_gtiff "Compilation of GeoTIFF format" ON)
mark_as_advanced(GDAL_WITH_gtiff)

if(GDAL_WITH_gtiff)

  option(GDAL_USING_SYSTEM_TIFF "Using system tiff" OFF)
  mark_as_advanced(GDAL_USING_SYSTEM_TIFF)
  if(NOT GDAL_USING_SYSTEM_TIFF)
     add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/gtiff/libtiff)
  else(NOT GDAL_USING_SYSTEM_TIFF PARENT_SCOPE)
    set(FRMTS_INCLUDE ${GDAL_FRMTS_INCLUDE} "/usr/include/libtiff")
  endif(NOT GDAL_USING_SYSTEM_TIFF)


  option(GDAL_USING_SYSTEM_GEOTIFF "Using system geotiff" OFF)
  mark_as_advanced(GDAL_USING_SYSTEM_GEOTIFF)
  if(NOT GDAL_USING_SYSTEM_GEOTIFF)
    add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/gtiff/libgeotiff)
    set(GDAL_FRMTS_INCLUDE ${GDAL_FRMTS_INCLUDE} PARENT_SCOPE)
  else(NOT GDAL_USING_SYSTEM_GEOTIFF)
    set(FRMTS_INCLUDE ${GDAL_FRMTS_INCLUDE} "/usr/include/geotiff")
  endif(NOT GDAL_USING_SYSTEM_GEOTIFF)
  set(FRMTS_CXX_FLAGS "${FRMTS_CXX_FLAGS} -DFRMT_gtiff")

endif(GDAL_WITH_gtiff)

# PNG
# -----------------------------------------------------------------------------
option(GDAL_WITH_png "Compilation of PNG format" ON)
mark_as_advanced(GDAL_WITH_png)

if(GDAL_WITH_png)
  # note that this is not the gtiff format, but just the additional gdal methods
  file(GLOB gdalformat_SRC
    "${FRMTS_SOURCES_DIR}/png/pngdataset.cpp")
  set(FRMTS_SRC ${FRMTS_SRC} ${gdalformat_SRC})

  #Example of using an internal format built independently in its own lib
  if(NOT GDAL_USE_EXTERNAL_PNG)
    file(GLOB gdalpng_SRC
      "${FRMTS_SOURCES_DIR}/png/libpng/*.c")
    set(FRMTS_SRC ${FRMTS_SRC} ${gdalpng_SRC})
    set(FRMTS_INCLUDE ${FRMTS_INCLUDE} "${FRMTS_SOURCES_DIR}/png/libpng")
  endif(NOT GDAL_USE_EXTERNAL_PNG)
  set(FRMTS_CXX_FLAGS "${FRMTS_CXX_FLAGS} -DFRMT_png")
endif(GDAL_WITH_png)


# HDF4 (non standard due to the inclusion of subdirectory)
# -----------------------------------------------------------------------------
option(GDAL_WITH_hdf4 "Compilation of HDF4 format" OFF)
mark_as_advanced(GDAL_WITH_hdf4)

if(GDAL_WITH_hdf4)
  message(STATUS "Compiling format: Hdf4")
  file(GLOB gdalformat_SRC
    "${FRMTS_SOURCES_DIR}/hdf4/*.cpp"
    "${FRMTS_SOURCES_DIR}/hdf4/*.c"
    "${FRMTS_SOURCES_DIR}/hdf4/hdf-eos/*.c")
  set(FRMTS_SRC ${FRMTS_SRC} ${gdalformat_SRC})
  set(FRMTS_INCLUDE ${FRMTS_INCLUDE} "${FRMTS_SOURCES_DIR}/hdf4")
  set(FRMTS_INCLUDE ${FRMTS_INCLUDE} "${FRMTS_SOURCES_DIR}/hdf4/hdf-eos")
  set(FRMTS_CXX_FLAGS "${FRMTS_CXX_FLAGS} -DFRMT_hdf4")
endif(GDAL_WITH_hdf4)

# HFA overview (not optional)
# -----------------------------------------------------------------------------
option(GDAL_WITH_hfa "Compilation of HFA format" ON)
mark_as_advanced(GDAL_WITH_hfa)

if(GDAL_WITH_hfa)
  file(GLOB gdalformat_SRC
    "${FRMTS_SOURCES_DIR}/hfa/*.cpp")
  set(FRMTS_SRC ${FRMTS_SRC} ${gdalformat_SRC})
  set(FRMTS_INCLUDE ${FRMTS_INCLUDE} "${FRMTS_SOURCES_DIR}/hfa")
  set(FRMTS_CXX_FLAGS "${FRMTS_CXX_FLAGS} -DFRMT_hfa")
endif(GDAL_WITH_hfa)



# gtiff overview (not optional)
# -----------------------------------------------------------------------------
# note that this is not the gtiff format, but just the additional gdal methods
file(GLOB gdalformat_SRC
  "${FRMTS_SOURCES_DIR}/gtiff/*.cpp"
  "${FRMTS_SOURCES_DIR}/gtiff/*.c")
set(FRMTS_SRC ${FRMTS_SRC} ${gdalformat_SRC})
set(FRMTS_INCLUDE ${FRMTS_INCLUDE} "${FRMTS_SOURCES_DIR}/gtiff")

# ISO8211.
# -----------------------------------------------------------------------------
option(GDAL_WITH_iso8211 "Compilation of iso8211 format" ON)
mark_as_advanced(GDAL_WITH_iso8211)

if(GDAL_WITH_iso8211)
  set(gdalformat_SRC
      ${FRMTS_SOURCES_DIR}/iso8211/ddfmodule.cpp
      ${FRMTS_SOURCES_DIR}/iso8211/ddfutils.cpp
      ${FRMTS_SOURCES_DIR}/iso8211/ddffielddefn.cpp
      ${FRMTS_SOURCES_DIR}/iso8211/ddfrecord.cpp
      ${FRMTS_SOURCES_DIR}/iso8211/ddffield.cpp
      ${FRMTS_SOURCES_DIR}/iso8211/ddfsubfielddefn.cpp)

  set(FRMTS_SRC ${FRMTS_SRC} ${gdalformat_SRC})
  set(FRMTS_INCLUDE ${FRMTS_INCLUDE} "${FRMTS_SOURCES_DIR}/iso8211")
  set(FRMTS_CXX_FLAGS "${FRMTS_CXX_FLAGS} -DFRMT_iso8211")
endif(GDAL_WITH_iso8211)

# usgsdem overview
# -----------------------------------------------------------------------------
option(GDAL_WITH_usgsdem "Compilation of usgsdem format" ON)
mark_as_advanced(GDAL_WITH_usgsdem)

if(GDAL_WITH_usgsdem)
  file(GLOB gdalformat_SRC
    "${FRMTS_SOURCES_DIR}/usgsdem/*.cpp")
  set(FRMTS_SRC ${FRMTS_SRC} ${gdalformat_SRC})
  set(FRMTS_INCLUDE ${FRMTS_INCLUDE} "${FRMTS_SOURCES_DIR}/usgsdem")
  set(FRMTS_CXX_FLAGS "${FRMTS_CXX_FLAGS} -DFRMT_usgsdem")
endif(GDAL_WITH_usgsdem)


# -----------------------------------------------------------------------------
set(GDAL_FORMAT_LIST ${GDAL_FORMAT_LIST}
  aaigrid
  adrg
  aigrid
  airsar
  blx
  bmp
  bsb
  ceos
  ceos2
  coasp
  cosar
  dimap
#  dods
  dted
#  ecw
  envisat
  ers
  fit
# georaster
# gif
# grib
#
  gxf
# hdf4
#  hdf5
  ilwis
  ingr
# iso8211
  mem
)

# Formats with standard compilation
foreach(format ${GDAL_FORMAT_LIST})
  message(STATUS "Compiling format: ${format}")
  file(GLOB gdalformat_SRC
    "${FRMTS_SOURCES_DIR}/${format}/*.cpp"
    "${FRMTS_SOURCES_DIR}/${format}/*.c")
  set(FRMTS_SRC ${FRMTS_SRC} ${gdalformat_SRC})
  set(FRMTS_INCLUDE ${FRMTS_INCLUDE} "${FRMTS_SOURCES_DIR}/${format}")
  set(FRMTS_CXX_FLAGS "${FRMTS_CXX_FLAGS} -DFRMT_${format}")
  option(GDAL_FRMT_${format} "Compilation of ${format} format" ON)
  mark_as_advanced(GDAL_FRMT_${format})
endforeach(format)

remove(FRMTS_SRC "${FRMTS_SOURCES_DIR}/hfa/hfatest.cpp")
remove(FRMTS_SRC "${FRMTS_SOURCES_DIR}/bsb/bsb2raw.c")
remove(FRMTS_SRC "${FRMTS_SOURCES_DIR}/ceos/ceostest.c")
remove(FRMTS_SRC "${FRMTS_SOURCES_DIR}/dted/dted_test.c")
remove(FRMTS_SRC "${FRMTS_SOURCES_DIR}/envisat/envisat_dump.c")
remove(FRMTS_SRC "${FRMTS_SOURCES_DIR}/envisat/dumpgeo.c")
remove(FRMTS_SRC "${FRMTS_SOURCES_DIR}/nitf/nitfdump.c")
remove(FRMTS_SRC "${FRMTS_SOURCES_DIR}/ntf/ntfdump.cpp")

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FRMTS_CXX_FLAGS}" PARENT_SCOPE)
set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS} ${FRMTS_CXX_FLAGS}" PARENT_SCOPE)

set(GDAL_FRMTS_SRC ${FRMTS_SRC} ${GDAL_FRMTS_SRC} PARENT_SCOPE)
set(GDAL_FRMTS_INCLUDE ${FRMTS_INCLUDE} ${GDAL_FRMTS_SRC} PARENT_SCOPE)

