summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: 7dc08071ee6d382bbde15024b6f6cbc4d4ce27e6 (plain) (blame)
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
########################################################################
# Copyright (C) 2021, 2022  Alejandro Colomar <alx.manpages@gmail.com>
# SPDX-License-Identifier:  GPL-2.0  OR  LGPL-2.0
########################################################################
# Conventions:
#
# - Follow "Makefile Conventions" from the "GNU Coding Standards" closely.
#   However, when something could be improved, don't follow those.
# - Uppercase variables, when referring files, refer to files in this repo.
# - Lowercase variables, when referring files, refer to system files.
# - Lowercase variables starting with '_' refer to absolute paths,
#   including $(DESTDIR).
# - Uppercase variables starting with '_' refer to temporary files produced
#   in $builddir.
# - Variables ending with '_' refer to a subdir of their parent dir, which
#   is in a variable of the same name but without the '_'.  The subdir is
#   named after this project: <*/man>.
# - Variables ending in '_rm' refer to files that can be removed (exist).
# - Variables ending in '_rmdir' refer to dirs that can be removed (exist).
# - Targets of the form '%-rm' remove their corresponding file '%'.
# - Targets of the form '%/.-rmdir' remove their corresponding dir '%/'.
# - Targets of the form '%/.' create their corresponding directory '%/'.
# - Every file or directory to be created depends on its parent directory.
#   This avoids race conditions caused by `mkdir -p`.  Only the root
#   directories are created with parents.
# - The 'FORCE' target is used to make phony some variables that can't be
#   .PHONY to avoid some optimizations.
#
########################################################################

SHELL := /usr/bin/env bash -Eeuo pipefail


MAKEFLAGS += --no-builtin-rules
MAKEFLAGS += --no-builtin-variables
MAKEFLAGS += --no-print-directory
MAKEFLAGS += --warn-undefined-variables


srcdir := .


include $(srcdir)/lib/cmd.mk


.PHONY: all
all: build
	@:

.PHONY: help
help:
	$(info	all			Alias for "build")
	$(info	)
	$(info	clean			Remove $$(builddir))
	$(info	)
	$(info	build			Alias for "build-html")
	$(info	)
	$(info	build-html		Build HTML manual pages)
	$(info	html			Alias for "build-html")
	$(info	)
	$(info	build-src		Alias for "build-src-ld")
	$(info	build-src-c		Extract C programs from EXAMPLES)
	$(info	build-src-cc		Compile C programs from EXAMPLES)
	$(info	build-src-ld		Link C programs from EXAMPLES)
	$(info	)
	$(info	lint			Wrapper for "lint-c lint-man")
	$(info	lint-c			Wrapper for lint-c-* targets)
	$(info	lint-c-checkpatch	Lint C programs from EXAMPLES with checkpatch(1))
	$(info	lint-c-clang-tidy	Lint C programs from EXAMPLES with clang-tidy(1))
	$(info	lint-c-cpplint		Lint C programs from EXAMPLES with cpplint(1))
	$(info	lint-c-iwyu		Lint C programs from EXAMPLES with iwyu(1))
	$(info	lint-man		Wrapper for lint-man-* targets)
	$(info	lint-man-groff		Lint man pages with groff(1))
	$(info	lint-man-mandoc		Lint man pages with mandoc(1))
	$(info	)
	$(info	[un]install		Alias for "[un]install-man")
	$(info	[un]install-man		Wrapper for [un]install-man* targets)
	$(info	[un]install-man1	[Un]install man pages in section 1)
	$(info	[un]install-man2	[Un]install man pages in section 2)
	$(info	[un]install-man2type	[Un]install man pages in section 2type)
	$(info	[un]install-man3	[Un]install man pages in section 3)
	$(info	[un]install-man3const	[Un]install man pages in section 3const)
	$(info	[un]install-man3head	[Un]install man pages in section 3head)
	$(info	[un]install-man3type	[Un]install man pages in section 3type)
	$(info	[un]install-man4	[Un]install man pages in section 4)
	$(info	[un]install-man5	[Un]install man pages in section 5)
	$(info	[un]install-man6	[Un]install man pages in section 6)
	$(info	[un]install-man7	[Un]install man pages in section 7)
	$(info	[un]install-man8	[Un]install man pages in section 8)
	$(info	)
	$(info	[un]install-html	[Un]install HTML manual pages)
	$(info	)
	$(info	dist			Wrapper for dist-* targets)
	$(info	dist-tar		Create a tarball of the repository)
	$(info	dist-gz			Create a compressed tarball (.tar.gz))
	$(info	dist-xz			Create a compressed tarball (.tar.xz))
	$(info	)
	$(info	builddirs-dist		Create directories needed by "dist")
	$(info	builddirs-html		Create directories needed by "build-html")
	$(info	builddirs-src		Create directories needed by "build-src")
	$(info	lintdirs		Create directories needed by "lint")
	$(info	installdirs		Create directories needed by "install")
	$(info	installdirs-html	Create directories needed by "install-html")
	$(info	installdirs-man		Create directories needed by "install-man")
	$(info	installdirs-man1	Create directories needed by "install-man1")
	$(info	installdirs-man2	Create directories needed by "install-man2")
	$(info	installdirs-man2type	Create directories needed by "install-man2type")
	$(info	installdirs-man3	Create directories needed by "install-man3")
	$(info	installdirs-man3const	Create directories needed by "install-man3const")
	$(info	installdirs-man3head	Create directories needed by "install-man3head")
	$(info	installdirs-man3type	Create directories needed by "install-man3type")
	$(info	installdirs-man4	Create directories needed by "install-man4")
	$(info	installdirs-man5	Create directories needed by "install-man5")
	$(info	installdirs-man6	Create directories needed by "install-man6")
	$(info	installdirs-man7	Create directories needed by "install-man7")
	$(info	installdirs-man8	Create directories needed by "install-man8")
	$(info	)
	$(info	help			Print this help)

.SECONDEXPANSION:


include $(srcdir)/lib/build.mk
include $(srcdir)/lib/build-html.mk
include $(srcdir)/lib/build-src.mk
include $(srcdir)/lib/dist.mk
include $(srcdir)/lib/install.mk
include $(srcdir)/lib/install-html.mk
include $(srcdir)/lib/install-man.mk
include $(srcdir)/lib/lint.mk
include $(srcdir)/lib/lint-c.mk
include $(srcdir)/lib/lint-man.mk


$(V).SILENT:
FORCE: