Skip to content

Commit

Permalink
databases/mysql-connector-odbc-80: New port
Browse files Browse the repository at this point in the history
MySQL Connector ODBC is an ODBC driver for interfacing to MySQL
databases. This is specific to mysql version 8.0.X branch.
  • Loading branch information
5u623l20 committed Feb 2, 2023
1 parent 8607332 commit 4ca987b
Show file tree
Hide file tree
Showing 7 changed files with 313 additions and 0 deletions.
1 change: 1 addition & 0 deletions databases/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@
SUBDIR += mysql-connector-java
SUBDIR += mysql-connector-java51
SUBDIR += mysql-connector-odbc
SUBDIR += mysql-connector-odbc-80
SUBDIR += mysql-q4m
SUBDIR += mysql-udf
SUBDIR += mysql2pgsql
Expand Down
39 changes: 39 additions & 0 deletions databases/mysql-connector-odbc-80/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
PORTNAME= mysql-connector-odbc
PORTVERSION= 8.0.32
CATEGORIES= databases
MASTER_SITES= MYSQL/Connector-ODBC/8.0
PKGNAMESUFFIX= -${DRIVER_MANAGER}-mysql${MYSQL_VER}
DISTNAME= ${PORTNAME}-${PORTVERSION}-src

MAINTAINER= bofh@FreeBSD.org
COMMENT= ODBC driver for MySQL${MYSQL_VER} / ${DRIVER_MANAGER}
WWW= https://www.mysql.com/

LICENSE= GPLv2
LICENSE_FILE= ${WRKSRC}/LICENSE.txt

LIB_DEPENDS= libodbc.so:databases/unixODBC \
libunwind.so:devel/libunwind \
libzstd.so:archivers/zstd

USES= cmake compiler:c++11-lang localbase:ldflags mysql:80 ssl
IGNORE_WITH_MYSQL= 56 57 101m 102m 103m 57p 57w
USE_LDCONFIG= yes

CMAKE_ARGS= -DWITH_UNIXODBC=1 -DDISABLE_GUI=1

DRIVER_MANAGER= unixodbc

PLIST_FILES= bin/myodbc-installer \
lib/libmyodbc8a.so \
lib/libmyodbc8w.so \
test/dltest
PORTDOCS= *

OPTIONS_DEFINE= DOCS

post-install:
@${RM} ${STAGEDIR}${PREFIX}/INFO_BIN
@${RM} ${STAGEDIR}${PREFIX}/INFO_SRC

.include <bsd.port.mk>
3 changes: 3 additions & 0 deletions databases/mysql-connector-odbc-80/distinfo
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
TIMESTAMP = 1675358550
SHA256 (mysql-connector-odbc-8.0.32-src.tar.gz) = 068f275afccc69e2ea5ea0d59ea0ecf0380710f9a9f6158e4751f07d5eec84a2
SIZE (mysql-connector-odbc-8.0.32-src.tar.gz) = 3845574
234 changes: 234 additions & 0 deletions databases/mysql-connector-odbc-80/files/patch-CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,234 @@
--- CMakeLists.txt.orig 2022-12-10 21:58:26 UTC
+++ CMakeLists.txt
@@ -458,7 +458,7 @@ IF(WIN32)

if (FIX_WARNINGS)

- # TODO: Increase warning level and once all warnings are cleared, enable
+ # TODO: Increase warning level and once all warnings are cleared, enable
# higher warning level in MAINTAINER_MODE. We start with no warnings on
# level /W1

@@ -478,7 +478,7 @@ ELSE(WIN32)
if(FIX_WARNINGS)

# TODO: Fix the compile warnings generated without `-w`. Once done,
- # remove this option in MAINTAINER_MODE so that we see when new
+ # remove this option in MAINTAINER_MODE so that we see when new
# warnings appear. Then proceed to `-w extra`.

add_compile_options(-Werror)
@@ -486,7 +486,7 @@ ELSE(WIN32)
else()

add_compile_options( -w )
-
+
endif()

ENDIF(WIN32)
@@ -517,7 +517,6 @@ ADD_SUBDIRECTORY(installer)

ADD_SUBDIRECTORY(dltest)
ADD_SUBDIRECTORY(installer)
-ADD_SUBDIRECTORY(test)

# For dynamic linking use the built-in sys and strings
IF(NOT MYSQLCLIENT_STATIC_LINKING)
@@ -591,10 +590,10 @@ INCLUDE(cmake/info_bin.cmake)
#------------ Installation ---------------------------
INCLUDE(cmake/info_bin.cmake)

-INSTALL(FILES LICENSE.txt DESTINATION .)
+INSTALL(FILES LICENSE.txt DESTINATION ./share/doc/mysql-connector-odbc/)

