diff options
| -rw-r--r-- | include/package-dumpinfo.mk | 7 | ||||
| -rw-r--r-- | include/package-ipkg.mk | 14 | ||||
| -rw-r--r-- | package/Makefile | 12 | ||||
| -rwxr-xr-x | package/base-files/files/bin/uci | 3 | ||||
| -rwxr-xr-x | package/base-files/files/etc/init.d/config | 9 | ||||
| -rw-r--r-- | package/base-files/files/lib/config/uci.sh | 11 | ||||
| -rwxr-xr-x | scripts/gen_deps.pl | 101 | ||||
| -rwxr-xr-x | scripts/metadata.pl | 121 | ||||
| -rw-r--r-- | target/sdk/files/Makefile | 3 | 
9 files changed, 166 insertions, 115 deletions
| diff --git a/include/package-dumpinfo.mk b/include/package-dumpinfo.mk index 2d52f2347..e6a462863 100644 --- a/include/package-dumpinfo.mk +++ b/include/package-dumpinfo.mk @@ -6,7 +6,11 @@  #  ifneq ($(DUMP),) -define Dumpinfo  +define Config +  preconfig_$$(1) += echo "Preconfig: $(1)"; echo "Preconfig-Type: $(2)"; echo "Preconfig-Default: $(3)"; echo "Preconfig-Label: $(4)"; +endef + +define Dumpinfo    dumpinfo: dumpinfo-$(1)    dumpinfo-$(1): FORCE  	@echo "Package: $(1)" ; \ @@ -28,5 +32,6 @@ define Dumpinfo  	 $(if $(URL),echo;echo "$(URL)";) \  	 echo "@@" ; \  	 $$(if $$(Package/$(1)/config),echo "Config: "; getvar $(call shvar,Package/$(1)/config); echo "@@") +	 $(if $$(preconfig_$(1)),@$$(preconfig_$(1)) echo "")  endef  endif diff --git a/include/package-ipkg.mk b/include/package-ipkg.mk index 0d6ab8af9..0f98dcfe1 100644 --- a/include/package-ipkg.mk +++ b/include/package-ipkg.mk @@ -54,12 +54,14 @@ define BuildIPKG  		done; \  		echo "Depends: $$$$DEPENDS" >> $$(IDIR_$(1))/CONTROL/control; \  	) -	echo "Source: $(SOURCE)" >> $$(IDIR_$(1))/CONTROL/control -	echo "Section: $(SECTION)" >> $$(IDIR_$(1))/CONTROL/control -	echo "Priority: $(PRIORITY)" >> $$(IDIR_$(1))/CONTROL/control -	echo "Maintainer: $(MAINTAINER)" >> $$(IDIR_$(1))/CONTROL/control -	echo "Architecture: $(PKGARCH)" >> $$(IDIR_$(1))/CONTROL/control -	echo "Description: $(DESCRIPTION)" | sed -e 's,\\,\n,g' | sed -e 's,^[[:space:]]*$$$$, .,g' >> $$(IDIR_$(1))/CONTROL/control +	( \ +		echo "Source: $(SOURCE)"; \ +		echo "Section: $(SECTION)"; \ +		echo "Priority: $(PRIORITY)"; \ +		echo "Maintainer: $(MAINTAINER)"; \ +		echo "Architecture: $(PKGARCH)"; \ +		echo -n "Description: "; getvar $(call shvar,Package/$(1)/description) | sed -e 's,^[[:space:]]*, ,g'; \ + 	) >> $$(IDIR_$(1))/CONTROL/control  	chmod 644 $$(IDIR_$(1))/CONTROL/control  	(cd $$(IDIR_$(1))/CONTROL; \  		$($(1)_COMMANDS) \ diff --git a/package/Makefile b/package/Makefile index 151942de3..bf7090d04 100644 --- a/package/Makefile +++ b/package/Makefile @@ -8,9 +8,12 @@  include $(TOPDIR)/rules.mk  include $(TOPDIR)/.config -include $(TMP_DIR)/.pkgdeps  include $(INCLUDE_DIR)/host.mk +all: compile + +include $(TMP_DIR)/.pkgdeps +  PREREQ_PACKAGES:=$(patsubst %,%-prereq,$(prereq-y) $(prereq-m))  DOWNLOAD_PACKAGES:=$(patsubst %,%-download,$(package-y) $(package-m))  COMPILE_PACKAGES:=$(patsubst %,%-compile,$(package-y) $(package-m)) @@ -29,9 +32,9 @@ GENDEP_OPTS := -s  endif  $(TMP_DIR)/.pkgdeps: $(TMP_DIR)/.pkginfo -	@$(TOPDIR)/scripts/gen_deps.pl $(GENDEP_OPTS) < $< > $@ || rm -f $@ +	@$(TOPDIR)/scripts/metadata.pl package_mk $(GENDEP_OPTS) < $< > $@ || rm -f $@ -all: compile +preconfig:  clean: $(patsubst %,%-clean,$(package-) $(package-y) $(package-m))  prereq: $(PREREQ_PACKAGES)  download: $(DOWNLOAD_PACKAGES) @@ -41,6 +44,7 @@ install-targets: $(INSTALL_PACKAGES)  install:  	rm -rf $(BUILD_DIR)/root  	$(MAKE) install-targets +	$(MAKE) preconfig  	@if [ -d $(TOPDIR)/files ]; then \  		$(CP) $(TOPDIR)/files/. $(BUILD_DIR)/root; \  	fi @@ -49,7 +53,7 @@ install:  		for script in ./etc/init.d/*; do \  			grep '#!/bin/sh /etc/rc.common' $$script >/dev/null || continue; \  			IPKG_INSTROOT=$(BUILD_DIR)/root $(which bash) ./etc/rc.common $$script enable; \ -		done; \ +		done || true \  	)  index: $(PACKAGE_DIR)/Packages diff --git a/package/base-files/files/bin/uci b/package/base-files/files/bin/uci index f8e08f874..4df8f33ff 100755 --- a/package/base-files/files/bin/uci +++ b/package/base-files/files/bin/uci @@ -47,7 +47,7 @@ do_set() {  	local VALUE  	strtok "$1" PACKAGE . CONFIG = VALUE -	[ $? -ne 3 ] && { +	[ $? -ne 3 -a $? -ne 2 ] && {  		uci_usage set  		exit 1  	} @@ -86,6 +86,7 @@ do_remove() {  do_commit() {  	local PACKAGE="$1"  	for package in ${PACKAGE:-$(cd /tmp/.uci; ls)}; do  +		[ "${package##.*}" != "$package" ] && continue # ignore .lock files  		uci_commit "$package"  	done  } diff --git a/package/base-files/files/etc/init.d/config b/package/base-files/files/etc/init.d/config new file mode 100755 index 000000000..2a1497503 --- /dev/null +++ b/package/base-files/files/etc/init.d/config @@ -0,0 +1,9 @@ +#!/bin/sh /etc/rc.common +# Copyright (C) 2006 OpenWrt.org + +START=15 + +start() { +	include /lib/config +	uci_apply_defaults +} diff --git a/package/base-files/files/lib/config/uci.sh b/package/base-files/files/lib/config/uci.sh index 43bb981cc..e1571cc89 100644 --- a/package/base-files/files/lib/config/uci.sh +++ b/package/base-files/files/lib/config/uci.sh @@ -28,6 +28,17 @@ uci_load() {  	}  } +uci_apply_defaults() {( +	cd /etc/uci-defaults || return 0 +	files="$(ls)" +	[ -z "$files" ] && return 0 +	mkdir -p /tmp/.uci +	for file in $files; do +		( . "./$(basename $file)" ) && rm -f "$file" +	done +	uci commit +)} +  uci_do_update() {  	local FILENAME="$1"  	local UPDATE="$2" diff --git a/scripts/gen_deps.pl b/scripts/gen_deps.pl deleted file mode 100755 index 0fc80aae8..000000000 --- a/scripts/gen_deps.pl +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/perl -#  -# Copyright (C) 2006 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -use strict; - -my $name; -my $src; -my $makefile; -my %conf; -my %pkg; -my %prereq; -my %dep; -my %options; -my $opt; - -while ($opt = shift @ARGV) { -	$opt =~ /^-s/ and $options{SDK} = 1; -} - -my $line; -while ($line = <>) { -	chomp $line; -	$line =~ /^Source-Makefile: \s*(.+\/([^\/]+)\/Makefile)\s*$/ and do { -		$makefile = $1; -		$src = $2; -		defined $pkg{$src} or $pkg{$src} = {}; -		$pkg{$src}->{src} = $src; -	}; -	$line =~ /^Package: \s*(.+)\s*$/ and do { -		$name = $1; -		defined $pkg{$name} or $pkg{$name} = {}; -		$pkg{$name}->{src} = $src; -	}; -	$line =~ /^Provides: \s*(.+)\s*$/ and do { -		foreach my $vpkg (split /\s+/, $1) { -			defined $pkg{$vpkg} or $pkg{$vpkg} = {}; -			$pkg{$vpkg}->{virtual} = 1; -		} -	}; -	$line =~ /^Prereq-Check:/ and !defined $prereq{$src} and do { -		$pkg{$name}->{prereq} = 1; -	}; -	$line =~ /^(Build-)?Depends: \s*(.+)\s*$/ and do { -		$pkg{$name}->{depends} ||= []; -		foreach my $v (split /\s+/, $2) { -			next if $v =~ /^[\+]?@/; -			$v =~ s/^\+//; -			push @{$pkg{$name}->{depends}}, $v; -		} -	}; -} - -$line=""; - -foreach $name (sort {uc($a) cmp uc($b)} keys %pkg) { -	my $config; -	 -	next if defined $pkg{$name}->{virtual}; -	if ($options{SDK}) { -		$conf{$pkg{$name}->{src}} or do { -			$config = 'm'; -			$conf{$pkg{$name}->{src}} = 1; -		}; -	} else { -		$config = "\$(CONFIG_PACKAGE_$name)" -	} -	if ($config) { -		print "package-$config += $pkg{$name}->{src}\n"; -		$pkg{$name}->{prereq} and print "prereq-$config += $pkg{$name}->{src}\n"; -	} - -	my $hasdeps = 0; -	my $depline = ""; -	foreach my $dep (@{$pkg{$name}->{depends}}) { -		my $idx; -		next if defined $pkg{$dep}->{virtual}; -		if (defined $pkg{$dep}->{src}) { -			($pkg{$name}->{src} ne $pkg{$dep}->{src}) and $idx = $pkg{$dep}->{src}; -		} elsif (defined($pkg{$dep}) && !$options{SDK}) { -			$idx = $dep; -		} -		undef $idx if $idx =~ /^(kernel)|(base-files)$/; -		if ($idx) { -			next if $dep{$pkg{$name}->{src}."->".$idx}; -			$depline .= " $idx\-compile"; -			$dep{$pkg{$name}->{src}."->".$idx} = 1; -		} -	} -	if ($depline ne "") { -		$line .= "$pkg{$name}->{src}-compile: $depline\n"; -	} -} - -if ($line ne "") { -	print "\n$line"; -} diff --git a/scripts/metadata.pl b/scripts/metadata.pl index b5ee31a49..ebe5eb237 100755 --- a/scripts/metadata.pl +++ b/scripts/metadata.pl @@ -1,6 +1,8 @@  #!/usr/bin/perl  use strict; +my %preconfig;  my %package; +my %srcpackage;  my %category;  sub parse_target_metadata() { @@ -70,21 +72,26 @@ sub parse_target_metadata() {  sub parse_package_metadata() {  	my $pkg;  	my $makefile; +	my $preconfig;  	my $src;  	while (<>) {  		chomp;  		/^Source-Makefile: \s*(.+\/([^\/]+)\/Makefile)\s*$/ and do {  			$makefile = $1;  			$src = $2; +			$srcpackage{$src} = [];  			undef $pkg;  		}; -		/^Package: \s*(.+)\s*$/ and do { +		/^Package:\s*(.+?)\s*$/ and do {  			$pkg = {};  			$pkg->{src} = $src;  			$pkg->{makefile} = $makefile;  			$pkg->{name} = $1;  			$pkg->{default} = "m if ALL"; +			$pkg->{depends} = []; +			$pkg->{builddepends} = [];  			$package{$1} = $pkg; +			push @{$srcpackage{$src}}, $pkg;  		};  		/^Version: \s*(.+)\s*$/ and $pkg->{version} = $1;  		/^Title: \s*(.+)\s*$/ and $pkg->{title} = $1; @@ -103,6 +110,10 @@ sub parse_package_metadata() {  			my @dep = split /\s+/, $1;  			$pkg->{depends} = \@dep;  		}; +		/^Build-Depends: \s*(.+)\s*$/ and do { +			my @dep = split /\s+/, $1; +			$pkg->{builddepends} = \@dep; +		};  		/^Category: \s*(.+)\s*$/ and do {  			$pkg->{category} = $1;  			defined $category{$1} or $category{$1} = {}; @@ -126,7 +137,19 @@ sub parse_package_metadata() {  				$conf .= "$line";  			}  			$pkg->{config} = $conf; -		} +		}; +		/^Prereq-Check:/ and $pkg->{prereq} = 1; +		/^Preconfig:\s*(.+)\s*$/ and do { +			my $pkgname = $pkg->{name}; +			$preconfig{$pkgname} or $preconfig{$pkgname} = []; +			$preconfig = { +				id => $1 +			}; +			push @{$preconfig{$pkgname}}, $preconfig; +		}; +		/^Preconfig-Type:\s*(.*?)\s*$/ and $preconfig->{type} = $1; +		/^Preconfig-Label:\s*(.*?)\s*$/ and $preconfig->{label} = $1; +		/^Preconfig-Default:\s*(.*?)\s*$/ and $preconfig->{default} = $1;  	}  	return %category;  } @@ -450,23 +473,117 @@ sub print_package_config_category($) {  sub gen_package_config() {  	parse_package_metadata(); +	print "menu \"Image configuration\"\n"; +	foreach my $preconfig (keys %preconfig) { +		print "\tcomment \"$preconfig\"\n"; +		foreach my $cfg (@{$preconfig{$preconfig}}) { +			my $conf = $cfg->{id}; +			$conf =~ tr/\.-/__/; +			print <<EOF +	config UCI_PRECONFIG_$conf +		string "$cfg->{label}" +		depends PACKAGE_$preconfig +		default "$cfg->{default}" + +EOF +		} +	} +	print "endmenu\n\n";  	print_package_config_category 'Base system';  	foreach my $cat (keys %category) {  		print_package_config_category $cat;  	}  } +sub gen_package_mk() { +	my %conf; +	my %dep; +	my $line; + +	parse_package_metadata(); +	foreach my $name (sort {uc($a) cmp uc($b)} keys %package) { +		my $config; +		my $pkg = $package{$name}; +		 +		next if defined $pkg->{vdepends}; +		if ($ENV{SDK}) { +			$conf{$pkg->{src}} or do { +				$config = 'm'; +				$conf{$pkg->{src}} = 1; +			}; +		} else { +			$config = "\$(CONFIG_PACKAGE_$name)" +		} +		if ($config) { +			print "package-$config += $pkg->{src}\n"; +			$pkg->{prereq} and print "prereq-$config += $pkg->{src}\n"; +		} +	 +		my $hasdeps = 0; +		my $depline = ""; +		foreach my $dep (@{$pkg->{depends}}, @{$pkg->{builddepends}}) { +			next if $dep =~ /@/; +			$dep =~ s/\+//; +			my $idx; +			my $pkg_dep = $package{$dep}; +			$pkg_dep or $pkg_dep = $srcpackage{$dep}->[0]; +			next unless defined $pkg_dep; +			next if defined $pkg_dep->{vdepends}; + +			if (defined $pkg_dep->{src}) { +				($pkg->{src} ne $pkg_dep->{src}) and $idx = $pkg_dep->{src}; +			} elsif (defined($pkg_dep) && !defined($ENV{SDK})) { +				$idx = $dep; +			} +			undef $idx if $idx =~ /^(kernel)|(base-files)$/; +			if ($idx) { +				next if $dep{$pkg->{src}."->".$idx}; +				$depline .= " $idx\-compile"; +				$dep{$pkg->{src}."->".$idx} = 1; +			} +		} +		if ($depline) { +			$line .= "$pkg->{src}-compile: $depline\n"; +		} +	} +	 +	if ($line ne "") { +		print "\n$line"; +	} +	foreach my $preconfig (keys %preconfig) { +		my $cmds; +		foreach my $cfg (@{$preconfig{$preconfig}}) { +			my $conf = $cfg->{id}; +			$conf =~ tr/\.-/__/; +			$cmds .= "\techo \"uci set '$cfg->{id}=\$(subst \",,\$(CONFIG_UCI_PRECONFIG_$conf))'\"; \\\n"; +		} +		next unless $cmds; +		print <<EOF + +\$(TARGET_DIR)/etc/uci-defaults/$preconfig: FORCE +	( \\ +$cmds \\ +	) > \$@ + +preconfig: \$(TARGET_DIR)/etc/uci-defaults/$preconfig +EOF +	} +} + +  sub parse_command() {  	my $cmd = shift @ARGV;  	for ($cmd) {  		/^target_mk$/ and return gen_target_mk();  		/^target_config$/ and return gen_target_config(); +		/^package_mk$/ and return gen_package_mk();  		/^package_config$/ and return gen_package_config();  	}  	print <<EOF  Available Commands:  	$0 target_mk [file] 		Target metadata in makefile format  	$0 target_config [file] 	Target metadata in Kconfig format +	$0 package_mk [file] 		Package metadata in makefile format  	$0 package_config [file] 	Package metadata in Kconfig format  EOF  } diff --git a/target/sdk/files/Makefile b/target/sdk/files/Makefile index ba488e380..7f42b697a 100644 --- a/target/sdk/files/Makefile +++ b/target/sdk/files/Makefile @@ -30,6 +30,9 @@ export TOPDIR  DEVELOPER=1  export DEVELOPER +SDK=1 +export SDK +  all: world  .pkginfo: FORCE | 
