Rearrange Github pages-related Makefile targets
[pipeglade.git] / Makefile
blobdd6f1eb0ed98be04d023b6e4209a09ed1fe3a21f
1 # Copyright (c) 2014-2017 Bert Burgemeister <trebbu@googlemail.com>
3 # Permission is hereby granted, free of charge, to any person
4 # obtaining a copy of this software and associated documentation files
5 # (the "Software"), to deal in the Software without restriction,
6 # including without limitation the rights to use, copy, modify, merge,
7 # publish, distribute, sublicense, and/or sell copies of the Software,
8 # and to permit persons to whom the Software is furnished to do so,
9 # subject to the following conditions:
11 # The above copyright notice and this permission notice shall be
12 # included in all copies or substantial portions of the Software.
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
18 # BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19 # ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 # SOFTWARE.
23 prefix ?= /usr/local
24 bindir ?= $(prefix)/bin
25 mandir ?= $(prefix)/man
26 man1dir ?= $(mandir)/man1
27 CCFLAGS += -Wall -Wextra -pedantic -g
28 # FreeBSD:
29 # Suppressing warning: named variadic macros are a GNU extension
30 # in /usr/local/include/X11/Xfuncproto.h:157:24:
31 CCFLAGS += -Wno-variadic-macros
32 CCFLAGS += -std=c99
33 CCFLAGS += -D_POSIX_C_SOURCE=200809L
34 CCFLAGS += -D_XOPEN_SOURCE=700
35 CCFLAGS += `pkg-config --cflags --libs gtk+-3.0 gmodule-2.0`
36 CCFLAGS += `pkg-config --cflags --libs gtk+-unix-print-3.0`
37 CCFLAGS += `pkg-config --cflags --libs libxml-2.0`
38 CC != which cc
41 all: pipeglade
43 pipeglade: pipeglade.c Makefile
44 $(CC) $< -o $@ $(CCFLAGS)
46 install: pipeglade pipeglade.1
47 install -d $(bindir) $(man1dir)
48 install pipeglade $(bindir)
49 install -m644 pipeglade.1 $(man1dir)
51 uninstall:
52 rm -f $(bindir)/pipeglade
53 rm -f $(man1dir)/pipeglade.1.gz
55 clean:
56 rm -f pipeglade
57 rm -rf gh-pages
59 .PHONY: install uninstall clean
63 # Build targets end here. The rest of this Makefile is only useful
64 # for project maintenance.
66 # It works with FreeBSD's version of make (aka pmake). It won't work
67 # with GNU make.
68 ######################################################################
69 VERSION != (which git >/dev/null && git describe --tags || echo "NONE") | cut -d "-" -f 1
71 CODE_VERSION != awk '/\#define VERSION/{print $$3}' pipeglade.c | tr -d '"'
72 NEWS_VERSION != awk '/^[0-9]+\.[0-9]+\.[0-9]+ .*([0-9]+-[01][0-9]-[0-3][0-9])/{print $$1}' NEWS | head -n1
73 NEWS_DATE != awk '/^[0-9]+\.[0-9]+\.[0-9]+ .*([0-9]+-[01][0-9]-[0-3][0-9])/{print substr($$2, 2, 10)}' NEWS | head -n1
74 TODAY != date +%F
75 MANPAGE_DATE != grep "^\.Dd " pipeglade.1
76 MANPAGE_TODAY != date '+.Dd %B %e, %Y' | awk '{print $$1, $$2, $$3, $$4}'
77 .SUFFIXES: .ui .svg .jpg
80 # Create a new git tag only if there is a NEWS headline in the format
81 # 1.2.3 (2015-03-22)
83 # where 1.2.3 matches the current pipeglade version and the date is of
84 # today, and if pipeglade.1 has today's date in its .Dd line.
85 # (NEWS headlines are lines that start at column 0.)
86 git-tag:
87 @if test "$(NEWS_DATE)" != "$(TODAY)"; then \
88 echo "NEWS: $(NEWS_DATE) != $(TODAY)"; false; \
90 @if test "$(NEWS_VERSION)" != "$(CODE_VERSION)"; then \
91 echo "NEWS: $(NEWS_VERSION) != $(CODE_VERSION)"; false; \
93 @if test "$(MANPAGE_DATE)" != "$(MANPAGE_TODAY)"; then \
94 echo "MANPAGE: $(MANPAGE_DATE) != $(MANPAGE_TODAY)"; false; \
96 git tag $(CODE_VERSION);
99 # Extract a list of actions from source code...
100 prog-actions:
101 @awk -F\" '/eql\((ud->)?action, \"[a-zA-Z0-9_-]+\"/{print $$2}' pipeglade.c | sort -u
103 # ... and from manual page
104 man-actions:
105 @awk -F: '/Cm :[a-zA-Z0-9_-]+/{print $$2}' pipeglade.1 | awk '{print $$1}' | sort -u
107 # Extract from manual page a list of subsections on widgets...
108 man-widgets:
109 @awk '/\.Ss Gtk[A-Z][a-zA-Z]+$$/{print $$2}' pipeglade.1 | sort -u
111 # ... and the respective TOC entries
112 man-toc:
113 @awk '/BEGIN_TOC/,/END_TOC/' pipeglade.1 | awk '/\.Sx Gtk[A-Z][a-zA-Z]+ [,.]$$/{print $$2}'
115 # Extract from manual page an outline of the headings
116 man-outline: www-template/outline.xsl gh-pages/pipeglade.1.html
117 @xsltproc --html ${.ALLSRC}
119 # Items marked done in list of all widgets
120 done-list:
121 @awk '!/^#/&&/Gtk[A-Z][a-zA-Z]/&&/done/{print $$1}' buildables.txt