XCOMM $Xorg: ibmLib.rules,v 1.3 2000/08/17 19:41:47 cpqbld Exp $
XCOMM $XdotOrg: util/cf/ibmLib.rules,v 1.2 2004/04/23 18:41:58 eich Exp $

/*
 * AIX shared library rules
 */

XCOMM $XFree86: xc/config/cf/ibmLib.rules,v 3.5 2000/02/13 06:15:18 dawes Exp $
#ifndef HasSharedLibraries
# define HasSharedLibraries YES
#endif
#ifndef ForceNormalLib
# define ForceNormalLib NO
#endif
#ifndef SharedDataSeparation
# define SharedDataSeparation NO
#endif
#ifndef SharedCodeDef
# define SharedCodeDef -DSHAREDCODE
#endif
#if OSMajorVersion < 5
# ifndef SharedLibraryDef
#  define SharedLibraryDef -DAIXSHLIB
# endif
#else
# define SharedLibraryDef /**/
#endif
#ifndef ShLibIncludeFile
# define ShLibIncludeFile <ibmLib.tmpl>
#endif
#ifndef PositionIndependentCFlags
# define PositionIndependentCFlags -bM\:SRE
#endif
#ifndef ExtraLoadFlags
# define ExtraLoadFlags -bnodelcsect
#endif
#if !defined(LdPostLib) && !defined(UseInstalled) && OSMajorVersion > 3
# if ThreadedX
#  define LdPostLib -bnoipath -blibpath:$(USRLIBDIRPATH):/usr/lib/threads:/usr/lib:/lib
# else
#  define LdPostLib -bnoipath -blibpath:$(USRLIBDIRPATH):/usr/lib:/lib
# endif
# define SharedLibPostRef $(LDPOSTLIBS)
#endif
#ifndef SharedLibPostRef
# define SharedLibPostRef $(LDPOSTLIBS)
#endif
#if ThreadedX
# define BaseShLibReqs -lc_r -lm
#else
# define BaseShLibReqs -lc -lm
#endif
#ifndef UseExportLists
# define UseExportLists YES
#endif

/*
 * MakeExportList - generate an export list file for linking libraries.
 */
#ifndef MakeExportList
# if UseExportLists
#  define MakeExportList(libname,result) \
	@-RemoveFile(result)						@@\
	case ,$(SHR4OBJLIBS), in *,libname,*) shr4obj=shr4.o;; esac &&\	@@\
		echo "#! $@ ($${shr4obj:-shr.o})" > result		@@\
	if [ -f Concat(lib,libname.elist) ]; then \			@@\
	    $(CPP) $(ALLINCLUDES) $(EXTRA_DEFINES) $(PROTO_DEFINES) $(THREADS_DEFINES) $(DEFINES) Concat(lib,libname.elist) | CppSedMagic > $@.list; \	@@\
	    $(EXPORTLISTGEN) $@~ $@.list >> result; \			@@\
	    RemoveFile($@.list); \					@@\
	else \								@@\
	    dump -g $@~ | sed -n -e 's/^[ 	]*[0-9][0-9]*[	 ]*\([^	 .][^	 ]*\)$$/\1/p' >> result; \	@@\
	fi;
# else
#  define MakeExportList(libname,result) \
	@-RemoveFile(result)						@@\
	case ,$(SHR4OBJLIBS), in *,libname,*) shr4obj=shr4.o;; esac &&\	@@\
		echo "#! $@ ($${shr4obj:-shr.o})" > result		@@\
	dump -g $@~ | sed -n -e 's/^[ 	]*[0-9][0-9]*[	 ]*\([^	 .][^	 ]*\)$$/\1/p' >> result;
# endif
#endif /* MakeExportList */


#if !defined(UseInstalled) && !defined(UseInstalledX11) \
    && !defined(UseImports) && !defined(ImportX11)
   /* we want this to be defined only when building X */

# if OSMajorVersion < 5
#  if OSMajorVersion < 4
/*
 * SharedLibReferences - variables for shared libraries
 */

#   ifndef SharedLibReferences
#    define SharedLibReferences(varname,libname,libsource,revname,rev)	@@\
Concat3(DEP,varname,LIB) = /**/						@@\
Concat(varname,LIB) = _Use(Concat(-l,libname),Concat(libsource/lib,libname.a)) @@\
LintLibReferences(varname,libname,libsource)
#   endif

#  else /* OSMajorVersion < 4 */

