From f7ca1ebaa5a527f817892bc3794452df1a6c20c6 Mon Sep 17 00:00:00 2001 From: Stefan Radomski Date: Tue, 14 Jan 2014 14:40:54 +0100 Subject: Use pkg-config to search for SWI Prolog --- contrib/cmake/FindSWI.cmake | 256 +++++++++++++++++++++++++------------------- 1 file changed, 145 insertions(+), 111 deletions(-) diff --git a/contrib/cmake/FindSWI.cmake b/contrib/cmake/FindSWI.cmake index cb4d8b3..1eb98cd 100644 --- a/contrib/cmake/FindSWI.cmake +++ b/contrib/cmake/FindSWI.cmake @@ -1,126 +1,160 @@ -set(64BIT_HOST OFF) -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(64BIT_HOST ON) -endif() +if (NOT WIN32) + include(FindPkgConfig) + pkg_check_modules(SWI swipl) +endif (NOT WIN32) + +if (SWI_FOUND) + # message("SWI_LIBRARIES: ${SWI_LIBRARIES}") + # message("SWI_LIBRARY_DIRS: ${SWI_LIBRARY_DIRS}") + # message("SWI_LDFLAGS: ${SWI_LDFLAGS}") + # message("SWI_LDFLAGS_OTHER: ${SWI_LDFLAGS_OTHER}") + # message("SWI_INCLUDE_DIRS: ${SWI_INCLUDE_DIRS}") + # message("SWI_CFLAGS: ${SWI_CFLAGS}") + # message("SWI_CFLAGS_OTHER: ${SWI_CFLAGS_OTHER}") + # + # message("SWI_LIBRARIES_STATIC: ${SWI_LIBRARIES_STATIC}") + # message("SWI_LIBRARY_DIRS_STATIC: ${SWI_LIBRARY_DIRS_STATIC}") + # message("SWI_LDFLAGS_STATIC: ${SWI_LDFLAGS_STATIC}") + # message("SWI_LDFLAGS_OTHER_STATIC: ${SWI_LDFLAGS_OTHER_STATIC}") + # message("SWI_INCLUDE_DIRS_STATIC: ${SWI_INCLUDE_DIRS_STATIC}") + # message("SWI_CFLAGS_STATIC: ${SWI_CFLAGS_STATIC}") + # message("SWI_CFLAGS_OTHER_STATIC: ${SWI_CFLAGS_OTHER_STATIC}") + # message(FATAL_ERROR "") + + set(SWI_INCLUDE_DIR ${SWI_LIBRARY_DIRS}) + set(SWI_LIBRARY ${SWI_LIBRARIES}) + + FIND_PROGRAM(SWI_BINARY swipl) + + FIND_PATH(SWI_CPP_INCLUDE_DIR SWI-cpp.h + PATHS ${SWI_INCLUDE_DIRS} + ) -set(SWI_PLATFORM_ID) -if (UNIX) - if (APPLE AND 64BIT_HOST) - set(SWI_PLATFORM_ID "x86_64-${CMAKE_SYSTEM_NAME}${CMAKE_SYSTEM_VERSION}") - else() - set(SWI_PLATFORM_ID "${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM_NAME}") - endif() else() - set(SWI_PLATFORM_ID "${CMAKE_SYSTEM_PROCESSOR}-windows") -endif() - -if (SWI_PLATFORM_ID) - string(TOLOWER ${SWI_PLATFORM_ID} SWI_PLATFORM_ID) -endif() + set(64BIT_HOST OFF) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(64BIT_HOST ON) + endif() -#message("SWI_PLATFORM_ID: ${SWI_PLATFORM_ID}") - -set (SWI_SEARCH_PATHS) -list (APPEND SWI_SEARCH_PATHS - $ENV{SWI_HOME} - ${CMAKE_FIND_ROOT_PATH} - "/usr/lib/swi-prolog/" - "/opt/local/" - "/usr/local/" - "C:/Program Files (x86)/swipl" - "C:/Program Files/swipl" -) - -#message("SWI_SEARCH_PATHS: ${SWI_SEARCH_PATHS}") - -set (SWI_VERSION) -set (LOOP_DONE 0) -foreach(SWI_SEARCH_PATH ${SWI_SEARCH_PATHS}) - if(NOT LOOP_DONE) - file(GLOB SWI_VERSIONS ${SWI_SEARCH_PATH}/lib/swipl*) - if (SWI_VERSIONS) -# message("SWI_VERSIONS: ${SWI_VERSIONS}") - set(LOOP_DONE 1) - list(SORT SWI_VERSIONS) - list(REVERSE SWI_VERSIONS) - list(GET SWI_VERSIONS 0 SWI_VERSION) - STRING(REGEX REPLACE ".*(([0-9]+).([0-9]+).([0-9]+))$" "\\1" SWI_VERSION "${SWI_VERSION}") + set(SWI_PLATFORM_ID) + if (UNIX) + if (APPLE AND 64BIT_HOST) + set(SWI_PLATFORM_ID "x86_64-${CMAKE_SYSTEM_NAME}${CMAKE_SYSTEM_VERSION}") + else() + set(SWI_PLATFORM_ID "${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_SYSTEM_NAME}") endif() + else() + set(SWI_PLATFORM_ID "${CMAKE_SYSTEM_PROCESSOR}-windows") endif() -endforeach() -#message("SWI_VERSION: ${SWI_VERSION}") + if (SWI_PLATFORM_ID) + string(TOLOWER ${SWI_PLATFORM_ID} SWI_PLATFORM_ID) + endif() -set(SWI_PLATFORMS) -foreach (SWI_SEARCH_PATH ${SWI_SEARCH_PATHS}) - file(GLOB CURR_SWI_PLATFORMS ${SWI_SEARCH_PATH}/lib/swipl-${SWI_VERSION}/lib/*) - foreach(CURR_SWI_PLATFORM ${CURR_SWI_PLATFORMS}) - if(IS_DIRECTORY ${CURR_SWI_PLATFORM}) - list(APPEND SWI_PLATFORMS ${CURR_SWI_PLATFORM}) + #message("SWI_PLATFORM_ID: ${SWI_PLATFORM_ID}") + + set (SWI_SEARCH_PATHS) + list (APPEND SWI_SEARCH_PATHS + $ENV{SWI_HOME} + ${CMAKE_FIND_ROOT_PATH} + "/usr/lib/swi-prolog/" + "/opt/local/" + "/usr/local/" + "C:/Program Files (x86)/swipl" + "C:/Program Files/swipl" + ) + + #message("SWI_SEARCH_PATHS: ${SWI_SEARCH_PATHS}") + + set (SWI_VERSION) + set (LOOP_DONE 0) + foreach(SWI_SEARCH_PATH ${SWI_SEARCH_PATHS}) + if(NOT LOOP_DONE) + file(GLOB SWI_VERSIONS ${SWI_SEARCH_PATH}/lib/swipl*) + if (SWI_VERSIONS) + # message("SWI_VERSIONS: ${SWI_VERSIONS}") + set(LOOP_DONE 1) + list(SORT SWI_VERSIONS) + list(REVERSE SWI_VERSIONS) + list(GET SWI_VERSIONS 0 SWI_VERSION) + STRING(REGEX REPLACE ".*(([0-9]+).([0-9]+).([0-9]+))$" "\\1" SWI_VERSION "${SWI_VERSION}") + endif() endif() endforeach() -endforeach() -#message(FATAL_ERROR "SWI_PLATFORMS: ${SWI_PLATFORMS}") - -#message("SWI_VERSION: ${SWI_VERSION}") - -# -- find prolog headers -FIND_PATH(SWI_INCLUDE_DIR SWI-Prolog.h - PATH_SUFFIXES - include - lib/swipl-${SWI_VERSION}/include - PATHS ${SWI_SEARCH_PATHS} -) - -#message("SWI_INCLUDE_DIR: ${SWI_INCLUDE_DIR}") - -FIND_PATH(SWI_CPP_INCLUDE_DIR SWI-cpp.h - PATH_SUFFIXES - packages/cpp - lib/swipl-${SWI_VERSION}/include - PATHS ${SWI_SEARCH_PATHS} -) - -#message("SWI_CPP_INCLUDE_DIR: ${SWI_CPP_INCLUDE_DIR}") - -FIND_PROGRAM(SWI_BINARY swipl - PATH_SUFFIXES - src - lib/swipl-${SWI_VERSION}/bin/${SWI_PLATFORM_ID} - PATHS ${SWI_SEARCH_PATHS} -) - -FIND_LIBRARY(SWI_LIBRARY_RELEASE - NAMES libswipl swipl - PATH_SUFFIXES - lib/${SWI_PLATFORM_ID} # still in source directory - lib/swipl-${SWI_VERSION}/lib/${SWI_PLATFORM_ID} # after make install + + #message("SWI_VERSION: ${SWI_VERSION}") + + set(SWI_PLATFORMS) + foreach (SWI_SEARCH_PATH ${SWI_SEARCH_PATHS}) + file(GLOB CURR_SWI_PLATFORMS ${SWI_SEARCH_PATH}/lib/swipl-${SWI_VERSION}/lib/*) + foreach(CURR_SWI_PLATFORM ${CURR_SWI_PLATFORMS}) + if(IS_DIRECTORY ${CURR_SWI_PLATFORM}) + list(APPEND SWI_PLATFORMS ${CURR_SWI_PLATFORM}) + endif() + endforeach() + endforeach() + #message(FATAL_ERROR "SWI_PLATFORMS: ${SWI_PLATFORMS}") + + #message("SWI_VERSION: ${SWI_VERSION}") + + # -- find prolog headers + FIND_PATH(SWI_INCLUDE_DIR SWI-Prolog.h + PATH_SUFFIXES + include + lib/swipl-${SWI_VERSION}/include + PATHS ${SWI_SEARCH_PATHS} + ) + + #message("SWI_INCLUDE_DIR: ${SWI_INCLUDE_DIR}") + + FIND_PATH(SWI_CPP_INCLUDE_DIR SWI-cpp.h + PATH_SUFFIXES + packages/cpp + lib/swipl-${SWI_VERSION}/include + PATHS ${SWI_SEARCH_PATHS} + ) + + #message("SWI_CPP_INCLUDE_DIR: ${SWI_CPP_INCLUDE_DIR}") + + FIND_PROGRAM(SWI_BINARY swipl + PATH_SUFFIXES + src + lib/swipl-${SWI_VERSION}/bin/${SWI_PLATFORM_ID} + PATHS ${SWI_SEARCH_PATHS} + ) + + FIND_LIBRARY(SWI_LIBRARY_RELEASE + NAMES libswipl swipl + PATH_SUFFIXES + lib/${SWI_PLATFORM_ID} # still in source directory + lib/swipl-${SWI_VERSION}/lib/${SWI_PLATFORM_ID} # after make install - PATHS ${SWI_SEARCH_PATHS} ${SWI_PLATFORMS} -) - -FIND_LIBRARY(SWI_LIBRARY_DEBUG - NAMES libswipl_d swipl_d - PATH_SUFFIXES - lib/${SWI_PLATFORM_ID} # still in source directory - lib/swipl-${SWI_VERSION}/lib/${SWI_PLATFORM_ID} # after make install - PATHS ${SWI_SEARCH_PATHS} ${SWI_PLATFORMS} -) - -if (NOT SWI_LIBRARY_DEBUG) # no explicit debug build, just reuse release - if (UNIX) - set(SWI_LIBRARY_DEBUG ${SWI_LIBRARY_RELEASE}) + PATHS ${SWI_SEARCH_PATHS} ${SWI_PLATFORMS} + ) + + FIND_LIBRARY(SWI_LIBRARY_DEBUG + NAMES libswipl_d swipl_d + PATH_SUFFIXES + lib/${SWI_PLATFORM_ID} # still in source directory + lib/swipl-${SWI_VERSION}/lib/${SWI_PLATFORM_ID} # after make install + PATHS ${SWI_SEARCH_PATHS} ${SWI_PLATFORMS} + ) + + if (NOT SWI_LIBRARY_DEBUG) # no explicit debug build, just reuse release + if (UNIX) + set(SWI_LIBRARY_DEBUG ${SWI_LIBRARY_RELEASE}) + endif() endif() -endif() -if (SWI_LIBRARY_RELEASE) - list(APPEND SWI_LIBRARY optimized ${SWI_LIBRARY_RELEASE}) - if (SWI_LIBRARY_DEBUG) - list(APPEND SWI_LIBRARY debug ${SWI_LIBRARY_DEBUG}) - elseif(UNIX) - list(APPEND SWI_LIBRARY debug ${SWI_LIBRARY_RELEASE}) - else() - message(FATAL_ERROR "Cannot find debug version of SWI") + if (SWI_LIBRARY_RELEASE) + list(APPEND SWI_LIBRARY optimized ${SWI_LIBRARY_RELEASE}) + if (SWI_LIBRARY_DEBUG) + list(APPEND SWI_LIBRARY debug ${SWI_LIBRARY_DEBUG}) + elseif(UNIX) + list(APPEND SWI_LIBRARY debug ${SWI_LIBRARY_RELEASE}) + else() + message(FATAL_ERROR "Cannot find debug version of SWI") + endif() endif() endif() -- cgit v0.12