diff --git a/LOG b/LOG index 58ba5fd9de..850321dad9 100644 --- a/LOG +++ b/LOG @@ -1087,7 +1087,7 @@ - generated Mf-install InstallBin (InstallLib, InstallMan) now correctly indirects through InstallPrefix if the --installbin (--installlib, --installman) configure flag is not present. - src/configure + configure - removed definition of generate-procedure-source-information patch.ss - guardian tconc cells are now allocated in generation 0 in the hope @@ -1187,3 +1187,14 @@ compile.ss, 7.ms, root-experr*, patch* +- fixed failure to install examples for tarball installs + Mf-install.in +- improved packaging support: + replaced bintar script with bintar directory and make file; + tarballs are created via "make create-tarball" and are placed in + the workarea's bintar directory. added rpm directory and make + file for creating RPMs via "make create-rpm". added pkg directory + and make file for creating OSX packages via "make create-pkg". + bintar (removed), bintar/Makefile (new), rpm/Makefile (new), + pkg/Makefile (new), pkg/rmpkg (new), workarea, checkin, newrelease, + Makefile.in, Makefile-workarea.in. diff --git a/bintar b/bintar deleted file mode 100644 index 7d3654689a..0000000000 --- a/bintar +++ /dev/null @@ -1,73 +0,0 @@ -#! /bin/csh -f - -set T = "." -if ("$argv[1]" == "--target-dir") then - set T = "$argv[2]" - shift - shift -endif - -if ($#argv != 2 && $#argv != 3) then - echo "Usage: $0 [ --target-dir ] [ ]" - exit 1 -endif - -set R = $argv[1] -set M = $argv[2] -if ($#argv == 2) then - set W = $M -else - set W = $argv[3] -endif - -if (!(-d $W)) then - echo "Error: work area $W does not exist or is not a directory" - exit 1 -endif - -if (!(-e $W/boot/$M)) then - echo "Error: "$ - exit 1 -endif - -if (-e $R) then - echo "Error: $R already exists" - exit 1 -endif - -onintr error - -mkdir $R || goto error -( cd $R ; ln -s ../LICENSE ../NOTICE . ) || goto error -( cd $R ; ln -s ../$W/scheme.1.in ../$W/installsh ../$W/examples . ) || goto error -( cd $R ; ln -s ../$W/Mf-install Makefile ) || goto error -mkdir -p $R/boot/$M $R/bin/$M || goto error -( cd $R/boot/$M ; ln -s ../../../$W/boot/$M/{scheme.h,petite.boot,scheme.boot} . ) || goto error - -switch ($M) - case a6nt: - case ta6nt: - case ti3nt: - case i3nt: - ( cd $R/boot/$M ; ln -s ../../../$W/boot/$M/{csv951md.lib,csv951mt.lib,mainmd.obj,mainmt.obj,scheme.res} . ) || goto error - ( cd $R/bin/$M ; ln -s ../../../$W/bin/$M/{scheme.exe,csv951.dll,csv951.lib,vcruntime140.lib} . ) || goto error - breaksw - default: - ( cd $R/boot/$M ; ln -s ../../../$W/boot/$M/{main.o,kernel.o} . ) || goto error - ( cd $R/bin/$M ; ln -s ../../../$W/bin/$M/{scheme} . ) || goto error - breaksw -endsw - -set broken = `find -L $R -type l` -if ($#broken != 0) then - echo "Error: missing $broken" - goto error -endif - -tar -czhf $T/csv$R-$M.tar.gz $R || goto error -rm -rf $R -exit - -error: -rm -rf $R -exit 1 diff --git a/bintar/Makefile b/bintar/Makefile new file mode 100644 index 0000000000..61b323ccb0 --- /dev/null +++ b/bintar/Makefile @@ -0,0 +1,86 @@ +# Makefile +# 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. + +version = 9.5.1 +m := $(shell find ../bin/* -type d | xargs basename) + +R = csv$(version) +TARBALL = $(R)-$(m).tar.gz + +CONTENTS=\ + $(R)/LICENSE\ + $(R)/NOTICE\ + $(R)/scheme.1.in\ + $(R)/installsh\ + $(R)/Makefile\ + $(R)/examples\ + $(R)/boot\ + $(R)/bin + +$(TARBALL): $(CONTENTS) + ( BROKEN=`find -L $R -type l` ; \ + if test -n "$$BROKEN" ; then \ + echo "Error: missing $(BROKEN)" ; \ + exit 1 ; \ + fi ) + tar -czhf $(TARBALL) $R + rm -rf $(R) + +$(R)/LICENSE: $(R) + ( cd $(R) ; ln -s ../../../LICENSE . ) + +$(R)/NOTICE: $(R) + ( cd $(R) ; ln -s ../../../NOTICE . ) + +$(R)/scheme.1.in: $(R) + ( cd $(R) ; ln -s ../../scheme.1.in . ) + +$(R)/installsh: $(R) + ( cd $(R) ; ln -s ../../installsh . ) + +$(R)/Makefile: $(R) + ( cd $(R) ; ln -s ../../Mf-install Makefile ) + +$(R)/examples: $(R) + ( cd $(R) ; ln -s ../../examples . ) + +$(R)/boot: $(R) + mkdir -p $(R)/boot/$(m) + ( cd $(R)/boot/$(m) ; ln -s ../../../../boot/$(m)/{scheme.h,petite.boot,scheme.boot} . ) + case $(m) in \ + *nt) \ + ( cd $R/boot/$(m) ; ln -s ../../../../boot/$(m)/{csv951md.lib,csv951mt.lib,mainmd.obj,mainmt.obj,scheme.res} . ) \ + ;; \ + *) \ + ( cd $R/boot/$(m) ; ln -s ../../../../boot/$(m)/{main.o,kernel.o} . ) \ + ;; \ + esac + +$(R)/bin: $(R) + mkdir -p $(R)/bin/$(m) + case $(m) in \ + *nt) \ + ( cd $R/bin/$(m) ; ln -s ../../../../bin/$(m)/{scheme.exe,csv951.dll,csv951.lib,vcruntime140.lib} . ) \ + ;; \ + *) \ + ( cd $R/bin/$(m) ; ln -s ../../../../bin/$(m)/scheme . ) \ + ;; \ + esac + +$(R): + mkdir $(R) + +clean: + rm -rf $(R) $(TARBALL) diff --git a/checkin b/checkin index 772a008428..5df71910d2 100755 --- a/checkin +++ b/checkin @@ -62,7 +62,7 @@ if (-e $W/scheme.1.in) then endif endif -set tmpsdirs = (. c mats s examples unicode makefiles csug release_notes) +set tmpsdirs = (. c mats s examples unicode makefiles csug release_notes bintar rpm pkg) set sdirs = () foreach x ($tmpsdirs) if (!(-e $x)) then @@ -90,8 +90,6 @@ echo '*** running "make clean" in source directories ***' foreach x ($sdirs) switch ($x) case .: - (cd $W; /bin/rm -f petite.1 scheme.1) - (cd $W; /bin/rm -f Make.out) case unicode: case unicode/UNIDATA: case makefiles: @@ -103,7 +101,10 @@ foreach x ($sdirs) case mats: case benchmarks: case examples: - (cd $W/$x; make clean > /dev/null) + case bintar: + case rpm: + case pkg: + (cd $W/$x; make clean >& /dev/null) breaksw default: echo "checkin error: unexpected sdir $x" diff --git a/makefiles/Makefile-workarea.in b/makefiles/Makefile-workarea.in index 504da9df2b..b4078005fb 100644 --- a/makefiles/Makefile-workarea.in +++ b/makefiles/Makefile-workarea.in @@ -33,10 +33,22 @@ test: build bootfiles: build $(MAKE) -f Mf-boot +create-bintar: build + (cd bintar && $(MAKE)) + +create-rpm: create-bintar + (cd rpm && $(MAKE)) + +create-pkg: create-bintar + (cd pkg && $(MAKE)) + clean: rm -f petite.1 scheme.1 (cd s ; $(MAKE) clean) (cd c ; $(MAKE) clean) (cd mats ; $(MAKE) clean) (cd examples ; $(MAKE) clean) + (cd bintar ; $(MAKE) clean) + (cd rpm ; $(MAKE) clean) + (cd pkg ; $(MAKE) clean) rm -f Make.out diff --git a/makefiles/Makefile.in b/makefiles/Makefile.in index 3e9428999d..5c0846b0b0 100644 --- a/makefiles/Makefile.in +++ b/makefiles/Makefile.in @@ -34,6 +34,15 @@ docs: build (cd csug && $(MAKE) m=$(m)) (cd release_notes && $(MAKE) m=$(m)) +create-bintar: + (cd $(workarea) && $(MAKE) create-bintar) + +create-rpm: + (cd $(workarea) && $(MAKE) create-rpm) + +create-pkg: + (cd $(workarea) && $(MAKE) create-pkg) + clean: (cd $(workarea) && $(MAKE) clean) diff --git a/makefiles/Mf-install.in b/makefiles/Mf-install.in index f7d66b086d..b40b524bd4 100644 --- a/makefiles/Mf-install.in +++ b/makefiles/Mf-install.in @@ -126,7 +126,7 @@ maninstall: scheme.1 petite.1 ${Man} if [ ${GzipManPages} = yes ] ; then gzip -f ${Man}/${InstallPetiteName}.1 ; fi liblibinstall: ${LibExamples} - $I -m 444 ../examples/* ${LibExamples} + $I -m 444 examples/* ${LibExamples} ${Lib}: $I -d -m 755 ${Lib} diff --git a/newrelease b/newrelease index 34803ab74c..4a630fe33d 100755 --- a/newrelease +++ b/newrelease @@ -75,9 +75,17 @@ if ($status != 0) exit 1 cd $W -/bin/rm -f bintar -sed -e "s/csv[0-9][0-9][0-9]*/csv$ZR/g" ../bintar > bintar -set updatedfiles = ($updatedfiles bintar) +/bin/rm bintar/Makefile +sed -e "s/^v = .*/v = $R/" ../bintar/Makefile > bintar/Makefile +set updatedfiles = ($updatedfiles bintar/Makefile) + +/bin/rm rpm/Makefile +sed -e "s/^v = .*/v = $R/" ../rpm/Makefile > rpm/Makefile +set updatedfiles = ($updatedfiles rpm/Makefile) + +/bin/rm pkg/Makefile +sed -e "s/^v = .*/v = $R/" ../pkg/Makefile > pkg/Makefile +set updatedfiles = ($updatedfiles pkg/Makefile) /bin/rm -f BUILDING sed -e "s/Chez Scheme Version [^ ]*/Chez Scheme Version $R/" \ diff --git a/pkg/Makefile b/pkg/Makefile new file mode 100644 index 0000000000..c1eb108170 --- /dev/null +++ b/pkg/Makefile @@ -0,0 +1,109 @@ +# Makefile +# 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. + +m := $(shell find ../bin/* -type d | xargs basename) +version = 9.5.1 +release = 1 + +DOTUSER = $(shell ls -ld . | sed -e 's/[^ ]* *[^ ]* *\([^ ]*\).*/\1/') +DOTGROUP = $(shell ls -ldg . | sed -e 's/[^ ]* *[^ ]* *\([^ ]*\).*/\1/') +BUILDROOT = $(m)$(version) +RELEASE = csv$(version) +TARBALL = $(RELEASE)-$(m).tar.gz +PKG = $(RELEASE)-$(m)-$(release).pkg + +PKGCONTENT =\ + $(BUILDROOT)/Resources/en.lproj/Welcome.html\ + $(BUILDROOT)/Resources/en.lproj/License.txt\ + $(BUILDROOT)/Distribution\ + $(BUIDROOT)/Root/bin\ + $(BUILDROOT)/Root/lib\ + $(BUILDROOT)/Root/man + +$(PKG): $(BUILDROOT)/$(PKG) + sudo /usr/bin/productbuild\ + --resources $(BUILDROOT)/Resources\ + --distribution $(BUILDROOT)/Distribution\ + --package-path $(BUILDROOT)\ + $(PKG) + sudo chown $(DOTUSER):$(DOTGROUP) $(PKG) + sudo /bin/rm -rf $(RELEASE) $(BUILDROOT) + +$(BUILDROOT)/$(PKG): $(PKGCONTENT) + sudo /usr/bin/pkgbuild\ + --root $(BUILDROOT)/Root\ + --identifier chezscheme\ + --version $(version)\ + --install-location /\ + --ownership recommended\ + $(BUILDROOT)/$(PKG) + +$(BUILDROOT)/Distribution: $(BUILDROOT) + echo '' > $(BUILDROOT)/Distribution + echo '' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' Chez Scheme' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' ' >> $(BUILDROOT)/Distribution + echo ' #$(PKG)' >> $(BUILDROOT)/Distribution + echo '' >> $(BUILDROOT)/Distribution + chmod 644 $(BUILDROOT)/Distribution + +$(BUILDROOT)/Resources/en.lproj/Welcome.html: $(BUILDROOT)/Resources/en.lproj + echo 'cat << EOF > $(RESOURCES)/en.lproj/Welcome.html' >> $(BUILDROOT)/Resources/en.lproj/Welcome.html + echo '' >> $(BUILDROOT)/Resources/en.lproj/Welcome.html + echo '