#   ifndef SharedLibReferences
#    define SharedLibReferences(varname,libname,libsource,revname,rev)	@@\
Concat3(DEP,varname,LIB) = /**/						@@\
Concat(varname,LIB) = _Use(Concat(-l,libname),Concat($(BUILDLIBDIR),/libname.imp) Concat3($(BUILDLIBDIR),/lib,libname.a)) @@\
LintLibReferences(varname,libname,libsource)
#   endif

#  endif
# else /* OSMajorVersion < 5 */

#  ifndef SharedLibReferences
#   define SharedLibReferences(varname,libname,libsource,revname,rev)	@@\
Concat3(DEP,varname,LIB) = /**/						@@\
Concat(varname,LIB) = _Use(Concat(-l,libname), Concat3($(BUILDLIBDIR),/lib,libname.so)) @@\
LintLibReferences(varname,libname,libsource)
#  endif

# endif

# if OSMajorVersion < 5
#  if OSMajorVersion < 4
/*
 * SharedFontLibReferences - shared font libraries
 */

#   ifndef SharedFontLibReferences
#    define SharedFontLibReferences()					@@\
DEPFONTLIB = /**/							@@\
FONTLIB = -L$(FREETYPELIBDIR) _Use(-lXfont,$(FONTLIBSRC)/libXfont.a)	@@\
LintLibReferences(XFONT,Xfont,$(FONTLIBSRC))
#   endif
#  else
#   ifndef SharedFontLibReferences
#    define SharedFontLibReferences()					@@\
DEPFONTLIB = /**/							@@\
FONTLIB = -L$(FREETYPELIBDIR) _Use(-lXfont,$(BUILDLIBDIR)/font.imp) $(BUILDLIBDI)/libXfont.a)) @@\
LintLibReferences(XFONT,Xfont,$(FONTLIBSRC))
#   endif
#  endif
# else /* OSMajorVersion < 5 */
#  ifndef SharedFontLibReferences
#   define SharedFontLibReferences()					@@\
DEPFONTLIB = /**/							@@\
FONTLIB = -L$(FREETYPELIBDIR) _Use(-lXfont,$(BUILDLIBDI)/libXfont.so)) @@\
LintLibReferences(XFONT,Xfont,$(FONTLIBSRC))
#  endif

# endif

/*
 * SharedDSLibReferences - variables for shared libraries
 */
# ifndef SharedDSLibReferences
#  define SharedDSLibReferences(varname,libname,libsource,revname,rev)	@@\
SharedLibReferences(varname,libname,libsource,revname,rev)
# endif

# if OSMajorVersion == 4
/*
 * UnsharedLibReferences - variables for unshared libraries
 */
#  ifndef UnsharedLibReferences
#   define UnsharedLibReferences(varname,libname,libsource)		@@\
Concat3(DEP,varname,LIB) = _UseCat($(USRLIBDIR)/lib,$(BUILDLIBDIR)/lib,libname.a)	@@\
Concat(varname,LIB) = _Use(Concat(-l,libname),Concat($(BUILDLIBDIR)/lib,libname.a))	@@\
LintLibReferences(varname,libname,libsource)
#  endif
# endif

#endif /* !defined(UseInstalled) && !defined(UseInstalledX11) ... */


/*
 * InstallSharedLibrary - generate rules to install the shared library.
 */
#ifndef InstallSharedLibrary
# if OSMajorVersion < 5
#  define InstallSharedLibrary(libname,rev,dest)			@@\
InstallLibrary(libname,dest)
# else /* OSMajorVersion < 5 */
#  define InstallSharedLibrary(libname,rev,dest)			@@\
install:: Concat(lib,libname.so)					@@\
	MakeDir($(DESTDIR)dest)						@@\
	$(INSTALL) $(INSTALLFLAGS) $(INSTBINFLAGS) Concat(lib,libname.so) $(DESTDIR)dest
# endif /* OSMajorVersion < 5 */
#endif /* InstallSharedLibrary */

/*
 * InstallSharedLibraryData - generate rules to install the shared library data
 */
#ifndef InstallSharedLibraryData
# define InstallSharedLibraryData(libname,rev,dest)
#endif /* InstallSharedLibraryData */

/*
 * SharedLibraryTarget - generate rules to create a shared library;
 * build it into a different name so that the we do not hose people by having
 * the library gone for long periods.
 *
 * IBM uses an unusual shared object file name (shr4.o) in some libraries. 
 * Duplicate this behavior to preserve compatibility with IBM's libraries.
 */
