#!@PERL_PATH@ # -*- cperl -*- # # Copyright (c) 2007, 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License, version 2.0, # as published by the Free Software Foundation. # # This program is also distributed with certain software (including # but not limited to OpenSSL) that is licensed under separate terms, # as designated in a particular file or component or in included license # documentation. The authors of MySQL hereby grant you an additional # permission to link the program and your derivative works with the # separately licensed software that they have included with MySQL. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License, version 2.0, for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ############################################################################## # # This script reports various configuration settings that may be needed # when using the MySQL client library. # # This script try to match the shell script version as close as possible, # but in addition being compatible with ActiveState Perl on Windows. # # All unrecognized arguments to this script are passed to mysqld. # # NOTE: This script will only be used on Windows until solved how to # handle @LIBS@ and other strings inserted that might contain # several arguments, possibly with spaces in them. # # NOTE: This script was deliberately written to be as close to the shell # script as possible, to make the maintenance of both in parallel # easier. # ############################################################################## use File::Basename; use Getopt::Long; use Cwd; use strict; my $cwd = cwd(); my $basedir; my $socket = '@MYSQL_UNIX_ADDR@'; my $version = '@VERSION@'; sub which { my $file = shift; my $IFS = $^O eq "MSWin32" ? ";" : ":"; foreach my $dir ( split($IFS, $ENV{PATH}) ) { if ( -f "$dir/$file" or -f "$dir/$file.exe" ) { return "$dir/$file"; } } print STDERR "which: no $file in ($ENV{PATH})\n"; exit 1; } # ---------------------------------------------------------------------- # If we can find the given directory relatively to where mysql_config is # we should use this instead of the incompiled one. # This is to ensure that this script also works with the binary MySQL # version # ---------------------------------------------------------------------- sub fix_path { my $default = shift; my @dirs = @_; foreach my $dirname ( @dirs ) { my $path = "$basedir/$dirname"; if ( -d $path ) { return $path; } } return $default; } sub get_full_path { my $file = shift; # if the file is a symlink, try to resolve it if ( $^O ne "MSWin32" and -l $file ) { $file = readlink($file); } if ( $file =~ m,^/, ) { # Do nothing, absolute path } elsif ( $file =~ m,/, ) { # Make absolute, and remove "/./" in path $file = "$cwd/$file"; $file =~ s,/\./,/,g; } else { # Find in PATH $file = which($file); } return $file; } ############################################################################## # # Form a command line that can handle spaces in paths and arguments # ############################################################################## sub quote_options { my @cmd; foreach my $opt ( @_ ) { next unless $opt; # If undefined or empty, just skip push(@cmd, "\"$opt\""); # Quote argument } return join(" ", @cmd); } ############################################################################## # # Main program # ############################################################################## my $me = get_full_path($0); $basedir = dirname(dirname($me)); # Remove "/bin/mysql_config" part my $ldata = '@localstatedir@'; my $execdir = '@libexecdir@'; my $bindir = '@bindir@'; # ---------------------------------------------------------------------- # If installed, search for the compiled in directory first (might be "lib64") # ---------------------------------------------------------------------- my $pkglibdir = fix_path('@pkglibdir@',"libmysql/relwithdebinfo", "libmysql/release","libmysql/debug","lib/mysql","lib"); my $pkgincludedir = fix_path('@pkgincludedir@', "include/mysql", "include"); # Assume no argument with space in it my @ldflags = split(" ",'@LDFLAGS@'); my $port; if ( '@MYSQL_TCP_PORT_DEFAULT@' == 0 ) { $port = 0; } else { $port = '@MYSQL_TCP_PORT@'; } # ---------------------------------------------------------------------- # Create options # ---------------------------------------------------------------------- my(@lib_opts,@lib_e_opts); if ( $^O eq "MSWin32" ) { my $linkpath = "$pkglibdir"; @lib_opts = ("$linkpath/@LIBMYSQL_OS_OUTPUT_NAME@"); @lib_e_opts = ("$linkpath/@LIBEMBED_OS_OUTPUT_NAME@"); } else { my $linkpath = "-L$pkglibdir@RPATH_OPTION@"; @lib_opts = ($linkpath,"-l@LIBMYSQL_OS_OUTPUT_NAME@"); @lib_e_opts = ($linkpath,"-l@LIBEMBED_OS_OUTPUT_NAME@"); } my $flags; $flags->{libs} = [@lib_opts, qw(@CONFIG_CLIENT_LIBS@)]; $flags->{include} = ["-I$pkgincludedir"]; $flags->{cflags} = [@{$flags->{include}},split(" ",'@CFLAGS@')]; $flags->{cxxflags}= [@{$flags->{include}},split(" ",'@CXXFLAGS@')]; my $include = quote_options(@{$flags->{include}}); my $cflags = quote_options(@{$flags->{cflags}}); my $cxxflags= quote_options(@{$flags->{cxxflags}}); my $libs = quote_options(@{$flags->{libs}}); ############################################################################## # # Usage information, output if no option is given # ############################################################################## sub usage { print < sub { print "$cflags\n" }, "cxxflags"=> sub { print "$cxxflags\n" }, "include" => sub { print "$include\n" }, "libs" => sub { print "$libs\n" }, "libs_r" => sub { print "$libs\n" }, "socket" => sub { print "$socket\n" }, "port" => sub { print "$port\n" }, "version" => sub { print "$version\n" }, ) or usage(); exit 0