#!/bin/bash
# Copyright lowRISC contributors.
# Licensed under the Apache License, Version 2.0, see LICENSE for details.
# SPDX-License-Identifier: Apache-2.0

set -e

# This script deletes any -I command line arguments that are not
# - Absolute paths.
# - Ephemeral build directories.
#
# This function is necessary because Meson does not give adequate
# control over what directories are passed in as -I search directories
# to the C compiler. While Meson does provide |implicit_include_directories|,
# support for this option is poor: empirically, Meson ignores this option for
# some targerts. Doing it as a post-processing step ensures that Meson does
# not allow improper #includes to compile successfully.
#
# This is run by meson as a postconf script. The following env variables will be
# set:
# - MESON_SOURCE_ROOT
# - MESON_BUILD_ROOT

echo "Purging superfluous -I arguments from $MESON_BUILD_ROOT."
perl -pi -e 's#-I[^/][^@.p ]+ # #g' -- "$MESON_BUILD_ROOT/build.ninja"
