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