## ## Makefile for Proof General development. ## ## Author: David Aspinall ## ## Maintainer: Proof General maintainer ## ## Developer use only, not part of distribution. ## ## make clean - remove intermediate files ## make distclean - remove all generated files ## ## make ChangeLog - make ChangeLog from CVS sources (uses emacs) ## make tag - tag the CVS sources with CVS_RELEASENAME ## make untag - remove tag CVS_RELEASENAME from the sources ## make dist - make a distribution from sources with above tag ## make rpm - make RPM packages based on etc/ProofGeneral.spec ## ## make release - make tag, dist, and install it in RELEASEDIR. ## make releaseall - make release, local installation and rpmrelease. ## ## make distinstall - install distribution build by 'make dist' ## into DISTINSTALLDIR. ## ## make releaseclean - clean up after 'make dist' 'make rpmrelease'. ## ## ## Notes: ## Use 'make untag' before re-trying if 'make releaseall' fails. ## Use 'make releaseclean' if giving up, to remove temp dirs. ## ## No facility to edit html to make a full release in this makefile. ## Too much effort for infrequenty used function. ## Must edit download.html by hand, then run ## ## make releaseall VERSION=2.0 ## ## Or similar to make the required version. ## ## $Id$ ## ########################################################################### # Release tag. For pre-releases. Watch out with # substitution in tag target below, which edits # html/download.html PRERELEASE_TAG=2.0pre$(shell date "+%y%m%d") # This is used for full releases to control the tag name # and distribution name. No editing of html is done # when PRERELEASE_TAG != VERSION VERSION=$(PRERELEASE_TAG) NAME = ProofGeneral LATESTNAME = ProofGeneral-latest DEVELLATESTNAME = ProofGeneral-devel-latest # NB: CVS tags can't have points in them. # Substitute points for hyphens. CVS_VERSION=$(shell echo $(VERSION) | sed 's/\./-/g') # Name of tar file and RPM file. RELEASENAME = ProofGeneral-$(VERSION) DEVELRELEASENAME = ProofGeneral-$(VERSION)-devel CVS_RELEASENAME = Release-$(CVS_VERSION) # Where to release (i.e. copy) a new distribution to RELEASEDIR = /home/proofgen/www/ CVSNAME = ProofGeneral # Remote commands to use CVS in server mode and install files. # With these settings the build can be done remotely. # MACHINE=hope # CVSROOT = :ext:$(USER)@$(MACHINE).dcs.ed.ac.uk:/home/proofgen/src # CVS_RSH=ssh CVSROOT = /home/proofgen/src # Emacs EMACS=xemacs # GNU version of tar, please TAR=tar # For recursive make DEVELMAKE=make -f Makefile.devel # Files not to include the distribution area or tarball NONDISTFILES=html etc Makefile.devel doc/notes.txt images/*.xcf images/notes.txt images/gimp images/Makefile # Files not to include in the distribution tarball IGNOREDFILES=doc/ProofGeneral.dvi Makefile.devel todo # Temporary directory to to build a distribution in DISTBUILDIR = /tmp/ProofGeneralRelease # Temporary RPM topdir for building packages as non-root user. RPMTOPDIR=/tmp/ProofGeneral-rpm RPMRC=$(RPMTOPDIR)/rpmrc RPM=rpm --rcfile $(RPMRC) RELEASENAMETAR = $(RELEASENAME).tar RELEASENAMETARGZ = $(RELEASENAMETAR).gz # What the RPM should be called. RELEASENAMERPM = $(RELEASENAME)-1.noarch.rpm DEVELRELEASENAMETAR = $(DEVELRELEASENAME).tar DEVELRELEASENAMETARGZ = $(DEVELRELEASENAMETAR).gz # Files not kept under cvs to clean away. FILES_NONCVS = ChangeLog TAGS # Where to install a distribution # DISTINSTALLDIR=/usr/local/share/elisp/proofgeneral # value for dcs.ed.ac.uk: DISTINSTALLDIR=/export/local/share/elisp # Copied from distributed Makefile ELISP_DIRS=generic lego coq isa PWD=$(shell pwd) BYTECOMP = $(EMACS) -batch -q -no-site-file -eval '(setq load-path (append (list "$(PWD)/generic" "$(PWD)/lego" "$(PWD)/coq" "$(PWD)/isa") load-path))' -f batch-byte-compile EL=$(shell for f in $(ELISP_DIRS); do ls $$f/*.el; done) ELC=$(EL:.el=.elc) .SUFFIXES: .el .elc .el.elc: $(BYTECOMP) $*.el FORCE: # Targets to pre-compile for distribution # Slightly dodgy to include elisp compile here, because # it can be incompatible across emacs versions. alldist: alldocs ############################################################ # # Make tags file # tags: $(ELC) etags $(EL) > TAGS ############################################################ # # Re-Build ChangeLog. CVSROOT must be set correctly. # Correct dependency would be to check repository for changes! # ChangeLog: FORCE rm -f ChangeLog $(EMACS) -batch -q -f vc-update-change-log -f save-buffer ############################################################ # # Clean up intermediate files # clean: (cd doc; $(MAKE) clean) (cd images; $(MAKE) clean) ############################################################ # # Clean up all generated files. # distclean: clean (cd doc; $(MAKE) distclean) (cd images; $(MAKE) distclean) ############################################################ # # Clean up all non-cvs files. # cvsclean: clean rm -rf $(FILES_NONCVS) (cd doc; $(MAKE) distclean) (cd images; $(MAKE) cvsclean) ############################################################ # # Documentation # doc: FORCE (cd doc; $(MAKE) doc) alldocs: FORCE (cd doc; $(MAKE) all) ############################################################ # # Images # images: FORCE (cd images; $(MAKE) images) ############################################################ ## ## tag: tag the CVS sources of working directory with CVS_RELEASENAME, ## set version stamp in proof-site.el and ProofGeneral.spec ## to VERSION, and edit download.html if VERSION matches ## PRERELEASE_TAG. ## tag: @echo "*************************************************" @echo " Tagging sources... (fails if CVS source dirty)" @echo "*************************************************" if [ -n "`cvs -n -q update`" ]; then exit 1; fi # Tag proof-site.el and ProofGeneral.spec (cd generic; mv proof-site.el proof-site.el.old; sed -e 's/defconst proof-version \".*\"/defconst proof-version \"Proof General, Version $(VERSION) released by da,tms. Email proofgen@dcs.ed.ac.uk.\"/g' proof-site.el.old > proof-site.el; rm proof-site.el.old) (cd etc; mv ProofGeneral.spec ProofGeneral.spec.old; sed -e 's/Version:.*$$/Version: $(VERSION)/g' ProofGeneral.spec.old > ProofGeneral.spec; rm ProofGeneral.spec.old) # Edit download.html only for prereleases. # Careful: the sed command below relies on previous value of PRERELEASE_TAG. if [ $(PRERELEASE_TAG) = $(VERSION) ]; then \ (cd html; mv download.html download.html.old; sed -e 's|ProofGeneral-2\.0pre......|ProofGeneral-$(PRERELEASE_TAG)|g' download.html.old > download.html; rm download.html.old) \ fi # This hack to SOURCE: name is only needed because we have an obsolete version # of rpm installed on standard machines at dcs.ed, and we have to build with # that version. Otherwise we could use the %{version} macro in the spec file. (cd etc; mv ProofGeneral.spec ProofGeneral.spec.old; sed -e 's/ProofGeneral-.*.tar.gz/$(RELEASENAMETARGZ)/g' ProofGeneral.spec.old > ProofGeneral.spec; rm ProofGeneral.spec.old) cvs commit -m"Set version tag for new release." generic/proof-site.el html/download.html etc/ProofGeneral.spec cvs tag "$(CVS_RELEASENAME)" ############################################################ ## ## untag: Remove the CVS_RELEASENAME tag from the CVS sources. ## untag: cvs tag -d "$(CVS_RELEASENAME)" ############################################################ ## ## dist: make a distribution in DISTBUILDIR from CVS sources ## Builds for user-distribution, from sources tagged ## with CVS_RELEASENAME. ## Moves html files to parent directory, removes ## non-distributed files. ## dist: @echo "*************************************************" @echo " Cleaning dist build directory..." @echo "*************************************************" rm -rf $(DISTBUILDIR) mkdir -p $(DISTBUILDIR) @echo "*************************************************" @echo " Running cvs export .." @echo "*************************************************" (cd $(DISTBUILDIR); cvs export -kv -r "$(CVS_RELEASENAME)" -d $(RELEASENAME) $(CVSNAME)) @echo "*************************************************" @echo " Running 'make alldist' for new release .." @echo "*************************************************" (cd $(DISTBUILDIR)/$(RELEASENAME); $(DEVELMAKE) alldist) (cd $(DISTBUILDIR)/$(RELEASENAME); $(DEVELMAKE) clean) @echo "*************************************************" @echo " Copying doc files .." @echo "*************************************************" (cp -pr $(DISTBUILDIR)/$(RELEASENAME)/doc $(DISTBUILDIR)) @echo "*************************************************" @echo " Moving html files .." @echo "*************************************************" (cd $(DISTBUILDIR)/$(RELEASENAME)/html; mv * ../..) @echo "*************************************************" @echo " Cleaning non-distributed files .." @echo "*************************************************" (cd $(DISTBUILDIR)/$(RELEASENAME); rm -rf $(NONDISTFILES)) @echo "*************************************************" @echo " Making compressed tar file..." @echo "*************************************************" (cd $(DISTBUILDIR); for f in $(IGNOREDFILES); do echo $$f >> ignoredfiles; done) $(TAR) -cvhf $(DISTBUILDIR)/$(RELEASENAMETAR) -C $(DISTBUILDIR) $(RELEASENAME) -X $(DISTBUILDIR)/ignoredfiles gzip -9 $(DISTBUILDIR)/$(RELEASENAMETAR) @echo "*************************************************" @echo " Finished making dist." @echo "*************************************************" ############################################################ ## ## develdist: make a distribution for developers from ## raw CVS sources. ## develdist: @echo "*************************************************" @echo " Making developer distribution..." @echo "*************************************************" mkdir -p $(DISTBUILDIR) (cd $(DISTBUILDIR); cvs export -kv -r "$(CVS_RELEASENAME)" -d $(RELEASENAME)-devel $(CVSNAME)) $(TAR) -cvhf $(DISTBUILDIR)/$(DEVELRELEASENAMETAR) -C $(DISTBUILDIR) $(DEVELRELEASENAME) gzip -9 $(DISTBUILDIR)/$(DEVELRELEASENAMETAR) ############################################################ ## ## release: ## tag the CVS sources, and make a distribution. ## Then install the distribution in RELEASEDIR. ## WARNING: RELEASEDIR is not cleaned, but files there ## with same names will be overwritten. ## Moreover, a link ProofGeneral -> ProofGeneral- ## is made. ## release: distclean tag dist develdist mkdir -p $(RELEASEDIR) cp -pfr $(DISTBUILDIR)/* $(RELEASEDIR) (cd $(RELEASEDIR); rm -f $(NAME); ln -s $(RELEASENAME) $(NAME)) (cd $(RELEASEDIR); ln -sf $(RELEASENAMETARGZ) $(LATESTNAME).tar.gz) (cd $(RELEASEDIR); ln -sf $(RELEASENAME)-1.noarch.rpm $(LATESTNAME).noarch.rpm) (cd $(RELEASEDIR); ln -sf $(DEVELRELEASENAMETARGZ) $(DEVELLATESTNAME).tar.gz) @echo "*************************************************" @echo " Finished installing dist." @echo "*************************************************" ############################################################ ## ## rpm: ## Build an RPM package from the recently made distribution ## $(DISTBUILDIR)/$(RELEASENAMETAR).gz, using the spec and ## patch file in ./etc ## ## rpm: rm -rf $(RPMTOPDIR) mkdir -p $(RPMTOPDIR) $(RPMTOPDIR)/BUILD $(RPMTOPDIR)/SOURCES $(RPMTOPDIR)/SRPMS $(RPMTOPDIR)/RPMS $(RPMTOPDIR)/RPMS/noarch echo "topdir: $(RPMTOPDIR)" > $(RPMRC) cp -p etc/ProofGeneral.patch $(RPMTOPDIR)/SOURCES cp -p $(DISTBUILDIR)/$(RELEASENAMETARGZ) $(RPMTOPDIR)/SOURCES $(RPM) -ba etc/ProofGeneral.spec ############################################################ ## ## rpmrelease: ## Build and install RPM packages into RELEASEDIR. ## rpmrelease: rpm cp -pf $(RPMTOPDIR)/SRPMS/* $(RPMTOPDIR)/RPMS/noarch/* $(RELEASEDIR) ############################################################ ## ## releaseclean: ## Clean up temporary directories after building dist/release. ## releaseclean: rm -rf $(DISTBUILDIR) $(RPMTOPDIR) ############################################################ ## ## releaseall: ## Do everything! ## releaseall: release rpmrelease distinstall releaseclean ############################################################ ## ## releasefinal: ## Do everything for a final release based on a pre-release. ## Don't use ## releasefinal: release rpmrelease distinstall releaseclean ############################################################ ## ## distinstall: ## Do everything for a local release. ## distall: distclean tag dist distinstall releaseclean ############################################################ # # distinstall: # Install distribution from $(DISTBUILDIR) into DISTINSTALLDIR # Clean out DISTINSTALLDIR first. # NB! Simple install, no attempt to put info files, etc, in # special places. # distinstall: rm -rf $(DISTINSTALLDIR)/$(NAME) mkdir -p $(DISTINSTALLDIR) (cd $(DISTINSTALLDIR); \ $(TAR) -xpzf $(DISTBUILDIR)/$(RELEASENAMETARGZ); \ mv $(RELEASENAME) $(NAME))