mariadb/scripts/make_binary_distribution.sh
unknown 7ef680fe80 make_binary_distribution.sh:
Split copy of result files to avoid shell limit.
  Added copy of mysql-test/std_data/ndb_backup5{0,1}.
configure.in:
  Look for dlopen() even if --with-mysqld-ldflags constains "-static",
  as this is not the same as the flag to "ld", it just informs
  "libtool" to link static with libraries created part of the build,
  even if there exists shared versions.


configure.in:
  Look for dlopen() even if --with-mysqld-ldflags constains "-static",
  as this is not the same as the flag to "ld", it just informs
  "libtool" to link static with libraries created part of the build,
  even if there exists shared versions.
scripts/make_binary_distribution.sh:
  Split copy of result files to avoid shell limit.
  Added copy of mysql-test/std_data/ndb_backup5{0,1}.
2006-10-16 02:07:50 +02:00

437 lines
13 KiB
Bash

#!/bin/sh
# This is a script to create a TAR or ZIP binary distribution out of a
# built source tree. The output file will be put at the top level of
# the source tree, as "mysql-<vsn>....{tar.gz,zip}"
#
# The temporary directory path given to "--tmp=<path>" has to be
# absolute and with no spaces.
machine=@MACHINE_TYPE@
system=@SYSTEM_TYPE@
version=@VERSION@
SOURCE=`pwd`
CP="cp -p"
MV="mv"
STRIP=1
DEBUG=0
SILENT=0
MACHINE=""
PLATFORM=""
TMP=/tmp
SUFFIX=""
NDBCLUSTER=""
for arg do
case "$arg" in
--debug) DEBUG=1;;
--tmp=*) TMP=`echo "$arg" | sed -e "s;--tmp=;;"` ;;
--suffix=*) SUFFIX=`echo "$arg" | sed -e "s;--suffix=;;"` ;;
--no-strip) STRIP=0 ;;
--machine=*) MACHINE=`echo "$arg" | sed -e "s;--machine=;;"` ;;
--platform=*) PLATFORM=`echo "$arg" | sed -e "s;--platform=;;"` ;;
--silent) SILENT=1 ;;
--with-ndbcluster) NDBCLUSTER=1 ;;
*)
echo "Unknown argument '$arg'"
exit 1
;;
esac
done
# Remove vendor from $system
system=`echo $system | sed -e 's/[a-z]*-\(.*\)/\1/g'`
# Map OS names to "our" OS names (eg. darwin6.8 -> osx10.2)
system=`echo $system | sed -e 's/darwin6.*/osx10.2/g'`
system=`echo $system | sed -e 's/darwin7.*/osx10.3/g'`
system=`echo $system | sed -e 's/darwin8.*/osx10.4/g'`
system=`echo $system | sed -e 's/\(aix4.3\).*/\1/g'`
system=`echo $system | sed -e 's/\(aix5.1\).*/\1/g'`
system=`echo $system | sed -e 's/\(aix5.2\).*/\1/g'`
system=`echo $system | sed -e 's/\(aix5.3\).*/\1/g'`
system=`echo $system | sed -e 's/osf5.1b/tru64/g'`
system=`echo $system | sed -e 's/linux-gnu/linux/g'`
system=`echo $system | sed -e 's/solaris2.\([0-9]*\)/solaris\1/g'`
system=`echo $system | sed -e 's/sco3.2v\(.*\)/openserver\1/g'`
if [ x"$MACHINE" != x"" ] ; then
machine=$MACHINE
fi
if [ x"$PLATFORM" != x"" ] ; then
platform="$PLATFORM"
else
platform="$system-$machine"
fi
# FIXME This should really be integrated with automake and not duplicate the
# installation list.
BASE=$TMP/my_dist$SUFFIX
if [ -d $BASE ] ; then
rm -rf $BASE
fi
BS=""
BIN_FILES=""
BASE_SYSTEM="any"
MYSQL_SHARE=$BASE/share/mysql
case $system in
*netware*)
BASE_SYSTEM="netware"
BS=".nlm"
MYSQL_SHARE=$BASE/share
;;
esac
mkdir $BASE $BASE/bin $BASE/docs \
$BASE/include $BASE/lib $BASE/support-files $BASE/share $BASE/scripts \
$BASE/mysql-test $BASE/mysql-test/t $BASE/mysql-test/r \
$BASE/mysql-test/include $BASE/mysql-test/std_data $BASE/mysql-test/lib \
$BASE/mysql-test/std_data/ndb_backup50 $BASE/mysql-test/std_data/ndb_backup51 \
$BASE/mysql-test/extra \
$BASE/mysql-test/extra/binlog_tests $BASE/mysql-test/extra/rpl_tests
if [ $BASE_SYSTEM != "netware" ] ; then
mkdir $BASE/share/mysql $BASE/tests $BASE/man \
$BASE/man/man1 $BASE/man/man8 $BASE/data $BASE/data/mysql $BASE/data/test
chmod o-rwx $BASE/data $BASE/data/*
fi
# Copy files if they exists, warn for those that don't
copyfileto()
{
destdir=$1
shift
for i
do
if [ -f $i ] ; then
$CP $i $destdir
elif [ -d $i ] ; then
echo "Warning: Will not copy directory \"$i\""
else
echo "Warning: Listed file not found \"$i\""
fi
done
}
copyfileto $BASE/docs ChangeLog Docs/mysql.info
copyfileto $BASE COPYING COPYING.LIB README Docs/INSTALL-BINARY \
EXCEPTIONS-CLIENT MySQLEULA.txt LICENSE.doc README.NW
# Non platform-specific bin dir files:
BIN_FILES="extra/comp_err$BS extra/replace$BS extra/perror$BS \
extra/resolveip$BS extra/my_print_defaults$BS \
extra/resolve_stack_dump$BS extra/mysql_waitpid$BS \
storage/myisam/myisamchk$BS storage/myisam/myisampack$BS \
storage/myisam/myisamlog$BS storage/myisam/myisam_ftdump$BS \
sql/mysqld$BS sql/mysqld-debug$BS \
sql/mysql_tzinfo_to_sql$BS \
server-tools/instance-manager/mysqlmanager$BS \
client/mysql$BS client/mysqlshow$BS client/mysqladmin$BS \
client/mysqlslap$BS \
client/mysqldump$BS client/mysqlimport$BS \
client/mysqltest$BS client/mysqlcheck$BS \
client/mysqlbinlog$BS client/mysql_upgrade$BS \
tests/mysql_client_test$BS \
libmysqld/examples/mysql_client_test_embedded$BS \
libmysqld/examples/mysqltest_embedded$BS \
";
# Platform-specific bin dir files:
if [ $BASE_SYSTEM = "netware" ] ; then
BIN_FILES="$BIN_FILES \
netware/mysqld_safe$BS netware/mysql_install_db$BS \
netware/init_db.sql netware/test_db.sql$BS \
netware/mysqlhotcopy$BS netware/libmysql$BS netware/init_secure_db.sql \
";
# For all other platforms:
else
BIN_FILES="$BIN_FILES \
client/.libs/mysql client/.libs/mysqlshow client/.libs/mysqladmin \
client/.libs/mysqlslap \
client/.libs/mysqldump client/.libs/mysqlimport \
client/.libs/mysqltest client/.libs/mysqlcheck \
client/.libs/mysqlbinlog \
tests/.libs/mysql_client_test \
libmysqld/examples/.libs/mysql_client_test_embedded \
libmysqld/examples/.libs/mysqltest_embedded \
";
fi
copyfileto $BASE/bin $BIN_FILES
if [ x$STRIP = x1 ] ; then
strip $BASE/bin/*
fi
# Obsolete, starting from 5.1.6-beta
# # Copy not binary files
# copyfileto $BASE/bin sql/mysqld.sym.gz
if [ $BASE_SYSTEM = "netware" ] ; then
$CP netware/*.pl $BASE/scripts
$CP scripts/mysqlhotcopy $BASE/scripts/mysqlhotcopy.pl
fi
copyfileto $BASE/lib \
libmysql/.libs/libmysqlclient.a \
libmysql/.libs/libmysqlclient.so* \
libmysql/.libs/libmysqlclient.sl* \
libmysql/.libs/libmysqlclient*.dylib \
libmysql/libmysqlclient.* \
libmysql_r/.libs/libmysqlclient_r.a \
libmysql_r/.libs/libmysqlclient_r.so* \
libmysql_r/.libs/libmysqlclient_r.sl* \
libmysql_r/.libs/libmysqlclient_r*.dylib \
libmysql_r/libmysqlclient_r.* \
libmysqld/.libs/libmysqld.a \
libmysqld/.libs/libmysqld.so* \
libmysqld/.libs/libmysqld.sl* \
libmysqld/.libs/libmysqld*.dylib \
mysys/libmysys.a strings/libmystrings.a dbug/libdbug.a \
libmysqld/libmysqld.a netware/libmysql.imp \
zlib/.libs/libz.a
# convert the .a to .lib for NetWare
if [ $BASE_SYSTEM = "netware" ] ; then
for i in $BASE/lib/*.a
do
libname=`basename $i .a`
$MV $i $BASE/lib/$libname.lib
done
rm -f $BASE/lib/*.la
fi
copyfileto $BASE/include config.h include/*
rm -f $BASE/include/Makefile* $BASE/include/*.in $BASE/include/config-win.h
if [ $BASE_SYSTEM != "netware" ] ; then
rm -f $BASE/include/config-netware.h
fi
if [ $BASE_SYSTEM != "netware" ] ; then
if [ -d tests ] ; then
$CP tests/*.res tests/*.tst tests/*.pl $BASE/tests
fi
if [ -d man ] ; then
$CP man/*.1 $BASE/man/man1
$CP man/*.8 $BASE/man/man8
fi
fi
copyfileto $BASE/support-files support-files/*
copyfileto $BASE/share scripts/*.sql
$CP -r sql/share/* $MYSQL_SHARE
rm -f $MYSQL_SHARE/Makefile* $MYSQL_SHARE/*/*.OLD
copyfileto $BASE/mysql-test \
mysql-test/mysql-test-run mysql-test/install_test_db \
mysql-test/mysql-test-run.pl mysql-test/README \
mysql-test/valgrind.supp \
netware/mysql_test_run.nlm netware/install_test_db.ncf
$CP mysql-test/lib/*.pl $BASE/mysql-test/lib
$CP mysql-test/lib/*.sql $BASE/mysql-test/lib
$CP mysql-test/t/*.def $BASE/mysql-test/t
$CP mysql-test/include/*.inc $BASE/mysql-test/include
$CP mysql-test/t/*.def $BASE/mysql-test/t
$CP mysql-test/std_data/*.dat mysql-test/std_data/*.frm \
mysql-test/std_data/*.pem mysql-test/std_data/Moscow_leap \
mysql-test/std_data/des_key_file mysql-test/std_data/*.*001 \
mysql-test/std_data/*.cnf \
$BASE/mysql-test/std_data
$CP mysql-test/std_data/ndb_backup50/*.Data \
mysql-test/std_data/ndb_backup50/*.ctl \
mysql-test/std_data/ndb_backup50/*.log \
$BASE/mysql-test/std_data/ndb_backup50
$CP mysql-test/std_data/ndb_backup51/*.Data \
mysql-test/std_data/ndb_backup51/*.ctl \
mysql-test/std_data/ndb_backup51/*.log \
$BASE/mysql-test/std_data/ndb_backup51
$CP mysql-test/t/*.test $BASE/mysql-test/t
$CP mysql-test/t/*.imtest mysql-test/t/*.disabled $BASE/mysql-test/t
$CP mysql-test/t/*.opt mysql-test/t/*.slave-mi $BASE/mysql-test/t
$CP mysql-test/t/*.sh mysql-test/t/*.sql $BASE/mysql-test/t
$CP mysql-test/r/*.result $BASE/mysql-test/r
$CP mysql-test/r/*.require $BASE/mysql-test/r
$CP mysql-test/extra/binlog_tests/*.test $BASE/mysql-test/extra/binlog_tests
$CP mysql-test/extra/rpl_tests/*.test $BASE/mysql-test/extra/rpl_tests
if [ $BASE_SYSTEM != "netware" ] ; then
chmod a+x $BASE/bin/*
copyfileto $BASE/bin scripts/*
$BASE/bin/replace \@localstatedir\@ ./data \@bindir\@ ./bin \@scriptdir\@ \
./bin \@libexecdir\@ ./bin \@sbindir\@ ./bin \@prefix\@ . \@HOSTNAME\@ \
@HOSTNAME@ \@pkgdatadir\@ ./support-files \
< scripts/mysql_install_db.sh > $BASE/scripts/mysql_install_db
$BASE/bin/replace \@prefix\@ /usr/local/mysql \@bindir\@ ./bin \
\@sbindir\@ ./bin \@libexecdir\@ ./bin \
\@MYSQLD_USER\@ @MYSQLD_USER@ \@localstatedir\@ /usr/local/mysql/data \
\@HOSTNAME\@ @HOSTNAME@ \
< support-files/mysql.server.sh > $BASE/support-files/mysql.server
$BASE/bin/replace /my/gnu/bin/hostname /bin/hostname -- $BASE/bin/mysqld_safe
mv $BASE/support-files/binary-configure $BASE/configure
chmod a+x $BASE/bin/* $BASE/scripts/* $BASE/support-files/mysql-* \
$BASE/support-files/mysql.server $BASE/configure
rm -f $BASE/lib/*.la
rm -f $BASE/bin/*.sql
fi
rm -f $BASE/bin/Makefile* $BASE/bin/*.in $BASE/bin/*.sh \
$BASE/bin/mysql_install_db $BASE/bin/make_binary_distribution \
$BASE/bin/setsomevars $BASE/support-files/Makefile* \
$BASE/support-files/*.sh
#
# Copy system dependent files
#
if [ $BASE_SYSTEM = "netware" ] ; then
echo "CREATE DATABASE mysql;" > $BASE/bin/init_db.sql
echo "CREATE DATABASE test;" >> $BASE/bin/init_db.sql
sh ./scripts/mysql_create_system_tables.sh real "" "%" 0 \
>> $BASE/bin/init_db.sql
sh ./scripts/mysql_create_system_tables.sh test "" "%" 0 \
> $BASE/bin/test_db.sql
./scripts/fill_help_tables < ./Docs/manual.texi >> ./netware/init_db.sql
fi
#
# Remove system dependent files
#
if [ $BASE_SYSTEM = "netware" ] ; then
rm -f $BASE/support-files/magic \
$BASE/support-files/mysql.server \
$BASE/support-files/mysql*.spec \
$BASE/support-files/mysql-log-rotate \
$BASE/support-files/binary-configure \
$BASE/support-files/build-tags \
$BASE/support-files/MySQL-shared-compat.spec \
$BASE/support-files/ndb-config-2-node.ini \
$BASE/INSTALL-BINARY \
$BASE/MySQLEULA.txt
else
rm -f $BASE/README.NW
fi
# Make safe_mysqld a symlink to mysqld_safe for backwards portability
if [ $BASE_SYSTEM != "netware" ] ; then
(cd $BASE/bin ; ln -s mysqld_safe safe_mysqld )
fi
# Clean up if we did this from a bk tree
if [ -d $BASE/share/SCCS ] ; then
find $BASE/share -name SCCS -print | xargs rm -rf
fi
# NDB Cluster
if [ x$NDBCLUSTER = x1 ]; then
( cd storage/ndb ; @MAKE@ DESTDIR=$BASE/ndb-stage install )
( cd mysql-test/ndb ; @MAKE@ DESTDIR=$BASE/ndb-stage install )
$CP $BASE/ndb-stage@bindir@/* $BASE/bin/.
$CP $BASE/ndb-stage@libexecdir@/* $BASE/bin/.
$CP $BASE/ndb-stage@pkglibdir@/* $BASE/lib/.
test -d $BASE/include/storage || mkdir $BASE/include/storage
$CP -r $BASE/ndb-stage@pkgincludedir@/storage/ndb $BASE/include/storage/
$CP -r $BASE/ndb-stage@prefix@/mysql-test/ndb $BASE/mysql-test/. || exit 1
rm -rf $BASE/ndb-stage
fi
# Change the distribution to a long descriptive name
NEW_NAME=mysql@MYSQL_SERVER_SUFFIX@-$version-$platform$SUFFIX
# Print the platform name for build logs
echo "PLATFORM NAME: $platform"
BASE2=$TMP/$NEW_NAME
rm -rf $BASE2
mv $BASE $BASE2
BASE=$BASE2
#
# If we are compiling with gcc, copy libgcc.a to the distribution as libmygcc.a
#
if [ x"@GXX@" = x"yes" ] ; then
gcclib=`@CC@ --print-libgcc-file`
if [ $? -ne 0 ] ; then
echo "Warning: Couldn't find libgcc.a!"
else
$CP $gcclib $BASE/lib/libmygcc.a
fi
fi
#if we are debugging, do not do tar/gz
if [ x$DEBUG = x1 ] ; then
exit
fi
# This is needed to prefere gnu tar instead of tar because tar can't
# always handle long filenames
PATH_DIRS=`echo $PATH | \
sed -e 's/^:/. /' -e 's/:$/ ./' -e 's/::/ . /g' -e 's/:/ /g' `
which_1 ()
{
for cmd
do
for d in $PATH_DIRS
do
for file in $d/$cmd
do
if [ -x $file -a ! -d $file ] ; then
echo $file
exit 0
fi
done
done
done
exit 1
}
if [ $BASE_SYSTEM != "netware" ] ; then
#
# Create the result tar file
#
tar=`which_1 gnutar gtar`
if [ "$?" = "1" -o x"$tar" = x"" ] ; then
tar=tar
fi
echo "Using $tar to create archive"
OPT=cvf
if [ x$SILENT = x1 ] ; then
OPT=cf
fi
echo "Creating and compressing archive"
rm -f $NEW_NAME.tar.gz
(cd $TMP ; $tar $OPT - $NEW_NAME) | gzip -9 > $NEW_NAME.tar.gz
echo "$NEW_NAME.tar.gz created"
else
#
# Create a zip file for NetWare users
#
rm -f $NEW_NAME.zip
(cd $TMP; zip -r "$SOURCE/$NEW_NAME.zip" $NEW_NAME)
echo "$NEW_NAME.zip created"
fi
echo "Removing temporary directory"
rm -rf $BASE