]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
OS400: fix shellcheck warnings in scripts
authorViktor Szakats <commit@vsz.me>
Sun, 7 Apr 2024 12:39:59 +0000 (12:39 +0000)
committerViktor Szakats <commit@vsz.me>
Thu, 11 Apr 2024 07:48:51 +0000 (07:48 +0000)
- use `$()` instead of backticks, and re-arrange double-quotes inside.
- add missing `|| exit 1` to `cd` calls. (could be dropped by using `set -eu`.)
- add `-n` to a few `if`s.
- shorten redirections by using `{} >` (as shellcheck recommended).
- silence warnings where variables were detected as unused (SC2034).
- a couple misc updates to silence warnings.
- switch to bash shebang for `-ot` feature.
- split two lines to unbreak syntax highlighting in my editor. (`$(expr \`, `$(dirname \`)

Also enable CI checks for OS/400 shell scripts.

Ref: #13307
Closes #13309

.github/scripts/shellcheck.sh
packages/OS400/config400.default
packages/OS400/initscript.sh
packages/OS400/make-include.sh
packages/OS400/make-lib.sh
packages/OS400/make-src.sh
packages/OS400/make-tests.sh
packages/OS400/makefile.sh

index dabea19f3585669eb0b596156a79d2ba7bfbf1bd..b4a07c58c3942d2ae30cf903e490f13f0491e8a3 100755 (executable)
@@ -3,10 +3,8 @@
 #
 # SPDX-License-Identifier: curl
 
-# FIXME: packages/OS400/* scripts
-
 shellcheck --version
 # shellcheck disable=SC2046
 shellcheck --exclude=1091 \
   --enable=avoid-nullary-conditions,deprecate-which \
-  $(grep -l -E '^#!(/usr/bin/env bash|/bin/sh|/bin/bash)' $(git ls-files | grep -v -F 'packages/OS400/'))
+  $(grep -l -E '^#!(/usr/bin/env bash|/bin/sh|/bin/bash)' $(git ls-files))
index 91a82771fb9eff350da65430de8ee837e4252278..41d62653112699246b8c40d03b524ea6254d91a3 100644 (file)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/env bash
 #***************************************************************************
 #                                  _   _ ____  _
 #  Project                     ___| | | |  _ \| |
index b75055a8dc953b8317fb048f34ea90a0a0e38933..a3bd65ae4f1df4cd872a730d3a7462dd946fda9b 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/env bash
 #***************************************************************************
 #                                  _   _ ____  _
 #  Project                     ___| | | |  _ \| |
@@ -33,14 +33,14 @@ setenv()
 {
         #       Define and export.
 
-        eval ${1}="${2}"
-        export ${1}
+        eval "${1}=${2}"
+        export "${1?}"
 }
 
 
 case "${SCRIPTDIR}" in
 /*)     ;;
-*)      SCRIPTDIR="`pwd`/${SCRIPTDIR}"
+*)      SCRIPTDIR="$(pwd)/${SCRIPTDIR}"
 esac
 
 while true
@@ -52,14 +52,14 @@ done
 
 #  The script directory is supposed to be in $TOPDIR/packages/os400.
 
-TOPDIR=`dirname "${SCRIPTDIR}"`
-TOPDIR=`dirname "${TOPDIR}"`
+TOPDIR=$(dirname "${SCRIPTDIR}")
+TOPDIR=$(dirname "${TOPDIR}")
 export SCRIPTDIR TOPDIR
 
 #  Extract the SONAME from the library makefile.
 
-SONAME=`sed -e '/^VERSIONCHANGE=/!d;s/^.*=\([0-9]*\).*/\1/'             \
-                                        < "${TOPDIR}/lib/Makefile.soname"`
+SONAME="$(sed -e '/^VERSIONCHANGE=/!d;s/^.*=\([0-9]*\).*/\1/'           \
+                                        < "${TOPDIR}/lib/Makefile.soname")"
 export SONAME
 
 #       Get OS/400 configuration parameters.
@@ -71,24 +71,24 @@ fi
 
 #       Need to get the version definitions.
 
-LIBCURL_VERSION=`grep '^#define  *LIBCURL_VERSION '                     \
+LIBCURL_VERSION=$(grep '^#define  *LIBCURL_VERSION '                    \
                         "${TOPDIR}/include/curl/curlver.h"              |
-                sed 's/.*"\(.*\)".*/\1/'`
-LIBCURL_VERSION_MAJOR=`grep '^#define  *LIBCURL_VERSION_MAJOR '         \
+                sed 's/.*"\(.*\)".*/\1/')
+LIBCURL_VERSION_MAJOR=$(grep '^#define  *LIBCURL_VERSION_MAJOR '        \
                         "${TOPDIR}/include/curl/curlver.h"              |
-                sed 's/^#define  *LIBCURL_VERSION_MAJOR  *\([^ ]*\).*/\1/'`
-LIBCURL_VERSION_MINOR=`grep '^#define  *LIBCURL_VERSION_MINOR '         \
+                sed 's/^#define  *LIBCURL_VERSION_MAJOR  *\([^ ]*\).*/\1/')
+LIBCURL_VERSION_MINOR=$(grep '^#define  *LIBCURL_VERSION_MINOR '        \
                         "${TOPDIR}/include/curl/curlver.h"              |
-                sed 's/^#define  *LIBCURL_VERSION_MINOR  *\([^ ]*\).*/\1/'`
-LIBCURL_VERSION_PATCH=`grep '^#define  *LIBCURL_VERSION_PATCH '         \
+                sed 's/^#define  *LIBCURL_VERSION_MINOR  *\([^ ]*\).*/\1/')
+LIBCURL_VERSION_PATCH=$(grep '^#define  *LIBCURL_VERSION_PATCH '        \
                         "${TOPDIR}/include/curl/curlver.h"              |
-                sed 's/^#define  *LIBCURL_VERSION_PATCH  *\([^ ]*\).*/\1/'`
-LIBCURL_VERSION_NUM=`grep '^#define  *LIBCURL_VERSION_NUM '             \
+                sed 's/^#define  *LIBCURL_VERSION_PATCH  *\([^ ]*\).*/\1/')
+LIBCURL_VERSION_NUM=$(grep '^#define  *LIBCURL_VERSION_NUM '            \
                         "${TOPDIR}/include/curl/curlver.h"              |
-                sed 's/^#define  *LIBCURL_VERSION_NUM  *0x\([^ ]*\).*/\1/'`
-LIBCURL_TIMESTAMP=`grep '^#define  *LIBCURL_TIMESTAMP '                 \
+                sed 's/^#define  *LIBCURL_VERSION_NUM  *0x\([^ ]*\).*/\1/')
+LIBCURL_TIMESTAMP=$(grep '^#define  *LIBCURL_TIMESTAMP '                \
                         "${TOPDIR}/include/curl/curlver.h"              |
-                sed 's/.*"\(.*\)".*/\1/'`
+                sed 's/.*"\(.*\)".*/\1/')
 export LIBCURL_VERSION
 export LIBCURL_VERSION_MAJOR LIBCURL_VERSION_MINOR LIBCURL_VERSION_PATCH
 export LIBCURL_VERSION_NUM LIBCURL_TIMESTAMP
@@ -119,7 +119,7 @@ action_needed()
 
 {
         [ ! -e "${1}" ] && return 0
-        [ "${2}" ] || return 1
+        [ -n "${2}" ] || return 1
         [ "${1}" -ot "${2}" ] && return 0
         return 1
 }
@@ -136,7 +136,7 @@ canonicalize_path()
 {
         if expr "${1}" : '^/' > /dev/null
         then    P="${1}"
-        else    P="`pwd`/${1}"
+        else    P="$(pwd)/${1}"
         fi
 
         R=
@@ -147,7 +147,8 @@ canonicalize_path()
         do      IFS="${IFSSAVE}"
                 case "${C}" in
                 .)      ;;
-                ..)     R=`expr "${R}" : '^\(.*/\)..*'`
+                ..)     R=$(expr \
+                                 "${R}" : '^\(.*/\)..*')
                         ;;
                 ?*)     R="${R}${C}/"
                         ;;
@@ -156,7 +157,7 @@ canonicalize_path()
         done
 
         IFS="${IFSSAVE}"
-        echo "/`expr "${R}" : '^\(.*\)/'`"
+        echo "/$(expr "${R}" : '^\(.*\)/')"
 }
 
 
@@ -172,7 +173,8 @@ make_module()
         MODULES="${MODULES} ${1}"
         MODIFSNAME="${LIBIFSNAME}/${1}.MODULE"
         action_needed "${MODIFSNAME}" "${2}" || return 0;
-        SRCDIR=`dirname \`canonicalize_path "${2}"\``
+        SRCDIR="$(dirname \
+                          "$(canonicalize_path "${2}")")"
 
         #       #pragma convert has to be in the source file itself, i.e.
         #               putting it in an include file makes it only active
@@ -180,10 +182,12 @@ make_module()
         #       Thus we build a temporary file with the pragma prepended to
         #               the source file and we compile that temporary file.
 
-        echo "#line 1 \"${2}\"" > __tmpsrcf.c
-        echo "#pragma convert(819)" >> __tmpsrcf.c
-        echo "#line 1" >> __tmpsrcf.c
-        cat "${2}" >> __tmpsrcf.c
+        {
+                echo "#line 1 \"${2}\""
+                echo "#pragma convert(819)"
+                echo "#line 1"
+                cat "${2}"
+        } > __tmpsrcf.c
         CMD="CRTCMOD MODULE(${TARGETLIB}/${1}) SRCSTMF('__tmpsrcf.c')"
         CMD="${CMD} SYSIFCOPT(*IFS64IO *ASYNCSIGNAL)"
 #       CMD="${CMD} OPTION(*INCDIRFIRST *SHOWINC *SHOWSYS)"
@@ -217,12 +221,13 @@ make_module()
         then    DEFINES="${DEFINES} USE_LIBSSH2"
         fi
 
-        if [ "${DEFINES}" ]
+        if [ -n "${DEFINES}" ]
         then    CMD="${CMD} DEFINE(${DEFINES})"
         fi
 
         CLcommand "${CMD}"
         rm -f __tmpsrcf.c
+        # shellcheck disable=SC2034
         LINK=YES
 }
 
@@ -272,7 +277,7 @@ versioned_copy()
 get_make_vars()
 
 {
-        eval "`sed -e ': begin'                                         \
+        eval "$(sed -e ': begin'                                        \
                 -e '/\\\\$/{'                                           \
                 -e 'N'                                                  \
                 -e 's/\\\\\\n/ /'                                       \
@@ -283,5 +288,5 @@ get_make_vars()
                 -e 's/[[:space:]]*=[[:space:]]*/=/'                     \
                 -e 's/=\\(.*[^[:space:]]\\)[[:space:]]*$/=\\"\\1\\"/'   \
                 -e 's/\\\$(\\([^)]*\\))/\${\\1}/g'                      \
-                < \"${1}\"`"
+                < \""${1}"\")"
 }
index 30235eb79066bc3801aee0829b9c6cb1a53e3ab5..6f092c4845c2f0ae20a17bdde544b9ecb78822b3 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/env bash
 #***************************************************************************
 #                                  _   _ ____  _
 #  Project                     ___| | | |  _ \| |
@@ -26,9 +26,9 @@
 #       Installation of the header files in the OS/400 library.
 #
 
-SCRIPTDIR=`dirname "${0}"`
+SCRIPTDIR=$(dirname "${0}")
 . "${SCRIPTDIR}/initscript.sh"
-cd "${TOPDIR}/include"
+cd "${TOPDIR}/include" || exit 1
 
 
 #       Create the OS/400 source program file for the header files.
@@ -71,16 +71,16 @@ copy_hfile()
 #       Copy the header files.
 
 for HFILE in curl/*.h ${SCRIPTDIR}/ccsidcurl.h
-do      case "`basename \"${HFILE}\" .h`" in
+do      case "$(basename "${HFILE}" .h)" in
         stdcheaders|typecheck-gcc)
                 continue;;
         esac
 
-        DEST="${SRCPF}/`db2_name \"${HFILE}\" nomangle`.MBR"
+        DEST="${SRCPF}/$(db2_name "${HFILE}" nomangle).MBR"
 
         if action_needed "${DEST}" "${HFILE}"
         then    copy_hfile "${DEST}" "${HFILE}"
-                IFSDEST="${IFSINCLUDE}/`basename \"${HFILE}\"`"
+                IFSDEST="${IFSINCLUDE}/$(basename "${HFILE}")"
                 rm -f "${IFSDEST}"
                 ln -s "${DEST}" "${IFSDEST}"
         fi
index 8179d816d57c81552337bd32f30d32519b5bfc1a..d2f467feaa69ce7b117a607d60f5ed82eb4d951b 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/env bash
 #***************************************************************************
 #                                  _   _ ____  _
 #  Project                     ___| | | |  _ \| |
@@ -26,9 +26,9 @@
 #       libcurl compilation script for the OS/400.
 #
 
-SCRIPTDIR=`dirname "${0}"`
+SCRIPTDIR=$(dirname "${0}")
 . "${SCRIPTDIR}/initscript.sh"
-cd "${TOPDIR}/lib"
+cd "${TOPDIR}/lib" || exit 1
 
 #       Need to have IFS access to the mih/cipher header file.
 
@@ -40,10 +40,12 @@ fi
 
 #      Create and compile the identification source file.
 
-echo '#pragma comment(user, "libcurl version '"${LIBCURL_VERSION}"'")' > os400.c
-echo '#pragma comment(user, __DATE__)' >> os400.c
-echo '#pragma comment(user, __TIME__)' >> os400.c
-echo '#pragma comment(copyright, "Copyright (C) Daniel Stenberg et al. OS/400 version by P. Monnerat")' >> os400.c
+{
+        echo '#pragma comment(user, "libcurl version '"${LIBCURL_VERSION}"'")'
+        echo '#pragma comment(user, __DATE__)'
+        echo '#pragma comment(user, __TIME__)'
+        echo '#pragma comment(copyright, "Copyright (C) Daniel Stenberg et al. OS/400 version by P. Monnerat")'
+} > os400.c
 make_module     OS400           os400.c         BUILDING_LIBCURL
 LINK=                           # No need to rebuild service program yet.
 MODULES=
@@ -56,13 +58,14 @@ get_make_vars Makefile.inc
 
 #       Compile the sources into modules.
 
-INCLUDES="'`pwd`'"
+# shellcheck disable=SC2034
+INCLUDES="'$(pwd)'"
 
 make_module     OS400SYS        "${SCRIPTDIR}/os400sys.c"       BUILDING_LIBCURL
 make_module     CCSIDCURL       "${SCRIPTDIR}/ccsidcurl.c"      BUILDING_LIBCURL
 
 for SRC in ${CSOURCES}
-do      MODULE=`db2_name "${SRC}"`
+do      MODULE=$(db2_name "${SRC}")
         make_module "${MODULE}" "${SRC}" BUILDING_LIBCURL
 done
 
@@ -73,7 +76,7 @@ if action_needed "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
 then    LINK=YES
 fi
 
-if [ "${LINK}" ]
+if [ -n "${LINK}" ]
 then    rm -rf "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
         CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${STATBNDDIR})"
         CMD="${CMD} TEXT('LibCurl API static binding directory')"
@@ -101,17 +104,17 @@ fi
 #       - Unfold lines from the header files so that they contain a semicolon.
 #       - Keep only CURL_EXTERN definitions.
 #       - Remove the CURL_DEPRECATED and CURL_TEMP_PRINTF macro calls.
-#      - Drop the parenthesized function arguments and what follows.
+#       - Drop the parenthesized function arguments and what follows.
 #       - Keep the trailing function name only.
 
-EXPORTS=`cat "${TOPDIR}"/include/curl/*.h "${SCRIPTDIR}/ccsidcurl.h"   |
+EXPORTS=$(cat "${TOPDIR}"/include/curl/*.h "${SCRIPTDIR}/ccsidcurl.h"   |
          sed -e 'H;s/.*//;x;s/\n//;s/.*/& /'                            \
              -e '/^CURL_EXTERN[[:space:]]/!d'                           \
              -e '/\;/!{x;d;}'                                           \
              -e 's/ CURL_DEPRECATED([^)]*)//g'                          \
              -e 's/ CURL_TEMP_PRINTF([^)]*)//g'                         \
              -e 's/[[:space:]]*(.*$//'                                  \
-             -e 's/^.*[^A-Za-z0-9_]\([A-Za-z0-9_]*\)$/\1/'`
+             -e 's/^.*[^A-Za-z0-9_]\([A-Za-z0-9_]*\)$/\1/')
 
 
 #       Create the service program exportation file in DB2 member if needed.
@@ -122,7 +125,7 @@ if action_needed "${BSF}" Makefile.am
 then    LINK=YES
 fi
 
-if [ "${LINK}" ]
+if [ -n "${LINK}" ]
 then    echo " STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('LIBCURL_${SONAME}')" \
             > "${BSF}"
         for EXPORT in ${EXPORTS}
@@ -139,7 +142,7 @@ if action_needed "${LIBIFSNAME}/${SRVPGM}.SRVPGM"
 then    LINK=YES
 fi
 
-if [ "${LINK}" ]
+if [ -n "${LINK}" ]
 then    CMD="CRTSRVPGM SRVPGM(${TARGETLIB}/${SRVPGM})"
         CMD="${CMD} SRCFILE(${TARGETLIB}/TOOLS) SRCMBR(BNDSRC)"
         CMD="${CMD} MODULE(${TARGETLIB}/OS400)"
@@ -167,7 +170,7 @@ if action_needed "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
 then    LINK=YES
 fi
 
-if [ "${LINK}" ]
+if [ -n "${LINK}" ]
 then    rm -rf "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
         CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
         CMD="${CMD} TEXT('LibCurl API dynamic binding directory')"
index 931c1f3359770f452483f8b60b9b1b5320e90fb8..c58b1c186480fa46aac5a7aed05e728ca2fdd201 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/env bash
 #***************************************************************************
 #                                  _   _ ____  _
 #  Project                     ___| | | |  _ \| |
@@ -25,9 +25,9 @@
 #
 #       Command line interface tool compilation script for the OS/400.
 
-SCRIPTDIR=`dirname "${0}"`
+SCRIPTDIR=$(dirname "${0}")
 . "${SCRIPTDIR}/initscript.sh"
-cd "${TOPDIR}/src"
+cd "${TOPDIR}/src" || exit 1
 
 
 #       Get source lists.
@@ -40,25 +40,27 @@ get_make_vars Makefile.inc
 
 #       Compile the sources into modules.
 
+# shellcheck disable=SC2034
 LINK=
 MODULES=
+# shellcheck disable=SC2034
 INCLUDES="'${TOPDIR}/lib'"
 
 for SRC in ${CURLX_CFILES}
-do      MODULE=`db2_name "${SRC}"`
-        MODULE=`db2_name "X${MODULE}"`
+do      MODULE=$(db2_name "${SRC}")
+        MODULE=$(db2_name "X${MODULE}")
         make_module "${MODULE}" "${SRC}"
 done
 
 for SRC in ${CURL_CFILES}
-do      MODULE=`db2_name "${SRC}"`
+do      MODULE=$(db2_name "${SRC}")
         make_module "${MODULE}" "${SRC}"
 done
 
 
 #       Link modules into program.
 
-MODULES="`echo \"${MODULES}\" | sed \"s/[^ ][^ ]*/${TARGETLIB}\/&/g\"`"
+MODULES="$(echo "${MODULES}" | sed "s/[^ ][^ ]*/${TARGETLIB}\/&/g")"
 CMD="CRTPGM PGM(${TARGETLIB}/${CURLPGM})"
 CMD="${CMD} ENTMOD(${TARGETLIB}/CURLMAIN)"
 CMD="${CMD} MODULE(${MODULES})"
index ed475956c9158f176a185014cf176d2fd7ae511f..c76a8f60e79719ea7d20b685c95d36483042bae1 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/env bash
 #***************************************************************************
 #                                  _   _ ____  _
 #  Project                     ___| | | |  _ \| |
@@ -27,9 +27,9 @@
 #
 
 
-SCRIPTDIR=`dirname "${0}"`
+SCRIPTDIR=$(dirname "${0}")
 . "${SCRIPTDIR}/initscript.sh"
-cd "${TOPDIR}/tests"
+cd "${TOPDIR}/tests" || exit 1
 
 
 #       Build programs in a directory.
@@ -40,23 +40,26 @@ build_all_programs()
         #       Compile all programs.
         #       The list is found in variable "noinst_PROGRAMS"
 
-        INCLUDES="'`pwd`' '${TOPDIR}/lib' '${TOPDIR}/src'"
+        # shellcheck disable=SC2034
+        INCLUDES="'$(pwd)' '${TOPDIR}/lib' '${TOPDIR}/src'"
         MODS="${1}"
         SRVPGMS="${2}"
 
+        # shellcheck disable=SC2154
         for PGM in ${noinst_PROGRAMS}
-        do      DB2PGM=`db2_name "${PGM}"`
+        do      DB2PGM=$(db2_name "${PGM}")
                 PGMIFSNAME="${LIBIFSNAME}/${DB2PGM}.PGM"
 
                 #       Extract preprocessor symbol definitions from
                 #               compilation options for the program.
 
-                PGMCFLAGS="`eval echo \"\\${${PGM}_CFLAGS}\"`"
+                PGMCFLAGS="$(eval echo "\${${PGM}_CFLAGS}")"
                 PGMDFNS=
 
                 for FLAG in ${PGMCFLAGS}
                 do      case "${FLAG}" in
-                        -D?*)   DEFINE="`echo \"${FLAG}\" | sed 's/^..//'`"
+                        -D?*)   # shellcheck disable=SC2001
+                                DEFINE="$(echo "${FLAG}" | sed 's/^..//')"
                                 PGMDFNS="${PGMDFNS} '${DEFINE}'"
                                 ;;
                         esac
@@ -64,7 +67,7 @@ build_all_programs()
 
                 #        Compile all C sources for the program into modules.
 
-                PGMSOURCES="`eval echo \"\\${${PGM}_SOURCES}\"`"
+                PGMSOURCES="$(eval echo "\${${PGM}_SOURCES}")"
                 LINK=
                 MODULES=
 
@@ -77,7 +80,7 @@ build_all_programs()
                                 case "${SOURCE}" in
                                 lib*.c) MODULE="${DB2PGM}"
                                         ;;