Chez Scheme Version $(version)

' >> $(BUILDROOT)/Resources/en.lproj/Welcome.html + echo '

Copyright (c) 2017 Cisco Systems, Inc.

' >> $(BUILDROOT)/Resources/en.lproj/Welcome.html + echo '

Chez Scheme is a programming language and an implementation of that language, with supporting tools and documentation.

' >> $(BUILDROOT)/Resources/en.lproj/Welcome.html + echo '' >> $(BUILDROOT)/Resources/en.lproj/Welcome.html + chmod 644 $(BUILDROOT)/Resources/en.lproj/Welcome.html + +$(BUILDROOT)/Resources/en.lproj/License.txt: $(BUILDROOT)/Resources/en.lproj + cat ../../NOTICE ../../LICENSE > $(BUILDROOT)/Resources/en.lproj/License.txt + chmod 644 $(BUILDROOT)/Resources/en.lproj/License.txt + +$(BUILDROOT)/Resources/en.lproj: $(BUILDROOT)/Resources + install -d $(BUILDROOT)/Resources/en.lproj + +$(BUILDROOT)/Resources: $(BUILDROOT) + install -d $(BUILDROOT)/Resources + +$(BUIDROOT)/Root/bin $(BUILDROOT)/Root/lib $(BUILDROOT)/Root/man: $(BUILDROOT)/Root $(RELEASE) + ( cd $(RELEASE); sudo make install InstallGroup=wheel TempRoot=../$(BUILDROOT)/Root ) + +$(BUILDROOT)/Root: $(BUILDROOT) + install -d $(BUILDROOT)/Root + +$(RELEASE): $(BUILDROOT) ../bintar/$(TARBALL) + tar -xzf ../bintar/$(TARBALL) + +$(BUILDROOT): + install -d $(BUILDROOT) + +clean: + rm -rf $(PKG) $(BUILDROOT) $(RELEASE) diff --git a/pkg/rmpkg b/pkg/rmpkg new file mode 100755 index 0000000000..c3a19ea6c0 --- /dev/null +++ b/pkg/rmpkg @@ -0,0 +1,37 @@ +#! /bin/csh -f + +# rmpkg +# 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 ( $#argv != 1) then + echo "Usage: sudo $0 release" + echo " e.g.,: sudo $0 8.4" + exit 1 +endif + +if ( `id -u` != 0 ) then + echo "$0 must be run as root (e.g., via sudo)" + exit 1 +endif + +set R = $1 + +if (!(-e /usr/local/lib/csv$R)) then + echo "(Petite) Chez Scheme Version $R doesn't appear to be installed" + exit +endif + +/bin/rm -rf /usr/local/bin/petite /usr/local/bin/scheme /usr/local/bin/scheme-script /usr/local/lib/csv$R /usr/local/share/man/man1/petite.1.gz /usr/local/share/man/man1/scheme.1.gz +pkgutil --forget chezscheme diff --git a/rpm/Makefile b/rpm/Makefile new file mode 100644 index 0000000000..2b661b37a5 --- /dev/null +++ b/rpm/Makefile @@ -0,0 +1,84 @@ +# Makefile +# 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. + +version = 9.5.1 +release = 1 +m := $(shell find ../bin/* -type d | xargs basename) +arch := $(shell if test "$(m)" == "i3le" ; then echo i686 ; elif test "$(m)" == "a6le" ; then echo x86_64 ; else echo UNKNOWN ; fi) +DOTUSER := $(shell ls -ld . | sed -e 's/[^ ]* *[^ ]* *\([^ ]*\).*/\1/') +DOTGROUP := $(shell ls -ldg . | sed -e 's/[^ ]* *[^ ]* *\([^ ]*\).*/\1/') +TMP := $(shell pwd)/tmp +SPEC = $(TMP)/ChezScheme-$(version)-$(arch)-$(release).spec +RELEASE = csv$(version) +TARBALL = $(RELEASE)-$(m).tar.gz +RPM = ChezScheme-$(version)-$(release).$(arch).rpm + + +$(RPM): $(TMP)/$(RPM) + sudo install -m 644 -o $(DOTUSER) -g $(DOTGROUP) $(TMP)/${RPM} . + +$(TMP)/$(RPM): $(SPEC) $(TMP)/$(TARBALL) + sudo setarch $(arch) rpmbuild\ + --target $(arch)\ + --define "_topdir $(TMP)" \ + --define "_srcrpmdir $(TMP)" \ + --define "_rpmdir $(TMP)" \ + --define "_sourcedir $(TMP)" \ + --define "_builddir $(TMP)" \ + --define "_rpmfilename %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm" \ + --quiet -ba $(SPEC) + +$(SPEC): $(TMP) + echo 'Summary: Chez Scheme: A high-performance version of Scheme' > $(SPEC) + echo 'Name: ChezScheme' >> $(SPEC) + echo 'Version: $(version)' >> $(SPEC) + echo 'Release: $(release)' >> $(SPEC) + echo 'Provides: ChezScheme-runtime-{VERSION}' >> $(SPEC) + echo 'License: Apache 2.0' >> $(SPEC) + echo 'URL: http://github.com/cisco/chezscheme' >> $(SPEC) + echo 'Group: Development/Languages' >> $(SPEC) + echo 'Source0: $(TARBALL)' >> $(SPEC) + echo 'BuildRoot: %{_tmppath}/%{name}' >> $(SPEC) + echo '%description' >> $(SPEC) + echo 'Chez Scheme is a programming language and an implementation of that language,' >> $(SPEC) + echo 'with supporting tools and documentation.' >> $(SPEC) + echo '' >> $(SPEC) + echo '%prep' >> $(SPEC) + echo '' >> $(SPEC) + echo '%setup -T -b 0 -n $(RELEASE)' >> $(SPEC) + echo '' >> $(SPEC) + echo '#%build' >> $(SPEC) + echo '' >> $(SPEC) + echo '%install' >> $(SPEC) + echo 'make install TempRoot=%{buildroot}' >> $(SPEC) + echo '' >> $(SPEC) + echo '%files' >> $(SPEC) + echo '#%doc NOTICE' >> $(SPEC) + echo '#%doc LICENSE' >> $(SPEC) + echo '/usr/lib/$(RELEASE)' >> $(SPEC) + echo '/usr/bin/petite' >> $(SPEC) + echo '/usr/bin/scheme' >> $(SPEC) + echo '/usr/bin/scheme-script' >> $(SPEC) + echo '/usr/share/man/man1/petite.1.gz' >> $(SPEC) + echo '/usr/share/man/man1/scheme.1.gz' >> $(SPEC) + +$(TMP)/$(TARBALL): $(TMP) ../bintar/$(TARBALL) + cp ../bintar/$(TARBALL) $(TMP) + +$(TMP): + mkdir $(TMP) + +clean: + rm -rf $(TMP) $(RPM) diff --git a/workarea b/workarea index 736ef4c6f1..995fd21aec 100755 --- a/workarea +++ b/workarea @@ -237,6 +237,16 @@ case $M in ;; 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)