#!/bin/sh # Copyright 2024 Huawei Cloud Computing Technology Co., Ltd. # # 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. # # Include scanner # Parse file paths from command's space-separated stdout, select those that # start with "include/", and copy them to the user-defined output directory. # # Usage: # include_scan OUT_DIR ARGV... # # Example: # ./include_scan.sh out gcc -isystem include foo.c -E -M # -> Generates output directory "out/include" from gcc's output set -eu readonly OUT_DIR="$1" shift mkdir -p "${OUT_DIR}/include" STDOUT="$("$@")" || exit $? for FILE in $(echo "$STDOUT" | tr ' ' '\n' | sort | uniq); do FILE="$(realpath -s -m --relative-to=. "${FILE}")" if expr match "${FILE}" 'include/' >/dev/null; then OUT_PATH="${OUT_DIR}/${FILE}" if ! cp -n "${FILE}" "${OUT_PATH}" 2>/dev/null; then mkdir -p "$(dirname "${OUT_PATH}")" cp -n "${FILE}" "${OUT_PATH}" fi fi done