~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
#!/bin/sh
2
# Copyright (C) 2006 MySQL AB
3
# 
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; version 2 of the License.
7
# 
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
# 
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
16
17
# Exit if failing to copy, we want exact specifications, not
18
# just "what happen to be built".
19
set -e
20
21
# ----------------------------------------------------------------------
22
# Read first argument that is the base name of the resulting TAR file.
23
# See usage() function below for a description on the arguments.
24
#
25
# NOTE: We will read the rest of the command line later on.
26
# NOTE: Pattern matching with "{..,..}" can't be used, not portable.
27
# ----------------------------------------------------------------------
28
29
# FIXME why "libmysql.dll" installed both in "bin" and "lib/opt"?
30
31
usage()
32
{
33
  echo <<EOF
34
Usage: make_win_bin_dist [ options ] package-base-name [ copy-defs... ]
35
36
This is a script to run from the top of a source tree built on Windows.
37
The "package-base-name" argument should be something like
38
39
  mysql-noinstall-5.0.25-win32  (or winx64)
40
41
and will become the name of the directory of the unpacked ZIP (stripping
42
away the "noinstall" part of the ZIP file name if any) and the base
43
for the resulting package name.
44
45
Options are
46
47
  --embedded       Pack the embedded server and give error if not built.
48
                   The default is to pack it if it is built.
49
50
  --no-embedded    Don't pack the embedded server even if built
51
52
  --debug          Pack the debug binaries and give error if not built.
53
                   The default is to pack them if they are built.
54
55
  --no-debug       Don't pack the debug binaries even if built
56
57
  --only-debug     The target for this build was "Debug", and we just
58
                   want to replace the normal binaries with debug
59
                   versions, i.e. no separate "debug" directories.
60
61
  --exe-suffix=SUF Add a suffix to the filename part of the "mysqld" binary.
62
63
As you might want to include files of directories from other builds
64
(like a "mysqld-max.exe" server), you can instruct this script to copy
65
them in for you. This is the "copy-def" arguments, and they are of the
66
form
67
68
  relative-dest-name=source-name .....
69
70
i.e. can be something like
71
72
  bin/mysqld-max.exe=../my-max-build/sql/release/mysqld.exe
73
74
If you specify a directory the whole directory will be copied.
75
76
EOF
77
  exit 1
78
}
79
80
# ----------------------------------------------------------------------
81
# We need to be at the top of a source tree, check that we are
82
# ----------------------------------------------------------------------
83
84
if [ ! -d "sql" ] ; then
85
  echo "You need to run this script from inside the source tree"
86
  usage
87
fi
88
89
# ----------------------------------------------------------------------
90
# Actual argument processing, first part
91
# ----------------------------------------------------------------------
92
93
NOINST_NAME=""
94
TARGET="release"
95
PACK_EMBEDDED=""		# Could be "no", "yes" or empty
96
PACK_DEBUG=""			# Could be "no", "yes" or empty
97
EXE_SUFFIX=""
98
99
for arg do
100
  shift
101
  case "$arg" in
102
    --embedded)       PACK_EMBEDDED="yes" ;;
103
    --no-embedded)    PACK_EMBEDDED="no" ;;
104
    --debug)          PACK_DEBUG="yes" ;;
105
    --no-debug)       PACK_DEBUG="no" ;;
106
    --only-debug)     TARGET="debug" ; PACK_DEBUG="no" ;;
107
    --exe-suffix=*)   EXE_SUFFIX=`echo "$arg" | sed -e "s,--exe-suffix=,,"` ;;
108
    -*)
109
      echo "Unknown argument '$arg'"
110
      usage
111
      ;;
112
    *)
113
      NOINST_NAME="$arg"
114
      break
115
  esac
116
done
117
118
if [ x"$NOINST_NAME" = x"" ] ; then
119
  echo "No base package name given"
120
  usage
121
fi
122
DESTDIR=`echo $NOINST_NAME | sed 's/-noinstall-/-/'`
123
124
if [ -e $DESTDIR ] ; then
125
  echo "Please remove the old $DESTDIR before running this script"
126
  usage
