usr/src/Makefile.master
author Mary Ding <mary.ding@oracle.com>
Mon, 27 Aug 2012 12:01:08 -0700
changeset 1772 4c262399a74e
parent 1644 e827d1934114
permissions -rw-r--r--
Added tag S11U1Build24 for changeset 62d9287d8d8f

#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#

#
# Copyright (c) 2007, 2012, Oracle and/or its affiliates. All rights reserved.
#

#
# Makefile.master, global definitions for system source
#

ROOT=	/proto

# Special reference pointers: these allow install to be built on
# machines that don't necessarily have the very latest ON or SFW packages,
# or when testing features that depend on changed ON/SFW interfaces.  (The
# only use of the *REF_GATE variables is here, so you can override just the
# *REF_PROTO variables if you need to point directly to a root directory.)
ONREF_GATE=
SFWREF_GATE=
ONREF_PROTO=$(ONREF_GATE:%=%/proto/root_$(MACH))
SFWREF_PROTO=$(SFWREF_GATE:%=%/proto/root_$(MACH))

# Locations of the main build tools.  Can be overridden in the environment.
BUILD_TOOLS=		/opt
ONBLD_TOOLS=            $(BUILD_TOOLS)/onbld
SPRO_ROOT=		$(BUILD_TOOLS)/SUNWspro
SPRO_VROOT=            	$(SPRO_ROOT)/sunstudio12.1

LINT=			$(SPRO_VROOT)/bin/lint
CC=			$(SPRO_VROOT)/bin/cc

#
# The following information regarding license terms and stripping CDDL
# is applicable only to employees of Oracle Corporation.  Anyone else
# building a release distribution from this source code must abide by
# all applicable license terms.  If in doubt, please seek legal advice.
#
# Solaris source is licensed under the CDDL, but binary distributions
# may not be. Because of this discrepancy, it is desirable to strip
# the CDDL from human readable files to avoid end user confusion.  
#
# To strip CDDL from installed files, set and export INS_STRIP_CDDL in
# your build environment:
#
#	INS_STRIP_CDDL= ; export INS_STRIP_CDDL
#
# For files which should NOT have CDDL stripped, because they contain
# CDDL start and end tags but are licensed by someone other than
# Oracle, set INS_STRIP_CDDL_OVR to $(POUND_SIGN) in your Makefile
# prior to including Makefile.master:
#
#	INS_STRIP_CDDL_OVR= $(POUND_SIGN)
#	include $(SRC)/Makefile.master
#
INS_STRIP_CDDL= $(POUND_SIGN)
$(INS_STRIP_CDDL)$(INS_STRIP_CDDL_OVR)INS_CDDL_ARG= -C
INS=            install $(INS_CDDL_ARG)

# Other commands
LD=			$(CC)
RM=			/usr/bin/rm -f
SYMLINK=		/usr/bin/ln -s
LN=			/usr/bin/ln
CP=			/usr/bin/cp
MV=			/usr/bin/mv -f
SH=			/usr/bin/sh
CHMOD=			/usr/bin/chmod
CHOWN=			/usr/bin/chown
CHGRP=			/usr/bin/chgrp
MKDIR=			/usr/bin/mkdir
TOUCH=			/usr/bin/touch
SED=			/usr/bin/sed
TAR=			/usr/bin/tar
ECHO=			/usr/bin/echo
PYTHON=			/usr/bin/python2.6
CAT=			/usr/bin/cat
GENCAT=			/usr/bin/gencat
XGETTEXT=		xgettext
XGETFLAGS=		-c TRANSLATION_NOTE
GNUXGETTEXT=		/usr/gnu/bin/xgettext
GNUXGETFLAGS=		--keyword=_ --keyword=N_
CSTYLE=			cstyle -pP
NAWK=			/usr/bin/nawk
GREP=			/usr/bin/grep
GGREP=			/usr/gnu/bin/grep

# Reference paths for ON
ONLIBDIR=		$(ONREF_PROTO)/lib
ONUSRLIBDIR=		$(ONREF_PROTO)/usr/lib
ONINCDIR=		$(ONREF_PROTO)/usr/include

