summaryrefslogtreecommitdiff
path: root/libmysqlclient/mysql/buildfile
diff options
context:
space:
mode:
Diffstat (limited to 'libmysqlclient/mysql/buildfile')
-rw-r--r--libmysqlclient/mysql/buildfile285
1 files changed, 285 insertions, 0 deletions
diff --git a/libmysqlclient/mysql/buildfile b/libmysqlclient/mysql/buildfile
new file mode 100644
index 0000000..03097c5
--- /dev/null
+++ b/libmysqlclient/mysql/buildfile
@@ -0,0 +1,285 @@
+# file : mysql/buildfile
+# copyright : Copyright (c) 2016-2019 Code Synthesis Ltd
+# license : GPLv2 with Universal FOSS Exception; see accompanying LICENSE file
+
+import imp_libs = libssl%lib{ssl}
+import imp_libs += libcrypto%lib{crypto}
+
+tclass = $c.target.class
+tsys = $c.target.system
+
+linux = ($tclass == 'linux')
+bsd = ($tclass == 'bsd')
+macos = ($tclass == 'macos')
+windows = ($tclass == 'windows')
+
+gcc = ($c.class == 'gcc')
+msvc = ($c.class == 'msvc')
+
+# Windows-specific utilities.
+#
+mysys_win32 = my_conio my_windac my_winerr my_winfile win_timers
+
+# Windows-specific named pipe and shared memory based communication channels.
+#
+vio_win32 = viopipe vioshm
+
+lib{mysqlclient}: {h c }{* -version -config} \
+ {h }{ version config} \
+ zlib/{h c }{* } \
+ strings/{ hxx cxx}{* -do_ctype -*dump* -*_to_*} \
+ mysql/{h }{** } \
+ libbinlogevents/{h }{** } \
+ mysys/{ hxx cxx}{* -posix_timers \
+ -kqueue_timers \
+ -my_largepage \
+ -mf_qsort2 \
+ -{$mysys_win32}} \
+ mysys_ssl/{ hxx cxx}{* -*wolf*} \
+ vio/{ hxx cxx}{* -*test* -{$vio_win32}} \
+ sql/{ hxx }{* } \
+ sql/auth/{ hxx }{* } \
+ sql/auth/{ cxx}{password sha2_password_common} \
+ sql-common/{ hxx cxx}{* } \
+ libmysql/{ hxx cxx}{* -*test*} \
+ { def}{libmysql_exports } \
+ $imp_libs
+
+lib{mysqlclient}: mysys/cxx{posix_timers}: include = $linux
+lib{mysqlclient}: mysys/cxx{kqueue_timers}: include = ($bsd || $macos)
+
+lib{mysqlclient}: mysys/{ cxx}{$mysys_win32} \
+ vio/{ cxx}{$vio_win32 } \
+libmysql/authentication_win/{hxx cxx}{* }: include = $windows
+
+# Makes sense to distribute READMEs for the bundled libraries. Note that their
+# licenses are incorporated into the root LICENSE file.
+#
+lib{mysqlclient}: zlib/file{README} strings/file{README}
+
+# Include the generated version header into the distribution (so that we
+# don't pick up an installed one) and don't remove it when cleaning in src (so
+# that clean results in a state identical to distributed).
+#
+# @@ We should probably allow to configure MYSQL_UNIX_ADDR via configuration
+# variable config.libmysqlclient.unix_addr. Note that it is set differently
+# for the upstream package and major Linux distributions:
+#
+# Debian/Ubuntu: /var/run/mysqld/mysqld.sock
+# Fedora/RHEL: /var/lib/mysql/mysql.sock
+# Source package: /tmp/mysql.sock
+#
+h{version}: mysql/in{mysql_version} $src_root/manifest
+h{version}:
+{
+ dist = true
+ clean = ($src_root != $out_root)
+
+ in.symbol = '@'
+
+ PROTOCOL_VERSION = $protocol_version
+ VERSION = $version.project
+ MYSQL_BASE_VERSION = "$version.major.$version.minor"
+
+ MYSQL_SERVER_SUFFIX = '' # Server-related.
+
+ MYSQL_VERSION_ID = \
+ "\(10000 * $version.major + 100 * $version.minor + $version.patch\)"
+
+ MYSQL_TCP_PORT = 3306
+ MYSQL_ADMIN_TCP_PORT = 33062
+ MYSQL_TCP_PORT_DEFAULT = 0
+
+ MYSQL_UNIX_ADDR = ($windows ? '' : /tmp/mysql.sock)
+
+ COMPILATION_COMMENT = 'Source distribution'
+ COMPILATION_COMMENT_SERVER = 'Source distribution' # Server-related.
+
+ SYS_SCHEMA_VERSION = '2.0.0' # Server-related.
+}
+
+h{config}: in{config}
+h{config}:
+{
+ MYSQL_VERSION_MAJOR = $version.major
+ MYSQL_VERSION_MINOR = $version.minor
+
+ MACHINE_TYPE = $c.target.cpu
+ SYSTEM_TYPE = $tsys
+
+ DEFAULT_BASEDIR = ($install.root != [null] \
+ ? $regex.replace("$install.resolve($install.root)", \
+ '\\', \
+ '/') \
+ : '')
+
+ PLUGINDIR = ($install.root != [null] \
+ ? $regex.replace($install.resolve($install.lib)/mysql/plugin, \
+ '\\', \
+ '/') \
+ : '')
+
+ SHAREDIR = ($install.root != [null] \
+ ? $regex.replace($install.resolve($install.data_root)/share/mysql, \
+ '\\', \
+ '/') \
+ : '')
+}
+
+# Build options.
+#
+# We have dropped the macro definitions that are not used in the package code:
+#
+# -DRAPIDJSON_NO_SIZETYPEDEFINE
+# -DUNISTR_FROM_CHAR_EXPLICIT=explicit
+# -DUNISTR_FROM_STRING_EXPLICIT=explicit
+# -DHAVE_LIBEVENT2
+# -DNO_FSEEKO
+#
+cc.poptions += -DHAVE_CONFIG_H \
+ -DHAVE_OPENSSL \
+ -D__STDC_LIMIT_MACROS \
+ -D__STDC_FORMAT_MACROS \
+ -D_USE_MATH_DEFINES \
+ -DDBUG_OFF
+
+if! $windows
+{
+ cc.poptions += -D_FILE_OFFSET_BITS=64
+
+ if $linux
+ cc.poptions += -D_GNU_SOURCE
+}
+else
+{
+ cc.poptions += -DWIN32 -D_WINDOWS -D_WIN32_WINNT=0x0601 -DNOGDI -DNOMINMAX \
+ -DWIN32_LEAN_AND_MEAN -D_MBCS
+
+ if $msvc
+ cc.coptions += /GS /fp:precise /Zc:wchar_t /Zc:forScope
+}
+
+# Note that we add "-I$src_root" for the headers auto-generating machinery to
+# work properly.
+#
+cc.poptions =+ "-I$out_root" "-I$src_root" "-I$src_base" "-I$src_base/mysql"
+
+zlib_dir = $src_base/zlib
+
+# To keep "-I$out_root" "-I$src_root" first we use '+=', rather than '=+' to
+# append poptions for the directory scopes.
+#
+zlib/ cc.poptions += "-I$zlib_dir"
+
+strings/ cc.poptions += -DDISABLE_MYSQL_THREAD_H
+
+libbinlogevents_dir = $src_base/libbinlogevents
+
+mysys/ cc.poptions += "-I$zlib_dir" "-I$libbinlogevents_dir/export"
+
+libmysql/ cc.poptions += "-I$libbinlogevents_dir/export" \
+ -DCLIENT_PROTOCOL_TRACING
+
+sql-common/ cc.poptions += "-I$zlib_dir" \
+ "-I$libbinlogevents_dir/export" \
+ "-I$libbinlogevents_dir/include"
+
+if! $windows
+{
+ zlib/ cc.poptions += -D_LARGEFILE64_SOURCE=1
+}
+else
+{
+ sql-common/ cc.poptions += -DAUTHENTICATION_WIN
+
+ # The upstream package always adds -DDEBUG_ERRROR_LOG -DWINAUTH_USE_DBUG_LIB.
+ # Looks like they are required for debugging only, so let's omit them.
+ #
+ libmysql/authentication_win/ cc.poptions += -DSECURITY_WIN32
+}
+
+if $msvc
+{
+ # Disable warnings that pop up with /W3.
+ #
+ cc.coptions += /wd4018 /wd4068 /wd4091 /wd4101 /wd4146 /wd4244 /wd4267 \
+ /wd4477 /wd4700 /wd4805 /wd4996
+}
+elif $gcc
+{
+ cc.coptions += -ffunction-sections -fdata-sections -fno-omit-frame-pointer
+
+ # Disable warnings that pop up with -Wall -Wextra. Upstream doesn't seem to
+ # care about these and it is not easy to disable specific warnings in a way
+ # that works across compilers/version (some -Wno-* options are only
+ # recognized in newer versions). There are still some warnings left that
+ # appear for certain platforms/compilers. We pass them through but disable
+ # treating them as errors.
+ #
+ cc.coptions += -Wno-all -Wno-extra -Wno-error
+}
+
+if! $windows
+{
+ # On Linux the upstream package also passes the cmake-generated libmysql.ver
+ # file. The symbols it contains are hard-coded into libmysql/CMakeList.txt.
+ # We have dropped the file for now.
+ #
+ if $linux
+ {
+ # Make sure all symbols are resolvable.
+ #
+ libs{mysqlclient}: cc.loptions += -Wl,--no-undefined
+ }
+
+ cc.libs += ($bsd ? -lexecinfo : -ldl) -lpthread -lm
+
+ if $linux
+ cc.libs += -lrt # Posix timers.
+}
+else
+ cc.libs += $regex.apply(advapi32, '(.+)', $msvc ? '\1.lib' : '-l\1')
+
+# Export options.
+#
+# The library clients must include the API header as <mysql/mysql.h>.
+#
+lib{mysqlclient}: cc.export.poptions = "-I$out_root" \
+ "-I$src_root" \
+ "-I$src_base" \
+ "-I$src_base/mysql" \
+ "-I$libbinlogevents_dir/export"
+
+# See bootstrap.build for details.
+#
+if $version.pre_release
+ lib{mysqlclient}: bin.lib.version = @"-$version.project_id"
+else
+ lib{mysqlclient}: bin.lib.version = @"-$abi_version"
+
+# Let's install the bare minimum of headers: mysql.h, errmsg.h, mysqld_error.h
+# and headers they recursively include. Install them into the mysql/
+# subdirectory of, say, /usr/include/.
+#
+h{*}: install = false
+hxx{*}: install = false
+
+# Install mysql/ sub-entries recreating subdirectories.
+#
+for h: mysql/{errmsg my_command my_list mysql_com mysql mysql_time \
+ mysql/{client_plugin plugin_auth_common}}
+{
+ d = $path.directory($h)
+
+ h{$h}@$d: install = include/$d
+}
+
+# Install the remaining headers not recreating subdirectories.
+#
+for h: mysqld_error mysql_version libbinlogevents/export/binary_log_types \
+ mysql/mysql/udf_registration_types
+{
+ h{$h}@./$path.directory($h): install = include/mysql/
+}
+
+h{version}: install = include/mysql/