fsp/SConstruct
2014-09-08 16:38:03 +02:00

164 lines
5.7 KiB
Python

# Process this file with http://www.scons.org to build FSP
import os
# init Scons
EnsureSConsVersion(1,1)
EnsurePythonVersion(2,2)
# set defaults
PREFIX='/usr/local'
VERSION='2.8.1b26'
EFENCE=False
CLIENTS=True
env = Environment(CPPPATH='#/include', LIBPATH=['/usr/lib','/usr/local/lib'])
# Import GZip builder
import gzipBuilder
# Import Symlink builder
import symlinkBuilder
env.Append(BUILDERS = {'GZip' : Builder(action=gzipBuilder.GZip),
'Symlink': Builder(action=symlinkBuilder.Symlink)})
# 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 maintainer import checkForMaintainerMode
from compilertest import checkForCCOption
from prefix import checkForUserPrefix
from lockprefix import checkForLockPrefix
from locktype import checkForLockingType
from lamerpack import checkForLamerpack
from debugmode import checkForDebugBuild
from timeout import checkForClientTimeout
from relsignals import checkReliableSignals
from mandir import checkForUserMandir
from docdir import checkForUserDocdir
from mandir import autodetectMandir
from clients import checkForBuildingClients
from sysconfdir import checkForUserSysconfdir
from largefiles import enableLargeFiles
from jade import checkDSSSLProcessor
from dsssl import findDocbookStylesheets
conf = Configure(env,{'checkForCCOption':checkForCCOption,
'MAINTAINER_MODE':checkForMaintainerMode,
'checkForLockPrefix':checkForLockPrefix,
'checkPrefix':checkForUserPrefix,
'checkForLockingType':checkForLockingType,
'checkForLamerPack':checkForLamerpack,
'checkForDebugBuild':checkForDebugBuild,
'checkForClientTimeout':checkForClientTimeout,
'checkReliableSignals':checkReliableSignals,
'checkForUserMandir':checkForUserMandir,
'checkForUserDocdir':checkForUserDocdir,
'autodetectMandir':autodetectMandir,
'checkForUserSysconfdir':checkForUserSysconfdir,
'checkForBuildingClients':checkForBuildingClients,
'checkDSSSLProcessor':checkDSSSLProcessor,
'findDocbookStylesheets':findDocbookStylesheets
})
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
-pedantic
-Wlong-long -Wundef -Winline
-Wpointer-arith -Wno-unused-parameter
-Wunreachable-code
-fmacro-backtrace-limit=2 -Wno-cast-align -Wno-pointer-sign
"""):
conf.checkForCCOption(option)
if conf.checkDSSSLProcessor("jade"):
JADE = "jade"
elif conf.checkDSSSLProcessor("openjade"):
JADE = "openjade"
else:
JADE = False
if JADE:
DSSSL = conf.findDocbookStylesheets()
else:
DSSSL = None
if DSSSL == None:
JADE = False
# Portability build time config
if conf.CheckFunc('srandomdev'):
conf.env.Append(CPPFLAGS = '-DHAVE_SRANDOMDEV')
if conf.CheckFunc('random'):
conf.env.Append(CPPFLAGS = '-DHAVE_RANDOM')
if conf.CheckFunc('fork'):
conf.env.Append(CPPFLAGS = '-DHAVE_FORK')
if conf.CheckFunc('setsid'):
conf.env.Append(CPPFLAGS = '-DHAVE_SETSID')
if conf.CheckCHeader('unistd.h'):
conf.env.Append(CPPFLAGS = '-DHAVE_UNISTD_H')
if conf.CheckCHeader('limits.h'):
conf.env.Append(CPPFLAGS = '-DHAVE_LIMITS_H')
if conf.CheckCHeader('strings.h'):
conf.env.Append(CPPFLAGS = '-DHAVE_STRINGS_H')
if conf.CheckCHeader('sys/resource.h'):
conf.env.Append(CPPFLAGS = '-DHAVE_SYS_RESOURCE_H')
if conf.CheckCHeader('sys/syslimits.h'):
conf.env.Append(CPPFLAGS = '-DHAVE_SYS_SYSLIMITS_H')
if conf.CheckCHeader('sys/wait.h'):
conf.env.Append(CPPFLAGS = '-DHAVE_SYS_WAIT_H')
if conf.CheckCHeader('utime.h'):
conf.env.Append(CPPFLAGS = '-DHAVE_UTIME_H')
if conf.CheckCHeader('utmpx.h'):
conf.env.Append(CPPFLAGS = '-DHAVE_UTMPX_H')
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")
enableLargeFiles(conf)
conf.checkForLockingType(conf)
if conf.checkReliableSignals():
conf.env.Append(CPPFLAGS = '-DRELIABLE_SIGNALS')
conf.checkForLockPrefix()
PREFIX=conf.checkPrefix(PREFIX)
conf.checkForUserSysconfdir(PREFIX)
MANDIR=conf.autodetectMandir(PREFIX)
MANDIR=conf.checkForUserMandir(MANDIR)
DOCDIR=PREFIX+'/share/doc/fsp'
DOCDIR=conf.checkForUserDocdir(DOCDIR)
dmode=conf.checkForDebugBuild()
EFENCE = conf.MAINTAINER_MODE(dmode)
if EFENCE == True:
EFENCE=conf.CheckLib("efence","EF_Abort")
conf.checkForLamerPack()
CLIENTS=conf.checkForBuildingClients()
conf.checkForClientTimeout()
conf.Finish()
env.Append(CPPFLAGS = "-DPACKAGE_VERSION=\\\""+VERSION+"\\\"")
# process build rules
Export( Split("env PREFIX MANDIR DOCDIR CLIENTS JADE DSSSL"))
env.SConscript(dirs=Split("doc . bsd_src common server client clients contrib tests man"))