-
Notifications
You must be signed in to change notification settings - Fork 0
/
SConscript
78 lines (69 loc) · 2.21 KB
/
SConscript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#
# Generic SConscript for TvGuideFetch.
#
# Define a custom builder to create the config files.
import re
def BuildConfig(target, source, env):
output = str(target[0])
input = str(source[0])
match = re.search('^config(.*)\.xml$', input)
if match:
symbol = match.group(1)
else:
return 'Cannot parse symbol from target name'
with open(output, 'w') as outFile:
outFile.write("// This file is automatically generated - dont edit it\n")
outFile.write("#include \"Config.hpp\"\n")
outFile.write("class Config%s\n" % (symbol))
outFile.write("{\n")
outFile.write("public:\n")
outFile.write(" Config%s() { Config::instance().registerDefaultConfig(\"%s\", config); }\n" % (symbol, symbol))
outFile.write(" static Config%s instance;\n" % (symbol))
outFile.write(" static const char *config;\n")
outFile.write("};\n")
outFile.write("Config%s Config%s::instance;\n" % (symbol, symbol))
outFile.write("const char *Config%s::config =\n" % (symbol))
with open(input, 'r') as inFile:
last = None
for line in inFile:
line = line.strip()
line = line.replace('"', '\\"')
if last:
outFile.write("\"%s\\n\"\\\n" % (last))
last = line
outFile.write("\"%s\\n\";\n" %(last))
return None
config = Builder(action = BuildConfig,
suffix = '.cpp',
src_suffix = '.xml')
# Customise build environment.
Import('env bldDir')
env = env.Clone()
env.Append(BUILDERS = {'Config': config})
env.Append(CPPPATH = '.')
srcs = []
# Rules to generate the configuration files.
srcs += env.Config(bldDir + 'configEmpty.cpp', 'configEmpty.xml')
srcs += env.Config(bldDir + 'configFreeview.cpp', 'configFreeview.xml')
srcs += env.Config(bldDir + 'configAnalogue.cpp', 'configAnalogue.xml')
srcs += env.Config(bldDir + 'configFoxtel.cpp', 'configFoxtel.xml')
# Build sources.
srcs += Split("""
TvGuideFetch.cpp
XmlDom.cpp
Config.cpp
HttpFetch.cpp
CmdOptions.cpp
Channel.cpp
EasyDate.cpp
""")
# Flags needed for libexpat, libcurl, zlib.
libraries = Split('expat curl ssl crypto z')
env.Prepend(LIBS = libraries)
# Build objects away from the source
objs = [
env.Object(bldDir + '${SOURCE.filebase}' + env['OBJSUFFIX'], src)
for src in srcs
]
# Build rule for tv_grab_au_tvguide
env.Program(bldDir + 'tv_grab_au_tvguide', objs)