From 9de02099c503ca3d5cbae96a2a9edd1150308611 Mon Sep 17 00:00:00 2001 From: Werner LEMBERG Date: Wed, 18 May 2005 07:03:07 +0000 Subject: [PATCH] Miscellaneous script portability enhancements. * aclocal.m4: (GROFF_CSH_HACK): Add space in shebang prototype for generated conftest.sh script, conforming to portability recommendation in autoconf docs. * configure: Likewise, for code generated by GROFF_CSH_HACK. * contrib/eqn2graph/eqn2graph.sh: Add space in shebang, conforming to portability recommendation in autoconf docs. * contrib/gdiffmk/gdiffmk.sh: Likewise. * contrib/gdiffmk/tests/runtests.in: Likewise. * contrib/grap2graph/grap2graph.sh: Likewise. * contrib/groffer/groffer.sh: Likewise. * contrib/mm/mmroff.pl: Likewise. * contrib/mom/momdoc/appendices.html: Likewise. * contrib/pic2graph/pic2graph.sh: Likewise. * font/devps/generate/afmname: Likewise. * src/devices/xditview/ad2c: Likewise. * src/preproc/eqn/neqn.sh: Likewise. * src/roff/grog/grog.pl: Likewise. * src/roff/grog/grog.sh: Likewise. * src/roff/nroff/nroff.sh: Likewise. * PROBLEMS: Likewise, in embedded script examples. Improve portability of `pdfroff' shell script. * arch/misc/shdeps.sh: Add space in shebang, conforming to portability guidelines in `autoconf' docs. (PATH_SEARCH_SETUP): New substitution; emits PATH_SEPARATOR initialization code. Used by contrib/pdfmark/pdfroff.sh's `searchpath' function. --- ChangeLog | 37 ++++++++++++- PROBLEMS | 8 +-- aclocal.m4 | 2 +- arch/misc/shdeps.sh | 33 ++++++++++- configure | 2 +- contrib/eqn2graph/eqn2graph.sh | 2 +- contrib/gdiffmk/gdiffmk.sh | 2 +- contrib/gdiffmk/tests/runtests.in | 2 +- contrib/grap2graph/grap2graph.sh | 2 +- contrib/groffer/groffer.sh | 2 +- contrib/mm/mmroff.pl | 2 +- contrib/mom/momdoc/appendices.html | 2 +- contrib/pdfmark/ChangeLog | 16 ++++++ contrib/pdfmark/Makefile.sub | 7 ++- contrib/pdfmark/pdfroff.man | 24 ++++++++ contrib/pdfmark/pdfroff.sh | 109 +++++++++++++++++++++++++------------ contrib/pic2graph/pic2graph.sh | 2 +- font/devps/generate/afmname | 2 +- src/devices/xditview/ad2c | 2 +- src/preproc/eqn/neqn.sh | 2 +- src/roff/grog/grog.pl | 2 +- src/roff/grog/grog.sh | 2 +- src/roff/nroff/nroff.sh | 2 +- 23 files changed, 204 insertions(+), 62 deletions(-) diff --git a/ChangeLog b/ChangeLog index 38152841..c182d485 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,38 @@ +2005-05-16 Keith Marshall + + Miscellaneous script portability enhancements. + + * aclocal.m4: (GROFF_CSH_HACK): Add space in shebang prototype for + generated conftest.sh script, conforming to portability + recommendation in autoconf docs. + * configure: Likewise, for code generated by GROFF_CSH_HACK. + * contrib/eqn2graph/eqn2graph.sh: Add space in shebang, conforming + to portability recommendation in autoconf docs. + * contrib/gdiffmk/gdiffmk.sh: Likewise. + * contrib/gdiffmk/tests/runtests.in: Likewise. + * contrib/grap2graph/grap2graph.sh: Likewise. + * contrib/groffer/groffer.sh: Likewise. + * contrib/mm/mmroff.pl: Likewise. + * contrib/mom/momdoc/appendices.html: Likewise. + * contrib/pic2graph/pic2graph.sh: Likewise. + * font/devps/generate/afmname: Likewise. + * src/devices/xditview/ad2c: Likewise. + * src/preproc/eqn/neqn.sh: Likewise. + * src/roff/grog/grog.pl: Likewise. + * src/roff/grog/grog.sh: Likewise. + * src/roff/nroff/nroff.sh: Likewise. + * PROBLEMS: Likewise, in embedded script examples. + +2005-05-16 Keith Marshall + + Improve portability of `pdfroff' shell script. + + * arch/misc/shdeps.sh: Add space in shebang, conforming to + portability guidelines in `autoconf' docs. + (PATH_SEARCH_SETUP): New substitution; emits PATH_SEPARATOR + initialization code. Used by contrib/pdfmark/pdfroff.sh's + `searchpath' function. + 2005-05-14 Werner LEMBERG * contrib/pic2graph/pic2graph.sh, contrib/graph2graph.sh, @@ -135,7 +170,7 @@ * src/roff/nroff/nroff.sh: Make the script accept option `-M'. 2005-04-01 Kees Zeelenberg - Werner LEMBERG + Werner LEMBERG Add binary relocation support for Windows platforms. diff --git a/PROBLEMS b/PROBLEMS index f096e550..ba43b3ce 100644 --- a/PROBLEMS +++ b/PROBLEMS @@ -633,13 +633,13 @@ as empty): Create a script called 'eqn': - > #!/bin/sh + > #! /bin/sh > if [ ${1:-""} = /usr/pub/eqnchar ] ; then shift ; fi > geqn $* and a script called 'neqn': - > #!/bin/sh + > #! /bin/sh > if [ ${1:-""} = /usr/pub/eqnchar ] ; then shift ; fi > geqn -Tascii $* @@ -659,7 +659,7 @@ To get PostScript output from 'man -t', you also need to create a --- /usr/local/bin/psroff Sat Feb 13 17:45:46 1993 *************** *** 1,8 **** - #!/bin/sh + #! /bin/sh ! # Emulate nroff with groff. prog="$0" @@ -668,7 +668,7 @@ To get PostScript output from 'man -t', you also need to create a for i --- 1,8 ---- - #!/bin/sh + #! /bin/sh ! # Emulate psroff with groff. prog="$0" diff --git a/aclocal.m4 b/aclocal.m4 index 2e122d17..13bcfac7 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -202,7 +202,7 @@ AC_DEFUN([GROFF_CSH_HACK], [AC_MSG_CHECKING([for csh hash hack]) cat <conftest.sh -#!/bin/sh +#! /bin/sh true || exit 0 export PATH || exit 0 exit 1 diff --git a/arch/misc/shdeps.sh b/arch/misc/shdeps.sh index 623f7a55..133aea5e 100644 --- a/arch/misc/shdeps.sh +++ b/arch/misc/shdeps.sh @@ -1,7 +1,7 @@ -#!/bin/sh +#! /bin/sh # shdeps.sh: Generate OS dependency fixups, for `groff' shell scripts # -# Copyright (C) 2004 Free Software Foundation, Inc. +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. # Written by Keith Marshall (keith.d.marshall@ntlworld.com) # # Invoked only by `make', as: @@ -40,6 +40,7 @@ then cat << ETX \\ GROFF_RUNTIME="\${GROFF_BIN_PATH=$3}:" +/@PATH_SEARCH_SETUP@/d ETX else @@ -83,6 +84,34 @@ case "\$OSTYPE" in\\ GROFF_RUNTIME=\${GROFF_BIN_PATH="$POSIX_BINDIR"}";" ;;\\ esac ETX + # On Microsoft platforms, we may also need to configure + # the PATH search function, used in the `pdfroff' script, + # to use ';', instead of ':', as the PATH_SEPARATOR. + + cat << ETX +/@PATH_SEARCH_SETUP@/c\\ +#\\ +# This implementation is configured for a Microsoft platform.\\ +# Thus, the default PATH_SEPARATOR is ';', although some shells may\\ +# use the POSIX standard ':' instead. Therefore, we need to examine\\ +# the OSTYPE environment variable, to identify which is appropriate\\ +# to make PATH searches work correctly.\\ +#\\ + case "\$OSTYPE" in\\ +#\\ + msys | cygwin)\\ + #\\ + # These emulate POSIX, and use ':'\\ + #\\ + PATH_SEPARATOR=\${PATH_SEPARATOR-':'} ;;\\ +#\\ + *)\\ + #\\ + # For anything else, default to ';'\\ + #\\ + PATH_SEPARATOR=\${PATH_SEPARATOR-';'} ;;\\ + esac +ETX fi diff --git a/configure b/configure index b0452396..107aadca 100755 --- a/configure +++ b/configure @@ -5721,7 +5721,7 @@ echo "$as_me:$LINENO: checking for csh hash hack" >&5 echo $ECHO_N "checking for csh hash hack... $ECHO_C" >&6 cat <conftest.sh -#!/bin/sh +#! /bin/sh true || exit 0 export PATH || exit 0 exit 1 diff --git a/contrib/eqn2graph/eqn2graph.sh b/contrib/eqn2graph/eqn2graph.sh index 1bc6dec1..be93d9f5 100644 --- a/contrib/eqn2graph/eqn2graph.sh +++ b/contrib/eqn2graph/eqn2graph.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#! /bin/sh # # eqn2graph -- compile EQN equation descriptions to bitmap images # diff --git a/contrib/gdiffmk/gdiffmk.sh b/contrib/gdiffmk/gdiffmk.sh index 85acbe9c..68e5b8f5 100644 --- a/contrib/gdiffmk/gdiffmk.sh +++ b/contrib/gdiffmk/gdiffmk.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#! /bin/sh # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # Written by Mike Bianchi > diff --git a/contrib/gdiffmk/tests/runtests.in b/contrib/gdiffmk/tests/runtests.in index 200a95b1..82952652 100644 --- a/contrib/gdiffmk/tests/runtests.in +++ b/contrib/gdiffmk/tests/runtests.in @@ -1,4 +1,4 @@ -#!/bin/sh +#! /bin/sh # A very simple function test for gdiffmk.sh. srcdir=@srcdir@ diff --git a/contrib/grap2graph/grap2graph.sh b/contrib/grap2graph/grap2graph.sh index 0c9dd157..eef2177e 100644 --- a/contrib/grap2graph/grap2graph.sh +++ b/contrib/grap2graph/grap2graph.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#! /bin/sh # # grap2graph -- compile graph description descriptions to bitmap images # diff --git a/contrib/groffer/groffer.sh b/contrib/groffer/groffer.sh index 0a352766..c2146a23 100644 --- a/contrib/groffer/groffer.sh +++ b/contrib/groffer/groffer.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#! /bin/sh # groffer - display groff files diff --git a/contrib/mm/mmroff.pl b/contrib/mm/mmroff.pl index 155550bf..f61daa10 100644 --- a/contrib/mm/mmroff.pl +++ b/contrib/mm/mmroff.pl @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#! /usr/bin/perl use strict; # runs groff in safe mode, that seems to be the default diff --git a/contrib/mom/momdoc/appendices.html b/contrib/mom/momdoc/appendices.html index fa62535e..6b5b63fc 100644 --- a/contrib/mom/momdoc/appendices.html +++ b/contrib/mom/momdoc/appendices.html @@ -506,7 +506,7 @@ script requires an argument (the .pfb filename), then prompts for the GROFF_FONTNAME.

