diff options
-rw-r--r-- | scripts/make_binary_distribution.sh | 453 |
1 files changed, 239 insertions, 214 deletions
diff --git a/scripts/make_binary_distribution.sh b/scripts/make_binary_distribution.sh index 50cff8578c9..0a58f8b8ef1 100644 --- a/scripts/make_binary_distribution.sh +++ b/scripts/make_binary_distribution.sh @@ -14,36 +14,61 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# 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. +# 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}" +# +# Note that the structure created by this script is slightly different from +# what a normal "make install" would produce. No extra "mysql" sub directory +# will be created, i.e. no "$prefix/include/mysql", "$prefix/lib/mysql" or +# "$prefix/share/mysql". This is because the build system explicitly calls +# make with pkgdatadir=<datadir>, etc. +# +# In GNU make/automake terms +# +# "pkglibdir" is set to the same as "libdir" +# "pkgincludedir" is set to the same as "includedir" +# "pkgdatadir" is set to the same as "datadir" +# "pkgplugindir" is set to "$pkglibdir/plugin" +# "pkgsuppdir" is set to "@prefix@/support-files", +# normally the same as "datadir" +# +# The temporary directory path given to "--tmp=<path>" has to be +# absolute and with no spaces. +# +# Note that for best result, the original "make" should be done with +# the same arguments as used for "make install" below, especially the +# 'pkglibdir', as the RPATH should to be set correctly. +# +############################################################################## + +############################################################################## +# +# Read the command line arguments that control this script +# +############################################################################## machine=@MACHINE_TYPE@ system=@SYSTEM_TYPE@ -version=@VERSION@ SOURCE=`pwd` CP="cp -p" MV="mv" -STRIP=1 -DEBUG=0 +STRIP=1 # Option ignored SILENT=0 -MACHINE="" PLATFORM="" TMP=/tmp SUFFIX="" -NDBCLUSTER="" +NDBCLUSTER="" # Option ignored 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=;;"` ;; + --machine=*) machine=`echo "$arg" | sed -e "s;--machine=;;"` ;; --platform=*) PLATFORM=`echo "$arg" | sed -e "s;--platform=;;"` ;; --silent) SILENT=1 ;; --with-ndbcluster) NDBCLUSTER=1 ;; @@ -54,53 +79,52 @@ for arg do 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 +# ---------------------------------------------------------------------- +# Adjust "system" output from "uname" to be more human readable +# ---------------------------------------------------------------------- + +if [ x"$PLATFORM" = x"" ] ; then + # FIXME move this to the build tools + # 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'` + + PLATFORM="$system-$machine" fi -if [ x"$PLATFORM" != x"" ] ; then - platform="$PLATFORM" -else - platform="$system-$machine" -fi +# Print the platform name for build logs +echo "PLATFORM NAME: $PLATFORM" -# FIXME This should really be integrated with automake and not duplicate the -# installation list. +case $PLATFORM in + *netware*) BASE_SYSTEM="netware" ;; +esac -BASE=$TMP/my_dist$SUFFIX +# Change the distribution to a long descriptive name +NEW_NAME=mysql@MYSQL_SERVER_SUFFIX@-@VERSION@-$PLATFORM$SUFFIX +# ---------------------------------------------------------------------- +# Define BASE, and remove the old BASE directory if any +# ---------------------------------------------------------------------- +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 +# ---------------------------------------------------------------------- +# Find the TAR to use +# ---------------------------------------------------------------------- # This is needed to prefer GNU tar over platform tar because that can't # always handle long filenames @@ -127,24 +151,149 @@ which_1 () } tar=`which_1 gnutar gtar` -if [ "$?" = "1" -o x"$tar" = x"" ] ; then +if [ $? -ne 0 -o x"$tar" = x"" ] ; then tar=tar fi +############################################################################## +# +# Handle the Unix/Linux packaging using "make install" +# +############################################################################## + +if [ x"$BASE_SYSTEM" != x"netware" ] ; then + + # ---------------------------------------------------------------------- + # Terminate on any base level error + # ---------------------------------------------------------------------- + set -e + + # ---------------------------------------------------------------------- + # Really ugly, one script, "mysql_install_db", needs prefix set to ".", + # i.e. makes access relative the current directory. This matches + # the documentation, so better not change this. And for another script, + # "mysql.server", we make some relative, others not. + # ---------------------------------------------------------------------- + + cd scripts + rm -f mysql_install_db + @MAKE@ mysql_install_db \ + prefix=. \ + bindir=./bin \ + sbindir=./bin \ + scriptdir=./bin \ + libexecdir=./bin \ + pkgdatadir=./share \ + localstatedir=./data + cd .. + + cd support-files + rm -f mysql.server + @MAKE@ mysql.server \ + bindir=./bin \ + sbindir=./bin \ + scriptdir=./bin \ + libexecdir=./bin \ + pkgdatadir=@pkgdatadir@ + cd .. + + # ---------------------------------------------------------------------- + # Do a install that we later are to pack. Use the same paths as in + # the build for the relevant directories. + # ---------------------------------------------------------------------- + @MAKE@ DESTDIR=$BASE install \ + pkglibdir=@pkglibdir@ \ + pkgincludedir=@pkgincludedir@ \ + pkgdatadir=@pkgdatadir@ \ + pkgplugindir=@pkgplugindir@ \ + pkgsuppdir=@pkgsuppdir@ \ + mandir=@mandir@ \ + infodir=@infodir@ + + # ---------------------------------------------------------------------- + # Rename top directory, and set DEST to the new directory + # ---------------------------------------------------------------------- + mv $BASE@prefix@ $BASE/$NEW_NAME + DEST=$BASE/$NEW_NAME + + # ---------------------------------------------------------------------- + # If we compiled with gcc, copy libgcc.a to the dist as libmygcc.a + # ---------------------------------------------------------------------- + if [ x"@GXX@" = x"yes" ] ; then + gcclib=`@CC@ @CFLAGS@ --print-libgcc-file 2>/dev/null` || true + if [ -z "$gcclib" ] ; then + echo "Warning: Compiler doesn't tell libgcc.a!" + elif [ -f "$gcclib" ] ; then + $CP $gcclib $DEST/lib/libmygcc.a + else + echo "Warning: Compiler result '$gcclib' not found / no file!" + fi + fi + + # FIXME let this script be in "bin/", where it is in the RPMs? + # http://dev.mysql.com/doc/refman/5.1/en/mysql-install-db-problems.html + mkdir $DEST/scripts + mv $DEST/bin/mysql_install_db $DEST/scripts/ + + # Note, no legacy "safe_mysqld" link to "mysqld_safe" in 5.1 + + # Copy readme and license files + cp README Docs/INSTALL-BINARY $DEST/ + if [ -f COPYING -a -f EXCEPTIONS-CLIENT ] ; then + cp COPYING EXCEPTIONS-CLIENT $DEST/ + elif [ -f LICENSE.mysql ] ; then + cp LICENSE.mysql $DEST/ + else + echo "ERROR: no license files found" + exit 1 + fi + + # FIXME should be handled by make file, and to other dir + mkdir -p $DEST/bin $DEST/support-files + cp scripts/mysqlaccess.conf $DEST/bin/ + cp support-files/magic $DEST/support-files/ + + # Create empty data directories, set permission (FIXME why?) + mkdir $DEST/data $DEST/data/mysql $DEST/data/test + chmod o-rwx $DEST/data $DEST/data/mysql $DEST/data/test + + # ---------------------------------------------------------------------- + # Create the result tar file + # ---------------------------------------------------------------------- + + 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 $BASE ; $tar $OPT - $NEW_NAME) | gzip -9 > $NEW_NAME.tar.gz + echo "$NEW_NAME.tar.gz created" + + echo "Removing temporary directory" + rm -rf $BASE + exit 0 +fi + + +############################################################################## +# +# Handle the Netware case, until integrated above +# +############################################################################## + +BS=".nlm" +MYSQL_SHARE=$BASE/share + 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/suite -if [ $BASE_SYSTEM != "netware" ] ; then - mkdir $BASE/share/mysql $BASE/tests $BASE/sql-bench $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. # Note that when listing files to copy, we might list the file name # twice, once in the directory location where it is built, and a @@ -176,12 +325,13 @@ copyfileto $BASE COPYING COPYING.LIB README Docs/INSTALL-BINARY \ 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 \ - myisam/myisamchk$BS myisam/myisampack$BS myisam/myisamlog$BS \ - myisam/myisam_ftdump$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 \ @@ -191,42 +341,16 @@ BIN_FILES="extra/comp_err$BS extra/replace$BS extra/perror$BS \ "; # Platform-specific bin dir files: -if [ $BASE_SYSTEM = "netware" ] ; then - BIN_FILES="$BIN_FILES \ +BIN_FILES="$BIN_FILES \ netware/mysqld_safe$BS netware/mysql_install_db$BS \ - netware/init_db.sql netware/test_db.sql netware/mysql_explain_log$BS \ + netware/init_db.sql netware/test_db.sql \ netware/mysqlhotcopy$BS netware/libmysql$BS netware/init_secure_db.sql \ "; -# For all other platforms: -else - BIN_FILES="$BIN_FILES \ - server-tools/instance-manager/.libs/mysqlmanager \ - client/mysqltestmanagerc \ - client/mysqltestmanager-pwgen tools/mysqltestmanager \ - client/.libs/mysql client/.libs/mysqlshow client/.libs/mysqladmin \ - client/.libs/mysqldump client/.libs/mysqlimport \ - client/.libs/mysqltest client/.libs/mysqlcheck \ - client/.libs/mysqlbinlog client/.libs/mysqltestmanagerc \ - client/.libs/mysqltestmanager-pwgen tools/.libs/mysqltestmanager \ - 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 - -# 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 +$CP netware/*.pl $BASE/scripts +$CP scripts/mysqlhotcopy $BASE/scripts/mysqlhotcopy.pl copyfileto $BASE/lib \ libmysql/.libs/libmysqlclient.a \ @@ -248,31 +372,17 @@ copyfileto $BASE/lib \ 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 +for i in $BASE/lib/*.a +do + libname=`basename $i .a` + $MV $i $BASE/lib/$libname.lib +done +rm -f $BASE/lib/*.la -copyfileto $BASE/include 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 +copyfileto $BASE/include config.h include/* -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 +rm -f $BASE/include/Makefile* $BASE/include/*.in $BASE/include/config-win.h copyfileto $BASE/support-files support-files/* @@ -291,43 +401,29 @@ copyfileto $BASE/mysql-test \ $CP mysql-test/lib/*.pl $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/include/*.sql $BASE/mysql-test/include $CP mysql-test/include/*.test $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/*.MYD mysql-test/std_data/*.MYI \ + mysql-test/std_data/*.pem mysql-test/std_data/Moscow_leap \ + mysql-test/std_data/Index.xml \ + mysql-test/std_data/des_key_file mysql-test/std_data/*.*001 \ + mysql-test/std_data/*.cnf mysql-test/std_data/*.MY* \ + $BASE/mysql-test/std_data $CP mysql-test/t/*.test mysql-test/t/*.imtest \ mysql-test/t/*.disabled mysql-test/t/*.opt \ mysql-test/t/*.slave-mi mysql-test/t/*.sh mysql-test/t/*.sql $BASE/mysql-test/t $CP mysql-test/r/*.result mysql-test/r/*.require \ $BASE/mysql-test/r -# Copy the additional suites and data "as is", they are in flux -$tar cf - mysql-test/suite | ( cd $BASE ; $tar xf - ) -$tar cf - mysql-test/std_data | ( cd $BASE ; $tar xf - ) +# Copy the additional suites "as is", they are in flux +$tar cf - mysql-test/suite | ( cd $BASE ; $tar xf - ) # Clean up if we did this from a bk tree if [ -d mysql-test/SCCS ] ; then find $BASE/mysql-test -name SCCS -print | xargs rm -rf fi -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\@ ./share \ - < 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-log-rotate \ - $BASE/support-files/*.server $BASE/configure - $CP -r sql-bench/* $BASE/sql-bench - rm -f $BASE/sql-bench/*.sh $BASE/sql-bench/Makefile* $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* \ @@ -336,29 +432,19 @@ rm -f $BASE/bin/Makefile* $BASE/bin/*.in $BASE/bin/*.sh \ # # Copy system dependent files # -if [ $BASE_SYSTEM = "netware" ] ; then - ./scripts/fill_help_tables < ./Docs/manual.texi >> ./netware/init_db.sql -fi +./scripts/fill_help_tables < ./Docs/manual.texi >> ./netware/init_db.sql # # Remove system dependent files # -if [ $BASE_SYSTEM = "netware" ] ; then - rm -f $BASE/support-files/magic \ +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 -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/sql-bench/SCCS ] ; then @@ -366,78 +452,17 @@ if [ -d $BASE/sql-bench/SCCS ] ; then find $BASE/sql-bench -name SCCS -print | xargs rm -rf fi -# NDB Cluster -if [ x$NDBCLUSTER = x1 ]; then - ( cd 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/. - $CP $BASE/ndb-stage@pkgdatadir@/* $BASE/share/mysql/. - $CP -r $BASE/ndb-stage@pkgincludedir@/ndb $BASE/include - $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 +# Create a zip file for NetWare users # - -if [ x"@GXX@" = x"yes" ] ; then - gcclib=`@CC@ @CFLAGS@ --print-libgcc-file 2>/dev/null` || true - if [ -z "$gcclib" ] ; then - echo "Warning: Compiler doesn't tell libgcc.a!" - elif [ -f "$gcclib" ] ; then - $CP $gcclib $BASE/lib/libmygcc.a - else - echo "Warning: Compiler result '$gcclib' not found / no file!" - fi -fi - -#if we are debugging, do not do tar/gz -if [ x$DEBUG = x1 ] ; then - exit -fi - -if [ $BASE_SYSTEM != "netware" ] ; then - - # - # Create the result tar file - # - - 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 +rm -f $NEW_NAME.zip +(cd $TMP; zip -r "$SOURCE/$NEW_NAME.zip" $NEW_NAME) +echo "$NEW_NAME.zip created" echo "Removing temporary directory" rm -rf $BASE |