Commit Graph

52 Commits

Author SHA1 Message Date
Ben Marsh
9610023ca5 Use FileReference and DirectoryReference classes instead of strings for paths. Massively reduces the amount of paranoid calls to GetFullPath(), CleanDirectorySeparators() et al., and improves performance for really common UBT operations like making relative paths or checking if files are under a directory. Strong typing ensures that intention of parameters is explicit.
[CL 2678429 by Ben Marsh in Main branch]
2015-09-03 08:47:24 -04:00
Ben Marsh
3d6c0e0a81 Convert target receipts to JSON, so they can be read early at startup like version manifests, and unify the way that target receipts and version manifests are loaded and saved.
[CL 2669100 by Ben Marsh in Main branch]
2015-08-26 08:25:10 -04:00
Ben Marsh
db93204811 Reduce the amount of boilerplate log output when running UAT.
[CL 2662515 by Ben Marsh in Main branch]
2015-08-20 09:06:43 -04:00
Peter Sauerbrei
17b5b9cea5 add log display type as part of each log message
add -verbose=Level argument to be able to specify the verbosity level of logging, defaults to Log
#codereview ben.marsh, robert.manuszewski, paul.fazio

[CL 2654467 by Peter Sauerbrei in Main branch]
2015-08-13 09:00:22 -04:00
Ben Marsh
3733f73569 When compiling a modular target, write out a manifest of build products to each output directory listing the valid modules in that directory and their version. Allows faster switching of changelists when using UGS (because it's no longer necessary to re-link all modules), and safeguards against stale DLLs from a different target causing loader errors. Uses compiled-in API version if BUILT_FROM_CHANGELIST is non-zero.
[CL 2641800 by Ben Marsh in Main branch]
2015-08-03 08:47:15 -04:00
Peter Sauerbrei
dc1d815f84 refactored the logging system for UAT/UBT to be more like UE4
we now use an enum similar to UE4 with Fatal, Error, Warning, Display, Log, Verbose, and VeryVerbose
Log will only go to the log file unless -verbose is passed on the command line
reduced some of the output from UAT to be Log only

[CL 2631062 by Peter Sauerbrei in Main branch]
2015-07-23 14:51:46 -04:00
Ben Marsh
a5f534451b Remove the ENGINE_VERSION define from Version.h and ObjectVersion.cpp; it's superceded by GEngineVersion. EngineVersion.cpp now defines the constants GEngineVersionChangelist and GCompatibleWithEngineVersionChangelist, which are used to construct GEngineVersion and GCompatibleWithEngineVersion. Modifying those constants allows updating the engine version separately to the defines used for resource files (allowing UGS to update the version number without triggering all files to be relinked).
[CL 2625344 by Ben Marsh in Main branch]
2015-07-18 16:57:53 -04:00
Peter Sauerbrei
06bf1810ae reorganized the new FilteredTraceListener so it can be used by both UBT and UAT
[CL 2590140 by Peter Sauerbrei in Main branch]
2015-06-17 10:57:40 -04:00
Peter Sauerbrei
882f79f039 Changes to reduce log spew in stdout for UAT and GUBP
UEB-156
#uat
#codereview ben.marsh, robert.manuszewski

[CL 2588630 by Peter Sauerbrei in Main branch]
2015-06-16 10:42:46 -04:00
Josh Adams
7ff0070a83 - Basic support for compiling Xcode 7 (iOS9, MacOS 10.11)
- Marked some overrides properly, then gave up and added -Wno-inconsistent-missing-override)
- Improved Xcode selection process for Mac and iOS (no more hardcoding Xcode path - it uses the currently running Xcode, or xcode-select when using commandline)
   - Added AppleToolchain.cs, to start sharing code between Mac and IOS Toolchains (Compile functionality and params to clang could be shared pretty easily)
   -
- Some Utility functions:
   - Added UBT utility to run a commandline and get its output, self-contained (Utils.RunLocalProcessAndReturnStdOut)
   - Added Log.TraceInformationOnce (and Error, Warning, etc) to print out a message only one time, without a bunch of static bools everywhere
#codereview michael.trepka,peter.sauerbrei,mark.satterthwaite

