@ -408,6 +408,7 @@ sub gen_package_mk() {
my $ src = $ srcpackage { $ srcname } ;
my $ variant_default ;
my @ srcdeps ;
my % deplines = ( '' = > { } ) ;
foreach my $ pkg ( @ { $ src - > { packages } } ) {
next if defined $ pkg - > { vdepends } ;
@ -441,19 +442,23 @@ sub gen_package_mk() {
print "buildtypes-$src->{path} = " . join ( ' ' , @ { $ src - > { buildtypes } } ) . "\n" ;
}
foreach my $ dep ( @ { $ src - > { builddepends } } , map { @ { $ _ - > { depends } } } @ { $ src - > { packages } } ) {
foreach my $ dep ( map { @ { $ _ - > { depends } } } @ { $ src - > { packages } } ) {
$ dep =~ /@/ or do {
$ dep =~ s/\+//g ;
push @ srcdeps , $ dep ;
} ;
}
foreach my $ type ( @ { $ src - > { buildtypes } } ) {
my @ extra_deps ;
my % deplines ;
foreach my $ type ( '' , @ { $ src - > { buildtypes } } ) {
my $ suffix = '' ;
next unless $ src - > { "builddepends/$type" } ;
foreach my $ dep ( @ { $ src - > { "builddepends/$type" } } ) {
my $ suffix = "" ;
$ suffix = "/$type" if $ type ;
next unless $ src - > { "builddepends$suffix" } ;
defined $ deplines { $ suffix } or $ deplines { $ suffix } = { } ;
foreach my $ dep ( @ { $ src - > { "builddepends$suffix" } } ) {
my $ depsuffix = "" ;
my $ deptype = "" ;
my $ condition ;
@ -464,37 +469,26 @@ sub gen_package_mk() {
if ( $ dep =~ /^(.+)\/(.+)/ ) {
$ dep = $ 1 ;
$ deptype = $ 2 ;
$ suffix = "/$2" ;
$ dep suffix = "/$2" ;
}
my $ idx = "" ;
my $ pkg_dep = $ package { $ dep } ;
if ( defined ( $ pkg_dep ) && defined ( $ pkg_dep - > { src } ) ) {
unless ( ! $ deptype || grep { $ _ eq $ deptype } @ { $ pkg_dep - > { src } { buildtypes } } ) {
warn sprintf "WARNING: Makefile '%s' has a %s build dependency on '%s/%s' but '%s' does not implement a '%s' build type\n" ,
$ src - > { makefile } , $ type , $ pkg_dep - > { src } { name } , $ deptype , $ pkg_dep - > { src } { makefile } , $ deptype ;
next ;
}
$ idx = $ pkg_dep - > { src } { path } ;
} elsif ( defined ( $ srcpackage { $ dep } ) ) {
$ idx = $ srcpackage { $ dep } { path } ;
} else {
next if $ srcname . $ suffix eq $ dep . $ depsuffix ;
my $ src_dep = $ srcpackage { $ dep } ;
unless ( defined ( $ src_dep ) && ( ! $ deptype || grep { $ _ eq $ deptype } @ { $ src_dep - > { buildtypes } } ) ) {
warn sprintf "WARNING: Makefile '%s' has a build dependency on '%s%s', which does not exist\n" ,
$ src - > { makefile } , $ dep , $ depsuffix ;
next ;
}
my $ depstr = "\$(curdir)/$idx$suffix/compile" ;
my $ depstr = "\$(curdir)/$src_dep->{path}$depsuffix/compile" ;
my $ depline = get_conditional_dep ( $ condition , $ depstr ) ;
if ( $ depline ) {
$ deplines { $ depline } + + ;
$ deplines { $ suffix } { $ depline } + + ;
}
}
my $ depline = join ( " " , sort keys % deplines ) ;
if ( $ depline ) {
$ line . = "\$(curdir)/$src->{path}/$type/compile += $depline\n" ;
}
}
my $ hasdeps = 0 ;
my % deplines ;
foreach my $ deps ( @ srcdeps ) {
my $ idx ;
my $ condition ;
@ -552,14 +546,16 @@ sub gen_package_mk() {
}
$ depline = get_conditional_dep ( $ condition , $ depstr ) ;
if ( $ depline ) {
$ deplines { $ depline } + + ;
$ deplines { '' } { $ depline } + + ;
}
}
}
}
my $ depline = join ( " " , sort keys % deplines ) ;
if ( $ depline ) {
$ line . = "\$(curdir)/$src->{path}/compile += $depline\n" ;
foreach my $ suffix ( sort keys % deplines ) {
my $ depline = join ( " " , sort keys % { $ deplines { $ suffix } } ) ;
if ( $ depline ) {
$ line . = "\$(curdir)/$src->{path}$suffix/compile += $depline\n" ;
}
}
}