#!/bin/bash

#
# 
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
# 
#   http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
# 


#
# Temporary hack for producing a binary dev distribution.
# Includes regular stuff from 'make install' + examples and headers.
#
# TODO: Also include debug libraries.
#

Usage() {
  echo "usage: $0 [release-version]
   release-version   e.g. 1.0M1 (defaults to the svn revision)" >&2
  exit 2
}

if [[ $# -eq 1 ]]; then
  [[ $1 == "-?" ]] && Usage
  version=$1
elif [[ $# -ne 0 ]]; then
  Usage
else
  # Default the version to the svn revision
  if which svn >/dev/null 2>&1; then
    svnRevision=$(svn info | grep ^Revision: | awk '{print $2}')
    version=r${svnRevision}
  else
    echo "You need to have svn in your PATH or specify a release-version"
    exit 2
  fi
fi

releaseName=qpid-cpp-dev-${version}-$(uname -s)-$(uname -p)
releaseDir=release/$releaseName

if [[ -d $releaseDir ]]; then
  echo "$releaseDir already exists"
  exit 2
fi

# Copy bin.
mkdir -p $releaseDir/bin
cp -r src/.libs/* ${releaseDir}/bin

# Copy libs.
mkdir -p $releaseDir/lib
cp lib/broker/.libs/lib* lib/common/.libs/lib* lib/client/.libs/lib* \
    $releaseDir/lib

# Copy gen include files.
find gen -name \*.h | while read file; do
  destFile=${releaseDir}/include/$file
  baseDir=$(dirname $destFile)
  mkdir -p $baseDir
  cp $file $destFile
done

# Copy in lib include files.
(
  cd lib; find . -name \*.h | while read file; do
    destFile=../${releaseDir}/include/$file
    baseDir=$(dirname $destFile)
    mkdir -p $baseDir
    cp $file $destFile
  done
)

# Copy non-cppunit tests as examples.
mkdir -p $releaseDir/examples
for file in tests/*.cpp; do
  if grep CppUnit $file >/dev/null; then
     echo Skipping cppunit file $file
  else
     cp $file $releaseDir/examples
  fi
done

# Copy Makefile and README for examples.
cp tests/examples.Makefile $releaseDir/examples/Makefile
cp tests/examples.README $releaseDir/examples/README

cd release
tar=$releaseName.tar
tar cvf $tar $releaseName
bzip2 $tar
