Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mysqlcpp: add recipe #24678

Open
wants to merge 124 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
f9b65f8
Added mysqlcppconn recipe
husitawi Jul 21, 2024
50e57b0
Merge branch 'conan-io:master' into master
husitawi Jul 21, 2024
82daee4
Merge branch 'conan-io:master' into master
husitawi Jul 26, 2024
52d437a
Updated mysqlcppconn recipe
husitawi Jul 26, 2024
fc6c979
Updated author
husitawi Jul 26, 2024
d5f242e
Rename recipe
husitawi Jul 26, 2024
bd1c33e
Add test v1
husitawi Jul 26, 2024
00e7088
Lower CMAKE requirements for test
husitawi Jul 26, 2024
ffc564c
Fixed the recipe url
husitawi Jul 26, 2024
14f977e
Remove conanv2 settings
husitawi Jul 26, 2024
1d49843
Add proper sha256 for source
husitawi Jul 26, 2024
03105c0
Upgraded CMake version
husitawi Jul 26, 2024
44a3e71
Added universal build for Apple
husitawi Jul 26, 2024
7b8389a
Fixed conandata file
husitawi Jul 26, 2024
f56de0b
Fixed conandata file
husitawi Jul 26, 2024
480ae10
Minor changes
husitawi Jul 26, 2024
e0cd5cb
Fixing build folder
husitawi Jul 26, 2024
6b4b51a
Fixing build folder
husitawi Jul 26, 2024
bd47562
Fixing build folder again
husitawi Jul 26, 2024
220fcbc
Fixed the cmake conf
husitawi Jul 26, 2024
0e156a3
Minor changes
husitawi Jul 26, 2024
5c2457b
Merge branch 'conan-io:master' into master
husitawi Jul 27, 2024
05bbde5
Update arch
husitawi Jul 27, 2024
9131d67
Minor changes in arch for osx
husitawi Jul 27, 2024
6f9d2ea
Minor changes in arch for osx again
husitawi Jul 27, 2024
59aa8bc
Minor changes in arch for osx again and again
husitawi Jul 27, 2024
e281b2e
Minor changes in arch for osx #4
husitawi Jul 27, 2024
e920931
Fix OSX cross-building
husitawi Jul 28, 2024
3027324
Fix OSX cross-building #2
husitawi Jul 28, 2024
fa9a28c
Removed protobuf requirement
husitawi Jul 28, 2024
ddcd215
Fixed test file
husitawi Jul 28, 2024
a1f0670
Fixed duplicate symbols
husitawi Jul 28, 2024
8eb63df
Fixed duplicate symbols #2
husitawi Jul 28, 2024
5f1414e
Fixed duplicate symbols #3
husitawi Jul 28, 2024
4d9129d
Fixed duplicate symbols #4
husitawi Jul 29, 2024
1c9d7b5
Fixing x86
husitawi Jul 29, 2024
9697c57
Fixing x86 #2
husitawi Jul 29, 2024
337d81e
Fixing x86 #3
husitawi Jul 29, 2024
1ca8325
Trying to cross-build
husitawi Jul 29, 2024
d1f8755
Fixing x86 #4
husitawi Jul 30, 2024
c0eb42e
Merge branch 'conan-io:master' into master
husitawi Jul 30, 2024
b6054c6
Fixing x86 #5
husitawi Jul 30, 2024
0c9ccfa
Merge branch 'master' of github.com:husitawi/conan-center-index
husitawi Jul 30, 2024
9a6f72a
Fixing x86 #6
husitawi Jul 30, 2024
61cd984
Avoid cross-building
husitawi Jul 30, 2024
7d95f4b
Raise needed apple-clang version
husitawi Jul 30, 2024
44b27a8
Cleanup
AbrilRBS Jul 31, 2024
0dc4b19
Merge branch 'conan-io:master' into master
husitawi Aug 11, 2024
a13cb70
py file changes
husitawi Aug 11, 2024
79ade4b
Re-add needed explicit static-shared flags
husitawi Aug 20, 2024
5d856f9
Fix build
husitawi Aug 27, 2024
9059427
Fixing apple
husitawi Aug 28, 2024
ce148bc
Update conanfile.py
husitawi Aug 30, 2024
9951442
Fix build
husitawi Aug 30, 2024
a43738a
Merge branch 'master' of github.com:husitawi/conan-center-index
husitawi Aug 30, 2024
6505792
Remove APPLE requirements
husitawi Aug 30, 2024
441ca36
Update conanfile.py
husitawi Aug 30, 2024
097e6b9
Fixing apple
husitawi Aug 30, 2024
12c7b1c
Fixing apple
husitawi Aug 30, 2024
7787b75
Fixing apple
husitawi Aug 30, 2024
bf96be2
Fixing apple
husitawi Aug 31, 2024
83797da
Fixing apple
husitawi Aug 31, 2024
bd90a59
Fixing apple
husitawi Sep 1, 2024
88aa1c1
Fixing apple
husitawi Sep 1, 2024
8bebf02
Fixing apple
husitawi Sep 1, 2024
2426fc8
Fixing apple
husitawi Sep 1, 2024
ea51f29
Fixing apple
husitawi Sep 1, 2024
4796a35
Fixing apple
husitawi Sep 1, 2024
657f125
Fixing apple
husitawi Sep 1, 2024
769b94f
Apply suggestions from code review
husitawi Sep 1, 2024
2ef89c1
Apply suggestions from code review
husitawi Sep 1, 2024
2772c38
Re-added apple-clang minimum version requirement
husitawi Sep 1, 2024
f72b308
Fix windows
husitawi Sep 1, 2024
61ffa8f
Fix windows & try Apple again with openssl 1x
husitawi Sep 2, 2024
2eaf105
Fix windows
husitawi Sep 2, 2024
ac157a0
V1 pipeline
husitawi Sep 2, 2024
80514a9
V1 pipeline
husitawi Sep 2, 2024
c39cb1b
V1 pipeline, fixed min version
husitawi Sep 2, 2024
fb5ba1d
V1 pipeline, fixed min version
husitawi Sep 2, 2024
30f438d
V1 pipeline, fixed min version and added old cpp info lines
husitawi Sep 2, 2024
1b62e80
V1 pipeline
husitawi Sep 2, 2024
a1b6080
V1 pipeline
husitawi Sep 2, 2024
138b301
V1 pipeline
husitawi Sep 2, 2024
afc519b
V1 pipeline
husitawi Sep 2, 2024
d1a5a3b
V1 pipeline
husitawi Sep 2, 2024
1781bc9
V1 pipeline
husitawi Sep 2, 2024
171fbcd
V1 pipeline
husitawi Sep 2, 2024
043c3c5
Fixing pipeline v1
husitawi Sep 3, 2024
0d7a411
Fixing pipeline v1
husitawi Sep 3, 2024
39225f2
Fixing pipeline v1
husitawi Sep 3, 2024
5f77f6b
Fixing pipeline v1
husitawi Sep 3, 2024
e5be133
Fixing pipeline v1
husitawi Sep 3, 2024
ac09bc1
Fixing pipeline v1
husitawi Sep 3, 2024
b28041e
Fixing pipeline v1
husitawi Sep 3, 2024
be831f1
Apply suggestions from code review
husitawi Sep 4, 2024
bf39632
Fix example
husitawi Sep 4, 2024
42b23ec
Fix example and pipelines v1
husitawi Sep 4, 2024
cee8dd8
Fix example and pipelines v1
husitawi Sep 4, 2024
00aea58
Fix protobuf v1 pipeline
husitawi Sep 4, 2024
652dd70
Fix protobuf v1 pipeline
husitawi Sep 4, 2024
d2bd6b1
Fix protobuf v1 pipeline
husitawi Sep 4, 2024
bf241eb
Fix protobuf v1 pipeline
husitawi Sep 5, 2024
b1cfbba
Fix protobuf v1 pipeline
husitawi Sep 5, 2024
68548ee
V1 pipeline
husitawi Sep 5, 2024
bc6cd79
V1 pipeline
husitawi Sep 6, 2024
f0fd27c
V1 pipeline
husitawi Sep 6, 2024
10ea797
V1 pipeline
husitawi Sep 6, 2024
494273b
Fix window lib sub dir
husitawi Sep 6, 2024
555b556
Cleanups
AbrilRBS Sep 6, 2024
7173bf1
Fix protobuf issues
AbrilRBS Sep 6, 2024
527ae20
Revert
husitawi Sep 6, 2024
383635c
Remove strict dep, rm ninja
husitawi Sep 6, 2024
d5ad70d
Added suggestions
husitawi Sep 6, 2024
e2a3534
Added suggestions
husitawi Sep 6, 2024
4fd0580
Fix openssl dup symb
husitawi Sep 7, 2024
8393a6f
Fix scoped package
husitawi Sep 7, 2024
81cb5f1
Fixing dup symb
husitawi Sep 7, 2024
c654208
Fixing openssl
husitawi Sep 8, 2024
83eabcf
Fixing openssl
husitawi Sep 8, 2024
99c1a6a
Fixing openssl removed duplicate symbols
husitawi Sep 8, 2024
8ac9a55
Fixing openssl removed duplicate symbols 2.0
husitawi Sep 8, 2024
0b2ee15
Fixing openssl removed duplicate symbols from cmake file 3.0
husitawi Sep 9, 2024
9c098cb
Fixing openssl for the fun of it
husitawi Sep 10, 2024
1103fdc
Fixing openssl for the fun of it
husitawi Sep 10, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions recipes/mysql-connector-cpp/all/conandata.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
sources:
"9.0.0":
url: "https://github.com/mysql/mysql-connector-cpp/archive/refs/tags/9.0.0.zip"
sha256: "9d4b90a4efe8861e821136fb3024074d14875749d8b69d1821361b2f2b8bfe55"

