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