import os

globalEnv = Environment()

globalEnv["ROOTPATH"] = os.path.abspath('.')

basicBuildPath = os.path.join(globalEnv['ROOTPATH'], 'build')
globalEnv['BUILDPATH'] = os.path.join(basicBuildPath, 'release')

globalEnv['CONTRIBPATH'] = os.path.join(globalEnv['ROOTPATH'], 'contrib')
globalEnv['MONGOCPATH'] = os.path.join(globalEnv['CONTRIBPATH'], 'mongoc')
globalEnv['MONGOCXXPATH'] = os.path.join(globalEnv['CONTRIBPATH'], 'mongocxx')
globalEnv['QBSCXXPATH'] = os.path.join(globalEnv['CONTRIBPATH'], 'qubosolver')

globalEnv["INIHSRC"] = os.path.join(
					   os.path.join(globalEnv["CONTRIBPATH"],
								   "iniParser"), 
								   "inih")
globalEnv["INIHCPPSRC"] = os.path.join(globalEnv["INIHSRC"], "cpp")
globalEnv["MINISATSRC"] = os.path.join(
						   os.path.join(globalEnv["CONTRIBPATH"],
									   "minisat"), 
									   "src")
globalEnv["QBSCXXSRC"] = os.path.join(
                         os.path.join(
                         os.path.join(globalEnv["CONTRIBPATH"],
                                      "qubosolver"), 
									  "qbscxx"),
                                      "src")
globalEnv["QBSCXX_INCLUDE"] = os.path.join(
                              os.path.join(
                              os.path.join(globalEnv["CONTRIBPATH"],
                                           "qubosolver"), 
                                           "qbscxx"),
                                           "include")


#compiler option
AddOption('--dbg', action='store_true', dest='DEBUG')

globalEnv["BUILD_TYPE"] = "Release"

if GetOption('DEBUG'):
    globalEnv["BUILD_TYPE"] = "Debug"
    globalEnv.Append(CCFLAGS="-g")
    globalEnv['BUILDPATH'] = os.path.join(basicBuildPath, 'debug')

globalEnv.Append(CXXFLAGS='-std=c++11')
AddOption("--init", action="store_true", dest="INIT")

#build libs
#

globalEnv['LIB_BUILD_PATH'] = os.path.join(globalEnv['BUILDPATH'], 'libs')

#build mongoc
globalEnv['MONGOC_LIB_PATH'] = os.path.join(globalEnv['LIB_BUILD_PATH'], 'mongoc')

if GetOption("INIT"):
	globalEnv.SConscript(os.path.join(
    	   		         os.path.join(globalEnv['CONTRIBPATH'],
        	     		              'mongoc'),
            	             		  'SConscript'),
	   					 variant_dir=globalEnv['MONGOC_LIB_PATH'],
	                	 duplicate=0,
	        	         exports='globalEnv')

#build mongocxx
globalEnv["MONGOCXX_LIB_PATH"] = os.path.join(globalEnv["LIB_BUILD_PATH"], "mongocxx")

if GetOption("INIT"):
	globalEnv.SConscript(os.path.join(
						 os.path.join(globalEnv["CONTRIBPATH"],
									  "mongocxx"),
									  "SConscript"),
						 variant_dir=globalEnv["MONGOCXX_LIB_PATH"],
						 duplicate=0,
						 exports="globalEnv")
                         
#build qbscxx
globalEnv["QBSCXX_LIB_PATH"] = os.path.join(globalEnv["LIB_BUILD_PATH"], "qbscxx")

if GetOption("INIT"):
	globalEnv.SConscript(os.path.join(
						 os.path.join(globalEnv["CONTRIBPATH"],
									  "qubosolver"),
									  "SConscript"),
						 variant_dir=globalEnv["QBSCXX_LIB_PATH"],
						 duplicate=0,
						 exports="globalEnv")                         

#build inih
globalEnv["INIH_LIB_PATH"] = os.path.join(globalEnv["LIB_BUILD_PATH"], "inih")

globalEnv.SConscript(os.path.join(
					 os.path.join(globalEnv["CONTRIBPATH"],
								  "iniParser"),
								  "SConscript"),
					  variant_dir=globalEnv["INIH_LIB_PATH"],
					  duplicate=0,
					  exports="globalEnv")

#build minisat
globalEnv["MINISAT_LIB_PATH"] = os.path.join(globalEnv["LIB_BUILD_PATH"], "minisat")

globalEnv.SConscript(os.path.join(
					 os.path.join(globalEnv["CONTRIBPATH"],
								  "minisat"),
								  "SConscript"),
					  variant_dir=globalEnv["MINISAT_LIB_PATH"],
					  duplicate=0,
					  exports="globalEnv")


mongocxxIncludeDir = os.path.join(
					 os.path.join(
					 os.path.join(globalEnv["MONGOCXX_LIB_PATH"],
								 "include"),
								 "mongocxx"),
								 "v_noabi")

bsoncxxIncludeDir = os.path.join(
				    os.path.join(
					os.path.join(globalEnv["MONGOCXX_LIB_PATH"],
								"include"),
								"bsoncxx"),
								"v_noabi")
                    
inihIncludeDir = globalEnv["INIHSRC"]
inihcppIncludeDir = globalEnv["INIHCPPSRC"]

minisatIncludeDir = globalEnv["MINISATSRC"]

globalEnv.Append(CPPPATH=[mongocxxIncludeDir,
						  bsoncxxIncludeDir,
						  inihIncludeDir,
						  inihcppIncludeDir,
						  minisatIncludeDir,
						  globalEnv["QBSCXXSRC"],
						  globalEnv["QBSCXX_INCLUDE"]])


globalEnv.Append(LIBPATH=[os.path.join(globalEnv["MONGOCXX_LIB_PATH"], "lib"),
						  globalEnv["INIH_LIB_PATH"],
						  globalEnv["MINISAT_LIB_PATH"],
						  globalEnv["QBSCXX_LIB_PATH"]])


#build runMinisat
globalEnv.SConscript(os.path.join(
				     os.path.join(globalEnv['ROOTPATH'],
								 'src'),
								 'SConscript'),
					 variant_dir=globalEnv['BUILDPATH'],
                     duplicate=0,
                     exports='globalEnv')