ede/build/Library.jam
Sanel Zukan 5155215b68 Changes in build scripts
Changed SharedLibrary rule so it can generate .la files, like libtool
Added some bluring of preview image, although it pretty sucks
emountd will now use global HAL flags and libraries
2009-01-26 12:31:01 +00:00

149 lines
3.4 KiB
Plaintext

#
# $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" <<EOF
@@# $(<:D=) - a libtool library file
@@# Generated by 'EDE jam build' on: $today
@@# The name that we can dlopen(3).
dlname='$(DLNAME1)'
@@# Names of this library.
library_names='$(DLNAME2) $(DLNAME1)'
@@# The name of the static archive.
old_library=''
@@# Libraries that this one depends upon.
dependency_libs=''
@@# Is this already installed library.
installed=yes
@@# Files to dlopen/dlpreopen.
dlopen=''
dlpreopen=''
@@# Directory that this library needs to be installed in:
libdir='$(libdir)'
EOF
cat "$(<).tmp" | $(SED) 's/^@@#/#/g' > "$(<)"
$(RM) "$(<).tmp"
}