#! /bin/sh -e

UPSTREAM_VERSION=2.25
PACKAGE_VERSION=${UPSTREAM_VERSION}.2

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="-L/usr/local/lib/hpux32" \
	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/

exit 0

--- SCons/Config/hpux	2007-03-02 11:17:07.000000000 +0000
+++ SCons/Config/hpux	2007-04-23 16:00:05.000000000 +0000
@@ -1,7 +1,20 @@
-print "Using default tools configuration"
+print "Using hpux tools configuration"
 
 Import('defenv')
 
+### fix scons
+
+defenv['CC'] = '/opt/ansic/bin/cc'
+
+### required to build makensis
+
+defenv.Append(LINKFLAGS = '+DD32')
+defenv.Append(LINKFLAGS = '-mt')
+defenv.Append(LINKFLAGS = '+u1')
+defenv.Append(CCFLAGS = '+DD32')
+defenv.Append(CCFLAGS = '-mt')
+defenv.Append(CCFLAGS = '+u1')
+
 ### flags
 
 defenv['ENTRY_FLAG'] = lambda x: ''
--- SConstruct	2007-03-12 10:07:34.000000000 +0000
+++ SConstruct	2007-04-23 16:06:26.000000000 +0000
@@ -319,6 +319,8 @@
 
 if 'msvc' in tools or 'mstoolkit' in tools:
 	envs = SConscript('SCons/Config/ms')
+elif 'hpc++' in tools:
+	envs = SConscript('SCons/Config/hpux')
 elif 'gcc' in tools:
 	envs = SConscript('SCons/Config/gnu')
 else:
--- Source/Platform.h	2007-04-23 16:23:38.000000000 +0000
+++ Source/Platform.h	2007-04-23 16:27:44.000000000 +0000
@@ -84,6 +84,11 @@
 typedef DWORDLONG ULONGLONG,*PULONGLONG;
 #endif
 
+#ifdef _BIG_ENDIAN
+#  ifndef __BIG_ENDIAN__
+#    define __BIG_ENDIAN__
+#  endif
+#endif
 #ifndef __BIG_ENDIAN__
 # define FIX_ENDIAN_INT32_INPLACE(x) ((void)(x))
 # define FIX_ENDIAN_INT32(x) (x)
@@ -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-01-13 17:28:13.000000000 +0000
+++ Source/Plugins.cpp	2007-04-20 23:21:40.000000000 +0000
@@ -69,7 +69,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-02-17 15:11:33.000000000 +0000
+++ Source/ResourceEditor.cpp	2007-04-20 23:21:40.000000000 +0000
@@ -27,6 +27,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);
 }
