Distributing AutoSetup plugin (or RLPlugin) as pre-compiled dll named "UE4Editor-RLPlugin.dll" casuses serious issues with Perforce Streams and causes packaging game to fail
The problem is that AutoSetup plugin (or RLPlugin) is distributed as pre-compiled dll named "UE4Editor-RLPlugin.dll" in folder Binaries/Win64.
It works for non-programmers, but...
Binaries prefixed by "UE4Editor-" are reserved only for the binaries generated while compiling our code (of project or engine). Binaries with such prefix are typically set to be ignored in the Source Control system, in streams used by programmers. This way programmers never download binaries generated by the build machine. It means the programmer wouldn't ever be able to download such pre-compiled binaries called "UE4Editor-RLPlugin.dll" . And that would result in an error while loading the project - a missing module binary.
Your plugin is the only one that does such a weird thing. It wouldn't be approved if you would submit it to the Unreal Marketplace - since this causes the issue.
I tried to work around it...
Failed workaround #1
- It's not trivial to set exceptions for a single such file under Perforce while using stream depots. That's a very important type of depot we (and many of Unreal Engine developers) work with. It cannot be changed during production. And we wouldn't ever want to. I would have manually set hundreds of paths to every single Binaries folder in the project and engine (we compile Unreal Engine from the source). And this list would have to updated manually with every single changed/added plugin...
- See https://www.perforce.com/perforce/r13.1/manuals/p4v/streams_overview.html
Note: such a workaround would be possible with a non-stream Perforce depot.
Failed workaround #2
- I simply tried to rework your plugin into a basically empty plugin that only links to your pre-compiled library by the following line in Build.cs
- Sadly, compiled dll cannot be renamed... Renaming "UE4Editor-RLPlugin.dll" to "RLPlugin.dll" causes the linker to say "fatal error LNK1107: invalid or corrupt file: cannot read at 0x338". And I'd need to rename your dll, so this file wouldn't be ignored under Perforce stream...
Just look at the attached file. This is how FMOD provides pre-compiled libraries in UE plugins serving as "glue" to their API.
- All the libraries are provided with names like "fmodstudio.dll", none of them contains the mischievous "UE4Editor-" prefix.
- FMOD plugin simply links to these libraries in FMODStudio.Build.cs.
- "UE4Editor-" binaries are ones that were generated during my compilation of the project.
Please, replicate how FMOD (and any other similar "glue plugin") distributed its libraries. It will allow us to upload your plugin to Perforce stream depot without the hassle :)
Also... enabling Auto Setup plug-in causes the packaging game to fail.
It's because UE4Editor-RLPlugin.pdb file is missing. And this is caused by the incorrect way of setting up this plugin. As pointed above, your pre-compiled binaries can't be delivered as "UE4Editor-RLPlugin.dll". This is the name reserved for the actual Unreal Engine module binary that we could re-compile ourselves. It would then work during cooking the game.
Reworking your plugin in the way described previously (like FMOD plugin or any other containing third-party libraries) will solve this issue :)