Re: [PATCH] kbuild: gitignore output directory

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Agree; sending v2

On 2/1/19 6:18 AM, Masahiro Yamada wrote:
On Wed, Jan 30, 2019 at 8:15 PM Vladimir Kondratiev
<vladimir.kondratiev@xxxxxxxxxxxxxxx> wrote:

When compiling into output directory using O=, many files
created under KBUILD_OUTPUT that git considers
as new ones; git clients, ex. "git gui" lists it, and it clutters
file list making it difficult to see what was really changed

Generate .gitignore in output directory that ignores all
its content

Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@xxxxxxxxxxxxxxx>
---
  Makefile | 3 +++
  1 file changed, 3 insertions(+)

diff --git a/Makefile b/Makefile
index 141653226f3c..ee66ea28869b 100644
--- a/Makefile
+++ b/Makefile
@@ -483,10 +483,13 @@ PHONY += outputmakefile
  # outputmakefile generates a Makefile in the output directory, if using a
  # separate output directory. This allows convenient use of make in the
  # output directory.
+# At the same time when output Makefile generated, generate .gitignore to
+# ignore whole output directory
  outputmakefile:
  ifneq ($(KBUILD_SRC),)
         $(Q)ln -fsn $(srctree) source
         $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
+       echo "# this is build directory, ignore it\n*" > .gitignore
  endif

  ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
--
2.19.1



The idea looks OK to me.
The implementation must be improved.


You need to add $(Q) to suppress the annoying command echo.

Also, this patch does not work for all distributions because
echo "\n"
is not portable.



GNU Make runs recipes in /bin/sh (unless SHELL variable is changed),
but the implementation of /bin/sh depends on distributions.


This patch works on Ubuntu etc.
because /bin/sh is a symbolic link to dash.


But, in some distributions,
/bin/sh is a symbolic link to bash.



Docker is useful for quick tests of
various distributions. :)

See the result of  echo "hello\nworld"


[Ubuntu]

foo@8ad1275125c5:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.10
DISTRIB_CODENAME=cosmic
DISTRIB_DESCRIPTION="Ubuntu 18.10"
foo@8ad1275125c5:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Nov 14 23:00 /bin/sh -> dash
foo@8ad1275125c5:~$ /bin/sh
$ type echo
echo is a shell builtin
$ echo "hello\nworld"
hello
world




[CentOS]


[foo@c3fbaa4b6f72 ~]$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[foo@c3fbaa4b6f72 ~]$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Dec  5 01:36 /bin/sh -> bash
[foo@c3fbaa4b6f72 ~]$ /bin/sh
sh-4.2$ type echo
echo is a shell builtin
sh-4.2$ echo "hello\nworld"
hello\nworld





On example for workaround might be:

diff --git a/Makefile b/Makefile
index ee66ea2..010c1c6 100644
--- a/Makefile
+++ b/Makefile
@@ -489,7 +489,7 @@ outputmakefile:
  ifneq ($(KBUILD_SRC),)
         $(Q)ln -fsn $(srctree) source
         $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile $(srctree)
-       echo "# this is build directory, ignore it\n*" > .gitignore
+       $(Q){ echo "# this is build directory, ignore it"; echo "*"; }
.gitignore
  endif

  ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)









[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux