mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Martin Schlemmer [c]" <azarah@nosferatu.za.org>
To: Andrew Morton <akpm@osdl.org>
Cc: torvalds@osdl.org, Sam Ravnborg <sam@ravnborg.org>,
	Linux Kernel Mailing Lists <linux-kernel@vger.kernel.org>
Subject: [PATCH 2.6.9-bk7] Select cpio_list or source directory for initramfs image updates [u]
Date: Sat, 23 Oct 2004 14:06:28 +0200	[thread overview]
Message-ID: <1098533188.668.9.camel@nosferatu.lan> (raw)
In-Reply-To: <200410200849.i9K8n5921516@mail.osdl.org>


[-- Attachment #1.1: Type: text/plain, Size: 7262 bytes --]

Hi,

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@phys.au.dk> (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.

(Note that evo does some tab/newline damage)

Signed-off-by: Martin Schlemmer <azarah@nosferatu.za.org>

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 $(nitramfs_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



-- 
Martin Schlemmer


[-- Attachment #1.2: select-cpio_list-or-source-directory-for-initramfs-image-v5.patch --]
[-- Type: text/x-patch, Size: 7526 bytes --]

diff -uprN -X dontdiff linux-2.6.9-rc4-mm1.orig/drivers/block/Kconfig linux-2.6.9-rc4-mm1/drivers/block/Kconfig
--- linux-2.6.9-rc4-mm1.orig/drivers/block/Kconfig	2004-10-18 21:20:06.885571688 +0200
+++ linux-2.6.9-rc4-mm1/drivers/block/Kconfig	2004-10-17 16:58:35.000000000 +0200
@@ -348,6 +348,32 @@ config BLK_DEV_INITRD
 	  "real" root file system, etc. See <file:Documentation/initrd.txt>
 	  for details.
 
+config INITRAMFS_SOURCE
+	string "Source directory of cpio_list"
+	default ""
+	help
+	  This can be set to either a directory containing files, etc to be
+	  included in the initramfs archive, or a file containing newline
+	  separated entries.
+
+	  If it is a file, it should be in the following format:
+	    # a comment
+	    file <name> <location> <mode> <uid> <gid>
+	    dir <name> <mode> <uid> <gid>
+	    nod <name> <mode> <uid> <gid> <dev_type> <maj> <min>
+
+	  Where:
+	    <name>      name of the file/dir/nod in the archive
+	    <location>  location of the file in the current filesystem
+	    <mode>      mode/permissions of the file
+	    <uid>       user id (0=root)
+	    <gid>       group id (0=root)
+	    <dev_type>  device type (b=block, c=character)
+	    <maj>       major number of nod
+	    <min>       minor number of nod
+
+	  If you are not sure, leave it blank.
+
 config LBD
 	bool "Support for Large Block Devices"
 	depends on X86 || MIPS32 || PPC32 || ARCH_S390_31 || SUPERH
diff -uprN -X dontdiff linux-2.6.9-rc4-mm1.orig/scripts/gen_initramfs_list.sh linux-2.6.9-rc4-mm1/scripts/gen_initramfs_list.sh
--- linux-2.6.9-rc4-mm1.orig/scripts/gen_initramfs_list.sh	1970-01-01 02:00:00.000000000 +0200
+++ linux-2.6.9-rc4-mm1/scripts/gen_initramfs_list.sh	2004-10-18 20:02:09.000000000 +0200
@@ -0,0 +1,98 @@
+#!/bin/bash
+# Copyright (C) Martin Schlemmer <azarah@nosferatu.za.org>
+# Released under the terms of the GNU GPL
+#
+# A script to generate newline separated entries (to stdout) from a directory's
+# contents suitable for use as a cpio_list for gen_init_cpio.
+#
+# Arguements: $1 -- the source directory
+#
+# TODO:  Add support for symlinks, sockets and pipes when gen_init_cpio
+#        supports them.
+
+usage() {
+	echo "Usage: $0 initramfs-source-dir"
+	exit 1
+}
+
+srcdir=$(echo "$1" | sed -e 's://*:/:g')
+
+if [ "$#" -gt 1 -o ! -d "${srcdir}" ]; then
+	usage
+fi
+
+filetype() {
+	local argv1="$1"
+
+	if [ -f "${argv1}" ]; then
+		echo "file"
+	elif [ -d "${argv1}" ]; then
+		echo "dir"
+	elif [ -b "${argv1}" -o -c "${argv1}" ]; then
+		echo "nod"
+	else
+		echo "invalid"
+	fi
+	return 0
+}
+
+parse() {
+	local location="$1"
+	local name="${location/${srcdir}//}"
+	local mode="$2"
+	local uid="$3"
+	local gid="$4"
+	local ftype=$(filetype "${location}")
+	local str="${mode} ${uid} ${gid}"
+
+	[ "${ftype}" == "invalid" ] && return 0
+	[ "${location}" == "${srcdir}" ] && return 0
+
+	case "${ftype}" in
+		"file")
+			str="${ftype} ${name} ${location} ${str}"
+			;;
+		"nod")
+			local dev_type=
+			local maj=$(LC_ALL=C ls -l "${location}" | \
+					gawk '{sub(/,/, "", $5); print $5}')
+			local min=$(LC_ALL=C ls -l "${location}" | \
+					gawk '{print $6}')
+
+			if [ -b "${location}" ]; then
+				dev_type="b"
+			else
+				dev_type="c"
+			fi
+			str="${ftype} ${name} ${str} ${dev_type} ${maj} ${min}"
+			;;
+		*)
+			str="${ftype} ${name} ${str}"
+			;;
+	esac
+
+	echo "${str}"
+
+	return 0
+}
+
+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-rc4-mm1.orig/usr/Makefile linux-2.6.9-rc4-mm1/usr/Makefile
--- linux-2.6.9-rc4-mm1.orig/usr/Makefile	2004-10-18 21:20:06.886571536 +0200
+++ linux-2.6.9-rc4-mm1/usr/Makefile	2004-10-18 21:02:35.722372784 +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,10 +25,43 @@ $(obj)/initramfs_data.o: $(obj)/initramf
 # Commented out for now
 # initramfs-y := $(obj)/root/hello
 
+# This should only return a command if there was no error
+quiet_cmd_gen_list = GEN     $@
+      cmd_gen_list = $(shell \
+	if [ -d $(CONFIG_INITRAMFS_SOURCE) ]; then \
+	  tmplist="`find $(CONFIG_INITRAMFS_SOURCE) -newer $@ 2>/dev/null`"; \
+	  if [ ! -f $@ -o "x${tmplist}" != x ]; then \
+	    echo '$(CONFIG_SHELL) scripts/gen_initramfs_list.sh \
+	    			$(CONFIG_INITRAMFS_SOURCE) > $@'; \
+	  else \
+	    echo '/bin/true'; \
+	  fi \
+	else \
+	  if [ -f $(CONFIG_INITRAMFS_SOURCE) -a $(CONFIG_INITRAMFS_SOURCE) != $@ ]; then \
+	    if [ ! -f $@ -o $(CONFIG_INITRAMFS_SOURCE) -nt $@ ]; then \
+	      echo 'cp -f $(CONFIG_INITRAMFS_SOURCE) $@'; \
+	    else \
+	      echo '/bin/true'; \
+	    fi \
+	  else \
+	    if [ -f $(srctree)/$(src)/$(initramfs_list).shipped ]; then \
+	      if [ ! -f $@ -o $(srctree)/$(src)/$(initramfs_list).shipped -nt $@ ]; then \
+	        echo 'cp -f $(srctree)/$(src)/$(initramfs_list).shipped $@'; \
+	      else \
+	        echo '/bin/true'; \
+	      fi \
+	    fi \
+	  fi \
+	fi)
+
+$(obj)/$(initramfs_list): FORCE
+	$(if $(cmd_gen_list), $(call cmd,gen_list), \
+	  error file "$(src)/$(initramfs_list).shipped" does not exist)
+
 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-rc4-mm1.orig/usr/initramfs_list linux-2.6.9-rc4-mm1/usr/initramfs_list
--- linux-2.6.9-rc4-mm1.orig/usr/initramfs_list	2004-10-18 21:20:06.974558160 +0200
+++ linux-2.6.9-rc4-mm1/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-rc4-mm1.orig/usr/initramfs_list.shipped linux-2.6.9-rc4-mm1/usr/initramfs_list.shipped
--- linux-2.6.9-rc4-mm1.orig/usr/initramfs_list.shipped	1970-01-01 02:00:00.000000000 +0200
+++ linux-2.6.9-rc4-mm1/usr/initramfs_list.shipped	2004-10-18 21:20:50.866885512 +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 #1.3: select-cpio_list-or-source-directory-for-initramfs-image-v7.patch --]
[-- Type: text/x-patch, Size: 5869 bytes --]

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 $(nitramfs_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 #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

       reply	other threads:[~2004-10-23 12:07 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200410200849.i9K8n5921516@mail.osdl.org>
2004-10-23 12:06 ` Martin Schlemmer [c] [this message]
2004-10-24 10:08   ` Andrew Morton
2004-10-24 13:59     ` Martin Schlemmer [c]
2004-10-24 22:26     ` Sam Ravnborg
2004-10-26 22:12   ` Sam Ravnborg
2004-10-26 21:07     ` Martin Schlemmer [c]
2004-10-26 23:15       ` Sam Ravnborg
2004-10-26 21:36         ` Martin Schlemmer [c]
2004-10-27  4:09         ` Dave Airlie
2004-10-27  6:21           ` Sam Ravnborg
2004-10-27  4:55             ` timestamps in kernel was " Dave Airlie
2004-10-27 18:44         ` Martin Schlemmer [c]
2004-10-30 23:43           ` Sam Ravnborg
2004-10-31 10:36             ` Martin Schlemmer [c]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1098533188.668.9.camel@nosferatu.lan \
    --to=azarah@nosferatu.za.org \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sam@ravnborg.org \
    --cc=torvalds@osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome