/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2022 - Raw Material Software Limited JUCE is an open source library subject to commercial or open-source licensing. By using JUCE, you agree to the terms of both the JUCE 7 End-User License Agreement and JUCE Privacy Policy. End User License Agreement: www.juce.com/juce-7-licence Privacy Policy: www.juce.com/juce-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ namespace juce::build_tools { static String getCommaSeparatedVersionNumber (const String& version) { auto versionParts = StringArray::fromTokens (version, ",.", ""); versionParts.trim(); versionParts.removeEmptyStrings(); while (versionParts.size() < 4) versionParts.add ("0"); return versionParts.joinIntoString (","); } void ResourceRcOptions::write (const File& resourceRcFile) const { MemoryOutputStream mo; mo << "#pragma code_page(65001)" << newLine << newLine << "#ifdef JUCE_USER_DEFINED_RC_FILE" << newLine << " #include JUCE_USER_DEFINED_RC_FILE" << newLine << "#else" << newLine << newLine << "#undef WIN32_LEAN_AND_MEAN" << newLine << "#define WIN32_LEAN_AND_MEAN" << newLine << "#include " << newLine << newLine << "VS_VERSION_INFO VERSIONINFO" << newLine << "FILEVERSION " << getCommaSeparatedVersionNumber (version) << newLine << "BEGIN" << newLine << " BLOCK \"StringFileInfo\"" << newLine << " BEGIN" << newLine << " BLOCK \"040904E4\"" << newLine << " BEGIN" << newLine; const auto writeRCValue = [&] (const String& n, const String& value) { if (value.isNotEmpty()) mo << " VALUE \"" << n << "\", \"" << value.replace ("\"", "\"\"") << "\\0\"" << newLine; }; writeRCValue ("CompanyName", companyName); writeRCValue ("LegalCopyright", companyCopyright); writeRCValue ("FileDescription", projectName); writeRCValue ("FileVersion", version); writeRCValue ("ProductName", projectName); writeRCValue ("ProductVersion", version); mo << " END" << newLine << " END" << newLine << newLine << " BLOCK \"VarFileInfo\"" << newLine << " BEGIN" << newLine << " VALUE \"Translation\", 0x409, 1252" << newLine << " END" << newLine << "END" << newLine << newLine << "#endif" << newLine; if (icon.existsAsFile()) mo << newLine << "IDI_ICON1 ICON DISCARDABLE " << icon.getFileName().quoted() << newLine << "IDI_ICON2 ICON DISCARDABLE " << icon.getFileName().quoted(); overwriteFileIfDifferentOrThrow (resourceRcFile, mo); } } // namespace juce::build_tools