1#!/bin/sh
2#***************************************************************************
3#                                  _   _ ____  _
4#  Project                     ___| | | |  _ \| |
5#                             / __| | | | |_) | |
6#                            | (__| |_| |  _ <| |___
7#                             \___|\___/|_| \_\_____|
8#
9# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
10#
11# This software is licensed as described in the file COPYING, which
12# you should have received as part of this distribution. The terms
13# are also available at https://curl.se/docs/copyright.html.
14#
15# You may opt to use, copy, modify, merge, publish, distribute and/or sell
16# copies of the Software, and permit persons to whom the Software is
17# furnished to do so, under the terms of the COPYING file.
18#
19# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20# KIND, either express or implied.
21#
22###########################################################################
23#
24#       libcurl compilation script for the OS/400.
25#
26
27SCRIPTDIR=`dirname "${0}"`
28. "${SCRIPTDIR}/initscript.sh"
29cd "${TOPDIR}/lib"
30
31#       Need to have IFS access to the mih/cipher header file.
32
33if action_needed cipher.mih '/QSYS.LIB/QSYSINC.LIB/MIH.FILE/CIPHER.MBR'
34then    rm -f cipher.mih
35        ln -s '/QSYS.LIB/QSYSINC.LIB/MIH.FILE/CIPHER.MBR' cipher.mih
36fi
37
38
39#      Create and compile the identification source file.
40
41echo '#pragma comment(user, "libcurl version '"${LIBCURL_VERSION}"'")' > os400.c
42echo '#pragma comment(user, __DATE__)' >> os400.c
43echo '#pragma comment(user, __TIME__)' >> os400.c
44echo '#pragma comment(copyright, "Copyright (C) 1998-2016 Daniel Stenberg et al. OS/400 version by P. Monnerat")' >> os400.c
45make_module     OS400           os400.c
46LINK=                           # No need to rebuild service program yet.
47MODULES=
48
49
50#       Get source list.
51
52sed -e ':begin'                                                         \
53    -e '/\\$/{'                                                         \
54    -e 's/\\$/ /'                                                       \
55    -e 'N'                                                              \
56    -e 'bbegin'                                                         \
57    -e '}'                                                              \
58    -e 's/\n//g'                                                        \
59    -e 's/[[:space:]]*$//'                                              \
60    -e 's/^\([A-Za-z][A-Za-z0-9_]*\)[[:space:]]*=[[:space:]]*\(.*\)/\1="\2"/' \
61    -e 's/\$(\([A-Za-z][A-Za-z0-9_]*\))/${\1}/g'                        \
62        < Makefile.inc > tmpscript.sh
63. ./tmpscript.sh
64
65
66#       Compile the sources into modules.
67
68INCLUDES="'`pwd`'"
69
70# Create a small C program to check ccsidcurl.c is up to date
71if action_needed "${LIBIFSNAME}/CHKSTRINGS.PGM"
72then
73  CMD="CRTBNDC PGM(${TARGETLIB}/CHKSTRINGS) SRCSTMF('${SCRIPTDIR}/chkstrings.c')"
74  CMD="${CMD} INCDIR('${TOPDIR}/include/curl' '${TOPDIR}/include' '${SRCDIR}' ${INCLUDES})"
75  system -i "${CMD}"
76  if [ $? -ne 0 ]
77  then
78    echo "ERROR: Failed to build CHKSTRINGS *PGM object!"
79    exit 2
80  else
81    ${LIBIFSNAME}/CHKSTRINGS.PGM
82    if [ $? -ne 0 ]
83    then
84      echo "ERROR: CHKSTRINGS failed!"
85      exit 2
86    fi
87  fi
88fi
89
90make_module     OS400SYS        "${SCRIPTDIR}/os400sys.c"
91make_module     CCSIDCURL       "${SCRIPTDIR}/ccsidcurl.c"
92
93for SRC in ${CSOURCES}
94do      MODULE=`db2_name "${SRC}"`
95        make_module "${MODULE}" "${SRC}"
96done
97
98
99#       If needed, (re)create the static binding directory.
100
101if action_needed "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
102then    LINK=YES
103fi
104
105if [ "${LINK}" ]
106then    rm -rf "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
107        CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${STATBNDDIR})"
108        CMD="${CMD} TEXT('LibCurl API static binding directory')"
109        system "${CMD}"
110
111        for MODULE in ${MODULES}
112        do      CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${STATBNDDIR})"
113                CMD="${CMD} OBJ((${TARGETLIB}/${MODULE} *MODULE))"
114                system "${CMD}"
115        done
116fi
117
118
119#       The exportation file for service program creation must be in a DB2
120#               source file, so make sure it exists.
121
122if action_needed "${LIBIFSNAME}/TOOLS.FILE"
123then    CMD="CRTSRCPF FILE(${TARGETLIB}/TOOLS) RCDLEN(112)"
124        CMD="${CMD} TEXT('curl: build tools')"
125        system "${CMD}"
126fi
127
128
129#       Gather the list of symbols to export.
130
131EXPORTS=`grep '^CURL_EXTERN[[:space:]]'                                 \
132              "${TOPDIR}"/include/curl/*.h                              \
133              "${SCRIPTDIR}/ccsidcurl.h"                                |
134         sed -e 's/^.*CURL_EXTERN[[:space:]]\(.*\)(.*$/\1/'             \
135             -e 's/[[:space:]]*$//'                                     \
136             -e 's/^.*[[:space:]][[:space:]]*//'                        \
137             -e 's/^\*//'                                               \
138             -e 's/(\(.*\))/\1/'`
139
140#       Create the service program exportation file in DB2 member if needed.
141
142BSF="${LIBIFSNAME}/TOOLS.FILE/BNDSRC.MBR"
143
144if action_needed "${BSF}" Makefile.am
145then    LINK=YES
146fi
147
148if [ "${LINK}" ]
149then    echo " STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('LIBCURL_${SONAME}')" \
150            > "${BSF}"
151        for EXPORT in ${EXPORTS}
152        do      echo ' EXPORT    SYMBOL("'"${EXPORT}"'")' >> "${BSF}"
153        done
154
155        echo ' ENDPGMEXP' >> "${BSF}"
156fi
157
158
159#       Build the service program if needed.
160
161if action_needed "${LIBIFSNAME}/${SRVPGM}.SRVPGM"
162then    LINK=YES
163fi
164
165if [ "${LINK}" ]
166then    CMD="CRTSRVPGM SRVPGM(${TARGETLIB}/${SRVPGM})"
167        CMD="${CMD} SRCFILE(${TARGETLIB}/TOOLS) SRCMBR(BNDSRC)"
168        CMD="${CMD} MODULE(${TARGETLIB}/OS400)"
169        CMD="${CMD} BNDDIR(${TARGETLIB}/${STATBNDDIR}"
170        if [ "${WITH_ZLIB}" != 0 ]
171        then    CMD="${CMD} ${ZLIB_LIB}/${ZLIB_BNDDIR}"
172                liblist -a "${ZLIB_LIB}"
173        fi
174        if [ "${WITH_LIBSSH2}" != 0 ]
175        then    CMD="${CMD} ${LIBSSH2_LIB}/${LIBSSH2_BNDDIR}"
176                liblist -a "${LIBSSH2_LIB}"
177        fi
178        CMD="${CMD})"
179        CMD="${CMD} BNDSRVPGM(QADRTTS QGLDCLNT QGLDBRDR)"
180        CMD="${CMD} TEXT('curl API library')"
181        CMD="${CMD} TGTRLS(${TGTRLS})"
182        system "${CMD}"
183        LINK=YES
184fi
185
186
187#       If needed, (re)create the dynamic binding directory.
188
189if action_needed "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
190then    LINK=YES
191fi
192
193if [ "${LINK}" ]
194then    rm -rf "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
195        CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
196        CMD="${CMD} TEXT('LibCurl API dynamic binding directory')"
197        system "${CMD}"
198        CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
199        CMD="${CMD} OBJ((*LIBL/${SRVPGM} *SRVPGM))"
200        system "${CMD}"
201fi
202
203
204#       Rebuild the formdata test if needed.
205
206if [ "${TEST_FORMDATA}" ]
207then    MODULES=
208        make_module TFORMDATA   formdata.c      "'_FORM_DEBUG' 'CURLDEBUG'"
209        make_module TSTREQUAL   strequal.c      "'_FORM_DEBUG' 'CURLDEBUG'"
210        make_module TMEMDEBUG   memdebug.c      "'_FORM_DEBUG' 'CURLDEBUG'"
211        make_module TMPRINTF    mprintf.c       "'_FORM_DEBUG' 'CURLDEBUG'"
212        make_module TSTRERROR   strerror.c      "'_FORM_DEBUG' 'CURLDEBUG'"
213        #       The following modules should not be needed (see comment in
214        #               formdata.c. However, there are some unsatisfied
215        #               external references leading in the following
216        #               modules to be (recursively) needed.
217        MODULES="${MODULES} EASY STRDUP SSLGEN GSKIT HOSTIP HOSTIP4 HOSTIP6"
218        MODULES="${MODULES} URL HASH TRANSFER GETINFO COOKIE SENDF SELECT"
219        MODULES="${MODULES} INET_NTOP SHARE HOSTTHRE MULTI LLIST FTP HTTP"
220        MODULES="${MODULES} HTTP_DIGES HTTP_CHUNK HTTP_NEGOT TIMEVAL HOSTSYN"
221        MODULES="${MODULES} CONNECT SOCKS PROGRESS ESCAPE INET_PTON GETENV"
222        MODULES="${MODULES} DICT LDAP TELNET FILE TFTP NETRC PARSEDATE"
223        MODULES="${MODULES} SPEEDCHECK SPLAY BASE64 SECURITY IF2IP MD5"
224        MODULES="${MODULES} KRB5 OS400SYS"
225
226        PGMIFSNAME="${LIBIFSNAME}/TFORMDATA.PGM"
227
228        if action_needed "${PGMIFSNAME}"
229        then    LINK=YES
230        fi
231
232        if [ "${LINK}" ]
233        then    CMD="CRTPGM PGM(${TARGETLIB}/TFORMDATA)"
234                CMD="${CMD} ENTMOD(QADRT/QADRTMAIN2)"
235                CMD="${CMD} MODULE("
236
237                for MODULE in ${MODULES}
238                do      CMD="${CMD} ${TARGETLIB}/${MODULE}"
239                done
240
241                CMD="${CMD} ) BNDSRVPGM(QADRTTS)"
242                CMD="${CMD} TGTRLS(${TGTRLS})"
243                system "${CMD}"
244        fi
245fi
246