mirror of
https://github.com/VCMP-SqMod/SqMod.git
synced 2025-10-16 16:07:18 +02:00
Add MariaDB Connector/C as a built-in alternative (v3.2.3).
This commit is contained in:
67
vendor/MDBC/mariadb_config/CMakeLists.txt
vendored
Normal file
67
vendor/MDBC/mariadb_config/CMakeLists.txt
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
INCLUDE_DIRECTORIES(${CC_SOURCE_DIR}/include)
|
||||
|
||||
# Figure out additional libraries for use with
|
||||
|
||||
FUNCTION(GET_LIB_NAME LIB_NAME LIB_OUT)
|
||||
IF(APPLE)
|
||||
STRING(FIND ${LIB_NAME} ".dylib" IS_SO)
|
||||
ELSE()
|
||||
STRING(FIND ${LIB_NAME} ".so" IS_SO)
|
||||
ENDIF()
|
||||
IF(NOT ${IS_SO} STREQUAL "-1")
|
||||
GET_FILENAME_COMPONENT(LIB_FILE ${LIB_NAME} NAME_WE)
|
||||
ELSE()
|
||||
SET(LIB_FILE ${LIB_NAME})
|
||||
ENDIF()
|
||||
|
||||
STRING(SUBSTRING ${LIB_NAME} 0 1 LIB_PREFIX)
|
||||
|
||||
IF(NOT ${LIB_PREFIX} STREQUAL "-")
|
||||
SET(LIB_FILE "-l${LIB_FILE}")
|
||||
STRING(REPLACE "-llib" "-l" LIB_FILE ${LIB_FILE})
|
||||
SET(${LIB_OUT} ${LIB_FILE} PARENT_SCOPE)
|
||||
ELSE()
|
||||
SET(${LIB_OUT} ${LIB_NAME} PARENT_SCOPE)
|
||||
ENDIF()
|
||||
ENDFUNCTION()
|
||||
|
||||
LIST(LENGTH SYSTEM_LIBS rllength)
|
||||
IF(${rllength} GREATER 0)
|
||||
LIST(REMOVE_DUPLICATES SYSTEM_LIBS)
|
||||
ENDIF()
|
||||
|
||||
FOREACH (LIB_NAME ${SYSTEM_LIBS})
|
||||
GET_LIB_NAME(${LIB_NAME} LIB_OUT)
|
||||
SET(extra_dynamic_LDFLAGS "${extra_dynamic_LDFLAGS} ${LIB_OUT}")
|
||||
ENDFOREACH()
|
||||
STRING(STRIP "${extra_dynamic_LDFLAGS}" extra_dynamic_LDFLAGS)
|
||||
LIST(REMOVE_DUPLICATES extra_dynamic_LDFLAGS)
|
||||
|
||||
IF(UNIX AND NOT APPLE)
|
||||
IF(ICONV_EXTERNAL)
|
||||
GET_LIB_NAME(${ICONV_LIBRARIES} LIB_OUT)
|
||||
SET(extra_dynamic_LDFLAGS "${extra_dynamic_LDFLAGS} ${LIB_OUT}")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/mariadb_config.c.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/mariadb_config.c @ONLY)
|
||||
|
||||
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/libmariadb.pc.in
|
||||
${CMAKE_CURRENT_BINARY_DIR}/libmariadb.pc @ONLY)
|
||||
|
||||
ADD_EXECUTABLE(mariadb_config ${CMAKE_CURRENT_BINARY_DIR}/mariadb_config.c)
|
||||
|
||||
IF(CMAKE_SYSTEM_NAME MATCHES AIX)
|
||||
TARGET_LINK_LIBRARIES(mariadb_config compat-getopt)
|
||||
ENDIF()
|
||||
|
||||
# Installation
|
||||
#
|
||||
INSTALL(TARGETS mariadb_config
|
||||
DESTINATION "bin"
|
||||
COMPONENT Development)
|
||||
|
||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/libmariadb.pc
|
||||
DESTINATION "${INSTALL_PCDIR}"
|
||||
COMPONENT Development)
|
20
vendor/MDBC/mariadb_config/libmariadb.pc.in
vendored
Normal file
20
vendor/MDBC/mariadb_config/libmariadb.pc.in
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
#
|
||||
# pkg_config.pc.in
|
||||
#
|
||||
# pkg_config configuration file
|
||||
# For a detailed description of options, please visit
|
||||
# Dan Nicholson’s Guide to pkg-config (http://www.freedesktop.org/wiki/Software/pkg-config/)
|
||||
#
|
||||
|
||||
prefix=@CMAKE_INSTALL_PREFIX@
|
||||
includedir=${prefix}/@INSTALL_INCLUDEDIR@/@SUFFIX_INSTALL_DIR@
|
||||
libdir=${prefix}/@INSTALL_LIBDIR@/@SUFFIX_INSTALL_DIR@
|
||||
|
||||
Name: libmariadb
|
||||
Version: @CPACK_PACKAGE_VERSION@
|
||||
Description: MariaDB Connector/C dynamic library
|
||||
Cflags: -I${includedir}
|
||||
Libs: -L${libdir} -lmariadb
|
||||
Libs.private: @extra_dynamic_LDFLAGS@
|
||||
|
||||
|
299
vendor/MDBC/mariadb_config/mariadb_config.c.in
vendored
Normal file
299
vendor/MDBC/mariadb_config/mariadb_config.c.in
vendored
Normal file
@@ -0,0 +1,299 @@
|
||||
#include <ma_config.h>
|
||||
#include <getopt.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <mariadb_version.h>
|
||||
#ifdef HAVE_SYS_STAT_H
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
#if defined(__FreeBSD__)
|
||||
#include <sys/sysctl.h>
|
||||
#endif
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
#include <unistd.h>
|
||||
#ifdef HAVE_LINUX_LIMITS_H
|
||||
#include <linux/limits.h>
|
||||
#endif
|
||||
#include <string.h>
|
||||
#if defined(__APPLE__)
|
||||
#include <mach-o/dyld.h>
|
||||
#endif
|
||||
|
||||
static char *mariadb_progname;
|
||||
|
||||
#ifndef PATH_MAX
|
||||
#define PATH_MAX 4096
|
||||
#endif
|
||||
|
||||
#define INCLUDE "-I%s/@INSTALL_INCLUDEDIR@ -I%s/@INSTALL_INCLUDEDIR@/mysql"
|
||||
#define LIBS "-L%s/@INSTALL_LIBDIR@/ -lmariadb"
|
||||
#define LIBS_SYS "@extra_dynamic_LDFLAGS@"
|
||||
#define CFLAGS INCLUDE
|
||||
#define VERSION "@MARIADB_CLIENT_VERSION@"
|
||||
#define CC_VERSION "@CPACK_PACKAGE_VERSION@"
|
||||
#define PLUGIN_DIR "%s/@INSTALL_PLUGINDIR@"
|
||||
#define SOCKET "@MARIADB_UNIX_ADDR@"
|
||||
#define PORT "@MARIADB_PORT@"
|
||||
#ifdef HAVE_TLS
|
||||
#define TLS_LIBRARY_VERSION "@TLS_LIBRARY_VERSION@"
|
||||
#else
|
||||
#define TLS_LIBRARY_VERSION ""
|
||||
#endif
|
||||
#define PKG_INCLUDEDIR "%s/@INSTALL_INCLUDEDIR@"
|
||||
#define PKG_PLUGINDIR "%s/@INSTALL_PLUGINDIR@"
|
||||
#define PKG_LIBDIR "%s/@INSTALL_LIBDIR@"
|
||||
|
||||
#if defined(SOLARIS) || defined(__sun)
|
||||
#define OPT_STRING_TYPE (char *)
|
||||
#else
|
||||
#define OPT_STRING_TYPE
|
||||
#endif
|
||||
static struct option long_options[]=
|
||||
{
|
||||
{OPT_STRING_TYPE "cflags", no_argument, 0, 'a'},
|
||||
{OPT_STRING_TYPE "help", no_argument, 0, 'b'},
|
||||
{OPT_STRING_TYPE "include", no_argument, 0, 'c'},
|
||||
{OPT_STRING_TYPE "libs", no_argument, 0, 'd'},
|
||||
{OPT_STRING_TYPE "libs_r", no_argument, 0, 'e'},
|
||||
{OPT_STRING_TYPE "libs_sys", no_argument, 0, 'l'},
|
||||
{OPT_STRING_TYPE "version", no_argument, 0, 'f'},
|
||||
{OPT_STRING_TYPE "cc_version", no_argument, 0, 'g'},
|
||||
{OPT_STRING_TYPE "socket", no_argument, 0, 'h'},
|
||||
{OPT_STRING_TYPE "port", no_argument, 0, 'i'},
|
||||
{OPT_STRING_TYPE "plugindir", no_argument, 0, 'j'},
|
||||
{OPT_STRING_TYPE "tlsinfo", no_argument, 0, 'k'},
|
||||
{OPT_STRING_TYPE "variable", 2, 0, 'm'},
|
||||
{NULL, 0, 0, 0}
|
||||
};
|
||||
|
||||
static struct {
|
||||
const char *variable;
|
||||
const char *value;
|
||||
} variables[] = {
|
||||
{"pkgincludedir", PKG_INCLUDEDIR},
|
||||
{"pkglibdir", PKG_LIBDIR},
|
||||
{"pkgplugindir", PKG_PLUGINDIR},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
char installation_dir[PATH_MAX];
|
||||
|
||||
static const char *values[]=
|
||||
{
|
||||
CFLAGS,
|
||||
NULL,
|
||||
INCLUDE,
|
||||
LIBS,
|
||||
LIBS,
|
||||
LIBS_SYS,
|
||||
VERSION,
|
||||
CC_VERSION,
|
||||
SOCKET,
|
||||
PORT,
|
||||
PLUGIN_DIR,
|
||||
TLS_LIBRARY_VERSION,
|
||||
"VAR VAR is one of:"
|
||||
};
|
||||
|
||||
void usage(void)
|
||||
{
|
||||
int i=0;
|
||||
puts("Copyright 2011-2020 MariaDB Corporation AB");
|
||||
puts("Get compiler flags for using the MariaDB Connector/C.");
|
||||
printf("Usage: %s [OPTIONS]\n", mariadb_progname);
|
||||
printf("Compiler: @CMAKE_C_COMPILER_ID@ @CMAKE_C_COMPILER_VERSION@\n");
|
||||
while (long_options[i].name)
|
||||
{
|
||||
if (!long_options[i].has_arg)
|
||||
{
|
||||
if (values[i])
|
||||
{
|
||||
printf(" --%-12s [", long_options[i].name);
|
||||
printf(values[i], installation_dir, installation_dir);
|
||||
printf("]\n");
|
||||
}
|
||||
} else
|
||||
{
|
||||
printf(" --%s=%s\n", long_options[i].name, values[i]);
|
||||
/* Variables */
|
||||
if (long_options[i].val == 'm')
|
||||
{
|
||||
int i= 0;
|
||||
while (variables[i].variable)
|
||||
{
|
||||
printf(" %-14s [", variables[i].variable);
|
||||
printf(variables[i].value, installation_dir);
|
||||
printf("]\n");
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
mariadb_get_install_location()
|
||||
Tries to find the installation location in the following order:
|
||||
1) check if MARIADB_CONFIG environment variable was set
|
||||
2) try to determine the installation directory from executable path
|
||||
3) Fallback if 1 and 2 failed: use CMAKE_SYSROOT/CMAKE_INSTALL_PREFIX
|
||||
*/
|
||||
static void mariadb_get_install_location()
|
||||
{
|
||||
char *p= NULL;
|
||||
struct stat s;
|
||||
|
||||
/* Check environment variable MARIADB_CONFIG */
|
||||
if ((p= getenv("MARIADB_CONFIG")))
|
||||
{
|
||||
if (!stat(p, &s) && S_ISREG(s.st_mode))
|
||||
{
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
/* Try to determine path of executable */
|
||||
if (!(p= alloca(PATH_MAX)))
|
||||
goto end;
|
||||
else {
|
||||
#if defined(__APPLE__)
|
||||
unsigned int len= PATH_MAX;
|
||||
if (_NSGetExecutablePath(p, &len) != 0)
|
||||
*p= 0;
|
||||
else
|
||||
{
|
||||
p[len]= 0;
|
||||
if (realpath(p, p) != 0)
|
||||
*p= 0;
|
||||
}
|
||||
#elif defined(__sun) || defined(SOLARIS)
|
||||
if (realpath(getexecname(), p) == NULL)
|
||||
*p= 0;
|
||||
#elif defined(__NetBSD__)
|
||||
ssize_t len= readlink("/proc/curproc/exe", p, PATH_MAX);
|
||||
if (len == -1 || len == PATH_MAX)
|
||||
*p= 0;
|
||||
else
|
||||
p[len]= 0;
|
||||
#elif defined(__FreeBSD__)
|
||||
int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
|
||||
size_t cb = PATH_MAX;
|
||||
if (sysctl(mib, 4, p, &cb, NULL, 0) == -1)
|
||||
*p= 0;
|
||||
else
|
||||
p[cb]= 0;
|
||||
#elif defined(__linux__)
|
||||
ssize_t len= readlink("/proc/self/exe", p, PATH_MAX);
|
||||
if (len == -1 || len == PATH_MAX)
|
||||
*p= 0;
|
||||
else
|
||||
p[len]= 0;
|
||||
#else
|
||||
*p= 0;
|
||||
#endif
|
||||
}
|
||||
end:
|
||||
if (p && p[0])
|
||||
{
|
||||
char *c, *search= alloca(6 + strlen(mariadb_progname));
|
||||
sprintf(search, "/bin/%s", mariadb_progname);
|
||||
c= strstr(p, search);
|
||||
if (c)
|
||||
{
|
||||
strncpy(installation_dir, p, c - p);
|
||||
}
|
||||
else
|
||||
*p=0;
|
||||
}
|
||||
if (!p || !p[0])
|
||||
{
|
||||
strncpy(installation_dir, "@CMAKE_SYSROOT@@CMAKE_INSTALL_PREFIX@", PATH_MAX - 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int c;
|
||||
char *p = strrchr(argv[0], '/');
|
||||
mariadb_progname= p ? p + 1 : argv[0];
|
||||
|
||||
mariadb_get_install_location();
|
||||
|
||||
if (argc <= 1)
|
||||
{
|
||||
usage();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
while(1)
|
||||
{
|
||||
int option_index= 0;
|
||||
c= getopt_long(argc, argv, "abcdefghijkl", long_options, &option_index);
|
||||
|
||||
switch(c) {
|
||||
case 'a': /* CFLAGS and Include directories */
|
||||
printf(CFLAGS, installation_dir, installation_dir);
|
||||
break;
|
||||
case 'b': /* Usage */
|
||||
usage();
|
||||
break;
|
||||
case 'c': /* Include directories */
|
||||
printf(INCLUDE, installation_dir, installation_dir);
|
||||
break;
|
||||
case 'd': /* Library directories and names */
|
||||
case 'e':
|
||||
printf(LIBS, installation_dir);
|
||||
break;
|
||||
case 'f': /* Server version */
|
||||
printf(VERSION);
|
||||
break;
|
||||
case 'g': /* Connector/C version */
|
||||
printf(CC_VERSION);
|
||||
break;
|
||||
case 'h': /* Unix socket */
|
||||
printf(SOCKET);
|
||||
break;
|
||||
case 'i': /* default port */
|
||||
printf(PORT);
|
||||
break;
|
||||
case 'j': /* plugin directory */
|
||||
printf(PLUGIN_DIR, installation_dir);
|
||||
break;
|
||||
case 'k': /* TLS version */
|
||||
printf("%s", TLS_LIBRARY_VERSION);
|
||||
break;
|
||||
case 'l': /* System libraries */
|
||||
printf(LIBS_SYS);
|
||||
break;
|
||||
case 'm': /* variable */
|
||||
{
|
||||
int i= 0;
|
||||
while (variables[i].variable)
|
||||
{
|
||||
if (!strcmp(optarg, variables[i].variable))
|
||||
{
|
||||
printf(variables[i].value, installation_dir);
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (!variables[i].variable)
|
||||
{
|
||||
printf("Unknown variable '%s'\n", optarg);
|
||||
exit(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
exit((c != -1));
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
Reference in New Issue
Block a user