-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSConstruct
102 lines (81 loc) · 2.78 KB
/
SConstruct
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# Setup
import os
env = Environment(ENV = os.environ)
try:
env.Tool('config', toolpath = [os.environ.get('CBANG_HOME')])
except Exception as e:
raise Exception('CBANG_HOME not set?\n' + str(e))
env.CBLoadTools('compiler cbang dist build_info packager')
# Override variables
env.CBAddVariables(('cxxstd', 'Set C++ language standard', 'c++11'))
conf = env.CBConfigure()
# Settings
import json
with open('package.json', 'r') as f: pkg_cnf = json.load(f)
name = pkg_cnf['name']
# Version
version = pkg_cnf['version']
major, minor, revision = version.split('.')
# Config vars
env.Replace(PACKAGE_VERSION = version)
env.Replace(BUILD_INFO_NS = 'JmpAPI::BuildInfo')
if not env.GetOption('clean') and not 'package' in COMMAND_LINE_TARGETS:
conf.CBConfig('compiler')
conf.CBConfig('cbang')
env.CBDefine('USING_CBANG') # Using CBANG macro namespace
if not env.CBConfigEnabled('event'):
raise Exception('libevent support in C! is required')
if not env.CBConfigEnabled('openssl'):
raise Exception('OpenSSL support in C! is required')
env.Append(PREFER_DYNAMIC = 'rt tcmalloc Xss m'.split())
conf.Finish()
# Frontend
if not ('package' in COMMAND_LINE_TARGETS or 'dist' in COMMAND_LINE_TARGETS):
from subprocess import check_call
check_call(['npm', 'install'])
check_call(['npm', 'run', 'build'])
check_call(['sh', '-c', 'cp -r src/public/* build/http/'])
# Program
Export('env name')
prog, lib = SConscript(
'src/%s.scons' % name, variant_dir = 'build', duplicate = 0)
Default(prog)
# Clean
Clean(prog, ['build', 'config.log'])
# Dist
docs = ['README.md'] + list(map(lambda x: (str(x), str(x)), Glob('api/*.yaml')))
tar = env.TarBZ2Dist(name, docs + [prog])
Alias('dist', tar)
AlwaysBuild(tar)
if 'package' in COMMAND_LINE_TARGETS:
pkg = env.Packager(
name,
version = version,
maintainer = 'Joseph Coffland <[email protected]>',
vendor = 'Cauldron Development LLC',
url = 'https://github.com/CauldronDevelopmentLLC/jmpapi',
license = 'copyright',
bug_url = 'https://github.com/CauldronDevelopmentLLC/jmpapi/issues',
summary = pkg_cnf['description'],
description = pkg_cnf['description'],
prefix = '/usr',
documents = docs,
programs = [str(prog[0]), 'scripts/jmpapi-run'],
changelog = 'ChangeLog',
platform_independent = [
'build/http', 'scripts/jmpapi.service', 'scripts/[email protected]'] + \
list(map(str, Glob('src/sql/*.sql'))),
deb_directory = 'debian',
deb_section = 'science',
deb_depends = 'debconf | debconf-2.0, libc6, bzip2, zlib1g',
deb_pre_depends = 'adduser, ssl-cert',
deb_priority = 'optional',
)
AlwaysBuild(pkg)
env.Alias('package', pkg)
f = None
try:
f = open('package-description.txt', 'w')
f.write(pkg_cnf['description'])
finally:
if f is not None: f.close()