Skip to content

Commit

Permalink
Oracle: fix CMake support and fix compiler warnings (#4812)
Browse files Browse the repository at this point in the history
* CMake: fix OCI support

* GeoRaster: fix compiler warnings with MSVC
  • Loading branch information
rouault authored Nov 16, 2021
1 parent f254d76 commit c84cc55
Show file tree
Hide file tree
Showing 9 changed files with 55 additions and 20 deletions.
1 change: 1 addition & 0 deletions cmake/helpers/CheckDependentLibraries.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,7 @@ else()
set(HAVE_PDFLIB OFF)
endif()

set(Oracle_CAN_USE_CLNTSH_AS_MAIN_LIBRARY ON)
gdal_check_package(Oracle "Enable Oracle OCI driver")
gdal_check_package(TEIGHA "")
gdal_check_package(FileGDB "Enable FileGDB (based on closed-source SDK) driver" CAN_DISABLE)
Expand Down
20 changes: 18 additions & 2 deletions cmake/modules/packages/FindOracle.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,13 @@
# Copyright (c) 2018 Hiroshi Miura
#

file(TO_CMAKE_PATH "$ENV{ORACLE_HOME}" ORACLE_HOME)
if(DEFINED Oracle_ROOT)
set(ORACLE_HOME "${Oracle_ROOT}")
elseif(DEFINED ORACLE_ROOT)
set(ORACLE_HOME "${ORACLE_ROOT}")
else()
file(TO_CMAKE_PATH "$ENV{ORACLE_HOME}" ORACLE_HOME)
endif()
get_filename_component(XE_HOME "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ORACLE\\KEY_XE;ORACLE_HOME]" ABSOLUTE CACHE)

set(ORACLE_INCLUDES_LOCATION
Expand Down Expand Up @@ -137,6 +143,12 @@ find_library(Oracle_LIBRARY
NO_DEFAULT_PATH
)

# Oracle InstantClient 12.1 has no liboci. It seems we just need libclntsh
# for the GDAL drivers.
if( Oracle_CAN_USE_CLNTSH_AS_MAIN_LIBRARY AND "${Oracle_FIND_COMPONENTS}" STREQUAL "")
set(Oracle_FIND_COMPONENTS CLNTSH)
endif()

foreach(_comp IN LISTS Oracle_FIND_COMPONENTS)
set(Oracle_${_comp}_FOUND FALSE)
endforeach()
Expand Down Expand Up @@ -168,6 +180,10 @@ foreach(_comp IN LISTS Oracle_known_components)
endif()
endforeach()

if( NOT Oracle_LIBRARY AND Oracle_CAN_USE_CLNTSH_AS_MAIN_LIBRARY AND Oracle_CLNTSH_LIBRARY )
set(Oracle_LIBRARY "${Oracle_CLNTSH_LIBRARY}")
endif()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Oracle
FOUND_VAR Oracle_FOUND
Expand All @@ -183,7 +199,7 @@ IF(Oracle_FOUND)
list(APPEND Oracle_INCLUDE_DIRS ${Oracle_XML_INCLUDE_DIR})
endif()
if(NOT TARGET Oracle::OCI)
add_library(Oracle::OCI UNKNOWN IMPORETED)
add_library(Oracle::OCI UNKNOWN IMPORTED)
set_target_properties(Oracle::OCI PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES ${Oracle_INCLUDE_DIR}
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
Expand Down
8 changes: 8 additions & 0 deletions doc/source/build_hints.rst
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,14 @@ be found.
Path to library file libltidsdk


Oracle
******

.. option:: Oracle_ROOT

Path to the root directory of the Oracle Instant Client SDK


PCRE2
*****

Expand Down
2 changes: 1 addition & 1 deletion frmts/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ gdal_dependent_format(sde "ESRI ArcSDE Raster" "HAVE_SDE")
# LizardTech's decoding software development kit (DSDK)
gdal_dependent_format(mrsid "Multi-resolution Seamless Image Database" "HAVE_MRSID")
# gdal_dependent_format(mrsid_lidar "Multi-resolution Seamless Image Database - LiDAR support" "HAVE_MRSID")
gdal_dependent_format(georaster "Oracle Spatial GeoRaster" "HAVE_ORACLE")
gdal_dependent_format(georaster "Oracle Spatial GeoRaster" "HAVE_ORACLE" DRIVER_NAME_OPTION GEOR)
gdal_dependent_format(ecw "ERDAS JPEG2000 (.jp2)" "HAVE_ECW")

# Register all frmt drivers according to FRMT_<driver> flags
Expand Down
23 changes: 17 additions & 6 deletions frmts/georaster/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,22 +1,33 @@
add_gdal_driver(
TARGET gdal_GEOR
SOURCES georaster_dataset.cpp georaster_priv.h georaster_rasterband.cpp georaster_wrapper.cpp
SOURCES georaster_dataset.cpp georaster_priv.h georaster_rasterband.cpp georaster_wrapper.cpp oci_wrapper.cpp
cpl_vsil_ocilob.cpp
DEF FRMT_georaster PLUGIN_CAPABLE_IF "NOT GDAL_USE_LIBZ_INTERNAL;NOT GDAL_USE_LIBJPEG_INTERNAL")
gdal_standard_includes(gdal_GEOR)
if (GDAL_USE_LIBZ_INTERNAL)
target_include_directories(gdal_GEOR PRIVATE $<TARGET_PROPERTY:libz,SOURCE_DIR>)
endif ()
if (HAVE_OCI)
target_include_directories(gdal_GEOR PRIVATE ${OCI_INCLUDE_DIR})
gdal_target_link_libraries(gdal_GEOR PRIVATE ${OCI_LIBRARY})
endif ()

if (GDAL_USE_LIBJPEG_INTERNAL)
target_include_directories(gdal_GEOR PRIVATE $<TARGET_PROPERTY:libjpeg,SOURCE_DIR>)
target_compile_definitions(gdal_GEOR PRIVATE -DJPEG_SUPPORTED)
else ()
endif ()

gdal_target_link_libraries(TARGET gdal_GEOR LIBRARIES Oracle::OCI)

if (NOT GDAL_USE_LIBJPEG_INTERNAL)
if (HAVE_JPEG)
target_include_directories(gdal_GEOR PRIVATE ${JPEG_INCLUDE_DIRS})
target_compile_definitions(gdal_GEOR PRIVATE -DJPEG_SUPPORTED)
gdal_target_link_libraries(TARGET gdal_GEOR LIBRARIES JPEG::JPEG)
endif ()
endif ()

if (NOT GDAL_USE_LIBJPEG_INTERNAL)
gdal_target_link_libraries(TARGET gdal_GEOR LIBRARIES ZLIB::ZLIB)
endif ()

if (GDAL_ENABLE_FRMT_GEOR_PLUGIN)
# A bit ugly to add this file from the JPEG driver !
target_sources(gdal_GEOR PRIVATE ../jpeg/vsidataio.cpp)
endif ()
8 changes: 4 additions & 4 deletions frmts/georaster/cpl_vsil_ocilob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -322,8 +322,8 @@ size_t VSIOCILobHandle::Read( void* pBuffer, size_t nSize, size_t nCount )

GUIntBig nRead = poStatement->ReadBlob( phLocator,
pBuffer,
(nCurOff + 1),
nBytes );
static_cast<unsigned long>(nCurOff + 1),
static_cast<unsigned long>(nBytes) );

nCurOff += (GUIntBig) nRead;

Expand All @@ -347,8 +347,8 @@ size_t VSIOCILobHandle::Write( const void * pBuffer,

GUIntBig nWrite = poStatement->WriteBlob( phLocator,
(void*) pBuffer,
(nCurOff + 1),
nBytes );
static_cast<unsigned long>(nCurOff + 1),
static_cast<unsigned long>(nBytes) );

nCurOff += (GUIntBig) nWrite;

Expand Down
4 changes: 2 additions & 2 deletions frmts/georaster/georaster_dataset.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -760,8 +760,8 @@ boolean GeoRasterDataset::JPEG_CopyDirect( const char* pszJPGFilename,

const auto nWrite = poStmt->WriteBlob( poLocator,
(void*) pBuffer,
(nCurOff + 1),
nSize );
static_cast<unsigned long>(nCurOff + 1),
static_cast<unsigned long>(nSize) );

nCurOff += nWrite;
nCount += nSize;
Expand Down
6 changes: 3 additions & 3 deletions frmts/georaster/oci_wrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1464,7 +1464,7 @@ unsigned long OWStatement::GetBlobLength( OCILobLocator* phLocator )
return 0;
}

return nSize;
return static_cast<unsigned long>(nSize);
}

