#!/bin/sh
#
#       Install Script for mingw32 & GNU PG(for Win32,FreeBSD,Linux)
#
#      Copyright (C) Toshiki Fujisawa 1999   ( unix@d1.dion.NOSPAM.ne.jp )
#		
#  o Tested  on FreeBSD-2.2.7/2.2.8 and RedHat5.2J
#		
#  o Need wget,bzip2,gcc,gmake,automake,autoconf-2.13
#                             [ not work by autoconf-2.12(with RedHat5.2J) ]
#
#  o This script and gnupg-win32-patch.tgz conforms the GNU Public License 2
#
{
{
#------------------------------------------------------------------------------
PREFIX=${PREFIX:-/usr/local/mingw32}
WORK_DIR=${WORK_DIR:-/var/tmp/work}
DIST_DIR=${DIST_DIR:-"/usr/ports/distfiles"}
#------------------------------------------------------------------------------
mkdir -p $PREFIX $WORK_DIR $DIST_DIR
#------------------------------------------------------------------------------
FETCH=wget
# echo "ftp_proxy=http://proxy.corp.co.jp:1234/"  >  $HOME/.wgetrc
# echo "http_proxy=http://proxy.corp.co.jp:1234/" >> $HOME/.wgetrc
echo "======================================================================="
echo "=                                                                     ="
echo "=                 Get distribution files                              ="
echo "=                                                                     ="
echo "======================================================================="
echo "===> START: get distribution files and check `date` "
echo -n "     "
getchk()
{
	sum="$1" size="$2" fname="$3"
	{
		cd $DIST_DIR || { echo Cannot cd to $DIST_DIR ; exit 1; }
		if [ ! -e $fname ]; then
			echo ""
			$FETCH $URL/$fname
			[ ! -e $fname ] && { echo "Abort!!" ; exit 1; }
		fi
		if [ "`cksum $fname`" != "$sum $size $fname" ]; then
			echo ""
			echo "Check sum NG $fname"
			exit 1
		else
			echo -n "."
		fi
	}
}
#============================================================================
#
#	for GNU PG
#
URL=http://www.d1.dion.ne.jp/~unix/
   getchk 3689114293    3528 gnupg-win32-patch.tgz
URL=ftp://ring.asahi-net.or.jp/pub/pgp/gnupg/
   getchk 3253462901 1105668 gnupg-0.9.5.tar.gz
URL=ftp://ftp.iij.ad.jp/pub/GNU/autoconf
   getchk 3544738834  443844 autoconf-2.13.tar.gz
#============================================================================
#
#	for mingw32
#
URL=ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/runtime
   getchk 3360430732  588552 bin-1999-04-05.tar.gz
URL=ftp://ring.asahi-net.or.jp/pub/pc/gnu-win32/cygwin-b20/src-by-top-dir
   getchk 2169803898 1247639 bfd.tar.bz2
   getchk 1721663115  431676 binutils.tar.bz2
   getchk 3482828160   13596 config.tar.bz2
   getchk  325618452   99954 etc.tar.bz2
   getchk 3509379975 1379313 gas.tar.bz2
   getchk  908404967  125087 gprof.tar.bz2
   getchk  112487713  255036 include.tar.bz2
   getchk 2079467609   50944 intl.tar.bz2
   getchk 1958290706  333065 ld.tar.bz2
   getchk 2241058392  133402 libiberty.tar.bz2
   getchk 3655415608  296810 opcodes.tar.bz2
   getchk 2651525719  963891 texinfo.tar.bz2
   getchk 2480865005  138427 toplevel.tar.bz2
URL=ftp://ring.asahi-net.or.jp/pub/lang/egcs/releases/egcs-1.1.1
   getchk  830767672 8917442 egcs-1.1.1.tar.bz2
URL=ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/cygwin/egcs-1.1.1/patches
   getchk  393464298  143121 egcs-1.1.1-x86-win32-patches.tar.gz
#=============================================================================
echo ""
echo "===> END: get distribution and check `date` "

echo "======================================================================="
echo "=                                                                     ="
echo "=                         Install mingw32                             ="
echo "=                                                                     ="
echo "======================================================================="
echo "===> START mingw32 `date`"
echo "===> check tools ... "
if ! autoconf --version | grep -q "version 2\.13" ; then
	echo 'ERROR: must be install autoconf-2.13.tar.gz as follows'
	echo '(1) Remove old autoconf'
	echo '   FreeBSD:  pkg_info -a | grep autoconf ; pkg_delete ...'
	echo '   RedHat:   rpm -e  `rpm -q -a | grep autoconf`  '
	echo '(2) Install autoconf'
	echo '   # tar zxfC /usr/ports/distfiles/autoconf-2.13.tar.gz /tmp'
	echo '   # cd /tmp/autoconf-2.13'
	echo '   # ./configure ; gmake ; gmake install '
	exit 1
fi
#------------------------------------------------------------------------------
TOOLS="bzip2 gcc gmake automake aclocal autoheader"
for i in $TOOLS
do
	if $i --version </dev/null 2>&1 | grep -qi "not found" ; then
		echo "$i not found" ; exit 1;
	else
		echo "         found $i"
	fi
done
#------------------------------------------------------------------------------
echo "===> clean work ..."
[ -d $WORK_DIR/egcs-1.1.1 ] && rm -rf $WORK_DIR/egcs-1.1.1
[ -d $WORK_DIR/binutils ]   && rm -rf $WORK_DIR/binutils
#------------------------------------------------------------------------------
echo "===> install binary"
tar zxfC $DIST_DIR/bin-1999-04-05.tar.gz $PREFIX
#------------------------------------------------------------------------------
echo "===> extract-binutils"
mkdir -p $WORK_DIR/binutils/
DIST_UTIL="bfd.tar.bz2 binutils.tar.bz2 config.tar.bz2
           etc.tar.bz2 gas.tar.bz2 gprof.tar.bz2 include.tar.bz2
           intl.tar.bz2  ld.tar.bz2 libiberty.tar.bz2
           opcodes.tar.bz2  texinfo.tar.bz2 toplevel.tar.bz2"
for i in $DIST_UTIL
do
	echo "         $i ..."
	bzip2 -dc $DIST_DIR/$i | tar xfC - $WORK_DIR/binutils/
done
#------------------------------------------------------------------------------
echo "===> extract-egcs"
rm -rf $WORK_DIR/egcs-1.1.1/
echo "         egcs ..."
bzip2 -dc $DIST_DIR/egcs-1.1.1.tar.bz2 | tar xfC - $WORK_DIR
echo "         egcs patch ..."
fname=egcs-1.1.1-x86-win32.diff
tar zxfC $DIST_DIR/egcs-1.1.1-x86-win32-patches.tar.gz $WORK_DIR/egcs-1.1.1 $fname
echo "         patching ..."
cat $WORK_DIR/egcs-1.1.1/$fname | ( cd $WORK_DIR/egcs-1.1.1 ; patch -s -p1  )
#------------------------------------------------------------------------------
echo "===> make binutils"
cd $WORK_DIR/binutils || exit 1
rm -rf   CROSS
mkdir -p CROSS
cd       CROSS
../src/configure --prefix=$PREFIX --target=i386-mingw32 -v
echo "         gmake ..."
gmake
echo "         gmake install ..."
gmake install
#------------------------------------------------------------------------------
echo "===> make symbolic link of /usr/local/bin/i386-mingw32-ar ..."
FILES="addr2line ar as c++filt dlltool dllwrap gasp ld nm objcopy"
FILES="$FILES objdump ranlib readelf size strings strip windres"
for i in $FILES ; do
	f="i386-mingw32-$i"
	[ "$f" = "" ] && exit 1
	[ ! -e $PREFIX/bin/$f ] && { echo "not found $PREFIX/bin/$f"; exit 1; }
	rm -f                 /usr/local/bin/$f
	ln -s  $PREFIX/bin/$f /usr/local/bin/$f
done
#------------------------------------------------------------------------------
echo "===> make egcs"
cd $WORK_DIR/egcs-1.1.1 || exit 1
rm -rf   CROSS
mkdir -p CROSS
cd       CROSS
../configure --prefix=$PREFIX --target=i386-mingw32 -v
echo "         gmake ..."
cd gcc; gmake installdirs; cd ..
gmake
echo "         gmake install ..."
gmake install
#------------------------------------------------------------------------------
echo "===> make symbolic link of /usr/local/bin/i386-mingw32-gcc"
FILES="gcc c++ g++ g77 protoize unprotoize"
for i in $FILES ; do
	f="i386-mingw32-$i"
	[ ! -e $PREFIX/bin/$f ] && { echo "not found $PREFIX/bin/$f"; exit 1; }
	rm -f                 /usr/local/bin/$f
	ln -s  $PREFIX/bin/$f /usr/local/bin/$f
done
#------------------------------------------------------------------------------
echo "===> clean work ..."
[ -d $WORK_DIR/egcs-1.1.1 ] && rm -rf $WORK_DIR/egcs-1.1.1
[ -d $WORK_DIR/binutils   ] && rm -rf $WORK_DIR/binutils
#------------------------------------------------------------------------------
echo "===> END mingw32 `date`"
echo ""

echo "======================================================================="
echo "=                                                                     ="
echo "=                 install GNU PG (for win32)                          ="
echo "=                                                                     ="
echo "======================================================================="
GNUPG_VER=gnupg-0.9.5
echo "===> START gnupg(win32) `date` "
#------------------------------------------------------------------------------
echo "===> clean gpg work ..."
[ -e $WORK_DIR/$GNUPG_VER ] && rm -rf $WORK_DIR/$GNUPG_VER
#------------------------------------------------------------------------------
echo "===> extract ..."
tar zxfC $DIST_DIR/$GNUPG_VER.tar.gz  $WORK_DIR
#------------------------------------------------------------------------------
echo "===> patch ..."
cd $WORK_DIR/$GNUPG_VER || { echo "cannot cd $WORK_DIR/$GNUPG_VER"; exit 1; }
tar zxf $DIST_DIR/gnupg-win32-patch.tgz
patch -s -p1 < gnupg-win32.patch
#------------------------------------------------------------------------------
echo "===> make configure"
echo "         aclocal"    ; aclocal    || exit 1
echo "         autoheader" ; autoheader || exit 1
echo "         automake"   ; automake   || exit 1
echo "         autoconf"   ; autoconf   || exit 1
#------------------------------------------------------------------------------
#==============================================================================
echo "===> configure --target=i386-pc-mingw32"
./configure --target=i386-pc-mingw32 || exit 1
#------------------------------------------------------------------------------
echo "===> gmake (win32)"
gmake || exit 1
[ ! -e g10/gpg ] && { echo "not found g10/gpg" ; exit 1; }
#------------------------------------------------------------------------------
echo "===> make 00out (win32)"
mv g10/gpg  $WORK_DIR/gpg.exe
mv g10/gpgm $WORK_DIR/gpgm.exe
chmod 644   $WORK_DIR/gpg.exe
chmod 644   $WORK_DIR/gpgm.exe
#------------------------------------------------------------------------------
echo "===> clean gpg work ..."
[ -e $WORK_DIR/$GNUPG_VER ] && rm -rf $WORK_DIR/$GNUPG_VER
#------------------------------------------------------------------------------
echo "===> END gnupg(win32) `date` "
echo ""

echo "======================================================================="
echo "=                                                                     ="
echo "=                 install GNU PG (for localhost)                      ="
echo "=                                                                     ="
echo "======================================================================="
echo "===> START gnupg(localhost) `date`"
[ -e $WORK_DIR/$GNUPG_VER ] && rm -rf $WORK_DIR/$GNUPG_VER
#------------------------------------------------------------------------------
echo "===> extracting ..."
tar zxfC $DIST_DIR/$GNUPG_VER.tar.gz  $WORK_DIR
cd $WORK_DIR/$GNUPG_VER || { echo "cannot cd $WORK_DIR/$GNUPG_VER"; exit 1; }
#------------------------------------------------------------------------------
if [ "`uname`" = "FreeBSD" ]; then
    { echo "/^sunos/s/^/freebsd* | /"; echo "w"; echo "q"; } | ed -s configure
    { echo "/^print_warn/+1a" ; echo "#ifndef __FreeBSD__"      ; echo "."
      echo "+2a"              ; echo "#endif /* __FreeBSD__ */" ; echo "."
      echo "w" ; echo "q" ; } | ed -s util/secmem.c
fi
#------------------------------------------------------------------------------
echo "===> configure"
./configure
#------------------------------------------------------------------------------
echo "===> gmake"
gmake
#------------------------------------------------------------------------------
echo "===> gmake install"
gmake install
#------------------------------------------------------------------------------
echo "===> clean work"
[ -e $WORK_DIR/$GNUPG_VER ] && rm -rf $WORK_DIR/$GNUPG_VER
#------------------------------------------------------------------------------
echo "===> END gnupg(localhost) `date`"
echo ""
#------------------------------------------------------------------------------

} 2>&1
} | tee /var/log/install-gpg.log
#------------------------------------------------------------------------------
