summaryrefslogtreecommitdiffstats
path: root/share/mk/install/man.mk
blob: 373c22c01fb4818ee7989c1552adeff172ea7289 (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
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
########################################################################
# Copyright (C) 2021-2023  Alejandro Colomar <alx@kernel.org>
# SPDX-License-Identifier:  GPL-2.0  OR  LGPL-2.0
########################################################################


ifndef MAKEFILE_INSTALL_MAN_INCLUDED
MAKEFILE_INSTALL_MAN_INCLUDED := 1


include $(MAKEFILEDIR)/cmd.mk
include $(MAKEFILEDIR)/compress.mk
include $(MAKEFILEDIR)/install/_.mk
include $(MAKEFILEDIR)/src.mk


LINK_PAGES := .so
ifeq ($(LINK_PAGES),.so)
else ifeq ($(LINK_PAGES),symlink)
else
$(warning "LINK_PAGES": "$(LINK_PAGES)")
$(error Valid values for "LINK_PAGES": [".so", "symlink"])
endif


mandir      := $(datarootdir)/man
man1dir     := $(mandir)/man1
man2dir     := $(mandir)/man2
man2typedir := $(mandir)/man2type
man3dir     := $(mandir)/man3
man3constdir:= $(mandir)/man3const
man3headdir := $(mandir)/man3head
man3typedir := $(mandir)/man3type
man4dir     := $(mandir)/man4
man5dir     := $(mandir)/man5
man6dir     := $(mandir)/man6
man7dir     := $(mandir)/man7
man8dir     := $(mandir)/man8
man1ext     := .1$(Z)
man2ext     := .2$(Z)
man2typeext := .2type$(Z)
man3ext     := .3$(Z)
man3constext:= .3const$(Z)
man3headext := .3head$(Z)
man3typeext := .3type$(Z)
man4ext     := .4$(Z)
man5ext     := .5$(Z)
man6ext     := .6$(Z)
man7ext     := .7$(Z)
man8ext     := .8$(Z)


_mandir       := $(DESTDIR)$(mandir)
_man1dir      := $(DESTDIR)$(man1dir)
_man2dir      := $(DESTDIR)$(man2dir)
_man2typedir  := $(DESTDIR)$(man2typedir)
_man3dir      := $(DESTDIR)$(man3dir)
_man3constdir := $(DESTDIR)$(man3constdir)
_man3headdir  := $(DESTDIR)$(man3headdir)
_man3typedir  := $(DESTDIR)$(man3typedir)
_man4dir      := $(DESTDIR)$(man4dir)
_man5dir      := $(DESTDIR)$(man5dir)
_man6dir      := $(DESTDIR)$(man6dir)
_man7dir      := $(DESTDIR)$(man7dir)
_man8dir      := $(DESTDIR)$(man8dir)
_mandirs      := $(_man1dir)/ \
                 $(_man2dir)/ $(_man2typedir)/ \
                 $(_man3dir)/ $(_man3constdir)/ $(_man3headdir)/ $(_man3typedir)/ \
                 $(_man4dir)/ \
                 $(_man5dir)/ \
                 $(_man6dir)/ \
                 $(_man7dir)/ \
                 $(_man8dir)/ \

_man1pages      := $(patsubst $(MANDIR)/man1/%,$(_man1dir)/%$(Z),$(MAN1PAGES))
_man2pages      := $(patsubst $(MANDIR)/man2/%,$(_man2dir)/%$(Z),$(MAN2PAGES))
_man2typepages  := $(patsubst $(MANDIR)/man2type/%,$(_man2typedir)/%$(Z),$(MAN2TYPEPAGES))
_man3pages      := $(patsubst $(MANDIR)/man3/%,$(_man3dir)/%$(Z),$(MAN3PAGES))
_man3constpages := $(patsubst $(MANDIR)/man3const/%,$(_man3constdir)/%$(Z),$(MAN3CONSTPAGES))
_man3headpages  := $(patsubst $(MANDIR)/man3head/%,$(_man3headdir)/%$(Z),$(MAN3HEADPAGES))
_man3typepages  := $(patsubst $(MANDIR)/man3type/%,$(_man3typedir)/%$(Z),$(MAN3TYPEPAGES))
_man4pages      := $(patsubst $(MANDIR)/man4/%,$(_man4dir)/%$(Z),$(MAN4PAGES))
_man5pages      := $(patsubst $(MANDIR)/man5/%,$(_man5dir)/%$(Z),$(MAN5PAGES))
_man6pages      := $(patsubst $(MANDIR)/man6/%,$(_man6dir)/%$(Z),$(MAN6PAGES))
_man7pages      := $(patsubst $(MANDIR)/man7/%,$(_man7dir)/%$(Z),$(MAN7PAGES))
_man8pages      := $(patsubst $(MANDIR)/man8/%,$(_man8dir)/%$(Z),$(MAN8PAGES))
_manpages       := $(_man1pages) \
                   $(_man2pages) $(_man2typepages) \
                   $(_man3pages) $(_man3constpages) $(_man3headpages) $(_man3typepages) \
                   $(_man4pages) \
                   $(_man5pages) \
                   $(_man6pages) \
                   $(_man7pages) \
                   $(_man8pages)

_man1pages_rm     := $(addsuffix -rm,$(wildcard $(_man1pages)))
_man2pages_rm     := $(addsuffix -rm,$(wildcard $(_man2pages)))
_man2typepages_rm := $(addsuffix -rm,$(wildcard $(_man2typepages)))
_man3pages_rm     := $(addsuffix -rm,$(wildcard $(_man3pages)))
_man3constpages_rm:= $(addsuffix -rm,$(wildcard $(_man3constpages)))
_man3headpages_rm := $(addsuffix -rm,$(wildcard $(_man3headpages)))
_man3typepages_rm := $(addsuffix -rm,$(wildcard $(_man3typepages)))
_man4pages_rm     := $(addsuffix -rm,$(wildcard $(_man4pages)))
_man5pages_rm     := $(addsuffix -rm,$(wildcard $(_man5pages)))
_man6pages_rm     := $(addsuffix -rm,$(wildcard $(_man6pages)))
_man7pages_rm     := $(addsuffix -rm,$(wildcard $(_man7pages)))
_man8pages_rm     := $(addsuffix -rm,$(wildcard $(_man8pages)))

_mandirs_rmdir     := $(addsuffix -rmdir,$(wildcard $(_mandirs)))
_man1dir_rmdir     := $(addsuffix -rmdir,$(wildcard $(_man1dir)))
_man2dir_rmdir     := $(addsuffix -rmdir,$(wildcard $(_man2dir)))
_man2typedir_rmdir := $(addsuffix -rmdir,$(wildcard $(_man2typedir)))
_man3dir_rmdir     := $(addsuffix -rmdir,$(wildcard $(_man3dir)))
_man3constdir_rmdir:= $(addsuffix -rmdir,$(wildcard $(_man3constdir)))
_man3headdir_rmdir := $(addsuffix -rmdir,$(wildcard $(_man3headdir)))
_man3typedir_rmdir := $(addsuffix -rmdir,$(wildcard $(_man3typedir)))
_man4dir_rmdir     := $(addsuffix -rmdir,$(wildcard $(_man4dir)))
_man5dir_rmdir     := $(addsuffix -rmdir,$(wildcard $(_man5dir)))
_man6dir_rmdir     := $(addsuffix -rmdir,$(wildcard $(_man6dir)))
_man7dir_rmdir     := $(addsuffix -rmdir,$(wildcard $(_man7dir)))
_man8dir_rmdir     := $(addsuffix -rmdir,$(wildcard $(_man8dir)))
_mandir_rmdir      := $(addsuffix -rmdir,$(wildcard $(_mandir)/))

MAN_SECTIONS     := 1 2 2type 3 3const 3head 3type 4 5 6 7 8
install_manX     := $(foreach x,$(MAN_SECTIONS),install-man$(x))
installdirs_manX := $(foreach x,$(MAN_SECTIONS),installdirs-man$(x))
uninstall_manX   := $(foreach x,$(MAN_SECTIONS),uninstall-man$(x))


$(_man1pages):      $(_man1dir)/%$(Z):      $(MANDIR)/man1/%      | $$(@D)/
$(_man2pages):      $(_man2dir)/%$(Z):      $(MANDIR)/man2/%      | $$(@D)/
$(_man2typepages):  $(_man2typedir)/%$(Z):  $(MANDIR)/man2type/%  | $$(@D)/
$(_man3pages):      $(_man3dir)/%$(Z):      $(MANDIR)/man3/%      | $$(@D)/
$(_man3constpages): $(_man3constdir)/%$(Z): $(MANDIR)/man3const/% | $$(@D)/
$(_man3headpages):  $(_man3headdir)/%$(Z):  $(MANDIR)/man3head/%  | $$(@D)/
$(_man3typepages):  $(_man3typedir)/%$(Z):  $(MANDIR)/man3type/%  | $$(@D)/
$(_man4pages):      $(_man4dir)/%$(Z):      $(MANDIR)/man4/%      | $$(@D)/
$(_man5pages):      $(_man5dir)/%$(Z):      $(MANDIR)/man5/%      | $$(@D)/
$(_man6pages):      $(_man6dir)/%$(Z):      $(MANDIR)/man6/%      | $$(@D)/
$(_man7pages):      $(_man7dir)/%$(Z):      $(MANDIR)/man7/%      | $$(@D)/
$(_man8pages):      $(_man8dir)/%$(Z):      $(MANDIR)/man8/%      | $$(@D)/


$(_manpages):
	$(info INSTALL	$@)
	$(INSTALL_DATA) -T $< $@
	$(SED) -i \
		-e '/^\.so /s, man1/\(.*\)\.1$$, $(notdir $(man1dir))/\1$(man1ext),' \
		-e '/^\.so /s, man2/\(.*\)\.2$$, $(notdir $(man2dir))/\1$(man2ext),' \
		-e '/^\.so /s, man2type/\(.*\)\.2type$$, $(notdir $(man2typedir))/\1$(man2typeext),' \
		-e '/^\.so /s, man3/\(.*\)\.3$$, $(notdir $(man3dir))/\1$(man3ext),' \
		-e '/^\.so /s, man3const/\(.*\)\.3const$$, $(notdir $(man3constdir))/\1$(man3constext),' \
		-e '/^\.so /s, man3head/\(.*\)\.3head$$, $(notdir $(man3headdir))/\1$(man3headext),' \
		-e '/^\.so /s, man3type/\(.*\)\.3type$$, $(notdir $(man3typedir))/\1$(man3typeext),' \
		-e '/^\.so /s, man4/\(.*\)\.4$$, $(notdir $(man4dir))/\1$(man4ext),' \
		-e '/^\.so /s, man5/\(.*\)\.5$$, $(notdir $(man5dir))/\1$(man5ext),' \
		-e '/^\.so /s, man6/\(.*\)\.6$$, $(notdir $(man6dir))/\1$(man6ext),' \
		-e '/^\.so /s, man7/\(.*\)\.7$$, $(notdir $(man7dir))/\1$(man7ext),' \
		-e '/^\.so /s, man8/\(.*\)\.8$$, $(notdir $(man8dir))/\1$(man8ext),' \
		$@
ifeq ($(LINK_PAGES),symlink)
	if $(GREP) '^\.so ' <$@ >/dev/null; then \
		$(GREP) '^\.so ' <$@ \
		| $(SED) 's,^\.so \(.*\),../\1,' \
		| $(XARGS) -I tgt $(LN) -fsT tgt $@; \
	fi
endif
ifeq ($(Z),.bz2)
	if ! $(TEST) -L $@; then \
		$(BZIP2) $(BZIP2FLAGS) <$@ \
		| $(SPONGE) $@; \
	fi
else ifeq ($(Z),.gz)
	if ! $(TEST) -L $@; then \
		$(GZIP) $(GZIPFLAGS) - <$@ \
		| $(SPONGE) $@; \
	fi
else ifeq ($(Z),.lz)
	if ! $(TEST) -L $@; then \
		$(LZIP) $(LZIPFLAGS) - <$@ \
		| $(SPONGE) $@; \
	fi
else ifeq ($(Z),.xz)
	if ! $(TEST) -L $@; then \
		$(XZ) $(XZFLAGS) - <$@ \
		| $(SPONGE) $@; \
	fi
endif

$(_mandirs): %/: | $$(dir %) $(_mandir)/

$(_mandirs_rmdir): $(_mandir)/man%/-rmdir: $$(_man%pages_rm) FORCE
$(_mandir_rmdir): $(uninstall_manX) FORCE


.PHONY: $(install_manX)
$(install_manX): install-man%: $$(_man%pages)
	@:

.PHONY: install-man
install-man: $(install_manX)
	@:

.PHONY: $(uninstall_manX)
$(uninstall_manX): uninstall-man%: $$(_man%pages_rm) $$(_man%dir_rmdir)
	@:

.PHONY: uninstall-man
uninstall-man: $(_mandir_rmdir) $(uninstall_manX)
	@:


endif  # MAKEFILE_INSTALL_MAN_INCLUDED