-#!/bin/bash
+#! /bin/bash
 
 # A script for installing Type1 fonts.
 #
diff --git a/contrib/pdfmark/ChangeLog b/contrib/pdfmark/ChangeLog
index b96debed..1b2e5bab 100644
--- a/contrib/pdfmark/ChangeLog
+++ b/contrib/pdfmark/ChangeLog
@@ -1,3 +1,19 @@
+2005-05-17  Keith Marshall  
+
+	Improve portability of `pdfroff' shell script.
+
+	* pdfroff.sh: Add space in shebang, conforming to portability
+	guidelines in `autoconf' docs.
+	(searchpath): New shell function; use it instead of `type' command
+	to locate prerequisite helper programs.
+
+	* pdfroff.man: Socument influence of `TYPE' and `PATH_SEPARATOR'
+	environment variables.
+
+	* Makefile.sub: (pdfroff): Make it depend on SH_DEPS_SED_SCRIPT,
+	from arch/misc/shdeps.sh; use it to customize PATH_SEPARATOR
+	initialization code for `searchpath' function in pdfroff.sh.
+
 2005-05-16  Keith Marshall  
 
 	Interim documentation update.
diff --git a/contrib/pdfmark/Makefile.sub b/contrib/pdfmark/Makefile.sub
index af7d01bf..387dc167 100644
--- a/contrib/pdfmark/Makefile.sub
+++ b/contrib/pdfmark/Makefile.sub
@@ -71,12 +71,13 @@ gnu.eps:
 	    $(pnmtops_nosetpage) -noturn -rle >$@ ; \
 	fi
 
-pdfroff: pdfroff.sh
+pdfroff: pdfroff.sh $(SH_DEPS_SED_SCRIPT)
 	$(RM) $@
-	sed -e "s|@VERSION@|$(version)$(revision)|" \
+	sed -f $(SH_DEPS_SED_SCRIPT) \
+	    -e "s|@VERSION@|$(version)$(revision)|" \
 	    -e "s|@GROFF_AWK_INTERPRETERS@|$(ALT_AWK_PROGS)|" \
 	    -e "s|@GROFF_GHOSTSCRIPT_INTERPRETERS@|$(ALT_GHOSTSCRIPT_PROGS)|" \
-	    -e "s|@GROFF_BIN_DIR@|$(bindir)|" $^ >$@
+	    -e "s|@GROFF_BIN_DIR@|$(bindir)|" $(srcdir)/pdfroff.sh >$@
 	chmod +x $@
 
 install_data: $(make_install_pdfdoc)
diff --git a/contrib/pdfmark/pdfroff.man b/contrib/pdfmark/pdfroff.man
index a1cc2732..7d83cdd9 100644
--- a/contrib/pdfmark/pdfroff.man
+++ b/contrib/pdfmark/pdfroff.man
@@ -420,6 +420,30 @@ if none of these are found,
 will issue a warning message, and continue processing;
 however, in this case, no reference dictionary will be created.
 .TP
+.B OSTYPE
+Typically defined automatically by the operating system,
+.B OSTYPE
+is used on Microsoft Win32/MS\(hyDOS platforms
+.IR only ,
+to infer the default
+.B PATH_SEPARATOR
+character,
+which is used when parsing the process
+.B PATH
+to search for external helper programs.
+.TP
+.B PATH_SEPARATOR
+If set,
+.B PATH_SEPARATOR
+overrides the default separator character,
+(':' on POSIX/UNIX systems,
+inferred from
+.B OSTYPE
+on Microsoft Win32/MS\(hyDOS),
+which is used when parsing the process
+.B PATH
+to search for external helper programs.
+.TP
 .B SHOW_PROGRESS
 If this is set to a non-empty value, then
 .B pdfroff
diff --git a/contrib/pdfmark/pdfroff.sh b/contrib/pdfmark/pdfroff.sh
index abb18926..8acff214 100644
--- a/contrib/pdfmark/pdfroff.sh
+++ b/contrib/pdfmark/pdfroff.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#! /bin/sh
 # ------------------------------------------------------------------------------
 #
 # Function: Format PDF Output from groff Markup
@@ -37,36 +37,66 @@
 #
   CMD=`exec 2>$NULLDEV; basename $0` || CMD=$0
 #
+# To ensure that prerequisite helper programs are available, and are
+# executable, a [fairly] portable method of detecting such programs is
+# provided by function `searchpath'.
+#
+  searchpath(){
+  #
+  # Usage:  searchpath progname path
+  #
+    IFS="${PATH_SEPARATOR-":"}" prog=':'
+    for dir in $2
+    do
+      for ext in '' '.exe'
+      #
+      # try `progname' with all well known extensions
+      # (e.g. Win32 may require `progname.exe')
+      #
+      do
+        try="$dir/$1$ext"
+        test -f "$try" && test -x "$try" && prog="$try" && break
+      done
+      test "$prog" = ":" || break
+    done
+    echo "$prog"
+  }
+# @PATH_SEARCH_SETUP@
+#
 # We need both 'grep' and 'sed' programs, to parse script options,
 # and we also need 'cat', to display help and some error messages,
 # so ensure they are all installed, before we continue.
-# (Again, note that we first check the status from 'type', BEFORE
-#  we attempt to use the result, because Cygwin's 'ash' uses 'stdout'
-#  instead of 'stderr', to display its 'not found' message).
 #
-  CAT=':' GREP=':' SED=':'
-  type cat >$NULLDEV 2>&1 && CAT=`set :\`type cat\` ; eval echo '$'$#`
-  type grep >$NULLDEV 2>&1 && GREP=`set :\`type grep\` ; eval echo '$'$#`
-  type sed >$NULLDEV 2>&1 && SED=`set :\`type sed\` ; eval echo '$'$#`
+  CAT=`searchpath cat "$PATH"`
+  GREP=`searchpath grep "$PATH"`
+  SED=`searchpath sed "$PATH"`
 #
 # Another fundamental requirement is the 'groff' program itself;
-# we will first perform a PATH search to locate this;  however,
-# we will prefer any version existing in a specified GROFF_BIN_DIR,
-# or, if unspecified, the installed location of 'groff' programs;
-# (this will override the result of the initial PATH search).
+# we MUST use a 'groff' program located in 'GROFF_BIN_DIR', if this
+# is specified; if not, we will search 'GROFF_BIN_PATH', only falling
+# back to a 'PATH' search, if neither of these is specified.
+#
+  if test -n "$GROFF_BIN_DIR"
+  then
+    GPATH=GROFF_BIN_DIR
+    GROFF=`searchpath groff "$GROFF_BIN_DIR"`
 #
-  GROFF=':'
-  type groff >$NULLDEV 2>&1 && GROFF=`set :\`type groff\` ; eval echo '$'$#`
-  type ${GROFF_BIN_DIR="@GROFF_BIN_DIR@"}/groff >$NULLDEV 2>&1 \
-    && GROFF=`set :\`type $GROFF_BIN_DIR/groff\` ; eval echo '$'$#`
+  elif test -n "$GROFF_BIN_PATH"
+  then
+    GPATH=GROFF_BIN_PATH
+    GROFF=`searchpath groff "$GROFF_BIN_PATH"`
+#
+  else
+    GPATH=PATH
+    GROFF=`searchpath groff "$PATH"`
+  fi
 #
 # If one or more of these is missing, diagnose and bail out.
 #
-  NO=''
-  NOPROG="$CMD: installation problem: cannot find program"
+  NO='' NOPROG="$CMD: installation problem: cannot find program"
   test "$CAT" = ":" && echo >&2 "$NOPROG 'cat' in PATH" && NO="$NO 'cat'"
   test "$GREP" = ":" && echo >&2 "$NOPROG 'grep' in PATH" && NO="$NO 'grep'"
-  test "$GROFF" = ":" && echo >&2 "$NOPROG 'groff' in $GBIN" && NO="$NO 'groff'"
+  test "$GROFF" = ":" && echo >&2 "$NOPROG 'groff' in $GPATH" && NO="$NO 'groff'"
   test "$SED" = ":" && echo >&2 "$NOPROG 'sed' in PATH" && NO="$NO 'sed'"
   if test -n "$NO"
   then