258 changes: 258 additions & 0 deletions recipes/mysql-connector-cpp/all/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,258 @@
import os
import shutil
from conan import ConanFile
from conan.tools.scm import Version
from conan.errors import ConanInvalidConfiguration
from conan.tools.apple import is_apple_os
from conan.tools.cmake import CMakeToolchain, CMake, cmake_layout, CMakeDeps
from conan.tools.build import check_min_cppstd, cross_building
from conan.tools.files import get, replace_in_file, copy, rm, rmdir
from conan.tools.microsoft import is_msvc, is_msvc_static_runtime

required_conan_version = ">=1.64.1"

class MysqlCppConnRecipe(ConanFile):
name = "mysql-connector-cpp"
package_type = "library"
short_paths = True
version = "9.0.0"

# Optional metadata
license = "GPL-2.0-only"
url = "https://github.com/conan-io/conan-center-index"
homepage = "https://github.com/mysql/mysql-connector-cpp"
description = "A MySQL client library for C++ development"
topics = ("mysql", "sql", "connector", "database", "c++", "cpp")

# Binary configuration
settings = "os", "compiler", "build_type", "arch"
options = {
"shared": [True, False],
"fPIC": [True, False],
}

default_options = { "shared": False, "fPIC": True }

@property
def _minimum_compilers_version(self):
return {
"Visual Studio": "14",
"msvc": "192",
"gcc": "8",
"clang": "7",
"apple-clang": "10",
}

