1#!/bin/sh
2#
3#       libcurl compilation script for the OS/400.
4#
5
6SCRIPTDIR=`dirname "${0}"`
7. "${SCRIPTDIR}/initscript.sh"
8cd "${TOPDIR}/lib"
9
10
11#      Create and compile the identification source file.
12
13echo '#pragma comment(user, "libcurl version '"${LIBCURL_VERSION}"'")' > os400.c
14echo '#pragma comment(user, __DATE__)' >> os400.c
15echo '#pragma comment(user, __TIME__)' >> os400.c
16echo '#pragma comment(copyright, "Copyright (C) 1998-2011 Daniel Stenberg et al. OS/400 version by P. Monnerat")' >> os400.c
17make_module     OS400           os400.c
18LINK=                           # No need to rebuild service program yet.
19MODULES=
20
21
22#       Get source list.
23
24CSOURCES()
25
26{
27        shift                   # Drop the equal sign.
28        CSOURCES="$*"           # Get the file names.
29}
30
31HHEADERS()
32
33{
34        shift                   # Drop the equal sign.
35        HHEADERS="$*"           # Get the file names.
36}
37
38. Makefile.inc
39
40
41#       Compile the sources into modules.
42
43INCLUDES="'`pwd`'"
44
45make_module     OS400SYS        "${SCRIPTDIR}/os400sys.c"
46make_module     CCSIDCURL       "${SCRIPTDIR}/ccsidcurl.c"
47
48for SRC in ${CSOURCES}
49do      MODULE=`basename "${SRC}" .c |
50                tr '[a-z]' '[A-Z]'   |
51                sed -e 's/^\(..........\).*/\1/'`
52        make_module "${MODULE}" "${SRC}"
53done
54
55
56#       If needed, (re)create the static binding directory.
57
58if action_needed "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
59then    LINK=YES
60fi
61
62if [ "${LINK}" ]
63then    rm -rf "${LIBIFSNAME}/${STATBNDDIR}.BNDDIR"
64        CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${STATBNDDIR})"
65        CMD="${CMD} TEXT('LibCurl API static binding directory')"
66        system "${CMD}"
67
68        for MODULE in ${MODULES}
69        do      CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${STATBNDDIR})"
70                CMD="${CMD} OBJ((${TARGETLIB}/${MODULE} *MODULE))"
71                system "${CMD}"
72        done
73fi
74
75
76#       The exportation file for service program creation must be in a DB2
77#               source file, so make sure it exists.
78
79if action_needed "${LIBIFSNAME}/TOOLS.FILE"
80then    CMD="CRTSRCPF FILE(${TARGETLIB}/TOOLS) RCDLEN(112)"
81        CMD="${CMD} TEXT('curl: build tools')"
82        system "${CMD}"
83fi
84
85
86#       Gather the list of symbols to export.
87
88EXPORTS=`grep '^CURL_EXTERN[ 	]'                                      \
89              "${TOPDIR}"/include/curl/*.h                              \
90              "${SCRIPTDIR}/ccsidcurl.h"                                |
91         sed -e 's/^.*CURL_EXTERN[ 	]\(.*\)(.*$/\1/'                \
92             -e 's/[ 	]*$//'                                          \
93             -e 's/^.*[ 	][ 	]*//'                           \
94             -e 's/^\*//'                                               \
95             -e 's/(\(.*\))/\1/'`
96
97#       Create the service program exportation file in DB2 member if needed.
98
99BSF="${LIBIFSNAME}/TOOLS.FILE/BNDSRC.MBR"
100
101if action_needed "${BSF}" Makefile.am
102then    LINK=YES
103fi
104
105if [ "${LINK}" ]
106then    echo " STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('LIBCURL_${SONAME}')" \
107            > "${BSF}"
108        for EXPORT in ${EXPORTS}
109        do      echo ' EXPORT    SYMBOL("'"${EXPORT}"'")' >> "${BSF}"
110        done
111
112        echo ' ENDPGMEXP' >> "${BSF}"
113fi
114
115
116#       Build the service program if needed.
117
118if action_needed "${LIBIFSNAME}/${SRVPGM}.SRVPGM"
119then    LINK=YES
120fi
121
122if [ "${LINK}" ]
123then    CMD="CRTSRVPGM SRVPGM(${TARGETLIB}/${SRVPGM})"
124        CMD="${CMD} SRCFILE(${TARGETLIB}/TOOLS) SRCMBR(BNDSRC)"
125        CMD="${CMD} MODULE(${TARGETLIB}/OS400)"
126        CMD="${CMD} BNDDIR(${TARGETLIB}/${STATBNDDIR})"
127        CMD="${CMD} BNDSRVPGM(QADRTTS QGLDCLNT QGLDBRDR)"
128        CMD="${CMD} TEXT('curl API library')"
129        CMD="${CMD} TGTRLS(${TGTRLS})"
130        system "${CMD}"
131        LINK=YES
132fi
133
134
135#       If needed, (re)create the dynamic binding directory.
136
137if action_needed "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
138then    LINK=YES
139fi
140
141if [ "${LINK}" ]
142then    rm -rf "${LIBIFSNAME}/${DYNBNDDIR}.BNDDIR"
143        CMD="CRTBNDDIR BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
144        CMD="${CMD} TEXT('LibCurl API dynamic binding directory')"
145        system "${CMD}"
146        CMD="ADDBNDDIRE BNDDIR(${TARGETLIB}/${DYNBNDDIR})"
147        CMD="${CMD} OBJ((*LIBL/${SRVPGM} *SRVPGM))"
148        system "${CMD}"
149fi
150
151
152#       Rebuild the formdata test if needed.
153
154if [ "${TEST_FORMDATA}" ]
155then    MODULES=
156        make_module TFORMDATA   formdata.c      "'_FORM_DEBUG' 'CURLDEBUG'"
157        make_module TSTREQUAL   strequal.c      "'_FORM_DEBUG' 'CURLDEBUG'"
158        make_module TMEMDEBUG   memdebug.c      "'_FORM_DEBUG' 'CURLDEBUG'"
159        make_module TMPRINTF    mprintf.c       "'_FORM_DEBUG' 'CURLDEBUG'"
160        make_module TSTRERROR   strerror.c      "'_FORM_DEBUG' 'CURLDEBUG'"
161        #       The following modules should not be needed (see comment in
162        #               formdata.c. However, there are some unsatisfied
163        #               external references leading in the following
164        #               modules to be (recursively) needed.
165        MODULES="${MODULES} EASY STRDUP SSLGEN QSSL HOSTIP HOSTIP4 HOSTIP6"
166        MODULES="${MODULES} URL HASH TRANSFER GETINFO COOKIE SENDF SELECT"
167        MODULES="${MODULES} INET_NTOP SHARE HOSTTHRE MULTI LLIST FTP HTTP"
168        MODULES="${MODULES} HTTP_DIGES HTTP_CHUNK HTTP_NEGOT TIMEVAL HOSTSYN"
169        MODULES="${MODULES} CONNECT SOCKS PROGRESS ESCAPE INET_PTON GETENV"
170        MODULES="${MODULES} DICT LDAP TELNET FILE TFTP NETRC PARSEDATE"
171        MODULES="${MODULES} SPEEDCHECK SPLAY BASE64 SECURITY IF2IP MD5"
172        MODULES="${MODULES} KRB5 OS400SYS"
173
174        PGMIFSNAME="${LIBIFSNAME}/TFORMDATA.PGM"
175
176        if action_needed "${PGMIFSNAME}"
177        then    LINK=YES
178        fi
179
180        if [ "${LINK}" ]
181        then    CMD="CRTPGM PGM(${TARGETLIB}/TFORMDATA)"
182                CMD="${CMD} ENTMOD(QADRT/QADRTMAIN2)"
183                CMD="${CMD} MODULE("
184
185                for MODULE in ${MODULES}
186                do      CMD="${CMD} ${TARGETLIB}/${MODULE}"
187                done
188
189                CMD="${CMD} ) BNDSRVPGM(QADRTTS)"
190                CMD="${CMD} TGTRLS(${TGTRLS})"
191                system "${CMD}"
192        fi
193fi
194