1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276
|
##
## Makefile for Proof General.
##
## Author: David Aspinall <David.Aspinall@ed.ac.uk>
##
## make - do "compile" targets
## make compile - make .elc's
## make scripts - edit paths to bash/perl/PGHOME in scripts
## make install - install into system directories
## make clean - return to clean source
##
## Edit the EMACS setting below or call with an explicit one, like this:
##
## make EMACS=emacs-23.0.60
## or
## make EMACS=/Applications/Emacs.app/Contents/MacOS/Emacs
##
## $Id: Makefile,v 12.3 2012/03/05 18:52:34 tews Exp $
##
###########################################################################
# Set this according to your version of Emacs.
# NB: this is also used to set default install path names below.
EMACS=$(shell if [ -z "`which emacs`" ]; then echo "Emacs executable not found"; exit 1; else echo emacs; fi)
# EMACS=/Applications/Emacs\ 23.4.app/Contents/MacOS/Emacs
# We default to /usr rather than /usr/local because installs of
# desktop and doc files under /usr/local are unlikely to work with
# rest of the system. If that's no good for you, edit the paths
# individually before the install section.
# NB: DEST_PREFIX is used for final destination prefix, in case we're
# packaging into a build prefix rather than live root (e.g. in rpmbuild).
# NBB: DESTDIR provides for staged installs, for instance when building
# Debian packages, see http://www.gnu.org/prep/standards/html_node/DESTDIR.html
PREFIX=$(DESTDIR)/usr
DEST_PREFIX=$(DESTDIR)/usr
PWD=$(shell pwd)
PROVERS=coq
OTHER_ELISP=generic lib
ELISP_DIRS=${PROVERS} ${OTHER_ELISP}
ELISP_EXTRAS=
EXTRA_DIRS = images
DOC_FILES=AUTHORS BUGS COMPATIBILITY CHANGES COPYING INSTALL README REGISTER doc/*.pdf
DOC_EXAMPLES=acl2/*.acl2 hol98/*.sml isar/*.thy lclam/*.lcm lego/*.l pgshell/*.pgsh phox/*.phx plastic/*.lf twelf/*.elf
DOC_SUBDIRS=${DOC_EXAMPLES} */README* */CHANGES */BUGS
BATCHEMACS=${EMACS} --batch --no-site-file -q
# Scripts to edit paths to shells
BASH_SCRIPTS = isar/interface bin/proofgeneral
PERL_SCRIPTS = lego/legotags coq/coqtags isar/isartags
# Scripts to edit path to PG
PG_SCRIPTS = bin/proofgeneral
# Scripts to install to bin directory
BIN_SCRIPTS = bin/proofgeneral lego/legotags coq/coqtags isar/isartags
# Setting load path might be better in Elisp, but seems tricky to do
# only during compilation. Another idea: put a function in proof-site
# to output the compile-time load path and ELISP_DIRS so these are set
# just in that one place.
BYTECOMP = $(BATCHEMACS) -eval '(setq load-path (append (mapcar (lambda (d) (concat "${PWD}/" (symbol-name d))) (quote (${ELISP_DIRS}))) load-path))' -eval '(progn (require (quote bytecomp)) (require (quote mouse)) (require (quote tool-bar)) (require (quote fontset)) (setq byte-compile-warnings (remove (quote cl-functions) (remove (quote noruntime) byte-compile-warning-types))) (setq byte-compile-error-on-warn t))' -f batch-byte-compile
EL=$(shell for f in $(ELISP_DIRS); do ls $$f/*.el; done)
ELC=$(EL:.el=.elc)
.SUFFIXES: .el .elc
default: all
FORCE:
##
## compile : byte compile all lisp files
##
## Compiling can show up errors in the code, but be wary of fixing obsoletion
## or argument call warnings unless they're valid for all supported Emacsen.
##
compile: $(EL)
@echo "****************************************************************"
@echo " Byte compiling... "
@echo "****************************************************************"
$(MAKE) elc
@echo "****************************************************************"
@echo " Finished."
@echo "****************************************************************"
##
## Make an individual .elc. Building separately means we need to be
## careful to add proper requires in source files and prevent
## evaluating/optimising top-level forms too early. Using a separate
## emacs process for each file is slower but avoids any chance of
## accidently polluting the compilation environment, it also should
## work with make -j n.
##
.el.elc:
$(BYTECOMP) $*.el
elc: $(ELC)
##
## Default targets
##
all: compile
##
## Remove generated targets
##
clean: cleanpgscripts clean-prepared-doc
rm -f $(ELC) *~ */*~ .\#* */.\#* */.autotest.log */.profile.log
(cd doc; $(MAKE) clean)
distclean: clean
##
## Install files
##
DESKTOP_PREFIX=${PREFIX}
# Set Elisp directories according to paths used in Red Hat RPMs
# (which may or may not be official Emacs policy). We generate
# a pg-init.el file which loads the appropriate proof-site.el.
ELISPP=share/${EMACS}/site-lisp/proofgeneral
ELISP_START=${PREFIX}/share/${EMACS}/site-lisp/site-start.d
ELISP=${PREFIX}/${ELISPP}
DEST_ELISP=${DEST_PREFIX}/${ELISPP}
BINDIR=${PREFIX}/bin
DESKTOP=${PREFIX}/share
DOCDIR=${PREFIX}/share/doc/proofgeneral
MANDIR=${PREFIX}/share/man/man1
INFODIR=${PREFIX}/share/info
install: install-desktop install-elisp install-bin
install-desktop:
mkdir -p ${DESKTOP}/icons/hicolor/16x16
cp etc/desktop/icons/16x16/proofgeneral.png ${DESKTOP}/icons/hicolor/16x16
mkdir -p ${DESKTOP}/icons/hicolor/32x32
cp etc/desktop/icons/32x32/proofgeneral.png ${DESKTOP}/icons/hicolor/32x32
mkdir -p ${DESKTOP}/icons/hicolor/48x48
cp etc/desktop/icons/48x48/proofgeneral.png ${DESKTOP}/icons/hicolor/48x48
mkdir -p ${DESKTOP}/pixmaps
cp etc/desktop/icons/48x48/proofgeneral.png ${DESKTOP}/pixmaps
mkdir -p ${DESKTOP}/applications
cp etc/desktop/proofgeneral.desktop ${DESKTOP}/applications
mkdir -p ${DESKTOP}/mime-info
cp etc/desktop/mime-info/proofgeneral.mime ${DESKTOP}/mime-info
cp etc/desktop/mime-info/proofgeneral.keys ${DESKTOP}/mime-info
# backwards compatibility with old linuxes
mkdir -p ${DESKTOP}/application-registry
cp etc/desktop/application-registry/proofgeneral.applications ${DESKTOP}/application-registry
# NB: .el files are not strictly necessary, but we package/install them
# for the time being to help with debugging, or for users to recompile.
install-elisp: install-el
# NB: "elisp" directory actually includes the extra subdirs in EXTRA_DIRS,
# i.e. images. FIXME: we could put these elsewhere, but
# then we would need to adjust paths in proof-site.el.
# FIMXE 3: Michaƫl Cadilhac pointed out that 'cp -p' when used with
# sudo to install will give users ownership instead of root.
# Should use install program or fix ownerships afterwards here.
install-el:
mkdir -p ${ELISP}
for f in ${ELISP_DIRS} ${EXTRA_DIRS}; do mkdir -p ${ELISP}/$$f; done
for f in ${ELISP_DIRS}; do cp -pf $$f/*.el ${ELISP}/$$f; done
for f in ${EXTRA_DIRS}; do cp -prf $$f/* ${ELISP}/$$f; done
for f in ${ELISP_EXTRAS}; do cp -pf $$f ${ELISP}/$$f; done
install-elc: compile
mkdir -p ${ELISP}
for f in ${ELISP_DIRS} ${EXTRA_DIRS}; do mkdir -p ${ELISP}/$$f; done
for f in ${ELISP_DIRS}; do cp -pf $$f/*.elc ${ELISP}/$$f; done
for f in ${ELISP_EXTRAS}; do cp -pf $$f ${ELISP}/$$f; done
install-init:
mkdir -p ${ELISP_START}
echo ';;; pg-init.el --- setup for Proof General' > ${ELISP_START}/pg-init.el
echo "(setq load-path (append load-path '(\"${DEST_ELISP}/generic\")))" >> ${ELISP_START}/pg-init.el
echo "(require 'proof-site)" >> ${ELISP_START}/pg-init.el
install-bin:
mkdir -p ${BINDIR}
cp debian/proofgeneral-shell-script ${BINDIR}/proofgeneral
install-doc: doc.info doc.pdf
mkdir -p ${MANDIR}
cp -pf doc/proofgeneral.1 ${MANDIR}
mkdir -p ${INFODIR}
cp -pf doc/*.info ${INFODIR}
/sbin/install-info ${INFODIR}/proofgeneral.info* ${INFODIR}/dir
/sbin/install-info ${INFODIR}/PG-adapting.info* ${INFODIR}/dir
mkdir -p ${DOCDIR}
for f in ${DOC_FILES}; do cp -pf $$f ${DOCDIR}; done
for f in ${DOC_EXAMPLES}; do mkdir -p ${DOCDIR}/`dirname $$f`; cp -pf $$f ${DOCDIR}/$$f; done
doc: FORCE
(cd doc; $(MAKE) EMACS=$(EMACS) $*)
doc.%: FORCE
(cd doc; $(MAKE) EMACS=$(EMACS) $*)
# The install-doc target above is the upstream target. The following
# target builds the user manual and renames the files, such that
# dh_installdocs will work.
.PHONY: prepare-doc
prepare-doc: doc.info doc.pdf doc.html
mv doc/ProofGeneral doc/html
mv doc/ProofGeneral.pdf doc/proofgeneral.pdf
mv doc/ProofGeneral.info doc/proofgeneral.info
.PHONY: clean-prepared-doc
clean-prepared-doc:
rm -rf doc/html doc/proofgeneral.pdf doc/proofgeneral.info
##
## scripts: try to patch bash and perl scripts with correct paths
##
scripts: bashscripts perlscripts pgscripts
bashscripts:
@(bash="`which bash`"; \
if [ -z "$$bash" ]; then \
echo "Could not find bash - bash paths not checked" >&2; \
exit 0; \
fi; \
for i in $(BASH_SCRIPTS); do \
sed "s|^#.*!.*/bin/bash.*$$|#!$$bash|" < $$i > .tmp \
&& cat .tmp > $$i; \
done; \
rm -f .tmp)
perlscripts:
@(perl="`which perl`"; \
if [ -z "$$perl" ]; then \
echo "Could not find perl - perl paths not checked" >&2; \
exit 0; \
fi; \
for i in $(PERL_SCRIPTS); do \
sed "s|^#.*!.*/bin/perl.*$$|#!$$perl|" < $$i > .tmp \
&& cat .tmp > $$i; \
done; \
rm -f .tmp)
# FIXME: this next edit is really for install case, shouldn't be made
# just when user types 'make'
pgscripts:
@(for i in $(PG_SCRIPTS); do \
sed "s|PGHOMEDEFAULT=.*$$|PGHOMEDEFAULT=${DEST_ELISP}|" < $$i > .tmp \
&& cat .tmp > $$i; \
done; \
rm -f .tmp)
# Set PGHOME path in scripts back to default location.
cleanpgscripts:
@(for i in $(PG_SCRIPTS); do \
sed "s|PGHOMEDEFAULT=.*$$|PGHOMEDEFAULT=\$$HOME/ProofGeneral|" < $$i > .tmp \
&& cat .tmp > $$i; \
done; \
rm -f .tmp)
##
## Include developer's makefile if it exists here.
##
-include Makefile.devel
|