#!/bin/sh

# Shell script to make gretl win32 distribution

BUILDTYPE=$1

if [ "x${BUILDTYPE}" = "x" ] ; then
  echo "mkwindist: argument must be 'cross' or 'native'"
  exit 1
fi

TOPDIR=".."
THISDIR=`pwd`

########## CONFIGURE HERE ###################

if [ "$BUILDTYPE" = "cross" ] ; then
  WINFILES=/home/cottrell/stats/esl/win32
  HLPDIR=${TOPDIR}/share
  DOCDIR=${TOPDIR}/build/doc/tex
  SYSBIN=/opt/cross-tools/mingw32/bin
  INNO_CMD="wine c:/innodir/ISCC.exe"
else
  WINFILES=/mingw/winbuild
  HLPDIR=${WINFILES}/help
  DOCDIR=${WINFILES}/doc
  SYSBIN=c:/mingw/bin
  # C:/Program Files/Inno Setup 5/ISCC.exe
  INNO_CMD="c:/progra~1/innose~1/iscc.exe"
fi

#############################################

# function: add content of unexploded tar package
# the single argument is the path to the tarball
function process_tarball {
    echo "adding content of $1"
    tar tvfz $1 | awk '{ print $3" "$4" "$5" "$6 }' | \
       grep -v ^0 >> MANIFEST
    tar xfz $1
}

# function: add individual file to package
# arg1 is path to file to add, arg2 is where to put it
function add_file {
    finfo=`ls -l $1 | awk '{ print $5" "$6" "$7 }'`
    cp -p $1 windist/$2
    echo $2
    echo "$finfo $2" >> windist/MANIFEST
}

# start of script proper

