#!/usr/bin/perl use strict; my %package; my %category; sub parse_target_metadata() { my ($target, @target, $profile); while (<>) { chomp; /^Target:\s*((.+)-(\d+\.\d+))\s*$/ and do { my $conf = uc $3.'_'.$2; $conf =~ tr/\.-/__/; $target = { id => $1, conf => $conf, board => $2, kernel => $3, profiles => [] }; push @target, $target; }; /^Target-Name:\s*(.+)\s*$/ and $target->{name} = $1; /^Target-Path:\s*(.+)\s*$/ and $target->{path} = $1; /^Target-Arch:\s*(.+)\s*$/ and $target->{arch} = $1; /^Target-Features:\s*(.+)\s*$/ and $target->{features} = [ split(/\s+/, $1) ]; /^Target-Description:/ and do { my $desc; while (<>) { last if /^@@/; $desc .= $_; } $target->{desc} = $desc; }; /^Linux-Version:\s*(.+)\s*$/ and $target->{version} = $1; /^Linux-Release:\s*(.+)\s*$/ and $target->{release} = $1; /^Linux-Kernel-Arch:\s*(.+)\s*$/ and $target->{karch} = $1; /^Default-Packages:\s*(.+)\s*$/ and $target->{packages} = [ split(/\s+/, $1) ]; /^Target-Profile:\s*(.+)\s*$/ and do { $profile = { id => $1, name => $1, packages => [] }; push @{$target->{profiles}}, $profile; }; /^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1; /^Target-Profile-Packages:\s*(.*)\s*$/ and $profile->{packages} = [ split(/\s+/, $1) ]; /^Target-Profile-Description:/ and do { my $desc; while (<>) { last if /^@@/; $desc .= $_; } $profile->{desc} = $desc; }; /^Target-Profile-Kconfig:/ and $profile->{kconfig} = 1; } foreach my $target (@target) { @{$target->{profiles}} > 0 or $target->{profiles} = [ { id => 'Default', name => 'Default', packages => [] } ]; } return @target; } sub parse_package_metadata() { my $pkg; my $makefile; my $src; while (<>) { chomp; /^Source-Makefile: \s*(.+\/([^\/]+)\/Makefile)\s*$/ and do { $makefile = $1; $src = $2; undef $pkg; }; /^Package: \s*(.+)\s*$/ and do { $pkg = {}; $pkg->{src} = $src; $pkg->{makefile} = $makefile; $pkg->{name} = $1; $pkg->{default} = "m if ALL"; $package{$1} = $pkg; }; /^Version: \s*(.+)\s*$/ and $pkg->{version} = $1; /^Title: \s*(.+)\s*$/ and $pkg->{title} = $1; /^Menu: \s*(.+)\s*$/ and $pkg->{menu} = $1; /^Submenu: \s*(.+)\s*$/ and $pkg->{submenu} = $1; /^Submenu-Depends: \s*(.+)\s*$/ and $pkg->{submenudep} = $1; /^Default: \s*(.+)\s*$/ and $pkg->{default} = $1; /^Provides: \s*(.+)\s*$/ and do { my @vpkg = split /\s+/, $1; foreach my $vpkg (@vpkg) { $package{$vpkg} or $package{$vpkg} = { vdepends => [] }; push @{$package{$vpkg}->{vdepends}}, $pkg->{name}; } }; /^Depends: \s*(.+)\s*$/ and do { my @dep = split /\s+/, $1; $pkg->{depends} = \@dep; }; /^Category: \s*(.+)\s*$/ and do { $pkg->{category} = $1; defined $category{$1} or $category{$1} = {}; defined $category{$1}->{$src} or $category{$1}->{$src} = []; push @{$category{$1}->{$src}}, $pkg; }; /^Description: \s*(.*)\s*$/ and do { my $desc = "\t\t$1\n\n"; my $line; while ($line = <>) { last if $line =~ /^@@/; $desc .= "\t\t$line"; } $pkg->{description} = $desc; }; /^Config: \s*(.*)\s*$/ and do { my $conf = "$1\n"; my $line; while ($line = <>) { last if $line =~ /^@@/; $conf .= "$line"; } $pkg->{config} = $conf; } } return %category; } sub gen_target_mk() { my @target = parse_target_metadata(); @target = sort { $a->{id} cmp $b->{id} } @target; foreach my $target (
#include "1up60rgb.h"