if(EXISTS "${CMAKE_SOURCE_DIR}/README.txt")
- INSTALL(FILES README.txt DESTINATION .)
+ INSTALL(FILES README.txt DESTINATION ./share/doc/mysql-connector-odbc/)
else()
INSTALL(FILES README.md DESTINATION .)
INSTALL(FILES CONTRIBUTING.md DESTINATION .)
@@ -658,7 +657,7 @@ ELSE(WIN32)

ELSE(WIN32)

- INSTALL(FILES ChangeLog DESTINATION .)
+ INSTALL(FILES ChangeLog DESTINATION ./share/doc/mysql-connector-odbc/)

ENDIF(WIN32)

@@ -666,16 +665,16 @@ ENDIF(WIN32)
# Bundle 3rd party dependencies if needed
# =======================================

-# If build is configured with BUNDEL_DEPENDENCIES enabled then client-side
-# plugins, their dependencies and other dependencies of the client library that
-# are found at the client library installation location are copied to the
+# If build is configured with BUNDEL_DEPENDENCIES enabled then client-side
+# plugins, their dependencies and other dependencies of the client library that
+# are found at the client library installation location are copied to the
# location where ODBC driver is installed.
#
-# The lists of known plugins and 3rd party libraries are specified below. Only
-# the specified plugins and libraries will be bundled. Also plugins and
-# libraries that can be found with the server but which should be ignored are
-# specified below. When building in MAINTAINER_MODE cmake will report error if
-# it finds a plugin or 3rd party librariy which is not listed here. When that
+# The lists of known plugins and 3rd party libraries are specified below. Only
+# the specified plugins and libraries will be bundled. Also plugins and
+# libraries that can be found with the server but which should be ignored are
+# specified below. When building in MAINTAINER_MODE cmake will report error if
+# it finds a plugin or 3rd party librariy which is not listed here. When that
# happens the lists should be updated.
#
# TODO: Move these checks to cmake/FindMySQL.cmake ?
@@ -697,20 +696,20 @@ endif()
# Plugin dependencies.
#
# Warning: If one library name is a prefix of the other, the longer name
-# should be listed first, otherwise the logic detecting missing dependencies
+# should be listed first, otherwise the logic detecting missing dependencies
# will break... For example: `krb5support` must go before `krb5`

set(AUTH_DEPS_fido fido2)

