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
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,31 +1307,45 @@ 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;
|
||||||
|
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()
|
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);
|
||||||
e->setAttribute ("Condition", "Exists('" + packageTargetsPath + "')");
|
e->setAttribute ("Condition", "Exists('" + packageTargetsPath + "')");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (owner.shouldLinkWebView2Statically())
|
if (owner.shouldLinkWebView2Statically())
|
||||||
{
|
{
|
||||||
auto* propertyGroup = projectXml.createNewChildElement ("PropertyGroup");
|
auto* propertyGroup = projectXml.createNewChildElement ("PropertyGroup");
|
||||||
auto* loaderPref = propertyGroup->createNewChildElement ("WebView2LoaderPreference");
|
auto* loaderPref = propertyGroup->createNewChildElement ("WebView2LoaderPreference");
|
||||||
loaderPref->addTextElement ("Static");
|
loaderPref->addTextElement ("Static");
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -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");
|
||||||
|
|
||||||
|
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
|
if (p.targetFrameworkNative)
|
||||||
<< "<packages>" << newLine
|
mo << " targetFramework=\"native\"";
|
||||||
<< "\t" << "<package id=" << getWebView2PackageName().quoted()
|
|
||||||
<< " version=" << getWebView2PackageVersion().quoted()
|
mo << " />" << newLine;
|
||||||
<< " />" << newLine
|
}
|
||||||
<< "</packages>" << newLine;
|
|
||||||
});
|
mo << "</packages>" << newLine;
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static String prependDot (const String& filename)
|
static String prependDot (const String& filename)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue