mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Projucer: Fix package resolution on Linux
This commit is contained in:
parent
c057c0d55e
commit
47e71a4050
3 changed files with 71 additions and 13 deletions
|
|
@ -624,33 +624,56 @@ private:
|
|||
return result;
|
||||
}
|
||||
|
||||
StringArray getExtraPkgConfigPackages() const
|
||||
std::vector<PackageDependency> getExtraPkgConfigPackages() const
|
||||
{
|
||||
auto packages = StringArray::fromTokens (extraPkgConfigValue.get().toString(), " ", "\"'");
|
||||
packages.removeEmptyStrings();
|
||||
|
||||
return packages;
|
||||
return makePackageDependencies (packages);
|
||||
}
|
||||
|
||||
StringArray getCompilePackages() const
|
||||
std::vector<PackageDependency> getCompilePackages() const
|
||||
{
|
||||
auto packages = getLinuxPackages (PackageDependencyType::compile);
|
||||
packages.addArray (getExtraPkgConfigPackages());
|
||||
const auto extra = getExtraPkgConfigPackages();
|
||||
packages.insert (packages.end(), extra.begin(), extra.end());
|
||||
|
||||
return packages;
|
||||
}
|
||||
|
||||
StringArray getLinkPackages() const
|
||||
std::vector<PackageDependency> getLinkPackages() const
|
||||
{
|
||||
auto packages = getLinuxPackages (PackageDependencyType::link);
|
||||
packages.addArray (getExtraPkgConfigPackages());
|
||||
const auto extra = getExtraPkgConfigPackages();
|
||||
packages.insert (packages.end(), extra.begin(), extra.end());
|
||||
|
||||
return packages;
|
||||
}
|
||||
|
||||
static StringArray getPackagesCommand (const std::vector<PackageDependency>& dependencies)
|
||||
{
|
||||
StringArray packages;
|
||||
|
||||
for (const auto& d : dependencies)
|
||||
{
|
||||
if (d.fallback.has_value())
|
||||
{
|
||||
packages.add (String { "$(shell ($(PKG_CONFIG) --exists %VALUE% && echo %VALUE%) || echo %OR_ELSE%)" }
|
||||
.replace ("%VALUE%", d.dependency)
|
||||
.replace ("%OR_ELSE%", *d.fallback));
|
||||
}
|
||||
else
|
||||
{
|
||||
packages.add (d.dependency);
|
||||
}
|
||||
}
|
||||
|
||||
return packages;
|
||||
}
|
||||
|
||||
String getPreprocessorPkgConfigFlags() const
|
||||
{
|
||||
auto compilePackages = getCompilePackages();
|
||||
auto compilePackages = getPackagesCommand (getCompilePackages());
|
||||
|
||||
if (compilePackages.size() > 0)
|
||||
return "$(shell $(PKG_CONFIG) --cflags " + compilePackages.joinIntoString (" ") + ")";
|
||||
|
|
@ -660,7 +683,7 @@ private:
|
|||
|
||||
String getLinkerPkgConfigFlags() const
|
||||
{
|
||||
auto linkPackages = getLinkPackages();
|
||||
auto linkPackages = getPackagesCommand (getLinkPackages());
|
||||
|
||||
if (linkPackages.size() > 0)
|
||||
return "$(shell $(PKG_CONFIG) --libs " + linkPackages.joinIntoString (" ") + ")";
|
||||
|
|
@ -1240,7 +1263,7 @@ private:
|
|||
|
||||
out << getPhonyTargetLine() << newLine << newLine;
|
||||
|
||||
writeTargetLines (out, getLinkPackages());
|
||||
writeTargetLines (out, getPackagesCommand (getLinkPackages()));
|
||||
|
||||
for (auto target : targets)
|
||||
target->addFiles (out, getFilesForTarget (filesToCompile, target, project));
|
||||
|
|
|
|||
|
|
@ -55,6 +55,17 @@ static auto createIcon (const void* iconData, size_t iconDataSize)
|
|||
return image;
|
||||
}
|
||||
|
||||
std::vector<PackageDependency> makePackageDependencies (const StringArray& dependencies)
|
||||
{
|
||||
std::vector<PackageDependency> result;
|
||||
result.reserve ((size_t) dependencies.size());
|
||||
std::transform (dependencies.begin(),
|
||||
dependencies.end(),
|
||||
std::back_inserter (result),
|
||||
[] (auto& d) { return PackageDependency { d }; });
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename Exporter>
|
||||
static ProjectExporter::ExporterTypeInfo createExporterTypeInfo (const void* iconData, size_t iconDataSize)
|
||||
{
|
||||
|
|
@ -587,9 +598,10 @@ static bool isLoadCurlSymbolsLazilyEnabled (Project& project)
|
|||
&& project.isConfigFlagEnabled ("JUCE_LOAD_CURL_SYMBOLS_LAZILY", false));
|
||||
}
|
||||
|
||||
StringArray ProjectExporter::getLinuxPackages (PackageDependencyType type) const
|
||||
std::vector<PackageDependency> ProjectExporter::getLinuxPackages (PackageDependencyType type) const
|
||||
{
|
||||
auto packages = linuxPackages;
|
||||
std::vector<PackageDependency> dependencies;
|
||||
|
||||
// don't add libcurl if curl symbols are loaded at runtime
|
||||
if (isCurlEnabled (project) && ! isLoadCurlSymbolsLazilyEnabled (project))
|
||||
|
|
@ -597,14 +609,17 @@ StringArray ProjectExporter::getLinuxPackages (PackageDependencyType type) const
|
|||
|
||||
if (isWebBrowserComponentEnabled (project) && type == PackageDependencyType::compile)
|
||||
{
|
||||
packages.add ("webkit2gtk-4.0");
|
||||
packages.add ("gtk+-x11-3.0");
|
||||
dependencies.push_back (PackageDependency { "webkit2gtk-4.1", "webkit2gtk-4.0" });
|
||||
}
|
||||
|
||||
packages.removeEmptyStrings();
|
||||
packages.removeDuplicates (false);
|
||||
|
||||
return packages;
|
||||
const auto simpleDependencies = makePackageDependencies (packages);
|
||||
dependencies.insert (dependencies.end(), simpleDependencies.begin(), simpleDependencies.end());
|
||||
|
||||
return dependencies;
|
||||
}
|
||||
|
||||
void ProjectExporter::addProjectPathToBuildPathList (StringArray& pathList,
|
||||
|
|
|
|||
|
|
@ -72,6 +72,26 @@ private:
|
|||
ProjectExporter& owner;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
struct PackageDependency
|
||||
{
|
||||
explicit PackageDependency (StringRef dependencyIn)
|
||||
: dependency { dependencyIn }
|
||||
{
|
||||
}
|
||||
|
||||
PackageDependency (StringRef dependencyIn, StringRef fallbackIn)
|
||||
: dependency { dependencyIn },
|
||||
fallback { fallbackIn }
|
||||
{
|
||||
}
|
||||
|
||||
String dependency;
|
||||
std::optional<String> fallback;
|
||||
};
|
||||
|
||||
std::vector<PackageDependency> makePackageDependencies (const StringArray& dependencies);
|
||||
|
||||
//==============================================================================
|
||||
class ProjectExporter : private Value::Listener
|
||||
{
|
||||
|
|
@ -262,7 +282,7 @@ public:
|
|||
link
|
||||
};
|
||||
|
||||
StringArray getLinuxPackages (PackageDependencyType type) const;
|
||||
std::vector<PackageDependency> getLinuxPackages (PackageDependencyType type) const;
|
||||
|
||||
//==============================================================================
|
||||
StringPairArray msvcExtraPreprocessorDefs;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue