make_win_src_distribution.sh 8.37 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/bin/sh

#
# Script to create a Windows src package
#

version=@VERSION@
export version
SOURCE=`pwd`
CP="cp -p"

DEBUG=0
SILENT=0
SUFFIX=""
15
DIRNAME=""
16 17
OUTTAR="0"
OUTZIP="0"
18 19 20 21 22

#
# This script must run from MySQL top directory
#

23
if [ ! -f scripts/make_win_src_distribution ]; then
24 25 26
  echo "ERROR : You must run this script from the MySQL top-level directory"
  exit 1
fi
27 28 29 30 31 32 33 34 35 36 37 38

#
# Check for source compilation/configuration
#

if [ ! -f sql/sql_yacc.cc ]; then
  echo "ERROR : Sorry, you must run this script after the complete build,"
  echo "        hope you know what you are trying to do !!"
  exit 1
fi

#
39
# Debug print of the status
40 41
#

42 43 44 45 46 47 48 49 50
print_debug() 
{
  for statement 
  do
    if [ "$DEBUG" = "1" ] ; then
      echo $statement
    fi
  done
}
51

52 53 54 55
#
# Usage of the script
#

56 57
show_usage() 
{
58 59 60 61 62
  echo "MySQL utility script to create a Windows src package, and it takes"
  echo "the following arguments:"
  echo ""
  echo "  --debug   Debug, without creating the package"
  echo "  --tmp     Specify the temporary location"
63 64
  echo "  --suffix  Suffix name for the package"
  echo "  --dirname Directory name to copy files (intermediate)"
65
  echo "  --silent  Do not list verbosely files processed"
unknown's avatar
unknown committed
66 67
  echo "  --tar     Create tar.gz package"
  echo "  --zip     Create zip package"
68 69
  echo "  --help    Show this help message"

70
  exit 0
71 72 73 74 75 76 77 78 79
}

#
# Parse the input arguments
#

parse_arguments() {
  for arg do
    case "$arg" in
unknown's avatar
unknown committed
80
      --add-tar)  ADDTAR=1 ;;
81 82 83
      --debug)    DEBUG=1;;
      --tmp=*)    TMP=`echo "$arg" | sed -e "s;--tmp=;;"` ;;
      --suffix=*) SUFFIX=`echo "$arg" | sed -e "s;--suffix=;;"` ;;
84
      --dirname=*) DIRNAME=`echo "$arg" | sed -e "s;--dirname=;;"` ;;
85 86
      --silent)   SILENT=1 ;;
      --tar)      OUTTAR=1 ;;
unknown's avatar
unknown committed
87
      --zip)      OUTZIP=1 ;;
88 89 90 91 92 93 94 95 96 97 98
      --help)     show_usage ;;
      *)
  echo "Unknown argument '$arg'"
  exit 1
      ;;
    esac
  done
}

parse_arguments "$@"

99 100 101 102 103 104
#
# Assign the tmp directory if it was set from the environment variables
#

for i in $TMP $TMPDIR $TEMPDIR $TEMP /tmp
do
unknown's avatar
unknown committed
105
  if [ "$i" ]; then
106
    print_debug "Setting TMP to '$i'"
unknown's avatar
unknown committed
107
    TMP=$i
108 109 110 111
    break
  fi
done

unknown's avatar
unknown committed
112 113 114

#
# Convert argument file from unix to DOS text
115 116
#

117 118 119 120
unix_to_dos()
{
  for arg do
    print_debug "Replacing LF -> CRLF from '$arg'"
121

122 123 124 125 126
    cat $arg | awk '{sub(/$/,"\r");print}' > $arg.tmp
    rm -f $arg
    mv $arg.tmp $arg
  done
}
unknown's avatar
unknown committed
127 128


129 130 131 132 133 134 135
#
# Create a tmp dest directory to copy files
#

BASE=$TMP/my_win_dist$SUFFIX

if [ -d $BASE ] ; then
136
  print_debug "Destination directory '$BASE' already exists, deleting it"
137 138 139 140 141
  rm -r -f $BASE
fi

$CP -r $SOURCE/VC++Files $BASE
(
142
find $BASE \( -name "*.dsp" -o -name "*.dsw" \) -and -not -path \*SCCS\* -print
143
)|(
unknown's avatar
unknown committed
144
  while read v
145
  do
unknown's avatar
unknown committed
146
    unix_to_dos $v
147
  done
148 149
)

150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
#
# Process version tags in InstallShield files
#

vreplace()
{
  for arg do
    unix_to_dos $arg
    cat $arg | sed -e 's!@''VERSION''@!@VERSION@!' > $arg.tmp
    rm -f $arg
    mv $arg.tmp $arg
  done
}

