# Process this file with http://www.scons.org to build FSPCLIENT

# init SCons framework
EnsureSConsVersion(3,0)
EnsurePythonVersion(2,7)

# set defaults
PREFIX='/usr/local'
PACKAGE='fspclient'
VERSION='0.93.1'

# create environment
env = Environment(CPPPATH='#/include')

# configure globals
env.Append(CPPFLAGS = "-DPACKAGE_VERSION=\\\""+VERSION+"\\\"")

# Import GZip builder
import gzipBuilder
env['BUILDERS']['GZip']=Builder(action=gzipBuilder.GZip)

# import environment
from importer import importEnvironment,importVariable
importEnvironment(env,'HOME')
importVariable(env,'CC')
importVariable(env,'CFLAGS','CCFLAGS')
importEnvironment(env,prefix='DISTCC_')
importEnvironment(env,prefix='CCACHE_')
importEnvironment(env,'PATH')

# Turn CPPFLAGS to list, so we can add values to it
env.Append(CPPFLAGS = [])

# Get CC from commandline
if ARGUMENTS.get('CC', 0):
    env.Replace(CC = ARGUMENTS.get('CC'))
if ARGUMENTS.get('CFLAGS',0):
    env.Replace(CCFLAGS = ARGUMENTS.get('CFLAGS'))
if ARGUMENTS.get('CCFLAGS',0):
    env.Replace(CCFLAGS = ARGUMENTS.get('CCFLAGS'))

# Convert CCFLAGS into list
env.Replace(CCFLAGS = str(env['CCFLAGS']).split(' '))

############  Start configuration ##############

from compilertest import checkForCCOption
from clangtest import checkForVariable
from maintainer import checkForMaintainerMode
from prefix import checkForUserPrefix
from mandir import checkForUserMandir
from mandir import autodetectMandir
from lockprefix import checkForLockPrefix
from locktype import checkForLockingType

conf = Configure(env,{'checkForCCOption':checkForCCOption,
                      'MAINTAINER_MODE':checkForMaintainerMode,
		      'checkForLockPrefix':checkForLockPrefix,
		      'checkPrefix':checkForUserPrefix,
		      'haveVar':checkForVariable,
		      'checkForUserMandir':checkForUserMandir,
		      'autodetectMandir':autodetectMandir,
		      'checkForLockingType':checkForLockingType
		      })
if not conf.CheckCC(): Exit(1)
# check for CC options
for option in Split("""
      -Wall -W -Wstrict-prototypes -Wmissing-prototypes -Wshadow
      -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings
      -Waggregate-return -Wmissing-declarations
      -Wmissing-format-attribute -Wnested-externs
      -ggdb -fno-common -Wchar-subscripts -Wcomment
      -Wimplicit -Wsequence-point -Wreturn-type
      -Wfloat-equal -Wno-system-headers -Wredundant-decls
      -Wmissing-noreturn -pedantic
      -Wlong-long -Wundef -Winline
      -Wpointer-arith -Wno-unused-parameter
      -Wunreachable-code
"""):
       conf.checkForCCOption(option)

# portability build time config
if conf.haveVar('optreset','#include <unistd.h>'):
    conf.env.Append(CPPFLAGS = '-DHAVE_OPTRESET')
if conf.CheckFunc('srandomdev'):
    conf.env.Append(CPPFLAGS = '-DHAVE_SRANDOMDEV')
if not conf.CheckType("union semun", "#include <sys/types.h>\n#include <sys/ipc.h>\n#include <sys/sem.h>",'c'):
       conf.env.Append(CPPFLAGS = "-D_SEM_SEMUN_UNDEFINED=1")
if conf.CheckCHeader('utmpx.h'):
       conf.env.Append(CPPFLAGS = "-DHAVE_UTMPX")
conf.checkForLockingType(conf)
conf.checkForLockPrefix()
PREFIX=conf.checkPrefix(PREFIX)
MANDIR=conf.autodetectMandir(PREFIX)
MANDIR=conf.checkForUserMandir(MANDIR)
conf.MAINTAINER_MODE()
conf.Finish()

# process build rules
Export( Split("env PREFIX PACKAGE VERSION MANDIR"))
env.SConscript(dirs=Split('. bsd common client man'))