[CL 2586000 by Josh Adams in Main branch]
2015-06-12 13:45:19 -04:00
Steve Robb
a1e663d053 Unification of environment variable harvesting, GetExecutingAssembly* functions, GetShortPathName and CaselessDictionary from UBT into DotNETUtilities.
Fixing up of existing code which used these facilities - this fixes the 'You are attempting to compile on a machine that does not have a supported compiler!' UAT error on machines with really long PATH variables, and exceptions in envvars with non-ASCII characters.

#codereview robert.manuszewski

[CL 2572445 by Steve Robb in Main branch]
2015-06-01 10:14:54 -04:00
Matthew Griffin
5ad9e48a87 Removed unnecessary Rocket checks from code used by Analytics
[CL 2554694 by Matthew Griffin in Main branch]
2015-05-18 06:00:06 -04:00
Mike Fricker
ca39745810 Renamed WinUAP platform to UWP
- Microsoft renamed Universal App Platform to Universal Windows Platform
- https://msdn.microsoft.com/en-us/library/dn894631.aspx

[CL 2547380 by Mike Fricker in Main branch]
2015-05-12 12:00:23 -04:00
Ben Marsh
2c9e447a08 Fix a UBT error trying to scrape the MSVC environment when packaging from the editor. The editor adds a lot of DLL search paths to the PATH environment variable, which can cause the variable to exceed the max allowed length when MSVC tries to add its own. Reset it to the user default first.
(Originally submitted as CL 2544483, but now includes both machine and user environment variables)

[CL 2544514 by Ben Marsh in Main branch]
2015-05-09 15:10:12 -04:00
Ben Marsh
7dc472a319 Back out changelist 2544483
[CL 2544507 by Ben Marsh in Main branch]
2015-05-09 14:40:01 -04:00
Ben Marsh
367c52e6cf Fix a UBT error trying to scrape the MSVC environment when packaging from the editor. The editor adds a lot of DLL search paths to the PATH environment variable, which can cause the variable to exceed the max allowed length when MSVC tries to add its own. Reset it to the user default first.
[CL 2544483 by Ben Marsh in Main branch]
2015-05-09 11:34:03 -04:00
Mike Fricker
65bbc0e732 Initial Unreal Build Tool support for Visual Studio 2015 and UAP (disabled by default)
- Merged in Microsoft's Unreal Build Tool changes for VS 2015 support, and Universal App Platform support
- VS 2015 support is disabled by default (the engine is not yet compiling with VS 2015)
- Use the new '-2015' option when generating project files to enable VS 2015 support
- Windows SDK 8.1 is used by default.  To use Windows SDK 10, enable WindowsPlatform.bUseWindowsSDK10
- UAP support is disabled (not supported yet, work in progress.)  Use WinUAPPlatform.bEnableUAPSupport to enable it.
- Various loose ends still remain (search for "@todo UAP" in Unreal Build Tool code)

[CL 2537920 by Mike Fricker in Main branch]
2015-05-05 15:32:10 -04:00
Wes Hunt
f453e6503e Handle Logging that should not have string.Format called on it. If the Arg count is zero, treat it is a raw string and simply use it.
[CL 2526291 by Wes Hunt in Main branch]
2015-04-26 19:34:56 -04:00
Wes Hunt
012e45b913 UBT Utils.cs (New logging system)
* Allows us to use built-in Trace providers (console, file, etc) directly and still use our custom formatting.
* Fat comments explaining why Trace.WriteXXX functions should not be used directly in our system.
* Fixes thread safety by using Trace.WriteXXX under the hood after formatting, which uses a global lock (except on Mono, where a bug appears to be preventing this. Simulating the call on that platform).
* No need for TraceEvent overloads, which saves us the extra parameter cruft.
* Removed non-varargs overloads of Log functions (technically a bit slower, but these are already small messages).
* No longer needed VerbosityFilter and ConsoleListener classes.
* Avoid calling GetSource() if we aren't outputting the source.
* Avoid formatting the string if it won't pass the verbosity level.
* Consolidated all of UAT and UBT options into this class, so they could fully share the implementation.

UBT BuildConfiguration.cs
* Added LogFilename (and --log=<file> arg) that enables logging to a file.
* Added static ctor guard that asserts if someone tries to read a config before we have loaded config files and parsed config-override commandlines. It's a poor man's hack, but better than nothing!

UBT UEBuildConfiguration.cs
* Same static ctor guard as above.

