lyx_mirror/development/tools/header_check.sh
Scott Kostyshak 6adae69810 Script for finding unneeded headers
The script does the following:

  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.

See #6305.
2013-05-02 02:40:48 -04:00

58 lines
1.6 KiB
Bash

#!/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