forked from Imagelibrary/rtems
* filewrite.nsi, getparameters.nsi, instance-check.nsi,
mingw-path.nsi, sm-dummy.nsi, strslash.nsi, strstr.nsi,
options.nsi: Added the shared between the 2 installer scripts.
* msys-path.nsi: Fixed the last LF bug.
* rtems-autotools.nsi, rtems-tools.nsi: Fixed the instance check,
added a start menu, remove pages from target installers.
* rtems.ini: Fixed the URL links. Added support link.
* rtems_logo.bmp: Trimmed a little more to get a better image.
* ba-wrap.sh: Stop on a error.
* build-exes.sh: Use the option parameter variables. Change the
order the section appear in the installer.
507 lines
12 KiB
Bash
Executable File
507 lines
12 KiB
Bash
Executable File
#! /bin/sh
|
|
#
|
|
# $Id$
|
|
#
|
|
# RTEMS Build Executable Installers script.
|
|
#
|
|
# This script takes the RPM files built using the mingw/build-rpms.sh
|
|
# script.
|
|
#
|
|
|
|
echo $0 $*
|
|
|
|
source=$(dirname $0)
|
|
|
|
terminate()
|
|
{
|
|
echo "error: $*" >&2
|
|
exit 1
|
|
}
|
|
|
|
check()
|
|
{
|
|
if [ $? -ne 0 ]; then
|
|
terminate
|
|
fi
|
|
}
|
|
|
|
. $source/version
|
|
|
|
target_list=$(cat $source/targets)
|
|
|
|
. $source/target-section-text
|
|
|
|
mingw32_cpu_list="i686"
|
|
|
|
rpm_topdir=$(rpm --eval "%{_topdir}")
|
|
|
|
rtems_url="http://www.rtems.org/ftp/pub/rtems/windows/${version}/build-${tool_build}"
|
|
|
|
common_label="common"
|
|
local_rpm_database=yes
|
|
targets=$target_list
|
|
run_prefix=
|
|
relocation=
|
|
rpm_install=yes
|
|
|
|
package_source=$(cat $HOME/.rpmmacros | grep "^%_topdir" | sed -e "s/^.* //g")/SOURCES
|
|
|
|
if [ "$source" = "." ]; then
|
|
source=$(pwd)
|
|
fi
|
|
|
|
while [ $# -gt 0 ];
|
|
do
|
|
case $1 in
|
|
-d)
|
|
set -x
|
|
;;
|
|
-i)
|
|
rpm_install=no
|
|
;;
|
|
-l)
|
|
shift
|
|
rpm_prefix=$1-
|
|
rpm_prefix_arg="--enable-rpmprefix=$rpm_label"
|
|
;;
|
|
-n)
|
|
run_prefix="echo "
|
|
;;
|
|
-p)
|
|
shift
|
|
prefix=$1
|
|
;;
|
|
-R)
|
|
local_rpm_database=no
|
|
;;
|
|
-r)
|
|
shift
|
|
relocation=$1
|
|
;;
|
|
-t)
|
|
shift
|
|
targets=$1
|
|
;;
|
|
-v)
|
|
shift
|
|
version=$1
|
|
;;
|
|
--help)
|
|
echo "$0 -??"
|
|
exit 2
|
|
;;
|
|
*)
|
|
terminate "error: invalid option (try --help): $1"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
cd=${run_prefix}cd
|
|
cp=${run_prefix}cp
|
|
make=${run_prefix}make
|
|
makensis=${run_prefix}makensis
|
|
mkdir=${run_prefix}mkdir
|
|
rm=${run_prefix}rm
|
|
rpmbuild=${run_prefix}rpmbuild
|
|
rpm=${run_prefix}rpm
|
|
|
|
if [ -z "$relocation" ]; then
|
|
terminate "error: a relocation path needs to be specified"
|
|
fi
|
|
|
|
if [ $local_rpm_database = yes ]; then
|
|
rpm_database="--dbpath $prefix/var/lib/rpm"
|
|
else
|
|
rpm_database=
|
|
fi
|
|
|
|
#
|
|
# Get the RPM list given the architecture and the package.
|
|
#
|
|
# $1 - architecture
|
|
# $2 - package
|
|
#
|
|
get_rpm_list()
|
|
{
|
|
if [ -d $rpm_topdir/mingw32/RPMS/$1 ]; then
|
|
echo $(ls $rpm_topdir/mingw32/RPMS/$1/*.rpm | grep -v "debuginfo" | grep $2)
|
|
fi
|
|
}
|
|
|
|
#
|
|
# Write target installer code.
|
|
#
|
|
# $1 - target
|
|
# $2 - target section test
|
|
# $3 - size of the tools
|
|
# $4 - Installer output file name
|
|
# $5 - Output file
|
|
#
|
|
target_installer_exec()
|
|
{
|
|
local t=$1
|
|
local tst=$2
|
|
local size_in_k=$3
|
|
local outfile=$4
|
|
local of=$5
|
|
|
|
echo "" >> $of
|
|
echo "; Target: $t" >> $of
|
|
echo "Section \"${!tst}\" Section_$t" >> $of
|
|
echo " AddSize $size_in_k" >> $of
|
|
echo " StrCpy \$1 \$EXEDIR\\$outfile" >> $of
|
|
echo " DetailPrint \"Checking for \$1\"" >> $of
|
|
echo " IfFileExists \$1 ${t}_found" >> $of
|
|
echo " StrCpy \$1 \$INSTDIR\\Packages\\$outfile" >> $of
|
|
echo " DetailPrint \"Checking for \$1\"" >> $of
|
|
echo " IfFileExists \$1 ${t}_found" >> $of
|
|
echo " SetOutPath \"\$INSTDIR\Packages\"" >> $of
|
|
echo " DetailPrint \"Downloading $rtems_url/$outfile\"" >> $of
|
|
echo " NSISdl::download $rtems_url/$outfile $outfile" >> $of
|
|
echo " Pop \$R0" >> $of
|
|
echo " StrCmp \$R0 \"success\" ${t}_found_2 ${t}_not_found_2" >> $of
|
|
echo " ${t}_not_found_2:" >> $of
|
|
echo " SetDetailsView show" >> $of
|
|
echo " DetailPrint \"Download failed: \$R0\"" >> $of
|
|
echo " MessageBox MB_OK \"Download failed: \$R0\"" >> $of
|
|
echo " Goto ${t}_done" >> $of
|
|
echo " ${t}_found_2:" >> $of
|
|
echo " Strcpy \$1 \"\$INSTDIR\\Packages\\$outfile\"" >> $of
|
|
echo " ${t}_found:" >> $of
|
|
echo " DetailPrint \"Installing: \$1\"" >> $of
|
|
echo " ExecWait '\"\$1\" \$SilentOption \$DebugOption /D=\$INSTDIR' \$0" >> $of
|
|
echo " BringToFront" >> $of
|
|
echo " IntCmp \$0 0 +3" >> $of
|
|
echo " MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 \"${!tst} install failed. Do you wish to continue ?\" IDYES +2" >> $of
|
|
echo " Abort" >> $of
|
|
echo " ${t}_done:" >> $of
|
|
echo "SectionEnd" >> $of
|
|
}
|
|
|
|
#
|
|
# Get the size if kilo-bytes of the package as the listed files.
|
|
#
|
|
# $1 - relocation directory of installed files.
|
|
#
|
|
get_size_in_k()
|
|
{
|
|
if [ ! -d $1 ]; then
|
|
terminate "target directory not found: $1"
|
|
fi
|
|
if [ ! -f $1/files.txt ]; then
|
|
terminate "target files not found: $1/files.txt"
|
|
fi
|
|
|
|
local here=$(pwd)
|
|
check "getting the current directory"
|
|
cd $1
|
|
check "changing directory: $1"
|
|
|
|
local size_in_k=$(du -c -k $(cat files.txt) | grep total | sed -e "s/\t.*//g")
|
|
check "getting total size"
|
|
|
|
cd $here
|
|
check "changing directory: $here"
|
|
|
|
echo $size_in_k
|
|
}
|
|
|
|
#
|
|
# Create the installer given the architecture and package.
|
|
#
|
|
# $1 - architecture/processor
|
|
# $2 - package
|
|
# $3 - package name
|
|
# $4 - outfile
|
|
#
|
|
create_installer()
|
|
{
|
|
local p=$1
|
|
local t=$2
|
|
local n=$3
|
|
local outfile=$4
|
|
|
|
rpm_options="--ignoreos --force --nodeps --noorder "
|
|
|
|
rpms=$(get_rpm_list $p $t)
|
|
check "getting the $n RPM list"
|
|
|
|
if [ -n "$rpms" ]; then
|
|
treloc=$relocation/$n
|
|
echo "Relocation path: $treloc"
|
|
|
|
if [ $rpm_install = yes ]; then
|
|
echo "Clean the relocation directory: $treloc"
|
|
$rm -rf $treloc
|
|
check "removing the relocation directory: $treloc"
|
|
|
|
for r in $rpms
|
|
do
|
|
echo "rpm $rpm_database --relocate $prefix=$treloc $rpm_options -i $r"
|
|
$rpm $rpm_database --relocate $prefix=$treloc $rpm_options -i $r
|
|
check "installing rpm: $r"
|
|
done
|
|
fi
|
|
|
|
files=$(find $treloc -type f -a -not \( -name \*.gch \
|
|
-o -name rtems.nsi \
|
|
-o -name rtems-files.nsi \
|
|
-o -name rtems.ini \
|
|
-o -name files.txt \) | \
|
|
sed -e "s/^$(echo ${treloc} | sed 's/\//\\\//g')//" -e "s/^\///" | sort)
|
|
check "find the file list"
|
|
|
|
echo "$files" > $treloc/files.txt
|
|
check "write the file list"
|
|
|
|
size_in_k=$(get_size_in_k $treloc)
|
|
|
|
of=$treloc/rtems-files.nsi
|
|
|
|
echo "!macro RTEMS_INSTALL_FILES" > $of
|
|
echo " !ifndef EMPTY_INSTALLER" >> $of
|
|
|
|
install_dir=
|
|
|
|
for f in $files
|
|
do
|
|
d=$(dirname $f)
|
|
if [ "$install_dir" != "$d" ]; then
|
|
id=$(echo $d | sed -e 's/\//\\/g' -e 's/\/$//')
|
|
echo " SetOutPath \"\$INSTDIR\\$id\"" >> $of
|
|
install_dir=$d
|
|
fi
|
|
echo " File \"$treloc/$f\"" >> $of
|
|
done
|
|
|
|
echo " !endif" >> $of
|
|
echo "!macroend" >> $of
|
|
|
|
echo "!macro RTEMS_DELETE_FILES" >> $of
|
|
echo " !ifndef EMPTY_INSTALLER" >> $of
|
|
|
|
#
|
|
# Get a list of directories so we can delete them once all
|
|
# the files have been deleted. We need to be selective as
|
|
# the directory maybe used by another installer.
|
|
#
|
|
# Once we get a list we need to also add the path down
|
|
# to that node and then sort them so we work from bottom up.
|
|
#
|
|
|
|
remove_dirs=
|
|
|
|
for f in $files
|
|
do
|
|
d=$(dirname $f)
|
|
found=no
|
|
for rd in $remove_dirs
|
|
do
|
|
if [ "$d" = "$rd" ]; then
|
|
found=yes
|
|
break;
|
|
fi
|
|
done
|
|
if [ $found = no ]; then
|
|
remove_dirs="$remove_dirs $d"
|
|
fi
|
|
rf=$(echo $f | sed -e 's/\//\\/g' -e 's/\/$//')
|
|
echo " Delete \"\$INSTDIR\\$rf\"" >> $of
|
|
done
|
|
|
|
for d in $remove_dirs
|
|
do
|
|
while [ $d != . ]
|
|
do
|
|
found=no
|
|
for rd in $remove_dirs
|
|
do
|
|
if [ "$d" = "$rd" ]; then
|
|
found=yes
|
|
break
|
|
fi
|
|
done
|
|
if [ $found = no ]; then
|
|
remove_dirs="$remove_dirs $d"
|
|
fi
|
|
d=$(dirname $d)
|
|
done
|
|
done
|
|
|
|
remove_dirs=$(for r in $remove_dirs; do echo $r; done | sort -r -u)
|
|
|
|
for d in $remove_dirs
|
|
do
|
|
if [ "$d" = "." ]; then
|
|
d=
|
|
fi
|
|
rd=$(echo $d | sed -e 's/\//\\/g' -e 's/\/$//')
|
|
echo " RMDir \"\$INSTDIR\\$rd\"" >> $of
|
|
done
|
|
|
|
echo " !endif" >> $of
|
|
echo "!macroend" >> $of
|
|
|
|
rtems_binary=$rpm_topdir/mingw32/exe/$p
|
|
echo "mkdir -p $rtems_binary"
|
|
$mkdir -p $rtems_binary
|
|
check "make the RTEMS binary install point: $rtems_binary"
|
|
|
|
of=$treloc/rtems.nsi
|
|
echo "!define RTEMS_TARGET \"$n\"" > $of
|
|
echo "!define RTEMS_VERSION \"$version\"" >> $of
|
|
echo "!define RTEMS_BUILD_VERSION \"$tool_build\"" >> $of
|
|
echo "!define RTEMS_PREFIX \"rtems-tools\"" >> $of
|
|
echo "!define RTEMS_SOURCE \"$source\"" >> $of
|
|
echo "!define RTEMS_RELOCATION \"$treloc\"" >> $of
|
|
echo "!define RTEMS_LOGO \"$source/rtems_logo.bmp\"" >> $of
|
|
echo "!define RTEMS_BINARY \"$rtems_binary\"" >> $of
|
|
echo "!define RTEMS_LICENSE_FILE \"$source/rtems-license.rtf\"" >> $of
|
|
echo "!define RTEMS_OUTFILE \"$outfile\"" >> $of
|
|
echo "!define TOOL_PREFIX \"$prefix\"" >> $of
|
|
echo "!define RTEMS_TOOLS_SIZE \"$size_in_k\"" >> $of
|
|
|
|
if [ $n = $common_label ]; then
|
|
echo "!define COMMON_FILES" >> $of
|
|
fi
|
|
|
|
echo "!include \"$treloc/rtems-files.nsi\"" >> $of
|
|
echo "!include \"$source/options.nsi\"" >> $of
|
|
|
|
if [ $n = $common_label ]; then
|
|
echo "!include \"$relocation/rtems-sections.nsi\"" >> $of
|
|
fi
|
|
|
|
echo "!include \"$source/rtems-tools.nsi\"" >> $of
|
|
|
|
echo "cp $source/rtems.ini $treloc/rtems.ini"
|
|
$cp $source/rtems.ini $treloc/rtems.ini
|
|
check "coping the dialog definition file: $treloc/rtems.ini"
|
|
|
|
if [ $n = $common_label ]; then
|
|
echo "Section -SecCommon" >> $of
|
|
echo " SetOutPath \"\$INSTDIR"\" >> $of
|
|
echo " File \"\${RTEMS_SOURCE}/AUTHORS"\" >> $of
|
|
echo " File \"\${RTEMS_SOURCE}/COPYING\"" >> $of
|
|
echo " File \"\${RTEMS_SOURCE}/README\"" >> $of
|
|
echo "SectionEnd" >> $of
|
|
fi
|
|
|
|
echo "makensis $of"
|
|
$makensis $of
|
|
check "making the installer: $of"
|
|
|
|
fi
|
|
}
|
|
|
|
create_autotools_installer()
|
|
{
|
|
local p=$1
|
|
local t=$2
|
|
local n=$3
|
|
|
|
treloc=$relocation/$n
|
|
echo "Relocation path: $treloc"
|
|
|
|
echo "Clean the relocation directory: $treloc"
|
|
$rm -rf $treloc
|
|
check "removing the relocation directory: $treloc"
|
|
mkdir -p $treloc
|
|
check "creating relocation directory: $treloc"
|
|
|
|
rtems_binary=$rpm_topdir/mingw32/exe/$p
|
|
echo "mkdir -p $rtems_binary"
|
|
$mkdir -p $rtems_binary
|
|
check "make the RTEMS binary install point: $rtems_binary"
|
|
|
|
size_in_k=2000
|
|
|
|
outfile=rtems$version-tools-$n-$tool_build.exe
|
|
|
|
of=$treloc/rtems.nsi
|
|
echo "!define RTEMS_TARGET \"$n\"" > $of
|
|
echo "!define RTEMS_VERSION \"$version\"" >> $of
|
|
echo "!define RTEMS_BUILD_VERSION \"$tool_build\"" >> $of
|
|
echo "!define RTEMS_PREFIX \"rtems-tools\"" >> $of
|
|
echo "!define RTEMS_SOURCE \"$source\"" >> $of
|
|
echo "!define RTEMS_PACKAGE_SOURCE \"$package_source\"" >> $of
|
|
echo "!define RTEMS_LOGO \"$source/rtems_logo.bmp\"" >> $of
|
|
echo "!define RTEMS_BINARY \"$rtems_binary\"" >> $of
|
|
echo "!define RTEMS_LICENSE_FILE \"$source/rtems-license.rtf\"" >> $of
|
|
echo "!define RTEMS_OUTFILE \"$outfile\"" >> $of
|
|
echo "!define TOOL_PREFIX \"$prefix\"" >> $of
|
|
echo "!define RTEMS_TOOLS_SIZE \"$size_in_k\"" >> $of
|
|
|
|
. $source/autoconf.def
|
|
|
|
echo "!define RTEMS_AUTOCONF \"$package_name\"" >> $of
|
|
echo "!define RTEMS_AUTOCONF_SOURCE \"$package_source\"" >> $of
|
|
echo "!macro RTEMS_AUTOCONF_PATCHES" >> $of
|
|
for p in $package_patches
|
|
do
|
|
echo " File \"\${RTEMS_PACKAGE_SOURCE}/$p\"" >> $of
|
|
done
|
|
echo "!macroend" >> $of
|
|
|
|
echo "!macro RTEMS_DELETE_AUTOCONF_PATCHES" >> $of
|
|
for p in $package_patches
|
|
do
|
|
echo " Delete \"\$INSTDIR\\Packages\\Source\\$p\"" >> $of
|
|
done
|
|
echo "!macroend" >> $of
|
|
|
|
. $source/automake.def
|
|
|
|
echo "!define RTEMS_AUTOMAKE \"$package_name\"" >> $of
|
|
echo "!define RTEMS_AUTOMAKE_SOURCE \"$package_source\"" >> $of
|
|
echo "!macro RTEMS_AUTOMAKE_PATCHES" >> $of
|
|
for p in $package_patches
|
|
do
|
|
echo " File \"\${RTEMS_PACKAGE_SOURCE}/$p\"" >> $of
|
|
done
|
|
echo "!macroend" >> $of
|
|
|
|
echo "!macro RTEMS_DELETE_AUTOMAKE_PATCHES" >> $of
|
|
for p in $package_patches
|
|
do
|
|
echo " Delete \"\$INSTDIR\\Packages\\Source\\$p\"" >> $of
|
|
done
|
|
echo "!macroend" >> $of
|
|
|
|
echo "!include \"$source/rtems-autotools.nsi\"" >> $of
|
|
|
|
echo "cp $source/rtems.ini $treloc/rtems.ini"
|
|
$cp $source/rtems.ini $treloc/rtems.ini
|
|
check "coping the dialog definition file: $treloc/rtems.ini"
|
|
|
|
echo "makensis $of"
|
|
$makensis $of
|
|
check "making the installer: $of"
|
|
}
|
|
|
|
#
|
|
# Handle each type of host processor.
|
|
#
|
|
for p in $mingw32_cpu_list
|
|
do
|
|
echo "; Components based on each target." > $relocation/rtems-sections.nsi
|
|
create_autotools_installer noarch auto autotools
|
|
target_installer_exec auto auto_section_text 2000 \
|
|
rtems$version-tools-autotools-$tool_build.exe \
|
|
$relocation/rtems-sections.nsi
|
|
for t in $targets
|
|
do
|
|
create_installer $p $t $t rtems$version-tools-$t-$tool_build.exe
|
|
done
|
|
for t in $(cat $source/targets)
|
|
do
|
|
target_installer_exec $t ${t}_section_text \
|
|
$(get_size_in_k $relocation/$t) \
|
|
rtems$version-tools-$t-$tool_build.exe \
|
|
$relocation/rtems-sections.nsi
|
|
done
|
|
# Must be done last
|
|
create_installer $p $common_label $common_label $version-tools-$tool_build.exe
|
|
done
|