# Common path definitions.
ADMINLIB=		/usr/snadm/lib
ROOTADMIN=		$(ROOT)/usr/snadm
ROOTADMINLIB=		$(ROOTADMIN)/lib
ROOTBIN=		$(ROOT)/bin
ROOTDC=			$(ROOT)/usr/share/distro_const
ROOTDC_PROFILE= $(ROOTDC)/profile
ROOTDC_SORT= $(ROOTDC)/sort
ROOTINC=		$(ROOT)/usr/include
ROOTINCADMIN=		$(ROOTINC)/admin
ROOTMAN=		$(ROOT)/usr/share/man
ROOTMAN1M=		$(ROOTMAN)/man1m
ROOTMAN4=		$(ROOTMAN)/man4
ROOTMANJAJP1M=		$(ROOTMAN)/ja_JP.UTF-8/man1m
ROOTMANJAJP4=		$(ROOTMAN)/ja_JP.UTF-8/man4
ROOTMANZHCN4=		$(ROOTMAN)/zh_CN.UTF-8/man4
ROOTMANZHCN1M=		$(ROOTMAN)/zh_CN.UTF-8/man1m
ROOTOPTINSTALLTESTBIN=	$(ROOT)/opt/install-test/bin
ROOTPYTHON=		$(ROOTUSRLIB)/python2.6
ROOTPYTHONVENDOR=	$(ROOTPYTHON)/vendor-packages
ROOTPYTHONVENDORINSTALL=	$(ROOTPYTHONVENDOR)/osol_install
ROOTPYTHONVENDORINSTALLAI=	$(ROOTPYTHONVENDORINSTALL)/auto_install
ROOTPYTHONVENDORINSTALLPROF=    $(ROOTPYTHONVENDORINSTALL)/profile
ROOTPYTHONVENDORSOLINSTALL=	$(ROOTPYTHONVENDOR)/solaris_install
ROOTPYTHONVENDORSOLINSTALLBOOT =	$(ROOTPYTHONVENDORSOLINSTALL)/boot
ROOTPYTHONVENDORSOLINSTALLCONFIGURATION =	$(ROOTPYTHONVENDORSOLINSTALL)/configuration
ROOTPYTHONVENDORSOLINSTALLDATACACHE=	$(ROOTPYTHONVENDORSOLINSTALL)/data_object
ROOTPYTHONVENDORINSTALLDC=	$(ROOTPYTHONVENDORSOLINSTALL)/distro_const
ROOTPYTHONVENDORINSTALLDCCHKPT= $(ROOTPYTHONVENDORINSTALLDC)/checkpoints
ROOTPYTHONVENDORINSTALLDCCHKPTXSLT= $(ROOTPYTHONVENDORINSTALLDCCHKPT)/xslt
ROOTPYTHONVENDORSOLINSTALLAI= \
		$(ROOTPYTHONVENDORSOLINSTALL)/auto_install
ROOTPYTHONVENDORSOLINSTALLAICHKPT= \
		$(ROOTPYTHONVENDORSOLINSTALLAI)/checkpoints
ROOTPYTHONVENDORSOLINSTALLENGINE =	$(ROOTPYTHONVENDORSOLINSTALL)/engine
ROOTPYTHONVENDORSOLINSTALLENGINETEST =  $(ROOTPYTHONVENDORSOLINSTALLENGINE)/test
ROOTPYTHONVENDORSOLINSTALLICT =         $(ROOTPYTHONVENDORSOLINSTALL)/ict
ROOTPYTHONVENDORSOLINSTALLJS2AI=	$(ROOTPYTHONVENDORSOLINSTALL)/js2ai
ROOTPYTHONVENDORSOLINSTALLMANIFEST=	$(ROOTPYTHONVENDORSOLINSTALL)/manifest
ROOTPYTHONVENDORSOLINSTALLMANINPUT= \
				$(ROOTPYTHONVENDORSOLINSTALL)/manifest_input
ROOTPYTHONVENDORSOLINSTALLTARGET =	$(ROOTPYTHONVENDORSOLINSTALL)/target
ROOTPYTHONVENDORSCI =	$(ROOTPYTHONVENDORSOLINSTALL)/sysconfig
ROOTPYTHONVENDORSCIPROF =	$(ROOTPYTHONVENDORSCI)/profile
ROOTPYTHONTERMUI=	$(ROOTPYTHONVENDOR)/terminalui
ROOTPYTHONVENDORSOLINSTALLTARGETLIBADM=$(ROOTPYTHONVENDORSOLINSTALLTARGET)/libadm
ROOTPYTHONVENDORSOLINSTALLTARGETLIBBE = $(ROOTPYTHONVENDORSOLINSTALLTARGET)/libbe
ROOTPYTHONVENDORSOLINSTALLTARGETLIBDEVINFO = $(ROOTPYTHONVENDORSOLINSTALLTARGET)/libdevinfo
ROOTPYTHONVENDORSOLINSTALLTARGETLIBDISKMGT = $(ROOTPYTHONVENDORSOLINSTALLTARGET)/libdiskmgt
ROOTPYTHONVENDORSOLINSTALLTARGETLIBEFI = $(ROOTPYTHONVENDORSOLINSTALLTARGET)/libefi
ROOTPYTHONVENDORSOLINSTALLTARGETLIBIMA = $(ROOTPYTHONVENDORSOLINSTALLTARGET)/libima
ROOTPYTHONVENDORSOLINSTALLTARGETLIBNVPAIR = $(ROOTPYTHONVENDORSOLINSTALLTARGET)/libnvpair
ROOTPYTHONVENDORSOLINSTALLTARGETSHADOW = $(ROOTPYTHONVENDORSOLINSTALLTARGET)/shadow
ROOTPYTHONVENDORSOLINSTALLTI=	$(ROOTPYTHONVENDORSOLINSTALL)/text_install
ROOTPYTHONVENDORSOLINSTALLGUI=	$(ROOTPYTHONVENDORSOLINSTALL)/gui_install
ROOTPYTHONVENDORINSTALLTRANSFER =       $(ROOTPYTHONVENDORSOLINSTALL)/transfer
ROOTAUTOINST=		$(ROOT)/usr/share/auto_install
ROOTAUTOINSTMANIFEST=	$(ROOTAUTOINST)/manifest
ROOTAUTOINSTSCPROFILES=	$(ROOTAUTOINST)/sc_profiles
ROOTGUIINST=		$(ROOT)/usr/share/gui-install
ROOTSBIN=		$(ROOT)/sbin
ROOTUSRBIN=		$(ROOT)/usr/bin
ROOTUSRSHARE=		$(ROOT)/usr/share
ROOTUSRSHAREINSTALL=	$(ROOTUSRSHARE)/install
ROOTUSRSHARESC=		$(ROOTUSRSHARE)/sysconfig
ROOTUSRSHARESCHELP=	$(ROOTUSRSHARESC)/help
ROOTUSRSHARESCHELPC=	$(ROOTUSRSHARESCHELP)/C
ROOTUSRSHARESCXSLT=	$(ROOTUSRSHARESC)/xslt
ROOTUSRSHARETI=		$(ROOTUSRSHARE)/text-install
ROOTUSRSHARETIHELP=	$(ROOTUSRSHARETI)/help
ROOTUSRSHARETIHELPC=	$(ROOTUSRSHARETIHELP)/C
ROOTUSRLIB=		$(ROOT)/usr/lib
ROOTUSRLIBBOOT=		$(ROOTUSRLIB)/boot
ROOTUSRSHAREMSGS=	$(ROOTUSRSHARE)/locale/C/LC_MESSAGES
ROOTUSRSBIN=		$(ROOT)/usr/sbin
ROOTVAR=		$(ROOT)/var

INSTMSGS=		$(MSG_DOMAIN:%=$(ROOTUSRSHAREMSGS)/%.po)
ROOTSBINPROG=		$(PROG:%=$(ROOTSBIN)/%)
ROOTUSRINCLEXP=		$(EXPHDRS:%=$(ROOTINCADMIN)/%)
ROOTUSRSBINPROG=	$(PROG:%=$(ROOTUSRSBIN)/%)

FILEMODE=		644
EXECMODE=		755
DIRMODE=		755
OWNER=			bin
GROUP=			bin

# DTD File Versions
DTD_VERSION_AI = 1
DTD_VERSION_DC = 1
DTD_VERSION_BOOT_MODS = 1
DTD_VERSION_CONFIGURATION = 1
DTD_VERSION_EXECUTION = 1
DTD_VERSION_MEDIA_TRANSFER = 1
DTD_VERSION_SOFTWARE = 1
DTD_VERSION_TARGET = 2

# CH toggles operations restricted to root.  It is normally set to `#'.  When
# running as root, it should be set to `' (null) in your environment.
# RELEASE_BUILD should be cleared for RE builds.  This is completely
# independent of CH.  NOT_RELEASE_BUILD is exactly what the name implies.
#
# The declaration POUND_SIGN is always '#'. This is needed to get around the
# make feature that '#' is always a comment delimiter, even when escaped or
# quoted. We use this macro expansion method to get POUND_SIGN rather than
# always breaking out a shell because the general case can cause a noticable
# slowdown in build times when so many Makefiles include Makefile.master.
#
# While the majority of users are expected to override the setting below
# with an env file (via nightly or bldenv), if you aren't building that way
# (ie, you're using "ws" or some other bootstrapping method) then you need
# this definition in order to avoid the subshell invocation mentioned above.

PRE_POUND=                              pre\#
POUND_SIGN=                             $(PRE_POUND:pre\%=%)

CH=					$(POUND_SIGN)
NOT_RELEASE_BUILD=
RELEASE_BUILD=				$(POUND_SIGN)
$(RELEASE_BUILD)NOT_RELEASE_BUILD=	$(POUND_SIGN)
SRU_BUILD=                              $(POUND_SIGN)

INS.file=	$(RM) $@; $(INS) -s -m $(FILEMODE) -f $(@D) $<
$(CH)INS.file=	$(INS) -m $(FILEMODE) -u $(OWNER) -g $(GROUP) -f $(@D) $<
INS.exec=	$(RM) $@; $(INS) -s -m $(EXECMODE) -f $(@D) $<
$(CH)INS.exec=	$(INS) -m $(EXECMODE) -u $(OWNER) -g $(GROUP) -f $(@D) $<
INS.dir=	$(INS) -d -m $(DIRMODE) $@
$(CH)INS.dir=	$(INS) -d -m $(DIRMODE) -u $(OWNER) -g $(GROUP) $@
INS.rename=	$(INS.file); $(MV) $(@D)/$(<F) $@
INSTALL=	$(INS.file)

#
# Python bakes the mtime of the .py file into the compiled .pyc and
# rebuilds if the baked-in mtime != the mtime of the source file
# (rather than only if it's less than), thus when installing python
# files we must make certain to not adjust the mtime of the source
# (.py) file.
#
INS.pyfile=     $(INS.file); $(TOUCH) -r $< $@

MACH=	$(TARGET_MACH:-%=%)
ARCH=	$(TARGET_ARCH:-%=%)

# Message catalog build rule for packaging commands.
POFILE=        $(MSG_DOMAIN).po
MSGROOT=        $(ROOT)/catalog
MSGDOMAIN=      $(MSGROOT)/$(TEXT_DOMAIN)
CLOBBERFILES += $(POFILE)

# Generate a po file from msgfiles
# The procedure for building po file from Python, Glade and Shell files
# differs, so we have to handle each file type separately.
# First, a list of files of each type is established, then xgettext is run
# for each non-empty list.

$(MSG_DOMAIN).po: $(MSGFILES)
		PYMSGFILES=`$(ECHO) $(MSGFILES)|$(GGREP) -o '[^\ ]*\.py'` || true; \
		GLADEMSGFILES=`$(ECHO) $(MSGFILES)|$(GGREP) -o '[^\ ]*\.xml'` || true; \
		KSHMSGFILES=`$(ECHO) $(MSGFILES)|$(GGREP) -o '[^\ ]*\.ksh'` || true; \
		echo "PYMSGFILES=$$PYMSGFILES       GLADEMSGFILES=$$GLADEMSGFILES      KSHMSGFILES=$$KSHMSGFILES"; \
		echo ""|$(GNUXGETTEXT)  -o - --force-po -L C -|$(SED)  s/charset=CHARSET/charset=UTF-8/ >$@; \
		if [ ! -z "$$PYMSGFILES" ]; then \
			$(GNUXGETTEXT) -o $@ $(GNUXGETFLAGS) -d $(MSG_DOMAIN) \
			--join-existing $$PYMSGFILES; \
		fi; \
		if [ ! -z "$$GLADEMSGFILES" ]; then \
			$(GNUXGETTEXT) -o $@ $(GNUXGETFLAGS) --language=glade \
			-d $(MSG_DOMAIN) --join-existing $$GLADEMSGFILES; \
		fi; \
		if [ ! -z "$$KSHMSGFILES" ]; then \
			$(GNUXGETTEXT) -o $@ $(GNUXGETFLAGS) --language=Shell \
			-d $(MSG_DOMAIN) --join-existing $$KSHMSGFILES; \
		fi

