home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2000 February
/
PCWorld_2000-02_cd.bin
/
live
/
usr
/
X11R6
/
lib
/
X11
/
config
/
Imake.rules
< prev
next >
Wrap
Text File
|
1999-09-03
|
84KB
|
2,658 lines
XCOMM ---------------------------------------------------------------------
XCOMM Imake rules for building libraries, programs, scripts, and data files
XCOMM rules: $TOG: Imake.rules /main/222 1997/07/17 20:04:40 kaleb $
XCOMM rules: $XFree86: xc/config/cf/Imake.rules,v 3.33.2.10 1998/11/04 10:53:01 dawes Exp $
/*
* MACHINE-INDEPENDENT RULES; DO NOT MODIFY
*
* Warning, when defining rules: make sure you do not include both a trailing
* backslash and double ampersand backslash or else you will get an extra
* backslash in the Makefile.
*
* The following macros are defined for the various templates and Imakefiles
* (for a list of the applicable make variables, see the template files):
*
* Concat (a,b)
* Concat3 (a,b,c)
* Concat4 (a,b,c,d)
* _Use (a,b)
* _UseCat (a,b,c)
* _MUse (a,b)
* _MUseCat (a,b,c)
* ProgramTargetName (target)
* RunProgram (progvar,options)
* RunProgramWithSetup (setup,progvar,options)
* RemoveFile (file)
* RemoveFiles (files)
* CenterLoadTarget (target,srclist,libs,defines)
* CenterProgramTarget (program,srclist,objlist,locallibs,syslibs)
* SentinelLinkTarget (step,program,linklist)
* SentinelProgramTarget (program,deplist,linklist)
* SentinelCplusplusProgramTarget (program,deplist,linklist)
* PurifyLinkTarget (step,program,linklist)
* PurifyProgramTarget (program,deplist,linklist)
* PurifyCplusplusProgramTarget (program,deplist,linklist)
* ProofLinkTarget (step,program,linklist)
* ProofProgramTarget (program,deplist,linklist)
* ProofCplusplusProgramTarget (program,deplist,linklist)
* ProofCleanTarget ()
* RemoveTargetProgram (program)
* MakeDir (dir)
* BuildIncludesTop (srclist)
* BuildIncludes (srclist,dstsubdir,dstupdir)
* LinkRule (program,options,objects,libraries)
* HostLinkRule (program,options,objects,libraries)
* NoCmpScript (target)
* NoConfigRec (target)
* NormalProgramTarget (program,objects,deplibs,locallibs,syslibs)
* SetUIDProgramTarget (program,objects,deplibs,locallibs,syslibs)
* SingleProgramTarget (program,objects,locallibs,syslibs)
* SimpleProgramTarget (program)
* ComplexProgramTarget (program)
* ComplexProgramTarget_1 (program,locallib,syslib)
* ComplexProgramTarget_2 (program,locallib,syslib)
* ComplexProgramTarget_3 (program,locallib,syslib)
* ServerTargetWithFlags (server,subdirs,objects,libs,syslibs,flags)
* ServerTarget (server,subdirs,objects,libs,syslibs)
* MoveToBakFile (file)
* RMoveToBakFile (file)
* RanLibrary (args)
* LibraryTargetName (libname)
* LibraryTargetNameSuffix (libname,suffix)
* InstallNamedTarget (step,srcname,flags,dest,dstname)
* InstallTarget (step,file,flags,dest)
* InstallLibrary (libname,dest)
* MergeIntoInstalledLibrary (tolib,fromlib)
* InstallLibraryAlias (libname,alias,dest)
* InstallLintLibrary (libname,dest)
* InstallManPageLong (file,destdir,dest)
* InstallManPage (file,destdir)
* InstallManPageAliases (file,destdir,aliases)
* ManKeywordsTarget (manpath)
* InstallNamedNonExec (srcname,dstname,dest)
* InstallNonExecFile (file,dest)
* InstallNonExecFileNoClobber (file,dest)
* InstallNonExec (file,dest)
* InstallProgramWithFlags (program,dest,flags)
* InstallProgram (program,dest)
* InstallScript (program,dest)
* InstallNamedProg (srcname,dstname,dest)
* InstallNamedProgNoClobber (srcname,dstname,dest)
* MakeFlagsToShellFlags (makeflags,shellcmd)
* MakeNamedTargetSubdir (dir,flags,subname)
* LinkFileList (step,list,dir,sub)
* LinkVarDirectory (mdir,cdir,rdir,ldir)
* InstallMultipleDestFlags (step,list,dest,flags)
* InstallMultipleDest (step,list,dest)
* InstallMultiple (list,dest)
* InstallMultipleFlags (list,dest,flags)
* InstallMultipleMan (list,dest)
* DependDependency ()
* DependTarget ()
* DependTarget3 (srcs1,srcs2,srcs3)
* CleanTarget ()
* TagsTarget ()
* ImakeDependency (target)
* BuildMakefileTarget (notused,imakeflags)
* MakefileTarget ()
* LibMkdir (dir)
* LibCleanDir (dir)
* LintLibReferences (varname,libname,libsource)
* UnsharedLibReferences (varname,libname,libsource)
* ProjectUnsharedLibReferences (varname,libname,libsource,buildlibdir)
* SharedLibDependencies (libname,libsource,revname)
* SharedDSLibDependencies (libname,libsource,revname)
* SharedLibReferences (varname,libname,libsource,revname,rev)
* SharedDSLibReferences (varname,libname,libsource,revname,rev)
* ObjectCompile (options)
* NormalLibObjCompile (options)
* NormalSharedLibObjCompile (options)
* LibObjCompile (dir,options)
* DebuggedLibObjCompile (options)
* ProfiledLibObjCompile (options)
* SharedLibObjCompile (options)
* NormalLibraryObjectRule ()
* NormalFortranObjectRule ()
* ObjectFromSpecialSource (dst,src,flags)
* SpecialObjectRule (objs,depends,options)
* SpecialCObjectRule (basename,depends,options)
* LexFile (file)
* YaccFile (file,flags)
* YaccFileNoFlags (file)
* MakeLibrary (libname,objlist)
* NormalLibraryTarget (libname,objlist)
* NormalLibraryTarget2 (libname,objlist1,objlist2)
* NormalLibraryTarget3 (libname,objlist1,objlist2,objlist3)
* NormalDepLibraryTarget (libname,deplist,objlist)
* UnsharedLibraryTarget (libname,objlist,down,up)
* UnsharedLibraryTarget3 (libname,objlist1,objlist2,objlist3,down,up)
* SubdirLibraryRule (objlist)
* ProfiledLibraryTarget (libname,objlist)
* DebuggedLibraryTarget (libname,objlist)
* AliasedLibraryTarget (libname,alias)
* NormalRelocatableTarget (objname,objlist)
* ProfiledRelocatableTarget (objname,objlist)
* DebuggedRelocatableTarget (objname,objlist)
* LintLibraryTarget (libname,srclist)
* NormalLintTarget (srclist)
* LintTarget ()
* LinkSourceFile (src,dir)
* LinkFile (tofile,fromfile)
* MakeSubincludesForBuild (step,dir,srclist)
* LangNamedTargetSubdirs (lang,name,dirs,verb,flags,subname)
* LangNamedMakeSubdirs (lang,name,dirs)
* LangMakeSubdirs (lang,dirs)
* NamedTargetSubdirs (name,dirs,verb,flags,subname)
* NamedMakeSubdirs (name,dirs)
* MakeSubdirs (dirs)
* DependSubdirs (dirs)
* ForceSubdirs (dirs)
* InstallSubdirs (dirs)
* InstallManSubdirs (dirs)
* IncludesSubdirs (dirs)
* NamedCleanSubdirs (name,dirs)
* CleanSubdirs (dirs)
* NamedTagSubdirs (name,dirs)
* TagSubdirs (dirs)
* MakeLintSubdirs (dirs,target,subtarget)
* LintSubdirs (dirs)
* MakeLintLibSubdirs (dirs)
* MakeMakeSubdirs (dirs,target)
* MakefileSubdirs (dirs)
* CppScriptTarget (dst,src,defs,deplist)
* MakeScriptFromCpp (name,defs)
* CppFileTarget (dst,src,defs,deplist)
* CppSourceFile (dst,src,defs,deplist)
* MakeDirectories (step,dirs)
* AllTarget (depends)
* StaticLibrary (libpath,libname)
* MakeMutex (targets)
*
*
* The following are in specific <os>Lib.rules:
*
* SharedLibraryTarget (libname,rev,solist,down,up)
* SharedLibraryDataTarget (libname,rev,salist)
* InstallSharedLibrary (libname,rev,dest)
* InstallSharedLibraryData (libname,rev,dest)
*
*/
#define NullParameter
/* if [ -d ] or [ ! -d ] causes make to fail, define this as - */
#ifndef DirFailPrefix
#define DirFailPrefix
#endif
/*
* NoCmpScript - suppress clearmake build script comparison.
*/
#ifndef NoCmpScript
#if HasClearmake
#define NoCmpScript(targ) @@\
XCOMM special target for clearmake @@\
.NO_CMP_SCRIPT: targ
#else
#define NoCmpScript(targ) /**/
#endif
#endif
/*
* NoConfigRec - suppress using clearmake configuration records.
*/
#ifndef NoConfigRec
#if HasClearmake
#define NoConfigRec(targ) @@\
XCOMM special target for clearmake @@\
.NO_CONFIG_REC: targ
#else
#define NoConfigRec(targ) /**/
#endif
#endif
/*
* Concat - concatenates two strings.
*/
#ifndef Concat
#if (__STDC__ && !defined(UnixCpp)) || defined(AnsiCpp)
#define Concat(a,b)a##b
#else
#define Concat(a,b)a/**/b
#endif
#endif
/*
* Concat3 - concatenates three strings.
*/
#ifndef Concat3
#if (__STDC__ && !defined(UnixCpp)) || defined(AnsiCpp)
#define Concat3(a,b,c)a##b##c
#else
#define Concat3(a,b,c)a/**/b/**/c
#endif
#endif
/*
* Concat4 - concatenates four strings.
*/
#ifndef Concat4
#if (__STDC__ && !defined(UnixCpp)) || defined(AnsiCpp)
#define Concat4(a,b,c,d)a##b##c##d
#else
#define Concat4(a,b,c,d)a/**/b/**/c/**/d
#endif
#endif
/*
* _XUse - makes a choice based on UseInstalledX11.
*/
#ifndef _XUse
# if defined(UseInstalled) || UseInstalledX11
# define _XUse(a,b) a
# else
# define _XUse(a,b) b
# endif
#endif /* _XUse */
/*
* _Use - makes a choice based on UseInstalled.
*/
#ifndef _Use
# define _Use _XUse
#endif /* _Use */
/*
* _XUseCat - combination of _XUse and Concat.
* exists to avoid problems with some preprocessors
*/
#ifndef _XUseCat
# if (__STDC__ && !defined(UnixCpp)) || defined(AnsiCpp)
# if defined(UseInstalled) || UseInstalledX11
# define _XUseCat(a,b,c) a##c
# else
# define _XUseCat(a,b,c) b##c
# endif
# else
# if defined(UseInstalled) || UseInstalledX11
# define _XUseCat(a,b,c) a/**/c
# else
# define _XUseCat(a,b,c) b/**/c
# endif
# endif
#endif /* _XUseCat */
/*
* _UseCat - combination of _Use and Concat.
* exists to avoid problems with some preprocessors
*/
#ifndef _UseCat
# define _UseCat _XUseCat
#endif /* _UseCat */
#ifndef ProgramTargetName
#define ProgramTargetName(target)target
#endif
#ifndef RunProgram
#define RunProgram(progvar,options) $(progvar) options
#endif
#ifndef RunProgramWithSetup
#define RunProgramWithSetup(setup,progvar,options) setup $(progvar) options
#endif
#ifndef RemoveFile
#define RemoveFile(file) $(RM) file
#endif /* RemoveFile */
#ifndef RemoveFiles
#define RemoveFiles(files) $(RM) files
#endif /* RemoveFiles */
/*
* CenterLoadTarget - generate rules to load files into CodeCenter
*/
#ifndef CenterLoadTarget
#if HasCodeCenter
#define CenterLoadTarget(target,srclist,libs,defines) @@\
ProgramTargetName(target):: srclist @@\
XCOMM load defines srclist libs
#else
#define CenterLoadTarget(target,srclist,libs,defines) /**/
#endif
#endif /* CenterLoadTarget */
/*
* CenterProgramTarget - generate rules to make CodeCenter read in sources
* and objects.
*/
#ifndef CenterProgramTarget
#define CenterProgramTarget(program,srclist,objlist,locallibs,syslibs) @@\
CenterLoadTarget(Concat(debug_,program),srclist,$(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS) $(LDPRELIBS) locallibs $(LDLIBS) syslibs,$(ALLDEFINES)) @@\
@@\
CenterLoadTarget(Concat(odebug_,program),objlist,$(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS) $(LDPRELIBS) locallibs $(LDLIBS) syslibs,$(ALLDEFINES))
#endif /* CenterProgramTarget */
#ifndef SentinelLinkTarget
#if HasSentinel
#define SentinelLinkTarget(step,program,linklist) @@\
ProgramTargetName(step.sentinel): @@\
RemoveTargetProgram($@) @@\
$(CCENVSETUP) $(SENTINEL) $(SENTINELOPTIONS) $(CC) -o program.sentinel $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS)
#else
#define SentinelLinkTarget(step,program,linklist) /**/
#endif
#endif /* SentinelLinkTarget */
/*
* SentinelProgramTarget - generate rules to make Sentinel image
*/
#ifndef SentinelProgramTarget
#if HasSentinel
#define SentinelProgramTarget(program,deplist,linklist) @@\
ProgramTargetName(program.sentinel): deplist @@\
RemoveTargetProgram($@) @@\
$(CCENVSETUP) $(SENTINEL) $(SENTINELOPTIONS) $(CC) -o $@ $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
@@\
clean clean.sentinel:: @@\
RemoveFile(program.sentinel)
#else
#define SentinelProgramTarget(program,deplist,linklist) /**/
#endif
#endif /* SentinelProgramTarget */
/*
* SentinelCplusplusProgramTarget - generate rules to make Sentinel image
*/
#ifndef SentinelCplusplusProgramTarget
#if HasSentinel
#define SentinelCplusplusProgramTarget(program,deplist,linklist) @@\
ProgramTargetName(program.sentinel): deplist @@\
RemoveTargetProgram($@) @@\
$(CXXENVSETUP) $(SENTINEL) $(SENTINELOPTIONS) $(CXX) -o $@ $(CXXLDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
@@\
clean clean.sentinel:: @@\
RemoveFile(program.sentinel)
#else
#define SentinelCplusplusProgramTarget(program,deplist,linklist) /**/
#endif
#endif /* SentinelCplusplusProgramTarget */
#ifndef PurifyLinkTarget
#if HasPurify
#define PurifyLinkTarget(step,program,linklist) @@\
ProgramTargetName(step.pure): @@\
RemoveTargetProgram($@) @@\
$(CCENVSETUP) $(PURIFY) $(PURIFYOPTIONS) $(CC) -o program.pure $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS)
#else
#define PurifyLinkTarget(step,program,linklist) /**/
#endif
#endif /* PurifyLinkTarget */
/*
* PurifyProgramTarget - generate rules to make Purify'ed image
*/
#ifndef PurifyProgramTarget
#if HasPurify
#define PurifyProgramTarget(program,deplist,linklist) @@\
ProgramTargetName(program.pure): deplist @@\
RemoveTargetProgram($@) @@\
$(CCENVSETUP) $(PURIFY) $(PURIFYOPTIONS) $(CC) -o $@ $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
@@\
clean clean.pure:: @@\
RemoveFile(program.pure)
#else
#define PurifyProgramTarget(program,deplist,linklist) /**/
#endif
#endif /* PurifyProgramTarget */
/*
* PurifyCplusplusProgramTarget - generate rules to make Purify'ed image
*/
#ifndef PurifyCplusplusProgramTarget
#if HasPurify
#define PurifyCplusplusProgramTarget(program,deplist,linklist) @@\
ProgramTargetName(program.pure): deplist @@\
RemoveTargetProgram($@) @@\
$(CXXENVSETUP) $(PURIFY) $(PURIFYOPTIONS) $(CXX) -o $@ $(CXXLDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
@@\
clean clean.pure:: @@\
RemoveFile(program.pure)
#else
#define PurifyCplusplusProgramTarget(program,deplist,linklist) /**/
#endif
#endif /* PurifyCplusplusProgramTarget */
#ifndef ProofLinkTarget
#if HasTestCenter
#define ProofLinkTarget(step,program,linklist) @@\
ProgramTargetName(step.tc): @@\
RemoveTargetProgram($@) @@\
$(CCENVSETUP) $(PROOF) $(PROOFOPTIONS) $(CC) -o program.tc $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS)
#else
#define ProofLinkTarget(step,program,linklist) /**/
#endif
#endif /* ProofLinkTarget */
/*
* ProofProgramTarget - generate rules to make Proof'ed image
*/
#ifndef ProofProgramTarget
#if HasTestCenter
#define ProofProgramTarget(program,deplist,linklist) @@\
ProgramTargetName(program.tc): deplist @@\
RemoveTargetProgram($@) @@\
$(CCENVSETUP) $(PROOF) $(PROOFOPTIONS) $(CC) -o $@ $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
@@\
clean clean.tc:: @@\
RemoveFiles(program.tc program.tc.*.*)
#else
#define ProofProgramTarget(program,deplist,linklist) /**/
#endif
#endif /* ProofProgramTarget */
/*
* ProofCplusplusProgramTarget - generate rules to make Proof'ed image
*/
#ifndef ProofCplusplusProgramTarget
#if HasTestCenter
#define ProofCplusplusProgramTarget(program,deplist,linklist) @@\
ProgramTargetName(program.tc): deplist @@\
RemoveTargetProgram($@) @@\
$(CXXENVSETUP) $(PROOF) $(PROOFOPTIONS) $(CXX) -o $@ $(CXXLDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
@@\
clean clean.tc:: @@\
RemoveFiles(program.tc program.tc.*.*)
#else
#define ProofCplusplusProgramTarget(program,deplist,linklist) /**/
#endif
#endif /* ProofCplusplusProgramTarget */
#ifndef ProofCleanTarget
#if HasTestCenter
#define ProofCleanTarget() @@\
clean clean.tc:: @@\
$(RM) -r TC.Cache
#else
#define ProofCleanTarget() /**/
#endif
#endif /* ProofCleanTarget */
#ifndef RemoveTargetProgram
#if RemoveTargetProgramByMoving
#define RemoveTargetProgram(program) \
-if [ -f program ]; then RemoveFile(Concat(program,~)); $(MV) program Concat(program,~); fi
#else
#define RemoveTargetProgram(program) RemoveFile(program)
#endif
#endif /* RemoveTargetProgram */
#ifndef MakeDir
#define MakeDir(dir) DirFailPrefix@if [ -d dir ]; then set +x; \ @@\
else (set -x; $(MKDIRHIER) dir); fi
#endif /* MakeDir */
#ifndef BuildIncludesTop
#define BuildIncludesTop(srclist) @@\
includes:: srclist @@\
MakeDir($(BUILDINCDIR)) @@\
@(set -x; cd $(BUILDINCDIR) && for i in srclist; do \ @@\
RemoveFile($$i); \ @@\
$(LN) $(BUILDINCTOP)/$(CURRENT_DIR)/$$i .; \ @@\
done)
#endif /* BuildIncludesTop */
#ifndef BuildIncludes
#define BuildIncludes(srclist,dstsubdir,dstupdir) @@\
includes:: srclist @@\
MakeDir($(BUILDINCDIR)/dstsubdir) @@\
@(set -x; cd $(BUILDINCDIR)/dstsubdir && for i in srclist; do \ @@\
RemoveFile($$i); \ @@\
$(LN) $(BUILDINCTOP)/dstupdir/$(CURRENT_DIR)/$$i .; \ @@\
done)
#endif /* BuildIncludes */
/*
* LinkBuildBinary - export a binary from the build tree.
*/
#ifndef LinkBuildBinary
#define LinkBuildBinary(binary) @@\
all:: $(BUILDBINDIR)/binary binary @@\
@@\
$(BUILDBINDIR)/binary: binary @@\
RemoveFile($@) @@\
cd $(BUILDBINDIR) && $(LN) $(BUILDBINTOP)/$(CURRENT_DIR)/binary .
#endif /* LinkBuildBinary */
#ifndef BuildInterfaces
#define BuildInterfaces(srclist,dstsubdir,dstupdir) @@\
interfaces:: @@\
MakeDir($(BUILDINCDIR)/dstsubdir) @@\
@(set -x; cd $(BUILDINCDIR)/dstsubdir && for i in srclist; do \ @@\
RemoveFile($$i); \ @@\
$(LN) $(BUILDINCTOP)/dstupdir/$(CURRENT_DIR)/$$i .; \ @@\
done)
#endif /* BuildInterfaces */
/*
* LinkRule - link a program
*/
#ifndef LinkRule
#define LinkRule(program,options,objects,libraries) \
$(CCLINK) -o program options objects libraries $(EXTRA_LOAD_FLAGS)
#endif /* LinkRule */
/*
* HostLinkRule - link a utility to be used on the build host
* (differs from LinkRule if cross compiling)
*/
#ifndef HostLinkRule
#define HostLinkRule LinkRule
#endif
#ifndef CplusplusLinkRule
#define CplusplusLinkRule(program,options,objects,libraries) \
$(CXXLINK) -o program options objects libraries $(EXTRA_LOAD_FLAGS)
#endif /* CplusplusLinkRule */
/*
* NormalProgramTarget - generate rules to compile and link the indicated
* program; since it does not use any default object files, it may be used for
* multiple programs in the same Imakefile.
*/
#ifndef NormalProgramTarget
#define NormalProgramTarget(program,objects,deplibs,locallibs,syslibs) @@\
ProgramTargetName(program): objects deplibs @@\
RemoveTargetProgram($@) @@\
LinkRule($@,$(LDOPTIONS),objects,locallibs $(LDLIBS) syslibs) @@\
@@\
SentinelProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
PurifyProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
ProofProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
@@\
clean:: @@\
RemoveFile(ProgramTargetName(program))
#endif /* NormalProgramTarget */
/*
* NormalCplusplusProgramTarget - Like NormalTargetProgram, but uses
* C++ linking rules.
*/
#ifndef NormalCplusplusProgramTarget
#define NormalCplusplusProgramTarget(program,objects,deplibs,locallibs,syslibs) @@\
ProgramTargetName(program): objects deplibs @@\
RemoveTargetProgram($@) @@\
CplusplusLinkRule($@,$(CXXLDOPTIONS),objects,locallibs $(LDLIBS) syslibs) @@\
@@\
SentinelCplusplusProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
PurifyCplusplusProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
ProofCplusplusProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
@@\
clean:: @@\
RemoveFile(ProgramTargetName(program))
#endif /* NormalCplusplusProgramTarget */
#ifndef SetUIDProgramTarget
#define SetUIDProgramTarget NormalProgramTarget
#endif
/*
* SingleProgramTarget - obsolete version of NormalProgramTarget that does
* not have deplibs.
*/
#ifndef SingleProgramTarget
#define SingleProgramTarget(program,objects,locallibs,syslibs) @@\
NormalProgramTarget(program,objects,NullParameter,locallibs,syslibs)
#endif /* SingleProgramTarget */
/*
* SimpleProgramTarget - generate rules for compiling and linking programs
* that only have one C source file. It should only be used in Imakefiles
* that describe a single program.
*/
#ifndef SimpleProgramTarget
#define SimpleProgramTarget(program) @@\
OBJS = program.o @@\
SRCS = program.c @@\
@@\
ComplexProgramTarget(program)
#endif /* SimpleProgramTarget */
#ifndef SimpleCplusplusProgramTarget
#define SimpleCplusplusProgramTarget(program) @@\
OBJS = program.o @@\
SRCS = program.CCsuf @@\
@@\
ComplexCplusplusProgramTarget(program)
#endif /* SimpleCplusplusProgramTarget */
#ifndef ProgramTargetHelper
#define ProgramTargetHelper(program,srcs,objs,deplib,locallib,syslib) @@\
ProgramTargetName(program): $(objs) $(deplib) @@\
RemoveTargetProgram($@) @@\
LinkRule($@,$(LDOPTIONS),$(objs),locallib $(LDLIBS) syslib) @@\
@@\
CenterProgramTarget(program,$(srcs),$(objs),locallib,syslib) @@\
SentinelProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
PurifyProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
ProofProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
@@\
InstallProgram(program,$(BINDIR)) @@\
InstallManPage(program,$(MANDIR))
#endif /* ProgramTargetHelper */
#ifndef ProgramTargetHelperNoMan
#define ProgramTargetHelperNoMan(program,srcs,objs,deplib,locallib,syslib) @@\
ProgramTargetName(program): $(objs) $(deplib) @@\
RemoveTargetProgram($@) @@\
LinkRule($@,$(LDOPTIONS),$(objs),locallib $(LDLIBS) syslib) @@\
@@\
CenterProgramTarget(program,$(srcs),$(objs),locallib,syslib) @@\
SentinelProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
PurifyProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
ProofProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
@@\
InstallProgram(program,$(BINDIR))
#endif /* ProgramTargetHelperNoMan */
#ifndef CplusplusProgramTargetHelper
#define CplusplusProgramTargetHelper(program,srcs,objs,deplib,locallib,syslib) @@\
ProgramTargetName(program): $(objs) $(deplib) @@\
RemoveTargetProgram($@) @@\
CplusplusLinkRule($@,$(CXXLDOPTIONS),$(objs),locallib $(LDLIBS) syslib) @@\
@@\
CenterProgramTarget(program,$(srcs),$(objs),locallib,syslib) @@\
SentinelCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
PurifyCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
ProofCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
@@\
InstallProgram(program,$(BINDIR)) @@\
InstallManPage(program,$(MANDIR))
#endif /* CplusplusProgramTargetHelper */
/*
* ComplexProgramTarget - generate rules for compiling and linking the
* program specified by $(OBJS) and $(SRCS), installing the program and its
* man page, and generating dependencies. It should only be used in
* Imakefiles that describe a single program.
*/
#ifndef ComplexProgramTarget
#define ComplexProgramTarget(program) @@\
PROGRAM = program @@\
@@\
AllTarget(program) @@\
@@\
ProgramTargetHelper(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
@@\
DependTarget() @@\
LintTarget() @@\
@@\
clean:: @@\
RemoveFile(ProgramTargetName(program))
#endif /* ComplexProgramTarget */
#ifndef ComplexCplusplusProgramTarget
#define ComplexCplusplusProgramTarget(program) @@\
PROGRAM = program @@\
@@\
AllTarget(program) @@\
@@\
CplusplusProgramTargetHelper(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
@@\
DependTarget() @@\
LintTarget() @@\
@@\
clean:: @@\
RemoveFile(ProgramTargetName(program))
#endif /* ComplexCplusplusProgramTarget */
/*
* ComplexProgramTargetNoMan - generate rules for compiling and linking
* the program specified by $(OBJS) and $(SRCS), installing the program
* and generating dependencies. It should only be used in Imakefiles
* that describe a single program.
*/
#ifndef ComplexProgramTargetNoMan
#define ComplexProgramTargetNoMan(program) @@\
PROGRAM = program @@\
@@\
AllTarget(program) @@\
@@\
ProgramTargetHelperNoMan(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
@@\
DependTarget() @@\
LintTarget() @@\
@@\
clean:: @@\
RemoveFile(ProgramTargetName(program))
#endif /* ComplexProgramTargetNoMan */
/*
* ComplexProgramTarget_1 - generate rules for compiling and linking the
* program specified by $(OBJS1) and $(SRCS1), installing the program and its
* man page, and generating dependencies for it and any programs described
* by $(SRCS2) through $(SRCS10). It should be used to build the primary
* program in Imakefiles that describe multiple programs.
*/
#ifndef ComplexProgramTarget_1
#define ComplexProgramTarget_1(program,locallib,syslib) @@\
OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) \ @@\
$(OBJS6) $(OBJS7) $(OBJS8) $(OBJS9) $(OBJS10) @@\
SRCS = $(SRCS1) $(SRCS2) $(SRCS3) $(SRCS4) $(SRCS5) \ @@\
$(SRCS6) $(SRCS7) $(SRCS8) $(SRCS9) $(SRCS10) @@\
@@\
AllTarget($(PROGRAMS)) @@\
@@\
ProgramTargetHelper(program,SRCS1,OBJS1,DEPLIBS1,locallib,syslib) @@\
@@\
DependTarget() @@\
LintTarget() @@\
@@\
clean:: @@\
RemoveFiles($(PROGRAMS))
#endif /* ComplexProgramTarget_1 */
#ifndef ComplexCplusplusProgramTarget_1
#define ComplexCplusplusProgramTarget_1(program,locallib,syslib) @@\
OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) \ @@\
$(OBJS6) $(OBJS7) $(OBJS8) $(OBJS9) $(OBJS10) @@\
SRCS = $(SRCS1) $(SRCS2) $(SRCS3) $(SRCS4) $(SRCS5) \ @@\
$(SRCS6) $(SRCS7) $(SRCS8) $(SRCS9) $(SRCS10) @@\
@@\
AllTarget($(PROGRAMS)) @@\
@@\
CplusplusProgramTargetHelper(program,SRCS1,OBJS1,DEPLIBS1,locallib,syslib)@@\
@@\
DependTarget() @@\
LintTarget() @@\
@@\
clean:: @@\
RemoveFiles($(PROGRAMS))
#endif /* ComplexCplusplusProgramTarget_1 */
/*
* ComplexProgramTarget_2 - generate rules for compiling and linking the
* program specified by $(OBJS2) and $(SRCS2) and installing the program and
* man page. It should be used to build the second program in Imakefiles
* describing more than one program.
*/
#ifndef ComplexProgramTarget_2
#define ComplexProgramTarget_2(program,locallib,syslib) @@\
ProgramTargetHelper(program,SRCS2,OBJS2,DEPLIBS2,locallib,syslib)
#endif /* ComplexProgramTarget_2 */
#ifndef ComplexCplusplusProgramTarget_2
#define ComplexCplusplusProgramTarget_2(program,locallib,syslib) @@\
CplusplusProgramTargetHelper(program,SRCS2,OBJS2,DEPLIBS2,locallib,syslib)
#endif /* ComplexCplusplusProgramTarget_2 */
/*
* ComplexProgramTarget_3 - generate rules for compiling and linking the
* program specified by $(OBJS3) and $(SRCS3) and installing the program and
* man page. It should be used to build the third program in Imakefiles
* describing more than one program.
*/
#ifndef ComplexProgramTarget_3
#define ComplexProgramTarget_3(program,locallib,syslib) @@\
ProgramTargetHelper(program,SRCS3,OBJS3,DEPLIBS3,locallib,syslib)
#endif /* ComplexProgramTarget_3 */
#ifndef ComplexCplusplusProgramTarget_3
#define ComplexCplusplusProgramTarget_3(program,locallib,syslib) @@\
CplusplusProgramTargetHelper(program,SRCS3,OBJS3,DEPLIBS3,locallib,syslib)
#endif /* ComplexCplusplusProgramTarget_3 */
/*
* ComplexProgramTarget_4 - generate rules for compiling and linking the
* program specified by $(OBJS4) and $(SRCS4) and installing the program and
* man page. It should be used to build the third program in Imakefiles
* describing more than one program.
*/
#ifndef ComplexProgramTarget_4
#define ComplexProgramTarget_4(program,locallib,syslib) @@\
ProgramTargetHelper(program,SRCS4,OBJS4,DEPLIBS4,locallib,syslib)
#endif /* ComplexProgramTarget_4 */
#ifndef ComplexCplusplusProgramTarget_4
#define ComplexCplusplusProgramTarget_4(program,locallib,syslib) @@\
CplusplusProgramTargetHelper(program,SRCS4,OBJS4,DEPLIBS4,locallib,syslib)
#endif /* ComplexCplusplusProgramTarget_4 */
/*
* ComplexProgramTarget_5 - generate rules for compiling and linking the
* program specified by $(OBJS5) and $(SRCS5) and installing the program and
* man page. It should be used to build the third program in Imakefiles
* describing more than one program.
*/
#ifndef ComplexProgramTarget_5
#define ComplexProgramTarget_5(program,locallib,syslib) @@\
ProgramTargetHelper(program,SRCS5,OBJS5,DEPLIBS5,locallib,syslib)
#endif /* ComplexProgramTarget_5 */
#ifndef ComplexCplusplusProgramTarget_5
#define ComplexCplusplusProgramTarget_5(program,locallib,syslib) @@\
CplusplusProgramTargetHelper(program,SRCS5,OBJS5,DEPLIBS5,locallib,syslib)
#endif /* ComplexCplusplusProgramTarget_5 */
/*
* ComplexProgramTarget_6 - generate rules for compiling and linking the
* program specified by $(OBJS6) and $(SRCS6) and installing the program and
* man page. It should be used to build the third program in Imakefiles
* describing more than one program.
*/
#ifndef ComplexProgramTarget_6
#define ComplexProgramTarget_6(program,locallib,syslib) @@\
ProgramTargetHelper(program,SRCS6,OBJS6,DEPLIBS6,locallib,syslib)
#endif /* ComplexProgramTarget_6 */
#ifndef ComplexCplusplusProgramTarget_6
#define ComplexCplusplusProgramTarget_6(program,locallib,syslib) @@\
CplusplusProgramTargetHelper(program,SRCS6,OBJS6,DEPLIBS6,locallib,syslib)
#endif /* ComplexCplusplusProgramTarget_6 */
/*
* ComplexProgramTarget_7 - generate rules for compiling and linking the
* program specified by $(OBJS7) and $(SRCS7) and installing the program and
* man page. It should be used to build the third program in Imakefiles
* describing more than one program.
*/
#ifndef ComplexProgramTarget_7
#define ComplexProgramTarget_7(program,locallib,syslib) @@\
ProgramTargetHelper(program,SRCS7,OBJS7,DEPLIBS7,locallib,syslib)
#endif /* ComplexProgramTarget_7 */
#ifndef ComplexCplusplusProgramTarget_7
#define ComplexCplusplusProgramTarget_7(program,locallib,syslib) @@\
CplusplusProgramTargetHelper(program,SRCS7,OBJS7,DEPLIBS7,locallib,syslib)
#endif /* ComplexCplusplusProgramTarget_7 */
/*
* ComplexProgramTarget_8 - generate rules for compiling and linking the
* program specified by $(OBJS8) and $(SRCS8) and installing the program and
* man page. It should be used to build the third program in Imakefiles
* describing more than one program.
*/
#ifndef ComplexProgramTarget_8
#define ComplexProgramTarget_8(program,locallib,syslib) @@\
ProgramTargetHelper(program,SRCS8,OBJS8,DEPLIBS8,locallib,syslib)
#endif /* ComplexProgramTarget_8 */
#ifndef ComplexCplusplusProgramTarget_8
#define ComplexCplusplusProgramTarget_8(program,locallib,syslib) @@\
CplusplusProgramTargetHelper(program,SRCS8,OBJS8,DEPLIBS8,locallib,syslib)
#endif /* ComplexCplusplusProgramTarget_8 */
/*
* ComplexProgramTarget_9 - generate rules for compiling and linking the
* program specified by $(OBJS9) and $(SRCS9) and installing the program and
* man page. It should be used to build the third program in Imakefiles
* describing more than one program.
*/
#ifndef ComplexProgramTarget_9
#define ComplexProgramTarget_9(program,locallib,syslib) @@\
ProgramTargetHelper(program,SRCS9,OBJS9,DEPLIBS9,locallib,syslib)
#endif /* ComplexProgramTarget_9 */
#ifndef ComplexCplusplusProgramTarget_9
#define ComplexCplusplusProgramTarget_9(program,locallib,syslib) @@\
CplusplusProgramTargetHelper(program,SRCS9,OBJS9,DEPLIBS9,locallib,syslib)
#endif /* ComplexCplusplusProgramTarget_9 */
/*
* ComplexProgramTarget_10 - generate rules for compiling and linking the
* program specified by $(OBJS10) and $(SRCS10) and installing the program and
* man page. It should be used to build the third program in Imakefiles
* describing more than one program.
*/
#ifndef ComplexProgramTarget_10
#define ComplexProgramTarget_10(program,locallib,syslib) @@\
ProgramTargetHelper(program,SRCS10,OBJS10,DEPLIBS10,locallib,syslib)
#endif /* ComplexProgramTarget_10 */
#ifndef ComplexCplusplusProgramTarget_10
#define ComplexCplusplusProgramTarget_10(program,locallib,syslib) @@\
CplusplusProgramTargetHelper(program,SRCS10,OBJS10,DEPLIBS10,locallib,syslib)
#endif /* ComplexCplusplusProgramTarget_10 */
#ifndef MoveToBakFile
#define MoveToBakFile(file) -@if [ -f file ]; then set -x; \ @@\
$(MV) file file.bak; else exit 0; fi
#endif /* MoveToBakFile */
#ifndef RMoveToBakFile
#define RMoveToBakFile(file) -@if [ -f file ]; then set -x; \ @@\
RemoveFile(file.bak); $(MV) file file.bak; \ @@\
else exit 0; fi
#endif /* RMoveToBakFile */
/*
* ServerTargetWithFlags - generate rules to compile, link, and relink a server
*/
#ifndef ServerTargetWithFlags
#define ServerTargetWithFlags(server,subdirs,objects,libs,syslibs,flags) @@\
AllTarget(ProgramTargetName(server)) @@\
ProgramTargetName(server): subdirs objects libs @@\
MoveToBakFile($@) @@\
LinkRule($@,$(LDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\
@@\
Concat(load,server): @@\
MoveToBakFile(ProgramTargetName(server)) @@\
LinkRule(ProgramTargetName(server),$(LDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\
@@\
loadX:: Concat(load,server) @@\
@@\
SentinelProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
SentinelLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
PurifyProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
PurifyLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
ProofProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
ProofLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
@@\
InstallProgramWithFlags(server,$(BINDIR),flags) @@\
@@\
clean:: @@\
RemoveFile(ProgramTargetName(server))
#endif /* ServerTargetWithFlags */
/*
* ServerTarget - rules to compile, link, and relink a normal server
*/
#ifndef ServerTarget
#define ServerTarget(server,subdirs,objects,libs,syslibs) @@\
ServerTargetWithFlags(server,subdirs,objects,libs,syslibs,$(_NOOP_))
#endif /* ServerTarget */
#if DoRanlibCmd
#define RanLibrary(args) $(RANLIB) args
#else
#define RanLibrary(args) $(_NULLCMD_)
#endif
#ifndef LibraryTargetName
#define LibraryTargetName(libname)Concat(lib,libname.a)
#endif
#ifndef LibraryTargetNameSuffix
#define LibraryTargetNameSuffix(libname,suffix)Concat3(lib,libname,suffix.a)
#endif
#ifndef InstallNamedTarget
#define InstallNamedTarget(step,srcname,flags,dest,dstname) @@\
step:: srcname @@\
MakeDir($(DESTDIR)dest) @@\
$(INSTALL) $(INSTALLFLAGS) flags srcname $(DESTDIR)dest/dstname
#endif /* InstallNamedTarget */
/*
* InstallNamedTargetNoClobber - Like InstallNamedTarget, but doesn't
* do the install if an installed version already exists. Useful
* for files that might have local customizations that you don't
* want to clobber. Config files are good candidates for this.
*/
#ifndef InstallNamedTargetNoClobber
#define InstallNamedTargetNoClobber(step,srcname,flags,dest,dstname) @@\
step:: srcname @@\
MakeDir($(DESTDIR)dest) @@\
@if [ -f $(DESTDIR)dest/dstname ]; then \ @@\
echo "Not overwriting existing" $(DESTDIR)dest/dstname; \ @@\
else set -x; \ @@\
$(INSTALL) $(INSTALLFLAGS) flags srcname $(DESTDIR)dest/dstname; fi
#endif /* InstallNamedTargetNoClobber */
#ifndef InstallTarget
#define InstallTarget(step,file,flags,dest) @@\
InstallNamedTarget(step,file,flags,dest,file)
#endif /* InstallTarget */
/*
* InstallLibrary - generate rules to install the indicated library.
*/
#ifndef InstallLibrary
#define InstallLibrary(libname,dest) @@\
install:: LibraryTargetName(libname) @@\
MakeDir($(DESTDIR)dest) @@\
$(INSTALL) $(INSTALLFLAGS) $(INSTLIBFLAGS) LibraryTargetName(libname) $(DESTDIR)dest @@\
RanLibrary($(RANLIBINSTFLAGS) $(DESTDIR)dest/LibraryTargetName(libname))
#endif /* InstallLibrary */
/*
* InstallLinkKitLibrary - rule to install Link Kit library.
* (only used for XFree86). This is a no-op
* rule so that Imakefiles on non-XFree86 systems
* continue to build Makefiles correctly.
*/
#ifndef InstallLinkKitLibrary
#define InstallLinkKitLibrary(lib,dir)
#endif
/*
* InstallLinkKitNamedLibrary - rule to install Link Kit library.
* (only used for XFree86). This is a no-op
* rule so that Imakefiles on non-XFree86 systems
* continue to build Makefiles correctly.
*/
#ifndef InstallLinkKitNamedLibrary
#define InstallLinkKitNamedLibrary(lib,dlib,dir)
#endif
/*
* MergeIntoInstalledLibrary - generate rules to merge one library into another
*/
#ifndef MergeIntoInstalledLibrary
#define MergeIntoInstalledLibrary(tolib,fromlib) @@\
install:: fromlib @@\
$(SCRIPTSRC)/mergelib $(DESTDIR)tolib fromlib
#endif /* MergeIntoInstalledLibrary */
/*
* InstallLibraryAlias - generate rules to create a link from one library name
* to another for the purposes of aliasing.
*/
#ifndef InstallLibraryAlias
#define InstallLibraryAlias(libname,alias,dest) @@\
install:: @@\
-(cd $(DESTDIR)dest && ( \ @@\
RemoveFile(LibraryTargetName(alias)); \ @@\
$(LN) LibraryTargetName(libname) LibraryTargetName(alias)))
#endif /* InstallLibraryAlias */
/*
* InstallLintLibrary - generate rules to install the indicated lint library.
*/
#ifndef InstallLintLibrary
#define InstallLintLibrary(libname,dest) @@\
InstallTarget(install.ln,Concat(llib-l,libname.ln),$(INSTLIBFLAGS),dest)
#endif /* InstallLintLibrary */
/*
* InstallManPageLong - generate rules to install the indicated manual page,
* giving it an alternate name. This is used for installing man pages whose
* base name without the .man suffix would normally be longer than 8 characters
* (the limit for using source code control systems on files systems with
* short file names).
*/
#ifndef InstallManPageLong
#define InstallManPageLong(file,destdir,dest) @@\
InstallNamedTarget(install.man,file.man,$(INSTMANFLAGS),destdir,dest.$(MANSUFFIX))
#endif /* InstallManPageLong */
/*
* InstallManPage - generate rules to install the indicated manual page.
*/
#ifndef InstallManPage
#define InstallManPage(file,destdir) @@\
InstallManPageLong(file,destdir,file)
#endif /* InstallManPage */
/*
* InstallManPageAliases - generate rules to install manual page aliases.
*/
#ifndef InstallManPageAliases
#define InstallManPageAliases(file,destdir,aliases) @@\
install.man:: @@\
@(TMP=/tmp/tmp.$$$$; \ @@\
RemoveFile($${TMP}); \ @@\
echo .so `basename destdir`/file.$(MANSUFFIX) > $${TMP}; \ @@\
for i in aliases; do (set -x; \ @@\
$(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $${TMP} $(DESTDIR)destdir/$$i.$(MANSUFFIX)); \ @@\
done; \ @@\
RemoveFile($${TMP}))
#endif /* InstallManPageAliases */
/*
* InstallGenManPageLong - More general rules for installing manual pages --
* doesn't assume MANSUFFIX.
*/
#ifndef InstallGenManPageLong
#define InstallGenManPageLong(file,destdir,dest,suffix) @@\
install.man:: file.man @@\
MakeDir($(DESTDIR)destdir) @@\
$(INSTALL) -c $(INSTMANFLAGS) file.man $(DESTDIR)destdir/dest.suffix
#endif /* InstallGenManPageLong */
/*
* InstallGenManPage - general equivalent of InstallManPage
*/
#ifndef InstallGenManPage
#define InstallGenManPage(file,destdir,suffix) @@\
InstallGenManPageLong(file,destdir,file,suffix)
#endif /* InstallGenManPage */
/*
* InstallGenManPageAliases - general equivalent of InstallManPageAliases
*/
#ifndef InstallGenManPageAliases
#define InstallGenManPageAliases(file,destdir,suffix,aliases) @@\
install.man:: @@\
@(TMP=/tmp/tmp.$$$$; \ @@\
RemoveFile($${TMP}); \ @@\
echo .so `basename destdir`/file.suffix > $${TMP}; \ @@\
for i in aliases; do (set -x; \ @@\
$(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $${TMP} $(DESTDIR)destdir/$$i.suffix); \ @@\
done; \ @@\
RemoveFile($${TMP}))
#endif /* InstallGenManPageAliases */
/*
* ManKeywordsTarget - generate the database used by "man -k".
* This rule updates the index in the directory "manpath", which
* indexes all the manual pages in the section subdirectories under
* it. An update command is defined only on systems that have a
* per MANPATH element index. If the OS supports only one system-wide
* database, we don't update it, because then we can't do cross
* installations or use a non-empty DESTDIR for testing.
*/
#ifndef ManKeywordsTarget
#define ManKeywordsTarget(manpath) man_keywords::
#endif
/*
* InstallNamedNonExec - generate rules to install a data file
*/
#ifndef InstallNamedNonExec
#define InstallNamedNonExec(srcname,dstname,dest) @@\
InstallNamedTarget(install,srcname,$(INSTDATFLAGS),dest,dstname)
#endif /* InstallNamedNonExec */
/*
* InstallLinkKitNamedNonExec - rule for installing server Link Kit files.
* (only used for XFree86). This is a no-op
* rule so that Imakefiles on non-XFree86 systems
* continue to build Makefiles correctly.
*/
#ifndef InstallLinkKitNamedNonExec
#define InstallLinkKitNamedNonExec(srcname,dstname,dest)
#endif
/*
* InstallNonExecFile - generate rules to install a data file
*/
#ifndef InstallNonExecFile
#define InstallNonExecFile(file,dest) @@\
InstallTarget(install,file,$(INSTDATFLAGS),dest)
#endif /* InstallNonExecFile */
/*
* InstallNonExecFileNoClobber - install a data file once
*/
#ifndef InstallNonExecFileNoClobber
#define InstallNonExecFileNoClobber(file,dest) @@\
InstallNamedTargetNoClobber(install,file,$(INSTDATFLAGS),dest,file)
#endif /* InstallNonExecFileNoClobber */
/*
* InstallLinkKitNonExecFile - rule for installing server Link Kit files.
* (only used for XFree86). This is a no-op
* rule so that Imakefiles on non-XFree86 systems
* continue to build Makefiles correctly.
*/
#ifndef InstallLinkKitNonExecFile
#define InstallLinkKitNonExecFile(file,dir)
#endif
/*
* InstallNonExec - generate rules to install a data file, but does not
* try to create the destination directory (deprecated)
*/
#ifndef InstallNonExec
#define InstallNonExec(file,dest) @@\
install:: file @@\
$(INSTALL) $(INSTALLFLAGS) $(INSTDATFLAGS) file $(DESTDIR)dest
#endif /* InstallNonExec */
/*
* InstallProgramWithFlags - generate rules to install an executable program
* using given install flags.
*/
#ifndef InstallProgramWithFlags
#define InstallProgramWithFlags(program,dest,flags) @@\
InstallTarget(install,ProgramTargetName(program),$(INSTPGMFLAGS) flags,dest)
#endif /* InstallProgramWithFlags */
/*
* InstallProgram - generate rules to install an executable program using any
* special install flags set in $(INSTALLFLAGS).
*/
#ifndef InstallProgram
#define InstallProgram(program,dest) @@\
InstallProgramWithFlags(program,dest,NullParameter)
#endif /* InstallProgram */
/*
* InstallScript - install a shell script.
*/
#ifndef InstallScript
#define InstallScript(program,dest) @@\
InstallNamedTarget(install,program.script,$(INSTBINFLAGS),dest,program)
#endif /* InstallScript */
/*
* InstallNamedProg - install a program with renaming and no stripping.
*/
#ifndef InstallNamedProg
#define InstallNamedProg(srcname,dstname,dest) @@\
InstallNamedTarget(install,srcname,$(INSTBINFLAGS),dest,dstname)
#endif /* InstallNamedProg */
/*
* InstallNamedProgNoClobber - Like InstallNamedProg, but doesn't
* do the install if an installed version already exists.
*/
#ifndef InstallNamedProgNoClobber
#define InstallNamedProgNoClobber(srcname,dstname,dest) @@\
InstallNamedTargetNoClobber(install,srcname,$(INSTBINFLAGS),dest,dstname)
#endif /* InstallNamedProgNoClobber */
/*
* InstallLinkKitNamedProg - rule for installing server Link Kit files.
* (only used for XFree86). This is a no-op
* rule so that Imakefiles on non-XFree86 systems
* continue to build Makefiles correctly.
*/
#ifndef InstallLinkKitNamedProg
#define InstallLinkKitNamedProg(srcname,dstname,dest)
#endif
/*
* MakeFlagsToShellFlags - set variables before starting a loop.
* makeflags is the set of "make" flags to check.
* shellcmd is the shell command to execute if any of the flags are set.
*
* The usual use of this rule is to translate make's "don't quit on error"
* flags into the equivalent for the shell. To do this, "make -i" always
* becomes "set +e". "make -k" should also turn on "set +e" if the target
* is building subdirectories. That is, subdirectories are independent
* and should appear to be multiple targets, even though they are
* implemented in a loop in a single target.
*/
#ifndef MakeFlagsToShellFlags
#define MakeFlagsToShellFlags(makeflags,shellcmd)\
for flag in ${MAKEFLAGS} ''; do \ @@\
case "$$flag" in *=*) ;; *[makeflags]*) shellcmd;; esac; done
#endif
/*
* MakeNamedTargetSubdir - do make in a subdir.
*/
#ifndef MakeNamedTargetSubdir
#define MakeNamedTargetSubdir(dir,flags,subname)\
(cd dir && $(MAKE) $(MFLAGS) $(PARALLELMFLAGS) \ @@\
flags subname)
#endif
/*
* LinkFileList - link a list of files from one place to another
*/
#ifndef LinkFileList
#define LinkFileList(step,list,dir,sub) @@\
step:: list @@\
@MakeFlagsToShellFlags(i,set +e); \ @@\
echo " cd" dir; cd dir && \ @@\
for i in list; do (set -x; RemoveFile($$i); $(LN) sub/$$i .); done
#endif
/*
* LinkVarDirectory
*
* Make links from $LIBDIR (<ProjectRoot>/lib/X11) to /var/X11/
* For example /usr/X11R6/lib/X11/xdm ==> /var/X11/xdm so that X can be
* run from a read-only volume like a CD-ROM.
*
* Since the link is used in the installation process, we need to
* make the link relative in order to honor $(DESTDIR) if it is set
*/
#ifndef LinkVarDirectory
#if HasVarDirectory && HasSymLinks
#define LinkVarDirectory(mdir,cdir,rdir,ldir) @@\
install:: @@\
MakeDir(Concat($(DESTDIR)$(LIBDIR)/,cdir)) @@\
MakeDir(Concat($(DESTDIR)$(VARDIR)/,mdir)) @@\
@MakeFlagsToShellFlags(i,set +e); \ @@\
if [ -d Concat($(DESTDIR)$(LIBDIR)/,cdir) ]; then \ @@\
RELPATH=`echo Concat($(LIBDIR)/,cdir) | \ @@\
sed -e 's:^.::' -e 's:[^/.][^/]*:..:'g`; \ @@\
cd Concat($(DESTDIR)$(LIBDIR)/,cdir); \ @@\
if [ -d rdir -a ! -h rdir ]; then \ @@\
(cd rdir; tar cf - . | \ @@\
(cd Concat($(DESTDIR)$(VARDIR)/,mdir);\ @@\
tar xf -; exit 0); exit 0); \ @@\
fi; \ @@\
$(RM) -r rdir; \ @@\
$(LN) Concat($${RELPATH}$(VARDIR)/,mdir) ldir; \ @@\
fi
#else
#define LinkVarDirectory(mdir,cdir,rdir,ldir)
#endif
#endif
/*
* InstallMultipleDestFlags - generate rules to install multiple files at
* once during a particular step in the build using a specific set of install
* flags.
*/
#ifndef InstallMultipleDestFlags
#define InstallMultipleDestFlags(step,list,dest,flags) @@\
step:: list @@\
MakeDir($(DESTDIR)dest) @@\
@MakeFlagsToShellFlags(i,set +e); \ @@\
for i in list; do \ @@\
(set -x; $(INSTALL) $(INSTALLFLAGS) flags $$i $(DESTDIR)dest); \ @@\
done
#endif /* InstallMultipleDestFlags */
/*
* InstallLinkKitMultipleDestFlags - rule for installing server Link Kit files.
* (only used for XFree86). This is a no-op
* rule so that Imakefiles on non-XFree86 systems
* continue to build Makefiles correctly.
*/
#ifndef InstallLinkKitMultipleDestFlags
#define InstallLinkKitMultipleDestFlags(list,dest,flags)
#endif
/*
* InstallMultipleDest - generate rules to install multiple files at once
* during a particular step in the build using any install flags set in
* $(INSTDATFLAGS).
*/
#ifndef InstallMultipleDest
#define InstallMultipleDest(step,list,dest) @@\
InstallMultipleDestFlags(step,list,dest,$(INSTDATFLAGS))
#endif /* InstallMultipleDest */
/*
* InstallMultiple - generate rules to install multiple files at once
* during the install step of the build using any install flags set in
* $(INSTALLFLAGS).
*/
#ifndef InstallMultiple
#define InstallMultiple(list,dest) @@\
InstallMultipleDest(install,list,dest)
#endif /* InstallMultiple */
/*
* InstallMultipleFlags - generate rules to install multiple files at once
* during the install step of the build using the given install flags.
*/
#ifndef InstallMultipleFlags
#define InstallMultipleFlags(list,dest,flags) @@\
InstallMultipleDestFlags(install,list,dest,flags)
#endif /* InstallMultipleFlags */
/*
* InstallMultipleMan - generate rules to install a variety of manual pages
* during the install.man step of the build.
*/
#ifndef InstallMultipleMan
#define InstallMultipleMan(list,dest) @@\
InstallMultipleDestFlags(install.man,list,dest,$(INSTMANFLAGS))
#endif /* InstallMultipleMan */
/*
* IncludeMakefile - rule to include another Makefile.
* Must not generate an error or even a warning if the named file
* is not present, since we use this to include Makefile.dep, which
* may not be built yet.
* This is defined non-null iff HasMakefileSafeInclude is YES.
* The double-@ is to ensure no leading spaces on the line.
*/
#ifndef IncludeMakefile
#if HasClearmake
#define IncludeMakefile(file) @@sinclude file
#else
#if HasBsdMake
#define IncludeMakefile(file) @@# dependencies are in .depend
#else
#define IncludeMakefile(file) /**/
#endif
#endif
#endif
/*
* DependDependencyStatement - Used by DependDependency to set up the
* most specific dependency, which differs based on whether we support
* a separate Makefile.dep on this platform.
*/
#ifndef DependDependencyStatement
#if HasMakefileSafeInclude
#define DependDependencyStatement() @@\
DependFileName:: ProgramTargetName($(DEPEND))
#else
#define DependDependencyStatement() @@\
depend:: ProgramTargetName($(DEPEND))
#endif
#endif
/*
* DependDependency - generate rules to build the makedepend program if
* this Imakefile is within the source tree.
*/
#ifndef DependDependency
#ifdef UseInstalled
#define DependDependency() /**/
#else
#define DependDependency() @@\
DependDependencyStatement() @@\
@@\
NoCmpScript(ProgramTargetName($(DEPEND))) @@\
@@\
ProgramTargetName($(DEPEND)): @@\
@echo "checking $@ over in $(DEPENDSRC) first..."; \ @@\
cd $(DEPENDSRC) && $(MAKE); \ @@\
echo "okay, continuing in $(CURRENT_DIR)"
#endif /* UseInstalled */
#endif /* DependDependency */
/*
* DependTarget - generate rules to compute dependencies for all files listed
* in $(SRCS).
*/
#ifndef DependTarget
#if HasMakefileSafeInclude
#define DependTarget() @@\
DependDependency() @@\
@@\
depend:: DependFileName @@\
@@\
DependFileName:: @@\
RemoveFile($@) @@\
RunProgram(DEPEND,-f- $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- $(SRCS)) > $@
#else /* HasMakefileSafeInclude */
#define DependTarget() @@\
DependDependency() @@\
@@\
depend:: @@\
RunProgram(DEPEND,$(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- $(SRCS))
#endif /* HasMakefileSafeInclude else */
#endif /* DependTarget */
/*
* DependTarget3 - generate rules to compute dependencies for all files given.
*/
#ifndef DependTarget3
#if HasMakefileSafeInclude
#define DependTarget3(srcs1,srcs2,srcs3) @@\
DependDependency() @@\
@@\
depend:: DependFileName @@\
@@\
DependFileName:: @@\
RemoveFile($@) @@\
RunProgram(DEPEND,-f- $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs1) > $@ @@\
RunProgram(DEPEND,-f- $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs2) >> $@ @@\
RunProgram(DEPEND,-f- $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs3) >> $@
#else /* HasMakefileSafeInclude */
#define DependTarget3(srcs1,srcs2,srcs3) @@\
DependDependency() @@\
@@\
depend:: @@\
RunProgram(DEPEND,$(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs1) @@\
RunProgram(DEPEND,-a $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs2) @@\
RunProgram(DEPEND,-a $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs3)
#endif /* HasMakefileSafeInclude else */
#endif /* DependTarget3 */
/*
* CleanTarget - generate rules to remove any garbage files
*/
#ifndef CleanTarget
#define CleanTarget() @@\
clean:: @@\
$(RM) FilesToClean ExtraFilesToClean "#"* @@\
@@\
ProofCleanTarget()
#endif /* CleanTarget */
/*
* TagsTarget - generate rules to compute tags files for C source code.
*/
#ifndef TagsTarget
#define TagsTarget() @@\
tags:: @@\
$(TAGS) -w *.[ch] @@\
$(TAGS) -xw *.[ch] > TAGS
#endif /* TagsTarget */
/*
* ImakeDependency - generate rules to compile imake if this Imakefile is
* within the source tree.
*/
#ifndef ImakeDependency
#ifdef UseInstalled
#define ImakeDependency(target) /**/
#else
#define ImakeDependency(target) @@\
target:: ProgramTargetName($(IMAKE)) @@\
@@\
NoCmpScript(ProgramTargetName($(IMAKE)) $(IMAKE).Osuf) @@\
@@\
ProgramTargetName($(IMAKE)) $(IMAKE).Osuf: @@\
-@(cd $(IMAKESRC) && if [ -f Makefile ]; then \ @@\
echo "checking $@ in $(IMAKESRC) first..."; $(MAKE) all; else \ @@\
echo "bootstrapping $@ from Makefile.ini in $(IMAKESRC) first..."; \ @@\
$(MAKE) -f Makefile.ini BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"; fi; \ @@\
echo "okay, continuing in $(CURRENT_DIR)")
#endif /* UseInstalled */
#endif /* ImakeDependency */
/*
* BuildMakefileTarget - generate rules to build a Makefile from an Imakefile
* and any special imake flags. This is generally done automatically by the
* template or by any special Imakefiles. The first argument exists just
* because imakeflags is usually empty and some preprocessors will complain
* if an empty argument is passed as the sole argument to a macro.
*/
#ifndef BuildMakefileTarget
#define BuildMakefileTarget(notused,imakeflags) @@\
ImakeDependency(Makefile) @@\
@@\
Makefile:: @@\
RMoveToBakFile(Makefile) @@\
$(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR) imakeflags
#endif /* BuildMakefileTarget */
/*
* MakefileTarget - generate rules to build a normal Makefile.
*/
#ifndef MakefileTarget
#define MakefileTarget() @@\
BuildMakefileTarget(Imakefile,NullParameter)
#endif /* MakefileTarget */
/*
* LibMkdir - helper for creating library object subdirectories
*/
#ifndef LibMkdir
#define LibMkdir(dir) DirFailPrefix@if [ -d dir ]; then exit 0; else set -x; mkdir dir; fi
#endif
#ifndef LibMkdirLinkSubdirs
#define LibMkdirLinkSubdirs(dir) DirFailPrefix@if [ -d dir ]; then \ @@\
exit 0; \ @@\
else \ @@\
echo "mkdir dir"; mkdir dir; \ @@\
for i in $(SUBDIRS); do \ @@\
j=`echo "$$i" | sed -e 's;[^/]\{1,\};..;g'`; \ @@\
$(MKDIRHIER) "dir/`dirname $$i`"; \ @@\
echo $(LN) "$$j/$$i/dir" "dir/$$i"; \ @@\
$(LN) "$$j/$$i/dir" "dir/$$i"; \ @@\
done; \ @@\
fi
#endif
/*
* LibCleanDir - helper for cleaning library object subdirectories
*/
#ifndef LibCleanDir
#define LibCleanDir(dir) -@if [ -d dir ]; then \ @@\
set -x; $(RM) -r dir; else exit 0; fi
#endif
/*
* LintLibReferences - variables for lint libraries
*/
#ifndef LintLibReferences
#define LintLibReferences(varname,libname,libsource) @@\
Concat(LINT,varname) = _UseCat($(LINTLIBDIR)/llib-l,libsource/llib-,libname.ln)
#endif
/*
* UnsharedLibReferences - variables for unshared libraries
*/
#ifndef UnsharedLibReferences
#define UnsharedLibReferences(varname,libname,libsource) @@\
ProjectUnsharedLibReferences(varname,libname,libsource,$(BUILDLIBDIR))
#endif
/*
* ProjectUnsharedLibReferences - variables for unshared libraries
*/
#ifndef ProjectUnsharedLibReferences
#define ProjectUnsharedLibReferences(varname,libname,libsource,buildlibdir) @@\
Concat3(DEP,varname,LIB) = _UseCat($(USRLIBDIR)/,buildlibdir/,LibraryTargetName(libname)) @@\
Concat(varname,LIB) = LoaderLibPrefix Concat(-l,libname) @@\
LintLibReferences(varname,libname,libsource)
#endif
/*
* SharedLibDependencies - shared library dependencies
*/
#ifndef SharedLibDependencies
#define SharedLibDependencies(libname,libsource,revname) /**/
#endif
/*
* SharedDSLibDependencies - shared library dependencies with data separation
*/
#ifndef SharedDSLibDependencies
#define SharedDSLibDependencies(libname,libsource,revname) /**/
#endif
/*
* SharedLibReferences - variables for shared libraries
*/
#ifndef SharedLibReferences
#define SharedLibReferences(varname,libname,libsource,revname,rev) @@\
revname = rev @@\
Concat3(DEP,varname,LIB) = SharedLibDependencies(libname,libsource,revname) @@\
Concat(varname,LIB) = LoaderLibPrefix Concat(-l,libname) @@\
LintLibReferences(varname,libname,libsource)
#endif
/*
* SharedDSLibReferences - variables for shared libraries with data separation
*/
#ifndef SharedDSLibReferences
#define SharedDSLibReferences(varname,libname,libsource,revname,rev) @@\
revname = rev @@\
Concat3(DEP,varname,LIB) = SharedDSLibDependencies(libname,libsource,revname) @@\
Concat(varname,LIB) = LoaderLibPrefix Concat(-l,libname) @@\
LintLibReferences(varname,libname,libsource)
#endif
/*
* CPPOnlyCompile - run C compiler's preprocessor only
*/
#ifndef CPPOnlyCompile
#define CPPOnlyCompile(src,options) RemoveFile($@) @@\
ClearmakeOSName \
$(CC) -E $(CFLAGS) options src > $@
#endif
/*
* ObjectCompile - compile fragment for a normal object file
*/
#ifndef ObjectCompile
#define ObjectCompile(options) RemoveFile($@) @@\
ClearmakeOSName \
$(CC) -c $(CFLAGS) options $*.c
#endif
#ifndef ObjectCplusplusCompile
#define ObjectCplusplusCompile(options) RemoveFile($@) @@\
ClearmakeOSName \
$(CXX) -c $(CXXFLAGS) options $*.CCsuf
#endif
/*
* NormalLibObjCompile - compile fragment for a normal library object file
*/
#ifndef NormalLibObjCompile
#define NormalLibObjCompile(options) ObjectCompile(options)
#endif
#ifndef NormalLibObjCplusplusCompile
#define NormalLibObjCplusplusCompile(options) ObjectCplusplusCompile(options)
#endif
/*
* NormalSharedLibObjCompile - compile fragment for shared objects
*/
#ifndef NormalSharedLibObjCompile
#define NormalSharedLibObjCompile(options) NormalLibObjCompile(options $(SHLIBDEF) $(SHAREDCODEDEF) $(PICFLAGS))
#endif
#ifndef NormalSharedLibObjCplusplusCompile
#define NormalSharedLibObjCplusplusCompile(options) NormalLibObjCplusplusCompile(options $(SHLIBDEF) $(SHAREDCODEDEF) $(CXXPICFLAGS))
#endif
/*
* LibObjCompile - compile fragment for unshared/profiled/debugged objects
*/
#ifndef LibObjCompile
#if HasGcc || HasGcc2
#define LibObjCompile(dir,options) RemoveFiles($@ dir/$@) @@\
ClearmakeOSName \
$(CC) -c $(CCOPTIONS) $(ALLDEFINES) options $*.c -o dir/$@
#else
#define LibObjCompile(dir,options) RemoveFiles($@ dir/$@) @@\
ClearmakeOSName \
$(CC) -c $(CCOPTIONS) $(ALLDEFINES) options $*.c @@\
$(MV) $@ dir/$@
#endif
#endif
#ifndef LibObjCplusplusCompile
#if HasGcc || HasGcc2
#define LibObjCplusplusCompile(dir,options) RemoveFiles($@ dir/$@) @@\
ClearmakeOSName \
$(CXX) -c $(CXXOPTIONS) $(CXXDEFINES) options $*.CCsuf -o dir/$@
#else
#define LibObjCplusplusCompile(dir,options) RemoveFiles($@ dir/$@) @@\
ClearmakeOSName \
$(CXX) -c $(CXXOPTIONS) $(CXXDEFINES) options $*.CCsuf @@\
$(MV) $@ dir/$@
#endif
#endif
/*
* DebuggedLibObjCompile - compile fragment for debugged objects
*/
#ifndef DebuggedLibObjCompile
#define DebuggedLibObjCompile(options) LibObjCompile(debugger,DebuggableCDebugFlags options)
#endif
#ifndef DebuggedLibObjCplusplusCompile
#define DebuggedLibObjCplusplusCompile(options) LibObjCplusplusCompile(debugger,DebuggableCplusplusDebugFlags options)
#endif
/*
* ProfiledLibObjCompile - compile fragment for profiled objects
*/
#ifndef ProfiledLibObjCompile
#define ProfiledLibObjCompile(options) LibObjCompile(profiled,ProfiledCDebugFlags options)
#endif
#ifndef ProfiledLibObjCplusplusCompile
#define ProfiledLibObjCplusplusCompile(options) LibObjCplusplusCompile(profiled,ProfiledCplusplusDebugFlags options)
#endif
/*
* UnsharedLibObjCompile - compile fragment for unshared objects
*/
#ifndef UnsharedLibObjCompile
#define UnsharedLibObjCompile(options) LibObjCompile(unshared,$(CDEBUGFLAGS) options)
#endif
#ifndef UnsharedLibObjCplusplusCompile
#define UnsharedLibObjCplusplusCompile(options) LibObjCplusplusCompile(unshared,$(CXXDEBUGFLAGS) options)
#endif
/*
* SharedLibObjCompile - compile fragment for shared objects
*/
#ifndef SharedLibObjCompile
#define SharedLibObjCompile(options) LibObjCompile(shared,options $(SHLIBDEF) $(SHAREDCODEDEF) $(PICFLAGS) $(CDEBUGFLAGS))
#endif
/*
* NormalLibraryObjectRule - for simple libraries
*/
#ifndef NormalLibraryObjectRule
#define NormalLibraryObjectRule() @@\
.c.Osuf: @@\
NormalLibObjCompile($(_NOOP_))
#endif /* NormalLibraryObjectRule */
#ifndef NormalCplusplusObjectRule
#define NormalCplusplusObjectRule() @@\
.CCsuf.Osuf: @@\
NormalLibObjCplusplusCompile($(_NOOP_))
#endif
#ifndef NormalFortranObjectRule
#define NormalFortranObjectRule() @@\
.f.Osuf: @@\
RemoveFile($@) @@\
ClearmakeOSName \
$(FC) -c $(FCFLAGS) $*.f
#endif
/*
* SpecialObjectRule - generate rules to compile a file with special flags.
*/
#ifndef SpecialObjectRule
#define SpecialObjectRule(objs,depends,options) @@\
objs: depends @@\
ObjectCompile(options)
#endif /* SpecialObjectRule */
#ifndef SpecialCplusplusObjectRule
#define SpecialCplusplusObjectRule(baseobj,basedep,options) @@\
baseobj.Osuf: basedep.CCsuf @@\
ObjectCplusplusCompile(options)
#endif /* SpecialCplusplusObjectRule */
/*
* SpecialCObjectRule - generate rules to compile a C file with special flags.
* also handles CodeCenter rules
*/
#ifndef SpecialCObjectRule
#define SpecialCObjectRule(basename,depends,options) @@\
SpecialObjectRule(basename.Osuf,basename.c depends,options) @@\
@@\
basename.i: basename.c depends @@\
CPPOnlyCompile(basename.c,options) @@\
@@\
CenterLoadTarget(debug_src,basename.c,NullParameter,$(ALLDEFINES) options)
#endif /* SpecialCObjectRule */
#ifndef ObjectFromSpecialSource
#define ObjectFromSpecialSource(dst,src,flags) @@\
NoConfigRec(dst.c) @@\
@@\
dst.c: src.c @@\
RemoveFile($@) @@\
$(LN) $? $@ @@\
@@\
SpecialCObjectRule(dst,NullParameter,flags) @@\
@@\
includes:: dst.c @@\
@@\
depend:: dst.c @@\
@@\
clean:: @@\
RemoveFile(dst.c)
#endif /* ObjectFromSpecialSource */
#ifndef LexFileExplicit
#if HasClearmake /* provide a place to hang ClearmakeOSName */
#define LexFileExplicit(file) @@\
file.c: file.l @@\
ClearmakeOSName \
$(LEX) $(LFLAGS) file.l @@\
$(MV) lex.yy.c file.c
#else
#define LexFileExplicit(file) /* the default rule is fine */
#endif
#endif
#ifndef LexFile
#define LexFile(file) @@\
LexFileExplicit(file) @@\
@@\
depend:: file.c @@\
@@\
clean:: @@\
RemoveFiles(lex.yy.c file.c)
#endif /* LexFile */
#ifndef YaccFile
#if HasGnuMake
#define YaccFile(file,flags) @@\
depend:: file.c @@\
@@\
file.h: file.c @@\
@@\
file.c: file.y @@\
ClearmakeOSName \
$(YACC) flags file.y @@\
$(MV) y.tab.c file.c @@\
@if [ -f y.tab.h ]; then set -x; $(MV) y.tab.h file.h; \ @@\
else exit 0; fi @@\
@@\
clean:: @@\
RemoveFiles(y.tab.c y.tab.h file.h file.c)
#else
#define YaccFile(file,flags) @@\
depend:: file.c @@\
@@\
file.h file.c: file.y @@\
ClearmakeOSName \
$(YACC) flags file.y @@\
$(MV) y.tab.c file.c @@\
@if [ -f y.tab.h ]; then set -x; $(MV) y.tab.h file.h; \ @@\
else exit 0; fi @@\
@@\
clean:: @@\
RemoveFiles(y.tab.c y.tab.h file.h file.c)
#endif
#endif /* YaccFile */
#ifndef YaccFileNoFlags
#define YaccFileNoFlags(file) @@\
depend:: file.c @@\
@@\
file.c: file.y @@\
ClearmakeOSName \
$(YACC) file.y @@\
$(MV) y.tab.c file.c @@\
@@\
clean:: @@\
RemoveFiles(y.tab.c file.c)
#endif /* YaccFileNoFlags */
#ifndef MakeLibrary
#define MakeLibrary(libname,objlist) $(AR) libname objlist
#endif
#ifndef LinkBuildLibrary
#ifdef UseInstalled
#define LinkBuildLibrary(lib) $(_NULLCMD_)
#else
#define LinkBuildLibrary(lib) MakeDir($(BUILDLIBDIR)) @@\
RemoveFile($(BUILDLIBDIR)/lib) @@\
cd $(BUILDLIBDIR) && $(LN) $(BUILDLIBTOP)/$(CURRENT_DIR)/lib .
#endif
#endif /* LinkBuildLibrary */
#ifndef _LinkBuildLibrary /* will get redefined elsewhere */
#define _LinkBuildLibrary(lib) $(_NULLCMD_)
#endif /* _LinkBuildLibrary */
/*
* NormalLibraryTarget - generate rules to create a library.
*/
#ifndef NormalLibraryTarget
#define NormalLibraryTarget(libname,objlist) @@\
AllTarget(LibraryTargetName(libname)) @@\
@@\
LibraryTargetName(libname): objlist $(EXTRALIBRARYDEPS) @@\
RemoveFile($@) @@\
MakeLibrary($@,objlist) @@\
RanLibrary($@) @@\
_LinkBuildLibrary($@)
#endif /* NormalLibraryTarget */
/*
* NormalLibraryTarget2 - generate rules to create a library in two steps.
* This is used to create libraries with large numbers of files.
*/
#ifndef NormalLibraryTarget2
#define NormalLibraryTarget2(libname,objlist1,objlist2) @@\
AllTarget(LibraryTargetName(libname)) @@\
@@\
LibraryTargetName(libname): objlist1 objlist2 $(EXTRALIBRARYDEPS) @@\
RemoveFile($@) @@\
MakeLibrary($@,objlist1) @@\
MakeLibrary($@,objlist2) @@\
RanLibrary($@) @@\
_LinkBuildLibrary($@)
#endif /* NormalLibraryTarget2 */
/*
* NormalLibraryTarget3 - generate rules to create a library in three steps.
* This is used to create libraries with very large numbers of files.
*/
#ifndef NormalLibraryTarget3
#define NormalLibraryTarget3(libname,objlist1,objlist2,objlist3) @@\
AllTarget(LibraryTargetName(libname)) @@\
@@\
LibraryTargetName(libname): objlist1 objlist2 objlist3 $(EXTRALIBRARYDEPS) @@\
RemoveFile($@) @@\
MakeLibrary($@,objlist1) @@\
MakeLibrary($@,objlist2) @@\
MakeLibrary($@,objlist3) @@\
RanLibrary($@) @@\
_LinkBuildLibrary($@)
#endif /* NormalLibraryTarget3 */
/*
* NormalDepLibraryTarget - generate rules to create a library.
*/
#ifndef NormalDepLibraryTarget
#define NormalDepLibraryTarget(libname,deplist,objlist) @@\
AllTarget(LibraryTargetName(libname)) @@\
@@\
LibraryTargetName(libname): deplist $(EXTRALIBRARYDEPS) @@\
RemoveFile($@) @@\
MakeLibrary($@,objlist) @@\
RanLibrary($@) @@\
_LinkBuildLibrary($@)
#endif /* NormalDepLibraryTarget */
/*
* UnsharedLibraryTarget - generate rules to create a library.
*/
#ifndef UnsharedLibraryTarget
#define UnsharedLibraryTarget(libname,objlist,down,up) @@\
AllTarget(LibraryTargetName(libname)) @@\
@@\
LibraryTargetName(libname): objlist $(EXTRALIBRARYDEPS) @@\
RemoveFile($@) @@\
(cd down && MakeLibrary(up/$@,objlist)) @@\
RanLibrary($@) @@\
_LinkBuildLibrary($@)
#endif /* UnsharedLibraryTarget */
/*
* UnsharedLibraryTarget3 - generate rules to create a library in three steps.
* This is used to create libraries with very large numbers of files.
*/
#ifndef UnsharedLibraryTarget3
#define UnsharedLibraryTarget3(libname,objlist1,objlist2,objlist3,down,up) @@\
AllTarget(LibraryTargetName(libname)) @@\
@@\
LibraryTargetName(libname): objlist1 objlist2 objlist3 $(EXTRALIBRARYDEPS) @@\
RemoveFile($@) @@\
(cd down && MakeLibrary(up/$@,objlist1)) @@\
(cd down && MakeLibrary(up/$@,objlist2)) @@\
(cd down && MakeLibrary(up/$@,objlist3)) @@\
RanLibrary($@) @@\
_LinkBuildLibrary($@)
#endif /* UnsharedLibraryTarget3 */
/*
* SubdirLibraryRule -
*/
#ifndef SubdirLibraryRule
#define SubdirLibraryRule(objlist) @@\
all:: DONE @@\
@@\
DONE: objlist @@\
RemoveFile($@) @@\
touch $@ @@\
@@\
clean:: @@\
RemoveFile(DONE)
#endif /* SubdirLibraryRule */
/*
* ProfiledLibraryTarget - generate rules to create a profiled library.
*/
#ifndef ProfiledLibraryTarget
#define ProfiledLibraryTarget(libname,objlist) @@\
AllTarget(LibraryTargetNameSuffix(libname,_p)) @@\
@@\
LibraryTargetNameSuffix(libname,_p): objlist $(EXTRALIBRARYDEPS) @@\
RemoveFile($@) @@\
cd profiled && MakeLibrary(../$@,objlist) @@\
RanLibrary($@)
#endif /* ProfiledLibraryTarget */
/*
* DebuggedLibraryTarget - generate rules to create a debuggable library.
*/
#ifndef DebuggedLibraryTarget
#define DebuggedLibraryTarget(libname,objlist) @@\
AllTarget(LibraryTargetNameSuffix(libname,_d)) @@\
@@\
LibraryTargetNameSuffix(libname,_d): objlist $(EXTRALIBRARYDEPS) @@\
RemoveFile($@) @@\
cd debugger && MakeLibrary(../$@,objlist) @@\
RanLibrary($@)
#endif /* DebuggedLibraryTarget */
/*
* AliasedLibraryTarget - generate rules to link one library to another.
*/
#ifndef AliasedLibraryTarget
#define AliasedLibraryTarget(libname,alias) @@\
AllTarget(LibraryTargetName(alias)) @@\
@@\
LibraryTargetName(alias): LibraryTargetName(libname) @@\
RemoveFile($@) @@\
$(LN) LibraryTargetName(libname) $@ @@\
@@\
clean:: @@\
RemoveFile(LibraryTargetName(alias))
#endif /* AliasedLibraryTarget */
/*
* NormalRelocatableTarget - generate rules to produce a relocatable object
* file instead of a library.
*/
#ifndef NormalRelocatableTarget
#define NormalRelocatableTarget(objname,objlist) @@\
AllTarget(objname.Osuf) @@\
@@\
objname.Osuf: objlist $(EXTRALIBRARYDEPS) @@\
RemoveFile($@) @@\
$(LD) $(LDCOMBINEFLAGS) objlist -o $@
#endif /* NormalRelocatableTarget */
/*
* ProfiledRelocatableTarget - generate rules to produce a profiled relocatable
* object file instead of a library.
*/
#ifndef ProfiledRelocatableTarget
#define ProfiledRelocatableTarget(objname,objlist) @@\
AllTarget(Concat(objname,_p.Osuf)) @@\
@@\
Concat(objname,_p.Osuf): objlist $(EXTRALIBRARYDEPS) @@\
RemoveFile($@) @@\
$(LD) -X -r objlist -o $@
#endif /* ProfiledRelocatableTarget */
/*
* DebuggedRelocatableTarget - generate rules to produce a debuggable
* relocatable object file instead of a library.
*/
#ifndef DebuggedRelocatableTarget
#define DebuggedRelocatableTarget(objname,objlist) @@\
AllTarget(Concat(objname,_d.Osuf)) @@\
@@\
Concat(objname,_d.Osuf): objlist $(EXTRALIBRARYDEPS) @@\
RemoveFile($@) @@\
$(LD) -X -r objlist -o $@
#endif /* DebuggedRelocatableTarget */
/*
* LintLibraryTarget - generate rules to create a lint library. Note that the
* lint library is always forced to be newer than the library itself.
*/
#ifndef LintLibraryTarget
#define LintLibraryTarget(libname,srclist) @@\
lintlib:: Concat(llib-l,libname.ln) @@\
@@\
Concat(llib-l,libname.ln): srclist $(EXTRALIBRARYDEPS) @@\
RemoveFile($@) @@\
$(LINT) Concat($(LINTLIBFLAG),libname) $(LINTFLAGS) srclist
#endif /* LintLibraryTarget */
/*
* NormalLintTarget - generate rules to lint a set of sources.
*/
#ifndef NormalLintTarget
#define NormalLintTarget(srclist) @@\
lint: @@\
$(LINT) $(LINTFLAGS) srclist $(LINTLIBS) @@\
lint1: @@\
$(LINT) $(LINTFLAGS) $(FILE) $(LINTLIBS)
#endif /* NormalLintTarget */
/*
* LintTarget - generate rules to lint $(SRCS)
*/
#ifndef LintTarget
#define LintTarget() @@\
NormalLintTarget($(SRCS))
#endif
/*
* LinkSourceFile - snag source file from some other directory
*/
#ifndef LinkSourceFile
#define LinkSourceFile(src,dir) @@\
src: dir/src @@\
RemoveFile($@) @@\
$(LN) $? $@ @@\
@@\
NoConfigRec(src) @@\
@@\
includes:: src @@\
@@\
depend:: src @@\
@@\
clean:: @@\
RemoveFile(src)
#endif
/*
* LinkFile - link a file
*/
#ifndef LinkFile
#define LinkFile(tofile,fromfile) @@\
tofile:: fromfile @@\
RemoveFile($@) @@\
$(LN) $? $@ @@\
@@\
NoConfigRec(tofile) @@\
@@\
includes:: tofile @@\
@@\
depend:: tofile @@\
@@\
clean:: @@\
RemoveFile(tofile)
#endif
#ifndef MakeSubincludesForBuild
#define MakeSubincludesForBuild(step,dir,srclist) @@\
step:: dir srclist @@\
@-(list=`echo srclist | sed -e 's/[^ ]*\///g'`; \ @@\
set -x; cd dir && RemoveFiles($$list)) @@\
@for i in srclist; do \ @@\
(set -x; cd dir && $(LN) ../$$i .); \ @@\
done @@\
@@\
dir:: @@\
$(MKDIRHIER) dir @@\
@@\
clean:: @@\
@-(if [ -d dir ]; then \ @@\
list=`echo srclist | sed -e 's/[^ ]*\///g'`; \ @@\
set -x; cd dir && RemoveFile($$list); else exit 0; fi)
#endif
/*
* LangNamedTargetSubdirs - recursively make a series of steps
*/
#ifndef LangNamedTargetSubdirs
#define LangNamedTargetSubdirs(lang,name,dirs,verb,flags,subname) @@\
name:: @@\
@MakeFlagsToShellFlags(ik,set +e); \ @@\
for i in dirs ;\ @@\
do \ @@\
echo verb "in $(CURRENT_DIR)/$$i..."; \ @@\
(cd $$i && LANG=lang $(MAKE) $(MFLAGS) flags subname);\ @@\
done
#endif
/*
* NamedMakeSubdirs - generate rules to do makes in the given subdirectories.
* If you want CDEBUGFLAGS passed along to subdirectories, provide a line like
* the following in the appropriate Imakefile
*
* #define PassCDebugFlags 'CDEBUGFLAGS=$(CDEBUGFLAGS)'
*/
#ifndef LangNamedMakeSubdirs
#define LangNamedMakeSubdirs(lang,name,dirs) \
LangNamedTargetSubdirs(lang,name,dirs,"making" name,PassCDebugFlags,all)
#endif /* LangNamedMakeSubdirs */
#ifndef LangMakeSubdirs
#define LangMakeSubdirs(lang,dirs) @@\
LangNamedMakeSubdirs(lang,all,dirs)
#endif /* LangMakeSubdirs */
/*
* NamedTargetSubdirs - recursively make a series of steps
*/
#ifndef NamedTargetSubdirs
#define NamedTargetSubdirs(name,dirs,verb,flags,subname) @@\
name:: @@\
@MakeFlagsToShellFlags(ik,set +e); \ @@\
for i in dirs ;\ @@\
do \ @@\
echo verb "in $(CURRENT_DIR)/$$i..."; \ @@\
MakeNamedTargetSubdir($$i,flags,subname); \ @@\
done
#endif
/*
* NamedMakeSubdirs - generate rules to do makes in the given subdirectories.
* If you want CDEBUGFLAGS passed along to subdirectories, provide a line like
* the following in the appropriate Imakefile
*
* #define PassCDebugFlags 'CDEBUGFLAGS=$(CDEBUGFLAGS)'
*/
#ifndef NamedMakeSubdirs
#define NamedMakeSubdirs(name,dirs) \
NamedTargetSubdirs(name,dirs,"making" name,PassCDebugFlags,all)
#endif /* NamedMakeSubdirs */
#ifndef MakeSubdirs
#define MakeSubdirs(dirs) @@\
NamedMakeSubdirs(all,dirs)
#endif /* MakeSubdirs */
/*
* DependSubdirs - generate rules to recursively compute dependencies as
* part of the make depend step.
*/
#ifndef DependSubdirs
#define DependSubdirs(dirs) \
NamedTargetSubdirs(depend,dirs,"depending",NullParameter,depend)
#endif /* DependSubdirs */
/*
* ForceSubdirs - force make to build subdirectories
*/
#ifndef ForceSubdirs
#if !HasBsdMake
#define ForceSubdirs(dirs) @@\
dirs: FRC @@\
@echo "making all in $(CURRENT_DIR)/$@..." @@\
@MakeNamedTargetSubdir($@,PassCDebugFlags,all) @@\
@@\
FRC:
#else
/* For BSD 4.4 make */
#define ForceSubdirs(dirs) @@\
dirs: .EXEC @@\
@cd $@ ; echo "making all in $(CURRENT_DIR)/$@..."; \ @@\
$(MAKE) $(MFLAGS) PassCDebugFlags all @@\
@@\
.EXEC:
#endif
#endif /* ForceSubdirs */
/*
* InstallSubdirs - generate rules to recursively install programs and files.
*/
#ifndef InstallSubdirs
#define InstallSubdirs(dirs) \
NamedTargetSubdirs(install,dirs,"installing",DESTDIR=$(DESTDIR),install)
#endif /* InstallSubdirs */
/*
* InstallManSubdirs - generate rules to recursively install manual pages.
*/
#ifndef InstallManSubdirs
#define InstallManSubdirs(dirs) \
NamedTargetSubdirs(install.man,dirs,"installing man pages",DESTDIR=$(DESTDIR),install.man)
#endif /* InstallManSubdirs */
/*
* IncludesSubdirs - generate rules to recursively put include files in build
*/
#ifndef IncludesSubdirs
#define IncludesSubdirs(dirs) \
NamedTargetSubdirs(includes,dirs,including,NullParameter,includes)
#endif
/*
* InstallLinkKitSubdirs - generate rules to recursively install server Link
* Kit (only used for XFree86). This is a no-op
* rule so that Imakefiles on non-XFree86 systems
* continue to build Makefiles correctly.
*/
#ifndef InstallLinkKitSubdirs
#define InstallLinkKitSubdirs(dirs)
#endif
/*
* CleanSubdirs - generate rules to recursively clean out garbage files.
*/
#define BootstrapCleanSubdirs /**/ /* used at top-level */
#ifndef NamedCleanSubdirs
#define NamedCleanSubdirs(name,dirs) \
NamedTargetSubdirs(name,dirs,"cleaning",BootstrapCleanSubdirs,clean)
#endif /* NamedCleanSubdirs */
#ifndef CleanSubdirs
#define CleanSubdirs(dirs) \
NamedCleanSubdirs(clean,dirs)
#endif
/*
* TagSubdirs - generate rules to recursively create tags files.
*/
#ifndef NamedTagSubdirs
#define NamedTagSubdirs(name,dirs) \
NamedTargetSubdirs(name,dirs,"tagging",TAGS='$(TAGS)',tags)
#endif /* TagSubdirs */
#ifndef TagSubdirs
#define TagSubdirs(dirs) \
NamedTagSubdirs(tags,dirs)
#endif
/*
* MakeLintSubdirs - generate rules to recursively lint directories as part
* of the named step.
*/
#ifndef MakeLintSubdirs
#define MakeLintSubdirs(dirs,target,subtarget) \
NamedTargetSubdirs(target,dirs,"linting" for target and subtarget,DESTDIR=$(DESTDIR) LINTOPTS='$(LINTOPTS)',subtarget)
#endif /* MakeLintSubdirs */
/*
* LintSubdirs - generate rules to recursively lint directories as part of
* the make lint step.
*/
#ifndef LintSubdirs
#define LintSubdirs(dirs) @@\
MakeLintSubdirs(dirs,lint,lint)
#endif /* LintSubdirs */
/*
* MakeLintLibSubdirs - generate rules to recursively create lint libraries.
*/
#ifndef MakeLintLibSubdirs
#define MakeLintLibSubdirs(dirs) @@\
MakeLintSubdirs(dirs,lintlib,lintlib)
#endif /* MakeLintLibSubdirs */
/*
* MakeMakeSubdirs - generate rules to recursively recreate Makefiles as part
* of the specified step in the build. If $(TOP) is set to an absolute path,
* do not prepend the ../ prefix. This makes running things outside of the
* source tree much easier.
* $(ONESUBDIR)/Makefile exists as a separate, explicit target so that
* clearmake will know what its goal is and do wink-in.
*/
#ifndef MakeMakeSubdirs
#define MakeMakeSubdirs(dirs,target) @@\
$(ONESUBDIR)/Makefile: @@\
@MakeFlagsToShellFlags(n,executeit="no"); \ @@\
cd $(ONESUBDIR) && \ @@\
if [ "$$executeit" != "no" ]; then \ @@\
ImakeSubCmdHelper -DTOPDIR=$(IMAKETOP) -DCURDIR=$(ONECURDIR)$(ONESUBDIR); \ @@\
fi; @@\
@@\
target:: @@\
-@MakeFlagsToShellFlags(ik,set +e); \ @@\
MakeFlagsToShellFlags(n,executeit="no"); \ @@\
for i in dirs ;\ @@\
do \ @@\
case "$(CURRENT_DIR)" in \ @@\
.) curdir= ;; \ @@\
*) curdir=$(CURRENT_DIR)/ ;; \ @@\
esac; \ @@\
echo "making Makefiles in $$curdir$$i..."; \ @@\
itmp=`echo $$i | sed -e 's;^\./;;g' -e 's;/\./;/;g'`; \ @@\
curtmp="$(CURRENT_DIR)" \ @@\
toptmp=""; \ @@\
case "$$itmp" in \ @@\
../?*) \ @@\
while echo "$$itmp" | grep '^\.\./' > /dev/null;\ @@\
do \ @@\
toptmp="/`basename $$curtmp`$$toptmp"; \ @@\
curtmp="`dirname $$curtmp`"; \ @@\
itmp="`echo $$itmp | sed 's;\.\./;;'`"; \ @@\
done \ @@\
;; \ @@\
esac; \ @@\
case "$$itmp" in \ @@\
*/?*/?*/?*/?*) newtop=../../../../..;; \ @@\
*/?*/?*/?*) newtop=../../../..;; \ @@\
*/?*/?*) newtop=../../..;; \ @@\
*/?*) newtop=../..;; \ @@\
*) newtop=..;; \ @@\
esac; \ @@\
newtop="$$newtop$$toptmp"; \ @@\
case "$(TOP)" in \ @@\
/?*) imaketop=$(TOP) \ @@\
imakeprefix= ;; \ @@\
.) imaketop=$$newtop \ @@\
imakeprefix=$$newtop/ ;; \ @@\
*) imaketop=$$newtop/$(TOP) \ @@\
imakeprefix=$$newtop/ ;; \ @@\
esac; \ @@\
RemoveFile($$i/Makefile.bak); \ @@\
if [ -f $$i/Makefile ]; then \ @@\
echo " $(MV) Makefile Makefile.bak"; \ @@\
if [ "$$executeit" != "no" ]; then \ @@\
$(MV) $$i/Makefile $$i/Makefile.bak; \ @@\
fi; \ @@\
fi; \ @@\
$(MAKE) $(MFLAGS) $(MAKE_OPTS) ONESUBDIR=$$i ONECURDIR=$$curdir IMAKETOP=$$imaketop IMAKEPREFIX=$$imakeprefix $$i/Makefile; \ @@\
if [ -d $$i ] ; then \ @@\
cd $$i; \ @@\
$(MAKE) $(MFLAGS) Makefiles; \ @@\
cd $$newtop; \ @@\
else \ @@\
exit 1; \ @@\
fi; \ @@\
done
#ifdef UseInstalled
#define ImakeSubCmdHelper $(IMAKE_CMD)
#else
#define ImakeSubCmdHelper $(IMAKEPREFIX)$(IMAKE) -I$(IMAKEPREFIX)$(IRULESRC) $(IMAKE_DEFINES)
#endif
#endif /* MakeMakeSubdirs */
/*
* MakefileSubdirs - generate rules to create Makefiles.
*/
#ifndef MakefileSubdirs
#define MakefileSubdirs(dirs) @@\
MakeMakeSubdirs(dirs,Makefiles)
#endif /* MakefileSubdirs */
/*
* Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM
* to cpp, because that trick does not work on all ANSI C preprocessors.
* Also delete line numbers from the cpp output (-P is not portable, I guess).
*/
#ifndef CppSedMagic
#define CppSedMagic sed -e '/^# *[0-9][0-9]* *.*$$/d' -e '/^XCOMM$$/s//#/' -e '/^XCOMM[^a-zA-Z0-9_]/s/^XCOMM/#/'
#endif /* CppSedMagic */
#ifndef CppFileTarget
#define CppFileTarget(dst,src,defs,deplist) @@\
dst:: src deplist @@\
RemoveFile($@) @@\
ClearmakeOSName \
$(CPP) CppNoLineInfoOption defs <src | CppSedMagic >$@ @@\
@@\
clean:: @@\
RemoveFiles(dst)
#endif /* CppFileTarget */
/*
* CppScriptTarget - generate rules to create a shell script by running the
* input through cpp. If the ExecableScripts configuration parameter is not
* set, then make sure that the first line begins with a colon.
*/
#ifndef CppScriptTarget
#if ExecableScripts /* can use #! instead of colon */
#define CppScriptTarget(dst,src,defs,deplist) @@\
dst:: src deplist @@\
RemoveFile($@) @@\
ClearmakeOSName \
$(CPP) CppNoLineInfoOption defs <src | CppSedMagic >$@ @@\
chmod a+x $@ @@\
@@\
clean:: @@\
RemoveFiles(dst)
#else
#define CppScriptTarget(dst,src,defs,deplist) @@\
dst:: src deplist @@\
RemoveFile($@) @@\
ClearmakeOSName \
echo \: >$@ @@\
sed '1d' src | $(CPP) CppNoLineInfoOption defs | CppSedMagic >>$@ @@\
chmod a+x $@ @@\
@@\
clean:: @@\
RemoveFile(dst)
#endif /* ExecableScripts */
#endif /* CppScriptTarget */
/*
* MakeScriptFromCpp - generate rules to create a script from a file with a
* .cpp suffix.
*/
#ifndef MakeScriptFromCpp
#define MakeScriptFromCpp(name,defs) @@\
CppScriptTarget(name,name.cpp,defs,NullParameter)
#endif /* MakeScriptFromCpp */
#ifndef CppSourceFile
#define CppSourceFile(dst,src,defs,deplist) @@\
CppFileTarget(dst,src,defs,deplist) @@\
@@\
includes:: dst @@\
@@\
depend:: dst
#endif /* CppFileTarget */
/*
* MakeDirectories - generate rules to create a hierarchy of directories.
*/
#ifndef MakeDirectories
#define MakeDirectories(step,dirs) @@\
step:: @@\
DirFailPrefix@MakeFlagsToShellFlags(i,set +e); \ @@\
for i in dirs; do if [ -d $(DESTDIR)$$i ]; then \ @@\
set +x; else (set -x; $(MKDIRHIER) $(DESTDIR)$$i); fi; \ @@\
done
#endif /* MakeDirectories */
/*
* AllTarget - generate rules to build necessary things during make all.
*/
#ifndef AllTarget
#define AllTarget(depends) @@\
all:: depends
#endif /* AllTarget */
#ifdef DefineOldLibraryRules
#include <oldlib.rules>
#endif
#ifndef StaticLibrary
#define StaticLibrary(libpath,libname) Concat3(libpath,/,LibraryTargetName(libname))
#endif
/*
* MakeMutex - generate mutex rules for parallel make
*/
#ifndef MakeMutex
#ifdef MutexDirective
#define MakeMutex(targets) @@\
MutexDirective: targets
#endif /* MutexDirective */
#endif /* MakeMutex */