xref: /illumos-gate/usr/src/head/Makefile (revision a74909fd)
1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21#
22# Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
23#
24# Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
25# Use is subject to license terms.
26#
27# Copyright 2013 Garrett D'Amore <garrett@damore.org>
28#
29# head/Makefile
30#
31# include global definitions
32include ../Makefile.master
33
34sparc_HDRS=
35i386_HDRS=	stack_unwind.h
36
37# Headers are listed one per line so that TeamWare can auto-merge most changes
38
39KRB5HDRS= mit_copyright.h mit-sipb-copyright.h
40
41ATTRDB_HDRS=	secdb.h auth_attr.h exec_attr.h prof_attr.h user_attr.h \
42	auth_list.h
43
44HDRS=   $($(MACH)_HDRS)  $(ATTRDB_HDRS) \
45	aio.h		\
46	alloca.h	\
47	apptrace.h	\
48	apptrace_impl.h	\
49	ar.h		\
50	archives.h	\
51	assert.h	\
52	atomic.h	\
53	attr.h		\
54	complex.h	\
55	config_admin.h	\
56	cpio.h		\
57	crypt.h		\
58	ctype.h		\
59	deflt.h		\
60	devid.h		\
61	devmgmt.h	\
62	devpoll.h	\
63	dial.h		\
64	dirent.h	\
65	dlfcn.h		\
66	door.h		\
67	elf.h		\
68	err.h		\
69	errno.h		\
70	euc.h		\
71	exacct.h	\
72	exacct_impl.h	\
73	execinfo.h	\
74	fatal.h		\
75	fcntl.h		\
76	fenv.h		\
77	float.h		\
78	floatingpoint.h	\
79	fmtmsg.h	\
80	fnmatch.h	\
81	ftw.h		\
82	gelf.h		\
83	getopt.h	\
84	getwidth.h	\
85	glob.h		\
86	grp.h		\
87	iconv.h		\
88	ieeefp.h	\
89	ifaddrs.h	\
90	inttypes.h	\
91	iso646.h	\
92	klpd.h		\
93	langinfo.h	\
94	lastlog.h	\
95	lber.h		\
96	ldap.h		\
97	libelf.h	\
98	libgen.h	\
99	libintl.h	\
100	libw.h		\
101	libzonecfg.h	\
102	limits.h	\
103	linenum.h	\
104	link.h		\
105	listen.h	\
106	locale.h	\
107	macros.h	\
108	malloc.h	\
109	math.h		\
110	mdmn_changelog.h	\
111	memory.h	\
112	meta.h		\
113	meta_runtime.h	\
114	metadyn.h	\
115	mon.h		\
116	monetary.h	\
117	mp.h		\
118	mqueue.h	\
119	nan.h		\
120	ndbm.h		\
121	ndpd.h		\
122	netconfig.h	\
123	netdb.h		\
124	netdir.h	\
125	nl_types.h	\
126	nlist.h		\
127	note.h		\
128	nsctl.h		\
129	nsswitch.h	\
130	nss_common.h	\
131	nss_dbdefs.h	\
132	nss_netdir.h	\
133	paths.h		\
134	pcsample.h	\
135	pfmt.h		\
136	pkgdev.h	\
137	pkginfo.h	\
138	pkglocs.h	\
139	pkgstrct.h	\
140	pkgtrans.h	\
141	poll.h		\
142	port.h		\
143	priv.h		\
144	priv_utils.h	\
145	proc_service.h	\
146	procfs.h	\
147	prof.h		\
148	project.h	\
149	pthread.h	\
150	pw.h		\
151	pwd.h		\
152	rctl.h		\
153	re_comp.h	\
154	regex.h		\
155	regexp.h	\
156	resolv.h	\
157	rje.h		\
158	rtld_db.h	\
159	sac.h		\
160	sched.h		\
161	schedctl.h	\
162	sdssc.h		\
163	search.h	\
164	semaphore.h	\
165	setjmp.h	\
166	sgtty.h		\
167	shadow.h	\
168	siginfo.h	\
169	signal.h	\
170	spawn.h		\
171	stdarg.h	\
172	stdbool.h	\
173	stddef.h	\
174	stdint.h	\
175	stdio.h		\
176	stdio_ext.h	\
177	stdio_tag.h	\
178	stdio_impl.h	\
179	stdlib.h	\
180	storclass.h	\
181	string.h	\
182	strings.h	\
183	stropts.h	\
184	synch.h		\
185	sysexits.h	\
186	syslog.h	\
187	syms.h		\
188	tar.h		\
189	termio.h	\
190	termios.h	\
191	tgmath.h	\
192	thread.h	\
193	thread_db.h	\
194	time.h		\
195	tiuser.h	\
196	tzfile.h	\
197	ucontext.h	\
198	ucred.h		\
199	ulimit.h	\
200	unistd.h	\
201	userdefs.h	\
202	ustat.h		\
203	utime.h		\
204	utmp.h		\
205	utmpx.h		\
206	valtools.h	\
207	values.h	\
208	varargs.h	\
209	wait.h		\
210	wchar.h		\
211	wchar_impl.h	\
212	wctype.h	\
213	widec.h		\
214	wordexp.h	\
215	xlocale.h	\
216	xti.h		\
217	xti_inet.h	\
218	zone.h
219
220ISOHDRS = \
221	ctype_iso.h	\
222	limits_iso.h	\
223	locale_iso.h	\
224	math_c99.h	\
225	math_iso.h	\
226	setjmp_iso.h  	\
227	signal_iso.h	\
228	stdarg_c99.h	\
229	stdarg_iso.h	\
230	stddef_iso.h	\
231	stdio_c99.h	\
232	stdio_iso.h	\
233	stdlib_c99.h	\
234	stdlib_iso.h	\
235	string_iso.h	\
236	time_iso.h	\
237	wchar_c99.h	\
238	wchar_iso.h	\
239	wctype_iso.h
240
241ARPAHDRS = 		\
242	ftp.h		\
243	inet.h		\
244	nameser.h	\
245	telnet.h	\
246	tftp.h		\
247	nameser_compat.h
248
249AUDIOHDRS =		\
250	au.h
251
252UUIDHDRS =		\
253	uuid.h
254
255# rpcsvc headers which are just headers (not derived from a .x file)
256RPCSVC_SRC_HDRS =	\
257	bootparam.h	\
258	daemon_utils.h	\
259	dbm.h		\
260	nis_db.h	\
261	nislib.h	\
262	svc_dg_priv.h	\
263	yp_prot.h	\
264	ypclnt.h	\
265	yppasswd.h	\
266	ypupd.h		\
267	rpc_sztypes.h
268
269# rpcsvc headers which are generated from .x files
270RPCSVC_GEN_HDRS = \
271	bootparam_prot.h \
272	mount.h		\
273	nfs_prot.h	\
274	nfs4_prot.h	\
275	nis.h		\
276	rex.h		\
277	rquota.h	\
278	rstat.h		\
279	rusers.h	\
280	rwall.h		\
281	spray.h		\
282	ufs_prot.h	\
283	nfs_acl.h
284
285LVMRPCHDRS = \
286mhdx.h mdiox.h meta_basic.h metad.h metamed.h metamhd.h metacl.h
287
288SYMHDRASSERT = $(ROOT)/usr/include/iso/assert_iso.h
289SYMHDRERRNO = $(ROOT)/usr/include/iso/errno_iso.h
290SYMHDRFLOAT = $(ROOT)/usr/include/iso/float_iso.h
291SYMHDRISO646 = $(ROOT)/usr/include/iso/iso646_iso.h
292
293RPCGENFLAGS = -C -h
294rpcsvc/rwall.h :=	RPCGENFLAGS += -M
295meta_basic.h :=	RPCGENFLAGS += -M
296metad.h := RPCGENFLAGS += -M
297metamed.h := RPCGENFLAGS += -M
298mhdx.h := RPCGENFLAGS += -M
299mdiox.h := RPCGENFLAGS += -M
300metamhd.h := RPCGENFLAGS += -M
301metacl.h := RPCGENFLAGS += -M
302
303# rpcsvc rpcgen source (.x files)
304#
305# yp.x is an attempt at codifying what was hand coded in RPCL.
306# Unfortunately it doesn't quite work. (The handcoded stuff isn't
307# expressable in RPCL) this is due to the fact that YP was written
308# before rpcgen existed.  Hence, yp_prot.h cannot be derived from yp.x
309#
310# There is no `.h' for nis_object.x because it is included by nis.x and
311# the resulting .h is nis.h.
312
313RPCSVCPROTS = \
314$(RPCSVC_GEN_HDRS:%.h=%.x)        nis_object.x       yp.x
315
316LVMSVCPROTS = \
317$(LVMRPCHDRS:%.h=%.x)
318
319RPCSVCHDRS= $(RPCSVC_SRC_HDRS) $(RPCSVC_GEN_HDRS)
320
321PROTOHDRS=   dumprestore.h routed.h ripngd.h rwhod.h timed.h
322
323ROOTHDRS= $(HDRS:%=$(ROOT)/usr/include/%)  \
324	$(KRB5HDRS:%=$(ROOT)/usr/include/kerberosv5/%)  \
325	$(ISOHDRS:%=$(ROOT)/usr/include/iso/%)  \
326	$(ARPAHDRS:%=$(ROOT)/usr/include/arpa/%)  \
327	$(AUDIOHDRS:%=$(ROOT)/usr/include/audio/%)  \
328	$(UUIDHDRS:%=$(ROOT)/usr/include/uuid/%)  \
329	$(RPCSVCHDRS:%=$(ROOT)/usr/include/rpcsvc/%)  \
330	$(RPCSVCPROTS:%=$(ROOT)/usr/include/rpcsvc/%)  \
331	$(LVMRPCHDRS:%=$(ROOT)/usr/include/%) \
332	$(PROTOHDRS:%=$(ROOT)/usr/include/protocols/%)
333
334DIRS= iso arpa audio rpcsvc protocols security uuid kerberosv5
335ROOTDIRS= $(DIRS:%=$(ROOT)/usr/include/%)
336
337SED=	sed
338
339# check files really don't exist
340#
341# should do something with the rpcsvc headers
342
343iso/%.check:		iso/%.h
344	$(DOT_H_CHECK)
345
346arpa/%.check:		arpa/%.h
347	$(DOT_H_CHECK)
348
349audio/%.check:		audio/%.h
350	$(DOT_H_CHECK)
351
352rpcsvc/%.check:		rpcsvc/%.h
353	$(DOT_H_CHECK)
354
355rpcsvc/%.check:		rpcsvc/%.x
356	$(DOT_X_CHECK)
357
358protocols/%.check:	protocols/%.h
359	$(DOT_H_CHECK)
360
361kerberosv5/%.check:             kerberosv5/%.h
362	$(DOT_H_CHECK)
363
364uuid/%.check:		uuid/%.h
365	$(DOT_H_CHECK)
366
367# Note that the derived headers (rpcgen) are not checked at this time.  These
368# need work at the source level and rpcgen itself has a bug which causes a
369# cstyle violation.  Furthermore, there seems to be good reasons for the
370# generated headers to not pass all of the hdrchk rules.
371#
372# Add the following to the CHECKHDRS list to activate the .x checks:
373#	$(RPCSVCPROTS:%.x=rpcsvc/%.check) \
374#
375CHECKHDRS= $(HDRS:%.h=%.check)  \
376	$(KRB5HDRS:%.h=kerberosv5/%.check)  \
377	$(ISOHDRS:%.h=iso/%.check)  \
378	$(ARPAHDRS:%.h=arpa/%.check)  \
379	$(AUDIOHDRS:%.h=audio/%.check)  \
380	$(UUIDHDRS:%.h=uuid/%.check)  \
381	$(RPCSVC_SRC_HDRS:%.h=rpcsvc/%.check) \
382	$(PROTOHDRS:%.h=protocols/%.check)
383
384# headers which won't quite meet the standards...
385#
386# assert.h is required by ansi-c to *not* be idempotent (section 4.1.2).
387# Hence the trailing guard is not the last thing in the file nor can it
388# be without playing silly games.
389
390assert.check	:= HDRCHK_TAIL = | grep -v "end guard wrong" | true
391
392# install rules
393
394$(ROOT)/usr/include/security/%: security/%
395	$(INS.file)
396
397$(ROOT)/usr/include/protocols/%: protocols/%
398	$(INS.file)
399
400$(ROOT)/usr/include/rpcsvc/%: rpcsvc/%
401	$(INS.file)
402
403$(ROOT)/usr/include/kerberosv5/%: kerberosv5/%
404	$(INS.file)
405
406$(ROOT)/usr/include/arpa/%: arpa/%
407	$(INS.file)
408
409$(ROOT)/usr/include/audio/%: audio/%
410	$(INS.file)
411
412$(ROOT)/usr/include/iso/%: iso/%
413	$(INS.file)
414
415$(ROOT)/usr/include/uuid/%: uuid/%
416	$(INS.file)
417
418$(ROOT)/usr/include/%: %
419	$(INS.file)
420
421.KEEP_STATE:
422
423.PARALLEL:	$(ROOTHDRS) $(CHECKHDRS)
424
425install_h: 	$(ROOTDIRS) .WAIT $(ROOTHDRS) $(SYMHDRASSERT) $(SYMHDRERRNO) \
426		$(SYMHDRFLOAT) $(SYMHDRISO646)
427
428check:	$(CHECKHDRS)
429
430clean clobber:
431	$(RM) $(LVMRPCHDRS);
432	cd rpcsvc ; $(RM) $(RPCSVC_GEN_HDRS)
433
434$(ROOTDIRS):
435	$(INS.dir)
436
437$(SYMHDRASSERT):
438	-$(RM) $@; $(SYMLINK) ../assert.h $@
439
440$(SYMHDRERRNO):
441	-$(RM) $@; $(SYMLINK) ../errno.h $@
442
443$(SYMHDRFLOAT):
444	-$(RM) $@; $(SYMLINK) ../float.h $@
445
446$(SYMHDRISO646):
447	-$(RM) $@; $(SYMLINK) ../iso646.h $@
448
449rpcsvc/%.h:	rpcsvc/%.x
450	$(RPCGEN) $(RPCGENFLAGS) $< -o $@
451
452rpcsvc/nis.h:	rpcsvc/nis.x
453	$(RPCGEN) $(RPCGENFLAGS) rpcsvc/nis.x |\
454	$(SED) -e '/EDIT_START/,$$ d' > $@
455
456meta_basic.h:	../uts/common/sys/lvm/meta_basic.x
457	$(RPCGEN) $(RPCGENFLAGS)  ../uts/common/sys/lvm/meta_basic.x | \
458	awk '/<synch.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
459	/<thread.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
460	{ print $0 } \
461	' > $@
462
463metad.h:	metad.x
464	$(RPCGEN) $(RPCGENFLAGS)  metad.x | \
465	awk '/<synch.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
466	/<thread.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
467	{ print $0 } \
468	' > $@
469
470mhdx.h:	../uts/common/sys/lvm/mhdx.x
471	$(RPCGEN) $(RPCGENFLAGS) ../uts/common/sys/lvm/mhdx.x | \
472	awk '/<synch.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
473	/<thread.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
474	{ print $0 } \
475	' > $@
476
477mdiox.h:	../uts/common/sys/lvm/mdiox.x
478	$(RPCGEN) $(RPCGENFLAGS) ../uts/common/sys/lvm/mdiox.x | \
479	nawk '{sub(/sys\/lvm\/md_mhdx/, "mhdx"); print $$0}' | \
480	nawk '{sub(/sys\/lvm\/md_basic/, "meta_basic"); print $$0}' | \
481	awk '/<synch.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
482	/<thread.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
483	{ print $0 } \
484	' > $@
485
486metamed.h:	../uts/common/sys/lvm/metamed.x
487	$(RPCGEN) $(RPCGENFLAGS) ../uts/common/sys/lvm/metamed.x | \
488	nawk '{sub(/sys\/lvm\/md_basic/, "meta_basic"); print $$0}' | \
489	awk '/<synch.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
490	/<thread.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
491	{ print $0 } \
492	' > $@
493
494metamhd.h:	metamhd.x
495	$(RPCGEN) $(RPCGENFLAGS) metamhd.x | \
496	awk '/<synch.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
497	/<thread.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
498	{ print $0 } \
499	' > $@
500
501metacl.h:	metacl.x
502	$(RPCGEN) $(RPCGENFLAGS) metacl.x | \
503	awk '/<synch.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
504	/<thread.h>/ { print "#ifdef _REENTRANT"; print $$0; print "#endif\t/* _REENTRANT */"; next } \
505	{ print $0 } \
506	' > $@
507