#if OSMajorVersion < 5
# if OSMajorVersion < 4

#  ifndef SharedLibraryTarget
#   define SharedLibraryTarget(libname,rev,solist,down,up)		@@\
AllTarget(Concat(lib,libname.a))					@@\
									@@\
Concat(lib,libname.a):  solist $(UNSHAREDOBJS) $(EXTRALIBRARYDEPS)	@@\
	$(RM) $@~ shr.o shr4.o						@@\
	(cd down; $(AR) up/$@~ solist)					@@\
	dump -g $@~ | sed -n -e 's/^[ 	]*[0-9][0-9]*[	 ]*\([^	 .][^	 ]*\)$$/\1/p' > $@.syms	@@\
	$(LD) -o shr.o $@~ -H512 -T512 -bM\:SRE -bE\:$@.syms $(REQUIREDLIBS) BaseShLibReqs SharedLibPostRef	@@\
	$(LN) shr.o shr4.o						@@\
	$(RM) $@~							@@\
	case ,$(SHR4OBJLIBS), in *,libname,*) shr4obj=shr4.o;; esac &&\	@@\
		$(AR) $@~ $${shr4obj} shr.o $(UNSHAREDOBJS)		@@\
	$(RM) $@.syms $@ shr.o shr4.o					@@\
	$(MV) $@~ $@							@@\
	LinkBuildLibrary($@)						@@\
									@@\
clean::									@@\
	$(RM) Concat(lib,libname.a)
#  endif /* SharedLibraryTarget */

# else /* OSMajorVersion < 4 */

#  ifndef SharedLibraryTarget
#   define SharedLibraryTarget(libname,rev,solist,down,up)		@@\
AllTarget(Concat(lib,libname.a))					@@\
									@@\
Concat(lib,libname.a):  solist $(UNSHAREDOBJS) $(EXTRALIBRARYDEPS)	@@\
	RemoveFiles($@~ shr.o shr4.o)					@@\
	(cd down; $(AR) up/$@~ solist)					@@\
	MakeExportList(libname,libname.imp)				@@\
	$(LD) -o shr.o $@~ -H512 -T512 -bM\:SRE -bE\:libname.imp -bnoentry $(REQUIREDLIBS) BaseShLibReqs $(LDPOSTLIBS)	@@\
	$(LN) shr.o shr4.o						@@\
	RemoveFile($@~)							@@\
	case ,$(SHR4OBJLIBS), in *,libname,*) shr4obj=shr4.o;; esac &&\	@@\
		$(AR) $@~ $${shr4obj} shr.o $(UNSHAREDOBJS)		@@\
	RemoveFile($@)							@@\
	$(MV) $@~ $@							@@\
	LinkBuildLibrary($@)						@@\
	LinkBuildLibrary(libname.imp)					@@\
									@@\
clean::									@@\
	$(RM) Concat(lib,libname.a)
#  endif /* SharedLibraryTarget */
# endif /* OSMajorVersion < 4 */
#else /* OSMajorVersion < 5 */
# ifndef SharedLibraryTarget
#  define SharedLibraryTarget(libname,rev,solist,down,up)		@@\
AllTarget(Concat(lib,libname.so))					@@\
									@@\
Concat(lib,libname.so): solist $(EXTRALIBRARYDEPS)			@@\
	$(RM) $@~							@@\
	$(AR) $*.a solist						@@\
	dump -g $*.a | sed -n -e 's/^[  ]*[0-9][0-9]*[[:space:]]*\([_[:alpha:]][[:alnum:]]*\)/\1/p' | egrep -v \\\. | sort | uniq > $*.syms	@@\
	$(LD) -bnoipath -bnoentry -bM\:SRE -bE\:$*.syms -o $@~ solist $(REQUIREDLIBS) BaseShLibReqs -lc	@@\
	$(RM) $@ $*.a $*.syms						@@\
	$(MV) $@~ $@							@@\
	LinkBuildLibrary($@)						@@\
									@@\
clean::									@@\
	$(RM) Concat(lib,libname.so.rev) Concat(lib,libname.so)

# endif /* SharedLibraryTarget */
#endif /* OSMajorVersion < 5 */

/*
 * SharedDepLibraryTarget - generate rules to create a shared library.
 */
#if OSMajorVersion < 5
# if OSMajorVersion < 4

