import os.path
import SCons.Util
import SCons

PROJECT = 'transstring'
COMPDIR = 'components'
INSTALLJS = 'install.js'

def get_version():
    '''Return current version of the package.'''
    itxt = file(INSTALLJS).read()
    import re
    pat = re.compile('(?:const\s*X_VERSION\s*=\s*")(\d+\.\d+\.\d+\.?\d*)(?:";)')
    g = pat.findall(itxt)
    if g:
	version = g[0]
    else:
	version = ''
    return version

def get_install_file(proj):
    version = get_version()
    xpiname = '%s%s.xpi' % (proj, ('_' + version))
    return xpiname

XPINAME = get_install_file(PROJECT)

env = Environment()
src =env.SConscript(dirs="src", build_dir="components", duplicate=0)

def postsrc(target, source, env):
    '''Post action for src directory.'''
    exts = ['.xpt', '.so', '.dll']
    zfile = []
    files = SCons.Util.dir_index(COMPDIR)
    for i in files:
	base, ext = os.path.splitext(i)
	if ext in exts:
	    zfile.append(i)
    env.Zip(XPINAME, source=zfile)

def pack_dist_src():
    '''Package the source distribution. Scons support on this sucked.'''
    version = get_version()
    tarbase = '%s-%s' % (PROJECT, version)
    import glob
    tarfiles = glob.glob("*")
    tarname = tarbase+'.tgz'
    tardir = tarbase+'/'


    # Remove unwannted files.
    tmp = []
    for i in tarfiles:
	if i not in [tarbase, tarname, 'components', 'xpidl.pyc']:
	    tmp.append(i)
    tarfiles = tmp

    # Have to use my own command builder. No dir. can be target/source by default.
    bld = Builder(action= ['rm -rf $TARGET', 'mkdir $TARGET', 
	'cp -R $SOURCES $TARGET'], source_factory = SCons.Node.FS.default_fs.Entry,
	target_factory = SCons.Node.FS.default_fs.Entry)
    env.Append(BUILDERS= {'TARDIR': bld})
    env.TARDIR(target=tardir, source=tarfiles)
    Ignore(tardir, 'src') # we don't want to actually build for source dist.

    env.Tar(tarname, tardir)
    env.Append(TARFLAGS='-z')
    env.Clean(tardir, tarbase)
    env.Alias('dist-src', tarname)
    
XPI = env.Zip(XPINAME, Split('install.js extension.rdf'))
env.AddPreAction(XPI, action=postsrc)

Depends(XPI, src)
Default(XPI)
pack_dist_src()
