1 # GNU Mes --- Maxwell Equations of Software
2 # Copyright © 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
4 # This file is part of GNU Mes.
6 # GNU Mes is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or (at
9 # your option) any later version.
11 # GNU Mes is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with GNU Mes. If not, see <http://www.gnu.org/licenses/>.
22 abs_top_srcdir=@abs_top_srcdir@
23 abs_top_builddir=@abs_top_builddir@
25 GUILE_FLAGS:=--no-auto-compile -L . -L module -C . -C module
27 cleaning-p:=$(filter clean%, $(MAKECMDGOALS))$(filter %clean, $(MAKECMDGOALS))
32 ${srcdir}/configure --prefix=$(prefix)
74 .PHONY: $(PHONY_TARGETS)
88 ${srcdest}build-aux/build-cc.sh
91 ${srcdest}build-aux/build-cc32.sh
95 CC32=$(TCC) ${srcdest}build-aux/build-cc32.sh
98 $(warning skipping mes-tcc: no tcc)
102 ${srcdest}build-aux/build-mes.sh
105 ${srcdest}build-aux/build-x86_64-mes.sh
117 # Mes does not cache anything on the file system; therefore clean
127 etags ${srcdest}lib/*.c ${srcdest}lib/*/*.c ${srcdest}src/*.c ${srcdest}include/*.h ${srcdest}include/sys/*.h
130 ${srcdest}build-aux/build-guile.sh
133 rm -f $(shell find . -name '*.go')
139 ./pre-inst-env build-aux/check-mescc.sh
141 # Mes does not feature post-install checks yet, so we're great!
151 seed: all-go gcc mes-gcc mes-tcc
152 cd $(MES_SEED) && git reset --hard HEAD
153 MES=$(GUILE) GUILE=$(GUILE) SEED=1 ${srcdest}build-aux/build-mes.sh
154 cd $(MES_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
155 MES=$(GUILE) GUILE=$(GUILE) SEED=1 ${srcdest}build-aux/build-mes.sh
156 cp lib/x86-mes/elf32-header.hex2\
158 lib/x86-mes/libc+tcc.S\
161 lib/x86-mes/libgetopt.S\
162 $(MESCC_TOOLS_SEED)/libs
163 cd $(MESCC_TOOLS_SEED) && MES_PREFIX=$(PWD) ./bootstrap.sh
165 cd $(TINYCC_SEED) && MES_PREFIX=$(PWD) ./refresh.sh
168 doc/version.texi: ${srcdest}doc/mes.texi GNUmakefile
170 (set `LANG= date -r $< +'%d %B %Y'`;\
171 echo "@set UPDATED $$1 $$2 $$3"; \
172 echo "@set UPDATED-MONTH $$2 $$3"; \
173 echo "@set EDITION $(VERSION)"; \
174 echo "@set VERSION $(VERSION)") > $@
176 doc: doc/version.texi
180 $(warning skipping info: no makeinfo)
186 $(warning skipping man: no help2man)
191 doc/mes.info: ${srcdest}doc/mes.texi doc/version.texi ${srcdest}doc/images/gcc-mesboot-graph.dot GNUmakefile
192 $(MAKEINFO) -o $@ -I doc -I doc $<
194 doc/images/%.eps: ${srcdest}doc/images/%.dot
196 $(DOT) -T eps $< > $@
201 doc/images/%.pdf: ${srcdest}doc/images/%.dot
203 $(DOT) -T pdf $< > $@
208 doc/images/%.png: ${srcdest}doc/images/%.dot
210 $(DOT) -T png $< > $@
213 $(warning info: graphvis missing: no images)
216 man: doc/mes.1 doc/mescc.1
218 # disable builtin-rules
227 doc/mes.1: src/mes | build
228 MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) $(<F) > $@
230 doc/mescc.1: scripts/mescc src/mes | build
231 MES_ARENA=10000000 ./pre-inst-env $(HELP2MAN) $(<F) > $@
233 html: doc/html/index.html
235 doc/html/index.html: ${srcdest}doc/mes.texi doc/version.texi doc/images/gcc-mesboot-graph.png
236 $(MAKEINFO) --html -o $(@D) -I ${srcdest}doc -I doc $<
240 doc/mes.dvi: ${srcdest}doc/mes.texi
241 $(MAKEINFO) --dvi -I ${srcdest}doc -I doc -o doc/mes.dvi $<
245 doc/mes.pdf: ${srcdest}doc/mes.texi
246 $(MAKEINFO) --pdf -I ${srcdest}doc -I doc -o doc/mes.pdf $<
250 doc/mes.ps: ${srcdest}doc/mes.texi
251 $(MAKEINFO) --ps -I ${srcdest}doc -I doc -o doc/mes.ps $<
254 doc/images/gcc-mesboot-graph.eps\
255 doc/images/gcc-mesboot-graph.pdf\
256 doc/images/gcc-mesboot-graph.png
258 web: info $(WEB_IMAGES)
259 GENDOCS_TEMPLATE_DIR=doc build-aux/gendocs.sh -I doc -s ${srcdest}doc/mes.texi -o doc/web/manual --email bug-mes@gnu.org mes "GNU Mes manual"
262 COMMIT=$(shell test -e ${srcdest}.git && (cd ${srcdir} && git describe --dirty 2>/dev/null) || cat ${srcdest}.tarball-version)
263 TARBALL_VERSION=$(COMMIT:v%=%)
264 TARBALL_DIR:=$(PACKAGE)-$(TARBALL_VERSION)
265 TARBALL:=$(TARBALL_DIR).tar.gz
270 GIT_ARCHIVE_HEAD:=git archive HEAD --
271 GIT_LS_FILES:=git ls-files
272 ifeq ($(wildcard .git),)
273 GIT_ARCHIVE_HEAD:=tar -cf-
283 test ! -d .git || git diff --exit-code > /dev/null
284 test ! -d .git || git diff --cached --exit-code > /dev/null
285 @echo commit:$(COMMIT)
288 $(PERL) ${srcdest}build-aux/gitlog-to-changelog --srcdir=${srcdir} > $@
289 cat ChangeLog >> generate-ChangeLog
290 mv generate-ChangeLog ChangeLog
292 $(TARBALL): .tarball-version | generate-ChangeLog
294 --exclude=$(TARBALL_DIR);\
295 echo $^ | tr ' ' '\n')\
296 | GZIP=-n tar --sort=name --mtime=@0 --owner=0 --group=0 --numeric-owner\
297 --transform=s,^,$(TARBALL_DIR)/,S -T- -czf $@
298 git checkout ChangeLog
301 update-hash: $(TARBALL)
302 $(GUIX) download file://$(PWD)/$<
303 sed -i -e 's,(base32 #!mes!# "[^"]*"),(base32 #!mes!# "$(shell $(GUIX) hash $<)"),' guix/git/mes.scm
306 $(warning update-hash: no guix)
310 git tag -s v$(VERSION) -m "GNU Mes $(VERSION)."
313 # 0. doc: Release update, Release commit, make seed, test guix bootstrap
319 ./pre-inst-env $(GUIX) build mes@$(VERSION) --with-source=$(TARBALL)
321 release: update-hash | gen-announce guix-build
323 GPG_KEY_ID:=1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273
325 ../gnulib/build-aux/announce-gen\
328 --previous-version='0.16 '\
329 --current-version=$(VERSION)\
330 --gpg-key-id=$(GPG_KEY_ID)\
331 --url-directory=https://ftp.gnu.org/gnu/mes\
333 > doc/announce/ANNOUNCE-$(VERSION)-
335 installdirs: mkinstalldirs
338 $(DESTDIR)$(datadir)\
340 $(DESTDIR)$(infodir)\
344 mkdir -p $(DESTDIR)${docdir}
345 cp doc/mes.dvi $(DESTDIR)${docdir}
348 mkdir -p $(DESTDIR)${docdir}
349 tar -cf- -C doc html | tar -xf- -C $(DESTDIR)${docdir}
352 mkdir -p $(DESTDIR)${docdir}
353 cp doc/mes.pdf $(DESTDIR)${docdir}
356 mkdir -p $(DESTDIR)${docdir}
357 cp doc/mes.ps $(DESTDIR)${docdir}
359 # We do not strip binaries, binutils' strip corrupts M1+hex2-generated ELFs
360 install-strip: install
364 Usage: make [OPTION]... [TARGET]...
366 Main and non-standard targets:
367 all update everything
368 all-go update .go files
369 gcc update src/mes.gcc-out
370 dist update $(TARBALL)
371 doc update documentation
372 mes-gcc update src/mes.mes-gcc-out
373 mes-tcc update src/mes.mes-tcc-out
376 clean run git clean -dfx
377 clean-go clean .go files
378 info update info documentation
379 install install in $(prefix)
380 install-info install info docs in $(prefix)/share/info
382 seed update mes-seed in $(MES_SEED)
383 uninstall uninstall from $(prefix)
389 include ${srcdest}build-aux/export.make