cppcheck/SConstruct

106 lines
3.3 KiB
Python

# qt4.py is required for this script to work. It was downloaded from:
# http://clam-project.org/clam/trunk/CLAM/scons/sconstools/qt4.py
import os
# Lib
libFiles = Glob('lib/*.cpp')
libEnv = Environment()
if "gcc" in libEnv["TOOLS"]:
libEnv.Append(CCFLAGS = ['-Wall', '-Wextra'])
if 'release' in COMMAND_LINE_TARGETS:
libEnv.Append(CCFLAGS = ['-O3'])
elif 'coverage' in COMMAND_LINE_TARGETS:
libEnv.Append(CCFLAGS = ['-g', '-fprofile-arcs', '-ftest-coverage'])
libEnv.Append(LINKFLAGS = ['-g', '-fprofile-arcs', '-ftest-coverage'])
elif 'ccwin32' in COMMAND_LINE_TARGETS:
libEnv.Replace(CXX = 'i586-mingw32msvc-g++')
libEnv.Replace(CCFLAGS = ['-O3'])
libEnv.Replace(LIBS = ['shlwapi'])
else:
libEnv.Append(CCFLAGS = ['-g','-O0'])
libEnv.Append(CPPPATH = ['lib'])
libObjects = libEnv.Object(libFiles)
# Cppcheck (cli)
cliFiles = Glob('cli/*.cpp')+libObjects
cliEnv = libEnv.Clone()
cliEnv.Append(CPPPATH = ['cli'])
if "gcc" in libEnv["TOOLS"]:
cliEnv.Append(CCFLAGS = ['-pedantic'])
cppcheck = cliEnv.Program('cppcheck',cliFiles)
Alias('cppcheck',[cppcheck])
Default(cppcheck)
# Testrunner
testFiles = Glob('test/*.cpp')+libObjects
testEnv = libEnv.Clone()
testEnv.Append(CPPPATH = ['test'])
if "gcc" in libEnv["TOOLS"]:
testEnv.Append(CCFLAGS = ['-pedantic'])
testrunner = testEnv.Program('testrunner', testFiles)
Alias('testrunner',[testrunner])
# GUI
emptyEnv = Environment()
conf = Configure(emptyEnv)
try:
QTDIR = os.popen('qmake -query QT_INSTALL_DATA').read()
pkgpath = os.environ.get("PKG_CONFIG_PATH", "")
pkgpath += ":%s/lib/pkgconfig" % QTDIR
os.environ["PKG_CONFIG_PATH"] = pkgpath
os.environ["QTDIR"] = QTDIR
guiEnv = libEnv.Clone(tools=["default", "qt4"], toolpath=['.'])
guiEnv.Append(CPPPATH = ['gui'])
guiEnv.EnableQt4Modules(["QtGui", "QtCore"])
rccs = [guiEnv.Qrc("gui/gui.qrc", QT4_QRCFLAGS="-name CppcheckGUI")]
uiFiles = Glob('gui/*.ui')
uis = [guiEnv.Uic4(ui) for ui in uiFiles]
guiFiles = Glob('gui/*.cpp')+libObjects
gui = guiEnv.Program(target="gui_cppcheck", source=[rccs, guiFiles])
Alias('gui',[gui])
except:
gui = Alias('gui','')
if 'gui' in COMMAND_LINE_TARGETS:
print "Qt4 not found. It is required for gui"
# Execute testrunner
test = AlwaysBuild(Alias("test", testrunner, "./$SOURCE"))
# All
Alias('all',[testrunner,cppcheck,gui])
# Release
Alias('release',[cppcheck])
# ccwin32 (Cross compile win32 in Linux)
ccwin32 = Alias('ccwin32',[cppcheck],Move('cppcheck.exe','cppcheck'))
Clean(ccwin32,'cppcheck.exe')
# Coverage
Alias('coverage',[test],[
'rm -r coverage_report',
'gcov lib/*.cpp -o lib/',
'lcov --directory ./ --capture --output-file lcov.info -b ./',
'genhtml lcov.info -o coverage_report',
'rm lib/*.gcda',
'rm lib/*.gcno',
'rm test/*.gcda',
'rm test/*.gcno',
'rm lcov.info'])
Help("""
Type: 'scons' - cppcheck (cli)
'scons cppcheck' - cppcheck (cli)
'scons gui' - gui_cppcheck
'scons testrunner' - testrunner
'scons test' - testrunner + execute tests
'scons all' - gui+cppcheck+testrunner
'scons release' - cppcheck release version
'scons release gui' - cppcheck+gui release versions
'scons coverage' - coverage report
'scons ccwin32' - Cross compile win32 (cli) in Linux
'scons -c all' - clean all
""")