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