Hello community,
here is the log from the commit of package include-what-you-use for openSUSE:Leap:15.2 checked in at 2020-06-01 19:40:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/include-what-you-use (Old)
and /work/SRC/openSUSE:Leap:15.2/.include-what-you-use.new.3606 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "include-what-you-use"
Mon Jun 1 19:40:28 2020 rev:18 rq:750647 version:0.13
Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/include-what-you-use/include-what-you-use.changes 2020-01-15 15:12:11.546132976 +0100
+++ /work/SRC/openSUSE:Leap:15.2/.include-what-you-use.new.3606/include-what-you-use.changes 2020-06-01 19:40:28.668088103 +0200
@@ -1,0 +2,50 @@
+Sat Nov 16 20:32:01 UTC 2019 - Aaron Puchert
+
+- Deactivate ThinLTO on ARM: there are internal linker errors.
+
+-------------------------------------------------------------------
+Sat Nov 2 22:57:53 UTC 2019 - Aaron Puchert
+
+- Update to version 0.13, update LLVM/Clang to version 9.
+ * Improved handling of relative includes in mappings and pragmas
+ * Path normalization now collapses ..
+ * Improve --no_fwd_decls not to remove required forward declarations
+ * Improved handling of builtin templates
+ * Don't mark forward declarations final
+ * Tolerate using declarations in precompiled header
+ * Add script to generate Qt mappings, and new mappings for Qt 5.11
+ * Use directory from compilation database if available
+ * Numerous documentation and build improvements
+- Add section about pragma comments to man page.
+- Add link-llvm9.patch to adapt to packaging changes in LLVM.
+- Enable ThinLTO where possible.
+- Drop support for SLE12.
+
+-------------------------------------------------------------------
+Tue Jul 9 10:19:25 UTC 2019 - Aaron Puchert
+
+- Disable LTO, because -flto=<number> doesn't work with Clang.
+
+-------------------------------------------------------------------
+Sun May 26 19:41:55 UTC 2019 - aaronpuchert@alice-dsl.net
+
+- Update to version 0.12, update LLVM/Clang to version 8.
+ * New command-line option: --keep to mirror IWYU pragma: keep
+ * New command-line option: --cxx17ns to suggest compact C++17
+ nested namespaces
+ * Improve --no_fwd_decls to optimize for minimal number of
+ redeclarations
+ * Improved mappings for POSIX types and let mappings apply to
+ builtins as well
+ * More principled handling of explicit template instantiations
+ * Breaking change in iwyu_tool: extra args are no longer
+ automatically prefixed with -Xiwyu (so you can use them for
+ Clang args too)
+ * Better handling of template forward-decls in fix_includes.
+- Run test suite in %check.
+- Package license file and documentation.
+- Remove unnecessary %defattr.
+- Update man page.
+- Rebase fix-shebang.patch.
+
+-------------------------------------------------------------------
Old:
----
include-what-you-use-0.11.src.tar.gz
include-what-you-use.1.gz
New:
----
include-what-you-use-0.13.src.tar.gz
include-what-you-use.1
link-llvm9.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ include-what-you-use.spec ++++++
--- /var/tmp/diff_new_pack.gZWgDe/_old 2020-06-01 19:40:29.092089459 +0200
+++ /var/tmp/diff_new_pack.gZWgDe/_new 2020-06-01 19:40:29.092089459 +0200
@@ -1,8 +1,8 @@
#
# spec file for package include-what-you-use
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
-# Copyright (c) 2018 Aaron Puchert.
+# Copyright (c) 2019 SUSE LLC.
+# Copyright (c) 2019 Aaron Puchert.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,25 +18,24 @@
Name: include-what-you-use
-Version: 0.11
+Version: 0.13
Release: 0
Summary: A tool to analyze #includes in C and C++ source files
License: NCSA
Group: Development/Languages/C and C++
-Url: https://include-what-you-use.org/
+URL: https://include-what-you-use.org/
Source0: https://include-what-you-use.org/downloads/%{name}-%{version}.src.tar.gz
-Source1: %{name}.1.gz
+Source1: %{name}.1
Patch1: fix-shebang.patch
Patch2: iwyu_include_picker.patch
Patch3: remove-x86-specific-code.patch
-BuildRequires: clang7
-BuildRequires: clang7-devel
+Patch4: link-llvm9.patch
+BuildRequires: clang9
+BuildRequires: clang9-devel
BuildRequires: cmake
-%if 0%{?sle_version} && 0%{?sle_version} <= 130000 && !0%{?is_opensuse}
-BuildRequires: gcc6
-BuildRequires: gcc6-c++
-%endif
-BuildRequires: llvm7-devel
+BuildRequires: libstdc++-devel
+BuildRequires: llvm9-devel
+BuildRequires: python
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
@@ -67,38 +66,74 @@
%patch1 -p1
%patch2 -p1
%patch3 -p1
+%patch4 -p1
%build
+# Make _lto_cflags compatible with Clang, deactivate LTO where it doesn't work.
+%ifnarch %{arm}
+%define _lto_cflags "-flto=thin"
+%else
+%define _lto_cflags %{nil}
+%endif
+
# Remove obsolete files - this is now hardcoded into iwyu_include_picker.cc.
rm gcc.libc.imp gcc.symbols.imp gcc.stl.headers.imp stl.c.headers.imp
-# The includes from third_party.imp probably only make sense in some code bases.
-rm third_party.imp
# This also obsoletes iwyu.gcc.imp.
rm iwyu.gcc.imp
-# Since Clang is built using Clang, use it here too. Except for SLES, where we
-# need to use GCC 6 for some reason. (Otherwise there are segfaults.)
-%if 0%{?sle_version} && 0%{?sle_version} <= 130000 && !0%{?is_opensuse}
-export CC=gcc-6 CXX=g++-6
-%else
-export CC=clang CXX=clang++
-%endif
-%cmake -DIWYU_LLVM_ROOT_PATH=%{_libdir} ..
+# Since Clang is built using Clang, use it here too.
+%cmake \
+ -DCMAKE_C_COMPILER=clang \
+ -DCMAKE_CXX_COMPILER=clang++ \
+ -DCMAKE_AR=%{_bindir}/llvm-ar \
+ -DCMAKE_RANLIB=%{_bindir}/llvm-ranlib \
+ -DIWYU_LLVM_ROOT_PATH=%{_libdir} \
+ ..
+
+# ThinLTO uses multiple threads from the linker process for optimizations, which
+# causes an extremely high lock contention on allocations due to MALLOC_CHECK_,
+# so we deactivate it for compilation. The tests will have it activated again.
+MALLOC_CHECK_BACK=$MALLOC_CHECK_
+unset MALLOC_CHECK_
%make_jobs
+MALLOC_CHECK_=$MALLOC_CHECK_BACK
%install
%cmake_install
-install -Dm0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1.gz
+install -Dm0644 %{SOURCE1} %{buildroot}%{_mandir}/man1/%{name}.1
+
+%check
+# We don't support MS style inline assembly, because we removed the dependency
+# on the X86 target of LLVM.
+rm tests/cxx/ms_inline_asm.cc
+
+# Test doesn't work on ARM.
+%ifarch %arm
+rm tests/cxx/badinc.cc
+%endif
+
+# IWYU needs to find Clang's builtin headers. It looks for them relative to the
+# binary (https://clang.llvm.org/docs/LibTooling.html#builtin-includes), but
+# since it isn't installed into /usr/bin, it fails to find them. So we pass
+# the directory manually to the executable, and because the test driver doesn't
+# allow us to specify additional flags, we build a stub.
+# Note that this isn't a problem for the installed package, because it will be
+# in the same directory as the Clang binary.
+export CLANG_BUILTIN_DIR=%{_libdir}/clang/%{_llvm_relver}/include
+echo -e "#!/bin/bash\\nbuild/bin/include-what-you-use -isystem ${CLANG_BUILTIN_DIR} \$@" >iwyu-stub
+chmod +x iwyu-stub
+# We suppress stdout because it's pretty noisy. Failures are written to stderr.
+./run_iwyu_tests.py -- ./iwyu-stub >/dev/null
%files
-%defattr(-, root, root, -)
+%license LICENSE.TXT
+%doc docs/*
%{_bindir}/%{name}
-%{_mandir}/man1/%{name}.1.gz
+%{_mandir}/man1/%{name}.1%{ext_man}
%{_datadir}/%{name}/
%files tools
-%defattr(-, root, root, -)
%{_bindir}/*.py
%changelog
++++++ fix-shebang.patch ++++++
--- /var/tmp/diff_new_pack.gZWgDe/_old 2020-06-01 19:40:29.108089510 +0200
+++ /var/tmp/diff_new_pack.gZWgDe/_new 2020-06-01 19:40:29.108089510 +0200
@@ -15,6 +15,6 @@
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python
+ """ Driver to consume a Clang compilation database and invoke IWYU.
- from __future__ import print_function
-
+ Example usage with CMake:
++++++ include-what-you-use-0.11.src.tar.gz -> include-what-you-use-0.13.src.tar.gz ++++++
++++ 11327 lines of diff (skipped)
++++++ include-what-you-use.1 ++++++
--- /var/tmp/diff_new_pack.gZWgDe/_old 2020-06-01 19:40:29.316090175 +0200
+++ /var/tmp/diff_new_pack.gZWgDe/_new 2020-06-01 19:40:29.316090175 +0200
@@ -1,96 +1,95 @@
.\" t -*- coding: UTF-8 -*-
.\" Man page for include-what-you-use
.\"
-.\" Copyright (C) 2018 Aaron Puchert based on the built-in documentation.
+.\" Copyright (C) 2019 Aaron Puchert based on the built-in documentation.
.\"
-.\" You may distribute under the terms of the GNU General Public
-.\" License as specified in the file COPYING that comes with the
-.\" man-db distribution.
+.\" You may distribute under the terms of the University of Illinois/
+.\" NCSA Open Source License as specified in the file LICENSE.TXT that
+.\" comes with the software.
.\"
-.TH include-what-you-use 1 "2018-05-08" include-what-you-use "User Manuals"
+.TH INCLUDE-WHAT-YOU-USE 1 "2019-11-02" include-what-you-use "User Commands"
.SH NAME
-include-what-you-use \- Analyze includes in C and C++ source files.
+include-what-you-use \- analyze includes in C and C++ source files.
.SH SYNOPSIS
-.B include-what-you-use
-.RB [ -Xiwyu
-.IR option ]...
-.RI [ clang-options ]
-.I file
+.SY include-what-you-use
+.RB [ \-Xiwyu
+.IR option "]\&.\|.\|. [" clang-options "] " file
+.YS
.SH DESCRIPTION
-`Include what you use' means this: for every symbol (type, function variable,
-or macro) that you use in
+\(lqInclude what you use\(rq means this: for every symbol (type, function,
+variable, or macro) that you use in
.IR foo.cpp ,
either
.IR foo.cpp " or " foo.h
should include a header file that exports the declaration of that symbol.
.B include-what-you-use
-is a tool to analyze includes of source files to find `include-what-you-use'
-violations, and suggest fixes for them.
+is a tool to analyze includes of source files to find
+\(lqinclude-what-you-use\(rq violations, and suggest fixes for them.
.PP
The main goal of
.B include-what-you-use
-is to remove superfluous includes. It does this both by figuring out what
-includes are not actually needed for this file (for both source and header
-files), and by replacing includes with forward declarations when possible.
+is to remove superfluous includes.
+It does this both by figuring out what includes are not actually needed for this
+file (for both source and header files), and by replacing includes with forward
+declarations when possible.
.SH OPTIONS
Options for
.B include-what-you-use
have to be preceded with
-.BR -Xiwyu .
+.BR \-Xiwyu .
All other options are interpreted as
.BR clang (1)
compiler options.
.TP
-.BI --check_also= glob
-Print `include-what-you-use'-violation info for all files matching the given
-glob pattern (in addition to the default of reporting for the input source file
-and associated header files).
+.BI \-\-check_also= glob
+Print \(lqinclude-what-you-use\(rq-violation info for all files matching the
+given glob pattern (in addition to the default of reporting for the input
+source file and associated header files).
This flag may be specified multiple times to specify multiple glob patterns.
.TP
-.BI --cwd= dir
-Set current working directory.
+.B \-\-cxx17ns
+Suggest the more concise syntax for nested namespaces introduced in C++17.
.TP
-.BR --howtodebug [ =\fIfilename ]
-Without argument, prints instructions on how to run
-.B include-what-you-use
-under
-.BR gdb (1)
-for the input file, and exits. With argument, prints only when input file
-matches the argument.
+.BI \-\-keep= glob
+Always keep the includes matched by
+.IR glob .
+This flag may be used multiple times to specify more than one glob pattern.
.TP
-.BI --mapping_file= filename
+.BI \-\-mapping_file= filename
Use the given mapping file.
.TP
-.B --max_line_length
+.B \-\-max_line_length
Maximum line length for includes.
Note that this only affects the comments and their alignment, the maximum line
length can still be exceeded with long filenames (default: 80).
.TP
-.B --no_comments
+.B \-\-no_comments
Do not add comments after includes about which symbols the header was required
for.
.TP
-.B --no_default_mappings
+.B \-\-no_default_mappings
Do not use the default mappings.
.TP
-.B --no_fwd_decls
+.B \-\-no_fwd_decls
Do not use forward declarations, and instead always include the required header.
.TP
-.B --pch_in_code
+.B \-\-pch_in_code
Mark the first include in a translation unit as a precompiled header. Use
-.B --pch_in_code
+.B \-\-pch_in_code
to prevent removal of necessary PCH includes. Although
.BR clang (1)
forces PCHs to be listed as prefix headers, the PCH-in-code pattern can be used
with
.BR gcc (1).
.TP
-.BI --prefix_header_includes= value
+.BI \-\-prefix_header_includes= value
Controls how includes and forward declarations involving prefix headers should
-be handled. Prefix headers are files included via the command-line option
+be handled.
+Prefix headers are files included via the command-line option
.BR -include .
This option specifies what to do if a prefix header makes includes or forward
-declarations obsolete. The following
+declarations obsolete.
+The following
.IR value s
are allowed:
.RS
@@ -105,27 +104,28 @@
No new includes are added, existing ones are removed.
.RE
.TP
-.B --quoted_includes_first
-When sorting includes, place quoted ones first.
+.B \-\-quoted_includes_first
+When sorting includes, place quoted includes first.
.TP
-.B --transitive_includes_only
+.B \-\-transitive_includes_only
Do not suggest that a file should add
.IR foo.h " unless " foo.h
is already visible in the file's transitive includes.
.TP
-.BI --verbose= level
+.BI \-\-verbose= level
Set verbosity. At the highest level, this will dump the AST of the source file
and explain all decisions.
.SH EXIT STATUS
.B include-what-you-use
-always returns with an error to make usage with
+always returns with a nonzero status code to make usage with
.BR make (1)
feasible.
.SH MAPPING FILES
-Sometimes headers are not meant to be included directly, and sometimes headers
-are guaranteed to include other headers. Since this is hard to tell from the
-source code alone, these relationships have to be provided via mapping files.
-
+Sometimes headers are not meant to be included directly,
+and sometimes headers are guaranteed to include other headers.
+Since this is hard to tell from the source code alone,
+these relationships have to be provided via mapping files or pragma comments.
+.PP
A mapping file consists of a comma-separated list of rules enclosed by square
brackets
.BR [] .
@@ -134,8 +134,9 @@
.BI "{ include: [" header ", " header "] }"
Declares that instead of the first
.I header
-the second can be used. A header can appear on the left-hand side in multiple
-rules, meaning that any of the right-hand side headers can be used instead.
+the second can be used.
+A header can appear on the left-hand side in multiple rules,
+meaning that any of the right-hand side headers can be used instead.
.TP
.BI "{ symbol: [" symbol ", " header "] }"
Declares that to use a
@@ -157,8 +158,9 @@
.I visibility
specifies whether the header is
.BR public " or " private .
-Private headers are not allowed to be included directly. So every private
-header file should appear on the left-hand side of a mapping at least once.
+Private headers are not allowed to be included directly.
+So every private header file should appear on the left-hand side of a mapping
+at least once.
The visibility of a header file has to be the same for all rules it appears in!
.TP
.IB "include-spec\fR := " < system-header-file > \
@@ -166,6 +168,7 @@
How the header is
.BR #include d
in a source file.
+Quotation marks need to be escaped.
.TP
.IB "symbol\fR := " \(dq symbol-name "\(dq, " visibility
Describes a symbol, for example a type, function or macro. The
@@ -177,6 +180,58 @@
Lines starting with
.B #
are treated as comments.
+.SH PRAGMA COMMENTS
+Pragma comments provide information about the relations between source and
+header files and allow to whitelist or blacklist
+.BR #include s
+and forward declarations.
+.PP
+All arguments should be enclosed in quotation marks.
+.TP
+.B // IWYU pragma: keep
+Used after
+.B #include
+directives or forward declarations it ensures that they won't be removed.
+.TP
+.B // IWYU pragma: export
+Used after an
+.B #include
+directive it indicates that the current file is considered to be a provider of
+the included file.
+.TP
+.BR "// IWYU pragma: begin_exports" , " // IWYU pragma: end_exports"
+Has the same effect as the previous pragma comment, but applies to a range of
+.BR #include s
+instead of a single line.
+.TP
+.BR "// IWYU pragma: private" [ ", include \fIheader" ]
+Indicates that the current file is considered private,
+and (optionally) that any symbol will be provided by
+.IR header .
+.TP
+.BI "// IWYU pragma: no_include " header
+States that
+.I header
+should not be suggested for inclusion.
+.TP
+.BI "// IWYU pragma: no_forward_declare "symbol
+States that
+.I symbol
+should not be forward-declared.
+.TP
+.BI "// IWYU pragma: friend " regex
+Used in a private header, this indicates that all files matching
+.I regex
+are allowed to
+.B #include
+it.
+.TP
+.B // IWYU pragma: associated
+Used in a source file after an
+.B #include
+directive, this marks the header as associated to the source file.
+This is required if source and header filename differ in more than their ending.
+Includes from an associated header are assumed in the source file.
.SH FILES
.I /usr/share/include-what-you-use
.RS
@@ -194,7 +249,7 @@
.PP
.RS
.EX
-make -k CC=include-what-you-use CXX=include-what-you-use
+make \-k CC=include-what-you-use CXX=include-what-you-use
.EE
.RE
.PP
@@ -203,11 +258,11 @@
.BR -k .
It only analyzes source files built by
.BR make (1)
-along with their corresponding header files. If a project has a header file
-with no corresponding source file,
+along with their corresponding header files.
+If a project has a header file with no corresponding source file,
.B include-what-you-use
will ignore it unless you use the
-.B --check_also
+.B \-\-check_also
option to add it for analysis together with a source file.
.PP
CMake has built-in support for
@@ -218,7 +273,7 @@
.PP
.RS
.EX
-cmake -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE="include-what-you-use <args>" ..
+cmake \-DCMAKE_CXX_INCLUDE_WHAT_YOU_USE="include-what-you-use <args>" ..
.EE
.RE
.PP
++++++ link-llvm9.patch ++++++
From 589cf3836ed663b1386ed071e446d8da0fc3ef4b Mon Sep 17 00:00:00 2001
From: Aaron Puchert
Date: Fri, 1 Nov 2019 17:23:54 +0100
Subject: [PATCH] Link with clang-cpp if only that is available
Since LLVM 9, the Clang component libraries are also linked into
clang-cpp, which provides the full C++ API [1]. So we link with that
if it is available and the component libraries are not.
[1] http://releases.llvm.org/9.0.0/tools/clang/docs/ReleaseNotes.html#build-syst...
---
CMakeLists.txt | 43 ++++++++++++++++++++++++-------------------
1 file changed, 24 insertions(+), 19 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 15c48cd..a4b02ba 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -100,25 +100,30 @@ if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj /EHsc")
endif()
-target_link_libraries(include-what-you-use
- PRIVATE
- clangBasic
- clangLex
- clangAST
- clangSema
- clangFrontend
- clangDriver
-
- # Revision [1] in clang moved PCHContainerOperations from Frontend
- # to Serialization, but this broke builds that set
- # -DBUILD_SHARED_LIBS=on. Revision [2] is a followup that works
- # around the issue by adding an explicit dependency on Serialization
- # wherever there was a dependency on Frontend. Since we depend on
- # Frontend, we need an explicit dependency on Serialization too.
- # [1] https://llvm.org/viewvc/llvm-project?view=revision&revision=348907
- # [2] https://llvm.org/viewvc/llvm-project?view=revision&revision=348915
- clangSerialization
- )
+# If only clang-cpp is available, we take that.
+if (TARGET clang-cpp AND NOT TARGET clangBasic)
+ target_link_libraries(include-what-you-use PRIVATE clang-cpp)
+else()
+ target_link_libraries(include-what-you-use
+ PRIVATE
+ clangBasic
+ clangLex
+ clangAST
+ clangSema
+ clangFrontend
+ clangDriver
+
+ # Revision [1] in clang moved PCHContainerOperations from Frontend
+ # to Serialization, but this broke builds that set
+ # -DBUILD_SHARED_LIBS=on. Revision [2] is a followup that works
+ # around the issue by adding an explicit dependency on Serialization
+ # wherever there was a dependency on Frontend. Since we depend on
+ # Frontend, we need an explicit dependency on Serialization too.
+ # [1] https://llvm.org/viewvc/llvm-project?view=revision&revision=348907
+ # [2] https://llvm.org/viewvc/llvm-project?view=revision&revision=348915
+ clangSerialization
+ )
+endif()
# Platform dependencies.
if (WIN32)
--
2.23.0