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