Commit Graph

60 Commits

Author SHA1 Message Date
leon huang
721ed16c42 Unreal Build Tool:
Update PluginDescriptor to have parity with FPluginDescriptor in terms of handling custom JSON fields. The order in which the original fields are written to disk is preserved.
When saving the PluginDescriptor to disk, the same order is followed and any new entries are added to the end of the plugin file.
Note: PluginDescriptor.Save and PluginDescriptor.Save2 will exist concurrently for now. There are still parts of UBT that use PluginDescriptor.Write and the refactor to create a unified Save function will come later as a lot of testing still needs to be done.
JsonObject:
- Introduced AddOrSetFieldValue() methods overloaded on value types to add/set fields in JsonObject.
- Changed the underlying data structure of JsonObject from Dictionary<string,Object?> to OrderedDictionary to guarantee that order of all .uplugin fields (default and custom) are preserved
- Made the JsonObject constructor that takes an OrderedDictionary private to ensure type safety of values passed to JsonObject
- Introduced ToJsonString() for JsonObject that serializes the JsonObject to match the formatting of .uplugin
IMPORTANT: The ToJsonString() method uses the JavaScriptEncoder.UnsafeRelaxedJsonEscaping encoder for Utf8JsonWriter.
This allows +,<,>,&,` etc characters to be written properly for .uplugins. As per MS docs, with this encoding, none of the contents should be written to HTML or a script.
- Introduced JsonObjectTests that unit tested JsonObject to ensure previous behavior was maintained.
- Ensured that keys for the JsonObject are processed in a case insensitive and culture independent way.

PluginDescriptor
- Added a JsonObject field that acts as the cache of all fields that were read from a file or parsed from a json string.
- Cached JsonObject records the order of all fields that were read and captures custom fields in the .uplugin
- Introduced Save2(), the new save algorithm that writes all fields (default and custom) to disk.
- Deleted the private default constructor because it didn't seem to be used anywhere.
- Introduced PluginDescriptorTests to ensure previous behavior is maintained. In particular when dealing with a .uplugin with only default fields, results of Save() and Save2() are the same.

Descriptor Files:
- Introduced ToJsonObject() methods to replace the previous JsonWriter patterns of writing the descriptor data.
- Introduced the UpdateJsonObject pattern which mimics the old WriteArray pattern of writing data to a JsonWriter.

#rb: Mark.Winter, Joe.Kirchoff
#jira: none
#test: Developed this in a TDD style with unit tests for all the major functions. Also reviewed output of created .uplugins and diffed them.

[CL 26920712 by leon huang in ue5-main branch]
2023-08-08 12:52:41 -04:00
leon huang
e8c7cae7b2 [Backout] - CL26105383
[FYI] Leon.Huang
Original CL Desc
-----------------------------------------------------------------
Unreal Build Tool:
Update PluginDescriptor to have parity with FPluginDescriptor in terms of handling custom JSON fields. The order in which the original fields are written to disk is preserved.
When saving the PluginDescriptor to disk, the same order is followed and any new entries are added to the end of the plugin file.
Note: PluginDescriptor.Save and PluginDescriptor.Save2 will exist concurrently for now. There are still parts of UBT that use PluginDescriptor.Write and the refactor to create a unified Save function will come later as a lot of testing still needs to be done.
JsonObject:
- Introduced AddOrSetFieldValue() methods overloaded on value types to add/set fields in JsonObject.
- Changed the underlying data structure of JsonObject from Dictionary<string,Object?> to OrderedDictionary to guarantee that order of all .uplugin fields (default and custom) are preserved
- Made the JsonObject constructor that takes an OrderedDictionary private to ensure type safety of values passed to JsonObject
- Introduced ToJsonString() for JsonObject that serializes the JsonObject to match the formatting of .uplugin
IMPORTANT: The ToJsonString() method uses the JavaScriptEncoder.UnsafeRelaxedJsonEscaping encoder for Utf8JsonWriter.
This allows +,<,>,&,` etc characters to be written properly for .uplugins. As per MS docs, with this encoding, none of the contents should be written to HTML or a script.
- Introduced JsonObjectTests that unit tested JsonObject to ensure previous behavior was maintained.

