/* * 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 $TOG: Library.tmpl /main/44 1997/04/28 11:47:53 kaleb $ XCOMM $XFree86: xc/config/cf/Library.tmpl,v 3.5.2.1 1997/06/11 12:08:29 dawes Exp $ #ifndef LibraryCplusplusOptions # if DoSharedLib && defined(SharedLibraryCplusplusOptions) # define LibraryCplusplusOptions SharedLibraryCplusplusOptions # else # define LibraryCplusplusOptions DefaultCplusplusOptions # endif #endif #ifndef LibraryDefines # define LibraryDefines StandardDefines #endif #ifndef LibraryCDebugFlags # define LibraryCDebugFlags DefaultCDebugFlags #endif #ifndef LibraryCplusplusDebugFlags # define LibraryCplusplusDebugFlags DefaultCplusplusDebugFlags #endif #ifndef SeparateSharedCompile # define SeparateSharedCompile YES #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 CC = LibraryCcCmd CCOPTIONS = LibraryCCOptions STD_DEFINES = LibraryDefines $(PROJECT_DEFINES) CDEBUGFLAGS = LibraryCDebugFlags # if defined(LargePICTable) && LargePICTable && defined(LargePositionIndependentCFlags) PICFLAGS = LargePositionIndependentCFlags # endif #else # ifndef LibraryCplusplusCmd # if DoSharedLib && defined(SharedLibraryCplusplusCmd) # define LibraryCplusplusCmd SharedLibraryCplusplusCmd # else # define LibraryCplusplusCmd CplusplusCmd # endif # endif # ifndef LibraryCplusplusOptions # if DoSharedLib && defined(SharedLibraryCplusplusOptions) # define LibraryCplusplusOptions SharedLibraryCplusplusOptions # else # define LibraryCplusplusOptions DefaultCplusplusOptions # endif # endif CXX = LibraryCplusplusCmd CXXOPTIONS = LibraryCplusplusOptions STD_DEFINES = LibraryDefines $(PROJECT_DEFINES) CXXDEBUGFLAGS = LibraryCplusplusDebugFlags # if defined(LargePICTable) && LargePICTable # ifdef LargePositionIndependentCplusplusFlags CXXPICFLAGS = LargePositionIndependentCplusplusFlags # elif defined(LargePositionIndependentCFlags) CXXPICFLAGS = LargePositionIndependentCFlags # endif # endif #endif LIB_MT_DEFINES = LibraryMTDefines #if defined(IHaveSubdirs) && HasSymLinks #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_) # define _NormalObjCompile(options) NormalLibObjCompile(options) # 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 CplusplusSource # define SRCsuf c #else # define SRCsuf CCsuf # ifdef SunArchitecture .SUFFIXES: .CCsuf # endif #endif #define _CompileObj(target, options) @@\ target @@\ _DebuggedObjCompile(options) @@\ _ProfiledObjCompile(options) @@\ _NormalObjCompile(options) @@\ _SharedObjCompile(options) #ifdef CplusplusSource # define _CompileObjCplusplus(target, options) @@\ target @@\ _DebuggedObjCplusplusCompile(options) @@\ _ProfiledObjCplusplusCompile(options) @@\ _NormalObjCplusplusCompile(options) @@\ _SharedObjCplusplusCompile(options) #else # define _CompileObjCplusplus(target, options) #endif #ifndef LibraryObjectRule # define LibraryObjectRule() @@\ all:: @@\ _DebuggedLibMkdir() @@\ _ProfiledLibMkdir() @@\ _NormalLibMkdir() @@\ @@\ includes:: @@\ _DebuggedLibMkdir() @@\ _ProfiledLibMkdir() @@\ _NormalLibMkdir() @@\ @@\ _CompileObj(.c.Osuf:,$(_NOOP_)) @@\ _CompileObjCplusplus(.SRCsuf.Osuf:,$(_NOOP_)) @@\ @@\ clean:: @@\ _DebuggedCleanDir() @@\ _ProfiledCleanDir() @@\ _NormalCleanDir() @@\ #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.i: basename.SRCsuf depends @@\ CPPOnlyCompile(basename.SRCsuf,options) @@\ @@\ CenterLoadTarget(debug_src,basename.SRCsuf,NullParameter,$(ALLDEFINES) options) #endif /* SpecialCLibObjectRule */ #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 # define MakeStringsDependency @@\ MAKESTRS = $(CONFIGSRC)/util/makestrs @@\ NoCmpScript(ProgramTargetName($(MAKESTRS)) $(MAKESTRS).Osuf) @@\ @@\ ProgramTargetName($(MAKESTRS)) $(MAKESTRS).Osuf: @@\ cd $(CONFIGSRC)/util && $(MAKE) ProgramTargetName(makestrs) @@\ @@\ includes:: ProgramTargetName($(MAKESTRS)) #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 # define _LinkBuildLibrary(lib) LinkBuildLibrary(lib) # else # define _LinkBuildLibrary(lib) $(_NULLCMD_) # endif # if !defined(LibCreate) || LibCreate # if DoSharedLib # if HugeLibrary && defined(SharedLibraryTarget3) SharedLibraryTarget3($(LIBNAME),$(SoRev),$(OBJS1),$(OBJS2),$(OBJS3),.,.) # else SharedLibraryTarget($(LIBNAME),$(SoRev),$(OBJS),.,.) # endif # if !defined(LibInstall) || LibInstall InstallSharedLibrary($(LIBNAME),$(SoRev),$(SHLIBDIR)) # 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),unshared,..) # else NormalLibraryTarget3($(LIBNAME),$(OBJS1),$(OBJS2),$(OBJS3)) # endif # else # if DoSharedLib && SeparateSharedCompile UnsharedLibraryTarget($(LIBNAME),$(OBJS),unshared,..) # else NormalLibraryTarget($(LIBNAME),$(OBJS)) # endif # endif # if !defined(LibInstall) || LibInstall InstallLibrary($(LIBNAME),$(USRLIBDIR)) # endif # endif # if DoProfileLib ProfiledLibraryTarget($(LIBNAME),$(OBJS)) # if !defined(LibInstall) || LibInstall InstallLibrary($(LIBNAME)_p,$(USRLIBDIR)) # endif # endif # if DoDebugLib DebuggedLibraryTarget($(LIBNAME),$(OBJS)) # if !defined(LibInstall) || LibInstall InstallLibrary($(LIBNAME)_d,$(USRLIBDIR)) # endif # endif LintLibraryTarget($(LIBNAME),$(SRCS)) # if !defined(LibInstall) || LibInstall InstallLintLibrary($(LIBNAME),$(LINTLIBDIR)) # endif # else /* not LibCreate */ # if HugeLibrary AllTarget($(OBJS1)) AllTarget($(OBJS2)) AllTarget($(OBJS3)) # else AllTarget($(OBJS)) # endif # endif /* LibCreate */ # ifdef IncSubdir # ifdef IncSubSubdir BuildIncludes($(HEADERS),IncSubdir/IncSubSubdir,../..) InstallMultipleFlags($(HEADERS),$(INCDIR)/IncSubdir/IncSubSubdir,$(INSTINCFLAGS)) # else BuildIncludes($(HEADERS),IncSubdir,..) InstallMultipleFlags($(HEADERS),$(INCDIR)/IncSubdir,$(INSTINCFLAGS)) # endif # else # ifndef CplusplusSource # if !defined(LibHeaders) || LibHeaders BuildIncludesTop($(HEADERS)) InstallMultipleFlags($(HEADERS),$(INCDIR),$(INSTINCFLAGS)) # endif # endif # endif NormalLintTarget($(SRCS)) #endif /* defined(LibName) */