@@ -349,15 +379,19 @@
 #   In order to correctly resolve 'pdfmark' references,
 #   we need to have both the 'awk' and 'diff' programs available.
 #
-    NO='' AWK=':'
-    eval set ${GROFF_AWK_INTERPRETER-"@GROFF_AWK_INTERPRETERS@"}
-    while test $# -gt 0
-    do
-      type $1 >$NULLDEV 2>&1 && AWK=`set :\`type $1\` ; eval echo '$'$#`
-      test "$AWK" = ":" || set "$AWK"
-      shift
-    done
-    type diff >$NULLDEV 2>&1 && DIFF=`set :\`type diff\` ; eval echo '$'$#`
+    NO=''
+    if test -n "$GROFF_AWK_INTERPRETER"
+    then
+      AWK="$GROFF_AWK_INTERPRETER"
+      test -f "$AWK" && test -x "$AWK" || AWK=":"
+    else
+      for prog in @GROFF_AWK_INTERPRETERS@
+      do
+	AWK=`searchpath $prog "$PATH"`
+	test "$AWK" = ":" || break
+      done
+    fi
+    DIFF=`searchpath diff "$PATH"`
     test "$AWK" = ":" && echo >&2 "$NOPROG 'awk' in PATH" && NO="$NO 'awk'"
     test "$DIFF" = ":" && echo >&2 "$NOPROG 'diff' in PATH" && NO="$NO 'diff'"
     if test -n "$NO"
