Changeset 8973


Ignore:
Timestamp:
2007-09-23T04:39:01+02:00 (10 years ago)
Author:
nbd
Message:

add initial version of a package feeds management script

Location:
trunk
Files:
3 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/scan.mk

    r8694 r8973  
    22TMP_DIR:=$(TOPDIR)/tmp 
    33 
    4 all: tmp/.$(SCAN_TARGET) 
     4all: $(TMP_DIR)/.$(SCAN_TARGET) 
    55 
    66include $(TOPDIR)/include/host.mk 
     
    99SCAN_NAME ?= package 
    1010SCAN_DIR ?= package 
    11 TARGET_STAMP:=tmp/info/.files-$(SCAN_TARGET).stamp 
    12 FILELIST:=tmp/info/.files-$(SCAN_TARGET)-$(SCAN_COOKIE) 
     11TARGET_STAMP:=$(TMP_DIR)/info/.files-$(SCAN_TARGET).stamp 
     12FILELIST:=$(TMP_DIR)/info/.files-$(SCAN_TARGET)-$(SCAN_COOKIE) 
    1313 
    1414ifeq ($(IS_TTY),1) 
     
    2323 
    2424define PackageDir 
    25   tmp/.$(SCAN_TARGET): tmp/info/.$(SCAN_TARGET)-$(1) 
    26   tmp/info/.$(SCAN_TARGET)-$(1): $(SCAN_DIR)/$(2)/Makefile $(SCAN_STAMP) $(foreach DEP,$(DEPS_$(SCAN_DIR)/$(1)/Makefile) $(SCAN_DEPS),$(wildcard $(if $(filter /%,$(DEP)),$(DEP),$(SCAN_DIR)/$(1)/$(DEP)))) 
     25  $(TMP_DIR)/.$(SCAN_TARGET): $(TMP_DIR)/info/.$(SCAN_TARGET)-$(1) 
     26  $(TMP_DIR)/info/.$(SCAN_TARGET)-$(1): $(SCAN_DIR)/$(2)/Makefile $(SCAN_STAMP) $(foreach DEP,$(DEPS_$(SCAN_DIR)/$(1)/Makefile) $(SCAN_DEPS),$(wildcard $(if $(filter /%,$(DEP)),$(DEP),$(SCAN_DIR)/$(1)/$(DEP)))) 
    2727        { \ 
    2828                $$(call progress,Collecting $(SCAN_NAME) info: $(SCAN_DIR)/$(2)) \ 
     
    3434 
    3535$(FILELIST): 
    36         rm -f tmp/info/.files-$(SCAN_TARGET)-* 
     36        rm -f $(TMP_DIR)/info/.files-$(SCAN_TARGET)-* 
    3737        $(call FIND_L, $(SCAN_DIR)) $(SCAN_EXTRA) -mindepth 1 $(if $(SCAN_DEPTH),-maxdepth $(SCAN_DEPTH)) -name Makefile | xargs grep -HE 'call (Build/DefaultTargets|Build(Package|Target)|.+Package)' | sed -e 's#^$(SCAN_DIR)/##' -e 's#/Makefile:.*##' | uniq > $@ 
    3838 
    39 tmp/info/.files-$(SCAN_TARGET).mk: $(FILELIST) 
     39$(TMP_DIR)/info/.files-$(SCAN_TARGET).mk: $(FILELIST) 
    4040        ( \ 
    4141                cat $< | awk '{print "$(SCAN_DIR)/" $$0 "/Makefile" }' | xargs grep -HE '^ *SCAN_DEPS *= *' | awk -F: '{ gsub(/^.*DEPS *= */, "", $$2); print "DEPS_" $$1 "=" $$2 }'; \ 
     
    4848        ) > $@ 
    4949 
    50 -include tmp/info/.files-$(SCAN_TARGET).mk 
     50-include $(TMP_DIR)/info/.files-$(SCAN_TARGET).mk 
    5151 
    5252$(TARGET_STAMP): 
     
    6161        ) 
    6262 
    63 tmp/.$(SCAN_TARGET): $(TARGET_STAMP) $(SCAN_STAMP) 
     63$(TMP_DIR)/.$(SCAN_TARGET): $(TARGET_STAMP) $(SCAN_STAMP) 
    6464        $(call progress,Collecting $(SCAN_NAME) info: merging...) 
    65         cat $(FILELIST) | awk '{gsub(/\//, "_", $$0);print "tmp/info/.$(SCAN_TARGET)-" $$0}' | xargs cat > $@ 
     65        cat $(FILELIST) | awk '{gsub(/\//, "_", $$0);print "$(TMP_DIR)/info/.$(SCAN_TARGET)-" $$0}' | xargs cat > $@ 
    6666        $(call progress,Collecting $(SCAN_NAME) info: done) 
    6767        echo 
  • trunk/include/toplevel.mk

    r8694 r8973  
    3131export SCAN_COOKIE 
    3232 
     33prepare-mk: FORCE ; 
     34 
    3335prepare-tmpinfo: FORCE 
    3436        mkdir -p tmp/info 
     
    3739        for type in package target; do \ 
    3840                f=tmp/.$${type}info; t=tmp/.config-$${type}.in; \ 
    39                 [ "$$t" -nt "$$f" ] || ./scripts/metadata.pl $${type}_config < "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \ 
     41                [ "$$t" -nt "$$f" ] || ./scripts/metadata.pl $${type}_config "$$f" > "$$t" || { rm -f "$$t"; echo "Failed to build $$t"; false; break; }; \ 
    4042        done 
    41         ./scripts/metadata.pl package_mk < tmp/.packageinfo > tmp/.packagedeps || { rm -f tmp/.packagedeps; false; } 
     43        ./scripts/metadata.pl package_mk tmp/.packageinfo > tmp/.packagedeps || { rm -f tmp/.packagedeps; false; } 
    4244        touch $(TOPDIR)/tmp/.build 
    4345 
     
    6567 
    6668oldconfig: scripts/config/conf prepare-tmpinfo FORCE 
    67         $< -o Config.in 
     69        $< -$(if $(CONFDEFAULT),$(CONFDEFAULT),o) Config.in 
    6870 
    6971menuconfig: scripts/config/mconf prepare-tmpinfo FORCE 
  • trunk/package

    • Property svn:ignore
      •  

        old new  
        11.* 
         2feeds 
        23net 
        34multimedia 
  • trunk/scripts/config/conf.c

    r6502 r8973  
    580580        case ask_all: 
    581581        case ask_new: 
    582                 conf_read(NULL); 
    583                 break; 
    584582        case set_no: 
    585583        case set_mod: 
    586584        case set_yes: 
    587585        case set_random: 
    588                 name = getenv("KCONFIG_ALLCONFIG"); 
    589                 if (name && !stat(name, &tmpstat)) { 
    590                         conf_read_simple(name); 
    591                         break; 
    592                 } 
    593                 switch (input_mode) { 
    594                 case set_no:     name = "allno.config"; break; 
    595                 case set_mod:    name = "allmod.config"; break; 
    596                 case set_yes:    name = "allyes.config"; break; 
    597                 case set_random: name = "allrandom.config"; break; 
    598                 default: break; 
    599                 } 
    600                 if (!stat(name, &tmpstat)) 
    601                         conf_read_simple(name); 
    602                 else if (!stat("all.config", &tmpstat)) 
    603                         conf_read_simple("all.config"); 
     586                conf_read(NULL); 
    604587                break; 
    605588        default: 
  • trunk/scripts/metadata.pl

    r8921 r8973  
    11#!/usr/bin/perl 
     2use FindBin; 
     3use lib "$FindBin::Bin"; 
    24use strict; 
    3 my %preconfig; 
    4 my %package; 
    5 my %srcpackage; 
    6 my %category; 
    7 my %subdir; 
     5use metadata; 
     6 
    87my %board; 
    9  
    10 sub get_multiline { 
    11         my $prefix = shift; 
    12         my $str; 
    13         while (<>) { 
    14                 last if /^@@/; 
    15                 s/^\s*//g; 
    16                 $str .= (($_ and $prefix) ? $prefix . $_ : $_); 
    17         } 
    18  
    19         return $str; 
    20 } 
    218 
    229sub confstr($) { 
     
    2714 
    2815sub parse_target_metadata() { 
    29         my ($target, @target, $profile);         
    30         while (<>) { 
     16        my $file = shift @ARGV; 
     17        my ($target, @target, $profile); 
     18        open FILE, "<$file" or do { 
     19                warn "Can't open file '$file': $!\n"; 
     20                return; 
     21        }; 
     22        while (<FILE>) { 
    3123                chomp; 
    3224                /^Target:\s*(.+)\s*$/ and do { 
     
    4739                /^Target-Arch:\s*(.+)\s*$/ and $target->{arch} = $1; 
    4840                /^Target-Features:\s*(.+)\s*$/ and $target->{features} = [ split(/\s+/, $1) ]; 
    49                 /^Target-Description:/ and $target->{desc} = get_multiline(); 
     41                /^Target-Description:/ and $target->{desc} = get_multiline(*FILE); 
    5042                /^Linux-Version:\s*(.+)\s*$/ and $target->{version} = $1; 
    5143                /^Linux-Release:\s*(.+)\s*$/ and $target->{release} = $1; 
     
    6254                /^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1; 
    6355                /^Target-Profile-Packages:\s*(.*)\s*$/ and $profile->{packages} = [ split(/\s+/, $1) ]; 
    64                 /^Target-Profile-Description:\s*(.*)\s*/ and $profile->{desc} = get_multiline(); 
    65                 /^Target-Profile-Config:/ and $profile->{config} = get_multiline("\t"); 
     56                /^Target-Profile-Description:\s*(.*)\s*/ and $profile->{desc} = get_multiline(*FILE); 
     57                /^Target-Profile-Config:/ and $profile->{config} = get_multiline(*FILE, "\t"); 
    6658                /^Target-Profile-Kconfig:/ and $profile->{kconfig} = 1; 
    6759        } 
     60        close FILE; 
    6861        foreach my $target (@target) { 
    6962                @{$target->{profiles}} > 0 or $target->{profiles} = [ 
     
    7669        } 
    7770        return @target; 
    78 } 
    79  
    80 sub parse_package_metadata() { 
    81         my $pkg; 
    82         my $makefile; 
    83         my $preconfig; 
    84         my $subdir; 
    85         my $src; 
    86         while (<>) { 
    87                 chomp; 
    88                 /^Source-Makefile: \s*((.+\/)([^\/]+)\/Makefile)\s*$/ and do { 
    89                         $makefile = $1; 
    90                         $subdir = $2; 
    91                         $src = $3; 
    92                         $subdir =~ s/^package\///; 
    93                         $subdir{$src} = $subdir; 
    94                         $srcpackage{$src} = []; 
    95                         undef $pkg; 
    96                 }; 
    97                 /^Package:\s*(.+?)\s*$/ and do { 
    98                         $pkg = {}; 
    99                         $pkg->{src} = $src; 
    100                         $pkg->{makefile} = $makefile; 
    101                         $pkg->{name} = $1; 
    102                         $pkg->{default} = "m if ALL"; 
    103                         $pkg->{depends} = []; 
    104                         $pkg->{builddepends} = []; 
    105                         $pkg->{subdir} = $subdir; 
    106                         $package{$1} = $pkg; 
    107                         push @{$srcpackage{$src}}, $pkg; 
    108                 }; 
    109                 /^Version: \s*(.+)\s*$/ and $pkg->{version} = $1; 
    110                 /^Title: \s*(.+)\s*$/ and $pkg->{title} = $1; 
    111                 /^Menu: \s*(.+)\s*$/ and $pkg->{menu} = $1; 
    112                 /^Submenu: \s*(.+)\s*$/ and $pkg->{submenu} = $1; 
    113                 /^Submenu-Depends: \s*(.+)\s*$/ and $pkg->{submenudep} = $1; 
    114                 /^Default: \s*(.+)\s*$/ and $pkg->{default} = $1; 
    115                 /^Provides: \s*(.+)\s*$/ and do { 
    116                         my @vpkg = split /\s+/, $1; 
    117                         foreach my $vpkg (@vpkg) { 
    118                                 $package{$vpkg} or $package{$vpkg} = { vdepends => [] }; 
    119                                 push @{$package{$vpkg}->{vdepends}}, $pkg->{name}; 
    120                         } 
    121                 }; 
    122                 /^Depends: \s*(.+)\s*$/ and $pkg->{depends} = [ split /\s+/, $1 ]; 
    123                 /^Build-Depends: \s*(.+)\s*$/ and $pkg->{builddepends} = [ split /\s+/, $1 ]; 
    124                 /^Category: \s*(.+)\s*$/ and do { 
    125                         $pkg->{category} = $1; 
    126                         defined $category{$1} or $category{$1} = {}; 
    127                         defined $category{$1}->{$src} or $category{$1}->{$src} = []; 
    128                         push @{$category{$1}->{$src}}, $pkg; 
    129                 }; 
    130                 /^Description: \s*(.*)\s*$/ and $pkg->{description} = "\t\t $1\n". get_multiline("\t\t "); 
    131                 /^Config: \s*(.*)\s*$/ and $pkg->{config} = "$1\n".get_multiline(); 
    132                 /^Prereq-Check:/ and $pkg->{prereq} = 1; 
    133                 /^Preconfig:\s*(.+)\s*$/ and do { 
    134                         my $pkgname = $pkg->{name}; 
    135                         $preconfig{$pkgname} or $preconfig{$pkgname} = {}; 
    136                         if (exists $preconfig{$pkgname}->{$1}) { 
    137                                 $preconfig = $preconfig{$pkgname}->{$1}; 
    138                         } else { 
    139                                 $preconfig = { 
    140                                         id => $1 
    141                                 }; 
    142                                 $preconfig{$pkgname}->{$1} = $preconfig; 
    143                         } 
    144                 }; 
    145                 /^Preconfig-Type:\s*(.*?)\s*$/ and $preconfig->{type} = $1; 
    146                 /^Preconfig-Label:\s*(.*?)\s*$/ and $preconfig->{label} = $1; 
    147                 /^Preconfig-Default:\s*(.*?)\s*$/ and $preconfig->{default} = $1; 
    148         } 
    149         return %category; 
    15071} 
    15172 
     
    319240} 
    320241 
    321  
     242my %dep_check; 
     243sub __find_package_dep($$) { 
     244        my $pkg = shift; 
     245        my $name = shift; 
     246        my $deps = ($pkg->{vdepends} or $pkg->{depends}); 
     247 
     248        return 0 unless defined $deps; 
     249        foreach my $dep (@{$deps}) { 
     250                next if $dep_check{$dep}; 
     251                $dep_check{$dep} = 1; 
     252                return 1 if $dep eq $name; 
     253                return 1 if ($package{$dep} and (__find_package_dep($package{$dep},$name) == 1)); 
     254        } 
     255        return 0; 
     256} 
     257 
     258# wrapper to avoid infinite recursion 
    322259sub find_package_dep($$) { 
    323260        my $pkg = shift; 
    324261        my $name = shift; 
    325         my $deps = ($pkg->{vdepends} or $pkg->{depends}); 
    326  
    327         return 0 unless defined $deps; 
    328         foreach my $dep (@{$deps}) { 
    329                 return 1 if $dep eq $name; 
    330                 return 1 if ($package{$dep} and (find_package_dep($package{$dep},$name) == 1)); 
    331         } 
    332         return 0; 
     262 
     263        %dep_check = (); 
     264        return __find_package_dep($pkg, $name); 
    333265} 
    334266 
     
    453385 
    454386sub gen_package_config() { 
    455         parse_package_metadata(); 
     387        parse_package_metadata($ARGV[0]) or exit 1; 
    456388        print "menuconfig UCI_PRECONFIG\n\tbool \"Image configuration\"\n"; 
    457389        foreach my $preconfig (keys %preconfig) { 
     
    479411        my $line; 
    480412 
    481         parse_package_metadata(); 
     413        parse_package_metadata($ARGV[0]) or exit 1; 
    482414        foreach my $name (sort {uc($a) cmp uc($b)} keys %package) { 
    483415                my $config; 
Note: See TracChangeset for help on using the changeset viewer.