@ -399,18 +399,56 @@ sub get_conditional_dep($$) {
}
sub gen_package_mk () {
my % conf ;
my % dep ;
my $ line ;
parse_package_metadata ( $ ARGV [ 0 ] ) or exit 1 ;
foreach my $ srcname ( sort { uc ( $ a ) cmp uc ( $ b ) } keys % srcpackage ) {
my $ src = $ srcpackage { $ srcname } ;
my $ variant_default ;
my @ srcdeps ;
my % deplines = ( '' = > { } ) ;
foreach my $ pkg ( @ { $ src - > { packages } } ) {
foreach my $ dep ( @ { $ pkg - > { depends } } ) {
next if ( $ dep =~ /@/ ) ;
my $ condition ;
$ dep =~ s/\+//g ;
if ( $ dep =~ /^(.+):(.+)/ ) {
$ condition = $ 1 ;
$ dep = $ 2 ;
}
my $ pkg_dep = $ package { $ dep } ;
unless ( defined $ pkg_dep ) {
warn sprintf "WARNING: Makefile '%s' has a dependency on '%s', which does not exist\n" ,
$ src - > { makefile } , $ dep ;
next ;
}
unless ( $ pkg_dep - > { vdepends } ) {
next if $ srcname eq $ pkg_dep - > { src } { name } ;
my $ depstr = "\$(curdir)/$pkg_dep->{src}{path}/compile" ;
my $ depline = get_conditional_dep ( $ condition , $ depstr ) ;
if ( $ depline ) {
$ deplines { '' } { $ depline } + + ;
}
next ;
}
foreach my $ vdep ( @ { $ pkg_dep - > { vdepends } } ) {
my $ pkg_vdep = $ package { $ vdep } ;
next if $ srcname eq $ pkg_vdep - > { src } { name } ;
my $ depstr = "\$(if \$(CONFIG_PACKAGE_$vdep),\$(curdir)/$pkg_vdep->{src}{path}/compile)" ;
my $ depline = get_conditional_dep ( $ condition , $ depstr ) ;
if ( $ depline ) {
$ deplines { '' } { $ depline } + + ;
}
}
}
next if defined $ pkg - > { vdepends } ;
my $ config = '' ;
@ -442,12 +480,6 @@ sub gen_package_mk() {
print "buildtypes-$src->{path} = " . join ( ' ' , @ { $ src - > { buildtypes } } ) . "\n" ;
}
foreach my $ dep ( map { @ { $ _ - > { depends } } } @ { $ src - > { packages } } ) {
$ dep =~ /@/ or do {
$ dep =~ s/\+//g ;
push @ srcdeps , $ dep ;
} ;
}
foreach my $ type ( '' , @ { $ src - > { buildtypes } } ) {
my $ suffix = '' ;
@ -489,68 +521,6 @@ sub gen_package_mk() {
}
}
foreach my $ deps ( @ srcdeps ) {
my $ idx ;
my $ condition ;
my $ prefix = "" ;
my $ suffix = "" ;
my $ deptype = "" ;
if ( $ deps =~ /^(.+):(.+)/ ) {
$ condition = $ 1 ;
$ deps = $ 2 ;
}
if ( $ deps =~ /^(.+)\/(.+)/ ) {
$ deps = $ 1 ;
$ deptype = $ 2 ;
$ suffix = "/$2" ;
}
my $ pkg_dep = $ package { $ deps } ;
my @ deps ;
if ( $ pkg_dep - > { vdepends } ) {
@ deps = @ { $ pkg_dep - > { vdepends } } ;
} else {
@ deps = ( $ deps ) ;
}
foreach my $ dep ( @ deps ) {
$ pkg_dep = $ package { $ deps } ;
if ( defined $ pkg_dep - > { src } ) {
unless ( ! $ deptype || grep { $ _ eq $ deptype } @ { $ pkg_dep - > { src } { buildtypes } } ) {
warn sprintf "WARNING: Makefile '%s' has a build dependency on '%s/%s' but '%s' does not implement a '%s' build type\n" ,
$ src - > { makefile } , $ pkg_dep - > { src } { name } , $ deptype , $ pkg_dep - > { src } { makefile } , $ deptype ;
next ;
}
$ idx = $ pkg_dep - > { src } { path } ;
} elsif ( defined ( $ srcpackage { $ dep } ) ) {
$ idx = $ srcpackage { $ dep } { path } ;
}
if ( $ idx ) {
$ idx . = $ suffix ;
my $ depline ;
next if $ srcname eq $ pkg_dep - > { src } { name } . $ suffix ;
next if $ dep { $ condition . ":" . $ srcname . "->" . $ idx } ;
next if $ dep { $ srcname . "->($dep)" . $ idx } and $ pkg_dep - > { vdepends } ;
my $ depstr ;
if ( $ pkg_dep - > { vdepends } ) {
$ depstr = "\$(if \$(CONFIG_PACKAGE_$dep),\$(curdir)/$idx/compile)" ;
$ dep { $ srcname . "->($dep)" . $ idx } = 1 ;
} else {
$ depstr = "\$(curdir)/$idx/compile" ;
$ dep { $ srcname . "->" . $ idx } = 1 ;
}
$ depline = get_conditional_dep ( $ condition , $ depstr ) ;
if ( $ depline ) {
$ deplines { '' } { $ depline } + + ;
}
}
}
}
foreach my $ suffix ( sort keys % deplines ) {
my $ depline = join ( " " , sort keys % { $ deplines { $ suffix } } ) ;
if ( $ depline ) {