#!/bin/sh
#
# Distribution generator for CVS based packages.
# To work, this script needs a consistent tagging of all releases.
# Each release of a package should have a tag of the form
#
#  <package>_<version>
#
# where <package> is the package name and the CVS module
# and <version> is the version number with underscores instead of dots.
#
# For example: cvs tag php_3_0a1
#
# The distribution ends up in a .tar.gz file that contains the distribution
# in a directory called <package>-<version>.  The distribution contains all
# directories from the CVS module except the one called "nodist", but only
# the files INSTALL, README and config* are included.
#
# Since you can no longer set the CVS password via an env variable, you
# need to have previously done a cvs login for the server and user id
# this script uses so it will have an entry in your ~/.cvspasswd file.
#
# Usage: makedist <package> <version>
#
# Written by Stig Bakken <ssb@fast.no>     1997-05-28.
#
# $Id: makedist,v 1.31 2000/01/06 15:37:01 rasmus Exp $
#

CVSROOT=:pserver:cvsread@cvs.php.net:/repository
export CVSROOT

if echo '\c' | grep -s c >/dev/null 2>&1
then
    ECHO_N="echo -n"
    ECHO_C=""
else
    ECHO_N="echo"
    ECHO_C='\c'
fi

if test "$#" != "2"; then
    echo "Usage: makedist <package> <version>" >&2
    exit 1
fi

PKG=$1 ; shift
VER=$1 ; shift

OLDPWD=`pwd`

if [ "$VER" = "snapshot" ]; then
    VER=`date -u '+%Y%m%d%k%M'`
    CVSTAG="-D today"
else
    # version part of the CVS release tag
    CVSVER=`echo $VER | sed -e 's/\./_/g'`
    # CVS release tag
    CVSTAG="-r ${PKG}_$CVSVER"
fi

# the destination .tar.gz file
ARCHIVE=$OLDPWD/$PKG-$VER.tar.gz

# temporary directory used to check out files from CVS
TMPDIR=$OLDPWD/cvstmp-$PKG-$VER

# should become "php3"
CVSMOD=`cat CVS/Repository | sed -e 's!^/[^/]*/!!'`

if test ! -d $TMPDIR; then
    mkdir -p $TMPDIR || exit 2
fi

cd $TMPDIR || exit 3

$ECHO_N "makedist: exporting '$CVSTAG' from '$CVSMOD'...$ECHO_C"
cvs -Q export $CVSTAG $CVSMOD || exit 4
echo ""

cd $CVSMOD || exit 5

INC=""

# remove CVS stuff...
find . \( \( -name CVS -type d \) -o -name .cvsignore \) -exec rm -rf {} \;

for file in *; do
    case $file in
	$PKG-$VER|web_update);; # ignore these
	*) INC="$INC $file";; # include the rest
    esac
done

# generate some files so people don't need bison, flex and autoconf
# to install
set -x
make -f build.mk
bison -p php -v -d language-parser.y
flex -Pphp -olanguage-scanner.c -i language-scanner.lex
bison -p cfg -v -d configuration-parser.y
flex -Pcfg -oconfiguration-scanner.c -i configuration-scanner.lex
cd convertor
flex -i -Pphp -olanguage-scanner.c language-scanner.lex
bison -p php -v -d language-parser.y
cd ..
bison -v -d functions/parsedate.y -o functions/parsedate.c

# pull down the latest version of the documentation
rsync -avzC rsync.php.net::phpweb/manual/html/ doc/

#perl -i -p -e 's/\r\n/\n/' *.dsw *.dsp
set +x

INC="$INC \
configuration-scanner.c \
configuration-parser.tab.c configuration-parser.tab.h \
language-scanner.c \
language-parser.tab.c language-parser.tab.h \
configure config.h.in"

mkdir $PKG-$VER || exit 6
mv $INC $PKG-$VER || exit 7

$ECHO_N "makedist: making gzipped tar archive...$ECHO_C"
tar czf $ARCHIVE $PKG-$VER || exit 8
echo ""

$ECHO_N "makedist: cleaning up...$ECHO_C"
cd $OLDPWD
rm -rf $TMPDIR || exit 9
echo ""

exit 0
