home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- # Copyright (C) 2006 MySQL AB
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; version 2 of the License.
- #
- # 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 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
-
- # Exit if failing to copy, we want exact specifications, not
- # just "what happen to be built".
- set -e
-
- # ----------------------------------------------------------------------
- # Read first argument that is the base name of the resulting TAR file.
- # See usage() function below for a description on the arguments.
- #
- # NOTE: We will read the rest of the command line later on.
- # NOTE: Pattern matching with "{..,..}" can't be used, not portable.
- # ----------------------------------------------------------------------
-
- # FIXME FIXME "debug", own build or handled here?
- # FIXME FIXME add way to copy from other builds executables
-
- usage()
- {
- echo <<EOF
- Usage: make_win_bin_dist [ options ] package-base-name [ copy-defs... ]
-
- This is a script to run from the top of a source tree built on Windows.
- The "package-base-name" argument should be something like
-
- mysql-noinstall-5.0.25-win32 (or winx64)
-
- and will become the name of the directory of the unpacked ZIP (stripping
- away the "noinstall" part of the ZIP file name if any) and the base
- for the resulting package name.
-
- Options are
-
- --embedded Pack the embedded server and give error if not built.
- The default is to pack it if it is built.
-
- --no-embedded Don't pack the embedded server even if built
-
- --debug Pack the debug binaries and give error if not built.
- The default is to pack them if they are built.
-
- --no-debug Don't pack the debug binaries even if built
-
- --only-debug The target for this build was "Debug", and we just
- want to replace the normal binaries with debug
- versions, i.e. no separate "debug" directories.
-
- --exe-suffix=SUF Add a suffix to the filename part of the "mysqld" binary.
-
- As you might want to include files of directories from other builds
- (like a "mysqld-max.exe" server), you can instruct this script to copy
- them in for you. This is the "copy-def" arguments, and they are of the
- form
-
- relative-dest-name=source-name .....
-
- i.e. can be something like
-
- bin/mysqld-max.exe=../my-max-build/sql/release/mysqld.exe
-
- If you specify a directory the whole directory will be copied.
-
- EOF
- exit 1
- }
-
- # ----------------------------------------------------------------------
- # We need to be at the top of a source tree, check that we are
- # ----------------------------------------------------------------------
-
- if [ ! -d "sql" ] ; then
- echo "You need to run this script from inside the source tree"
- usage
- fi
-
- # ----------------------------------------------------------------------
- # Actual argument processing, first part
- # ----------------------------------------------------------------------
-
- NOINST_NAME=""
- TARGET="release"
- PACK_EMBEDDED="" # Could be "no", "yes" or empty
- PACK_DEBUG="" # Could be "no", "yes" or empty
- EXE_SUFFIX=""
-
- for arg do
- shift
- case "$arg" in
- --embedded) PACK_EMBEDDED="yes" ;;
- --no-embedded) PACK_EMBEDDED="no" ;;
- --debug) PACK_DEBUG="yes" ;;
- --no-debug) PACK_DEBUG="no" ;;
- --only-debug) TARGET="debug" ; PACK_DEBUG="no" ;;
- --exe-suffix=*) EXE_SUFFIX=`echo "$arg" | sed -e "s,--exe-suffix=,,"` ;;
- -*)
- echo "Unknown argument '$arg'"
- usage
- ;;
- *)
- NOINST_NAME="$arg"
- break
- esac
- done
-
- if [ x"$NOINST_NAME" = x"" ] ; then
- echo "No base package name given"
- usage
- fi
- DESTDIR=`echo $NOINST_NAME | sed 's/-noinstall-/-/'`
-
- if [ -e $DESTDIR ] ; then
- echo "Please remove the old $DESTDIR before running this script"
- usage
- fi
-
- trap 'echo "Clearning up and exiting..." ; rm -fr $DESTDIR; exit 1' ERR
-
- # ----------------------------------------------------------------------
- # Adjust target name if needed, release with debug info has another name
- # ----------------------------------------------------------------------
-
- if [ x"$TARGET" = x"release" -a -f "client/relwithdebinfo/mysql.exe" ]
- then
- TARGET="relwithdebinfo"
- fi
-
- # ----------------------------------------------------------------------
- # Copy executables, and client DLL
- # ----------------------------------------------------------------------
-
- mkdir $DESTDIR
- mkdir $DESTDIR/bin
- cp client/$TARGET/*.exe $DESTDIR/bin/
- cp extra/$TARGET/*.exe $DESTDIR/bin/
- cp myisam/$TARGET/*.exe $DESTDIR/bin/
- cp server-tools/instance-manager/$TARGET/*.{exe,map} $DESTDIR/bin/
- if [ x"$TARGET" != x"release" ] ; then
- cp server-tools/instance-manager/$TARGET/*.pdb $DESTDIR/bin/
- fi
- cp tests/$TARGET/*.exe $DESTDIR/bin/
- cp libmysql/$TARGET/*.exe $DESTDIR/bin/
- cp libmysql/$TARGET/libmysql.dll $DESTDIR/bin/
-
- # FIXME really needed?!
- mv $DESTDIR/bin/comp_err.exe $DESTDIR/bin/comp-err.exe
-
- if [ -f "sql/$TARGET/mysqld-nt.exe" ] ; then
- BASENAME="mysqld-nt" # Old style non CMake build
- else
- BASENAME="mysqld" # New style CMake build
- fi
-
- # Depending on Visual Studio target, the optimized server has symbols
- cp sql/$TARGET/$BASENAME.exe $DESTDIR/bin/$BASENAME$EXE_SUFFIX.exe
- cp sql/$TARGET/$BASENAME.map $DESTDIR/bin/$BASENAME$EXE_SUFFIX.map
- if [ x"$TARGET" != x"release" ] ; then
- cp sql/$TARGET/$BASENAME.pdb $DESTDIR/bin/$BASENAME$EXE_SUFFIX.pdb
- fi
-
- if [ -f "sql/debug/mysqld-debug.exe" ] ; then
- BASENAME="mysqld-debug" # Old style non CMake build
- else
- BASENAME="mysqld" # New style CMake build
- fi
-
- if [ x"$PACK_DEBUG" = x"" -a -f "sql/debug/$BASENAME.exe" -o \
- x"$PACK_DEBUG" = x"yes" ] ; then
- cp sql/debug/$BASENAME.exe $DESTDIR/bin/mysqld-debug.exe
- cp sql/debug/$BASENAME.pdb $DESTDIR/bin/mysqld-debug.pdb
- cp sql/debug/$BASENAME.map $DESTDIR/bin/mysqld-debug.map
- fi
-
- # ----------------------------------------------------------------------
- # Copy data directory, readme files etc
- # ----------------------------------------------------------------------
-
- if [ -d win/data ] ; then
- cp -pR win/data $DESTDIR/
- fi
-
- # FIXME maybe a flag to define "release build", or do the
- # check from the calling script that all these are there,
- # and with the correct content.
-
- mkdir $DESTDIR/Docs
- cp Docs/INSTALL-BINARY $DESTDIR/Docs/
- cp Docs/manual.chm $DESTDIR/Docs/ || /bin/true
- cp ChangeLog $DESTDIR/Docs/ || /bin/true
- cp support-files/my-*.ini $DESTDIR/
-
- if [ -f COPYING ] ; then
- cp COPYING EXCEPTIONS-CLIENT $DESTDIR/
- cp COPYING $DESTDIR/Docs/
- fi
-
- # ----------------------------------------------------------------------
- # These will be filled in when we enable embedded. Note that if no
- # argument is given, it is copied if exists, else a check is done.
- # ----------------------------------------------------------------------
-
- copy_embedded()
- {
- mkdir -p $DESTDIR/Embedded/DLL/release \
- $DESTDIR/Embedded/static/release \
- $DESTDIR/include
- cp libmysqld/libmysqld.def $DESTDIR/include/
- cp libmysqld/$TARGET/mysqlserver.lib $DESTDIR/Embedded/static/release/
- cp libmysqld/$TARGET/mysqlserver.pdb $DESTDIR/Embedded/static/release/
- cp libmysqld/$TARGET/libmysqld.dll $DESTDIR/Embedded/DLL/release/
- cp libmysqld/$TARGET/libmysqld.exp $DESTDIR/Embedded/DLL/release/
- cp libmysqld/$TARGET/libmysqld.lib $DESTDIR/Embedded/DLL/release/
- cp libmysqld/$TARGET/libmysqld.pdb $DESTDIR/Embedded/DLL/release/
-
- if [ x"$PACK_DEBUG" = x"" -a -f "libmysqld/debug/libmysqld.lib" -o \
- x"$PACK_DEBUG" = x"yes" ] ; then
- mkdir -p $DESTDIR/Embedded/DLL/debug \
- $DESTDIR/Embedded/static/debug
- cp libmysqld/debug/mysqlserver.lib $DESTDIR/Embedded/static/debug/
- cp libmysqld/debug/mysqlserver.pdb $DESTDIR/Embedded/static/debug/
- cp libmysqld/debug/libmysqld.dll $DESTDIR/Embedded/DLL/debug/
- cp libmysqld/debug/libmysqld.exp $DESTDIR/Embedded/DLL/debug/
- cp libmysqld/debug/libmysqld.lib $DESTDIR/Embedded/DLL/debug/
- cp libmysqld/debug/libmysqld.pdb $DESTDIR/Embedded/DLL/debug/
- fi
- }
-
- if [ x"$PACK_EMBEDDED" = x"" -a \
- -f "libmysqld/$TARGET/mysqlserver.lib" -a \
- -f "libmysqld/$TARGET/libmysqld.lib" -o \
- x"$PACK_EMBEDDED" = x"yes" ] ; then
- copy_embedded
- fi
-
- # ----------------------------------------------------------------------
- # Note: Make sure to sync with include/Makefile.am and WiX installer
- # XML specifications
- # ----------------------------------------------------------------------
-
- mkdir -p $DESTDIR/include
- cp include/mysql.h \
- include/mysql_com.h \
- include/mysql_time.h \
- include/my_list.h \
- include/my_alloc.h \
- include/typelib.h \
- include/my_dbug.h \
- include/m_string.h \
- include/my_sys.h \
- include/my_xml.h \
- include/mysql_embed.h \
- include/my_pthread.h \
- include/my_no_pthread.h \
- include/raid.h \
- include/decimal.h \
- include/errmsg.h \
- include/my_global.h \
- include/my_net.h \
- include/my_getopt.h \
- include/sslopt-longopts.h \
- include/my_dir.h \
- include/sslopt-vars.h \
- include/sslopt-case.h \
- include/sql_common.h \
- include/keycache.h \
- include/m_ctype.h \
- include/my_attribute.h \
- include/mysqld_error.h \
- include/sql_state.h \
- include/mysqld_ername.h \
- include/mysql_version.h \
- include/config-win.h \
- libmysql/libmysql.def \
- $DESTDIR/include/
-
- # ----------------------------------------------------------------------
- # Client libraries, and other libraries
- # FIXME why "libmysql.dll" installed both in "bin" and "lib/opt"?
- # ----------------------------------------------------------------------
-
- mkdir -p $DESTDIR/lib/opt
- cp libmysql/$TARGET/libmysql.dll \
- libmysql/$TARGET/libmysql.lib \
- libmysql/$TARGET/mysqlclient.lib \
- mysys/$TARGET/mysys.lib \
- regex/$TARGET/regex.lib \
- strings/$TARGET/strings.lib \
- zlib/$TARGET/zlib.lib $DESTDIR/lib/opt/
-
- if [ x"$PACK_DEBUG" = x"" -a -f "libmysql/debug/libmysql.lib" -o \
- x"$PACK_DEBUG" = x"yes" ] ; then
- mkdir -p $DESTDIR/lib/debug
- cp libmysql/debug/libmysql.dll \
- libmysql/debug/libmysql.lib \
- libmysql/debug/mysqlclient.lib \
- mysys/debug/mysys.lib \
- regex/debug/regex.lib \
- strings/debug/strings.lib \
- zlib/debug/zlib.lib $DESTDIR/lib/debug/
- fi
-
- # ----------------------------------------------------------------------
- # Copy the test directory
- # ----------------------------------------------------------------------
-
- mkdir $DESTDIR/mysql-test
- cp mysql-test/mysql-test-run.pl $DESTDIR/mysql-test/
- cp mysql-test/README $DESTDIR/mysql-test/
- cp -R mysql-test/{t,r,include,suite,std_data,lib} $DESTDIR/mysql-test/
-
- # Note that this will not copy "extra" if a soft link
- if [ -d mysql-test/extra ] ; then
- mkdir $DESTDIR/mysql-test/extra
- cp -pR mysql-test/extra/* $DESTDIR/mysql-test/extra/
- fi
-
- # ----------------------------------------------------------------------
- # Copy what could be usable in the "scripts" directory. Currently
- # only SQL files, others are Bourne shell scripts or Perl scripts
- # not really usable on Windows.
- #
- # But to be nice to the few Cygwin users we might have in 5.0 we
- # continue to copy the stuff, but don't include it in the WiX install.
- # ----------------------------------------------------------------------
-
- mkdir -p $DESTDIR/scripts
-
- # Uncomment and remove the for loop in 5.1
- #cp scripts/*.sql $DESTDIR/scripts/
-
- for i in `cd scripts && ls`; do \
- if echo $i | grep -q '\.sh'; then \
- cp scripts/$i $DESTDIR/scripts/`echo $i | sed -e 's/\.sh$//'`; \
- elif [ -d scripts/$i -o $i = Makefile.am -o $i = Makefile.in -o -e scripts/$i.sh ] ; then \
- : ; \
- else \
- cp scripts/$i $DESTDIR/scripts/$i; \
- fi; \
- done
-
- cp -pR sql/share $DESTDIR/
- cp -pR sql-bench $DESTDIR/
- rm -f $DESTDIR/sql-bench/*.sh $DESTDIR/sql-bench/Makefile*
-
- # The SQL initialisation code is really expected to be in "share"
- mv $DESTDIR/scripts/*.sql $DESTDIR/share/ || true
-
- # ----------------------------------------------------------------------
- # Clean up from possibly copied SCCS directories
- # ----------------------------------------------------------------------
-
- rm -rf `find $DISTDIR -type d -name SCCS -print`
-
- # ----------------------------------------------------------------------
- # Copy other files specified on command line DEST=SOURCE
- # ----------------------------------------------------------------------
-
- for arg do
- dst=`echo $arg | sed 's/=.*$//'`
- src=`echo $arg | sed 's/^.*=//'`
-
- if [ x"$dst" = x"" -o x"$src" = x"" ] ; then
- echo "Invalid specification of what to copy"
- usage
- fi
-
- mkdir -p `dirname $DESTDIR/$dst`
- cp -pR "$src" $DESTDIR/$dst
- done
-
- # ----------------------------------------------------------------------
- # Finally create the ZIP archive
- # ----------------------------------------------------------------------
-
- rm -f $NOINST_NAME.zip
- zip -r $NOINST_NAME.zip $DESTDIR
- rm -Rf $DESTDIR
-