@@ -129,12 +129,24 @@ def _load_preset_files_impl(preset_file_names, substitutions={}):
129
129
def _get_preset_options_impl (config , substitutions , preset_name ):
130
130
section_name = _PRESET_PREFIX + preset_name
131
131
if section_name not in config .sections ():
132
- return (None , None )
132
+ return (None , None , None )
133
133
134
134
build_script_opts = []
135
135
build_script_impl_opts = []
136
+ missing_opts = []
136
137
dash_dash_seen = False
137
- for o , a in config .items (section_name ):
138
+
139
+ for o in config .options (section_name ):
140
+ try :
141
+ a = config .get (section_name , o )
142
+ except ConfigParser .InterpolationMissingOptionError , e :
143
+ # e.reference contains the correctly formatted option
144
+ missing_opts .append (e .reference )
145
+ continue
146
+
147
+ if not a :
148
+ a = ""
149
+
138
150
if o in substitutions :
139
151
continue
140
152
@@ -143,10 +155,13 @@ def _get_preset_options_impl(config, substitutions, preset_name):
143
155
# Split on newlines and filter out empty lines.
144
156
mixins = filter (None , [m .strip () for m in a .splitlines ()])
145
157
for mixin in mixins :
146
- (base_build_script_opts , base_build_script_impl_opts ) = \
158
+ (base_build_script_opts , \
159
+ base_build_script_impl_opts , \
160
+ base_missing_opts ) = \
147
161
_get_preset_options_impl (config , substitutions , mixin )
148
162
build_script_opts += base_build_script_opts
149
163
build_script_impl_opts += base_build_script_impl_opts
164
+ missing_opts += base_missing_opts
150
165
elif o == "dash-dash" :
151
166
dash_dash_seen = True
152
167
elif a == "" :
@@ -159,17 +174,22 @@ def _get_preset_options_impl(config, substitutions, preset_name):
159
174
build_script_opts .append (opt )
160
175
else :
161
176
build_script_impl_opts .append (opt )
162
- return (build_script_opts , build_script_impl_opts )
177
+
178
+ return (build_script_opts , build_script_impl_opts , missing_opts )
163
179
164
180
165
181
def get_preset_options (substitutions , preset_file_names , preset_name ):
166
182
config = _load_preset_files_impl (preset_file_names , substitutions )
167
183
168
- (build_script_opts , build_script_impl_opts ) = \
184
+ (build_script_opts , build_script_impl_opts , missing_opts ) = \
169
185
_get_preset_options_impl (config , substitutions , preset_name )
170
- if build_script_opts is None :
186
+ if not build_script_opts :
171
187
print_with_argv0 ("preset '" + preset_name + "' not found" )
172
188
sys .exit (1 )
189
+ if missing_opts :
190
+ print_with_argv0 ("missing option(s) for preset '" + preset_name + \
191
+ "': " + ", " .join (missing_opts ))
192
+ sys .exit (1 )
173
193
174
194
return build_script_opts + [ "--" ] + build_script_impl_opts
175
195
@@ -194,4 +214,3 @@ def __enter__(self):
194
214
195
215
def __exit__ (self , type , value , traceback ):
196
216
os .chdir (self .old_cwd )
197
-
0 commit comments