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

version=$1

if [ -z "$version" ]; then
  echo "Specify a version number!"
  exit
fi

libversion="$version"

# we make curl the same version as libcurl
curlversion=$libversion

major=`echo $libversion |cut -d. -f1 | sed -e "s/[^0-9]//g"`
minor=`echo $libversion |cut -d. -f2 | sed -e "s/[^0-9]//g"`
patch=`echo $libversion |cut -d. -f3 | cut -d- -f1 | sed -e "s/[^0-9]//g"`

numeric=`echo "obase=16; $major*256*256 + $minor*256 + $patch" | bc`

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' \
    -e 's/^#define LIBCURL_VERSION_MAJOR .*/#define LIBCURL_VERSION_MAJOR '$major'/g' \
    -e 's/^#define LIBCURL_VERSION_MINOR .*/#define LIBCURL_VERSION_MINOR '$minor'/g' \
    -e 's/^#define LIBCURL_VERSION_PATCH .*/#define LIBCURL_VERSION_PATCH '$patch'/g' \
 $HEADER >$HEADER.dist

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

echo "curl version $curlversion"
echo "libcurl version $libversion"
echo "libcurl numerical $numeric"

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
}

############################################################################
#
# Enforce a rerun of configure (updates the VERSION)
#

echo "Re-running config.status"
./config.status --recheck >/dev/null

############################################################################
#
# 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 Makefile >/dev/null
fi

############################################################################
#
# Make sure we have updated HTML versions of all man pages:
#
echo "make html"
make -s html

# And the PDF versions
echo "make pdf"
make -s pdf

############################################################################
#
# Now run make dist to generate a tar.gz archive
#

echo "make dist"
targz="curl-$version.tar.gz"
make -s dist VERSION=$version

############################################################################
#
# Now make a bz2 archive from the tar.gz original
#

bzip2="curl-$version.tar.bz2"
echo "Generating $bzip2"
gzip -dc $targz | bzip2 - > $bzip2

############################################################################
#
# Now make a zip archive from the tar.gz original
#
makezip ()
{
  rm -rf $tempdir
  mkdir $tempdir
  cd $tempdir
  gzip -dc ../$targz | tar -xf -
  find . | zip $zip -@ >/dev/null
  mv $zip ../
  cd ..
  rm -rf $tempdir
}

zip="curl-$version.zip"
echo "Generating $zip"
tempdir=".builddir"
makezip

echo "------------------"
echo "maketgz report:"
echo ""
ls -l $targz $bzip2 $zip

md5sum $targz $bzip2 $zip

echo "Run these commands:"
echo "gpg -b -a $targz"
echo "gpg -b -a $bzip2"
echo "gpg -b -a $zip"
