aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Schumacher <roschuma@microsoft.com>2018-03-19 10:30:33 -0700
committerRobert Schumacher <roschuma@microsoft.com>2018-03-19 13:06:57 -0700
commit49a719b78a4c7feccc2aca970ec7fb242e1c121b (patch)
treeace57dc1d10b56ebca1245f0981abd9f8b6d3d9d
parent5968ebf9f4beae3a0662dfc6ba343b0be07a1241 (diff)
downloadvcpkg-49a719b78a4c7feccc2aca970ec7fb242e1c121b.tar.gz
vcpkg-49a719b78a4c7feccc2aca970ec7fb242e1c121b.zip
[libmysql] Use system dependencies to avoid ODR violations
-rw-r--r--ports/libmysql/CONTROL4
-rw-r--r--ports/libmysql/portfile.cmake12
-rw-r--r--ports/libmysql/system-libs.patch150
-rw-r--r--scripts/cmake/vcpkg_build_cmake.cmake22
4 files changed, 178 insertions, 10 deletions
diff --git a/ports/libmysql/CONTROL b/ports/libmysql/CONTROL
index 6a069b78e..4af150af9 100644
--- a/ports/libmysql/CONTROL
+++ b/ports/libmysql/CONTROL
@@ -1,4 +1,4 @@
Source: libmysql
-Version: 8.0.4
-Build-Depends: boost-algorithm, boost-geometry, boost-optional, boost-functional, boost-graph
+Version: 8.0.4-1
+Build-Depends: boost-algorithm, boost-geometry, boost-optional, boost-functional, boost-graph, openssl, icu, libevent, liblzma, lz4, zlib
Description: A MySQL client library for C development.
diff --git a/ports/libmysql/portfile.cmake b/ports/libmysql/portfile.cmake
index 6c60d0ccc..c9859c47b 100644
--- a/ports/libmysql/portfile.cmake
+++ b/ports/libmysql/portfile.cmake
@@ -22,7 +22,9 @@ vcpkg_from_github(
vcpkg_apply_patches(
SOURCE_PATH ${SOURCE_PATH}
- PATCHES ${CMAKE_CURRENT_LIST_DIR}/ignore-boost-version.patch
+ PATCHES
+ ${CMAKE_CURRENT_LIST_DIR}/ignore-boost-version.patch
+ ${CMAKE_CURRENT_LIST_DIR}/system-libs.patch
)
file(REMOVE_RECURSE ${SOURCE_PATH}/include/boost_1_65_0)
@@ -44,9 +46,15 @@ vcpkg_configure_cmake(
${STACK_DIRECTION}
-DWINDOWS_RUNTIME_MD=ON # Note: this disables _replacement_ of /MD with /MT. If /MT is specified, it will be preserved.
-DIGNORE_BOOST_VERSION=ON
+ -DWITH_SSL=system
+ -DWITH_ICU=system
+ -DWITH_LIBEVENT=system
+ -DWITH_LZMA=system
+ -DWITH_LZ4=system
+ -DWITH_ZLIB=system
)
-vcpkg_install_cmake()
+vcpkg_install_cmake(ADD_BIN_TO_PATH)
# delete debug headers
file(REMOVE_RECURSE
diff --git a/ports/libmysql/system-libs.patch b/ports/libmysql/system-libs.patch
new file mode 100644
index 000000000..b5c1cba0d
--- /dev/null
+++ b/ports/libmysql/system-libs.patch
@@ -0,0 +1,150 @@
+diff --git a/cmake/icu.cmake b/cmake/icu.cmake
+index ce9cc67..64445c5 100644
+--- a/cmake/icu.cmake
++++ b/cmake/icu.cmake
+@@ -40,49 +40,10 @@ SET(DEFAULT_ICU "bundled")
+ # install_root is either 'system' or is assumed to be a path.
+ #
+ MACRO (FIND_ICU install_root)
+- IF("${install_root}" STREQUAL "system")
+- SET(EXTRA_FIND_LIB_ARGS)
+- SET(EXTRA_FIND_INC_ARGS)
+- ELSE()
+- SET(EXTRA_FIND_LIB_ARGS HINTS "${install_root}"
+- PATH_SUFFIXES "lib" "lib64" NO_DEFAULT_PATH)
+- SET(EXTRA_FIND_INC_ARGS HINTS "${install_root}"
+- PATH_SUFFIXES "include" NO_DEFAULT_PATH)
+- ENDIF()
+-
+- FIND_PATH(ICU_INCLUDE_DIR NAMES unicode/regex.h ${EXTRA_FIND_INC_ARGS})
+- IF (NOT ICU_INCLUDE_DIR)
+- MESSAGE(FATAL_ERROR "Cannot find ICU regular expression headers")
+- ENDIF()
+-
+- IF(WIN32)
+- SET(ICU_LIBS icuuc icuio icudt icuin)
+- ELSE()
+- SET(ICU_LIBS icuuc icuio icudata icui18n)
+- ENDIF()
+-
+- SET(ICU_SYSTEM_LIBRARIES)
+- FOREACH(ICU_LIB ${ICU_LIBS})
+- UNSET(ICU_LIB_PATH CACHE)
+- FIND_LIBRARY(ICU_LIB_PATH NAMES ${ICU_LIB} ${EXTRA_FIND_LIB_ARGS})
+- IF(NOT ICU_LIB_PATH)
+- MESSAGE(FATAL_ERROR "Cannot find the ICU library ${ICU_LIB}")
+- ENDIF()
+- LIST(APPEND ICU_SYSTEM_LIBRARIES ${ICU_LIB_PATH})
+- ENDFOREACH()
+-
+- # To do: If we include the path in ICU_INCLUDE_DIR, it leads to GUnit
+- # picking up the wrong regex.h header. And it looks like we don't need it;
+- # at least on Linux, the header gets installed in an OS path anyway.
+- IF(NOT "${install_root}" STREQUAL "system")
+- SET(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR})
+- ENDIF()
+-
+- SET(ICU_LIBRARIES ${ICU_SYSTEM_LIBRARIES})
+-
+- # Needed for version information.
+- SET(ICU_COMMON_DIR ${ICU_INCLUDE_DIR})
+-
++ find_package(ICU REQUIRED COMPONENTS uc io dt in)
++ set(ICU_SYSTEM_LIBRARIES ICU::uc ICU::io ICU::dt ICU::in)
++ set(ICU_COMMON_DIR ${ICU_INCLUDE_DIR})
++ SET(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR})
+ ENDMACRO()
+
+ MACRO (MYSQL_USE_BUNDLED_ICU)
+diff --git a/cmake/lz4.cmake b/cmake/lz4.cmake
+index 6e576c3..60cb8ba 100644
+--- a/cmake/lz4.cmake
++++ b/cmake/lz4.cmake
+@@ -25,7 +25,7 @@
+
+ MACRO (FIND_SYSTEM_LZ4)
+ FIND_PATH(PATH_TO_LZ4 NAMES lz4frame.h)
+- FIND_LIBRARY(LZ4_SYSTEM_LIBRARY NAMES lz4)
++ FIND_LIBRARY(LZ4_SYSTEM_LIBRARY NAMES lz4d lz4)
+ IF (PATH_TO_LZ4 AND LZ4_SYSTEM_LIBRARY)
+ SET(SYSTEM_LZ4_FOUND 1)
+ INCLUDE_DIRECTORIES(SYSTEM ${PATH_TO_LZ4})
+diff --git a/cmake/lzma.cmake b/cmake/lzma.cmake
+index ac8aaa7..78d8e8d 100644
+--- a/cmake/lzma.cmake
++++ b/cmake/lzma.cmake
+@@ -24,15 +24,10 @@
+ # bundled is the default
+
+ MACRO (FIND_SYSTEM_LZMA)
+- FIND_PATH(PATH_TO_LZMA NAMES lzma/lzma.h)
+- FIND_LIBRARY(LZMA_SYSTEM_LIBRARY NAMES lzma)
+- IF (PATH_TO_LZMA AND LZMA_SYSTEM_LIBRARY)
+- SET(SYSTEM_LZMA_FOUND 1)
+- SET(LZMA_INCLUDE_DIR ${PATH_TO_LZMA})
+- SET(LZMA_LIBRARY ${LZMA_SYSTEM_LIBRARY})
+- MESSAGE(STATUS "LZMA_INCLUDE_DIR ${LZMA_INCLUDE_DIR}")
+- MESSAGE(STATUS "LZMA_LIBRARY ${LZMA_LIBRARY}")
+- ENDIF()
++ find_package(LibLZMA REQUIRED)
++ set(LZMA_INCLUDE_DIR ${LZMA_INCLUDE_DIRS})
++ set(LZMA_LIBRARY ${LZMA_LIBRARIES})
++ set(SYSTEM_LZMA_FOUND 1)
+ ENDMACRO()
+
+ MACRO (MYSQL_USE_BUNDLED_LZMA)
+diff --git a/cmake/ssl.cmake b/cmake/ssl.cmake
+index 8af9699..2bdfe14 100644
+--- a/cmake/ssl.cmake
++++ b/cmake/ssl.cmake
+@@ -104,6 +104,16 @@ ENDMACRO()
+ # Provides the following configure options:
+ # WITH_SSL=[yes|bundled|system|<path/to/custom/installation>]
+ MACRO (MYSQL_CHECK_SSL)
++ find_package(OpenSSL REQUIRED)
++ set(OPENSSL_LIBRARY ${OPENSSL_SSL_LIBRARY} CACHE STRING "")
++ set(CRYPTO_LIBRARY ${OPENSSL_CRYPTO_LIBRARY} CACHE STRING "")
++ FIND_PROGRAM(OPENSSL_EXECUTABLE openssl
++ DOC "path to the openssl executable")
++ SET(SSL_DEFINES "-DHAVE_OPENSSL")
++ set(SSL_LIBRARIES ${OPENSSL_LIBRARIES})
++ENDMACRO()
++
++MACRO (MYSQL_CHECK_SSL_OLD)
+ IF(NOT WITH_SSL)
+ IF(WIN32)
+ CHANGE_SSL_SETTINGS("bundled")
+diff --git a/cmake/zlib.cmake b/cmake/zlib.cmake
+index e74b8c9..6695075 100644
+--- a/cmake/zlib.cmake
++++ b/cmake/zlib.cmake
+@@ -51,27 +51,7 @@ MACRO (MYSQL_CHECK_ZLIB_WITH_COMPRESS)
+ IF(WITH_ZLIB STREQUAL "bundled")
+ MYSQL_USE_BUNDLED_ZLIB()
+ ELSE()
+- SET(ZLIB_FIND_QUIETLY TRUE)
+- INCLUDE(FindZLIB)
+- IF(ZLIB_FOUND)
+- INCLUDE(CheckFunctionExists)
+- SET(CMAKE_REQUIRED_LIBRARIES z)
+- CHECK_FUNCTION_EXISTS(crc32 HAVE_CRC32)
+- CHECK_FUNCTION_EXISTS(compressBound HAVE_COMPRESSBOUND)
+- CHECK_FUNCTION_EXISTS(deflateBound HAVE_DEFLATEBOUND)
+- SET(CMAKE_REQUIRED_LIBRARIES)
+- IF(HAVE_CRC32 AND HAVE_COMPRESSBOUND AND HAVE_DEFLATEBOUND)
+- SET(ZLIB_LIBRARY ${ZLIB_LIBRARIES} CACHE INTERNAL "System zlib library")
+- SET(WITH_ZLIB "system" CACHE STRING
+- "Which zlib to use (possible values are 'bundled' or 'system')")
+- SET(ZLIB_SOURCES "")
+- ELSE()
+- SET(ZLIB_FOUND FALSE CACHE INTERNAL "Zlib found but not usable")
+- MESSAGE(STATUS "system zlib found but not usable")
+- ENDIF()
+- ENDIF()
+- IF(NOT ZLIB_FOUND)
+- MYSQL_USE_BUNDLED_ZLIB()
+- ENDIF()
++ find_package(ZLIB REQUIRED)
++ SET(ZLIB_LIBRARY ZLIB::ZLIB CACHE INTERNAL "System zlib library")
+ ENDIF()
+ ENDMACRO()
diff --git a/scripts/cmake/vcpkg_build_cmake.cmake b/scripts/cmake/vcpkg_build_cmake.cmake
index bdf192792..630662588 100644
--- a/scripts/cmake/vcpkg_build_cmake.cmake
+++ b/scripts/cmake/vcpkg_build_cmake.cmake
@@ -15,6 +15,9 @@
## The target passed to the cmake build command (`cmake --build . --target <target>`). If not specified, no target will
## be passed.
##
+## ### ADD_BIN_TO_PATH
+## Adds the appropriate Release and Debug `bin\` directories to the path during the build such that executables can run against the in-tree DLLs.
+##
## ## Notes:
## This command should be preceeded by a call to [`vcpkg_configure_cmake()`](vcpkg_configure_cmake.md).
## You can use the alias [`vcpkg_install_cmake()`](vcpkg_configure_cmake.md) function if your CMake script supports the
@@ -27,7 +30,7 @@
## * [poco](https://github.com/Microsoft/vcpkg/blob/master/ports/poco/portfile.cmake)
## * [opencv](https://github.com/Microsoft/vcpkg/blob/master/ports/opencv/portfile.cmake)
function(vcpkg_build_cmake)
- cmake_parse_arguments(_bc "DISABLE_PARALLEL" "TARGET;LOGFILE_ROOT" "" ${ARGN})
+ cmake_parse_arguments(_bc "DISABLE_PARALLEL;ADD_BIN_TO_PATH" "TARGET;LOGFILE_ROOT" "" ${ARGN})
if(NOT _bc_LOGFILE_ROOT)
set(_bc_LOGFILE_ROOT "build")
@@ -65,20 +68,24 @@ function(vcpkg_build_cmake)
if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL BUILDTYPE)
if(BUILDTYPE STREQUAL "debug")
set(SHORT_BUILDTYPE "dbg")
+ set(CONFIG "Debug")
else()
set(SHORT_BUILDTYPE "rel")
+ set(CONFIG "Release")
endif()
message(STATUS "Build ${TARGET_TRIPLET}-${SHORT_BUILDTYPE}")
set(LOGPREFIX "${CURRENT_BUILDTREES_DIR}/${_bc_LOGFILE_ROOT}-${TARGET_TRIPLET}-${SHORT_BUILDTYPE}")
set(LOGS)
- if(BUILDTYPE STREQUAL "release")
- set(CONFIG "Release")
- else()
- set(CONFIG "Debug")
+ if(_bc_ADD_BIN_TO_PATH)
+ set(_BACKUP_ENV_PATH "$ENV{PATH}")
+ if(BUILDTYPE STREQUAL "debug")
+ set(ENV{PATH} "${CURRENT_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/bin;$ENV{PATH}")
+ else()
+ set(ENV{PATH} "${CURRENT_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/bin;$ENV{PATH}")
+ endif()
endif()
-
execute_process(
COMMAND ${CMAKE_COMMAND} --build . --config ${CONFIG} ${TARGET_PARAM} -- ${BUILD_ARGS} ${PARALLEL_ARG}
OUTPUT_FILE "${LOGPREFIX}-out.log"
@@ -134,6 +141,9 @@ function(vcpkg_build_cmake)
endif()
endif()
message(STATUS "Build ${TARGET_TRIPLET}-${SHORT_BUILDTYPE} done")
+ if(_bc_ADD_BIN_TO_PATH)
+ set(ENV{PATH} "${_BACKUP_ENV_PATH}")
+ endif()
endif()
endforeach()
endfunction()