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