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 25setenv() 26 27{ 28 # Define and export. 29 30 eval ${1}="${2}" 31 export ${1} 32} 33 34 35case "${SCRIPTDIR}" in 36/*) ;; 37*) SCRIPTDIR="`pwd`/${SCRIPTDIR}" 38esac 39 40while true 41do case "${SCRIPTDIR}" in 42 */.) SCRIPTDIR="${SCRIPTDIR%/.}";; 43 *) break;; 44 esac 45done 46 47# The script directory is supposed to be in $TOPDIR/packages/os400. 48 49TOPDIR=`dirname "${SCRIPTDIR}"` 50TOPDIR=`dirname "${TOPDIR}"` 51export SCRIPTDIR TOPDIR 52 53# Extract the SONAME from the library makefile. 54 55SONAME=`sed -e '/^VERSIONINFO=/!d' -e 's/^.* \([0-9]*\):.*$/\1/' -e 'q' \ 56 < "${TOPDIR}/lib/Makefile.am"` 57export SONAME 58 59 60################################################################################ 61# 62# Tunable configuration parameters. 63# 64################################################################################ 65 66setenv TARGETLIB 'CURL' # Target OS/400 program library. 67setenv STATBNDDIR 'CURL_A' # Static binding directory. 68setenv DYNBNDDIR 'CURL' # Dynamic binding directory. 69setenv SRVPGM "CURL.${SONAME}" # Service program. 70setenv TGTCCSID '500' # Target CCSID of objects. 71setenv DEBUG '*ALL' # Debug level. 72setenv OPTIMIZE '10' # Optimisation level 73setenv OUTPUT '*NONE' # Compilation output option. 74setenv TGTRLS 'V6R1M0' # Target OS release. 75setenv IFSDIR '/curl' # Installation IFS directory. 76 77# Define ZLIB availability and locations. 78 79setenv WITH_ZLIB 0 # Define to 1 to enable. 80setenv ZLIB_INCLUDE '/zlib/include' # ZLIB include IFS directory. 81setenv ZLIB_LIB 'ZLIB' # ZLIB library. 82setenv ZLIB_BNDDIR 'ZLIB_A' # ZLIB binding directory. 83 84# Define LIBSSH2 availability and locations. 85 86setenv WITH_LIBSSH2 0 # Define to 1 to enable. 87setenv LIBSSH2_INCLUDE '/libssh2/include' # LIBSSH2 include IFS directory. 88setenv LIBSSH2_LIB 'LIBSSH2' # LIBSSH2 library. 89setenv LIBSSH2_BNDDIR 'LIBSSH2_A' # LIBSSH2 binding directory. 90 91 92################################################################################ 93 94# Need to get the version definitions. 95 96LIBCURL_VERSION=`grep '^#define *LIBCURL_VERSION ' \ 97 "${TOPDIR}/include/curl/curlver.h" | 98 sed 's/.*"\(.*\)".*/\1/'` 99LIBCURL_VERSION_MAJOR=`grep '^#define *LIBCURL_VERSION_MAJOR ' \ 100 "${TOPDIR}/include/curl/curlver.h" | 101 sed 's/^#define *LIBCURL_VERSION_MAJOR *\([^ ]*\).*/\1/'` 102LIBCURL_VERSION_MINOR=`grep '^#define *LIBCURL_VERSION_MINOR ' \ 103 "${TOPDIR}/include/curl/curlver.h" | 104 sed 's/^#define *LIBCURL_VERSION_MINOR *\([^ ]*\).*/\1/'` 105LIBCURL_VERSION_PATCH=`grep '^#define *LIBCURL_VERSION_PATCH ' \ 106 "${TOPDIR}/include/curl/curlver.h" | 107 sed 's/^#define *LIBCURL_VERSION_PATCH *\([^ ]*\).*/\1/'` 108LIBCURL_VERSION_NUM=`grep '^#define *LIBCURL_VERSION_NUM ' \ 109 "${TOPDIR}/include/curl/curlver.h" | 110 sed 's/^#define *LIBCURL_VERSION_NUM *0x\([^ ]*\).*/\1/'` 111LIBCURL_TIMESTAMP=`grep '^#define *LIBCURL_TIMESTAMP ' \ 112 "${TOPDIR}/include/curl/curlver.h" | 113 sed 's/.*"\(.*\)".*/\1/'` 114export LIBCURL_VERSION 115export LIBCURL_VERSION_MAJOR LIBCURL_VERSION_MINOR LIBCURL_VERSION_PATCH 116export LIBCURL_VERSION_NUM LIBCURL_TIMESTAMP 117 118################################################################################ 119# 120# OS/400 specific definitions. 121# 122################################################################################ 123 124LIBIFSNAME="/QSYS.LIB/${TARGETLIB}.LIB" 125 126 127################################################################################ 128# 129# Procedures. 130# 131################################################################################ 132 133# action_needed dest [src] 134# 135# dest is an object to build 136# if specified, src is an object on which dest depends. 137# 138# exit 0 (succeeds) if some action has to be taken, else 1. 139 140action_needed() 141 142{ 143 [ ! -e "${1}" ] && return 0 144 [ "${2}" ] || return 1 145 [ "${1}" -ot "${2}" ] && return 0 146 return 1 147} 148 149 150# canonicalize_path path 151# 152# Return canonicalized path as: 153# - Absolute 154# - No . or .. component. 155 156canonicalize_path() 157 158{ 159 if expr "${1}" : '^/' > /dev/null 160 then P="${1}" 161 else P="`pwd`/${1}" 162 fi 163 164 R= 165 IFSSAVE="${IFS}" 166 IFS="/" 167 168 for C in ${P} 169 do IFS="${IFSSAVE}" 170 case "${C}" in 171 .) ;; 172 ..) R=`expr "${R}" : '^\(.*/\)..*'` 173 ;; 174 ?*) R="${R}${C}/" 175 ;; 176 *) ;; 177 esac 178 done 179 180 IFS="${IFSSAVE}" 181 echo "/`expr "${R}" : '^\(.*\)/'`" 182} 183 184 185# make_module module_name source_name [additional_definitions] 186# 187# Compile source name into ASCII module if needed. 188# As side effect, append the module name to variable MODULES. 189# Set LINK to "YES" if the module has been compiled. 190 191make_module() 192 193{ 194 MODULES="${MODULES} ${1}" 195 MODIFSNAME="${LIBIFSNAME}/${1}.MODULE" 196 action_needed "${MODIFSNAME}" "${2}" || return 0; 197 SRCDIR=`dirname \`canonicalize_path "${2}"\`` 198 199 # #pragma convert has to be in the source file itself, i.e. 200 # putting it in an include file makes it only active 201 # for that include file. 202 # Thus we build a temporary file with the pragma prepended to 203 # the source file and we compile that themporary file. 204 205 echo "#line 1 \"${2}\"" > __tmpsrcf.c 206 echo "#pragma convert(819)" >> __tmpsrcf.c 207 echo "#line 1" >> __tmpsrcf.c 208 cat "${2}" >> __tmpsrcf.c 209 CMD="CRTCMOD MODULE(${TARGETLIB}/${1}) SRCSTMF('__tmpsrcf.c')" 210# CMD="${CMD} SYSIFCOPT(*IFS64IO) OPTION(*INCDIRFIRST *SHOWINC *SHOWSYS)" 211 CMD="${CMD} SYSIFCOPT(*IFS64IO) OPTION(*INCDIRFIRST)" 212 CMD="${CMD} LOCALETYPE(*LOCALE) FLAG(10)" 213 CMD="${CMD} INCDIR('/qibm/proddata/qadrt/include'" 214 CMD="${CMD} '${TOPDIR}/include/curl' '${TOPDIR}/include' '${SRCDIR}'" 215 CMD="${CMD} '${TOPDIR}/packages/OS400'" 216 217 if [ "${WITH_ZLIB}" != "0" ] 218 then CMD="${CMD} '${ZLIB_INCLUDE}'" 219 fi 220 221 if [ "${WITH_LIBSSH2}" != "0" ] 222 then CMD="${CMD} '${LIBSSH2_INCLUDE}'" 223 fi 224 225 CMD="${CMD} ${INCLUDES})" 226 CMD="${CMD} TGTCCSID(${TGTCCSID}) TGTRLS(${TGTRLS})" 227 CMD="${CMD} OUTPUT(${OUTPUT})" 228 CMD="${CMD} OPTIMIZE(${OPTIMIZE})" 229 CMD="${CMD} DBGVIEW(${DEBUG})" 230 231 DEFINES="${3} BUILDING_LIBCURL" 232 233 if [ "${WITH_ZLIB}" != "0" ] 234 then DEFINES="${DEFINES} HAVE_LIBZ HAVE_ZLIB_H" 235 fi 236 237 if [ "${WITH_LIBSSH2}" != "0" ] 238 then DEFINES="${DEFINES} USE_LIBSSH2 HAVE_LIBSSH2_H" 239 fi 240 241 if [ "${DEFINES}" ] 242 then CMD="${CMD} DEFINE(${DEFINES})" 243 fi 244 245 system "${CMD}" 246 rm -f __tmpsrcf.c 247 LINK=YES 248} 249 250 251# Determine DB2 object name from IFS name. 252 253db2_name() 254 255{ 256 if [ "${2}" = 'nomangle' ] 257 then basename "${1}" | 258 tr 'a-z-' 'A-Z_' | 259 sed -e 's/\..*//' \ 260 -e 's/^\(.\).*\(.........\)$/\1\2/' 261 else basename "${1}" | 262 tr 'a-z-' 'A-Z_' | 263 sed -e 's/\..*//' \ 264 -e 's/^CURL_*/C/' \ 265 -e 's/^\(.\).*\(.........\)$/\1\2/' 266 fi 267} 268 269 270# Copy IFS file replacing version info. 271 272versioned_copy() 273 274{ 275 sed -e "s/@LIBCURL_VERSION@/${LIBCURL_VERSION}/g" \ 276 -e "s/@LIBCURL_VERSION_MAJOR@/${LIBCURL_VERSION_MAJOR}/g" \ 277 -e "s/@LIBCURL_VERSION_MINOR@/${LIBCURL_VERSION_MINOR}/g" \ 278 -e "s/@LIBCURL_VERSION_PATCH@/${LIBCURL_VERSION_PATCH}/g" \ 279 -e "s/@LIBCURL_VERSION_NUM@/${LIBCURL_VERSION_NUM}/g" \ 280 -e "s/@LIBCURL_TIMESTAMP@/${LIBCURL_TIMESTAMP}/g" \ 281 < "${1}" > "${2}" 282} 283