-
Notifications
You must be signed in to change notification settings - Fork 47
/
aliBuild
executable file
·138 lines (122 loc) · 4.25 KB
/
aliBuild
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
#!/usr/bin/env python3
from __future__ import print_function
import os
import sys
import atexit
import logging
import traceback
from os.path import exists, expanduser
from alibuild_helpers import __version__
from alibuild_helpers.analytics import decideAnalytics, askForAnalytics, report_screenview, report_exception, report_event
from alibuild_helpers.analytics import enable_analytics, disable_analytics
from alibuild_helpers.args import doParseArgs
from alibuild_helpers.init import doInit
from alibuild_helpers.clean import doClean
from alibuild_helpers.doctor import doDoctor
from alibuild_helpers.deps import doDeps
from alibuild_helpers.log import info, debug, logger, error
from alibuild_helpers.utilities import detectArch
from alibuild_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 ALIBUILD_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": "",
"ALIBUILD_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 == None:
print("aliBuild 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["ALIBUILD_ANALYTICS_ID"] = "UA-77346950-1"
os.environ["ALIBUILD_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)
if not decideAnalytics(exists(expanduser("~/.config/alibuild/disable-analytics")),
exists(expanduser("~/.config/alibuild/analytics-uuid")),
sys.stdin.isatty(),
askForAnalytics):
os.environ["ALIBUILD_NO_ANALYTICS"] = "1"
else:
os.environ["ALIBUILD_ANALYTICS_USER_UUID"] = open(expanduser("~/.config/alibuild/analytics-uuid")).read().strip()
try:
profiler = "--profile" in sys.argv
if profiler:
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)