mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-09 23:34:20 +00:00
Projucer: Add support for Windows MIDI Services nuget package
This commit is contained in:
parent
2c057f1dee
commit
c93f999f13
2 changed files with 91 additions and 30 deletions
|
|
@ -925,6 +925,15 @@ public:
|
|||
imports->setAttribute ("Project", "$(VCTargetsPath)\\Microsoft.Cpp.Default.props");
|
||||
}
|
||||
|
||||
if (owner.shouldAddMidiPackage())
|
||||
{
|
||||
const auto path = "packages\\" + cppwinrtPackage.name + "." + cppwinrtPackage.version + "\\build\\native\\Microsoft.Windows.CppWinRT.props";
|
||||
|
||||
auto* imports = projectXml.createNewChildElement ("Import");
|
||||
imports->setAttribute ("Project", path);
|
||||
imports->setAttribute ("Condition", "Exists('" + path + "')");
|
||||
}
|
||||
|
||||
for (ConstConfigIterator i (owner); i.next();)
|
||||
{
|
||||
auto& config = *static_cast<const MSVCBuildConfiguration*> (&*i);
|
||||
|
|
@ -1298,31 +1307,45 @@ public:
|
|||
e->setAttribute ("Include", prependDot (getOwner().rcFile.getFileName()));
|
||||
}
|
||||
|
||||
if (owner.shouldAddMidiPackage())
|
||||
{
|
||||
auto* group = projectXml.createNewChildElement ("ItemGroup");
|
||||
auto* reference = group->createNewChildElement ("Reference");
|
||||
reference->setAttribute ("Include", midiPackage.name);
|
||||
|
||||
auto* hintPath = reference->createNewChildElement ("HintPath");
|
||||
hintPath->addTextElement ("packages\\" + midiPackage.name + "." + midiPackage.version + "\\ref\\native\\" + midiPackage.name + ".winmd");
|
||||
|
||||
auto* isWinmd = reference->createNewChildElement ("IsWinMDFile");
|
||||
isWinmd->addTextElement ("true");
|
||||
}
|
||||
|
||||
{
|
||||
auto* e = projectXml.createNewChildElement ("Import");
|
||||
e->setAttribute ("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets");
|
||||
}
|
||||
|
||||
std::vector<NuGetPackage> packagesToInclude;
|
||||
owner.getPackagesToInclude (packagesToInclude);
|
||||
|
||||
for (const auto& package : packagesToInclude)
|
||||
{
|
||||
if (owner.shouldAddWebView2Package())
|
||||
{
|
||||
auto* importGroup = projectXml.createNewChildElement ("ImportGroup");
|
||||
importGroup->setAttribute ("Label", "ExtensionTargets");
|
||||
auto* importGroup = projectXml.createNewChildElement ("ImportGroup");
|
||||
importGroup->setAttribute ("Label", "ExtensionTargets");
|
||||
|
||||
auto packageTargetsPath = "packages\\" + getWebView2PackageName() + "." + getWebView2PackageVersion()
|
||||
+ "\\build\\native\\" + getWebView2PackageName() + ".targets";
|
||||
const auto packageTargetsPath = "packages\\" + package.name + "." + package.version
|
||||
+ "\\build\\native\\" + package.name + ".targets";
|
||||
|
||||
auto* e = importGroup->createNewChildElement ("Import");
|
||||
e->setAttribute ("Project", packageTargetsPath);
|
||||
e->setAttribute ("Condition", "Exists('" + packageTargetsPath + "')");
|
||||
}
|
||||
auto* e = importGroup->createNewChildElement ("Import");
|
||||
e->setAttribute ("Project", packageTargetsPath);
|
||||
e->setAttribute ("Condition", "Exists('" + packageTargetsPath + "')");
|
||||
}
|
||||
|
||||
if (owner.shouldLinkWebView2Statically())
|
||||
{
|
||||
auto* propertyGroup = projectXml.createNewChildElement ("PropertyGroup");
|
||||
auto* loaderPref = propertyGroup->createNewChildElement ("WebView2LoaderPreference");
|
||||
loaderPref->addTextElement ("Static");
|
||||
}
|
||||
if (owner.shouldLinkWebView2Statically())
|
||||
{
|
||||
auto* propertyGroup = projectXml.createNewChildElement ("PropertyGroup");
|
||||
auto* loaderPref = propertyGroup->createNewChildElement ("WebView2LoaderPreference");
|
||||
loaderPref->addTextElement ("Static");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2661,27 +2684,64 @@ protected:
|
|||
&& project.isConfigFlagEnabled ("JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING", false);
|
||||
}
|
||||
|
||||
static String getWebView2PackageName() { return "Microsoft.Web.WebView2"; }
|
||||
static String getWebView2PackageVersion() { return "1.0.1901.177"; }
|
||||
bool shouldAddMidiPackage() const
|
||||
{
|
||||
return project.getEnabledModules().isModuleEnabled ("juce_audio_devices")
|
||||
&& project.isConfigFlagEnabled ("JUCE_USE_WINDOWS_MIDI_SERVICES", false);
|
||||
}
|
||||
|
||||
struct NuGetPackage
|
||||
{
|
||||
String name;
|
||||
String version;
|
||||
bool targetFrameworkNative = false;
|
||||
};
|
||||
|
||||
inline static const NuGetPackage webviewPackage { "Microsoft.Web.WebView2", "1.0.1901.177", false };
|
||||
inline static const NuGetPackage cppwinrtPackage { "Microsoft.Windows.CppWinRT", "2.0.240405.15", true };
|
||||
inline static const NuGetPackage midiPackage { "Microsoft.Windows.Devices.Midi2", "1.0.3-preview-10.250204-1909", false };
|
||||
|
||||
void getPackagesToInclude (std::vector<NuGetPackage>& result) const
|
||||
{
|
||||
if (shouldAddWebView2Package())
|
||||
result.push_back (webviewPackage);
|
||||
|
||||
if (shouldAddMidiPackage())
|
||||
{
|
||||
result.push_back (cppwinrtPackage);
|
||||
result.push_back (midiPackage);
|
||||
}
|
||||
}
|
||||
|
||||
void createPackagesConfigFile() const
|
||||
{
|
||||
if (shouldAddWebView2Package())
|
||||
std::vector<NuGetPackage> packagesToInclude;
|
||||
getPackagesToInclude (packagesToInclude);
|
||||
|
||||
if (packagesToInclude.empty())
|
||||
return;
|
||||
|
||||
packagesConfigFile = getTargetFolder().getChildFile ("packages.config");
|
||||
|
||||
build_tools::writeStreamToFile (packagesConfigFile, [&packagesToInclude] (MemoryOutputStream& mo)
|
||||
{
|
||||
packagesConfigFile = getTargetFolder().getChildFile ("packages.config");
|
||||
mo.setNewLineString ("\r\n");
|
||||
|
||||
build_tools::writeStreamToFile (packagesConfigFile, [] (MemoryOutputStream& mo)
|
||||
mo << "<?xml version=\"1.0\" encoding=\"utf-8\"?>" << newLine
|
||||
<< "<packages>" << newLine;
|
||||
|
||||
for (const auto& p : packagesToInclude)
|
||||
{
|
||||
mo.setNewLineString ("\r\n");
|
||||
mo << " <package id=" << p.name.quoted() << " version=" << p.version.quoted();
|
||||
|
||||
mo << "<?xml version=\"1.0\" encoding=\"utf-8\"?>" << newLine
|
||||
<< "<packages>" << newLine
|
||||
<< "\t" << "<package id=" << getWebView2PackageName().quoted()
|
||||
<< " version=" << getWebView2PackageVersion().quoted()
|
||||
<< " />" << newLine
|
||||
<< "</packages>" << newLine;
|
||||
});
|
||||
}
|
||||
if (p.targetFrameworkNative)
|
||||
mo << " targetFramework=\"native\"";
|
||||
|
||||
mo << " />" << newLine;
|
||||
}
|
||||
|
||||
mo << "</packages>" << newLine;
|
||||
});
|
||||
}
|
||||
|
||||
static String prependDot (const String& filename)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue