compilerplugins/Makefile-clang.mk                 |    4 ++-
 compilerplugins/clang/sharedvisitor/generator.cxx |   26 ++++++++++++++++------
 config_host.mk.in                                 |    1 
 configure.ac                                      |    1 
 4 files changed, 25 insertions(+), 7 deletions(-)

New commits:
commit ad7e2af4ed0c11f8571374fbb40d38b38c27959c
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Thu Mar 21 19:33:34 2019 +0100
Commit:     Stephan Bergmann <sberg...@redhat.com>
CommitDate: Fri Mar 22 11:38:51 2019 +0100

    Allow to pass additional options into generator's clang::tooling
    
    In my macOS build, that clang::tooling::runToolOnCodeWithArgs invocation 
failed
    to find headers like cassert and assert.h, which works now with
    
      COMPILER_PLUGINS_TOOLING_ARGS=-isysroot 
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
 -isystem /Users/stephan/Software/llvm/inst/include/c++/v1
    
    added to my autogen.input (I build against my Clang trunk libc++ whose 
headers
    are at /Users/stephan/Software/llvm/inst/include/c++/v1).
    
    Change-Id: Idbffa39c9fd4a88743fd498b8f7b6c9c56d7630d
    Reviewed-on: https://gerrit.libreoffice.org/69538
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>

diff --git a/compilerplugins/Makefile-clang.mk 
b/compilerplugins/Makefile-clang.mk
index 0d73bebb8daf..f342ec01b5f9 100644
--- a/compilerplugins/Makefile-clang.mk
+++ b/compilerplugins/Makefile-clang.mk
@@ -175,7 +175,9 @@ ifdef LO_CLANG_SHARED_PLUGINS
 $(CLANGINDIR)/sharedvisitor/sharedvisitor.cxx: $(shell grep -l 
"LO_CLANG_SHARED_PLUGINS" $(CLANGINDIR)/*.cxx)
 $(CLANGINDIR)/sharedvisitor/sharedvisitor.cxx: 
$(CLANGOUTDIR)/sharedvisitor/generator$(CLANG_EXE_EXT)
        $(call gb_Output_announce,$(subst $(SRCDIR)/,,$@),$(true),GEN,1)
-       $(CLANGOUTDIR)/sharedvisitor/generator$(CLANG_EXE_EXT) $(shell grep -l 
"LO_CLANG_SHARED_PLUGINS" $(CLANGINDIR)/*.cxx) \
+       $(CLANGOUTDIR)/sharedvisitor/generator$(CLANG_EXE_EXT) \
+        $(COMPILER_PLUGINS_TOOLING_ARGS:%=-arg=%) \
+        $(shell grep -l "LO_CLANG_SHARED_PLUGINS" $(CLANGINDIR)/*.cxx) \
         > $(CLANGINDIR)/sharedvisitor/sharedvisitor.cxx
 
 CLANGTOOLLIBS = -lclangTooling -lclangDriver -lclangFrontend -lclangParse 
-lclangSema -lclangEdit -lclangAnalysis \
diff --git a/compilerplugins/clang/sharedvisitor/generator.cxx 
b/compilerplugins/clang/sharedvisitor/generator.cxx
index bd957a903ee6..b12939516d16 100644
--- a/compilerplugins/clang/sharedvisitor/generator.cxx
+++ b/compilerplugins/clang/sharedvisitor/generator.cxx
@@ -56,6 +56,8 @@ TODO:
 #include "clang/Frontend/FrontendAction.h"
 #include "clang/Tooling/Tooling.h"
 
+#include <cstddef>
+#include <cstring>
 #include <iostream>
 #include <fstream>
 #include <set>
@@ -534,14 +536,21 @@ string readSourceFile( const char* filename )
 
 int main(int argc, char** argv)
 {
-    for( int i = 1; i < argc; ++ i )
+    vector< string > args;
+    int i = 1;
+    for( ; i < argc; ++ i )
     {
-        string contents = readSourceFile(argv[i]);
-        if( contents.empty())
-            continue;
+        constexpr std::size_t prefixlen = 5; // strlen("-arg=");
+        if (std::strncmp(argv[i], "-arg=", prefixlen) != 0)
+        {
+            break;
+        }
+        args.push_back(argv[i] + prefixlen);
+    }
 #define STRINGIFY2(a) #a
 #define STRINGIFY(a) STRINGIFY2(a)
-        vector< string > args =
+    args.insert(
+        args.end(),
         {
             "-I" STRINGIFY(BUILDDIR) "/config_host", // plugin sources use 
e.g. config_global.h
             "-I" STRINGIFY(CLANGDIR) "/include", // clang's headers
@@ -550,7 +559,12 @@ int main(int argc, char** argv)
             "-D__STDC_CONSTANT_MACROS", // Clang headers require these.
             "-D__STDC_FORMAT_MACROS",
             "-D__STDC_LIMIT_MACROS",
-        };
+        });
+    for( ; i < argc; ++ i )
+    {
+        string contents = readSourceFile(argv[i]);
+        if( contents.empty())
+            continue;
         foundSomething = false;
         if( !clang::tooling::runToolOnCodeWithArgs( new FindNamedClassAction, 
contents, args, argv[ i ] ))
         {
diff --git a/config_host.mk.in b/config_host.mk.in
index 5b4a54a8e3ed..ef174b790939 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -75,6 +75,7 @@ export COMPILER_PLUGINS=@COMPILER_PLUGINS@
 export COMPILER_PLUGINS_CXX=@COMPILER_PLUGINS_CXX@
 export COMPILER_PLUGINS_CXX_LINKFLAGS=@COMPILER_PLUGINS_CXX_LINKFLAGS@
 export COMPILER_PLUGINS_DEBUG=@COMPILER_PLUGINS_DEBUG@
+export COMPILER_PLUGINS_TOOLING_ARGS=@COMPILER_PLUGINS_TOOLING_ARGS@
 export COM_IS_CLANG=@COM_IS_CLANG@
 export CPPUNIT_CFLAGS=$(gb_SPACE)@CPPUNIT_CFLAGS@
 export CPPUNIT_LIBS=$(gb_SPACE)@CPPUNIT_LIBS@
diff --git a/configure.ac b/configure.ac
index 40dac2f7fa0f..8a3f1e2cdfeb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -6917,6 +6917,7 @@ AC_SUBST(COMPILER_PLUGINS)
 AC_SUBST(COMPILER_PLUGINS_CXX)
 AC_SUBST(COMPILER_PLUGINS_CXX_LINKFLAGS)
 AC_SUBST(COMPILER_PLUGINS_DEBUG)
+AC_SUBST(COMPILER_PLUGINS_TOOLING_ARGS)
 AC_SUBST(CLANGDIR)
 AC_SUBST(CLANGLIBDIR)
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to