xenocara/util/cf/Library.tmpl
2006-11-25 16:15:45 +00:00

583 lines
18 KiB
Cheetah

/*
* Library imakefile info - this contains any special redefinitions, etc.
* that Imakefiles in the various library subtrees will need.
*
* Before including this, you must set the following boolean variables:
* DoNormalLib, DoSharedLib, DoDebugLib, DoProfileLib
*
* To get automatic generation of standard rules, also set the variables:
* LibName, SoRev, HasSharedData, and optionally HugeLibrary and IncSubdir.
*
* To suppress installation of the library define LibInstall NO.
* To suppress creating (and installing) the library define LibCreate NO.
* To suppress installing headers define LibHeaders NO.
* Define LargePICTable YES if large (32-bit) PIC tables are needed.
*/
XCOMM $Xorg: Library.tmpl,v 1.3 2000/08/17 19:41:46 cpqbld Exp $
XCOMM $XFree86: xc/config/cf/Library.tmpl,v 3.23tsi Exp $
#ifndef DoNormalLib
#define DoNormalLib NO
#endif
#ifndef DoSharedLib
#define DoSharedLib NO
#endif
#ifndef DoDebugLib
#define DoDebugLib NO
#endif
#ifndef DoProfileLib
#define DoProfileLib NO
#endif
#ifndef DoExtraLib
#define DoExtraLib NO
#endif
#ifndef HasSharedData
#define HasSharedData NO
#endif
#ifndef HugeLibrary
#define HugeLibrary NO
#endif
#ifndef ShlibBindGlobals
#define ShlibBindGlobals NO
#endif
#if ShlibBindGlobals && defined(ShlibGlobalsFlags)
SHLIBGLOBALSFLAGS = ShlibGlobalsFlags
#endif
#ifndef LibraryCplusplusOptions
# if DoSharedLib && defined(SharedLibraryCplusplusOptions)
# define LibraryCplusplusOptions SharedLibraryCplusplusOptions
# else
# define LibraryCplusplusOptions DefaultCplusplusOptions
# endif
#endif
#ifndef LibraryDefines
# define LibraryDefines StandardDefines
#endif
#ifndef LibraryDebugOpt
# define LibraryDebugOpt /**/
#endif
/* Note: Changing LibraryCDebugFlags has no effect because CDEBUGFLAGS is over-
ridden by PassCDebugFlags in the parent Makefile or toplevel xmakefile. */
#ifndef LibraryCDebugFlags
# define LibraryCDebugFlags DefaultCDebugFlags
#endif
#ifndef LibraryCplusplusDebugFlags
# define LibraryCplusplusDebugFlags DefaultCplusplusDebugFlags
#endif
#ifndef SeparateSharedCompile
# define SeparateSharedCompile YES
#endif
#ifdef CrossCompileDir
# ifndef StripPath
# define StripPath(x) `echo x|sed "s%.*/%%"`
# endif
#endif
#ifndef CplusplusSource
# ifndef LibraryCcCmd
# if DoSharedLib && defined(SharedLibraryCcCmd)
# define LibraryCcCmd SharedLibraryCcCmd
# else
# define LibraryCcCmd CcCmd
# endif
# endif
# ifndef LibraryCCOptions
# if DoSharedLib && defined(SharedLibraryCCOptions)
# define LibraryCCOptions SharedLibraryCCOptions
# else
# define LibraryCCOptions DefaultCCOptions
# endif
# endif
#ifdef CrossCompileDir
# ifndef CrossLibraryCcCmd
# define CrossLibraryCcCmd Concat3(CrossCompileDir,/,StripPath(LibraryCcCmd))
# endif
#endif
#ifdef CrossCompileDir
CC = CrossLibraryCcCmd
#else
CC = LibraryCcCmd
#endif
CCOPTIONS = LibraryCCOptions
STD_DEFINES = LibraryDefines $(PROJECT_DEFINES)
CDEBUGFLAGS = LibraryCDebugFlags
CLIBDEBUGFLAGS = LibraryDebugOpt
CFLAGS = $(CDEBUGFLAGS) $(CLIBDEBUGFLAGS) $(CCOPTIONS) $(THREADS_CFLAGS) $(ALLDEFINES)
# if defined(LargePICTable) && LargePICTable && defined(LargePositionIndependentCFlags)
PICFLAGS = LargePositionIndependentCFlags
# endif
#else
# ifndef CrossCompileDir
# ifndef LibraryCplusplusCmd
# if DoSharedLib && defined(SharedLibraryCplusplusCmd)
# define LibraryCplusplusCmd SharedLibraryCplusplusCmd
# else
# define LibraryCplusplusCmd CplusplusCmd
# endif
# endif
# else
# ifndef CrossLibraryCplusplusCmd
# if DoSharedLib && defined(SharedLibraryCplusplusCmd)
# define CrossLibraryCplusplusCmd Concat3(CrossCompileDir,/,StripPath(SharedLibraryCplusplusCmd))
# else
# define CrossLibraryCplusplusCmd Concat3(CrossCompileDir,/,StripPath(CplusplusCmd))
# endif
# endif
# endif
# ifndef LibraryCplusplusOptions
# if DoSharedLib && defined(SharedLibraryCplusplusOptions)
# define LibraryCplusplusOptions SharedLibraryCplusplusOptions
# else
# define LibraryCplusplusOptions DefaultCplusplusOptions
# endif
# endif
#ifdef CrossCompileDir
CXX = CrossLibraryCplusplusCmd
#else
CXX = LibraryCplusplusCmd
#endif
CXXOPTIONS = LibraryCplusplusOptions
STD_DEFINES = LibraryDefines $(PROJECT_DEFINES)
CXXDEBUGFLAGS = LibraryCplusplusDebugFlags
CXXLIBDEBUGFLAGS = LibraryDebugOpt
CXXFLAGS = $(CXXDEBUGFLAGS) $(CXXLIBDEBUGFLAGS) $(CXXOPTIONS) $(THREADS_CXXFLAGS) $(CXXDEFINES)
# if defined(LargePICTable) && LargePICTable
# ifdef LargePositionIndependentCplusplusFlags
CXXPICFLAGS = LargePositionIndependentCplusplusFlags
# elif defined(LargePositionIndependentCFlags)
CXXPICFLAGS = LargePositionIndependentCFlags
# endif
# endif
#endif
#ifdef LibraryMTDefines
LIB_MT_DEFINES = LibraryMTDefines
#endif
#if defined(IHaveSubdirs) && HasSymLinks && !defined(NoLibSubdirs)
#define _LibMkdir LibMkdirLinkSubdirs
#else
#define _LibMkdir LibMkdir
#endif
#if DoDebugLib
# define _DebuggedLibMkdir() _LibMkdir(debugger)
# define _DebuggedObjCompile(options) DebuggedLibObjCompile(options)
# define _DebuggedObjCplusplusCompile(options) DebuggedLibObjCplusplusCompile(options)
# define _DebuggedCleanDir() LibCleanDir(debugger)
#else
# define _DebuggedLibMkdir() $(_NULLCMD_)
# define _DebuggedObjCompile(options) $(_NULLCMD_)
# define _DebuggedObjCplusplusCompile(options) $(_NULLCMD_)
# define _DebuggedCleanDir() $(_NULLCMD_)
#endif
#if DoProfileLib
# define _ProfiledLibMkdir() _LibMkdir(profiled)
# define _ProfiledObjCompile(options) ProfiledLibObjCompile(options)
# define _ProfiledObjCplusplusCompile(options) ProfiledLibObjCplusplusCompile(options)
# define _ProfiledCleanDir() LibCleanDir(profiled)
#else
# define _ProfiledLibMkdir() $(_NULLCMD_)
# define _ProfiledObjCompile(options) $(_NULLCMD_)
# define _ProfiledObjCplusplusCompile(options) $(_NULLCMD_)
# define _ProfiledCleanDir() $(_NULLCMD_)
#endif
#if !DoNormalLib
# define _NormalLibMkdir() $(_NULLCMD_)
# define _NormalObjCompile(options) $(_NULLCMD_)
# define _NormalObjCplusplusCompile(options) $(_NULLCMD_)
# define _NormalCleanDir() $(_NULLCMD_)
#else
# if DoSharedLib && SeparateSharedCompile
# define _NormalLibMkdir() _LibMkdir(unshared)
# define _NormalObjCompile(options) UnsharedLibObjCompile(options)
# define _NormalObjCplusplusCompile(options) UnsharedLibObjCplusplusCompile(options)
# define _NormalCleanDir() LibCleanDir(unshared)
# else
# define _NormalLibMkdir() $(_NULLCMD_)
# if !DoSharedLib && defined(IncludeSharedObjectInNormalLib)
# define _NormalObjCompile(options) NormalRelocLibObjCompile(options)
# else
# define _NormalObjCompile(options) NormalLibObjCompile(options)
# endif
# define _NormalObjCplusplusCompile(options) NormalLibObjCplusplusCompile(options)
# define _NormalCleanDir() $(_NULLCMD_)
# endif
#endif
#if !DoSharedLib || (DoNormalLib && !SeparateSharedCompile)
# define _SharedObjCompile(options) $(_NULLCMD_)
# define _SharedObjCplusplusCompile(options) $(_NULLCMD_)
#else
# if SeparateSharedCompile
# define _SharedObjCompile(options) NormalSharedLibObjCompile(options)
# define _SharedObjCplusplusCompile(options) NormalSharedLibObjCplusplusCompile(options)
#else
# define _SharedObjCompile(options) NormalLibObjCompile(options)
# define _SharedObjCplusplusCompile(options) NormalLibObjCplusplusCompile(options)
#endif
#endif
#ifndef LibInstallBuild
#define LibInstallBuild NO
#endif
#if DoExtraLib && defined(ExtraLibRules)
# define _ExtraLibMkdir() ExtraLibMkdir()
# define _ExtraObjCompile(options) ExtraObjCompile(options)
# define _ExtraObjCplusplusCompile(options) ExtraObjCplusplusCompile(options)
# define _ExtraCleanDir() ExtraCleanDir()
#else
# define _ExtraLibMkdir() $(_NULLCMD_)
# define _ExtraObjCompile(options) $(_NULLCMD_)
# define _ExtraObjCplusplusCompile(options) $(_NULLCMD_)
# define _ExtraCleanDir() $(_NULLCMD_)
#endif
#ifndef CplusplusSource
# define SRCsuf c
# define Isuf i
#else
# define SRCsuf CCsuf
# define Isuf ii
# ifdef SunArchitecture
.SUFFIXES: Concat(.,CCsuf)
# endif
#endif
#define _CompileObj(target, options) @@\
target @@\
_DebuggedObjCompile(options) @@\
_ProfiledObjCompile(options) @@\
_NormalObjCompile(options) @@\
_ExtraObjCompile(options) @@\
_SharedObjCompile(options)
#ifndef SeparateSharedCompile
# define _CompileObjSeparateOpts(target,staticopts,sharedopts) \
_CompileObj(target,sharedopts)
#else
# define _CompileObjSeparateOpts(target,staticopts,sharedopts) @@\
target @@\
_DebuggedObjCompile(staticopts) @@\
_ProfiledObjCompile(staticopts) @@\
_NormalObjCompile(staticopts) @@\
_ExtraObjCompile(staticopts) @@\
_SharedObjCompile(sharedopts)
#endif
#ifdef CplusplusSource
# define _CompileObjCplusplus(target, options) @@\
target @@\
_DebuggedObjCplusplusCompile(options) @@\
_ProfiledObjCplusplusCompile(options) @@\
_NormalObjCplusplusCompile(options) @@\
_ExtraObjCplusplusCompile(options) @@\
_SharedObjCplusplusCompile(options)
#else
# define _CompileObjCplusplus(target, options)
#endif
#ifndef LibraryObjectRule
# define LibraryObjectRule() @@\
all:: @@\
_DebuggedLibMkdir() @@\
_ProfiledLibMkdir() @@\
_NormalLibMkdir() @@\
_ExtraLibMkdir() @@\
@@\
includes:: @@\
_DebuggedLibMkdir() @@\
_ProfiledLibMkdir() @@\
_NormalLibMkdir() @@\
_ExtraLibMkdir() @@\
@@\
_CompileObj(.c.Osuf:,$(_NOOP_)) @@\
_CompileObjCplusplus(.SRCsuf.Osuf:,$(_NOOP_)) @@\
@@\
clean:: @@\
_DebuggedCleanDir() @@\
_ProfiledCleanDir() @@\
_NormalCleanDir() @@\
_ExtraCleanDir() @@\
#endif /* LibraryObjectRule */
#ifndef SpecialLibObjectRule
# define SpecialLibObjectRule(objs,depends,options) @@\
_CompileObj(objs: depends,options)
#endif /* SpecialLibObjectRule */
#ifndef SpecialCLibObjectRule
# define SpecialCLibObjectRule(basename,depends,options) @@\
_CompileObj(basename.Osuf: basename.SRCsuf depends,options) @@\
@@\
basename.Isuf: basename.SRCsuf depends @@\
CPPOnlyCompile(basename.SRCsuf,options) @@\
@@\
CenterLoadTarget(debug_src,basename.SRCsuf,NullParameter,$(ALLDEFINES) options)
#endif /* SpecialCLibObjectRule */
#ifndef SpecialCLibObjectRuleSeparateOpts
# define SpecialCLibObjectRuleSeparateOpts(basename,depends,staticopts,shopts) @@\
_CompileObjSeparateOpts(basename.Osuf: basename.SRCsuf depends,staticopts,shopts) @@\
@@\
basename.Isuf: basename.SRCsuf depends @@\
CPPOnlyCompile(basename.SRCsuf,sharedopts) @@\
@@\
CenterLoadTarget(debug_src,basename.SRCsuf,NullParameter,$(ALLDEFINES) options)
#endif /* SpecialCLibObjectRuleSepareateOpts */
#ifndef SpecialCplusplusLibObjectRule
# define SpecialCplusplusLibObjectRule(basename,depends,options) @@\
_CompileObjCplusplus(basename.Osuf: basename.SRCsuf depends,options) @@\
@@\
CenterLoadTarget(debug_src,basename.SRCsuf,NullParameter,$(ALLDEFINES) options)
#endif /* SpecialCplusplusLibObjectRule */
/*
* ToolkitMakeStrings generates a string-table, i.e., a C source
* file and the matching header(s), e.g., Xt's StringDefs.c, StringDefs.h,
* and Shell.h files; or Motif's XmStrDefs.c and XmStrDefs.h files.
*
* The 'files' argument is the list of files that will be produced by
* this rule, e.g., for Xt they would be "Shell.h StringDefs.c StringDefs.h"
* and for Motif they would be "XmStrDefs.c XmStrDefs.h".
*
* The 'source' argument is the string-list file to be parsed, e.g., in
* Xt that would be "util/string.list". For Motif 2.0 it would be
* "../../tools/makestr/xmstring.list", and for Motif-CDE1 it would be
* "util/xmstring.list".
*
* The 'options' argument is passed by the library's Imakefile, see the
* Xt Imakefile for an example. Typically this would be nothing, -intelabi,
* or -sparcabi; there are other choices, but these are typical.
*
* The 'depends' argument names additional files the target files
* depend on. It should name the #ctmpl and #htmpl files from the
* 'source' file.
*
* The 'dest' argument is the C source output file. For Xt this should
* be "StringDefs.c", and for all versions of Motif it would be "XmStrDefs.c"
*
* Headers are generated and named according to data in the 'source'
* file.
*/
/*
* The NoCmpScript
* prevents clearmake from trying to remake makestrs if it exists.
* Including both $(MAKESTRS) and $(MAKESTRS).o as primary targets
* prevents clearmake from trying to recompile makestrs from here.
* We have includes, not files, depend on makestrs to try to get
* clearmake to wink in the files. Bug in clearmake 2.0.2?
*/
#ifndef MakeStringsDependency
# ifndef UseInstalled
# define MakeStringsDependency @@\
MAKESTRS = $(CONFIGSRC)/util/makestrs @@\
NoCmpScript(HostProgramTargetName($(MAKESTRS)) $(MAKESTRS).Osuf) @@\
@@\
HostProgramTargetName($(MAKESTRS)) $(MAKESTRS).Osuf: @@\
cd $(CONFIGSRC)/util && $(MAKE) HostProgramTargetName(makestrs) @@\
@@\
includes:: HostProgramTargetName($(MAKESTRS))
# else
# define MakeStringsDependency /**/
# endif
#endif
#ifndef ToolkitMakeStrings
# if defined(LibTookitMakeStringsDependency) && LibTookitMakeStringsDependency
# define ToolkitMakeStrings(files,source,options,depends,dest) @@\
files: source depends @@\
RemoveFiles(files) @@\
RunProgram(MAKESTRS,options < source > dest) @@\
@@\
AllTarget(files) @@\
@@\
includes:: files @@\
@@\
depend:: files @@\
@@\
clean:: @@\
RemoveFiles(files)
# else
# define ToolkitMakeStrings(files,source,options,depends,dest) @@\
MakeStringsDependency @@\
@@\
files: source depends @@\
RemoveFiles(files) @@\
RunProgram(MAKESTRS,options < source > dest) @@\
@@\
AllTarget(files) @@\
@@\
includes:: files @@\
@@\
depend:: files @@\
@@\
clean:: @@\
RemoveFiles(files)
# endif
#endif /* ToolkitMakeStrings */
#ifdef LibName
LIBNAME = LibName
# if defined(LibTookitMakeStringsDependency) && LibTookitMakeStringsDependency
/*
* Do ToolkitMakeStrings() before BuildIncludes so makestrs is still
* built first, even if the generated header will be installed.
*/
MakeStringsDependency
# endif
LibraryObjectRule()
# undef _LinkBuildLibrary
# if !defined(LibInstall) || LibInstall || LibInstallBuild
# define _LinkBuildLibrary(lib) LinkBuildLibrary(lib)
# else
# define _LinkBuildLibrary(lib) $(_NULLCMD_)
# endif
# if defined(LibBuild) && !LibBuild
# define LibCreate NO
# endif
# if !defined(LibCreate) || LibCreate
# if DoSharedLib
# if HugeLibrary && defined(SharedLibraryTarget3)
SharedLibraryTarget3($(LIBNAME),$(SoRev),$(OBJS1),$(OBJS2),$(OBJS3) $(EXTRASHAREDOBJS),.,.)
# else
# if defined(SharedLibtoolRev) && defined(SharedLibtoolLibraryTarget)
SharedLibtoolLibraryTarget($(LIBNAME),SharedLibtoolRev,$(OBJS) $(EXTRASHAREDOBJS),.,.)
# else
SharedLibraryTarget($(LIBNAME),$(SoRev),$(OBJS) $(EXTRASHAREDOBJS),.,.)
# endif
# endif
# if !defined(LibInstall) || LibInstall
# if defined(SharedLibtoolRev) && defined(InstallSharedLibtoolLibrary)
InstallSharedLibtoolLibrary($(LIBNAME),SharedLibtoolRev,$(SHLIBDIR))
# else
InstallSharedLibrary($(LIBNAME),$(SoRev),$(SHLIBDIR))
# endif
# endif
# if HasSharedData
SharedLibraryDataTarget($(LIBNAME),$(SoRev),$(UNSHAREDOBJS))
# if !defined(LibInstall) || LibInstall
InstallSharedLibraryData($(LIBNAME),$(SoRev),$(SHLIBDIR))
# endif
# endif
# endif
# if DoNormalLib
# if HugeLibrary
# if DoSharedLib && SeparateSharedCompile
UnsharedLibraryTarget3($(LIBNAME),$(OBJS1),$(OBJS2),$(OBJS3) $(EXTRAUNSHAREDOBJS),unshared,..)
# else
NormalLibraryTarget3($(LIBNAME),$(OBJS1),$(OBJS2),$(OBJS3) $(EXTRAUNSHAREDOBJS))
# endif
# else
# if DoSharedLib && SeparateSharedCompile
UnsharedLibraryTarget($(LIBNAME),$(OBJS) $(EXTRAUNSHAREDOBJS),unshared,..)
# else
NormalLibraryTarget($(LIBNAME),$(OBJS) $(EXTRAUNSHAREDOBJS))
# endif
# endif
# if !defined(LibInstall) || LibInstall
InstallLibrary($(LIBNAME),$(USRLIBDIR))
# endif
# endif
# if DoProfileLib
ProfiledLibraryTarget($(LIBNAME),$(OBJS) $(EXTRAUNSHAREDOBJS))
# if !defined(LibInstall) || LibInstall
InstallLibrary($(LIBNAME)_p,$(USRLIBDIR))
# endif
# endif
# if DoDebugLib
DebuggedLibraryTarget($(LIBNAME),$(OBJS) $(EXTRAUNSHAREDOBJS))
# if !defined(LibInstall) || LibInstall
InstallLibrary($(LIBNAME)_d,$(USRLIBDIR))
# endif
# endif
# if DoExtraLib && defined(ExtraLibRules)
ExtraLibraryTarget($(LIBNAME),$(SoRev),$(OBJS) $(EXTRAUNSHAREDOBJS))
# if !defined(LibInstall) || LibInstall
ExtraInstallLibrary($(LIBNAME),$(SoRev))
# endif
# endif
LintLibraryTarget($(LIBNAME),$(SRCS))
# if !defined(LibInstall) || LibInstall
InstallLintLibrary($(LIBNAME),$(LINTLIBDIR))
# endif
# else /* not LibCreate */
# if LibBuild
# if HugeLibrary
AllTarget($(OBJS1))
AllTarget($(OBJS2))
AllTarget($(OBJS3))
# else
AllTarget($(OBJS))
# endif
# if DoSharedLib
AllTarget($(EXTRASHAREDOBJS))
# endif
# if DoNormalLib
AllTarget($(EXTRAUNSHAREDOBJS))
# endif
# endif /* LibBuild */
# endif /* LibCreate */
# ifdef IncSubdir
# ifdef IncSubSubdir
# if !defined(LibHeaders) || LibHeaders
BuildIncludes($(HEADERS),IncSubdir/IncSubSubdir,../..)
# if BuildLibraries
InstallMultipleFlags($(HEADERS),$(INCDIR)/IncSubdir/IncSubSubdir,$(INSTINCFLAGS))
# endif
# endif
# else
# if !defined(LibHeaders) || LibHeaders
BuildIncludes($(HEADERS),IncSubdir,..)
# if BuildLibraries
InstallMultipleFlags($(HEADERS),$(INCDIR)/IncSubdir,$(INSTINCFLAGS))
# endif
# endif
# endif
# else
# ifndef CplusplusSource
# if !defined(LibHeaders) || LibHeaders
BuildIncludesTop($(HEADERS))
# if BuildLibraries
InstallMultipleFlags($(HEADERS),$(INCDIR),$(INSTINCFLAGS))
# endif
# endif
# endif
# endif
NormalLintTarget($(SRCS))
#endif /* defined(LibName) */
#ifdef NoSoSymlink
SOSYMLINK = false
#else
SOSYMLINK = true
#endif