From cf160bdab6595e9888f23bf9df0cf03613068240 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Fri, 5 Jan 2018 05:27:17 +0100 Subject: Get cflags from pkg config dependency --- backend/ninja/Ninja.cpp | 29 ++++++++++++++++++++--------- backend/ninja/Ninja.hpp | 2 +- 2 files changed, 21 insertions(+), 10 deletions(-) (limited to 'backend') diff --git a/backend/ninja/Ninja.cpp b/backend/ninja/Ninja.cpp index 1990926..50cd577 100644 --- a/backend/ninja/Ninja.cpp +++ b/backend/ninja/Ninja.cpp @@ -238,7 +238,7 @@ namespace backend // TODO: First check if pkg-config is installed. If it's not, only check dependencies that exists in the dependencies sub directory. // If pkg-config is installed and dependency is not installed, check in dependencies sub directory. - Result Ninja::getLinkerFlags(const SibsConfig &config, LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, LinkerFlagCallbackFunc dynamicLinkerFlagCallback, GlobalIncludeDirCallbackFunc globalIncludeDirCallback) const + Result Ninja::getLinkerFlags(const SibsConfig &config, LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, LinkerFlagCallbackFunc dynamicLinkerFlagCallback, GlobalIncludeDirCallbackFunc globalIncludeDirCallback, CflagsCallbackFunc cflagsCallbackFunc) const { const vector &dependencies = config.getDependencies(); if(dependencies.empty()) return Result::Ok(true); @@ -268,10 +268,10 @@ namespace backend } } - Result pkgConfigLinkerFlagsResult = PkgConfig::getDynamicLibsLinkerFlags(pkgConfigDependencies); - if (pkgConfigLinkerFlagsResult.isErr()) + Result pkgConfigFlagsResult = PkgConfig::getDynamicLibsFlags(pkgConfigDependencies); + if (!pkgConfigFlagsResult) { - printf("%s, using global lib...\n", pkgConfigLinkerFlagsResult.getErrMsg().c_str()); + printf("%s, using global lib...\n", pkgConfigFlagsResult.getErrMsg().c_str()); globalLibDependencies.reserve(globalLibDependencies.size() + pkgConfigDependencies.size()); for (const Dependency &pkgConfigDependency : pkgConfigDependencies) { @@ -281,8 +281,11 @@ namespace backend } else { - if (!pkgConfigLinkerFlagsResult.unwrap().empty()) - dynamicLinkerFlagCallback(pkgConfigLinkerFlagsResult.unwrap()); + const PkgConfigFlags &pkgConfigFlag = pkgConfigFlagsResult.unwrap(); + if (!pkgConfigFlag.linkerFlags.empty()) + dynamicLinkerFlagCallback(pkgConfigFlag.linkerFlags); + if(!pkgConfigFlag.cflags.empty()) + cflagsCallbackFunc(pkgConfigFlag.cflags); } #else for (const Dependency &dependency : dependencies) @@ -381,8 +384,15 @@ namespace backend allLinkerFlags += " "; allLinkerFlags += linkerFlag; }; + + string cflags; + auto cflagsCallbackFunc = [&cflags](const string &dependencyCflags) + { + cflags += " "; + cflags += dependencyCflags; + }; - Result linkerFlags = getLinkerFlags(config, staticLinkerFlagCallbackFunc, dynamicLinkerFlagCallback, globalIncludeDirCallback); + Result linkerFlags = getLinkerFlags(config, staticLinkerFlagCallbackFunc, dynamicLinkerFlagCallback, globalIncludeDirCallback, cflagsCallbackFunc); if (linkerFlags.isErr()) return Result::Err(linkerFlags.getErrMsg()); @@ -587,14 +597,15 @@ namespace backend case Compiler::GCC: { // -Werror - result += " '-I" + config.getPackageName() + "@exe' '-I..' -Wall -Wextra -Werror=return-type -fexceptions -fdiagnostics-show-option '-fdiagnostics-color=always' '-pipe' '-D_FILE_OFFSET_BITS=64' '-Winvalid-pch' '-Wnon-virtual-dtor' " + optimizationFlags + " '-g'"; + result += " '-I" + config.getPackageName() + "@exe' " + cflags + " '-I..' -Wall -Wextra -Werror=return-type -fexceptions -fdiagnostics-show-option '-fdiagnostics-color=always' '-pipe' '-D_FILE_OFFSET_BITS=64' '-Winvalid-pch' '-Wnon-virtual-dtor' " + optimizationFlags + " '-g'"; break; } case Compiler::MSVC: { result += " "; result += optimizationFlags; - result += " /EHsc"; + result += " /EHsc "; + result += cflags; switch (config.getOptimizationLevel()) { case OPT_LEV_DEBUG: diff --git a/backend/ninja/Ninja.hpp b/backend/ninja/Ninja.hpp index eeea1be..fc6842f 100644 --- a/backend/ninja/Ninja.hpp +++ b/backend/ninja/Ninja.hpp @@ -34,7 +34,7 @@ namespace backend bool containsSourceFile(const std::string &filepath) const; bool containsTestSourceDir(const std::string &dir) const; bool containsDependency(const std::string &dependency) const; - sibs::Result getLinkerFlags(const sibs::SibsConfig &config, sibs::LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, sibs::LinkerFlagCallbackFunc dynamicLinkerFlagCallback, sibs::GlobalIncludeDirCallbackFunc globalIncludeDirCallback) const; + sibs::Result getLinkerFlags(const sibs::SibsConfig &config, sibs::LinkerFlagCallbackFunc staticLinkerFlagCallbackFunc, sibs::LinkerFlagCallbackFunc dynamicLinkerFlagCallback, sibs::GlobalIncludeDirCallbackFunc globalIncludeDirCallback, sibs::CflagsCallbackFunc cflagsCallbackFunc) const; sibs::Result compile(const _tinydir_char_t *buildFilePath); private: std::vector sourceFiles; -- cgit v1.2.3