1
+ #!/usr/bin/env python
2
+ from __future__ import print_function
3
+
4
+ import argparse
5
+ import os
6
+ import subprocess
7
+ import sys
8
+ import tempfile
9
+ import errno
10
+ import platform
11
+ import shutil
12
+
13
+ BUILD_SCRIPT = os .path .dirname (os .path .abspath (__file__ )) + '/build-script.py'
14
+
15
+ def printerr (message ):
16
+ print (message , file = sys .stderr )
17
+
18
+ def note (message ):
19
+ print ("--- %s: note: %s" % (os .path .basename (sys .argv [0 ]), message ))
20
+ sys .stdout .flush ()
21
+
22
+ def fatal_error (message ):
23
+ printerr (message )
24
+ sys .exit (1 )
25
+
26
+ def escapeCmdArg (arg ):
27
+ if '"' in arg or ' ' in arg :
28
+ return '"%s"' % arg .replace ('"' , '\\ "' )
29
+ else :
30
+ return arg
31
+
32
+ def check_call (cmd , env = os .environ ):
33
+ print (' ' .join ([escapeCmdArg (arg ) for arg in cmd ]))
34
+ return subprocess .check_call (cmd , env = env , stderr = subprocess .STDOUT )
35
+
36
+ def build (swiftc_exec , build_dir ):
37
+ check_call ([BUILD_SCRIPT , '--release' , '--swiftc-exec' , swiftc_exec ,
38
+ '--build-dir' , build_dir , '-v' ])
39
+
40
+ def install (swiftc_exec , build_dir , dylib_dir , module_dir ):
41
+ check_call ([BUILD_SCRIPT , '--release' , '--install' , '--swiftc-exec' ,
42
+ swiftc_exec , '--dylib-dir' , dylib_dir , '--swiftmodule-dir' , module_dir ,
43
+ '--build-dir' , build_dir , '-v' ])
44
+
45
+ def main ():
46
+ if not os .geteuid () == 0 :
47
+ fatal_error ("\n !!!!!!!!Run this script with root access!!!!!!!!\n " )
48
+ parser = argparse .ArgumentParser (
49
+ formatter_class = argparse .RawDescriptionHelpFormatter ,
50
+ description = '''
51
+ Build and re-install SwiftSytnax for an existing toolchain.
52
+
53
+ This script calls ./build-script internally to rebuild SwiftSyntax using an
54
+ existing toolchain and install the build artifacts back to the toolchain.
55
+ ''' )
56
+
57
+ basic_group = parser .add_argument_group ('Basic' )
58
+
59
+ basic_group .add_argument ('--toolchain-dir' , default = None , help = '''
60
+ Directory of an existing toolchain.
61
+ ''' )
62
+
63
+ args = parser .parse_args (sys .argv [1 :])
64
+ build_dir = tempfile .mkdtemp ()
65
+ swiftc_exec = args .toolchain_dir + '/usr/bin/swiftc'
66
+ dylib_dir = args .toolchain_dir + '/usr/lib/swift/macosx'
67
+ module_dir = args .toolchain_dir + '/usr/lib/swift/macosx/x86_64'
68
+ print ('Using swiftc: ' + swiftc_exec )
69
+ print ('Using build directory: ' + build_dir )
70
+ build (swiftc_exec = swiftc_exec , build_dir = build_dir )
71
+ install (swiftc_exec = swiftc_exec , build_dir = build_dir , dylib_dir = dylib_dir ,
72
+ module_dir = module_dir )
73
+
74
+ if __name__ == '__main__' :
75
+ main ()
0 commit comments