Initial revision
authorStephen Adams <edu/mit/csail/zurich/adams>
Fri, 6 Dec 1996 17:07:43 +0000 (17:07 +0000)
committerStephen Adams <edu/mit/csail/zurich/adams>
Fri, 6 Dec 1996 17:07:43 +0000 (17:07 +0000)
etc/rebuild-7.4-linux [new file with mode: 0755]

diff --git a/etc/rebuild-7.4-linux b/etc/rebuild-7.4-linux
new file mode 100755 (executable)
index 0000000..26d6ed3
--- /dev/null
@@ -0,0 +1,373 @@
+#!/bin/csh -f
+
+# $Id: rebuild-7.4-linux,v 1.1 1996/12/06 17:07:43 adams Exp $
+
+# Arguments: runtimeversion compilerversion edwinversion 6001version
+
+# The versions can be omitted, and if they are, the current version
+# as determined by the appropriate RCS file (e.g. runtime/version.scm)
+# is built.
+
+# If a version is the string "none", the corresponding band is not built,
+# nor is the corresponding subsystem recompiled.
+
+# If either the compiler or edwin is re-built, the combined (c+e) band
+# is re-built as well.
+
+# If the 6.001 (student) band is re-built, the range- and type-checked
+# runtime system (runtime-check) is recompiled first.  Since the
+# runtime-check/ directory uses symbolic links to .bin files in the
+# runtime/ directory, the 6.001 band will not reflect changes to the
+# runtime system that have not yet been resyntaxed in the runtime/
+# directory.
+
+# This script silently ignores additional arguments.
+
+# Stage 1: Choose architecture and directories
+
+set root="/scheme/7.4/linux"
+
+set src="/scheme/7.4/src"
+set scheme="scheme"
+
+set noclobber
+set lock="$root/tmp/lock"
+(echo "### Rebuild in progress started by" `whoami` "on" `date` "on" `hostname` > $lock)
+if ("$status" != 0) then
+  cat "$lock"
+  exit 1
+endif
+
+
+# Stage 2: Write re-compilation script
+
+set script="$root/tmp/build.$$"
+rm -f "$script"
+
+onintr abort_and_exit
+
+echo \(begin\  > $script
+
+if ("$1" != "none") then
+  if (("$1" == "") || ("$1" == "next")) then
+    set runver=`rcsversion $src/runtime/version.scm`
+  else
+    set runver="$1"
+  endif
+  echo "### Making runtime system version $runver..."
+  set runtime="$root/backup/runtime-$runver"
+  echo \(load\ \"runtime.sf\"\)\ \(load\ \"runtime.cbf\"\) >> $script
+else
+  set runtime=""
+endif
+
+if ("$2" != "none") then
+  if (("$2" == "") || ("$2" == "next")) then
+    set compver=`rcsversion $src/compiler/base/make.scm`
+  else
+    set compver="$2"
+  endif
+  echo "### Making compiler version $compver..."
+  set complr="$root/backup/complr-$compver"
+  echo \(cd\ \"../sf\"\)\ \(load\ \"sf.sf\"\)\ \(load\ \"sf.cbf\"\) >> $script
+  echo \(cd\ \"../cref\"\)\ \(load\ \"cref.sf\"\)\ \(load\ \"cref.cbf\"\) >> $script
+  echo \(cd\ \"../compiler\"\)\ \(load\ \"compiler.sf\"\)\ \(load\ \"compiler.cbf\"\) >> $script
+else
+  set complr=""
+endif
+
+if ("$3" != "none") then
+  if (("$3" == "") || ("$3" == "next")) then
+    set edver=`rcsversion $src/edwin/make.scm`
+  else
+    set edver="$3"
+  endif
+  echo "### Making edwin version $edver..."
+  set edwin="$root/backup/edwin-$edver"
+  echo \(cd\ \"../edwin\"\)\ \(load\ \"edwin.sf\"\)\ \(load\ \"edwin.cbf\"\) >> $script
+else
+  set edwin=""
+endif
+
+if ("$4" != "none") then
+  if (("$4" == "") || ("$4" == "next")) then
+    set stver=`rcsversion $src/6001/make.scm`
+  else
+    set stver="$4"
+  endif
+  echo "### Making 6.001 student band version $stver..."
+  set student="$root/backup/6001-$stver"
+  echo \(cd\ \"../runtime-check\"\) >> $script
+  echo \(load\ \"runtime.cbf\"\) >> $script
+  if ("$edwin" == "") then
+    echo ";;; Must syntax Edwin in order to syntax the 6.001 make.scm file." >> $script
+    echo \(cd\ \"../edwin\"\) >> $script
+    echo \(load\ \"edwin.sf\"\) >> $script
+  endif
+  echo \(cd\ \"../6001\"\) >> $script
+  echo \(load\ \"6001.sf\"\) >> $script
+  echo \(load\ \"6001.cbf\"\) >> $script
+else
+  set student=""
+endif
+
+echo \(write-line\ \'\(finished\ recompilation\)\) >>$script
+
+# This exit is inside the BEGIN
+echo \(\%exit 0\)\) >>$script
+#   but this one is not
+echo \(\%exit 1\) >> $script
+# That way, the first one will be executed if no error occurs in the BEGIN,
+#  returning zero, but the second will be executed if an error does occur,
+#  returning one.  Similar hack used everywhere.
+
+if (("$runtime" == "") \
+    && ("$complr" == "") \
+    && ("$edwin" == "") \
+    && ("$student" == "")) then
+  echo "### No systems to rebuild."
+  rm -f "$script" "$lock"
+  exit 0
+endif
+
+# Stage 3: Re-compile sources
+
+echo "### cd $root/runtime"
+cd $root/runtime
+
+echo "### $scheme -compiler -heap 2000 -no-init-file"
+          $scheme -compiler -heap 2000 -no-init-file <$script
+
+set result="$status"
+rm -f $script
+
+if ("$result" != 0) then
+  echo "### Recompilation failed."
+  rm -f "$lock"
+  exit "$result"
+endif
+
+
+# Stage 4: Re-build bands in staging area
+
+if ("$runtime" != "") then
+  echo "### cd $root/runtime"
+  cd $root/runtime
+  rm -f ../tmp/runtime.com
+  echo "### $scheme -large -fasl make.com -no-init-file"
+            $scheme -large -fasl make.com -no-init-file <<*END*
+(begin
+  (write-line '(saving runtime band ...))
+  (disk-save "../tmp/runtime.com")
+  (write-line '(saved runtime band))
+  (%exit 0))
+(%exit 1)
+*END*
+  set result="$status"
+  if ("$result" != 0) then
+    echo "### Re-building the runtime system failed."
+    rm -f ../tmp/runtime.com "$lock"
+    exit "$result"
+  endif
+  set runband="$root/tmp/runtime.com"
+  set runbandarg="-band $runband"
+else
+  set runband=""
+  set runbandarg=""
+endif
+
+
+if ("$complr" != "") then
+  echo "### cd $root/sf"
+  cd $root/sf
+  rm -f ../tmp/complr.com
+  echo "### $scheme -large $runbandarg -no-init-file"
+            $scheme -large $runbandarg -no-init-file <<*END*
+(begin
+  (load "make.com")
+  (cd "../compiler")
+  (load "make.com")
+  (write-line '(saving compiler band ...))
+  (disk-save "../tmp/complr.com")
+  (write-line '(saved compiler band))
+  (%exit 0))
+(%exit 1)
+*END*
+  set result="$status"
+  if ("$result" != 0) then
+    echo "### Re-building the compiler failed."
+    rm -f ../tmp/runtime.com ../tmp/complr.com "$lock"
+    exit "$result"
+  endif
+  set compband="$root/tmp/complr.com"
+  set cbandarg="-band $compband"
+else
+  set compband=""
+  set cbandarg=""
+endif
+
+
+if ("$edwin" != "") then
+  echo "### cd $root/edwin"
+  cd $root/edwin
+  rm -f ../tmp/edwin.com
+  echo "### $scheme -large $runbandarg -no-init-file"
+            $scheme -large $runbandarg -no-init-file <<*END*
+(begin
+  (load "make.com")
+  (write-line '(saving edwin band ...))
+  (disk-save "../tmp/edwin.com")
+  (write-line '(saved edwin band))
+  (%exit 0))
+(%exit 1)
+*END*
+  set result="$status"
+  if ("$result" != 0) then
+    echo "### Re-building edwin failed."
+    rm -f ../tmp/runtime.com ../tmp/complr.com ../tmp/edwin.com "$lock"
+    exit "$result"
+  endif
+  set edwinband="$root/tmp/edwin.com"
+else
+  set edwinband=""
+endif
+
+
+if (("$edwin" != "") || ("$complr" != "")) then
+  echo "### cd $root/edwin"
+  cd $root/edwin
+  rm -f ../tmp/c+e.com
+  echo "### $scheme -constant 2000 -heap 2000 -compiler $cbandarg -no-init-file"
+            $scheme -constant 2000 -heap 2000 -compiler $cbandarg -no-init-file <<*END*
+(begin
+  (load "make.com")
+  (write-line '(saving c+e band ...))
+  (disk-save "../tmp/c+e.com")
+  (write-line '(saved c+e band))
+  (%exit 0))
+(%exit 1)
+*END*
+  set result="$status"
+  if ("$result" != 0) then
+    echo "### Re-building c+e failed."
+    set fullband=""
+  else
+    set fullband="$root/tmp/c+e.com"
+  endif
+else
+  set fullband=""
+endif
+
+
+if ("$student" != "") then
+  echo "### cd $root/runtime-check"
+  cd $root/runtime-check
+  rm -f ../tmp/6001.com
+  echo "### $scheme -large$student_constant -fasl make.com -no-init-file"
+            $scheme -large$student_constant -fasl make.com -no-init-file <<*END*
+(begin
+  (cd "../edwin")
+  (load "make.com")
+  (cd "../6001")
+  (load "make.com")
+  (write-line '(saving 6001 band ...))
+  (disk-save "../tmp/6001.com")
+  (write-line '(saved 6001 band))
+  (%exit 0))
+(%exit 1)
+*END*
+  set result="$status"
+  if ("$result" != 0) then
+    echo "### Re-building 6.001 student band failed."
+    rm -f ../tmp/runtime.com ../tmp/complr.com ../tmp/edwin.com ../tmp/6001.com "$lock"
+    exit "$result"
+  endif
+  set studband="$root/tmp/6001.com"
+else
+  set studband=""
+endif
+
+
+# Stage 5: Install bands
+# This part should be atomic
+
+onintr -
+
+if ("$runtime" != "") then
+  set backup=`nextver $runtime.gz`
+  if ("$backup" != "$runtime.gz") then
+    echo "###" mv -f "$runtime.gz" "$backup"
+    mv -f "$runtime.gz" "$backup"
+  endif
+  echo "### gzip $runtime"
+  cpx $runband $runtime
+  gzip $runtime
+  chmod a-w $runtime.gz
+  echo "###" mv -f "$runband" "$root/lib/runtime.com"
+  mv -f "$runband" "$root/lib/runtime.com"
+endif
+
+if ("$complr" != "") then
+  set backup=`nextver $complr.gz`
+  if ("$backup" != "$complr.gz") then
+    echo "###" mv -f "$complr.gz" "$backup"
+    mv -f "$complr.gz" "$backup"
+  endif
+  echo "### gzip $complr"
+  cpx $compband $complr
+  gzip $complr
+  chmod a-w $complr.gz
+  echo "###" mv -f "$compband" "$root/lib/compiler.com"
+  mv -f "$compband" "$root/lib/compiler.com"
+endif
+
+if ("$edwin" != "") then
+# Don't save this -- CPH
+#  set backup=`nextver $edwin.gz`
+#  if ("$backup" != "$edwin.gz") then
+#    echo "###" mv -f "$edwin.gz" "$backup"
+#    mv -f "$edwin.gz" "$backup"
+#  endif
+#  echo "### gzip $edwin"
+#  cpx $edwinband $edwin
+#  gzip $edwin
+#  chmod a-w $edwin.gz
+  echo "###" mv -f "$edwinband" "$root/lib/edwin.com"
+  mv -f "$edwinband" "$root/lib/edwin.com"
+endif
+
+if ("$fullband" != "") then
+  echo "###" mv -f "$fullband" "$root/lib/c+e.com"
+  mv -f "$fullband" "$root/lib/c+e.com"
+endif
+
+if ("$student" != "") then
+# Don't save this -- CPH
+#  set backup=`nextver $student.gz`
+#  if ("$backup" != "$student.gz") then
+#    echo "###" mv -f "$student.gz" "$backup"
+#    mv -f "$student.gz" "$backup"
+#  endif
+#  echo "### gzip $student"
+#  cpx $studband $student
+#  gzip $student
+#  chmod a-w $student.gz
+  echo "###" mv -f "$studband" "$root/lib/6001.com"
+  mv -f "$studband" "$root/lib/6001.com"
+endif
+
+rm -f "$lock"
+echo "### Done."
+exit 0
+
+abort_and_exit:
+  echo ""
+  echo "### Aborting -- Cleaning up..."
+  if ("`jobs`" != "") then
+    kill %1
+    wait
+  endif
+  cd "$root/tmp"
+  rm -f "$script" runtime.com complr.com edwin.com c+e.com 6001.com "$lock"
+  echo "### Cleaned up."
+  exit 1