From 4c0053d5e791ccc56da035569f8a99f8d72d1c71 Mon Sep 17 00:00:00 2001 From: hbruintjes Date: Thu, 21 Apr 2016 16:43:22 +0200 Subject: [PATCH] Make the Ginac find package more standard compliant Former-commit-id: b6176f1d2dad8e5941493fa96ef4c23111ee9c59 --- resources/cmake/FindGLPK.cmake | 2 +- resources/cmake/FindGiNaC.cmake | 68 ++++++++++++++++++++++++--------- 2 files changed, 50 insertions(+), 20 deletions(-) diff --git a/resources/cmake/FindGLPK.cmake b/resources/cmake/FindGLPK.cmake index 2c2f4a5c7..4f723f4ec 100644 --- a/resources/cmake/FindGLPK.cmake +++ b/resources/cmake/FindGLPK.cmake @@ -39,7 +39,7 @@ elseif(GLPK_INCLUDE_DIR AND EXISTS "${GLPK_INCLUDE_DIR}/glpk.h") unset(glpk_minor_version) endif() -# handle the QUIETLY and REQUIRED arguments and set LIBXML2_FOUND to TRUE if +# handle the QUIETLY and REQUIRED arguments and set GLPK_FOUND to TRUE if # all listed variables are TRUE include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLPK diff --git a/resources/cmake/FindGiNaC.cmake b/resources/cmake/FindGiNaC.cmake index abea0e59b..13e8ea59e 100644 --- a/resources/cmake/FindGiNaC.cmake +++ b/resources/cmake/FindGiNaC.cmake @@ -1,24 +1,54 @@ -set( GINAC_FOUND FALSE ) +# - Try to find libginac +# Once done this will define +# GINAC_FOUND - System has ginac +# GINAC_INCLUDE_DIR - The ginac include directory +# GINAC_LIBRARIES - The libraries needed to use ginac +# GINAC_VERSION_STRING - The version of ginac ("major.minor.micro") -find_path( GINAC_INCLUDE_DIR ginac.h - /usr/include/ginac - /usr/local/include/ginac - /opt/local/include/ginac - $ENV{UNITTESTXX_PATH}/src - $ENV{UNITTESTXX_INCLUDE_PATH} ) +# use pkg-config to get the directories and then use these values +# in the find_path() and find_library() calls +find_package(PkgConfig QUIET) +PKG_CHECK_MODULES(PC_GINAC QUIET ginac) -find_library( GINAC_LIBRARIES NAMES ginac PATHS - /usr/lib - /usr/local/lib - /opt/local/lib - $ENV{UNITTESTXX_PATH} - ENV{UNITTESTXX_LIBRARY_PATH} ) +find_path(GINAC_INCLUDE_DIR NAMES ginac.h + HINTS + ${PC_GINAC_INCLUDEDIR} + ${PC_GINAC_INCLUDE_DIRS} + PATH_SUFFIXES ginac + ) -if( GINAC_INCLUDE_DIR AND GINAC_LIBRARIES ) - SET( GINAC_FOUND TRUE ) -ENDIF (GINAC_INCLUDE_DIR AND GINAC_LIBRARIES) +find_library(GINAC_LIBRARIES NAMES ginac + HINTS + ${PC_GINAC_LIBDIR} + ${PC_GINAC_LIBRARY_DIRS} + ) +if(PC_GINAC_VERSION) + set(GINAC_VERSION_STRING ${PC_GINAC_VERSION}) +elseif(GINAC_INCLUDE_DIR AND EXISTS "${GINAC_INCLUDE_DIR}/ginac.h") + file(STRINGS "${GINAC_INCLUDE_DIR}/ginac.h" ginac_major_version + REGEX "^#define[\t ]+GINACLIB_MAJOR_VERSION[\t ]+.+") + file(STRINGS "${GINAC_INCLUDE_DIR}/ginac.h" ginac_minor_version + REGEX "^#define[\t ]+GINACLIB_MINOR_VERSION[\t ]+.+") + file(STRINGS "${GINAC_INCLUDE_DIR}/ginac.h" ginac_micro_version + REGEX "^#define[\t ]+GINACLIB_MICRO_VERSION[\t ]+.+") + string(REGEX REPLACE "^#define[\t ]+GINACLIB_MAJOR_VERSION[\t ]+(.+)" "\\1" + ginac_major_version "${ginac_major_version}") + string(REGEX REPLACE "^#define[\t ]+GINACLIB_MINOR_VERSION[\t ]+(.+)" "\\1" + ginac_minor_version "${ginac_minor_version}") + string(REGEX REPLACE "^#define[\t ]+GINACLIB_MICRO_VERSION[\t ]+(.+)" "\\1" + ginac_micro_version "${ginac_micro_version}") + set(GINAC_VERSION_STRING "${ginac_major_version}.${ginac_minor_version}.${ginac_micro_version}") + unset(ginac_major_version) + unset(ginac_minor_version) + unset(ginac_micro_version) +endif() -MARK_AS_ADVANCED ( GINAC_INCLUDE_DIR - GINAC_LIBRARIES - ) +# handle the QUIETLY and REQUIRED arguments and set GINAC_FOUND to TRUE if +# all listed variables are TRUE +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(GINAC + REQUIRED_VARS GINAC_LIBRARIES GINAC_INCLUDE_DIR + VERSION_VAR GINAC_VERSION_STRING) + +mark_as_advanced(GINAC_INCLUDE_DIR GINAC_LIBRARIES)