summaryrefslogtreecommitdiff
path: root/app-text/docbook-sgml-utils/files/0001-Migrate-from-1998-style-which-progname-lookup-to-com.patch
blob: 764d06ad4d78f9e67c95c034d1b766a923461d13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
From a5956fccad44bed98b5de22a6169e0aa098d169f Mon Sep 17 00:00:00 2001
From: Eli Schwartz <eschwartz93@gmail.com>
Date: Mon, 4 Mar 2024 18:16:32 -0500
Subject: [PATCH] Migrate from 1998 style "which progname" lookup to command -v

The "which" utility is not guaranteed to be installed either, and if it
is, its behavior is not portable either. This means that when sgml tools
are installed, the `which` check will report a fatal error because the
which tool did not exist and the shell returned a nonzero status when
attempting to fork+exec. If it did exist, it might not be an
implementation of `which` that returns nonzero when commands do not
exist.

The general scripting suggestion is to use the "command -v" shell
builtin that is required to exist in all POSIX 2008 compliant shells,
and is thus guaranteed to work everywhere.

For some in-depth discussions on the topic, see:
- https://mywiki.wooledge.org/BashFAQ/081
- https://unix.stackexchange.com/questions/85249/why-not-use-which-what-to-use-then/85250#85250

Examples of open-source shells likely to be installed as /bin/sh on
Linux, which implement the 15-year-old standard: ash, bash, busybox,
dash, ksh, mksh and zsh.

However, in this case there's a pretty good exuse for not using a 2008
standard. The docbook-utils project is dead since 2004. So we patch it
(and scratch our heads about where to try sending patches).

Signed-off-by: Eli Schwartz <eschwartz93@gmail.com>
---
 bin/jw.in | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

diff --git a/bin/jw.in b/bin/jw.in
index 4bfb312..82bd497 100644
--- a/bin/jw.in
+++ b/bin/jw.in
@@ -58,8 +58,7 @@ SGML_ERRORS_LIST="\n\
 \040 no-valid \t Do not require the document to be type-valid"
 
 # Get name of main SGML configuration file
-which sgmlwhich >/dev/null 2>/dev/null
-if [ $? -eq 0 ]
+if command -v sgmlwhich >/dev/null
 then
   SGML_CONF=`sgmlwhich`
 else
@@ -296,10 +295,10 @@ fi
 # Try to find the SGML normalizer
 if [ -z "$SGML_NORM" ]
 then
-  SGML_NORM=`which sgmlnorm 2>/dev/null`
+  SGML_NORM=`command -v sgmlnorm`
   if [ -z "SGML_NORM" ]
   then
-    SGML_NORM=`which osgmlnorm 2>/dev/null`
+    SGML_NORM=`command -v osgmlnorm`
   fi
 fi
 
@@ -376,13 +375,11 @@ esac
 # Choose a parser
 if [ -z "$SGML_JADE" ]
 then
-  which jade >/dev/null 2>/dev/null
-  if [ $? -eq 0 ]
+  if command -v jade >/dev/null
   then
     SGML_JADE="jade"
   else
-    which openjade >/dev/null 2>/dev/null
-    if [ $? -eq 0 ]
+    if command -v openjade >/dev/null
     then 
       SGML_JADE="openjade"
     else
@@ -391,8 +388,7 @@ then
     fi
   fi
 else
-  which $SGML_JADE >/dev/null 2>/dev/null
-  if [ $? -ne 0 ]
+  if ! command -v $SGML_JADE >/dev/null
   then 
     echo "`basename $0`: parser $SGML_JADE is not available" >&2
     exit 6
-- 
2.43.0