VERSION=$(grep GRETL_VERSION[^_] $TOPDIR/lib/src/version.h | \
     awk '{ print $NF}' | sed s/[\"\;]//g)

if [ -f windist/MANIFEST ] ; then
   cp windist/MANIFEST windist/MANIFEST.`date +%Y-%m-%d`
fi
echo "VERSION $VERSION" > windist/MANIFEST
echo "DATE `date`" >> windist/MANIFEST
rm -rf windist/gretl

# make gretl directory structure
mkdir -p windist
mkdir -p windist/gretl
mkdir -p windist/gretl/data
mkdir -p windist/gretl/data/misc
mkdir -p windist/gretl/data/greene
mkdir -p windist/gretl/data/nist
mkdir -p windist/gretl/data/plotbars
mkdir -p windist/gretl/functions
mkdir -p windist/gretl/scripts
mkdir -p windist/gretl/scripts/misc
mkdir -p windist/gretl/db
mkdir -p windist/gretl/doc
mkdir -p windist/gretl/helpfigs
mkdir -p windist/gretl/plugins
mkdir -p windist/gretl/plugins/data
mkdir -p windist/gretl/ui

# put binaries in place
add_file gretlcli.exe gretl/gretlcli.exe
add_file gretlw32.exe gretl/gretlw32.exe

# home-made dynamic libs
for f in dlls/*.dll ; do
    add_file $f gretl/`basename $f`
done

# gretl plugins
for f in plugins/*.dll ; do
    add_file $f gretl/plugins/`basename $f`
done

# gretl translations
LANGS=`cat ${TOPDIR}/po/LINGUAS | grep -v ^#`
for lang in $LANGS ; do
   mkdir -p windist/gretl/locale/${lang}/LC_MESSAGES
done

# auxiliary dlls
for f in \
    libgmp-3.dll libmpfr-1.dll libxml2.dll readline5.dll history5.dll \
    zlib1.dll libblas.dll liblapack.dll libgtksourceview.dll \
    iconv.dll intl.dll libfftw3-3.dll libpng12-0.dll 
do
    add_file ${WINFILES}/misc-dll/$f gretl/$f
done

# system DLLs for threads/openmp, if required
# add_file ${SYSBIN}/mingwm10.dll gretl/mingwm10.dll
# add_file ${SYSBIN}/pthreadGC2.dll gretl/pthreadGC2.dll

# GTK/pango dependencies
for f in \
    libexpat-1.dll freetype6.dll libfontconfig-1.dll
do 
    add_file ${WINFILES}/misc-dll/$f gretl/$f
done

# XML UI-definition files
for f in ${TOPDIR}/gui2/*.xml ; do
  add_file $f gretl/ui/`basename $f`
done

# lang files for gtksourceview
mkdir -p windist/gretl/share/gtksourceview-1.0/language-specs
add_file gretl.lang \
  gretl/share/gtksourceview-1.0/language-specs/gretl.lang
add_file ${TOPDIR}/gui2/gnuplot.lang \
  gretl/share/gtksourceview-1.0/language-specs/gnuplot.lang
add_file ${TOPDIR}/gui2/R.lang \
  gretl/share/gtksourceview-1.0/language-specs/R.lang
add_file ${TOPDIR}/gui2/cpp.lang \
  gretl/share/gtksourceview-1.0/language-specs/cpp.lang
add_file ${TOPDIR}/gui2/octave.lang \
  gretl/share/gtksourceview-1.0/language-specs/octave.lang

# help files, license, logo
add_file ${HLPDIR}/gretlgui.hlp gretl/gretlgui_hlp.txt
add_file ${HLPDIR}/gretlcmd.hlp gretl/gretlcmd_hlp.txt
add_file ${HLPDIR}/gretlcli.hlp gretl/gretlcli_hlp.txt
add_file ${HLPDIR}/genrcli.hlp gretl/genrcli.hlp
add_file ${HLPDIR}/genrgui.hlp gretl/genrgui.hlp
add_file ${HLPDIR}/genrcli.hlp.it gretl/genrcli.hlp.it
add_file ${HLPDIR}/genrgui.hlp.it gretl/genrgui.hlp.it
for f in ${TOPDIR}/share/texfigs/*.png ; do
   add_file $f gretl/helpfigs/`basename $f`
done
for lang in es it ; do
   add_file ${HLPDIR}/gretlgui.hlp.${lang} \
       gretl/gretlgui_hlp_${lang}.txt
   add_file ${HLPDIR}/gretlcmd.hlp.${lang} \
       gretl/gretlcmd_hlp_${lang}.txt
   add_file ${HLPDIR}/gretlcli.hlp.${lang} \
       gretl/gretlcli_hlp_${lang}.txt
done
add_file ${TOPDIR}/COPYING gretl/COPYING
add_file ${TOPDIR}/pixmaps/gretl-logo.xpm gretl/gretl-logo.xpm
add_file ${DOCDIR}/gretl-guide.pdf gretl/doc/gretl-guide.pdf
add_file ${DOCDIR}/gretl-ref.pdf gretl/doc/gretl-ref.pdf

# top-level data files
for f in ${TOPDIR}/share/data/*.gdt ; do
    add_file $f gretl/data/`basename $f`
done
for f in ${TOPDIR}/share/data/*.dtd ; do
    add_file $f gretl/data/`basename $f`
done
for f in ${TOPDIR}/share/data/descriptions ; do
    add_file $f gretl/data/`basename $f`
done

# Greene data files
for f in ${TOPDIR}/share/data/greene/*.gdt ; do
    add_file $f gretl/data/greene/`basename $f`
done
for f in ${TOPDIR}/share/data/greene/wg_descriptions ; do
    add_file $f gretl/data/greene/`basename $f`
done

# "misc" data files
for f in ${TOPDIR}/share/data/misc/*.gdt ; do
    add_file $f gretl/data/misc/`basename $f`
done
for f in ${TOPDIR}/share/data/misc/descriptions ; do
    add_file $f gretl/data/misc/`basename $f`
done

# Plot bars data files
for f in ${TOPDIR}/share/data/plotbars/*.txt ; do
    add_file $f gretl/data/plotbars/`basename $f`
done

# NIST test data files
for f in ${TOPDIR}/tests/*.dat ; do
    add_file $f gretl/data/nist/`basename $f`
done

# top-level scripts
for f in ${TOPDIR}/share/scripts/*.inp ; do
    add_file $f gretl/scripts/`basename $f`
done
for f in ${TOPDIR}/share/scripts/*tions ; do
    add_file $f gretl/scripts/`basename $f`
done

# "misc" scripts
for f in ${TOPDIR}/share/scripts/misc/*.inp ; do
    add_file $f gretl/scripts/misc/`basename $f`
done
for f in ${TOPDIR}/share/scripts/misc/ps_descriptions ; do
    add_file $f gretl/scripts/misc/`basename $f`
done

# function package DTD and sample(s)
for f in ${TOPDIR}/share/functions/*.dtd ; do
    add_file $f gretl/functions/`basename $f`
done
for f in ${TOPDIR}/share/functions/*.gfn ; do
    add_file $f gretl/functions/`basename $f`
done

# database files
if [ "$BUILDTYPE" = "cross" ] ; then
  make -C ${TOPDIR}/build/share/bcih
  add_file ${TOPDIR}/build/share/bcih/fedstl.bin gretl/db/fedstl.bin
  add_file ${TOPDIR}/share/bcih/fedstl.idx gretl/db/fedstl.idx 
else
  make -C db
  add_file db/fedstl.bin gretl/db/fedstl.bin
  add_file ${TOPDIR}/share/bcih/fedstl.idx gretl/db/fedstl.idx 
fi

# translations (make sure they're up to date first)
make -C mo
for lang in $LANGS ; do
  add_file mo/$lang.mo gretl/locale/$lang/LC_MESSAGES/gretl.mo
done

# ensure updater is au courant
make -C updater

# misc files
add_file ${TOPDIR}/plugin/data/urcdata.gz gretl/plugins/data/urcdata.gz
add_file ${TOPDIR}/plugin/data/dwdata.gz gretl/plugins/data/dwdata.gz
add_file gretl_website.url gretl/gretl_website.url
add_file updater/gretl_updater.exe gretl/gretl_updater.exe
date > gretl.stamp
add_file gretl.stamp gretl/gretl.stamp

# add GTK runtime and gnuplot distribution: note that we move
# into the "windist" subdir first
cd windist
if [ ! -f ${WINFILES}/gtk-runtime.tar.gz ] ; then
  echo "Couldn't find gtk-runtime.tar.gz"
  exit 1
else 
  process_tarball ${WINFILES}/gtk-runtime.tar.gz
fi

if [ ! -f ${WINFILES}/gp45cvsw32.tar.gz ] ; then
  echo "Couldn't find gp45cvsw32.tar.gz"
  exit 1
else
  process_tarball ${WINFILES}/gp45cvsw32.tar.gz
fi

make gretl.iss

# make Inno installer
echo "Building gretl installer executable..."
${INNO_CMD} ./gretl.iss 2>errlog && \
mv Output/setup.exe Output/gretl_install.exe && \
ls -l Output/gretl_install.exe

touch dist.stamp
