############################################
# Generic boiler plate
#-------------------------------------------
import os
import os.path

version = '1.31'
package = 'flash100'
libepoch = version

opts = Options('SCustomize')
opts.Add(BoolOption('debug', 'Build with debugging symbols', 0))
opts.Add('CXX', 'Set C++ compiler')

opts.Add(PathOption('prefix', 'install files in prefix', '/usr/local', PathOption.PathIsDirCreate))
opts.Add(PathOption('builddir', 'build in dir', 'build', PathOption.PathIsDirCreate))
opts.Add(PathOption('destdir', 'install in destdir/prefix (for packagers)', '', PathOption.PathAccept))

opts.Add(PathOption('qtdir', 'where the root of Qt is installed', None))

env = Environment(options=opts, CPPPATH=['#Flash100/include', '#Flash100/F100TK'])
Help(opts.GenerateHelpText(env))

debug = env.get('debug')
prefix = env.get('prefix')
destdir = env.get('destdir')
builddir = env.get('builddir')

env.SConsignFile(builddir + '/.sconsign')


############################################
# PLATFORM SPECIFIC CONFIGS
############################################
env.AppendUnique(CPPFLAGS = ['-pipe'])
if debug:
  env.Append(CPPDEFINES = ['DEBUG', '_DEBUG'])
  env.Append(CPPFLAGS = ['-g3', '-Wall'])
else:
  env.Append(CPPDEFINES = ['NDEBUG'])
  env.Append(CPPFLAGS = ['-O3', '-Wall'])

env_dict = env.Dictionary();
if not env_dict.has_key('CPPPATH'):
  env_dict['CPPPATH'] = []

if not env_dict.has_key('CPPDEFINES'):
  env_dict['CPPDEFINES'] = []

if not env_dict.has_key('LIBPATH'):
  env_dict['LIBPATH'] = []

if not env_dict.has_key('LIBS'):
  env_dict['LIBS'] = []

if not env_dict.has_key('CXXFLAGS'):
  env_dict['CXXFLAGS'] = []

if not env_dict.has_key('LINKFLAGS'):
  env_dict['LINKFLAGS'] = []

# no prefix for plugins
env['LDMODULEPREFIX'] = ''

env.Append(LIBPATH='#' + os.path.join(builddir, 'Flash100/F100TK'))
env.Append(LIBPATH='#' + os.path.join(builddir, 'Flash100/F100Qt'))

idir_bin       = destdir + '/' + prefix + '/bin/'
idir_lib       = destdir + '/' + prefix + '/lib/'
dir_tools      = prefix + '/' + 'lib/flash100/Tools/'
dir_protocols  = prefix + '/' + 'lib/flash100/Protocols/'
dir_images     = prefix + '/' + 'share/flash100/images/'
dir_languages  = prefix + '/' + 'share/flash100/Languages/'
idir_tools      = destdir + dir_tools
idir_protocols  = destdir + dir_protocols
idir_images     = destdir + dir_images
idir_languages  = destdir + dir_languages

idir_bin        = os.path.abspath(os.path.normpath(idir_bin          ))
idir_lib        = os.path.abspath(os.path.normpath(idir_lib          ))
dir_tools       = os.path.abspath(os.path.normpath(dir_tools         ))
dir_protocols   = os.path.abspath(os.path.normpath(dir_protocols     ))
dir_images      = os.path.abspath(os.path.normpath(dir_images        ))
dir_languages   = os.path.abspath(os.path.normpath(dir_languages     ))
idir_tools      = os.path.abspath(os.path.normpath(idir_tools        ))
idir_protocols  = os.path.abspath(os.path.normpath(idir_protocols    ))
idir_images     = os.path.abspath(os.path.normpath(idir_images       ))
idir_languages  = os.path.abspath(os.path.normpath(idir_languages    ))

############################################
# CONFIGURE QT
############################################
envqt = env.Copy(tools = ['default', 'qt'])

if envqt.get('qtdir'):
    envqt['QTDIR']=envqt.get('qtdir')

if(envqt['QT_LIB'] == 'qt'):
  envqt['QT_LIB'] = 'qt-mt'


############################################
# BUILD SUBDIRS
############################################
exp = ['env', 'envqt', 'libepoch', 'version', 'package', 'prefix', 'debug', 'builddir']

SConscript(['SConfigure'], exports=exp, build_dir=builddir, duplicate=0)

SConscript(['Flash100/SConscript'], exports='envqt env idir_bin idir_lib idir_tools idir_protocols idir_images idir_languages dir_tools dir_protocols dir_images dir_languages builddir', build_dir=builddir + '/Flash100/', duplicate=0)

############################################
# make distribution
############################################

### To make a tarball of your masterpiece, use 'scons dist'
if 'dist' in COMMAND_LINE_TARGETS:
  import os
  import distutils
  import distutils.archive_util
  import distutils.dir_util
  import distutils.file_util
  import distutils.filelist

  dir = package + '-' + version
  if os.path.isdir(dir):
    distutils.dir_util.remove_tree(dir)

  distutils.dir_util.mkpath(dir)
  distutils.dir_util.copy_tree('Flash100', dir + '/Flash100')

  for i in ['SConstruct', 'SConfigure']:
    distutils.file_util.copy_file(i, dir)

  for root, dirs, files in os.walk(dir):
    if '.svn' in dirs:
      distutils.dir_util.remove_tree(root + '/.svn/')
      #print 'remove ' + root + '/.svn/'

  distutils.archive_util.make_archive(dir, 'bztar', '.', dir)
  distutils.archive_util.make_archive(dir, 'gztar', '.', dir)
  distutils.archive_util.make_archive(dir, 'zip'  , '.', dir)

  distutils.dir_util.remove_tree(dir)
  env.Alias('dist')

if 'install' in COMMAND_LINE_TARGETS:
  print 'installing in ' + destdir + prefix

