111d341caSmrgXCOMM ---------------------------------------------------------------------
211d341caSmrgXCOMM Imake rules for building libraries, programs, scripts, and data files
311d341caSmrgXCOMM rules:  $Xorg: Imake.rules,v 1.3 2000/08/17 19:41:46 cpqbld Exp $
44c61c93dSmrgXCOMM rules:  $XdotOrg: xc/config/cf/Imake.rules,v 1.8 2005/02/01 22:27:00 ajax Exp $
511d341caSmrgXCOMM
611d341caSmrgXCOMM
711d341caSmrgXCOMM
811d341caSmrgXCOMM
911d341caSmrgXCOMM rules:  $XFree86: xc/config/cf/Imake.rules,v 3.128 2003/11/15 03:25:17 dawes Exp $
1011d341caSmrg
1111d341caSmrg/*
1211d341caSmrg *		   MACHINE-INDEPENDENT RULES; DO NOT MODIFY
1311d341caSmrg *
1411d341caSmrg * Warning, when defining rules: make sure you do not include both a trailing
1511d341caSmrg * backslash and double ampersand backslash or else you will get an extra
1611d341caSmrg * backslash in the Makefile.
1711d341caSmrg *
1811d341caSmrg * The following macros are defined for the various templates and Imakefiles
1911d341caSmrg * (for a list of the applicable make variables, see the template files):
2011d341caSmrg *
2111d341caSmrg * Concat			(a,b)
2211d341caSmrg * Concat3			(a,b,c)
2311d341caSmrg * Concat4			(a,b,c,d)
2411d341caSmrg * _Use				(a,b)
2511d341caSmrg * _UseCat			(a,b,c)
2611d341caSmrg * _MUse			(a,b)
2711d341caSmrg * _MUseCat			(a,b,c)
2811d341caSmrg * ProgramTargetName		(target)
2911d341caSmrg * HostProgramTargetName	(target)
3011d341caSmrg * RunProgram			(progvar,options)
3111d341caSmrg * RunProgramWithSetup		(setup,progvar,options)
3211d341caSmrg * RemoveFile			(file)
3311d341caSmrg * RemoveFiles			(files)
3411d341caSmrg * CenterLoadTarget		(target,srclist,libs,defines)
3511d341caSmrg * CenterProgramTarget		(program,srclist,objlist,locallibs,syslibs)
3611d341caSmrg * SentinelLinkTarget		(step,program,linklist)
3711d341caSmrg * SentinelProgramTarget	(program,deplist,linklist)
3811d341caSmrg * SentinelCplusplusProgramTarget	(program,deplist,linklist)
3911d341caSmrg * PurifyLinkTarget		(step,program,linklist)
4011d341caSmrg * PurifyProgramTarget		(program,deplist,linklist)
4111d341caSmrg * PurifyCplusplusProgramTarget	(program,deplist,linklist)
4211d341caSmrg * ProofLinkTarget		(step,program,linklist)
4311d341caSmrg * ProofProgramTarget		(program,deplist,linklist)
4411d341caSmrg * ProofCplusplusProgramTarget	(program,deplist,linklist)
4511d341caSmrg * ProofCleanTarget		()
4611d341caSmrg * RemoveTargetProgram		(program)
4711d341caSmrg * MakeDir			(dir)
4811d341caSmrg * InstallDirectory		(dir)
4911d341caSmrg * BuildIncludesTop		(srclist)
5011d341caSmrg * BuildIncludes		(srclist,dstsubdir,dstupdir)
5111d341caSmrg * LinkRule			(program,options,objects,libraries)
5211d341caSmrg * HostLinkRule			(program,options,objects,libraries)
5311d341caSmrg * NoCmpScript			(target)
5411d341caSmrg * NoConfigRec			(target)
5511d341caSmrg * NormalProgramTarget		(program,objects,deplibs,locallibs,syslibs)
5611d341caSmrg * SetUIDProgramTarget		(program,objects,deplibs,locallibs,syslibs)
5711d341caSmrg * SingleProgramTarget		(program,objects,locallibs,syslibs)
5811d341caSmrg * SimpleProgramTarget		(program)
5911d341caSmrg * ComplexProgramTarget		(program)
6011d341caSmrg * ComplexProgramTarget_1	(program,locallib,syslib)
6111d341caSmrg * ComplexProgramTarget_2	(program,locallib,syslib)
6211d341caSmrg * ComplexProgramTarget_3	(program,locallib,syslib)
6311d341caSmrg * ServerTargetWithFlags	(server,subdirs,objects,libs,syslibs,flags)
6411d341caSmrg * ServerTarget			(server,subdirs,objects,libs,syslibs)
6511d341caSmrg * MoveToBakFile		(file)
6611d341caSmrg * RMoveToBakFile		(file)
6711d341caSmrg * RanLibrary			(args)
6811d341caSmrg * LibraryTargetName		(libname)
6911d341caSmrg * LibraryTargetNameSuffix	(libname,suffix)
7011d341caSmrg * InstallNamedTarget		(step,srcname,flags,dest,dstname)
7111d341caSmrg * InstallTarget		(step,file,flags,dest)
7211d341caSmrg * InstallLibrary		(libname,dest)
7311d341caSmrg * MergeIntoInstalledLibrary	(tolib,fromlib)
7411d341caSmrg * InstallLibraryAlias		(libname,alias,dest)
7511d341caSmrg * InstallLintLibrary		(libname,dest)
7611d341caSmrg * InstallManPageLong		(file,destdir,dest)
7711d341caSmrg * InstallManPage		(file,destdir)
7811d341caSmrg * InstallManPageAliases	(file,destdir,aliases)
7911d341caSmrg * ManKeywordsTarget		(manpath)
8011d341caSmrg * InstallNamedNonExec		(srcname,dstname,dest)
8111d341caSmrg * InstallNonExecFile		(file,dest)
8211d341caSmrg * InstallNonExecFileNoClobber	(file,dest)
8311d341caSmrg * InstallNonExec		(file,dest)
8411d341caSmrg * InstallProgramWithFlags	(program,dest,flags)
8511d341caSmrg * InstallProgram		(program,dest)
8611d341caSmrg * InstallScript		(program,dest)
8711d341caSmrg * InstallNamedProg		(srcname,dstname,dest)
8811d341caSmrg * InstallNamedProgNoClobber	(srcname,dstname,dest)
8911d341caSmrg * MakeFlagsToShellFlags	(makeflags,shellcmd)
9011d341caSmrg * MakeNamedTargetSubdir	(dir,flags,subname)
9111d341caSmrg * LinkConfDirectoryLong	(mdir,cdir,rdir,ldir,opath,npath)
9211d341caSmrg * LinkConfDirectory		(mdir,cdir,rdir,ldir)
9311d341caSmrg * LinkConfFileLong		(cfile,lfile,opath,npath)
9411d341caSmrg * LinkConfFile			(cfile,lfile)
9511d341caSmrg * LinkFileList			(step,list,dir,sub)
9611d341caSmrg * LinkVarDirectory		(mdir,cdir,rdir,ldir)
9711d341caSmrg * InstallMultipleDestFlags	(step,list,dest,flags)
9811d341caSmrg * InstallMultipleDest		(step,list,dest)
9911d341caSmrg * InstallMultiple		(list,dest)
10011d341caSmrg * InstallMultipleFlags		(list,dest,flags)
10111d341caSmrg * InstallMultipleMan		(list,dest)
10211d341caSmrg * InstallMultipleManSuffix	(list,dest,suffix)
10311d341caSmrg * DependDependency		()
10411d341caSmrg * DependTarget			()
10511d341caSmrg * DependTarget3		(srcs1,srcs2,srcs3)
10611d341caSmrg * CleanTarget			()
10711d341caSmrg * TagsTarget			()
10811d341caSmrg * ImakeDependency		(target)
10911d341caSmrg * BuildMakefileTarget		(notused,imakeflags)
11011d341caSmrg * MakefileTarget		()
11111d341caSmrg * LibMkdir			(dir)
11211d341caSmrg * LibCleanDir			(dir)
11311d341caSmrg * LintLibReferences		(varname,libname,libsource)
11411d341caSmrg * UnsharedLibReferences	(varname,libname,libsource)
11511d341caSmrg * ProjectUnsharedLibReferences	(varname,libname,libsource,buildlibdir)
11611d341caSmrg * SharedLibDependencies	(libname,libsource,revname)
11711d341caSmrg * SharedDSLibDependencies	(libname,libsource,revname)
11811d341caSmrg * SharedLibReferences		(varname,libname,libsource,revname,rev)
11911d341caSmrg * SharedDSLibReferences	(varname,libname,libsource,revname,rev)
12011d341caSmrg * ObjectCompile		(options)
12111d341caSmrg * NormalLibObjCompile		(options)
12211d341caSmrg * NormalSharedLibObjCompile	(options)
12311d341caSmrg * NormalRelocLibObjCompile	(options)
12411d341caSmrg * LibObjCompile		(dir,options)
12511d341caSmrg * DebuggedLibObjCompile	(options)
12611d341caSmrg * ProfiledLibObjCompile	(options)
12711d341caSmrg * SharedLibObjCompile		(options)
12811d341caSmrg * NormalLibraryObjectRule	()
12911d341caSmrg * NormalFortranObjectRule	()
13011d341caSmrg * ObjectFromSpecialSource	(dst,src,flags)
13111d341caSmrg * SpecialObjectRule		(objs,depends,options)
13211d341caSmrg * SpecialCObjectRule		(basename,depends,options)
13311d341caSmrg * LexFile			(file)
13411d341caSmrg * M4File			(file,includes)
13511d341caSmrg * YaccFile			(file,flags)
13611d341caSmrg * YaccFileNoFlags		(file)
13711d341caSmrg * MakeLibrary			(libname,objlist)
13811d341caSmrg * LinkBuildLibrary		(lib)
13911d341caSmrg * LinkBuildSonameLibrary	(lib)
14011d341caSmrg * NormalLibraryTarget		(libname,objlist)
14111d341caSmrg * NormalLibraryTarget2		(libname,objlist1,objlist2)
14211d341caSmrg * NormalLibraryTarget3		(libname,objlist1,objlist2,objlist3)
14311d341caSmrg * NormalDepLibraryTarget	(libname,deplist,objlist)
14411d341caSmrg * UnsharedLibraryTarget	(libname,objlist,down,up)
14511d341caSmrg * UnsharedLibraryTarget3	(libname,objlist1,objlist2,objlist3,down,up)
14611d341caSmrg * SubdirLibraryRule		(objlist)
14711d341caSmrg * ProfiledLibraryTarget	(libname,objlist)
14811d341caSmrg * DebuggedLibraryTarget	(libname,objlist)
14911d341caSmrg * AliasedLibraryTarget		(libname,alias)
15011d341caSmrg * NormalRelocatableTarget	(objname,objlist)
15111d341caSmrg * ProfiledRelocatableTarget	(objname,objlist)
15211d341caSmrg * DebuggedRelocatableTarget	(objname,objlist)
15311d341caSmrg * LintLibraryTarget		(libname,srclist)
15411d341caSmrg * NormalLintTarget		(srclist)
15511d341caSmrg * LintTarget			()
15611d341caSmrg * LinkSourceFile		(src,dir)
15711d341caSmrg * LinkFile			(tofile,fromfile)
15811d341caSmrg * MakeSubincludesForBuild	(step,dir,srclist)
15911d341caSmrg * LangNamedTargetSubdirs	(lang,name,dirs,verb,flags,subname)
16011d341caSmrg * LangNamedMakeSubdirs		(lang,name,dirs)
16111d341caSmrg * LangMakeSubdirs		(lang,dirs)
16211d341caSmrg * NamedTargetSubdirs		(name,dirs,verb,flags,subname)
16311d341caSmrg * NamedMakeSubdirs		(name,dirs)
16411d341caSmrg * MakeSubdirs			(dirs)
16511d341caSmrg * DependSubdirs		(dirs)
16611d341caSmrg * ForceSubdirs			(dirs)
16711d341caSmrg * InstallSubdirs		(dirs)
16811d341caSmrg * InstallManSubdirs		(dirs)
16911d341caSmrg * IncludesSubdirs		(dirs)
17011d341caSmrg * NamedCleanSubdirs		(name,dirs)
17111d341caSmrg * CleanSubdirs			(dirs)
17211d341caSmrg * NamedTagSubdirs		(name,dirs)
17311d341caSmrg * TagSubdirs			(dirs)
17411d341caSmrg * MakeLintSubdirs		(dirs,target,subtarget)
17511d341caSmrg * LintSubdirs			(dirs)
17611d341caSmrg * MakeLintLibSubdirs		(dirs)
17711d341caSmrg * MakeMakeSubdirs		(dirs,target)
17811d341caSmrg * MakefileSubdirs		(dirs)
17911d341caSmrg * CppScriptTarget		(dst,src,defs,deplist)
18011d341caSmrg * MakeScriptFromCpp		(name,defs)
18111d341caSmrg * CppFileTarget		(dst,src,defs,deplist)
18211d341caSmrg * CppSourceFile		(dst,src,defs,deplist)
18311d341caSmrg * MakeDirectories		(step,dirs)
18411d341caSmrg * AllTarget			(depends)
18511d341caSmrg * StaticLibrary		(libpath,libname)
18611d341caSmrg * MakeMutex			(targets)
18711d341caSmrg * LinkBuildModule		(module,subdir)
18811d341caSmrg * LinkBuildNamedModule		(module,name,subdir)
18911d341caSmrg * DynamicModuleTarget		(module,modlist)
19011d341caSmrg * InstallDynamicModule		(module,dest,subdir)
19111d341caSmrg * InstallDynamicNamedModule	(module,instname,dest,subdir)
19211d341caSmrg * LinkerRuntimeLibraryPathFlag	(path)
19311d341caSmrg *
19411d341caSmrg *
19511d341caSmrg * The following are in specific <os>Lib.rules:
19611d341caSmrg *
19711d341caSmrg * SharedLibraryTarget		(libname,rev,solist,down,up)
19811d341caSmrg * SharedLibraryDataTarget	(libname,rev,salist)
19911d341caSmrg * InstallSharedLibrary		(libname,rev,dest)
20011d341caSmrg * InstallSharedLibraryData	(libname,rev,dest)
20111d341caSmrg * SharedDepModuleTarget	(name,deps,solist)
20211d341caSmrg *
20311d341caSmrg */
20411d341caSmrg
20511d341caSmrg#define NullParameter
20611d341caSmrg
20711d341caSmrg/* if [ -d ] or [ ! -d ] causes make to fail, define this as - */
20811d341caSmrg#ifndef DirFailPrefix
20911d341caSmrg#define DirFailPrefix
21011d341caSmrg#endif
21111d341caSmrg
21211d341caSmrg/*
21311d341caSmrg * NoCmpScript - suppress clearmake build script comparison.
21411d341caSmrg */
21511d341caSmrg#ifndef NoCmpScript
21611d341caSmrg#if HasClearmake
21711d341caSmrg#define NoCmpScript(targ)						@@\
21811d341caSmrgXCOMM special target for clearmake					@@\
21911d341caSmrg.NO_CMP_SCRIPT: targ
22011d341caSmrg#else
22111d341caSmrg#define NoCmpScript(targ) /**/
22211d341caSmrg#endif
22311d341caSmrg#endif
22411d341caSmrg
22511d341caSmrg/*
22611d341caSmrg * NoConfigRec - suppress using clearmake configuration records.
22711d341caSmrg */
22811d341caSmrg#ifndef NoConfigRec
22911d341caSmrg#if HasClearmake
23011d341caSmrg#define NoConfigRec(targ)						@@\
23111d341caSmrgXCOMM special target for clearmake					@@\
23211d341caSmrg.NO_CONFIG_REC: targ
23311d341caSmrg#else
23411d341caSmrg#define NoConfigRec(targ) /**/
23511d341caSmrg#endif
23611d341caSmrg#endif
23711d341caSmrg
23811d341caSmrg/*
23911d341caSmrg * Concat - concatenates two strings.
24011d341caSmrg */
24111d341caSmrg#ifndef Concat
24211d341caSmrg#if (defined(__STDC__) && !defined(UnixCpp)) || defined(AnsiCpp)
24311d341caSmrg#define Concat(a,b)a##b
24411d341caSmrg#else
24511d341caSmrg#define Concat(a,b)a/**/b
24611d341caSmrg#endif
24711d341caSmrg#endif
24811d341caSmrg
24911d341caSmrg/*
25011d341caSmrg * Concat3 - concatenates three strings.
25111d341caSmrg */
25211d341caSmrg#ifndef Concat3
25311d341caSmrg#if (defined(__STDC__) && !defined(UnixCpp)) || defined(AnsiCpp)
25411d341caSmrg#define Concat3(a,b,c)a##b##c
25511d341caSmrg#else
25611d341caSmrg#define Concat3(a,b,c)a/**/b/**/c
25711d341caSmrg#endif
25811d341caSmrg#endif
25911d341caSmrg
26011d341caSmrg/*
26111d341caSmrg * Concat4 - concatenates four strings.
26211d341caSmrg */
26311d341caSmrg#ifndef Concat4
26411d341caSmrg#if (defined(__STDC__) && !defined(UnixCpp)) || defined(AnsiCpp)
26511d341caSmrg#define Concat4(a,b,c,d)a##b##c##d
26611d341caSmrg#else
26711d341caSmrg#define Concat4(a,b,c,d)a/**/b/**/c/**/d
26811d341caSmrg#endif
26911d341caSmrg#endif
27011d341caSmrg
27111d341caSmrg/*
27211d341caSmrg * _XUse - makes a choice based on UseInstalledX11.
27311d341caSmrg */
27411d341caSmrg#ifndef _XUse
27511d341caSmrg# if defined(UseInstalled) || UseInstalledX11
27611d341caSmrg#  define _XUse(a,b) a
27711d341caSmrg# else
27811d341caSmrg#  define _XUse(a,b) b
27911d341caSmrg# endif
28011d341caSmrg#endif /* _XUse */
28111d341caSmrg
28211d341caSmrg/*
28311d341caSmrg * _Use - makes a choice based on UseInstalled.
28411d341caSmrg */
28511d341caSmrg#ifndef _Use
28611d341caSmrg# define _Use	_XUse
28711d341caSmrg#endif /* _Use */
28811d341caSmrg
28911d341caSmrg/*
29011d341caSmrg * _XUseCat - combination of _XUse and Concat.
29111d341caSmrg *           exists to avoid problems with some preprocessors
29211d341caSmrg */
29311d341caSmrg#ifndef _XUseCat
29411d341caSmrg# if (defined(__STDC__) && !defined(UnixCpp)) || defined(AnsiCpp)
29511d341caSmrg#  if defined(UseInstalled) || UseInstalledX11
29611d341caSmrg#   define _XUseCat(a,b,c) a##c
29711d341caSmrg#  else
29811d341caSmrg#   define _XUseCat(a,b,c) b##c
29911d341caSmrg#  endif
30011d341caSmrg# else
30111d341caSmrg#  if defined(UseInstalled) || UseInstalledX11
30211d341caSmrg#   define _XUseCat(a,b,c) a/**/c
30311d341caSmrg#  else
30411d341caSmrg#   define _XUseCat(a,b,c) b/**/c
30511d341caSmrg#  endif
30611d341caSmrg# endif
30711d341caSmrg#endif /* _XUseCat */
30811d341caSmrg
30911d341caSmrg/*
31011d341caSmrg * _UseCat - combination of _Use and Concat.
31111d341caSmrg *           exists to avoid problems with some preprocessors
31211d341caSmrg */
31311d341caSmrg#ifndef _UseCat
31411d341caSmrg# define _UseCat	_XUseCat
31511d341caSmrg#endif /* _UseCat */
31611d341caSmrg
31711d341caSmrg#ifndef ProgramTargetName
31811d341caSmrg#define ProgramTargetName(target)target
31911d341caSmrg#endif
32011d341caSmrg
32111d341caSmrg#ifndef HostProgramTargetName
32211d341caSmrg#define HostProgramTargetName(target)target
32311d341caSmrg#endif
32411d341caSmrg
32511d341caSmrg#ifndef RunProgram
32611d341caSmrg#define RunProgram(progvar,options) $(progvar) options
32711d341caSmrg#endif
32811d341caSmrg
32911d341caSmrg#ifndef RunProgramWithSetup
33011d341caSmrg#define RunProgramWithSetup(setup,progvar,options) setup $(progvar) options
33111d341caSmrg#endif
33211d341caSmrg
33311d341caSmrg#ifndef RunPerlScript
33411d341caSmrg#define RunPerlScript(script,options) $(PERLENVSETUP) $(PERL) $(PERLOPTS) script options
33511d341caSmrg#endif
33611d341caSmrg
33711d341caSmrg#ifndef RemoveFile
33811d341caSmrg#define RemoveFile(file) $(RM) file
33911d341caSmrg#endif /* RemoveFile */
34011d341caSmrg
34111d341caSmrg#ifndef RemoveFiles
34211d341caSmrg#define RemoveFiles(files) $(RM) files
34311d341caSmrg#endif /* RemoveFiles */
34411d341caSmrg
34511d341caSmrg#if RemoveObsoleteFiles
34611d341caSmrg#define RemoveOldFile(new,old,dir)					@@\
34711d341caSmrg	@if [ -f new ]; then set -x; \					@@\
34811d341caSmrg		RemoveFile($(DESTDIR)dir/old); \			@@\
34911d341caSmrg	fi
35011d341caSmrg#else
35111d341caSmrg#define RemoveOldFile(new,old,dir) $(_NULLCMD_)
35211d341caSmrg#endif
35311d341caSmrg
35411d341caSmrg/*
35511d341caSmrg * CenterLoadTarget - generate rules to load files into CodeCenter
35611d341caSmrg */
35711d341caSmrg#ifndef CenterLoadTarget
35811d341caSmrg#if HasCodeCenter
35911d341caSmrg#define CenterLoadTarget(target,srclist,libs,defines)			@@\
36011d341caSmrgProgramTargetName(target):: srclist					@@\
36111d341caSmrg	XCOMM load defines srclist libs
36211d341caSmrg#else
36311d341caSmrg#define CenterLoadTarget(target,srclist,libs,defines) /**/
36411d341caSmrg#endif
36511d341caSmrg#endif /* CenterLoadTarget */
36611d341caSmrg
36711d341caSmrg/*
36811d341caSmrg * CenterProgramTarget - generate rules to make CodeCenter read in sources
36911d341caSmrg * and objects.
37011d341caSmrg */
37111d341caSmrg#ifndef CenterProgramTarget
37211d341caSmrg#define CenterProgramTarget(program,srclist,objlist,locallibs,syslibs)	@@\
37311d341caSmrgCenterLoadTarget(Concat(debug_,program),srclist,$(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS) $(LDPRELIBS) locallibs $(LDLIBS) syslibs,$(ALLDEFINES)) @@\
37411d341caSmrg									@@\
37511d341caSmrgCenterLoadTarget(Concat(odebug_,program),objlist,$(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS) $(LDPRELIBS) locallibs $(LDLIBS) syslibs,$(ALLDEFINES))
37611d341caSmrg#endif /* CenterProgramTarget */
37711d341caSmrg
37811d341caSmrg#ifndef SentinelLinkTarget
37911d341caSmrg#if HasSentinel
38011d341caSmrg#define SentinelLinkTarget(step,program,linklist)			@@\
38111d341caSmrgProgramTargetName(step.sentinel):					@@\
38211d341caSmrg	RemoveTargetProgram($@)						@@\
38311d341caSmrg	$(CCENVSETUP) $(SENTINEL) $(SENTINELOPTIONS) $(CC) -o program.sentinel $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS)
38411d341caSmrg#else
38511d341caSmrg#define SentinelLinkTarget(step,program,linklist) /**/
38611d341caSmrg#endif
38711d341caSmrg#endif /* SentinelLinkTarget */
38811d341caSmrg
38911d341caSmrg/*
39011d341caSmrg * SentinelProgramTarget - generate rules to make Sentinel image
39111d341caSmrg */
39211d341caSmrg#ifndef SentinelProgramTarget
39311d341caSmrg#if HasSentinel
39411d341caSmrg#define	SentinelProgramTarget(program,deplist,linklist)			@@\
39511d341caSmrgProgramTargetName(program.sentinel): deplist				@@\
39611d341caSmrg	RemoveTargetProgram($@)						@@\
39711d341caSmrg	$(CCENVSETUP) $(SENTINEL) $(SENTINELOPTIONS) $(CC) -o $@ $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
39811d341caSmrg									@@\
39911d341caSmrgclean clean.sentinel::							@@\
40011d341caSmrg	RemoveFile(program.sentinel)
40111d341caSmrg#else
40211d341caSmrg#define	SentinelProgramTarget(program,deplist,linklist) /**/
40311d341caSmrg#endif
40411d341caSmrg#endif /* SentinelProgramTarget */
40511d341caSmrg
40611d341caSmrg/*
40711d341caSmrg * SentinelCplusplusProgramTarget - generate rules to make Sentinel image
40811d341caSmrg */
40911d341caSmrg#ifndef SentinelCplusplusProgramTarget
41011d341caSmrg#if HasSentinel
41111d341caSmrg#define	SentinelCplusplusProgramTarget(program,deplist,linklist)	@@\
41211d341caSmrgProgramTargetName(program.sentinel): deplist				@@\
41311d341caSmrg	RemoveTargetProgram($@)						@@\
41411d341caSmrg	$(CXXENVSETUP) $(SENTINEL) $(SENTINELOPTIONS) $(CXX) -o $@ $(CXXLDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
41511d341caSmrg									@@\
41611d341caSmrgclean clean.sentinel::							@@\
41711d341caSmrg	RemoveFile(program.sentinel)
41811d341caSmrg#else
41911d341caSmrg#define	SentinelCplusplusProgramTarget(program,deplist,linklist) /**/
42011d341caSmrg#endif
42111d341caSmrg#endif /* SentinelCplusplusProgramTarget */
42211d341caSmrg
42311d341caSmrg#ifndef PurifyLinkTarget
42411d341caSmrg#if HasPurify
42511d341caSmrg#define PurifyLinkTarget(step,program,linklist)				@@\
42611d341caSmrgProgramTargetName(step.pure):						@@\
42711d341caSmrg	RemoveTargetProgram($@)						@@\
42811d341caSmrg	$(CCENVSETUP) $(PURIFY) $(PURIFYOPTIONS) $(CC) -o program.pure $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS)
42911d341caSmrg#else
43011d341caSmrg#define PurifyLinkTarget(step,program,linklist) /**/
43111d341caSmrg#endif
43211d341caSmrg#endif /* PurifyLinkTarget */
43311d341caSmrg
43411d341caSmrg/*
43511d341caSmrg * PurifyProgramTarget - generate rules to make Purify'ed image
43611d341caSmrg */
43711d341caSmrg#ifndef PurifyProgramTarget
43811d341caSmrg#if HasPurify
43911d341caSmrg#define	PurifyProgramTarget(program,deplist,linklist)			@@\
44011d341caSmrgProgramTargetName(program.pure): deplist				@@\
44111d341caSmrg	RemoveTargetProgram($@)						@@\
44211d341caSmrg	$(CCENVSETUP) $(PURIFY) $(PURIFYOPTIONS) $(CC) -o $@ $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
44311d341caSmrg									@@\
44411d341caSmrgclean clean.pure::							@@\
44511d341caSmrg	RemoveFile(program.pure)
44611d341caSmrg#else
44711d341caSmrg#define	PurifyProgramTarget(program,deplist,linklist) /**/
44811d341caSmrg#endif
44911d341caSmrg#endif /* PurifyProgramTarget */
45011d341caSmrg
45111d341caSmrg/*
45211d341caSmrg * PurifyCplusplusProgramTarget - generate rules to make Purify'ed image
45311d341caSmrg */
45411d341caSmrg#ifndef PurifyCplusplusProgramTarget
45511d341caSmrg#if HasPurify
45611d341caSmrg#define	PurifyCplusplusProgramTarget(program,deplist,linklist)		@@\
45711d341caSmrgProgramTargetName(program.pure): deplist				@@\
45811d341caSmrg	RemoveTargetProgram($@)						@@\
45911d341caSmrg	$(CXXENVSETUP) $(PURIFY) $(PURIFYOPTIONS) $(CXX) -o $@ $(CXXLDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
46011d341caSmrg									@@\
46111d341caSmrgclean clean.pure::							@@\
46211d341caSmrg	RemoveFile(program.pure)
46311d341caSmrg#else
46411d341caSmrg#define	PurifyCplusplusProgramTarget(program,deplist,linklist) /**/
46511d341caSmrg#endif
46611d341caSmrg#endif /* PurifyCplusplusProgramTarget */
46711d341caSmrg
46811d341caSmrg#ifndef ProofLinkTarget
46911d341caSmrg#if HasTestCenter
47011d341caSmrg#define ProofLinkTarget(step,program,linklist)				@@\
47111d341caSmrgProgramTargetName(step.tc):						@@\
47211d341caSmrg	RemoveTargetProgram($@)						@@\
47311d341caSmrg	$(CCENVSETUP) $(PROOF) $(PROOFOPTIONS) $(CC) -o program.tc $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS)
47411d341caSmrg#else
47511d341caSmrg#define ProofLinkTarget(step,program,linklist) /**/
47611d341caSmrg#endif
47711d341caSmrg#endif /* ProofLinkTarget */
47811d341caSmrg
47911d341caSmrg/*
48011d341caSmrg * ProofProgramTarget - generate rules to make Proof'ed image
48111d341caSmrg */
48211d341caSmrg#ifndef ProofProgramTarget
48311d341caSmrg#if HasTestCenter
48411d341caSmrg#define	ProofProgramTarget(program,deplist,linklist)			@@\
48511d341caSmrgProgramTargetName(program.tc): deplist					@@\
48611d341caSmrg	RemoveTargetProgram($@)						@@\
48711d341caSmrg	$(CCENVSETUP) $(PROOF) $(PROOFOPTIONS) $(CC) -o $@ $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
48811d341caSmrg									@@\
48911d341caSmrgclean cleantc::								@@\
49011d341caSmrg	RemoveFiles(program.tc program.tc.*.*)
49111d341caSmrg#else
49211d341caSmrg#define	ProofProgramTarget(program,deplist,linklist) /**/
49311d341caSmrg#endif
49411d341caSmrg#endif /* ProofProgramTarget */
49511d341caSmrg
49611d341caSmrg/*
49711d341caSmrg * ProofCplusplusProgramTarget - generate rules to make Proof'ed image
49811d341caSmrg */
49911d341caSmrg#ifndef ProofCplusplusProgramTarget
50011d341caSmrg#if HasTestCenter
50111d341caSmrg#define	ProofCplusplusProgramTarget(program,deplist,linklist)		@@\
50211d341caSmrgProgramTargetName(program.tc): deplist					@@\
50311d341caSmrg	RemoveTargetProgram($@)						@@\
50411d341caSmrg	$(CXXENVSETUP) $(PROOF) $(PROOFOPTIONS) $(CXX) -o $@ $(CXXLDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
50511d341caSmrg									@@\
50611d341caSmrgclean cleantc::								@@\
50711d341caSmrg	RemoveFiles(program.tc program.tc.*.*)
50811d341caSmrg#else
50911d341caSmrg#define	ProofCplusplusProgramTarget(program,deplist,linklist) /**/
51011d341caSmrg#endif
51111d341caSmrg#endif /* ProofCplusplusProgramTarget */
51211d341caSmrg
51311d341caSmrg#ifndef ProofCleanTarget
51411d341caSmrg#if HasTestCenter
51511d341caSmrg#define ProofCleanTarget()						@@\
51611d341caSmrgclean cleantc::								@@\
51711d341caSmrg	$(RM) -r TC.Cache
51811d341caSmrg#else
51911d341caSmrg#define ProofCleanTarget() /**/
52011d341caSmrg#endif
52111d341caSmrg#endif /* ProofCleanTarget */
52211d341caSmrg
52311d341caSmrg#ifndef RemoveTargetProgram
52411d341caSmrg#if RemoveTargetProgramByMoving
52511d341caSmrg#define RemoveTargetProgram(program) \
52611d341caSmrg-if [ -f program ]; then RemoveFile(Concat(program,~)); $(MV) program Concat(program,~); fi
52711d341caSmrg#else
52811d341caSmrg#define RemoveTargetProgram(program) RemoveFile(program)
52911d341caSmrg#endif
53011d341caSmrg#endif /* RemoveTargetProgram */
53111d341caSmrg
53211d341caSmrg#ifndef MakeDir
53311d341caSmrg#define MakeDir(dir) DirFailPrefix@if [ -d dir ]; then \		@@\
53411d341caSmrg		set +x; \						@@\
53511d341caSmrg	else \								@@\
53611d341caSmrg		if [ -h dir ]; then \					@@\
53711d341caSmrg			(set -x; rm -f dir); \				@@\
53811d341caSmrg		fi; \							@@\
53911d341caSmrg		(set -x; $(MKDIRHIER) dir); \				@@\
54011d341caSmrg	fi
54111d341caSmrg#endif /* MakeDir */
54211d341caSmrg
54311d341caSmrg#ifndef MakeDirInline
54411d341caSmrg#define MakeDirInline(dir) if [ -d dir ]; then \			@@\
54511d341caSmrg		:; \							@@\
54611d341caSmrg	else \								@@\
54711d341caSmrg		if [ -h dir ]; then \					@@\
54811d341caSmrg			(set -x; rm -f dir); \				@@\
54911d341caSmrg		fi; \							@@\
55011d341caSmrg		(set -x; $(MKDIRHIER) dir); \				@@\
55111d341caSmrg	fi
55211d341caSmrg#endif /* MakeDirInline */
55311d341caSmrg
55411d341caSmrg#ifndef InstallDirectory
55511d341caSmrg#define InstallDirectory(dir)						@@\
55611d341caSmrginstall::								@@\
55711d341caSmrg	MakeDir(dir)
55811d341caSmrg#endif /* InstallDirectory */
55911d341caSmrg
56011d341caSmrg#ifndef InstallCreateLink
56111d341caSmrg# define InstallCreateLink(dest,from,to)				@@\
56211d341caSmrginstall::								@@\
56311d341caSmrg	  cd $(DESTDIR)dest && \					@@\
56411d341caSmrg	  $(LN) -sf from to
56511d341caSmrg#endif
56611d341caSmrg
56711d341caSmrg#ifndef BuildIncludesTop
56811d341caSmrg#define BuildIncludesTop(srclist)					@@\
56911d341caSmrgincludes:: srclist							@@\
57011d341caSmrg	MakeDir($(BUILDINCDIR))						@@\
57111d341caSmrg	@(set -x; cd $(BUILDINCDIR) && for i in srclist; do \		@@\
57211d341caSmrg		RemoveFile($$i); \					@@\
57311d341caSmrg		$(LN) $(BUILDINCTOP)/$(CURRENT_DIR)/$$i .; \		@@\
57411d341caSmrg	done)
57511d341caSmrg#endif /* BuildIncludesTop */
57611d341caSmrg
57711d341caSmrg#ifndef BuildIncludes
57811d341caSmrg#define BuildIncludes(srclist,dstsubdir,dstupdir)			@@\
57911d341caSmrgincludes:: srclist							@@\
58011d341caSmrg	MakeDir($(BUILDINCDIR)/dstsubdir)				@@\
58111d341caSmrg	@(set -x; cd $(BUILDINCDIR)/dstsubdir && for i in srclist; do \	@@\
58211d341caSmrg		RemoveFile($$i); \					@@\
58311d341caSmrg		$(LN) $(BUILDINCTOP)/dstupdir/$(CURRENT_DIR)/$$i .; \	@@\
58411d341caSmrg	done)
58511d341caSmrg#endif /* BuildIncludes */
58611d341caSmrg
58711d341caSmrg/*
58811d341caSmrg * LinkBuildBinary - export a binary from the build tree.
58911d341caSmrg */
59011d341caSmrg#ifndef LinkBuildBinary
59111d341caSmrg#define LinkBuildBinary(binary)						@@\
59211d341caSmrgall:: $(BUILDBINDIR)/binary binary					@@\
59311d341caSmrg									@@\
59411d341caSmrg$(BUILDBINDIR)/binary: binary						@@\
59511d341caSmrg	MakeDir($(BUILDBINDIR))						@@\
59611d341caSmrg	RemoveFile($@)							@@\
59711d341caSmrg	cd $(BUILDBINDIR) && $(LN) $(BUILDBINTOP)/$(CURRENT_DIR)/binary .
59811d341caSmrg#endif /* LinkBuildBinary */
59911d341caSmrg
60011d341caSmrg#ifndef BuildInterfaces
60111d341caSmrg#define BuildInterfaces(srclist,dstsubdir,dstupdir)			@@\
60211d341caSmrginterfaces::								@@\
60311d341caSmrg	MakeDir($(BUILDINCDIR)/dstsubdir)				@@\
60411d341caSmrg	@(set -x; cd $(BUILDINCDIR)/dstsubdir && for i in srclist; do \	@@\
60511d341caSmrg		RemoveFile($$i); \					@@\
60611d341caSmrg		$(LN) $(BUILDINCTOP)/dstupdir/$(CURRENT_DIR)/$$i .; \	@@\
60711d341caSmrg	done)
60811d341caSmrg#endif /* BuildInterfaces */
60911d341caSmrg
61011d341caSmrg/*
61111d341caSmrg * LinkRule - link a program
61211d341caSmrg */
61311d341caSmrg#ifndef LinkRule
61411d341caSmrg#define LinkRule(program,options,objects,libraries) \
61511d341caSmrg$(CCLINK) -o program options objects libraries $(EXTRA_LOAD_FLAGS)
61611d341caSmrg#endif /* LinkRule */
61711d341caSmrg
61811d341caSmrg/*
61911d341caSmrg * HostLinkRule - link a utility to be used on the build host
62011d341caSmrg * (differs from LinkRule if cross compiling)
62111d341caSmrg */
62211d341caSmrg#ifndef HostLinkRule
62311d341caSmrg#define HostLinkRule LinkRule
62411d341caSmrg#endif
62511d341caSmrg
62611d341caSmrg#ifndef CplusplusLinkRule
62711d341caSmrg#define CplusplusLinkRule(program,options,objects,libraries) \
62811d341caSmrg$(CXXLINK) -o program options objects libraries $(EXTRA_LOAD_FLAGS)
62911d341caSmrg#endif /* CplusplusLinkRule */
63011d341caSmrg
63111d341caSmrg/*
63211d341caSmrg * NormalProgramTarget - generate rules to compile and link the indicated
63311d341caSmrg * program; since it does not use any default object files, it may be used for
63411d341caSmrg * multiple programs in the same Imakefile.
63511d341caSmrg */
63611d341caSmrg#ifndef NormalProgramTarget
63711d341caSmrg#define	NormalProgramTarget(program,objects,deplibs,locallibs,syslibs)	@@\
63811d341caSmrgProgramTargetName(program): objects deplibs				@@\
63911d341caSmrg	RemoveTargetProgram($@)						@@\
64011d341caSmrg	LinkRule($@,$(LDOPTIONS),objects,locallibs $(LDLIBS) syslibs)	@@\
64111d341caSmrg									@@\
64211d341caSmrgSentinelProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
64311d341caSmrgPurifyProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
64411d341caSmrgProofProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
64511d341caSmrg									@@\
64611d341caSmrgclean::									@@\
64711d341caSmrg	RemoveFile(ProgramTargetName(program))
64811d341caSmrg#endif /* NormalProgramTarget */
64911d341caSmrg
65011d341caSmrg
65111d341caSmrg/*
65211d341caSmrg * NormalCplusplusProgramTarget - Like NormalTargetProgram, but uses
65311d341caSmrg * C++ linking rules.
65411d341caSmrg */
65511d341caSmrg#ifndef NormalCplusplusProgramTarget
65611d341caSmrg#define	NormalCplusplusProgramTarget(program,objects,deplibs,locallibs,syslibs)	@@\
65711d341caSmrgProgramTargetName(program): objects deplibs				@@\
65811d341caSmrg	RemoveTargetProgram($@)						@@\
65911d341caSmrg	CplusplusLinkRule($@,$(CXXLDOPTIONS),objects,locallibs $(LDLIBS) syslibs) @@\
66011d341caSmrg									@@\
66111d341caSmrgSentinelCplusplusProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
66211d341caSmrgPurifyCplusplusProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
66311d341caSmrgProofCplusplusProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
66411d341caSmrg									@@\
66511d341caSmrgclean::									@@\
66611d341caSmrg	RemoveFile(ProgramTargetName(program))
66711d341caSmrg#endif /* NormalCplusplusProgramTarget */
66811d341caSmrg
66911d341caSmrg
67011d341caSmrg#ifndef SetUIDProgramTarget
67111d341caSmrg#define SetUIDProgramTarget NormalProgramTarget
67211d341caSmrg#endif
67311d341caSmrg
67411d341caSmrg
67511d341caSmrg/*
67611d341caSmrg * SingleProgramTarget - obsolete version of NormalProgramTarget that does
67711d341caSmrg * not have deplibs.
67811d341caSmrg */
67911d341caSmrg#ifndef SingleProgramTarget
68011d341caSmrg#define	SingleProgramTarget(program,objects,locallibs,syslibs)		@@\
68111d341caSmrgNormalProgramTarget(program,objects,NullParameter,locallibs,syslibs)
68211d341caSmrg#endif /* SingleProgramTarget */
68311d341caSmrg
68411d341caSmrg/*
68511d341caSmrg * SimpleProgramTarget - generate rules for compiling and linking programs
68611d341caSmrg * that only have one C source file.  It should only be used in Imakefiles
68711d341caSmrg * that describe a single program.
68811d341caSmrg */
68911d341caSmrg#ifndef SimpleProgramTarget
69011d341caSmrg#define	SimpleProgramTarget(program)					@@\
69111d341caSmrg           OBJS = program.o						@@\
69211d341caSmrg           SRCS = program.c						@@\
69311d341caSmrg									@@\
69411d341caSmrgComplexProgramTarget(program)
69511d341caSmrg#endif /* SimpleProgramTarget */
69611d341caSmrg
69711d341caSmrg#ifndef SimpleProgramTarget_1
69811d341caSmrg#define	SimpleProgramTarget_1(program)					@@\
69911d341caSmrg           OBJS1 = program.o						@@\
70011d341caSmrg           SRCS1 = program.c						@@\
70111d341caSmrg									@@\
70211d341caSmrgComplexProgramTarget_1(program,$(LOCAL_LIBRARIES),NullParameter)
70311d341caSmrg#endif /* SimpleProgramTarget_1 */
70411d341caSmrg#ifndef SimpleProgramTarget_2
70511d341caSmrg#define	SimpleProgramTarget_2(program)					@@\
70611d341caSmrg           OBJS2 = program.o						@@\
70711d341caSmrg           SRCS2 = program.c						@@\
70811d341caSmrg									@@\
70911d341caSmrgComplexProgramTarget_2(program,$(LOCAL_LIBRARIES),NullParameter)
71011d341caSmrg#endif /* SimpleProgramTarget_2 */
71111d341caSmrg#ifndef SimpleProgramTarget_3
71211d341caSmrg#define	SimpleProgramTarget_3(program)					@@\
71311d341caSmrg           OBJS3 = program.o						@@\
71411d341caSmrg           SRCS3 = program.c						@@\
71511d341caSmrg									@@\
71611d341caSmrgComplexProgramTarget_3(program,$(LOCAL_LIBRARIES),NullParameter)
71711d341caSmrg#endif /* SimpleProgramTarget_3 */
71811d341caSmrg#ifndef SimpleProgramTarget_4
71911d341caSmrg#define	SimpleProgramTarget_4(program)					@@\
72011d341caSmrg           OBJS4 = program.o						@@\
72111d341caSmrg           SRCS4 = program.c						@@\
72211d341caSmrg									@@\
72311d341caSmrgComplexProgramTarget_4(program,$(LOCAL_LIBRARIES),NullParameter)
72411d341caSmrg#endif /* SimpleProgramTarget_4 */
72511d341caSmrg#ifndef SimpleProgramTarget_5
72611d341caSmrg#define	SimpleProgramTarget_5(program)					@@\
72711d341caSmrg           OBJS5 = program.o						@@\
72811d341caSmrg           SRCS5 = program.c						@@\
72911d341caSmrg									@@\
73011d341caSmrgComplexProgramTarget_5(program,$(LOCAL_LIBRARIES),NullParameter)
73111d341caSmrg#endif /* SimpleProgramTarget_5 */
73211d341caSmrg#ifndef SimpleProgramTarget_6
73311d341caSmrg#define	SimpleProgramTarget_6(program)					@@\
73411d341caSmrg           OBJS6 = program.o						@@\
73511d341caSmrg           SRCS6 = program.c						@@\
73611d341caSmrg									@@\
73711d341caSmrgComplexProgramTarget_6(program,$(LOCAL_LIBRARIES),NullParameter)
73811d341caSmrg#endif /* SimpleProgramTarget_6 */
73911d341caSmrg#ifndef SimpleProgramTarget_7
74011d341caSmrg#define	SimpleProgramTarget_7(program)					@@\
74111d341caSmrg           OBJS7 = program.o						@@\
74211d341caSmrg           SRCS7 = program.c						@@\
74311d341caSmrg									@@\
74411d341caSmrgComplexProgramTarget_7(program,$(LOCAL_LIBRARIES),NullParameter)
74511d341caSmrg#endif /* SimpleProgramTarget_7 */
74611d341caSmrg#ifndef SimpleProgramTarget_8
74711d341caSmrg#define	SimpleProgramTarget_8(program)					@@\
74811d341caSmrg           OBJS8 = program.o						@@\
74911d341caSmrg           SRCS8 = program.c						@@\
75011d341caSmrg									@@\
75111d341caSmrgComplexProgramTarget_8(program,$(LOCAL_LIBRARIES),NullParameter)
75211d341caSmrg#endif /* SimpleProgramTarget_8 */
75311d341caSmrg#ifndef SimpleProgramTarget_9
75411d341caSmrg#define	SimpleProgramTarget_9(program)					@@\
75511d341caSmrg           OBJS9 = program.o						@@\
75611d341caSmrg           SRCS9 = program.c						@@\
75711d341caSmrg									@@\
75811d341caSmrgComplexProgramTarget_9(program,$(LOCAL_LIBRARIES),NullParameter)
75911d341caSmrg#endif /* SimpleProgramTarget_9 */
76011d341caSmrg#ifndef SimpleProgramTarget_10
76111d341caSmrg#define	SimpleProgramTarget_10(program)					@@\
76211d341caSmrg           OBJS10 = program.o						@@\
76311d341caSmrg           SRCS10 = program.c						@@\
76411d341caSmrg									@@\
76511d341caSmrgComplexProgramTarget_10(program,$(LOCAL_LIBRARIES),NullParameter)
76611d341caSmrg#endif /* SimpleProgramTarget_10 */
76711d341caSmrg
76811d341caSmrg#ifndef SimpleCplusplusProgramTarget
76911d341caSmrg#define SimpleCplusplusProgramTarget(program)				@@\
77011d341caSmrg           OBJS = program.o						@@\
77111d341caSmrg           SRCS = program.CCsuf						@@\
77211d341caSmrg									@@\
77311d341caSmrgComplexCplusplusProgramTarget(program)
77411d341caSmrg#endif /* SimpleCplusplusProgramTarget */
77511d341caSmrg
77611d341caSmrg#ifndef ProgramTargetHelper
77711d341caSmrg#define	ProgramTargetHelper(program,srcs,objs,deplib,locallib,syslib)	@@\
77811d341caSmrgProgramTargetName(program): $(objs) $(deplib)				@@\
77911d341caSmrg	RemoveTargetProgram($@)						@@\
78011d341caSmrg	LinkRule($@,$(LDOPTIONS),$(objs),locallib $(LDLIBS) syslib)	@@\
78111d341caSmrg									@@\
78211d341caSmrgCenterProgramTarget(program,$(srcs),$(objs),locallib,syslib)		@@\
78311d341caSmrgSentinelProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
78411d341caSmrgPurifyProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
78511d341caSmrgProofProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
78611d341caSmrg									@@\
78711d341caSmrgInstallProgram(program,$(BINDIR))					@@\
78811d341caSmrgInstallManPage(program,$(MANDIR))
78911d341caSmrg#endif /* ProgramTargetHelper */
79011d341caSmrg
79111d341caSmrg#ifndef ProgramTargetHelperNoMan
79211d341caSmrg#define ProgramTargetHelperNoMan(program,srcs,objs,deplib,locallib,syslib) @@\
79311d341caSmrgProgramTargetName(program): $(objs) $(deplib)				@@\
79411d341caSmrg	RemoveTargetProgram($@)						@@\
79511d341caSmrg	LinkRule($@,$(LDOPTIONS),$(objs),locallib $(LDLIBS) syslib)	@@\
79611d341caSmrg									@@\
79711d341caSmrgCenterProgramTarget(program,$(srcs),$(objs),locallib,syslib)		@@\
79811d341caSmrgSentinelProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
79911d341caSmrgPurifyProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
80011d341caSmrgProofProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
80111d341caSmrg									@@\
80211d341caSmrgInstallProgram(program,$(BINDIR))
80311d341caSmrg#endif /* ProgramTargetHelperNoMan */
80411d341caSmrg
80511d341caSmrg#ifndef CplusplusProgramTargetHelper
80611d341caSmrg#define	CplusplusProgramTargetHelper(program,srcs,objs,deplib,locallib,syslib) @@\
80711d341caSmrgProgramTargetName(program): $(objs) $(deplib)				@@\
80811d341caSmrg	RemoveTargetProgram($@)						@@\
80911d341caSmrg	CplusplusLinkRule($@,$(CXXLDOPTIONS),$(objs),locallib $(LDLIBS) syslib) @@\
81011d341caSmrg									@@\
81111d341caSmrgCenterProgramTarget(program,$(srcs),$(objs),locallib,syslib)		@@\
81211d341caSmrgSentinelCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
81311d341caSmrgPurifyCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
81411d341caSmrgProofCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
81511d341caSmrg									@@\
81611d341caSmrgInstallProgram(program,$(BINDIR))					@@\
81711d341caSmrgInstallManPage(program,$(MANDIR))
81811d341caSmrg#endif /* CplusplusProgramTargetHelper */
81911d341caSmrg
82011d341caSmrg#ifndef CplusplusProgramTargetHelperNoMan
82111d341caSmrg#define	CplusplusProgramTargetHelperNoMan(program,srcs,objs,deplib,locallib,syslib) @@\
82211d341caSmrgProgramTargetName(program): $(objs) $(deplib)				@@\
82311d341caSmrg	RemoveTargetProgram($@)						@@\
82411d341caSmrg	CplusplusLinkRule($@,$(CXXLDOPTIONS),$(objs),locallib $(LDLIBS) syslib) @@\
82511d341caSmrg									@@\
82611d341caSmrgCenterProgramTarget(program,$(srcs),$(objs),locallib,syslib)		@@\
82711d341caSmrgSentinelCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
82811d341caSmrgPurifyCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
82911d341caSmrgProofCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
83011d341caSmrg									@@\
83111d341caSmrgInstallProgram(program,$(BINDIR))					@@
83211d341caSmrg#endif /* CplusplusProgramTargetHelperNoMan */
83311d341caSmrg
83411d341caSmrg/*
83511d341caSmrg * ComplexProgramTarget - generate rules for compiling and linking the
83611d341caSmrg * program specified by $(OBJS) and $(SRCS), installing the program and its
83711d341caSmrg * man page, and generating dependencies.  It should only be used in
83811d341caSmrg * Imakefiles that describe a single program.
83911d341caSmrg */
84011d341caSmrg#ifndef ComplexProgramTarget
84111d341caSmrg#define	ComplexProgramTarget(program)					@@\
84211d341caSmrg        PROGRAM = ProgramTargetName(program)				@@\
84311d341caSmrg									@@\
84411d341caSmrgAllTarget(ProgramTargetName(program))					@@\
84511d341caSmrg									@@\
84611d341caSmrgProgramTargetHelper(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
84711d341caSmrg									@@\
84811d341caSmrgDependTarget()								@@\
84911d341caSmrgLintTarget()								@@\
85011d341caSmrg									@@\
85111d341caSmrgclean::									@@\
85211d341caSmrg	RemoveFile(ProgramTargetName(program))
85311d341caSmrg#endif /* ComplexProgramTarget */
85411d341caSmrg
85511d341caSmrg#ifndef ComplexCplusplusProgramTarget
85611d341caSmrg#define	ComplexCplusplusProgramTarget(program)				@@\
85711d341caSmrg        PROGRAM = ProgramTargetName(program)				@@\
85811d341caSmrg									@@\
85911d341caSmrgAllTarget(ProgramTargetName(program))					@@\
86011d341caSmrg									@@\
86111d341caSmrgCplusplusProgramTargetHelper(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
86211d341caSmrg									@@\
86311d341caSmrgDependTarget()								@@\
86411d341caSmrgLintTarget()								@@\
86511d341caSmrg									@@\
86611d341caSmrgclean::									@@\
86711d341caSmrg	RemoveFile(ProgramTargetName(program))
86811d341caSmrg#endif /* ComplexCplusplusProgramTarget */
86911d341caSmrg
87011d341caSmrg/*
87111d341caSmrg * ComplexProgramTargetNoMan - generate rules for compiling and linking
87211d341caSmrg * the program specified by $(OBJS) and $(SRCS), installing the program
87311d341caSmrg * and generating dependencies.  It should only be used in Imakefiles
87411d341caSmrg * that describe a single program, and have no manual page.
87511d341caSmrg */
87611d341caSmrg#ifndef ComplexProgramTargetNoMan
87711d341caSmrg#define ComplexProgramTargetNoMan(program)				@@\
87811d341caSmrg        PROGRAM = ProgramTargetName(program)				@@\
87911d341caSmrg									@@\
88011d341caSmrgAllTarget(ProgramTargetName(program))					@@\
88111d341caSmrg									@@\
88211d341caSmrgProgramTargetHelperNoMan(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
88311d341caSmrg									@@\
88411d341caSmrgDependTarget()								@@\
88511d341caSmrgLintTarget()								@@\
88611d341caSmrg									@@\
88711d341caSmrgclean::									@@\
88811d341caSmrg	RemoveFile(ProgramTargetName(program))
88911d341caSmrg#endif /* ComplexProgramTargetNoMan */
89011d341caSmrg
89111d341caSmrg#ifndef ComplexCplusplusProgramTarget
89211d341caSmrg#define	ComplexCplusplusProgramTarget(program)				@@\
89311d341caSmrg        PROGRAM = program						@@\
89411d341caSmrg									@@\
89511d341caSmrgAllTarget(program)							@@\
89611d341caSmrg									@@\
89711d341caSmrgCplusplusProgramTargetHelperNoMan(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
89811d341caSmrg									@@\
89911d341caSmrgDependTarget()								@@\
90011d341caSmrgLintTarget()								@@\
90111d341caSmrg									@@\
90211d341caSmrgclean::									@@\
90311d341caSmrg	RemoveFile(ProgramTargetName(program))
90411d341caSmrg#endif /* ComplexCplusplusProgramTarget */
90511d341caSmrg
90611d341caSmrg/*
90711d341caSmrg * ComplexProgramTarget_1 - generate rules for compiling and linking the
90811d341caSmrg * program specified by $(OBJS1) and $(SRCS1), installing the program and its
90911d341caSmrg * man page, and generating dependencies for it and any programs described
91011d341caSmrg * by $(SRCS2) through $(SRCS10).  It should be used to build the primary
91111d341caSmrg * program in Imakefiles that describe multiple programs.
91211d341caSmrg */
91311d341caSmrg#ifndef ComplexProgramTarget_1
91411d341caSmrg#define	ComplexProgramTarget_1(program,locallib,syslib)			@@\
91511d341caSmrg  OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) \			@@\
91611d341caSmrg         $(OBJS6) $(OBJS7) $(OBJS8) $(OBJS9) $(OBJS10)			@@\
91711d341caSmrg  SRCS = $(SRCS1) $(SRCS2) $(SRCS3) $(SRCS4) $(SRCS5) \			@@\
91811d341caSmrg         $(SRCS6) $(SRCS7) $(SRCS8) $(SRCS9) $(SRCS10)			@@\
91911d341caSmrg									@@\
92011d341caSmrgAllTarget($(PROGRAMS))							@@\
92111d341caSmrg									@@\
92211d341caSmrgProgramTargetHelper(program,SRCS1,OBJS1,DEPLIBS1,locallib,syslib)	@@\
92311d341caSmrg									@@\
92411d341caSmrgDependTarget()								@@\
92511d341caSmrgLintTarget()								@@\
92611d341caSmrg									@@\
92711d341caSmrgclean::									@@\
92811d341caSmrg	RemoveFiles($(PROGRAMS))
92911d341caSmrg#endif /* ComplexProgramTarget_1 */
93011d341caSmrg
93111d341caSmrg#ifndef ComplexCplusplusProgramTarget_1
93211d341caSmrg#define	ComplexCplusplusProgramTarget_1(program,locallib,syslib)	@@\
93311d341caSmrg  OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) \			@@\
93411d341caSmrg         $(OBJS6) $(OBJS7) $(OBJS8) $(OBJS9) $(OBJS10)			@@\
93511d341caSmrg  SRCS = $(SRCS1) $(SRCS2) $(SRCS3) $(SRCS4) $(SRCS5) \			@@\
93611d341caSmrg         $(SRCS6) $(SRCS7) $(SRCS8) $(SRCS9) $(SRCS10)			@@\
93711d341caSmrg									@@\
93811d341caSmrgAllTarget($(PROGRAMS))							@@\
93911d341caSmrg									@@\
94011d341caSmrgCplusplusProgramTargetHelper(program,SRCS1,OBJS1,DEPLIBS1,locallib,syslib)@@\
94111d341caSmrg									@@\
94211d341caSmrgDependTarget()								@@\
94311d341caSmrgLintTarget()								@@\
94411d341caSmrg									@@\
94511d341caSmrgclean::									@@\
94611d341caSmrg	RemoveFiles($(PROGRAMS))
94711d341caSmrg#endif /* ComplexCplusplusProgramTarget_1 */
94811d341caSmrg
94911d341caSmrg/*
95011d341caSmrg * ComplexProgramTarget_2 - generate rules for compiling and linking the
95111d341caSmrg * program specified by $(OBJS2) and $(SRCS2) and installing the program and
95211d341caSmrg * man page.  It should be used to build the second program in Imakefiles
95311d341caSmrg * describing more than one program.
95411d341caSmrg */
95511d341caSmrg#ifndef ComplexProgramTarget_2
95611d341caSmrg#define	ComplexProgramTarget_2(program,locallib,syslib)			@@\
95711d341caSmrgProgramTargetHelper(program,SRCS2,OBJS2,DEPLIBS2,locallib,syslib)
95811d341caSmrg#endif /* ComplexProgramTarget_2 */
95911d341caSmrg
96011d341caSmrg#ifndef ComplexCplusplusProgramTarget_2
96111d341caSmrg#define	ComplexCplusplusProgramTarget_2(program,locallib,syslib)	@@\
96211d341caSmrgCplusplusProgramTargetHelper(program,SRCS2,OBJS2,DEPLIBS2,locallib,syslib)
96311d341caSmrg#endif /* ComplexCplusplusProgramTarget_2 */
96411d341caSmrg
96511d341caSmrg/*
96611d341caSmrg * ComplexProgramTarget_3 - generate rules for compiling and linking the
96711d341caSmrg * program specified by $(OBJS3) and $(SRCS3) and installing the program and
96811d341caSmrg * man page.  It should be used to build the third program in Imakefiles
96911d341caSmrg * describing more than one program.
97011d341caSmrg */
97111d341caSmrg#ifndef ComplexProgramTarget_3
97211d341caSmrg#define	ComplexProgramTarget_3(program,locallib,syslib)			@@\
97311d341caSmrgProgramTargetHelper(program,SRCS3,OBJS3,DEPLIBS3,locallib,syslib)
97411d341caSmrg#endif /* ComplexProgramTarget_3 */
97511d341caSmrg
97611d341caSmrg#ifndef ComplexCplusplusProgramTarget_3
97711d341caSmrg#define	ComplexCplusplusProgramTarget_3(program,locallib,syslib)	@@\
97811d341caSmrgCplusplusProgramTargetHelper(program,SRCS3,OBJS3,DEPLIBS3,locallib,syslib)
97911d341caSmrg#endif /* ComplexCplusplusProgramTarget_3 */
98011d341caSmrg
98111d341caSmrg/*
98211d341caSmrg * ComplexProgramTarget_4 - generate rules for compiling and linking the
98311d341caSmrg * program specified by $(OBJS4) and $(SRCS4) and installing the program and
98411d341caSmrg * man page.  It should be used to build the third program in Imakefiles
98511d341caSmrg * describing more than one program.
98611d341caSmrg */
98711d341caSmrg#ifndef ComplexProgramTarget_4
98811d341caSmrg#define	ComplexProgramTarget_4(program,locallib,syslib)			@@\
98911d341caSmrgProgramTargetHelper(program,SRCS4,OBJS4,DEPLIBS4,locallib,syslib)
99011d341caSmrg#endif /* ComplexProgramTarget_4 */
99111d341caSmrg
99211d341caSmrg#ifndef ComplexCplusplusProgramTarget_4
99311d341caSmrg#define	ComplexCplusplusProgramTarget_4(program,locallib,syslib)	@@\
99411d341caSmrgCplusplusProgramTargetHelper(program,SRCS4,OBJS4,DEPLIBS4,locallib,syslib)
99511d341caSmrg#endif /* ComplexCplusplusProgramTarget_4 */
99611d341caSmrg
99711d341caSmrg/*
99811d341caSmrg * ComplexProgramTarget_5 - generate rules for compiling and linking the
99911d341caSmrg * program specified by $(OBJS5) and $(SRCS5) and installing the program and
100011d341caSmrg * man page.  It should be used to build the third program in Imakefiles
100111d341caSmrg * describing more than one program.
100211d341caSmrg */
100311d341caSmrg#ifndef ComplexProgramTarget_5
100411d341caSmrg#define	ComplexProgramTarget_5(program,locallib,syslib)			@@\
100511d341caSmrgProgramTargetHelper(program,SRCS5,OBJS5,DEPLIBS5,locallib,syslib)
100611d341caSmrg#endif /* ComplexProgramTarget_5 */
100711d341caSmrg
100811d341caSmrg#ifndef ComplexCplusplusProgramTarget_5
100911d341caSmrg#define	ComplexCplusplusProgramTarget_5(program,locallib,syslib)	@@\
101011d341caSmrgCplusplusProgramTargetHelper(program,SRCS5,OBJS5,DEPLIBS5,locallib,syslib)
101111d341caSmrg#endif /* ComplexCplusplusProgramTarget_5 */
101211d341caSmrg
101311d341caSmrg/*
101411d341caSmrg * ComplexProgramTarget_6 - generate rules for compiling and linking the
101511d341caSmrg * program specified by $(OBJS6) and $(SRCS6) and installing the program and
101611d341caSmrg * man page.  It should be used to build the third program in Imakefiles
101711d341caSmrg * describing more than one program.
101811d341caSmrg */
101911d341caSmrg#ifndef ComplexProgramTarget_6
102011d341caSmrg#define	ComplexProgramTarget_6(program,locallib,syslib)			@@\
102111d341caSmrgProgramTargetHelper(program,SRCS6,OBJS6,DEPLIBS6,locallib,syslib)
102211d341caSmrg#endif /* ComplexProgramTarget_6 */
102311d341caSmrg
102411d341caSmrg#ifndef ComplexCplusplusProgramTarget_6
102511d341caSmrg#define	ComplexCplusplusProgramTarget_6(program,locallib,syslib)	@@\
102611d341caSmrgCplusplusProgramTargetHelper(program,SRCS6,OBJS6,DEPLIBS6,locallib,syslib)
102711d341caSmrg#endif /* ComplexCplusplusProgramTarget_6 */
102811d341caSmrg
102911d341caSmrg/*
103011d341caSmrg * ComplexProgramTarget_7 - generate rules for compiling and linking the
103111d341caSmrg * program specified by $(OBJS7) and $(SRCS7) and installing the program and
103211d341caSmrg * man page.  It should be used to build the third program in Imakefiles
103311d341caSmrg * describing more than one program.
103411d341caSmrg */
103511d341caSmrg#ifndef ComplexProgramTarget_7
103611d341caSmrg#define	ComplexProgramTarget_7(program,locallib,syslib)			@@\
103711d341caSmrgProgramTargetHelper(program,SRCS7,OBJS7,DEPLIBS7,locallib,syslib)
103811d341caSmrg#endif /* ComplexProgramTarget_7 */
103911d341caSmrg
104011d341caSmrg#ifndef ComplexCplusplusProgramTarget_7
104111d341caSmrg#define	ComplexCplusplusProgramTarget_7(program,locallib,syslib)	@@\
104211d341caSmrgCplusplusProgramTargetHelper(program,SRCS7,OBJS7,DEPLIBS7,locallib,syslib)
104311d341caSmrg#endif /* ComplexCplusplusProgramTarget_7 */
104411d341caSmrg
104511d341caSmrg/*
104611d341caSmrg * ComplexProgramTarget_8 - generate rules for compiling and linking the
104711d341caSmrg * program specified by $(OBJS8) and $(SRCS8) and installing the program and
104811d341caSmrg * man page.  It should be used to build the third program in Imakefiles
104911d341caSmrg * describing more than one program.
105011d341caSmrg */
105111d341caSmrg#ifndef ComplexProgramTarget_8
105211d341caSmrg#define	ComplexProgramTarget_8(program,locallib,syslib)			@@\
105311d341caSmrgProgramTargetHelper(program,SRCS8,OBJS8,DEPLIBS8,locallib,syslib)
105411d341caSmrg#endif /* ComplexProgramTarget_8 */
105511d341caSmrg
105611d341caSmrg#ifndef ComplexCplusplusProgramTarget_8
105711d341caSmrg#define	ComplexCplusplusProgramTarget_8(program,locallib,syslib)	@@\
105811d341caSmrgCplusplusProgramTargetHelper(program,SRCS8,OBJS8,DEPLIBS8,locallib,syslib)
105911d341caSmrg#endif /* ComplexCplusplusProgramTarget_8 */
106011d341caSmrg
106111d341caSmrg/*
106211d341caSmrg * ComplexProgramTarget_9 - generate rules for compiling and linking the
106311d341caSmrg * program specified by $(OBJS9) and $(SRCS9) and installing the program and
106411d341caSmrg * man page.  It should be used to build the third program in Imakefiles
106511d341caSmrg * describing more than one program.
106611d341caSmrg */
106711d341caSmrg#ifndef ComplexProgramTarget_9
106811d341caSmrg#define	ComplexProgramTarget_9(program,locallib,syslib)			@@\
106911d341caSmrgProgramTargetHelper(program,SRCS9,OBJS9,DEPLIBS9,locallib,syslib)
107011d341caSmrg#endif /* ComplexProgramTarget_9 */
107111d341caSmrg
107211d341caSmrg#ifndef ComplexCplusplusProgramTarget_9
107311d341caSmrg#define	ComplexCplusplusProgramTarget_9(program,locallib,syslib)	@@\
107411d341caSmrgCplusplusProgramTargetHelper(program,SRCS9,OBJS9,DEPLIBS9,locallib,syslib)
107511d341caSmrg#endif /* ComplexCplusplusProgramTarget_9 */
107611d341caSmrg
107711d341caSmrg/*
107811d341caSmrg * ComplexProgramTarget_10 - generate rules for compiling and linking the
107911d341caSmrg * program specified by $(OBJS10) and $(SRCS10) and installing the program and
108011d341caSmrg * man page.  It should be used to build the third program in Imakefiles
108111d341caSmrg * describing more than one program.
108211d341caSmrg */
108311d341caSmrg#ifndef ComplexProgramTarget_10
108411d341caSmrg#define	ComplexProgramTarget_10(program,locallib,syslib)		@@\
108511d341caSmrgProgramTargetHelper(program,SRCS10,OBJS10,DEPLIBS10,locallib,syslib)
108611d341caSmrg#endif /* ComplexProgramTarget_10 */
108711d341caSmrg
108811d341caSmrg#ifndef ComplexCplusplusProgramTarget_10
108911d341caSmrg#define	ComplexCplusplusProgramTarget_10(program,locallib,syslib)	@@\
109011d341caSmrgCplusplusProgramTargetHelper(program,SRCS10,OBJS10,DEPLIBS10,locallib,syslib)
109111d341caSmrg#endif /* ComplexCplusplusProgramTarget_10 */
109211d341caSmrg
109311d341caSmrg#ifndef MoveToBakFile
109411d341caSmrg#define MoveToBakFile(file) -@if [ -f file ]; then set -x; \		@@\
109511d341caSmrg	$(MV) file file.bak; else exit 0; fi
109611d341caSmrg#endif /* MoveToBakFile */
109711d341caSmrg
109811d341caSmrg#ifndef RMoveToBakFile
109911d341caSmrg#define RMoveToBakFile(file) -@if [ -f file ]; then set -x; \		@@\
110011d341caSmrg	RemoveFile(file.bak); $(MV) file file.bak; \			@@\
110111d341caSmrg	else exit 0; fi
110211d341caSmrg#endif /* RMoveToBakFile */
110311d341caSmrg
110411d341caSmrg/*
110511d341caSmrg * ServerTargetWithFlags - generate rules to compile, link, and relink a server
110611d341caSmrg */
110711d341caSmrg#ifndef ServerTargetWithFlags
110811d341caSmrg#define	ServerTargetWithFlags(server,subdirs,objects,libs,syslibs,flags) @@\
110911d341caSmrgAllTarget(ProgramTargetName(server))					@@\
111011d341caSmrgProgramTargetName(server): subdirs objects libs				@@\
111111d341caSmrg	MoveToBakFile($@)						@@\
111211d341caSmrg	LinkRule($@,$(LDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\
111311d341caSmrg									@@\
111411d341caSmrgConcat(load,server):							@@\
111511d341caSmrg	MoveToBakFile(ProgramTargetName(server))			@@\
111611d341caSmrg	LinkRule(ProgramTargetName(server),$(LDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\
111711d341caSmrg									@@\
111811d341caSmrgloadX:: Concat(load,server)						@@\
111911d341caSmrg									@@\
112011d341caSmrgSentinelProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
112111d341caSmrgSentinelLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
112211d341caSmrgPurifyProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
112311d341caSmrgPurifyLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
112411d341caSmrgProofProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
112511d341caSmrgProofLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
112611d341caSmrg									@@\
112711d341caSmrgInstallProgramWithFlags(server,$(BINDIR),flags)				@@\
112811d341caSmrg									@@\
112911d341caSmrgclean::									@@\
113011d341caSmrg	RemoveFile(ProgramTargetName(server))
113111d341caSmrg#endif /* ServerTargetWithFlags */
113211d341caSmrg
113311d341caSmrg/*
113411d341caSmrg * ServerTarget - rules to compile, link, and relink a normal server
113511d341caSmrg */
113611d341caSmrg#ifndef ServerTarget
113711d341caSmrg#define	ServerTarget(server,subdirs,objects,libs,syslibs)		@@\
113811d341caSmrgServerTargetWithFlags(server,subdirs,objects,libs,syslibs,$(_NOOP_))
113911d341caSmrg#endif /* ServerTarget */
114011d341caSmrg
114111d341caSmrg#if DoRanlibCmd
114211d341caSmrg#define RanLibrary(args) $(RANLIB) args
114311d341caSmrg#else
114411d341caSmrg#define RanLibrary(args) $(_NULLCMD_)
114511d341caSmrg#endif
114611d341caSmrg
114711d341caSmrg#ifndef LibraryTargetName
114811d341caSmrg#define LibraryTargetName(libname)Concat(lib,libname.a)
114911d341caSmrg#endif
115011d341caSmrg
115111d341caSmrg/* This rule is used for libs in Xserver/Imakefile which are loaded, not
115211d341caSmrg * linked into the core module. Since modules are called libXXXX.a,
1153944bff83Smrg * this rule mustn't be overridden by .cf files.
115411d341caSmrg */
115511d341caSmrg#ifndef ModuleLibraryTargetName
115611d341caSmrg#define ModuleLibraryTargetName(libname)Concat(lib,libname.a)
115711d341caSmrg#endif
115811d341caSmrg
115911d341caSmrg#ifndef LibraryTargetNameSuffix
116011d341caSmrg#define LibraryTargetNameSuffix(libname,suffix)Concat3(lib,libname,suffix.a)
116111d341caSmrg#endif
116211d341caSmrg
116311d341caSmrg#ifndef InstallNamedInline
116411d341caSmrg#define InstallNamedInline(srcname,flags,dest,dstname) $(INSTALL) $(INSTALLFLAGS) flags srcname $(DESTDIR)dest/dstname
116511d341caSmrg#endif
116611d341caSmrg
116711d341caSmrg#ifndef InstallNamedTarget
116811d341caSmrg#define InstallNamedTarget(step,srcname,flags,dest,dstname)		@@\
116911d341caSmrgstep:: srcname								@@\
117011d341caSmrg	MakeDir($(DESTDIR)dest)						@@\
117111d341caSmrg	InstallNamedInline(srcname,flags,dest,dstname)
117211d341caSmrg#endif /* InstallNamedTarget */
117311d341caSmrg
117411d341caSmrg/*
117511d341caSmrg * InstallNamedTargetNoClobber - Like InstallNamedTarget, but doesn't
117611d341caSmrg * do the install if an installed version already exists.  Useful
117711d341caSmrg * for files that might have local customizations that you don't
117811d341caSmrg * want to clobber.  Config files are good candidates for this.
117911d341caSmrg */
118011d341caSmrg#ifndef InstallNamedTargetNoClobber
118111d341caSmrg#define InstallNamedTargetNoClobber(step,srcname,flags,dest,dstname)	@@\
118211d341caSmrgstep:: srcname								@@\
118311d341caSmrg	MakeDir($(DESTDIR)dest)						@@\
118411d341caSmrg	@if [ -f $(DESTDIR)dest/dstname ]; then \			@@\
118511d341caSmrg	 echo "Not overwriting existing" $(DESTDIR)dest/dstname; \	@@\
118611d341caSmrg	else set -x; \							@@\
118711d341caSmrg	 $(INSTALL) $(INSTALLFLAGS) flags srcname $(DESTDIR)dest/dstname; fi
118811d341caSmrg#endif /* InstallNamedTargetNoClobber */
118911d341caSmrg
119011d341caSmrg#ifndef InstallTarget
119111d341caSmrg#define InstallTarget(step,file,flags,dest)				@@\
119211d341caSmrgInstallNamedTarget(step,file,flags,dest,file)
119311d341caSmrg#endif /* InstallTarget */
119411d341caSmrg
119511d341caSmrg#ifndef InstallInline
119611d341caSmrg#define InstallInline(file,flags,dest) InstallNamedInline(file,flags,dest,file)
119711d341caSmrg#endif
119811d341caSmrg
119911d341caSmrg/*
120011d341caSmrg * InstallLibrary - generate rules to install the indicated library.
120111d341caSmrg */
120211d341caSmrg#ifndef InstallLibrary
120311d341caSmrg#define	InstallLibrary(libname,dest)					@@\
120411d341caSmrginstall:: LibraryTargetName(libname)					@@\
120511d341caSmrg	MakeDir($(DESTDIR)dest)						@@\
120611d341caSmrg	$(INSTALL) $(INSTALLFLAGS) $(INSTLIBFLAGS) LibraryTargetName(libname) $(DESTDIR)dest @@\
120711d341caSmrg	RanLibrary($(RANLIBINSTFLAGS) $(DESTDIR)dest/LibraryTargetName(libname))
120811d341caSmrg#endif /* InstallLibrary */
120911d341caSmrg
121011d341caSmrg
121111d341caSmrg/*
121211d341caSmrg * InstallDriverSDKLibrary - rule to install Driver SDK library.
121311d341caSmrg *                           (only used for XFree86). This is a no-op
121411d341caSmrg *                           rule so that Imakefiles on non-XFree86 systems
121511d341caSmrg *                           continue to build Makefiles correctly.
121611d341caSmrg */
121711d341caSmrg#ifndef InstallDriverSDKLibrary
121811d341caSmrg#define InstallDriverSDKLibrary(lib,dir)
121911d341caSmrg#endif
122011d341caSmrg
122111d341caSmrg
122211d341caSmrg/*
122311d341caSmrg * InstallDriverSDKNamedLibrary - rule to install Driver SDK library.
122411d341caSmrg *                         (only used for XFree86). This is a no-op
122511d341caSmrg *                         rule so that Imakefiles on non-XFree86 systems
122611d341caSmrg *                         continue to build Makefiles correctly.
122711d341caSmrg */
122811d341caSmrg#ifndef InstallDriverSDKNamedLibrary
122911d341caSmrg#define InstallDriverSDKNamedLibrary(lib,dlib,dir)
123011d341caSmrg#endif
123111d341caSmrg
123211d341caSmrg
123311d341caSmrg/*
123411d341caSmrg * InstallDriverSDKLibraryModule - rule to install Driver SDK library module.
123511d341caSmrg *                           (only used for XFree86). This is a no-op
123611d341caSmrg *                           rule so that Imakefiles on non-XFree86 systems
123711d341caSmrg *                           continue to build Makefiles correctly.
123811d341caSmrg */
123911d341caSmrg#ifndef InstallDriverSDKLibraryModule
124011d341caSmrg#define InstallDriverSDKLibraryModule(lib,dlib,dir)
124111d341caSmrg#endif
124211d341caSmrg
124311d341caSmrg
124411d341caSmrg/*
124511d341caSmrg * MergeIntoInstalledLibrary - generate rules to merge one library into another
124611d341caSmrg */
124711d341caSmrg#ifndef MergeIntoInstalledLibrary
124811d341caSmrg#define MergeIntoInstalledLibrary(tolib,fromlib)			@@\
124911d341caSmrginstall::  fromlib							@@\
125011d341caSmrg	$(SCRIPTSRC)/mergelib $(DESTDIR)tolib fromlib
125111d341caSmrg#endif /* MergeIntoInstalledLibrary */
125211d341caSmrg
125311d341caSmrg/*
125411d341caSmrg * InstallLibraryAlias - generate rules to create a link from one library name
125511d341caSmrg * to another for the purposes of aliasing.
125611d341caSmrg */
125711d341caSmrg#ifndef InstallLibraryAlias
125811d341caSmrg#define	InstallLibraryAlias(libname,alias,dest)				@@\
125911d341caSmrginstall::								@@\
126011d341caSmrg	-(cd $(DESTDIR)dest && ( \					@@\
126111d341caSmrg		RemoveFile(LibraryTargetName(alias)); \			@@\
126211d341caSmrg		$(LN) LibraryTargetName(libname) LibraryTargetName(alias)))
126311d341caSmrg#endif /* InstallLibraryAlias */
126411d341caSmrg
126511d341caSmrg
126611d341caSmrg/*
126711d341caSmrg * InstallLintLibrary - generate rules to install the indicated lint library.
126811d341caSmrg */
126911d341caSmrg#ifndef InstallLintLibrary
127011d341caSmrg#define	InstallLintLibrary(libname,dest)				@@\
127111d341caSmrgInstallTarget(install.ln,Concat(llib-l,libname.ln),$(INSTLIBFLAGS),dest)
127211d341caSmrg#endif /* InstallLintLibrary */
127311d341caSmrg
127411d341caSmrg
127511d341caSmrg#if !CompressManPages
127611d341caSmrg/*
127711d341caSmrg * InstallManPageLong - generate rules to install the indicated manual page,
127811d341caSmrg * giving it an alternate name.  This is used for installing man pages whose
127911d341caSmrg * base name without the .man suffix would normally be longer than 8 characters
128011d341caSmrg * (the limit for using source code control systems on files systems with
128111d341caSmrg * short file names).
128211d341caSmrg */
128311d341caSmrg#ifndef InstallManPageLong
128411d341caSmrg#define	InstallManPageLong(file,destdir,dest)				@@\
128511d341caSmrgBuildInstallHtmlManPage(file,dest,$(MANSUFFIX))				@@\
128611d341caSmrg									@@\
128711d341caSmrgCppManTarget(file,$(EXTRAMANDEFS))					@@\
128811d341caSmrg									@@\
128911d341caSmrgInstallNamedTarget(install.man,file.$(MANNEWSUFFIX),$(INSTMANFLAGS),destdir,dest.$(MANSUFFIX))
129011d341caSmrg#endif /* InstallManPageLong */
129111d341caSmrg
129211d341caSmrg
129311d341caSmrg/*
129411d341caSmrg * InstallManPageAliases - generate rules to install manual page aliases.
129511d341caSmrg */
129611d341caSmrg#ifndef InstallManPageAliases
129711d341caSmrg#define	InstallManPageAliases(file,destdir,aliases)			@@\
129811d341caSmrgInstallHtmlManPageAliases(file,aliases,$(MANSUFFIX))			@@\
129911d341caSmrg									@@\
130011d341caSmrginstall.man::								@@\
130111d341caSmrg	@(TMP="#tmp.$$$$"; \						@@\
130211d341caSmrg	RemoveFile($${TMP}); \						@@\
130311d341caSmrg	echo .so `basename destdir`/file.$(MANSUFFIX) > $${TMP}; \	@@\
130411d341caSmrg	for i in aliases; do (set -x; \					@@\
130511d341caSmrg	$(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $${TMP} $(DESTDIR)destdir/$$i.$(MANSUFFIX)); \ @@\
130611d341caSmrg	done; \								@@\
130711d341caSmrg	RemoveFile($${TMP}))
130811d341caSmrg#endif /* InstallManPageAliases */
130911d341caSmrg
131011d341caSmrg
131111d341caSmrg/*
131211d341caSmrg * InstallGenManPageLong - More general rules for installing manual pages --
131311d341caSmrg * doesn't assume MANSUFFIX.
131411d341caSmrg */
131511d341caSmrg#ifndef InstallGenManPageLong
131611d341caSmrg#define	InstallGenManPageLong(file,destdir,dest,suffix)			@@\
131711d341caSmrgBuildInstallHtmlManPage(file,dest,suffix)				@@\
131811d341caSmrg									@@\
131911d341caSmrgCppManTarget(file, $(EXTRAMANDEFS))					@@\
132011d341caSmrg									@@\
132111d341caSmrginstall.man:: file.$(MANNEWSUFFIX)					@@\
132211d341caSmrg	MakeDir($(DESTDIR)destdir)					@@\
132311d341caSmrg	$(INSTALL) -c $(INSTMANFLAGS) file.$(MANNEWSUFFIX) \		@@\
132411d341caSmrg		$(DESTDIR)destdir/dest.suffix
132511d341caSmrg#endif /* InstallGenManPageLong */
132611d341caSmrg
132711d341caSmrg
132811d341caSmrg/*
132911d341caSmrg * InstallGenManPageAliases - general equivalent of InstallManPageAliases
133011d341caSmrg */
133111d341caSmrg#ifndef InstallGenManPageAliases
133211d341caSmrg#define	InstallGenManPageAliases(file,destdir,suffix,aliases)		@@\
133311d341caSmrgInstallHtmlManPageAliases(file,aliases,suffix)				@@\
133411d341caSmrg									@@\
133511d341caSmrginstall.man::								@@\
133611d341caSmrg	@(TMP="#tmp.$$$$"; \						@@\
133711d341caSmrg	RemoveFile($${TMP}); \						@@\
133811d341caSmrg	echo .so `basename destdir`/file.suffix > $${TMP}; \		@@\
133911d341caSmrg	for i in aliases; do (set -x; \					@@\
134011d341caSmrg	$(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $${TMP} $(DESTDIR)destdir/$$i.suffix); \ @@\
134111d341caSmrg	done; \								@@\
134211d341caSmrg	RemoveFile($${TMP}))
134311d341caSmrg#endif /* InstallGenManPageAliases */
134411d341caSmrg
134511d341caSmrg#else /* CompressManPages */
134611d341caSmrg
134711d341caSmrg#ifndef InstallManPageLong
134811d341caSmrg#define InstallManPageLong(file,destdir,dest)				@@\
134911d341caSmrgBuildInstallHtmlManPage(file,dest,$(MANSUFFIX))				@@\
135011d341caSmrg									@@\
135111d341caSmrgCppManTarget(file, $(EXTRAMANDEFS))					@@\
135211d341caSmrg									@@\
135311d341caSmrginstall.man:: file.$(MANNEWSUFFIX)					@@\
135411d341caSmrg	MakeDir($(DESTDIR)destdir)					@@\
135511d341caSmrg	$(RM) $(DESTDIR)destdir/dest.$(MANSUFFIX)*			@@\
135611d341caSmrg	$(INSTALL) -c $(INSTMANFLAGS) file.$(MANNEWSUFFIX) \		@@\
135711d341caSmrg	  $(DESTDIR)destdir/dest.$(MANSUFFIX)				@@\
135811d341caSmrg	-$(COMPRESSMANCMD) $(DESTDIR)destdir/dest.$(MANSUFFIX)
135911d341caSmrg#endif
136011d341caSmrg
136111d341caSmrg#ifndef InstallGenManPageLong
136211d341caSmrg#define InstallGenManPageLong(file,destdir,dest,suffix)			@@\
136311d341caSmrgBuildInstallHtmlManPage(file,dest,suffix)				@@\
136411d341caSmrg									@@\
136511d341caSmrgCppManTarget(file, $(EXTRAMANDEFS))					@@\
136611d341caSmrg									@@\
136711d341caSmrginstall.man:: file.$(MANNEWSUFFIX)					@@\
136811d341caSmrg	MakeDir($(DESTDIR)destdir)					@@\
136911d341caSmrg	$(RM) $(DESTDIR)destdir/dest.suffix*				@@\
137011d341caSmrg	$(INSTALL) -c $(INSTMANFLAGS) file.$(MANNEWSUFFIX) \		@@\
137111d341caSmrg	  $(DESTDIR)destdir/dest.suffix					@@\
137211d341caSmrg	-$(COMPRESSMANCMD) $(DESTDIR)destdir/dest.suffix
137311d341caSmrg#endif
137411d341caSmrg
137511d341caSmrg#ifndef InstallMultipleMan
137611d341caSmrg#define InstallMultipleMan(list,dest)					@@\
137711d341caSmrginstall.man:: list							@@\
137811d341caSmrg	MakeDir($(DESTDIR)dest)						@@\
137911d341caSmrg	@case '${MFLAGS}' in *[i]*) set +e;; esac; \			@@\
138011d341caSmrg	for i in list; do \						@@\
138111d341caSmrg		(MNAME=`echo $$i | cut -f1 -d.`; \			@@\
138211d341caSmrg		set -x;	\						@@\
138311d341caSmrg		$(RM) $(DESTDIR)dest/$${MNAME}*; \			@@\
138411d341caSmrg		$(INSTALL) -c $(INSTMANFLAGS) $$i \			@@\
138511d341caSmrg		  $(DESTDIR)dest/$${MNAME}.$(MANSUFFIX); \		@@\
138611d341caSmrg		$(COMPRESSMANCMD) $(DESTDIR)dest/$${MNAME}.$(MANSUFFIX)); \ @@\
138711d341caSmrg	done
138811d341caSmrg#endif
138911d341caSmrg
139011d341caSmrg/*
139111d341caSmrg * InstallManPageAliases - install soft links for aliases.
139211d341caSmrg */
139311d341caSmrg#ifndef InstallManPageAliasesBase
139411d341caSmrg#define InstallManPageAliasesBase(file,destdir,aliases)			@@\
139511d341caSmrginstall.man::								@@\
139611d341caSmrg	@(SUFFIX=`echo $(DESTDIR)destdir/file.* | sed -e 's,.*/[^\.]*.,,'`; \ @@\
139711d341caSmrg	for i in aliases; do (set -x; \					@@\
139811d341caSmrg	$(RM) $(DESTDIR)destdir/$$i.*; \				@@\
139911d341caSmrg	(cd $(DESTDIR)destdir; $(LN) file.$${SUFFIX} \			@@\
140011d341caSmrg	$$i.$${SUFFIX})); \						@@\
140111d341caSmrg	done)
140211d341caSmrg#endif
140311d341caSmrg
140411d341caSmrg#ifndef InstallManPageAliases
140511d341caSmrg#define InstallManPageAliases(file,destdir,aliases)			@@\
140611d341caSmrgInstallHtmlManPageAliases(file,aliases,$(MANSUFFIX))			@@\
140711d341caSmrg									@@\
140811d341caSmrgInstallManPageAliasesBase(file,destdir,aliases)
140911d341caSmrg#endif
141011d341caSmrg
141111d341caSmrg
141211d341caSmrg/*
141311d341caSmrg * InstallGenManPageAliases - install soft links for aliases.
141411d341caSmrg */
141511d341caSmrg#ifndef InstallGenManPageAliases
141611d341caSmrg#define InstallGenManPageAliases(file,destdir,suffix,aliases)		@@\
141711d341caSmrgInstallHtmlManPageAliases(file,aliases,suffix)				@@\
141811d341caSmrg									@@\
141911d341caSmrgInstallManPageAliasesBase(file,destdir,aliases)
142011d341caSmrg#endif
142111d341caSmrg
142211d341caSmrg#endif /* CompressManPages */
142311d341caSmrg
142411d341caSmrg
142511d341caSmrg/*
142611d341caSmrg * InstallManPage - generate rules to install the indicated manual page.
142711d341caSmrg */
142811d341caSmrg#ifndef InstallManPage
142911d341caSmrg#define	InstallManPage(file,destdir)					@@\
143011d341caSmrgInstallManPageLong(file,destdir,file)
143111d341caSmrg#endif /* InstallManPage */
143211d341caSmrg
143311d341caSmrg
143411d341caSmrg/*
143511d341caSmrg * InstallGenManPage - general equivalent of InstallManPage
143611d341caSmrg */
143711d341caSmrg#ifndef InstallGenManPage
143811d341caSmrg#define	InstallGenManPage(file,destdir,suffix)				@@\
143911d341caSmrgInstallGenManPageLong(file,destdir,file,suffix)
144011d341caSmrg#endif /* InstallGenManPage */
144111d341caSmrg
144211d341caSmrg
144311d341caSmrg/*
144411d341caSmrg * RmanDependency - generate rules to build the rman program if
144511d341caSmrg * this Imakefile is within the source tree.
144611d341caSmrg */
144711d341caSmrg#ifndef RmanDependency
144811d341caSmrg#ifdef UseInstalled
144911d341caSmrg#define RmanDependency() /**/
145011d341caSmrg#else
145111d341caSmrg#define RmanDependency()						@@\
145211d341caSmrgNoCmpScript(ProgramTargetName($(RMAN)))					@@\
145311d341caSmrg									@@\
145411d341caSmrgProgramTargetName($(RMAN)):						@@\
145511d341caSmrg	@echo "checking $(RMANBASENAME) over in $(TOP)/config/util first..."; \	@@\
145611d341caSmrg	cd $(TOP)/config/util && $(MAKE) rmanonly; \			@@\
145711d341caSmrg	echo "okay, continuing in $(CURRENT_DIR)"
145811d341caSmrg
145911d341caSmrg#endif /* UseInstalled */
146011d341caSmrg#endif /* RmanDependency */
146111d341caSmrg
146211d341caSmrg#ifndef RmanCmdDependency
146311d341caSmrg#ifdef UseInstalled
146411d341caSmrg#define RmanCmdDependency	/**/
146511d341caSmrg#else
146611d341caSmrg#define RmanCmdDependency	ProgramTargetName($(RMAN))
146711d341caSmrg#endif
146811d341caSmrg#endif
146911d341caSmrg
147011d341caSmrg#ifndef BuildInstallHtmlManPage
147111d341caSmrg#if BuildHtmlManPages
147211d341caSmrg#define BuildInstallHtmlManPage(file,dest,suffix)			@@\
147311d341caSmrgAllTarget(dest.suffix.html)						@@\
147411d341caSmrg									@@\
147511d341caSmrgdest.suffix.html: file.$(MANNEWSUFFIX) RmanCmdDependency		@@\
147611d341caSmrg	RemoveFiles(dest.suffix.html dest.suffix-html)			@@\
147711d341caSmrg	RunProgram(RMAN,$(RMANOPTIONS) < file.$(MANNEWSUFFIX) \		@@\
147811d341caSmrg	  > dest.suffix-html) && $(MV) dest.suffix-html $@		@@\
147911d341caSmrg									@@\
148011d341caSmrginstall.man:: dest.suffix.html						@@\
148111d341caSmrg	MakeDir($(DESTDIR)$(DOCHTMLDIR))				@@\
148211d341caSmrg	@(SUF=`expr suffix \: '\(.\)'`; \				@@\
148311d341caSmrg	 set -x; \							@@\
148411d341caSmrg	 $(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) dest.suffix.html $(DESTDIR)$(DOCHTMLDIR)/dest.$$SUF.html)	@@\
148511d341caSmrg									@@\
148611d341caSmrgclean::									@@\
148711d341caSmrg	RemoveFiles(dest.suffix.html dest.suffix-html)
148811d341caSmrg#else
148911d341caSmrg#define BuildInstallHtmlManPage(file,dest,suffix) /**/
149011d341caSmrg#endif
149111d341caSmrg#endif
149211d341caSmrg
149311d341caSmrg#ifndef InstallHtmlManPageAliases
149411d341caSmrg#if BuildHtmlManPages
149511d341caSmrg#define InstallHtmlManPageAliases(file,aliases,suffix)			@@\
149611d341caSmrginstall.man:: file.suffix.html						@@\
149711d341caSmrg	MakeDir($(DESTDIR)$(DOCHTMLDIR))				@@\
149811d341caSmrg	@SUF=`expr suffix \: '\(.\)'`; \				@@\
149911d341caSmrg	for i in aliases; do (set -x; \					@@\
150011d341caSmrg	  RemoveFile($(DESTDIR)$(DOCHTMLDIR)/$$i.$$SUF.html); \		@@\
150111d341caSmrg	  (cd $(DESTDIR)$(DOCHTMLDIR); \				@@\
150211d341caSmrg	    $(LN) file.$$SUF.html $$i.$$SUF.html)); \			@@\
150311d341caSmrg	done
150411d341caSmrg#else
150511d341caSmrg#define InstallHtmlManPageAliases(file,aliases,suffix) /**/
150611d341caSmrg#endif
150711d341caSmrg#endif
150811d341caSmrg
150911d341caSmrg#ifndef HtmlManIndex
151011d341caSmrg#if BuildHtmlManPages
151111d341caSmrg#define HtmlManIndex							@@\
151211d341caSmrghtml_index::								@@\
151311d341caSmrg	MakeDir($(DESTDIR)$(DOCHTMLDIR))				@@\
151411d341caSmrg	$(HTMLINDEXCMD) $(DESTDIR)$(DOCHTMLDIR)
151511d341caSmrg#else
151611d341caSmrg#define HtmlManIndex	html_index::
151711d341caSmrg#endif
151811d341caSmrg#endif
151911d341caSmrg
152011d341caSmrg
152111d341caSmrg/*
152211d341caSmrg * ManKeywordsTarget - generate the database used by "man -k".
152311d341caSmrg * This rule updates the index in the directory "manpath", which
152411d341caSmrg * indexes all the manual pages in the section subdirectories under
152511d341caSmrg * it.  An update command is defined only on systems that have a
152611d341caSmrg * per MANPATH element index.  If the OS supports only one system-wide
152711d341caSmrg * database, we don't update it, because then we can't do cross
152811d341caSmrg * installations or use a non-empty DESTDIR for testing.
152911d341caSmrg */
153011d341caSmrg#ifndef ManKeywordsTarget
153111d341caSmrg#define ManKeywordsTarget(manpath) man_keywords::
153211d341caSmrg#endif
153311d341caSmrg
153411d341caSmrg/*
153511d341caSmrg * InstallNamedNonExec - generate rules to install a data file
153611d341caSmrg */
153711d341caSmrg#ifndef InstallNamedNonExec
153811d341caSmrg#define	InstallNamedNonExec(srcname,dstname,dest)			@@\
153911d341caSmrgInstallNamedTarget(install,srcname,$(INSTDATFLAGS),dest,dstname)
154011d341caSmrg#endif /* InstallNamedNonExec */
154111d341caSmrg
154211d341caSmrg
154311d341caSmrg/*
154411d341caSmrg * InstallDriverSDKNamedNonExec - rule for installing server Driver SDK files.
154511d341caSmrg *                         (only used for XFree86). This is a no-op
154611d341caSmrg *                         rule so that Imakefiles on non-XFree86 systems
154711d341caSmrg *                         continue to build Makefiles correctly.
154811d341caSmrg */
154911d341caSmrg#ifndef InstallDriverSDKNamedNonExec
155011d341caSmrg#define InstallDriverSDKNamedNonExec(srcname,dstname,dest)
155111d341caSmrg#endif
155211d341caSmrg
155311d341caSmrg
155411d341caSmrg/*
155511d341caSmrg * InstallNonExecFile - generate rules to install a data file
155611d341caSmrg */
155711d341caSmrg#ifndef InstallNonExecFile
155811d341caSmrg#define InstallNonExecFile(file,dest)					@@\
155911d341caSmrgInstallTarget(install,file,$(INSTDATFLAGS),dest)
156011d341caSmrg#endif /* InstallNonExecFile */
156111d341caSmrg
156211d341caSmrg
156311d341caSmrg/*
156411d341caSmrg * InstallNonExecFileNoClobber - install a data file once
156511d341caSmrg */
156611d341caSmrg#ifndef InstallNonExecFileNoClobber
156711d341caSmrg#define InstallNonExecFileNoClobber(file,dest)				@@\
156811d341caSmrgInstallNamedTargetNoClobber(install,file,$(INSTDATFLAGS),dest,file)
156911d341caSmrg#endif /* InstallNonExecFileNoClobber */
157011d341caSmrg
157111d341caSmrg
157211d341caSmrg/*
157311d341caSmrg * InstallDriverSDKNonExecFile - rule for installing server Driver SDK files.
157411d341caSmrg *                         (only used for XFree86). This is a no-op
157511d341caSmrg *                         rule so that Imakefiles on non-XFree86 systems
157611d341caSmrg *                         continue to build Makefiles correctly.
157711d341caSmrg */
157811d341caSmrg#ifndef InstallDriverSDKNonExecFile
157911d341caSmrg#define InstallDriverSDKNonExecFile(file,dir)
158011d341caSmrg#endif
158111d341caSmrg
158211d341caSmrg
158311d341caSmrg/*
158411d341caSmrg * InstallNonExec - generate rules to install a data file, but does not
158511d341caSmrg * try to create the destination directory (deprecated)
158611d341caSmrg */
158711d341caSmrg#ifndef InstallNonExec
158811d341caSmrg#define	InstallNonExec(file,dest)					@@\
158911d341caSmrginstall:: file								@@\
159011d341caSmrg	$(INSTALL) $(INSTALLFLAGS) $(INSTDATFLAGS) file $(DESTDIR)dest
159111d341caSmrg#endif /* InstallNonExec */
159211d341caSmrg
159311d341caSmrg
159411d341caSmrg/*
159511d341caSmrg * InstallProgramWithFlags - generate rules to install an executable program
159611d341caSmrg * using given install flags.
159711d341caSmrg */
159811d341caSmrg#ifndef InstallProgramWithFlags
159911d341caSmrg#if StripInstalledPrograms && CrossCompiling
160011d341caSmrg#define InstallProgramWithFlags(program,dest,flags)			@@\
160111d341caSmrgInstallTarget(install,ProgramTargetName(program),$(INSTPGMFLAGS) flags,dest) @@\
160211d341caSmrg	CrossStripCmd $(DESTDIR)dest/ProgramTargetName(program)
160311d341caSmrg#else
160411d341caSmrg#define InstallProgramWithFlags(program,dest,flags)			@@\
160511d341caSmrgInstallTarget(install,ProgramTargetName(program),$(INSTPGMFLAGS) flags,dest)
160611d341caSmrg#endif /* StripInstalledPrograms && CrossCompiling */
160711d341caSmrg#endif /* InstallProgramWithFlags */
160811d341caSmrg
160911d341caSmrg
161011d341caSmrg/*
161111d341caSmrg * InstallProgram - generate rules to install an executable program using any
161211d341caSmrg * special install flags set in $(INSTALLFLAGS).
161311d341caSmrg */
161411d341caSmrg#ifndef InstallProgram
161511d341caSmrg#define	InstallProgram(program,dest)					@@\
161611d341caSmrgInstallProgramWithFlags(program,dest,NullParameter)
161711d341caSmrg#endif /* InstallProgram */
161811d341caSmrg
161911d341caSmrg
162011d341caSmrg
162111d341caSmrg/*
162211d341caSmrg * InstallScript - install a shell script.
162311d341caSmrg */
162411d341caSmrg#ifndef InstallScript
162511d341caSmrg#define	InstallScript(program,dest)					@@\
162611d341caSmrgInstallNamedTarget(install,program.script,$(INSTBINFLAGS),dest,program)
162711d341caSmrg#endif /* InstallScript */
162811d341caSmrg
162911d341caSmrg
163011d341caSmrg/*
163111d341caSmrg * InstallNamedProg - install a program with renaming and no stripping.
163211d341caSmrg */
163311d341caSmrg#ifndef InstallNamedProg
163411d341caSmrg#define InstallNamedProg(srcname,dstname,dest)				@@\
163511d341caSmrgInstallNamedTarget(install,srcname,$(INSTBINFLAGS),dest,dstname)
163611d341caSmrg#endif /* InstallNamedProg */
163711d341caSmrg
163811d341caSmrg
163911d341caSmrg/*
164011d341caSmrg * InstallNamedProgNoClobber - Like InstallNamedProg, but doesn't
164111d341caSmrg * do the install if an installed version already exists.
164211d341caSmrg */
164311d341caSmrg#ifndef InstallNamedProgNoClobber
164411d341caSmrg#define InstallNamedProgNoClobber(srcname,dstname,dest)			@@\
164511d341caSmrgInstallNamedTargetNoClobber(install,srcname,$(INSTBINFLAGS),dest,dstname)
164611d341caSmrg#endif /* InstallNamedProgNoClobber */
164711d341caSmrg
164811d341caSmrg
164911d341caSmrg/*
165011d341caSmrg * InstallDriverSDKNamedProg - rule for installing server Driver SDK files.
165111d341caSmrg *                         (only used for XFree86). This is a no-op
165211d341caSmrg *                         rule so that Imakefiles on non-XFree86 systems
165311d341caSmrg *                         continue to build Makefiles correctly.
165411d341caSmrg */
165511d341caSmrg#ifndef InstallDriverSDKNamedProg
165611d341caSmrg#define InstallDriverSDKNamedProg(srcname,dstname,dest)
165711d341caSmrg#endif
165811d341caSmrg
165911d341caSmrg
166011d341caSmrg/*
166111d341caSmrg * MakeFlagsToShellFlags - set variables before starting a loop.
166211d341caSmrg * makeflags is the set of "make" flags to check.
166311d341caSmrg * shellcmd is the shell command to execute if any of the flags are set.
166411d341caSmrg *
166511d341caSmrg * The usual use of this rule is to translate make's "don't quit on error"
166611d341caSmrg * flags into the equivalent for the shell.  To do this, "make -i" always
166711d341caSmrg * becomes "set +e".  "make -k" should also turn on "set +e" if the target
166811d341caSmrg * is building subdirectories.  That is, subdirectories are independent
166911d341caSmrg * and should appear to be multiple targets, even though they are
167011d341caSmrg * implemented in a loop in a single target.
167111d341caSmrg */
167211d341caSmrg#ifndef MakeFlagsToShellFlags
167311d341caSmrg#define MakeFlagsToShellFlags(makeflags,shellcmd)\
167411d341caSmrg	for flag in ${MAKEFLAGS} ''; do \				@@\
167511d341caSmrg	  case "$$flag" in *=*) ;; --*) ;; *[makeflags]*) shellcmd;; esac; done
167611d341caSmrg#endif
167711d341caSmrg
167811d341caSmrg/*
167911d341caSmrg * MakeNamedTargetSubdir - do make in a subdir.
168011d341caSmrg */
168111d341caSmrg#ifndef MakeNamedTargetSubdir
168211d341caSmrg#define MakeNamedTargetSubdir(dir,flags,subname)\
168311d341caSmrg		(cd dir && $(MAKE) $(MFLAGS) $(PARALLELMFLAGS) \	@@\
168411d341caSmrg			flags subname)
168511d341caSmrg#endif
168611d341caSmrg
168711d341caSmrg/*
168811d341caSmrg * LinkFileList - link a list of files from one place to another
168911d341caSmrg */
169011d341caSmrg#ifndef LinkFileList
169111d341caSmrg#define LinkFileList(step,list,dir,sub)					@@\
169211d341caSmrgstep::									@@\
169311d341caSmrg	@MakeFlagsToShellFlags(i,set +e); \				@@\
169411d341caSmrg	echo "	cd" dir; cd dir && \					@@\
169511d341caSmrg	for i in list; do (set -x; $(LN) -f sub/$$i .); done
169611d341caSmrg#endif
169711d341caSmrg
169811d341caSmrg
169911d341caSmrg/*
170011d341caSmrg * LinkConfDirectoryLong
170111d341caSmrg *
170211d341caSmrg * Make links from opath (usually <ProjectRoot>/lib/X11) to npath
170311d341caSmrg * For example /usr/X11R6/lib/X11/xdm ==> /etc/X11/xdm so that X
170411d341caSmrg * binaries can be mounted from a read-only volume like a CD-ROM;
170511d341caSmrg * but files that may need to be edited can be stored locally on
170611d341caSmrg * read-write media. If someone has an existing installation, be
170711d341caSmrg * careful and move existing files to the new location in /etc.
170811d341caSmrg * XXX Need to make the installation script do this when installing
170911d341caSmrg * binary distributions.
171011d341caSmrg *
171111d341caSmrg * Since the link is used in the installation process, we need to
171211d341caSmrg * make the link relative in order to honor $(DESTDIR) if it is set.
171311d341caSmrg *
171411d341caSmrg * Note: The sed script used here is not completely general.  It assumes
171511d341caSmrg * that no elements of the path are '..', and that none start with '.'
171611d341caSmrg * that aren't just '.'.
171711d341caSmrg *
171811d341caSmrg * For a more general solution $(REVPATH) could be used.  Even though
171911d341caSmrg * it was intended for something a little different, it does do what is
172011d341caSmrg * required here.
172111d341caSmrg *
172211d341caSmrg */
172311d341caSmrg#ifndef LinkConfDirectoryLong
172411d341caSmrg#if UseSeparateConfDir && HasSymLinks
172511d341caSmrg#define LinkConfDirectoryLong(mdir,cdir,rdir,ldir,opath,npath)		@@\
172611d341caSmrginstall::								@@\
172711d341caSmrg	@MakeFlagsToShellFlags(i,set +e); \				@@\
172811d341caSmrg	if [ -h Concat($(DESTDIR),npath/mdir) ]; then \			@@\
172911d341caSmrg	  $(RM) Concat($(DESTDIR),npath/mdir); \			@@\
173011d341caSmrg	fi								@@\
173111d341caSmrg	MakeDir(Concat($(DESTDIR),opath/cdir))				@@\
173211d341caSmrg	MakeDir(Concat($(DESTDIR),npath/mdir))				@@\
173311d341caSmrg	@MakeFlagsToShellFlags(i,set +e); \				@@\
173411d341caSmrg	if [ -d Concat($(DESTDIR),opath/cdir) ]; then \			@@\
173511d341caSmrg	  RELPATH=`echo opath/cdir | \					@@\
173611d341caSmrg		sed -e 's:^/::' -e 's:[^/.][^/]*:..:'g -e 's:/\.$$::'`; \ @@\
173711d341caSmrg	  cd Concat($(DESTDIR),opath/cdir); \				@@\
173811d341caSmrg	  if [ -d rdir -a ! -h rdir ]; then \				@@\
173911d341caSmrg	    (cd rdir; tar cf - . | \					@@\
174011d341caSmrg		(cd Concat($(DESTDIR),npath/mdir); \			@@\
174111d341caSmrg		 tar xf -; exit 0); exit 0); \				@@\
174211d341caSmrg	  fi; \								@@\
174311d341caSmrg	  $(RM) -r rdir; \						@@\
174411d341caSmrg	  $(LN) Concat($${RELPATH},npath/mdir) ldir; \			@@\
174511d341caSmrg	fi
174611d341caSmrg#else
174711d341caSmrg#define LinkConfDirectoryLong(mdir,cdir,rdir,ldir,opath,npath)
174811d341caSmrg#endif
174911d341caSmrg#endif
175011d341caSmrg
175111d341caSmrg#ifndef LinkConfDirectory
175211d341caSmrg#define LinkConfDirectory(mdir,cdir,rdir,ldir) LinkConfDirectoryLong(mdir,cdir,rdir,ldir,$(LIBDIR),$(CONFDIR))
175311d341caSmrg#endif
175411d341caSmrg
175511d341caSmrg#ifndef LinkVarDirectory
175611d341caSmrg#define LinkVarDirectory(mdir,cdir,rdir,ldir) LinkConfDirectoryLong(mdir,cdir,rdir,ldir,$(LIBDIR),$(VARDIR))
175711d341caSmrg#endif
175811d341caSmrg
175911d341caSmrg/*
176011d341caSmrg * LinkConfFileLong
176111d341caSmrg *
176211d341caSmrg * Make links from opath (<ProjectRoot>/lib/X11) to npath
176311d341caSmrg * For example /usr/X11R6/lib/X11/xxx ==> /etc/X11/xxx so that X binaries
176411d341caSmrg * can be mounted from a read-only volume like a CD-ROM;
176511d341caSmrg * but files that may need to be edited can be stored locally on
176611d341caSmrg * read-write media. If someone has an existing installation, be
176711d341caSmrg * careful and move existing files to the new location in /etc.
176811d341caSmrg * XXX Need to make the installation script do this when installing
176911d341caSmrg * binary distributions.
177011d341caSmrg *
177111d341caSmrg * Since the link is used in the installation process, we need to
177211d341caSmrg * make the link relative in order to honor $(DESTDIR) if it is set.
177311d341caSmrg */
177411d341caSmrg#ifndef LinkConfFileLong
177511d341caSmrg#if UseSeparateConfDir && HasSymLinks
177611d341caSmrg#define LinkConfFileLong(cfile,lfile,opath,npath)			@@\
177711d341caSmrginstall::								@@\
177811d341caSmrg	MakeDir(Concat($(DESTDIR),opath))				@@\
177911d341caSmrg	MakeDir(Concat($(DESTDIR),npath))				@@\
178011d341caSmrg	@MakeFlagsToShellFlags(i,set +e); \				@@\
178111d341caSmrg	if [ -d Concat($(DESTDIR),opath) ]; then \			@@\
178211d341caSmrg	  RELPATH=`echo opath | \					@@\
178311d341caSmrg		sed -e 's:^.::' -e 's:[^/.][^/]*:..:'g`; \		@@\
178411d341caSmrg	  cd Concat($(DESTDIR),opath); \				@@\
178511d341caSmrg	  if [ -f lfile -a ! -h lfile ]; then \				@@\
178611d341caSmrg	    cp -p lfile Concat($(DESTDIR),npath/cfile); \		@@\
178711d341caSmrg	  fi; \								@@\
178811d341caSmrg	  $(RM) -r lfile; \						@@\
178911d341caSmrg	  $(LN) Concat($${RELPATH},npath/cfile) lfile; \		@@\
179011d341caSmrg	fi
179111d341caSmrg#else
179211d341caSmrg#define LinkConfFileLong(cfile,lfile,opath,npath)
179311d341caSmrg#endif
179411d341caSmrg#endif
179511d341caSmrg
179611d341caSmrg
179711d341caSmrg#ifndef LinkConfFile
179811d341caSmrg#define LinkConfFile(cfile,lfile) LinkConfFileLong(cfile,lfile,$(LIBDIR),$(CONFDIR))
179911d341caSmrg#endif
180011d341caSmrg
180111d341caSmrg/*
180211d341caSmrg * InstallMultipleDestFlags - generate rules to install multiple files at
180311d341caSmrg * once during a particular step in the build using a specific set of install
180411d341caSmrg * flags.
180511d341caSmrg */
180611d341caSmrg#ifndef InstallMultipleDestFlags
180711d341caSmrg#define InstallMultipleDestFlags(step,list,dest,flags)			@@\
180811d341caSmrgstep:: list								@@\
180911d341caSmrg	MakeDir($(DESTDIR)dest)						@@\
181011d341caSmrg	@MakeFlagsToShellFlags(i,set +e); \				@@\
181111d341caSmrg	for i in list; do \						@@\
181211d341caSmrg		(set -x; $(INSTALL) $(INSTALLFLAGS) flags $$i $(DESTDIR)dest); \	@@\
181311d341caSmrg	done
181411d341caSmrg#endif /* InstallMultipleDestFlags */
181511d341caSmrg
181611d341caSmrg
181711d341caSmrg/*
181811d341caSmrg * InstallDriverSDKMultipleDestFlags - rule for installing server Driver SDK
181911d341caSmrg *                         files. (only used for XFree86). This is a no-op
182011d341caSmrg *                         rule so that Imakefiles on non-XFree86 systems
182111d341caSmrg *                         continue to build Makefiles correctly.
182211d341caSmrg */
182311d341caSmrg#ifndef InstallDriverSDKMultipleDestFlags
182411d341caSmrg#define InstallDriverSDKMultipleDestFlags(list,dest,flags)
182511d341caSmrg#endif
182611d341caSmrg
182711d341caSmrg
182811d341caSmrg/*
182911d341caSmrg * InstallMultipleDest - generate rules to install multiple files at once
183011d341caSmrg * during a particular step in the build using any install flags set in
183111d341caSmrg * $(INSTDATFLAGS).
183211d341caSmrg */
183311d341caSmrg#ifndef InstallMultipleDest
183411d341caSmrg#define InstallMultipleDest(step,list,dest)				@@\
183511d341caSmrgInstallMultipleDestFlags(step,list,dest,$(INSTDATFLAGS))
183611d341caSmrg#endif /* InstallMultipleDest */
183711d341caSmrg
183811d341caSmrg/*
183911d341caSmrg * InstallMultiple - generate rules to install multiple files at once
184011d341caSmrg * during the install step of the build using any install flags set in
184111d341caSmrg * $(INSTALLFLAGS).
184211d341caSmrg */
184311d341caSmrg#ifndef InstallMultiple
184411d341caSmrg#define	InstallMultiple(list,dest)					@@\
184511d341caSmrgInstallMultipleDest(install,list,dest)
184611d341caSmrg#endif /* InstallMultiple */
184711d341caSmrg
184811d341caSmrg
184911d341caSmrg/*
185011d341caSmrg * InstallMultipleFlags - generate rules to install multiple files at once
185111d341caSmrg * during the install step of the build using the given install flags.
185211d341caSmrg */
185311d341caSmrg#ifndef InstallMultipleFlags
185411d341caSmrg#define InstallMultipleFlags(list,dest,flags)				@@\
185511d341caSmrgInstallMultipleDestFlags(install,list,dest,flags)
185611d341caSmrg#endif /* InstallMultipleFlags */
185711d341caSmrg
185811d341caSmrg
185911d341caSmrg/*
186011d341caSmrg * InstallMultipleMan - generate rules to install a variety of manual pages
186111d341caSmrg * during the install.man step of the build.
186211d341caSmrg */
186311d341caSmrg#ifndef InstallMultipleMan
186411d341caSmrg#define InstallMultipleMan(list,dest)					@@\
186511d341caSmrgInstallMultipleDestFlags(install.man,list,dest,$(INSTMANFLAGS))
186611d341caSmrg#endif /* InstallMultipleMan */
186711d341caSmrg
186811d341caSmrg/*
186911d341caSmrg * InstallMultipleManSuffix - generate rules to install multiple manual
187011d341caSmrg * pages dufing the install.man step of the build, where
187111d341caSmrg * the target files have the suffix given.
187211d341caSmrg */
187311d341caSmrg#ifndef InstallMultipleManSuffix
187411d341caSmrg#define InstallMultipleManSuffix(list,dest,suffix)			@@\
187511d341caSmrginstall.man::								@@\
187611d341caSmrg	MakeDir($(DESTDIR)dest)						@@\
187711d341caSmrg	@MakeFlagsToShellFlags(i,set +e); \				@@\
187811d341caSmrg	for i in list; do \						@@\
187911d341caSmrg	  (set -x; $(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $$i.suffix $(DESTDIR)dest/$$i.$(MANSUFFIX)); \	@@\
188011d341caSmrg	done
188111d341caSmrg#endif /* InstallMultipleManSuffix */
188211d341caSmrg
188311d341caSmrg
188411d341caSmrg/*
188511d341caSmrg * IncludeMakefile - rule to include another Makefile.
188611d341caSmrg * Must not generate an error or even a warning if the named file
188711d341caSmrg * is not present, since we use this to include Makefile.dep, which
188811d341caSmrg * may not be built yet.
188911d341caSmrg * This is defined non-null iff HasMakefileSafeInclude is YES.
189011d341caSmrg * The double-@ is to ensure no leading spaces on the line.
189111d341caSmrg */
189211d341caSmrg#ifndef IncludeMakefile
189311d341caSmrg#if HasClearmake
189411d341caSmrg#define IncludeMakefile(file) @@sinclude file
189511d341caSmrg#else
189611d341caSmrg#if HasBsdMake
189711d341caSmrg#define IncludeMakefile(file) @@# dependencies are in .depend
189811d341caSmrg#else
189911d341caSmrg#define IncludeMakefile(file) /**/
190011d341caSmrg#endif
190111d341caSmrg#endif
190211d341caSmrg#endif
190311d341caSmrg
190411d341caSmrg/*
190511d341caSmrg * DependDependencyStatement - Used by DependDependency to set up the
190611d341caSmrg * most specific dependency, which differs based on whether we support
190711d341caSmrg * a separate Makefile.dep on this platform.
190811d341caSmrg */
190911d341caSmrg#ifndef DependDependencyStatement
191011d341caSmrg#if HasMakefileSafeInclude
191111d341caSmrg#define DependDependencyStatement()					@@\
191211d341caSmrgDependFileName:: ProgramTargetName($(DEPEND))
191311d341caSmrg#else
191411d341caSmrg#define DependDependencyStatement()					@@\
191511d341caSmrgdepend:: ProgramTargetName($(DEPEND))
191611d341caSmrg#endif
191711d341caSmrg#endif
191811d341caSmrg
191911d341caSmrg/*
192011d341caSmrg * DependDependency - generate rules to build the makedepend program if
192111d341caSmrg * this Imakefile is within the source tree.
192211d341caSmrg */
192311d341caSmrg#ifndef DependDependency
192411d341caSmrg#ifdef UseInstalled
192511d341caSmrg#define DependDependency() /**/
192611d341caSmrg#else
192711d341caSmrg#define DependDependency()						@@\
192811d341caSmrgDependDependencyStatement()						@@\
192911d341caSmrg									@@\
193011d341caSmrgNoCmpScript(ProgramTargetName($(DEPEND)))				@@\
193111d341caSmrg									@@\
193211d341caSmrgProgramTargetName($(DEPEND)):						@@\
193311d341caSmrg	@echo "checking $@ over in $(DEPENDSRC) first..."; \		@@\
193411d341caSmrg	cd $(DEPENDSRC) && $(MAKE) makedependonly; \			@@\
193511d341caSmrg	echo "okay, continuing in $(CURRENT_DIR)"
193611d341caSmrg
193711d341caSmrg#endif /* UseInstalled */
193811d341caSmrg#endif /* DependDependency */
193911d341caSmrg
194011d341caSmrg
194111d341caSmrg/*
194211d341caSmrg * DependTarget - generate rules to compute dependencies for all files listed
194311d341caSmrg * in $(SRCS).
194411d341caSmrg */
194511d341caSmrg#ifndef DependTarget
194611d341caSmrg#if HasMakefileSafeInclude
194711d341caSmrg#define DependTarget()							@@\
194811d341caSmrgDependDependency()							@@\
194911d341caSmrg									@@\
195011d341caSmrgdepend:: DependFileName							@@\
195111d341caSmrg									@@\
195211d341caSmrgDependFileName::							@@\
195311d341caSmrg	RemoveFile($@)							@@\
195411d341caSmrg	RunProgram(DEPEND,-f- $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- $(SRCS)) > $@
195511d341caSmrg#else /* HasMakefileSafeInclude */
195611d341caSmrg#define	DependTarget()							@@\
195711d341caSmrgDependDependency()							@@\
195811d341caSmrg									@@\
195911d341caSmrgdepend::								@@\
196011d341caSmrg	RunProgram(DEPEND,$(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- $(SRCS))
196111d341caSmrg#endif /* HasMakefileSafeInclude else */
196211d341caSmrg#endif /* DependTarget */
196311d341caSmrg
196411d341caSmrg/*
196511d341caSmrg * DependTarget3 - generate rules to compute dependencies for all files given.
196611d341caSmrg */
196711d341caSmrg#ifndef DependTarget3
196811d341caSmrg#if HasMakefileSafeInclude
196911d341caSmrg#define DependTarget3(srcs1,srcs2,srcs3)				@@\
197011d341caSmrgDependDependency()							@@\
197111d341caSmrg									@@\
197211d341caSmrgdepend:: DependFileName							@@\
197311d341caSmrg									@@\
197411d341caSmrgDependFileName::							@@\
197511d341caSmrg	RemoveFile($@)							@@\
197611d341caSmrg	RunProgram(DEPEND,-f- $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs1) > $@	@@\
197711d341caSmrg	RunProgram(DEPEND,-f- $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs2) >> $@	@@\
197811d341caSmrg	RunProgram(DEPEND,-f- $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs3) >> $@
197911d341caSmrg#else /* HasMakefileSafeInclude */
198011d341caSmrg#define	DependTarget3(srcs1,srcs2,srcs3)				@@\
198111d341caSmrgDependDependency()							@@\
198211d341caSmrg									@@\
198311d341caSmrgdepend::								@@\
198411d341caSmrg	RunProgram(DEPEND,$(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs1)	@@\
198511d341caSmrg	RunProgram(DEPEND,-a $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs2)	@@\
198611d341caSmrg	RunProgram(DEPEND,-a $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs3)
198711d341caSmrg#endif /* HasMakefileSafeInclude else */
198811d341caSmrg#endif /* DependTarget3 */
198911d341caSmrg
199011d341caSmrg
199111d341caSmrg/*
199211d341caSmrg * CleanTarget - generate rules to remove any garbage files
199311d341caSmrg */
199411d341caSmrg#ifndef CleanTarget
199511d341caSmrg#define	CleanTarget()							@@\
199611d341caSmrgclean::									@@\
199711d341caSmrg	$(RM) FilesToClean ExtraFilesToClean DocFilesToClean "#"*	@@\
199811d341caSmrg									@@\
199911d341caSmrgProofCleanTarget()
200011d341caSmrg#endif /* CleanTarget */
200111d341caSmrg
200211d341caSmrg
200311d341caSmrg/*
200411d341caSmrg * TagsTarget - generate rules to compute tags files for C source code.
200511d341caSmrg */
200611d341caSmrg#ifndef TagsTarget
200711d341caSmrg#define	TagsTarget()							@@\
200811d341caSmrgtags::									@@\
200911d341caSmrg	$(TAGS) -w *.[ch]						@@\
201011d341caSmrg	$(TAGS) -xw *.[ch] > TAGS
201111d341caSmrg#endif /* TagsTarget */
201211d341caSmrg
201311d341caSmrg
201411d341caSmrg/*
201511d341caSmrg * ImakeDependency - generate rules to compile imake if this Imakefile is
201611d341caSmrg * within the source tree.
201711d341caSmrg */
201811d341caSmrg#ifndef ImakeDependency
201911d341caSmrg#ifdef UseInstalled
202011d341caSmrg#define ImakeDependency(target) /**/
202111d341caSmrg#else
202211d341caSmrg#define ImakeDependency(target)						@@\
202311d341caSmrgtarget:: ProgramTargetName($(IMAKE))					@@\
202411d341caSmrg									@@\
202511d341caSmrgNoCmpScript(ProgramTargetName($(IMAKE)) $(IMAKE).Osuf)			@@\
202611d341caSmrg									@@\
202711d341caSmrgProgramTargetName($(IMAKE)) $(IMAKE).Osuf:				@@\
202811d341caSmrg	-@(cd $(IMAKESRC) && if [ -f Makefile ]; then \			@@\
202911d341caSmrg	echo "checking $@ in $(IMAKESRC) first..."; $(MAKE) imakeonly; else \	@@\
203011d341caSmrg	echo "bootstrapping $@ from Makefile.ini in $(IMAKESRC) first..."; \	@@\
203111d341caSmrg	$(MAKE) -f Makefile.ini BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"; fi; \	@@\
203211d341caSmrg	echo "okay, continuing in $(CURRENT_DIR)")
203311d341caSmrg#endif /* UseInstalled */
203411d341caSmrg#endif /* ImakeDependency */
203511d341caSmrg
203611d341caSmrg
203711d341caSmrg/*
203811d341caSmrg * BuildMakefileTarget - generate rules to build a Makefile from an Imakefile
203911d341caSmrg * and any special imake flags.  This is generally done automatically by the
204011d341caSmrg * template or by any special Imakefiles.  The first argument exists just
204111d341caSmrg * because imakeflags is usually empty and some preprocessors will complain
204211d341caSmrg * if an empty argument is passed as the sole argument to a macro.
204311d341caSmrg */
204411d341caSmrg#ifndef BuildMakefileTarget
204511d341caSmrg#define	BuildMakefileTarget(notused,imakeflags)				@@\
204611d341caSmrgImakeDependency(Makefile)						@@\
204711d341caSmrg									@@\
204811d341caSmrgMakefile::								@@\
204911d341caSmrg	RMoveToBakFile(Makefile)					@@\
205011d341caSmrg	$(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR) imakeflags
205111d341caSmrg
205211d341caSmrg#endif /* BuildMakefileTarget */
205311d341caSmrg
205411d341caSmrg
205511d341caSmrg/*
205611d341caSmrg * MakefileTarget - generate rules to build a normal Makefile.
205711d341caSmrg */
205811d341caSmrg#ifndef MakefileTarget
205911d341caSmrg#define MakefileTarget()						@@\
206011d341caSmrgBuildMakefileTarget(Imakefile,NullParameter)
206111d341caSmrg#endif /* MakefileTarget */
206211d341caSmrg
206311d341caSmrg
206411d341caSmrg/*
206511d341caSmrg * LibMkdir - helper for creating library object subdirectories
206611d341caSmrg */
206711d341caSmrg#ifndef LibMkdir
206811d341caSmrg#define LibMkdir(dir) DirFailPrefix@if [ -d dir ]; then exit 0; else set -x; mkdir dir; fi
206911d341caSmrg#endif
207011d341caSmrg
207111d341caSmrg#ifndef LibMkdirLinkSubdirs
207211d341caSmrg#define LibMkdirLinkSubdirs(dir) DirFailPrefix@if [ -d dir ]; then \	@@\
207311d341caSmrg	    exit 0; \							@@\
207411d341caSmrg	else \								@@\
207511d341caSmrg	    echo "mkdir dir"; mkdir dir; \				@@\
207611d341caSmrg	    for i in $(SUBDIRS); do \					@@\
207711d341caSmrg	      j=`echo "$$i" | sed -e 's;[^/]\{1,\};..;g'`; \		@@\
207811d341caSmrg	      if [ ! -d "dir/`dirname $$i`" ]; then \			@@\
207911d341caSmrg		$(MKDIRHIER) "dir/`dirname $$i`"; \			@@\
208011d341caSmrg	      fi; \							@@\
208111d341caSmrg	      echo $(LN) "$$j/$$i/dir" "dir/$$i"; \			@@\
208211d341caSmrg	      $(LN) "$$j/$$i/dir" "dir/$$i"; \				@@\
208311d341caSmrg	    done; \							@@\
208411d341caSmrg	fi
208511d341caSmrg#endif
208611d341caSmrg
208711d341caSmrg/*
208811d341caSmrg * LibCleanDir - helper for cleaning library object subdirectories
208911d341caSmrg */
209011d341caSmrg#ifndef LibCleanDir
209111d341caSmrg#define LibCleanDir(dir) -@if [ -d dir ]; then \			@@\
209211d341caSmrg		set -x; $(RM) -r dir; else exit 0; fi
209311d341caSmrg#endif
209411d341caSmrg
209511d341caSmrg/*
209611d341caSmrg * LintLibReferences - variables for lint libraries
209711d341caSmrg */
209811d341caSmrg#ifndef LintLibReferences
209911d341caSmrg#define LintLibReferences(varname,libname,libsource)			@@\
210011d341caSmrgConcat(LINT,varname) = _UseCat($(LINTLIBDIR)/llib-l,libsource/llib-,libname.ln)
210111d341caSmrg#endif
210211d341caSmrg
210311d341caSmrg
210411d341caSmrg/*
210511d341caSmrg * UnsharedLibReferences - variables for unshared libraries
210611d341caSmrg */
210711d341caSmrg#ifndef UnsharedLibReferences
210811d341caSmrg#define UnsharedLibReferences(varname,libname,libsource)		@@\
210911d341caSmrgProjectUnsharedLibReferences(varname,libname,libsource,$(BUILDLIBDIR))
211011d341caSmrg#endif
211111d341caSmrg
211211d341caSmrg/*
211311d341caSmrg * ProjectUnsharedLibReferences - variables for unshared libraries
211411d341caSmrg */
211511d341caSmrg#ifndef ProjectUnsharedLibReferences
211611d341caSmrg#define ProjectUnsharedLibReferences(varname,libname,libsource,buildlibdir)	@@\
211711d341caSmrgConcat3(DEP,varname,LIB) = _UseCat($(USRLIBDIR)/,buildlibdir/,LibraryTargetName(libname))	@@\
211811d341caSmrgConcat(varname,LIB) = LoaderLibPrefix Concat(-l,libname)		@@\
211911d341caSmrgLintLibReferences(varname,libname,libsource)
212011d341caSmrg#endif
212111d341caSmrg
212211d341caSmrg /*
212311d341caSmrg * ProjectUnsharedFontLibReferences - unshared font libraries
212411d341caSmrg */
212511d341caSmrg#ifndef ProjectUnsharedFontLibReferences
212611d341caSmrg#define ProjectUnsharedFontLibReferences()					@@\
212711d341caSmrgDEPFONTLIB = _UseCat($(USRLIBDIR)/,XBuildLibDir/,LibraryTargetName(Xfont))	@@\
212811d341caSmrgFONTLIB = -L$(FREETYPELIBDIR) -L$(FONTLIBSRC) LoaderLibPrefix -lXfont		@@\
212911d341caSmrgLintLibReferences(XFONT,Xfont,$(FONTLIBSRC))
213011d341caSmrg#endif
213111d341caSmrg
213211d341caSmrg/*
213311d341caSmrg * SharedLibDependencies - shared library dependencies
213411d341caSmrg */
213511d341caSmrg#ifndef SharedLibDependencies
213611d341caSmrg#define SharedLibDependencies(libname,libsource,revname) /**/
213711d341caSmrg#endif
213811d341caSmrg
213911d341caSmrg/*
214011d341caSmrg * SharedFontLibReferences - shared font libraries
214111d341caSmrg */
214211d341caSmrg#ifndef SharedFontLibReferences
214311d341caSmrg#define SharedFontLibReferences()					@@\
214411d341caSmrgSOFONTREV = SharedFontRev						@@\
214511d341caSmrgDEPFONTLIB = SharedLibDependencies(Xfont,$(FONTLIBSRC),SOFONTREV)	@@\
214611d341caSmrgFONTLIB = -L$(FREETYPELIBDIR) -L$(FONTLIBSRC) LoaderLibPrefix -lXfont	@@\
214711d341caSmrgLintLibReferences(XFONT,Xfont,$(FONTLIBSRC))
214811d341caSmrg#endif
214911d341caSmrg
215011d341caSmrg/*
215111d341caSmrg * SharedDSLibDependencies - shared library dependencies with data separation
215211d341caSmrg */
215311d341caSmrg#ifndef SharedDSLibDependencies
215411d341caSmrg#define SharedDSLibDependencies(libname,libsource,revname) /**/
215511d341caSmrg#endif
215611d341caSmrg
215711d341caSmrg/*
215811d341caSmrg * SharedLibReferences - variables for shared libraries
215911d341caSmrg */
216011d341caSmrg#ifndef SharedLibReferences
216111d341caSmrg#define SharedLibReferences(varname,libname,libsource,revname,rev)	@@\
216211d341caSmrgrevname = rev								@@\
216311d341caSmrgConcat3(DEP,varname,LIB) = SharedLibDependencies(libname,libsource,revname) @@\
216411d341caSmrgConcat(varname,LIB) = LoaderLibPrefix Concat(-l,libname)		@@\
216511d341caSmrgLintLibReferences(varname,libname,libsource)
216611d341caSmrg#endif
216711d341caSmrg
216811d341caSmrg/*
216911d341caSmrg * SharedDSLibReferences - variables for shared libraries with data separation
217011d341caSmrg */
217111d341caSmrg#ifndef SharedDSLibReferences
217211d341caSmrg#define SharedDSLibReferences(varname,libname,libsource,revname,rev)	@@\
217311d341caSmrgrevname = rev								@@\
217411d341caSmrgConcat3(DEP,varname,LIB) = SharedDSLibDependencies(libname,libsource,revname) @@\
217511d341caSmrgConcat(varname,LIB) = LoaderLibPrefix Concat(-l,libname)		@@\
217611d341caSmrgLintLibReferences(varname,libname,libsource)
217711d341caSmrg#endif
217811d341caSmrg
217911d341caSmrg/*
218011d341caSmrg * CPPOnlyCompile - run C compiler's preprocessor only
218111d341caSmrg */
218211d341caSmrg#ifndef CPPOnlyCompile
218311d341caSmrg#define CPPOnlyCompile(src,options) RemoveFile($@)			@@\
218411d341caSmrg	ClearmakeOSName \
218511d341caSmrg	$(CC) -E $(CFLAGS) options src > $@
218611d341caSmrg#endif
218711d341caSmrg
218811d341caSmrg/*
218911d341caSmrg * ObjectCompile - compile fragment for a normal object file
219011d341caSmrg */
219111d341caSmrg#ifndef ObjectCompile
219211d341caSmrg#define ObjectCompile(options) RemoveFile($@)				@@\
219311d341caSmrg	ClearmakeOSName \
219411d341caSmrg	$(CC) -c $(CFLAGS) options $*.c
219511d341caSmrg#endif
219611d341caSmrg
219711d341caSmrg/*
219811d341caSmrg * CompileCToAsm - compile C file to assembler
219911d341caSmrg */
220011d341caSmrg#ifndef CompileCToAsm
220111d341caSmrg#define CompileCToAsm(options) RemoveFile($@)				@@\
220211d341caSmrg	ClearmakeOSName \
220311d341caSmrg	$(CC) -S $(CFLAGS) options $*.c
220411d341caSmrg#endif
220511d341caSmrg
220611d341caSmrg
220711d341caSmrg/*
220811d341caSmrg * CompileCplusplusToAsm - compile C++ file to assembler
220911d341caSmrg */
221011d341caSmrg#ifndef CompileCplusplusToAsm
221111d341caSmrg#define CompileCplusplusToAsm(options) RemoveFile($@)			@@\
221211d341caSmrg	ClearmakeOSName \
221311d341caSmrg	$(CC) -S $(CFLAGS) options $*.cc
221411d341caSmrg#endif
221511d341caSmrg
221611d341caSmrg
221711d341caSmrg#ifndef ObjectCplusplusCompile
221811d341caSmrg#define ObjectCplusplusCompile(options) RemoveFile($@)			@@\
221911d341caSmrg	ClearmakeOSName \
222011d341caSmrg	$(CXX) -c $(CXXFLAGS) options $*.CCsuf
222111d341caSmrg#endif
222211d341caSmrg
222311d341caSmrg/*
222411d341caSmrg * NormalLibObjCompile - compile fragment for a normal library object file
222511d341caSmrg */
222611d341caSmrg#ifndef NormalLibObjCompile
222711d341caSmrg#define NormalLibObjCompile(options) ObjectCompile(options)
222811d341caSmrg#endif
222911d341caSmrg
223011d341caSmrg#ifndef NormalRelocLibObjCompile
223111d341caSmrg# if !StaticNeedsPicForShared
223211d341caSmrg#  define NormalRelocLibObjCompile(options) NormalLibObjCompile(options)
223311d341caSmrg# else
223411d341caSmrg#  define NormalRelocLibObjCompile(options) NormalLibObjCompile(options $(PICFLAGS))
223511d341caSmrg# endif
223611d341caSmrg#endif
223711d341caSmrg
223811d341caSmrg#ifndef NormalLibObjCplusplusCompile
223911d341caSmrg#define NormalLibObjCplusplusCompile(options) ObjectCplusplusCompile(options)
224011d341caSmrg#endif
224111d341caSmrg
224211d341caSmrg/*
224311d341caSmrg * NormalSharedLibObjCompile - compile fragment for shared objects
224411d341caSmrg */
224511d341caSmrg#ifndef NormalSharedLibObjCompile
224611d341caSmrg#define NormalSharedLibObjCompile(options) NormalLibObjCompile(options $(SHLIBDEF) $(SHAREDCODEDEF) $(PICFLAGS))
224711d341caSmrg#endif
224811d341caSmrg
224911d341caSmrg#ifndef NormalSharedLibObjCplusplusCompile
225011d341caSmrg#define NormalSharedLibObjCplusplusCompile(options) NormalLibObjCplusplusCompile(options $(SHLIBDEF) $(SHAREDCODEDEF) $(CXXPICFLAGS))
225111d341caSmrg#endif
225211d341caSmrg
225311d341caSmrg/*
225411d341caSmrg * LibObjCompile - compile fragment for unshared/profiled/debugged objects
225511d341caSmrg */
225611d341caSmrg#ifndef LibObjCompile
225711d341caSmrg#if HasGcc || HasGcc2
225811d341caSmrg#define LibObjCompile(dir,options) RemoveFiles($@ dir/$@)		@@\
225911d341caSmrg	ClearmakeOSName \
226011d341caSmrg	$(CC) -c $(CCOPTIONS) $(THREADS_CFLAGS) $(ALLDEFINES) \
226111d341caSmrg	options $*.c -o dir/$@
226211d341caSmrg#else
226311d341caSmrg#define LibObjCompile(dir,options) RemoveFiles($@ dir/$@)		@@\
226411d341caSmrg	ClearmakeOSName \
226511d341caSmrg	$(CC) -c $(CCOPTIONS) $(THREADS_CFLAGS) $(ALLDEFINES) \
226611d341caSmrg	options $*.c							@@\
226711d341caSmrg	$(MV) $@ dir/$@
226811d341caSmrg#endif
226911d341caSmrg#endif
227011d341caSmrg
227111d341caSmrg#ifndef LibObjCplusplusCompile
227211d341caSmrg#if HasGcc || HasGcc2
227311d341caSmrg#define LibObjCplusplusCompile(dir,options) RemoveFiles($@ dir/$@)	@@\
227411d341caSmrg	ClearmakeOSName \
227511d341caSmrg	$(CXX) -c $(CXXOPTIONS) $(THREADS_CXXFLAGS) $(CXXDEFINES) \
227611d341caSmrg	options $*.CCsuf -o dir/$@
227711d341caSmrg#else
227811d341caSmrg#define LibObjCplusplusCompile(dir,options) RemoveFiles($@ dir/$@)	@@\
227911d341caSmrg	ClearmakeOSName \
228011d341caSmrg	$(CXX) -c $(CXXOPTIONS) $(THREADS_CXXFLAGS) $(CXXDEFINES) \
228111d341caSmrg	options $*.CCsuf						@@\
228211d341caSmrg	$(MV) $@ dir/$@
228311d341caSmrg#endif
228411d341caSmrg#endif
228511d341caSmrg
228611d341caSmrg/*
228711d341caSmrg * DebuggedLibObjCompile - compile fragment for debugged objects
228811d341caSmrg */
228911d341caSmrg#ifndef DebuggedLibObjCompile
229011d341caSmrg#define DebuggedLibObjCompile(options) LibObjCompile(debugger,DebuggableCDebugFlags options)
229111d341caSmrg#endif
229211d341caSmrg
229311d341caSmrg#ifndef DebuggedLibObjCplusplusCompile
229411d341caSmrg#define DebuggedLibObjCplusplusCompile(options) LibObjCplusplusCompile(debugger,DebuggableCplusplusDebugFlags options)
229511d341caSmrg#endif
229611d341caSmrg
229711d341caSmrg/*
229811d341caSmrg * ProfiledLibObjCompile - compile fragment for profiled objects
229911d341caSmrg */
230011d341caSmrg#ifndef ProfiledLibObjCompile
230111d341caSmrg#define ProfiledLibObjCompile(options) LibObjCompile(profiled,ProfiledCDebugFlags options)
230211d341caSmrg#endif
230311d341caSmrg
230411d341caSmrg#ifndef ProfiledLibObjCplusplusCompile
230511d341caSmrg#define ProfiledLibObjCplusplusCompile(options) LibObjCplusplusCompile(profiled,ProfiledCplusplusDebugFlags options)
230611d341caSmrg#endif
230711d341caSmrg
230811d341caSmrg/*
230911d341caSmrg * UnsharedLibObjCompile - compile fragment for unshared objects
231011d341caSmrg */
231111d341caSmrg#ifndef UnsharedLibObjCompile
231211d341caSmrg#define UnsharedLibObjCompile(options) LibObjCompile(unshared,$(CDEBUGFLAGS) $(CLIBDEBUGFLAGS) options)
231311d341caSmrg#endif
231411d341caSmrg
231511d341caSmrg#ifndef UnsharedLibObjCplusplusCompile
231611d341caSmrg#define UnsharedLibObjCplusplusCompile(options) LibObjCplusplusCompile(unshared,$(CXXDEBUGFLAGS) $(CXXLIBDEBUGFLAGS) options)
231711d341caSmrg#endif
231811d341caSmrg
231911d341caSmrg/*
232011d341caSmrg * SharedLibObjCompile - compile fragment for shared objects
232111d341caSmrg */
232211d341caSmrg#ifndef SharedLibObjCompile
232311d341caSmrg#define SharedLibObjCompile(options) LibObjCompile(shared,options $(SHLIBDEF) $(SHAREDCODEDEF) $(PICFLAGS) $(CDEBUGFLAGS) $(CLIBDEBUGFLAGS))
232411d341caSmrg#endif
232511d341caSmrg
232611d341caSmrg/*
232711d341caSmrg * NormalLibraryObjectRule - for simple libraries
232811d341caSmrg */
232911d341caSmrg#ifndef NormalLibraryObjectRule
233011d341caSmrg#define	NormalLibraryObjectRule()					@@\
233111d341caSmrg.c.Osuf:								@@\
233211d341caSmrg	NormalLibObjCompile($(_NOOP_))
233311d341caSmrg#endif /* NormalLibraryObjectRule */
233411d341caSmrg
233511d341caSmrg#ifndef NormalCplusplusObjectRule
233611d341caSmrg#define NormalCplusplusObjectRule()					@@\
233711d341caSmrg.CCsuf.Osuf:								@@\
233811d341caSmrg	NormalLibObjCplusplusCompile($(_NOOP_))
233911d341caSmrg#endif
234011d341caSmrg
234111d341caSmrg#ifndef NormalFortranObjectRule
234211d341caSmrg#define NormalFortranObjectRule()					@@\
234311d341caSmrg.f.Osuf:								@@\
234411d341caSmrg	RemoveFile($@)							@@\
234511d341caSmrg	ClearmakeOSName \
234611d341caSmrg	$(FC) -c $(FCFLAGS) $*.f
234711d341caSmrg#endif
234811d341caSmrg
234911d341caSmrg/*
235011d341caSmrg * SpecialObjectRule - generate rules to compile a file with special flags.
235111d341caSmrg */
235211d341caSmrg#ifndef SpecialObjectRule
235311d341caSmrg#define SpecialObjectRule(objs,depends,options)				@@\
235411d341caSmrgobjs:	depends								@@\
235511d341caSmrg	ObjectCompile(options)
235611d341caSmrg#endif /* SpecialObjectRule */
235711d341caSmrg
235811d341caSmrg#ifndef SpecialCplusplusObjectRule
235911d341caSmrg#define SpecialCplusplusObjectRule(baseobj,basedep,options)		@@\
236011d341caSmrgbaseobj.Osuf:	basedep.CCsuf						@@\
236111d341caSmrg	ObjectCplusplusCompile(options)
236211d341caSmrg#endif /* SpecialCplusplusObjectRule */
236311d341caSmrg
236411d341caSmrg/*
236511d341caSmrg * SpecialCObjectRule - generate rules to compile a C file with special flags.
236611d341caSmrg *			also handles CodeCenter rules
236711d341caSmrg */
236811d341caSmrg#ifndef SpecialCObjectRule
236911d341caSmrg#define SpecialCObjectRule(basename,depends,options)			@@\
237011d341caSmrgSpecialObjectRule(basename.Osuf,basename.c depends,options)		@@\
237111d341caSmrg									@@\
237211d341caSmrgbasename.i: basename.c depends						@@\
237311d341caSmrg	CPPOnlyCompile(basename.c,options)				@@\
237411d341caSmrg									@@\
237511d341caSmrgbasename.s: basename.c depends						@@\
237611d341caSmrg	CompileCToAsm(options)						@@\
237711d341caSmrg									@@\
237811d341caSmrgCenterLoadTarget(debug_src,basename.c,NullParameter,$(ALLDEFINES) options)
237911d341caSmrg#endif /* SpecialCObjectRule */
238011d341caSmrg
238111d341caSmrg
238211d341caSmrg#ifndef ObjectFromSpecialSource
238311d341caSmrg#define ObjectFromSpecialSource(dst,src,flags)				@@\
238411d341caSmrgNoConfigRec(dst.c)							@@\
238511d341caSmrg									@@\
238611d341caSmrgdst.c:  src.c								@@\
238711d341caSmrg	RemoveFile($@)							@@\
238811d341caSmrg	$(LN) $? $@							@@\
238911d341caSmrg									@@\
239011d341caSmrgSpecialCObjectRule(dst,NullParameter,flags)				@@\
239111d341caSmrg									@@\
239211d341caSmrgincludes:: dst.c							@@\
239311d341caSmrg									@@\
239411d341caSmrgdepend::  dst.c								@@\
239511d341caSmrg									@@\
239611d341caSmrgclean::									@@\
239711d341caSmrg	RemoveFile(dst.c)
239811d341caSmrg#endif /* ObjectFromSpecialSource */
239911d341caSmrg
240011d341caSmrg#ifndef CPPOnlyAsm
240111d341caSmrg#define CPPOnlyAsm(basename,options) RemoveFile(basename.i)		@@\
240211d341caSmrg	$(CPP) AsmDefines $(DEFINES) $(INCLUDES) options basename.S | \	@@\
240311d341caSmrg		grep -v '^\#' > basename.i
240411d341caSmrg#endif
240511d341caSmrg
240611d341caSmrg#ifndef AssembleObject
240711d341caSmrg#define AssembleObject(basename,flags) CPPOnlyAsm(basename,flags)	@@\
240811d341caSmrg	RemoveFile(basename.o)						@@\
240911d341caSmrg	$(AS) -o basename.o basename.i					@@\
241011d341caSmrg	RemoveFile(basename.i)
241111d341caSmrg#endif
241211d341caSmrg
241311d341caSmrg#ifndef NormalAsmObjectRule
241411d341caSmrg#define NormalAsmObjectRule()						@@\
241511d341caSmrg.S.o:									@@\
241611d341caSmrg	AssembleObject($*,$(_NOOP_))					@@\
241711d341caSmrg									@@\
241811d341caSmrg.S.i:									@@\
241911d341caSmrg	CPPOnlyAsm($*,$(_NOOP_))
242011d341caSmrg#endif
242111d341caSmrg
242211d341caSmrg#ifndef ObjectFromSpecialAsmSource
242311d341caSmrg#define ObjectFromSpecialAsmSource(dst,src,flags)			@@\
242411d341caSmrgdst.S:  src.S								@@\
242511d341caSmrg	RemoveFile($@)							@@\
242611d341caSmrg	$(LN) $? $@							@@\
242711d341caSmrg									@@\
242811d341caSmrgdst.o:  dst.S								@@\
242911d341caSmrg	AssembleObject(dst,flags)					@@\
243011d341caSmrg									@@\
243111d341caSmrgdst.i:  dst.S								@@\
243211d341caSmrg	CPPOnlyAsm(dst,flags)						@@\
243311d341caSmrg									@@\
243411d341caSmrgdepend:: dst.S								@@\
243511d341caSmrg									@@\
243611d341caSmrgclean::									@@\
243711d341caSmrg	RemoveFile(dst.S)
243811d341caSmrg#endif
243911d341caSmrg
244011d341caSmrg#ifndef ObjectFromAsmSource
244111d341caSmrg#define ObjectFromAsmSource(src,flags)					@@\
244211d341caSmrg									@@\
244311d341caSmrgsrc.o:  src.S								@@\
244411d341caSmrg	AssembleObject(src,flags)					@@\
244511d341caSmrg									@@\
244611d341caSmrgsrc.i:  src.S								@@\
244711d341caSmrg	CPPOnlyAsm(src,flags)						@@\
244811d341caSmrg									@@\
244911d341caSmrgdepend:: src.S
245011d341caSmrg#endif
245111d341caSmrg
245211d341caSmrg#ifndef SwitchYYPrefix
245311d341caSmrg#define SwitchYYPrefix(in,out,prefix) \
245411d341caSmrg	sed 's/yy/prefix/g' in | sed 's/__REALLY_YY__/yy/' > out && RemoveFile(in)
245511d341caSmrg#endif
245611d341caSmrg
245711d341caSmrg#ifndef LexFilePrefix
245811d341caSmrg#define LexFilePrefix(file,prefix)					@@\
245911d341caSmrgfile.c: file.l								@@\
246011d341caSmrg	ClearmakeOSName \
246111d341caSmrg	$(LEX) $(LFLAGS) file.l						@@\
246211d341caSmrg	SwitchYYPrefix(lex.yy.c,file.c,prefix)				@@\
246311d341caSmrg									@@\
246411d341caSmrgdepend:: file.c								@@\
246511d341caSmrg									@@\
246611d341caSmrgclean::									@@\
246711d341caSmrg	RemoveFiles(lex.yy.c file.c)
246811d341caSmrg#endif
246911d341caSmrg
247011d341caSmrg#ifndef LexFileExplicit
247111d341caSmrg#if HasClearmake		/* provide a place to hang ClearmakeOSName */
247211d341caSmrg#define LexFileExplicit(file)						@@\
247311d341caSmrgfile.c: file.l								@@\
247411d341caSmrg	ClearmakeOSName \
247511d341caSmrg	$(LEX) $(LFLAGS) file.l						@@\
247611d341caSmrg	$(MV) lex.yy.c file.c
247711d341caSmrg#else
247811d341caSmrg#define LexFileExplicit(file) /* the default rule is fine */
247911d341caSmrg#endif
248011d341caSmrg#endif
248111d341caSmrg
248211d341caSmrg#ifndef LexFile
248311d341caSmrg#define LexFile(file)							@@\
248411d341caSmrgLexFileExplicit(file)							@@\
248511d341caSmrg									@@\
248611d341caSmrgdepend:: file.c								@@\
248711d341caSmrg									@@\
248811d341caSmrgclean::									@@\
248911d341caSmrg	RemoveFiles(lex.yy.c file.c)
249011d341caSmrg#endif /* LexFile */
249111d341caSmrg
249211d341caSmrg
249311d341caSmrg#ifndef M4File
249411d341caSmrg#define M4File(file,includes)						@@\
249511d341caSmrgfile: file.m4 includes							@@\
249611d341caSmrg	RemoveFile(file)						@@\
249711d341caSmrg	$(M4) $(M4FLAGS) file.m4 >file					@@\
249811d341caSmrg									@@\
249911d341caSmrgdepend:: file								@@\
250011d341caSmrg									@@\
250111d341caSmrgclean::									@@\
250211d341caSmrg	RemoveFile(file)
250311d341caSmrg#endif /* M4File */
250411d341caSmrg
250511d341caSmrg#ifndef YaccFilePrefix
250611d341caSmrg#if HasGnuMake
250711d341caSmrg#define YaccFilePrefix(file,flags,prefix)				@@\
250811d341caSmrgdepend:: file.c								@@\
250911d341caSmrg									@@\
251011d341caSmrgfile.h: file.c								@@\
251111d341caSmrg									@@\
251211d341caSmrgfile.c: file.y								@@\
251311d341caSmrg	ClearmakeOSName \
251411d341caSmrg	$(YACC) flags file.y						@@\
251511d341caSmrg	SwitchYYPrefix(y.tab.c,file.c,prefix)				@@\
251611d341caSmrg	@if [ -f y.tab.h ]; then set -x; SwitchYYPrefix(y.tab.h,file.h,prefix); \@@\
251711d341caSmrg	else exit 0; fi							@@\
251811d341caSmrg									@@\
251911d341caSmrgclean::									@@\
252011d341caSmrg	RemoveFiles(y.tab.c y.tab.h file.h file.c)
252111d341caSmrg#else
252211d341caSmrg#define YaccFilePrefix(file,flags,prefix)				@@\
252311d341caSmrgdepend:: file.c								@@\
252411d341caSmrg									@@\
252511d341caSmrgfile.h file.c: file.y							@@\
252611d341caSmrg	ClearmakeOSName \
252711d341caSmrg	$(YACC) flags file.y						@@\
252811d341caSmrg	SwitchYYPrefix(y.tab.c,file.c,prefix)				@@\
252911d341caSmrg	@if [ -f y.tab.h ]; then set -x; SwitchYYPrefix(y.tab.h,file.h,prefix); \	@@\
253011d341caSmrg	else exit 0; fi							@@\
253111d341caSmrg									@@\
253211d341caSmrgclean::									@@\
253311d341caSmrg	RemoveFiles(y.tab.c y.tab.h file.h file.c)
253411d341caSmrg#endif
253511d341caSmrg#endif /* YaccFile */
253611d341caSmrg
253711d341caSmrg#ifndef YaccFile
253811d341caSmrg#if HasGnuMake
253911d341caSmrg#define YaccFile(file,flags)						@@\
254011d341caSmrgdepend:: file.c								@@\
254111d341caSmrg									@@\
254211d341caSmrgfile.h: file.c								@@\
254311d341caSmrg									@@\
254411d341caSmrgfile.c: file.y								@@\
254511d341caSmrg	ClearmakeOSName \
254611d341caSmrg	$(YACC) flags file.y						@@\
254711d341caSmrg	$(MV) y.tab.c file.c						@@\
254811d341caSmrg	@if [ -f y.tab.h ]; then set -x; $(MV) y.tab.h file.h; \	@@\
254911d341caSmrg	else exit 0; fi							@@\
255011d341caSmrg									@@\
255111d341caSmrgclean::									@@\
255211d341caSmrg	RemoveFiles(y.tab.c y.tab.h file.h file.c)
255311d341caSmrg#else
255411d341caSmrg#define YaccFile(file,flags)						@@\
255511d341caSmrgdepend:: file.c								@@\
255611d341caSmrg									@@\
255711d341caSmrgfile.h file.c: file.y							@@\
255811d341caSmrg	ClearmakeOSName \
255911d341caSmrg	$(YACC) flags file.y						@@\
256011d341caSmrg	$(MV) y.tab.c file.c						@@\
256111d341caSmrg	@if [ -f y.tab.h ]; then set -x; $(MV) y.tab.h file.h; \	@@\
256211d341caSmrg	else exit 0; fi							@@\
256311d341caSmrg									@@\
256411d341caSmrgclean::									@@\
256511d341caSmrg	RemoveFiles(y.tab.c y.tab.h file.h file.c)
256611d341caSmrg#endif
256711d341caSmrg#endif /* YaccFile */
256811d341caSmrg
256911d341caSmrg#ifndef YaccFileNoFlags
257011d341caSmrg#define YaccFileNoFlags(file)						@@\
257111d341caSmrgdepend:: file.c								@@\
257211d341caSmrg									@@\
257311d341caSmrgfile.c: file.y								@@\
257411d341caSmrg	ClearmakeOSName \
257511d341caSmrg	$(YACC) file.y							@@\
257611d341caSmrg	$(MV) y.tab.c file.c						@@\
257711d341caSmrg									@@\
257811d341caSmrgclean::									@@\
257911d341caSmrg	RemoveFiles(y.tab.c file.c)
258011d341caSmrg#endif /* YaccFileNoFlags */
258111d341caSmrg
258211d341caSmrg
258311d341caSmrg#ifndef MakeLibrary
258411d341caSmrg#define MakeLibrary(libname,objlist) $(AR) libname objlist
258511d341caSmrg#endif
258611d341caSmrg
258711d341caSmrg#ifndef LinkBuildLibrary
258811d341caSmrg#ifdef UseInstalled
258911d341caSmrg#define LinkBuildLibrary(lib) $(_NULLCMD_)
259011d341caSmrg#else
259111d341caSmrg#define LinkBuildLibrary(lib) MakeDir($(BUILDLIBDIR))			@@\
259211d341caSmrg	RemoveFile($(BUILDLIBDIR)/lib)					@@\
259311d341caSmrg	cd $(BUILDLIBDIR) && $(LN) $(BUILDLIBTOP)/$(CURRENT_DIR)/lib .
259411d341caSmrg#endif
259511d341caSmrg#endif /* LinkBuildLibrary */
259611d341caSmrg
259711d341caSmrg#ifndef LinkBuildLibraryMaybe
259811d341caSmrg#ifdef UseInstalled
259911d341caSmrg#define LinkBuildLibraryMaybe(lib,doit) $(_NULLCMD_)
260011d341caSmrg#else
260111d341caSmrg#define LinkBuildLibraryMaybe(lib,doit) MakeDir($(BUILDLIBDIR))		@@\
260211d341caSmrg	@if doit; then (set -x; \					@@\
260311d341caSmrg	  RemoveFile($(BUILDLIBDIR)/lib); \				@@\
260411d341caSmrg	  cd $(BUILDLIBDIR) && $(LN) $(BUILDLIBTOP)/$(CURRENT_DIR)/lib .); fi
260511d341caSmrg#endif
260611d341caSmrg#endif /* LinkBuildLibraryMaybe */
260711d341caSmrg
260811d341caSmrg#ifndef _LinkBuildLibrary /* will get redefined elsewhere */
260911d341caSmrg#define _LinkBuildLibrary(lib) $(_NULLCMD_)
261011d341caSmrg#endif /* _LinkBuildLibrary */
261111d341caSmrg
261211d341caSmrg#ifndef LinkBuildSonameLibrary
261311d341caSmrg#ifdef UseInstalled
261411d341caSmrg#define LinkBuildSonameLibrary(lib) true
261511d341caSmrg#else
261611d341caSmrg#define LinkBuildSonameLibrary(lib) MakeDirInline($(BUILDLIBDIR));\	@@\
261711d341caSmrg	(set -x; RemoveFile($(BUILDLIBDIR)/lib);\			@@\
261811d341caSmrg	(cd $(BUILDLIBDIR) && $(LN) $(BUILDLIBTOP)/$(CURRENT_DIR)/lib .))
261911d341caSmrg#endif
262011d341caSmrg#endif /* LinkBuildSonameLibrary */
262111d341caSmrg
262211d341caSmrg#ifndef LinkBuildLibraryInline
262311d341caSmrg#define LinkBuildLibraryInline(lib) LinkBuildSonameLibrary(lib)
262411d341caSmrg#endif /* LinkBuildLibraryInline */
262511d341caSmrg
262611d341caSmrg/*
262711d341caSmrg * NormalLibraryTarget - generate rules to create a library.
262811d341caSmrg */
262911d341caSmrg#ifndef NormalLibraryTarget
263011d341caSmrg#define	NormalLibraryTarget(libname,objlist)				@@\
263111d341caSmrgAllTarget(LibraryTargetName(libname))					@@\
263211d341caSmrg									@@\
263311d341caSmrgLibraryTargetName(libname): objlist $(EXTRALIBRARYDEPS)			@@\
263411d341caSmrg	RemoveFile($@)							@@\
263511d341caSmrg	MakeLibrary($@,objlist)						@@\
263611d341caSmrg	RanLibrary($@)							@@\
263711d341caSmrg	_LinkBuildLibrary($@)
263811d341caSmrg#endif /* NormalLibraryTarget */
263911d341caSmrg
264011d341caSmrg
264111d341caSmrg/*
264211d341caSmrg * NormalLibraryTarget2 - generate rules to create a library in two steps.
264311d341caSmrg * This is used to create libraries with large numbers of files.
264411d341caSmrg */
264511d341caSmrg#ifndef NormalLibraryTarget2
264611d341caSmrg#define	NormalLibraryTarget2(libname,objlist1,objlist2)			@@\
264711d341caSmrgAllTarget(LibraryTargetName(libname))					@@\
264811d341caSmrg									@@\
264911d341caSmrgLibraryTargetName(libname): objlist1 objlist2 $(EXTRALIBRARYDEPS)	@@\
265011d341caSmrg	RemoveFile($@)							@@\
265111d341caSmrg	MakeLibrary($@,objlist1)					@@\
265211d341caSmrg	MakeLibrary($@,objlist2)					@@\
265311d341caSmrg	RanLibrary($@)							@@\
265411d341caSmrg	_LinkBuildLibrary($@)
265511d341caSmrg#endif /* NormalLibraryTarget2 */
265611d341caSmrg
265711d341caSmrg
265811d341caSmrg/*
265911d341caSmrg * NormalLibraryTarget3 - generate rules to create a library in three steps.
266011d341caSmrg * This is used to create libraries with very large numbers of files.
266111d341caSmrg */
266211d341caSmrg#ifndef NormalLibraryTarget3
266311d341caSmrg#define	NormalLibraryTarget3(libname,objlist1,objlist2,objlist3)	@@\
266411d341caSmrgAllTarget(LibraryTargetName(libname))					@@\
266511d341caSmrg									@@\
266611d341caSmrgLibraryTargetName(libname): objlist1 objlist2 objlist3 $(EXTRALIBRARYDEPS)	@@\
266711d341caSmrg	RemoveFile($@)							@@\
266811d341caSmrg	MakeLibrary($@,objlist1)					@@\
266911d341caSmrg	MakeLibrary($@,objlist2)					@@\
267011d341caSmrg	MakeLibrary($@,objlist3)					@@\
267111d341caSmrg	RanLibrary($@)							@@\
267211d341caSmrg	_LinkBuildLibrary($@)
267311d341caSmrg#endif /* NormalLibraryTarget3 */
267411d341caSmrg
267511d341caSmrg
267611d341caSmrg/*
267711d341caSmrg * NormalDepLibraryTarget - generate rules to create a library.
267811d341caSmrg */
267911d341caSmrg#ifndef NormalDepLibraryTarget
268011d341caSmrg#define	NormalDepLibraryTarget(libname,deplist,objlist)			@@\
268111d341caSmrgAllTarget(LibraryTargetName(libname))					@@\
268211d341caSmrg									@@\
268311d341caSmrgLibraryTargetName(libname): deplist $(EXTRALIBRARYDEPS)			@@\
268411d341caSmrg	RemoveFile($@)							@@\
268511d341caSmrg	MakeLibrary($@,objlist)						@@\
268611d341caSmrg	RanLibrary($@)							@@\
268711d341caSmrg	_LinkBuildLibrary($@)
268811d341caSmrg#endif /* NormalDepLibraryTarget */
268911d341caSmrg
269011d341caSmrg
269111d341caSmrg/*
269211d341caSmrg * UnsharedLibraryTarget - generate rules to create a library.
269311d341caSmrg */
269411d341caSmrg#ifndef UnsharedLibraryTarget
269511d341caSmrg#define	UnsharedLibraryTarget(libname,objlist,down,up)			@@\
269611d341caSmrgAllTarget(LibraryTargetName(libname))					@@\
269711d341caSmrg									@@\
269811d341caSmrgLibraryTargetName(libname): objlist $(EXTRALIBRARYDEPS)			@@\
269911d341caSmrg	RemoveFile($@)							@@\
270011d341caSmrg	@(set -x; cd down && MakeLibrary(up/$@,objlist)) || exit 1;	@@\
270111d341caSmrg	RanLibrary($@)							@@\
270211d341caSmrg	_LinkBuildLibrary($@)
270311d341caSmrg#endif /* UnsharedLibraryTarget */
270411d341caSmrg
270511d341caSmrg
270611d341caSmrg/*
270711d341caSmrg * UnsharedLibraryTarget3 - generate rules to create a library in three steps.
270811d341caSmrg * This is used to create libraries with very large numbers of files.
270911d341caSmrg */
271011d341caSmrg#ifndef UnsharedLibraryTarget3
271111d341caSmrg#define	UnsharedLibraryTarget3(libname,objlist1,objlist2,objlist3,down,up) @@\
271211d341caSmrgAllTarget(LibraryTargetName(libname))					@@\
271311d341caSmrg									@@\
271411d341caSmrgLibraryTargetName(libname): objlist1 objlist2 objlist3 $(EXTRALIBRARYDEPS)	@@\
271511d341caSmrg	RemoveFile($@)							@@\
271611d341caSmrg	(cd down && MakeLibrary(up/$@,objlist1))			@@\
271711d341caSmrg	(cd down && MakeLibrary(up/$@,objlist2))			@@\
271811d341caSmrg	(cd down && MakeLibrary(up/$@,objlist3))			@@\
271911d341caSmrg	RanLibrary($@)							@@\
272011d341caSmrg	_LinkBuildLibrary($@)
272111d341caSmrg#endif /* UnsharedLibraryTarget3 */
272211d341caSmrg
272311d341caSmrg
272411d341caSmrg/*
272511d341caSmrg * SubdirLibraryRule -
272611d341caSmrg */
272711d341caSmrg#ifndef SubdirLibraryRule
272811d341caSmrg#define	SubdirLibraryRule(objlist)					@@\
272911d341caSmrgall:: DONE								@@\
273011d341caSmrg									@@\
273111d341caSmrgDONE: objlist								@@\
273211d341caSmrg	RemoveFile($@)							@@\
273311d341caSmrg	touch $@							@@\
273411d341caSmrg									@@\
273511d341caSmrgclean::									@@\
273611d341caSmrg	RemoveFile(DONE)
273711d341caSmrg#endif /* SubdirLibraryRule */
273811d341caSmrg
273911d341caSmrg
274011d341caSmrg/*
274111d341caSmrg * ProfiledLibraryTarget - generate rules to create a profiled library.
274211d341caSmrg */
274311d341caSmrg#ifndef ProfiledLibraryTarget
274411d341caSmrg#define	ProfiledLibraryTarget(libname,objlist)				@@\
274511d341caSmrgAllTarget(LibraryTargetNameSuffix(libname,_p))				@@\
274611d341caSmrg									@@\
274711d341caSmrgLibraryTargetNameSuffix(libname,_p): objlist $(EXTRALIBRARYDEPS)	@@\
274811d341caSmrg	RemoveFile($@)							@@\
274911d341caSmrg	cd profiled && MakeLibrary(../$@,objlist)			@@\
275011d341caSmrg	RanLibrary($@)
275111d341caSmrg
275211d341caSmrg#endif /* ProfiledLibraryTarget */
275311d341caSmrg
275411d341caSmrg
275511d341caSmrg/*
275611d341caSmrg * ProfiledDepLibraryTarget - generate rules to create a profiled library.
275711d341caSmrg */
275811d341caSmrg#ifndef ProfiledDepLibraryTarget
275911d341caSmrg#define	ProfiledDepLibraryTarget(libname,deplist,objlist)		@@\
276011d341caSmrgAllTarget(LibraryTargetNameSuffix(libname,_p))				@@\
276111d341caSmrg									@@\
276211d341caSmrgLibraryTargetNameSuffix(libname,_p): deplist $(EXTRALIBRARYDEPS)	@@\
276311d341caSmrg	RemoveFile($@)							@@\
276411d341caSmrg	MakeLibrary($@,objlist)						@@\
276511d341caSmrg	RanLibrary($@)
276611d341caSmrg
276711d341caSmrg#endif /* ProfiledDepLibraryTarget */
276811d341caSmrg
276911d341caSmrg
277011d341caSmrg/*
277111d341caSmrg * DebuggedLibraryTarget - generate rules to create a debuggable library.
277211d341caSmrg */
277311d341caSmrg#ifndef DebuggedLibraryTarget
277411d341caSmrg#define	DebuggedLibraryTarget(libname,objlist)				@@\
277511d341caSmrgAllTarget(LibraryTargetNameSuffix(libname,_d))				@@\
277611d341caSmrg									@@\
277711d341caSmrgLibraryTargetNameSuffix(libname,_d): objlist $(EXTRALIBRARYDEPS)	@@\
277811d341caSmrg	RemoveFile($@)							@@\
277911d341caSmrg	cd debugger && MakeLibrary(../$@,objlist)			@@\
278011d341caSmrg	RanLibrary($@)
278111d341caSmrg
278211d341caSmrg#endif /* DebuggedLibraryTarget */
278311d341caSmrg
278411d341caSmrg
278511d341caSmrg/*
278611d341caSmrg * DebuggedDepLibraryTarget - generate rules to create a debuggable library.
278711d341caSmrg */
278811d341caSmrg#ifndef DebuggedDepLibraryTarget
278911d341caSmrg#define	DebuggedDepLibraryTarget(libname,deplist,objlist)		@@\
279011d341caSmrgAllTarget(LibraryTargetNameSuffix(libname,_d))				@@\
279111d341caSmrg									@@\
279211d341caSmrgLibraryTargetNameSuffix(libname,_d): deplist $(EXTRALIBRARYDEPS)	@@\
279311d341caSmrg	RemoveFile($@)							@@\
279411d341caSmrg	MakeLibrary($@,objlist)						@@\
279511d341caSmrg	RanLibrary($@)
279611d341caSmrg
279711d341caSmrg#endif /* DebuggedDepLibraryTarget */
279811d341caSmrg
279911d341caSmrg
280011d341caSmrg/*
280111d341caSmrg * AliasedLibraryTarget - generate rules to link one library to another.
280211d341caSmrg */
280311d341caSmrg#ifndef AliasedLibraryTarget
280411d341caSmrg#define	AliasedLibraryTarget(libname,alias)				@@\
280511d341caSmrgAllTarget(LibraryTargetName(alias))					@@\
280611d341caSmrg									@@\
280711d341caSmrgLibraryTargetName(alias): LibraryTargetName(libname)			@@\
280811d341caSmrg	RemoveFile($@)							@@\
280911d341caSmrg	$(LN) LibraryTargetName(libname) $@				@@\
281011d341caSmrg									@@\
281111d341caSmrgclean::									@@\
281211d341caSmrg	RemoveFile(LibraryTargetName(alias))
281311d341caSmrg#endif /* AliasedLibraryTarget */
281411d341caSmrg
281511d341caSmrg
281611d341caSmrg/*
281711d341caSmrg * NormalRelocatableTarget - generate rules to produce a relocatable object
281811d341caSmrg * file instead of a library.
281911d341caSmrg */
282011d341caSmrg#ifndef NormalRelocatableTarget
282111d341caSmrg#define	NormalRelocatableTarget(objname,objlist)			@@\
282211d341caSmrgAllTarget(objname.Osuf)							@@\
282311d341caSmrg									@@\
282411d341caSmrgobjname.Osuf: objlist $(EXTRALIBRARYDEPS)				@@\
282511d341caSmrg	RemoveFile($@)							@@\
282611d341caSmrg	$(LD) $(LDCOMBINEFLAGS) objlist -o $@
282711d341caSmrg#endif /* NormalRelocatableTarget */
282811d341caSmrg
282911d341caSmrg
283011d341caSmrg/*
283111d341caSmrg * NormalDepRelocatableTarget - generate rules to produce a relocatable object
283211d341caSmrg * file instead of a library.
283311d341caSmrg */
283411d341caSmrg#ifndef NormalDepRelocatableTarget
283511d341caSmrg#define	NormalDepRelocatableTarget(objname,deplist,objlist)		@@\
283611d341caSmrgAllTarget(objname.Osuf)							@@\
283711d341caSmrg									@@\
283811d341caSmrgobjname.Osuf: deplist $(EXTRALIBRARYDEPS)				@@\
283911d341caSmrg	RemoveFile($@)							@@\
284011d341caSmrg	$(LD) $(LDCOMBINEFLAGS) objlist -o $@
284111d341caSmrg#endif /* NormalDepRelocatableTarget */
284211d341caSmrg
284311d341caSmrg
284411d341caSmrg/*
284511d341caSmrg * ProfiledRelocatableTarget - generate rules to produce a profiled relocatable
284611d341caSmrg * object file instead of a library.
284711d341caSmrg */
284811d341caSmrg#ifndef ProfiledRelocatableTarget
284911d341caSmrg#define	ProfiledRelocatableTarget(objname,objlist)			@@\
285011d341caSmrgAllTarget(Concat(objname,_p.Osuf))					@@\
285111d341caSmrg									@@\
285211d341caSmrgConcat(objname,_p.Osuf): objlist $(EXTRALIBRARYDEPS)			@@\
285311d341caSmrg	RemoveFile($@)							@@\
285411d341caSmrg	$(LD) -X -r objlist -o $@
285511d341caSmrg
285611d341caSmrg#endif /* ProfiledRelocatableTarget */
285711d341caSmrg
285811d341caSmrg
285911d341caSmrg/*
286011d341caSmrg * DebuggedRelocatableTarget - generate rules to produce a debuggable
286111d341caSmrg * relocatable object file instead of a library.
286211d341caSmrg */
286311d341caSmrg#ifndef DebuggedRelocatableTarget
286411d341caSmrg#define	DebuggedRelocatableTarget(objname,objlist)			@@\
286511d341caSmrgAllTarget(Concat(objname,_d.Osuf))					@@\
286611d341caSmrg									@@\
286711d341caSmrgConcat(objname,_d.Osuf): objlist $(EXTRALIBRARYDEPS)			@@\
286811d341caSmrg	RemoveFile($@)							@@\
286911d341caSmrg	$(LD) -X -r objlist -o $@
287011d341caSmrg
287111d341caSmrg#endif /* DebuggedRelocatableTarget */
287211d341caSmrg
287311d341caSmrg
287411d341caSmrg/*
287511d341caSmrg * LintLibraryTarget - generate rules to create a lint library.  Note that the
287611d341caSmrg * lint library is always forced to be newer than the library itself.
287711d341caSmrg */
287811d341caSmrg#ifndef LintLibraryTarget
287911d341caSmrg#define	LintLibraryTarget(libname,srclist)				@@\
288011d341caSmrglintlib:: Concat(llib-l,libname.ln)					@@\
288111d341caSmrg									@@\
288211d341caSmrgConcat(llib-l,libname.ln): srclist $(EXTRALIBRARYDEPS)			@@\
288311d341caSmrg	RemoveFile($@)							@@\
288411d341caSmrg	$(LINT) Concat($(LINTLIBFLAG),libname) $(LINTFLAGS) srclist
288511d341caSmrg#endif /* LintLibraryTarget */
288611d341caSmrg
288711d341caSmrg
288811d341caSmrg/*
288911d341caSmrg * NormalLintTarget - generate rules to lint a set of sources.
289011d341caSmrg */
289111d341caSmrg#ifndef NormalLintTarget
289211d341caSmrg#define NormalLintTarget(srclist)					@@\
289311d341caSmrglint:									@@\
289411d341caSmrg	$(LINT) $(LINTFLAGS) srclist $(LINTLIBS)			@@\
289511d341caSmrglint1:									@@\
289611d341caSmrg	$(LINT) $(LINTFLAGS) $(FILE) $(LINTLIBS)
289711d341caSmrg#endif /* NormalLintTarget */
289811d341caSmrg
289911d341caSmrg
290011d341caSmrg/*
290111d341caSmrg * LintTarget - generate rules to lint $(SRCS)
290211d341caSmrg */
290311d341caSmrg#ifndef LintTarget
290411d341caSmrg#define LintTarget()							@@\
290511d341caSmrgNormalLintTarget($(SRCS))
290611d341caSmrg#endif
290711d341caSmrg
290811d341caSmrg
290911d341caSmrg/*
291011d341caSmrg * LinkSourceFile - snag source file from some other directory
291111d341caSmrg */
291211d341caSmrg#ifndef LinkSourceFile
291311d341caSmrg#define LinkSourceFile(src,dir)						@@\
291411d341caSmrgsrc:  dir/src								@@\
291511d341caSmrg	RemoveFile($@)							@@\
291611d341caSmrg	$(LN) $? $@							@@\
291711d341caSmrg									@@\
291811d341caSmrgNoConfigRec(src)							@@\
291911d341caSmrg									@@\
292011d341caSmrgincludes:: src								@@\
292111d341caSmrg									@@\
292211d341caSmrgdepend:: src								@@\
292311d341caSmrg									@@\
292411d341caSmrgclean::									@@\
292511d341caSmrg	RemoveFile(src)
292611d341caSmrg#endif
292711d341caSmrg
292811d341caSmrg
292911d341caSmrg/*
293011d341caSmrg * LinkFile - link a file
293111d341caSmrg */
293211d341caSmrg#ifndef LinkFile
293311d341caSmrg#define LinkFile(tofile,fromfile)					@@\
293411d341caSmrgtofile:: fromfile							@@\
293511d341caSmrg	RemoveFile($@)							@@\
293611d341caSmrg	$(LN) $? $@							@@\
293711d341caSmrg									@@\
293811d341caSmrgNoConfigRec(tofile)							@@\
293911d341caSmrg									@@\
294011d341caSmrgincludes:: tofile							@@\
294111d341caSmrg									@@\
294211d341caSmrgdepend:: tofile								@@\
294311d341caSmrg									@@\
294411d341caSmrgclean::									@@\
294511d341caSmrg	RemoveFile(tofile)
294611d341caSmrg#endif
294711d341caSmrg
294811d341caSmrg
294911d341caSmrg#ifndef MakeSubincludesForBuild
295011d341caSmrg#define MakeSubincludesForBuild(step,dir,srclist)			@@\
295111d341caSmrgstep::  dir srclist							@@\
295211d341caSmrg	@-(list=`echo srclist | sed -e 's/[^ ]*\///g'`; \		@@\
295311d341caSmrg		set -x; cd dir && RemoveFiles($$list))			@@\
295411d341caSmrg	@for i in srclist; do \						@@\
295511d341caSmrg		(set -x; cd dir && $(LN) ../$$i .); \			@@\
295611d341caSmrg	done								@@\
295711d341caSmrg									@@\
295811d341caSmrgdir::									@@\
295911d341caSmrg	$(MKDIRHIER) dir						@@\
296011d341caSmrg									@@\
296111d341caSmrgclean::									@@\
296211d341caSmrg	@-(if [ -d dir ]; then \					@@\
296311d341caSmrg		list=`echo srclist | sed -e 's/[^ ]*\///g'`; \		@@\
296411d341caSmrg		set -x; cd dir && RemoveFile($$list); else exit 0; fi)
296511d341caSmrg#endif
296611d341caSmrg
296711d341caSmrg
296811d341caSmrg/*
296911d341caSmrg * LangNamedTargetSubdirs - recursively make a series of steps
297011d341caSmrg */
297111d341caSmrg#ifndef LangNamedTargetSubdirs
297211d341caSmrg#define LangNamedTargetSubdirs(lang,name,dirs,verb,flags,subname)	@@\
297311d341caSmrgname::									@@\
297411d341caSmrg	@MakeFlagsToShellFlags(ik,set +e); \				@@\
297511d341caSmrg	for i in dirs ;\						@@\
297611d341caSmrg	do \								@@\
297711d341caSmrg		echo verb "in $(CURRENT_DIR)/$$i..."; \			@@\
297811d341caSmrg		(cd $$i && LANG=lang $(MAKE) $(MFLAGS) flags subname);\ @@\
297911d341caSmrg	done
298011d341caSmrg#endif
298111d341caSmrg
298211d341caSmrg
298311d341caSmrg/*
298411d341caSmrg * NamedMakeSubdirs - generate rules to do makes in the given subdirectories.
298511d341caSmrg * If you want CDEBUGFLAGS passed along to subdirectories, provide a line like
298611d341caSmrg * the following in the appropriate Imakefile
298711d341caSmrg *
298811d341caSmrg *         #define PassCDebugFlags 'CDEBUGFLAGS=$(CDEBUGFLAGS)'
298911d341caSmrg */
299011d341caSmrg#ifndef LangNamedMakeSubdirs
299111d341caSmrg#define LangNamedMakeSubdirs(lang,name,dirs) \
299211d341caSmrgLangNamedTargetSubdirs(lang,name,dirs,"making" name,PassCDebugFlags,all)
299311d341caSmrg#endif /* LangNamedMakeSubdirs */
299411d341caSmrg
299511d341caSmrg#ifndef LangMakeSubdirs
299611d341caSmrg#define LangMakeSubdirs(lang,dirs)					@@\
299711d341caSmrgLangNamedMakeSubdirs(lang,all,dirs)
299811d341caSmrg#endif /* LangMakeSubdirs */
299911d341caSmrg
300011d341caSmrg
300111d341caSmrg
300211d341caSmrg/*
300311d341caSmrg * NamedTargetSubdirs - recursively make a series of steps
300411d341caSmrg */
300511d341caSmrg#ifndef NamedTargetSubdirs
300611d341caSmrg#define NamedTargetSubdirs(name,dirs,verb,flags,subname)		@@\
300711d341caSmrgname::									@@\
300811d341caSmrg	@MakeFlagsToShellFlags(ik,set +e); \				@@\
300911d341caSmrg	for i in dirs ;\						@@\
301011d341caSmrg	do \								@@\
301111d341caSmrg		echo verb "in $(CURRENT_DIR)/$$i..."; \			@@\
301211d341caSmrg		MakeNamedTargetSubdir($$i,flags,subname); \		@@\
301311d341caSmrg	done
301411d341caSmrg#endif
301511d341caSmrg
301611d341caSmrg
301711d341caSmrg/*
301811d341caSmrg * NamedMakeSubdirs - generate rules to do makes in the given subdirectories.
301911d341caSmrg * If you want CDEBUGFLAGS passed along to subdirectories, provide a line like
302011d341caSmrg * the following in the appropriate Imakefile
302111d341caSmrg *
302211d341caSmrg *         #define PassCDebugFlags 'CDEBUGFLAGS=$(CDEBUGFLAGS)'
302311d341caSmrg */
302411d341caSmrg#ifndef NamedMakeSubdirs
302511d341caSmrg#define NamedMakeSubdirs(name,dirs) \
302611d341caSmrgNamedTargetSubdirs(name,dirs,"making" name,PassCDebugFlags,all)
302711d341caSmrg#endif /* NamedMakeSubdirs */
302811d341caSmrg
302911d341caSmrg#ifndef MakeSubdirs
303011d341caSmrg#define MakeSubdirs(dirs)						@@\
303111d341caSmrgNamedMakeSubdirs(all,dirs)
303211d341caSmrg#endif /* MakeSubdirs */
303311d341caSmrg
303411d341caSmrg
303511d341caSmrg/*
303611d341caSmrg * DependSubdirs - generate rules to recursively compute dependencies as
303711d341caSmrg * part of the make depend step.
303811d341caSmrg */
303911d341caSmrg#ifndef DependSubdirs
304011d341caSmrg#define DependSubdirs(dirs) \
304111d341caSmrgNamedTargetSubdirs(depend,dirs,"depending",NullParameter,depend)
304211d341caSmrg#endif /* DependSubdirs */
304311d341caSmrg
304411d341caSmrg
304511d341caSmrg/*
304611d341caSmrg * ForceSubdirs - force make to build subdirectories
304711d341caSmrg */
304811d341caSmrg#ifndef ForceSubdirs
304911d341caSmrg#if !HasBsdMake
305011d341caSmrg#define ForceSubdirs(dirs)						@@\
305111d341caSmrgdirs: FRC								@@\
305211d341caSmrg	@echo "making all in $(CURRENT_DIR)/$@..."			@@\
305311d341caSmrg	@MakeNamedTargetSubdir($@,PassCDebugFlags,all)			@@\
305411d341caSmrg									@@\
305511d341caSmrgFRC:
305611d341caSmrg#else
305711d341caSmrg/* For BSD 4.4 make */
305811d341caSmrg#define ForceSubdirs(dirs)						@@\
305911d341caSmrgdirs:	.EXEC								@@\
306011d341caSmrg	@cd $@ ; echo "making all in $(CURRENT_DIR)/$@..."; \		@@\
306111d341caSmrg	$(MAKE) $(MFLAGS) PassCDebugFlags all				@@\
306211d341caSmrg									@@\
306311d341caSmrg.EXEC:
306411d341caSmrg#endif
306511d341caSmrg
306611d341caSmrg#endif /* ForceSubdirs */
306711d341caSmrg
306811d341caSmrg/*
306911d341caSmrg * InstallSubdirs - generate rules to recursively install programs and files.
307011d341caSmrg */
307111d341caSmrg#ifndef InstallSubdirs
307211d341caSmrg#define InstallSubdirs(dirs) \
307311d341caSmrgNamedTargetSubdirs(install,dirs,"installing",DESTDIR=$(DESTDIR),install)
307411d341caSmrg#endif /* InstallSubdirs */
307511d341caSmrg
307611d341caSmrg
307711d341caSmrg/*
307811d341caSmrg * InstallManSubdirs - generate rules to recursively install manual pages.
307911d341caSmrg */
308011d341caSmrg#ifndef InstallManSubdirs
308111d341caSmrg#define InstallManSubdirs(dirs) \
308211d341caSmrgNamedTargetSubdirs(install.man,dirs,"installing man pages",DESTDIR=$(DESTDIR),install.man)
308311d341caSmrg#endif /* InstallManSubdirs */
308411d341caSmrg
308511d341caSmrg
308611d341caSmrg/*
308711d341caSmrg * IncludesSubdirs - generate rules to recursively put include files in build
308811d341caSmrg */
308911d341caSmrg#ifndef IncludesSubdirs
309011d341caSmrg#define IncludesSubdirs(dirs) \
309111d341caSmrgNamedTargetSubdirs(includes,dirs,including,NullParameter,includes)
309211d341caSmrg#endif
309311d341caSmrg
309411d341caSmrg
309511d341caSmrg/*
309611d341caSmrg * InstallDriverSDKSubdirs - generate rules to recursively install Driver
309711d341caSmrg *                         SDK (only used for XFree86). This is a no-op
309811d341caSmrg *                         rule so that Imakefiles on non-XFree86 systems
309911d341caSmrg *                         continue to build Makefiles correctly.
310011d341caSmrg */
310111d341caSmrg#ifndef InstallDriverSDKSubdirs
310211d341caSmrg#define InstallDriverSDKSubdirs(dirs)
310311d341caSmrg#endif
310411d341caSmrg
310511d341caSmrg/*
310611d341caSmrg * InstallDriverSDKObjectModule - generate rules to recursively install Driver
310711d341caSmrg *                         SDK (only used for XFree86). This is a no-op
310811d341caSmrg *                         rule so that Imakefiles on non-XFree86 systems
310911d341caSmrg *                         continue to build Makefiles correctly.
311011d341caSmrg */
311111d341caSmrg#ifndef InstallDriverSDKObjectModule
311211d341caSmrg#define InstallDriverSDKObjectModule(module,dest,subdir)
311311d341caSmrg#endif
311411d341caSmrg#ifndef InstallDriverSDKObjectSubModule
311511d341caSmrg#define InstallDriverSDKObjectSubModule(module,dest,subdir)
311611d341caSmrg#endif
311711d341caSmrg
311811d341caSmrg
311911d341caSmrg
312011d341caSmrg/*
312111d341caSmrg * CleanSubdirs - generate rules to recursively clean out garbage files.
312211d341caSmrg */
312311d341caSmrg#define BootstrapCleanSubdirs /**/	/* used at top-level */
312411d341caSmrg#ifndef NamedCleanSubdirs
312511d341caSmrg#define NamedCleanSubdirs(name,dirs) \
312611d341caSmrgNamedTargetSubdirs(name,dirs,"cleaning",BootstrapCleanSubdirs,clean)
312711d341caSmrg#endif /* NamedCleanSubdirs */
312811d341caSmrg
312911d341caSmrg#ifndef CleanSubdirs
313011d341caSmrg#define CleanSubdirs(dirs) \
313111d341caSmrgNamedCleanSubdirs(clean,dirs)
313211d341caSmrg#endif
313311d341caSmrg
313411d341caSmrg
313511d341caSmrg/*
313611d341caSmrg * TagSubdirs - generate rules to recursively create tags files.
313711d341caSmrg */
313811d341caSmrg#ifndef NamedTagSubdirs
313911d341caSmrg#define NamedTagSubdirs(name,dirs) \
314011d341caSmrgNamedTargetSubdirs(name,dirs,"tagging",TAGS='$(TAGS)',tags)
314111d341caSmrg#endif /* TagSubdirs */
314211d341caSmrg
314311d341caSmrg#ifndef TagSubdirs
314411d341caSmrg#define TagSubdirs(dirs) \
314511d341caSmrgNamedTagSubdirs(tags,dirs)
314611d341caSmrg#endif
314711d341caSmrg
314811d341caSmrg/*
314911d341caSmrg * MakeLintSubdirs - generate rules to recursively lint directories as part
315011d341caSmrg * of the named step.
315111d341caSmrg */
315211d341caSmrg#ifndef MakeLintSubdirs
315311d341caSmrg#define MakeLintSubdirs(dirs,target,subtarget) \
315411d341caSmrgNamedTargetSubdirs(target,dirs,"linting" for target and subtarget,DESTDIR=$(DESTDIR) LINTOPTS='$(LINTOPTS)',subtarget)
315511d341caSmrg#endif /* MakeLintSubdirs */
315611d341caSmrg
315711d341caSmrg
315811d341caSmrg/*
315911d341caSmrg * LintSubdirs - generate rules to recursively lint directories as part of
316011d341caSmrg * the make lint step.
316111d341caSmrg */
316211d341caSmrg#ifndef LintSubdirs
316311d341caSmrg#define LintSubdirs(dirs)						@@\
316411d341caSmrgMakeLintSubdirs(dirs,lint,lint)
316511d341caSmrg#endif /* LintSubdirs */
316611d341caSmrg
316711d341caSmrg
316811d341caSmrg/*
316911d341caSmrg * MakeLintLibSubdirs - generate rules to recursively create lint libraries.
317011d341caSmrg */
317111d341caSmrg#ifndef MakeLintLibSubdirs
317211d341caSmrg#define MakeLintLibSubdirs(dirs)					@@\
317311d341caSmrgMakeLintSubdirs(dirs,lintlib,lintlib)
317411d341caSmrg#endif /* MakeLintLibSubdirs */
317511d341caSmrg
317611d341caSmrg
317711d341caSmrg/*
317811d341caSmrg * MakeMakeSubdirs - generate rules to recursively recreate Makefiles as part
317911d341caSmrg * of the specified step in the build.  If $(TOP) is set to an absolute path,
318011d341caSmrg * do not prepend the ../ prefix.  This makes running things outside of the
318111d341caSmrg * source tree much easier.
318211d341caSmrg * $(ONESUBDIR)/Makefile exists as a separate, explicit target so that
318311d341caSmrg * clearmake will know what its goal is and do wink-in.
318411d341caSmrg */
318511d341caSmrg#ifndef MakeMakeSubdirs
318611d341caSmrg#define MakeMakeSubdirs(dirs,target)					@@\
318711d341caSmrg$(ONESUBDIR)/Makefile:							@@\
318811d341caSmrg	@MakeFlagsToShellFlags(n,executeit="no"); \			@@\
318911d341caSmrg	cd $(ONESUBDIR) && \						@@\
319011d341caSmrg	if [ "$$executeit" != "no" ]; then \				@@\
319111d341caSmrg		ImakeSubCmdHelper -DTOPDIR=$(IMAKETOP) -DCURDIR=$(ONECURDIR)$(ONESUBDIR); \ @@\
319211d341caSmrg	fi;								@@\
319311d341caSmrg									@@\
319411d341caSmrgtarget::								@@\
319511d341caSmrg	-@MakeFlagsToShellFlags(ik,set +e); \				@@\
319611d341caSmrg	MakeFlagsToShellFlags(n,executeit="no"); \			@@\
319711d341caSmrg	for i in dirs ;\						@@\
319811d341caSmrg	do \								@@\
319911d341caSmrg		case "$(CURRENT_DIR)" in \				@@\
320011d341caSmrg		.) curdir= ;; \						@@\
320111d341caSmrg		*) curdir=$(CURRENT_DIR)/ ;; \				@@\
320211d341caSmrg		esac; \							@@\
320311d341caSmrg		echo "making Makefiles in $$curdir$$i..."; \		@@\
320411d341caSmrg		itmp=`echo $$i | sed -e 's;^\./;;g' -e 's;/\./;/;g'`; \	@@\
320511d341caSmrg		curtmp="$(CURRENT_DIR)" \				@@\
320611d341caSmrg		toptmp=""; \						@@\
320711d341caSmrg		case "$$itmp" in \					@@\
320811d341caSmrg		    ../?*) \						@@\
320911d341caSmrg			while echo "$$itmp" | grep '^\.\./' > /dev/null;\	@@\
321011d341caSmrg			  do \						@@\
321111d341caSmrg			     toptmp="/`basename $$curtmp`$$toptmp"; \	@@\
321211d341caSmrg			     curtmp="`dirname $$curtmp`"; \		@@\
321311d341caSmrg			     itmp="`echo $$itmp | sed 's;\.\./;;'`"; \	@@\
321411d341caSmrg			  done \					@@\
321511d341caSmrg		    ;; \						@@\
321611d341caSmrg		esac; \							@@\
321711d341caSmrg		case "$$itmp" in \					@@\
321811d341caSmrg		*/?*/?*/?*/?*)	newtop=../../../../..;; \		@@\
321911d341caSmrg		*/?*/?*/?*)	newtop=../../../..;; \			@@\
322011d341caSmrg		*/?*/?*)	newtop=../../..;; \			@@\
322111d341caSmrg		*/?*)		newtop=../..;; \			@@\
322211d341caSmrg		*)		newtop=..;; \				@@\
322311d341caSmrg		esac; \							@@\
322411d341caSmrg		newtop="$$newtop$$toptmp"; \				@@\
322511d341caSmrg		case "$(TOP)" in \					@@\
322611d341caSmrg		/?*) imaketop=$(TOP) \					@@\
322711d341caSmrg		     imakeprefix= ;; \					@@\
322811d341caSmrg		.) imaketop=$$newtop \					@@\
322911d341caSmrg		   imakeprefix=$$newtop/ ;; \				@@\
323011d341caSmrg		*) imaketop=$$newtop/$(TOP) \				@@\
323111d341caSmrg		   imakeprefix=$$newtop/ ;; \				@@\
323211d341caSmrg		esac; \							@@\
323311d341caSmrg		RemoveFile($$i/Makefile.bak); \				@@\
323411d341caSmrg		if [ -f $$i/Makefile ]; then \				@@\
323511d341caSmrg			echo "	$(MV) Makefile Makefile.bak"; \		@@\
323611d341caSmrg			if [ "$$executeit" != "no" ]; then \		@@\
323711d341caSmrg				$(MV) $$i/Makefile $$i/Makefile.bak; \	@@\
323811d341caSmrg			fi; \						@@\
323911d341caSmrg		fi; \							@@\
324011d341caSmrg		$(MAKE) $(MFLAGS) $(MAKE_OPTS) ONESUBDIR=$$i ONECURDIR=$$curdir IMAKETOP=$$imaketop IMAKEPREFIX=$$imakeprefix $$i/Makefile; \	@@\
324111d341caSmrg		if [ -d $$i ] ; then \					@@\
324211d341caSmrg			cd $$i; \					@@\
324311d341caSmrg			$(MAKE) $(MFLAGS) Makefiles; \			@@\
324411d341caSmrg			cd $$newtop; \					@@\
324511d341caSmrg		else \							@@\
324611d341caSmrg			exit 1; \					@@\
324711d341caSmrg		fi; \							@@\
324811d341caSmrg	done
324911d341caSmrg
325011d341caSmrg#ifdef UseInstalled
325111d341caSmrg#define ImakeSubCmdHelper $(IMAKE_CMD)
325211d341caSmrg#else
325311d341caSmrg#define ImakeSubCmdHelper $(IMAKEPREFIX)$(IMAKE) -I$(IMAKEPREFIX)$(IRULESRC) \
325411d341caSmrg			  $(IMAKE_DEFINES) $(IMAKE_WARNINGS)
325511d341caSmrg#endif
325611d341caSmrg
325711d341caSmrg#endif /* MakeMakeSubdirs */
325811d341caSmrg
325911d341caSmrg
326011d341caSmrg/*
326111d341caSmrg * MakefileSubdirs - generate rules to create Makefiles.
326211d341caSmrg */
326311d341caSmrg#ifndef MakefileSubdirs
326411d341caSmrg#define MakefileSubdirs(dirs)						@@\
326511d341caSmrgMakeMakeSubdirs(dirs,Makefiles)
326611d341caSmrg#endif /* MakefileSubdirs */
326711d341caSmrg
326811d341caSmrg/*
326911d341caSmrg * Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM
327011d341caSmrg * to cpp, because that trick does not work on all ANSI C preprocessors.
327111d341caSmrg * Delete line numbers from the cpp output (-P is not portable, I guess).
327211d341caSmrg * Allow XCOMM to be preceded by whitespace and provide a means of generating
327311d341caSmrg * output lines with trailing backslashes.
327411d341caSmrg * Allow XHASH to always be substituted, even in cases where XCOMM isn't.
327511d341caSmrg */
327611d341caSmrg#ifndef CppSedMagic
327711d341caSmrg#define CppSedMagic sed -e '/^#  *[0-9][0-9]*  *.*$$/d' \
327811d341caSmrg			-e '/^#line  *[0-9][0-9]*  *.*$$/d' \
327911d341caSmrg			-e '/^[ 	]*XCOMM$$/s/XCOMM/#/' \
328011d341caSmrg			-e '/^[ 	]*XCOMM[^a-zA-Z0-9_]/s/XCOMM/#/' \
328111d341caSmrg			-e '/^[ 	]*XHASH/s/XHASH/#/' \
328211d341caSmrg			-e '/\@\@$$/s/\@\@$$/\\/'
328311d341caSmrg#endif /* CppSedMagic */
328411d341caSmrg
328511d341caSmrg#ifndef CppFileTarget
328611d341caSmrg#define CppFileTarget(dst,src,defs,deplist)				@@\
328711d341caSmrgdst::  src deplist							@@\
328811d341caSmrg	RemoveFile($@)							@@\
328911d341caSmrg	ClearmakeOSName \
329011d341caSmrg	$(CPP) CppNoLineInfoOption defs <src | CppSedMagic >$@		@@\
329111d341caSmrg									@@\
329211d341caSmrgclean::									@@\
329311d341caSmrg	RemoveFiles(dst)
329411d341caSmrg#endif /* CppFileTarget */
329511d341caSmrg
329611d341caSmrg/*
329711d341caSmrg * CppScriptTarget - generate rules to create a shell script by running the
329811d341caSmrg * input through cpp.  If the ExecableScripts configuration parameter is not
329911d341caSmrg * set, then make sure that the first line begins with a colon.
330011d341caSmrg */
330111d341caSmrg#ifndef CppScriptTarget
330211d341caSmrg#if ExecableScripts		/* can use #! instead of colon */
330311d341caSmrg#define CppScriptTarget(dst,src,defs,deplist)				@@\
330411d341caSmrgdst::	src deplist							@@\
330511d341caSmrg	RemoveFile($@)							@@\
330611d341caSmrg	ClearmakeOSName \
330711d341caSmrg	$(CPP) CppNoLineInfoOption defs <src | CppSedMagic >$@		@@\
330811d341caSmrg	chmod a+x $@							@@\
330911d341caSmrg									@@\
331011d341caSmrgclean::									@@\
331111d341caSmrg	RemoveFiles(dst)
331211d341caSmrg#else
331311d341caSmrg#define CppScriptTarget(dst,src,defs,deplist)				@@\
331411d341caSmrgdst::  src deplist							@@\
331511d341caSmrg	RemoveFile($@)							@@\
331611d341caSmrg	ClearmakeOSName \
331711d341caSmrg	echo \: >$@							@@\
331811d341caSmrg	sed '1d' src | $(CPP) CppNoLineInfoOption defs | CppSedMagic >>$@	@@\
331911d341caSmrg	chmod a+x $@							@@\
332011d341caSmrg									@@\
332111d341caSmrgclean::									@@\
332211d341caSmrg	RemoveFile(dst)
332311d341caSmrg#endif /* ExecableScripts */
332411d341caSmrg#endif /* CppScriptTarget */
332511d341caSmrg
332611d341caSmrg
332711d341caSmrg/*
332811d341caSmrg * MakeScriptFromCpp - generate rules to create a script from a file with a
332911d341caSmrg * .cpp suffix.
333011d341caSmrg */
333111d341caSmrg#ifndef MakeScriptFromCpp
333211d341caSmrg#define MakeScriptFromCpp(name,defs)					@@\
333311d341caSmrgCppScriptTarget(name,name.cpp,defs,NullParameter)
333411d341caSmrg#endif /* MakeScriptFromCpp */
333511d341caSmrg
333611d341caSmrg#ifndef CppSourceFile
333711d341caSmrg#define CppSourceFile(dst,src,defs,deplist)				@@\
333811d341caSmrgCppFileTarget(dst,src,defs,deplist)					@@\
333911d341caSmrg									@@\
334011d341caSmrgincludes:: dst								@@\
334111d341caSmrg									@@\
334211d341caSmrgdepend:: dst
334311d341caSmrg#endif /* CppSourceFile */
334411d341caSmrg
334511d341caSmrg/* Like CppFileTarget, but don't add any default defines */
334611d341caSmrg#ifndef CppRawFileTarget
334711d341caSmrg#define CppRawFileTarget(dst,src,defs,deplist)				@@\
334811d341caSmrgdst::  src deplist							@@\
334911d341caSmrg	RemoveFile($@)							@@\
335011d341caSmrg	ClearmakeOSName \
335111d341caSmrg	$(RAWCPP) CppNoLineInfoOption defs <src | CppSedMagic >$@	@@\
335211d341caSmrg									@@\
335311d341caSmrgclean::									@@\
335411d341caSmrg	RemoveFiles(dst)
335511d341caSmrg#endif /* CppFileTarget */
335611d341caSmrg
335711d341caSmrg/*
335811d341caSmrg * CppManTarget - preprocess man pages.  OS-specific man sections are replaced.
335911d341caSmrg */
336011d341caSmrg#ifndef CppManTarget
336111d341caSmrg#define CppManTarget(name,defs)						@@\
336211d341caSmrgAllTarget(name.$(MANNEWSUFFIX))						@@\
336311d341caSmrg									@@\
336411d341caSmrgname.$(MANNEWSUFFIX): name.$(MANSRCSUFFIX)				@@\
336511d341caSmrg	RemoveFile($@)							@@\
336611d341caSmrg	if test -z "$(PREPROCESSMANPAGES)" ; then \			@@\
336711d341caSmrg	   cd `dirname name` && \					@@\
336811d341caSmrg	   $(LN) `basename name.$(MANSRCSUFFIX)` `basename $@`; \	@@\
336911d341caSmrg	else \								@@\
337011d341caSmrg	     ClearmakeOSName \
337111d341caSmrg	     $(RAWCPP) CppNoLineInfoOption $(MANDEFS) defs \		@@\
337211d341caSmrg	     < name.$(MANSRCSUFFIX) | CppSedMagic >$@; \		@@\
337311d341caSmrg	fi								@@\
337411d341caSmrg									@@\
337511d341caSmrgclean::									@@\
337611d341caSmrg	RemoveFile(name.$(MANNEWSUFFIX))
337711d341caSmrg#endif /* CppManTarget */
337811d341caSmrg
337911d341caSmrg/*
338011d341caSmrg * MakeDirectories - generate rules to create a hierarchy of directories.
338111d341caSmrg */
338211d341caSmrg#ifndef MakeDirectories
338311d341caSmrg#define MakeDirectories(step,dirs)					@@\
338411d341caSmrgstep::									@@\
338511d341caSmrg	DirFailPrefix@MakeFlagsToShellFlags(i,set +e); \		@@\
338611d341caSmrg	for i in dirs; do if [ -d $(DESTDIR)$$i ]; then \		@@\
338711d341caSmrg		set +x; else (set -x; $(MKDIRHIER) $(DESTDIR)$$i); fi; \ @@\
338811d341caSmrg	done
338911d341caSmrg#endif /* MakeDirectories */
339011d341caSmrg
339111d341caSmrg
339211d341caSmrg/*
339311d341caSmrg * AllTarget - generate rules to build necessary things during make all.
339411d341caSmrg */
339511d341caSmrg#ifndef AllTarget
339611d341caSmrg#define AllTarget(depends)						@@\
339711d341caSmrgall:: depends
339811d341caSmrg#endif /* AllTarget */
339911d341caSmrg
340011d341caSmrg#ifdef DefineOldLibraryRules
340111d341caSmrg#include <oldlib.rules>
340211d341caSmrg#endif
340311d341caSmrg
340411d341caSmrg#ifndef StaticLibrary
340511d341caSmrg#define StaticLibrary(libpath,libname) Concat3(libpath,/,LibraryTargetName(libname))
340611d341caSmrg#endif
340711d341caSmrg
340811d341caSmrg/*
340911d341caSmrg * MakeMutex - generate mutex rules for parallel make
341011d341caSmrg */
341111d341caSmrg#ifndef MakeMutex
341211d341caSmrg#ifdef MutexDirective
341311d341caSmrg#define MakeMutex(targets)						@@\
341411d341caSmrgMutexDirective:	targets
341511d341caSmrg#endif /* MutexDirective */
341611d341caSmrg#endif /* MakeMutex */
341711d341caSmrg
341811d341caSmrg/*
341911d341caSmrg * Rules for dynamic modules.  These are primarily used by XFree86
342011d341caSmrg */
342111d341caSmrg
342211d341caSmrg#ifndef LinkBuildModule
342311d341caSmrg#ifdef UseInstalled
342411d341caSmrg#define LinkBuildModule(module,subdir) $(_NULLCMD_)
342511d341caSmrg#else
342611d341caSmrg#define LinkBuildModule(module,subdir)\
342711d341caSmrg	MakeDir($(BUILDMODULEDIR)/subdir)				@@\
342811d341caSmrg	RemoveFile($(BUILDMODULEDIR)/subdir/module)			@@\
342911d341caSmrg	@(UP="`$(REVPATH) subdir`"; set -x; \				@@\
343011d341caSmrg	  cd $(BUILDMODULEDIR)/subdir && \				@@\
343111d341caSmrg		$(LN) $(BUILDMODULETOP)/$${UP}$(CURRENT_DIR)/module .)
343211d341caSmrg#endif
343311d341caSmrg#endif /* LinkBuildModule */
343411d341caSmrg
343511d341caSmrg#ifndef LinkBuildNamedModule
343611d341caSmrg#ifdef UseInstalled
343711d341caSmrg#define LinkBuildNamedModule(module,name,subdir) $(_NULLCMD_)
343811d341caSmrg#else
343911d341caSmrg#define LinkBuildNamedModule(module,name,subdir)\
344011d341caSmrg	MakeDir($(BUILDMODULEDIR)/subdir)				@@\
344111d341caSmrg	RemoveFile($(BUILDMODULEDIR)/subdir/name)			@@\
344211d341caSmrg	@(UP="`$(REVPATH) subdir`"; set -x; \				@@\
344311d341caSmrg	  cd $(BUILDMODULEDIR)/subdir && \				@@\
344411d341caSmrg		$(LN) $(BUILDMODULETOP)/$${UP}$(CURRENT_DIR)/module name)
344511d341caSmrg#endif
344611d341caSmrg#endif /* LinkBuildNamedModule */
344711d341caSmrg
344811d341caSmrg/*
344911d341caSmrg * ModuleObjectRule
345011d341caSmrg */
345111d341caSmrg#ifndef ModuleObjectRule
345211d341caSmrg#define ModuleObjectRule() NormalLibraryObjectRule()
345311d341caSmrg#endif
345411d341caSmrg
345511d341caSmrg/*
345611d341caSmrg * ObjectModuleTarget - build a module as a single object file
345711d341caSmrg */
345811d341caSmrg#ifndef ObjectModuleTarget
345911d341caSmrg#if MakeDllModules && DoLoadableServer
346011d341caSmrg#define ObjectModuleTarget(module,objects)				@@\
346111d341caSmrgDynamicModuleTarget(Concat(module,_drv.so), objects)
346211d341caSmrg#else
346311d341caSmrg#define ObjectModuleTarget(module,objects)				@@\
346411d341caSmrgNormalRelocatableTarget(Concat(module,_drv), objects)
346511d341caSmrg#endif
346611d341caSmrg#endif
346711d341caSmrg
346811d341caSmrg/*
346911d341caSmrg * LibraryModuleTarget
347011d341caSmrg */
347111d341caSmrg#ifndef LibraryModuleTarget
347211d341caSmrg#if MakeDllModules && DoLoadableServer
347311d341caSmrg#define LibraryModuleTarget(module,objects)				@@\
347411d341caSmrgNormalLibraryTarget(module, objects)					@@\
347511d341caSmrgDynamicModuleTarget(Concat3(lib,module,.so), objects)
347611d341caSmrg#else
347711d341caSmrg#define LibraryModuleTarget(module, objects)				@@\
347811d341caSmrgNormalLibraryTarget(module, objects)
347911d341caSmrg#endif
348011d341caSmrg#endif
348111d341caSmrg
348211d341caSmrg/*
348311d341caSmrg * DepLibraryModuleTarget
348411d341caSmrg */
348511d341caSmrg#ifndef DepLibraryModuleTarget
348611d341caSmrg#if MakeDllModules && DoLoadableServer
348711d341caSmrg#define DepLibraryModuleTarget(module,deplist,objects)			@@\
348811d341caSmrgNormalDepLibraryTarget(module, deplist, objects)			@@\
348911d341caSmrgDepDynamicModuleTarget(Concat3(lib,module,.so), deplist, objects)
349011d341caSmrg#else
349111d341caSmrg#define DepLibraryModuleTarget(module,deplist,objects)			@@\
349211d341caSmrgNormalDepLibraryTarget(module, deplist, objects)
349311d341caSmrg#endif
349411d341caSmrg#endif
349511d341caSmrg
349611d341caSmrg/*
349711d341caSmrg * DynamicModuleTarget - build a module to be dynamically loaded
349811d341caSmrg */
349911d341caSmrg#ifndef DynamicModuleTarget
350011d341caSmrg#define DynamicModuleTarget(module,modlist)				@@\
350111d341caSmrgAllTarget(module)							@@\
350211d341caSmrg									@@\
350311d341caSmrgmodule: modlist								@@\
350411d341caSmrg	RemoveFile($@)							@@\
350511d341caSmrg	$(CC) -o $@ $(SHLIBLDFLAGS) $(NOSTDLIB) modlist $(POSTNOSTDLIB) @@\
350611d341caSmrg									@@\
350711d341caSmrgclean::									@@\
350811d341caSmrg	RemoveFile(module)
350911d341caSmrg#endif /* DynamicModuleTarget */
351011d341caSmrg
351111d341caSmrg/*
351211d341caSmrg * DepDynamicModuleTarget - build a module to be dynamically loaded
351311d341caSmrg */
351411d341caSmrg#ifndef DepDynamicModuleTarget
351511d341caSmrg#define DepDynamicModuleTarget(module,deplist,modlist)			@@\
351611d341caSmrgAllTarget(module)							@@\
351711d341caSmrg									@@\
351811d341caSmrgmodule: deplist								@@\
351911d341caSmrg	RemoveFile($@)							@@\
352011d341caSmrg	$(CC) -o $@ $(SHLIBLDFLAGS) $(NOSTDLIB) modlist $(POSTNOSTDLIB) @@\
352111d341caSmrg									@@\
352211d341caSmrgclean::									@@\
352311d341caSmrg	RemoveFile(module)
352411d341caSmrg#endif /* DepDynamicModuleTarget */
352511d341caSmrg
352611d341caSmrg/*
352711d341caSmrg * InstallDynamicModule - install a dynamic module
352811d341caSmrg */
352911d341caSmrg#ifndef InstallDynamicModule
353011d341caSmrg#define InstallDynamicModule(module,dest,subdir)			@@\
353111d341caSmrgAllTarget(module)							@@\
353211d341caSmrg	LinkBuildModule(module,subdir)					@@\
353311d341caSmrg									@@\
353411d341caSmrginstall:: module							@@\
353511d341caSmrg	MakeDir($(DESTDIR)dest/subdir)					@@\
353611d341caSmrg	$(INSTALL) -c $(INSTDATFLAGS) module $(DESTDIR)dest/subdir
353711d341caSmrg#endif
353811d341caSmrg
353911d341caSmrg#ifndef InstallDynamicNamedModule
354011d341caSmrg#define InstallDynamicNamedModule(module,instname,dest,subdir)		@@\
354111d341caSmrgAllTarget(module)							@@\
354211d341caSmrg	LinkBuildNamedModule(module,instname,subdir)			@@\
354311d341caSmrg									@@\
354411d341caSmrginstall:: module							@@\
354511d341caSmrg	MakeDir($(DESTDIR)dest/subdir)					@@\
354611d341caSmrg	$(INSTALL) -c $(INSTDATFLAGS) module $(DESTDIR)dest/subdir/instname
354711d341caSmrg#endif
354811d341caSmrg
354911d341caSmrg/* Shortcuts for installing driver module, one per class */
355011d341caSmrg#ifndef InstallVideoObjectModule
355111d341caSmrg#define InstallVideoObjectModule(module,dest)                          @@\
355211d341caSmrgInstallObjectModule(module,dest,drivers)
355311d341caSmrg#endif
355411d341caSmrg#ifndef InstallInputObjectModule
355511d341caSmrg#define InstallInputObjectModule(module,dest)                          @@\
355611d341caSmrgInstallObjectModule(module,dest,input)
355711d341caSmrg#endif
355811d341caSmrg#ifndef InstallExtensionsObjectModule
355911d341caSmrg#define InstallExtensionsObjectModule(module,dest)                     @@\
356011d341caSmrgInstallObjectModule(module,dest,extensions)
356111d341caSmrg#endif
356211d341caSmrg#ifndef InstallFontsObjectModule
356311d341caSmrg#define InstallFontsObjectModule(module,dest)                          @@\
356411d341caSmrgInstallObjectModule(module,dest,fonts)
356511d341caSmrg#endif
356611d341caSmrg#ifndef InstallMultimediaObjectModule
356711d341caSmrg#define InstallMultimediaObjectModule(module,dest)                     @@\
356811d341caSmrgInstallObjectModule(module,dest,multimedia)
356911d341caSmrg#endif
357011d341caSmrg
357111d341caSmrg#ifndef InstallObjectModule
357211d341caSmrg#if !DoLoadableServer
357311d341caSmrg#define InstallObjectModule(module,dest,subdir)	/**/
357411d341caSmrg#else
357511d341caSmrg#if MakeDllModules
357611d341caSmrg#define InstallObjectModule(module,dest,subdir)				@@\
357711d341caSmrgInstallDynamicModule(Concat(module,_drv.so),dest,subdir)
357811d341caSmrg#else
357911d341caSmrg#define InstallObjectModule(module,dest,subdir)				@@\
358011d341caSmrgInstallDynamicModule(Concat(module,_drv.o),dest,subdir)
358111d341caSmrg#endif
358211d341caSmrg#endif
358311d341caSmrg#endif
358411d341caSmrg
358511d341caSmrg#ifndef InstallLibraryModule
358611d341caSmrg#if !DoLoadableServer
358711d341caSmrg#define InstallLibraryModule(module,dest,subdir)	/**/
358811d341caSmrg#else
358911d341caSmrg#if MakeDllModules
359011d341caSmrg#define InstallLibraryModule(module,dest,subdir)			@@\
359111d341caSmrgInstallDynamicModule(Concat3(lib,module,.so),dest,subdir)
359211d341caSmrg#else
359311d341caSmrg#define InstallLibraryModule(module,dest,subdir)			@@\
359411d341caSmrgInstallDynamicModule(ModuleLibraryTargetName(module),dest,subdir)
359511d341caSmrg#endif
359611d341caSmrg#endif
359711d341caSmrg#endif
359811d341caSmrg
359911d341caSmrg#ifndef InstallModuleManPage
360011d341caSmrg#define InstallModuleManPage(module)					@@\
360111d341caSmrgInstallGenManPage(module,$(DRIVERMANDIR),$(DRIVERMANSUFFIX))
360211d341caSmrg#endif
360311d341caSmrg
360411d341caSmrg#ifndef BuildObjectFromLibraryWithPath
360511d341caSmrg#define BuildObjectFromLibraryWithPath(libpath,libname,objname)		@@\
360611d341caSmrgAllTarget(objname.Osuf)							@@\
360711d341caSmrg									@@\
360811d341caSmrgobjname.Osuf: Concat3(libpath,/lib,libname.a)				@@\
360911d341caSmrg	@$(MKDIRHIER) tmp						@@\
361011d341caSmrg	@$(CP) Concat3(libpath,/lib,libname.a) tmp			@@\
361111d341caSmrg	@(cd tmp; set -x; ArExtCmd Concat(lib,libname.a); \		@@\
361211d341caSmrg	  $(LD) $(LDCOMBINEFLAGS) *.Osuf -o ../$@; \			@@\
361311d341caSmrg	  RemoveFiles(*.Osuf))						@@\
361411d341caSmrg	@$(RM) -r tmp							@@\
361511d341caSmrg									@@\
361611d341caSmrgclean::									@@\
361711d341caSmrg	RemoveFile(objname.Osuf)
361811d341caSmrg#endif
361911d341caSmrg
362011d341caSmrg#ifndef BuildObjectFromLibrary
362111d341caSmrg#define BuildObjectFromLibrary(libname,objname) BuildObjectFromLibraryWithPath(.,libname,objname)
362211d341caSmrg#endif
362311d341caSmrg
362411d341caSmrg/*
362511d341caSmrg * LinkerRuntimeLibraryPathFlag - defined here to be a no-op for systems that
362611d341caSmrg * don't need it.   Overridden in system-specific config files for systems that
362711d341caSmrg * need it, usually with something like "Concat(-R,path)"
362811d341caSmrg */
362911d341caSmrg#ifndef LinkerRuntimeLibraryPathFlag
363011d341caSmrg# define LinkerRuntimeLibraryPathFlag(path)  /* */
363111d341caSmrg#endif
363211d341caSmrg
363311d341caSmrg/* Phony targets - GNU make has a feature to mark a target as phony,
3634944bff83Smrg * which means that it won't consider that target to be the name of a
363511d341caSmrg * file.  In general this speeds up make, since it doesn't have to
363611d341caSmrg * look for those files when it sets out to create a phony target.
363711d341caSmrg * However, on cygwin, this is actually required for correct
363811d341caSmrg * operation, since the Win32 filesystems are case insensitive and the
363911d341caSmrg * install target conflicts with the INSTALL file present in some
364011d341caSmrg * (autotooled) directories.
364111d341caSmrg *
364211d341caSmrg * We probably don't need the #ifdef protection, since other make
364311d341caSmrg * implementations would just consider this a normal rule.  Better
364411d341caSmrg * safe than sorry, though.
364511d341caSmrg */
364611d341caSmrg#if HasGnuMake
364711d341caSmrg.PHONY: all interfaces install install.man install.lib install.sdk \
364811d341caSmrg	depend includes clean
364911d341caSmrg#endif
3650