-                                *)      MODULE=`db2_name "${SOURCE}"`
+                                *)      MODULE=$(db2_name "${SOURCE}")
                                         ;;
                                 esac
 
@@ -85,7 +88,7 @@ build_all_programs()
                                 #               prefix module name with 'X'.
 
                                 case "${SOURCE}" in
-                                ../*)   MODULE=`db2_name "X${MODULE}"`
+                                ../*)   MODULE=$(db2_name "X${MODULE}")
                                             ;;
                                 esac
 
@@ -99,17 +102,17 @@ build_all_programs()
 
                 #       Link program if needed.
 
-                if [ "${LINK}" ]
-                then    PGMLDADD="`eval echo \"\\${${PGM}_LDADD}\"`"
+                if [ -n "${LINK}" ]
+                then    PGMLDADD="$(eval echo "\${${PGM}_LDADD}")"
                         for ARG in ${PGMLDADD}
                         do      case "${ARG}" in
                                 -*)     ;;              # Ignore non-module.
-                                *)      MODULES="${MODULES} "`db2_name "${ARG}"`
+                                *)      MODULES="${MODULES} $(db2_name "${ARG}")"
                                         ;;
                                 esac
                         done
-                        MODULES="`echo \"${MODULES}\" |
-                            sed \"s/[^ ][^ ]*/${TARGETLIB}\/&/g\"`"
+                        MODULES="$(echo "${MODULES}" |
+                            sed "s/[^ ][^ ]*/${TARGETLIB}\/&/g")"
                         CMD="CRTPGM PGM(${TARGETLIB}/${DB2PGM})"
                         CMD="${CMD} ENTMOD(${TARGETLIB}/CURLMAIN)"
                         CMD="${CMD} MODULE(${MODULES} ${MODS})"
