Index: tools/hermetic_cygwin/make_installer.inc |
=================================================================== |
--- tools/hermetic_cygwin/make_installer.inc (revision 0) |
+++ tools/hermetic_cygwin/make_installer.inc (revision 0) |
@@ -0,0 +1,975 @@ |
+# Copyright 2010, Google Inc. |
+# All rights reserved. |
+# |
+# Redistribution and use in source and binary forms, with or without |
+# modification, are permitted provided that the following conditions are |
+# met: |
+# |
+# * Redistributions of source code must retain the above copyright |
+# notice, this list of conditions and the following disclaimer. |
+# * Redistributions in binary form must reproduce the above |
+# copyright notice, this list of conditions and the following disclaimer |
+# in the documentation and/or other materials provided with the |
+# distribution. |
+# * Neither the name of Google Inc. nor the names of its |
+# contributors may be used to endorse or promote products derived from |
+# this software without specific prior written permission. |
+# |
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+ |
+ |
+# Information from setup.ini |
+declare -A sdesc ldesc category required requires prefix version install source |
+# Contents of categories |
+declare -A category_contents |
+# Packagenames: in request order and in install order |
+declare -A allinstpackages instpackages reqpackages sectionin seed |
+declare -a allinstalledpackages |
+# Filetype info |
+declare -A filetype |
+# Sanitized names cache |
+declare -A sanitized_name |
+ |
+parse_setup_ini() { |
+ if ((verbose)) ; then echo "Parsing setup.ini..." >&2 ; fi |
+ local package line acceptmode=0 sdescmode=0 ldescmode=0 |
+ while read -r line ; do |
+ if [[ "${line:0:1}" = "@" ]] ; then |
+ package="${line:2}" |
+ acceptmode=1 |
+ sdescmode=0 |
+ ldescmode=0 |
+ if ((verbose)) ; then echo "Package: \"$package\"..." >&2 ; fi |
+ elif [[ "$line" = "[prev]" ]] || [[ "$line" = "[test]" ]] ; then |
+ acceptmode=0 |
+ elif ((acceptmode)) ; then |
+ if ((sdescmode)) ; then |
+ sdesc["$package"]="${sdesc[$package]} $line" |
+ if [[ "$line" = *\"* ]] ; then |
+ sdescmode=0 |
+ fi |
+ elif ((ldescmode)) ; then |
+ ldesc["$package"]="${ldesc[$package]} $line" |
+ if [[ "$line" = *\"* ]] ; then |
+ ldescmode=0 |
+ fi |
+ elif [[ "${line:0:6}" = "sdesc:" ]] ; then |
+ sdesc["$package"]="${line:7}" |
+ if [[ "${line:7}" = *\"*\"* ]] ; then |
+ sdescmode=0 |
+ else |
+ sdescmode=1 |
+ fi |
+ ldescmode=0 |
+ elif [[ "${line:0:6}" = "ldesc:" ]] ; then |
+ ldesc["$package"]="${line:7}" |
+ sdescmode=0 |
+ if [[ "${line:7}" = *\"*\"* ]] ; then |
+ ldescmode=0 |
+ else |
+ ldescmode=1 |
+ fi |
+ elif [[ "${line:0:9}" = "category:" ]] ; then |
+ category["$package"]="${line:10}" |
+ for catname in ${category["$package"]} ; do |
+ category_contents["$catname"]="${category_contents[$catname]} $package" |
+ done |
+ sdescmode=0 |
+ ldescmode=0 |
+ elif [[ "${line:0:9}" = "requires:" ]] ; then |
+ requires["$package"]="${line:10}" |
+ sdescmode=0 |
+ ldescmode=0 |
+ elif [[ "${line:0:8}" = "version:" ]] ; then |
+ version["$package"]="${line:9}" |
+ sdescmode=0 |
+ ldescmode=0 |
+ elif [[ "${line:0:8}" = "install:" ]] ; then |
+ install["$package"]="${line:9}" |
+ sdescmode=0 |
+ ldescmode=0 |
+ elif [[ "${line:0:7}" = "source:" ]] ; then |
+ source["$package"]="${line:8}" |
+ sdescmode=0 |
+ ldescmode=0 |
+ elif [[ "$line" != "" ]] && |
+ [[ "$line" != "#"* ]] ; then |
+ echo "Unknown tag in \"$line\"" >&2 |
+ exit 1 |
+ fi |
+ fi |
+ done < setup.ini |
+} |
+ |
+fix_setup_inf_info() { |
+ version["bash"]="4.1.5-0" |
+ requires["bash"]="cygwin libintl8 libncurses10 libreadline7 _update-info-dir" |
+ install["bash"]="release/bash/bash-4.1.5-0.tar.bz2 1132678 24a05f9c3e7ca0b14fe5e55fc92a1d93" |
+ source["bash"]="release/bash/bash-4.1.5-0-src.tar.bz2 6653288 e59479e2ef9b14bdf662709a2d5b0223" |
+ version["libreadline7"]="6.1.2-0" |
+ install["libreadline7"]="release/readline/libreadline7/libreadline7-6.1.2-0.tar.bz2 89945 afd3ec6a01c015572ff9602cb4bdc794" |
+ source["libreadline7"]="release/readline/readline-6.1.2-0-src.tar.bz2 2283352 509b85aa6f723fac3b453f7c84ca3361" |
+ version["readline"]="6.1.2-0" |
+ install["readline"]="release/readline/readline-6.1.2-0.tar.bz2 288160 f16eeccbb99b41d9128d56ddc5d4ad3c" |
+ source["readline"]="release/readline/readline-6.1.2-0-src.tar.bz2 2283352 509b85aa6f723fac3b453f7c84ca3361" |
+ requires["coreutils"]="${requires[coreutils]} dash grep patch sed" |
+ requires["dash"]="${requires[dash]} cygwin" |
+ requires["libcloog-devel"]="${requires[libcloog-devel]} ppl-devel" |
+ requires["zlib-devel"]="${requires[libcloog-devel]} zlib" |
+} |
+ |
+download_package_dependences() { |
+ # $1 = name of the package; function is recursive |
+ # $2 - Section No |
+ local pkgname |
+ local instname="${install[$1]/.tar.bz2*/.tar.bz2}" |
+ local srcname="${source[$1]/.tar.bz2*/.tar.bz2}" |
+ if [[ "$instname" != "" ]] ; then |
+ if ((verbose)) ; then ( echo ; echo -n "Package: \"$1\"..." ) >&2 ; fi |
+ if [ ! -e packages/"`basename \"$instname\"`" ] ; then |
+ if wget http://build.chromium.org/mirror/nacl/cygwin_mirror/packages/"`basename \"$instname\"`" -O packages/"`basename \"$instname\"`" || |
+ wget "$mirror_prefix/$instname" -O packages/"`basename \"$instname\"`" ; then |
+ if ! [[ "${install[$1]}" = "${install[$1]/.tar.bz2*/.tar.bz2} ` |
+ stat -c "%s" packages/\"\`basename \\\"$instname\\\"\`\"` ` |
+ md5sum -b packages/\"\`basename \\\"$instname\\\"\`\" | cut -b -32`" ]] ; then |
+ echo "Wrong file downloaded: expected ${install[$1]}" >&2 |
+ exit 1 |
+ fi |
+ else |
+ # Wget should have complained for us |
+ exit $? |
+ fi |
+ fi |
+ if [ ! -e packages.unpacked/"`basename \"$instname\"`" ] ; then |
+ mkdir -p packages.unpacked/"`basename \"$instname\"`" |
+ if ! tar xSvpf {packages,-Cpackages.unpacked}/"`basename \"$instname\"`" ; then |
+ # Tar should have complained for us |
+ exit $? |
+ fi |
+ if [[ "$pkgname" = "WindowMaker" ]] ; then |
+ mv packages.unpacked/"`basename \"$instname\"`"/usr/share/WindowMaker/Icons/{,tmp}defaultAppIcon.tiff |
+ rm packages.unpacked/"`basename \"$instname\"`"/usr/share/WindowMaker/Icons/DefaultAppIcon.tiff 2> /dev/null |
+ mv packages.unpacked/"`basename \"$instname\"`"/usr/share/WindowMaker/Icons/{tmp,}defaultAppIcon.tiff |
+ elif [[ "$pkgname" = "lilypond-doc" ]] ; then |
+ mv packages.unpacked/"`basename \"$instname\"`"/usr/share/doc/lilypond/html/Documentation/user/lilypond-learning/{,tmp}Lilypond_002dbook-templates.de.html |
+ rm packages.unpacked/"`basename \"$instname\"`"/usr/share/doc/lilypond/html/Documentation/user/lilypond-learning/lilypond_002dbook-templates.de.html |
+ mv packages.unpacked/"`basename \"$instname\"`"/usr/share/doc/lilypond/html/Documentation/user/lilypond-learning/{tmp,}Lilypond_002dbook-templates.de.html |
+ elif [[ "$pkgname" = "ruby" ]] ; then |
+ mv packages.unpacked/"`basename \"$instname\"`"/usr/share/ri/1.8/system/Exception2MessageMapper/{,tmp}Fail-i.yaml |
+ rm packages.unpacked/"`basename \"$instname\"`"/usr/share/ri/1.8/system/Exception2MessageMapper/fail-i.yaml |
+ mv packages.unpacked/"`basename \"$instname\"`"/usr/share/ri/1.8/system/Exception2MessageMapper/{tmp,}Fail-i.yaml |
+ mv packages.unpacked/"`basename \"$instname\"`"/usr/share/ri/1.8/system/REXML/Parsers/XPathParser/{,tmp}Predicate-i.yaml |
+ rm packages.unpacked/"`basename \"$instname\"`"/usr/share/ri/1.8/system/REXML/Parsers/XPathParser/predicate-i.yaml |
+ mv packages.unpacked/"`basename \"$instname\"`"/usr/share/ri/1.8/system/REXML/Parsers/XPathParser/{tmp,}tmpPredicate-i.yaml |
+ fi |
+ fi |
+ if [ ! -e setup/"$1".lst.gz ] ; then |
+ if ! rm -f setup/"$1".lst ; then |
+ # Rm should have complained for us |
+ exit $? |
+ fi |
+ if ! tar tf {packages,-Cpackages.unpacked}/"`basename \"$instname\"`" > setup/"$1".lst ; then |
+ # Tar should have complained for us |
+ exit $? |
+ fi |
+ if ! gzip -9 setup/"$1".lst ; then |
+ # Gzip should have complained for us |
+ exit $? |
+ fi |
+ fi |
+ fi |
+ if [[ "$srcname" != "" ]] ; then |
+ if [ ! -e packages.src/"`basename \"$srcname\"`" ] ; then |
+ if wget http://build.chromium.org/mirror/nacl/cygwin_mirror/packages.src/"`basename \"$srcname\"`" -O packages.src/"`basename \"$srcname\"`" || |
+ wget "$mirror_prefix/$srcname" -O packages.src/"`basename \"$srcname\"`" ; then |
+ if ! [[ "${source[$1]}" = "${source[$1]/.tar.bz2*/.tar.bz2} ` |
+ stat -c "%s" packages.src/\"\`basename \\\"$srcname\\\"\`\"` ` |
+ md5sum -b packages.src/\"\`basename \\\"$srcname\\\"\`\" | cut -b -32`" ]] ; then |
+ echo "Wrong file downloaded: expected ${install[$1]}" >&2 |
+ exit 1 |
+ fi |
+ else |
+ # Wget should have complained for us |
+ exit $? |
+ fi |
+ fi |
+ fi |
+ reqpackages["$1"]="present" |
+ sectionin["$1"]="${sectionin[$1]} $2" |
+ for pkgname in ${requires["$1"]} ; do |
+ if [[ "${reqpackages[$pkgname]}" = "present" ]] ; then |
+ if ((verbose)) ; then echo -n "." >&2 ; fi |
+ else |
+ download_package_dependences "$pkgname" "$2" |
+ fi |
+ done |
+ if [[ "${allinstpackages[$1]}" != "present" ]] ; then |
+ allinstpackages["$1"]="present" |
+ allinstalledpackages=(${allinstalledpackages[@]} "$1") |
+ fi |
+} |
+ |
+download_package() { |
+ # $1 - Category name |
+ # $2 - Section No |
+ if ((verbose)) ; then echo -n "Downloading packages in \"$1\"..." >&2 ; fi |
+ local pkgname |
+ reqpackages=() |
+ for pkgname in ${category_contents["$1"]} ; do |
+ if [[ "${reqpackages[$pkgname]}" != "present" ]] ; then |
+ download_package_dependences "$pkgname" "$2" |
+ fi |
+ seed["$pkgname"]="${seed[$pkgname]} $2" |
+ done |
+ if ((verbose)) ; then echo >&2 ; fi |
+} |
+ |
+download_all_packages() { |
+ # $1 - Section No |
+ local secname |
+ for secname in "${!category_contents[@]}" ; do |
+ if [ "$secname" != "_obsolete" ] ; then |
+ download_package "$secname" "$1" |
+ fi |
+ done |
+} |
+ |
+download_addon_packages() { |
+ # $1 - Start SectionN |
+ local insttype pkgname sectionN="$1" |
+ if ((verbose)) ; then echo -n "Downloading addon packages..." >&2 ; fi |
+ if [[ "$defpackage" = "Full" ]] ; then |
+ definsttype="$((sectionN-1))" |
+ fi |
+ local IFS=$'\n' |
+ for insttype in ` |
+ for insttype in "${!packages[@]}" ; do |
+ echo $insttype |
+ done | sort |
+ ` ; do |
+ if [[ "$defpackage" = "$insttype" ]] ; then |
+ definsttype="$sectionN" |
+ fi |
+ reqpackages=() |
+ IFS=$' \t\n' |
+ for pkgname in ${packages["$insttype"]} ; do |
+ if [[ "${reqpackages[$pkgname]}" != "present" ]] ; then |
+ download_package_dependences "$pkgname" "$sectionN" |
+ fi |
+ seed["$pkgname"]="${seed[$pkgname]} $sectionN" |
+ done |
+ ((sectionN++)) |
+ done |
+ if [[ "$defpackage" = "Minimal" ]] ; then |
+ definsttype="$sectionN" |
+ fi |
+ if ((verbose)) ; then echo >&2 ; fi |
+} |
+ |
+fill_required_packages() { |
+ if ((verbose)) ; then echo "Calculating dependences..." >&2 ; fi |
+ local pkgname subpkgname subsubpkgname check=1 |
+ while ((check)) ; do |
+ check=0 |
+ for pkgname in "${allinstalledpackages[@]}" ; do |
+ if ((verbose)) ; then echo "Package: \"$pkgname\"..." >&2 ; fi |
+ for subpkgname in ${requires["$pkgname"]} ; do |
+ for subsubpkgname in ${requires["$subpkgname"]} ; do |
+ if ! [[ " ${requires[$pkgname]} " = *" $subsubpkgname "* ]] ; then |
+ requires["$pkgname"]="${requires[$pkgname]} $subsubpkgname" |
+ check=1 |
+ fi |
+ done |
+ done |
+ done |
+ done |
+ for pkgname in "${allinstalledpackages[@]}" ; do |
+ for subpkgname in ${requires["$pkgname"]} ; do |
+ required["$subpkgname"]="${required[$subpkgname]} $pkgname" |
+ done |
+ done |
+} |
+ |
+fill_filetype_info() { |
+ local IFS=" |
+" |
+ # Corner cases: files created by post-install scripts, mistakes, etc |
+ filetype=([Cygwin.ico]="file" |
+ [bin]="directory" |
+ [usr/bin]="directory" |
+ [lib]="directory" |
+ [usr/lib]="directory" |
+ [bin/exim.exe]="file" |
+ [bin/latex.exe]="file" |
+ [lib/icu/current/Makefile.inc]="file" |
+ [lib/rpm/rpmv.exe]="file" |
+ [usr/sbin/sendmail]="file" |
+ [usr/share/man/man1/gcc.1.gz]="file" |
+ [usr/share/man/man1/g++.1.gz]="file" |
+ [usr/share/man/man1/g77.1.gz]="file" |
+ [usr/share/man/man1/mf.1]="file" |
+ [usr/share/terminfo/E/Eterm]="file" |
+ [usr/share/terminfo/N/NCR260VT300WPP0]="file") |
+ if ((verbose)) ; then echo "Scanning filetypes..." >&2 ; fi |
+ for name in ` |
+ for package in packages.unpacked/* ; do ( |
+ cd $package |
+ if ((verbose)) ; then echo "Archive: \"${package#*/}\"..." >&2 ; fi |
+ find -type f |
+ ) done |
+ ` ; do |
+ if [[ "${name:0:10}" = "./usr/bin/" ]] ; then |
+ filetype["bin/${name:10}"]="file" |
+ elif [[ "${name:0:10}" = "./usr/lib/" ]] ; then |
+ filetype["lib/${name:10}"]="file" |
+ else |
+ filetype["${name:2}"]="file" |
+ fi |
+ done |
+ for name in ` |
+ for package in packages.unpacked/* ; do ( |
+ cd $package |
+ if ((verbose)) ; then echo "Archive: \"${package#*/}\"..." >&2 ; fi |
+ find -type d |
+ ) done |
+ ` ; do |
+ if [[ "${name:0:10}" = "./usr/bin/" ]] ; then |
+ if [[ "bin/${filetype[${name:10}]}" = "file" ]] ; then |
+ echo "bin/${filetype[${name:10}]} - file and directory... oops?" >&2 |
+ exit 1 |
+ fi |
+ filetype["bin/${name:10}"]="directory" |
+ elif [[ "${name:0:10}" = "./usr/lib/" ]] ; then |
+ if [[ "lib/${filetype[${name:10}]}" = "file" ]] ; then |
+ echo "lib/${filetype[${name:10}]} - file and directory... oops?" >&2 |
+ exit 1 |
+ fi |
+ filetype["lib/${name:10}"]="directory" |
+ elif ((${#name}>1)) ; then |
+ if [[ "${filetype[${name:2}]}" = "file" ]] ; then |
+ echo "${filetype[${name:2}]} - file and directory... oops?" >&2 |
+ exit 1 |
+ fi |
+ filetype["${name:2}"]="directory" |
+ fi |
+ done |
+} |
+ |
+sanitize_var_name() { |
+ local varname="$1" |
+ varname="${varname//-/_}" |
+ varname="${varname//./_}" |
+ varname="${varname//+/X}" |
+ echo -n "$varname" |
+} |
+ |
+declare_nsis_variables() { |
+ local outlist |
+ local pkgname |
+ if ((verbose)) ; then echo "Declare NSIS variables..." >&2 ; fi |
+ if [[ "$defpackage" != "NONE" ]] ; then |
+ echo "InstType \"Full\"" |
+ for pkgname in "${!packages[@]}" ; do |
+ echo "InstType \"$pkgname\"" |
+ done | sort |
+ cat <<END |
+InstType "Minimal" |
+ |
+Var SVV_CmdLineParameters |
+Var SVV_InstType |
+Var SVV_SelChangeInProgress |
+ |
+!include "FileFunc.nsh" |
+ |
+END |
+ fi |
+ for pkgname in "${allinstalledpackages[@]}" ; do |
+ sanitized_name["$pkgname"]="`sanitize_var_name \"$pkgname\"`" |
+ outlist="$outlist |
+Var PKV_${sanitized_name[$pkgname]}" |
+ done |
+ echo "$outlist" | sort |
+ local secname |
+ for secname in "${!category_contents[@]}" ; do |
+ echo "$secname" |
+ done | sort | |
+ while read -r secname ; do |
+ local pkgname |
+ for pkgname in ${category_contents["$secname"]} ; do |
+ echo "$pkgname" |
+ done | sort | |
+ while read -r pkgname ; do |
+ if [[ "${allinstpackages[$pkgname]}" = "present" ]] ; then |
+ echo "Var sv_${secname}_${sanitized_name[$pkgname]}" |
+ fi |
+ done |
+ done | |
+ sort |
+} |
+ |
+generate_unpack_tarball_text() { |
+ # $1 - package to unpack |
+ echo " SetOutPath \$INSTDIR" |
+ local pkgname="$1" |
+ if [[ "$pkgname" != "" ]] ; then |
+ pkgname="`basename ${install[$pkgname]/.tar.bz2*/.tar.bz2}`" |
+ fi |
+ if [[ "$pkgname" != "" ]] ; then |
+ local pkgcontent="`tar tSvpf packages/$pkgname\"\" --numeric-owner`" |
+ local attrs uidgid size date time filename |
+ local -A createddirs |
+ createddirs[0]="done" |
+ echo "$pkgcontent" | grep "^[dhl-]" | |
+ while read -r attrs uidgid size date time filename ; do |
+ if [[ "${attrs:0:1}" = "h" ]] ; then |
+ filename="${filename%/* link to *}/" |
+ elif [[ "${attrs:0:1}" = "l" ]] ; then |
+ filename="${filename%/* -> *}/" |
+ elif [[ "${attrs:0:1}" = "-" ]] ; then |
+ if [[ "$filename" = */* ]] ; then |
+ filename="${filename%/*}/" |
+ else |
+ filename="" |
+ fi |
+ fi |
+ if [[ "$filename" = "usr/share/terminfo/e/" ]] ; then |
+ filename="usr/share/terminfo/E/" |
+ fi |
+ if [[ "${filename:0:8}" = "usr/bin/" ]] ; then |
+ filename="bin/${filename:8}" |
+ elif [[ "${filename:0:8}" = "usr/lib/" ]] ; then |
+ filename="lib/${filename:8}" |
+ fi |
+ if [[ "$filename" != "" ]] ; then |
+ filename="${filename:0:$((${#filename}-1))}" |
+ if [[ "${createddirs[$filename]}" != "done" ]] ; then |
+ echo " CreateDirectory \"\$INSTDIR\\${prefix[$1]}${filename//\//\\}\"" |
+ createddirs["$filename"]="done" |
+ fi |
+ fi |
+ done |
+ if [[ "$1" = "libgcj-common" ]] ; then |
+ echo " CreateDirectory \"\$INSTDIR\\${prefix[$1]}lib\\security\"" |
+ fi |
+ if [[ "$1" == "cygwin" ]] ; then |
+ echo " File \"/oname=Cygwin.ico\" \"setup\\Cygwin.ico\"" |
+ fi |
+ echo "$pkgcontent" | grep "^-" | |
+ while read -r attrs uidgid size date time filename ; do |
+ if [[ "$filename" != "usr/share/WindowMaker/Icons/DefaultAppIcon.tiff" ]] && |
+ [[ "$filename" != "usr/share/ri/1.8/system/Exception2MessageMapper/fail-i.yaml" ]] && |
+ [[ "$filename" != "usr/share/ri/1.8/system/REXML/Parsers/XPathParser/predicate-i.yaml" ]] ; then |
+ local fname |
+ if [[ "${filename:0:8}" = "usr/bin/" ]] ; then |
+ fname="bin/${filename:8}" |
+ elif [[ "${filename:0:8}" = "usr/lib/" ]] ; then |
+ fname="lib/${filename:8}" |
+ elif [[ "$filename" = "usr/share/terminfo/e/Eterm" ]] ; then |
+ fname="usr/share/terminfo/E/Eterm" |
+ else |
+ fname="$filename" |
+ fi |
+ fname="${fname//\//\\}" |
+ fname="${fname//\$/\$\$}" |
+ filename="${filename//\//\\}" |
+ echo " File \"/oname=${prefix[$1]}$fname\" \"packages.unpacked\\$pkgname\\$filename\"" |
+ fi |
+ done |
+ echo " File \"/oname=${prefix[coreutils]}etc\\setup\\$1.lst.gz\" \"setup\\$1.lst.gz\"" |
+ echo "$pkgcontent" | grep "^h" | |
+ while read -r attrs uidgid size date time filename ; do |
+ local linkname="${filename/ link to */}" |
+ local linktargetname="${filename/* link to /}" |
+ if [[ "${linkname:0:8}" = "usr/bin/" ]] ; then |
+ linkname="bin/${linkname:8}" |
+ elif [[ "${linkname:0:8}" = "usr/lib/" ]] ; then |
+ linkname="lib/${linkname:8}" |
+ fi |
+ if [[ "${linktargetname:0:8}" = "usr/bin/" ]] ; then |
+ linktargetname="bin/${linktargetname:8}" |
+ elif [[ "${linktargetname:0:8}" = "usr/lib/" ]] ; then |
+ linktargetname="lib/${linktargetname:8}" |
+ fi |
+ linkname="${linkname//\//\\}" |
+ linkname="${linkname//\$/\$\$}" |
+ linktargetname="${linktargetname//\//\\}" |
+ linktargetname="${linktargetname//\$/\$\$}" |
+ echo " MkLink::Hard \"\$INSTDIR\\${prefix[$1]}$linkname\" \"\$INSTDIR\\${prefix[$1]}$linktargetname\"" |
+ done |
+ echo "$pkgcontent" | grep "^l" | |
+ while read -r attrs uidgid size date time filename ; do |
+ local linkname="${filename/ -> */}" |
+ local linktargetname="${filename/* -> /}" |
+ if [[ "$linktargetname" = "/tmp/install/INSTALL/usr/share/doc/lynx/COPYHEADER" ]] ; then |
+ linktargetname="/usr/share/doc/lynx/COPYHEADER" |
+ elif [[ "$linktargetname" = "/tmp/install/INSTALL/usr/share/doc/lynx/COPYING" ]] ; then |
+ linktargetname="/usr/share/doc/lynx/COPYING" |
+ elif [[ "$linktargetname" = "../Cygwin/stunnel-4.29.README" ]] ; then |
+ linktargetname="../Cygwin/stunnel.README" |
+ elif [[ "$linktargetname" = "../../CHANGELOG" ]] && |
+ [[ "$linkname" = "usr/X11R6/share/tcm-2.20/help/CHANGELOG" ]] ; then |
+ linktargetname="../../doc/tcm-2.20/CHANGELOG" |
+ elif [[ "$linktargetname" = "../../COPYING" ]] && |
+ [[ "$linkname" = "usr/X11R6/share/tcm-2.20/help/COPYING" ]] ; then |
+ linktargetname="../../doc/tcm-2.20/COPYING" |
+ elif [[ "$linktargetname" = "mf-nowin.1" ]] && |
+ [[ "$linkname" = "usr/share/man/mf.1" ]] ; then |
+ linkname="usr/share/man/man1/mf.1" |
+ linktargetname="../../../X11R6/share/man/man1/mf.1" |
+ elif [[ "$linktargetname" = "../N/NCR260VT300WPP0" ]] ; then |
+ linktargetname="../N/NCR260VT300WPP0" |
+ elif [[ "$linkname" = "usr/share/terminfo/e/Eterm-color" ]] ; then |
+ linkname="usr/share/terminfo/E/Eterm-color" |
+ elif [[ "$linktargetname" = "../../include/qt3" ]] && |
+ [[ "$linkname" = "usr/lib/qt3/include" ]] ; then |
+ linktargetname= "../../usr/include/qt4" |
+ elif [[ "$linktargetname" = "../../include/qt4" ]] && |
+ [[ "$linkname" = "usr/lib/qt4/include" ]] ; then |
+ linktargetname= "../../usr/include/qt4" |
+ elif [[ "${linktargetname:0:2}" = "./" ]] ; then |
+ linktargetname="${linktargetname:2}" |
+ elif [[ "${linkname:0:8}" = "usr/bin/" ]] ; then |
+ linkname="bin/${linkname:8}" |
+ elif [[ "${linkname:0:8}" = "usr/lib/" ]] ; then |
+ linkname="lib/${linkname:8}" |
+ fi |
+ if [[ "${linkname%/*}/$linktargetname" = *//* ]] ; then |
+ linktargetname="/${linkname%/*}/$linktargetname" |
+ while [[ "$linktargetname" != //* ]] ; do |
+ linktargetname="${linktargetname%/*//*}//../${linktargetname#*//}" |
+ done |
+ linktargetname="${linktargetname:2}" |
+ fi |
+ local linktargetfile="/${linkname%/*}/$linktargetname" |
+ while [[ "$linktargetfile" = */../* ]] ; do |
+ local linktargetprefix="${linktargetfile%%/../*}" |
+ local linktargetsuffix="${linktargetfile#*/../}" |
+ linktargetfile="${linktargetprefix%/*}/$linktargetsuffix" |
+ done |
+ if [[ "${linktargetfile:0:9}" = "/usr/bin/" ]] ; then |
+ linktargetfile="bin/${linktargetfile:9}" |
+ elif [[ "${linktargetfile:0:9}" = "/usr/lib/" ]] ; then |
+ linktargetfile="lib/${linktargetfile:9}" |
+ else |
+ linktargetfile="${linktargetfile:1}" |
+ fi |
+ linkname="${linkname//\//\\}" |
+ linkname="${linkname//\$/\$\$}" |
+ if [[ "${filetype[$linktargetfile]}" = "file" ]] ; then |
+ linktargetname="${linktargetname//\//\\}" |
+ linktargetname="${linktargetname//\$/\$\$}" |
+ if [[ "${linkname:$((${#linkname}-4))}" = ".exe" ]] || |
+ [[ "${linktargetfile:$((${#linktargetfile}-4))}" != ".exe" ]] ; then |
+ echo " MkLink::SoftF \"\$INSTDIR\\${prefix[$1]}$linkname\" \"$linktargetname\"" |
+ else |
+ echo " MkLink::SoftF \"\$INSTDIR\\${prefix[$1]}$linkname.exe\" \"$linktargetname\"" |
+ fi |
+ elif [[ "${filetype[$linktargetfile.exe]}" = "file" ]] ; then |
+ linktargetname="${linktargetname//\//\\}" |
+ linktargetname="${linktargetname//\$/\$\$}" |
+ if [[ "${linkname:$((${#linkname}-4))}" = ".exe" ]] ; then |
+ echo " MkLink::SoftF \"\$INSTDIR\\${prefix[$1]}$linkname\" \"$linktargetname.exe\"" |
+ else |
+ echo " MkLink::SoftF \"\$INSTDIR\\${prefix[$1]}$linkname.exe\" \"$linktargetname.exe\"" |
+ fi |
+ elif [[ "${filetype[$linktargetfile]}" = "directory" ]] ; then |
+ linktargetname="${linktargetname//\//\\}" |
+ linktargetname="${linktargetname//\$/\$\$}" |
+ echo " MkLink::SoftD \"\$INSTDIR\\${prefix[$1]}$linkname\" \"$linktargetname\"" |
+ elif [ -f packages.unpacked/*/"$linktargetfile" ] ; then |
+ linktargetname="${linktargetname//\//\\}" |
+ linktargetname="${linktargetname//\$/\$\$}" |
+ if [[ "${linkname:$((${#linkname}-4))}" = ".exe" ]] || |
+ [[ "${linktargetfile:$((${#linktargetfile}-4))}" != ".exe" ]] ; then |
+ echo " MkLink::SoftF \"\$INSTDIR\\${prefix[$1]}$linkname\" \"$linktargetname\"" |
+ else |
+ echo " MkLink::SoftF \"\$INSTDIR\\${prefix[$1]}$linkname.exe\" \"$linktargetname\"" |
+ fi |
+ elif [ -d packages.unpacked/*/"$linktargetfile" ] ; then |
+ linktargetname="${linktargetname//\//\\}" |
+ linktargetname="${linktargetname//\$/\$\$}" |
+ echo " MkLink::SoftD \"\$INSTDIR\\${prefix[$1]}$linkname\" \"$linktargetname\"" |
+ elif [[ "$linktargetname" = "../share/webcheck/webcheck.py" ]] ; then |
+ echo " MkLink::SoftF \"\$INSTDIR\\${prefix[$1]}$linkname\" \"..\\share\\webcheck\\webcheck.py\"" |
+ else |
+ echo "Can not determine the type of link \"$linktargetname\"" >&2 |
+ exit 1 |
+ fi |
+ done |
+ echo "$pkgcontent" | |
+ grep "^-.............................................. etc/postinstall/.*\\.sh" | |
+ while read -r attrs uidgid size date time filename ; do |
+ cat <<END |
+ FileOpen \$R0 \$INSTDIR\\postinstall.sh a |
+ FileSeek \$R0 0 END |
+ FileWrite \$R0 "/$filename\$\n" |
+ FileClose \$R0 |
+END |
+ # If we have a postinstall script we need coreutils to execute it! |
+ if ! [[ " ${requires[$pkgname]} " = *" coreutils "* ]] ; then |
+ requires["$pkgname"]="${requires[$pkgname]} coreutils" |
+ fi |
+ if ! [[ " ${required[coreutils]} " = *" $pkgname "* ]] ; then |
+ required["coreutils"]="${requires[coreutils]} $pkgname" |
+ fi |
+ done |
+ cat <<END |
+ Push \$R0 |
+ FileOpen \$R0 \$INSTDIR\\etc\\setup\\installed.log a |
+ FileSeek \$R0 0 END |
+ FileWrite \$R0 "$1 $pkgname 0\$\n" |
+ FileClose \$R0 |
+ Pop \$R0 |
+END |
+ fi |
+} |
+ |
+generate_section_list() { |
+ if ((verbose)) ; then echo "Declaring unpack sections..." >&2 ; fi |
+ local secname |
+ for secname in "${!category_contents[@]}" ; do |
+ echo "$secname" |
+ done | sort | |
+ while read -r secname ; do |
+ local pkgname groupprint=1 |
+ for pkgname in ${category_contents["$secname"]} ; do |
+ echo "$pkgname" |
+ done | sort | |
+ { local groupprint=1 |
+ while read -r pkgname ; do |
+ if [[ "${allinstpackages[$pkgname]}" = "present" ]] ; then |
+ if ((groupprint)) ; then |
+ if [[ "$secname" != "_PostInstallLast" ]] && |
+ [[ "$secname" != "_obsolete" ]] ; then |
+ echo "SectionGroup \"$secname\" sec_$secname" |
+ groupprint=0 |
+ fi |
+ fi |
+ local insttar="${install[$pkgname]/.tar.bz2*/}" |
+ if [[ "$secname" = "_PostInstallLast" ]] || |
+ [[ "$secname" = "_obsolete" ]] ; then |
+ echo -n "Section \"-${insttar/*\//}\" " |
+ elif [[ " ${seed[$pkgname]} " == *" $definsttype "* ]] ; then |
+ echo -n "Section \"!${insttar/*\//}\" " |
+ else |
+ echo -n "Section \"${insttar/*\//}\" " |
+ fi |
+ echo "sec_${secname}_${sanitized_name[$pkgname]}" |
+ echo " SectionIn${sectionin[$pkgname]}" |
+ echo "SectionEnd" |
+ fi |
+ done |
+ if ((!groupprint)) ; then |
+ echo "SectionGroupEnd" |
+ fi |
+ } |
+ done |
+ for secname in "${allinstalledpackages[@]}" ; do |
+ if ((verbose)) ; then echo "Package "$secname"..." >&2 ; fi |
+ echo "Section \"\" sec_PKG_${sanitized_name[$secname]}" |
+ echo " SectionIn${sectionin[$secname]}" |
+ generate_unpack_tarball_text "$secname" |
+ echo "SectionEnd" |
+ done |
+ echo "!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN" |
+ for secname in "${!category_contents[@]}" ; do |
+ echo "$secname" |
+ done | sort | |
+ while read -r secname ; do |
+ local pkgname |
+ for pkgname in ${category_contents["$secname"]} ; do |
+ echo "$pkgname" |
+ done | sort | |
+ { local groupprint=1 |
+ while read -r pkgname ; do |
+ if [[ "${allinstpackages[$pkgname]}" = "present" ]] ; then |
+ if ((groupprint)) ; then |
+ if [[ "$secname" != "_PostInstallLast" ]] && |
+ [[ "$secname" != "_obsolete" ]] ; then |
+ echo " !insertmacro MUI_DESCRIPTION_TEXT \${sec_$secname} \"\"" |
+ groupprint=0 |
+ fi |
+ fi |
+ echo -n " !insertmacro MUI_DESCRIPTION_TEXT \${" |
+ echo -n "sec_${secname}_${sanitized_name[$pkgname]}} " |
+ # Modern UI does not like long descriptions |
+ #if [ "${sdesc[$pkgname]}" != "" ] ; then |
+ #echo "${ldesc[$pkgname]}" |
+ #else |
+ echo "${sdesc[$pkgname]}" |
+ #fi |
+ fi |
+ done |
+ } |
+ done |
+ echo "!insertmacro MUI_FUNCTION_DESCRIPTION_END" |
+} |
+ |
+generate_init_function() { |
+ # $1 - Section number for first options (others should follow) |
+ if ((verbose)) ; then echo "Declaring .onInit function..." >&2 ; fi |
+ echo "Function .onInit" |
+ if [[ "$defpackage" != "NONE" ]] ; then |
+ echo " StrCpy \$SVV_InstType $(($definsttype-1))" |
+ echo " StrCpy \$SVV_SelChangeInProgress 0" |
+ fi |
+ local pkgname |
+ for pkgname in "${allinstalledpackages[@]}" ; do |
+ if [[ " ${seed[$pkgname]} " == *" $definsttype "* ]] ; then |
+ echo " StrCpy \$PKV_${sanitized_name[$pkgname]} 9" |
+ elif [[ " ${sectionin[$pkgname]} " == *" $definsttype "* ]] ; then |
+ echo " StrCpy \$PKV_${sanitized_name[$pkgname]} 1" |
+ else |
+ echo " StrCpy \$PKV_${sanitized_name[$pkgname]} 0" |
+ fi |
+ done |
+ local secname |
+ for secname in "${!category_contents[@]}" ; do |
+ echo "$secname" |
+ done | sort | |
+ while read -r secname ; do |
+ local pkgname |
+ for pkgname in ${category_contents["$secname"]} ; do |
+ echo "$pkgname" |
+ done | sort | |
+ while read -r pkgname ; do |
+ if [[ "${allinstpackages[$pkgname]}" = "present" ]] ; then |
+ if [[ " ${sectionin[$pkgname]} " == *" $definsttype "* ]] ; then |
+ echo " StrCpy \$sv_${secname}_${sanitized_name[$pkgname]} 1" |
+ else |
+ echo " StrCpy \$sv_${secname}_${sanitized_name[$pkgname]} 0" |
+ fi |
+ fi |
+ done |
+ done |
+ if [[ "$defpackage" != "NONE" ]] ; then |
+ if ((definsttype!=1)) ; then |
+ echo " SetCurInstType $((definsttype-1))" |
+ fi |
+ fi |
+ cat <<END |
+ \${GetParameters} \$SVV_CmdLineParameters |
+ Push \$R0 |
+ ClearErrors |
+ \${GetOptions} \$cmdLineParams "/?" \$R0 |
+ IfErrors +1 HelpMessage |
+ \${GetOptions} \$cmdLineParams "--help" \$R0 |
+ IfErrors +3 +1 |
+HelpMessage: |
+END |
+ echo -n " MessageBox MB_OK \"Recognized common options:" |
+ echo -n "\$\\n /D=InstDir - use InstDir as target instead of usual \$INSTDIR" |
+ echo -n "\$\\n /NCRC - disables the CRC check" |
+ echo -n "\$\\n /S - Silent install" |
+ if [[ "$defpackage" != "NONE" ]] ; then |
+ local insttype line |
+ echo -n "\$\\nRecognized install type options:" |
+ echo -n "\$\\n /FULL - Install all availabile packages" |
+ for insttype in "${!packages[@]}" ; do |
+ echo "\$\\n /`echo \"$insttype\" | tr 'a-z' 'A-Z'` - ${description[$insttype]}" |
+ done | sort | |
+ while read -r line ; do |
+ echo -n "$line" |
+ done |
+ echo -n "\$\\n /MINIMAL - Install only packages from \$\\\"Base\$\\\" category" |
+ fi |
+ echo "\"" |
+ echo " Abort" |
+ if [[ "$defpackage" != "NONE" ]] ; then |
+ local sectionN="$(($1-1))" |
+ local IFS=$'\n' |
+ for insttype in ` |
+ echo "Full" |
+ for insttype in "${!packages[@]}" ; do |
+ echo $insttype |
+ done | sort |
+ echo "Minimal" |
+ ` ; do |
+ echo " \${GetOptions} \$cmdLineParams \"/`echo \"$insttype\" | tr 'a-z' 'A-Z'`\" \$R0" |
+ echo " IfErrors No_$insttype +1" |
+ echo " StrCpy \$SVV_InstType $((sectionN-1))" |
+ for pkgname in "${allinstalledpackages[@]}" ; do |
+ if [[ " ${seed[$pkgname]} " == *" $sectionN "* ]] ; then |
+ echo " StrCpy \$PKV_${sanitized_name[$pkgname]} 9" |
+ elif [[ " ${sectionin[$pkgname]} " == *" $sectionN "* ]] ; then |
+ echo " StrCpy \$PKV_${sanitized_name[$pkgname]} 1" |
+ else |
+ echo " StrCpy \$PKV_${sanitized_name[$pkgname]} 0" |
+ fi |
+ done |
+ for secname in "${!category_contents[@]}" ; do |
+ echo "$secname" |
+ done | sort | |
+ while read -r secname ; do |
+ local pkgname |
+ for pkgname in ${category_contents["$secname"]} ; do |
+ echo "$pkgname" |
+ done | sort | |
+ while read -r pkgname ; do |
+ if [[ "${allinstpackages[$pkgname]}" = "present" ]] ; then |
+ if [[ " ${sectionin[$pkgname]} " == *" $sectionN "* ]] ; then |
+ echo " StrCpy \$sv_${secname}_${sanitized_name[$pkgname]} 1" |
+ else |
+ echo " StrCpy \$sv_${secname}_${sanitized_name[$pkgname]} 0" |
+ fi |
+ fi |
+ done |
+ done |
+ for pkgname in "${allinstalledpackages[@]}" ; do |
+ if [[ " ${seed[$pkgname]} " == *" $sectionN "* ]] ; then |
+ echo " SectionSetFlags \${sec_PKG_${sanitized_name[$pkgname]}} 9" |
+ elif [[ " ${sectionin[$pkgname]} " == *" $sectionN "* ]] ; then |
+ echo " SectionSetFlags \${sec_PKG_${sanitized_name[$pkgname]}} 1" |
+ else |
+ echo " SectionSetFlags \${sec_PKG_${sanitized_name[$pkgname]}} 0" |
+ fi |
+ done |
+ for secname in "${!category_contents[@]}" ; do |
+ echo "$secname" |
+ done | sort | |
+ while read -r secname ; do |
+ local pkgname |
+ for pkgname in ${category_contents["$secname"]} ; do |
+ echo "$pkgname" |
+ done | sort | |
+ while read -r pkgname ; do |
+ if [[ "${allinstpackages[$pkgname]}" = "present" ]] ; then |
+ if [[ " ${seed[$pkgname]} " == *" $sectionN "* ]] ; then |
+ echo " SectionSetFlags \${sec_${secname}_${sanitized_name[$pkgname]}} 9" |
+ elif [[ " ${sectionin[$pkgname]} " == *" $sectionN "* ]] ; then |
+ echo " SectionSetFlags \${sec_${secname}_${sanitized_name[$pkgname]}} 1" |
+ else |
+ echo " SectionSetFlags \${sec_${secname}_${sanitized_name[$pkgname]}} 0" |
+ fi |
+ fi |
+ done |
+ done |
+ echo " SetCurInstType $((sectionN-1))" |
+ echo "No_$insttype:" |
+ ((sectionN++)) |
+ done |
+ fi |
+ echo " Pop \$R0" |
+ echo "FunctionEnd" |
+} |
+ |
+generate_onselchange_function(){ |
+ if ((verbose)) ; then echo "Declaring .onSelChange function..." >&2 ; fi |
+ cat <<END |
+Function .onSelChange |
+ IntCmp \$SVV_SelChangeInProgress 0 +1 L1_SelChangeInProgress L1_SelChangeInProgress |
+ StrCpy \$SVV_SelChangeInProgress 1 |
+ Push \$R0 |
+ Push \$R1 |
+END |
+ if [[ "$defpackage" != "NONE" ]] ; then |
+ cat <<END |
+ Push \$R2 |
+ GetCurInstType \$R0 |
+ StrCpy \$R2 0 |
+ IntCmp \$R0 \$SVV_InstType +4 +1 +1 |
+ StrCpy \$SVV_InstType \$R0 |
+ IntCmp \$R0 \${NSIS_MAX_INST_TYPES} +2 +1 +1 |
+ StrCpy \$R2 1 |
+END |
+ fi |
+ # sv_XXX/PKV_XXX variables contain information about previous state of affairs |
+ # Note: there are three states - 0 (not to be installed), 9 (to be installed) |
+ # and 1 (will be installed because some other package needs it). |
+ # First we check is some packages were deselected and remove all packages |
+ # which can not be installed now. |
+ local secname pkgname subpkgname |
+ for secname in "${!category_contents[@]}" ; do |
+ echo "$secname" |
+ done | sort | |
+ while read -r secname ; do |
+ local pkgname |
+ for pkgname in ${category_contents["$secname"]} ; do |
+ echo "$pkgname" |
+ done | sort | |
+ while read -r pkgname ; do |
+ if ((verbose)) ; then echo "Read state: \"$pkgname\"..." >&2 ; fi |
+ if [[ "${allinstpackages[$pkgname]}" = "present" ]] ; then |
+ local PKV_name="PKV_${sanitized_name[$pkgname]}" |
+ local sc_name="${secname}_${sanitized_name[$pkgname]}" |
+ echo " SectionGetFlags \${sec_$sc_name} \$R0" |
+ echo " IntOp \$R1 \$R0 & \${SF_SELECTED}" |
+ echo " IntCmp \$sv_$sc_name \$R1 L3_$sc_name" |
+ echo " IntCmp \$sv_$sc_name 0 L1_$sc_name" |
+ echo " StrCpy \$$PKV_name 0" |
+ for subpkgname in ${required["$pkgname"]} ; do |
+ if [[ "${allinstpackages[$subpkgname]}" = "present" ]] ; then |
+ echo " StrCpy \$PKV_${sanitized_name[$subpkgname]} 0" |
+ fi |
+ done |
+ echo " Goto L3_$sc_name" |
+ echo "L1_$sc_name:" |
+ if [[ "$defpackage" != "NONE" ]] ; then |
+ echo " IntCmp \$R2 0 L2_$sc_name +1 +1" |
+ for subpkgname in ${seed["$pkgname"]} ; do |
+ echo " IntCmp \$SVV_InstType $((subpkgname-1)) L2_$sc_name +1 +1" |
+ done |
+ echo " GoTo L3_$sc_name" |
+ echo "L2_$sc_name:" |
+ fi |
+ echo " StrCpy \$$PKV_name 9" |
+ echo "L3_$sc_name:" |
+ fi |
+ done |
+ done |
+ # Now we mark all packages which can be installed or not installed as |
+ # not-installed |
+ for pkgname in "${allinstalledpackages[@]}" ; do |
+ echo " IntCmp \$PKV_${sanitized_name[$pkgname]} 9 +2 +1 +2" |
+ echo " StrCpy \$PKV_${sanitized_name[$pkgname]} 0" |
+ done |
+ # Put the dependences back |
+ for pkgname in "${allinstalledpackages[@]}" ; do |
+ if ((verbose)) ; then echo "Set state: \"$pkgname\"..." >&2 ; fi |
+ echo " IntCmp \$PKV_${sanitized_name[$pkgname]} 9 +1 L4_${sanitized_name[$pkgname]} +1" |
+ for subpkgname in ${requires["$pkgname"]} ; do |
+ echo " IntCmp \$PKV_${sanitized_name[$subpkgname]} 9 +2 +1 +2" |
+ echo " StrCpy \$PKV_${sanitized_name[$subpkgname]} 1" |
+ done |
+ echo "L4_${sanitized_name[$pkgname]}:" |
+ done |
+ # Copy the calculated new state to the screen |
+ for pkgname in "${allinstalledpackages[@]}" ; do |
+ echo " SectionSetFlags \${sec_PKG_${sanitized_name[$pkgname]}} \$PKV_${sanitized_name[$pkgname]}" |
+ done |
+ for secname in "${!category_contents[@]}" ; do |
+ echo "$secname" |
+ done | sort | |
+ while read -r secname ; do |
+ local pkgname |
+ for pkgname in ${category_contents["$secname"]} ; do |
+ echo "$pkgname" |
+ done | sort | |
+ while read -r pkgname ; do |
+ if [[ "${allinstpackages[$pkgname]}" = "present" ]] ; then |
+ echo " IntOp \$sv_${secname}_${sanitized_name[$pkgname]} \$PKV_${sanitized_name[$pkgname]} & 1" |
+ echo " SectionSetFlags \${sec_${secname}_${sanitized_name[$pkgname]}} \$PKV_${sanitized_name[$pkgname]}" |
+ fi |
+ done |
+ done |
+ if [[ "$defpackage" != "NONE" ]] ; then |
+ echo " Pop \$R2" |
+ fi |
+ cat <<END |
+ Pop \$R1 |
+ Pop \$R0 |
+ StrCpy \$SVV_SelChangeInProgress 0 |
+L1_SelChangeInProgress: |
+FunctionEnd |
+END |
+} |
Property changes on: tools/hermetic_cygwin/make_installer.inc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |