From: Scott Kostyshak Date: Thu, 2 May 2013 06:40:48 +0000 (-0400) Subject: Script for finding unneeded headers X-Git-Tag: 2.1.0beta1~318 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=6adae698101dad5d50a66d18f2857b8703055689;p=lyx.git 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. --- diff --git a/development/tools/header_check.sh b/development/tools/header_check.sh new file mode 100644 index 0000000000..f80fa72612 --- /dev/null +++ b/development/tools/header_check.sh @@ -0,0 +1,57 @@ +#!/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