82 lines
2.5 KiB
Bash
Executable File
82 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Copyright (c) 2020-now by the Zeek Project. See LICENSE for details.
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
|
|
BINDIR=$(dirname "$0")
|
|
while [ $# -ne 0 ]; do
|
|
case "$1" in
|
|
--bindir) BINDIR=$2; shift 2;;
|
|
esac
|
|
done
|
|
|
|
HILTI_CONFIG=${BINDIR}/hilti-config
|
|
SPICY_CONFIG=${BINDIR}/spicy-config
|
|
|
|
for config in "${HILTI_CONFIG}" "${SPICY_CONFIG}"; do
|
|
if [ ! -x "${config}" ]; then
|
|
echo "${config} is not an executable file"
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
# Helper function to from a given Spicy `*-config` executable determine the location of a header.
|
|
search_header() {
|
|
config=$1
|
|
header=$2;
|
|
|
|
for flag in $(${config} --cxxflags); do
|
|
if ! echo "${flag}" | grep -q '^-I'; then
|
|
continue
|
|
fi
|
|
dir=${flag#??}
|
|
if [ -e "${dir}/${header}" ]; then
|
|
location=${dir}/${header}
|
|
fi
|
|
done
|
|
|
|
if [ -z "${location+x}" ]; then
|
|
echo "Error: could not determine location of ${header}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "${location}"
|
|
}
|
|
|
|
LIBHILTI=$(search_header "${HILTI_CONFIG}" hilti/rt/libhilti.h)
|
|
LIBSPICY=$(search_header "${SPICY_CONFIG}" spicy/rt/libspicy.h)
|
|
|
|
# Extract version from `hilti-config`. It should be identical to the one from `spicy-config`.
|
|
VERSION=$(${HILTI_CONFIG} --version | cut -d ' ' -f1)
|
|
|
|
# The cache is read from the environment variable `SPICY_CACHE`
|
|
# if set; else a patch under the user's home directory is used.
|
|
CACHE=${SPICY_CACHE:-$HOME/.cache/spicy/${VERSION}}
|
|
|
|
rm -rf "${CACHE}"
|
|
mkdir -p "${CACHE}"
|
|
|
|
# NOTE: The compiler invocations here should be kept in sync
|
|
# with what we do in `CMakeLists.txt`.
|
|
#
|
|
# Precompiling libspicy.h causes the following warnings with GCC:
|
|
#
|
|
# error: #pragma once in main file [-Werror]
|
|
#
|
|
# Disable -Werror explicitly here to avoid this. It's fixed with GCC 14.
|
|
# (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47857)
|
|
cp "${LIBHILTI}" "${CACHE}/precompiled_libhilti_debug.h"
|
|
$("${HILTI_CONFIG}" --cxx --cxxflags --debug) -x c++-header "${LIBHILTI}" -o "${CACHE}/precompiled_libhilti_debug.h.gch"
|
|
|
|
cp "${LIBHILTI}" "${CACHE}/precompiled_libhilti.h"
|
|
|
|
$("${HILTI_CONFIG}" --cxx --cxxflags) -x c++-header "${LIBHILTI}" -o "${CACHE}/precompiled_libhilti.h.gch"
|
|
|
|
cp "${LIBSPICY}" "${CACHE}/precompiled_libspicy_debug.h"
|
|
$("${SPICY_CONFIG}" --cxx --cxxflags --debug) -x c++-header "${LIBSPICY}" -Wno-error -o "${CACHE}/precompiled_libspicy_debug.h.gch"
|
|
|
|
cp "${LIBSPICY}" "${CACHE}/precompiled_libspicy.h"
|
|
$("${SPICY_CONFIG}" --cxx --cxxflags) -x c++-header "${LIBSPICY}" -Wno-error -o "${CACHE}/precompiled_libspicy.h.gch"
|