127
fi
128
129
trap 'echo "Clearning up and exiting..." ; rm -fr $DESTDIR; exit 1' ERR
130
131
# ----------------------------------------------------------------------
132
# Adjust target name if needed, release with debug info has another name
133
# ----------------------------------------------------------------------
134
135
if [ x"$TARGET" = x"release" -a -f "client/relwithdebinfo/mysql.exe" ]
136
then
137
  TARGET="relwithdebinfo"
138
fi
139
140
# ----------------------------------------------------------------------
141
# Copy executables, and client DLL
142
# ----------------------------------------------------------------------
143
144
mkdir $DESTDIR
145
mkdir $DESTDIR/bin
146
cp client/$TARGET/*.exe                                  $DESTDIR/bin/
147
cp extra/$TARGET/*.exe                                   $DESTDIR/bin/
148
cp storage/myisam/$TARGET/*.exe                          $DESTDIR/bin/
149
if [ x"$TARGET" != x"release" ] ; then
150
  cp client/$TARGET/mysql.pdb                            $DESTDIR/bin/
151
  cp client/$TARGET/mysqladmin.pdb                       $DESTDIR/bin/
152
  cp client/$TARGET/mysqlbinlog.pdb                      $DESTDIR/bin/
153
  cp client/$TARGET/mysqldump.pdb                        $DESTDIR/bin/
154
  cp client/$TARGET/mysqlimport.pdb                      $DESTDIR/bin/
155
  cp client/$TARGET/mysqlshow.pdb                        $DESTDIR/bin/
156
fi
157
cp tests/$TARGET/*.exe                                   $DESTDIR/bin/
158
cp libmysql/$TARGET/libmysql.dll                         $DESTDIR/bin/
159
160
cp sql/$TARGET/mysqld.exe                $DESTDIR/bin/mysqld$EXE_SUFFIX.exe
161
cp sql/$TARGET/mysqld.map                $DESTDIR/bin/mysqld$EXE_SUFFIX.map
162
if [ x"$TARGET" != x"release" ] ; then
163
  cp sql/$TARGET/mysqld.pdb              $DESTDIR/bin/mysqld$EXE_SUFFIX.pdb
164
fi
165
166
if [ x"$PACK_DEBUG" = x"" -a -f "sql/debug/mysqld.exe" -o \
167
     x"$PACK_DEBUG" = x"yes" ] ; then
168
  cp sql/debug/mysqld.exe                $DESTDIR/bin/mysqld-debug.exe
169
  cp sql/debug/mysqld.pdb                $DESTDIR/bin/mysqld-debug.pdb
170
  cp sql/debug/mysqld.map                $DESTDIR/bin/mysqld-debug.map
171
fi
172
173
# ----------------------------------------------------------------------
174
# Copy data directory, readme files etc
175
# ----------------------------------------------------------------------
176
177
if [ -d win/data ] ; then
178
  cp -pR win/data $DESTDIR/
179
fi
180
181
mkdir $DESTDIR/Docs
182
cp Docs/INSTALL-BINARY    $DESTDIR/Docs/
183
cp Docs/manual.chm        $DESTDIR/Docs/ || /bin/true
184
cp ChangeLog              $DESTDIR/Docs/ || /bin/true
185
cp support-files/my-*.ini $DESTDIR/
186
187
if [ -f COPYING ] ; then
188
  cp COPYING EXCEPTIONS-CLIENT $DESTDIR/
189
  cp COPYING                   $DESTDIR/Docs/
190
fi
191
192
# ----------------------------------------------------------------------
193
# These will be filled in when we enable embedded. Note that if no
194
# argument is given, it is copied if exists, else a check is done.
195
# ----------------------------------------------------------------------
196
197
copy_embedded()
198
{
199
  mkdir -p $DESTDIR/Embedded/DLL/release \
200
           $DESTDIR/Embedded/static/release \
201
           $DESTDIR/include
202
  cp libmysqld/libmysqld.def           $DESTDIR/include/
203
  cp libmysqld/$TARGET/mysqlserver.lib $DESTDIR/Embedded/static/release/
204
  cp libmysqld/$TARGET/libmysqld.dll   $DESTDIR/Embedded/DLL/release/
205
  cp libmysqld/$TARGET/libmysqld.exp   $DESTDIR/Embedded/DLL/release/
206
  cp libmysqld/$TARGET/libmysqld.lib   $DESTDIR/Embedded/DLL/release/
207
  if [ x"$TARGET" != x"release" ] ; then
208
    cp libmysqld/$TARGET/mysqlserver.pdb $DESTDIR/Embedded/static/release/
209
    cp libmysqld/$TARGET/libmysqld.pdb   $DESTDIR/Embedded/DLL/release/
210
  fi
211
212
  if [ x"$PACK_DEBUG" = x"" -a -f "libmysqld/debug/libmysqld.lib" -o \
213
       x"$PACK_DEBUG" = x"yes" ] ; then
214
    mkdir -p $DESTDIR/Embedded/DLL/debug \
215
             $DESTDIR/Embedded/static/debug
216
    cp libmysqld/debug/mysqlserver.lib   $DESTDIR/Embedded/static/debug/
217
    cp libmysqld/debug/mysqlserver.pdb   $DESTDIR/Embedded/static/debug/
218
    cp libmysqld/debug/libmysqld.dll     $DESTDIR/Embedded/DLL/debug/
219
    cp libmysqld/debug/libmysqld.exp     $DESTDIR/Embedded/DLL/debug/
220
    cp libmysqld/debug/libmysqld.lib     $DESTDIR/Embedded/DLL/debug/
221
    cp libmysqld/debug/libmysqld.pdb     $DESTDIR/Embedded/DLL/debug/
222
  fi
223
}
224
225
if [ x"$PACK_EMBEDDED" = x"" -a \
226
     -f "libmysqld/$TARGET/mysqlserver.lib" -a \
227
     -f "libmysqld/$TARGET/libmysqld.lib" -o \
228
     x"$PACK_EMBEDDED" = x"yes" ] ; then
229
  copy_embedded
230
fi
231
232
# ----------------------------------------------------------------------
233
# Note: Make sure to sync with include/Makefile.am and WiX installer
234
# XML specifications
235
# ----------------------------------------------------------------------
236
237
mkdir -p $DESTDIR/include
238
cp include/mysql.h \
239
   include/mysql_com.h \
240
   include/mysql_time.h \
241
   include/my_list.h \
242
   include/my_alloc.h \
243
   include/typelib.h \
244
   include/my_dbug.h \
245
   include/m_string.h \
246
   include/my_sys.h \
247
   include/my_xml.h \
248
   include/mysql_embed.h \
249
   include/my_pthread.h \
250
   include/my_no_pthread.h \
251
   include/decimal.h \
252
   include/errmsg.h \
253
   include/my_global.h \
254
   include/my_net.h \
255
   include/my_getopt.h \
256
   include/sslopt-longopts.h \
257
   include/my_dir.h \
258
   include/sslopt-vars.h \
259
   include/sslopt-case.h \
260
   include/sql_common.h \
261
   include/keycache.h \
262
   include/m_ctype.h \
263
   include/my_attribute.h \
264
   include/mysqld_error.h \
265
   include/sql_state.h \
266
   include/mysqld_ername.h \
267
   include/mysql_version.h \
268
   include/config-win.h \
269
   libmysql/libmysql.def \
270
   $DESTDIR/include/
271
272
mkdir -p $DESTDIR/include/mysql
273
cp include/mysql/plugin.h $DESTDIR/include/mysql/
274
275
# ----------------------------------------------------------------------
276
# Client libraries, and other libraries
277
# ----------------------------------------------------------------------
278
279
mkdir -p $DESTDIR/lib/opt
280
cp libmysql/$TARGET/libmysql.dll \
281
   libmysql/$TARGET/libmysql.lib \
282
   libmysql/$TARGET/mysqlclient.lib \
283
   mysys/$TARGET/mysys.lib \
284
   regex/$TARGET/regex.lib \
285
   strings/$TARGET/strings.lib \
286
   zlib/$TARGET/zlib.lib $DESTDIR/lib/opt/
287
288
if [ x"$TARGET" != x"release" ] ; then
289
  cp libmysql/$TARGET/libmysql.pdb \
290
     libmysql/$TARGET/mysqlclient.pdb \
291
     mysys/$TARGET/mysys.pdb \
292
     regex/$TARGET/regex.pdb \
293
     strings/$TARGET/strings.pdb \
294
     zlib/$TARGET/zlib.pdb $DESTDIR/lib/opt/
295
fi
296
297
if [ x"$PACK_DEBUG" = x"" -a -f "libmysql/debug/libmysql.lib" -o \
298
     x"$PACK_DEBUG" = x"yes" ] ; then
299
  mkdir -p $DESTDIR/lib/debug
300
  cp libmysql/debug/libmysql.dll \
301
     libmysql/debug/libmysql.lib \
302
     libmysql/debug/libmysql.pdb \
303
     libmysql/debug/mysqlclient.lib \
304
     libmysql/debug/mysqlclient.pdb \
305
     mysys/debug/mysys.lib \
306
     mysys/debug/mysys.pdb \
307
     regex/debug/regex.lib \
308
     regex/debug/regex.pdb \
309
     strings/debug/strings.lib \
310
     strings/debug/strings.pdb \
311
     zlib/debug/zlib.lib \
312
     zlib/debug/zlib.pdb $DESTDIR/lib/debug/
313
fi
314
315
# ----------------------------------------------------------------------
316
# Copy the test directory
317
# ----------------------------------------------------------------------
318
319
mkdir $DESTDIR/mysql-test
320
cp mysql-test/mysql-test-run.pl $DESTDIR/mysql-test/
321
cp mysql-test/README $DESTDIR/mysql-test/
322
cp -R mysql-test/{t,r,include,suite,std_data,lib} $DESTDIR/mysql-test/
323
324
# Note that this will not copy "extra" if a soft link
325
if [ -d mysql-test/extra ] ; then
326
  mkdir $DESTDIR/mysql-test/extra
327
  cp -pR mysql-test/extra/* $DESTDIR/mysql-test/extra/
328
fi
329
330
# ----------------------------------------------------------------------
331
# Copy what could be usable in the "scripts" directory
332
# ----------------------------------------------------------------------
333
334
mysql_scripts="\
335
mysql_config.pl \
336
mysql_convert_table_format.pl \
337
mysql_install_db.pl \
338
mysql_secure_installation.pl \
339
mysqld_multi.pl \
340
mysqldumpslow.pl \
341
mysqlhotcopy.pl \
342
"
343
344
mkdir -p $DESTDIR/scripts
345
346
for i in $mysql_scripts
347
do
348
  cp scripts/$i $DESTDIR/scripts/$i
349
done
350
351
cp -pR sql/share $DESTDIR/
352
cp -pR sql-bench $DESTDIR/
353
rm -f $DESTDIR/sql-bench/*.sh $DESTDIR/sql-bench/Makefile*
354
355
# The SQL initialisation code is to be in "share"
356
cp scripts/*.sql $DESTDIR/share/
357
358
# ----------------------------------------------------------------------
359
# Clean up from possibly copied SCCS directories
360
# ----------------------------------------------------------------------
361
362
rm -rf `find $DISTDIR -type d -name SCCS -print`
363
364
# ----------------------------------------------------------------------
365
# Copy other files specified on command line DEST=SOURCE
366
# ----------------------------------------------------------------------
367
368
for arg do
369
  dst=`echo $arg | sed 's/=.*$//'`
370
  src=`echo $arg | sed 's/^.*=//'`
371
372
  if [ x"$dst" = x"" -o x"$src" = x"" ] ; then
373
    echo "Invalid specification of what to copy"
374
    usage
375
  fi
376
377
  mkdir -p `dirname $DESTDIR/$dst`
378
  cp -pR "$src" $DESTDIR/$dst
379
done
380
381
# ----------------------------------------------------------------------
382
# Finally create the ZIP archive
383
# ----------------------------------------------------------------------
384
385
rm -f $NOINST_NAME.zip
386
zip -r $NOINST_NAME.zip $DESTDIR
387
rm -Rf $DESTDIR