#  ifndef SharedDepLibraryTarget
#   define SharedDepLibraryTarget(libname,rev,deplist,solist,down,up)	@@\
AllTarget(Concat(lib,libname.a))					@@\
									@@\
Concat(lib,libname.a):  deplist $(UNSHAREDOBJS) $(EXTRALIBRARYDEPS)	@@\
	$(RM) $@~ shr.o shr4.o						@@\
	(cd down; $(AR) up/$@~ solist)					@@\
	dump -g $@~ | sed -n -e 's/^[   ]*[0-9][0-9]*[   ]*\([^  .][^    ]*\)$$/\1/p' > $@.syms	@@\
	$(LD) -o shr.o $@~ -H512 -T512 -bM\:SRE -bE\:$@.syms $(REQUIREDLIBS) BaseShLibReqs SharedLibPostRef	@@\
	$(LN) shr.o shr4.o						@@\
	$(RM) $@~							@@\
	case ,$(SHR4OBJLIBS), in *,libname,*) shr4obj=shr4.o;; esac &&\	@@\
		$(AR) $@~ $${shr4obj} shr.o $(UNSHAREDOBJS)		@@\
	$(RM) $@.syms $@ shr.o shr4.o					@@\
	$(MV) $@~ $@							@@\
	LinkBuildLibrary($@)						@@\
									@@\
clean::									@@\
	$(RM) Concat(lib,libname.a)
#  endif /* SharedDepLibraryTarget */

# else /* OSMajorVersion < 4 */

#  ifndef SharedDepLibraryTarget
#   define SharedDepLibraryTarget(libname,rev,deplist,solist,down,up)	@@\
AllTarget(Concat(lib,libname.a))					@@\
									@@\
Concat(lib,libname.a):  deplist $(UNSHAREDOBJS) $(EXTRALIBRARYDEPS)	@@\
	RemoveFiles($@~ shr.o shr4.o)					@@\
	(cd down; $(AR) up/$@~ solist)					@@\
	MakeExportList(libname,libname.imp)				@@\
	$(LD) -o shr.o $@~ -H512 -T512 -bM\:SRE -bE\:libname.imp -bnoentry $(REQUIREDLIBS) BaseShLibReqs $(LDPOSTLIBS)	@@\
	$(LN) shr.o shr4.o						@@\
	RemoveFile($@~)							@@\
	case ,$(SHR4OBJLIBS), in *,libname,*) shr4obj=shr4.o;; esac &&\	@@\
		$(AR) $@~ $${shr4obj} shr.o $(UNSHAREDOBJS)		@@\
	RemoveFile($@)							@@\
	$(MV) $@~ $@							@@\
	LinkBuildLibrary($@)						@@\
	LinkBuildLibrary(libname.imp)					@@\
									@@\
clean::									@@\
	$(RM) Concat(lib,libname.a)
#  endif /* SharedDepLibraryTarget */

# endif /* OSMajorVersion < 4 */
#else /* OSMajorVersion < 5 */
# ifndef SharedDepLibraryTarget
#  define SharedDepLibraryTarget(libname,rev,deplist,solist,down,up)	@@\
AllTarget(Concat(lib,libname.so))					@@\
									@@\
Concat(lib,libname.so):  deplist $(EXTRALIBRARYDEPS)			@@\
	$(RM) $@~							@@\
	$(AR) $*.a solist						@@\
	dump -g $*.a | sed -n -e 's/^[  ]*[0-9][0-9]*[[:space:]]*\([_[:alpha:]][[:alnum:]]*\)/\1/p' | egrep -v \\\. | sort | uniq > $*.syms	@@\
	$(LD) -bnoipath -bnoentry -bsymbolic -bM\:SRE -bE\:$*.syms -o $@~ solist $(REQUIREDLIBS) BaseShLibReqs -lc	@@\
	$(RM) $@ $*.a $*.syms						@@\
	$(MV) $@~ $@							@@\
	LinkBuildLibrary($@)						@@\
									@@\
clean::									@@\
	$(RM) Concat(lib,libname.so) Concat(lib,libname.so)

# endif /* SharedDepLibraryTarget */
#endif /* OSMajorVersion < 5 */

/*
 * SharedLibraryDataTarget - generate rules to create shlib data file;
 */
#ifndef SharedLibraryDataTarget
# define SharedLibraryDataTarget(libname,rev,salist)
#endif /* SharedLibraryTarget */