unsigned long OWStatement::ReadBlob( OCILobLocator* phLocator,
Expand Down Expand Up @@ -1536,7 +1536,7 @@ unsigned long OWStatement::WriteBlob( OCILobLocator* phLocator,
return (unsigned long) 0;
}

return nAmont;
return static_cast<unsigned long>(nAmont);
}

char* OWStatement::ReadCLob( OCILobLocator* phLocator )
Expand Down Expand Up @@ -1856,7 +1856,7 @@ void OWUpperIfNoQuotes( char* pszText )

for( size_t i = 0; i < nSize; i++ )
{
pszText[i] = toupper( pszText[i] );
pszText[i] = static_cast<char>(toupper( pszText[i] ));
}
}

Expand Down
3 changes: 1 addition & 2 deletions ogr/ogrsf_frmts/oci/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,4 @@ set(SOURCE
add_gdal_driver(TARGET ogr_OCI SOURCES ${SOURCE} PLUGIN_CAPABLE)

gdal_standard_includes(ogr_OCI)
target_include_directories(ogr_OCI PRIVATE ${OCI_INCLUDE_DIRS})
gdal_target_link_libraries(TARGET ogr_OCI LIBRARIES ${OCI_LIBRARIES})
gdal_target_link_libraries(TARGET ogr_OCI LIBRARIES Oracle::OCI)

0 comments on commit c84cc55

Please sign in to comment.