PluginDescriptor
- Added a JsonObject field that acts as the cache of all fields that were read from a file or parsed from a json string.
- Cached JsonObject records the order of all fields that were read and captures custom fields in the .uplugin
- Introduced Save2(), the new save algorithm that writes all fields (default and custom) to disk.
- Deleted the private default constructor because it didn't seem to be used anywhere.
- Introduced PluginDescriptorTests to ensure previous behavior is maintained. In particular when dealing with a .uplugin with only default fields, results of Save() and Save2() are the same.

Descriptor Files:
- Introduced ToJsonObject() methods to replace the previous JsonWriter patterns of writing the descriptor data.
- Introduced the UpdateJsonObject pattern which mimics the old WriteArray pattern of writing data to a JsonWriter.

#rb: Mark.Winter, Joe.Kirchoff
#jira: none
#test: Developed this in a TDD style with unit tests for all the major functions. Also reviewed output of created .uplugins and diffed them.

[CL 26111662 by leon huang in ue5-main branch]
2023-06-19 21:11:08 -04:00
leon huang
82b1ba105d Unreal Build Tool:
Update PluginDescriptor to have parity with FPluginDescriptor in terms of handling custom JSON fields. The order in which the original fields are written to disk is preserved.
When saving the PluginDescriptor to disk, the same order is followed and any new entries are added to the end of the plugin file.
Note: PluginDescriptor.Save and PluginDescriptor.Save2 will exist concurrently for now. There are still parts of UBT that use PluginDescriptor.Write and the refactor to create a unified Save function will come later as a lot of testing still needs to be done.
JsonObject:
- Introduced AddOrSetFieldValue() methods overloaded on value types to add/set fields in JsonObject.
- Changed the underlying data structure of JsonObject from Dictionary<string,Object?> to OrderedDictionary to guarantee that order of all .uplugin fields (default and custom) are preserved
- Made the JsonObject constructor that takes an OrderedDictionary private to ensure type safety of values passed to JsonObject
- Introduced ToJsonString() for JsonObject that serializes the JsonObject to match the formatting of .uplugin
IMPORTANT: The ToJsonString() method uses the JavaScriptEncoder.UnsafeRelaxedJsonEscaping encoder for Utf8JsonWriter.
This allows +,<,>,&,` etc characters to be written properly for .uplugins. As per MS docs, with this encoding, none of the contents should be written to HTML or a script.
- Introduced JsonObjectTests that unit tested JsonObject to ensure previous behavior was maintained.

PluginDescriptor
- Added a JsonObject field that acts as the cache of all fields that were read from a file or parsed from a json string.
- Cached JsonObject records the order of all fields that were read and captures custom fields in the .uplugin
- Introduced Save2(), the new save algorithm that writes all fields (default and custom) to disk.
- Deleted the private default constructor because it didn't seem to be used anywhere.
- Introduced PluginDescriptorTests to ensure previous behavior is maintained. In particular when dealing with a .uplugin with only default fields, results of Save() and Save2() are the same.

Descriptor Files:
- Introduced ToJsonObject() methods to replace the previous JsonWriter patterns of writing the descriptor data.
- Introduced the UpdateJsonObject pattern which mimics the old WriteArray pattern of writing data to a JsonWriter.

#rb: Mark.Winter, Joe.Kirchoff
#jira: none
#test: Developed this in a TDD style with unit tests for all the major functions. Also reviewed output of created .uplugins and diffed them.

[CL 26105458 by leon huang in ue5-main branch]
2023-06-19 17:00:48 -04:00
will brown
eaf2cd0dbe Fixing build warning 320113
[CL 26029561 by will brown in ue5-main branch]
2023-06-15 18:43:45 -04:00
will brown
c7a8be5cba Added a new DisallowedPlugins property to the PluginDescriptor that restricts which plugins can be used by this plugin.
[REVIEW] 25996005
[FYI] Eric.Carter

[CL 26029349 by will brown in ue5-main branch]
2023-06-15 18:36:30 -04:00
will brown
85fdba1a6b NoCode plugin descriptor property to prevent a plugin from containing any code or modules
[REVIEW] 25999534

[CL 26019360 by will brown in ue5-main branch]
2023-06-15 13:44:57 -04:00
joe kirchoff
36d266e932 UnrealBuildTool: Automated code cleanup
#rnx
#preflight 6476799e947ff6973c225619

[CL 25693241 by joe kirchoff in ue5-main branch]
2023-05-30 18:38:07 -04:00
will brown
6364a02056 UnrealBuildTool: Ensure that plugins do not have dependencies on any plugin that is sealed. Throw a build error if detected
#rb Joe.Kirchoff

[CL 25516847 by will brown in ue5-main branch]
2023-05-17 17:10:44 -04:00
David Harvey
c72f90087d Emit a warning when a plugin extension specifies an explictly empty platform allow list, suggesting the author expects some sort of inheritence.
#jira UE-161681
#rb Josh.Adams
#rnx
#preflight 63b7e67947321b9d890aa5b2

[CL 23596226 by David Harvey in ue5-main branch]
2023-01-06 04:23:16 -05:00
andrew scheidecker
1218625098 Changed boolean property bVersePublicApi on Build.cs and uplugin files to an enum named VerseScope with three states InternalAPI, PublicAPI and User.
Submitting on behalf of Markus.Breyer.

#rnx
#rb Markus.Breyer, Graeme.Thornton, Eric.Knapik
#preflight 62a74175af7ad033effb81ad

#ROBOMERGE-OWNER: andrew.scheidecker
#ROBOMERGE-AUTHOR: andrew.scheidecker
#ROBOMERGE-SOURCE: CL 20629231 via CL 20629334 via CL 20629474 via CL 20629523
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v955-20579017)

[CL 20636288 by andrew scheidecker in ue5-main branch]
2022-06-13 18:37:53 -04:00
markus breyer
45f42535a5 Added new properties to Build.cs and uplugin files to support Verse public API
- new property bVersePublicApi in Build.cs files that is set to expose the associated Verse code to public users
- new property "VersePublicApi" in uplugin files that is set to expose the associated Verse code to public users

#rb andrew.scheidecker, conan.reis
#rnx
#preflight 628c579c3b67edca7a615f57
#preflight 628fe09bf622d972b5f58a6e

#ROBOMERGE-OWNER: markus.breyer
#ROBOMERGE-AUTHOR: markus.breyer
#ROBOMERGE-SOURCE: CL 20386247 via CL 20386248 via CL 20386313 via CL 20386316
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v949-20362246)

[CL 20387729 by markus breyer in ue5-main branch]
2022-05-26 19:24:39 -04:00
markus breyer
83a1800927 Introduced new property "VersePath" in plugin descriptor and module rules
#rb jonathan.adamczewski, tim.tillotson
#rnx
#preflight 6216ef19104496cff8ae5564

#ROBOMERGE-AUTHOR: markus.breyer
#ROBOMERGE-SOURCE: CL 19224088 via CL 19227926 via CL 19237742 via CL 19237888 via CL 19238470
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v921-19075845)

[CL 19239355 by markus breyer in ue5-main branch]
2022-03-03 01:26:50 -05:00
markus breyer
1bd46f673d Do not write the CanContainVerse property for plugin descriptors when it is false
#jira UE-142055
#rb none
#rnx
#preflight none

#ROBOMERGE-AUTHOR: markus.breyer
#ROBOMERGE-SOURCE: CL 18948778 via CL 18949187 via CL 18949188 via CL 18949190 via CL 18952897 via CL 18953142
#ROBOMERGE-BOT: UE5 (Release-Engine-Test -> Main) (v917-18934589)

[CL 18953161 by markus breyer in ue5-main branch]
2022-02-11 11:15:33 -05:00
markus breyer
552c60dbed New "CanContainVerse" plugin descriptor property
- allows to specifically filter plugins at runtime
- added checks in UBT that point out the incorrect presence/absence of the property

#rb ben.marsh
#rnx
#preflight 61d4cb0a1a3fd09dcbca448b

#ROBOMERGE-AUTHOR: markus.breyer
#ROBOMERGE-SOURCE: CL 18522294 via CL 18524374 via CL 18524427 via CL 18524451 via CL 18524982 via CL 18525003
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v899-18417669)

[CL 18525031 by markus breyer in ue5-release-engine-test branch]
2022-01-05 16:56:50 -05:00
Marc Audy
0c3be2b6ad Merge Release-Engine-Staging to Test @ CL# 18240298
[CL 18241953 by Marc Audy in ue5-release-engine-test branch]
2021-11-18 14:37:34 -05:00
aurel cordonnier
a12d56ff31 Merge from Release-Engine-Staging @ 17791557 to Release-Engine-Test
This represents UE4/Main @17774255, Release-5.0 @17791557 and Dev-PerfTest @17789485

[CL 17794212 by aurel cordonnier in ue5-release-engine-test branch]
2021-10-12 21:21:22 -04:00
David Harvey
e581358a11 Add HasExplicitPlatforms property to uplugin definitions, allowing the SupportedTargetPlatforms and WhitelistPlatforms fields to be entirely defined in child plugins. The existing functionality means that an empty platform list implies "all platforms".
#jira UECON-417
#rb ben.marsh

[CL 16531379 by David Harvey in ue5-main branch]
2021-06-02 04:27:26 -04:00
David Harvey
38cb9a7d86 Plugin reference descriptors do not verify that the plugin's platforms names are known platforms. This means that the project will generate and build correctly even if a user doesn't have a particular platform extension synced.
#jira UE-108682
#rb josh.adams, ben.marsh

[CL 15694805 by David Harvey in ue5-main branch]
2021-03-15 06:00:55 -04:00
Ben Marsh
6f927647b1 Changing C# code over to using EpicGames.Core over DotNETCommon.
#rb none
#rnx

[CL 14962096 by Ben Marsh in ue5-main branch]
2020-12-21 23:07:37 -04:00
Ben Marsh
68f5abeb09 UBT: Convert UnrealBuildTool to use nullable references.
#rb none
#rnx

[CL 14960546 by Ben Marsh in ue5-main branch]
2020-12-20 18:47:42 -04:00
Josh Adams
77c0e15de9 - Fixed UBT to not throw errors if a project has a Platforms/XYZ directory, which will try to build with platform XYZ, if the engine doesn't have Engine/Platforms/XYZ/DataDrivenPlatformInfo.ini file. This will make it so the Project/Platforms/XYZ directory would be completely skipped over (and Project/Restricted/Blah/Platforms/XYZ)
- Changed plugin module descriptor internals to allow for an empty platform whitelist (which means no platforms are enabled), in the case of all platforms in the whitelist are not around
- Added some dummy DDPI.ini files for "fake platforms" to the Engine so that the above directory checks will not strip out the shared platform directories from projects
#rb ben.marsh
#fyi luke.thatcher,david.harvey
#jira UE-100574

[CL 14490452 by Josh Adams in ue5-main branch]
2020-10-14 08:54:14 -04:00
anthony bills
f573ba06f6 Add missing null checks to PluginDescriptor.cs
- Previously this would have been handled by WriteArray, now Plugins and Modules are a List and ToArray is called, the check needs to be moved up.

#rb rob.cannaday
[FYI] ben.marsh
#jira none

#ROBOMERGE-SOURCE: CL 11723339 in //UE4/Release-4.25/... via CL 11723340
#ROBOMERGE-BOT: RELEASE (Release-4.25Plus -> Main) (v656-11643781)

[CL 11723343 by anthony bills in Main branch]
2020-02-27 22:21:28 -05:00
anthony bills
1ef400627b Add support for whitelisting additional plugins and adding additional modules to plugin extensions.
Additionally allow monolithic programs inside platform extensions to ouput to the Binaries directory in the extension.

[at]brian.white, [at]josh.adams, [at]ben.marsh
#jira UE-81798
#rb ben.marsh

#ROBOMERGE-SOURCE: CL 11655119 in //UE4/Release-4.25/... via CL 11655234
#ROBOMERGE-BOT: RELEASE (Release-4.25Plus -> Main) (v656-11643781)

[CL 11655284 by anthony bills in Main branch]
2020-02-27 10:47:20 -05:00
Josh Adams
aa9705149b Copying Private-LoadTimes-4.24 stream to Main. Biggest changes are in Materials/Shader memory freezing.
#rb none

[CL 11282608 by Josh Adams in Main branch]
2020-02-06 13:13:41 -05:00
Ryan Durand
9ef3748747 Updating copyrights for Engine Programs.
#rnx
#rb none
#jira none

#ROBOMERGE-OWNER: ryan.durand
#ROBOMERGE-AUTHOR: ryan.durand
#ROBOMERGE-SOURCE: CL 10869242 in //Fortnite/Release-12.00/... via CL 10869536
#ROBOMERGE-BOT: FORTNITE (Main -> Dev-EngineMerge) (v613-10869866)

[CL 10870955 by Ryan Durand in Main branch]
2019-12-26 23:01:54 -05:00