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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringArray getExtraPkgConfigPackages() const
|
std::vector<PackageDependency> getExtraPkgConfigPackages() const
|
||||||
{
|
{
|
||||||
auto packages = StringArray::fromTokens (extraPkgConfigValue.get().toString(), " ", "\"'");
|
auto packages = StringArray::fromTokens (extraPkgConfigValue.get().toString(), " ", "\"'");
|
||||||
packages.removeEmptyStrings();
|
packages.removeEmptyStrings();
|
||||||
|
|
||||||
return packages;
|
return makePackageDependencies (packages);
|
||||||
}
|
}
|
||||||
|
|
||||||
StringArray getCompilePackages() const
|
std::vector<PackageDependency> getCompilePackages() const
|
||||||
{
|
{
|
||||||
auto packages = getLinuxPackages (PackageDependencyType::compile);
|
auto packages = getLinuxPackages (PackageDependencyType::compile);
|
||||||
packages.addArray (getExtraPkgConfigPackages());
|
const auto extra = getExtraPkgConfigPackages();
|
||||||
|
packages.insert (packages.end(), extra.begin(), extra.end());
|
||||||
|
|
||||||
return packages;
|
return packages;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringArray getLinkPackages() const
|
std::vector<PackageDependency> getLinkPackages() const
|
||||||
{
|
{
|
||||||
auto packages = getLinuxPackages (PackageDependencyType::link);
|
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;
|
return packages;
|
||||||
}
|
}
|
||||||
|
|
||||||
String getPreprocessorPkgConfigFlags() const
|
String getPreprocessorPkgConfigFlags() const
|
||||||
{
|
{
|
||||||
auto compilePackages = getCompilePackages();
|
auto compilePackages = getPackagesCommand (getCompilePackages());
|
||||||
|
|
||||||
if (compilePackages.size() > 0)
|
if (compilePackages.size() > 0)
|
||||||
return "$(shell $(PKG_CONFIG) --cflags " + compilePackages.joinIntoString (" ") + ")";
|
return "$(shell $(PKG_CONFIG) --cflags " + compilePackages.joinIntoString (" ") + ")";
|
||||||
|
|
@ -660,7 +683,7 @@ private:
|
||||||
|
|
||||||
String getLinkerPkgConfigFlags() const
|
String getLinkerPkgConfigFlags() const
|
||||||
{
|
{
|
||||||
auto linkPackages = getLinkPackages();
|
auto linkPackages = getPackagesCommand (getLinkPackages());
|
||||||
|
|
||||||
if (linkPackages.size() > 0)
|
if (linkPackages.size() > 0)
|
||||||
return "$(shell $(PKG_CONFIG) --libs " + linkPackages.joinIntoString (" ") + ")";
|
return "$(shell $(PKG_CONFIG) --libs " + linkPackages.joinIntoString (" ") + ")";
|
||||||
|
|
@ -1240,7 +1263,7 @@ private:
|
||||||
|
|
||||||
out << getPhonyTargetLine() << newLine << newLine;
|
out << getPhonyTargetLine() << newLine << newLine;
|
||||||
|
|
||||||
writeTargetLines (out, getLinkPackages());
|
writeTargetLines (out, getPackagesCommand (getLinkPackages()));
|
||||||
|
|
||||||
for (auto target : targets)
|
for (auto target : targets)
|
||||||
target->addFiles (out, getFilesForTarget (filesToCompile, target, project));
|
target->addFiles (out, getFilesForTarget (filesToCompile, target, project));
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,17 @@ static auto createIcon (const void* iconData, size_t iconDataSize)
|
||||||
return image;
|
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>
|
template <typename Exporter>
|
||||||
static ProjectExporter::ExporterTypeInfo createExporterTypeInfo (const void* iconData, size_t iconDataSize)
|
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));
|
&& 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;
|
auto packages = linuxPackages;
|
||||||
|
std::vector<PackageDependency> dependencies;
|
||||||
|
|
||||||
// don't add libcurl if curl symbols are loaded at runtime
|
// don't add libcurl if curl symbols are loaded at runtime
|
||||||
if (isCurlEnabled (project) && ! isLoadCurlSymbolsLazilyEnabled (project))
|
if (isCurlEnabled (project) && ! isLoadCurlSymbolsLazilyEnabled (project))
|
||||||
|
|
@ -597,14 +609,17 @@ StringArray ProjectExporter::getLinuxPackages (PackageDependencyType type) const
|
||||||
|
|
||||||
if (isWebBrowserComponentEnabled (project) && type == PackageDependencyType::compile)
|
if (isWebBrowserComponentEnabled (project) && type == PackageDependencyType::compile)
|
||||||
{
|
{
|
||||||
packages.add ("webkit2gtk-4.0");
|
|
||||||
packages.add ("gtk+-x11-3.0");
|
packages.add ("gtk+-x11-3.0");
|
||||||
|
dependencies.push_back (PackageDependency { "webkit2gtk-4.1", "webkit2gtk-4.0" });
|
||||||
}
|
}
|
||||||
|
|
||||||
packages.removeEmptyStrings();
|
packages.removeEmptyStrings();
|
||||||
packages.removeDuplicates (false);
|
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,
|
void ProjectExporter::addProjectPathToBuildPathList (StringArray& pathList,
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,26 @@ private:
|
||||||
ProjectExporter& owner;
|
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
|
class ProjectExporter : private Value::Listener
|
||||||
{
|
{
|
||||||
|
|
@ -262,7 +282,7 @@ public:
|
||||||
link
|
link
|
||||||
};
|
};
|
||||||
|
|
||||||
StringArray getLinuxPackages (PackageDependencyType type) const;
|
std::vector<PackageDependency> getLinuxPackages (PackageDependencyType type) const;
|
||||||
|
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
StringPairArray msvcExtraPreprocessorDefs;
|
StringPairArray msvcExtraPreprocessorDefs;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue