All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] scripts/tags.sh: Exit gracefully if *tags tool not found
@ 2016-04-24 16:42 Eugeniu Rosca
  2016-04-25 12:35 ` Michal Marek
  0 siblings, 1 reply; 5+ messages in thread
From: Eugeniu Rosca @ 2016-04-24 16:42 UTC (permalink / raw)
  To: mmarek, mpe, kirill.shutemov, naveen.n.rao, akpm, sboyd, paul.gortmaker
  Cc: linux-kbuild, Eugeniu Rosca

If the needed host utility is not found, current behavior is:

$> make cscope
  GEN     cscope
./scripts/tags.sh: line 140: cscope: command not found
$> make gtags
  GEN     gtags
./scripts/tags.sh: line 145: gtags: command not found
$> make tags
  GEN     tags
xargs: ctags: No such file or directory
sed: can't read tags: No such file or directory
Makefile:1509: recipe for target 'tags' failed
make: *** [tags] Error 2
$> make TAGS
  GEN     TAGS
xargs: etags: No such file or directory
sed: can't read TAGS: No such file or directory
Makefile:1509: recipe for target 'TAGS' failed
make: *** [TAGS] Error 2

This patch allows to exit gracefully in such a situation:

$> make cscope
  GEN     cscope
cscope - not installed?
$> make gtags
  GEN     gtags
gtags - not installed?
$> make tags
  GEN     tags
ctags - not installed?
$> make TAGS
  GEN     TAGS
etags - not installed?

Signed-off-by: Eugeniu Rosca <eugeniu.m.rosca@gmail.com>
---
 scripts/tags.sh | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/scripts/tags.sh b/scripts/tags.sh
index f72f48f..e7f6125 100755
--- a/scripts/tags.sh
+++ b/scripts/tags.sh
@@ -289,6 +289,13 @@ xtags()
 	fi
 }
 
+# Check if a specific utility is accessible on the host
+tool_exists() {
+	[ -x "$(which $1 2> /dev/null)" ] || \
+		{ echo "$1 - not installed?" && return 1; }
+	return 0
+}
+
 # Support um (which uses SUBARCH)
 if [ "${ARCH}" = "um" ]; then
 	if [ "$SUBARCH" = "i386" ]; then
@@ -318,20 +325,24 @@ fi
 remove_structs=
 case "$1" in
 	"cscope")
+		tool_exists cscope || exit 0
 		docscope
 		;;
 
 	"gtags")
+		tool_exists gtags || exit 0
 		dogtags
 		;;
 
 	"tags")
+		tool_exists ctags || exit 0
 		rm -f tags
 		xtags ctags
 		remove_structs=y
 		;;
 
 	"TAGS")
+		tool_exists etags || exit 0
 		rm -f TAGS
 		xtags etags
 		remove_structs=y
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] scripts/tags.sh: Exit gracefully if *tags tool not found
  2016-04-24 16:42 [PATCH] scripts/tags.sh: Exit gracefully if *tags tool not found Eugeniu Rosca
@ 2016-04-25 12:35 ` Michal Marek
  2016-05-15 13:44   ` Eugeniu Rosca
  0 siblings, 1 reply; 5+ messages in thread
From: Michal Marek @ 2016-04-25 12:35 UTC (permalink / raw)
  To: Eugeniu Rosca, mpe, kirill.shutemov, naveen.n.rao, akpm, sboyd,
	paul.gortmaker
  Cc: linux-kbuild

On 2016-04-24 18:42, Eugeniu Rosca wrote:
> If the needed host utility is not found, current behavior is:
> 
> $> make cscope
>   GEN     cscope
> ./scripts/tags.sh: line 140: cscope: command not found
> $> make gtags
>   GEN     gtags
> ./scripts/tags.sh: line 145: gtags: command not found
> $> make tags
>   GEN     tags
> xargs: ctags: No such file or directory
> sed: can't read tags: No such file or directory
> Makefile:1509: recipe for target 'tags' failed
> make: *** [tags] Error 2
> $> make TAGS
>   GEN     TAGS
> xargs: etags: No such file or directory
> sed: can't read TAGS: No such file or directory
> Makefile:1509: recipe for target 'TAGS' failed
> make: *** [TAGS] Error 2
> 
> This patch allows to exit gracefully in such a situation:
> 
> $> make cscope
>   GEN     cscope
> cscope - not installed?
> $> make gtags
>   GEN     gtags
> gtags - not installed?
> $> make tags
>   GEN     tags
> ctags - not installed?
> $> make TAGS
>   GEN     TAGS
> etags - not installed?

It should fail if it's unable to create the requested file, though.
Appending '|| exit' to the docscope/dogtags/xtags calls should suffice.

Michal

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] scripts/tags.sh: Exit gracefully if *tags tool not found
  2016-04-25 12:35 ` Michal Marek
@ 2016-05-15 13:44   ` Eugeniu Rosca
  2016-05-16  7:06     ` Michal Marek
  0 siblings, 1 reply; 5+ messages in thread
From: Eugeniu Rosca @ 2016-05-15 13:44 UTC (permalink / raw)
  To: Michal Marek; +Cc: linux-kbuild

On Mon, Apr 25, 2016 at 02:35:43PM +0200, Michal Marek wrote:
> On 2016-04-24 18:42, Eugeniu Rosca wrote:
> > If the needed host utility is not found, current behavior is:
> > 
> > $> make cscope
> >   GEN     cscope
> > ./scripts/tags.sh: line 140: cscope: command not found
> > $> make gtags
> >   GEN     gtags
> > ./scripts/tags.sh: line 145: gtags: command not found
> > $> make tags
> >   GEN     tags
> > xargs: ctags: No such file or directory
> > sed: can't read tags: No such file or directory
> > Makefile:1509: recipe for target 'tags' failed
> > make: *** [tags] Error 2
> > $> make TAGS
> >   GEN     TAGS
> > xargs: etags: No such file or directory
> > sed: can't read TAGS: No such file or directory
> > Makefile:1509: recipe for target 'TAGS' failed
> > make: *** [TAGS] Error 2
> > 
> > This patch allows to exit gracefully in such a situation:
> > 
> > $> make cscope
> >   GEN     cscope
> > cscope - not installed?
> > $> make gtags
> >   GEN     gtags
> > gtags - not installed?
> > $> make tags
> >   GEN     tags
> > ctags - not installed?
> > $> make TAGS
> >   GEN     TAGS
> > etags - not installed?
> 
> It should fail if it's unable to create the requested file, though.
> Appending '|| exit' to the docscope/dogtags/xtags calls should suffice.
> 
> Michal

Hi Michal,

Late feedback from my end...
I would kindly ask you to select one of the options provided below:

OPTION 1: Append '|| exit' to the docscope/dogtags/xtags calls.
RESULT: This produces more error messages than with the original script:

$> make cscope
  GEN     cscope
./scripts/tags.sh: line 140: cscope: command not found
Makefile:1517: recipe for target 'cscope' failed
make: *** [cscope] Error 127
$> make gtags
  GEN     gtags
./scripts/tags.sh: line 145: gtags: command not found
Makefile:1517: recipe for target 'gtags' failed
make: *** [gtags] Error 127
$> make tags
  GEN     tags
xargs: ctags: No such file or directory
Makefile:1517: recipe for target 'tags' failed
make: *** [tags] Error 127
$> make TAGS
  GEN     TAGS
xargs: etags: No such file or directory
Makefile:1517: recipe for target 'TAGS' failed
make: *** [TAGS] Error 127
$> 

OPTION 2: Append '|| exit 0' to the docscope/dogtags/xtags calls.
RESULT: Cleaner output, but still without suggesting the root-cause:

$> make cscope
GEN     cscope
./scripts/tags.sh: line 140: cscope: command not found
$> make gtags
GEN     gtags
./scripts/tags.sh: line 145: gtags: command not found
$> make tags
GEN     tags
xargs: ctags: No such file or directory
$> make TAGS
GEN     TAGS
xargs: etags: No such file or directory
$>

OPTION 3: Initial patch.
RESULT: Cleaner output, but maybe putting too much infrastructure for
checking against missing utilities?

$> make cscope
GEN     cscope
cscope - not installed?
$> make gtags
GEN     gtags
gtags - not installed?
$> make tags
GEN     tags
ctags - not installed?
$> make TAGS
GEN     TAGS
etags - not installed?

OPTION 4: Something else?
RESULT: ?

Best regards,
Eugeniu.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] scripts/tags.sh: Exit gracefully if *tags tool not found
  2016-05-15 13:44   ` Eugeniu Rosca
@ 2016-05-16  7:06     ` Michal Marek
  2016-05-16 13:37       ` [PATCH v2] scripts/tags.sh: Handle missing {c,e,g}tags/cscope utilities Eugeniu Rosca
  0 siblings, 1 reply; 5+ messages in thread
From: Michal Marek @ 2016-05-16  7:06 UTC (permalink / raw)
  To: Eugeniu Rosca; +Cc: linux-kbuild

On 2016-05-15 15:44, Eugeniu Rosca wrote:
> I would kindly ask you to select one of the options provided below:
> 
> OPTION 1: Append '|| exit' to the docscope/dogtags/xtags calls.
> RESULT: This produces more error messages than with the original script:
> 
> $> make cscope
>   GEN     cscope
> ./scripts/tags.sh: line 140: cscope: command not found
> Makefile:1517: recipe for target 'cscope' failed
> make: *** [cscope] Error 127
> [...]

This is the correct behavior because a missing tool is an error.

Michal

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] scripts/tags.sh: Handle missing {c,e,g}tags/cscope utilities
  2016-05-16  7:06     ` Michal Marek
