view ibmscripts/shldcc @ 7:57b2cc9b87f7

Use memcpy instead of strncpy when we know the length anyway. Modern gcc seems to think it knows how to detect misuse of strncpy, but it's wrong (in fact: very, very wrong) and the path of least resistance is to not try to fight with it.
author David A. Holland
date Mon, 30 May 2022 23:47:52 -0400
parents 13d2b8934445
children a4899cdfc2d6
line wrap: on
line source

#!/bin/sh
# shldcc - wrap the IBM compiler to look sort of like a unix compiler
# (for linking shared libraries)
# usage: shldcc [opts] objectfiles -o output
# options:
#     -v	verbose
#

QUIET=1

while [ x"$1" != x ]; do
    case "$1" in
	-o) OUTPUT="$2"; shift;;
	-o*) OUTPUT=`echo "$1" | sed 's/^-o//'`;;
	-v) QUIET=0;;
	-*)
	    echo "$0: unknown option $1" 1>&2
	    exit 1
	;;
	*) FILES="$FILES $1";;
    esac
shift
done

LIB='I:\\ibmcppw\\lib;I:\\ibmcppw\\sdk\\lib'
export LIB

case x"$OUTPUT" in
    x*.dll) ;;
    x) echo "$0: Usage: $0 [options] files -o output" 1>&2; exit 1;;
    *) echo "$0: output file must be a DLL" 1>&2; exti 1;;
esac

MAPFILE=`echo "$OUTPUT" | sed 's/\.dll$/.map/'`
LOGFILE=`echo "$OUTPUT" | sed 's/\.dll$/.log/'`

WINEPATH='I:\\ibmcppw\\bin'
export WINEPATH

# note: you must have ilink354 as ilink.exe, not the latest
# patchlevel, as the latest one apparently doesn't work right in wine.


# /Q+ suppresses the copyright notice

echo '/B"/dll /optf /noe"' > .tmp

if [ $QUIET = 0 ]; then
    echo wine 'I:\\ibmcppw\\bin\\icc.exe' /Ge- @.tmp /Q+ \
	/Fm$MAPFILE /Fe$OUTPUT $FILES '|' tee "$LOGFILE"
fi

(
    wine 'I:\\ibmcppw\\bin\\icc.exe' /Ge- @.tmp /Q+ \
	/Fm$MAPFILE /Fe$OUTPUT $FILES
    echo "@@@Exit $?"
) 2>&1 | tr -d '\r' | tee "$LOGFILE" | (
    if [ $QUIET = 1 ]; then
      sed '
	/^IBM Librarian for Windows (TM) Version 0.00.04 cc_WTC357f $/d
	/^(C) Copyright IBM Corporation, 1991, 1996\.$/d
	/^(C) Copyright Microsoft Corp\., 1988, 1989\.$/d
	/^Licensed Materials - Property of IBM - All Rights Reserved\.$/d

	/^IBM(R) VisualAge(TM) for C++ for Windows(R), Version 3\.5$/d
	/^- Licensed Materials - Program-Property of IBM$/d
	/^(C) Copyright IBM Corp. 1991, 1996 - All Rights Reserved.$/d

	/^BM(R) Linker for Windows(R), %0$/d
	/^ersion 02.01.r2a_WTC354e *$/d
	/^opyright (C) IBM Corporation 1988, 1998\.$/d
	/^Copyright (C) Microsoft Corp\. 1988, 1989\.$/d
	/^All rights reserved\.$/d
      '
    else
      cat
    fi
) | awk '
    /^@@@Exit [0-9][0-9]*$/ { exit($2); }

    /^%0$/ { next; }
    /^$/ { next; }
    /%0$/ { sub("%0$", "", $0); printf "%s", $0; needeol=1; next; }
    { print; needeol=0; }
    END { if (needeol) printf "\n"; }

' "q=$QUIET"