#!/bin/sh # # Yoink # Run this script to create a win32 package. # # You should typically only run this through the "portable" and "installer" # makes targets in the package root directory. The build system will take # care to pass the correct arguments. # showhelp() { echo "Usage: $0 [-h] [-i makensis] [-s strip] -d assets -V version -p prefix" echo " Creates a portable win32 package or installer." echo "" echo " -V Specify the version of the program to be packaged" echo " -d Specify the game assets to be included." echo " -h Show this help an exit." echo " -i To make an installer, specify the makensis program." echo " -p Specify the path to your toolchain installation." echo " -s To strip the binaries, specify the strip program." } while getopts ":V:hd:i:p:s:" opt do case $opt in V) VERSION="$OPTARG" ;; d) ASSETS="$OPTARG" ;; h) showhelp exit 0 ;; i) MAKENSIS="$OPTARG" ;; p) PREFIX="$OPTARG" ;; s) STRIP="$OPTARG" ;; \?) echo "Invalid option: -$OPTARG" >&2 showhelp exit 1 ;; esac done if test "x$ASSETS" = x || test "x$VERSION" = x || test "x$PREFIX" = x then showhelp exit 1 fi die() { rm -rf "$BUILD" echo "die:" $@ exit 1 } ROOT="$PWD" BUILD="$ROOT/tmp-$$" DIRECTORY="yoink-$VERSION" ARCHIVE="$BUILD/$DIRECTORY" MAN2HTML="lua $ROOT/doc/man2html.lua" UNIX2DOS="$ROOT/arch/win32/unix2dos.sh" DLLS="libogg-0 libpng14 libvorbis-0 libvorbisfile-3 lua51 OpenAL32 SDL zlib1" if test ! -f "src/version.c" then echo "Run the script from the repository root directory." exit 1 fi if ! mkdir "$BUILD" then "The temp directory $BUILD could not be created." exit 1 fi mkdir -p "$ARCHIVE" cp -f "$ROOT/src/yoink.exe" "$ARCHIVE" || die "copying yoink.exe" test "x$STRIP" != x && "$STRIP" "$ARCHIVE/yoink.exe" for dll in $DLLS do cp -f "$PREFIX/bin/$dll.dll" "$ARCHIVE" || die "copying $dll" test "x$STRIP" != x && "$STRIP" "$ARCHIVE/$dll.dll" done for asset in $ASSETS do cp -f --parents "data/$asset" "$ARCHIVE" done for doc in AUTHORS ChangeLog COPYING README TODO do "$UNIX2DOS" "$doc" "$ARCHIVE/$doc.txt" || die "unix2dos $doc" done $MAN2HTML -o "$ARCHIVE/Manual.html" $UNIX2DOS "$ARCHIVE/Manual.html" cp -rf "$ROOT/doc/licenses" "$ARCHIVE" || die "copying doc/licenses" cd "$ARCHIVE/licenses" for license in $(ls) do (mv "$license" "$license.txt" && "$UNIX2DOS" "$license.txt") \ || die "moving and unix2dos $license" done cd "$ROOT" if test "x$MAKENSIS" = x then # build portable archive echo "No valid makensis executable passed;" echo "making portable package instead..." NAME="$DIRECTORY.zip" cd "$BUILD" zip -r "$NAME" "$DIRECTORY" || die "zipping portable archive" cd "$ROOT" mv "$BUILD/$NAME" . echo "Done! Package saved to $NAME." else # build an installer NAME="yoinksetup-$VERSION.exe" cd "$BUILD" cp "$ROOT/arch/win32/yoink.nsi" . "$MAKENSIS" -DROOTPATH="$ROOT" -DINSTALLFILES="$ARCHIVE" \ -DVERSION="$VERSION" -DOUTFILE="$NAME" yoink.nsi \ || die "running '$MAKENSIS'" cd "$ROOT" mv "$BUILD/$NAME" . echo "Done! Installer saved to $NAME." fi rm -rf "$BUILD"