3650 lines
113 KiB
Plaintext
3650 lines
113 KiB
Plaintext
|
XCOMM ---------------------------------------------------------------------
|
||
|
XCOMM Imake rules for building libraries, programs, scripts, and data files
|
||
|
XCOMM rules: $Xorg: Imake.rules,v 1.3 2000/08/17 19:41:46 cpqbld Exp $
|
||
|
XCOMM rules: $XdotOrg: util/cf/Imake.rules,v 1.11 2005/11/08 06:33:24 jkj Exp $
|
||
|
XCOMM
|
||
|
XCOMM
|
||
|
XCOMM
|
||
|
XCOMM
|
||
|
XCOMM rules: $XFree86: xc/config/cf/Imake.rules,v 3.128 2003/11/15 03:25:17 dawes Exp $
|
||
|
|
||
|
/*
|
||
|
* MACHINE-INDEPENDENT RULES; DO NOT MODIFY
|
||
|
*
|
||
|
* Warning, when defining rules: make sure you do not include both a trailing
|
||
|
* backslash and double ampersand backslash or else you will get an extra
|
||
|
* backslash in the Makefile.
|
||
|
*
|
||
|
* The following macros are defined for the various templates and Imakefiles
|
||
|
* (for a list of the applicable make variables, see the template files):
|
||
|
*
|
||
|
* Concat (a,b)
|
||
|
* Concat3 (a,b,c)
|
||
|
* Concat4 (a,b,c,d)
|
||
|
* _Use (a,b)
|
||
|
* _UseCat (a,b,c)
|
||
|
* _MUse (a,b)
|
||
|
* _MUseCat (a,b,c)
|
||
|
* ProgramTargetName (target)
|
||
|
* HostProgramTargetName (target)
|
||
|
* RunProgram (progvar,options)
|
||
|
* RunProgramWithSetup (setup,progvar,options)
|
||
|
* RemoveFile (file)
|
||
|
* RemoveFiles (files)
|
||
|
* CenterLoadTarget (target,srclist,libs,defines)
|
||
|
* CenterProgramTarget (program,srclist,objlist,locallibs,syslibs)
|
||
|
* SentinelLinkTarget (step,program,linklist)
|
||
|
* SentinelProgramTarget (program,deplist,linklist)
|
||
|
* SentinelCplusplusProgramTarget (program,deplist,linklist)
|
||
|
* PurifyLinkTarget (step,program,linklist)
|
||
|
* PurifyProgramTarget (program,deplist,linklist)
|
||
|
* PurifyCplusplusProgramTarget (program,deplist,linklist)
|
||
|
* ProofLinkTarget (step,program,linklist)
|
||
|
* ProofProgramTarget (program,deplist,linklist)
|
||
|
* ProofCplusplusProgramTarget (program,deplist,linklist)
|
||
|
* ProofCleanTarget ()
|
||
|
* RemoveTargetProgram (program)
|
||
|
* MakeDir (dir)
|
||
|
* InstallDirectory (dir)
|
||
|
* BuildIncludesTop (srclist)
|
||
|
* BuildIncludes (srclist,dstsubdir,dstupdir)
|
||
|
* LinkRule (program,options,objects,libraries)
|
||
|
* HostLinkRule (program,options,objects,libraries)
|
||
|
* NoCmpScript (target)
|
||
|
* NoConfigRec (target)
|
||
|
* NormalProgramTarget (program,objects,deplibs,locallibs,syslibs)
|
||
|
* SetUIDProgramTarget (program,objects,deplibs,locallibs,syslibs)
|
||
|
* SingleProgramTarget (program,objects,locallibs,syslibs)
|
||
|
* SimpleProgramTarget (program)
|
||
|
* ComplexProgramTarget (program)
|
||
|
* ComplexProgramTarget_1 (program,locallib,syslib)
|
||
|
* ComplexProgramTarget_2 (program,locallib,syslib)
|
||
|
* ComplexProgramTarget_3 (program,locallib,syslib)
|
||
|
* ServerTargetWithFlags (server,subdirs,objects,libs,syslibs,flags)
|
||
|
* ServerTarget (server,subdirs,objects,libs,syslibs)
|
||
|
* MoveToBakFile (file)
|
||
|
* RMoveToBakFile (file)
|
||
|
* RanLibrary (args)
|
||
|
* LibraryTargetName (libname)
|
||
|
* LibraryTargetNameSuffix (libname,suffix)
|
||
|
* InstallNamedTarget (step,srcname,flags,dest,dstname)
|
||
|
* InstallTarget (step,file,flags,dest)
|
||
|
* InstallLibrary (libname,dest)
|
||
|
* MergeIntoInstalledLibrary (tolib,fromlib)
|
||
|
* InstallLibraryAlias (libname,alias,dest)
|
||
|
* InstallLintLibrary (libname,dest)
|
||
|
* InstallManPageLong (file,destdir,dest)
|
||
|
* InstallManPage (file,destdir)
|
||
|
* InstallManPageAliases (file,destdir,aliases)
|
||
|
* ManKeywordsTarget (manpath)
|
||
|
* InstallNamedNonExec (srcname,dstname,dest)
|
||
|
* InstallNonExecFile (file,dest)
|
||
|
* InstallNonExecFileNoClobber (file,dest)
|
||
|
* InstallNonExec (file,dest)
|
||
|
* InstallProgramWithFlags (program,dest,flags)
|
||
|
* InstallProgram (program,dest)
|
||
|
* InstallScript (program,dest)
|
||
|
* InstallNamedProg (srcname,dstname,dest)
|
||
|
* InstallNamedProgNoClobber (srcname,dstname,dest)
|
||
|
* MakeFlagsToShellFlags (makeflags,shellcmd)
|
||
|
* MakeNamedTargetSubdir (dir,flags,subname)
|
||
|
* LinkConfDirectoryLong (mdir,cdir,rdir,ldir,opath,npath)
|
||
|
* LinkConfDirectory (mdir,cdir,rdir,ldir)
|
||
|
* LinkConfFileLong (cfile,lfile,opath,npath)
|
||
|
* LinkConfFile (cfile,lfile)
|
||
|
* LinkFileList (step,list,dir,sub)
|
||
|
* LinkVarDirectory (mdir,cdir,rdir,ldir)
|
||
|
* InstallMultipleDestFlags (step,list,dest,flags)
|
||
|
* InstallMultipleDest (step,list,dest)
|
||
|
* InstallMultiple (list,dest)
|
||
|
* InstallMultipleFlags (list,dest,flags)
|
||
|
* InstallMultipleMan (list,dest)
|
||
|
* InstallMultipleManSuffix (list,dest,suffix)
|
||
|
* DependDependency ()
|
||
|
* DependTarget ()
|
||
|
* DependTarget3 (srcs1,srcs2,srcs3)
|
||
|
* CleanTarget ()
|
||
|
* TagsTarget ()
|
||
|
* ImakeDependency (target)
|
||
|
* BuildMakefileTarget (notused,imakeflags)
|
||
|
* MakefileTarget ()
|
||
|
* LibMkdir (dir)
|
||
|
* LibCleanDir (dir)
|
||
|
* LintLibReferences (varname,libname,libsource)
|
||
|
* UnsharedLibReferences (varname,libname,libsource)
|
||
|
* ProjectUnsharedLibReferences (varname,libname,libsource,buildlibdir)
|
||
|
* SharedLibDependencies (libname,libsource,revname)
|
||
|
* SharedDSLibDependencies (libname,libsource,revname)
|
||
|
* SharedLibReferences (varname,libname,libsource,revname,rev)
|
||
|
* SharedDSLibReferences (varname,libname,libsource,revname,rev)
|
||
|
* ObjectCompile (options)
|
||
|
* NormalLibObjCompile (options)
|
||
|
* NormalSharedLibObjCompile (options)
|
||
|
* NormalRelocLibObjCompile (options)
|
||
|
* LibObjCompile (dir,options)
|
||
|
* DebuggedLibObjCompile (options)
|
||
|
* ProfiledLibObjCompile (options)
|
||
|
* SharedLibObjCompile (options)
|
||
|
* NormalLibraryObjectRule ()
|
||
|
* NormalFortranObjectRule ()
|
||
|
* ObjectFromSpecialSource (dst,src,flags)
|
||
|
* SpecialObjectRule (objs,depends,options)
|
||
|
* SpecialCObjectRule (basename,depends,options)
|
||
|
* LexFile (file)
|
||
|
* M4File (file,includes)
|
||
|
* YaccFile (file,flags)
|
||
|
* YaccFileNoFlags (file)
|
||
|
* MakeLibrary (libname,objlist)
|
||
|
* LinkBuildLibrary (lib)
|
||
|
* LinkBuildSonameLibrary (lib)
|
||
|
* NormalLibraryTarget (libname,objlist)
|
||
|
* NormalLibraryTarget2 (libname,objlist1,objlist2)
|
||
|
* NormalLibraryTarget3 (libname,objlist1,objlist2,objlist3)
|
||
|
* NormalDepLibraryTarget (libname,deplist,objlist)
|
||
|
* UnsharedLibraryTarget (libname,objlist,down,up)
|
||
|
* UnsharedLibraryTarget3 (libname,objlist1,objlist2,objlist3,down,up)
|
||
|
* SubdirLibraryRule (objlist)
|
||
|
* ProfiledLibraryTarget (libname,objlist)
|
||
|
* DebuggedLibraryTarget (libname,objlist)
|
||
|
* AliasedLibraryTarget (libname,alias)
|
||
|
* NormalRelocatableTarget (objname,objlist)
|
||
|
* ProfiledRelocatableTarget (objname,objlist)
|
||
|
* DebuggedRelocatableTarget (objname,objlist)
|
||
|
* LintLibraryTarget (libname,srclist)
|
||
|
* NormalLintTarget (srclist)
|
||
|
* LintTarget ()
|
||
|
* LinkSourceFile (src,dir)
|
||
|
* LinkFile (tofile,fromfile)
|
||
|
* MakeSubincludesForBuild (step,dir,srclist)
|
||
|
* LangNamedTargetSubdirs (lang,name,dirs,verb,flags,subname)
|
||
|
* LangNamedMakeSubdirs (lang,name,dirs)
|
||
|
* LangMakeSubdirs (lang,dirs)
|
||
|
* NamedTargetSubdirs (name,dirs,verb,flags,subname)
|
||
|
* NamedMakeSubdirs (name,dirs)
|
||
|
* MakeSubdirs (dirs)
|
||
|
* DependSubdirs (dirs)
|
||
|
* ForceSubdirs (dirs)
|
||
|
* InstallSubdirs (dirs)
|
||
|
* InstallManSubdirs (dirs)
|
||
|
* IncludesSubdirs (dirs)
|
||
|
* NamedCleanSubdirs (name,dirs)
|
||
|
* CleanSubdirs (dirs)
|
||
|
* NamedTagSubdirs (name,dirs)
|
||
|
* TagSubdirs (dirs)
|
||
|
* MakeLintSubdirs (dirs,target,subtarget)
|
||
|
* LintSubdirs (dirs)
|
||
|
* MakeLintLibSubdirs (dirs)
|
||
|
* MakeMakeSubdirs (dirs,target)
|
||
|
* MakefileSubdirs (dirs)
|
||
|
* CppScriptTarget (dst,src,defs,deplist)
|
||
|
* MakeScriptFromCpp (name,defs)
|
||
|
* CppFileTarget (dst,src,defs,deplist)
|
||
|
* CppSourceFile (dst,src,defs,deplist)
|
||
|
* MakeDirectories (step,dirs)
|
||
|
* AllTarget (depends)
|
||
|
* StaticLibrary (libpath,libname)
|
||
|
* MakeMutex (targets)
|
||
|
* LinkBuildModule (module,subdir)
|
||
|
* LinkBuildNamedModule (module,name,subdir)
|
||
|
* DynamicModuleTarget (module,modlist)
|
||
|
* InstallDynamicModule (module,dest,subdir)
|
||
|
* InstallDynamicNamedModule (module,instname,dest,subdir)
|
||
|
* LinkerRuntimeLibraryPathFlag (path)
|
||
|
*
|
||
|
*
|
||
|
* The following are in specific <os>Lib.rules:
|
||
|
*
|
||
|
* SharedLibraryTarget (libname,rev,solist,down,up)
|
||
|
* SharedLibraryDataTarget (libname,rev,salist)
|
||
|
* InstallSharedLibrary (libname,rev,dest)
|
||
|
* InstallSharedLibraryData (libname,rev,dest)
|
||
|
* SharedDepModuleTarget (name,deps,solist)
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#define NullParameter
|
||
|
|
||
|
/* if [ -d ] or [ ! -d ] causes make to fail, define this as - */
|
||
|
#ifndef DirFailPrefix
|
||
|
#define DirFailPrefix
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* NoCmpScript - suppress clearmake build script comparison.
|
||
|
*/
|
||
|
#ifndef NoCmpScript
|
||
|
#if HasClearmake
|
||
|
#define NoCmpScript(targ) @@\
|
||
|
XCOMM special target for clearmake @@\
|
||
|
.NO_CMP_SCRIPT: targ
|
||
|
#else
|
||
|
#define NoCmpScript(targ) /**/
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* NoConfigRec - suppress using clearmake configuration records.
|
||
|
*/
|
||
|
#ifndef NoConfigRec
|
||
|
#if HasClearmake
|
||
|
#define NoConfigRec(targ) @@\
|
||
|
XCOMM special target for clearmake @@\
|
||
|
.NO_CONFIG_REC: targ
|
||
|
#else
|
||
|
#define NoConfigRec(targ) /**/
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* Concat - concatenates two strings.
|
||
|
*/
|
||
|
#ifndef Concat
|
||
|
#if (defined(__STDC__) && !defined(UnixCpp)) || defined(AnsiCpp)
|
||
|
#define Concat(a,b)a##b
|
||
|
#else
|
||
|
#define Concat(a,b)a/**/b
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* Concat3 - concatenates three strings.
|
||
|
*/
|
||
|
#ifndef Concat3
|
||
|
#if (defined(__STDC__) && !defined(UnixCpp)) || defined(AnsiCpp)
|
||
|
#define Concat3(a,b,c)a##b##c
|
||
|
#else
|
||
|
#define Concat3(a,b,c)a/**/b/**/c
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* Concat4 - concatenates four strings.
|
||
|
*/
|
||
|
#ifndef Concat4
|
||
|
#if (defined(__STDC__) && !defined(UnixCpp)) || defined(AnsiCpp)
|
||
|
#define Concat4(a,b,c,d)a##b##c##d
|
||
|
#else
|
||
|
#define Concat4(a,b,c,d)a/**/b/**/c/**/d
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* _XUse - makes a choice based on UseInstalledX11.
|
||
|
*/
|
||
|
#ifndef _XUse
|
||
|
# if defined(UseInstalled) || UseInstalledX11
|
||
|
# define _XUse(a,b) a
|
||
|
# else
|
||
|
# define _XUse(a,b) b
|
||
|
# endif
|
||
|
#endif /* _XUse */
|
||
|
|
||
|
/*
|
||
|
* _Use - makes a choice based on UseInstalled.
|
||
|
*/
|
||
|
#ifndef _Use
|
||
|
# define _Use _XUse
|
||
|
#endif /* _Use */
|
||
|
|
||
|
/*
|
||
|
* _XUseCat - combination of _XUse and Concat.
|
||
|
* exists to avoid problems with some preprocessors
|
||
|
*/
|
||
|
#ifndef _XUseCat
|
||
|
# if (defined(__STDC__) && !defined(UnixCpp)) || defined(AnsiCpp)
|
||
|
# if defined(UseInstalled) || UseInstalledX11
|
||
|
# define _XUseCat(a,b,c) a##c
|
||
|
# else
|
||
|
# define _XUseCat(a,b,c) b##c
|
||
|
# endif
|
||
|
# else
|
||
|
# if defined(UseInstalled) || UseInstalledX11
|
||
|
# define _XUseCat(a,b,c) a/**/c
|
||
|
# else
|
||
|
# define _XUseCat(a,b,c) b/**/c
|
||
|
# endif
|
||
|
# endif
|
||
|
#endif /* _XUseCat */
|
||
|
|
||
|
/*
|
||
|
* _UseCat - combination of _Use and Concat.
|
||
|
* exists to avoid problems with some preprocessors
|
||
|
*/
|
||
|
#ifndef _UseCat
|
||
|
# define _UseCat _XUseCat
|
||
|
#endif /* _UseCat */
|
||
|
|
||
|
#ifndef ProgramTargetName
|
||
|
#define ProgramTargetName(target)target
|
||
|
#endif
|
||
|
|
||
|
#ifndef HostProgramTargetName
|
||
|
#define HostProgramTargetName(target)target
|
||
|
#endif
|
||
|
|
||
|
#ifndef RunProgram
|
||
|
#define RunProgram(progvar,options) $(progvar) options
|
||
|
#endif
|
||
|
|
||
|
#ifndef RunProgramWithSetup
|
||
|
#define RunProgramWithSetup(setup,progvar,options) setup $(progvar) options
|
||
|
#endif
|
||
|
|
||
|
#ifndef RunPerlScript
|
||
|
#define RunPerlScript(script,options) $(PERLENVSETUP) $(PERL) $(PERLOPTS) script options
|
||
|
#endif
|
||
|
|
||
|
#ifndef RemoveFile
|
||
|
#define RemoveFile(file) $(RM) file
|
||
|
#endif /* RemoveFile */
|
||
|
|
||
|
#ifndef RemoveFiles
|
||
|
#define RemoveFiles(files) $(RM) files
|
||
|
#endif /* RemoveFiles */
|
||
|
|
||
|
#if RemoveObsoleteFiles
|
||
|
#define RemoveOldFile(new,old,dir) @@\
|
||
|
@if [ -f new ]; then set -x; \ @@\
|
||
|
RemoveFile($(DESTDIR)dir/old); \ @@\
|
||
|
fi
|
||
|
#else
|
||
|
#define RemoveOldFile(new,old,dir) $(_NULLCMD_)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* CenterLoadTarget - generate rules to load files into CodeCenter
|
||
|
*/
|
||
|
#ifndef CenterLoadTarget
|
||
|
#if HasCodeCenter
|
||
|
#define CenterLoadTarget(target,srclist,libs,defines) @@\
|
||
|
ProgramTargetName(target):: srclist @@\
|
||
|
XCOMM load defines srclist libs
|
||
|
#else
|
||
|
#define CenterLoadTarget(target,srclist,libs,defines) /**/
|
||
|
#endif
|
||
|
#endif /* CenterLoadTarget */
|
||
|
|
||
|
/*
|
||
|
* CenterProgramTarget - generate rules to make CodeCenter read in sources
|
||
|
* and objects.
|
||
|
*/
|
||
|
#ifndef CenterProgramTarget
|
||
|
#define CenterProgramTarget(program,srclist,objlist,locallibs,syslibs) @@\
|
||
|
CenterLoadTarget(Concat(debug_,program),srclist,$(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS) $(LDPRELIBS) locallibs $(LDLIBS) syslibs,$(ALLDEFINES)) @@\
|
||
|
@@\
|
||
|
CenterLoadTarget(Concat(odebug_,program),objlist,$(EXTRA_LDOPTIONS) $(LOCAL_LDFLAGS) $(LDPRELIBS) locallibs $(LDLIBS) syslibs,$(ALLDEFINES))
|
||
|
#endif /* CenterProgramTarget */
|
||
|
|
||
|
#ifndef SentinelLinkTarget
|
||
|
#if HasSentinel
|
||
|
#define SentinelLinkTarget(step,program,linklist) @@\
|
||
|
ProgramTargetName(step.sentinel): @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
$(CCENVSETUP) $(SENTINEL) $(SENTINELOPTIONS) $(CC) -o program.sentinel $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS)
|
||
|
#else
|
||
|
#define SentinelLinkTarget(step,program,linklist) /**/
|
||
|
#endif
|
||
|
#endif /* SentinelLinkTarget */
|
||
|
|
||
|
/*
|
||
|
* SentinelProgramTarget - generate rules to make Sentinel image
|
||
|
*/
|
||
|
#ifndef SentinelProgramTarget
|
||
|
#if HasSentinel
|
||
|
#define SentinelProgramTarget(program,deplist,linklist) @@\
|
||
|
ProgramTargetName(program.sentinel): deplist @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
$(CCENVSETUP) $(SENTINEL) $(SENTINELOPTIONS) $(CC) -o $@ $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
|
||
|
@@\
|
||
|
clean clean.sentinel:: @@\
|
||
|
RemoveFile(program.sentinel)
|
||
|
#else
|
||
|
#define SentinelProgramTarget(program,deplist,linklist) /**/
|
||
|
#endif
|
||
|
#endif /* SentinelProgramTarget */
|
||
|
|
||
|
/*
|
||
|
* SentinelCplusplusProgramTarget - generate rules to make Sentinel image
|
||
|
*/
|
||
|
#ifndef SentinelCplusplusProgramTarget
|
||
|
#if HasSentinel
|
||
|
#define SentinelCplusplusProgramTarget(program,deplist,linklist) @@\
|
||
|
ProgramTargetName(program.sentinel): deplist @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
$(CXXENVSETUP) $(SENTINEL) $(SENTINELOPTIONS) $(CXX) -o $@ $(CXXLDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
|
||
|
@@\
|
||
|
clean clean.sentinel:: @@\
|
||
|
RemoveFile(program.sentinel)
|
||
|
#else
|
||
|
#define SentinelCplusplusProgramTarget(program,deplist,linklist) /**/
|
||
|
#endif
|
||
|
#endif /* SentinelCplusplusProgramTarget */
|
||
|
|
||
|
#ifndef PurifyLinkTarget
|
||
|
#if HasPurify
|
||
|
#define PurifyLinkTarget(step,program,linklist) @@\
|
||
|
ProgramTargetName(step.pure): @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
$(CCENVSETUP) $(PURIFY) $(PURIFYOPTIONS) $(CC) -o program.pure $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS)
|
||
|
#else
|
||
|
#define PurifyLinkTarget(step,program,linklist) /**/
|
||
|
#endif
|
||
|
#endif /* PurifyLinkTarget */
|
||
|
|
||
|
/*
|
||
|
* PurifyProgramTarget - generate rules to make Purify'ed image
|
||
|
*/
|
||
|
#ifndef PurifyProgramTarget
|
||
|
#if HasPurify
|
||
|
#define PurifyProgramTarget(program,deplist,linklist) @@\
|
||
|
ProgramTargetName(program.pure): deplist @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
$(CCENVSETUP) $(PURIFY) $(PURIFYOPTIONS) $(CC) -o $@ $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
|
||
|
@@\
|
||
|
clean clean.pure:: @@\
|
||
|
RemoveFile(program.pure)
|
||
|
#else
|
||
|
#define PurifyProgramTarget(program,deplist,linklist) /**/
|
||
|
#endif
|
||
|
#endif /* PurifyProgramTarget */
|
||
|
|
||
|
/*
|
||
|
* PurifyCplusplusProgramTarget - generate rules to make Purify'ed image
|
||
|
*/
|
||
|
#ifndef PurifyCplusplusProgramTarget
|
||
|
#if HasPurify
|
||
|
#define PurifyCplusplusProgramTarget(program,deplist,linklist) @@\
|
||
|
ProgramTargetName(program.pure): deplist @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
$(CXXENVSETUP) $(PURIFY) $(PURIFYOPTIONS) $(CXX) -o $@ $(CXXLDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
|
||
|
@@\
|
||
|
clean clean.pure:: @@\
|
||
|
RemoveFile(program.pure)
|
||
|
#else
|
||
|
#define PurifyCplusplusProgramTarget(program,deplist,linklist) /**/
|
||
|
#endif
|
||
|
#endif /* PurifyCplusplusProgramTarget */
|
||
|
|
||
|
#ifndef ProofLinkTarget
|
||
|
#if HasTestCenter
|
||
|
#define ProofLinkTarget(step,program,linklist) @@\
|
||
|
ProgramTargetName(step.tc): @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
$(CCENVSETUP) $(PROOF) $(PROOFOPTIONS) $(CC) -o program.tc $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS)
|
||
|
#else
|
||
|
#define ProofLinkTarget(step,program,linklist) /**/
|
||
|
#endif
|
||
|
#endif /* ProofLinkTarget */
|
||
|
|
||
|
/*
|
||
|
* ProofProgramTarget - generate rules to make Proof'ed image
|
||
|
*/
|
||
|
#ifndef ProofProgramTarget
|
||
|
#if HasTestCenter
|
||
|
#define ProofProgramTarget(program,deplist,linklist) @@\
|
||
|
ProgramTargetName(program.tc): deplist @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
$(CCENVSETUP) $(PROOF) $(PROOFOPTIONS) $(CC) -o $@ $(LDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
|
||
|
@@\
|
||
|
clean cleantc:: @@\
|
||
|
RemoveFiles(program.tc program.tc.*.*)
|
||
|
#else
|
||
|
#define ProofProgramTarget(program,deplist,linklist) /**/
|
||
|
#endif
|
||
|
#endif /* ProofProgramTarget */
|
||
|
|
||
|
/*
|
||
|
* ProofCplusplusProgramTarget - generate rules to make Proof'ed image
|
||
|
*/
|
||
|
#ifndef ProofCplusplusProgramTarget
|
||
|
#if HasTestCenter
|
||
|
#define ProofCplusplusProgramTarget(program,deplist,linklist) @@\
|
||
|
ProgramTargetName(program.tc): deplist @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
$(CXXENVSETUP) $(PROOF) $(PROOFOPTIONS) $(CXX) -o $@ $(CXXLDOPTIONS) linklist $(EXTRA_LOAD_FLAGS) @@\
|
||
|
@@\
|
||
|
clean cleantc:: @@\
|
||
|
RemoveFiles(program.tc program.tc.*.*)
|
||
|
#else
|
||
|
#define ProofCplusplusProgramTarget(program,deplist,linklist) /**/
|
||
|
#endif
|
||
|
#endif /* ProofCplusplusProgramTarget */
|
||
|
|
||
|
#ifndef ProofCleanTarget
|
||
|
#if HasTestCenter
|
||
|
#define ProofCleanTarget() @@\
|
||
|
clean cleantc:: @@\
|
||
|
$(RM) -r TC.Cache
|
||
|
#else
|
||
|
#define ProofCleanTarget() /**/
|
||
|
#endif
|
||
|
#endif /* ProofCleanTarget */
|
||
|
|
||
|
#ifndef RemoveTargetProgram
|
||
|
#if RemoveTargetProgramByMoving
|
||
|
#define RemoveTargetProgram(program) \
|
||
|
-if [ -f program ]; then RemoveFile(Concat(program,~)); $(MV) program Concat(program,~); fi
|
||
|
#else
|
||
|
#define RemoveTargetProgram(program) RemoveFile(program)
|
||
|
#endif
|
||
|
#endif /* RemoveTargetProgram */
|
||
|
|
||
|
#ifndef MakeDir
|
||
|
#define MakeDir(dir) DirFailPrefix@if [ -d dir ]; then \ @@\
|
||
|
set +x; \ @@\
|
||
|
else \ @@\
|
||
|
if [ -h dir ]; then \ @@\
|
||
|
(set -x; rm -f dir); \ @@\
|
||
|
fi; \ @@\
|
||
|
(set -x; $(MKDIRHIER) dir); \ @@\
|
||
|
fi
|
||
|
#endif /* MakeDir */
|
||
|
|
||
|
#ifndef MakeDirInline
|
||
|
#define MakeDirInline(dir) if [ -d dir ]; then \ @@\
|
||
|
:; \ @@\
|
||
|
else \ @@\
|
||
|
if [ -h dir ]; then \ @@\
|
||
|
(set -x; rm -f dir); \ @@\
|
||
|
fi; \ @@\
|
||
|
(set -x; $(MKDIRHIER) dir); \ @@\
|
||
|
fi
|
||
|
#endif /* MakeDirInline */
|
||
|
|
||
|
#ifndef InstallDirectory
|
||
|
#define InstallDirectory(dir) @@\
|
||
|
install:: @@\
|
||
|
MakeDir(dir)
|
||
|
#endif /* InstallDirectory */
|
||
|
|
||
|
#ifndef InstallCreateLink
|
||
|
# define InstallCreateLink(dest,from,to) @@\
|
||
|
install:: @@\
|
||
|
cd $(DESTDIR)dest && \ @@\
|
||
|
$(LN) -sf from to
|
||
|
#endif
|
||
|
|
||
|
#ifndef BuildIncludesTop
|
||
|
#define BuildIncludesTop(srclist) @@\
|
||
|
includes:: srclist @@\
|
||
|
MakeDir($(BUILDINCDIR)) @@\
|
||
|
@(set -x; cd $(BUILDINCDIR) && for i in srclist; do \ @@\
|
||
|
RemoveFile($$i); \ @@\
|
||
|
$(LN) $(BUILDINCTOP)/$(CURRENT_DIR)/$$i .; \ @@\
|
||
|
done)
|
||
|
#endif /* BuildIncludesTop */
|
||
|
|
||
|
#ifndef BuildIncludes
|
||
|
#define BuildIncludes(srclist,dstsubdir,dstupdir) @@\
|
||
|
includes:: srclist @@\
|
||
|
MakeDir($(BUILDINCDIR)/dstsubdir) @@\
|
||
|
@(set -x; cd $(BUILDINCDIR)/dstsubdir && for i in srclist; do \ @@\
|
||
|
RemoveFile($$i); \ @@\
|
||
|
$(LN) $(BUILDINCTOP)/dstupdir/$(CURRENT_DIR)/$$i .; \ @@\
|
||
|
done)
|
||
|
#endif /* BuildIncludes */
|
||
|
|
||
|
/*
|
||
|
* LinkBuildBinary - export a binary from the build tree.
|
||
|
*/
|
||
|
#ifndef LinkBuildBinary
|
||
|
#define LinkBuildBinary(binary) @@\
|
||
|
all:: $(BUILDBINDIR)/binary binary @@\
|
||
|
@@\
|
||
|
$(BUILDBINDIR)/binary: binary @@\
|
||
|
MakeDir($(BUILDBINDIR)) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
cd $(BUILDBINDIR) && $(LN) $(BUILDBINTOP)/$(CURRENT_DIR)/binary .
|
||
|
#endif /* LinkBuildBinary */
|
||
|
|
||
|
#ifndef BuildInterfaces
|
||
|
#define BuildInterfaces(srclist,dstsubdir,dstupdir) @@\
|
||
|
interfaces:: @@\
|
||
|
MakeDir($(BUILDINCDIR)/dstsubdir) @@\
|
||
|
@(set -x; cd $(BUILDINCDIR)/dstsubdir && for i in srclist; do \ @@\
|
||
|
RemoveFile($$i); \ @@\
|
||
|
$(LN) $(BUILDINCTOP)/dstupdir/$(CURRENT_DIR)/$$i .; \ @@\
|
||
|
done)
|
||
|
#endif /* BuildInterfaces */
|
||
|
|
||
|
/*
|
||
|
* LinkRule - link a program
|
||
|
*/
|
||
|
#ifndef LinkRule
|
||
|
#define LinkRule(program,options,objects,libraries) \
|
||
|
$(CCLINK) -o program options objects libraries $(EXTRA_LOAD_FLAGS)
|
||
|
#endif /* LinkRule */
|
||
|
|
||
|
/*
|
||
|
* HostLinkRule - link a utility to be used on the build host
|
||
|
* (differs from LinkRule if cross compiling)
|
||
|
*/
|
||
|
#ifndef HostLinkRule
|
||
|
#define HostLinkRule LinkRule
|
||
|
#endif
|
||
|
|
||
|
#ifndef CplusplusLinkRule
|
||
|
#define CplusplusLinkRule(program,options,objects,libraries) \
|
||
|
$(CXXLINK) -o program options objects libraries $(EXTRA_LOAD_FLAGS)
|
||
|
#endif /* CplusplusLinkRule */
|
||
|
|
||
|
/*
|
||
|
* NormalProgramTarget - generate rules to compile and link the indicated
|
||
|
* program; since it does not use any default object files, it may be used for
|
||
|
* multiple programs in the same Imakefile.
|
||
|
*/
|
||
|
#ifndef NormalProgramTarget
|
||
|
#define NormalProgramTarget(program,objects,deplibs,locallibs,syslibs) @@\
|
||
|
ProgramTargetName(program): objects deplibs @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
LinkRule($@,$(LDOPTIONS),objects,locallibs $(LDLIBS) syslibs) @@\
|
||
|
@@\
|
||
|
SentinelProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
|
||
|
PurifyProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
|
||
|
ProofProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(ProgramTargetName(program))
|
||
|
#endif /* NormalProgramTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* NormalCplusplusProgramTarget - Like NormalTargetProgram, but uses
|
||
|
* C++ linking rules.
|
||
|
*/
|
||
|
#ifndef NormalCplusplusProgramTarget
|
||
|
#define NormalCplusplusProgramTarget(program,objects,deplibs,locallibs,syslibs) @@\
|
||
|
ProgramTargetName(program): objects deplibs @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
CplusplusLinkRule($@,$(CXXLDOPTIONS),objects,locallibs $(LDLIBS) syslibs) @@\
|
||
|
@@\
|
||
|
SentinelCplusplusProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
|
||
|
PurifyCplusplusProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
|
||
|
ProofCplusplusProgramTarget(program,objects deplibs,objects locallibs $(LDLIBS) syslibs) @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(ProgramTargetName(program))
|
||
|
#endif /* NormalCplusplusProgramTarget */
|
||
|
|
||
|
|
||
|
#ifndef SetUIDProgramTarget
|
||
|
#define SetUIDProgramTarget NormalProgramTarget
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* SingleProgramTarget - obsolete version of NormalProgramTarget that does
|
||
|
* not have deplibs.
|
||
|
*/
|
||
|
#ifndef SingleProgramTarget
|
||
|
#define SingleProgramTarget(program,objects,locallibs,syslibs) @@\
|
||
|
NormalProgramTarget(program,objects,NullParameter,locallibs,syslibs)
|
||
|
#endif /* SingleProgramTarget */
|
||
|
|
||
|
/*
|
||
|
* SimpleProgramTarget - generate rules for compiling and linking programs
|
||
|
* that only have one C source file. It should only be used in Imakefiles
|
||
|
* that describe a single program.
|
||
|
*/
|
||
|
#ifndef SimpleProgramTarget
|
||
|
#define SimpleProgramTarget(program) @@\
|
||
|
OBJS = program.o @@\
|
||
|
SRCS = program.c @@\
|
||
|
@@\
|
||
|
ComplexProgramTarget(program)
|
||
|
#endif /* SimpleProgramTarget */
|
||
|
|
||
|
#ifndef SimpleProgramTarget_1
|
||
|
#define SimpleProgramTarget_1(program) @@\
|
||
|
OBJS1 = program.o @@\
|
||
|
SRCS1 = program.c @@\
|
||
|
@@\
|
||
|
ComplexProgramTarget_1(program,$(LOCAL_LIBRARIES),NullParameter)
|
||
|
#endif /* SimpleProgramTarget_1 */
|
||
|
#ifndef SimpleProgramTarget_2
|
||
|
#define SimpleProgramTarget_2(program) @@\
|
||
|
OBJS2 = program.o @@\
|
||
|
SRCS2 = program.c @@\
|
||
|
@@\
|
||
|
ComplexProgramTarget_2(program,$(LOCAL_LIBRARIES),NullParameter)
|
||
|
#endif /* SimpleProgramTarget_2 */
|
||
|
#ifndef SimpleProgramTarget_3
|
||
|
#define SimpleProgramTarget_3(program) @@\
|
||
|
OBJS3 = program.o @@\
|
||
|
SRCS3 = program.c @@\
|
||
|
@@\
|
||
|
ComplexProgramTarget_3(program,$(LOCAL_LIBRARIES),NullParameter)
|
||
|
#endif /* SimpleProgramTarget_3 */
|
||
|
#ifndef SimpleProgramTarget_4
|
||
|
#define SimpleProgramTarget_4(program) @@\
|
||
|
OBJS4 = program.o @@\
|
||
|
SRCS4 = program.c @@\
|
||
|
@@\
|
||
|
ComplexProgramTarget_4(program,$(LOCAL_LIBRARIES),NullParameter)
|
||
|
#endif /* SimpleProgramTarget_4 */
|
||
|
#ifndef SimpleProgramTarget_5
|
||
|
#define SimpleProgramTarget_5(program) @@\
|
||
|
OBJS5 = program.o @@\
|
||
|
SRCS5 = program.c @@\
|
||
|
@@\
|
||
|
ComplexProgramTarget_5(program,$(LOCAL_LIBRARIES),NullParameter)
|
||
|
#endif /* SimpleProgramTarget_5 */
|
||
|
#ifndef SimpleProgramTarget_6
|
||
|
#define SimpleProgramTarget_6(program) @@\
|
||
|
OBJS6 = program.o @@\
|
||
|
SRCS6 = program.c @@\
|
||
|
@@\
|
||
|
ComplexProgramTarget_6(program,$(LOCAL_LIBRARIES),NullParameter)
|
||
|
#endif /* SimpleProgramTarget_6 */
|
||
|
#ifndef SimpleProgramTarget_7
|
||
|
#define SimpleProgramTarget_7(program) @@\
|
||
|
OBJS7 = program.o @@\
|
||
|
SRCS7 = program.c @@\
|
||
|
@@\
|
||
|
ComplexProgramTarget_7(program,$(LOCAL_LIBRARIES),NullParameter)
|
||
|
#endif /* SimpleProgramTarget_7 */
|
||
|
#ifndef SimpleProgramTarget_8
|
||
|
#define SimpleProgramTarget_8(program) @@\
|
||
|
OBJS8 = program.o @@\
|
||
|
SRCS8 = program.c @@\
|
||
|
@@\
|
||
|
ComplexProgramTarget_8(program,$(LOCAL_LIBRARIES),NullParameter)
|
||
|
#endif /* SimpleProgramTarget_8 */
|
||
|
#ifndef SimpleProgramTarget_9
|
||
|
#define SimpleProgramTarget_9(program) @@\
|
||
|
OBJS9 = program.o @@\
|
||
|
SRCS9 = program.c @@\
|
||
|
@@\
|
||
|
ComplexProgramTarget_9(program,$(LOCAL_LIBRARIES),NullParameter)
|
||
|
#endif /* SimpleProgramTarget_9 */
|
||
|
#ifndef SimpleProgramTarget_10
|
||
|
#define SimpleProgramTarget_10(program) @@\
|
||
|
OBJS10 = program.o @@\
|
||
|
SRCS10 = program.c @@\
|
||
|
@@\
|
||
|
ComplexProgramTarget_10(program,$(LOCAL_LIBRARIES),NullParameter)
|
||
|
#endif /* SimpleProgramTarget_10 */
|
||
|
|
||
|
#ifndef SimpleCplusplusProgramTarget
|
||
|
#define SimpleCplusplusProgramTarget(program) @@\
|
||
|
OBJS = program.o @@\
|
||
|
SRCS = program.CCsuf @@\
|
||
|
@@\
|
||
|
ComplexCplusplusProgramTarget(program)
|
||
|
#endif /* SimpleCplusplusProgramTarget */
|
||
|
|
||
|
#ifndef ProgramTargetHelper
|
||
|
#define ProgramTargetHelper(program,srcs,objs,deplib,locallib,syslib) @@\
|
||
|
ProgramTargetName(program): $(objs) $(deplib) @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
LinkRule($@,$(LDOPTIONS),$(objs),locallib $(LDLIBS) syslib) @@\
|
||
|
@@\
|
||
|
CenterProgramTarget(program,$(srcs),$(objs),locallib,syslib) @@\
|
||
|
SentinelProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
|
||
|
PurifyProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
|
||
|
ProofProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
|
||
|
@@\
|
||
|
InstallProgram(program,$(BINDIR)) @@\
|
||
|
InstallManPage(program,$(MANDIR))
|
||
|
#endif /* ProgramTargetHelper */
|
||
|
|
||
|
#ifndef ProgramTargetHelperNoMan
|
||
|
#define ProgramTargetHelperNoMan(program,srcs,objs,deplib,locallib,syslib) @@\
|
||
|
ProgramTargetName(program): $(objs) $(deplib) @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
LinkRule($@,$(LDOPTIONS),$(objs),locallib $(LDLIBS) syslib) @@\
|
||
|
@@\
|
||
|
CenterProgramTarget(program,$(srcs),$(objs),locallib,syslib) @@\
|
||
|
SentinelProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
|
||
|
PurifyProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
|
||
|
ProofProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
|
||
|
@@\
|
||
|
InstallProgram(program,$(BINDIR))
|
||
|
#endif /* ProgramTargetHelperNoMan */
|
||
|
|
||
|
#ifndef CplusplusProgramTargetHelper
|
||
|
#define CplusplusProgramTargetHelper(program,srcs,objs,deplib,locallib,syslib) @@\
|
||
|
ProgramTargetName(program): $(objs) $(deplib) @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
CplusplusLinkRule($@,$(CXXLDOPTIONS),$(objs),locallib $(LDLIBS) syslib) @@\
|
||
|
@@\
|
||
|
CenterProgramTarget(program,$(srcs),$(objs),locallib,syslib) @@\
|
||
|
SentinelCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
|
||
|
PurifyCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
|
||
|
ProofCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
|
||
|
@@\
|
||
|
InstallProgram(program,$(BINDIR)) @@\
|
||
|
InstallManPage(program,$(MANDIR))
|
||
|
#endif /* CplusplusProgramTargetHelper */
|
||
|
|
||
|
#ifndef CplusplusProgramTargetHelperNoMan
|
||
|
#define CplusplusProgramTargetHelperNoMan(program,srcs,objs,deplib,locallib,syslib) @@\
|
||
|
ProgramTargetName(program): $(objs) $(deplib) @@\
|
||
|
RemoveTargetProgram($@) @@\
|
||
|
CplusplusLinkRule($@,$(CXXLDOPTIONS),$(objs),locallib $(LDLIBS) syslib) @@\
|
||
|
@@\
|
||
|
CenterProgramTarget(program,$(srcs),$(objs),locallib,syslib) @@\
|
||
|
SentinelCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
|
||
|
PurifyCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
|
||
|
ProofCplusplusProgramTarget(program,$(objs) $(deplib),$(objs) locallib $(LDLIBS) syslib) @@\
|
||
|
@@\
|
||
|
InstallProgram(program,$(BINDIR)) @@
|
||
|
#endif /* CplusplusProgramTargetHelperNoMan */
|
||
|
|
||
|
/*
|
||
|
* ComplexProgramTarget - generate rules for compiling and linking the
|
||
|
* program specified by $(OBJS) and $(SRCS), installing the program and its
|
||
|
* man page, and generating dependencies. It should only be used in
|
||
|
* Imakefiles that describe a single program.
|
||
|
*/
|
||
|
#ifndef ComplexProgramTarget
|
||
|
#define ComplexProgramTarget(program) @@\
|
||
|
PROGRAM = ProgramTargetName(program) @@\
|
||
|
@@\
|
||
|
AllTarget(ProgramTargetName(program)) @@\
|
||
|
@@\
|
||
|
ProgramTargetHelper(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
|
||
|
@@\
|
||
|
DependTarget() @@\
|
||
|
LintTarget() @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(ProgramTargetName(program))
|
||
|
#endif /* ComplexProgramTarget */
|
||
|
|
||
|
#ifndef ComplexCplusplusProgramTarget
|
||
|
#define ComplexCplusplusProgramTarget(program) @@\
|
||
|
PROGRAM = ProgramTargetName(program) @@\
|
||
|
@@\
|
||
|
AllTarget(ProgramTargetName(program)) @@\
|
||
|
@@\
|
||
|
CplusplusProgramTargetHelper(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
|
||
|
@@\
|
||
|
DependTarget() @@\
|
||
|
LintTarget() @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(ProgramTargetName(program))
|
||
|
#endif /* ComplexCplusplusProgramTarget */
|
||
|
|
||
|
/*
|
||
|
* ComplexProgramTargetNoMan - generate rules for compiling and linking
|
||
|
* the program specified by $(OBJS) and $(SRCS), installing the program
|
||
|
* and generating dependencies. It should only be used in Imakefiles
|
||
|
* that describe a single program, and have no manual page.
|
||
|
*/
|
||
|
#ifndef ComplexProgramTargetNoMan
|
||
|
#define ComplexProgramTargetNoMan(program) @@\
|
||
|
PROGRAM = ProgramTargetName(program) @@\
|
||
|
@@\
|
||
|
AllTarget(ProgramTargetName(program)) @@\
|
||
|
@@\
|
||
|
ProgramTargetHelperNoMan(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
|
||
|
@@\
|
||
|
DependTarget() @@\
|
||
|
LintTarget() @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(ProgramTargetName(program))
|
||
|
#endif /* ComplexProgramTargetNoMan */
|
||
|
|
||
|
#ifndef ComplexCplusplusProgramTarget
|
||
|
#define ComplexCplusplusProgramTarget(program) @@\
|
||
|
PROGRAM = program @@\
|
||
|
@@\
|
||
|
AllTarget(program) @@\
|
||
|
@@\
|
||
|
CplusplusProgramTargetHelperNoMan(program,SRCS,OBJS,DEPLIBS,$(LOCAL_LIBRARIES),NullParameter) @@\
|
||
|
@@\
|
||
|
DependTarget() @@\
|
||
|
LintTarget() @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(ProgramTargetName(program))
|
||
|
#endif /* ComplexCplusplusProgramTarget */
|
||
|
|
||
|
/*
|
||
|
* ComplexProgramTarget_1 - generate rules for compiling and linking the
|
||
|
* program specified by $(OBJS1) and $(SRCS1), installing the program and its
|
||
|
* man page, and generating dependencies for it and any programs described
|
||
|
* by $(SRCS2) through $(SRCS10). It should be used to build the primary
|
||
|
* program in Imakefiles that describe multiple programs.
|
||
|
*/
|
||
|
#ifndef ComplexProgramTarget_1
|
||
|
#define ComplexProgramTarget_1(program,locallib,syslib) @@\
|
||
|
OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) \ @@\
|
||
|
$(OBJS6) $(OBJS7) $(OBJS8) $(OBJS9) $(OBJS10) @@\
|
||
|
SRCS = $(SRCS1) $(SRCS2) $(SRCS3) $(SRCS4) $(SRCS5) \ @@\
|
||
|
$(SRCS6) $(SRCS7) $(SRCS8) $(SRCS9) $(SRCS10) @@\
|
||
|
@@\
|
||
|
AllTarget($(PROGRAMS)) @@\
|
||
|
@@\
|
||
|
ProgramTargetHelper(program,SRCS1,OBJS1,DEPLIBS1,locallib,syslib) @@\
|
||
|
@@\
|
||
|
DependTarget() @@\
|
||
|
LintTarget() @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles($(PROGRAMS))
|
||
|
#endif /* ComplexProgramTarget_1 */
|
||
|
|
||
|
#ifndef ComplexCplusplusProgramTarget_1
|
||
|
#define ComplexCplusplusProgramTarget_1(program,locallib,syslib) @@\
|
||
|
OBJS = $(OBJS1) $(OBJS2) $(OBJS3) $(OBJS4) $(OBJS5) \ @@\
|
||
|
$(OBJS6) $(OBJS7) $(OBJS8) $(OBJS9) $(OBJS10) @@\
|
||
|
SRCS = $(SRCS1) $(SRCS2) $(SRCS3) $(SRCS4) $(SRCS5) \ @@\
|
||
|
$(SRCS6) $(SRCS7) $(SRCS8) $(SRCS9) $(SRCS10) @@\
|
||
|
@@\
|
||
|
AllTarget($(PROGRAMS)) @@\
|
||
|
@@\
|
||
|
CplusplusProgramTargetHelper(program,SRCS1,OBJS1,DEPLIBS1,locallib,syslib)@@\
|
||
|
@@\
|
||
|
DependTarget() @@\
|
||
|
LintTarget() @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles($(PROGRAMS))
|
||
|
#endif /* ComplexCplusplusProgramTarget_1 */
|
||
|
|
||
|
/*
|
||
|
* ComplexProgramTarget_2 - generate rules for compiling and linking the
|
||
|
* program specified by $(OBJS2) and $(SRCS2) and installing the program and
|
||
|
* man page. It should be used to build the second program in Imakefiles
|
||
|
* describing more than one program.
|
||
|
*/
|
||
|
#ifndef ComplexProgramTarget_2
|
||
|
#define ComplexProgramTarget_2(program,locallib,syslib) @@\
|
||
|
ProgramTargetHelper(program,SRCS2,OBJS2,DEPLIBS2,locallib,syslib)
|
||
|
#endif /* ComplexProgramTarget_2 */
|
||
|
|
||
|
#ifndef ComplexCplusplusProgramTarget_2
|
||
|
#define ComplexCplusplusProgramTarget_2(program,locallib,syslib) @@\
|
||
|
CplusplusProgramTargetHelper(program,SRCS2,OBJS2,DEPLIBS2,locallib,syslib)
|
||
|
#endif /* ComplexCplusplusProgramTarget_2 */
|
||
|
|
||
|
/*
|
||
|
* ComplexProgramTarget_3 - generate rules for compiling and linking the
|
||
|
* program specified by $(OBJS3) and $(SRCS3) and installing the program and
|
||
|
* man page. It should be used to build the third program in Imakefiles
|
||
|
* describing more than one program.
|
||
|
*/
|
||
|
#ifndef ComplexProgramTarget_3
|
||
|
#define ComplexProgramTarget_3(program,locallib,syslib) @@\
|
||
|
ProgramTargetHelper(program,SRCS3,OBJS3,DEPLIBS3,locallib,syslib)
|
||
|
#endif /* ComplexProgramTarget_3 */
|
||
|
|
||
|
#ifndef ComplexCplusplusProgramTarget_3
|
||
|
#define ComplexCplusplusProgramTarget_3(program,locallib,syslib) @@\
|
||
|
CplusplusProgramTargetHelper(program,SRCS3,OBJS3,DEPLIBS3,locallib,syslib)
|
||
|
#endif /* ComplexCplusplusProgramTarget_3 */
|
||
|
|
||
|
/*
|
||
|
* ComplexProgramTarget_4 - generate rules for compiling and linking the
|
||
|
* program specified by $(OBJS4) and $(SRCS4) and installing the program and
|
||
|
* man page. It should be used to build the third program in Imakefiles
|
||
|
* describing more than one program.
|
||
|
*/
|
||
|
#ifndef ComplexProgramTarget_4
|
||
|
#define ComplexProgramTarget_4(program,locallib,syslib) @@\
|
||
|
ProgramTargetHelper(program,SRCS4,OBJS4,DEPLIBS4,locallib,syslib)
|
||
|
#endif /* ComplexProgramTarget_4 */
|
||
|
|
||
|
#ifndef ComplexCplusplusProgramTarget_4
|
||
|
#define ComplexCplusplusProgramTarget_4(program,locallib,syslib) @@\
|
||
|
CplusplusProgramTargetHelper(program,SRCS4,OBJS4,DEPLIBS4,locallib,syslib)
|
||
|
#endif /* ComplexCplusplusProgramTarget_4 */
|
||
|
|
||
|
/*
|
||
|
* ComplexProgramTarget_5 - generate rules for compiling and linking the
|
||
|
* program specified by $(OBJS5) and $(SRCS5) and installing the program and
|
||
|
* man page. It should be used to build the third program in Imakefiles
|
||
|
* describing more than one program.
|
||
|
*/
|
||
|
#ifndef ComplexProgramTarget_5
|
||
|
#define ComplexProgramTarget_5(program,locallib,syslib) @@\
|
||
|
ProgramTargetHelper(program,SRCS5,OBJS5,DEPLIBS5,locallib,syslib)
|
||
|
#endif /* ComplexProgramTarget_5 */
|
||
|
|
||
|
#ifndef ComplexCplusplusProgramTarget_5
|
||
|
#define ComplexCplusplusProgramTarget_5(program,locallib,syslib) @@\
|
||
|
CplusplusProgramTargetHelper(program,SRCS5,OBJS5,DEPLIBS5,locallib,syslib)
|
||
|
#endif /* ComplexCplusplusProgramTarget_5 */
|
||
|
|
||
|
/*
|
||
|
* ComplexProgramTarget_6 - generate rules for compiling and linking the
|
||
|
* program specified by $(OBJS6) and $(SRCS6) and installing the program and
|
||
|
* man page. It should be used to build the third program in Imakefiles
|
||
|
* describing more than one program.
|
||
|
*/
|
||
|
#ifndef ComplexProgramTarget_6
|
||
|
#define ComplexProgramTarget_6(program,locallib,syslib) @@\
|
||
|
ProgramTargetHelper(program,SRCS6,OBJS6,DEPLIBS6,locallib,syslib)
|
||
|
#endif /* ComplexProgramTarget_6 */
|
||
|
|
||
|
#ifndef ComplexCplusplusProgramTarget_6
|
||
|
#define ComplexCplusplusProgramTarget_6(program,locallib,syslib) @@\
|
||
|
CplusplusProgramTargetHelper(program,SRCS6,OBJS6,DEPLIBS6,locallib,syslib)
|
||
|
#endif /* ComplexCplusplusProgramTarget_6 */
|
||
|
|
||
|
/*
|
||
|
* ComplexProgramTarget_7 - generate rules for compiling and linking the
|
||
|
* program specified by $(OBJS7) and $(SRCS7) and installing the program and
|
||
|
* man page. It should be used to build the third program in Imakefiles
|
||
|
* describing more than one program.
|
||
|
*/
|
||
|
#ifndef ComplexProgramTarget_7
|
||
|
#define ComplexProgramTarget_7(program,locallib,syslib) @@\
|
||
|
ProgramTargetHelper(program,SRCS7,OBJS7,DEPLIBS7,locallib,syslib)
|
||
|
#endif /* ComplexProgramTarget_7 */
|
||
|
|
||
|
#ifndef ComplexCplusplusProgramTarget_7
|
||
|
#define ComplexCplusplusProgramTarget_7(program,locallib,syslib) @@\
|
||
|
CplusplusProgramTargetHelper(program,SRCS7,OBJS7,DEPLIBS7,locallib,syslib)
|
||
|
#endif /* ComplexCplusplusProgramTarget_7 */
|
||
|
|
||
|
/*
|
||
|
* ComplexProgramTarget_8 - generate rules for compiling and linking the
|
||
|
* program specified by $(OBJS8) and $(SRCS8) and installing the program and
|
||
|
* man page. It should be used to build the third program in Imakefiles
|
||
|
* describing more than one program.
|
||
|
*/
|
||
|
#ifndef ComplexProgramTarget_8
|
||
|
#define ComplexProgramTarget_8(program,locallib,syslib) @@\
|
||
|
ProgramTargetHelper(program,SRCS8,OBJS8,DEPLIBS8,locallib,syslib)
|
||
|
#endif /* ComplexProgramTarget_8 */
|
||
|
|
||
|
#ifndef ComplexCplusplusProgramTarget_8
|
||
|
#define ComplexCplusplusProgramTarget_8(program,locallib,syslib) @@\
|
||
|
CplusplusProgramTargetHelper(program,SRCS8,OBJS8,DEPLIBS8,locallib,syslib)
|
||
|
#endif /* ComplexCplusplusProgramTarget_8 */
|
||
|
|
||
|
/*
|
||
|
* ComplexProgramTarget_9 - generate rules for compiling and linking the
|
||
|
* program specified by $(OBJS9) and $(SRCS9) and installing the program and
|
||
|
* man page. It should be used to build the third program in Imakefiles
|
||
|
* describing more than one program.
|
||
|
*/
|
||
|
#ifndef ComplexProgramTarget_9
|
||
|
#define ComplexProgramTarget_9(program,locallib,syslib) @@\
|
||
|
ProgramTargetHelper(program,SRCS9,OBJS9,DEPLIBS9,locallib,syslib)
|
||
|
#endif /* ComplexProgramTarget_9 */
|
||
|
|
||
|
#ifndef ComplexCplusplusProgramTarget_9
|
||
|
#define ComplexCplusplusProgramTarget_9(program,locallib,syslib) @@\
|
||
|
CplusplusProgramTargetHelper(program,SRCS9,OBJS9,DEPLIBS9,locallib,syslib)
|
||
|
#endif /* ComplexCplusplusProgramTarget_9 */
|
||
|
|
||
|
/*
|
||
|
* ComplexProgramTarget_10 - generate rules for compiling and linking the
|
||
|
* program specified by $(OBJS10) and $(SRCS10) and installing the program and
|
||
|
* man page. It should be used to build the third program in Imakefiles
|
||
|
* describing more than one program.
|
||
|
*/
|
||
|
#ifndef ComplexProgramTarget_10
|
||
|
#define ComplexProgramTarget_10(program,locallib,syslib) @@\
|
||
|
ProgramTargetHelper(program,SRCS10,OBJS10,DEPLIBS10,locallib,syslib)
|
||
|
#endif /* ComplexProgramTarget_10 */
|
||
|
|
||
|
#ifndef ComplexCplusplusProgramTarget_10
|
||
|
#define ComplexCplusplusProgramTarget_10(program,locallib,syslib) @@\
|
||
|
CplusplusProgramTargetHelper(program,SRCS10,OBJS10,DEPLIBS10,locallib,syslib)
|
||
|
#endif /* ComplexCplusplusProgramTarget_10 */
|
||
|
|
||
|
#ifndef MoveToBakFile
|
||
|
#define MoveToBakFile(file) -@if [ -f file ]; then set -x; \ @@\
|
||
|
$(MV) file file.bak; else exit 0; fi
|
||
|
#endif /* MoveToBakFile */
|
||
|
|
||
|
#ifndef RMoveToBakFile
|
||
|
#define RMoveToBakFile(file) -@if [ -f file ]; then set -x; \ @@\
|
||
|
RemoveFile(file.bak); $(MV) file file.bak; \ @@\
|
||
|
else exit 0; fi
|
||
|
#endif /* RMoveToBakFile */
|
||
|
|
||
|
/*
|
||
|
* ServerTargetWithFlags - generate rules to compile, link, and relink a server
|
||
|
*/
|
||
|
#ifndef ServerTargetWithFlags
|
||
|
#define ServerTargetWithFlags(server,subdirs,objects,libs,syslibs,flags) @@\
|
||
|
AllTarget(ProgramTargetName(server)) @@\
|
||
|
ProgramTargetName(server): subdirs objects libs @@\
|
||
|
MoveToBakFile($@) @@\
|
||
|
LinkRule($@,$(LDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\
|
||
|
@@\
|
||
|
Concat(load,server): @@\
|
||
|
MoveToBakFile(ProgramTargetName(server)) @@\
|
||
|
LinkRule(ProgramTargetName(server),$(LDOPTIONS),objects,libs $(LDLIBS) syslibs) @@\
|
||
|
@@\
|
||
|
loadX:: Concat(load,server) @@\
|
||
|
@@\
|
||
|
SentinelProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
|
||
|
SentinelLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
|
||
|
PurifyProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
|
||
|
PurifyLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
|
||
|
ProofProgramTarget(server,subdirs objects libs,objects libs $(LDLIBS) syslibs) @@\
|
||
|
ProofLinkTarget(Concat(load,server),server,objects libs $(LDLIBS) syslibs) @@\
|
||
|
@@\
|
||
|
InstallProgramWithFlags(server,$(BINDIR),flags) @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(ProgramTargetName(server))
|
||
|
#endif /* ServerTargetWithFlags */
|
||
|
|
||
|
/*
|
||
|
* ServerTarget - rules to compile, link, and relink a normal server
|
||
|
*/
|
||
|
#ifndef ServerTarget
|
||
|
#define ServerTarget(server,subdirs,objects,libs,syslibs) @@\
|
||
|
ServerTargetWithFlags(server,subdirs,objects,libs,syslibs,$(_NOOP_))
|
||
|
#endif /* ServerTarget */
|
||
|
|
||
|
#if DoRanlibCmd
|
||
|
#define RanLibrary(args) $(RANLIB) args
|
||
|
#else
|
||
|
#define RanLibrary(args) $(_NULLCMD_)
|
||
|
#endif
|
||
|
|
||
|
#ifndef LibraryTargetName
|
||
|
#define LibraryTargetName(libname)Concat(lib,libname.a)
|
||
|
#endif
|
||
|
|
||
|
/* This rule is used for libs in Xserver/Imakefile which are loaded, not
|
||
|
* linked into the core module. Since modules are called libXXXX.a,
|
||
|
* this rule mustn't be overriden by .cf files.
|
||
|
*/
|
||
|
#ifndef ModuleLibraryTargetName
|
||
|
#define ModuleLibraryTargetName(libname)Concat(lib,libname.a)
|
||
|
#endif
|
||
|
|
||
|
#ifndef LibraryTargetNameSuffix
|
||
|
#define LibraryTargetNameSuffix(libname,suffix)Concat3(lib,libname,suffix.a)
|
||
|
#endif
|
||
|
|
||
|
#ifndef InstallNamedInline
|
||
|
#define InstallNamedInline(srcname,flags,dest,dstname) $(INSTALL) $(INSTALLFLAGS) flags srcname $(DESTDIR)dest/dstname
|
||
|
#endif
|
||
|
|
||
|
#ifndef InstallNamedTarget
|
||
|
#define InstallNamedTarget(step,srcname,flags,dest,dstname) @@\
|
||
|
step:: srcname @@\
|
||
|
MakeDir($(DESTDIR)dest) @@\
|
||
|
InstallNamedInline(srcname,flags,dest,dstname)
|
||
|
#endif /* InstallNamedTarget */
|
||
|
|
||
|
/*
|
||
|
* InstallNamedTargetNoClobber - Like InstallNamedTarget, but doesn't
|
||
|
* do the install if an installed version already exists. Useful
|
||
|
* for files that might have local customizations that you don't
|
||
|
* want to clobber. Config files are good candidates for this.
|
||
|
*/
|
||
|
#ifndef InstallNamedTargetNoClobber
|
||
|
#define InstallNamedTargetNoClobber(step,srcname,flags,dest,dstname) @@\
|
||
|
step:: srcname @@\
|
||
|
MakeDir($(DESTDIR)dest) @@\
|
||
|
@if [ -f $(DESTDIR)dest/dstname ]; then \ @@\
|
||
|
echo "Not overwriting existing" $(DESTDIR)dest/dstname; \ @@\
|
||
|
else set -x; \ @@\
|
||
|
$(INSTALL) $(INSTALLFLAGS) flags srcname $(DESTDIR)dest/dstname; fi
|
||
|
#endif /* InstallNamedTargetNoClobber */
|
||
|
|
||
|
#ifndef InstallTarget
|
||
|
#define InstallTarget(step,file,flags,dest) @@\
|
||
|
InstallNamedTarget(step,file,flags,dest,file)
|
||
|
#endif /* InstallTarget */
|
||
|
|
||
|
#ifndef InstallInline
|
||
|
#define InstallInline(file,flags,dest) InstallNamedInline(file,flags,dest,file)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* InstallLibrary - generate rules to install the indicated library.
|
||
|
*/
|
||
|
#ifndef InstallLibrary
|
||
|
#define InstallLibrary(libname,dest) @@\
|
||
|
install:: LibraryTargetName(libname) @@\
|
||
|
MakeDir($(DESTDIR)dest) @@\
|
||
|
$(INSTALL) $(INSTALLFLAGS) $(INSTLIBFLAGS) LibraryTargetName(libname) $(DESTDIR)dest @@\
|
||
|
RanLibrary($(RANLIBINSTFLAGS) $(DESTDIR)dest/LibraryTargetName(libname))
|
||
|
#endif /* InstallLibrary */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallDriverSDKLibrary - rule to install Driver SDK library.
|
||
|
* (only used for XFree86). This is a no-op
|
||
|
* rule so that Imakefiles on non-XFree86 systems
|
||
|
* continue to build Makefiles correctly.
|
||
|
*/
|
||
|
#ifndef InstallDriverSDKLibrary
|
||
|
#define InstallDriverSDKLibrary(lib,dir)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallDriverSDKNamedLibrary - rule to install Driver SDK library.
|
||
|
* (only used for XFree86). This is a no-op
|
||
|
* rule so that Imakefiles on non-XFree86 systems
|
||
|
* continue to build Makefiles correctly.
|
||
|
*/
|
||
|
#ifndef InstallDriverSDKNamedLibrary
|
||
|
#define InstallDriverSDKNamedLibrary(lib,dlib,dir)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallDriverSDKLibraryModule - rule to install Driver SDK library module.
|
||
|
* (only used for XFree86). This is a no-op
|
||
|
* rule so that Imakefiles on non-XFree86 systems
|
||
|
* continue to build Makefiles correctly.
|
||
|
*/
|
||
|
#ifndef InstallDriverSDKLibraryModule
|
||
|
#define InstallDriverSDKLibraryModule(lib,dlib,dir)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* MergeIntoInstalledLibrary - generate rules to merge one library into another
|
||
|
*/
|
||
|
#ifndef MergeIntoInstalledLibrary
|
||
|
#define MergeIntoInstalledLibrary(tolib,fromlib) @@\
|
||
|
install:: fromlib @@\
|
||
|
$(SCRIPTSRC)/mergelib $(DESTDIR)tolib fromlib
|
||
|
#endif /* MergeIntoInstalledLibrary */
|
||
|
|
||
|
/*
|
||
|
* InstallLibraryAlias - generate rules to create a link from one library name
|
||
|
* to another for the purposes of aliasing.
|
||
|
*/
|
||
|
#ifndef InstallLibraryAlias
|
||
|
#define InstallLibraryAlias(libname,alias,dest) @@\
|
||
|
install:: @@\
|
||
|
-(cd $(DESTDIR)dest && ( \ @@\
|
||
|
RemoveFile(LibraryTargetName(alias)); \ @@\
|
||
|
$(LN) LibraryTargetName(libname) LibraryTargetName(alias)))
|
||
|
#endif /* InstallLibraryAlias */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallLintLibrary - generate rules to install the indicated lint library.
|
||
|
*/
|
||
|
#ifndef InstallLintLibrary
|
||
|
#define InstallLintLibrary(libname,dest) @@\
|
||
|
InstallTarget(install.ln,Concat(llib-l,libname.ln),$(INSTLIBFLAGS),dest)
|
||
|
#endif /* InstallLintLibrary */
|
||
|
|
||
|
|
||
|
#if !CompressManPages
|
||
|
/*
|
||
|
* InstallManPageLong - generate rules to install the indicated manual page,
|
||
|
* giving it an alternate name. This is used for installing man pages whose
|
||
|
* base name without the .man suffix would normally be longer than 8 characters
|
||
|
* (the limit for using source code control systems on files systems with
|
||
|
* short file names).
|
||
|
*/
|
||
|
#ifndef InstallManPageLong
|
||
|
#define InstallManPageLong(file,destdir,dest) @@\
|
||
|
BuildInstallHtmlManPage(file,dest,$(MANSUFFIX)) @@\
|
||
|
@@\
|
||
|
CppManTarget(file,$(EXTRAMANDEFS)) @@\
|
||
|
@@\
|
||
|
InstallNamedTarget(install.man,file.$(MANNEWSUFFIX),$(INSTMANFLAGS),destdir,dest.$(MANSUFFIX))
|
||
|
#endif /* InstallManPageLong */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallManPageAliases - generate rules to install manual page aliases.
|
||
|
*/
|
||
|
#ifndef InstallManPageAliases
|
||
|
#define InstallManPageAliases(file,destdir,aliases) @@\
|
||
|
InstallHtmlManPageAliases(file,aliases,$(MANSUFFIX)) @@\
|
||
|
@@\
|
||
|
install.man:: @@\
|
||
|
@(TMP="#tmp.$$$$"; \ @@\
|
||
|
RemoveFile($${TMP}); \ @@\
|
||
|
echo .so `basename destdir`/file.$(MANSUFFIX) > $${TMP}; \ @@\
|
||
|
for i in aliases; do (set -x; \ @@\
|
||
|
$(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $${TMP} $(DESTDIR)destdir/$$i.$(MANSUFFIX)); \ @@\
|
||
|
done; \ @@\
|
||
|
RemoveFile($${TMP}))
|
||
|
#endif /* InstallManPageAliases */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallGenManPageLong - More general rules for installing manual pages --
|
||
|
* doesn't assume MANSUFFIX.
|
||
|
*/
|
||
|
#ifndef InstallGenManPageLong
|
||
|
#define InstallGenManPageLong(file,destdir,dest,suffix) @@\
|
||
|
BuildInstallHtmlManPage(file,dest,suffix) @@\
|
||
|
@@\
|
||
|
CppManTarget(file, $(EXTRAMANDEFS)) @@\
|
||
|
@@\
|
||
|
install.man:: file.$(MANNEWSUFFIX) @@\
|
||
|
MakeDir($(DESTDIR)destdir) @@\
|
||
|
$(INSTALL) -c $(INSTMANFLAGS) file.$(MANNEWSUFFIX) \ @@\
|
||
|
$(DESTDIR)destdir/dest.suffix
|
||
|
#endif /* InstallGenManPageLong */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallGenManPageAliases - general equivalent of InstallManPageAliases
|
||
|
*/
|
||
|
#ifndef InstallGenManPageAliases
|
||
|
#define InstallGenManPageAliases(file,destdir,suffix,aliases) @@\
|
||
|
InstallHtmlManPageAliases(file,aliases,suffix) @@\
|
||
|
@@\
|
||
|
install.man:: @@\
|
||
|
@(TMP="#tmp.$$$$"; \ @@\
|
||
|
RemoveFile($${TMP}); \ @@\
|
||
|
echo .so `basename destdir`/file.suffix > $${TMP}; \ @@\
|
||
|
for i in aliases; do (set -x; \ @@\
|
||
|
$(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $${TMP} $(DESTDIR)destdir/$$i.suffix); \ @@\
|
||
|
done; \ @@\
|
||
|
RemoveFile($${TMP}))
|
||
|
#endif /* InstallGenManPageAliases */
|
||
|
|
||
|
#else /* CompressManPages */
|
||
|
|
||
|
#ifndef InstallManPageLong
|
||
|
#define InstallManPageLong(file,destdir,dest) @@\
|
||
|
BuildInstallHtmlManPage(file,dest,$(MANSUFFIX)) @@\
|
||
|
@@\
|
||
|
CppManTarget(file, $(EXTRAMANDEFS)) @@\
|
||
|
@@\
|
||
|
install.man:: file.$(MANNEWSUFFIX) @@\
|
||
|
MakeDir($(DESTDIR)destdir) @@\
|
||
|
$(RM) $(DESTDIR)destdir/dest.$(MANSUFFIX)* @@\
|
||
|
$(INSTALL) -c $(INSTMANFLAGS) file.$(MANNEWSUFFIX) \ @@\
|
||
|
$(DESTDIR)destdir/dest.$(MANSUFFIX) @@\
|
||
|
-$(COMPRESSMANCMD) $(DESTDIR)destdir/dest.$(MANSUFFIX)
|
||
|
#endif
|
||
|
|
||
|
#ifndef InstallGenManPageLong
|
||
|
#define InstallGenManPageLong(file,destdir,dest,suffix) @@\
|
||
|
BuildInstallHtmlManPage(file,dest,suffix) @@\
|
||
|
@@\
|
||
|
CppManTarget(file, $(EXTRAMANDEFS)) @@\
|
||
|
@@\
|
||
|
install.man:: file.$(MANNEWSUFFIX) @@\
|
||
|
MakeDir($(DESTDIR)destdir) @@\
|
||
|
$(RM) $(DESTDIR)destdir/dest.suffix* @@\
|
||
|
$(INSTALL) -c $(INSTMANFLAGS) file.$(MANNEWSUFFIX) \ @@\
|
||
|
$(DESTDIR)destdir/dest.suffix @@\
|
||
|
-$(COMPRESSMANCMD) $(DESTDIR)destdir/dest.suffix
|
||
|
#endif
|
||
|
|
||
|
#ifndef InstallMultipleMan
|
||
|
#define InstallMultipleMan(list,dest) @@\
|
||
|
install.man:: list @@\
|
||
|
MakeDir($(DESTDIR)dest) @@\
|
||
|
@case '${MFLAGS}' in *[i]*) set +e;; esac; \ @@\
|
||
|
for i in list; do \ @@\
|
||
|
(MNAME=`echo $$i | cut -f1 -d.`; \ @@\
|
||
|
set -x; \ @@\
|
||
|
$(RM) $(DESTDIR)dest/$${MNAME}*; \ @@\
|
||
|
$(INSTALL) -c $(INSTMANFLAGS) $$i \ @@\
|
||
|
$(DESTDIR)dest/$${MNAME}.$(MANSUFFIX); \ @@\
|
||
|
$(COMPRESSMANCMD) $(DESTDIR)dest/$${MNAME}.$(MANSUFFIX)); \ @@\
|
||
|
done
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* InstallManPageAliases - install soft links for aliases.
|
||
|
*/
|
||
|
#ifndef InstallManPageAliasesBase
|
||
|
#define InstallManPageAliasesBase(file,destdir,aliases) @@\
|
||
|
install.man:: @@\
|
||
|
@(SUFFIX=`echo $(DESTDIR)destdir/file.* | sed -e 's,.*/[^\.]*.,,'`; \ @@\
|
||
|
for i in aliases; do (set -x; \ @@\
|
||
|
$(RM) $(DESTDIR)destdir/$$i.*; \ @@\
|
||
|
(cd $(DESTDIR)destdir; $(LN) file.$${SUFFIX} \ @@\
|
||
|
$$i.$${SUFFIX})); \ @@\
|
||
|
done)
|
||
|
#endif
|
||
|
|
||
|
#ifndef InstallManPageAliases
|
||
|
#define InstallManPageAliases(file,destdir,aliases) @@\
|
||
|
InstallHtmlManPageAliases(file,aliases,$(MANSUFFIX)) @@\
|
||
|
@@\
|
||
|
InstallManPageAliasesBase(file,destdir,aliases)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallGenManPageAliases - install soft links for aliases.
|
||
|
*/
|
||
|
#ifndef InstallGenManPageAliases
|
||
|
#define InstallGenManPageAliases(file,destdir,suffix,aliases) @@\
|
||
|
InstallHtmlManPageAliases(file,aliases,suffix) @@\
|
||
|
@@\
|
||
|
InstallManPageAliasesBase(file,destdir,aliases)
|
||
|
#endif
|
||
|
|
||
|
#endif /* CompressManPages */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallManPage - generate rules to install the indicated manual page.
|
||
|
*/
|
||
|
#ifndef InstallManPage
|
||
|
#define InstallManPage(file,destdir) @@\
|
||
|
InstallManPageLong(file,destdir,file)
|
||
|
#endif /* InstallManPage */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallGenManPage - general equivalent of InstallManPage
|
||
|
*/
|
||
|
#ifndef InstallGenManPage
|
||
|
#define InstallGenManPage(file,destdir,suffix) @@\
|
||
|
InstallGenManPageLong(file,destdir,file,suffix)
|
||
|
#endif /* InstallGenManPage */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* RmanDependency - generate rules to build the rman program if
|
||
|
* this Imakefile is within the source tree.
|
||
|
*/
|
||
|
#ifndef RmanDependency
|
||
|
#ifdef UseInstalled
|
||
|
#define RmanDependency() /**/
|
||
|
#else
|
||
|
#define RmanDependency() @@\
|
||
|
NoCmpScript(ProgramTargetName($(RMAN))) @@\
|
||
|
@@\
|
||
|
ProgramTargetName($(RMAN)): @@\
|
||
|
@echo "checking $(RMANBASENAME) over in $(TOP)/config/util first..."; \ @@\
|
||
|
cd $(TOP)/config/util && $(MAKE) rmanonly; \ @@\
|
||
|
echo "okay, continuing in $(CURRENT_DIR)"
|
||
|
|
||
|
#endif /* UseInstalled */
|
||
|
#endif /* RmanDependency */
|
||
|
|
||
|
#ifndef RmanCmdDependency
|
||
|
#ifdef UseInstalled
|
||
|
#define RmanCmdDependency /**/
|
||
|
#else
|
||
|
#define RmanCmdDependency ProgramTargetName($(RMAN))
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef BuildInstallHtmlManPage
|
||
|
#if BuildHtmlManPages
|
||
|
#define BuildInstallHtmlManPage(file,dest,suffix) @@\
|
||
|
AllTarget(dest.suffix.html) @@\
|
||
|
@@\
|
||
|
dest.suffix.html: file.$(MANNEWSUFFIX) RmanCmdDependency @@\
|
||
|
RemoveFiles(dest.suffix.html dest.suffix-html) @@\
|
||
|
RunProgram(RMAN,$(RMANOPTIONS) < file.$(MANNEWSUFFIX) \ @@\
|
||
|
> dest.suffix-html) && $(MV) dest.suffix-html $@ @@\
|
||
|
@@\
|
||
|
install.man:: dest.suffix.html @@\
|
||
|
MakeDir($(DESTDIR)$(DOCHTMLDIR)) @@\
|
||
|
@(SUF=`expr suffix \: '\(.\)'`; \ @@\
|
||
|
set -x; \ @@\
|
||
|
$(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) dest.suffix.html $(DESTDIR)$(DOCHTMLDIR)/dest.$$SUF.html) @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles(dest.suffix.html dest.suffix-html)
|
||
|
#else
|
||
|
#define BuildInstallHtmlManPage(file,dest,suffix) /**/
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef InstallHtmlManPageAliases
|
||
|
#if BuildHtmlManPages
|
||
|
#define InstallHtmlManPageAliases(file,aliases,suffix) @@\
|
||
|
install.man:: file.suffix.html @@\
|
||
|
MakeDir($(DESTDIR)$(DOCHTMLDIR)) @@\
|
||
|
@SUF=`expr suffix \: '\(.\)'`; \ @@\
|
||
|
for i in aliases; do (set -x; \ @@\
|
||
|
RemoveFile($(DESTDIR)$(DOCHTMLDIR)/$$i.$$SUF.html); \ @@\
|
||
|
(cd $(DESTDIR)$(DOCHTMLDIR); \ @@\
|
||
|
$(LN) file.$$SUF.html $$i.$$SUF.html)); \ @@\
|
||
|
done
|
||
|
#else
|
||
|
#define InstallHtmlManPageAliases(file,aliases,suffix) /**/
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef HtmlManIndex
|
||
|
#if BuildHtmlManPages
|
||
|
#define HtmlManIndex @@\
|
||
|
html_index:: @@\
|
||
|
MakeDir($(DESTDIR)$(DOCHTMLDIR)) @@\
|
||
|
$(HTMLINDEXCMD) $(DESTDIR)$(DOCHTMLDIR)
|
||
|
#else
|
||
|
#define HtmlManIndex html_index::
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* ManKeywordsTarget - generate the database used by "man -k".
|
||
|
* This rule updates the index in the directory "manpath", which
|
||
|
* indexes all the manual pages in the section subdirectories under
|
||
|
* it. An update command is defined only on systems that have a
|
||
|
* per MANPATH element index. If the OS supports only one system-wide
|
||
|
* database, we don't update it, because then we can't do cross
|
||
|
* installations or use a non-empty DESTDIR for testing.
|
||
|
*/
|
||
|
#ifndef ManKeywordsTarget
|
||
|
#define ManKeywordsTarget(manpath) man_keywords::
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* InstallNamedNonExec - generate rules to install a data file
|
||
|
*/
|
||
|
#ifndef InstallNamedNonExec
|
||
|
#define InstallNamedNonExec(srcname,dstname,dest) @@\
|
||
|
InstallNamedTarget(install,srcname,$(INSTDATFLAGS),dest,dstname)
|
||
|
#endif /* InstallNamedNonExec */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallDriverSDKNamedNonExec - rule for installing server Driver SDK files.
|
||
|
* (only used for XFree86). This is a no-op
|
||
|
* rule so that Imakefiles on non-XFree86 systems
|
||
|
* continue to build Makefiles correctly.
|
||
|
*/
|
||
|
#ifndef InstallDriverSDKNamedNonExec
|
||
|
#define InstallDriverSDKNamedNonExec(srcname,dstname,dest)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallNonExecFile - generate rules to install a data file
|
||
|
*/
|
||
|
#ifndef InstallNonExecFile
|
||
|
#define InstallNonExecFile(file,dest) @@\
|
||
|
InstallTarget(install,file,$(INSTDATFLAGS),dest)
|
||
|
#endif /* InstallNonExecFile */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallNonExecFileNoClobber - install a data file once
|
||
|
*/
|
||
|
#ifndef InstallNonExecFileNoClobber
|
||
|
#define InstallNonExecFileNoClobber(file,dest) @@\
|
||
|
InstallNamedTargetNoClobber(install,file,$(INSTDATFLAGS),dest,file)
|
||
|
#endif /* InstallNonExecFileNoClobber */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallDriverSDKNonExecFile - rule for installing server Driver SDK files.
|
||
|
* (only used for XFree86). This is a no-op
|
||
|
* rule so that Imakefiles on non-XFree86 systems
|
||
|
* continue to build Makefiles correctly.
|
||
|
*/
|
||
|
#ifndef InstallDriverSDKNonExecFile
|
||
|
#define InstallDriverSDKNonExecFile(file,dir)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallNonExec - generate rules to install a data file, but does not
|
||
|
* try to create the destination directory (deprecated)
|
||
|
*/
|
||
|
#ifndef InstallNonExec
|
||
|
#define InstallNonExec(file,dest) @@\
|
||
|
install:: file @@\
|
||
|
$(INSTALL) $(INSTALLFLAGS) $(INSTDATFLAGS) file $(DESTDIR)dest
|
||
|
#endif /* InstallNonExec */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallProgramWithFlags - generate rules to install an executable program
|
||
|
* using given install flags.
|
||
|
*/
|
||
|
#ifndef InstallProgramWithFlags
|
||
|
#if StripInstalledPrograms && CrossCompiling
|
||
|
#define InstallProgramWithFlags(program,dest,flags) @@\
|
||
|
InstallTarget(install,ProgramTargetName(program),$(INSTPGMFLAGS) flags,dest) @@\
|
||
|
CrossStripCmd $(DESTDIR)dest/ProgramTargetName(program)
|
||
|
#else
|
||
|
#define InstallProgramWithFlags(program,dest,flags) @@\
|
||
|
InstallTarget(install,ProgramTargetName(program),$(INSTPGMFLAGS) flags,dest)
|
||
|
#endif /* StripInstalledPrograms && CrossCompiling */
|
||
|
#endif /* InstallProgramWithFlags */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallProgram - generate rules to install an executable program using any
|
||
|
* special install flags set in $(INSTALLFLAGS).
|
||
|
*/
|
||
|
#ifndef InstallProgram
|
||
|
#define InstallProgram(program,dest) @@\
|
||
|
InstallProgramWithFlags(program,dest,NullParameter)
|
||
|
#endif /* InstallProgram */
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallScript - install a shell script.
|
||
|
*/
|
||
|
#ifndef InstallScript
|
||
|
#define InstallScript(program,dest) @@\
|
||
|
InstallNamedTarget(install,program.script,$(INSTBINFLAGS),dest,program)
|
||
|
#endif /* InstallScript */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallNamedProg - install a program with renaming and no stripping.
|
||
|
*/
|
||
|
#ifndef InstallNamedProg
|
||
|
#define InstallNamedProg(srcname,dstname,dest) @@\
|
||
|
InstallNamedTarget(install,srcname,$(INSTBINFLAGS),dest,dstname)
|
||
|
#endif /* InstallNamedProg */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallNamedProgNoClobber - Like InstallNamedProg, but doesn't
|
||
|
* do the install if an installed version already exists.
|
||
|
*/
|
||
|
#ifndef InstallNamedProgNoClobber
|
||
|
#define InstallNamedProgNoClobber(srcname,dstname,dest) @@\
|
||
|
InstallNamedTargetNoClobber(install,srcname,$(INSTBINFLAGS),dest,dstname)
|
||
|
#endif /* InstallNamedProgNoClobber */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallDriverSDKNamedProg - rule for installing server Driver SDK files.
|
||
|
* (only used for XFree86). This is a no-op
|
||
|
* rule so that Imakefiles on non-XFree86 systems
|
||
|
* continue to build Makefiles correctly.
|
||
|
*/
|
||
|
#ifndef InstallDriverSDKNamedProg
|
||
|
#define InstallDriverSDKNamedProg(srcname,dstname,dest)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* MakeFlagsToShellFlags - set variables before starting a loop.
|
||
|
* makeflags is the set of "make" flags to check.
|
||
|
* shellcmd is the shell command to execute if any of the flags are set.
|
||
|
*
|
||
|
* The usual use of this rule is to translate make's "don't quit on error"
|
||
|
* flags into the equivalent for the shell. To do this, "make -i" always
|
||
|
* becomes "set +e". "make -k" should also turn on "set +e" if the target
|
||
|
* is building subdirectories. That is, subdirectories are independent
|
||
|
* and should appear to be multiple targets, even though they are
|
||
|
* implemented in a loop in a single target.
|
||
|
*/
|
||
|
#ifndef MakeFlagsToShellFlags
|
||
|
#define MakeFlagsToShellFlags(makeflags,shellcmd)\
|
||
|
for flag in ${MAKEFLAGS} ''; do \ @@\
|
||
|
case "$$flag" in *=*) ;; --*) ;; *[makeflags]*) shellcmd;; esac; done
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* MakeNamedTargetSubdir - do make in a subdir.
|
||
|
*/
|
||
|
#ifndef MakeNamedTargetSubdir
|
||
|
#define MakeNamedTargetSubdir(dir,flags,subname)\
|
||
|
(cd dir && $(MAKE) $(MFLAGS) $(PARALLELMFLAGS) \ @@\
|
||
|
flags subname)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* LinkFileList - link a list of files from one place to another
|
||
|
*/
|
||
|
#ifndef LinkFileList
|
||
|
#define LinkFileList(step,list,dir,sub) @@\
|
||
|
step:: @@\
|
||
|
@MakeFlagsToShellFlags(i,set +e); \ @@\
|
||
|
echo " cd" dir; cd dir && \ @@\
|
||
|
for i in list; do (set -x; $(LN) -f sub/$$i .); done
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* LinkConfDirectoryLong
|
||
|
*
|
||
|
* Make links from opath (usually <ProjectRoot>/lib/X11) to npath
|
||
|
* For example /usr/X11R6/lib/X11/xdm ==> /etc/X11/xdm so that X
|
||
|
* binaries can be mounted from a read-only volume like a CD-ROM;
|
||
|
* but files that may need to be edited can be stored locally on
|
||
|
* read-write media. If someone has an existing installation, be
|
||
|
* careful and move existing files to the new location in /etc.
|
||
|
* XXX Need to make the installation script do this when installing
|
||
|
* binary distributions.
|
||
|
*
|
||
|
* Since the link is used in the installation process, we need to
|
||
|
* make the link relative in order to honor $(DESTDIR) if it is set.
|
||
|
*
|
||
|
* Note: The sed script used here is not completely general. It assumes
|
||
|
* that no elements of the path are '..', and that none start with '.'
|
||
|
* that aren't just '.'.
|
||
|
*
|
||
|
* For a more general solution $(REVPATH) could be used. Even though
|
||
|
* it was intended for something a little different, it does do what is
|
||
|
* required here.
|
||
|
*
|
||
|
*/
|
||
|
#ifndef LinkConfDirectoryLong
|
||
|
#if UseSeparateConfDir && HasSymLinks
|
||
|
#define LinkConfDirectoryLong(mdir,cdir,rdir,ldir,opath,npath) @@\
|
||
|
install:: @@\
|
||
|
@MakeFlagsToShellFlags(i,set +e); \ @@\
|
||
|
if [ -h Concat($(DESTDIR),npath/mdir) ]; then \ @@\
|
||
|
$(RM) Concat($(DESTDIR),npath/mdir); \ @@\
|
||
|
fi @@\
|
||
|
MakeDir(Concat($(DESTDIR),opath/cdir)) @@\
|
||
|
MakeDir(Concat($(DESTDIR),npath/mdir)) @@\
|
||
|
@MakeFlagsToShellFlags(i,set +e); \ @@\
|
||
|
if [ -d Concat($(DESTDIR),opath/cdir) ]; then \ @@\
|
||
|
RELPATH=`echo opath/cdir | \ @@\
|
||
|
sed -e 's:^/::' -e 's:[^/.][^/]*:..:'g -e 's:/\.$$::'`; \ @@\
|
||
|
cd Concat($(DESTDIR),opath/cdir); \ @@\
|
||
|
if [ -d rdir -a ! -h rdir ]; then \ @@\
|
||
|
(cd rdir; tar cf - . | \ @@\
|
||
|
(cd Concat($(DESTDIR),npath/mdir); \ @@\
|
||
|
tar xf -; exit 0); exit 0); \ @@\
|
||
|
fi; \ @@\
|
||
|
$(RM) -r rdir; \ @@\
|
||
|
$(LN) Concat($${RELPATH},npath/mdir) ldir; \ @@\
|
||
|
fi
|
||
|
#else
|
||
|
#define LinkConfDirectoryLong(mdir,cdir,rdir,ldir,opath,npath)
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef LinkConfDirectory
|
||
|
#define LinkConfDirectory(mdir,cdir,rdir,ldir) LinkConfDirectoryLong(mdir,cdir,rdir,ldir,$(LIBDIR),$(CONFDIR))
|
||
|
#endif
|
||
|
|
||
|
#ifndef LinkVarDirectory
|
||
|
#define LinkVarDirectory(mdir,cdir,rdir,ldir) LinkConfDirectoryLong(mdir,cdir,rdir,ldir,$(LIBDIR),$(VARDIR))
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* LinkConfFileLong
|
||
|
*
|
||
|
* Make links from opath (<ProjectRoot>/lib/X11) to npath
|
||
|
* For example /usr/X11R6/lib/X11/xxx ==> /etc/X11/xxx so that X binaries
|
||
|
* can be mounted from a read-only volume like a CD-ROM;
|
||
|
* but files that may need to be edited can be stored locally on
|
||
|
* read-write media. If someone has an existing installation, be
|
||
|
* careful and move existing files to the new location in /etc.
|
||
|
* XXX Need to make the installation script do this when installing
|
||
|
* binary distributions.
|
||
|
*
|
||
|
* Since the link is used in the installation process, we need to
|
||
|
* make the link relative in order to honor $(DESTDIR) if it is set.
|
||
|
*/
|
||
|
#ifndef LinkConfFileLong
|
||
|
#if UseSeparateConfDir && HasSymLinks
|
||
|
#define LinkConfFileLong(cfile,lfile,opath,npath) @@\
|
||
|
install:: @@\
|
||
|
MakeDir(Concat($(DESTDIR),opath)) @@\
|
||
|
MakeDir(Concat($(DESTDIR),npath)) @@\
|
||
|
@MakeFlagsToShellFlags(i,set +e); \ @@\
|
||
|
if [ -d Concat($(DESTDIR),opath) ]; then \ @@\
|
||
|
RELPATH=`echo opath | \ @@\
|
||
|
sed -e 's:^.::' -e 's:[^/.][^/]*:..:'g`; \ @@\
|
||
|
cd Concat($(DESTDIR),opath); \ @@\
|
||
|
if [ -f lfile -a ! -h lfile ]; then \ @@\
|
||
|
cp -p lfile Concat($(DESTDIR),npath/cfile); \ @@\
|
||
|
fi; \ @@\
|
||
|
$(RM) -r lfile; \ @@\
|
||
|
$(LN) Concat($${RELPATH},npath/cfile) lfile; \ @@\
|
||
|
fi
|
||
|
#else
|
||
|
#define LinkConfFileLong(cfile,lfile,opath,npath)
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#ifndef LinkConfFile
|
||
|
#define LinkConfFile(cfile,lfile) LinkConfFileLong(cfile,lfile,$(LIBDIR),$(CONFDIR))
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* InstallMultipleDestFlags - generate rules to install multiple files at
|
||
|
* once during a particular step in the build using a specific set of install
|
||
|
* flags.
|
||
|
*/
|
||
|
#ifndef InstallMultipleDestFlags
|
||
|
#define InstallMultipleDestFlags(step,list,dest,flags) @@\
|
||
|
step:: list @@\
|
||
|
MakeDir($(DESTDIR)dest) @@\
|
||
|
@MakeFlagsToShellFlags(i,set +e); \ @@\
|
||
|
for i in list; do \ @@\
|
||
|
(set -x; $(INSTALL) $(INSTALLFLAGS) flags $$i $(DESTDIR)dest); \ @@\
|
||
|
done
|
||
|
#endif /* InstallMultipleDestFlags */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallDriverSDKMultipleDestFlags - rule for installing server Driver SDK
|
||
|
* files. (only used for XFree86). This is a no-op
|
||
|
* rule so that Imakefiles on non-XFree86 systems
|
||
|
* continue to build Makefiles correctly.
|
||
|
*/
|
||
|
#ifndef InstallDriverSDKMultipleDestFlags
|
||
|
#define InstallDriverSDKMultipleDestFlags(list,dest,flags)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallMultipleDest - generate rules to install multiple files at once
|
||
|
* during a particular step in the build using any install flags set in
|
||
|
* $(INSTDATFLAGS).
|
||
|
*/
|
||
|
#ifndef InstallMultipleDest
|
||
|
#define InstallMultipleDest(step,list,dest) @@\
|
||
|
InstallMultipleDestFlags(step,list,dest,$(INSTDATFLAGS))
|
||
|
#endif /* InstallMultipleDest */
|
||
|
|
||
|
/*
|
||
|
* InstallMultiple - generate rules to install multiple files at once
|
||
|
* during the install step of the build using any install flags set in
|
||
|
* $(INSTALLFLAGS).
|
||
|
*/
|
||
|
#ifndef InstallMultiple
|
||
|
#define InstallMultiple(list,dest) @@\
|
||
|
InstallMultipleDest(install,list,dest)
|
||
|
#endif /* InstallMultiple */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallMultipleFlags - generate rules to install multiple files at once
|
||
|
* during the install step of the build using the given install flags.
|
||
|
*/
|
||
|
#ifndef InstallMultipleFlags
|
||
|
#define InstallMultipleFlags(list,dest,flags) @@\
|
||
|
InstallMultipleDestFlags(install,list,dest,flags)
|
||
|
#endif /* InstallMultipleFlags */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallMultipleMan - generate rules to install a variety of manual pages
|
||
|
* during the install.man step of the build.
|
||
|
*/
|
||
|
#ifndef InstallMultipleMan
|
||
|
#define InstallMultipleMan(list,dest) @@\
|
||
|
InstallMultipleDestFlags(install.man,list,dest,$(INSTMANFLAGS))
|
||
|
#endif /* InstallMultipleMan */
|
||
|
|
||
|
/*
|
||
|
* InstallMultipleManSuffix - generate rules to install multiple manual
|
||
|
* pages dufing the install.man step of the build, where
|
||
|
* the target files have the suffix given.
|
||
|
*/
|
||
|
#ifndef InstallMultipleManSuffix
|
||
|
#define InstallMultipleManSuffix(list,dest,suffix) @@\
|
||
|
install.man:: @@\
|
||
|
MakeDir($(DESTDIR)dest) @@\
|
||
|
@MakeFlagsToShellFlags(i,set +e); \ @@\
|
||
|
for i in list; do \ @@\
|
||
|
(set -x; $(INSTALL) $(INSTALLFLAGS) $(INSTMANFLAGS) $$i.suffix $(DESTDIR)dest/$$i.$(MANSUFFIX)); \ @@\
|
||
|
done
|
||
|
#endif /* InstallMultipleManSuffix */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* IncludeMakefile - rule to include another Makefile.
|
||
|
* Must not generate an error or even a warning if the named file
|
||
|
* is not present, since we use this to include Makefile.dep, which
|
||
|
* may not be built yet.
|
||
|
* This is defined non-null iff HasMakefileSafeInclude is YES.
|
||
|
* The double-@ is to ensure no leading spaces on the line.
|
||
|
*/
|
||
|
#ifndef IncludeMakefile
|
||
|
#if HasClearmake
|
||
|
#define IncludeMakefile(file) @@sinclude file
|
||
|
#else
|
||
|
#if HasBsdMake
|
||
|
#define IncludeMakefile(file) @@# dependencies are in .depend
|
||
|
#else
|
||
|
#define IncludeMakefile(file) /**/
|
||
|
#endif
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* DependDependencyStatement - Used by DependDependency to set up the
|
||
|
* most specific dependency, which differs based on whether we support
|
||
|
* a separate Makefile.dep on this platform.
|
||
|
*/
|
||
|
#ifndef DependDependencyStatement
|
||
|
#if HasMakefileSafeInclude
|
||
|
#define DependDependencyStatement() @@\
|
||
|
DependFileName:: ProgramTargetName($(DEPEND))
|
||
|
#else
|
||
|
#define DependDependencyStatement() @@\
|
||
|
depend:: ProgramTargetName($(DEPEND))
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* DependDependency - generate rules to build the makedepend program if
|
||
|
* this Imakefile is within the source tree.
|
||
|
*/
|
||
|
#ifndef DependDependency
|
||
|
#ifdef UseInstalled
|
||
|
#define DependDependency() /**/
|
||
|
#else
|
||
|
#define DependDependency() @@\
|
||
|
DependDependencyStatement() @@\
|
||
|
@@\
|
||
|
NoCmpScript(ProgramTargetName($(DEPEND))) @@\
|
||
|
@@\
|
||
|
ProgramTargetName($(DEPEND)): @@\
|
||
|
@echo "checking $@ over in $(DEPENDSRC) first..."; \ @@\
|
||
|
cd $(DEPENDSRC) && $(MAKE) makedependonly; \ @@\
|
||
|
echo "okay, continuing in $(CURRENT_DIR)"
|
||
|
|
||
|
#endif /* UseInstalled */
|
||
|
#endif /* DependDependency */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* DependTarget - generate rules to compute dependencies for all files listed
|
||
|
* in $(SRCS).
|
||
|
*/
|
||
|
#ifndef DependTarget
|
||
|
#if HasMakefileSafeInclude
|
||
|
#define DependTarget() @@\
|
||
|
DependDependency() @@\
|
||
|
@@\
|
||
|
depend:: DependFileName @@\
|
||
|
@@\
|
||
|
DependFileName:: @@\
|
||
|
RemoveFile($@) @@\
|
||
|
RunProgram(DEPEND,-f- $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- $(SRCS)) > $@
|
||
|
#else /* HasMakefileSafeInclude */
|
||
|
#define DependTarget() @@\
|
||
|
DependDependency() @@\
|
||
|
@@\
|
||
|
depend:: @@\
|
||
|
RunProgram(DEPEND,$(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- $(SRCS))
|
||
|
#endif /* HasMakefileSafeInclude else */
|
||
|
#endif /* DependTarget */
|
||
|
|
||
|
/*
|
||
|
* DependTarget3 - generate rules to compute dependencies for all files given.
|
||
|
*/
|
||
|
#ifndef DependTarget3
|
||
|
#if HasMakefileSafeInclude
|
||
|
#define DependTarget3(srcs1,srcs2,srcs3) @@\
|
||
|
DependDependency() @@\
|
||
|
@@\
|
||
|
depend:: DependFileName @@\
|
||
|
@@\
|
||
|
DependFileName:: @@\
|
||
|
RemoveFile($@) @@\
|
||
|
RunProgram(DEPEND,-f- $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs1) > $@ @@\
|
||
|
RunProgram(DEPEND,-f- $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs2) >> $@ @@\
|
||
|
RunProgram(DEPEND,-f- $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs3) >> $@
|
||
|
#else /* HasMakefileSafeInclude */
|
||
|
#define DependTarget3(srcs1,srcs2,srcs3) @@\
|
||
|
DependDependency() @@\
|
||
|
@@\
|
||
|
depend:: @@\
|
||
|
RunProgram(DEPEND,$(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs1) @@\
|
||
|
RunProgram(DEPEND,-a $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs2) @@\
|
||
|
RunProgram(DEPEND,-a $(DEPENDFLAGS) -- $(ALLDEFINES) $(DEPEND_DEFINES) -- srcs3)
|
||
|
#endif /* HasMakefileSafeInclude else */
|
||
|
#endif /* DependTarget3 */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* CleanTarget - generate rules to remove any garbage files
|
||
|
*/
|
||
|
#ifndef CleanTarget
|
||
|
#define CleanTarget() @@\
|
||
|
clean:: @@\
|
||
|
$(RM) FilesToClean ExtraFilesToClean DocFilesToClean "#"* @@\
|
||
|
@@\
|
||
|
ProofCleanTarget()
|
||
|
#endif /* CleanTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* TagsTarget - generate rules to compute tags files for C source code.
|
||
|
*/
|
||
|
#ifndef TagsTarget
|
||
|
#define TagsTarget() @@\
|
||
|
tags:: @@\
|
||
|
$(TAGS) -w *.[ch] @@\
|
||
|
$(TAGS) -xw *.[ch] > TAGS
|
||
|
#endif /* TagsTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* ImakeDependency - generate rules to compile imake if this Imakefile is
|
||
|
* within the source tree.
|
||
|
*/
|
||
|
#ifndef ImakeDependency
|
||
|
#ifdef UseInstalled
|
||
|
#define ImakeDependency(target) /**/
|
||
|
#else
|
||
|
#define ImakeDependency(target) @@\
|
||
|
target:: ProgramTargetName($(IMAKE)) @@\
|
||
|
@@\
|
||
|
NoCmpScript(ProgramTargetName($(IMAKE)) $(IMAKE).Osuf) @@\
|
||
|
@@\
|
||
|
ProgramTargetName($(IMAKE)) $(IMAKE).Osuf: @@\
|
||
|
-@(cd $(IMAKESRC) && if [ -f Makefile ]; then \ @@\
|
||
|
echo "checking $@ in $(IMAKESRC) first..."; $(MAKE) imakeonly; else \ @@\
|
||
|
echo "bootstrapping $@ from Makefile.ini in $(IMAKESRC) first..."; \ @@\
|
||
|
$(MAKE) -f Makefile.ini BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"; fi; \ @@\
|
||
|
echo "okay, continuing in $(CURRENT_DIR)")
|
||
|
#endif /* UseInstalled */
|
||
|
#endif /* ImakeDependency */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* BuildMakefileTarget - generate rules to build a Makefile from an Imakefile
|
||
|
* and any special imake flags. This is generally done automatically by the
|
||
|
* template or by any special Imakefiles. The first argument exists just
|
||
|
* because imakeflags is usually empty and some preprocessors will complain
|
||
|
* if an empty argument is passed as the sole argument to a macro.
|
||
|
*/
|
||
|
#ifndef BuildMakefileTarget
|
||
|
#define BuildMakefileTarget(notused,imakeflags) @@\
|
||
|
ImakeDependency(Makefile) @@\
|
||
|
@@\
|
||
|
Makefile:: @@\
|
||
|
RMoveToBakFile(Makefile) @@\
|
||
|
$(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR) imakeflags
|
||
|
|
||
|
#endif /* BuildMakefileTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* MakefileTarget - generate rules to build a normal Makefile.
|
||
|
*/
|
||
|
#ifndef MakefileTarget
|
||
|
#define MakefileTarget() @@\
|
||
|
BuildMakefileTarget(Imakefile,NullParameter)
|
||
|
#endif /* MakefileTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* LibMkdir - helper for creating library object subdirectories
|
||
|
*/
|
||
|
#ifndef LibMkdir
|
||
|
#define LibMkdir(dir) DirFailPrefix@if [ -d dir ]; then exit 0; else set -x; mkdir dir; fi
|
||
|
#endif
|
||
|
|
||
|
#ifndef LibMkdirLinkSubdirs
|
||
|
#define LibMkdirLinkSubdirs(dir) DirFailPrefix@if [ -d dir ]; then \ @@\
|
||
|
exit 0; \ @@\
|
||
|
else \ @@\
|
||
|
echo "mkdir dir"; mkdir dir; \ @@\
|
||
|
for i in $(SUBDIRS); do \ @@\
|
||
|
j=`echo "$$i" | sed -e 's;[^/]\{1,\};..;g'`; \ @@\
|
||
|
if [ ! -d "dir/`dirname $$i`" ]; then \ @@\
|
||
|
$(MKDIRHIER) "dir/`dirname $$i`"; \ @@\
|
||
|
fi; \ @@\
|
||
|
echo $(LN) "$$j/$$i/dir" "dir/$$i"; \ @@\
|
||
|
$(LN) "$$j/$$i/dir" "dir/$$i"; \ @@\
|
||
|
done; \ @@\
|
||
|
fi
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* LibCleanDir - helper for cleaning library object subdirectories
|
||
|
*/
|
||
|
#ifndef LibCleanDir
|
||
|
#define LibCleanDir(dir) -@if [ -d dir ]; then \ @@\
|
||
|
set -x; $(RM) -r dir; else exit 0; fi
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* LintLibReferences - variables for lint libraries
|
||
|
*/
|
||
|
#ifndef LintLibReferences
|
||
|
#define LintLibReferences(varname,libname,libsource) @@\
|
||
|
Concat(LINT,varname) = _UseCat($(LINTLIBDIR)/llib-l,libsource/llib-,libname.ln)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* UnsharedLibReferences - variables for unshared libraries
|
||
|
*/
|
||
|
#ifndef UnsharedLibReferences
|
||
|
#define UnsharedLibReferences(varname,libname,libsource) @@\
|
||
|
ProjectUnsharedLibReferences(varname,libname,libsource,$(BUILDLIBDIR))
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* ProjectUnsharedLibReferences - variables for unshared libraries
|
||
|
*/
|
||
|
#ifndef ProjectUnsharedLibReferences
|
||
|
#define ProjectUnsharedLibReferences(varname,libname,libsource,buildlibdir) @@\
|
||
|
Concat3(DEP,varname,LIB) = _UseCat($(USRLIBDIR)/,buildlibdir/,LibraryTargetName(libname)) @@\
|
||
|
Concat(varname,LIB) = LoaderLibPrefix Concat(-l,libname) @@\
|
||
|
LintLibReferences(varname,libname,libsource)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* ProjectUnsharedFontLibReferences - unshared font libraries
|
||
|
*/
|
||
|
#ifndef ProjectUnsharedFontLibReferences
|
||
|
#define ProjectUnsharedFontLibReferences() @@\
|
||
|
DEPFONTLIB = _UseCat($(USRLIBDIR)/,XBuildLibDir/,LibraryTargetName(Xfont)) @@\
|
||
|
FONTLIB = -L$(FREETYPELIBDIR) -L$(FONTLIBSRC) LoaderLibPrefix -lXfont @@\
|
||
|
LintLibReferences(XFONT,Xfont,$(FONTLIBSRC))
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* SharedLibDependencies - shared library dependencies
|
||
|
*/
|
||
|
#ifndef SharedLibDependencies
|
||
|
#define SharedLibDependencies(libname,libsource,revname) /**/
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* SharedFontLibReferences - shared font libraries
|
||
|
*/
|
||
|
#ifndef SharedFontLibReferences
|
||
|
#define SharedFontLibReferences() @@\
|
||
|
SOFONTREV = SharedFontRev @@\
|
||
|
DEPFONTLIB = SharedLibDependencies(Xfont,$(FONTLIBSRC),SOFONTREV) @@\
|
||
|
FONTLIB = -L$(FREETYPELIBDIR) -L$(FONTLIBSRC) LoaderLibPrefix -lXfont @@\
|
||
|
LintLibReferences(XFONT,Xfont,$(FONTLIBSRC))
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* SharedDSLibDependencies - shared library dependencies with data separation
|
||
|
*/
|
||
|
#ifndef SharedDSLibDependencies
|
||
|
#define SharedDSLibDependencies(libname,libsource,revname) /**/
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* SharedLibReferences - variables for shared libraries
|
||
|
*/
|
||
|
#ifndef SharedLibReferences
|
||
|
#define SharedLibReferences(varname,libname,libsource,revname,rev) @@\
|
||
|
revname = rev @@\
|
||
|
Concat3(DEP,varname,LIB) = SharedLibDependencies(libname,libsource,revname) @@\
|
||
|
Concat(varname,LIB) = LoaderLibPrefix Concat(-l,libname) @@\
|
||
|
LintLibReferences(varname,libname,libsource)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* SharedDSLibReferences - variables for shared libraries with data separation
|
||
|
*/
|
||
|
#ifndef SharedDSLibReferences
|
||
|
#define SharedDSLibReferences(varname,libname,libsource,revname,rev) @@\
|
||
|
revname = rev @@\
|
||
|
Concat3(DEP,varname,LIB) = SharedDSLibDependencies(libname,libsource,revname) @@\
|
||
|
Concat(varname,LIB) = LoaderLibPrefix Concat(-l,libname) @@\
|
||
|
LintLibReferences(varname,libname,libsource)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* CPPOnlyCompile - run C compiler's preprocessor only
|
||
|
*/
|
||
|
#ifndef CPPOnlyCompile
|
||
|
#define CPPOnlyCompile(src,options) RemoveFile($@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(CC) -E $(CFLAGS) options src > $@
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* ObjectCompile - compile fragment for a normal object file
|
||
|
*/
|
||
|
#ifndef ObjectCompile
|
||
|
#define ObjectCompile(options) RemoveFile($@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(CC) -c $(CFLAGS) options $*.c
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* CompileCToAsm - compile C file to assembler
|
||
|
*/
|
||
|
#ifndef CompileCToAsm
|
||
|
#define CompileCToAsm(options) RemoveFile($@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(CC) -S $(CFLAGS) options $*.c
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* CompileCplusplusToAsm - compile C++ file to assembler
|
||
|
*/
|
||
|
#ifndef CompileCplusplusToAsm
|
||
|
#define CompileCplusplusToAsm(options) RemoveFile($@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(CC) -S $(CFLAGS) options $*.cc
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#ifndef ObjectCplusplusCompile
|
||
|
#define ObjectCplusplusCompile(options) RemoveFile($@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(CXX) -c $(CXXFLAGS) options $*.CCsuf
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* NormalLibObjCompile - compile fragment for a normal library object file
|
||
|
*/
|
||
|
#ifndef NormalLibObjCompile
|
||
|
#define NormalLibObjCompile(options) ObjectCompile(options)
|
||
|
#endif
|
||
|
|
||
|
#ifndef NormalRelocLibObjCompile
|
||
|
# if !StaticNeedsPicForShared
|
||
|
# define NormalRelocLibObjCompile(options) NormalLibObjCompile(options)
|
||
|
# else
|
||
|
# define NormalRelocLibObjCompile(options) NormalLibObjCompile(options $(PICFLAGS))
|
||
|
# endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef NormalLibObjCplusplusCompile
|
||
|
#define NormalLibObjCplusplusCompile(options) ObjectCplusplusCompile(options)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* NormalSharedLibObjCompile - compile fragment for shared objects
|
||
|
*/
|
||
|
#ifndef NormalSharedLibObjCompile
|
||
|
#define NormalSharedLibObjCompile(options) NormalLibObjCompile(options $(SHLIBDEF) $(SHAREDCODEDEF) $(PICFLAGS))
|
||
|
#endif
|
||
|
|
||
|
#ifndef NormalSharedLibObjCplusplusCompile
|
||
|
#define NormalSharedLibObjCplusplusCompile(options) NormalLibObjCplusplusCompile(options $(SHLIBDEF) $(SHAREDCODEDEF) $(CXXPICFLAGS))
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* LibObjCompile - compile fragment for unshared/profiled/debugged objects
|
||
|
*/
|
||
|
#ifndef LibObjCompile
|
||
|
#if HasGcc || HasGcc2
|
||
|
#define LibObjCompile(dir,options) RemoveFiles($@ dir/$@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(CC) -c $(CCOPTIONS) $(THREADS_CFLAGS) $(ALLDEFINES) \
|
||
|
options $*.c -o dir/$@
|
||
|
#else
|
||
|
#define LibObjCompile(dir,options) RemoveFiles($@ dir/$@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(CC) -c $(CCOPTIONS) $(THREADS_CFLAGS) $(ALLDEFINES) \
|
||
|
options $*.c @@\
|
||
|
$(MV) $@ dir/$@
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef LibObjCplusplusCompile
|
||
|
#if HasGcc || HasGcc2
|
||
|
#define LibObjCplusplusCompile(dir,options) RemoveFiles($@ dir/$@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(CXX) -c $(CXXOPTIONS) $(THREADS_CXXFLAGS) $(CXXDEFINES) \
|
||
|
options $*.CCsuf -o dir/$@
|
||
|
#else
|
||
|
#define LibObjCplusplusCompile(dir,options) RemoveFiles($@ dir/$@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(CXX) -c $(CXXOPTIONS) $(THREADS_CXXFLAGS) $(CXXDEFINES) \
|
||
|
options $*.CCsuf @@\
|
||
|
$(MV) $@ dir/$@
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* DebuggedLibObjCompile - compile fragment for debugged objects
|
||
|
*/
|
||
|
#ifndef DebuggedLibObjCompile
|
||
|
#define DebuggedLibObjCompile(options) LibObjCompile(debugger,DebuggableCDebugFlags options)
|
||
|
#endif
|
||
|
|
||
|
#ifndef DebuggedLibObjCplusplusCompile
|
||
|
#define DebuggedLibObjCplusplusCompile(options) LibObjCplusplusCompile(debugger,DebuggableCplusplusDebugFlags options)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* ProfiledLibObjCompile - compile fragment for profiled objects
|
||
|
*/
|
||
|
#ifndef ProfiledLibObjCompile
|
||
|
#define ProfiledLibObjCompile(options) LibObjCompile(profiled,ProfiledCDebugFlags options)
|
||
|
#endif
|
||
|
|
||
|
#ifndef ProfiledLibObjCplusplusCompile
|
||
|
#define ProfiledLibObjCplusplusCompile(options) LibObjCplusplusCompile(profiled,ProfiledCplusplusDebugFlags options)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* UnsharedLibObjCompile - compile fragment for unshared objects
|
||
|
*/
|
||
|
#ifndef UnsharedLibObjCompile
|
||
|
#define UnsharedLibObjCompile(options) LibObjCompile(unshared,$(CDEBUGFLAGS) $(CLIBDEBUGFLAGS) options)
|
||
|
#endif
|
||
|
|
||
|
#ifndef UnsharedLibObjCplusplusCompile
|
||
|
#define UnsharedLibObjCplusplusCompile(options) LibObjCplusplusCompile(unshared,$(CXXDEBUGFLAGS) $(CXXLIBDEBUGFLAGS) options)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* SharedLibObjCompile - compile fragment for shared objects
|
||
|
*/
|
||
|
#ifndef SharedLibObjCompile
|
||
|
#define SharedLibObjCompile(options) LibObjCompile(shared,options $(SHLIBDEF) $(SHAREDCODEDEF) $(PICFLAGS) $(CDEBUGFLAGS) $(CLIBDEBUGFLAGS))
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* NormalLibraryObjectRule - for simple libraries
|
||
|
*/
|
||
|
#ifndef NormalLibraryObjectRule
|
||
|
#define NormalLibraryObjectRule() @@\
|
||
|
.c.Osuf: @@\
|
||
|
NormalLibObjCompile($(_NOOP_))
|
||
|
#endif /* NormalLibraryObjectRule */
|
||
|
|
||
|
#ifndef NormalCplusplusObjectRule
|
||
|
#define NormalCplusplusObjectRule() @@\
|
||
|
.CCsuf.Osuf: @@\
|
||
|
NormalLibObjCplusplusCompile($(_NOOP_))
|
||
|
#endif
|
||
|
|
||
|
#ifndef NormalFortranObjectRule
|
||
|
#define NormalFortranObjectRule() @@\
|
||
|
.f.Osuf: @@\
|
||
|
RemoveFile($@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(FC) -c $(FCFLAGS) $*.f
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* SpecialObjectRule - generate rules to compile a file with special flags.
|
||
|
*/
|
||
|
#ifndef SpecialObjectRule
|
||
|
#define SpecialObjectRule(objs,depends,options) @@\
|
||
|
objs: depends @@\
|
||
|
ObjectCompile(options)
|
||
|
#endif /* SpecialObjectRule */
|
||
|
|
||
|
#ifndef SpecialCplusplusObjectRule
|
||
|
#define SpecialCplusplusObjectRule(baseobj,basedep,options) @@\
|
||
|
baseobj.Osuf: basedep.CCsuf @@\
|
||
|
ObjectCplusplusCompile(options)
|
||
|
#endif /* SpecialCplusplusObjectRule */
|
||
|
|
||
|
/*
|
||
|
* SpecialCObjectRule - generate rules to compile a C file with special flags.
|
||
|
* also handles CodeCenter rules
|
||
|
*/
|
||
|
#ifndef SpecialCObjectRule
|
||
|
#define SpecialCObjectRule(basename,depends,options) @@\
|
||
|
SpecialObjectRule(basename.Osuf,basename.c depends,options) @@\
|
||
|
@@\
|
||
|
basename.i: basename.c depends @@\
|
||
|
CPPOnlyCompile(basename.c,options) @@\
|
||
|
@@\
|
||
|
basename.s: basename.c depends @@\
|
||
|
CompileCToAsm(options) @@\
|
||
|
@@\
|
||
|
CenterLoadTarget(debug_src,basename.c,NullParameter,$(ALLDEFINES) options)
|
||
|
#endif /* SpecialCObjectRule */
|
||
|
|
||
|
|
||
|
#ifndef ObjectFromSpecialSource
|
||
|
#define ObjectFromSpecialSource(dst,src,flags) @@\
|
||
|
NoConfigRec(dst.c) @@\
|
||
|
@@\
|
||
|
dst.c: src.c @@\
|
||
|
RemoveFile($@) @@\
|
||
|
$(LN) $? $@ @@\
|
||
|
@@\
|
||
|
SpecialCObjectRule(dst,NullParameter,flags) @@\
|
||
|
@@\
|
||
|
includes:: dst.c @@\
|
||
|
@@\
|
||
|
depend:: dst.c @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(dst.c)
|
||
|
#endif /* ObjectFromSpecialSource */
|
||
|
|
||
|
#ifndef CPPOnlyAsm
|
||
|
#define CPPOnlyAsm(basename,options) RemoveFile(basename.i) @@\
|
||
|
$(CPP) AsmDefines $(DEFINES) $(INCLUDES) options basename.S | \ @@\
|
||
|
grep -v '^\#' > basename.i
|
||
|
#endif
|
||
|
|
||
|
#ifndef AssembleObject
|
||
|
#define AssembleObject(basename,flags) CPPOnlyAsm(basename,flags) @@\
|
||
|
RemoveFile(basename.o) @@\
|
||
|
$(AS) -o basename.o basename.i @@\
|
||
|
RemoveFile(basename.i)
|
||
|
#endif
|
||
|
|
||
|
#ifndef NormalAsmObjectRule
|
||
|
#define NormalAsmObjectRule() @@\
|
||
|
.S.o: @@\
|
||
|
AssembleObject($*,$(_NOOP_)) @@\
|
||
|
@@\
|
||
|
.S.i: @@\
|
||
|
CPPOnlyAsm($*,$(_NOOP_))
|
||
|
#endif
|
||
|
|
||
|
#ifndef ObjectFromSpecialAsmSource
|
||
|
#define ObjectFromSpecialAsmSource(dst,src,flags) @@\
|
||
|
dst.S: src.S @@\
|
||
|
RemoveFile($@) @@\
|
||
|
$(LN) $? $@ @@\
|
||
|
@@\
|
||
|
dst.o: dst.S @@\
|
||
|
AssembleObject(dst,flags) @@\
|
||
|
@@\
|
||
|
dst.i: dst.S @@\
|
||
|
CPPOnlyAsm(dst,flags) @@\
|
||
|
@@\
|
||
|
depend:: dst.S @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(dst.S)
|
||
|
#endif
|
||
|
|
||
|
#ifndef ObjectFromAsmSource
|
||
|
#define ObjectFromAsmSource(src,flags) @@\
|
||
|
@@\
|
||
|
src.o: src.S @@\
|
||
|
AssembleObject(src,flags) @@\
|
||
|
@@\
|
||
|
src.i: src.S @@\
|
||
|
CPPOnlyAsm(src,flags) @@\
|
||
|
@@\
|
||
|
depend:: src.S
|
||
|
#endif
|
||
|
|
||
|
#ifndef SwitchYYPrefix
|
||
|
#define SwitchYYPrefix(in,out,prefix) \
|
||
|
sed 's/yy/prefix/g' in | sed 's/__REALLY_YY__/yy/' > out && RemoveFile(in)
|
||
|
#endif
|
||
|
|
||
|
#ifndef LexFilePrefix
|
||
|
#define LexFilePrefix(file,prefix) @@\
|
||
|
file.c: file.l @@\
|
||
|
ClearmakeOSName \
|
||
|
$(LEX) $(LFLAGS) file.l @@\
|
||
|
SwitchYYPrefix(lex.yy.c,file.c,prefix) @@\
|
||
|
@@\
|
||
|
depend:: file.c @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles(lex.yy.c file.c)
|
||
|
#endif
|
||
|
|
||
|
#ifndef LexFileExplicit
|
||
|
#if HasClearmake /* provide a place to hang ClearmakeOSName */
|
||
|
#define LexFileExplicit(file) @@\
|
||
|
file.c: file.l @@\
|
||
|
ClearmakeOSName \
|
||
|
$(LEX) $(LFLAGS) file.l @@\
|
||
|
$(MV) lex.yy.c file.c
|
||
|
#else
|
||
|
#define LexFileExplicit(file) /* the default rule is fine */
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef LexFile
|
||
|
#define LexFile(file) @@\
|
||
|
LexFileExplicit(file) @@\
|
||
|
@@\
|
||
|
depend:: file.c @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles(lex.yy.c file.c)
|
||
|
#endif /* LexFile */
|
||
|
|
||
|
|
||
|
#ifndef M4File
|
||
|
#define M4File(file,includes) @@\
|
||
|
file: file.m4 includes @@\
|
||
|
RemoveFile(file) @@\
|
||
|
$(M4) $(M4FLAGS) file.m4 >file @@\
|
||
|
@@\
|
||
|
depend:: file @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(file)
|
||
|
#endif /* M4File */
|
||
|
|
||
|
#ifndef YaccFilePrefix
|
||
|
#if HasGnuMake
|
||
|
#define YaccFilePrefix(file,flags,prefix) @@\
|
||
|
depend:: file.c @@\
|
||
|
@@\
|
||
|
file.h: file.c @@\
|
||
|
@@\
|
||
|
file.c: file.y @@\
|
||
|
ClearmakeOSName \
|
||
|
$(YACC) flags file.y @@\
|
||
|
SwitchYYPrefix(y.tab.c,file.c,prefix) @@\
|
||
|
@if [ -f y.tab.h ]; then set -x; SwitchYYPrefix(y.tab.h,file.h,prefix); \@@\
|
||
|
else exit 0; fi @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles(y.tab.c y.tab.h file.h file.c)
|
||
|
#else
|
||
|
#define YaccFilePrefix(file,flags,prefix) @@\
|
||
|
depend:: file.c @@\
|
||
|
@@\
|
||
|
file.h file.c: file.y @@\
|
||
|
ClearmakeOSName \
|
||
|
$(YACC) flags file.y @@\
|
||
|
SwitchYYPrefix(y.tab.c,file.c,prefix) @@\
|
||
|
@if [ -f y.tab.h ]; then set -x; SwitchYYPrefix(y.tab.h,file.h,prefix); \ @@\
|
||
|
else exit 0; fi @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles(y.tab.c y.tab.h file.h file.c)
|
||
|
#endif
|
||
|
#endif /* YaccFile */
|
||
|
|
||
|
#ifndef YaccFile
|
||
|
#if HasGnuMake
|
||
|
#define YaccFile(file,flags) @@\
|
||
|
depend:: file.c @@\
|
||
|
@@\
|
||
|
file.h: file.c @@\
|
||
|
@@\
|
||
|
file.c: file.y @@\
|
||
|
ClearmakeOSName \
|
||
|
$(YACC) flags file.y @@\
|
||
|
$(MV) y.tab.c file.c @@\
|
||
|
@if [ -f y.tab.h ]; then set -x; $(MV) y.tab.h file.h; \ @@\
|
||
|
else exit 0; fi @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles(y.tab.c y.tab.h file.h file.c)
|
||
|
#else
|
||
|
#define YaccFile(file,flags) @@\
|
||
|
depend:: file.c @@\
|
||
|
@@\
|
||
|
file.h file.c: file.y @@\
|
||
|
ClearmakeOSName \
|
||
|
$(YACC) flags file.y @@\
|
||
|
$(MV) y.tab.c file.c @@\
|
||
|
@if [ -f y.tab.h ]; then set -x; $(MV) y.tab.h file.h; \ @@\
|
||
|
else exit 0; fi @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles(y.tab.c y.tab.h file.h file.c)
|
||
|
#endif
|
||
|
#endif /* YaccFile */
|
||
|
|
||
|
#ifndef YaccFileNoFlags
|
||
|
#define YaccFileNoFlags(file) @@\
|
||
|
depend:: file.c @@\
|
||
|
@@\
|
||
|
file.c: file.y @@\
|
||
|
ClearmakeOSName \
|
||
|
$(YACC) file.y @@\
|
||
|
$(MV) y.tab.c file.c @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles(y.tab.c file.c)
|
||
|
#endif /* YaccFileNoFlags */
|
||
|
|
||
|
|
||
|
#ifndef MakeLibrary
|
||
|
#define MakeLibrary(libname,objlist) $(AR) libname objlist
|
||
|
#endif
|
||
|
|
||
|
#ifndef LinkBuildLibrary
|
||
|
#ifdef UseInstalled
|
||
|
#define LinkBuildLibrary(lib) $(_NULLCMD_)
|
||
|
#else
|
||
|
#define LinkBuildLibrary(lib) MakeDir($(BUILDLIBDIR)) @@\
|
||
|
RemoveFile($(BUILDLIBDIR)/lib) @@\
|
||
|
cd $(BUILDLIBDIR) && $(LN) $(BUILDLIBTOP)/$(CURRENT_DIR)/lib .
|
||
|
#endif
|
||
|
#endif /* LinkBuildLibrary */
|
||
|
|
||
|
#ifndef LinkBuildLibraryMaybe
|
||
|
#ifdef UseInstalled
|
||
|
#define LinkBuildLibraryMaybe(lib,doit) $(_NULLCMD_)
|
||
|
#else
|
||
|
#define LinkBuildLibraryMaybe(lib,doit) MakeDir($(BUILDLIBDIR)) @@\
|
||
|
@if doit; then (set -x; \ @@\
|
||
|
RemoveFile($(BUILDLIBDIR)/lib); \ @@\
|
||
|
cd $(BUILDLIBDIR) && $(LN) $(BUILDLIBTOP)/$(CURRENT_DIR)/lib .); fi
|
||
|
#endif
|
||
|
#endif /* LinkBuildLibraryMaybe */
|
||
|
|
||
|
#ifndef _LinkBuildLibrary /* will get redefined elsewhere */
|
||
|
#define _LinkBuildLibrary(lib) $(_NULLCMD_)
|
||
|
#endif /* _LinkBuildLibrary */
|
||
|
|
||
|
#ifndef LinkBuildSonameLibrary
|
||
|
#ifdef UseInstalled
|
||
|
#define LinkBuildSonameLibrary(lib) true
|
||
|
#else
|
||
|
#define LinkBuildSonameLibrary(lib) MakeDirInline($(BUILDLIBDIR));\ @@\
|
||
|
(set -x; RemoveFile($(BUILDLIBDIR)/lib);\ @@\
|
||
|
(cd $(BUILDLIBDIR) && $(LN) $(BUILDLIBTOP)/$(CURRENT_DIR)/lib .))
|
||
|
#endif
|
||
|
#endif /* LinkBuildSonameLibrary */
|
||
|
|
||
|
#ifndef LinkBuildLibraryInline
|
||
|
#define LinkBuildLibraryInline(lib) LinkBuildSonameLibrary(lib)
|
||
|
#endif /* LinkBuildLibraryInline */
|
||
|
|
||
|
/*
|
||
|
* NormalLibraryTarget - generate rules to create a library.
|
||
|
*/
|
||
|
#ifndef NormalLibraryTarget
|
||
|
#define NormalLibraryTarget(libname,objlist) @@\
|
||
|
AllTarget(LibraryTargetName(libname)) @@\
|
||
|
@@\
|
||
|
LibraryTargetName(libname): objlist $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
MakeLibrary($@,objlist) @@\
|
||
|
RanLibrary($@) @@\
|
||
|
_LinkBuildLibrary($@)
|
||
|
#endif /* NormalLibraryTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* NormalLibraryTarget2 - generate rules to create a library in two steps.
|
||
|
* This is used to create libraries with large numbers of files.
|
||
|
*/
|
||
|
#ifndef NormalLibraryTarget2
|
||
|
#define NormalLibraryTarget2(libname,objlist1,objlist2) @@\
|
||
|
AllTarget(LibraryTargetName(libname)) @@\
|
||
|
@@\
|
||
|
LibraryTargetName(libname): objlist1 objlist2 $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
MakeLibrary($@,objlist1) @@\
|
||
|
MakeLibrary($@,objlist2) @@\
|
||
|
RanLibrary($@) @@\
|
||
|
_LinkBuildLibrary($@)
|
||
|
#endif /* NormalLibraryTarget2 */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* NormalLibraryTarget3 - generate rules to create a library in three steps.
|
||
|
* This is used to create libraries with very large numbers of files.
|
||
|
*/
|
||
|
#ifndef NormalLibraryTarget3
|
||
|
#define NormalLibraryTarget3(libname,objlist1,objlist2,objlist3) @@\
|
||
|
AllTarget(LibraryTargetName(libname)) @@\
|
||
|
@@\
|
||
|
LibraryTargetName(libname): objlist1 objlist2 objlist3 $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
MakeLibrary($@,objlist1) @@\
|
||
|
MakeLibrary($@,objlist2) @@\
|
||
|
MakeLibrary($@,objlist3) @@\
|
||
|
RanLibrary($@) @@\
|
||
|
_LinkBuildLibrary($@)
|
||
|
#endif /* NormalLibraryTarget3 */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* NormalDepLibraryTarget - generate rules to create a library.
|
||
|
*/
|
||
|
#ifndef NormalDepLibraryTarget
|
||
|
#define NormalDepLibraryTarget(libname,deplist,objlist) @@\
|
||
|
AllTarget(LibraryTargetName(libname)) @@\
|
||
|
@@\
|
||
|
LibraryTargetName(libname): deplist $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
MakeLibrary($@,objlist) @@\
|
||
|
RanLibrary($@) @@\
|
||
|
_LinkBuildLibrary($@)
|
||
|
#endif /* NormalDepLibraryTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* UnsharedLibraryTarget - generate rules to create a library.
|
||
|
*/
|
||
|
#ifndef UnsharedLibraryTarget
|
||
|
#define UnsharedLibraryTarget(libname,objlist,down,up) @@\
|
||
|
AllTarget(LibraryTargetName(libname)) @@\
|
||
|
@@\
|
||
|
LibraryTargetName(libname): objlist $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
@(set -x; cd down && MakeLibrary(up/$@,objlist)) || exit 1; @@\
|
||
|
RanLibrary($@) @@\
|
||
|
_LinkBuildLibrary($@)
|
||
|
#endif /* UnsharedLibraryTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* UnsharedLibraryTarget3 - generate rules to create a library in three steps.
|
||
|
* This is used to create libraries with very large numbers of files.
|
||
|
*/
|
||
|
#ifndef UnsharedLibraryTarget3
|
||
|
#define UnsharedLibraryTarget3(libname,objlist1,objlist2,objlist3,down,up) @@\
|
||
|
AllTarget(LibraryTargetName(libname)) @@\
|
||
|
@@\
|
||
|
LibraryTargetName(libname): objlist1 objlist2 objlist3 $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
(cd down && MakeLibrary(up/$@,objlist1)) @@\
|
||
|
(cd down && MakeLibrary(up/$@,objlist2)) @@\
|
||
|
(cd down && MakeLibrary(up/$@,objlist3)) @@\
|
||
|
RanLibrary($@) @@\
|
||
|
_LinkBuildLibrary($@)
|
||
|
#endif /* UnsharedLibraryTarget3 */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* SubdirLibraryRule -
|
||
|
*/
|
||
|
#ifndef SubdirLibraryRule
|
||
|
#define SubdirLibraryRule(objlist) @@\
|
||
|
all:: DONE @@\
|
||
|
@@\
|
||
|
DONE: objlist @@\
|
||
|
RemoveFile($@) @@\
|
||
|
touch $@ @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(DONE)
|
||
|
#endif /* SubdirLibraryRule */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* ProfiledLibraryTarget - generate rules to create a profiled library.
|
||
|
*/
|
||
|
#ifndef ProfiledLibraryTarget
|
||
|
#define ProfiledLibraryTarget(libname,objlist) @@\
|
||
|
AllTarget(LibraryTargetNameSuffix(libname,_p)) @@\
|
||
|
@@\
|
||
|
LibraryTargetNameSuffix(libname,_p): objlist $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
cd profiled && MakeLibrary(../$@,objlist) @@\
|
||
|
RanLibrary($@)
|
||
|
|
||
|
#endif /* ProfiledLibraryTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* ProfiledDepLibraryTarget - generate rules to create a profiled library.
|
||
|
*/
|
||
|
#ifndef ProfiledDepLibraryTarget
|
||
|
#define ProfiledDepLibraryTarget(libname,deplist,objlist) @@\
|
||
|
AllTarget(LibraryTargetNameSuffix(libname,_p)) @@\
|
||
|
@@\
|
||
|
LibraryTargetNameSuffix(libname,_p): deplist $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
MakeLibrary($@,objlist) @@\
|
||
|
RanLibrary($@)
|
||
|
|
||
|
#endif /* ProfiledDepLibraryTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* DebuggedLibraryTarget - generate rules to create a debuggable library.
|
||
|
*/
|
||
|
#ifndef DebuggedLibraryTarget
|
||
|
#define DebuggedLibraryTarget(libname,objlist) @@\
|
||
|
AllTarget(LibraryTargetNameSuffix(libname,_d)) @@\
|
||
|
@@\
|
||
|
LibraryTargetNameSuffix(libname,_d): objlist $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
cd debugger && MakeLibrary(../$@,objlist) @@\
|
||
|
RanLibrary($@)
|
||
|
|
||
|
#endif /* DebuggedLibraryTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* DebuggedDepLibraryTarget - generate rules to create a debuggable library.
|
||
|
*/
|
||
|
#ifndef DebuggedDepLibraryTarget
|
||
|
#define DebuggedDepLibraryTarget(libname,deplist,objlist) @@\
|
||
|
AllTarget(LibraryTargetNameSuffix(libname,_d)) @@\
|
||
|
@@\
|
||
|
LibraryTargetNameSuffix(libname,_d): deplist $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
MakeLibrary($@,objlist) @@\
|
||
|
RanLibrary($@)
|
||
|
|
||
|
#endif /* DebuggedDepLibraryTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* AliasedLibraryTarget - generate rules to link one library to another.
|
||
|
*/
|
||
|
#ifndef AliasedLibraryTarget
|
||
|
#define AliasedLibraryTarget(libname,alias) @@\
|
||
|
AllTarget(LibraryTargetName(alias)) @@\
|
||
|
@@\
|
||
|
LibraryTargetName(alias): LibraryTargetName(libname) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
$(LN) LibraryTargetName(libname) $@ @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(LibraryTargetName(alias))
|
||
|
#endif /* AliasedLibraryTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* NormalRelocatableTarget - generate rules to produce a relocatable object
|
||
|
* file instead of a library.
|
||
|
*/
|
||
|
#ifndef NormalRelocatableTarget
|
||
|
#define NormalRelocatableTarget(objname,objlist) @@\
|
||
|
AllTarget(objname.Osuf) @@\
|
||
|
@@\
|
||
|
objname.Osuf: objlist $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
$(LD) $(LDCOMBINEFLAGS) objlist -o $@
|
||
|
#endif /* NormalRelocatableTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* NormalDepRelocatableTarget - generate rules to produce a relocatable object
|
||
|
* file instead of a library.
|
||
|
*/
|
||
|
#ifndef NormalDepRelocatableTarget
|
||
|
#define NormalDepRelocatableTarget(objname,deplist,objlist) @@\
|
||
|
AllTarget(objname.Osuf) @@\
|
||
|
@@\
|
||
|
objname.Osuf: deplist $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
$(LD) $(LDCOMBINEFLAGS) objlist -o $@
|
||
|
#endif /* NormalDepRelocatableTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* ProfiledRelocatableTarget - generate rules to produce a profiled relocatable
|
||
|
* object file instead of a library.
|
||
|
*/
|
||
|
#ifndef ProfiledRelocatableTarget
|
||
|
#define ProfiledRelocatableTarget(objname,objlist) @@\
|
||
|
AllTarget(Concat(objname,_p.Osuf)) @@\
|
||
|
@@\
|
||
|
Concat(objname,_p.Osuf): objlist $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
$(LD) -X -r objlist -o $@
|
||
|
|
||
|
#endif /* ProfiledRelocatableTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* DebuggedRelocatableTarget - generate rules to produce a debuggable
|
||
|
* relocatable object file instead of a library.
|
||
|
*/
|
||
|
#ifndef DebuggedRelocatableTarget
|
||
|
#define DebuggedRelocatableTarget(objname,objlist) @@\
|
||
|
AllTarget(Concat(objname,_d.Osuf)) @@\
|
||
|
@@\
|
||
|
Concat(objname,_d.Osuf): objlist $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
$(LD) -X -r objlist -o $@
|
||
|
|
||
|
#endif /* DebuggedRelocatableTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* LintLibraryTarget - generate rules to create a lint library. Note that the
|
||
|
* lint library is always forced to be newer than the library itself.
|
||
|
*/
|
||
|
#ifndef LintLibraryTarget
|
||
|
#define LintLibraryTarget(libname,srclist) @@\
|
||
|
lintlib:: Concat(llib-l,libname.ln) @@\
|
||
|
@@\
|
||
|
Concat(llib-l,libname.ln): srclist $(EXTRALIBRARYDEPS) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
$(LINT) Concat($(LINTLIBFLAG),libname) $(LINTFLAGS) srclist
|
||
|
#endif /* LintLibraryTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* NormalLintTarget - generate rules to lint a set of sources.
|
||
|
*/
|
||
|
#ifndef NormalLintTarget
|
||
|
#define NormalLintTarget(srclist) @@\
|
||
|
lint: @@\
|
||
|
$(LINT) $(LINTFLAGS) srclist $(LINTLIBS) @@\
|
||
|
lint1: @@\
|
||
|
$(LINT) $(LINTFLAGS) $(FILE) $(LINTLIBS)
|
||
|
#endif /* NormalLintTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* LintTarget - generate rules to lint $(SRCS)
|
||
|
*/
|
||
|
#ifndef LintTarget
|
||
|
#define LintTarget() @@\
|
||
|
NormalLintTarget($(SRCS))
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* LinkSourceFile - snag source file from some other directory
|
||
|
*/
|
||
|
#ifndef LinkSourceFile
|
||
|
#define LinkSourceFile(src,dir) @@\
|
||
|
src: dir/src @@\
|
||
|
RemoveFile($@) @@\
|
||
|
$(LN) $? $@ @@\
|
||
|
@@\
|
||
|
NoConfigRec(src) @@\
|
||
|
@@\
|
||
|
includes:: src @@\
|
||
|
@@\
|
||
|
depend:: src @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(src)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* LinkFile - link a file
|
||
|
*/
|
||
|
#ifndef LinkFile
|
||
|
#define LinkFile(tofile,fromfile) @@\
|
||
|
tofile:: fromfile @@\
|
||
|
RemoveFile($@) @@\
|
||
|
$(LN) $? $@ @@\
|
||
|
@@\
|
||
|
NoConfigRec(tofile) @@\
|
||
|
@@\
|
||
|
includes:: tofile @@\
|
||
|
@@\
|
||
|
depend:: tofile @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(tofile)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
#ifndef MakeSubincludesForBuild
|
||
|
#define MakeSubincludesForBuild(step,dir,srclist) @@\
|
||
|
step:: dir srclist @@\
|
||
|
@-(list=`echo srclist | sed -e 's/[^ ]*\///g'`; \ @@\
|
||
|
set -x; cd dir && RemoveFiles($$list)) @@\
|
||
|
@for i in srclist; do \ @@\
|
||
|
(set -x; cd dir && $(LN) ../$$i .); \ @@\
|
||
|
done @@\
|
||
|
@@\
|
||
|
dir:: @@\
|
||
|
$(MKDIRHIER) dir @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
@-(if [ -d dir ]; then \ @@\
|
||
|
list=`echo srclist | sed -e 's/[^ ]*\///g'`; \ @@\
|
||
|
set -x; cd dir && RemoveFile($$list); else exit 0; fi)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* LangNamedTargetSubdirs - recursively make a series of steps
|
||
|
*/
|
||
|
#ifndef LangNamedTargetSubdirs
|
||
|
#define LangNamedTargetSubdirs(lang,name,dirs,verb,flags,subname) @@\
|
||
|
name:: @@\
|
||
|
@MakeFlagsToShellFlags(ik,set +e); \ @@\
|
||
|
for i in dirs ;\ @@\
|
||
|
do \ @@\
|
||
|
echo verb "in $(CURRENT_DIR)/$$i..."; \ @@\
|
||
|
(cd $$i && LANG=lang $(MAKE) $(MFLAGS) flags subname);\ @@\
|
||
|
done
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* NamedMakeSubdirs - generate rules to do makes in the given subdirectories.
|
||
|
* If you want CDEBUGFLAGS passed along to subdirectories, provide a line like
|
||
|
* the following in the appropriate Imakefile
|
||
|
*
|
||
|
* #define PassCDebugFlags 'CDEBUGFLAGS=$(CDEBUGFLAGS)'
|
||
|
*/
|
||
|
#ifndef LangNamedMakeSubdirs
|
||
|
#define LangNamedMakeSubdirs(lang,name,dirs) \
|
||
|
LangNamedTargetSubdirs(lang,name,dirs,"making" name,PassCDebugFlags,all)
|
||
|
#endif /* LangNamedMakeSubdirs */
|
||
|
|
||
|
#ifndef LangMakeSubdirs
|
||
|
#define LangMakeSubdirs(lang,dirs) @@\
|
||
|
LangNamedMakeSubdirs(lang,all,dirs)
|
||
|
#endif /* LangMakeSubdirs */
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
* NamedTargetSubdirs - recursively make a series of steps
|
||
|
*/
|
||
|
#ifndef NamedTargetSubdirs
|
||
|
#define NamedTargetSubdirs(name,dirs,verb,flags,subname) @@\
|
||
|
name:: @@\
|
||
|
@MakeFlagsToShellFlags(ik,set +e); \ @@\
|
||
|
for i in dirs ;\ @@\
|
||
|
do \ @@\
|
||
|
echo verb "in $(CURRENT_DIR)/$$i..."; \ @@\
|
||
|
MakeNamedTargetSubdir($$i,flags,subname); \ @@\
|
||
|
done
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* NamedMakeSubdirs - generate rules to do makes in the given subdirectories.
|
||
|
* If you want CDEBUGFLAGS passed along to subdirectories, provide a line like
|
||
|
* the following in the appropriate Imakefile
|
||
|
*
|
||
|
* #define PassCDebugFlags 'CDEBUGFLAGS=$(CDEBUGFLAGS)'
|
||
|
*/
|
||
|
#ifndef NamedMakeSubdirs
|
||
|
#define NamedMakeSubdirs(name,dirs) \
|
||
|
NamedTargetSubdirs(name,dirs,"making" name,PassCDebugFlags,all)
|
||
|
#endif /* NamedMakeSubdirs */
|
||
|
|
||
|
#ifndef MakeSubdirs
|
||
|
#define MakeSubdirs(dirs) @@\
|
||
|
NamedMakeSubdirs(all,dirs)
|
||
|
#endif /* MakeSubdirs */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* DependSubdirs - generate rules to recursively compute dependencies as
|
||
|
* part of the make depend step.
|
||
|
*/
|
||
|
#ifndef DependSubdirs
|
||
|
#define DependSubdirs(dirs) \
|
||
|
NamedTargetSubdirs(depend,dirs,"depending",NullParameter,depend)
|
||
|
#endif /* DependSubdirs */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* ForceSubdirs - force make to build subdirectories
|
||
|
*/
|
||
|
#ifndef ForceSubdirs
|
||
|
#if !HasBsdMake
|
||
|
#define ForceSubdirs(dirs) @@\
|
||
|
dirs: FRC @@\
|
||
|
@echo "making all in $(CURRENT_DIR)/$@..." @@\
|
||
|
@MakeNamedTargetSubdir($@,PassCDebugFlags,all) @@\
|
||
|
@@\
|
||
|
FRC:
|
||
|
#else
|
||
|
/* For BSD 4.4 make */
|
||
|
#define ForceSubdirs(dirs) @@\
|
||
|
dirs: .EXEC @@\
|
||
|
@cd $@ ; echo "making all in $(CURRENT_DIR)/$@..."; \ @@\
|
||
|
$(MAKE) $(MFLAGS) PassCDebugFlags all @@\
|
||
|
@@\
|
||
|
.EXEC:
|
||
|
#endif
|
||
|
|
||
|
#endif /* ForceSubdirs */
|
||
|
|
||
|
/*
|
||
|
* InstallSubdirs - generate rules to recursively install programs and files.
|
||
|
*/
|
||
|
#ifndef InstallSubdirs
|
||
|
#define InstallSubdirs(dirs) \
|
||
|
NamedTargetSubdirs(install,dirs,"installing",DESTDIR=$(DESTDIR),install)
|
||
|
#endif /* InstallSubdirs */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallManSubdirs - generate rules to recursively install manual pages.
|
||
|
*/
|
||
|
#ifndef InstallManSubdirs
|
||
|
#define InstallManSubdirs(dirs) \
|
||
|
NamedTargetSubdirs(install.man,dirs,"installing man pages",DESTDIR=$(DESTDIR),install.man)
|
||
|
#endif /* InstallManSubdirs */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* IncludesSubdirs - generate rules to recursively put include files in build
|
||
|
*/
|
||
|
#ifndef IncludesSubdirs
|
||
|
#define IncludesSubdirs(dirs) \
|
||
|
NamedTargetSubdirs(includes,dirs,including,NullParameter,includes)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* InstallDriverSDKSubdirs - generate rules to recursively install Driver
|
||
|
* SDK (only used for XFree86). This is a no-op
|
||
|
* rule so that Imakefiles on non-XFree86 systems
|
||
|
* continue to build Makefiles correctly.
|
||
|
*/
|
||
|
#ifndef InstallDriverSDKSubdirs
|
||
|
#define InstallDriverSDKSubdirs(dirs)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* InstallDriverSDKObjectModule - generate rules to recursively install Driver
|
||
|
* SDK (only used for XFree86). This is a no-op
|
||
|
* rule so that Imakefiles on non-XFree86 systems
|
||
|
* continue to build Makefiles correctly.
|
||
|
*/
|
||
|
#ifndef InstallDriverSDKObjectModule
|
||
|
#define InstallDriverSDKObjectModule(module,dest,subdir)
|
||
|
#endif
|
||
|
#ifndef InstallDriverSDKObjectSubModule
|
||
|
#define InstallDriverSDKObjectSubModule(module,dest,subdir)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
* CleanSubdirs - generate rules to recursively clean out garbage files.
|
||
|
*/
|
||
|
#define BootstrapCleanSubdirs /**/ /* used at top-level */
|
||
|
#ifndef NamedCleanSubdirs
|
||
|
#define NamedCleanSubdirs(name,dirs) \
|
||
|
NamedTargetSubdirs(name,dirs,"cleaning",BootstrapCleanSubdirs,clean)
|
||
|
#endif /* NamedCleanSubdirs */
|
||
|
|
||
|
#ifndef CleanSubdirs
|
||
|
#define CleanSubdirs(dirs) \
|
||
|
NamedCleanSubdirs(clean,dirs)
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
* TagSubdirs - generate rules to recursively create tags files.
|
||
|
*/
|
||
|
#ifndef NamedTagSubdirs
|
||
|
#define NamedTagSubdirs(name,dirs) \
|
||
|
NamedTargetSubdirs(name,dirs,"tagging",TAGS='$(TAGS)',tags)
|
||
|
#endif /* TagSubdirs */
|
||
|
|
||
|
#ifndef TagSubdirs
|
||
|
#define TagSubdirs(dirs) \
|
||
|
NamedTagSubdirs(tags,dirs)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* MakeLintSubdirs - generate rules to recursively lint directories as part
|
||
|
* of the named step.
|
||
|
*/
|
||
|
#ifndef MakeLintSubdirs
|
||
|
#define MakeLintSubdirs(dirs,target,subtarget) \
|
||
|
NamedTargetSubdirs(target,dirs,"linting" for target and subtarget,DESTDIR=$(DESTDIR) LINTOPTS='$(LINTOPTS)',subtarget)
|
||
|
#endif /* MakeLintSubdirs */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* LintSubdirs - generate rules to recursively lint directories as part of
|
||
|
* the make lint step.
|
||
|
*/
|
||
|
#ifndef LintSubdirs
|
||
|
#define LintSubdirs(dirs) @@\
|
||
|
MakeLintSubdirs(dirs,lint,lint)
|
||
|
#endif /* LintSubdirs */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* MakeLintLibSubdirs - generate rules to recursively create lint libraries.
|
||
|
*/
|
||
|
#ifndef MakeLintLibSubdirs
|
||
|
#define MakeLintLibSubdirs(dirs) @@\
|
||
|
MakeLintSubdirs(dirs,lintlib,lintlib)
|
||
|
#endif /* MakeLintLibSubdirs */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* MakeMakeSubdirs - generate rules to recursively recreate Makefiles as part
|
||
|
* of the specified step in the build. If $(TOP) is set to an absolute path,
|
||
|
* do not prepend the ../ prefix. This makes running things outside of the
|
||
|
* source tree much easier.
|
||
|
* $(ONESUBDIR)/Makefile exists as a separate, explicit target so that
|
||
|
* clearmake will know what its goal is and do wink-in.
|
||
|
*/
|
||
|
#ifndef MakeMakeSubdirs
|
||
|
#define MakeMakeSubdirs(dirs,target) @@\
|
||
|
$(ONESUBDIR)/Makefile: @@\
|
||
|
@MakeFlagsToShellFlags(n,executeit="no"); \ @@\
|
||
|
cd $(ONESUBDIR) && \ @@\
|
||
|
if [ "$$executeit" != "no" ]; then \ @@\
|
||
|
ImakeSubCmdHelper -DTOPDIR=$(IMAKETOP) -DCURDIR=$(ONECURDIR)$(ONESUBDIR); \ @@\
|
||
|
fi; @@\
|
||
|
@@\
|
||
|
target:: @@\
|
||
|
-@MakeFlagsToShellFlags(ik,set +e); \ @@\
|
||
|
MakeFlagsToShellFlags(n,executeit="no"); \ @@\
|
||
|
for i in dirs ;\ @@\
|
||
|
do \ @@\
|
||
|
case "$(CURRENT_DIR)" in \ @@\
|
||
|
.) curdir= ;; \ @@\
|
||
|
*) curdir=$(CURRENT_DIR)/ ;; \ @@\
|
||
|
esac; \ @@\
|
||
|
echo "making Makefiles in $$curdir$$i..."; \ @@\
|
||
|
itmp=`echo $$i | sed -e 's;^\./;;g' -e 's;/\./;/;g'`; \ @@\
|
||
|
curtmp="$(CURRENT_DIR)" \ @@\
|
||
|
toptmp=""; \ @@\
|
||
|
case "$$itmp" in \ @@\
|
||
|
../?*) \ @@\
|
||
|
while echo "$$itmp" | grep '^\.\./' > /dev/null;\ @@\
|
||
|
do \ @@\
|
||
|
toptmp="/`basename $$curtmp`$$toptmp"; \ @@\
|
||
|
curtmp="`dirname $$curtmp`"; \ @@\
|
||
|
itmp="`echo $$itmp | sed 's;\.\./;;'`"; \ @@\
|
||
|
done \ @@\
|
||
|
;; \ @@\
|
||
|
esac; \ @@\
|
||
|
case "$$itmp" in \ @@\
|
||
|
*/?*/?*/?*/?*) newtop=../../../../..;; \ @@\
|
||
|
*/?*/?*/?*) newtop=../../../..;; \ @@\
|
||
|
*/?*/?*) newtop=../../..;; \ @@\
|
||
|
*/?*) newtop=../..;; \ @@\
|
||
|
*) newtop=..;; \ @@\
|
||
|
esac; \ @@\
|
||
|
newtop="$$newtop$$toptmp"; \ @@\
|
||
|
case "$(TOP)" in \ @@\
|
||
|
/?*) imaketop=$(TOP) \ @@\
|
||
|
imakeprefix= ;; \ @@\
|
||
|
.) imaketop=$$newtop \ @@\
|
||
|
imakeprefix=$$newtop/ ;; \ @@\
|
||
|
*) imaketop=$$newtop/$(TOP) \ @@\
|
||
|
imakeprefix=$$newtop/ ;; \ @@\
|
||
|
esac; \ @@\
|
||
|
RemoveFile($$i/Makefile.bak); \ @@\
|
||
|
if [ -f $$i/Makefile ]; then \ @@\
|
||
|
echo " $(MV) Makefile Makefile.bak"; \ @@\
|
||
|
if [ "$$executeit" != "no" ]; then \ @@\
|
||
|
$(MV) $$i/Makefile $$i/Makefile.bak; \ @@\
|
||
|
fi; \ @@\
|
||
|
fi; \ @@\
|
||
|
$(MAKE) $(MFLAGS) $(MAKE_OPTS) ONESUBDIR=$$i ONECURDIR=$$curdir IMAKETOP=$$imaketop IMAKEPREFIX=$$imakeprefix $$i/Makefile; \ @@\
|
||
|
if [ -d $$i ] ; then \ @@\
|
||
|
cd $$i; \ @@\
|
||
|
$(MAKE) $(MFLAGS) Makefiles; \ @@\
|
||
|
cd $$newtop; \ @@\
|
||
|
else \ @@\
|
||
|
exit 1; \ @@\
|
||
|
fi; \ @@\
|
||
|
done
|
||
|
|
||
|
#ifdef UseInstalled
|
||
|
#define ImakeSubCmdHelper $(IMAKE_CMD)
|
||
|
#else
|
||
|
#define ImakeSubCmdHelper $(IMAKEPREFIX)$(IMAKE) -I$(IMAKEPREFIX)$(IRULESRC) \
|
||
|
$(IMAKE_DEFINES) $(IMAKE_WARNINGS)
|
||
|
#endif
|
||
|
|
||
|
#endif /* MakeMakeSubdirs */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* MakefileSubdirs - generate rules to create Makefiles.
|
||
|
*/
|
||
|
#ifndef MakefileSubdirs
|
||
|
#define MakefileSubdirs(dirs) @@\
|
||
|
MakeMakeSubdirs(dirs,Makefiles)
|
||
|
#endif /* MakefileSubdirs */
|
||
|
|
||
|
/*
|
||
|
* Translate XCOMM into pound sign with sed, rather than passing -DXCOMM=XCOMM
|
||
|
* to cpp, because that trick does not work on all ANSI C preprocessors.
|
||
|
* Delete line numbers from the cpp output (-P is not portable, I guess).
|
||
|
* Allow XCOMM to be preceded by whitespace and provide a means of generating
|
||
|
* output lines with trailing backslashes.
|
||
|
* Allow XHASH to always be substituted, even in cases where XCOMM isn't.
|
||
|
*/
|
||
|
#ifndef CppSedMagic
|
||
|
#define CppSedMagic sed -e '/^# *[0-9][0-9]* *.*$$/d' \
|
||
|
-e '/^#line *[0-9][0-9]* *.*$$/d' \
|
||
|
-e '/^[ ]*XCOMM$$/s/XCOMM/#/' \
|
||
|
-e '/^[ ]*XCOMM[^a-zA-Z0-9_]/s/XCOMM/#/' \
|
||
|
-e '/^[ ]*XHASH/s/XHASH/#/' \
|
||
|
-e '/\@\@$$/s/\@\@$$/\\/'
|
||
|
#endif /* CppSedMagic */
|
||
|
|
||
|
#ifndef CppFileTarget
|
||
|
#define CppFileTarget(dst,src,defs,deplist) @@\
|
||
|
dst:: src deplist @@\
|
||
|
RemoveFile($@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(CPP) CppNoLineInfoOption defs <src | CppSedMagic >$@ @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles(dst)
|
||
|
#endif /* CppFileTarget */
|
||
|
|
||
|
/*
|
||
|
* CppScriptTarget - generate rules to create a shell script by running the
|
||
|
* input through cpp. If the ExecableScripts configuration parameter is not
|
||
|
* set, then make sure that the first line begins with a colon.
|
||
|
*/
|
||
|
#ifndef CppScriptTarget
|
||
|
#if ExecableScripts /* can use #! instead of colon */
|
||
|
#define CppScriptTarget(dst,src,defs,deplist) @@\
|
||
|
dst:: src deplist @@\
|
||
|
RemoveFile($@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(CPP) CppNoLineInfoOption defs <src | CppSedMagic >$@ @@\
|
||
|
chmod a+x $@ @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles(dst)
|
||
|
#else
|
||
|
#define CppScriptTarget(dst,src,defs,deplist) @@\
|
||
|
dst:: src deplist @@\
|
||
|
RemoveFile($@) @@\
|
||
|
ClearmakeOSName \
|
||
|
echo \: >$@ @@\
|
||
|
sed '1d' src | $(CPP) CppNoLineInfoOption defs | CppSedMagic >>$@ @@\
|
||
|
chmod a+x $@ @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(dst)
|
||
|
#endif /* ExecableScripts */
|
||
|
#endif /* CppScriptTarget */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* MakeScriptFromCpp - generate rules to create a script from a file with a
|
||
|
* .cpp suffix.
|
||
|
*/
|
||
|
#ifndef MakeScriptFromCpp
|
||
|
#define MakeScriptFromCpp(name,defs) @@\
|
||
|
CppScriptTarget(name,name.cpp,defs,NullParameter)
|
||
|
#endif /* MakeScriptFromCpp */
|
||
|
|
||
|
#ifndef CppSourceFile
|
||
|
#define CppSourceFile(dst,src,defs,deplist) @@\
|
||
|
CppFileTarget(dst,src,defs,deplist) @@\
|
||
|
@@\
|
||
|
includes:: dst @@\
|
||
|
@@\
|
||
|
depend:: dst
|
||
|
#endif /* CppSourceFile */
|
||
|
|
||
|
/* Like CppFileTarget, but don't add any default defines */
|
||
|
#ifndef CppRawFileTarget
|
||
|
#define CppRawFileTarget(dst,src,defs,deplist) @@\
|
||
|
dst:: src deplist @@\
|
||
|
RemoveFile($@) @@\
|
||
|
ClearmakeOSName \
|
||
|
$(RAWCPP) CppNoLineInfoOption defs <src | CppSedMagic >$@ @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFiles(dst)
|
||
|
#endif /* CppFileTarget */
|
||
|
|
||
|
/*
|
||
|
* CppManTarget - preprocess man pages. OS-specific man sections are replaced.
|
||
|
*/
|
||
|
#ifndef CppManTarget
|
||
|
#define CppManTarget(name,defs) @@\
|
||
|
AllTarget(name.$(MANNEWSUFFIX)) @@\
|
||
|
@@\
|
||
|
name.$(MANNEWSUFFIX): name.$(MANSRCSUFFIX) @@\
|
||
|
RemoveFile($@) @@\
|
||
|
if test -z "$(PREPROCESSMANPAGES)" ; then \ @@\
|
||
|
cd `dirname name` && \ @@\
|
||
|
$(LN) `basename name.$(MANSRCSUFFIX)` `basename $@`; \ @@\
|
||
|
else \ @@\
|
||
|
ClearmakeOSName \
|
||
|
$(RAWCPP) CppNoLineInfoOption $(MANDEFS) defs \ @@\
|
||
|
< name.$(MANSRCSUFFIX) | CppSedMagic >$@; \ @@\
|
||
|
fi @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(name.$(MANNEWSUFFIX))
|
||
|
#endif /* CppManTarget */
|
||
|
|
||
|
/*
|
||
|
* MakeDirectories - generate rules to create a hierarchy of directories.
|
||
|
*/
|
||
|
#ifndef MakeDirectories
|
||
|
#define MakeDirectories(step,dirs) @@\
|
||
|
step:: @@\
|
||
|
DirFailPrefix@MakeFlagsToShellFlags(i,set +e); \ @@\
|
||
|
for i in dirs; do if [ -d $(DESTDIR)$$i ]; then \ @@\
|
||
|
set +x; else (set -x; $(MKDIRHIER) $(DESTDIR)$$i); fi; \ @@\
|
||
|
done
|
||
|
#endif /* MakeDirectories */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* AllTarget - generate rules to build necessary things during make all.
|
||
|
*/
|
||
|
#ifndef AllTarget
|
||
|
#define AllTarget(depends) @@\
|
||
|
all:: depends
|
||
|
#endif /* AllTarget */
|
||
|
|
||
|
#ifdef DefineOldLibraryRules
|
||
|
#include <oldlib.rules>
|
||
|
#endif
|
||
|
|
||
|
#ifndef StaticLibrary
|
||
|
#define StaticLibrary(libpath,libname) Concat3(libpath,/,LibraryTargetName(libname))
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* MakeMutex - generate mutex rules for parallel make
|
||
|
*/
|
||
|
#ifndef MakeMutex
|
||
|
#ifdef MutexDirective
|
||
|
#define MakeMutex(targets) @@\
|
||
|
MutexDirective: targets
|
||
|
#endif /* MutexDirective */
|
||
|
#endif /* MakeMutex */
|
||
|
|
||
|
/*
|
||
|
* Rules for dynamic modules. These are primarily used by XFree86
|
||
|
*/
|
||
|
|
||
|
#ifndef LinkBuildModule
|
||
|
#ifdef UseInstalled
|
||
|
#define LinkBuildModule(module,subdir) $(_NULLCMD_)
|
||
|
#else
|
||
|
#define LinkBuildModule(module,subdir)\
|
||
|
MakeDir($(BUILDMODULEDIR)/subdir) @@\
|
||
|
RemoveFile($(BUILDMODULEDIR)/subdir/module) @@\
|
||
|
@(UP="`$(REVPATH) subdir`"; set -x; \ @@\
|
||
|
cd $(BUILDMODULEDIR)/subdir && \ @@\
|
||
|
$(LN) $(BUILDMODULETOP)/$${UP}$(CURRENT_DIR)/module .)
|
||
|
#endif
|
||
|
#endif /* LinkBuildModule */
|
||
|
|
||
|
#ifndef LinkBuildNamedModule
|
||
|
#ifdef UseInstalled
|
||
|
#define LinkBuildNamedModule(module,name,subdir) $(_NULLCMD_)
|
||
|
#else
|
||
|
#define LinkBuildNamedModule(module,name,subdir)\
|
||
|
MakeDir($(BUILDMODULEDIR)/subdir) @@\
|
||
|
RemoveFile($(BUILDMODULEDIR)/subdir/name) @@\
|
||
|
@(UP="`$(REVPATH) subdir`"; set -x; \ @@\
|
||
|
cd $(BUILDMODULEDIR)/subdir && \ @@\
|
||
|
$(LN) $(BUILDMODULETOP)/$${UP}$(CURRENT_DIR)/module name)
|
||
|
#endif
|
||
|
#endif /* LinkBuildNamedModule */
|
||
|
|
||
|
/*
|
||
|
* ModuleObjectRule
|
||
|
*/
|
||
|
#ifndef ModuleObjectRule
|
||
|
#define ModuleObjectRule() NormalLibraryObjectRule()
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* ObjectModuleTarget - build a module as a single object file
|
||
|
*/
|
||
|
#ifndef ObjectModuleTarget
|
||
|
#if MakeDllModules && DoLoadableServer
|
||
|
#define ObjectModuleTarget(module,objects) @@\
|
||
|
DynamicModuleTarget(Concat(module,_drv.so), objects)
|
||
|
#else
|
||
|
#define ObjectModuleTarget(module,objects) @@\
|
||
|
NormalRelocatableTarget(Concat(module,_drv), objects)
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* LibraryModuleTarget
|
||
|
*/
|
||
|
#ifndef LibraryModuleTarget
|
||
|
#if MakeDllModules && DoLoadableServer
|
||
|
#define LibraryModuleTarget(module,objects) @@\
|
||
|
NormalLibraryTarget(module, objects) @@\
|
||
|
DynamicModuleTarget(Concat3(lib,module,.so), objects)
|
||
|
#else
|
||
|
#define LibraryModuleTarget(module, objects) @@\
|
||
|
NormalLibraryTarget(module, objects)
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* DepLibraryModuleTarget
|
||
|
*/
|
||
|
#ifndef DepLibraryModuleTarget
|
||
|
#if MakeDllModules && DoLoadableServer
|
||
|
#define DepLibraryModuleTarget(module,deplist,objects) @@\
|
||
|
NormalDepLibraryTarget(module, deplist, objects) @@\
|
||
|
DepDynamicModuleTarget(Concat3(lib,module,.so), deplist, objects)
|
||
|
#else
|
||
|
#define DepLibraryModuleTarget(module,deplist,objects) @@\
|
||
|
NormalDepLibraryTarget(module, deplist, objects)
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* DynamicModuleTarget - build a module to be dynamically loaded
|
||
|
*/
|
||
|
#ifndef DynamicModuleTarget
|
||
|
#define DynamicModuleTarget(module,modlist) @@\
|
||
|
AllTarget(module) @@\
|
||
|
@@\
|
||
|
module: modlist @@\
|
||
|
RemoveFile($@) @@\
|
||
|
$(CC) -o $@ $(SHLIBLDFLAGS) $(NOSTDLIB) modlist $(POSTNOSTDLIB) @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(module)
|
||
|
#endif /* DynamicModuleTarget */
|
||
|
|
||
|
/*
|
||
|
* DepDynamicModuleTarget - build a module to be dynamically loaded
|
||
|
*/
|
||
|
#ifndef DepDynamicModuleTarget
|
||
|
#define DepDynamicModuleTarget(module,deplist,modlist) @@\
|
||
|
AllTarget(module) @@\
|
||
|
@@\
|
||
|
module: deplist @@\
|
||
|
RemoveFile($@) @@\
|
||
|
$(CC) -o $@ $(SHLIBLDFLAGS) $(NOSTDLIB) modlist $(POSTNOSTDLIB) @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(module)
|
||
|
#endif /* DepDynamicModuleTarget */
|
||
|
|
||
|
/*
|
||
|
* InstallDynamicModule - install a dynamic module
|
||
|
*/
|
||
|
#ifndef InstallDynamicModule
|
||
|
#define InstallDynamicModule(module,dest,subdir) @@\
|
||
|
AllTarget(module) @@\
|
||
|
LinkBuildModule(module,subdir) @@\
|
||
|
@@\
|
||
|
install:: module @@\
|
||
|
MakeDir($(DESTDIR)dest/subdir) @@\
|
||
|
$(INSTALL) -c $(INSTDATFLAGS) module $(DESTDIR)dest/subdir
|
||
|
#endif
|
||
|
|
||
|
#ifndef InstallDynamicNamedModule
|
||
|
#define InstallDynamicNamedModule(module,instname,dest,subdir) @@\
|
||
|
AllTarget(module) @@\
|
||
|
LinkBuildNamedModule(module,instname,subdir) @@\
|
||
|
@@\
|
||
|
install:: module @@\
|
||
|
MakeDir($(DESTDIR)dest/subdir) @@\
|
||
|
$(INSTALL) -c $(INSTDATFLAGS) module $(DESTDIR)dest/subdir/instname
|
||
|
#endif
|
||
|
|
||
|
/* Shortcuts for installing driver module, one per class */
|
||
|
#ifndef InstallVideoObjectModule
|
||
|
#define InstallVideoObjectModule(module,dest) @@\
|
||
|
InstallObjectModule(module,dest,drivers)
|
||
|
#endif
|
||
|
#ifndef InstallInputObjectModule
|
||
|
#define InstallInputObjectModule(module,dest) @@\
|
||
|
InstallObjectModule(module,dest,input)
|
||
|
#endif
|
||
|
#ifndef InstallExtensionsObjectModule
|
||
|
#define InstallExtensionsObjectModule(module,dest) @@\
|
||
|
InstallObjectModule(module,dest,extensions)
|
||
|
#endif
|
||
|
#ifndef InstallFontsObjectModule
|
||
|
#define InstallFontsObjectModule(module,dest) @@\
|
||
|
InstallObjectModule(module,dest,fonts)
|
||
|
#endif
|
||
|
#ifndef InstallMultimediaObjectModule
|
||
|
#define InstallMultimediaObjectModule(module,dest) @@\
|
||
|
InstallObjectModule(module,dest,multimedia)
|
||
|
#endif
|
||
|
|
||
|
#ifndef InstallObjectModule
|
||
|
#if !DoLoadableServer
|
||
|
#define InstallObjectModule(module,dest,subdir) /**/
|
||
|
#else
|
||
|
#if MakeDllModules
|
||
|
#define InstallObjectModule(module,dest,subdir) @@\
|
||
|
InstallDynamicModule(Concat(module,_drv.so),dest,subdir)
|
||
|
#else
|
||
|
#define InstallObjectModule(module,dest,subdir) @@\
|
||
|
InstallDynamicModule(Concat(module,_drv.o),dest,subdir)
|
||
|
#endif
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef InstallLibraryModule
|
||
|
#if !DoLoadableServer
|
||
|
#define InstallLibraryModule(module,dest,subdir) /**/
|
||
|
#else
|
||
|
#if MakeDllModules
|
||
|
#define InstallLibraryModule(module,dest,subdir) @@\
|
||
|
InstallDynamicModule(Concat3(lib,module,.so),dest,subdir)
|
||
|
#else
|
||
|
#define InstallLibraryModule(module,dest,subdir) @@\
|
||
|
InstallDynamicModule(ModuleLibraryTargetName(module),dest,subdir)
|
||
|
#endif
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
#ifndef InstallModuleManPage
|
||
|
#define InstallModuleManPage(module) @@\
|
||
|
InstallGenManPage(module,$(DRIVERMANDIR),$(DRIVERMANSUFFIX))
|
||
|
#endif
|
||
|
|
||
|
#ifndef BuildObjectFromLibraryWithPath
|
||
|
#define BuildObjectFromLibraryWithPath(libpath,libname,objname) @@\
|
||
|
AllTarget(objname.Osuf) @@\
|
||
|
@@\
|
||
|
objname.Osuf: Concat3(libpath,/lib,libname.a) @@\
|
||
|
@$(MKDIRHIER) tmp @@\
|
||
|
@$(CP) Concat3(libpath,/lib,libname.a) tmp @@\
|
||
|
@(cd tmp; set -x; ArExtCmd Concat(lib,libname.a); \ @@\
|
||
|
$(LD) $(LDCOMBINEFLAGS) *.Osuf -o ../$@; \ @@\
|
||
|
RemoveFiles(*.Osuf)) @@\
|
||
|
@$(RM) -r tmp @@\
|
||
|
@@\
|
||
|
clean:: @@\
|
||
|
RemoveFile(objname.Osuf)
|
||
|
#endif
|
||
|
|
||
|
#ifndef BuildObjectFromLibrary
|
||
|
#define BuildObjectFromLibrary(libname,objname) BuildObjectFromLibraryWithPath(.,libname,objname)
|
||
|
#endif
|
||
|
|
||
|
/*
|
||
|
* LinkerRuntimeLibraryPathFlag - defined here to be a no-op for systems that
|
||
|
* don't need it. Overridden in system-specific config files for systems that
|
||
|
* need it, usually with something like "Concat(-R,path)"
|
||
|
*/
|
||
|
#ifndef LinkerRuntimeLibraryPathFlag
|
||
|
# define LinkerRuntimeLibraryPathFlag(path) /* */
|
||
|
#endif
|
||
|
|
||
|
/* Phony targets - GNU make has a feature to mark a target as phony,
|
||
|
* which means that it wont consider that target to be the name of a
|
||
|
* file. In general this speeds up make, since it doesn't have to
|
||
|
* look for those files when it sets out to create a phony target.
|
||
|
* However, on cygwin, this is actually required for correct
|
||
|
* operation, since the Win32 filesystems are case insensitive and the
|
||
|
* install target conflicts with the INSTALL file present in some
|
||
|
* (autotooled) directories.
|
||
|
*
|
||
|
* We probably don't need the #ifdef protection, since other make
|
||
|
* implementations would just consider this a normal rule. Better
|
||
|
* safe than sorry, though.
|
||
|
*/
|
||
|
#if HasGnuMake
|
||
|
.PHONY: all interfaces install install.man install.lib install.sdk \
|
||
|
depend includes clean
|
||
|
#endif
|