summaryrefslogtreecommitdiffstats
path: root/solenv/gbuildtojson
diff options
context:
space:
mode:
authorBjoern Michaelsen <bjoern.michaelsen@canonical.com>2016-10-26 12:45:26 +0200
committerBjörn Michaelsen <bjoern.michaelsen@canonical.com>2016-10-26 22:41:32 +0000
commitdd8c8d81de4f361d8f4d259d8a27ac15ab871031 (patch)
treef5f58699b8bac68785b539b1b78940c8be7ccf06 /solenv/gbuildtojson
parenttrust the size ... tdf#79442 follow-up (diff)
downloadcore-dd8c8d81de4f361d8f4d259d8a27ac15ab871031.tar.gz
core-dd8c8d81de4f361d8f4d259d8a27ac15ab871031.zip
add test for running gbuildtoide on non-build modules
- do concat for json in C++, everything else seems fragile on Windows - have APPEND vars separately - check that gbuildtoide work on modules without a full build (modulo some blacklisted "creative" ones) Change-Id: I6fe267fee7d1b77d758072303729387dfeb8e6c8 Reviewed-on: https://gerrit.libreoffice.org/30293 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Björn Michaelsen <bjoern.michaelsen@canonical.com>
Diffstat (limited to 'solenv/gbuildtojson')
-rw-r--r--solenv/gbuildtojson/gbuildtojson.cxx104
1 files changed, 104 insertions, 0 deletions
diff --git a/solenv/gbuildtojson/gbuildtojson.cxx b/solenv/gbuildtojson/gbuildtojson.cxx
new file mode 100644
index 000000000000..12d7163f9927
--- /dev/null
+++ b/solenv/gbuildtojson/gbuildtojson.cxx
@@ -0,0 +1,104 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+* 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/.
+*/
+
+#include <algorithm>
+#include <fstream>
+#include <iostream>
+#include <list>
+#include <map>
+#include <sstream>
+#include <string>
+#include <stdio.h>
+
+using namespace std;
+static const list<string> validargs = {
+ "linktarget",
+ "ilibtarget",
+ "cxxobjects",
+ "yaccobjects",
+ "objcobjects",
+ "objcxxobjects",
+ "asmobjects",
+ "gencobjects",
+ "gencxxobjects",
+ "cflags",
+ "cflagsappend",
+ "cxxflags",
+ "cxxflagsappend",
+ "objcflags",
+ "objcflagsappend",
+ "objcxxflags",
+ "objcxxflagsappend",
+ "defs",
+ "include",
+ "linked_libs",
+ "linked_static_libs"
+};
+
+int main(int argc, char** argv)
+{
+ const string optsintro("--");
+ map<string, string> vartofile;
+ for(int i=1; i < argc; ++i)
+ {
+ const string arg(argv[i]);
+ if(arg.substr(0,2) != optsintro)
+ {
+ cerr << "Only option args starting with -- allowed." << endl;
+ return 1;
+ }
+ const size_t eqpos = arg.find("=", 2);
+ if(eqpos == string::npos)
+ {
+ cerr << "Only option args assigning with = allowed." << endl;
+ return 2;
+ }
+ const string argname(arg.substr(2, eqpos-2));
+ if(find(validargs.begin(), validargs.end(), argname) == validargs.end())
+ {
+ cerr << "Option" << argname << "invalid." << endl;
+ return 3;
+ }
+ vartofile[argname] = arg.substr(eqpos+1, string::npos);
+ }
+ cout << "{";
+ bool first(true);
+ for(auto& varandfile : vartofile)
+ {
+ if(first)
+ first =false;
+ else
+ cout << ", ";
+ string varupper(varandfile.first);
+ for(auto& c : varupper)
+ if(c != '_')
+ c = c-32;
+ ifstream filestream(varandfile.second.c_str());
+ stringstream contents;
+ contents << filestream.rdbuf();
+ filestream.close();
+ remove(varandfile.second.c_str());
+ string escapedcontents;
+ for(auto& c : contents.str())
+ {
+ if(c=='\\')
+ escapedcontents += "\\\\";
+ else if(c=='"')
+ escapedcontents += "\\\"";
+ else if(c=='\n')
+ continue;
+ else
+ escapedcontents += c;
+ }
+ cout << "\"" << varupper << "\": \"" << escapedcontents << "\"";
+ }
+ cout << "}" << endl;
+ return 0;
+}
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */