#! /bin/sh -e

UPSTREAM_VERSION=2.25
PACKAGE_VERSION=${UPSTREAM_VERSION}.1

BINDIR=nsis-${UPSTREAM_VERSION}
SRCDIR=nsis-${UPSTREAM_VERSION}-src
URLDIR=http://superb-west.dl.sourceforge.net/sourceforge/nsis/
DSTDIR=`pwd`/nsis-tmp
BINFILE=${BINDIR}.zip
SRCFILE=${SRCDIR}.tar.bz2

PATH=/opt/hp-gcc/bin:/bin:/usr/bin:/sbin:/usr/sbin:/opt/vzb/bin:/opt/vzb/sbin:/usr/ccs/bin

rm -fr $BINDIR $SRCDIR $DSTDIR

for i in $BINFILE $SRCFILE
do
	test -f $i || curl -O $URLDIR/$i
done

/usr/local/bin/unzip $BINFILE
/usr/local/bin/bunzip2 < $SRCFILE | tar xvf -

cd nsis-${UPSTREAM_VERSION}-src

cp SCons/Config/default SCons/Config/hpux

(cd ../ ; cat $0) | /opt/vzb/bin/patch -p0

scons \
	APPEND_LINKFLAGS="-mt +u1 -L/usr/local/lib/hpux32" \
	APPEND_CCFLAGS="-mt +u1" \
	SKIPSTUBS=all \
	SKIPPLUGINS=all \
	SKIPUTILS=all \
	SKIPMISC=all \
	PREFIX_BIN=/opt/vzb/bin \
	PREFIX=/opt/vzb \
	PREFIX_CONF=/etc/opt/vzb \
	PREFIX_DEST=$DSTDIR \
	install-compiler

cd ../

mkdir -p $DSTDIR/etc/opt/vzb
mkdir -p $DSTDIR/opt/vzb/share/nsis

mv nsis-${UPSTREAM_VERSION}/nsisconf.nsh $DSTDIR/etc/opt/vzb/.
mv nsis-${UPSTREAM_VERSION}/Bin          $DSTDIR/opt/vzb/share/nsis/.
mv nsis-${UPSTREAM_VERSION}/Stubs        $DSTDIR/opt/vzb/share/nsis/.
mv nsis-${UPSTREAM_VERSION}/Include      $DSTDIR/opt/vzb/share/nsis/.
mv nsis-${UPSTREAM_VERSION}/Plugins      $DSTDIR/opt/vzb/share/nsis/.
mv nsis-${UPSTREAM_VERSION}/Contrib      $DSTDIR/opt/vzb/share/nsis/.
mv nsis-${UPSTREAM_VERSION}/Docs         $DSTDIR/opt/vzb/share/nsis/.
mv nsis-${UPSTREAM_VERSION}/Examples     $DSTDIR/opt/vzb/share/nsis/.

$(dirname $0)/make-depot --prefix=$DSTDIR/opt/vzb --sysconfdir=$DSTDIR/etc/opt/vzb --package=nsis --revision=${PACKAGE_VERSION} --source-url=http://nsis.sf.net/

#
# The following should in theory be ok:
#
# Source/Platform.h          (swap macros on big endian)
# Source/Plugins.cpp         (size_t is returned, so use it in the assert)
# Source/ResourceEditor.cpp  (convert ULONG on big endian)
#
# Still need to figure out how to make the following
# configure the build correctly without patching:
#
# SCons/Config/gnu
# SConstruct
#

exit 0

--- Source/Platform.h	2007-04-19 22:42:13.000000000 +0000
+++ Source/Platform.h	2007-04-19 22:45:38.000000000 +0000
@@ -798,8 +798,13 @@
 typedef IMAGE_OPTIONAL_HEADER32         IMAGE_OPTIONAL_HEADER;
 typedef PIMAGE_OPTIONAL_HEADER32        PIMAGE_OPTIONAL_HEADER;
 #endif
