| Server IP : 82.208.35.60 / Your IP : 216.73.216.89 Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31 System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64 User : studiokobylisy_cz ( 1008) PHP Version : 7.3.31 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /usr/ports/lang/smlnj/files/ |
Upload File : |
--- config/install.sh.orig 2020-04-03 02:04:40 UTC
+++ config/install.sh
@@ -56,11 +56,36 @@ if [ x"$SIZE_OPT" = x ] ; then
SIZE_OPT="-"$DEFAULT_SIZE
fi
+[ -n "$RECOMPILEDIR" ] && echo "RECOMPILEDIR=$RECOMPILEDIR"
+
if [ x${INSTALL_QUIETLY} = xtrue ] ; then
export CM_VERBOSE
CM_VERBOSE=false
fi
+#
+# do_patch patch-file
+# apply a patch file
+#
+do_patch() {
+ patchfile=$FILESDIR/$1
+
+ if [ ! -r $patchfile ]; then
+ echo "$this: !!! patch file $patchfile not found."
+ exit 1;
+ fi
+
+ if [ ! -f $CONFIGDIR/.patch_$1 ]; then
+ $PATCH $PATCH_ARGS < $patchfile || {\
+ echo "$this: !!! patch file $patchfile failed to patch."
+ exit 1;
+ }
+ echo > $CONFIGDIR/.patch_$1
+ else
+ echo "$this: patch $patchfile already installed."
+ fi
+}
+
vsay() {
if [ x${INSTALL_DEBUG} = xtrue ] ; then
echo "$@"
@@ -128,7 +153,28 @@ trap 'cd "$ROOT"; rm -f $tmpfiles' 0 1 2 3 15
# Especially important is CM_PATHCONFIG.
#
export CM_PATHCONFIG
-CM_PATHCONFIG=$LIBDIR/pathconfig
+if [ -n "$STAGEDIR" -a -n "$MLLIB" ]
+then
+ # The final CM_PATHCONFIG file should not yet exist during
+ # staging, but still it has to be set in the environment when
+ # creating the (final) compiler heap. This way it becomes the
+ # the default pathconfig for the (final) heap.
+ # Therefore we will use the secondary pathconfig environment
+ # variable CM_LOCAL_PATHCONFIG to point to the (existing;)
+ # pathconfig in ROOT. This enables $smlnj/installer.cm
+ # to operate within STAGEDIR (using the final heap) below.
+ CM_PATHCONFIG=$MLLIB/pathconfig
+ if [ -r $CM_PATHCONFIG ]
+ then
+ vsay "$this: !!! Staging conflicts with an existing installation!"
+ complain "$this: !!! Make $CM_PATHCONFIG unreadable and try again!"
+ fi
+ CM_PATHCONFIG_STAGE=$STAGEDIR$CM_PATHCONFIG
+ CM_LOCAL_PATHCONFIG=$CM_PATHCONFIG_STAGE
+else
+ CM_PATHCONFIG=$LIBDIR/pathconfig
+ CM_PATHCONFIG_STAGE=$CM_PATHCONFIG
+fi
#
# the release version that we are installing
#
@@ -407,7 +453,12 @@ esac
# the name of the bin files directory
#
BOOT_ARCHIVE=boot.$ARCH-unix
-BOOT_FILES=sml.$BOOT_ARCHIVE
+if [ -z "$RECOMPILEDIR" ]
+then
+ BOOT_FILES=sml.$BOOT_ARCHIVE
+else
+ BOOT_FILES=$RECOMPILEDIR/sml.$BOOT_ARCHIVE
+fi
#
# build the run-time system
@@ -416,9 +467,15 @@ if [ -x "$RUNDIR"/run.$ARCH-$OPSYS ]; then
vsay $this: Run-time system already exists.
else
"$CONFIGDIR"/unpack "$ROOT" runtime
+ [ -n "$MLRUNTIMEPATCHES" ] && \
+ for p in $MLRUNTIMEPATCHES
+ do
+ do_patch $p
+ done
cd "$BASEDIR"/runtime/objs
echo $this: Compiling the run-time system.
- $MAKE -f $RT_MAKEFILE $EXTRA_DEFS
+ echo "$MAKE -f $RT_MAKEFILE $EXTRA_DEFS AS=\"$AS\" ASFLAGS=\"$ASFLAGS\" CFLAGS=\"$CFLAGS\" LDFLAGS=\"$LDFLAGS\""
+ $MAKE -f $RT_MAKEFILE $EXTRA_DEFS AS="$AS" ASFLAGS="$ASFLAGS" CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS"
if [ -x run.$ARCH-$OPSYS ]; then
mv run.$ARCH-$OPSYS "$RUNDIR"
if [ -f runx.$ARCH-$OPSYS ]; then
@@ -430,7 +487,7 @@ else
if [ -f run.$ARCH-$OPSYS.a ]; then
mv run.$ARCH-$OPSYS.a "$RUNDIR"
fi
- $MAKE MAKE=$MAKE clean
+ [ "$MLNORUNTIMECLEAN" ] || $MAKE MAKE=$MAKE clean
else
complain "$this: !!! Run-time system build failed for some reason."
fi
@@ -456,7 +513,7 @@ if [ -r "$HEAPDIR"/sml.$HEAP_SUFFIX ]; then
complain "$this !!! Unable to re-create heap image (sml.$HEAP_SUFFIX)."
fi
else
- "$CONFIGDIR"/unpack "$ROOT" "$BOOT_ARCHIVE"
+ [ -n "$RECOMPILEDIR" ] || "$CONFIGDIR"/unpack "$ROOT" "$BOOT_ARCHIVE"
fish "$ROOT"/"$BOOT_FILES"/smlnj/basis
@@ -491,7 +548,7 @@ else
cd "$ROOT"/"$BOOT_FILES"
for anchor in * ; do
if [ -d $anchor ] ; then
- echo $anchor $anchor >>$CM_PATHCONFIG
+ echo $anchor $anchor >>$CM_PATHCONFIG_STAGE
move $anchor "$LIBDIR"/$anchor
fi
done
@@ -514,6 +571,18 @@ installdriver _ml-build ml-build
cd "$ROOT"
+# apply source patches for standard targets
+[ -n "$MLSTANDARDPATCHDIRS" ] && \
+for d in $MLSTANDARDPATCHDIRS
+do
+ "$CONFIGDIR"/unpack "$ROOT" "$d"
+done
+[ -n "$MLSTANDARDPATCHES" ] && \
+for p in $MLSTANDARDPATCHES
+do
+ do_patch $p
+done
+
#
# Now do all the rest using the precompiled installer
# (see base/system/smlnj/installer for details)
@@ -523,6 +592,12 @@ if [ $nolib = false ] ; then
export ROOT INSTALLDIR CONFIGDIR BINDIR
CM_TOLERATE_TOOL_FAILURES=true
export CM_TOLERATE_TOOL_FAILURES
+ # smlnj/installer/nix-install.sml (re)sets CM_LOCAL_PATHCONFIG
+ # to /dev/null in the buildcmd that it uses to invoke the builds.
+ # So the build process needs a working CM_PATHCONFIG. This is NOT
+ # propagated to the resulting heaps because the heaps generated
+ # in this stage don't contain the compiler.
+ [ -z "$STAGEDIR" ] || CM_PATHCONFIG=$CM_LOCAL_PATHCONFIG
if "$BINDIR"/sml $SIZE_OPT -m \$smlnj/installer.cm
then
# because we create heap2exec without knowing if heap2asm is going
@@ -536,5 +611,20 @@ if [ $nolib = false ] ; then
complain "$this: !!! Installation of libraries and programs failed."
fi
fi
+
+# Finish staging by removing the $STAGEDIR prefix from the driver scripts.
+if [ -n "$STAGEDIR" ]
+then
+ find $BINDIR -type f -perm -1 | \
+ xargs fgrep -l "$STAGEDIR" | \
+ xargs sed -i "" -e 's%'"$STAGEDIR"'%%g'
+fi
+
+# apply all source patches
+[ -n "$MLSOURCEPATCHES" ] && \
+for p in $MLSOURCEPATCHES
+do
+ do_patch $p
+done
exit 0