Skip to content

Commit 0299931

Browse files
authored
Allowing enabling dependencies via defaults (#901)
1 parent 1091f6f commit 0299931

File tree

3 files changed

+36
-13
lines changed

3 files changed

+36
-13
lines changed

alibuild_helpers/utilities.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -261,16 +261,24 @@ def detectArch():
261261
except:
262262
return doDetectArch(hasOsRelease, osReleaseLines, ["unknown", "", ""], "", "")
263263

264-
def filterByArchitecture(arch, requires):
264+
def filterByArchitectureDefaults(arch, defaults, requires):
265265
for r in requires:
266266
require, matcher = ":" in r and r.split(":", 1) or (r, ".*")
267+
if matcher.startswith("defaults="):
268+
wanted = matcher[len("defaults="):]
269+
if re.match(wanted, defaults):
270+
yield require
267271
if re.match(matcher, arch):
268272
yield require
269273

270-
def disabledByArchitecture(arch, requires):
274+
def disabledByArchitectureDefaults(arch, defaults, requires):
271275
for r in requires:
272276
require, matcher = ":" in r and r.split(":", 1) or (r, ".*")
273-
if not re.match(matcher, arch):
277+
if matcher.startswith("defaults="):
278+
wanted = matcher[len("defaults="):]
279+
if not re.match(wanted, defaults):
280+
yield require
281+
elif not re.match(matcher, arch):
274282
yield require
275283

276284
def readDefaults(configDir, defaults, error, architecture):
@@ -543,10 +551,10 @@ def getPackageList(packages, specs, configDir, preferSystem, noSystem,
543551
validDefaults = None # no valid default works for all current packages
544552

545553
# For the moment we treat build_requires just as requires.
546-
fn = lambda what: disabledByArchitecture(architecture, spec.get(what, []))
554+
fn = lambda what: disabledByArchitectureDefaults(architecture, defaults, spec.get(what, []))
547555
spec["disabled"] += [x for x in fn("requires")]
548556
spec["disabled"] += [x for x in fn("build_requires")]
549-
fn = lambda what: filterByArchitecture(architecture, spec.get(what, []))
557+
fn = lambda what: filterByArchitectureDefaults(architecture, defaults, spec.get(what, []))
550558
spec["requires"] = [x for x in fn("requires") if not x in disable]
551559
spec["build_requires"] = [x for x in fn("build_requires") if not x in disable]
552560
if spec["package"] != "defaults-release":

docs/docs/reference.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,10 @@ The following entries are optional in the header:
130130

131131
The specified dependencies will be built before building the given package.
132132
You can specify platform-specific dependencies by appending `:<regexp>` to
133-
the dependency name. Such a regular expression will be matched against the
133+
the dependency name. Similarly, you can specify build default specific dependencies
134+
by appending `:defaults=<regex>`.
135+
136+
Such a regular expression will be matched against the
134137
architecture provided via `--architecture`, and if it does not match, the
135138
requirement will not be included. For instance:
136139

tests/test_utilities.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# Assuming you are using the mock library to ... mock things
66
from unittest.mock import patch
77

8-
from alibuild_helpers.utilities import doDetectArch, filterByArchitecture
8+
from alibuild_helpers.utilities import doDetectArch, filterByArchitectureDefaults, disabledByArchitectureDefaults
99
from alibuild_helpers.utilities import Hasher
1010
from alibuild_helpers.utilities import asList
1111
from alibuild_helpers.utilities import prunePaths
@@ -175,12 +175,24 @@ def test_asList(self):
175175
self.assertEqual(asList(None), [None])
176176

177177
def test_filterByArchitecture(self):
178-
self.assertEqual(["AliRoot"], list(filterByArchitecture("osx_x86-64", ["AliRoot"])))
179-
self.assertEqual([], list(filterByArchitecture("osx_x86-64", ["AliRoot:(?!osx)"])))
180-
self.assertEqual(["GCC"], list(filterByArchitecture("osx_x86-64", ["AliRoot:(?!osx)", "GCC"])))
181-
self.assertEqual(["AliRoot", "GCC"], list(filterByArchitecture("osx_x86-64", ["AliRoot:(?!slc6)", "GCC"])))
182-
self.assertEqual(["GCC"], list(filterByArchitecture("osx_x86-64", ["AliRoot:slc6", "GCC:osx"])))
183-
self.assertEqual([], list(filterByArchitecture("osx_x86-64", [])))
178+
self.assertEqual(["AliRoot"], list(filterByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot"])))
179+
self.assertEqual([], list(filterByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:(?!osx)"])))
180+
self.assertEqual(["GCC"], list(filterByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:(?!osx)", "GCC"])))
181+
self.assertEqual(["AliRoot", "GCC"], list(filterByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:(?!slc6)", "GCC"])))
182+
self.assertEqual(["GCC"], list(filterByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:slc6", "GCC:osx"])))
183+
self.assertEqual([], list(filterByArchitectureDefaults("osx_x86-64", "ali", [])))
184+
self.assertEqual(["GCC"], list(filterByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:slc6", "GCC:defaults=ali"])))
185+
self.assertEqual([], list(filterByArchitectureDefaults("osx_x86-64", "o2", ["AliRoot:slc6", "GCC:defaults=ali"])))
186+
187+
def test_disabledByArchitecture(self):
188+
self.assertEqual([], list(disabledByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot"])))
189+
self.assertEqual(["AliRoot"], list(disabledByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:(?!osx)"])))
190+
self.assertEqual(["AliRoot"], list(disabledByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:(?!osx)", "GCC"])))
191+
self.assertEqual([], list(disabledByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:(?!slc6)", "GCC"])))
192+
self.assertEqual(["AliRoot"], list(disabledByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:slc6", "GCC:osx"])))
193+
self.assertEqual([], list(disabledByArchitectureDefaults("osx_x86-64", "ali", [])))
194+
self.assertEqual(["AliRoot"], list(disabledByArchitectureDefaults("osx_x86-64", "ali", ["AliRoot:slc6", "GCC:defaults=ali"])))
195+
self.assertEqual(["AliRoot", "GCC"], list(disabledByArchitectureDefaults("osx_x86-64", "o2", ["AliRoot:slc6", "GCC:defaults=ali"])))
184196

185197
def test_prunePaths(self):
186198
fake_env = {

0 commit comments

Comments
 (0)