Generation of release installer for mips-linux Generated on gcc123.bak.milne.osuosl.org 'uname -a' output: Linux gcc123.bak.milne.osuosl.org 4.19.0-8-amd64 #1 SMP Debian 4.19.98-1 (2020-01-26) x86_64 GNU/Linux 2020-06-04 Cross configuration detected Generating binutils cross-install for mips-linux Ending generation binutils cross-install for mips-linux, res=0 Successfully generated files: -rw-r--r-- 1 muller muller 107796480 Jun 4 09:21 ./fpc-3.2.0-mips-linux.cross.x86_64-linux.tar Generated with locally modificated files: Locally modified files: M install/makepack M install/install.sh Index: install/makepack =================================================================== --- install/makepack (revision 1513) +++ install/makepack (working copy) @@ -4,8 +4,10 @@ # Copyright 1996-2004 Michael Van Canneyt and Peter Vreman # -set -e +# set -e +# disabled as it suppresses the error explanations + # Set this to "yes" if you want to force making the documentation. # if it is not equal to yes, the documentation is assumed present in a file doc-pdf.tar.gz MAKEDOCS=no @@ -64,10 +66,11 @@ if [ "`which gtar`" != "" ]; then TAR=`which gtar` fi - ;; + ;; *openbsd*) MAKE=gmake EXTRAOPT+=" -Fl/usr/local/lib" ;; + esac if [ $# -ne 0 ]; then @@ -82,9 +85,17 @@ TARGETOS=$SOURCEOS fi +case "$TARGETOS" in + linux) + if [ "$TARGETCPU" == "i386" ] ; then + EXTRAOPT+=" -Fl/lib32 -Fl/usr/lib32" + fi + ;; +esac # Set this to "no" if you want don't want to check for libgdb.a # Retrieve GDBMI_DEFAULT_OS_LIST from Makefile.fpc GDBMI_DEFAULT_OS_LIST=`grep '^GDBMI_DEFAULT_OS_LIST *=' Makefile.fpc | sed 's+[^=]*= *\(.*\)+\1+'` +eval LIMIT83fs="`sed -n "s:LIMIT83fs *= *::p" Makefile `" # Use of GDBMI for text mode IDE, starting with version 3.1.1 if [ "X${VERSION#3.0.}" == "X${VERSION}" ] ; then @@ -115,6 +126,12 @@ FULLTARGET=$TARGETCPU-$TARGETOS FULLSOURCE=$SOURCECPU-$SOURCEOS +if [ "${LIMIT83fs/$TARGETOS/}" != "${LIMIT83fs}" ] ; then + FULLTARGET=$TARGETOS + SHORTNAME=1 +else + SHORTNAME=0 +fi echo "FPC Source: $FULLSOURCE" echo "FPC Target: $FULLTARGET" @@ -122,20 +139,14 @@ # Cross building # - add prefix # - no IDE -if [ "$FULLTARGET" != "$FULLSOURCE" ]; then +if [[ ("$FULLTARGET" != "$FULLSOURCE") && ( -z "$BUILDFULLNATIVE" ) ]]; then CROSS="cross" CROSSPREFIX=$FULLTARGET- - IDE= + CROSSSUFFIX=$FULLSOURCE else CROSS= CROSSPREFIX= - # Starting with version 3.1.1, the IDE is not a separate part anymore, but part of utils - if [ "X${VERSION#3.0.}" != "X${VERSION}" ] ; then - # Version 3.0.x, add the IDE as separate part - export IDE=ide - else - export IDE= - fi + CROSSSUFFIX=$FULLTARGET fi @@ -202,11 +213,17 @@ fi # check existence of binutils if cross packing -if [ ! "$CROSS" = "" ]; then - if [ ! -f binutils-${CROSSPREFIX}$FULLSOURCE.tar.gz ]; then - echo "No cross binutils available: binutils-${CROSSPREFIX}$FULLSOURCE.tar.gz missing." +# jvm uses java, and android needs a separate ndk installation +# and i8086 does not use GNU binutils, but internal assmelber and linker +if [[ ( -n "$CROSS" ) && ( "$TARGETCPU" != "jvm" ) && ( "$TARGETCPU" != "i8086" ) && ( "$TARGETOS" != "android" ) ]]; then + if [ -f binutils-${CROSSPREFIX}${FULLSOURCE}.tar.gz ]; then + ADD_CROSS_BINUTILS=1 + else + echo "No cross binutils available: binutils-${CROSSPREFIX}${FULLSOURCE}.tar.gz missing." exit 1 fi +else + ADD_CROSS_BINUTILS=0 fi if [ -n "${FPCCPUOPT:-}" ] ; then @@ -216,12 +233,14 @@ fi # Build everything using the makefiles -echo "Starting ${MAKE} distclean CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS FPC=$FPC" -${MAKE} distclean CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS FPC=$FPC -echo "Starting ${MAKE} ${CROSS}zipinstall CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS OPT="${EXTRAOPT}" FPC_VERSION=$VERSION FPC=$FPC $MAKE_EXTRA" -${MAKE} ${CROSS}zipinstall CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS OPT="${EXTRAOPT}" FPC_VERSION=$VERSION FPC=$FPC $MAKE_EXTRA +zipinstall_log=`pwd`/${CROSS}zipinstall-$TARGETCPU-$TARGETOS.log + +echo "Starting ${MAKE} distclean CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS" +${MAKE} distclean CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS +echo "Starting ${MAKE} ${CROSS}zipinstall CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS OPT=\"${EXTRAOPT}\" FPC_VERSION=$VERSION $MAKE_EXTRA > $zipinstall_log 2>&1" +${MAKE} ${CROSS}zipinstall CPU_TARGET=$TARGETCPU OS_TARGET=$TARGETOS CROSSOPT="${EXTRAOPT}" FPC_VERSION=$VERSION $MAKE_EXTRA > $zipinstall_log 2>&1 if [ $? != 0 ]; then - echo "Failed to make distribution archive." + echo "Failed to generate distribution archive, log file is $zipinstall_log" exit 1 fi @@ -238,13 +257,30 @@ chmod 644 readme.txt # binary.*.tar -BINARYTAR=${CROSSPREFIX}binary.$FULLSOURCE.tar +if [ -n "${CROSSSUFFIX}" ] ; then + BINARYTAR=${CROSSPREFIX}binary.${CROSSSUFFIX}.tar +else + BINARYTAR=${CROSSPREFIX}binary.tar +fi echo "Creating $BINARYTAR" -BINPACKAGES="base $IDE units utils" +BINPACKAGES="${FULLTARGET}-base units-*.${FULLTARGET}" +if [ -z "${CROSS}" ]; then + BINPACKAGES+=" utils-*.${FULLTARGET}" +fi + BINFILES= for p in $BINPACKAGES; do - BINFILES="$BINFILES ${CROSSPREFIX}$p*.$FULLSOURCE.tar.gz" + list=`ls -1 $p*.tar.gz 2> /dev/null` + if [ -n "$list" ] ; then + BINFILES="$BINFILES $p*.tar.gz" + fi done +echo "BINFILES=\"$BINFILES\"" +if [ -z "$BINFILES" ] ; then + echo "Failed to find any package $BINPACKAGES" + exit 1 +fi +echo "${TAR} cf $BINARYTAR $BINFILES" ${TAR} cf $BINARYTAR $BINFILES if [ $? != 0 ]; then echo "Failed to create $BINARYTAR" @@ -259,11 +295,19 @@ else # cross packing # add cross binutils - RELFILES="$RELFILES binutils-${CROSSPREFIX}$FULLSOURCE.tar.gz" + if [ $ADD_CROSS_BINUTILS -eq 1 ] ; then + RELFILES="$RELFILES binutils-${CROSSPREFIX}$FULLSOURCE.tar.gz" + fi fi # Files to be added to the .tar -DIRNAME=${CROSSPREFIX}fpc-$FULLVERSION.$FULLSOURCE +if [ "$FULLTARGET" == "$FULLSOURCE" ] ; then + DIRNAME=fpc-${FULLVERSION}-${FULLTARGET} +elif [ "$BUILDFULLNATIVE" == "1" ] ; then + DIRNAME=fpc-${FULLVERSION}-${FULLTARGET}.built-on-${FULLSOURCE} +else + DIRNAME=fpc-${FULLVERSION}-${FULLTARGET}.cross.${FULLSOURCE} +fi TARNAME=${DIRNAME}.tar echo "Creating $TARNAME" # Erase directory if it exists Index: install/install.sh =================================================================== --- install/install.sh (revision 1513) +++ install/install.sh (working copy) @@ -38,12 +38,39 @@ # # # +CMDGREP="grep" +CMDGGREP="`which ggrep 2> /dev/null`" +if [ -f "$CMDGGREP" ] ; then + CMDGREP="$CMDGGREP" + echo "Using GREP binary=$CMDGREP" +fi +grep_version=`$CMDGREP --version 2> /dev/null ` +grep_version_res=$? +if [ $grep_version_res -ne 0 ] ; then + echo "Installed grep command $CMDGREP does not support --version" + grep_version="" +fi + +if [ "${grep_version//GNU/}" != "${grep_version}" ] ; then + is_gnu_grep=1 + grep_silent_opt="-q" +else + is_gnu_grep=0 + grep_silent_opt="" +fi + CMDTAR="tar" +# Use GNU tar if present +CMDGTAR="`which gtar 2> /dev/null`" +if [ -f "$CMDGTAR" ]; then + CMDTAR="$CMDGTAR" + echo "Using TAR binary=$CMDTAR" +fi tar_version=`$CMDTAR --version 2> /dev/null ` tar_version_res=$? if [ $tar_version_res -ne 0 ] ; then - echo "Installed tar command does not support --version" + echo "Installed tar command $CMDTAR does not support --version" tar_version="" fi @@ -51,10 +78,12 @@ is_gnu_tar=1 no_same_owner_tar_opt=--no-same-owner strip_tar_opt="--strip 1" + use_gunzip=0 else is_gnu_tar=0 no_same_owner_tar_opt= strip_tar_opt= + use_gunzip=1 fi TAR="$CMDTAR $no_same_owner_tar_opt" @@ -61,13 +90,42 @@ # Untar files ($3,optional) from file ($1) to the given directory ($2) unztar () { - $TAR -xzf "$HERE/$1" -C "$2" $3 + if [ $use_gunzip -eq 0 ] ; then + $TAR -xzf "$HERE/$1" -C "$2" $3 + else + startdir="`pwd`" + targzfile="$HERE/$1" + tarfile="${targzfile/tar.gz/tar}" + if [ ! -f "$tarfile" ] ; then + gunzip "$targzfile" + fi + cd "$2" + $TAR -xf "$tarfile" $3 + cd "$startdir" + fi } # Untar tar.gz file ($2) from file ($1) and untar result to the given directory ($3) unztarfromtar () { - $CMDTAR -xOf "$HERE/$1" "$2" | $TAR -C "$3" -xzf - + if [ $use_gunzip -eq 0 ] ; then + $CMDTAR -xOf "$HERE/$1" "$2" | $TAR -C "$3" -xzf - + else + startdir="`pwd`" + $CMDTAR -xf "$HERE/$1" "$2" + targzfile="$startdir/$2" + tarfile="${targzfile/tar.gz/tar}" + if [ ! -f "$tarfile" ] ; then + gunzip "$targzfile" + fi + cd "$3" + $TAR -xf "$tarfile" + res=$? + if [ $res -eq 0 ] ; then + rm -f "$2" + fi + cd "$startdir" + fi } # Get file list from tar archive ($1) in variable ($2) @@ -111,44 +169,50 @@ if [ "$2" = "" ]; then FPCTARGET="$1" CROSSPREFIX= + PPCPREFIX=ppc else FPCTARGET=`echo $2 | sed 's/-$//'` CROSSPREFIX="$2" + PPCPREFIX=ppcross fi BINARYTAR="${CROSSPREFIX}binary.$1.tar" + # Select CPU part of FPCTARGET + PPCSUFFIX=${FPCTARGET/-*/} # conversion from long to short archname for ppc - case $FPCTARGET in - m68k*) + case $PPCSUFFIX in + aarch64) + PPCSUFFIX=a64;; + alpha) + PPCSUFFIX=axp;; + m68k) PPCSUFFIX=68k;; - sparc*) - PPCSUFFIX=sparc;; - i386*) + i386) PPCSUFFIX=386;; - powerpc64*) + i8086) + PPCSUFFIX=8086;; + powerpc) + PPCSUFFIX=ppc;; + powerpc64) PPCSUFFIX=ppc64;; - powerpc*) - PPCSUFFIX=ppc;; - arm*) - PPCSUFFIX=arm;; - x86_64*) + riscv32) + PPCSUFFIX=rv32;; + riscv64) + PPCSUFFIX=rv64;; + x86_64) PPCSUFFIX=x64;; - mips*) - PPCSUFFIX=mips;; - ia64*) - PPCSUFFIX=ia64;; - alpha*) - PPCSUFFIX=axp;; - aarch64*) - PPCSUFFIX=a64;; - i8086*) - PPCSUFFIX=8086;; esac # Install compiler/RTL. Mandatory. echo "Installing compiler and RTL for $FPCTARGET..." - unztarfromtar "$BINARYTAR" "${CROSSPREFIX}base.$1.tar.gz" "$PREFIX" + # Full install builds cross generated on x86_64-linux have a different name for base tar.gz file + basetargz=`$CMDTAR -tf "$BINARYTAR" | sed -n -e "/^base.*tar\.gz/p" -e "/^$FPCTARGET-base.*tar\.gz/p" | head -1 ` + if [ -n "$basetargz" ] ; then + unztarfromtar "$BINARYTAR" "$basetargz" "$PREFIX" + else + unztarfromtar "$BINARYTAR" "${CROSSPREFIX}base.$1.tar.gz" "$PREFIX" + fi if [ -f "binutils-${CROSSPREFIX}$1.tar.gz" ]; then if yesno "Install Cross binutils"; then @@ -157,8 +221,15 @@ fi # Install symlink - rm -f "$EXECDIR/ppc${PPCSUFFIX}" - ln -sf "$LIBDIR/ppc${PPCSUFFIX}" "$EXECDIR/ppc${PPCSUFFIX}" + if [ -f "$LIBDIR/${PPCPREFIX}${PPCSUFFIX}" ] ; then + rm -f "$EXECDIR/${PPCPREFIX}${PPCSUFFIX}" + ln -sf "$LIBDIR/${PPCPREFIX}${PPCSUFFIX}" "$EXECDIR/${PPCPREFIX}${PPCSUFFIX}" + elif [ -f "$LIBDIR/ppc${PPCSUFFIX}" ] ; then + rm -f "$EXECDIR/ppc${PPCSUFFIX}" + ln -sf "$LIBDIR/ppc${PPCSUFFIX}" "$EXECDIR/ppc${PPCSUFFIX}" + else + echo "Warning: Compiler for $FPCTARGET not found" + fi echo "Installing rtl packages..." listtarfiles "$BINARYTAR" packages units-rtl @@ -182,8 +253,8 @@ listtarfiles "$BINARYTAR" packages units for f in $packages do - if ! echo "$f" | grep -q fcl > /dev/null ; then - if ! echo "$f" | grep -q rtl > /dev/null ; then + if ! echo "$f" | $CMDGREP $grep_silent_opt fcl > /dev/null ; then + if ! echo "$f" | $CMDGREP $grep_silent_opt rtl > /dev/null ; then p=`echo "$f" | sed -e 's+^.*units-\([^\.]*\)\..*+\1+'` echo "Installing $p" unztarfromtar "$BINARYTAR" "$f" "$PREFIX" @@ -261,20 +332,8 @@ echo "upgrading binutils package to at least version 2.21" fi PREFIX=/usr/local - # Use GNU tar if present - if [ "`which gtar`" != "" ]; then - CMDTAR=`which gtar` - TAR="$CMDTAR --no-same-owner" - fi - echo "Using TAR binary=$CMDTAR" ;; aix) - # Use GNU tar if present - if [ "`which gtar`" != "" ]; then - CMDTAR=`which gtar` - TAR="$CMDTAR --no-same-owner" - fi - echo "Using TAR binary=$CMDTAR" # Install in /usr/local or /usr ? if checkpath /usr/local/bin; then PREFIX=/usr/local PREFIX=/usr/local