#! /bin/sh
# Script to build release-archives with
#

echo "LIB version number?"
read version

libversion="$version"

#
# Now we have a section to get the major, minor and patch number from the
# full version string. We create a single hexadecimal number from it '0xMMmmpp'
#
perl='$a=<STDIN>;@p=split("\\.",$a);for(0..2){printf STDOUT ("%02x",$p[0+$_]);}';

numeric=`echo $libversion | perl -e "$perl"`

echo "CURL version number?"
read curlversion

HEADER=include/curl/curl.h
CHEADER=src/version.h

# Replace version number in header file:
sed -e 's/^#define LIBCURL_VERSION .*/#define LIBCURL_VERSION "'$libversion'"/g' \
    -e 's/^#define LIBCURL_VERSION_NUM .*/#define LIBCURL_VERSION_NUM 0x'$numeric'/g' \
 $HEADER >$HEADER.new

# Save old header file
cp -p $HEADER $HEADER.old

# Make new header:
mv $HEADER.new $HEADER

# Replace version number in header file:
sed 's/#define CURL_VERSION.*/#define CURL_VERSION "'$curlversion'"/g' $CHEADER >$CHEADER.new

# Save old header file
cp -p $CHEADER $CHEADER.old

# Make new header:
mv $CHEADER.new $CHEADER

findprog()
{
  file="$1"
  for part in `echo $PATH| tr ':' ' '`; do
    path="$part/$file"
    if [ -x "$path" ]; then
      # there it is!
      return 1
    fi
  done

  # no such executable
  return 0
}

############################################################################
#
# If we have autoconf we can just as well update configure.in to contain our
# brand new version number:
#
 
if { findprog autoconf >/dev/null 2>/dev/null; } then
  echo "- No autoconf found, we leave configure as it is"
else
  # Replace version number in configure.in file:

  CONF="configure.in"

  sed 's/^AM_INIT_AUTOMAKE.*/AM_INIT_AUTOMAKE(curl,"'$version'")/g' $CONF >$CONF.new

  # Save old  file
  cp -p $CONF $CONF.old

  # Make new configure.in
  mv $CONF.new $CONF
 
  # Update the configure script
  echo "Runs autoconf"
  autoconf
fi

############################################################################
#
# automake is needed to run to make a non-GNU Makefile.in if Makefile.am has
# been modified.
#

if { findprog automake >/dev/null 2>/dev/null; } then
  echo "- Could not find or run automake, I hope you know what you're doing!"
else
  echo "Runs automake --include-deps"
  automake --include-deps
fi

############################################################################
#
# Now run make first to make the file dates decent and make sure that it
# compiles just before release!
#

make

# get current dir
dir=`pwd`

# Get basename
orig=`basename $dir`

# Get the left part of the dash (-)
new=`echo $orig | cut -d- -f1`

# Build new directory name
n=$new-$version;

# Tell the world what we're doing
echo "Copying files into distribution archive";

if [ -r $n ]; then
  echo "Directory already exists!"
  exit
fi

# Create the new dir
mkdir $n

# Copy all relevant files, with path and permissions!
tar -cf - `cat FILES` | (cd $n; tar -xBpf -)

# Create the distribution root Makefile from Makefile.dist
cp -p Makefile.dist $n/Makefile

############################################################################
#
# Replace @SHELL@ with /bin/sh in the Makefile.in files!
#
echo "Replace @SHELL@ with /bin/sh in the Makefile.in files"
temp=/tmp/curl$$
for file in Makefile.in lib/Makefile.in src/Makefile.in; do
  in="$n/$file"
  sed "s:@SHELL@:/bin/sh:g" $in >$temp
  cp $temp $in
done
rm -rf $temp

# Tell the world what we're doing
echo "creates $n.tar.gz";

# Make a tar archive of it all
tar -cvf $n.tar $n

# gzip the archive
gzip $n.tar

# Make it world readable
chmod a+r $n.tar.gz ;

# Delete the temp dir
rm -rf $n
