#!/usr/bin/env bash # file header_check.sh # This file is part of LyX, the document processor. # Licence details can be found in the file COPYING. # author Scott Kostyshak # Full author contact details are available in file CREDITS # Description: # All .cpp and .h files in the current directory and subdirectories # are checked to see which include statements could be omitted without # causing a build error. Many of these omissions would not be desired. # For example, currently if you don't include Undo.h in Undo.cpp, there # is no error because Undo.h is included in Cursor.h which is included # in Undo.cpp. But clearly we do want to include Undo.h in Undo.cpp. # The results are stored in header_check.sh.log set -u LOG_FILE="$(basename $0).log" # For only standard headers: PATTERN='^#include <' # For all headers: # PATTERN='^#include' function BUILD_FN () { # This is not a clean make. make -j$(grep "CPU" /proc/cpuinfo | wc -l) } echo "BUILD_FN exited without error after removing the following include statements invididually:" > "${LOG_FILE}" \ || { echo "ERROR: could not create log file, ${LOG_FILE}"; exit 1; } find -regex ".*\(cpp\|h\)$" | \ while read FILE_ do FILE_COPY=$( tempfile ) cp "${FILE_}" "${FILE_COPY}" \ || { echo "ERROR: bu copy failed" >&2; exit 1; } echo "processing ${FILE_}..." grep "${PATTERN}" "${FILE_}" | \ while read INCLUDE do cp "${FILE_COPY}" "${FILE_}" \ || { echo "ERROR: restore copy failed" >&2; exit 1; } sed -i "s@${INCLUDE}@@" "${FILE_}" ( BUILD_FN ) &>/dev/null && echo "${FILE_}::${INCLUDE}" >> "${LOG_FILE}" done cp "${FILE_COPY}" "${FILE_}" done