From bf8b880150cc3dea718922b148478f66c1c6d0dc Mon Sep 17 00:00:00 2001 From: Alexander Golubev Date: Thu, 29 Feb 2024 04:10:48 +0300 Subject: [PATCH] cmake: fix libfbclient discovery if fb_config is not present Signed-off-by: Alexander Golubev --- ConfigureChecks.cmake | 59 ++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index f5be9c4d..0304964b 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -424,39 +424,52 @@ endif() if( (BUILD_SQL_PLUGIN_IBASE OR (WITH_MODULE_SQL AND WITH_SQL_DRIVER_IBASE)) AND NOT FBCLIENT_FOUND ) find_program( FIREBIRD_CONFIG fb_config ) - if( NOT FIREBIRD_CONFIG ) - tde_message_fatal( "IBASE support has been requested, but was not found on your system" ) - else() + if( FIREBIRD_CONFIG ) macro( _fbclient_config __type __var ) - execute_process( - COMMAND ${FIREBIRD_CONFIG} --${__type} - OUTPUT_VARIABLE ${__var} - RESULT_VARIABLE __result - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if( _result ) - tde_message_fatal( "Unable to run ${FIREBIRD_CONFIG}!" ) - endif() + if (NOT DEFINED ${__var}) + execute_process( + COMMAND ${FIREBIRD_CONFIG} --${__type} + OUTPUT_VARIABLE ${__var} + RESULT_VARIABLE __result + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if( _result ) + tde_message_fatal( "Unable to run ${FIREBIRD_CONFIG}!" ) + endif() + string( REGEX REPLACE "(^| +)-." ";" ${__var} "${${__var}}" ) + endif() endmacro() _fbclient_config( cflags FBCLIENT_INCLUDE_DIRS ) _fbclient_config( libs FBCLIENT_LIBRARIES ) - if( FBCLIENT_INCLUDE_DIRS ) - string( REGEX REPLACE "(^| +)-I" ";" FBCLIENT_INCLUDE_DIRS "${FBCLIENT_INCLUDE_DIRS}" ) + set( FBCLIENT_FOUND "ON" CACHE INTERNAL "" ) + else( ) + if( NOT FBCLIENT_LIBRARIES ) + set( FBCLIENT_LIBRARIES "fbclient" ) endif() - if( FBCLIENT_LIBRARIES ) - string( REGEX REPLACE "(^| +)-l" ";" FBCLIENT_LIBRARIES "${FBCLIENT_LIBRARIES}" ) - endif() + tde_save_and_set( CMAKE_REQUIRED_INCLUDES "${FBCLIENT_INCLUDE_DIRS}" ) + tde_save_and_set( CMAKE_REQUIRED_LIBRARIES "${FBCLIENT_LIBRARIES}" ) + check_c_source_compiles("#include + int main(){void(*p)(void)=(void(*)(void))*isc_attach_database;}" + FBCLIENT_FOUND ) + tde_restore( CMAKE_REQUIRED_INCLUDES ) + tde_restore( CMAKE_REQUIRED_LIBRARIES ) + + endif( FIREBIRD_CONFIG ) + + message( STATUS "FIREBIRD includes ${FBCLIENT_INCLUDE_DIRS}") + message( STATUS "FIREBIRD libraries ${FBCLIENT_LIBRARIES}") - set( FBCLIENT_INCLUDE_DIRS "${FBCLIENT_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE ) - set( FBCLIENT_LIBRARIES "${FBCLIENT_LIBRARIES}" CACHE INTERNAL "" FORCE ) - set( FBCLIENT_FOUND 1 CACHE INTERNAL "" FORCE ) + set( FBCLIENT_INCLUDE_DIRS "${FBCLIENT_INCLUDE_DIRS}" CACHE INTERNAL "" ) + set( FBCLIENT_LIBRARIES "${FBCLIENT_LIBRARIES}" CACHE INTERNAL "" ) - message( STATUS "FIREBIRD includes ${FBCLIENT_INCLUDE_DIRS} ") - message( STATUS "FIREBIRD libraries ${FBCLIENT_LIBRARIES} ") - endif( NOT FIREBIRD_CONFIG ) + if( FBCLIENT_FOUND ) + set( SQL_IBASE QT_SQL_IBASE ) + else() + tde_message_fatal( "IBASE support has been requested, but was not found on your system" ) + endif() endif() if( (BUILD_SQL_PLUGIN_SQLITE OR (WITH_MODULE_SQL AND WITH_SQL_DRIVER_SQLITE)) AND NOT SQLITE_FOUND )