def validate(self):
if self.settings.compiler.get_safe("cppstd"):
check_min_cppstd(self, "17")

# Compiler minimum version
compiler = self.settings.compiler
compiler_name = str(compiler)
minimum_version = self._minimum_compilers_version.get(compiler_name, False)
if minimum_version and Version(compiler.version) < minimum_version:
raise ConanInvalidConfiguration(
f"Requires compiler {compiler_name} minimum version: {minimum_version} with C++17 support."
)

def requirements(self):
self.requires("openssl/[>=1.1 <4]")
self.requires("zlib/[>=1.2.11 <2]")
self.requires("zstd/[>=1.5 <1.6]")
self.requires("lz4/[>=1.9.2 <=1.10.0]")
self.requires("protobuf/3.21.12")
self.requires("rapidjson/1.1.0")

def build_requirements(self):
self.tool_requires("cmake/[>=3.24 <4]")
self.tool_requires("protobuf/<host_version>")

def source(self):
get(self, **self.conan_data["sources"][self.version], strip_root=True)

def config_options(self):
if self.settings.os == "Windows":
self.options.rm_safe("fPIC")

def configure(self):
if self.options.shared:
self.options.rm_safe("fPIC")

def layout(self):
cmake_layout(self, src_folder="src")

def _package_folder_dep(self, dep, scope="host"):
try:
if scope == "build":
return self.dependencies.build[dep].package_folder.replace("\\", "/")
except:
self.output.info(f"Failed to get a build scoped package path for : {dep}")
return self.dependencies[dep].package_folder.replace("\\", "/")

def _include_folder_dep(self, dep):
return self.dependencies[dep].cpp_info.includedirs[0].replace("\\", "/")

def _lib_folder_dep(self, dep):
return self.dependencies[dep].cpp_info.libdirs[0].replace("\\", "/")

def generate(self):

tc = CMakeToolchain(self)

# OpenSSL
tc.cache_variables["WITH_SSL"] = self._package_folder_dep("openssl")
tc.cache_variables["OPENSSL_ROOT_DIR"] = self._package_folder_dep("openssl")
# LZ4 patches
tc.cache_variables["WITH_LZ4"] = self._package_folder_dep("lz4")
# ZLIB patches
tc.cache_variables["WITH_ZLIB"] = self._package_folder_dep("zlib")
# ZSTD patches
tc.cache_variables["WITH_ZSTD"] = self._package_folder_dep("zstd")
# Build patches
tc.cache_variables["BUILD_STATIC"] = not self.options.shared
tc.cache_variables["BUILD_SHARED_LIBS"] = self.options.shared
# Disable Boost, only legacy JDBC connector needs it
tc.cache_variables["BOOST_DIR"] = "FALSE"
Copy link

@samuaz samuaz Nov 21, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

are not supporting JDBC? in this PR
#17594
i added support to it.

i think there is still useful to support the old JDBC connector for services that are using mysql server 6x

# Protobuf
tc.cache_variables["WITH_PROTOBUF"] = self._package_folder_dep("protobuf")
# RapidJSON
tc.cache_variables["RAPIDJSON_INCLUDE_DIR"] = self._include_folder_dep("rapidjson")

tc.generate()

deps = CMakeDeps(self)
deps.set_property("protobuf::libprotobuf", "cmake_target_name", "ext::protobuf")
deps.set_property("protobuf::libprotobuf-lite", "cmake_target_name", "ext::protobuf-lite")
deps.set_property("rapidjson", "cmake_target_name", "RapidJSON::rapidjson")
deps.set_property("zlib", "cmake_target_name", "ext::z")
deps.set_property("lz4", "cmake_target_name", "ext::lz4")
deps.set_property("zstd", "cmake_target_name", "ext::zstd")
deps.generate()

def _patch_sources(self):

# Delete internal libs
rmdir(self, os.path.join(self.source_folder, "cdk", "extra"))
rm(self, "DepFindSSL.cmake", os.path.join(self.source_folder, "cdk", "cmake"))

# Fix static lib naming
if not self.options.shared and is_msvc(self):
replace_in_file(self, os.path.join(self.source_folder, "install_layout.cmake"),
"set(LIB_NAME_STATIC \"${LIB_NAME}-mt\")",
"set(LIB_NAME_STATIC \"${LIB_NAME_STATIC}-mt\")",
strict=False)

# Apple patches
if is_apple_os(self) and cross_building(self):
patch = f"set(CMAKE_OSX_ARCHITECTURES \"{self.settings.arch}\" CACHE INTERNAL \"\" FORCE)\n"
# Package level
replace_in_file(self, os.path.join(self.source_folder, "CMakeLists.txt"), "PROJECT(MySQL_CONCPP)", f"PROJECT(MySQL_CONCPP)\n{patch}", strict=False)

