#! /bin/sh

# This script takes the result of "make dist" and:
# 1) Unpacks it.
# 2) Ensures all contents are user-writable.  Some version control systems
#    keep code read-only until you explicitly ask to edit it, and the normal
#    "make dist" process does not correct for this, so the result is that
#    the entire dist is still marked read-only when unpacked, which is
#    annoying.  So, we fix it.
# 3) Convert MSVC project files to MSVC 2005, so that anyone who has version
#    2005 *or* 2008 can open them.  (In version control, we keep things in
#    MSVC 2008 format since that's what we use in development.)
# 4) Uses the result to create .tar.gz, .tar.bz2, and .zip versions and
#    deposites them in the "dist" directory.  In the .zip version, all
#    non-testdata .txt files are converted to Windows-style line endings.
# 5) Cleans up after itself.

if [ "$1" == "" ]; then
  echo "USAGE:  $0 DISTFILE" >&2
  exit 1
fi

if [ ! -e $1 ]; then
  echo $1": File not found." >&2
  exit 1
fi

set -ex

LANGUAGES="cpp csharp java js objectivec python ruby php all"
BASENAME=`basename $1 .tar.gz`
VERSION=${BASENAME:9}

# Create a directory called "dist", copy the tarball there and unpack it.
mkdir dist
cp $1 dist
cd dist
tar zxvf $BASENAME.tar.gz
rm $BASENAME.tar.gz

# Set the entire contents to be user-writable.
chmod -R u+w $BASENAME
cd $BASENAME

for LANG in $LANGUAGES; do
  # Build the dist again in .tar.gz
  ./configure DIST_LANG=$LANG
  make dist-gzip
  mv $BASENAME.tar.gz ../protobuf-$LANG-$VERSION.tar.gz
done

# Convert all text files to use DOS-style line endings, then build a .zip
# distribution.
todos *.txt */*.txt

for LANG in $LANGUAGES; do
  # Build the dist again in .zip
  ./configure DIST_LANG=$LANG
  make dist-zip
  mv $BASENAME.zip ../protobuf-$LANG-$VERSION.zip
done

cd ..
rm -rf $BASENAME