@@ -124,7 +127,7 @@ build_all_programs()
 #       Build programs in the server directory.
 
 (
-        cd server
+        cd server || exit 1
         get_make_vars Makefile.inc
         build_all_programs "${TARGETLIB}/OS400SYS"
 )
@@ -133,13 +136,16 @@ build_all_programs()
 #       Build all programs in the libtest subdirectory.
 
 (
-        cd libtest
+        cd libtest || exit 1
         get_make_vars Makefile.inc
 
         #       Special case: redefine chkhostname compilation parameters.
 
+        # shellcheck disable=SC2034
         chkhostname_SOURCES=chkhostname.c
+        # shellcheck disable=SC2034
         chkhostname_LDADD=curl_gethostname.o
 
+        # shellcheck disable=SC2153
         build_all_programs "" "${TARGETLIB}/${SRVPGM}"
 )
index 3d659645dc7524b34c78149fc9c7ee1d187204e3..777cf026fb118b76ced0f65d976204f24141fb26 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/env bash
 #***************************************************************************
 #                                  _   _ ____  _
 #  Project                     ___| | | |  _ \| |
@@ -28,9 +28,9 @@
 #
 #       This is a shell script since make is not a standard component of OS/400.
 
-SCRIPTDIR=`dirname "${0}"`
+SCRIPTDIR=$(dirname "${0}")
 . "${SCRIPTDIR}/initscript.sh"
