Improve IsPackageAvailable()

* When adjusting the package name for the secondary architecture,
  it is unclear where exactly in the package name the architecture
  specifier is. To remedy, we try all possible positions until
  we find the package (or there are no other possibilities).
This commit is contained in:
Oliver Tappe 2014-07-24 20:52:40 +02:00
parent bd04aa3772
commit 2ae3c64943
1 changed files with 19 additions and 6 deletions

View File

@ -510,18 +510,31 @@ rule FSplitPackageName packageName
} }
rule IsPackageAvailable package : flags rule IsPackageAvailable packageName : flags
{ {
# for a secondary architecture adjust the package name # for a secondary architecture adjust the package name
if $(TARGET_PACKAGING_ARCH) != $(TARGET_PACKAGING_ARCHS[1]) if $(TARGET_PACKAGING_ARCH) != $(TARGET_PACKAGING_ARCHS[1])
&& ! nameResolved in $(flags) { && ! nameResolved in $(flags) {
local splitName = [ FSplitPackageName $(package) ] ; # The position of the secondary architecture within the package name
splitName = $(splitName[1]) $(TARGET_PACKAGING_ARCH) $(splitName[2-]) ; # is not well defined, so we scan for it starting from the back.
package = $(splitName:J=_) ; local packageNameHead = $(packageName) ;
local packageNameTail = ;
while $(packageNameHead) {
local splitName = [ FSplitPackageName $(packageNameHead) ] ;
splitName = $(splitName[1]) $(TARGET_PACKAGING_ARCH) $(splitName[2])
$(packageNameTail) ;
packageName = $(splitName:J=_) ;
if $(packageName) in $(HAIKU_AVAILABLE_PACKAGES) {
return $(packageName) ;
}
local splitHead = [ Match "(.*)_([^_]*)" : $(packageNameHead) ] ;
packageNameHead = $(splitHead[1]) ;
packageNameTail = $(splitHead[2]) $(packageNameTail) ;
}
} }
if $(package) in $(HAIKU_AVAILABLE_PACKAGES) { if $(packageName) in $(HAIKU_AVAILABLE_PACKAGES) {
return $(package) ; return $(packageName) ;
} }
return ; return ;