# # $Id$ # # Part of Equinox Desktop Environment (EDE). # Copyright (c) 2000-2007 EDE Authors. # # This program is licensed under terms of the # GNU General Public License version 2 or newer. # See COPYING for details. SUFOBJ_SHARED = ".lo" ; SUFLIB_SHARED = ".so" ; SUFLA_SHARED = ".la" ; # StaticLibrary [lib-name] : [source-files] ; rule StaticLibrary { Library $(<) : $(>) ; } rule SharedLibraryFromObjects { local _i _l _l_so _l_la _s ; # Add grist to file names _s = [ FGristFiles $(3) ] ; _l = $(1:S=$(SUFLIB_SHARED).$(2)) ; # for sonames; it accept only libname.so _l_so = $(1:S=$(SUFLIB_SHARED)) ; _l_so = $(_l_so:BSR=) ; # libname.la file _l_la = $(_l_so:S=$(SUFLA_SHARED)) ; # library depends on its member objects if $(KEEPOBJS) { LocalDepends obj : $(_s) ; } else { LocalDepends lib : $(_l) ; } # Set LOCATE for the library and its contents. The bound # value shows up as $(NEEDLIBS) on the Link actions. # For compatibility, we only do this if the library doesn't # already have a path. if ! $(_l:D) { MakeLocate $(_l) : $(LOCATE_TARGET) ; } # we never scan shared libraries for member objects LocalDepends $(_l) : $(_s) ; # clean library LocalClean clean : $(_l) ; if $(OS) = "SOLARIS" { # solaris have other options for soname creation LINKFLAGS on $(_l) = -h $(_l_so) -G [ on $(_l) return $(LINKFLAGS) ] ; } else { # let linker knows we are making shared library by adding -shared and -Wl,-soname libname.so flags LINKFLAGS on $(_l) = -Wl,-soname,$(_l_so) -shared [ on $(_l) return $(LINKFLAGS) ] ; } # make it Link $(_l) : $(_s) ; # make a link SymLink $(_l_so) : $(_l) ; # let link be created in directory where libname.so.X.X.X exists MakeLocate $(_l_so) : $(_l:D) ; LocalDepends lib : $(_l_so) ; # generate libname.la file DLNAME1 on $(_l_la) = $(_l_so) ; DLNAME2 on $(_l_la) = $(_l:BSR=) ; GenLa $(_l_la) ; LocalClean clean : $(_l_la) ; LocalClean clean : $(_l_so) ; # let libname.la be created in directory where libname.so.X.X.X exists MakeLocate $(_l_la) : $(_l:D) ; LocalDepends lib : $(_l_la) ; } rule SharedObjects { # temporary replace SUFOBJ since Objects rule use it local SUFOBJ = $(SUFOBJ_SHARED) ; ObjectCcFlags $(<) : -fPIC ; ObjectC++Flags $(<) : -fPIC ; # call the normal Objects rule Objects $(<) ; } # SharedLibrary [library] : [version] : [source] ; # Creates shared library ala libtool rule SharedLibrary { if ! $(UNIX) { Exit "Don't know how to build shared libraries on this platform" ; } SharedLibraryFromObjects $(1) : $(2) : $(3:S=$(SUFOBJ_SHARED)) ; SharedObjects $(3) ; } # .la files are generated by libtool and we emulate that too # NOTE: jam will discard comments that should be written to the file # so instead plain '#' is used '@@#' and later is replaced with sed actions GenLa { today=`date` cat > "$(<).tmp" < "$(<)" $(RM) "$(<).tmp" }