@@ -4,11 +4,15 @@ import os, re
4
4
from os .path import exists , abspath , expanduser
5
5
from glob import glob
6
6
import yaml
7
- from commands import getstatusoutput
7
+ try :
8
+ from commands import getstatusoutput
9
+ except ImportError :
10
+ from subprocess import getstatusoutput
8
11
import logging
9
12
from alibuild_helpers .log import debug , error , banner , info , success , warning
10
13
from alibuild_helpers .log import logger_handler , logger , LogFormatter , ProgressPrint
11
- from alibuild_helpers .utilities import getPackageList , format , detectArch
14
+ from alibuild_helpers .utilities import getPackageList , format , detectArch , parseDefaults , readDefaults
15
+ from alibuild_helpers .utilities import dockerStatusOutput
12
16
import subprocess
13
17
14
18
def execute (command ):
@@ -27,12 +31,12 @@ def prunePaths(workDir):
27
31
workDirEscaped = re .escape ("%s" % workDir ) + "[^:]*:?"
28
32
os .environ [x ] = re .sub (workDirEscaped , "" , os .environ [x ])
29
33
30
- def checkPreferSystem (spec , cmd , homebrew_replacement ):
34
+ def checkPreferSystem (spec , cmd , homebrew_replacement , dockerImage ):
31
35
if cmd == "false" :
32
36
debug ("Package %s can only be managed via alibuild." % spec ["package" ])
33
37
return (1 , "" )
34
38
cmd = homebrew_replacement + cmd
35
- err , out = execute (cmd )
39
+ err , out = dockerStatusOutput (cmd , dockerImage = dockerImage , executor = execute )
36
40
if not err :
37
41
success ("Package %s will be picked up from the system." % spec ["package" ])
38
42
for x in out .split ("\n " ):
@@ -49,12 +53,12 @@ def checkPreferSystem(spec, cmd, homebrew_replacement):
49
53
error = "\n " .join (["%s: %s" % (spec ["package" ],x ) for x in out .split ("\n " )])))
50
54
return (err , "" )
51
55
52
- def checkRequirements (spec , cmd , homebrew_replacement ):
56
+ def checkRequirements (spec , cmd , homebrew_replacement , dockerImage ):
53
57
if cmd == "false" :
54
58
debug ("Package %s is not a system requirement." % spec ["package" ])
55
59
return (0 , "" )
56
60
cmd = homebrew_replacement + cmd
57
- err , out = execute (cmd )
61
+ err , out = dockerStatusOutput (cmd , dockerImage = dockerImage , executor = execute )
58
62
if not err :
59
63
success ("Required package %s will be picked up from the system." % spec ["package" ])
60
64
debug (cmd )
@@ -92,16 +96,29 @@ if __name__ == "__main__":
92
96
parser .add_argument ("-a" , "--architecture" , help = "force architecture" ,
93
97
dest = "architecture" , default = detectArch ())
94
98
parser .add_argument ("-c" , "--config" , help = "path to alidist" ,
95
- dest = "config " , default = "alidist" )
99
+ dest = "configDir " , default = "alidist" )
96
100
parser .add_argument ("-w" , "--work-dir" , help = "path to work dir" ,
97
101
dest = "workDir" , default = "workDir" )
98
102
parser .add_argument ("-d" , "--debug" , help = "Show also successful tests." ,
99
103
dest = "debug" , action = "store_true" , default = False )
104
+ parser .add_argument ("--defaults" , default = "release" ,
105
+ dest = "defaults" , help = "Specify default to use" )
106
+ parser .add_argument ("--disable" , dest = "disable" , default = [],
107
+ metavar = "PACKAGE" , action = "append" ,
108
+ help = "Do not build PACKAGE and all its (unique) dependencies." )
109
+ parser .add_argument ("--always-prefer-system" , dest = "preferSystem" , default = False ,
110
+ action = "store_true" , help = "Always use system packages when compatible" )
111
+ parser .add_argument ("--no-system" , dest = "noSystem" , default = False ,
112
+ action = "store_true" , help = "Never use system packages" )
100
113
parser .add_argument ("packages" , nargs = "+" , help = "Package to test" ,
101
114
default = [])
115
+ parser .add_argument ("--docker" , dest = "docker" , action = "store_true" , default = False )
116
+ parser .add_argument ("--docker-image" , dest = "dockerImage" ,
117
+ help = "Image to use in case you build with docker (implies --docker-image)" )
118
+
102
119
args = parser .parse_args ()
103
- if not exists (args .config ):
104
- parser .error ("Wrong path to alidist specified: %s" % args .config )
120
+ if not exists (args .configDir ):
121
+ parser .error ("Wrong path to alidist specified: %s" % args .configDir )
105
122
106
123
prunePaths (abspath (args .workDir ))
107
124
@@ -117,6 +134,11 @@ if __name__ == "__main__":
117
134
if err :
118
135
homebrew_replacement = "brew() { true; }; "
119
136
137
+
138
+ dockerImage = args .dockerImage if "dockerImage" in args else ""
139
+ if args .docker and not dockerImage :
140
+ dockerImage = "alisw/%s-builder" % args .architecture .split ("_" )[0 ]
141
+
120
142
logger .setLevel (logging .BANNER )
121
143
if args .debug :
122
144
logger .setLevel (logging .DEBUG )
@@ -125,29 +147,36 @@ if __name__ == "__main__":
125
147
packages = []
126
148
exitcode = 0
127
149
for p in args .packages :
128
- path = "%s/%s.sh" % (args .config , p .lower ())
150
+ path = "%s/%s.sh" % (args .configDir , p .lower ())
129
151
if not exists (path ):
130
152
error ("Cannot find recipe %s for package %s." % (path , p ))
131
153
exitcode = 1
132
154
continue
133
155
packages .append (p )
134
-
135
156
systemInfo ()
136
157
137
158
specs = {}
138
159
def unreachable ():
139
160
assert (False )
161
+ defaultsReader = lambda : readDefaults (args .configDir , args .defaults , parser .error )
162
+ (err , overrides , taps ) = parseDefaults (args .disable , defaultsReader , info )
163
+ if err :
164
+ error (err )
165
+ exit (1 )
140
166
(fromSystem , own , failed ) = getPackageList (packages = packages ,
141
167
specs = specs ,
142
- configDir = args .config ,
143
- preferSystem = False ,
144
- noSystem = False ,
168
+ configDir = args .configDir ,
169
+ preferSystem = args . preferSystem ,
170
+ noSystem = args . noSystem ,
145
171
architecture = args .architecture ,
146
- disable = [] ,
147
- defaults = "release" ,
172
+ disable = args . disable ,
173
+ defaults = args . defaults ,
148
174
dieOnError = lambda x , y : unreachable ,
149
- performPreferCheck = lambda pkg , cmd : checkPreferSystem (pkg , cmd , homebrew_replacement ),
150
- performRequirementCheck = lambda pkg , cmd : checkRequirements (pkg , cmd , homebrew_replacement ))
175
+ performPreferCheck = lambda pkg , cmd : checkPreferSystem (pkg , cmd , homebrew_replacement , dockerImage ),
176
+ performRequirementCheck = lambda pkg , cmd : checkRequirements (pkg , cmd , homebrew_replacement , dockerImage ),
177
+ overrides = overrides ,
178
+ taps = taps ,
179
+ log = info )
151
180
152
181
if fromSystem :
153
182
banner ("The following packages will be picked up from the system:\n \n - " +
0 commit comments