-cd "${TOPDIR}"
+cd "${TOPDIR}" || exit 1
 
 
 #       Create the OS/400 library if it does not exist.
@@ -57,9 +57,9 @@ for TEXT in "${TOPDIR}/COPYING" "${SCRIPTDIR}/README.OS400"             \
     "${TOPDIR}/docs/FEATURES" "${TOPDIR}/docs/SSLCERTS.md"              \
     "${TOPDIR}/docs/RESOURCES" "${TOPDIR}/docs/VERSIONS.md"             \
     "${TOPDIR}/docs/HISTORY.md"
-do      MEMBER="`basename \"${TEXT}\" .OS400`"
-        MEMBER="`basename \"${MEMBER}\" .md`"
-        MEMBER="${LIBIFSNAME}/DOCS.FILE/`db2_name \"${MEMBER}\"`.MBR"
+do      MEMBER="$(basename "${TEXT}" .OS400)"
+        MEMBER="$(basename "${MEMBER}" .md)"
+        MEMBER="${LIBIFSNAME}/DOCS.FILE/$(db2_name "${MEMBER}").MBR"
 
         [ -e "${TEXT}" ] || continue
 
@@ -83,8 +83,8 @@ fi
 #       Copy RPG examples if needed.
 
 for EXAMPLE in "${SCRIPTDIR}/rpg-examples"/*
-do      MEMBER="`basename \"${EXAMPLE}\"`"
-        IFSMEMBER="${LIBIFSNAME}/RPGXAMPLES.FILE/`db2_name \"${MEMBER}\"`.MBR"
+do      MEMBER="$(basename "${EXAMPLE}")"
+        IFSMEMBER="${LIBIFSNAME}/RPGXAMPLES.FILE/$(db2_name "${MEMBER}").MBR"
 
         [ -e "${EXAMPLE}" ] || continue
 
@@ -92,8 +92,8 @@ do      MEMBER="`basename \"${EXAMPLE}\"`"
         then    CMD="CPY OBJ('${EXAMPLE}') TOOBJ('${IFSMEMBER}')"
                 CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)"
                 CLcommand "${CMD}"
-                MBRTEXT=`sed -e '1!d;/^      \*/!d;s/^ *\* *//'         \
-                             -e 's/ *$//;s/'"'"'/&&/g' < "${EXAMPLE}"`
+                MBRTEXT=$(sed -e '1!d;/^      \*/!d;s/^ *\* *//'        \
+                              -e 's/ *$//;s/'"'"'/&&/g' < "${EXAMPLE}")
                 CMD="CHGPFM FILE(${TARGETLIB}/RPGXAMPLES) MBR(${MEMBER})"
                 CMD="${CMD} SRCTYPE(RPGLE) TEXT('${MBRTEXT}')"
                 CLcommand "${CMD}"