-#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
-#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
+#ifndef __BIG_ENDIAN__
+#  define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
+#  define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
+#else
+#  define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x0b01
+#  define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x0b02
+#endif
 typedef struct _IMAGE_NT_HEADERS {
   DWORD Signature;
   IMAGE_FILE_HEADER FileHeader;
--- Source/Plugins.cpp	2007-04-19 21:11:06.000000000 +0000
+++ Source/Plugins.cpp	2007-04-19 21:12:21.000000000 +0000
@@ -53,7 +53,7 @@
   file.seekg(0, ios::end);
 
   ifstream::pos_type result = file.tellg();
-  assert(result >= 0);
+  assert(result >= (ifstream::pos_type)0);
 
   file.seekg(pos);
 
--- Source/ResourceEditor.cpp	2007-04-19 21:14:27.000000000 +0000
+++ Source/ResourceEditor.cpp	2007-04-19 21:17:36.000000000 +0000
@@ -33,6 +33,10 @@
 #define ALIGN(dwToAlign, dwAlignOn) dwToAlign = (dwToAlign%dwAlignOn == 0) ? dwToAlign : dwToAlign - (dwToAlign%dwAlignOn) + dwAlignOn
 #define RALIGN(dwToAlign, dwAlignOn) ((dwToAlign%dwAlignOn == 0) ? dwToAlign : dwToAlign - (dwToAlign%dwAlignOn) + dwAlignOn)
 
+static inline ULONG ConvertEndianness(ULONG u) {
+  return FIX_ENDIAN_INT32(u);
+}
+
 static inline DWORD ConvertEndianness(DWORD d) {
   return FIX_ENDIAN_INT32(d);
 }
--- SCons/Config/gnu	2007-03-18 18:34:03.000000000 +0000
+++ SCons/Config/gnu	2007-04-20 18:05:05.000000000 +0000
@@ -61,9 +61,6 @@
 stub_env = defenv.Clone()
 cross_env(stub_env)
 
-if not defenv['DEBUG']:
-	stub_env.Append(CCFLAGS = '-Os')                # optimize for size
-stub_env.Append(CCFLAGS = '-Wall')                # all warnings
 stub_env.Append(CCFLAGS = '-x c')                 # force compile as c
 stub_env.Append(CCFLAGS = '-fno-strict-aliasing') # not safe for strict aliasing
 
@@ -79,13 +76,7 @@
 
 makensis_env = defenv.Clone()
 
-if not defenv['DEBUG']:
-	makensis_env.Append(CCFLAGS = '-O2')            # optimize
-makensis_env.Append(CCFLAGS = '-Wall')            # all warnings
-
 conf = FlagsConfigure(makensis_env)
-conf.CheckLinkFlag('-m32')                        # 
-conf.CheckCompileFlag('-m32')                     #
 conf.CheckLinkFlag('$MAP_FLAG')                   # generate map file
 if not defenv['DEBUG'] and defenv['STRIP']:
 	TestStrip(conf)                                 # strip
@@ -96,9 +87,6 @@
 plugin_env = defenv.Clone()
 cross_env(plugin_env)
 
-if not defenv['DEBUG']:
-	plugin_env.Append(CCFLAGS = '-Os')              # optimize for size
-plugin_env.Append(CCFLAGS = '-Wall')              # level 3 warnings
 plugin_env.Append(CCFLAGS = '-fno-strict-aliasing') # not safe for strict aliasing
 
 if not defenv['DEBUG'] and defenv['STRIP']:
@@ -111,9 +99,6 @@
 
 cp_util_env = defenv.Clone()
 
-if not defenv['DEBUG']:
-	cp_util_env.Append(CCFLAGS = '-O2')             # optimize
-cp_util_env.Append(CCFLAGS = '-Wall')             # all warnings
 cp_util_env.Append(CCFLAGS = '-fno-strict-aliasing') # not safe for strict aliasing
 
 conf = FlagsConfigure(cp_util_env)
--- SConstruct	2007-04-20 19:14:52.000000000 +0000
+++ SConstruct	2007-04-20 20:10:16.000000000 +0000
@@ -53,7 +53,7 @@
 	'COPYING'
 ]
 
-defenv = Environment()
+defenv = Environment(CC = '/usr/bin/cc', CXX = '/opt/aCC/bin/aCC')
 Export('defenv')
 
 ######################################################################
