#!/bin/bash -eu
# Copyright 2020 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
################################################################################

# Workaround for fixing AFL++ build, discarded for others.
# See https://github.com/google/oss-fuzz/issues/4280#issuecomment-773977943
export AFL_LLVM_INSTRUMENT=CLASSIC,NGRAM-4

# Compile NSS
mkdir $SRC/nss-nspr
mv $SRC/nss $SRC/nss-nspr/
mv $SRC/nspr $SRC/nss-nspr/
cd $SRC/nss-nspr/
# We do not need NSS to be built with address sanitizer
CFLAGS="" CXXFLAGS="" nss/build.sh --static

# Create a package config for NSS
cp dist/Debug/lib/pkgconfig/{nspr,nss}.pc
sed -i "s/Debug//g" dist/Debug/lib/pkgconfig/nss.pc
sed -i "s/\/lib/\/lib\/Debug/g" dist/Debug/lib/pkgconfig/nss.pc
sed -i "s/include\/nspr/public\/nss/g" dist/Debug/lib/pkgconfig/nss.pc
sed -i "s/NSPR/NSS/g" dist/Debug/lib/pkgconfig/nss.pc
sed -i "s/Libs:.*/Libs: -L\${libdir} -lssl -lsmime -lnssdev -lnss_static -lpk11wrap_static -lcryptohi -lcerthi -lcertdb -lnssb -lnssutil -lnsspki -ldl -lm -lsqlite -lsoftokn_static -lfreebl_static -lgcm-aes-x86_c_lib -lhw-acc-crypto-avx -lhw-acc-crypto-avx2 /g" dist/Debug/lib/pkgconfig/nss.pc
echo "Requires: nspr" >> dist/Debug/lib/pkgconfig/nss.pc

export NSS_NSPR_PATH=$(realpath $SRC/nss-nspr/)
export PKG_CONFIG_PATH=$NSS_NSPR_PATH/dist/Debug/lib/pkgconfig
export LD_LIBRARY_PATH=$NSS_NSPR_PATH/dist/Debug/lib

# compile libcacard
BUILD=$WORK/meson
rm -rf $BUILD
mkdir $BUILD

cd $SRC/libcacard
# Drop the tests as they are not needed and require too much dependencies
meson $BUILD -Ddefault_library=static -Ddisable_tests=true
ninja -C $BUILD

# We need nss db to work
cp -r tests/db $OUT/

echo "XXXXXXXX" > $WORK/testinput

fuzzers=$(find $BUILD/fuzz/ -executable -type f)
for f in $fuzzers; do
	fuzzer=$(basename $f)
	cp $f $OUT/
	# Check if it runs at least in build image
	$OUT/$fuzzer $WORK/testinput
	#zip -j $OUT/${fuzzer}_seed_corpus.zip fuzz/corpora/${fuzzer}/*
done

rm $WORK/testinput
