public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] repo/gentoo:master commit in: dev-libs/libclangformat-ide/, dev-libs/libclangformat-ide/files/
@ 2020-06-25  7:11 Jason A. Donenfeld
  0 siblings, 0 replies; only message in thread
From: Jason A. Donenfeld @ 2020-06-25  7:11 UTC (permalink / raw
  To: gentoo-commits

commit:     dd9332b486f8dcc772654c2f6d57e14e383d0081
Author:     Peter Levine <plevine457 <AT> gmail <DOT> com>
AuthorDate: Tue May 19 01:15:58 2020 +0000
Commit:     Jason A. Donenfeld <zx2c4 <AT> gentoo <DOT> org>
CommitDate: Thu Jun 25 07:11:07 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=dd9332b4

dev-libs/libclangformat-ide: Add libclangformat-ide:{9,10}

Builds and installs a patched libclangFormat.a and header from clang
source for use with IDEs like dev-qt/qt-creator.

Package-Manager: Portage-2.3.99, Repoman-2.3.22
Signed-off-by: Peter Levine <plevine457 <AT> gmail.com>
Signed-off-by: Jason A. Donenfeld <zx2c4 <AT> gentoo.org>

 dev-libs/libclangformat-ide/Manifest               |   2 +
 .../files/clang-qtcreator-compat.patch             | 185 +++++++++++++++++++++
 .../libclangformat-ide-10.0.0.ebuild               |  72 ++++++++
 .../libclangformat-ide-9.0.1.ebuild                |  72 ++++++++
 dev-libs/libclangformat-ide/metadata.xml           |   8 +
 5 files changed, 339 insertions(+)

diff --git a/dev-libs/libclangformat-ide/Manifest b/dev-libs/libclangformat-ide/Manifest
new file mode 100644
index 00000000000..75e6601c583
--- /dev/null
+++ b/dev-libs/libclangformat-ide/Manifest
@@ -0,0 +1,2 @@
+DIST llvmorg-10.0.0.tar.gz 120804856 BLAKE2B 6b0254f5b913398cdcf2b2ec1ff219888706d2b79d5296590934714e42ac79f6a6547941ac2b1d2c4e6313dd18b6c7068e748aa6ac033e49fccbf5d355aa8191 SHA512 baa182d62fef1851836013ae8a1a00861ea89769778d67fb97b407a9de664e6c85da2af9c5b3f75d2bf34ff6b00004e531ca7e4b3115a26c0e61c575cf2303a0
+DIST llvmorg-9.0.1.tar.gz 113193320 BLAKE2B b86e405f2b8e00436045fd409fe19cdde75c797b1192c62a22b5ec75e6b4dc8e874a0f33008dc31562445e4cbe53a992b6f48c684255a6a1ef261e595b8b161f SHA512 fa88beeaae94b6d0cd9b5ba38658d0ffed8004035d7d8a4f95c3d31a709b88b581ae9bd7761333c8e5375c44b8f6be01768b5a3be901163159d7e6c43b71da59

diff --git a/dev-libs/libclangformat-ide/files/clang-qtcreator-compat.patch b/dev-libs/libclangformat-ide/files/clang-qtcreator-compat.patch
new file mode 100644
index 00000000000..72b9453ce7a
--- /dev/null
+++ b/dev-libs/libclangformat-ide/files/clang-qtcreator-compat.patch
@@ -0,0 +1,185 @@
+From fa1b9053729ec6a4425a44ec5502dd388928274a Mon Sep 17 00:00:00 2001
+From: Ivan Donchevskii <ivan.donchevskii@qt.io>
+Date: Fri, 12 Oct 2018 08:19:25 +0200
+Subject: [PATCH] [clang-format] Introduce the flag which allows not to shrink
+ lines
+
+--------------------------------------------------------------------------
+* https://reviews.llvm.org/D53072
+--------------------------------------------------------------------------
+
+Currently there's no way to prevent to lines optimization even
+if you have intentionally put <CR> to split the line.
+
+In general case it's fine. So I would prefer to have such option
+which you can enable in special cases (for me it's an IDE related use case).
+
+Revert this change if upstream clang-format offers better solution.
+
+This is a cherry pick from commits b748c82e3664c2e2e3d29645ede472d87b8cde63
+and 1817513d4f3a2e4e26be124dbe395340f798fd51.
+
+Change-Id: I9d2935b937bb68ea8dc59fac8463718475e9c080
+Reviewed-by: Orgad Shaneh <orgads@gmail.com>
+---
+ include/clang/Format/Format.h         | 13 +++++++++++++
+ lib/Format/Format.cpp                 |  4 ++++
+ lib/Format/UnwrappedLineFormatter.cpp |  9 +++++----
+ lib/Format/UnwrappedLineParser.cpp    |  2 ++
+ unittests/Format/FormatTest.cpp       | 16 ++++++++++++++++
+ 5 files changed, 40 insertions(+), 4 deletions(-)
+
+diff --git a/include/clang/Format/Format.h b/include/clang/Format/Format.h
+index cb37b0c890c..b9c4df3d1af 100644
+--- a/include/clang/Format/Format.h
++++ b/include/clang/Format/Format.h
+@@ -22,6 +22,8 @@
+ #include "llvm/Support/Regex.h"
+ #include <system_error>
+ 
++#define KEEP_LINE_BREAKS_FOR_NON_EMPTY_LINES_BACKPORTED
++
+ namespace llvm {
+ namespace vfs {
+ class FileSystem;
+@@ -1200,6 +1202,16 @@ struct FormatStyle {
+   /// \endcode
+   bool JavaScriptWrapImports;
+ 
++  /// If true, no line breaks are optimized out (works only with ColumnLimit = 0)
++  /// \code
++  ///    true:                                  false:
++  ///    int foo(int a,                 vs.     int foo(int a, int b) {
++  ///            int b) {
++  ///      bar();                                 bar();
++  ///    }                                      }
++  /// \endcode
++  bool KeepLineBreaksForNonEmptyLines;
++
+   /// If true, the empty line at the start of blocks is kept.
+   /// \code
+   ///    true:                                  false:
+@@ -1767,6 +1779,7 @@ struct FormatStyle {
+            JavaImportGroups == R.JavaImportGroups &&
+            JavaScriptQuotes == R.JavaScriptQuotes &&
+            JavaScriptWrapImports == R.JavaScriptWrapImports &&
++           KeepLineBreaksForNonEmptyLines == R.KeepLineBreaksForNonEmptyLines &&
+            KeepEmptyLinesAtTheStartOfBlocks ==
+                R.KeepEmptyLinesAtTheStartOfBlocks &&
+            MacroBlockBegin == R.MacroBlockBegin &&
+diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp
+index 2c4f8760540..61ea88626ee 100644
+--- a/lib/Format/Format.cpp
++++ b/lib/Format/Format.cpp
+@@ -417,6 +417,8 @@ template <> struct MappingTraits<FormatStyle> {
+     IO.mapOptional("JavaImportGroups", Style.JavaImportGroups);
+     IO.mapOptional("JavaScriptQuotes", Style.JavaScriptQuotes);
+     IO.mapOptional("JavaScriptWrapImports", Style.JavaScriptWrapImports);
++    IO.mapOptional("KeepLineBreaksForNonEmptyLines",
++                   Style.KeepLineBreaksForNonEmptyLines);
+     IO.mapOptional("KeepEmptyLinesAtTheStartOfBlocks",
+                    Style.KeepEmptyLinesAtTheStartOfBlocks);
+     IO.mapOptional("MacroBlockBegin", Style.MacroBlockBegin);
+@@ -678,6 +680,7 @@ FormatStyle getLLVMStyle() {
+   LLVMStyle.JavaScriptWrapImports = true;
+   LLVMStyle.TabWidth = 8;
+   LLVMStyle.MaxEmptyLinesToKeep = 1;
++  LLVMStyle.KeepLineBreaksForNonEmptyLines = false;
+   LLVMStyle.KeepEmptyLinesAtTheStartOfBlocks = true;
+   LLVMStyle.NamespaceIndentation = FormatStyle::NI_None;
+   LLVMStyle.ObjCBinPackProtocolList = FormatStyle::BPS_Auto;
+@@ -745,6 +748,7 @@ FormatStyle getGoogleStyle(FormatStyle::LanguageKind Language) {
+       {"^<ext/.*\\.h>", 2}, {"^<.*\\.h>", 1}, {"^<.*", 2}, {".*", 3}};
+   GoogleStyle.IncludeStyle.IncludeIsMainRegex = "([-_](test|unittest))?$";
+   GoogleStyle.IndentCaseLabels = true;
++  GoogleStyle.KeepLineBreaksForNonEmptyLines = false;
+   GoogleStyle.KeepEmptyLinesAtTheStartOfBlocks = false;
+   GoogleStyle.ObjCBinPackProtocolList = FormatStyle::BPS_Never;
+   GoogleStyle.ObjCSpaceAfterProperty = false;
+diff --git a/lib/Format/UnwrappedLineFormatter.cpp b/lib/Format/UnwrappedLineFormatter.cpp
+index 6b6a9aff461..c88efbc6867 100644
+--- a/lib/Format/UnwrappedLineFormatter.cpp
++++ b/lib/Format/UnwrappedLineFormatter.cpp
+@@ -684,7 +684,7 @@ public:
+   LineFormatter(ContinuationIndenter *Indenter, WhitespaceManager *Whitespaces,
+                 const FormatStyle &Style,
+                 UnwrappedLineFormatter *BlockFormatter)
+-      : Indenter(Indenter), Whitespaces(Whitespaces), Style(Style),
++      : Indenter(Indenter), Style(Style), Whitespaces(Whitespaces),
+         BlockFormatter(BlockFormatter) {}
+   virtual ~LineFormatter() {}
+ 
+@@ -727,7 +727,8 @@ protected:
+       // assert so that we can simply call this function for all tokens.
+       return true;
+ 
+-    if (NewLine) {
++    if (NewLine || (Previous.Children[0]->First->MustBreakBefore &&
++                    Style.KeepLineBreaksForNonEmptyLines)) {
+       int AdditionalIndent = State.Stack.back().Indent -
+                              Previous.Children[0]->Level * Style.IndentWidth;
+ 
+@@ -772,10 +773,10 @@ protected:
+   }
+ 
+   ContinuationIndenter *Indenter;
++  const FormatStyle &Style;
+ 
+ private:
+   WhitespaceManager *Whitespaces;
+-  const FormatStyle &Style;
+   UnwrappedLineFormatter *BlockFormatter;
+ };
+ 
+@@ -798,7 +799,7 @@ public:
+     while (State.NextToken) {
+       bool Newline =
+           Indenter->mustBreak(State) ||
+-          (Indenter->canBreak(State) && State.NextToken->NewlinesBefore > 0);
++          (State.NextToken->NewlinesBefore > 0 && Indenter->canBreak(State));
+       unsigned Penalty = 0;
+       formatChildren(State, Newline, /*DryRun=*/false, Penalty);
+       Indenter->addTokenToState(State, Newline, /*DryRun=*/false);
+diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp
+index 3cd3c8f9cdf..3aa30c7cb3f 100644
+--- a/lib/Format/UnwrappedLineParser.cpp
++++ b/lib/Format/UnwrappedLineParser.cpp
+@@ -2554,6 +2554,8 @@ void UnwrappedLineParser::nextToken(int LevelDifference) {
+   else
+     readTokenWithJavaScriptASI();
+   FormatTok->Previous = Previous;
++  if (FormatTok->NewlinesBefore && Style.KeepLineBreaksForNonEmptyLines)
++    FormatTok->MustBreakBefore = true;
+ }
+ 
+ void UnwrappedLineParser::distributeComments(
+diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp
+index c05fceb4766..38906d9ee31 100644
+--- a/unittests/Format/FormatTest.cpp
++++ b/unittests/Format/FormatTest.cpp
+@@ -385,6 +385,22 @@ TEST_F(FormatTest, RemovesEmptyLines) {
+                    "  void funk() {}\n"
+                    "};",
+                    Style));
++
++  Style.KeepLineBreaksForNonEmptyLines = true;
++  Style.ColumnLimit = 0;
++  EXPECT_EQ("int foo(int a,\n"
++            "        int b)\n"
++            "{\n"
++            "}",
++            format("int foo(int a,\n"
++                   "int b) {}",
++                   Style));
++
++  EXPECT_EQ("[]() {\n"
++            "  foo(); }",
++            format("[]() {\n"
++                   "foo(); }",
++                   Style));
+ }
+ 
+ TEST_F(FormatTest, RecognizesBinaryOperatorKeywords) {
+-- 
+2.26.2
+

diff --git a/dev-libs/libclangformat-ide/libclangformat-ide-10.0.0.ebuild b/dev-libs/libclangformat-ide/libclangformat-ide-10.0.0.ebuild
new file mode 100644
index 00000000000..5c04b67cf27
--- /dev/null
+++ b/dev-libs/libclangformat-ide/libclangformat-ide-10.0.0.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit cmake llvm llvm.org toolchain-funcs
+
+DESCRIPTION="A static clangformat library patched for IDE use"
+HOMEPAGE="https://www.qt.io/blog/2019/04/17/clangformat-plugin-qt-creator-4-9"
+LLVM_COMPONENTS=( clang )
+
+llvm.org_set_globals
+
+LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA MIT"
+SLOT="$(ver_cut 1)"
+KEYWORDS="~amd64 ~x86"
+IUSE="debug"
+
+DEPEND="~sys-devel/llvm-${PV}:${SLOT}=[debug=]"
+
+# least intrusive of all
+CMAKE_BUILD_TYPE=RelWithDebInfo
+
+PATCHES=( "${FILESDIR}/clang-qtcreator-compat.patch" )
+
+pkg_setup() {
+	LLVM_MAX_SLOT=${SLOT} llvm_pkg_setup
+}
+
+src_unpack() {
+	llvm.org_src_unpack
+}
+
+src_configure() {
+	local mycmakeargs=(
+		-DLLVM_CMAKE_PATH="${EPREFIX}/usr/lib/llvm/${SLOT}/$(get_libdir)/cmake/llvm"
+		-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${SLOT}"
+		-DBUILD_SHARED_LIBS=OFF
+		-DLLVM_ENABLE_EH=ON
+		-DLLVM_ENABLE_RTTI=ON
+	)
+
+	if [[ -n ${EPREFIX} ]]; then
+		mycmakeargs+=(
+			-DGCC_INSTALL_PREFIX="${EPREFIX}/usr"
+		)
+	fi
+
+	if tc-is-cross-compiler; then
+		[[ -x "/usr/bin/clang-tblgen" ]] \
+			|| die "/usr/bin/clang-tblgen not found or usable"
+		mycmakeargs+=(
+			-DCMAKE_CROSSCOMPILING=ON
+			-DCLANG_TABLEGEN=/usr/bin/clang-tblgen
+		)
+	fi
+
+	# LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
+	use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
+	cmake_src_configure
+}
+
+src_compile() {
+	cmake_src_compile libclangFormat.a
+}
+
+src_install() {
+	into usr/lib/llvm/${SLOT}
+	newlib.a "${BUILD_DIR}/$(get_libdir)/libclangFormat.a" libclangFormatIDE.a
+	insinto usr/lib/llvm/${SLOT}/include/clang/Format
+	newins "${S}/include/clang/Format/Format.h" FormatIDE.h
+}

diff --git a/dev-libs/libclangformat-ide/libclangformat-ide-9.0.1.ebuild b/dev-libs/libclangformat-ide/libclangformat-ide-9.0.1.ebuild
new file mode 100644
index 00000000000..5c04b67cf27
--- /dev/null
+++ b/dev-libs/libclangformat-ide/libclangformat-ide-9.0.1.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2020 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+inherit cmake llvm llvm.org toolchain-funcs
+
+DESCRIPTION="A static clangformat library patched for IDE use"
+HOMEPAGE="https://www.qt.io/blog/2019/04/17/clangformat-plugin-qt-creator-4-9"
+LLVM_COMPONENTS=( clang )
+
+llvm.org_set_globals
+
+LICENSE="Apache-2.0-with-LLVM-exceptions UoI-NCSA MIT"
+SLOT="$(ver_cut 1)"
+KEYWORDS="~amd64 ~x86"
+IUSE="debug"
+
+DEPEND="~sys-devel/llvm-${PV}:${SLOT}=[debug=]"
+
+# least intrusive of all
+CMAKE_BUILD_TYPE=RelWithDebInfo
+
+PATCHES=( "${FILESDIR}/clang-qtcreator-compat.patch" )
+
+pkg_setup() {
+	LLVM_MAX_SLOT=${SLOT} llvm_pkg_setup
+}
+
+src_unpack() {
+	llvm.org_src_unpack
+}
+
+src_configure() {
+	local mycmakeargs=(
+		-DLLVM_CMAKE_PATH="${EPREFIX}/usr/lib/llvm/${SLOT}/$(get_libdir)/cmake/llvm"
+		-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr/lib/llvm/${SLOT}"
+		-DBUILD_SHARED_LIBS=OFF
+		-DLLVM_ENABLE_EH=ON
+		-DLLVM_ENABLE_RTTI=ON
+	)
+
+	if [[ -n ${EPREFIX} ]]; then
+		mycmakeargs+=(
+			-DGCC_INSTALL_PREFIX="${EPREFIX}/usr"
+		)
+	fi
+
+	if tc-is-cross-compiler; then
+		[[ -x "/usr/bin/clang-tblgen" ]] \
+			|| die "/usr/bin/clang-tblgen not found or usable"
+		mycmakeargs+=(
+			-DCMAKE_CROSSCOMPILING=ON
+			-DCLANG_TABLEGEN=/usr/bin/clang-tblgen
+		)
+	fi
+
+	# LLVM_ENABLE_ASSERTIONS=NO does not guarantee this for us, #614844
+	use debug || local -x CPPFLAGS="${CPPFLAGS} -DNDEBUG"
+	cmake_src_configure
+}
+
+src_compile() {
+	cmake_src_compile libclangFormat.a
+}
+
+src_install() {
+	into usr/lib/llvm/${SLOT}
+	newlib.a "${BUILD_DIR}/$(get_libdir)/libclangFormat.a" libclangFormatIDE.a
+	insinto usr/lib/llvm/${SLOT}/include/clang/Format
+	newins "${S}/include/clang/Format/Format.h" FormatIDE.h
+}

diff --git a/dev-libs/libclangformat-ide/metadata.xml b/dev-libs/libclangformat-ide/metadata.xml
new file mode 100644
index 00000000000..d472e560c73
--- /dev/null
+++ b/dev-libs/libclangformat-ide/metadata.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+	<maintainer type="person">
+		<email>pesa@gentoo.org</email>
+		<name>Davide Pesavento</name>
+	</maintainer>
+</pkgmetadata>


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2020-06-25  7:11 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-06-25  7:11 [gentoo-commits] repo/gentoo:master commit in: dev-libs/libclangformat-ide/, dev-libs/libclangformat-ide/files/ Jason A. Donenfeld

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox