[Scons-users] BuildPackage
    dpfj at btinternet.com 
    dpfj at btinternet.com
       
    Sun Dec 13 15:35:40 EST 2015
    
    
  
I have seen various version of UnTar, AutoConfig/Configure and Make SCons tools but not one that does them all.
Below is a Tool I developed to help this hope it helps someone else?
% cat ./BuildPackage.py
import SCons.Action
import SCons.Builder
import SCons.Defaults
import SCons.Node.FS
import SCons.Util
import os
makes = ['make', 'gmake']
tars = ['tar', 'gtar']
def generate(env):
    """Add Builders and construction variables for tar to an Environment."""
    try:
        bld = env['BUILDERS']['BuildPackage']
    except KeyError:
        
        UnTarAction = SCons.Action.Action('$UNTARCOM',    '$UNTARCOMSTR')
        AutoConf    = SCons.Action.Action('$AUTOCONFCOM', '$AUTOCONFCOMSTR')
        Make        = SCons.Action.Action('$MAKECOM',     '$MAKECOMSTR')
        ##
        ## The builder
        ##
        BuildPackageBuilder = SCons.Builder.Builder( 
            action = [UnTarAction, AutoConf, Make],
            target_factory = env.fs.File,
            source_factory = env.fs.File,
            src_suffix = '.tar.gz',
            multi = False,
            chdir=True)
        bld = BuildPackageBuilder
    env['BUILDERS']['BuildPackage'] = bld
    ##
    ## Tar
    ##
    env['UNTAR']        = env.Detect(tars) or 'gtar'
    env['UNTARFLAGS']   = SCons.Util.CLVar('-xz --strip=1')
    env['UNTARCOM']     = '$UNTAR $UNTARFLAGS -f ${SOURCES.abspath}'
    env['UNTARSUFFIX']  = '.tar.gz'
    ##
    ## Make
    ##
    env['MAKE']      = env.Detect(makes) or 'gmake'
    env['MAKEFLAGS'] = SCons.Util.CLVar('-j4')
    env['MAKECOM']   = 'if [ "${MAKE_DEPEND}" ]; then make depend; fi && $MAKE $MAKEFLAGS'
    ##
    ## Configure
    ##
    env['AUTOCONF_BIN'] = './configure'
    env['AUTOCONF_FLAGS'] = ''
    env['AUTOCONFCOM'] = '$AUTOCONF_BIN $AUTOCONF_FLAGS'
def exists(env):
    return 1
An example of it's use is below to build libpcap.a and libssl.a
% cat SConscript
Import('env')
##
## Build the libpcap.a library
##
env.AppendUnique(AUTOCONF_FLAGS = '--enable-shared=no')
libpcap_a = env.BuildPackage(target='libpcap-1.7.4/libpcap.a', source=['libpcap-1.7.4.tar.gz'])
## Make sure it's not removed after all that hard workenv.NoClean(libpcap_a, 'libpcap-1.7.4')
ssl_env = env.Clone()
ssl_env['AUTOCONF_BIN'] = './Configure'
ssl_env['AUTOCONF_FLAGS'] = 'no-threads no-shared linux-x86_64'
ssl_env['MAKE_DEPEND'] = True
libcrypto_a = ssl_env.BuildPackage(target=['openssl-1.0.2e/libcrypto.a', 'openssl-1.0.2e/libssl.a'], source=['openssl-1.0.2e.tar.gz'])
env.NoClean(libcrypto_a, 'openssl-1.0.2e')
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20151213/e986e52f/attachment.html>
    
    
More information about the Scons-users
mailing list