#!/bin/sh
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
###########################################################################
#
#       tests compilation script for the OS/400.
#


SCRIPTDIR=`dirname "${0}"`
. "${SCRIPTDIR}/initscript.sh"
cd "${TOPDIR}/tests"


#       tests directory not implemented yet.


#       Process the libtest subdirectory.

cd libtest

#       Get definitions from the Makefile.inc file.
#       The `sed' statement works as follows:
#       _ Join \nl-separated lines.
#       _ Retain only lines that begins with "identifier =".
#       _ Turn these lines into shell variable assignments.

eval "`sed -e ': begin'                                                 \
        -e '/\\\\$/{'                                                   \
        -e 'N'                                                          \
        -e 's/\\\\\\n/ /'                                               \
        -e 'b begin'                                                    \
        -e '}'                                                          \
        -e '/^[A-Za-z_][A-Za-z0-9_]*[[:space:]]*[=]/b keep'             \
        -e 'd'                                                          \
        -e ': keep'                                                     \
        -e 's/[[:space:]]*=[[:space:]]*/=/'                             \
        -e 's/=\\(.*[^[:space:]]\\)[[:space:]]*$/=\\"\\1\\"/'           \
        -e 's/\\$(\\([^)]*\\))/${\\1}/g'                                \
        < Makefile.inc`"

#       Special case: redefine chkhostname compilation parameters.

chkhostname_SOURCES=chkhostname.c
chkhostname_LDADD=curl_gethostname.o

#       Compile all programs.
#       The list is found in variable "noinst_PROGRAMS"

INCLUDES="'${TOPDIR}/tests/libtest' '${TOPDIR}/lib'"

for PGM in ${noinst_PROGRAMS}
do      DB2PGM=`db2_name "${PGM}"`
        PGMIFSNAME="${LIBIFSNAME}/${DB2PGM}.PGM"

        #       Extract preprocessor symbol definitions from compilation
        #               options for the program.

        PGMCFLAGS="`eval echo \"\\${${PGM}_CFLAGS}\"`"
        PGMDEFINES=

        for FLAG in ${PGMCFLAGS}
        do      case "${FLAG}" in
                -D?*)   DEFINE="`echo \"${FLAG}\" | sed 's/^..//'`"
                        PGMDEFINES="${PGMDEFINES} '${DEFINE}'"
                        ;;
                esac
        done

        #        Compile all C sources for the program into modules.

        PGMSOURCES="`eval echo \"\\${${PGM}_SOURCES}\"`"
        LINK=
        MODULES=

        for SOURCE in ${PGMSOURCES}
        do      case "${SOURCE}" in
                *.c)    #       Special processing for libxxx.c files: their
                        #               module name is determined by the target
                        #               PROGRAM name.

                        case "${SOURCE}" in
                        lib*.c) MODULE="${DB2PGM}"
                                ;;
                        *)      MODULE=`db2_name "${SOURCE}"`
                                ;;
                        esac

                        make_module "${MODULE}" "${SOURCE}" "${PGMDEFINES}"
                        if action_needed "${PGMIFSNAME}" "${MODIFSNAME}"
                        then    LINK=yes
                        fi
                        ;;
                esac
        done

        #       Link program if needed.

        if [ "${LINK}" ]
        then    PGMLDADD="`eval echo \"\\${${PGM}_LDADD}\"`"
                for LDARG in ${PGMLDADD}
                do      case "${LDARG}" in
                        -*)     ;;              # Ignore non-module.
                        *)      MODULES="${MODULES} "`db2_name "${LDARG}"`
                                ;;
                        esac
                done
                MODULES="`echo \"${MODULES}\" |
                    sed \"s/[^ ][^ ]*/${TARGETLIB}\/&/g\"`"
                CMD="CRTPGM PGM(${TARGETLIB}/${DB2PGM})"
                CMD="${CMD} ENTMOD(QADRT/QADRTMAIN2)"
                CMD="${CMD} MODULE(${MODULES})"
                CMD="${CMD} BNDSRVPGM(${TARGETLIB}/${SRVPGM} QADRTTS)"
                CMD="${CMD} TGTRLS(${TGTRLS})"
                system "${CMD}"
        fi
done
