1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Projucer: Add support for Windows MIDI Services nuget package

This commit is contained in:
reuk 2025-03-05 17:54:22 +00:00
parent 2c057f1dee
commit c93f999f13
No known key found for this signature in database
2 changed files with 91 additions and 30 deletions

1
.gitignore vendored
View file

@ -35,6 +35,7 @@ profile
**/LinuxMakefile/build **/LinuxMakefile/build
**/VisualStudio[0-9]*/Win32 **/VisualStudio[0-9]*/Win32
**/VisualStudio[0-9]*/x64 **/VisualStudio[0-9]*/x64
**/VisualStudio[0-9]*/packages
**/Builds/x64 **/Builds/x64
**/.vs **/.vs
**/CodeBlocks/bin **/CodeBlocks/bin

View file

@ -925,6 +925,15 @@ public:
imports->setAttribute ("Project", "$(VCTargetsPath)\\Microsoft.Cpp.Default.props"); 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();) for (ConstConfigIterator i (owner); i.next();)
{ {
auto& config = *static_cast<const MSVCBuildConfiguration*> (&*i); auto& config = *static_cast<const MSVCBuildConfiguration*> (&*i);
@ -1298,19 +1307,34 @@ public:
e->setAttribute ("Include", prependDot (getOwner().rcFile.getFileName())); 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"); auto* e = projectXml.createNewChildElement ("Import");
e->setAttribute ("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets"); e->setAttribute ("Project", "$(VCTargetsPath)\\Microsoft.Cpp.targets");
} }
{ std::vector<NuGetPackage> packagesToInclude;
if (owner.shouldAddWebView2Package()) owner.getPackagesToInclude (packagesToInclude);
for (const auto& package : packagesToInclude)
{ {
auto* importGroup = projectXml.createNewChildElement ("ImportGroup"); auto* importGroup = projectXml.createNewChildElement ("ImportGroup");
importGroup->setAttribute ("Label", "ExtensionTargets"); importGroup->setAttribute ("Label", "ExtensionTargets");
auto packageTargetsPath = "packages\\" + getWebView2PackageName() + "." + getWebView2PackageVersion() const auto packageTargetsPath = "packages\\" + package.name + "." + package.version
+ "\\build\\native\\" + getWebView2PackageName() + ".targets"; + "\\build\\native\\" + package.name + ".targets";
auto* e = importGroup->createNewChildElement ("Import"); auto* e = importGroup->createNewChildElement ("Import");
e->setAttribute ("Project", packageTargetsPath); e->setAttribute ("Project", packageTargetsPath);
@ -1324,7 +1348,6 @@ public:
loaderPref->addTextElement ("Static"); loaderPref->addTextElement ("Static");
} }
} }
}
String getProjectType() const String getProjectType() const
{ {
@ -2661,27 +2684,64 @@ protected:
&& project.isConfigFlagEnabled ("JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING", false); && project.isConfigFlagEnabled ("JUCE_USE_WIN_WEBVIEW2_WITH_STATIC_LINKING", false);
} }
static String getWebView2PackageName() { return "Microsoft.Web.WebView2"; } bool shouldAddMidiPackage() const
static String getWebView2PackageVersion() { return "1.0.1901.177"; } {
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 void createPackagesConfigFile() const
{ {
if (shouldAddWebView2Package()) std::vector<NuGetPackage> packagesToInclude;
{ getPackagesToInclude (packagesToInclude);
if (packagesToInclude.empty())
return;
packagesConfigFile = getTargetFolder().getChildFile ("packages.config"); packagesConfigFile = getTargetFolder().getChildFile ("packages.config");
build_tools::writeStreamToFile (packagesConfigFile, [] (MemoryOutputStream& mo) build_tools::writeStreamToFile (packagesConfigFile, [&packagesToInclude] (MemoryOutputStream& mo)
{ {
mo.setNewLineString ("\r\n"); mo.setNewLineString ("\r\n");
mo << "<?xml version=\"1.0\" encoding=\"utf-8\"?>" << newLine mo << "<?xml version=\"1.0\" encoding=\"utf-8\"?>" << newLine
<< "<packages>" << newLine << "<packages>" << newLine;
<< "\t" << "<package id=" << getWebView2PackageName().quoted()
<< " version=" << getWebView2PackageVersion().quoted() for (const auto& p : packagesToInclude)
<< " />" << newLine {
<< "</packages>" << newLine; mo << " <package id=" << p.name.quoted() << " version=" << p.version.quoted();
});
if (p.targetFrameworkNative)
mo << " targetFramework=\"native\"";
mo << " />" << newLine;
} }
mo << "</packages>" << newLine;
});
} }
static String prependDot (const String& filename) static String prependDot (const String& filename)