@@ -443,14 +477,17 @@
 # from which the PDF output will be compiled -- but before proceding further ...
 # let's make sure we have a GhostScript interpreter to convert them!
 #
-  GS=':'
-  eval set ${GROFF_GHOSTSCRIPT_INTERPRETER-"@GROFF_GHOSTSCRIPT_INTERPRETERS@"}
-  while test $# -gt 0
-  do
-    type $1 >$NULLDEV 2>&1 && GS=`set :\`type $1\` ; eval echo '$'$#`
-    test "$GS" = ":" || set "$GS"
-    shift
-  done
+  if test -n "$GROFF_GHOSTSCRIPT_INTERPRETER"
+  then
+    GS="$GROFF_GHOSTSCRIPT_INTERPRETER"
+    test -f "$GS" && test -x "$GS" || GS=":"
+  else
+    for prog in @GROFF_GHOSTSCRIPT_INTERPRETERS@
+    do
+      GS=`searchpath $prog "$PATH"`
+      test "$GS" = ":" || break
+    done
+  fi
 #
 # If we could not find a GhostScript interpreter, then we can do no more.
 #
diff --git a/contrib/pic2graph/pic2graph.sh b/contrib/pic2graph/pic2graph.sh
index 9751aae5..241f3917 100644
--- a/contrib/pic2graph/pic2graph.sh
+++ b/contrib/pic2graph/pic2graph.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#! /bin/sh
 #
 # pic2graph -- compile PIC image descriptions to bitmap images
 #
diff --git a/font/devps/generate/afmname b/font/devps/generate/afmname
index 3e837df2..7d193493 100755
--- a/font/devps/generate/afmname
+++ b/font/devps/generate/afmname
@@ -1,4 +1,4 @@
-#!/bin/sh
+#! /bin/sh
 # Fix the path name of an AFM file.
 if test -f "$1"
 then
diff --git a/src/devices/xditview/ad2c b/src/devices/xditview/ad2c
index 43551ae8..ad5d1215 100644
--- a/src/devices/xditview/ad2c
+++ b/src/devices/xditview/ad2c
@@ -1,4 +1,4 @@
-#!/bin/sh
+#! /bin/sh
 #
 #	ad2c : Convert app-defaults file to C strings decls.
 #
diff --git a/src/preproc/eqn/neqn.sh b/src/preproc/eqn/neqn.sh
index f2b5fdfc..f22a2baa 100644
--- a/src/preproc/eqn/neqn.sh
+++ b/src/preproc/eqn/neqn.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#! /bin/sh
 # Provision of this shell script should not be taken to imply that use of
 # GNU eqn with groff -Tascii|-Tlatin1|-Tutf8|-Tcp1047 is supported.
 
diff --git a/src/roff/grog/grog.pl b/src/roff/grog/grog.pl
index 07fa7a44..b802fd56 100644
--- a/src/roff/grog/grog.pl
+++ b/src/roff/grog/grog.pl
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#! /usr/bin/perl
 # grog -- guess options for groff command
 # Inspired by doctype script in Kernighan & Pike, Unix Programming
 # Environment, pp 306-8.
diff --git a/src/roff/grog/grog.sh b/src/roff/grog/grog.sh
index 3999d77d..1a937cb1 100644
--- a/src/roff/grog/grog.sh
+++ b/src/roff/grog/grog.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#! /bin/sh
 # grog -- guess options for groff command
 # Like doctype in Kernighan & Pike, Unix Programming Environment, pp 306-8.
 
diff --git a/src/roff/nroff/nroff.sh b/src/roff/nroff/nroff.sh
index 6eac45bf..cc63fa7a 100644
--- a/src/roff/nroff/nroff.sh
+++ b/src/roff/nroff/nroff.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#! /bin/sh
 # Emulate nroff with groff.
 
 prog="$0"
-- 
2.11.4.GIT