270 lines
7 KiB
Bash
Executable file
270 lines
7 KiB
Bash
Executable file
#! /bin/sh
|
|
|
|
# workarea
|
|
# Copyright 1984-2017 Cisco Systems, Inc.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
if [ $# != 1 -a $# != 2 ]
|
|
then
|
|
echo "Usage: workarea <machine-type> { <workarea name> }"
|
|
exit 1
|
|
fi
|
|
|
|
# set M to machine type and W to workarea name
|
|
M=$1
|
|
if [ "$2" = "" ]
|
|
then
|
|
W=$M
|
|
else
|
|
W=$2
|
|
fi
|
|
|
|
case "$M" in
|
|
a6fb) ;;
|
|
a6le) ;;
|
|
a6nb) ;;
|
|
a6nt) ;;
|
|
a6ob) ;;
|
|
a6osx) ;;
|
|
a6s2) ;;
|
|
arm32le) ;;
|
|
i3fb) ;;
|
|
i3le) ;;
|
|
i3nb) ;;
|
|
i3nt) ;;
|
|
i3ob) ;;
|
|
i3osx) ;;
|
|
i3qnx) ;;
|
|
i3s2) ;;
|
|
ppc32le) ;;
|
|
ta6fb) ;;
|
|
ta6le) ;;
|
|
ta6nb) ;;
|
|
ta6nt) ;;
|
|
ta6ob) ;;
|
|
ta6osx) ;;
|
|
ta6s2) ;;
|
|
tarm32le) ;;
|
|
ti3fb) ;;
|
|
ti3le) ;;
|
|
ti3nb) ;;
|
|
ti3nt) ;;
|
|
ti3ob) ;;
|
|
ti3osx) ;;
|
|
ti3qnx) ;;
|
|
ti3s2) ;;
|
|
tppc32le) ;;
|
|
*) echo "Unrecognized machine name $M"; exit 1 ;;
|
|
esac
|
|
|
|
if [ "$OS" = "Windows_NT" ]
|
|
then
|
|
ln="cp -R"
|
|
else
|
|
ln="ln -s"
|
|
fi
|
|
|
|
# This shell script creates a workarea for local modifications to the
|
|
# Chez Scheme source code. Invoke with the name of a machine type:
|
|
# i3le, i3nt, ti3osx, etc., plus an optional workarea name. The script
|
|
# creates a subdirectory in the current working (release) directory.
|
|
# If the workarea name argument is not given, this subdirectory is
|
|
# named by the machine type. The workarea contains subdirectories
|
|
# that correspond to various subdirectories of the release directory.
|
|
# Initially, all of the files in the workarea are links back into the
|
|
# source directories. Furthermore, many of the files are simply make
|
|
# files that are used to rebuild the system, and in most cases, the
|
|
# make files themselves create links for the source files as needed.
|
|
# To make local modifications, convert the links into local copies.
|
|
|
|
# workln source dest
|
|
# creates link if dest does not exist and source does
|
|
workln()
|
|
{
|
|
if [ ! -e $2 -a -e $1 ] ; then
|
|
$ln $1 $2 2> /dev/null
|
|
fi
|
|
}
|
|
|
|
# forceworkln source dest
|
|
# attempts to create link even if source does not exist
|
|
forceworkln()
|
|
{
|
|
if [ ! -e $2 ] ; then
|
|
ln -s $1 $2 2> /dev/null
|
|
fi
|
|
}
|
|
|
|
forceworkln2()
|
|
{
|
|
if [ ! -e $2 ] ; then
|
|
$ln $1 $2 2> /dev/null
|
|
fi
|
|
}
|
|
|
|
# workdir directory-name
|
|
workdir()
|
|
{
|
|
if [ ! -e $1 ] ; then
|
|
mkdir $1
|
|
fi
|
|
}
|
|
|
|
workdir $W
|
|
|
|
workdir $W/c
|
|
(cd $W/c; workln ../../c/Mf-$M Mf-$M)
|
|
(cd $W/c; forceworkln Mf-$M Makefile)
|
|
(cd $W/c; workln ../../c/Mf-base Mf-base)
|
|
if [ ! -e $W/c/config.h ] ; then
|
|
touch $W/c/config.h
|
|
fi
|
|
if [ ! -e $W/c/Mf-config ] ; then
|
|
touch $W/c/Mf-config
|
|
fi
|
|
case $M in
|
|
*nt)
|
|
(cd $W/c; workln ../../c/vs.bat vs.bat)
|
|
;;
|
|
esac
|
|
|
|
workdir $W/s
|
|
(cd $W/s; workln ../../s/Mf-$M Mf-$M)
|
|
(cd $W/s; forceworkln Mf-$M Makefile)
|
|
(cd $W/s; workln ../../s/Mf-base Mf-base)
|
|
(cd $W/s; workln ../../s/Mf-cross Mf-cross)
|
|
(cd $W/s; workln ../../s/$M.def $M.def)
|
|
(cd $W/s; forceworkln2 $M.def machine.def)
|
|
|
|
workdir $W/mats
|
|
(cd $W/mats; workln ../../mats/Mf-$M Mf-$M)
|
|
(cd $W/mats; forceworkln Mf-$M Makefile)
|
|
(cd $W/mats; workln ../../mats/Mf-base Mf-base)
|
|
(cd $W/mats; workln ../../mats/Mf-exobj Mf-exobj)
|
|
case $M in
|
|
*nt)
|
|
(cd $W/mats; workln ../../mats/vs.bat vs.bat)
|
|
;;
|
|
esac
|
|
|
|
for dir in `echo examples unicode` ; do
|
|
workdir $W/$dir
|
|
for file in `(cd $dir ; echo *)` ; do
|
|
(cd $W/$dir ; workln ../../$dir/$file $file)
|
|
done
|
|
done
|
|
|
|
# deep copy submodules where builds occur so changes don't propagate through symlinks
|
|
for dir in `echo zlib` ; do
|
|
if [ ! -e $W/$dir ] ; then
|
|
cp -R $dir $W/$dir
|
|
fi
|
|
done
|
|
|
|
for dir in `echo lz4` ; do
|
|
if [ ! -e $W/$dir ] ; then
|
|
cp -R $dir $W/$dir
|
|
fi
|
|
done
|
|
|
|
workdir $W/boot
|
|
workdir $W/boot/$M
|
|
(cd $W/boot/$M; workln ../../../boot/$M/scheme.h scheme.h)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/equates.h equates.h)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/petite.boot petite.boot)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/scheme.boot scheme.boot)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/def.so def.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/edit.so edit.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/fact.so fact.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/fatfib.so fatfib.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/fib.so fib.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/freq.so freq.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/m4.so m4.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/macro.so macro.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/matrix.so matrix.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/object.so object.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/power.so power.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/rabbit.so rabbit.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/rsa.so rsa.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/scons.so scons.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/setof.so setof.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/unify.so unify.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/fft.so fft.so)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/compat.so compat.so)
|
|
case $M in
|
|
*nt)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/mainmd.obj mainmd.obj)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/mainmt.obj mainmt.obj)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/csv959md.lib csv959md.lib)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/csv959mt.lib csv959mt.lib)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/scheme.res scheme.res)
|
|
;;
|
|
*)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/main.o main.o)
|
|
(cd $W/boot/$M; workln ../../../boot/$M/kernel.o kernel.o)
|
|
;;
|
|
esac
|
|
|
|
workdir $W/bin
|
|
workdir $W/bin/$M
|
|
case $M in
|
|
*nt)
|
|
(cd $W/bin/$M; workln ../../../bin/$M/scheme.exe scheme.exe)
|
|
(cd $W/bin/$M; forceworkln2 scheme.exe petite.exe)
|
|
(cd $W/bin/$M; workln ../../../bin/$M/csv959.dll csv959.dll)
|
|
(cd $W/bin/$M; workln ../../../bin/$M/csv959.lib csv959.lib)
|
|
;;
|
|
*)
|
|
(cd $W/bin/$M; workln ../../../bin/$M/scheme scheme)
|
|
(cd $W/bin/$M; forceworkln scheme petite)
|
|
;;
|
|
esac
|
|
|
|
# crutch links for fingers that remember old release structure
|
|
case $M in
|
|
*nt)
|
|
(cd $W/bin; forceworkln $M/scheme.exe scheme)
|
|
(cd $W/bin; forceworkln $M/petite.exe petite)
|
|
;;
|
|
*)
|
|
(cd $W/bin; forceworkln $M/scheme scheme)
|
|
(cd $W/bin; forceworkln $M/petite petite)
|
|
;;
|
|
esac
|
|
|
|
workdir $W/bintar
|
|
(cd $W/bintar; workln ../../bintar/Makefile Makefile)
|
|
|
|
workdir $W/rpm
|
|
(cd $W/rpm; workln ../../rpm/Makefile Makefile)
|
|
|
|
workdir $W/pkg
|
|
(cd $W/pkg; workln ../../pkg/Makefile Makefile)
|
|
(cd $W/pkg; workln ../../pkg/rmpkg rmpkg)
|
|
|
|
(cd $W; workln ../LOG LOG)
|
|
(cd $W; forceworkln2 ../nanopass nanopass)
|
|
(cd $W; workln ../makefiles/installsh installsh)
|
|
(cd $W; workln ../scheme.1.in scheme.1.in)
|
|
|
|
case $M in
|
|
*nt)
|
|
(cd $W/c; make source > /dev/null 2>&1)
|
|
(cd $W/s; make source > /dev/null 2>&1)
|
|
(cd $W/mats; make source > /dev/null 2>&1)
|
|
;;
|
|
esac
|
|
|
|
exit 0
|