UBT UnrealBuildTools.cs (initialization refactoring)
* In general I tried to de-mystify some of the rationale behind our startup code via fat comments.
* Broke main into 3 stages:
1. "early code" that should not try to read a config value.
  * Very little code here. Mostly setting the current directory.
  * Does an early init of logging to ensure logging is around, but config values won't be ready.
2. "Init Configuration code" that loads config files and parses command lines that may override them.
  * I isolated two locations in startup that parsed long sets of switches and moved ones that trivially affected BuildConfiguration and UEBuildConfiguration in here. Those two locations seemed to have mostly copies of the same switches, indicating serious param parsing issues at some point in time.
  * This allows switches to override config files more easily than the patchwork of re-parsing that was currently used (particularly for -verbose).
  * I did a cursory examination of later code that indicated this double (actually, triple) parsing was no longer necessary with the refactors above. Any insight into why things may have ended up this way would be helpful.
3. "Post Init code" that is actually the meat of UBT.
  * I left this code largely untouched.
  * Removed 2 of 3 different command line logging statements.
  * Removed two redundant parses of config overrides (ParseBuildConfigurationFlags).
* Guarded all of main in a try/catch block to ensure no exceptions can leak from UBT without returning a valid error code. It ALMOST already did this, but only covered the part surrounded by the Mutex.
* There was a perplexing bit that redundantly called XmlConfigLoader.Reset<> (line 683) that I struggled to understand. It turns out UEBuildConfiguration was sensitive to the current directory being set before files were loaded, and the old code called XmlConfigLoader.Init() super early, which required it to be called again after the current directory was set (see UEBuldConfiguration.UEThirdPartySourceDirectory for the cause). After my changes, I verified as best I could that these calls are no longer needed and removed them.

XmlConfigLoader.cs
* Add support for Properties in XmlConfigLoader.

AutomationTool Program.cs
* Guard logging shutdown code in try/finally so it can't be missed.

AutomationTool Log.cs
* Uses new logging system from UBT
* Removed unnecessary classes (VerbosityFilter, AutomationConsoleTraceListener, and AutomationFileTraceListener)
* Console trace logic is handled by UBT code now, moved UTF8Output handling to InitLogging.
* A custom TraceListener for file logging was unnecessary.
  * Logic to handle creating the log file and retry loops was move into InitLogging, and the result passed to a regular TextFileTraceListener.
  * Logic to handle copying the log on shutdown was moved to a ShutdownLogging function.
#codereview:robert.manuszewski,michael.trepka,kellan.carr

[CL 2526245 by Wes Hunt in Main branch]
2015-04-26 18:19:28 -04:00
Ben Marsh
9b5828ca1f Fix performance issue when showing progress for large number of items; console I/O becomes a bottleneck.
[CL 2523429 by Ben Marsh in Main branch]
2015-04-23 17:32:21 -04:00
Ben Marsh
e8ec2d11f4 Change a couple of XmlSerializers to cache an object created with XmlSerializer.FromTypes() rather than just constructing it. Constructor throws and catches a FileNotFoundException internally, which is really annoying when you have break on exceptions turned on.
[CL 2509609 by Ben Marsh in Main branch]
2015-04-11 13:08:37 -04:00
Ben Marsh
c3a2d1dec0 Add more generic support for variable expansion in build receipts.
[CL 2502120 by Ben Marsh in Main branch]
2015-04-04 15:21:13 -04:00
Steve Robb
67f144d329 Only write out 8.3 filenames to the envvar-harvesting .bat file, to avoid Unicode paths which cmd.exe can't deal with.
Better error message when XML parsing fails.

#codereview robert.manuszewski

[CL 2500945 by Steve Robb in Main branch]
2015-04-03 05:06:45 -04:00
Nuclearfossil
e4b8df5537 PR #993: Resolving a crash when building project files with a full temp folder (Contributed by Nuclearfossil)
[CL 2498621 by Ben Marsh in Main branch]
2015-04-01 10:26:00 -04:00
Matthew Griffin
6de5ee48a4 Added checks on distribution level for modules and the direct dependencies of binaries
Changed Module Manager so that it adds restricted directories to modified PATH if they exist, removed unnecessary recursive use of FindModulePathsInDirectory
Updated setup of any projects that were flagged up using this system
Added old locations of restricted output to junk manifest
Added Util function to get min/max of IComparable types (used for enums)

[CL 2493565 by Matthew Griffin in Main branch]
2015-03-27 07:15:32 -04:00