if(WIN32)
- set(AUTH_DEPS_kerberos
+ set(AUTH_DEPS_kerberos
comerr gssapi k5sprt krbcc xpprof krb5
)
else()
set(AUTH_DEPS_kerberos gssapi_krb5 k5crypto krb5support krb5 com_err)
endif()

-# Note: On Solaris and macOS all dependencies of ldap_sasl plugin are assumed
+# Note: On Solaris and macOS all dependencies of ldap_sasl plugin are assumed
# to be part of the OS.

if(NOT APPLE AND NOT CMAKE_SYSTEM_NAME MATCHES "SunOS")
@@ -730,7 +729,7 @@ set(BUNDLED_LIBS
libssl libcrypto ssleay libeay
)

-# List plugins and other libraries that can be found bundled with the server
+# List plugins and other libraries that can be found bundled with the server
# but which are not relevant on client-side and can be safely ignored.

set(IGNORED_PLUGINS qa_auth_client)
@@ -797,11 +796,11 @@ endfunction(bundle_lib)


# Bundle libraries listed in a list variable ${to_bundle}.
-# Libraries that were found and bundled are removed from ${to_bundle} list.
-# Other libraries found but not listed in ${to_bundle} are returned
+# Libraries that were found and bundled are removed from ${to_bundle} list.
+# Other libraries found but not listed in ${to_bundle} are returned
# in ${ignored} variable.
-# If additional arguments are given, they are used as glob expressions to find
-# the libraries to be bundled, otherwise 3rd parties bundled in with the server
+# If additional arguments are given, they are used as glob expressions to find
+# the libraries to be bundled, otherwise 3rd parties bundled in with the server
# are searched in ${MYSQL_LIB_DIR} locations.

macro(bundle_libs to_bundle ignored)
@@ -811,12 +810,12 @@ macro(bundle_libs to_bundle ignored)
if(ARGN)

file(GLOB _bundled ${ARGN})
-
+
else()

file(GLOB _bundled
"${MYSQL_LIB_DIR}/*${CMAKE_SHARED_LIBRARY_SUFFIX}*"
- "${MYSQL_LIB_DIR}/private/*${CMAKE_SHARED_LIBRARY_SUFFIX}*"
+ "${MYSQL_LIB_DIR}/private/*${CMAKE_SHARED_LIBRARY_SUFFIX}*"
)

# On windows, libs are in bin directory
@@ -865,9 +864,9 @@ endmacro(bundle_libs)
endmacro(bundle_libs)


-# Bundle plugins listed in PLUGINS list. Each bundled plugin P is removed from
-# the list and its dependedencies listed in DEPS_${P} are also bundled. Client
-# side plugins found with the server and not listed in PLUGINS are returned
+# Bundle plugins listed in PLUGINS list. Each bundled plugin P is removed from
+# the list and its dependedencies listed in DEPS_${P} are also bundled. Client
+# side plugins found with the server and not listed in PLUGINS are returned
# in ${ignored} list.

macro(bundle_plugins ignored)
@@ -888,7 +887,7 @@ macro(bundle_plugins ignored)

#message("== looking at client-side plugin: ${lib_name}")

- # Match plugin name against names in PLUGINS list and in case of match
+ # Match plugin name against names in PLUGINS list and in case of match
# remove that name from the list

unset(plugin)
@@ -926,7 +925,7 @@ macro(bundle_plugins ignored)
set(sasl_bundled 1)
endif()

- # On Windows the MIT Kerberos library uses ccapiserver.exe application
+ # On Windows the MIT Kerberos library uses ccapiserver.exe application
# in some scenarios - we need to bundle it as well.

if(WIN32 AND "${DEPS_${plugin}}" MATCHES "krb5")
@@ -1000,7 +999,7 @@ if(BUNDLE_DEPENDENCIES)
endforeach()

# Bundle the plugins and their dependencies.
-
+
unset(ingored)
bundle_plugins(ignored)

@@ -1012,7 +1011,7 @@ if(BUNDLE_DEPENDENCIES)

foreach(plugin ${IGNORED_PLUGINS})

- # Note: Old cmake (seen with 3.13.4) generates this error on
+ # Note: Old cmake (seen with 3.13.4) generates this error on
# list(FILTER...) if the list is empty:
# "list sub-command FILTER requires list to be present"

@@ -1037,8 +1036,8 @@ if(BUNDLE_DEPENDENCIES)

message(STATUS "Looking for bundled client lib dependencies")

- # Bundle additional libraries listed in BUNDLED_LIBS
- # For OpenSSL libs, first look in the location of the library that
+ # Bundle additional libraries listed in BUNDLED_LIBS
+ # For OpenSSL libs, first look in the location of the library that
# is actually being used in the build.

#message("== BUNDLED_LIBS: ${BUNDLED_LIBS}")
@@ -1052,12 +1051,12 @@ if(BUNDLE_DEPENDENCIES)
unset(extra_libs)
bundle_libs(BUNDLED_LIBS extra_libs)

- # In MAINTAINER_MODE check whether all 3rd party libs found but not bundled
+ # In MAINTAINER_MODE check whether all 3rd party libs found but not bundled
# are listed in IGNORED_LIBS

if(MAINTAINER_MODE)

- # Extend ignore list with libraries that are dependencies of known plugins
+ # Extend ignore list with libraries that are dependencies of known plugins
# and are not listed in BUNDLED_LIBS. Otherwise we would get false errors
# below.

@@ -1065,8 +1064,8 @@ if(BUNDLE_DEPENDENCIES)
list(APPEND IGNORED_LIBS ${DEPS_${plugin}})
endforeach()

- # Remove from ${extra_libs} the libraries that we know we should ignore.
- # Also the openssl libs that might end up in ${extra_libs} bacause of two
+ # Remove from ${extra_libs} the libraries that we know we should ignore.
+ # Also the openssl libs that might end up in ${extra_libs} bacause of two
# stage search logic above.

#message("== extra_libs: ${extra_libs}")
11 changes: 11 additions & 0 deletions databases/mysql-connector-odbc-80/files/patch-driver_dll.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
--- driver/dll.cc.orig 2022-12-10 21:58:26 UTC
+++ driver/dll.cc
@@ -145,7 +145,7 @@ void myodbc_end()
This eliminates the delay when mysys_end() is called and other threads
have been initialized but not ended.
*/
- my_thread_end_wait_time= 0;
+ static uint my_thread_end_wait_time= 0;
#endif

mysql_library_end();
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
--- include/mysql-8.0/my_sys.h.orig 2022-12-10 21:58:26 UTC
+++ include/mysql-8.0/my_sys.h
@@ -34,8 +34,12 @@
#include "my_config.h"

#ifdef HAVE_ALLOCA_H
+#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
+#include <stdlib.h>
+#else
#include <alloca.h>
#endif
+#endif
#include <limits.h>
#ifdef _WIN32
#include <malloc.h>
@@ -322,6 +326,8 @@ typedef int (*IO_CACHE_CALLBACK)(IO_CACHE *);

struct IO_CACHE;
typedef int (*IO_CACHE_CALLBACK)(IO_CACHE *);
+
+typedef unsigned long ulong;

struct IO_CACHE_SHARE {
mysql_mutex_t mutex; /* To sync on reads into buffer. */
1 change: 1 addition & 0 deletions databases/mysql-connector-odbc-80/pkg-descr
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
MySQL Connector ODBC is an ODBC driver for interfacing to MySQL databases.

0 comments on commit 4ca987b

Please sign in to comment.