@ 2016-05-16 13:37       ` Eugeniu Rosca
  0 siblings, 0 replies; 5+ messages in thread
From: Eugeniu Rosca @ 2016-05-16 13:37 UTC (permalink / raw)
  To: Michal Marek; +Cc: linux-kbuild, eugeniu.m.rosca

[-- Attachment #1: Type: text/plain, Size: 0 bytes --]



[-- Attachment #2: 0001-scripts-tags.sh-Handle-missing-c-e-g-tags-cscope-uti.patch.txt --]
[-- Type: text/plain, Size: 2415 bytes --]

From 5917e6602bd0e44c4a672bc4ac8c7a323b6300b6 Mon Sep 17 00:00:00 2001
From: Eugeniu Rosca <eugeniu.m.rosca@gmail.com>
Date: Sun, 24 Apr 2016 17:30:53 +0200
Subject: [PATCH v2] scripts/tags.sh: Handle missing {c,e,g}tags/cscope utilities

If the required ctags/etags/gtags/cscope host utility is not found,
current behavior is:

$> make cscope
  GEN     cscope
./scripts/tags.sh: line 140: cscope: command not found
$> make gtags
  GEN     gtags
./scripts/tags.sh: line 145: gtags: command not found
$> make tags
  GEN     tags
xargs: ctags: No such file or directory
sed: can't read tags: No such file or directory
Makefile:1509: recipe for target 'tags' failed
make: *** [tags] Error 2
$> make TAGS
  GEN     TAGS
xargs: etags: No such file or directory
sed: can't read TAGS: No such file or directory
Makefile:1509: recipe for target 'TAGS' failed
make: *** [TAGS] Error 2

Instead of implementing a more graceful handling, this patch only
makes sure that tags.sh script exits immediately upon the first
failure caused by the missing ctags/etags/gtags/cscope tool. By not
altering the exit code, the user will additionally get the failed
recipe in the root Makefile. The output becomes:

$> make cscope
  GEN     cscope
./scripts/tags.sh: line 140: cscope: command not found
Makefile:1517: recipe for target 'cscope' failed
make: *** [cscope] Error 127
$> make gtags
  GEN     gtags
./scripts/tags.sh: line 145: gtags: command not found
Makefile:1517: recipe for target 'gtags' failed
make: *** [gtags] Error 127
$> make tags
  GEN     tags
xargs: ctags: No such file or directory
Makefile:1517: recipe for target 'tags' failed
make: *** [tags] Error 127
$> make TAGS
  GEN     TAGS
xargs: etags: No such file or directory
Makefile:1517: recipe for target 'TAGS' failed
make: *** [TAGS] Error 127

Signed-off-by: Eugeniu Rosca <eugeniu.m.rosca@gmail.com>
---
 scripts/tags.sh | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/scripts/tags.sh b/scripts/tags.sh
index f72f48f..96b6dec 100755
--- a/scripts/tags.sh
+++ b/scripts/tags.sh
@@ -318,22 +318,22 @@ fi
 remove_structs=
 case "$1" in
 	"cscope")
-		docscope
+		docscope || exit
 		;;
 
 	"gtags")
-		dogtags
+		dogtags || exit
 		;;
 
 	"tags")
 		rm -f tags
-		xtags ctags
+		xtags ctags || exit
 		remove_structs=y
 		;;
 
 	"TAGS")
 		rm -f TAGS
-		xtags etags
+		xtags etags || exit
 		remove_structs=y
 		;;
 esac
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-05-16 13:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-24 16:42 [PATCH] scripts/tags.sh: Exit gracefully if *tags tool not found Eugeniu Rosca
2016-04-25 12:35 ` Michal Marek
2016-05-15 13:44   ` Eugeniu Rosca
2016-05-16  7:06     ` Michal Marek
2016-05-16 13:37       ` [PATCH v2] scripts/tags.sh: Handle missing {c,e,g}tags/cscope utilities Eugeniu Rosca

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.