for d in 4.0.XX-gpl 4.0.XX-pro 4.0.XX-classic
do
  cd $BASE/InstallShield/$d/String\ Tables/0009-English
  vreplace value.shl
  cd ../../Setup\ Files/Compressed\ Files/Language\ Independent/OS\ Independent
  vreplace infolist.txt
done

172 173 174 175
#
# Move all error message files to root directory
#

176
$CP -r $SOURCE/sql/share $BASE/
177 178 179
rm -r -f "$BASE/share/Makefile"
rm -r -f "$BASE/share/Makefile.in"
rm -r -f "$BASE/share/Makefile.am"
180

181
mkdir $BASE/Docs $BASE/extra $BASE/include
182 183 184 185 186

#
# Copy directory files
#

187 188
copy_dir_files()
{
189
  for arg do
190
    print_debug "Copying files from directory '$arg'"
191 192 193 194 195
    cd $SOURCE/$arg
    if [ ! -d $BASE/$arg ]; then
       print_debug "Creating directory '$arg'"
       mkdir $BASE/$arg
     fi
unknown's avatar
unknown committed
196
    for i in *.c *.cpp *.h *.ih *.i *.ic *.asm *.def \
unknown's avatar
unknown committed
197 198 199
             README INSTALL* LICENSE
    do
      if [ -f $i ]
200 201 202 203 204 205 206 207 208 209 210 211
      then
        $CP $SOURCE/$arg/$i $BASE/$arg/$i
      fi
    done
    for i in *.cc
    do
      if [ -f $i ]
      then
        i=`echo $i | sed 's/.cc$//g'`
        $CP $SOURCE/$arg/$i.cc $BASE/$arg/$i.cpp
      fi
    done
212 213 214 215 216 217 218 219 220 221 222
  done
}

#
# Copy directory contents recursively
#

copy_dir_dirs() {

  for arg do

unknown's avatar
unknown committed
223 224 225 226 227 228 229 230 231 232 233 234 235
    cd $SOURCE
    (
    find $arg -type d \
              -and -not -path \*SCCS\* \
              -and -not -path \*.deps\* \
              -and -not -path \*autom4te.cache -print
    )|(
      while read v
      do
        copy_dir_files $v
      done
    )

236 237 238 239 240 241 242
  done
}

#
# Input directories to be copied
#

243 244
for i in client dbug extra heap include isam \
         libmysql libmysqld merge myisam \
245
         myisammrg mysys regex sql strings sql-common \
unknown's avatar
unknown committed
246
         tools vio zlib
247 248 249
do
  copy_dir_files $i
done
250 251 252 253 254

#
# Input directories to be copied recursively
#

255 256 257 258
for i in bdb innobase
do
  copy_dir_dirs $i
done
259

260 261 262 263 264
#
# Create dummy innobase configure header
#

if [ -f $BASE/innobase/ib_config.h ]; then
265 266
  rm -f $BASE/innobase/ib_config.h
fi
267 268
touch $BASE/innobase/ib_config.h

269 270 271 272 273 274

#
# Copy miscellaneous files
#

cd $SOURCE
275
for i in COPYING ChangeLog README \
276
         INSTALL-SOURCE INSTALL-WIN \
unknown's avatar
unknown committed
277
         INSTALL-WIN-SOURCE \
278
         Docs/manual_toc.html  Docs/manual.html \
unknown's avatar
unknown committed
279
         Docs/manual.txt Docs/mysqld_error.txt \
280
         Docs/INSTALL-BINARY Docs/internals.texi
unknown's avatar
unknown committed
281

282
do
283
  print_debug "Copying file '$i'"
unknown's avatar
unknown committed
284
  if [ -f $i ]
285
  then
286
    $CP $i $BASE/$i
287 288 289
  fi
done

unknown's avatar
unknown committed
290 291 292 293 294
#
# Raw dirs from source tree
#

for i in Docs/Flags scripts sql-bench SSL \
unknown's avatar
unknown committed
295
         tests
unknown's avatar
unknown committed
296 297 298 299 300 301 302 303
do
  print_debug "Copying directory '$i'"
  if [ -d $i ]
  then
    $CP -R $i $BASE/$i
  fi
done

304
#
305
# Fix some windows files to avoid compiler warnings
306 307
#

308 309 310
./extra/replace std:: "" < $BASE/sql/sql_yacc.cpp | sed '/^ *switch (yytype)$/ { N; /\n *{$/ { N; /\n *default:$/ { N; /\n *break;$/ { N; /\n *}$/ d; };};};} ' > $BASE/sql/sql_yacc.cpp-new
mv $BASE/sql/sql_yacc.cpp-new $BASE/sql/sql_yacc.cpp

unknown's avatar
unknown committed
311 312 313
unix_to_dos $BASE/README
mv $BASE/README $BASE/README.txt

unknown's avatar
unknown committed
314 315 316 317 318 319
#
# Clean up if we did this from a bk tree
#

if [ -d $BASE/SSL/SCCS ]
then
320
  find $BASE/ -type d -name SCCS -printf " \"%p\"" | xargs rm -r -f
unknown's avatar
unknown committed
321 322
fi

323
#
324
# Initialize the initial data directory
325 326
#

unknown's avatar
unknown committed
327
if [ -f scripts/mysql_install_db ]; then
328
  print_debug "Initializing the 'data' directory"
329
  scripts/mysql_install_db --no-defaults --windows --datadir=$BASE/data
330 331 332 333
  if test "$?" = 1
  then
    exit 1;
  fi
334 335
fi

336 337 338 339
#
# Specify the distribution package name and copy it
#

340 341 342 343 344 345
if test -z $DIRNAME
then
  NEW_DIR_NAME=mysql@MYSQL_SERVER_SUFFIX@-$version$SUFFIX
else
  NEW_DIR_NAME=$DIRNAME
fi
346 347 348
NEW_NAME=$NEW_DIR_NAME-win-src

BASE2=$TMP/$NEW_DIR_NAME
349 350 351 352 353 354 355 356
rm -r -f $BASE2
mv $BASE $BASE2
BASE=$BASE2

#
# If debugging, don't create a zip/tar/gz
#

357
if [ "$DEBUG" = "1" ] ; then
358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388
  echo "Please check the distribution files from $BASE"
  echo "Exiting (without creating the package).."
  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 test -x $file -a ! -d $file
	then
	  echo $file
	  exit 0
	fi
      done
    done
  done
  exit 1
}

#
389
# Create the result zip/tar file
390 391
#

392 393 394 395
if [ "$OUTTAR" = "0" ]; then
  if [ "$OUTZIP" = "0" ]; then
    OUTZIP=1
  fi
unknown's avatar
unknown committed
396 397
fi

unknown's avatar
unknown committed
398
set_tarzip_options()
399
{
unknown's avatar
unknown committed
400
  for arg
401
  do
402
    if [ "$arg" = "tar" ]; then
403 404 405 406 407
      ZIPFILE1=gnutar
      ZIPFILE2=gtar
      OPT=cvf
      EXT=".tar"
      NEED_COMPRESS=1
408
      if [ "$SILENT" = "1" ] ; then
409 410 411 412 413
        OPT=cf
      fi
    else
      ZIPFILE1=zip
      ZIPFILE2=""
unknown's avatar
unknown committed
414
      OPT="-r"
415 416
      EXT=".zip"
      NEED_COMPRESS=0
417
      if [ "$SILENT" = "1" ] ; then
418
        OPT="$OPT -q"
419 420 421 422 423 424 425 426 427
      fi
    fi
  done
}


#
# Create the archive
#
unknown's avatar
unknown committed
428 429
create_archive()
{
430

unknown's avatar
unknown committed
431
  print_debug "Using $tar to create archive"
432

unknown's avatar
unknown committed
433
  cd $TMP
434

unknown's avatar
unknown committed
435 436 437
  rm -f $SOURCE/$NEW_NAME$EXT
  $tar $OPT $SOURCE/$NEW_NAME$EXT $NEW_DIR_NAME
  cd $SOURCE
438

unknown's avatar
unknown committed
439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474
  if [ "$NEED_COMPRESS" = "1" ]
  then
    print_debug "Compressing archive"
    gzip -9 $NEW_NAME$EXT
    EXT="$EXT.gz"
  fi

  if [ "$SILENT" = "0" ] ; then
    echo "$NEW_NAME$EXT created successfully !!"
  fi
}

if [ "$OUTTAR" = "1" ]; then
  set_tarzip_options 'tar'

  tar=`which_1 $ZIPFILE1 $ZIPFILE2`
  if test "$?" = "1" -o "$tar" = ""
  then
    print_debug "Search failed for '$ZIPFILE1', '$ZIPFILE2', using default 'tar'"
    tar=tar
    set_tarzip_options 'tar'
  fi
  
  create_archive 
fi

if [ "$OUTZIP" = "1" ]; then
  set_tarzip_options 'zip'

  tar=`which_1 $ZIPFILE1 $ZIPFILE2`
  if test "$?" = "1" -o "$tar" = ""
  then
    echo "Search failed for '$ZIPFILE1', '$ZIPFILE2', cannot create zip!"
  fi
 
  create_archive
475 476
fi

477
print_debug "Removing temporary directory"
478 479 480
rm -r -f $BASE

# End of script