-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathbitsBuild
More file actions
executable file
·141 lines (124 loc) · 4.19 KB
/
bitsBuild
File metadata and controls
executable file
·141 lines (124 loc) · 4.19 KB
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/usr/bin/env python3
import os
import sys
import atexit
import logging
import traceback
from os.path import exists, expanduser
from bits_helpers import __version__
from bits_helpers.analytics import decideAnalytics, askForAnalytics, report_screenview, report_exception, report_event
from bits_helpers.analytics import enable_analytics, disable_analytics
from bits_helpers.args import doParseArgs
from bits_helpers.init import doInit
from bits_helpers.clean import doClean
from bits_helpers.doctor import doDoctor
from bits_helpers.deps import doDeps
from bits_helpers.log import info, debug, logger, error
from bits_helpers.utilities import detectArch
from bits_helpers.build import doBuild
def doMain(args, parser):
# We need to unset BASH_ENV because in certain environments (e.g.
# NERSC) this is used to source a (non -e safe) bashrc, effectively
# breaking aliBuild.
# We set all the locale related environment to C to make sure
# do not get fooled when parsing localized messages.
# We set BITS_ARCHITECTURE so that it's picked up by the external
# command which does the reporting.
if not "architecture" in args:
args.architecture = detectArch()
ENVIRONMENT_OVERRIDES = {
"LANG": "C",
"LANGUAGE": "C",
"LC_ALL": "C",
"LC_COLLATE": "C",
"LC_CTYPE": "C",
"LC_MESSAGES": "C",
"LC_MONETARY": "C",
"LC_NUMERIC": "C",
"LC_TIME": "C",
"GREP_OPTIONS": "",
"BASH_ENV": "",
"BITS_ARCHITECTURE": args.architecture
}
os.environ.update(ENVIRONMENT_OVERRIDES)
report_screenview(args.action)
# Move to the specified working directory before doing anything else
if "chdir" in args:
try:
os.chdir(os.path.expanduser(args.chdir))
debug("Current working directory is %s" % os.getcwd())
except Exception as e:
error("Cannot change to directory \"%s\"." % args.chdir)
error(e.message)
exit(1)
if args.action == "version" or args.action is None:
print("bits version: {version} ({arch})".format(
version=__version__ or "unknown", arch=args.architecture or "unknown"))
sys.exit(0)
if args.action == "doctor":
doDoctor(args, parser)
logger.setLevel(logging.DEBUG if args.debug else logging.INFO)
if args.action == "deps":
sys.exit(0 if doDeps(args, parser) else 1)
if args.action == "clean":
doClean(workDir=args.workDir, architecture=args.architecture, aggressiveCleanup=args.aggressiveCleanup, dryRun=args.dryRun)
exit(0)
# Setup build environment.
if args.action == "init":
doInit(args)
exit(0)
if args.action == "build":
doBuild(args, parser)
sys.exit(0)
if __name__ == "__main__":
args, parser = doParseArgs()
# This is valid for everything
logger.setLevel(logging.DEBUG if args.debug else logging.INFO)
os.environ["BITS_ANALYTICS_ID"] = "UA-77346950-1"
os.environ["BITS_VERSION"] = __version__ or ""
if args.action == "analytics":
if args.state == "off":
disable_analytics()
else:
enable_analytics()
exit(0)
elif args.action == "architecture":
arch = detectArch()
print(arch if arch else "<unknown>")
exit(0)
os.environ["BITS_NO_ANALYTICS"] = "1"
'''
if not decideAnalytics(exists(expanduser("~/.config/bits/disable-analytics")),
exists(expanduser("~/.config/bits/analytics-uuid")),
sys.stdin.isatty(),
askForAnalytics):
os.environ["BITS_NO_ANALYTICS"] = "1"
else:
os.environ["BITS_ANALYTICS_USER_UUID"] = open(expanduser("~/.config/bits/analytics-uuid")).read().strip()
'''
try:
useProfiler = "--profile" in sys.argv
if useProfiler:
print("profiler started")
import cProfile, pstats
from io import StringIO
pr = cProfile.Profile()
pr.enable()
def profiler():
pr.disable()
print("profiler stopped")
s = StringIO()
sortby = 'time'
ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
ps.print_stats()
print(s.getvalue())
atexit.register(profiler)
doMain(args, parser)
except KeyboardInterrupt as e:
info(str(e))
report_event("user", "ctrlc")
exit(1)
except Exception as e:
traceback.print_exc()
report_exception(e)
exit(1)