# ZLIB patch
zlib_name = "z" if not self.settings.os == "Windows" else "zlib"
replace_in_file(self, os.path.join(self.source_folder, "cdk", "cmake", "DepFindCompression.cmake"), "add_ext(zlib zlib.h z ext_zlib)", f"add_ext(zlib zlib.h {zlib_name} ext_zlib)")

# ZSTD patch
zstd_name = "zstd" if not self.settings.os == "Windows" else "zstd_static"
replace_in_file(self, os.path.join(self.source_folder, "cdk", "cmake", "DepFindCompression.cmake"), "add_ext(zstd zstd.h zstd ext_zstd)", f"add_ext(zstd zstd.h {zstd_name} ext_zstd)")

# Compression patch
replace_in_file(self, os.path.join(self.source_folder, "cdk", "protocol", "mysqlx","CMakeLists.txt"), "PRIVATE cdk_foundation ext::z ext::lz4 ext::zstd", f"PRIVATE cdk_foundation ext::{zlib_name} ext::lz4 ext::{zstd_name}")

# OpenSSL patch
replace_in_file(self, os.path.join(self.source_folder, "mysql-concpp-config.cmake.in"), "find_deps()", "")
replace_in_file(self, os.path.join(self.source_folder, "CMakeLists.txt"), "find_dependency(SSL)", "")
# Remove problematic func
# replace_in_file(self, os.path.join(self.source_folder, "CMakeLists.txt"), "bootstrap()", "#bootstrap()")
# cdk target
replace_in_file(self, os.path.join(self.source_folder, "cdk", "CMakeLists.txt"), "find_dependency(SSL)", "")
replace_in_file(self, os.path.join(self.source_folder, "cdk", "CMakeLists.txt"), "ADD_SUBDIRECTORY(extra)", "")
# foundation target
replace_in_file(self, os.path.join(self.source_folder, "cdk", "foundation", "CMakeLists.txt"), "include(CheckCXXSourceCompiles)", "find_package(OpenSSL REQUIRED)")
extra_lib = "Crypt32" if self.settings.os == "Windows" else ""
replace_in_file(self, os.path.join(self.source_folder, "cdk", "foundation", "CMakeLists.txt"), "# generated config.h", "\"${RAPIDJSON_INCLUDE_DIR}\"")
replace_in_file(self, os.path.join(self.source_folder, "cdk", "foundation", "CMakeLists.txt"), "PRIVATE OpenSSL::SSL", f"OpenSSL::SSL {extra_lib}")
# mysqlx target
replace_in_file(self, os.path.join(self.source_folder, "cdk", "mysqlx", "CMakeLists.txt"),
"target_link_libraries(cdk_mysqlx PUBLIC cdk_proto_mysqlx cdk_foundation)",
"target_link_libraries(cdk_mysqlx PUBLIC cdk_foundation cdk_proto_mysqlx)")
replace_in_file(self, os.path.join(self.source_folder, "cdk", "mysqlx", "CMakeLists.txt"), "target_link_libraries(cdk_mysqlx PRIVATE OpenSSL::SSL)", "")

# Protobuf patches
try:
protobuf = "protobufd" if self.dependencies.build["protobuf"].settings.build_type == "Debug" else "protobuf"
except:
protobuf = "protobuf"
# INFO: Disable protobuf-lite to use Conan protobuf targets instead
replace_in_file(self, os.path.join(self.source_folder, "cdk", "cmake", "DepFindProtobuf.cmake"), "LIBRARY protobuf-lite pb_libprotobuf-lite", "")
# INFO: Fix protobuf library name according to the build type
replace_in_file(self, os.path.join(self.source_folder, "cdk", "cmake", "DepFindProtobuf.cmake"), "LIBRARY protobuf", f"LIBRARY {protobuf}")
# INFO: Disable protobuf-lite to use Conan protobuf targets instead
replace_in_file(self, os.path.join(self.source_folder, "cdk", "protocol", "mysqlx", "CMakeLists.txt"), "ext::protobuf-lite", f"ext::{protobuf}")
# INFO: Disable protobuf-lite to use Conan protobuf targets instead
replace_in_file(self, os.path.join(self.source_folder, "cdk", "core", "CMakeLists.txt"), "ext::protobuf-lite", f"ext::{protobuf}")

