#! /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 { }" 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