diff options
Diffstat (limited to '')
-rwxr-xr-x | bin/gen-iwyu-dummy-lib | 79 | ||||
-rw-r--r-- | bin/gen-iwyu-dummy-lib.awk | 34 |
2 files changed, 113 insertions, 0 deletions
diff --git a/bin/gen-iwyu-dummy-lib b/bin/gen-iwyu-dummy-lib new file mode 100755 index 000000000..c7d64817d --- /dev/null +++ b/bin/gen-iwyu-dummy-lib @@ -0,0 +1,79 @@ +#!/bin/bash +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +# Create a makefile that builds every non-generated header as a source file. +# This should help to ensure the headers are self-contained and don't +# impose unnecessary requirements (unnecessary includes) on client code. +# +# This script is fully compliant with the UNIX philosophy +# (and if you can't read it you are clearly not worthy) + +set -e + +iwyu_INCLUDES=$(grep -h -r ":$" "$BUILDDIR"/workdir/Dep/*Object* \ + | grep -v 'workdir\|config_host' | grep -v "^/usr" \ + | sed -e "s,^${SRCDIR}/,," | sed -e "s/:$//" | sort -u) + +iwyu_INCLUDEDIRS=$(echo "$iwyu_INCLUDES" | sed -e "s,/[^/]*$,," | grep -v "^include" | sort -u) + +iwyu_EXTERNALS=$(ls "$SRCDIR"/*/*Library*mk "$SRCDIR"/*/*Executable*mk \ + | xargs awk -f "$SRCDIR"/bin/gen-iwyu-dummy-lib.awk \ + | grep -v '$(\|)\|\\$\|apr\|breakpad\|bzip2\|expat_x64\|mDNSResponder\|serf\|zlib_x64') + +iwyu_DIR="$BUILDDIR"/iwyudummy/ +mkdir -p "$iwyu_DIR" + +{ + echo 'module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))' + echo "include ${SRCDIR}/solenv/gbuild/partial_build.mk" +} > "$iwyu_DIR"Makefile + +{ + echo '$(eval $(call gb_Module_Module,iwyudummy))' + echo '$(eval $(call gb_Module_add_targets,iwyudummy,StaticLibrary_iwyudummy))' +} > "$iwyu_DIR"Module_iwyudummy.mk + +{ + # prevent some common configuration errors + echo 'ifneq ($(COMPILER_PLUGINS),)' + echo ' $(call gb_Output_error,--enable-compiler-plugins does not work well with this: bailing out)' + echo 'endif' + + echo '$(eval $(call gb_StaticLibrary_StaticLibrary,iwyudummy))' + # clang will "compile" headers to .gch by default + echo '$(eval $(call gb_StaticLibrary_add_cxxflags,iwyudummy,-x c++ -D__cplusplus=201402L -D__STDC_VERSION__=201112L -Wno-unused-macros -Wno-unused-const-variable))' + echo '$(eval $(call gb_StaticLibrary_use_custom_headers,iwyudummy,officecfg/registry))' + echo '$(eval $(call gb_StaticLibrary_use_sdk_api,iwyudummy))' + echo '$(eval $(call gb_StaticLibrary_use_externals,iwyudummy,\' + for ext in ${iwyu_EXTERNALS}; do + echo "${ext} \\"; + done + echo '))' + + echo '$(eval $(call gb_StaticLibrary_set_include,iwyudummy,\' + echo '$$(INCLUDE) \' + for dir in ${iwyu_INCLUDEDIRS}; do + if echo "$dir" | grep ".*/inc/" &>/dev/null; then + iwyu_INCLUDEDIRS_EXTRA+=" ${dir%/inc/*}/inc" + fi + done + for dir in $(echo ${iwyu_INCLUDEDIRS_EXTRA} | sed -e "s/ /\n/g" | uniq) ${iwyu_INCLUDEDIRS}; do + echo "-I${SRCDIR}/${dir} \\"; + done + # it fails to find stddef.h? + echo "-I/usr/lib/clang/$(llvm-config --version)/include \\" + echo "))" + + echo '$(eval $(call gb_StaticLibrary__add_iwyu_headers,iwyudummy,\' + for hdr in ${iwyu_INCLUDES}; do + echo "${hdr} \\"; + done + echo '))' +} > "$iwyu_DIR"StaticLibrary_iwyudummy.mk + diff --git a/bin/gen-iwyu-dummy-lib.awk b/bin/gen-iwyu-dummy-lib.awk new file mode 100644 index 000000000..464d9515c --- /dev/null +++ b/bin/gen-iwyu-dummy-lib.awk @@ -0,0 +1,34 @@ +BEGIN { domatch = 0; } + +{ + if ($0 ~ /use_external(s)?,/ ) + { + if (index($0, "))")) + { + gsub(/.*,/, ""); + gsub(/\)+/, ""); + if (!($0 in exts)) + { + exts[$0]; + print $0; + } + } + else + { + domatch = 1; + } + } + else if ($0 ~ /\)\)/ ) + { + domatch = 0; + } + else if (domatch == 1) + { + if (!($1 in exts)) + { + exts[$1]; + print $1; + } + } +} + |