## ## Makefile for Proof General development. ## ## Author: David Aspinall ## ## 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_RELEASE_TAG ## make dist - make a distribution from sources with above tag ## make release - make tag, dist, and install it in RELEASEDIR. ## ## $Id$ ## ########################################################################### # TODO: (da) Add target for byte compilation. # Release tags. NB: CVS tags can't have points in them. RELEASE_TAG=2.0-pre$(shell date "+%y%m%d") CVS_RELEASE_TAG=2-0-pre$(shell date "+%y%m%d") NAME = ProofGeneral RELEASENAME = ProofGeneral-2.0 # Where to install a new distribution RELEASEDIR = /home/proofgen/www # Remote commands to use CVS in server mode and install files. # With these settings the install can be done remotely. CVSNAME = ProofGeneral CVSROOT = :ext:$(USER)@ssh.dcs.ed.ac.uk:/home/proofgen/src REMOTE=ssh ssh.dcs.ed.ac.uk CVS_RSH=ssh # Byte compilation command BYTECOMP = $(EMACS) -batch -q -f batch-byte-compile EMACS=xemacs # Files not to include the distribution area or tarball NONDISTFILES=todo html Makefile doc/Makefile # Files not to include in the distribution tarball IGNOREDFILES=doc/ProofGeneral.dvi # Where to build a distribution DISTBUILDIR = /tmp/ProofGeneralRelease # Files not kept under cvs to clean away. FILES_NONCVS = ChangeLog FORCE: # Targets to pre-compile for distribution # Slightly dodgy to include elisp compile here, because # it can be incompatible across emacs versions. alldist: alldocs ############################################################ # # 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) ############################################################ # # Clean up all generated files. # distclean: clean rm -rf $(FILES_NONCVS) (cd doc; $(MAKE) distclean) ############################################################ # # Documentation # doc: FORCE (cd doc; $(MAKE) doc) alldocs: FORCE (cd doc; $(MAKE) all) ############################################################ ## ## tag: tag the CVS sources of working directory with RELEASE_TAG, ## and edit version stamp in proof-site.el ## (Developers only) ## tag: @echo "*************************************************" @echo " Tagging sources... (fails if CVS source dirty)" @echo "*************************************************" if [ -n "`cvs -n -q update`" ]; then exit 1; fi (cd generic; mv proof-site.el proof-site.el.old; sed -e 's/defconst proof-general-version\n \".*\"/defconst proof-general-version\n \"Proof General, Version $(RELEASE_TAG) released by da,tms. Email proofgen@dcs.ed.ac.uk.\"/g' proof-site.el.old > proof-site.el; rm proof-site.el.old) cvs commit -m"Set version tag for release." generic/proof-site.el cvs tag "Release-$(CVS_RELEASE_TAG)" ############################################################ ## ## dist: make a distribution in DISTBUILDIR from CVS sources ## Builds from sources tagged with CVS_RELEASE_TAG. ## Moves html files to parent directory, and removes ## non-distributed files. ## (Developer only) ## 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 "Release-$(CVS_RELEASE_TAG)" -d $(RELEASENAME) $(CVSNAME)) @echo "*************************************************" @echo " Running 'make alldist' for new release .." @echo "*************************************************" (cd $(DISTBUILDIR)/$(RELEASENAME); make alldist) (cd $(DISTBUILDIR)/$(RELEASENAME); make 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)/$(RELEASENAME).tar -C $(DISTBUILDIR) $(RELEASENAME) -X $(DISTBUILDIR)/ignoredfiles gzip -9 $(DISTBUILDIR)/$(RELEASENAME).tar @echo "*************************************************" @echo " Finished making dist." @echo "*************************************************" ############################################################ ## ## 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 $(REMOTE) mkdir -p $(RELEASEDIR) $(REMOTE) cp -pfr $(DISTBUILDIR)/* $(RELEASEDIR) $(REMOTE) (cd $(RELEASEDIR); ln -sf $(RELEASENAME) $(NAME)) @echo "*************************************************" @echo " Finished installing dist." @echo "*************************************************"