# The use of TEXT_DOMAIN here is strange, but required for the normal
# message catalog build rules.  (This would be better done with a
# conditional on CFLAGS, but that would require significant Makefile
# effort.)
COMPILE.po=	$(CC) $(CFLAGS) \
		    $(CPPFLAGS:\"$(TEXT_DOMAIN)\"=$(TEXT_DOMAIN)) -E -C

COMPILE.c=	$(CC) $(CFLAGS) $(CPPFLAGS) -c

# Set CFLAGS and CCFLAGS and reset below if release build.
# Only optimize for release builds
# The -norunpath flag must be passed to any library or executables
# that is built with "CC". This suppresses the automatic generation
# of runtime search paths that can cause local and SWAN paths to be
# included in libraries and executables which would be inappropriate
# for use outside of SWAN (that is, customer sites)
CFLAGS:sh =if [ "`uname -p`" = "sparc" ]; then \
		echo "-xc99=%none -Wa,-xcg92" ; \
          else  echo "-xc99=%none"; \
          fi
CCFLAGS:sh =if [ "`uname -p`" = "sparc" ]; then \
		echo "-Qoption fbe -xcg92" ; \
          else  echo ""; \
          fi

$(RELEASE_BUILD)CFLAGS:sh =if [ "`uname -p`" = "sparc" ]; then \
		echo "-xc99=%none -O -Wa,-xcg92" ; \
          else  echo "-xc99=%none -O"; \
          fi
 
$(RELEASE_BUILD)CCFLAGS:sh =if [ "`uname -p`" = "sparc" ]; then \
		echo "-O -Qoption fbe -xcg92" ; \
          else  echo "-O"; \
          fi
CCFLAGS += -norunpath -compat=4

# CPPFLAGS.master allows values to be prepended to CPPFLAGS.
CPPFLAGS.master= -I$(ROOT)/usr/include -I$(ONINCDIR)
CPPFLAGS= $(CPPFLAGS.master)

# Rules (normally from default.mk) and macros which are used for post
# processing files. Normally, these do stripping of the comment section
# automatically.
#    RELEASE_CM:	Should be edited if std format changes.
#    POST_PROCESS_O:	Post-processing for `.o' files.
#    POST_PROCESS_A:	Post-processing for `.a' files (currently null).
#    POST_PROCESS_SO:	Post-processing for `.so' files.
#    POST_PROCESS:	Post-processing for executable files (no suffix).
# Note that these macros are not completely generalized as they are to be
# used with the file name to be processed following.
#
# It is left as an exercise to Release Engineering to embellish the generation
# of the release comment string.
#
#	If this is a development build:
#		delete the comment section (mcs -d)
#		add the standard comment (mcs -a $(RELEASE_CM))
#		add the development specific comment (mcs -a $(DEV_CM))
#
#	If this is a release build:
#		delete the comment section (mcs -d)
#		add the standard comment (mcs -a $(RELEASE_CM))
#
#	Sigh,... The declaration POUND_SIGN is always '#'. This is just needed
#	to get around the make **bug** that '#' is always a comment delimiter,
#	even when escaped of quoted.
#
POUND_SIGN:sh=	/usr/bin/echo \\043

# The following list of macros are used in the definition of RELEASE_CM
# which is used to label all binaries in the build:
#
#       RELEASE         Specific release of the build, eg: 5.2
#       RELEASE_MAJOR   Major version number part of $(RELEASE)
#       RELEASE_MINOR   Minor version number part of $(RELEASE)
#       VERSION         Version of the build (alpha, beta, Generic)
#       PATCHID         If this is a patch this value should contain
#                       the patchid value (eg: "Generic 100832-01"), otherwise
#                       it will be set to $(VERSION)
#       RELEASE_DATE    Date of the Release Build
#       PATCH_DATE      Date the patch was created, if this is blank it
#                       will default to the RELEASE_DATE
#
RELEASE_MAJOR=  5
RELEASE_MINOR=  11
RELEASE=        $(RELEASE_MAJOR).$(RELEASE_MINOR)
VERSION=        SunOS Installation Development
PATCHID=        $(VERSION)
RELEASE_DATE=   release date not set
PATCH_DATE=     $(RELEASE_DATE)
RELEASE_CM=     "@($(POUND_SIGN))SunOS $(RELEASE) $(PATCHID) $(PATCH_DATE)"
DEV_CM=         "@($(POUND_SIGN))SunOS Internal Development: non-nightly build"

PROCESS_COMMENT=	@?mcs -d -a $(RELEASE_CM) -a $(DEV_CM)
$(RELEASE_BUILD)PROCESS_COMMENT=	@?mcs -d -a $(RELEASE_CM)

POST_PROCESS_O=		$(PROCESS_COMMENT) $@
POST_PROCESS_A=
POST_PROCESS_SO=	$(PROCESS_COMMENT) $@
POST_PROCESS=           $(PROCESS_COMMENT) $@

$(RELEASE_BUILD)POST_PROCESS= $(PROCESS_COMMENT) $@ ;\
				strip $@

#
# The repositories will be created with these publisher settings.  To
# update an image to the resulting repositories, this must match the
# publisher name provided to "pkg set-publisher."
#
PKGPUBLISHER_REDIST=    install-nightly
PKGPUBLISHER_NONREDIST= install-extra
PKGPUBLISHER_LOCALIZABLE= install-localizable


#	Default build rules which perform comment section post-processing.
#
.c:
	$(PURIFY) $(LINK.c) -o $@ $< $(LDLIBS)
	$(POST_PROCESS)
.c.o:
	$(PURIFY) $(COMPILE.c) $(OUTPUT_OPTION) $<
	$(POST_PROCESS_O)
.c.a:
	$(PURIFY) $(COMPILE.c) -o $% $<
	$(PROCESS_COMMENT) $%
	$(AR) $(ARFLAGS) $@ $%
	$(RM) $%
.cc:
	$(PURIFY) $(LINK.cc) -o $@ $< $(LDLIBS)
	$(POST_PROCESS)
.cc.o:
	$(PURIFY) $(COMPILE.cc) $(OUTPUT_OPTION) $<
	$(POST_PROCESS_O)
.cc.a:
	$(PURIFY) $(COMPILE.cc) -o $% $<
	$(PROCESS_COMMENT) $%
	$(AR) $(ARFLAGS) $@ $%
	$(RM) $%

.C:
	$(PURIFY) $(LINK.cc) -o $@ $< $(LDLIBS)
	$(POST_PROCESS)
.C.o:
	$(PURIFY) $(COMPILE.cc) $(OUTPUT_OPTION) $<
	$(POST_PROCESS_O)
.C.a:
	$(PURIFY) $(COMPILE.cc) -o $% $<
	$(PROCESS_COMMENT) $%
	$(AR) $(ARFLAGS) $@ $%
	$(RM) $%

.s.o:
	$(COMPILE.s) -o $@ $<
	$(POST_PROCESS_O)
.s.a:
	$(COMPILE.s) -o $% $<
	$(PROCESS_COMMENT) $%
	$(AR) $(ARFLAGS) $@ $%
	$(RM) $%
.y:
	$(YACC.y) $<
	$(LINK.c) -o $@ y.tab.c $(LDLIBS)
	$(POST_PROCESS)
	$(RM) y.tab.c
.y.o:
	$(YACC.y) $<
	$(COMPILE.c) -o $@ y.tab.c
	$(POST_PROCESS_O)
	$(RM) y.tab.c
.l:
	$(RM) $*.c
	$(LEX.l) $< > $*.c
	$(LINK.c) -o $@ $*.c -ll $(LDLIBS)
	$(POST_PROCESS)
	$(RM) $*.c
.l.o:
	$(RM) $*.c
	$(LEX.l) $< > $*.c
	$(COMPILE.c) -o $@ $*.c
	$(POST_PROCESS_O)
	$(RM) $*.c

.ksh:
	$(RM) $@
	cat $< > $@
	chmod +x $@
.ksh~:
	$(GET) $(GFLAGS) -p $< > $*.ksh
	cp $*.ksh $@
	chmod a+x $@

.src:
	$(RM) $@
	$(SED)	-e "s,@DTD_VERSION_AI@,$(DTD_VERSION_AI),g" \
		-e "s,@DTD_VERSION_DC@,$(DTD_VERSION_DC),g" \
		-e "s,@DTD_VERSION_BOOT_MODS@,$(DTD_VERSION_BOOT_MODS),g" \
		-e "s,@DTD_VERSION_CONFIGURATION@,$(DTD_VERSION_CONFIGURATION),g" \
		-e "s,@DTD_VERSION_EXECUTION@,$(DTD_VERSION_EXECUTION),g" \
		-e "s,@DTD_VERSION_MEDIA_TRANSFER@,$(DTD_VERSION_MEDIA_TRANSFER),g" \
		-e "s,@DTD_VERSION_SOFTWARE@,$(DTD_VERSION_SOFTWARE),g" \
		-e "s,@DTD_VERSION_TARGET@,$(DTD_VERSION_TARGET),g" \
 		$< > $@

.SUFFIXES:    $(SUFFIXES) .ksh .ksh~ .src