Home | History | Annotate | Line # | Download | only in os400
make.sh revision 1.1.1.1.4.2
      1  1.1.1.1.4.2  pgoyette #!/bin/sh
      2  1.1.1.1.4.2  pgoyette #
      3  1.1.1.1.4.2  pgoyette #       ZLIB compilation script for the OS/400.
      4  1.1.1.1.4.2  pgoyette #
      5  1.1.1.1.4.2  pgoyette #
      6  1.1.1.1.4.2  pgoyette #       This is a shell script since make is not a standard component of OS/400.
      7  1.1.1.1.4.2  pgoyette 
      8  1.1.1.1.4.2  pgoyette 
      9  1.1.1.1.4.2  pgoyette ################################################################################
     10  1.1.1.1.4.2  pgoyette #
     11  1.1.1.1.4.2  pgoyette #                       Tunable configuration parameters.
     12  1.1.1.1.4.2  pgoyette #
     13  1.1.1.1.4.2  pgoyette ################################################################################
     14  1.1.1.1.4.2  pgoyette 
     15  1.1.1.1.4.2  pgoyette TARGETLIB='ZLIB'                # Target OS/400 program library
     16  1.1.1.1.4.2  pgoyette STATBNDDIR='ZLIB_A'             # Static binding directory.
     17  1.1.1.1.4.2  pgoyette DYNBNDDIR='ZLIB'                # Dynamic binding directory.
     18  1.1.1.1.4.2  pgoyette SRVPGM="ZLIB"                   # Service program.
     19  1.1.1.1.4.2  pgoyette IFSDIR='/zlib'                  # IFS support base directory.
     20  1.1.1.1.4.2  pgoyette TGTCCSID='500'                  # Target CCSID of objects
     21  1.1.1.1.4.2  pgoyette DEBUG='*NONE'                   # Debug level
     22  1.1.1.1.4.2  pgoyette OPTIMIZE='40'                   # Optimisation level
     23  1.1.1.1.4.2  pgoyette OUTPUT='*NONE'                  # Compilation output option.
     24  1.1.1.1.4.2  pgoyette TGTRLS='V6R1M0'                 # Target OS release
     25  1.1.1.1.4.2  pgoyette 
     26  1.1.1.1.4.2  pgoyette export TARGETLIB STATBNDDIR DYNBNDDIR SRVPGM IFSDIR
     27  1.1.1.1.4.2  pgoyette export TGTCCSID DEBUG OPTIMIZE OUTPUT TGTRLS
     28  1.1.1.1.4.2  pgoyette 
     29  1.1.1.1.4.2  pgoyette 
     30  1.1.1.1.4.2  pgoyette ################################################################################
     31  1.1.1.1.4.2  pgoyette #
     32  1.1.1.1.4.2  pgoyette #                       OS/400 specific definitions.
     33  1.1.1.1.4.2  pgoyette #
     34  1.1.1.1.4.2  pgoyette ################################################################################
     35  1.1.1.1.4.2  pgoyette 
     36  1.1.1.1.4.2  pgoyette LIBIFSNAME="/QSYS.LIB/${TARGETLIB}.LIB"
     37  1.1.1.1.4.2  pgoyette 
     38  1.1.1.1.4.2  pgoyette 
     39  1.1.1.1.4.2  pgoyette ################################################################################
     40  1.1.1.1.4.2  pgoyette #
     41  1.1.1.1.4.2  pgoyette #                               Procedures.
     42  1.1.1.1.4.2  pgoyette #
     43  1.1.1.1.4.2  pgoyette ################################################################################
     44  1.1.1.1.4.2  pgoyette 
     45  1.1.1.1.4.2  pgoyette #       action_needed dest [src]
     46  1.1.1.1.4.2  pgoyette #
     47  1.1.1.1.4.2  pgoyette #       dest is an object to build
     48  1.1.1.1.4.2  pgoyette #       if specified, src is an object on which dest depends.
     49  1.1.1.1.4.2  pgoyette #
     50  1.1.1.1.4.2  pgoyette #       exit 0 (succeeds) if some action has to be taken, else 1.
     51  1.1.1.1.4.2  pgoyette 
     52  1.1.1.1.4.2  pgoyette action_needed()
     53  1.1.1.1.4.2  pgoyette 
     54  1.1.1.1.4.2  pgoyette {
     55  1.1.1.1.4.2  pgoyette         [ ! -e "${1}" ] && return 0
     56  1.1.1.1.4.2  pgoyette         [ "${2}" ] || return 1
     57  1.1.1.1.4.2  pgoyette         [ "${1}" -ot "${2}" ] && return 0
     58  1.1.1.1.4.2  pgoyette         return 1
     59  1.1.1.1.4.2  pgoyette }
     60  1.1.1.1.4.2  pgoyette 
     61  1.1.1.1.4.2  pgoyette 
     62  1.1.1.1.4.2  pgoyette #       make_module module_name source_name [additional_definitions]
     63  1.1.1.1.4.2  pgoyette #
     64  1.1.1.1.4.2  pgoyette #       Compile source name into module if needed.
     65  1.1.1.1.4.2  pgoyette #       As side effect, append the module name to variable MODULES.
     66  1.1.1.1.4.2  pgoyette #       Set LINK to "YES" if the module has been compiled.
     67  1.1.1.1.4.2  pgoyette 
     68  1.1.1.1.4.2  pgoyette make_module()
     69  1.1.1.1.4.2  pgoyette 
     70  1.1.1.1.4.2  pgoyette {
     71  1.1.1.1.4.2  pgoyette     MODULES="${MODULES} ${1}"
     72  1.1.1.1.4.2  pgoyette     MODIFSNAME="${LIBIFSNAME}/${1}.MODULE"
     73  1.1.1.1.4.2  pgoyette     CSRC="`basename \"${2}\"`"
     74  1.1.1.1.4.2  pgoyette 
     75  1.1.1.1.4.2  pgoyette     if action_needed "${MODIFSNAME}" "${2}"
     76  1.1.1.1.4.2  pgoyette     then    :
     77  1.1.1.1.4.2  pgoyette     elif [ ! "`sed -e \"/<source name=\\\"${CSRC}\\\">/,/<\\\\/source>/!d\" \
     78  1.1.1.1.4.2  pgoyette       -e '/<depend /!d'                                                 \
     79  1.1.1.1.4.2  pgoyette       -e 's/.* name=\"\\([^\"]*\\)\".*/\\1/' < \"${TOPDIR}/treebuild.xml\" |
     80  1.1.1.1.4.2  pgoyette         while read HDR
     81  1.1.1.1.4.2  pgoyette         do      if action_needed \"${MODIFSNAME}\" \"${IFSDIR}/include/${HDR}\"
     82  1.1.1.1.4.2  pgoyette                 then    echo recompile
     83  1.1.1.1.4.2  pgoyette                         break
     84  1.1.1.1.4.2  pgoyette                 fi
     85  1.1.1.1.4.2  pgoyette         done`" ]
     86  1.1.1.1.4.2  pgoyette     then    return 0
     87  1.1.1.1.4.2  pgoyette     fi
     88  1.1.1.1.4.2  pgoyette 
     89  1.1.1.1.4.2  pgoyette     CMD="CRTCMOD MODULE(${TARGETLIB}/${1}) SRCSTMF('${2}')"
     90  1.1.1.1.4.2  pgoyette     CMD="${CMD} SYSIFCOPT(*IFS64IO) OPTION(*INCDIRFIRST)"
     91  1.1.1.1.4.2  pgoyette     CMD="${CMD} LOCALETYPE(*LOCALE) FLAG(10)"
     92  1.1.1.1.4.2  pgoyette     CMD="${CMD} INCDIR('${IFSDIR}/include' ${INCLUDES})"
     93  1.1.1.1.4.2  pgoyette     CMD="${CMD} TGTCCSID(${TGTCCSID}) TGTRLS(${TGTRLS})"
     94  1.1.1.1.4.2  pgoyette     CMD="${CMD} OUTPUT(${OUTPUT})"
     95  1.1.1.1.4.2  pgoyette     CMD="${CMD} OPTIMIZE(${OPTIMIZE})"
     96  1.1.1.1.4.2  pgoyette     CMD="${CMD} DBGVIEW(${DEBUG})"
     97  1.1.1.1.4.2  pgoyette     system "${CMD}"
     98  1.1.1.1.4.2  pgoyette     LINK=YES
     99  1.1.1.1.4.2  pgoyette }
    100  1.1.1.1.4.2  pgoyette 
    101  1.1.1.1.4.2  pgoyette 
    102  1.1.1.1.4.2  pgoyette #       Determine DB2 object name from IFS name.
    103  1.1.1.1.4.2  pgoyette 
    104  1.1.1.1.4.2  pgoyette db2_name()
    105  1.1.1.1.4.2  pgoyette 
    106  1.1.1.1.4.2  pgoyette {
    107  1.1.1.1.4.2  pgoyette         basename "${1}"                                                 |
    108  1.1.1.1.4.2  pgoyette         tr 'a-z-' 'A-Z_'                                                |
    109  1.1.1.1.4.2  pgoyette         sed -e 's/\..*//'                                               \
    110  1.1.1.1.4.2  pgoyette             -e 's/^\(.\).*\(.........\)$/\1\2/'
    111  1.1.1.1.4.2  pgoyette }
    112  1.1.1.1.4.2  pgoyette 
    113  1.1.1.1.4.2  pgoyette 
    114  1.1.1.1.4.2  pgoyette #       Force enumeration types to be the same size as integers.
    115  1.1.1.1.4.2  pgoyette 
    116  1.1.1.1.4.2  pgoyette copy_hfile()
    117  1.1.1.1.4.2  pgoyette 
    118  1.1.1.1.4.2  pgoyette {
    119  1.1.1.1.4.2  pgoyette         sed -e '1i\
    120  1.1.1.1.4.2  pgoyette #pragma enum(int)\
    121  1.1.1.1.4.2  pgoyette ' "${@}" -e '$a\
    122  1.1.1.1.4.2  pgoyette #pragma enum(pop)\
    123  1.1.1.1.4.2  pgoyette '
    124  1.1.1.1.4.2  pgoyette }
    125  1.1.1.1.4.2  pgoyette 
    126  1.1.1.1.4.2  pgoyette 
    127  1.1.1.1.4.2  pgoyette ################################################################################
    128  1.1.1.1.4.2  pgoyette #
    129  1.1.1.1.4.2  pgoyette #                             Script initialization.
    130  1.1.1.1.4.2  pgoyette #
    131  1.1.1.1.4.2  pgoyette ################################################################################
    132  1.1.1.1.4.2  pgoyette 
    133  1.1.1.1.4.2  pgoyette SCRIPTDIR=`dirname "${0}"`
    134  1.1.1.1.4.2  pgoyette 
    135  1.1.1.1.4.2  pgoyette case "${SCRIPTDIR}" in
    136  1.1.1.1.4.2  pgoyette /*)     ;;
    137  1.1.1.1.4.2  pgoyette *)      SCRIPTDIR="`pwd`/${SCRIPTDIR}"
    138  1.1.1.1.4.2  pgoyette esac
    139  1.1.1.1.4.2  pgoyette 
    140  1.1.1.1.4.2  pgoyette while true
    141  1.1.1.1.4.2  pgoyette do      case "${SCRIPTDIR}" in
    142  1.1.1.1.4.2  pgoyette         */.)    SCRIPTDIR="${SCRIPTDIR%/.}";;
    143  1.1.1.1.4.2  pgoyette         *)      break;;
    144  1.1.1.1.4.2  pgoyette         esac
    145  1.1.1.1.4.2  pgoyette done
    146  1.1.1.1.4.2  pgoyette 
    147  1.1.1.1.4.2  pgoyette #  The script directory is supposed to be in ${TOPDIR}/os400.
    148  1.1.1.1.4.2  pgoyette 
    149  1.1.1.1.4.2  pgoyette TOPDIR=`dirname "${SCRIPTDIR}"`
    150  1.1.1.1.4.2  pgoyette export SCRIPTDIR TOPDIR
    151  1.1.1.1.4.2  pgoyette cd "${TOPDIR}"
    152  1.1.1.1.4.2  pgoyette 
    153  1.1.1.1.4.2  pgoyette 
    154  1.1.1.1.4.2  pgoyette #  Extract the version from the master compilation XML file.
    155  1.1.1.1.4.2  pgoyette 
    156  1.1.1.1.4.2  pgoyette VERSION=`sed -e '/^<package /!d'                                        \
    157  1.1.1.1.4.2  pgoyette             -e 's/^.* version="\([0-9.]*\)".*$/\1/' -e 'q'              \
    158  1.1.1.1.4.2  pgoyette             < treebuild.xml`
    159  1.1.1.1.4.2  pgoyette export VERSION
    160  1.1.1.1.4.2  pgoyette 
    161  1.1.1.1.4.2  pgoyette ################################################################################
    162  1.1.1.1.4.2  pgoyette 
    163  1.1.1.1.4.2  pgoyette 
    164  1.1.1.1.4.2  pgoyette #       Create the OS/400 library if it does not exist.
    165  1.1.1.1.4.2  pgoyette 
    166  1.1.1.1.4.2  pgoyette if action_needed "${LIBIFSNAME}"
    167  1.1.1.1.4.2  pgoyette then    CMD="CRTLIB LIB(${TARGETLIB}) TEXT('ZLIB: Data compression API')"
    168  1.1.1.1.4.2  pgoyette         system "${CMD}"
    169  1.1.1.1.4.2  pgoyette fi
    170  1.1.1.1.4.2  pgoyette 
    171  1.1.1.1.4.2  pgoyette 
    172  1.1.1.1.4.2  pgoyette #       Create the DOCS source file if it does not exist.
    173  1.1.1.1.4.2  pgoyette 
    174  1.1.1.1.4.2  pgoyette if action_needed "${LIBIFSNAME}/DOCS.FILE"
    175  1.1.1.1.4.2  pgoyette then    CMD="CRTSRCPF FILE(${TARGETLIB}/DOCS) RCDLEN(112)"
    176  1.1.1.1.4.2  pgoyette         CMD="${CMD} CCSID(${TGTCCSID}) TEXT('Documentation texts')"
    177  1.1.1.1.4.2  pgoyette         system "${CMD}"
    178  1.1.1.1.4.2  pgoyette fi
    179  1.1.1.1.4.2  pgoyette 
    180  1.1.1.1.4.2  pgoyette #       Copy some documentation files if needed.
    181  1.1.1.1.4.2  pgoyette 
    182  1.1.1.1.4.2  pgoyette for TEXT in "${TOPDIR}/ChangeLog" "${TOPDIR}/FAQ"                       \
    183  1.1.1.1.4.2  pgoyette     "${TOPDIR}/README" "${SCRIPTDIR}/README400"
    184  1.1.1.1.4.2  pgoyette do      MEMBER="${LIBIFSNAME}/DOCS.FILE/`db2_name \"${TEXT}\"`.MBR"
    185  1.1.1.1.4.2  pgoyette 
    186  1.1.1.1.4.2  pgoyette         if action_needed "${MEMBER}" "${TEXT}"
    187  1.1.1.1.4.2  pgoyette         then    CMD="CPY OBJ('${TEXT}') TOOBJ('${MEMBER}') TOCCSID(${TGTCCSID})"
    188  1.1.1.1.4.2  pgoyette                 CMD="${CMD} DTAFMT(*TEXT) REPLACE(*YES)"
    189  1.1.1.1.4.2  pgoyette                 system "${CMD}"
    190  1.1.1.1.4.2  pgoyette         fi
    191  1.1.1.1.4.2  pgoyette done
    192  1.1.1.1.4.2  pgoyette 
    193  1.1.1.1.4.2  pgoyette 
    194  1.1.1.1.4.2  pgoyette #       Create the OS/400 source program file for the C header files.
    195  1.1.1.1.4.2  pgoyette 
    196  1.1.1.1.4.2  pgoyette SRCPF="${LIBIFSNAME}/H.FILE"
    197  1.1.1.1.4.2  pgoyette 
    198  1.1.1.1.4.2  pgoyette if action_needed "${SRCPF}"
    199  1.1.1.1.4.2  pgoyette then    CMD="CRTSRCPF FILE(${TARGETLIB}/H) RCDLEN(112)"
    200  1.1.1.1.4.2  pgoyette         CMD="${CMD} CCSID(${TGTCCSID}) TEXT('ZLIB: C/C++ header files')"
    201  1.1.1.1.4.2  pgoyette         system "${CMD}"
    202  1.1.1.1.4.2  pgoyette fi
    203  1.1.1.1.4.2  pgoyette 
    204  1.1.1.1.4.2  pgoyette 
    205  1.1.1.1.4.2  pgoyette #       Create the IFS directory for the C header files.
    206  1.1.1.1.4.2  pgoyette 
    207  1.1.1.1.4.2  pgoyette if action_needed "${IFSDIR}/include"
    208  1.1.1.1.4.2  pgoyette then    mkdir -p "${IFSDIR}/include"
    209  1.1.1.1.4.2  pgoyette fi
    210  1.1.1.1.4.2  pgoyette 
    211  1.1.1.1.4.2  pgoyette #       Copy the header files to DB2 library. Link from IFS include directory.
    212  1.1.1.1.4.2  pgoyette 
    213  1.1.1.1.4.2  pgoyette for HFILE in "${TOPDIR}/"*.h
    214  1.1.1.1.4.2  pgoyette do      DEST="${SRCPF}/`db2_name \"${HFILE}\"`.MBR"
    215  1.1.1.1.4.2  pgoyette 
    216  1.1.1.1.4.2  pgoyette         if action_needed "${DEST}" "${HFILE}"
    217  1.1.1.1.4.2  pgoyette         then    copy_hfile < "${HFILE}" > tmphdrfile
    218  1.1.1.1.4.2  pgoyette 
    219  1.1.1.1.4.2  pgoyette                 #       Need to translate to target CCSID.
    220  1.1.1.1.4.2  pgoyette 
    221  1.1.1.1.4.2  pgoyette                 CMD="CPY OBJ('`pwd`/tmphdrfile') TOOBJ('${DEST}')"
    222  1.1.1.1.4.2  pgoyette                 CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)"
    223  1.1.1.1.4.2  pgoyette                 system "${CMD}"
    224  1.1.1.1.4.2  pgoyette                 # touch -r "${HFILE}" "${DEST}"
    225  1.1.1.1.4.2  pgoyette                 rm -f tmphdrfile
    226  1.1.1.1.4.2  pgoyette         fi
    227  1.1.1.1.4.2  pgoyette 
    228  1.1.1.1.4.2  pgoyette         IFSFILE="${IFSDIR}/include/`basename \"${HFILE}\"`"
    229  1.1.1.1.4.2  pgoyette 
    230  1.1.1.1.4.2  pgoyette         if action_needed "${IFSFILE}" "${DEST}"
    231  1.1.1.1.4.2  pgoyette         then    rm -f "${IFSFILE}"
    232  1.1.1.1.4.2  pgoyette                 ln -s "${DEST}" "${IFSFILE}"
    233  1.1.1.1.4.2  pgoyette         fi
    234  1.1.1.1.4.2  pgoyette done
    235  1.1.1.1.4.2  pgoyette 
    236  1.1.1.1.4.2  pgoyette 
    237  1.1.1.1.4.2  pgoyette #       Install the ILE/RPG header file.
    238  1.1.1.1.4.2  pgoyette 
    239  1.1.1.1.4.2  pgoyette 
    240  1.1.1.1.4.2  pgoyette HFILE="${SCRIPTDIR}/zlib.inc"
    241  1.1.1.1.4.2  pgoyette DEST="${SRCPF}/ZLIB.INC.MBR"
    242  1.1.1.1.4.2  pgoyette 
    243  1.1.1.1.4.2  pgoyette if action_needed "${DEST}" "${HFILE}"
    244  1.1.1.1.4.2  pgoyette then    CMD="CPY OBJ('${HFILE}') TOOBJ('${DEST}')"
    245  1.1.1.1.4.2  pgoyette         CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)"
    246  1.1.1.1.4.2  pgoyette         system "${CMD}"
    247  1.1.1.1.4.2  pgoyette         # touch -r "${HFILE}" "${DEST}"
    248  1.1.1.1.4.2  pgoyette fi
    249  1.1.1.1.4.2  pgoyette 
    250  1.1.1.1.4.2  pgoyette IFSFILE="${IFSDIR}/include/`basename \"${HFILE}\"`"
    251  1.1.1.1.4.2  pgoyette 
    252  1.1.1.1.4.2  pgoyette if action_needed "${IFSFILE}" "${DEST}"
    253  1.1.1.1.4.2  pgoyette then    rm -f "${IFSFILE}"
    254  1.1.1.1.4.2  pgoyette         ln -s "${DEST}" "${IFSFILE}"
    255  1.1.1.1.4.2  pgoyette fi
    256  1.1.1.1.4.2  pgoyette 
    257  1.1.1.1.4.2  pgoyette 
    258  1.1.1.1.4.2  pgoyette #      Create and compile the identification source file.
    259  1.1.1.1.4.2  pgoyette 
    260  1.1.1.1.4.2  pgoyette echo '#pragma comment(user, "ZLIB version '"${VERSION}"'")' > os400.c
    261  1.1.1.1.4.2  pgoyette echo '#pragma comment(user, __DATE__)' >> os400.c
    262  1.1.1.1.4.2  pgoyette echo '#pragma comment(user, __TIME__)' >> os400.c
    263  1.1.1.1.4.2  pgoyette echo '#pragma comment(copyright, "Copyright (C) 1995-2016 Jean-Loup Gailly, Mark Adler. OS/400 version by P. Monnerat.")' >> os400.c
    264  1.1.1.1.4.2  pgoyette make_module     OS400           os400.c
    265  1.1.1.1.4.2  pgoyette LINK=                           # No need to rebuild service program yet.
    266  1.1.1.1.4.2  pgoyette MODULES=
    267  1.1.1.1.4.2  pgoyette 
    268  1.1.1.1.4.2  pgoyette 
    269  1.1.1.1.4.2  pgoyette #       Get source list.
    270  1.1.1.1.4.2  pgoyette 
    271  1.1.1.1.4.2  pgoyette CSOURCES=`sed -e '/<source name="/!d'                                   \
    272  1.1.1.1.4.2  pgoyette     -e 's/.* name="\([^"]*\)".*/\1/' < treebuild.xml`
    273  1.1.1.1.4.2  pgoyette 
    274  1.1.1.1.4.2  pgoyette #       Compile the sources into modules.
    275  1.1.1.1.4.2  pgoyette 
    276  1.1.1.1.4.2  pgoyette for SRC in ${CSOURCES}
    277  1.1.1.1.4.2  pgoyette do      MODULE=`db2_name "${SRC}"`
    278  1.1.1.1.4.2  pgoyette         make_module "${MODULE}" "${SRC}"
    279  1.1.1.1.4.2  pgoyette done
    280  1.1.1.1.4.2  pgoyette 
    281  1.1.1.1.4.2  pgoyette 
    282  1.1.1.1.4.2  pgoyette #       If needed, (re)create the static binding directory.
    283  1.1.1.1.4.2  pgoyette 
    284  1.1.1.1.4.2  pgoyette if action_needed "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
    285  1.1.1.1.4.2  pgoyette then    LINK=YES
    286  1.1.1.1.4.2  pgoyette fi
    287  1.1.1.1.4.2  pgoyette 
    288  1.1.1.1.4.2  pgoyette if [ "${LINK}" ]
    289  1.1.1.1.4.2  pgoyette then    rm -rf "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
    290  1.1.1.1.4.2  pgoyette         CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${STATBNDDIR})"
    291  1.1.1.1.4.2  pgoyette         CMD="${CMD} TEXT('ZLIB static binding directory')"
    292  1.1.1.1.4.2  pgoyette         system "${CMD}"
    293  1.1.1.1.4.2  pgoyette 
    294  1.1.1.1.4.2  pgoyette         for MODULE in ${MODULES}
    295  1.1.1.1.4.2  pgoyette         do      CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${STATBNDDIR})"
    296  1.1.1.1.4.2  pgoyette                 CMD="${CMD} OBJ((${TARGETLIB}/${MODULE} *MODULE))"
    297  1.1.1.1.4.2  pgoyette                 system "${CMD}"
    298  1.1.1.1.4.2  pgoyette         done
    299  1.1.1.1.4.2  pgoyette fi
    300  1.1.1.1.4.2  pgoyette 
    301  1.1.1.1.4.2  pgoyette 
    302  1.1.1.1.4.2  pgoyette #       The exportation file for service program creation must be in a DB2
    303  1.1.1.1.4.2  pgoyette #               source file, so make sure it exists.
    304  1.1.1.1.4.2  pgoyette 
    305  1.1.1.1.4.2  pgoyette if action_needed "${LIBIFSNAME}/TOOLS.FILE"
    306  1.1.1.1.4.2  pgoyette then    CMD="CRTSRCPF FILE(${TARGETLIB}/TOOLS) RCDLEN(112)"
    307  1.1.1.1.4.2  pgoyette         CMD="${CMD} CCSID(${TGTCCSID}) TEXT('ZLIB: build tools')"
    308  1.1.1.1.4.2  pgoyette         system "${CMD}"
    309  1.1.1.1.4.2  pgoyette fi
    310  1.1.1.1.4.2  pgoyette 
    311  1.1.1.1.4.2  pgoyette 
    312  1.1.1.1.4.2  pgoyette DEST="${LIBIFSNAME}/TOOLS.FILE/BNDSRC.MBR"
    313  1.1.1.1.4.2  pgoyette 
    314  1.1.1.1.4.2  pgoyette if action_needed "${SCRIPTDIR}/bndsrc" "${DEST}"
    315  1.1.1.1.4.2  pgoyette then    CMD="CPY OBJ('${SCRIPTDIR}/bndsrc') TOOBJ('${DEST}')"
    316  1.1.1.1.4.2  pgoyette         CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)"
    317  1.1.1.1.4.2  pgoyette         system "${CMD}"
    318  1.1.1.1.4.2  pgoyette         # touch -r "${SCRIPTDIR}/bndsrc" "${DEST}"
    319  1.1.1.1.4.2  pgoyette         LINK=YES
    320  1.1.1.1.4.2  pgoyette fi
    321  1.1.1.1.4.2  pgoyette 
    322  1.1.1.1.4.2  pgoyette 
    323  1.1.1.1.4.2  pgoyette #       Build the service program if needed.
    324  1.1.1.1.4.2  pgoyette 
    325  1.1.1.1.4.2  pgoyette if action_needed "${LIBIFSNAME}/${SRVPGM}.SRVPGM"
    326  1.1.1.1.4.2  pgoyette then    LINK=YES
    327  1.1.1.1.4.2  pgoyette fi
    328  1.1.1.1.4.2  pgoyette 
    329  1.1.1.1.4.2  pgoyette if [ "${LINK}" ]
    330  1.1.1.1.4.2  pgoyette then    CMD="CRTSRVPGM SRVPGM(${TARGETLIB}/${SRVPGM})"
    331  1.1.1.1.4.2  pgoyette         CMD="${CMD} SRCFILE(${TARGETLIB}/TOOLS) SRCMBR(BNDSRC)"
    332  1.1.1.1.4.2  pgoyette         CMD="${CMD} MODULE(${TARGETLIB}/OS400)"
    333  1.1.1.1.4.2  pgoyette         CMD="${CMD} BNDDIR(${TARGETLIB}/${STATBNDDIR})"
    334  1.1.1.1.4.2  pgoyette         CMD="${CMD} TEXT('ZLIB ${VERSION} dynamic library')"
    335  1.1.1.1.4.2  pgoyette         CMD="${CMD} TGTRLS(${TGTRLS})"
    336  1.1.1.1.4.2  pgoyette         system "${CMD}"
    337  1.1.1.1.4.2  pgoyette         LINK=YES
    338  1.1.1.1.4.2  pgoyette 
    339  1.1.1.1.4.2  pgoyette         #       Duplicate the service program for a versioned backup.
    340  1.1.1.1.4.2  pgoyette 
    341  1.1.1.1.4.2  pgoyette         BACKUP=`echo "${SRVPGM}${VERSION}"                              |
    342  1.1.1.1.4.2  pgoyette                 sed -e 's/.*\(..........\)$/\1/' -e 's/\./_/g'`
    343  1.1.1.1.4.2  pgoyette         BACKUP="`db2_name \"${BACKUP}\"`"
    344  1.1.1.1.4.2  pgoyette         BKUPIFSNAME="${LIBIFSNAME}/${BACKUP}.SRVPGM"
    345  1.1.1.1.4.2  pgoyette         rm -f "${BKUPIFSNAME}"
    346  1.1.1.1.4.2  pgoyette         CMD="CRTDUPOBJ OBJ(${SRVPGM}) FROMLIB(${TARGETLIB})"
    347  1.1.1.1.4.2  pgoyette         CMD="${CMD} OBJTYPE(*SRVPGM) NEWOBJ(${BACKUP})"
    348  1.1.1.1.4.2  pgoyette         system "${CMD}"
    349  1.1.1.1.4.2  pgoyette fi
    350  1.1.1.1.4.2  pgoyette 
    351  1.1.1.1.4.2  pgoyette 
    352  1.1.1.1.4.2  pgoyette #       If needed, (re)create the dynamic binding directory.
    353  1.1.1.1.4.2  pgoyette 
    354  1.1.1.1.4.2  pgoyette if action_needed "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
    355  1.1.1.1.4.2  pgoyette then    LINK=YES
    356  1.1.1.1.4.2  pgoyette fi
    357  1.1.1.1.4.2  pgoyette 
    358  1.1.1.1.4.2  pgoyette if [ "${LINK}" ]
    359  1.1.1.1.4.2  pgoyette then    rm -rf "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
    360  1.1.1.1.4.2  pgoyette         CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
    361  1.1.1.1.4.2  pgoyette         CMD="${CMD} TEXT('ZLIB dynamic binding directory')"
    362  1.1.1.1.4.2  pgoyette         system "${CMD}"
    363  1.1.1.1.4.2  pgoyette         CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
    364  1.1.1.1.4.2  pgoyette         CMD="${CMD} OBJ((*LIBL/${SRVPGM} *SRVPGM))"
    365  1.1.1.1.4.2  pgoyette         system "${CMD}"
    366  1.1.1.1.4.2  pgoyette fi
    367