import shutil
import os
import tarfile

Import('env')


if env.GetOption('clean'):
    if os.path.exists(os.environ['SECURITY_TRANSFORMS_HOME']+"/include/targ-config.h"):
        print 'Removing include/targ-config.h'
    	os.remove(os.environ['SECURITY_TRANSFORMS_HOME']+"/include/targ-config.h")
    os.chdir(os.environ['SECURITY_TRANSFORMS_HOME']+"/third_party/capstone")
    os.system("make clean")
    os.chdir(os.environ['SECURITY_TRANSFORMS_HOME'])


else:

    os.chdir(os.environ['SECURITY_TRANSFORMS_HOME']+"/third_party/capstone")
    print "Rebuilding libcapstone."
    jobs=env.GetOption('num_jobs')
    os.system("make -j "+str(jobs))
    os.chdir(os.environ['SECURITY_TRANSFORMS_HOME'])



if "PEDI_HOME" in os.environ:
	pedi = Command( target = "./testoutput",
			source = "./SConscript",
			action = os.environ['PEDI_HOME']+"/pedi -m manifest.txt " )

env['BASE_IRDB_LIBS']="irdb-core"

libPEBLISS=SConscript("third_party/SConscript.pebliss")
# setup libraries needed for linking
if "PEDI_HOME" in os.environ:
	Depends(pedi,libPEBLISS)

Export('env')

# get the libcapstone.so.[version] file regardless of the version extension
libcapstone_path = Glob(os.environ['SECURITY_TRANSFORMS_HOME']+'/third_party/capstone/libcapstone.so.*')
assert len(libcapstone_path) <= 1, "More than one candidate for libcapstone.so.[version]?!"

libcapstone_path = env.Install("$SECURITY_TRANSFORMS_HOME/lib/", libcapstone_path)

env.Command(os.environ['SECURITY_TRANSFORMS_HOME']+"/lib/libcapstone.so", libcapstone_path, "ln -s $SOURCE.abspath $TARGET.abspath")
libcapstone=os.environ['SECURITY_TRANSFORMS_HOME']+"/lib/libcapstone.so"

libehp=env.SConscript("libehp/SConscript")
libehp=env.Install("$SECURITY_TRANSFORMS_HOME/lib", libehp);

libIRDBcore=env.SConscript("libIRDB-core/src/SConscript")
Depends(libIRDBcore,libcapstone)

libIRDBcfg=env.SConscript("libIRDB-cfg/src/SConscript")
libIRDButil=env.SConscript("libIRDB-util/src/SConscript")
libIRDBsyscall=env.SConscript("libIRDB-syscall/src/SConscript")
libElfDep=SConscript("libIRDB-elfdep/src/SConscript")
libtransform=SConscript("libIRDB-transform/src/SConscript")
libEXEIO=SConscript("libEXEIO/SConscript")
libMEDSannotation=SConscript("libMEDSannotation/SConscript")
libStructDiv=SConscript("libStructDiv/SConscript")
thanos=SConscript("thanos/SConscript")
rida=SConscript("rida/SConscript")
meds2pdb=SConscript("meds2pdb/SConscript")
dump_map=SConscript("dump_map/SConscript")
dump_insns=SConscript("dump_insns/SConscript")
ir_builders=SConscript("ir_builders/SConscript")


libs=( libIRDBcore, 
	libIRDBcfg, 
	libIRDButil, 
	libIRDBcore, 
	libehp,
	libtransform,
	libEXEIO,
	libMEDSannotation,
	libStructDiv,
	libElfDep, 
	libcapstone, 
	thanos, 
	rida, 
	meds2pdb, 
	dump_map, 
	dump_insns, 
	ir_builders)

if "PEDI_HOME" in os.environ:

	Depends(pedi,  libs)
	Default(libs)
	# if is local build
	if Dir('.').abspath == Dir('#.').abspath:
		Default( pedi )
		ret=[pedi]+ libs
		Return('ret')
	else:
		Return('libs')
else:

	Default(libIRDBcore, libIRDBcfg, libIRDButil, libIRDBdeep, libIRDBcore, libehp,libtransform,libEXEIO,libMEDSannotation,libStructDiv,libElfDep, libcapstone, thanos, rida, meds2pdb, dump_map, dump_insns, ir_builders)