Re: [PATCH 2.6.9-bk7] Select cpio_list or source directory forinitramfs image updates [u]

From: Martin Schlemmer [c]
Date: Sun Oct 24 2004 - 09:03:21 EST


On Sun, 2004-10-24 at 03:08 -0700, Andrew Morton wrote:
> "Martin Schlemmer [c]" <azarah@xxxxxxxxxxxxxxxx> wrote:
> >
> > Here is some updates after talking to Sam Ravnborg. He did not yet come
> > back to me, I am not sure if I understood 100% what he meant, but hopefully
> > somebody else will be so kind as to comment.
> >
> > Here is a shortish changelog:
> >
> > - Fix an issue reported by Esben Nielsen <simlo@xxxxxxxxxx> (with
> > suggestion from Sam Ravnborg). Build failed if $O (output dir) was
> > set. This is done by pre-pending $srctree if the shipped list is
> > referenced.
> >
> > - Also fix calling of gen_initramfs_list.sh if $O (output dir) is set
> > by pre-pending $srctree.
> >
> > - I also moved initramfs_list to initramfs_list.shipped, to make sure we
> > always have an 'fall back' list (say you unset CONFIG_INITRAMFS_SOURCE
> > and deleted your custom intramfs source directory, then building will not
> > fail).
> >
> > - Kbuild style cleanups.
> >
> > - Improved error checking. For example gen_initramfs_list.sh will
> > output a simple list if the target directory is empty, and we verify
> > that the shipped initramfs_list is present before touching it.
> >
> > - Only update the temp initramfs_list if the source list/directory have
> > changed.
> >
> > - Cleanup temporary initramfs_list when 'make clean' or 'make mrproper'
> > is called.
> >
> >
> > This patch should apply to both 2.6.9-bk7 and 2.6.9-mm1.
>
> hmm. You have a patch in the email body and two slightly different patches
> as attachments. All bases covered ;)
>
> I'll stick
> "select-cpio_list-or-source-directory-for-initramfs-image-v7.patch" into
> -mm but would prefer that this patch come in via Sam's tree please.
>

No comment =) v7 should be fine, but it have one typo that wont affect
anything, so here is v8. I have tested with O= set, and all fail
conditions I could think of, and it seems all right.


Thanks,

--
Martin Schlemmer

diff -uprN -X dontdiff linux-2.6.9-bk7.orig/scripts/gen_initramfs_list.sh linux-2.6.9-bk7/scripts/gen_initramfs_list.sh
--- linux-2.6.9-bk7.orig/scripts/gen_initramfs_list.sh 2004-10-23 11:23:49.000000000 +0200
+++ linux-2.6.9-bk7/scripts/gen_initramfs_list.sh 2004-10-23 11:26:52.000000000 +0200
@@ -76,9 +76,23 @@ parse() {
return 0
}

-find "${srcdir}" -printf "%p %m %U %G\n" | \
-while read x; do
- parse ${x}
-done
+dirlist=$(find "${srcdir}" -printf "%p %m %U %G\n" 2>/dev/null)
+
+# If $dirlist is only one line, then the directory is empty
+if [ "$(echo "${dirlist}" | wc -l)" -gt 1 ]; then
+ echo "${dirlist}" | \
+ while read x; do
+ parse ${x}
+ done
+else
+ # Failsafe in case directory is empty
+ cat <<-EOF
+ # This is a very simple initramfs
+
+ dir /dev 0755 0 0
+ nod /dev/console 0600 0 0 c 5 1
+ dir /root 0700 0 0
+ EOF
+fi

exit 0
diff -uprN -X dontdiff linux-2.6.9-bk7.orig/usr/Makefile linux-2.6.9-bk7/usr/Makefile
--- linux-2.6.9-bk7.orig/usr/Makefile 2004-10-23 11:23:54.000000000 +0200
+++ linux-2.6.9-bk7/usr/Makefile 2004-10-23 13:56:28.691508824 +0200
@@ -6,9 +6,11 @@ hostprogs-y := gen_init_cpio
clean-files := initramfs_data.cpio.gz

# If you want a different list of files in the initramfs_data.cpio
-# then you can either overwrite the cpio_list in this directory
-# or set INITRAMFS_LIST to another filename.
-INITRAMFS_LIST := $(obj)/initramfs_list
+# then you can either overwrite initramfs_list.shipped in this directory
+# or set CONFIG_INITRAMFS_SOURCE to another filename or directory.
+initramfs_list := initramfs_list
+
+clean-files += $(initramfs_list)

# initramfs_data.o contains the initramfs_data.cpio.gz image.
# The image is included using .incbin, a dependency which is not
@@ -23,28 +25,75 @@ $(obj)/initramfs_data.o: $(obj)/initramf
# Commented out for now
# initramfs-y := $(obj)/root/hello

-quiet_cmd_gen_list = GEN_INITRAMFS_LIST $@
+# Returns:
+# valid command if everything should be fine
+# 'uptodate' if nothing needs to be done
+# 'missing' if $(srctree)/$(src)/$(initramfs_list).shipped is missing
+quiet_cmd_gen_list = GEN $@
cmd_gen_list = $(shell \
- if test -f $(CONFIG_INITRAMFS_SOURCE); then \
- if [ $(CONFIG_INITRAMFS_SOURCE) != $@ ]; then \
- echo 'cp -f $(CONFIG_INITRAMFS_SOURCE) $@'; \
+ if [ -d $(CONFIG_INITRAMFS_SOURCE) ]; \
+ then \
+ if [ ! -f "$(obj)/$(initramfs_list)" -o \
+ "x`find $(CONFIG_INITRAMFS_SOURCE) -newer "$(obj)/$(initramfs_list)" 2>/dev/null`" != "x" ]; \
+ then \
+ echo '$(CONFIG_SHELL) $(srctree)/scripts/gen_initramfs_list.sh \
+ $(CONFIG_INITRAMFS_SOURCE) > "$(obj)/$(initramfs_list)"'; \
else \
- echo 'echo Using shipped $@'; \
- fi; \
- elif test -d $(CONFIG_INITRAMFS_SOURCE); then \
- echo 'scripts/gen_initramfs_list.sh $(CONFIG_INITRAMFS_SOURCE) > $@'; \
+ echo 'uptodate'; \
+ fi \
else \
- echo 'echo Using shipped $@'; \
+ if [ -f $(CONFIG_INITRAMFS_SOURCE) -a \
+ $(CONFIG_INITRAMFS_SOURCE) != "$(obj)/$(initramfs_list)" ]; \
+ then \
+ if [ ! -f "$(obj)/$(initramfs_list)" -o \
+ $(CONFIG_INITRAMFS_SOURCE) -nt "$(obj)/$(initramfs_list)" ]; \
+ then \
+ echo 'cp -f $(CONFIG_INITRAMFS_SOURCE) "$(obj)/$(initramfs_list)"'; \
+ else \
+ echo 'uptodate'; \
+ fi \
+ else \
+ if [ -f "$(srctree)/$(src)/$(initramfs_list).shipped" ]; \
+ then \
+ if [ ! -f "$(obj)/$(initramfs_list)" -o \
+ "$(srctree)/$(src)/$(initramfs_list).shipped" -nt "$(obj)/$(initramfs_list)" ]; \
+ then \
+ echo 'cp -f "$(srctree)/$(src)/$(initramfs_list).shipped" \
+ "$(obj)/$(initramfs_list)"'; \
+ else \
+ echo 'uptodate'; \
+ fi \
+ else \
+ echo 'missing'; \
+ fi \
+ fi \
fi)

-
-$(INITRAMFS_LIST): FORCE
- $(call cmd,gen_list)
+initramfs_list_state_uptodate :=
+initramfs_list_state_outofdate :=
+initramfs_list_state_missing :=
+
+ifeq ($(cmd_gen_list),uptodate)
+ initramfs_list_state_uptodate := 1
+else
+ ifeq ($(cmd_gen_list),missing)
+ initramfs_list_state_missing := 1
+ else
+ initramfs_list_state_outofdate := 1
+ endif
+endif
+
+$(obj)/$(initramfs_list): FORCE
+ $(if $(initramfs_list_state_uptodate),, \
+ $(if $(initramfs_list_state_outofdate), $(call cmd,gen_list), \
+ $(if $(initramfs_list_state_missing), \
+ @echo 'File "$(src)/$(initramfs_list).shipped" does not exist'; \
+ /bin/false)))

quiet_cmd_cpio = CPIO $@
- cmd_cpio = ./$< $(INITRAMFS_LIST) > $@
+ cmd_cpio = ./$< $(obj)/$(initramfs_list) > $@

-$(obj)/initramfs_data.cpio: $(obj)/gen_init_cpio $(initramfs-y) $(INITRAMFS_LIST) FORCE
+$(obj)/initramfs_data.cpio: $(obj)/gen_init_cpio $(initramfs-y) $(obj)/$(initramfs_list) FORCE
$(call if_changed,cpio)

targets += initramfs_data.cpio
diff -uprN -X dontdiff linux-2.6.9-bk7.orig/usr/initramfs_list linux-2.6.9-bk7/usr/initramfs_list
--- linux-2.6.9-bk7.orig/usr/initramfs_list 2004-10-23 11:23:54.000000000 +0200
+++ linux-2.6.9-bk7/usr/initramfs_list 1970-01-01 02:00:00.000000000 +0200
@@ -1,5 +0,0 @@
-# This is a very simple initramfs - mostly preliminary for future expansion
-
-dir /dev 0755 0 0
-nod /dev/console 0600 0 0 c 5 1
-dir /root 0700 0 0
diff -uprN -X dontdiff linux-2.6.9-bk7.orig/usr/initramfs_list.shipped linux-2.6.9-bk7/usr/initramfs_list.shipped
--- linux-2.6.9-bk7.orig/usr/initramfs_list.shipped 1970-01-01 02:00:00.000000000 +0200
+++ linux-2.6.9-bk7/usr/initramfs_list.shipped 2004-10-23 11:26:52.000000000 +0200
@@ -0,0 +1,5 @@
+# This is a very simple initramfs - mostly preliminary for future expansion
+
+dir /dev 0755 0 0
+nod /dev/console 0600 0 0 c 5 1
+dir /root 0700 0 0

Attachment: signature.asc
Description: This is a digitally signed message part