From 5ef723c7f6b6d9d86559cef519265f4af538656f Mon Sep 17 00:00:00 2001 From: heinrich5991 Date: Tue, 24 Oct 2017 12:10:46 +0200 Subject: [PATCH] Only use bundled includes only if also using bundled libs Fixes #867. Fixes #922. --- CMakeLists.txt | 15 ++++++++++++--- cmake/FindCurl.cmake | 11 ++++++----- cmake/FindFreetype.cmake | 13 +++++++------ cmake/FindGLEW.cmake | 11 ++++++----- cmake/FindMySQL.cmake | 32 ++++++++++++++++---------------- cmake/FindOgg.cmake | 14 +++++++------- cmake/FindOpus.cmake | 13 +++++++------ cmake/FindOpusfile.cmake | 13 +++++++------ cmake/FindSDL2.cmake | 14 +++++++------- 9 files changed, 75 insertions(+), 61 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 73ca959d5..7c0ebcdb4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,11 +72,9 @@ set(CLIENT_EXECUTABLE DDNet CACHE STRING "Name of the build client executable") # DEPENDENCIES ######################################################################## -function(set_extra_dirs VARIABLE NAME) +function(set_extra_dirs_lib VARIABLE NAME) set("PATHS_${VARIABLE}_LIBDIR" PARENT_SCOPE) set("HINTS_${VARIABLE}_LIBDIR" PARENT_SCOPE) - set("PATHS_${VARIABLE}_INCLUDEDIR" PARENT_SCOPE) - set("HINTS_${VARIABLE}_INCLUDEDIR" PARENT_SCOPE) if(PREFER_BUNDLED_LIBS) set(TYPE HINTS) else() @@ -90,6 +88,17 @@ function(set_extra_dirs VARIABLE NAME) set("${TYPE}_${VARIABLE}_INCLUDEDIR" "ddnet-libs/${NAME}/include" PARENT_SCOPE) endfunction() +function(set_extra_dirs_include VARIABLE NAME LIBRARY) + set("PATHS_${VARIABLE}_INCLUDEDIR" PARENT_SCOPE) + set("HINTS_${VARIABLE}_INCLUDEDIR" PARENT_SCOPE) + if(LIBRARY) + string(FIND "${LIBRARY}" "${PROJECT_SOURCE_DIR}" LOCAL_PATH_POS) + if(LOCAL_PATH_POS EQUAL 0 AND TARGET_BITS AND TARGET_OS) + set("HINTS_${VARIABLE}_INCLUDEDIR" "ddnet-libs/${NAME}/include" PARENT_SCOPE) + endif() + endif() +endfunction() + # Check for PkgConfig once so all the other `find_package` calls can do it # quietly. find_package(PkgConfig) diff --git a/cmake/FindCurl.cmake b/cmake/FindCurl.cmake index b02227aea..837a81a24 100644 --- a/cmake/FindCurl.cmake +++ b/cmake/FindCurl.cmake @@ -1,16 +1,17 @@ find_package(PkgConfig QUIET) pkg_check_modules(PC_CURL libcurl) -set_extra_dirs(CURL curl) -find_path(CURL_INCLUDEDIR curl/curl.h - HINTS ${HINTS_CURL_INCLUDEDIR} ${PC_CURL_INCLUDEDIR} ${PC_CURL_INCLUDE_DIRS} - PATHS ${PATHS_CURL_INCLUDEDIR} -) +set_extra_dirs_lib(CURL curl) find_library(CURL_LIBRARY NAMES curl HINTS ${HINTS_CURL_LIBDIR} ${PC_CURL_LIBDIR} ${PC_CURL_LIBRARY_DIRS} PATHS ${PATHS_CURL_LIBDIR} ) +set_extra_dirs_include(CURL curl "${CURL_LIBRARY}") +find_path(CURL_INCLUDEDIR curl/curl.h + HINTS ${HINTS_CURL_INCLUDEDIR} ${PC_CURL_INCLUDEDIR} ${PC_CURL_INCLUDE_DIRS} + PATHS ${PATHS_CURL_INCLUDEDIR} +) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Curl DEFAULT_MSG CURL_LIBRARY CURL_INCLUDEDIR) diff --git a/cmake/FindFreetype.cmake b/cmake/FindFreetype.cmake index c4b354f2f..f6f34392e 100644 --- a/cmake/FindFreetype.cmake +++ b/cmake/FindFreetype.cmake @@ -1,18 +1,19 @@ find_package(PkgConfig QUIET) pkg_check_modules(PC_FREETYPE freetype2) -set_extra_dirs(FREETYPE freetype) +set_extra_dirs_lib(FREETYPE freetype) +find_library(FREETYPE_LIBRARY + NAMES freetype + HINTS ${HINTS_FREETYPE_LIBDIR} ${PC_FREETYPE_LIBDIR} ${PC_FREETYPE_LIBRARY_DIRS} + PATHS ${PATHS_FREETYPE_LIBDIR} +) +set_extra_dirs_include(FREETYPE freetype "${FREETYPE_LIBRARY}") find_path(FREETYPE_INCLUDEDIR NAMES config/ftheader.h freetype/config/ftheader.h PATH_SUFFIXES freetype2 HINTS ${HINTS_FREETYPE_INCLUDEDIR} ${PC_FREETYPE_INCLUDEDIR} ${PC_FREETYPE_INCLUDE_DIRS} PATHS ${PATHS_FREETYPE_INCLUDEDIR} ) -find_library(FREETYPE_LIBRARY - NAMES freetype - HINTS ${HINTS_FREETYPE_LIBDIR} ${PC_FREETYPE_LIBDIR} ${PC_FREETYPE_LIBRARY_DIRS} - PATHS ${PATHS_FREETYPE_LIBDIR} -) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Freetype DEFAULT_MSG FREETYPE_LIBRARY FREETYPE_INCLUDEDIR) diff --git a/cmake/FindGLEW.cmake b/cmake/FindGLEW.cmake index 038e0153a..0a94ed00a 100644 --- a/cmake/FindGLEW.cmake +++ b/cmake/FindGLEW.cmake @@ -1,16 +1,17 @@ find_package(PkgConfig QUIET) pkg_check_modules(PC_GLEW libglew) -set_extra_dirs(GLEW glew) -find_path(GLEW_INCLUDEDIR GL - HINTS ${HINTS_GLEW_INCLUDEDIR} ${PC_GLEW_INCLUDEDIR} ${PC_GLEW_INCLUDE_DIRS} - PATHS ${PATHS_GLEW_INCLUDEDIR} -) +set_extra_dirs_lib(GLEW glew) find_library(GLEW_LIBRARY NAMES GLEW glew32 HINTS ${HINTS_GLEW_LIBDIR} ${PC_GLEW_LIBDIR} ${PC_GLEW_LIBRARY_DIRS} PATHS ${PATHS_GLEW_LIBDIR} ) +set_extra_dirs_include(GLEW glew "${GLEW_LIBRARY}") +find_path(GLEW_INCLUDEDIR GL + HINTS ${HINTS_GLEW_INCLUDEDIR} ${PC_GLEW_INCLUDEDIR} ${PC_GLEW_INCLUDE_DIRS} + PATHS ${PATHS_GLEW_INCLUDEDIR} +) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(GLEW DEFAULT_MSG GLEW_LIBRARY GLEW_INCLUDEDIR) diff --git a/cmake/FindMySQL.cmake b/cmake/FindMySQL.cmake index 6082a9197..67b62d812 100644 --- a/cmake/FindMySQL.cmake +++ b/cmake/FindMySQL.cmake @@ -34,30 +34,30 @@ if(MYSQL_CONFIG) endforeach(LIB ${MYSQL_LIBS}) endif(MYSQL_CONFIG) -set_extra_dirs(MYSQL mysql) - +set_extra_dirs_lib(MYSQL mysql) +find_library(MYSQL_LIBRARY + NAMES "mysqlclient" "mysqlclient_r" "mariadbclient" + HINTS ${HINTS_MYSQL_LIBDIR} ${MYSQL_CONFIG_LIBRARY_PATH} + PATHS ${PATHS_MYSQL_LIBDIR} +) +set_extra_dirs_include(MYSQL mysql "${MYSQL_LIBRARY}") find_path(MYSQL_INCLUDEDIR NAMES "mysql.h" HINTS ${HINTS_MYSQL_INCLUDEDIR} ${MYSQL_CONFIG_INCLUDE_DIR} PATHS ${PATHS_MYSQL_INCLUDEDIR} ) -find_library(MYSQL_LIBRARY - NAMES "mysqlclient" "mysqlclient_r" "mariadbclient" - HINTS ${HINTS_MYSQL_LIBDIR} ${MYSQL_CONFIG_LIBRARY_PATH} - PATHS ${PATHS_MYSQL_LIBDIR} -) - -find_path(MYSQL_CPPCONN_INCLUDEDIR - NAMES "mysql_connection.h" - HINTS ${HINTS_MYSQL_INCLUDEDIR} ${MYSQL_CONFIG_INCLUDE_DIR} - PATHS ${PATHS_MYSQL_INCLUDEDIR} -) - +set_extra_dirs_lib(MYSQL_CPPCONN mysql) find_library(MYSQL_CPPCONN_LIBRARY NAMES "mysqlcppconn" "mysqlcppconn-static" - HINTS ${HINTS_MYSQL_LIBDIR} ${MYSQL_CONFIG_LIBRARY_PATH} - PATHS ${PATHS_MYSQL_LIBDIR} + HINTS ${HINTS_MYSQL_CPPCONN_LIBDIR} ${MYSQL_CONFIG_LIBRARY_PATH} + PATHS ${PATHS_MYSQL_CPPCONN_LIBDIR} +) +set_extra_dirs_include(MYSQL_CPPCONN mysql "${MYSQL_CPPCONN_LIBRARY}") +find_path(MYSQL_CPPCONN_INCLUDEDIR + NAMES "mysql_connection.h" + HINTS ${HINTS_MYSQL_CPPCONN_INCLUDEDIR} ${MYSQL_CONFIG_INCLUDE_DIR} + PATHS ${PATHS_MYSQL_CPPCONN_INCLUDEDIR} ) include(FindPackageHandleStandardArgs) diff --git a/cmake/FindOgg.cmake b/cmake/FindOgg.cmake index 75250ee8b..1bcfdc52f 100644 --- a/cmake/FindOgg.cmake +++ b/cmake/FindOgg.cmake @@ -1,18 +1,18 @@ find_package(PkgConfig QUIET) pkg_check_modules(PC_OGG ogg) -set_extra_dirs(OGG opus) - -find_path(OGG_INCLUDEDIR ogg.h - PATH_SUFFIXES ogg - HINTS ${HINTS_OGG_INCLUDEDIR} ${PC_OGG_INCLUDEDIR} ${PC_OGG_INCLUDE_DIRS} - PATHS ${PATHS_OGG_INCLUDEDIR} -) +set_extra_dirs_lib(OGG opus) find_library(OGG_LIBRARY NAMES ogg HINTS ${HINTS_OGG_LIBDIR} ${PC_OGG_LIBDIR} ${PC_OGG_LIBRARY_DIRS} PATHS ${PATHS_OGG_LIBDIR} ) +set_extra_dirs_include(OGG opus "${OGG_LIBRARY}") +find_path(OGG_INCLUDEDIR ogg.h + PATH_SUFFIXES ogg + HINTS ${HINTS_OGG_INCLUDEDIR} ${PC_OGG_INCLUDEDIR} ${PC_OGG_INCLUDE_DIRS} + PATHS ${PATHS_OGG_INCLUDEDIR} +) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Ogg DEFAULT_MSG OGG_INCLUDEDIR) diff --git a/cmake/FindOpus.cmake b/cmake/FindOpus.cmake index 71ae53674..efa9ef498 100644 --- a/cmake/FindOpus.cmake +++ b/cmake/FindOpus.cmake @@ -1,17 +1,18 @@ find_package(PkgConfig QUIET) pkg_check_modules(PC_OPUS opus) -set_extra_dirs(OPUS opus) -find_path(OPUS_INCLUDEDIR opus.h - PATH_SUFFIXES opus - HINTS ${HINTS_OPUS_INCLUDEDIR} ${PC_OPUS_INCLUDEDIR} ${PC_OPUS_INCLUDE_DIRS} - PATHS ${PATHS_OPUS_INCLUDEDIR} -) +set_extra_dirs_lib(OPUS opus) find_library(OPUS_LIBRARY NAMES opus HINTS ${HINTS_OPUS_LIBDIR} ${PC_OPUS_LIBDIR} ${PC_OPUS_LIBRARY_DIRS} PATHS ${PATHS_OPUS_LIBDIR} ) +set_extra_dirs_include(OPUS opus "${OPUS_LIBRARY}") +find_path(OPUS_INCLUDEDIR opus.h + PATH_SUFFIXES opus + HINTS ${HINTS_OPUS_INCLUDEDIR} ${PC_OPUS_INCLUDEDIR} ${PC_OPUS_INCLUDE_DIRS} + PATHS ${PATHS_OPUS_INCLUDEDIR} +) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Opus DEFAULT_MSG OPUS_INCLUDEDIR) diff --git a/cmake/FindOpusfile.cmake b/cmake/FindOpusfile.cmake index 8901b019c..3d39217ee 100644 --- a/cmake/FindOpusfile.cmake +++ b/cmake/FindOpusfile.cmake @@ -1,17 +1,18 @@ find_package(PkgConfig QUIET) pkg_check_modules(PC_OPUSFILE opusfile) -set_extra_dirs(OPUSFILE opus) -find_path(OPUSFILE_INCLUDEDIR opusfile.h - PATH_SUFFIXES opus - HINTS ${HINTS_OPUSFILE_INCLUDEDIR} ${PC_OPUSFILE_INCLUDEDIR} ${PC_OPUSFILE_INCLUDE_DIRS} - PATHS ${PATHS_OPUSFILE_INCLUDEDIR} -) +set_extra_dirs_lib(OPUSFILE opus) find_library(OPUSFILE_LIBRARY NAMES opusfile HINTS ${HINTS_OPUSFILE_LIBDIR} ${PC_OPUSFILE_LIBDIR} ${PC_OPUSFILE_LIBRARY_DIRS} PATHS ${PATHS_OPUSFILE_LIBDIR} ) +set_extra_dirs_include(OPUSFILE opus "${OPUSFILE_LIBRARY}") +find_path(OPUSFILE_INCLUDEDIR opusfile.h + PATH_SUFFIXES opus + HINTS ${HINTS_OPUSFILE_INCLUDEDIR} ${PC_OPUSFILE_INCLUDEDIR} ${PC_OPUSFILE_INCLUDE_DIRS} + PATHS ${PATHS_OPUSFILE_INCLUDEDIR} +) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Opusfile DEFAULT_MSG OPUSFILE_LIBRARY OPUSFILE_INCLUDEDIR) diff --git a/cmake/FindSDL2.cmake b/cmake/FindSDL2.cmake index 061b4247f..a7eae6356 100644 --- a/cmake/FindSDL2.cmake +++ b/cmake/FindSDL2.cmake @@ -1,8 +1,13 @@ find_package(PkgConfig QUIET) pkg_check_modules(PC_SDL2 sdl2) -set_extra_dirs(SDL2 sdl) - +set_extra_dirs_lib(SDL2 sdl) +find_library(SDL2_LIBRARY + NAMES SDL2 + HINTS ${HINTS_SDL2_LIBDIR} ${PC_SDL2_LIBDIR} ${PC_SDL2_LIBRARY_DIRS} + PATHS ${PATHS_SDL2_LIBDIR} +) +set_extra_dirs_include(SDL2 sdl "${SDL2_LIBRARY}") # Looking for 'SDL.h' directly might accidently find a SDL instead of SDL 2 # installation. Look for a header file only present in SDL 2 instead. find_path(SDL2_INCLUDEDIR SDL_assert.h @@ -10,11 +15,6 @@ find_path(SDL2_INCLUDEDIR SDL_assert.h HINTS ${HINTS_SDL2_INCLUDEDIR} ${PC_SDL2_INCLUDEDIR} ${PC_SDL2_INCLUDE_DIRS} PATHS ${PATHS_SDL2_INCLUDEDIR} ) -find_library(SDL2_LIBRARY - NAMES SDL2 - HINTS ${HINTS_SDL2_LIBDIR} ${PC_SDL2_LIBDIR} ${PC_SDL2_LIBRARY_DIRS} - PATHS ${PATHS_SDL2_LIBDIR} -) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(SDL2 DEFAULT_MSG SDL2_LIBRARY SDL2_INCLUDEDIR)