1+ #! /bin/bash
2+ # #===----------------------------------------------------------------------===##
3+ # #
4+ # # This source file is part of the SwiftAWSLambdaRuntime open source project
5+ # #
6+ # # Copyright (c) 2017-2024 Apple Inc. and the SwiftAWSLambdaRuntime project authors
7+ # # Licensed under Apache License v2.0
8+ # #
9+ # # See LICENSE.txt for license information
10+ # # See CONTRIBUTORS.txt for the list of SwiftAWSLambdaRuntime project authors
11+ # #
12+ # # SPDX-License-Identifier: Apache-2.0
13+ # #
14+ # #===----------------------------------------------------------------------===##
15+
16+ log () { printf -- " ** %s\n" " $* " >&2 ; }
17+ error () { printf -- " ** ERROR: %s\n" " $* " >&2 ; }
18+ fatal () { error " $@ " ; exit 1; }
19+
20+ EXAMPLE=APIGateway
21+ OUTPUT_DIR=.build/release
22+ OUTPUT_FILE=${OUTPUT_DIR} /APIGatewayLambda
23+ LIBS_TO_CHECK=" libFoundation.so libFoundationInternationalization.so lib_FoundationICU.so"
24+
25+ pushd Examples/${EXAMPLE} || fatal " Failed to change directory to Examples/${EXAMPLE} ."
26+
27+ # recompile the example without the --static-swift-stdlib flag
28+ LAMBDA_USE_LOCAL_DEPS=../.. swift build -c release -Xlinker -s || fatal " Failed to build the example."
29+
30+ # check if the binary exists
31+ if [ ! -f " ${OUTPUT_FILE} " ]; then
32+ error " ❌ ${OUTPUT_FILE} does not exist."
33+ fi
34+
35+ # Checking for Foundation or ICU dependencies
36+ echo " Checking for Foundation or ICU dependencies in ${OUTPUT_DIR} /${OUTPUT_FILE} ."
37+ LIBRARIES=$( ldd ${OUTPUT_FILE} | awk ' {print $1}' )
38+ for LIB in ${LIBS_TO_CHECK} ; do
39+ echo -n " Checking for ${LIB} ... "
40+
41+ # check if the binary has a dependency on Foundation or ICU
42+ echo " ${LIBRARIES} " | grep " ${LIB} " # return 1 if not found
43+
44+ # 1 is success (grep failed to find the lib), 0 is failure (grep successly found the lib)
45+ SUCCESS=$?
46+ [ " $SUCCESS " -eq 0 ] && log " ❌ ${LIB} found." && break || log " ✅ ${LIB} not found."
47+ done
48+
49+ popd || fatal " Failed to change directory back to the root directory."
50+
51+ # exit code is the opposite of the grep exit code
52+ [ " $SUCCESS " -eq 0 ] && error " ❌ At least one foundation lib was found, reporting the error." || log " ✅ No foundation lib found, congrats!" && exit 0
0 commit comments