#!/bin/sh # # Copyright (C) 2000, 2001, 2002, 2004, 2005 Free Software Foundation, Inc. # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. set -e cd dist-w32 tmp="`echo $0 | sed 's,.*gnupg-\([^/]*\)/.*,\1,'`" topdir= bindir=.. if [ -f "../gnupg-$tmp/README" ]; then srcdir="../gnupg-$tmp" bindir="../gnupg-$tmp" topdir=".." elif [ -f ../README ]; then srcdir=.. elif [ -f ../../README ]; then srcdir=../.. bindir=.. elif [ -f ../../gnupg-stable/README ]; then srcdir=../../gnupg-stable elif [ -f ../../../gnupg-stable/README ]; then srcdir=../../../gnupg-stable else echo "cannot figure out the source dir" >&2 exit 1 fi # Windows uses an internal build number. We use the last day of the # year concatenated with the hour. for it. If it happens that a new # release of the same version is to be made in the next year, the # build number must be given manually by adding the appropriate number # of days. if [ "$1" = "--build-number" -a -n "$2" ]; then build_number="$2" shift shift else build_number=$(date -u '+%j%k' | sed 's/^0*\(.*\)/\1/') fi if i586-mingw32msvc-strip --version >/dev/null 2>&1 ; then STRIP=i586-mingw32msvc-strip else STRIP="mingw32 strip" fi # If we don't have an installer we don't need to prepare for it. if ! makensis -version >/dev/null 2>&1 ; then topdir= fi # A function to return a plain ASCII (or Latin-1) encoded description # text for a language identifier. We need this to display the list of # available languages in the installer. NSIS does not support utf-8 # so we need to standardize on one character set. Note that this # script itself is written in utf-8 but the resulting file will get # converted to Latin-1 get_langname () { case "$1" in be) r="Belarusian"; ;; ca) r="Català"; ;; cs) r="Cesky"; ;; da) r="Danish"; ;; de) r="Deutsch"; ;; el) r="Greek"; ;; en|en@*) r="English"; ;; eo) r="Esperanto"; ;; es) r="Español"; ;; et) r="Eesti keel"; ;; fi) r="Suomi"; ;; fr) r="Français"; ;; gl) r="Galician"; ;; hu) r="Magyar"; ;; id) r="Indonesian"; ;; it) r="Italiano"; ;; ja) r="Japanese"; ;; pl) r="Polski"; ;; pt) r="Português"; ;; pt_BR) r="Português (do Brasil)"; ;; ro) r="Romana"; ;; ru) r="Russian"; ;; sk) r="Slovensky"; ;; sv) r="Svenska"; ;; tr) r="Türkçe"; ;; zh_CN) r="Chinese (simplified)"; ;; zh_TW) r="Chinese (traditional)"; ;; *) r="" ;; esac echo "$r" } # Figure out the version version=$(sed -n 's/^#[ ]*define[ ][ ]*VERSION[ ][ ]*\"\([0-9.a-z-]*\)\"/\1/p' $bindir/config.h) prod_version=$(echo "$version"|awk -F'[^0-9]' '{print $1 "." $2 "." $3 }') prod_version="${prod_version}.${build_number}" echo "building version $version ($prod_version)" rm * >/dev/null 2>/dev/null || true cp ${bindir}/g10/gpg.exe gpg.exe $STRIP gpg.exe cp ${bindir}/g10/gpgv.exe gpgv.exe $STRIP gpgv.exe for name in hkp curl ldap finger; do cp ${bindir}/keyserver/gpgkeys_$name.exe gpgkeys_$name.exe $STRIP gpgkeys_$name.exe done cp ${bindir}/tools/gpgsplit.exe gpgsplit.exe $STRIP gpgsplit.exe for i in FAQ; do cp ${bindir}/doc/$i $i.txt todos $i.txt done man -Tlatin1 -l ${srcdir}/doc/gpg.1 | sed `printf "s/\b.//g"` >gpg.man todos gpg.man man -Tlatin1 -l ${srcdir}/doc/gpgv.1 | sed `printf "s/\b.//g"` >gpgv.man todos gpgv.man man -Tlatin1 -l ${srcdir}/doc/gnupg.7 | sed `printf "s/\b.//g"` >gnupg.man todos gnupg.man for i in README COPYING NEWS; do cp ${srcdir}/$i $i.txt todos $i.txt done cp ${srcdir}/doc/README.W32 README-W32.txt todos README-W32.txt patches_defs= for i in `find "$topdir/patches" -type f -name '*.diff'`; do cp $i . patches_defs="-DWITH_PATCHES" done # We must distribute the MO files in UTF-8, the conversion is done by # gpg at runtime. To include English at the right position in the list we # need a special case. langlist="" langdesclist="" for i in `(ls ${srcdir}/po/*.po; echo ${srcdir}/po/en.po) | sort`; do lang=$(basename $i .po) if [ $lang != "en" ]; then grep -s $lang ${srcdir}/po/LINGUAS >/dev/null || continue [ -f$lang.mo -a $lang.mo -nt $i ] && continue fromset=`sed -n '/^"Content-Type:/ s/.*charset=\([a-zA-Z0-9_-]*\).*/\1/p' $i` case "$fromset" in utf8|utf-8|UTF8|UTF-8) echo "$lang: keeping $fromset" >&2 msgfmt --output-file=$lang.mo $i ;; *) echo "$lang: converting from $fromset to utf-8" >&2 iconv --silent --from-code=$fromset --to-code=utf-8 < $i | \ sed "/^\"Content-Type:/ s/charset=[a-zA-Z0-9_-]*/charset=utf-8/"|\ msgfmt --output-file=$lang.mo - ;; esac fi langlist="$langlist $lang" langname="`get_langname $lang`" [ -n "$langdesclist" ] && langdesclist="${langdesclist}|" langdesclist="${langdesclist}${lang} - ${langname}" done # Create the option file for use with the NSIS installer. cat <opt.ini [Settings] NumFields=1 [Field 1] Type=DropList Left=0 Right=130 Top=20 Bottom=100 ListItems="$langdesclist" EOF # If we have a topdir, assume the full build environment and # prepare the installer if [ -n "$topdir" ]; then winpt_defs= src_defs= buildinfo="`date -u '+%Y-%m-%d %H:%M UTC'`" # iconv.dll is a hard requirement if [ ! -f "$topdir/iconv/iconv.dll" ]; then echo "iconv.dll not available" >&2 exit 1 fi ln "$topdir/iconv/iconv.dll" iconv.dll for i in COPYING.LIB README.iconv; do cp ${topdir}/iconv/$i $i.txt todos $i.txt done # WinPT is optional if [ -f "$topdir/winpt/WinPT.exe" ]; then ln "$topdir/winpt/WinPT.exe" WinPT.exe ln "$topdir/winpt/PTD.dll" PTD.dll cp "$topdir/winpt/README-0.9.txt" README.winpt.txt cp "$topdir/winpt/NEWS-0.9.txt" NEWS.winpt.txt cp "$topdir/winpt/keyserver.conf" keyserver.conf winpt_defs="-DWITH_WINPT" fi # See whether we should include the source and figure out the # version numbers of the source files. if [ -d "$topdir/tarballs" ]; then have_gnupg_src=no have_libiconv_src=no have_winpt_src=no for i in `find "$topdir/tarballs" -type f -name '*.tar.gz'`; do fname=$(basename "$i" .gz) zcat "$i" > "$fname" case "$fname" in gnupg-*) tmp=$(echo "$fname" | \ sed -n 's/^[^-]*-\([0-9.a-z-]*\)\.tar$/\1/p') echo "gnupg source version is $tmp" >&2 if [ "$version" != "$tmp" ]; then echo "gnupg source version does not match" >&2 exit 1 fi have_gnupg_src=yes ;; libiconv-*) tmp=$(echo "$fname" | \ sed -n 's/^[^-]*-\([0-9.a-z-]*\)\.tar$/\1/p') echo "libiconv source version is $tmp" >&2 src_defs="$src_defs -DLIBICONV_VERSION=$tmp" have_libiconv_src=yes ;; winpt-*) tmp=$(echo "$fname" | \ sed -n 's/^[^-]*-\([0-9.a-z-]*\)\.tar$/\1/p') echo "winpt source version is $tmp" >&2 src_defs="$src_defs -DWINPT_VERSION=$tmp" have_winpt_src=yes ;; *) echo "WARNING: unknown source file $fname ignored" >&2 ;; esac done if [ -n "$src_defs" ]; then if [ $have_gnupg_src = "no" ]; then echo "gnupg source missing" >&2 exit 1 fi if [ $have_libiconv_src = "no" ]; then echo "libiconv source missing" >&2 exit 1 fi if [ -n "$winpt_defs" ]; then if [ $have_winpt_src = "no" ]; then echo "winpt source missing" >&2 exit 1 fi fi src_defs="$src_defs -DWITH_SOURCE" fi fi # Now run the installer echo "invoking installer as:" echo makensis -v0 -nocd -DVERSION="${version}" \ -DPROD_VERSION="${prod_version}" \ -DGNUPG_SRCDIR="${srcdir}" ${winpt_defs} ${src_defs} \ ${patches_defs} ${srcdir}/scripts/w32installer.nsi BUILDINFO=$buildinfo makensis -v0 -nocd -DVERSION="${version}" \ -DPROD_VERSION="${prod_version}" \ -DGNUPG_SRCDIR="${srcdir}" ${winpt_defs} ${src_defs} \ ${patches_defs} ${srcdir}/scripts/w32installer.nsi echo "Installer created" >&2 else zip -9 "gnupg-w32cli-${version}.zip" * echo "ZIP archive created" >&2 fi