def build(self):
self._patch_sources()
cmake = CMake(self)
cmake.configure()
cmake.build()

def package(self):
cmake = CMake(self)
cmake.install()

# Clean
rm(self, "INFO_SRC", self.package_folder)
rm(self, "INFO_BIN", self.package_folder)
rm(self, "*.cmake", self.package_folder)

# Add License
copy(self, "LICENSE.txt", dst=os.path.join(self.package_folder, "licenses"), src=self.source_folder)

# Just rename the lib64 dir
source_dir = os.path.join(self.package_folder, "lib64")
if os.path.isdir(source_dir):
shutil.move(source_dir, os.path.join(self.package_folder, "lib"))

def package_info(self):

# Lib dir
lib_dir = "lib" if self.settings.build_type == "Release" else os.path.join("lib", "debug")
if is_msvc(self):
lib_dir = [os.path.join(lib_dir, "vs14")]
else:
lib_dir = [lib_dir]
self.cpp_info.libdirs = lib_dir
self.cpp_info.bindirs = ["lib"]

if self.settings.os == "Windows":
self.cpp_info.system_libs.extend(["dnsapi", "ws2_32"])
if is_apple_os(self) or self.settings.os in ["Linux", "FreeBSD"]:
self.cpp_info.system_libs.extend(["resolv"])
if self.settings.os in ["Linux", "FreeBSD"]:
self.cpp_info.system_libs.extend(["m", "pthread", "dl"])

target = "concpp-xdevapi"
target_alias = "concpp"

if self.options.shared:
target += "-static"
target_alias += "-static"

if self.settings.build_type == "Debug":
target += "-debug"
target_alias += "-debug"

self.cpp_info.set_property("cmake_target_name", "mysql::concpp")
self.cpp_info.set_property("cmake_target_aliases", [f"mysql::{target_alias}"] )

lib = "mysqlcppconnx" if self.options.shared else "mysqlcppconnx-static"
if is_msvc(self) and not self.options.shared and is_msvc_static_runtime(self):
lib += "-mt"
self.cpp_info.libs = [lib]

if not self.options.shared:
self.cpp_info.defines = ["MYSQL_STATIC"]
self.cpp_info.defines = ["STATIC_CONCPP"]
12 changes: 12 additions & 0 deletions recipes/mysql-connector-cpp/all/test_package/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
cmake_minimum_required(VERSION 3.15)
# Specify the C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

project(PackageTest CXX)

find_package(mysql-connector-cpp REQUIRED CONFIG)

add_executable(${PROJECT_NAME} src/example.cpp)
target_link_libraries(${PROJECT_NAME} PRIVATE mysql::concpp)
26 changes: 26 additions & 0 deletions recipes/mysql-connector-cpp/all/test_package/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import os

from conan import ConanFile
from conan.tools.cmake import CMake, cmake_layout
from conan.tools.build import can_run


class TestPackageConan(ConanFile):
settings = "os", "compiler", "build_type", "arch"
generators = "CMakeDeps", "CMakeToolchain"

def requirements(self):
self.requires(self.tested_reference_str)

def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

def layout(self):
cmake_layout(self)

def test(self):
if can_run(self):
cmd = os.path.join(self.cpp.build.bindir, "PackageTest")
self.run(cmd, env="conanrun")
7 changes: 7 additions & 0 deletions recipes/mysql-connector-cpp/all/test_package/src/example.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include <mysqlx/xdevapi.h>

int main()
{
mysqlx::SessionSettings from_url("mysqlx://user:pwd@127.0.0.1:1234/db?ssl-mode=required");
return 0;
}
3 changes: 3 additions & 0 deletions recipes/mysql-connector-cpp/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
versions:
"9.0.0":
folder: all