Browse Source

Meson: now reads build/meson-info/intro-targets.json available in newer meson versions

pipelines/235045657
eidheim 5 years ago
parent
commit
74fe6e421f
  1. 38
      src/cmake.cpp
  2. 48
      src/meson.cpp
  3. 6
      tests/compile_commands_test.cpp
  4. 38
      tests/meson_build_test.cpp
  5. 5
      tests/meson_old_test_files/a_subdir/main.cpp
  6. 1
      tests/meson_old_test_files/a_subdir/meson.build
  7. 5
      tests/meson_old_test_files/another_file.cpp
  8. 27
      tests/meson_old_test_files/build/compile_commands.json
  9. 5
      tests/meson_old_test_files/main.cpp
  10. 11
      tests/meson_old_test_files/meson.build
  11. 33
      tests/meson_test_files/build/compile_commands.json
  12. 1
      tests/meson_test_files/build/meson-info/intro-targets.json

38
src/cmake.cpp

@ -63,7 +63,7 @@ bool CMake::update_default_build(const boost::filesystem::path &default_build_pa
auto exit_status = Terminal::get().process(Config::get().project.cmake.command + ' ' + auto exit_status = Terminal::get().process(Config::get().project.cmake.command + ' ' +
filesystem::escape_argument(project_path.string()) + " -DCMAKE_EXPORT_COMPILE_COMMANDS=ON", default_build_path); filesystem::escape_argument(project_path.string()) + " -DCMAKE_EXPORT_COMPILE_COMMANDS=ON", default_build_path);
message.hide(); message.hide();
if(exit_status == EXIT_SUCCESS) { if(exit_status == 0) {
#ifdef _WIN32 //Temporary fix to MSYS2's libclang #ifdef _WIN32 //Temporary fix to MSYS2's libclang
auto compile_commands_file = filesystem::read(compile_commands_path); auto compile_commands_file = filesystem::read(compile_commands_path);
auto replace_drive = [&compile_commands_file](const std::string &param) { auto replace_drive = [&compile_commands_file](const std::string &param) {
@ -106,7 +106,7 @@ bool CMake::update_debug_build(const boost::filesystem::path &debug_build_path,
auto exit_status = Terminal::get().process(Config::get().project.cmake.command + ' ' + auto exit_status = Terminal::get().process(Config::get().project.cmake.command + ' ' +
filesystem::escape_argument(project_path.string()) + " -DCMAKE_BUILD_TYPE=Debug", debug_build_path); filesystem::escape_argument(project_path.string()) + " -DCMAKE_BUILD_TYPE=Debug", debug_build_path);
message.hide(); message.hide();
if(exit_status == EXIT_SUCCESS) if(exit_status == 0)
return true; return true;
return false; return false;
} }
@ -117,9 +117,9 @@ boost::filesystem::path CMake::get_executable(const boost::filesystem::path &bui
// are then used to identify if a file in compile_commands.json is part of an executable or not // are then used to identify if a file in compile_commands.json is part of an executable or not
CompileCommands compile_commands(build_path); CompileCommands compile_commands(build_path);
std::vector<std::pair<boost::filesystem::path, boost::filesystem::path>> command_files_and_maybe_executables; std::vector<std::pair<boost::filesystem::path, boost::filesystem::path>> source_files_and_maybe_executables;
for(auto &command : compile_commands.commands) { for(auto &command : compile_commands.commands) {
auto command_file = filesystem::get_normal_path(command.file); auto source_file = filesystem::get_normal_path(command.file);
auto values = command.parameter_values("-o"); auto values = command.parameter_values("-o");
if(!values.empty()) { if(!values.empty()) {
size_t pos; size_t pos;
@ -127,7 +127,7 @@ boost::filesystem::path CMake::get_executable(const boost::filesystem::path &bui
values[0].erase(pos, 11); values[0].erase(pos, 11);
if((pos = values[0].find(".dir")) != std::string::npos) { if((pos = values[0].find(".dir")) != std::string::npos) {
auto executable = command.directory / values[0].substr(0, pos); auto executable = command.directory / values[0].substr(0, pos);
command_files_and_maybe_executables.emplace_back(command_file, executable); source_files_and_maybe_executables.emplace_back(source_file, executable);
} }
} }
} }
@ -155,15 +155,15 @@ boost::filesystem::path CMake::get_executable(const boost::filesystem::path &bui
boost::filesystem::path best_match_executable; boost::filesystem::path best_match_executable;
for(auto &cmake_executable : cmake_executables) { for(auto &cmake_executable : cmake_executables) {
for(auto &command_file_and_maybe_executable : command_files_and_maybe_executables) { for(auto &source_file_and_maybe_executable : source_files_and_maybe_executables) {
auto &command_file = command_file_and_maybe_executable.first; auto &source_file = source_file_and_maybe_executable.first;
auto &maybe_executable = command_file_and_maybe_executable.second; auto &maybe_executable = source_file_and_maybe_executable.second;
if(cmake_executable == maybe_executable) { if(cmake_executable == maybe_executable) {
if(command_file == file_path) if(source_file == file_path)
return maybe_executable; return maybe_executable;
auto command_file_directory = command_file.parent_path(); auto source_file_directory = source_file.parent_path();
if(filesystem::file_in_path(file_path, command_file_directory)) { if(filesystem::file_in_path(file_path, source_file_directory)) {
auto size = std::distance(command_file_directory.begin(), command_file_directory.end()); auto size = std::distance(source_file_directory.begin(), source_file_directory.end());
if(size > best_match_size) { if(size > best_match_size) {
best_match_size = size; best_match_size = size;
best_match_executable = maybe_executable; best_match_executable = maybe_executable;
@ -175,14 +175,14 @@ boost::filesystem::path CMake::get_executable(const boost::filesystem::path &bui
if(!best_match_executable.empty()) if(!best_match_executable.empty())
return best_match_executable; return best_match_executable;
for(auto &command_file_and_maybe_executable : command_files_and_maybe_executables) { for(auto &source_file_and_maybe_executable : source_files_and_maybe_executables) {
auto &command_file = command_file_and_maybe_executable.first; auto &source_file = source_file_and_maybe_executable.first;
auto &maybe_executable = command_file_and_maybe_executable.second; auto &maybe_executable = source_file_and_maybe_executable.second;
if(command_file == file_path) if(source_file == file_path)
return maybe_executable; return maybe_executable;
auto command_file_directory = command_file.parent_path(); auto source_file_directory = source_file.parent_path();
if(filesystem::file_in_path(file_path, command_file_directory)) { if(filesystem::file_in_path(file_path, source_file_directory)) {
auto size = std::distance(command_file_directory.begin(), command_file_directory.end()); auto size = std::distance(source_file_directory.begin(), source_file_directory.end());
if(size > best_match_size) { if(size > best_match_size) {
best_match_size = size; best_match_size = size;
best_match_executable = maybe_executable; best_match_executable = maybe_executable;

48
src/meson.cpp

@ -6,6 +6,7 @@
#include "terminal.hpp" #include "terminal.hpp"
#include "utility.hpp" #include "utility.hpp"
#include <boost/optional.hpp> #include <boost/optional.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <regex> #include <regex>
Meson::Meson(const boost::filesystem::path &path) { Meson::Meson(const boost::filesystem::path &path) {
@ -63,7 +64,7 @@ bool Meson::update_default_build(const boost::filesystem::path &default_build_pa
(compile_commands_exists ? "--internal regenerate " : "") + (compile_commands_exists ? "--internal regenerate " : "") +
"--buildtype plain " + filesystem::escape_argument(project_path.string()), default_build_path); "--buildtype plain " + filesystem::escape_argument(project_path.string()), default_build_path);
message.hide(); message.hide();
if(exit_status == EXIT_SUCCESS) if(exit_status == 0)
return true; return true;
return false; return false;
} }
@ -91,7 +92,7 @@ bool Meson::update_debug_build(const boost::filesystem::path &debug_build_path,
(compile_commands_exists ? "--internal regenerate " : "") + (compile_commands_exists ? "--internal regenerate " : "") +
"--buildtype debug " + filesystem::escape_argument(project_path.string()), debug_build_path); "--buildtype debug " + filesystem::escape_argument(project_path.string()), debug_build_path);
message.hide(); message.hide();
if(exit_status == EXIT_SUCCESS) if(exit_status == 0)
return true; return true;
return false; return false;
} }
@ -101,19 +102,48 @@ boost::filesystem::path Meson::get_executable(const boost::filesystem::path &bui
ssize_t best_match_size = -1; ssize_t best_match_size = -1;
boost::filesystem::path best_match_executable; boost::filesystem::path best_match_executable;
for(auto &command : compile_commands.commands) { for(auto &command : compile_commands.commands) {
auto command_file = filesystem::get_normal_path(command.file); auto source_file = filesystem::get_normal_path(command.file);
auto values = command.parameter_values("-o"); auto values = command.parameter_values("-o");
if(!values.empty()) { if(!values.empty()) {
size_t pos; size_t pos;
if((pos = values[0].find('@')) != std::string::npos) { if((pos = values[0].find('@')) != std::string::npos) {
if(starts_with(values[0], pos + 1, "exe")) { if(starts_with(values[0], pos + 1, "exe")) {
auto executable = build_path / values[0].substr(0, pos); auto executable = build_path / values[0].substr(0, pos);
if(command_file == file_path) if(source_file == file_path)
return executable;
auto source_file_directory = source_file.parent_path();
if(filesystem::file_in_path(file_path, source_file_directory)) {
auto size = std::distance(source_file_directory.begin(), source_file_directory.end());
if(size > best_match_size) {
best_match_size = size;
best_match_executable = executable;
}
}
}
}
}
}
if(best_match_executable.empty()) { // Newer Meson outputs intro-targets.json that can be used to find executable
boost::property_tree::ptree pt;
try {
boost::property_tree::json_parser::read_json((build_path / "meson-info" / "intro-targets.json").string(), pt);
for(auto &target : pt) {
if(target.second.get<std::string>("type") == "executable") {
auto filenames = target.second.get_child("filename");
if(filenames.empty()) // No executable file found
break;
auto executable = filesystem::get_normal_path(filenames.begin()->second.get<std::string>(""));
for(auto &target_source : target.second.get_child("target_sources")) {
for(auto &source : target_source.second.get_child("sources")) {
auto source_file = filesystem::get_normal_path(source.second.get<std::string>(""));
if(source_file == file_path)
return executable; return executable;
auto command_file_directory = command_file.parent_path(); auto source_file_directory = source_file.parent_path();
if(filesystem::file_in_path(file_path, command_file_directory)) { if(filesystem::file_in_path(file_path, source_file_directory)) {
auto size = std::distance(command_file_directory.begin(), command_file_directory.end()); auto size = std::distance(source_file_directory.begin(), source_file_directory.end());
if(size > best_match_size) { if(size > best_match_size) {
best_match_size = size; best_match_size = size;
best_match_executable = executable; best_match_executable = executable;
@ -123,6 +153,10 @@ boost::filesystem::path Meson::get_executable(const boost::filesystem::path &bui
} }
} }
} }
}
catch(...) {
}
}
return best_match_executable; return best_match_executable;
} }

6
tests/compile_commands_test.cpp

@ -15,9 +15,9 @@ int main() {
g_assert(!system_include_paths.include_paths.empty()); g_assert(!system_include_paths.include_paths.empty());
} }
{ {
CompileCommands compile_commands(tests_path / "meson_test_files" / "build"); CompileCommands compile_commands(tests_path / "meson_old_test_files" / "build");
g_assert(compile_commands.commands.at(0).directory == "jucipp/tests/meson_test_files/build"); g_assert(compile_commands.commands.at(0).directory == "jucipp/tests/meson_old_test_files/build");
g_assert_cmpuint(compile_commands.commands.size(), ==, 5); g_assert_cmpuint(compile_commands.commands.size(), ==, 5);
@ -31,7 +31,7 @@ int main() {
g_assert_cmpuint(parameter_values.size(), ==, 1); g_assert_cmpuint(parameter_values.size(), ==, 1);
g_assert_cmpstr(parameter_values.at(0).c_str(), ==, "hello_lib@sta/main.cpp.o"); g_assert_cmpstr(parameter_values.at(0).c_str(), ==, "hello_lib@sta/main.cpp.o");
g_assert(boost::filesystem::canonical(compile_commands.commands.at(0).file) == tests_path / "meson_test_files" / "main.cpp"); g_assert(boost::filesystem::canonical(compile_commands.commands.at(0).file) == tests_path / "meson_old_test_files" / "main.cpp");
} }
{ {

38
tests/meson_build_test.cpp

@ -4,8 +4,10 @@
int main() { int main() {
auto tests_path = boost::filesystem::canonical(JUCI_TESTS_PATH); auto tests_path = boost::filesystem::canonical(JUCI_TESTS_PATH);
auto meson_test_files_path = boost::filesystem::canonical(tests_path / "meson_test_files");
// Test old meson versions
{
auto meson_test_files_path = boost::filesystem::canonical(tests_path / "meson_old_test_files");
{ {
Meson meson(meson_test_files_path / "a_subdir"); Meson meson(meson_test_files_path / "a_subdir");
g_assert(meson.project_path == meson_test_files_path); g_assert(meson.project_path == meson_test_files_path);
@ -31,4 +33,38 @@ int main() {
build = Project::Build::create(meson_test_files_path / "a_subdir"); build = Project::Build::create(meson_test_files_path / "a_subdir");
g_assert(dynamic_cast<Project::MesonBuild *>(build.get())); g_assert(dynamic_cast<Project::MesonBuild *>(build.get()));
}
// Test new meson versions
{
auto meson_test_files_path = boost::filesystem::canonical(tests_path / "meson_test_files");
/// Paths in meson-info are absolute, and this path is used in intro-targets.json
auto virtual_test_files_path = boost::filesystem::path("/") / "home" / "test" / "meson_test_files";
{
Meson meson(meson_test_files_path / "a_subdir");
g_assert(meson.project_path == meson_test_files_path);
}
{
Meson meson(meson_test_files_path);
g_assert(meson.project_path == meson_test_files_path);
g_assert(meson.get_executable(meson_test_files_path / "build", virtual_test_files_path / "main.cpp") == virtual_test_files_path / "build" / "hello");
g_assert(meson.get_executable(meson_test_files_path / "build", virtual_test_files_path / "another_file.cpp") == virtual_test_files_path / "build" / "another_executable");
g_assert(meson.get_executable(meson_test_files_path / "build", virtual_test_files_path / "a_subdir" / "main.cpp") == virtual_test_files_path / "build" / "a_subdir" / "hello2");
g_assert(meson.get_executable(meson_test_files_path / "build", virtual_test_files_path / "non_existing_file.cpp") == virtual_test_files_path / "build" / "hello");
g_assert(meson.get_executable(meson_test_files_path / "build", virtual_test_files_path) == virtual_test_files_path / "build" / "hello");
g_assert(meson.get_executable(meson_test_files_path / "build", virtual_test_files_path / "a_subdir") == virtual_test_files_path / "build" / "a_subdir" / "hello2");
g_assert(meson.get_executable(meson_test_files_path / "build", virtual_test_files_path / "a_subdir" / "non_existing_file.cpp") == virtual_test_files_path / "build" / "a_subdir" / "hello2");
}
auto build = Project::Build::create(meson_test_files_path);
g_assert(dynamic_cast<Project::MesonBuild *>(build.get()));
build = Project::Build::create(meson_test_files_path / "a_subdir");
g_assert(dynamic_cast<Project::MesonBuild *>(build.get()));
}
} }

5
tests/meson_old_test_files/a_subdir/main.cpp

@ -0,0 +1,5 @@
#include <iostream>
int main() {
std::cout << "Hello World\n";
}

1
tests/meson_old_test_files/a_subdir/meson.build

@ -0,0 +1 @@
executable('hello2', 'main.cpp', cpp_args: compiler_args)

5
tests/meson_old_test_files/another_file.cpp

@ -0,0 +1,5 @@
#include <iostream>
int main() {
std::cout << "Hello World\n";
}

27
tests/meson_old_test_files/build/compile_commands.json

@ -0,0 +1,27 @@
[
{
"directory": "jucipp/tests/meson_old_test_files/build",
"command": "c++ '-Ihello_lib@sta' '-I..' '-I.' '-Wall' '-Winvalid-pch' '-Wnon-virtual-dtor' '-std=c++11' '-Wall' '-Wextra' '-O0' '-g' '-MMD' '-MQ' 'hello_lib@sta/main.cpp.o' '-MF' 'hello_lib@sta/main.cpp.o.d' -o 'hello_lib@sta/main.cpp.o' -c ../main.cpp",
"file": "../main.cpp"
},
{
"directory": "jucipp/tests/meson_old_test_files/build",
"command": "c++ '-Ihello@exe' '-I..' '-I.' '-Wall' '-Winvalid-pch' '-Wnon-virtual-dtor' '-std=c++11' '-Wall' '-Wextra' '-O0' '-g' '-MMD' '-MQ' 'hello@exe/main.cpp.o' '-MF' 'hello@exe/main.cpp.o.d' -o 'hello@exe/main.cpp.o' -c ../main.cpp",
"file": "../main.cpp"
},
{
"directory": "jucipp/tests/meson_old_test_files/build",
"command": "c++ '-Ia_subdir/hello2@exe' '-I../a_subdir' '-Ia_subdir' '-Wall' '-Winvalid-pch' '-Wnon-virtual-dtor' '-std=c++11' '-Wall' '-Wextra' '-O0' '-g' '-MMD' '-MQ' 'a_subdir/hello2@exe/main.cpp.o' '-MF' 'a_subdir/hello2@exe/main.cpp.o.d' -o 'a_subdir/hello2@exe/main.cpp.o' -c ../a_subdir/main.cpp",
"file": "../a_subdir/main.cpp"
},
{
"directory": "jucipp/tests/meson_old_test_files/build",
"command": "c++ '-Ianother_executable@exe' '-I..' '-I.' '-Wall' '-Winvalid-pch' '-Wnon-virtual-dtor' '-std=c++11' '-Wall' '-Wextra' '-O0' '-g' '-MMD' '-MQ' 'another_executable@exe/another_file.cpp.o' '-MF' 'another_executable@exe/another_file.cpp.o.d' -o 'another_executable@exe/another_file.cpp.o' -c ../another_file.cpp",
"file": "../another_file.cpp"
},
{
"directory": "jucipp/tests/meson_old_test_files/build",
"command": "'te\\'s\"t' te\\ st test te\\\\st te\\\\\\\\st",
"file": "../parse_test.cpp"
}
]

5
tests/meson_old_test_files/main.cpp

@ -0,0 +1,5 @@
#include <iostream>
int main() {
std::cout << "Hello World\n";
}

11
tests/meson_old_test_files/meson.build

@ -0,0 +1,11 @@
project('hello.world', 'cpp')
compiler_args = ['-std=c++11', '-Wall', '-Wextra']
static_library('hello_lib', 'main.cpp', cpp_args: compiler_args)
executable('hello', 'main.cpp', cpp_args: compiler_args)
executable('another_executable', 'another_file.cpp', cpp_args: compiler_args)
subdir('a_subdir')

33
tests/meson_test_files/build/compile_commands.json

@ -1,27 +1,26 @@
[ [
{ {
"directory": "jucipp/tests/meson_test_files/build", "directory": "/home/test/meson_test_files/build",
"command": "c++ '-Ihello_lib@sta' '-I..' '-I.' '-Wall' '-Winvalid-pch' '-Wnon-virtual-dtor' '-std=c++11' '-Wall' '-Wextra' '-O0' '-g' '-MMD' '-MQ' 'hello_lib@sta/main.cpp.o' '-MF' 'hello_lib@sta/main.cpp.o.d' -o 'hello_lib@sta/main.cpp.o' -c ../main.cpp", "command": "c++ -Ilibhello_lib.a.p -I. -I.. -Xclang -fcolor-diagnostics -pipe -std=c++11 -Wall -Wextra -MD -MQ libhello_lib.a.p/main.cpp.o -MF libhello_lib.a.p/main.cpp.o.d -o libhello_lib.a.p/main.cpp.o -c ../main.cpp",
"file": "../main.cpp" "file": "../main.cpp",
"output": "libhello_lib.a.p/main.cpp.o"
}, },
{ {
"directory": "jucipp/tests/meson_test_files/build", "directory": "/home/test/meson_test_files/build",
"command": "c++ '-Ihello@exe' '-I..' '-I.' '-Wall' '-Winvalid-pch' '-Wnon-virtual-dtor' '-std=c++11' '-Wall' '-Wextra' '-O0' '-g' '-MMD' '-MQ' 'hello@exe/main.cpp.o' '-MF' 'hello@exe/main.cpp.o.d' -o 'hello@exe/main.cpp.o' -c ../main.cpp", "command": "c++ -Ihello.p -I. -I.. -Xclang -fcolor-diagnostics -pipe -std=c++11 -Wall -Wextra -MD -MQ hello.p/main.cpp.o -MF hello.p/main.cpp.o.d -o hello.p/main.cpp.o -c ../main.cpp",
"file": "../main.cpp" "file": "../main.cpp",
"output": "hello.p/main.cpp.o"
}, },
{ {
"directory": "jucipp/tests/meson_test_files/build", "directory": "/home/test/meson_test_files/build",
"command": "c++ '-Ia_subdir/hello2@exe' '-I../a_subdir' '-Ia_subdir' '-Wall' '-Winvalid-pch' '-Wnon-virtual-dtor' '-std=c++11' '-Wall' '-Wextra' '-O0' '-g' '-MMD' '-MQ' 'a_subdir/hello2@exe/main.cpp.o' '-MF' 'a_subdir/hello2@exe/main.cpp.o.d' -o 'a_subdir/hello2@exe/main.cpp.o' -c ../a_subdir/main.cpp", "command": "c++ -Ianother_executable.p -I. -I.. -Xclang -fcolor-diagnostics -pipe -std=c++11 -Wall -Wextra -MD -MQ another_executable.p/another_file.cpp.o -MF another_executable.p/another_file.cpp.o.d -o another_executable.p/another_file.cpp.o -c ../another_file.cpp",
"file": "../a_subdir/main.cpp" "file": "../another_file.cpp",
"output": "another_executable.p/another_file.cpp.o"
}, },
{ {
"directory": "jucipp/tests/meson_test_files/build", "directory": "/home/test/meson_test_files/build",
"command": "c++ '-Ianother_executable@exe' '-I..' '-I.' '-Wall' '-Winvalid-pch' '-Wnon-virtual-dtor' '-std=c++11' '-Wall' '-Wextra' '-O0' '-g' '-MMD' '-MQ' 'another_executable@exe/another_file.cpp.o' '-MF' 'another_executable@exe/another_file.cpp.o.d' -o 'another_executable@exe/another_file.cpp.o' -c ../another_file.cpp", "command": "c++ -Ia_subdir/hello2.p -Ia_subdir -I../a_subdir -Xclang -fcolor-diagnostics -pipe -std=c++11 -Wall -Wextra -MD -MQ a_subdir/hello2.p/main.cpp.o -MF a_subdir/hello2.p/main.cpp.o.d -o a_subdir/hello2.p/main.cpp.o -c ../a_subdir/main.cpp",
"file": "../another_file.cpp" "file": "../a_subdir/main.cpp",
}, "output": "a_subdir/hello2.p/main.cpp.o"
{
"directory": "jucipp/tests/meson_test_files/build",
"command": "'te\\'s\"t' te\\ st test te\\\\st te\\\\\\\\st",
"file": "../parse_test.cpp"
} }
] ]

1
tests/meson_test_files/build/meson-info/intro-targets.json

@ -0,0 +1 @@
[{"name": "hello_lib", "id": "hello_lib@sta", "type": "static library", "defined_in": "/home/test/meson_test_files/meson.build", "filename": ["/home/test/meson_test_files/build/libhello_lib.a"], "build_by_default": true, "target_sources": [{"language": "cpp", "compiler": ["c++"], "parameters": ["-I/home/test/meson_test_files/build/libhello_lib.a.p", "-I/home/test/meson_test_files/build", "-I/home/test/meson_test_files", "-Xclang", "-fcolor-diagnostics", "-pipe", "-std=c++11", "-Wall", "-Wextra"], "sources": ["/home/test/meson_test_files/main.cpp"], "generated_sources": []}], "subproject": null, "installed": false}, {"name": "hello", "id": "hello@exe", "type": "executable", "defined_in": "/home/test/meson_test_files/meson.build", "filename": ["/home/test/meson_test_files/build/hello"], "build_by_default": true, "target_sources": [{"language": "cpp", "compiler": ["c++"], "parameters": ["-I/home/test/meson_test_files/build/hello.p", "-I/home/test/meson_test_files/build", "-I/home/test/meson_test_files", "-Xclang", "-fcolor-diagnostics", "-pipe", "-std=c++11", "-Wall", "-Wextra"], "sources": ["/home/test/meson_test_files/main.cpp"], "generated_sources": []}], "subproject": null, "installed": false}, {"name": "another_executable", "id": "another_executable@exe", "type": "executable", "defined_in": "/home/test/meson_test_files/meson.build", "filename": ["/home/test/meson_test_files/build/another_executable"], "build_by_default": true, "target_sources": [{"language": "cpp", "compiler": ["c++"], "parameters": ["-I/home/test/meson_test_files/build/another_executable.p", "-I/home/test/meson_test_files/build", "-I/home/test/meson_test_files", "-Xclang", "-fcolor-diagnostics", "-pipe", "-std=c++11", "-Wall", "-Wextra"], "sources": ["/home/test/meson_test_files/another_file.cpp"], "generated_sources": []}], "subproject": null, "installed": false}, {"name": "hello2", "id": "f94d950@@hello2@exe", "type": "executable", "defined_in": "/home/test/meson_test_files/a_subdir/meson.build", "filename": ["/home/test/meson_test_files/build/a_subdir/hello2"], "build_by_default": true, "target_sources": [{"language": "cpp", "compiler": ["c++"], "parameters": ["-I/home/test/meson_test_files/build/a_subdir/hello2.p", "-I/home/test/meson_test_files/build/a_subdir", "-I/home/test/meson_test_files/a_subdir", "-Xclang", "-fcolor-diagnostics", "-pipe", "-std=c++11", "-Wall", "-Wextra"], "sources": ["/home/test/meson_test_files/a_subdir/main.cpp"], "generated_sources": []}], "subproject": null, "installed": false}]
Loading…
Cancel
Save