From 18f414c15c19edef07e0321e7f2df39990094cef Mon Sep 17 00:00:00 2001 From: cxl Date: Thu, 9 Jan 2020 11:55:29 +0000 Subject: [PATCH] ide: pkg_config support in makefile export git-svn-id: svn://ultimatepp.org/upp/trunk@13843 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/ide/Builders/Build.cpp | 33 +++++++++++++++++++++++--------- uppsrc/ide/Builders/Build.h | 1 + uppsrc/ide/Builders/MakeFile.cpp | 2 +- uppsrc/ide/Core/Core.h | 2 +- uppsrc/ide/Core/Hdepend.cpp | 16 ++++++++++------ 5 files changed, 37 insertions(+), 17 deletions(-) diff --git a/uppsrc/ide/Builders/Build.cpp b/uppsrc/ide/Builders/Build.cpp index d9af0ee7b..122c70884 100644 --- a/uppsrc/ide/Builders/Build.cpp +++ b/uppsrc/ide/Builders/Build.cpp @@ -284,6 +284,13 @@ struct OneFileHost : Host { } }; +void MakeBuild::PkgConfig(const Workspace& wspc, const Index& config, Index& pkg_config) +{ + for(int i = 0; i < wspc.GetCount(); i++) + for(String h : Split(Gather(wspc.GetPackage(i).pkg_config, config.GetKeys()), ' ')) + pkg_config.FindAdd(h); +} + bool MakeBuild::BuildPackage(const Workspace& wspc, int pkindex, int pknumber, int pkcount, String mainparam, String outfile, Vector& linkfile, Vector& immfile, String& linkopt, bool link) @@ -308,9 +315,7 @@ bool MakeBuild::BuildPackage(const Workspace& wspc, int pkindex, int pknumber, i if(!b) return false; b->config = PackageConfig(wspc, pkindex, bm, mainparam, *host, *b); - for(int i = 0; i < wspc.GetCount(); i++) - for(String h : Split(Gather(wspc.GetPackage(i).pkg_config, b->config.GetKeys()), ' ')) - b->pkg_config.FindAdd(h); + PkgConfig(wspc, b->config, b->pkg_config); const TargetMode& m = targetmode == 0 ? debug : release; b->version = m.version; b->method = method; @@ -634,11 +639,14 @@ void MakeBuild::SaveMakeFile(const String& fn, bool exporting) Workspace wspc; wspc.Scan(GetMain(), allconfig.GetKeys()); - for(int i = 1; i < wspc.GetCount(); i++) { + Index pkg_config; + for(int i = 0; i < wspc.GetCount(); i++) { Index modconfig = PackageConfig(wspc, i, bm, mainconfigparam, *host, *b); - for(int a = allconfig.GetCount(); --a >= 0;) - if(modconfig.Find(allconfig[a]) < 0) - allconfig.Remove(a); + PkgConfig(wspc, modconfig, pkg_config); + if(i) + for(int a = allconfig.GetCount(); --a >= 0;) + if(modconfig.Find(allconfig[a]) < 0) + allconfig.Remove(a); } if(!exporting) @@ -649,10 +657,14 @@ void MakeBuild::SaveMakeFile(const String& fn, bool exporting) } else inclist << "-I./"; + + for(String s : pkg_config) + inclist << " `pkg-config --cflags " << s << "`"; + Vector includes = SplitDirs(bm.Get("INCLUDE","")); for(int i = 0; i < includes.GetCount(); i++) inclist << " -I" << includes[i]; - + makefile << "\n" "UPPOUT = " << (exporting ? "_out/" : GetMakePath(AdjustMakePath(host->GetHostPath(AppendFileName(uppout, ""))), win32)) << "\n" "CINC = " << inclist << "\n" @@ -664,6 +676,9 @@ void MakeBuild::SaveMakeFile(const String& fn, bool exporting) String output, config, install, rules, linkdep, linkfiles, linkfileend; + for(String s : pkg_config) + linkfileend << " \\\n\t\t\t`pkg-config --libs " << s << "`"; + for(int i = 0; i < wspc.GetCount(); i++) { b->config = PackageConfig(wspc, i, bm, mainconfigparam, *host, *b); b->version = tm.version; @@ -720,7 +735,7 @@ void MakeBuild::SaveMakeFile(const String& fn, bool exporting) linkfiles << mf.linkfiles; linkfileend << mf.linkfileend; } - + makefile << config << install diff --git a/uppsrc/ide/Builders/Build.h b/uppsrc/ide/Builders/Build.h index 872052fa9..1fb880090 100644 --- a/uppsrc/ide/Builders/Build.h +++ b/uppsrc/ide/Builders/Build.h @@ -73,6 +73,7 @@ public: One CreateBuilder(Host *host); String OutDir(const Index& cfg, const String& package, const VectorMap& bm, bool use_target = false); + void PkgConfig(const Workspace& wspc, const Index& config, Index& pkg_config); bool BuildPackage(const Workspace& wspc, int pkindex, int pknumber, int pkcount, String mainparam, String outfile, Vector& linkfile, Vector& immfile, String& linkopt, bool link = false); diff --git a/uppsrc/ide/Builders/MakeFile.cpp b/uppsrc/ide/Builders/MakeFile.cpp index 252b2ef15..094a25385 100644 --- a/uppsrc/ide/Builders/MakeFile.cpp +++ b/uppsrc/ide/Builders/MakeFile.cpp @@ -172,7 +172,7 @@ void CppBuilder::AddMakeFile(MakeFile& makefile, String package, outfile << makefile.outdir << AdjustMakePath(GetFileTitle(fn)) << (isrc ? "_rc" : "") << objext; String srcfile = GetMakePath(MakeSourcePath(src, fn, false, exporting)); makefile.rules << outfile << ": " << srcfile; - Vector dep = HdependGetDependencies(fn); + Vector dep = HdependGetDependencies(fn, false); Sort(dep, GetLanguageInfo()); for(int d = 0; d < dep.GetCount(); d++) { String dfn = MakeSourcePath(src, dep[d], true, exporting); diff --git a/uppsrc/ide/Core/Core.h b/uppsrc/ide/Core/Core.h index 8efb78b27..f3c135a10 100644 --- a/uppsrc/ide/Core/Core.h +++ b/uppsrc/ide/Core/Core.h @@ -496,7 +496,7 @@ void HdependTimeDirty(); void HdependClearDependencies(); void HdependAddDependency(const String& file, const String& depends); Time HdependFileTime(const String& path); -Vector HdependGetDependencies(const String& path); +Vector HdependGetDependencies(const String& file, bool bydefine_too = true); String FindIncludeFile(const char *s, const String& filedir); bool HdependBlitzApproved(const String& path); const Vector& HdependGetDefines(const String& path); diff --git a/uppsrc/ide/Core/Hdepend.cpp b/uppsrc/ide/Core/Hdepend.cpp index 1c6ca43f0..bac7fd861 100644 --- a/uppsrc/ide/Core/Hdepend.cpp +++ b/uppsrc/ide/Core/Hdepend.cpp @@ -75,7 +75,7 @@ public: bool BlitzApproved(const String& path); String FindIncludeFile(const char *s, const String& filedir) { return ::FindIncludeFile(s, filedir, incdir); } const Vector& GetDefines(const String& path); - Vector GetDependencies(const String& path); + Vector GetDependencies(const String& path, bool bydefine_too = true); const Vector& GetAllFiles() { return map.GetKeys(); } }; @@ -358,14 +358,18 @@ Time Hdepend::FileTime(int ii) return time; } -Vector Hdepend::GetDependencies(const String& path) +Vector Hdepend::GetDependencies(const String& path, bool bydefine_too) { ClearFlag(); Index out; out.Add(File(path)); for(int i = 0; i < out.GetCount(); i++) - if(out[i] >= 0) - FindAppend(out, map[out[i]].depend); + if(out[i] >= 0) { + Info& f = map[out[i]]; + for(int i = 0; i < f.depend.GetCount(); i++) + if(bydefine_too || !f.bydefine[i]) + out.FindAdd(f.depend[i]); + } Vector outnames; for(int i = 1; i < out.GetCount(); i++) if(out[i] >= 0) @@ -477,9 +481,9 @@ const Vector& HdependGetDefines(const String& path) return Single().GetDefines(path); } -Vector HdependGetDependencies(const String& file) +Vector HdependGetDependencies(const String& file, bool bydefine_too) { - return Single().GetDependencies(file); + return Single().GetDependencies(file, bydefine_too); } void HdependClearDependencies()