xref: /third_party/zlib/os400/make.sh (revision 275793ea)
1275793eaSopenharmony_ci#!/bin/sh
2275793eaSopenharmony_ci#
3275793eaSopenharmony_ci#       ZLIB compilation script for the OS/400.
4275793eaSopenharmony_ci#
5275793eaSopenharmony_ci#
6275793eaSopenharmony_ci#       This is a shell script since make is not a standard component of OS/400.
7275793eaSopenharmony_ci
8275793eaSopenharmony_ci
9275793eaSopenharmony_ci################################################################################
10275793eaSopenharmony_ci#
11275793eaSopenharmony_ci#                       Tunable configuration parameters.
12275793eaSopenharmony_ci#
13275793eaSopenharmony_ci################################################################################
14275793eaSopenharmony_ci
15275793eaSopenharmony_ciTARGETLIB='ZLIB'                # Target OS/400 program library
16275793eaSopenharmony_ciSTATBNDDIR='ZLIB_A'             # Static binding directory.
17275793eaSopenharmony_ciDYNBNDDIR='ZLIB'                # Dynamic binding directory.
18275793eaSopenharmony_ciSRVPGM="ZLIB"                   # Service program.
19275793eaSopenharmony_ciIFSDIR='/zlib'                  # IFS support base directory.
20275793eaSopenharmony_ciTGTCCSID='500'                  # Target CCSID of objects
21275793eaSopenharmony_ciDEBUG='*NONE'                   # Debug level
22275793eaSopenharmony_ciOPTIMIZE='40'                   # Optimisation level
23275793eaSopenharmony_ciOUTPUT='*NONE'                  # Compilation output option.
24275793eaSopenharmony_ciTGTRLS='V6R1M0'                 # Target OS release
25275793eaSopenharmony_ci
26275793eaSopenharmony_ciexport TARGETLIB STATBNDDIR DYNBNDDIR SRVPGM IFSDIR
27275793eaSopenharmony_ciexport TGTCCSID DEBUG OPTIMIZE OUTPUT TGTRLS
28275793eaSopenharmony_ci
29275793eaSopenharmony_ci
30275793eaSopenharmony_ci################################################################################
31275793eaSopenharmony_ci#
32275793eaSopenharmony_ci#                       OS/400 specific definitions.
33275793eaSopenharmony_ci#
34275793eaSopenharmony_ci################################################################################
35275793eaSopenharmony_ci
36275793eaSopenharmony_ciLIBIFSNAME="/QSYS.LIB/${TARGETLIB}.LIB"
37275793eaSopenharmony_ci
38275793eaSopenharmony_ci
39275793eaSopenharmony_ci################################################################################
40275793eaSopenharmony_ci#
41275793eaSopenharmony_ci#                               Procedures.
42275793eaSopenharmony_ci#
43275793eaSopenharmony_ci################################################################################
44275793eaSopenharmony_ci
45275793eaSopenharmony_ci#       action_needed dest [src]
46275793eaSopenharmony_ci#
47275793eaSopenharmony_ci#       dest is an object to build
48275793eaSopenharmony_ci#       if specified, src is an object on which dest depends.
49275793eaSopenharmony_ci#
50275793eaSopenharmony_ci#       exit 0 (succeeds) if some action has to be taken, else 1.
51275793eaSopenharmony_ci
52275793eaSopenharmony_ciaction_needed()
53275793eaSopenharmony_ci
54275793eaSopenharmony_ci{
55275793eaSopenharmony_ci        [ ! -e "${1}" ] && return 0
56275793eaSopenharmony_ci        [ "${2}" ] || return 1
57275793eaSopenharmony_ci        [ "${1}" -ot "${2}" ] && return 0
58275793eaSopenharmony_ci        return 1
59275793eaSopenharmony_ci}
60275793eaSopenharmony_ci
61275793eaSopenharmony_ci
62275793eaSopenharmony_ci#       make_module module_name source_name [additional_definitions]
63275793eaSopenharmony_ci#
64275793eaSopenharmony_ci#       Compile source name into module if needed.
65275793eaSopenharmony_ci#       As side effect, append the module name to variable MODULES.
66275793eaSopenharmony_ci#       Set LINK to "YES" if the module has been compiled.
67275793eaSopenharmony_ci
68275793eaSopenharmony_cimake_module()
69275793eaSopenharmony_ci
70275793eaSopenharmony_ci{
71275793eaSopenharmony_ci    MODULES="${MODULES} ${1}"
72275793eaSopenharmony_ci    MODIFSNAME="${LIBIFSNAME}/${1}.MODULE"
73275793eaSopenharmony_ci    CSRC="`basename \"${2}\"`"
74275793eaSopenharmony_ci
75275793eaSopenharmony_ci    if action_needed "${MODIFSNAME}" "${2}"
76275793eaSopenharmony_ci    then    :
77275793eaSopenharmony_ci    elif [ ! "`sed -e \"/<source name=\\\"${CSRC}\\\">/,/<\\\\/source>/!d\" \
78275793eaSopenharmony_ci      -e '/<depend /!d'                                                 \
79275793eaSopenharmony_ci      -e 's/.* name=\"\\([^\"]*\\)\".*/\\1/' < \"${TOPDIR}/treebuild.xml\" |
80275793eaSopenharmony_ci        while read HDR
81275793eaSopenharmony_ci        do      if action_needed \"${MODIFSNAME}\" \"${IFSDIR}/include/${HDR}\"
82275793eaSopenharmony_ci                then    echo recompile
83275793eaSopenharmony_ci                        break
84275793eaSopenharmony_ci                fi
85275793eaSopenharmony_ci        done`" ]
86275793eaSopenharmony_ci    then    return 0
87275793eaSopenharmony_ci    fi
88275793eaSopenharmony_ci
89275793eaSopenharmony_ci    CMD="CRTCMOD MODULE(${TARGETLIB}/${1}) SRCSTMF('${2}')"
90275793eaSopenharmony_ci    CMD="${CMD} SYSIFCOPT(*IFS64IO) OPTION(*INCDIRFIRST)"
91275793eaSopenharmony_ci    CMD="${CMD} LOCALETYPE(*LOCALE) FLAG(10)"
92275793eaSopenharmony_ci    CMD="${CMD} INCDIR('${IFSDIR}/include' ${INCLUDES})"
93275793eaSopenharmony_ci    CMD="${CMD} TGTCCSID(${TGTCCSID}) TGTRLS(${TGTRLS})"
94275793eaSopenharmony_ci    CMD="${CMD} OUTPUT(${OUTPUT})"
95275793eaSopenharmony_ci    CMD="${CMD} OPTIMIZE(${OPTIMIZE})"
96275793eaSopenharmony_ci    CMD="${CMD} DBGVIEW(${DEBUG})"
97275793eaSopenharmony_ci    system "${CMD}"
98275793eaSopenharmony_ci    LINK=YES
99275793eaSopenharmony_ci}
100275793eaSopenharmony_ci
101275793eaSopenharmony_ci
102275793eaSopenharmony_ci#       Determine DB2 object name from IFS name.
103275793eaSopenharmony_ci
104275793eaSopenharmony_cidb2_name()
105275793eaSopenharmony_ci
106275793eaSopenharmony_ci{
107275793eaSopenharmony_ci        basename "${1}"                                                 |
108275793eaSopenharmony_ci        tr 'a-z-' 'A-Z_'                                                |
109275793eaSopenharmony_ci        sed -e 's/\..*//'                                               \
110275793eaSopenharmony_ci            -e 's/^\(.\).*\(.........\)$/\1\2/'
111275793eaSopenharmony_ci}
112275793eaSopenharmony_ci
113275793eaSopenharmony_ci
114275793eaSopenharmony_ci#       Force enumeration types to be the same size as integers.
115275793eaSopenharmony_ci
116275793eaSopenharmony_cicopy_hfile()
117275793eaSopenharmony_ci
118275793eaSopenharmony_ci{
119275793eaSopenharmony_ci        sed -e '1i\
120275793eaSopenharmony_ci#pragma enum(int)\
121275793eaSopenharmony_ci' "${@}" -e '$a\
122275793eaSopenharmony_ci#pragma enum(pop)\
123275793eaSopenharmony_ci'
124275793eaSopenharmony_ci}
125275793eaSopenharmony_ci
126275793eaSopenharmony_ci
127275793eaSopenharmony_ci################################################################################
128275793eaSopenharmony_ci#
129275793eaSopenharmony_ci#                             Script initialization.
130275793eaSopenharmony_ci#
131275793eaSopenharmony_ci################################################################################
132275793eaSopenharmony_ci
133275793eaSopenharmony_ciSCRIPTDIR=`dirname "${0}"`
134275793eaSopenharmony_ci
135275793eaSopenharmony_cicase "${SCRIPTDIR}" in
136275793eaSopenharmony_ci/*)     ;;
137275793eaSopenharmony_ci*)      SCRIPTDIR="`pwd`/${SCRIPTDIR}"
138275793eaSopenharmony_ciesac
139275793eaSopenharmony_ci
140275793eaSopenharmony_ciwhile true
141275793eaSopenharmony_cido      case "${SCRIPTDIR}" in
142275793eaSopenharmony_ci        */.)    SCRIPTDIR="${SCRIPTDIR%/.}";;
143275793eaSopenharmony_ci        *)      break;;
144275793eaSopenharmony_ci        esac
145275793eaSopenharmony_cidone
146275793eaSopenharmony_ci
147275793eaSopenharmony_ci#  The script directory is supposed to be in ${TOPDIR}/os400.
148275793eaSopenharmony_ci
149275793eaSopenharmony_ciTOPDIR=`dirname "${SCRIPTDIR}"`
150275793eaSopenharmony_ciexport SCRIPTDIR TOPDIR
151275793eaSopenharmony_cicd "${TOPDIR}"
152275793eaSopenharmony_ci
153275793eaSopenharmony_ci
154275793eaSopenharmony_ci#  Extract the version from the master compilation XML file.
155275793eaSopenharmony_ci
156275793eaSopenharmony_ciVERSION=`sed -e '/^<package /!d'                                        \
157275793eaSopenharmony_ci            -e 's/^.* version="\([0-9.]*\)".*$/\1/' -e 'q'              \
158275793eaSopenharmony_ci            < treebuild.xml`
159275793eaSopenharmony_ciexport VERSION
160275793eaSopenharmony_ci
161275793eaSopenharmony_ci################################################################################
162275793eaSopenharmony_ci
163275793eaSopenharmony_ci
164275793eaSopenharmony_ci#       Create the OS/400 library if it does not exist.
165275793eaSopenharmony_ci
166275793eaSopenharmony_ciif action_needed "${LIBIFSNAME}"
167275793eaSopenharmony_cithen    CMD="CRTLIB LIB(${TARGETLIB}) TEXT('ZLIB: Data compression API')"
168275793eaSopenharmony_ci        system "${CMD}"
169275793eaSopenharmony_cifi
170275793eaSopenharmony_ci
171275793eaSopenharmony_ci
172275793eaSopenharmony_ci#       Create the DOCS source file if it does not exist.
173275793eaSopenharmony_ci
174275793eaSopenharmony_ciif action_needed "${LIBIFSNAME}/DOCS.FILE"
175275793eaSopenharmony_cithen    CMD="CRTSRCPF FILE(${TARGETLIB}/DOCS) RCDLEN(112)"
176275793eaSopenharmony_ci        CMD="${CMD} CCSID(${TGTCCSID}) TEXT('Documentation texts')"
177275793eaSopenharmony_ci        system "${CMD}"
178275793eaSopenharmony_cifi
179275793eaSopenharmony_ci
180275793eaSopenharmony_ci#       Copy some documentation files if needed.
181275793eaSopenharmony_ci
182275793eaSopenharmony_cifor TEXT in "${TOPDIR}/ChangeLog" "${TOPDIR}/FAQ"                       \
183275793eaSopenharmony_ci    "${TOPDIR}/README" "${SCRIPTDIR}/README400"
184275793eaSopenharmony_cido      MEMBER="${LIBIFSNAME}/DOCS.FILE/`db2_name \"${TEXT}\"`.MBR"
185275793eaSopenharmony_ci
186275793eaSopenharmony_ci        if action_needed "${MEMBER}" "${TEXT}"
187275793eaSopenharmony_ci        then    CMD="CPY OBJ('${TEXT}') TOOBJ('${MEMBER}') TOCCSID(${TGTCCSID})"
188275793eaSopenharmony_ci                CMD="${CMD} DTAFMT(*TEXT) REPLACE(*YES)"
189275793eaSopenharmony_ci                system "${CMD}"
190275793eaSopenharmony_ci        fi
191275793eaSopenharmony_cidone
192275793eaSopenharmony_ci
193275793eaSopenharmony_ci
194275793eaSopenharmony_ci#       Create the OS/400 source program file for the C header files.
195275793eaSopenharmony_ci
196275793eaSopenharmony_ciSRCPF="${LIBIFSNAME}/H.FILE"
197275793eaSopenharmony_ci
198275793eaSopenharmony_ciif action_needed "${SRCPF}"
199275793eaSopenharmony_cithen    CMD="CRTSRCPF FILE(${TARGETLIB}/H) RCDLEN(112)"
200275793eaSopenharmony_ci        CMD="${CMD} CCSID(${TGTCCSID}) TEXT('ZLIB: C/C++ header files')"
201275793eaSopenharmony_ci        system "${CMD}"
202275793eaSopenharmony_cifi
203275793eaSopenharmony_ci
204275793eaSopenharmony_ci
205275793eaSopenharmony_ci#       Create the IFS directory for the C header files.
206275793eaSopenharmony_ci
207275793eaSopenharmony_ciif action_needed "${IFSDIR}/include"
208275793eaSopenharmony_cithen    mkdir -p "${IFSDIR}/include"
209275793eaSopenharmony_cifi
210275793eaSopenharmony_ci
211275793eaSopenharmony_ci#       Copy the header files to DB2 library. Link from IFS include directory.
212275793eaSopenharmony_ci
213275793eaSopenharmony_cifor HFILE in "${TOPDIR}/"*.h
214275793eaSopenharmony_cido      DEST="${SRCPF}/`db2_name \"${HFILE}\"`.MBR"
215275793eaSopenharmony_ci
216275793eaSopenharmony_ci        if action_needed "${DEST}" "${HFILE}"
217275793eaSopenharmony_ci        then    copy_hfile < "${HFILE}" > tmphdrfile
218275793eaSopenharmony_ci
219275793eaSopenharmony_ci                #       Need to translate to target CCSID.
220275793eaSopenharmony_ci
221275793eaSopenharmony_ci                CMD="CPY OBJ('`pwd`/tmphdrfile') TOOBJ('${DEST}')"
222275793eaSopenharmony_ci                CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)"
223275793eaSopenharmony_ci                system "${CMD}"
224275793eaSopenharmony_ci                # touch -r "${HFILE}" "${DEST}"
225275793eaSopenharmony_ci                rm -f tmphdrfile
226275793eaSopenharmony_ci        fi
227275793eaSopenharmony_ci
228275793eaSopenharmony_ci        IFSFILE="${IFSDIR}/include/`basename \"${HFILE}\"`"
229275793eaSopenharmony_ci
230275793eaSopenharmony_ci        if action_needed "${IFSFILE}" "${DEST}"
231275793eaSopenharmony_ci        then    rm -f "${IFSFILE}"
232275793eaSopenharmony_ci                ln -s "${DEST}" "${IFSFILE}"
233275793eaSopenharmony_ci        fi
234275793eaSopenharmony_cidone
235275793eaSopenharmony_ci
236275793eaSopenharmony_ci
237275793eaSopenharmony_ci#       Install the ILE/RPG header file.
238275793eaSopenharmony_ci
239275793eaSopenharmony_ci
240275793eaSopenharmony_ciHFILE="${SCRIPTDIR}/zlib.inc"
241275793eaSopenharmony_ciDEST="${SRCPF}/ZLIB.INC.MBR"
242275793eaSopenharmony_ci
243275793eaSopenharmony_ciif action_needed "${DEST}" "${HFILE}"
244275793eaSopenharmony_cithen    CMD="CPY OBJ('${HFILE}') TOOBJ('${DEST}')"
245275793eaSopenharmony_ci        CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)"
246275793eaSopenharmony_ci        system "${CMD}"
247275793eaSopenharmony_ci        # touch -r "${HFILE}" "${DEST}"
248275793eaSopenharmony_cifi
249275793eaSopenharmony_ci
250275793eaSopenharmony_ciIFSFILE="${IFSDIR}/include/`basename \"${HFILE}\"`"
251275793eaSopenharmony_ci
252275793eaSopenharmony_ciif action_needed "${IFSFILE}" "${DEST}"
253275793eaSopenharmony_cithen    rm -f "${IFSFILE}"
254275793eaSopenharmony_ci        ln -s "${DEST}" "${IFSFILE}"
255275793eaSopenharmony_cifi
256275793eaSopenharmony_ci
257275793eaSopenharmony_ci
258275793eaSopenharmony_ci#      Create and compile the identification source file.
259275793eaSopenharmony_ci
260275793eaSopenharmony_ciecho '#pragma comment(user, "ZLIB version '"${VERSION}"'")' > os400.c
261275793eaSopenharmony_ciecho '#pragma comment(user, __DATE__)' >> os400.c
262275793eaSopenharmony_ciecho '#pragma comment(user, __TIME__)' >> os400.c
263275793eaSopenharmony_ciecho '#pragma comment(copyright, "Copyright (C) 1995-2017 Jean-Loup Gailly, Mark Adler. OS/400 version by P. Monnerat.")' >> os400.c
264275793eaSopenharmony_cimake_module     OS400           os400.c
265275793eaSopenharmony_ciLINK=                           # No need to rebuild service program yet.
266275793eaSopenharmony_ciMODULES=
267275793eaSopenharmony_ci
268275793eaSopenharmony_ci
269275793eaSopenharmony_ci#       Get source list.
270275793eaSopenharmony_ci
271275793eaSopenharmony_ciCSOURCES=`sed -e '/<source name="/!d'                                   \
272275793eaSopenharmony_ci    -e 's/.* name="\([^"]*\)".*/\1/' < treebuild.xml`
273275793eaSopenharmony_ci
274275793eaSopenharmony_ci#       Compile the sources into modules.
275275793eaSopenharmony_ci
276275793eaSopenharmony_cifor SRC in ${CSOURCES}
277275793eaSopenharmony_cido      MODULE=`db2_name "${SRC}"`
278275793eaSopenharmony_ci        make_module "${MODULE}" "${SRC}"
279275793eaSopenharmony_cidone
280275793eaSopenharmony_ci
281275793eaSopenharmony_ci
282275793eaSopenharmony_ci#       If needed, (re)create the static binding directory.
283275793eaSopenharmony_ci
284275793eaSopenharmony_ciif action_needed "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
285275793eaSopenharmony_cithen    LINK=YES
286275793eaSopenharmony_cifi
287275793eaSopenharmony_ci
288275793eaSopenharmony_ciif [ "${LINK}" ]
289275793eaSopenharmony_cithen    rm -rf "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
290275793eaSopenharmony_ci        CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${STATBNDDIR})"
291275793eaSopenharmony_ci        CMD="${CMD} TEXT('ZLIB static binding directory')"
292275793eaSopenharmony_ci        system "${CMD}"
293275793eaSopenharmony_ci
294275793eaSopenharmony_ci        for MODULE in ${MODULES}
295275793eaSopenharmony_ci        do      CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${STATBNDDIR})"
296275793eaSopenharmony_ci                CMD="${CMD} OBJ((${TARGETLIB}/${MODULE} *MODULE))"
297275793eaSopenharmony_ci                system "${CMD}"
298275793eaSopenharmony_ci        done
299275793eaSopenharmony_cifi
300275793eaSopenharmony_ci
301275793eaSopenharmony_ci
302275793eaSopenharmony_ci#       The exportation file for service program creation must be in a DB2
303275793eaSopenharmony_ci#               source file, so make sure it exists.
304275793eaSopenharmony_ci
305275793eaSopenharmony_ciif action_needed "${LIBIFSNAME}/TOOLS.FILE"
306275793eaSopenharmony_cithen    CMD="CRTSRCPF FILE(${TARGETLIB}/TOOLS) RCDLEN(112)"
307275793eaSopenharmony_ci        CMD="${CMD} CCSID(${TGTCCSID}) TEXT('ZLIB: build tools')"
308275793eaSopenharmony_ci        system "${CMD}"
309275793eaSopenharmony_cifi
310275793eaSopenharmony_ci
311275793eaSopenharmony_ci
312275793eaSopenharmony_ciDEST="${LIBIFSNAME}/TOOLS.FILE/BNDSRC.MBR"
313275793eaSopenharmony_ci
314275793eaSopenharmony_ciif action_needed "${SCRIPTDIR}/bndsrc" "${DEST}"
315275793eaSopenharmony_cithen    CMD="CPY OBJ('${SCRIPTDIR}/bndsrc') TOOBJ('${DEST}')"
316275793eaSopenharmony_ci        CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)"
317275793eaSopenharmony_ci        system "${CMD}"
318275793eaSopenharmony_ci        # touch -r "${SCRIPTDIR}/bndsrc" "${DEST}"
319275793eaSopenharmony_ci        LINK=YES
320275793eaSopenharmony_cifi
321275793eaSopenharmony_ci
322275793eaSopenharmony_ci
323275793eaSopenharmony_ci#       Build the service program if needed.
324275793eaSopenharmony_ci
325275793eaSopenharmony_ciif action_needed "${LIBIFSNAME}/${SRVPGM}.SRVPGM"
326275793eaSopenharmony_cithen    LINK=YES
327275793eaSopenharmony_cifi
328275793eaSopenharmony_ci
329275793eaSopenharmony_ciif [ "${LINK}" ]
330275793eaSopenharmony_cithen    CMD="CRTSRVPGM SRVPGM(${TARGETLIB}/${SRVPGM})"
331275793eaSopenharmony_ci        CMD="${CMD} SRCFILE(${TARGETLIB}/TOOLS) SRCMBR(BNDSRC)"
332275793eaSopenharmony_ci        CMD="${CMD} MODULE(${TARGETLIB}/OS400)"
333275793eaSopenharmony_ci        CMD="${CMD} BNDDIR(${TARGETLIB}/${STATBNDDIR})"
334275793eaSopenharmony_ci        CMD="${CMD} TEXT('ZLIB ${VERSION} dynamic library')"
335275793eaSopenharmony_ci        CMD="${CMD} TGTRLS(${TGTRLS})"
336275793eaSopenharmony_ci        system "${CMD}"
337275793eaSopenharmony_ci        LINK=YES
338275793eaSopenharmony_ci
339275793eaSopenharmony_ci        #       Duplicate the service program for a versioned backup.
340275793eaSopenharmony_ci
341275793eaSopenharmony_ci        BACKUP=`echo "${SRVPGM}${VERSION}"                              |
342275793eaSopenharmony_ci                sed -e 's/.*\(..........\)$/\1/' -e 's/\./_/g'`
343275793eaSopenharmony_ci        BACKUP="`db2_name \"${BACKUP}\"`"
344275793eaSopenharmony_ci        BKUPIFSNAME="${LIBIFSNAME}/${BACKUP}.SRVPGM"
345275793eaSopenharmony_ci        rm -f "${BKUPIFSNAME}"
346275793eaSopenharmony_ci        CMD="CRTDUPOBJ OBJ(${SRVPGM}) FROMLIB(${TARGETLIB})"
347275793eaSopenharmony_ci        CMD="${CMD} OBJTYPE(*SRVPGM) NEWOBJ(${BACKUP})"
348275793eaSopenharmony_ci        system "${CMD}"
349275793eaSopenharmony_cifi
350275793eaSopenharmony_ci
351275793eaSopenharmony_ci
352275793eaSopenharmony_ci#       If needed, (re)create the dynamic binding directory.
353275793eaSopenharmony_ci
354275793eaSopenharmony_ciif action_needed "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
355275793eaSopenharmony_cithen    LINK=YES
356275793eaSopenharmony_cifi
357275793eaSopenharmony_ci
358275793eaSopenharmony_ciif [ "${LINK}" ]
359275793eaSopenharmony_cithen    rm -rf "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
360275793eaSopenharmony_ci        CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
361275793eaSopenharmony_ci        CMD="${CMD} TEXT('ZLIB dynamic binding directory')"
362275793eaSopenharmony_ci        system "${CMD}"
363275793eaSopenharmony_ci        CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
364275793eaSopenharmony_ci        CMD="${CMD} OBJ((*LIBL/${SRVPGM} *SRVPGM))"
365275793eaSopenharmony_ci        system "${CMD}"
366275793eaSopenharmony_cifi
367