You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3058348)
#lockdown Nick.Penwarden #rb none ========================== MAJOR FEATURES + CHANGES ========================== Change 2982033 on 2016/05/18 by Chad.Garyet Checking in progress on the ue4 BuildGraph conversion. Builds and Compiles editor and game on all platforms Builds DDC on win64 and mac Builds Tools on win64 Change 3047983 on 2016/07/13 by Ben.Marsh PR #2597: Fix P4 environment used for running BuildUGS commandlet (Contributed by paulevans) Change 3048267 on 2016/07/13 by Ben.Marsh BuildGraph: Allow more permissive list of characters for node names; just restrict against characters which are illegal in filenames. Allows creating aggregate names which match job names (eg. "Editor, Tools & Monolithics"). Change 3048293 on 2016/07/13 by Ben.Marsh BuildGraph: Allow passing -listonly without a specific -target=... parameter in BuildGraph, to see the contents of the entire script. Change 3048454 on 2016/07/13 by Ben.Marsh BuildGraph: Disable output of error messages when just printing the contents of the graph. Change 3048507 on 2016/07/13 by Ben.Marsh BuildGraph: Rename "Ticket" to "Token" for files used to ensure exclusive access to run part of a build. Change 3049459 on 2016/07/14 by Matthew.Griffin Updated location of HTML5 SDKs for Installed Builds #jira UE-32171 Change 3049675 on 2016/07/14 by Matthew.Griffin Ensured that all platforms are registered when running -validateplatform command #jira UE-31082 Change3049922on 2016/07/14 by Ben.Marsh UBT: Fix path to XML config file in boilerplate message. Change 3051483 on 2016/07/15 by Ben.Marsh EC: Remove code to prettify node names, now that we can have pretty node names explicitly. Change3051522on 2016/07/15 by Ben.Marsh BuildGraph: Change spawn task to fail if a non-zero exit code is returned by an external program. The minimum exit code to be treated as an error can be set using the "ErrorLevel" attribute, similar to ERRORLEVEL in DOS. Change 3051770 on 2016/07/15 by Ben.Marsh UGS: Add support for narrowing virtual streams; fetch event and precompiled binaries for parent stream instead. Change 3052990 on 2016/07/17 by Ben.Marsh Show the names of people with notifications disabled in the heading of failure emails, so it's clear that they're not on CC. Change 3053556 on 2016/07/18 by Ben.Marsh BuildGraph: Add a explicit <Option> tag instead of the <Property Default=""/> shenanigans, so that properties that are meant to be modified by the user are listed explicitly. Supported attributes are "DefaultValue" (which specifies a default if the user does not set it on the command line), "Description" (which explains the purpose of the option to users, which is displayed in a table when BuildGraph is invoked with the -listonly argument), and "Restrict" (which specifies a regex to validate an argument supplied by the user). Also add an <EnvVar Name="Blah"/> tag which imports the given environment variable as a property (or sets it to "" if it doesn't exist), and rename the <Choose>/<Option>/<Otherwise> triple to <Switch>/<Case>/<Default> to avoid confusion with the new <Option> tag. Change 3053688 on 2016/07/18 by Ben.Marsh Update build scripts to link to p4-swarm rather than p4-web in dashboard pages and notification emails. Change 3054039 on 2016/07/18 by Ben.Marsh Fix confusing message when compiler isn't installed if the target forces VS2013 Change 3054360 on 2016/07/18 by Ben.Marsh Remove GUBP support from EC scripts. Change 3054399 on 2016/07/18 by Ben.Marsh Remove circular include from Json.h -> JsonSerializerMacros.h -> Json.h Change 3055671 on 2016/07/19 by Ben.Marsh Remove incomplete UWP integration from UE4. Change 3055943 on 2016/07/19 by Ben.Marsh Remove the WinRT target platform. Change 3056270 on 2016/07/19 by Ben.Marsh Core: Move VectorRegister.h include to eliminate include dependency on UnrealMathUtility.h Change 3056390 on 2016/07/19 by Ben.Marsh Core: Directly include headers required by default JsonWriter template instantiation. Change 3057444 on 2016/07/20 by Ben.Marsh UBT: Fall back to checking for the VS140COMNTOOLS environment variable if we couldn't determine the Visual Studio installation directory from the registry. Allows using the standalone Visual Studio build tools to compile UE4. Change 3058337 on 2016/07/20 by Ben.Marsh Remove EnvVarsToXML. All target platforms now determine their compile environment directly from the registry. Change 3058348 on 2016/07/20 by Ben.Marsh Disable optimization for all automation projects. They don't generally do anything particularly CPU intensive, and VS2015 optimizations are inhibitive to debugging. [CL 3058822 by Ben Marsh in Main branch]
This commit is contained in:
committed by
Ben.Marsh@epicgames.com
parent
a0625fdf15
commit
1ae32843fa
@@ -23,11 +23,6 @@ pushd libPNG\libPNG-1.5.2\projects
|
||||
msbuild vstudio11.sln /target:Clean,libpng /p:Platform=x64;Configuration="Release Library"
|
||||
popd
|
||||
|
||||
REM WinRT
|
||||
pushd WinRT
|
||||
msbuild WinRT.sln /target:Clean,libpng /p:Platform=x64;Configuration=Release
|
||||
popd
|
||||
|
||||
REM XboxOne
|
||||
pushd XboxOne
|
||||
msbuild libpng_XboxOne.sln /target:Clean,libpng /p:Platform=x64;Configuration=Release
|
||||
|
||||
@@ -2086,13 +2086,13 @@
|
||||
<File Name="Engine/Build/Android/Prebuilt/bsdsignal/lib/x86/libbsdsignal.a" Hash="0221f7bb3838fcb4bc207d721de1b44f0e328d83" />
|
||||
<File Name="Engine/Build/Android/UE4Game/UE4CommandLine.txt.template" Hash="eea4ff67e2b002a37e2fe2ad425719e21d0d3cde" />
|
||||
<File Name="Engine/Build/BatchFiles/SyncToRemotePC.exclude" Hash="b3212a94d187c614717ed7607cb9ac4d4cd9bdf7" />
|
||||
<File Name="Engine/Build/BuildFarm/Build.pm" Hash="e31b8ffab60cdd24a429f7c518e4b83150d2fe2d" />
|
||||
<File Name="Engine/Build/BuildFarm/Commands.pm" Hash="cefa61d5f12f7ffcc792535c1720de7ab60e1fcf" />
|
||||
<File Name="Engine/Build/BuildFarm/Dashboard.pm" Hash="ad6e09e7dac8390583f42272278c17fcd2d8fda9" />
|
||||
<File Name="Engine/Build/BuildFarm/Notifications.pm" Hash="18b13c2382c558212e6d0f683561f525b5334c60" />
|
||||
<File Name="Engine/Build/BuildFarm/Build.pm" Hash="85380721e7f768c157ac86c64d2c9c9d5bca2b02" />
|
||||
<File Name="Engine/Build/BuildFarm/Commands.pm" Hash="2793888b8c40deb4f5bc101f707ece09f3c50bd9" />
|
||||
<File Name="Engine/Build/BuildFarm/Dashboard.pm" Hash="6172ac2af0e414fe63c151d822fea78005771d2c" />
|
||||
<File Name="Engine/Build/BuildFarm/Notifications.pm" Hash="e43b6fa7c1b72e7f3f680238bdafd0145a2244a4" />
|
||||
<File Name="Engine/Build/BuildFarm/Utility.pm" Hash="36e204443b981af59d76ad8735dc1e21ecefeb17" />
|
||||
<File Name="Engine/Build/BuildFarm/Workspace.pm" Hash="1874b67f74f91cf6321e16feed705c6d8b535d86" />
|
||||
<File Name="Engine/Build/Graph/Schema.xsd" Hash="ea84deef96ae8b9dd97306a4e420c34fffbd33ad" />
|
||||
<File Name="Engine/Build/Graph/Schema.xsd" Hash="55aa186498c1e2adc194a618d14626793e3d98bb" />
|
||||
<File Name="Engine/Build/HTML5/%RunMacHTML5LaunchHelper.command.template" Hash="e9f61f468fe7dcb18f42e843004a184cb3eba0ac" />
|
||||
<File Name="Engine/Build/HTML5/htaccess.template" Hash="befbaa1b41783ae54d34864fea4efdc2b9835677" />
|
||||
<File Name="Engine/Build/HTML5/RunMacHTML5LaunchHelper.command.template" Hash="21f2112f325320846baa8cdc8c9ed52341154d29" />
|
||||
@@ -29013,7 +29013,7 @@
|
||||
<Blob Hash="065eb40e178c1e43503d88960caadc6ca35c4d58" Size="3469" PackHash="4905bf362dac5be04631d1ce552b8184a6f9eb7f" PackOffset="569817" />
|
||||
<Blob Hash="066546028b9383729088362a854665a2dea05f05" Size="7532" PackHash="1d09bb4f8ba502cef13de6d570839e6790bf3542" PackOffset="258748" />
|
||||
<Blob Hash="066a8e31e0f265dd02b3083d1ce24dcfae6eb795" Size="2845" PackHash="c96e9cd94a86b222bed132142b65c1d90314445d" PackOffset="793240" />
|
||||
<Blob Hash="066f899e3957a484180dfd28eb866d9fe40fd8db" Size="4145" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="220802" />
|
||||
<Blob Hash="066f899e3957a484180dfd28eb866d9fe40fd8db" Size="4145" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="318112" />
|
||||
<Blob Hash="06700fb2b1e308ac0a15990408e2a89fd3cfba2c" Size="29696" PackHash="254bdc731ce0a3bef83fa6dd6c76771cadefeab5" PackOffset="1270050" />
|
||||
<Blob Hash="0671b435cfdbbb24bdc586af79cb5c6ca9d70a84" Size="100070" PackHash="fc71358f88c1a01c32f496b064386dba3145a36a" PackOffset="753855" />
|
||||
<Blob Hash="0677b61466f0b59c614ddd3a47810053fd33b3a6" Size="31187" PackHash="9a10248ffa6ef2de0ff39750b0126e7d0b1557b6" PackOffset="1738074" />
|
||||
@@ -30411,7 +30411,6 @@
|
||||
<Blob Hash="18a6ae99551f412a79d98c715c0b3984e2008a80" Size="1276" PackHash="86a5e29144bc8897af8bcfc36153837ea5ace14d" PackOffset="2095619" />
|
||||
<Blob Hash="18aa0c2224ddd29e6b14021c78a8d3a5956a9f8f" Size="2878" PackHash="0255260ee4d81de161e877cdcc3af4d7fcf8d0e3" PackOffset="505778" />
|
||||
<Blob Hash="18ac21b638188b542455ba3da91f958df1724e68" Size="188" PackHash="b0e7677a897dcc7da7de82ccb301777868eddf84" PackOffset="163934" />
|
||||
<Blob Hash="18b13c2382c558212e6d0f683561f525b5334c60" Size="33616" PackHash="4adf92b4c6c9666b70b0559298f2d3a1b6d2baf5" PackOffset="41312" />
|
||||
<Blob Hash="18b19f6371c938b3bb0d728011d9813ccc3d48da" Size="2958" PackHash="4f9629d19fa7928aaae10e4bb7c79195fb4f2436" PackOffset="999407" />
|
||||
<Blob Hash="18bc3a36c08ee6f81d2baf80fd783763d32e14fc" Size="23080" PackHash="16e421c9204b08586edd8de93b93b19fb10644ea" PackOffset="1744536" />
|
||||
<Blob Hash="18c7c88e0a1bb96a151882a8842129f91d9419fe" Size="279060" PackHash="6d263531086a2ac8abcd381816ca4bbebeb2bb89" PackOffset="1634972" />
|
||||
@@ -30560,7 +30559,7 @@
|
||||
<Blob Hash="1a91fda1322cf9e1411c71fe1722b0dff45d6441" Size="10214" PackHash="5a4c5b85fb81b291e8fb6f7c37c0b152f8aeb1bb" PackOffset="2024704" />
|
||||
<Blob Hash="1a930f4448be0627194b27e052e261b8afcb2988" Size="1140" PackHash="078c69e28d62159c041268759fe75086849b8401" PackOffset="2081097" />
|
||||
<Blob Hash="1a9585563bb6f410141e73fc8e2783fabd1f5205" Size="1045" PackHash="183240fd1b049e0a072c53e56195aad84aecf657" PackOffset="830892" />
|
||||
<Blob Hash="1a976939b2bdfeb33a061dea61b0f67f0e999548" Size="133982" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="81315" />
|
||||
<Blob Hash="1a976939b2bdfeb33a061dea61b0f67f0e999548" Size="133982" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="178625" />
|
||||
<Blob Hash="1a991560ffc15eda726bd46ce0f940be657221e0" Size="5374" PackHash="cc6a5a3068543d46e2fb50b7563fe9ecad52177c" PackOffset="1848185" />
|
||||
<Blob Hash="1a9ada9a3ea2495c9ec01ffcc506c07a7a0d6c3e" Size="781809" PackHash="b4411a92ba0b237e9dee0988897930e64daca1a7" PackOffset="1089446" />
|
||||
<Blob Hash="1a9cae73512084d40ae660262624b4a71b42e724" Size="965" PackHash="183240fd1b049e0a072c53e56195aad84aecf657" PackOffset="1741532" />
|
||||
@@ -31539,6 +31538,7 @@
|
||||
<Blob Hash="278a281e8d2df765ca3ff3b6693ca1a3059fff13" Size="32629" PackHash="87925181e3a8b737757401a6114a8acf82625a49" PackOffset="521982" />
|
||||
<Blob Hash="278a68f87bd12ca77d7c872e25d8c2a7e299560f" Size="2402" PackHash="0e0fc56444fa93555de76ff8aaa98b0bd94a186d" PackOffset="1464343" />
|
||||
<Blob Hash="2793552ed917cafa30879587b4a7877b314da64c" Size="371" PackHash="d67cb445f37637410f670b1d8682dcf22ced07ae" PackOffset="2096341" />
|
||||
<Blob Hash="2793888b8c40deb4f5bc101f707ece09f3c50bd9" Size="19999" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="47444" />
|
||||
<Blob Hash="279c7693f24a1086facd5e4ee91deefd4c9a54c7" Size="358569" PackHash="a4fd3b154d528d1625a83bf01c58f824bf78252e" PackOffset="8" />
|
||||
<Blob Hash="279dfc244db82090dc68bc77262dd4c6719c23d3" Size="1646190" PackHash="0ec6df97d2cba5820ca7b31ceef87bac12bc9704" PackOffset="8" />
|
||||
<Blob Hash="27a9e690ecb9c7027ae8d6d06e0a8c7adbedae38" Size="100" PackHash="1d09bb4f8ba502cef13de6d570839e6790bf3542" PackOffset="1278168" />
|
||||
@@ -33795,7 +33795,7 @@
|
||||
<Blob Hash="453bbe334b2fde37953deebfcc769c4396d1ca54" Size="2876" PackHash="89655ca2156f42621ad3d2f705ebf90bd9f7a265" PackOffset="88488" />
|
||||
<Blob Hash="453bdc531c36cbc6f60e0a0d203fe376b97b5f3c" Size="3641" PackHash="c96e9cd94a86b222bed132142b65c1d90314445d" PackOffset="743642" />
|
||||
<Blob Hash="453ea2556aae37090680cc7ca9a6379f58645925" Size="3907" PackHash="d67cb445f37637410f670b1d8682dcf22ced07ae" PackOffset="2037756" />
|
||||
<Blob Hash="453ec5785160c2f10abb818ca9cbff958c57e874" Size="1963" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="266569" />
|
||||
<Blob Hash="453ec5785160c2f10abb818ca9cbff958c57e874" Size="1963" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="363879" />
|
||||
<Blob Hash="45429c393b2478293e4de8a871c33e6f98e50873" Size="84" PackHash="1d09bb4f8ba502cef13de6d570839e6790bf3542" PackOffset="815104" />
|
||||
<Blob Hash="4548950cc52a9cf25108443ddf386c725ae95d0e" Size="3979" PackHash="b927bd7f1272bf8097cc4d0ac70876d5f99a3dee" PackOffset="1972981" />
|
||||
<Blob Hash="4553a7519413c832388ca58f6fd3189db5a94b92" Size="208" PackHash="01d26cddb178f064c3cd74a09430970bf6cc12b7" PackOffset="2089024" />
|
||||
@@ -34715,7 +34715,7 @@
|
||||
<Blob Hash="515f7462deac1771970a131972627666f6464a26" Size="3151" PackHash="fc72803a9439e161de25108be11e5429ed900f77" PackOffset="465265" />
|
||||
<Blob Hash="5160222a3b133d23b2862bca45545ee9bac0338b" Size="5210" PackHash="2501023890f3a38f48be403e595e128c88422dc7" PackOffset="2089936" />
|
||||
<Blob Hash="51663902456581eae1c9302e02c92246385b2059" Size="41804" PackHash="f6fdc33805bc89e2eaff8003a996f6bf8f880789" PackOffset="2051628" />
|
||||
<Blob Hash="5168245dddac55b4d8196154e084ba4382c2b29d" Size="5505" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="215297" />
|
||||
<Blob Hash="5168245dddac55b4d8196154e084ba4382c2b29d" Size="5505" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="312607" />
|
||||
<Blob Hash="516a844c296adf13bdf900a7218a7df9f3062929" Size="372806" PackHash="30bf523aff5cc60cdbb2da5ca9b51226e6aefc9b" PackOffset="1670632" />
|
||||
<Blob Hash="516d3527cc1928654c7fa7600311bc776c501bd5" Size="445" PackHash="d95d0dfee072d179a0e04916b7b80ef37d1f6fca" PackOffset="2096405" />
|
||||
<Blob Hash="516d5e875f596dbb4d3b34bbaeac8fa743063dec" Size="174625" PackHash="0bea8e482197a9378d1256b0989c1af440e374f1" PackOffset="1897609" />
|
||||
@@ -35015,6 +35015,7 @@
|
||||
<Blob Hash="55a0da136fef9f3d41d66b51a8121767c4a53d26" Size="293" PackHash="c96e9cd94a86b222bed132142b65c1d90314445d" PackOffset="1028264" />
|
||||
<Blob Hash="55a26fd65b58938d1ae664ff4a3a162927d0a161" Size="77986" PackHash="e39b1ffe375995e81f45f2d90aaf437e84c11ca7" PackOffset="1677955" />
|
||||
<Blob Hash="55a9f296caca5f0cd2b466db69c38c5c25154633" Size="225431" PackHash="af32114b8b970d1d65271ed99052f0de3d4651eb" PackOffset="478216" />
|
||||
<Blob Hash="55aa186498c1e2adc194a618d14626793e3d98bb" Size="36886" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="141739" />
|
||||
<Blob Hash="55b1bf681638774e4318bfec572e95fab4a2ccf4" Size="3997" PackHash="5dbebfe34ab5c28eca7d7b6c57ff41cda029cf64" PackOffset="1458155" />
|
||||
<Blob Hash="55b218f860541f99ea90df4b6d1664139e6710d5" Size="2884" PackHash="33d0a2949662b327b35a881192e85107ecafc8ac" PackOffset="788356" />
|
||||
<Blob Hash="55b71f5a15a102904341ebd7c56759e9bb9e6f1a" Size="19656" PackHash="c9f7bd390be6e2f50469fcf024ace928b624a38d" PackOffset="1987819" />
|
||||
@@ -35104,7 +35105,7 @@
|
||||
<Blob Hash="56c61258444e1765e97dfbf86daf3d933ce6c241" Size="275" PackHash="89655ca2156f42621ad3d2f705ebf90bd9f7a265" PackOffset="689358" />
|
||||
<Blob Hash="56c794385a4a1b91777408abcb2d87c586f6518e" Size="261" PackHash="fbcf9cae5640d47e9b7d2ad925c55d54fea4bb7a" PackOffset="2042735" />
|
||||
<Blob Hash="56c95ecfaf90a186b3154efa2742ab13582c46fc" Size="133" PackHash="4dbfbb5ea4ec25ceeaa80c657b70f101fa2753c2" PackOffset="2095795" />
|
||||
<Blob Hash="56cd01533feb948bd235a67711562ca1dc19c4f6" Size="1394" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="224947" />
|
||||
<Blob Hash="56cd01533feb948bd235a67711562ca1dc19c4f6" Size="1394" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="322257" />
|
||||
<Blob Hash="56cfd0e18d07f41c38e9598545a6d369127fc6f9" Size="1412" PackHash="ba6e6f4eaf7c50e1dcff51145723e736d4474d28" PackOffset="1645801" />
|
||||
<Blob Hash="56d03e9f3144adfc73b272668144e59ca202f6e0" Size="119" PackHash="b0e7677a897dcc7da7de82ccb301777868eddf84" PackOffset="200716" />
|
||||
<Blob Hash="56d4f3cca1245d626bada74cf3f6bae8034bf58d" Size="7273" PackHash="b8b36b31df40a1fc9087e4b313999fcda60845cc" PackOffset="1561001" />
|
||||
@@ -35378,7 +35379,7 @@
|
||||
<Blob Hash="5a033a6a429c95c2e854c73777692dbf8773b76e" Size="71168" PackHash="f380b2adccc3afba7a9a9a501560525a8359a651" PackOffset="915982" />
|
||||
<Blob Hash="5a07ab43e3aafac95f375eecb509ce6de504083d" Size="7428" PackHash="33d0a2949662b327b35a881192e85107ecafc8ac" PackOffset="1311940" />
|
||||
<Blob Hash="5a0874b3b803ad7ce1da58dff3efef44ed0dfdfe" Size="20384" PackHash="15c1c1820f17cbc99a977498d87549e3b4060f7c" PackOffset="671792" />
|
||||
<Blob Hash="5a0be679481f1bdd780d0adb1ba5e93610eb7a83" Size="4732" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="250346" />
|
||||
<Blob Hash="5a0be679481f1bdd780d0adb1ba5e93610eb7a83" Size="4732" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="347656" />
|
||||
<Blob Hash="5a0c110af36b7d84d57ef88eec397c63afc0c8df" Size="12731" PackHash="ab39e914df290cf79de86a8439b1adc79fd76140" PackOffset="1265657" />
|
||||
<Blob Hash="5a0f96d9041827e522a47b570e1ce938bfedbe28" Size="4206248" PackHash="19c8ede828d4e84d3023a8cad20c4118e92c51f6" PackOffset="8" />
|
||||
<Blob Hash="5a0faf592aea1056ed64f399319093eddf131deb" Size="183683" PackHash="3b886fcb1eae674ad4e09dfd22b6d12287364c04" PackOffset="1764930" />
|
||||
@@ -35923,6 +35924,7 @@
|
||||
<Blob Hash="616f6a0ca94238d1649a01aade4c38923bfeb8ee" Size="22775" PackHash="72cc71fd1b06b9d608593626e08ebd8d150d0a8d" PackOffset="1394933" />
|
||||
<Blob Hash="6171fb50869a8887ae72042866e23d18e1195856" Size="4216" PackHash="33b1641106510028eb721832840bab3d4cbd5a2a" PackOffset="2090053" />
|
||||
<Blob Hash="6171fbb4e02311a7943bf61a932225bb623912b0" Size="124" PackHash="f380b2adccc3afba7a9a9a501560525a8359a651" PackOffset="2097025" />
|
||||
<Blob Hash="6172ac2af0e414fe63c151d822fea78005771d2c" Size="40718" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="67443" />
|
||||
<Blob Hash="6173acf386eab2d224abab910ed4f1b347b97061" Size="136192" PackHash="b6e51c5ce4619cf24deb50699e19457246a65fde" PackOffset="1035272" />
|
||||
<Blob Hash="6176dcd0838868c18751657b42d483ed11480c66" Size="3555" PackHash="077b2d38582f0b10f5b7abbe23141dae500a4a90" PackOffset="66811" />
|
||||
<Blob Hash="6179bafb6ed2eb029862356df6713078c7874f85" Size="188164" PackHash="acf6558b1e3950d55a31da4e8614e4a357aa653c" PackOffset="413038" />
|
||||
@@ -36168,7 +36170,7 @@
|
||||
<Blob Hash="6482cf40077aeed4912935764121fb3f2fafef49" Size="168" PackHash="16e421c9204b08586edd8de93b93b19fb10644ea" PackOffset="2096456" />
|
||||
<Blob Hash="6484f1af6b485d5096b71b344e67f4164c33dd1f" Size="142072" PackHash="4dbfbb5ea4ec25ceeaa80c657b70f101fa2753c2" PackOffset="126744" />
|
||||
<Blob Hash="6484f6847b39a92fb4f0bb92babafa93152f4e8d" Size="395" PackHash="0e0fc56444fa93555de76ff8aaa98b0bd94a186d" PackOffset="994906" />
|
||||
<Blob Hash="6486ba2bd3ce1443eb5f4af833e8172a6065f2dd" Size="4206" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="239788" />
|
||||
<Blob Hash="6486ba2bd3ce1443eb5f4af833e8172a6065f2dd" Size="4206" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="337098" />
|
||||
<Blob Hash="648a00fb6c5f6117fc3b01fa5aa3612808409d24" Size="1467992" PackHash="14c49c4d92812e866d02222dce43083393cf3ead" PackOffset="8" />
|
||||
<Blob Hash="648f89a97b41047bfb21a8a262ae40e9287ae021" Size="1162" PackHash="a8ed13f4553f617964c6bcf87feea6fe639305ce" PackOffset="2095270" />
|
||||
<Blob Hash="6494634a914ff2b67b2a734f5a821eec29d58183" Size="3039" PackHash="e458507f455e3bac9232d632426fc4b75f29841d" PackOffset="1830702" />
|
||||
@@ -36277,7 +36279,7 @@
|
||||
<Blob Hash="660d8b97d0dcecc916a12d61270765b0d5d69154" Size="38377" PackHash="d31dad19c41dfe5fe805eda5d23486ca115b4dca" PackOffset="700807" />
|
||||
<Blob Hash="661465b84ea5c7f6ec63415807ec282ce0b31aba" Size="3660" PackHash="1bc440e5f448e7dec6f97dbb519814d6c4b17b0e" PackOffset="2092528" />
|
||||
<Blob Hash="6618755ed12693f85e83232a4c792dc3e81f6527" Size="5953" PackHash="d92734f6a18a11d0dfbf8c9e12f63f2180c5225d" PackOffset="1973206" />
|
||||
<Blob Hash="661e803946cf6948aed19f37034a1104db4f5dd6" Size="2998" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="268532" />
|
||||
<Blob Hash="661e803946cf6948aed19f37034a1104db4f5dd6" Size="2998" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="365842" />
|
||||
<Blob Hash="663357b3fc4c6de4715880f75c72924b07bf54a3" Size="32758" PackHash="87925181e3a8b737757401a6114a8acf82625a49" PackOffset="554611" />
|
||||
<Blob Hash="663423abec4e393fa61e6cd80b2bb0d072263784" Size="3924" PackHash="5e7d96af5e5b1cafa670bd77ae918457a118f7a5" PackOffset="2080174" />
|
||||
<Blob Hash="6635804cac01d86c4e9dbd003b7ce9c8cb7bd828" Size="16896" PackHash="416a2ef9e1d85c9801e1c11b5b75e6647f40b196" PackOffset="583176" />
|
||||
@@ -37392,7 +37394,7 @@
|
||||
<Blob Hash="753662d73cd9b34b9eab5e19aa61faeceed8d168" Size="10134" PackHash="af724a067c425dce4dc52010f00800d056379846" PackOffset="2067494" />
|
||||
<Blob Hash="75382235d4609640a483cc83b5ac6cab586fb66a" Size="9229" PackHash="d338b1e7e6160d0f539aa12687e23db81cce61c4" PackOffset="138310" />
|
||||
<Blob Hash="75388eb60c39d76fca3f1ee5659e026bb395ff19" Size="7751" PackHash="b8b36b31df40a1fc9087e4b313999fcda60845cc" PackOffset="1340655" />
|
||||
<Blob Hash="753ae3d94d1b2a55fa8cfcc7e64d80055eeee8d3" Size="3856" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="259591" />
|
||||
<Blob Hash="753ae3d94d1b2a55fa8cfcc7e64d80055eeee8d3" Size="3856" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="356901" />
|
||||
<Blob Hash="753c1ca9b46f1cf9d06bcd695f6a803f5a2d9905" Size="4429" PackHash="e458507f455e3bac9232d632426fc4b75f29841d" PackOffset="2067083" />
|
||||
<Blob Hash="753c5217bf729600d8960259cb6426065e355600" Size="118217" PackHash="b176340bbc5d5b5bac78f855162c5a3ff0ba19ce" PackOffset="1104898" />
|
||||
<Blob Hash="7547f4224003d1d6cb0c1141fd673228ee926d8c" Size="4608" PackHash="254bdc731ce0a3bef83fa6dd6c76771cadefeab5" PackOffset="1245986" />
|
||||
@@ -37980,7 +37982,7 @@
|
||||
<Blob Hash="7cee88aba336483221b7cf47b9c95cfc3ed98589" Size="37888" PackHash="254bdc731ce0a3bef83fa6dd6c76771cadefeab5" PackOffset="2050882" />
|
||||
<Blob Hash="7ceef7f5fb798785c5e7d7d80c1670667a92fb39" Size="3268096" PackHash="cc6ab21f56cb5abc4754426994877ffacf503dea" PackOffset="8" />
|
||||
<Blob Hash="7cf7dbb78868093f49934af947b8916a51c86ee0" Size="1918" PackHash="529198f2ee46d987aeed3fff1a66a0ba7ab79765" PackOffset="1779499" />
|
||||
<Blob Hash="7cfbd6e262b6ee97d0f636e51f6437d4b496b655" Size="2500" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="247846" />
|
||||
<Blob Hash="7cfbd6e262b6ee97d0f636e51f6437d4b496b655" Size="2500" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="345156" />
|
||||
<Blob Hash="7cfc562ebd144f7c4f135c999ee143f4f1ecafee" Size="186" PackHash="b0e7677a897dcc7da7de82ccb301777868eddf84" PackOffset="610797" />
|
||||
<Blob Hash="7cff03d5db12a60bce118ff92792b7cbee868738" Size="282041" PackHash="b4a7011b1f4b663e34e08b5caa1fe927463eb914" PackOffset="8" />
|
||||
<Blob Hash="7cffd674785551ba95145dd60161c4f582a49a88" Size="52001" PackHash="374b33734d17be020f3eec73cf16a100e905a8c5" PackOffset="870569" />
|
||||
@@ -38613,6 +38615,7 @@
|
||||
<Blob Hash="852f78531684defb35f23abc448b4e43d94ccc03" Size="311778" PackHash="6a467413108651fd3be147f1f2cfbe29d032267c" PackOffset="8" />
|
||||
<Blob Hash="85320bd049e4801dbf674d68e50740db45d4d9ef" Size="92570" PackHash="6b990f3e47bfc2ed0ca6a8c68c9188a6788110bd" PackOffset="1911670" />
|
||||
<Blob Hash="853796a932b59cf7ca41ca84190d020c0b52590e" Size="1985" PackHash="399ead53201faa00c7d391ccafdd004f5594bcb2" PackOffset="548314" />
|
||||
<Blob Hash="85380721e7f768c157ac86c64d2c9c9d5bca2b02" Size="47436" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="8" />
|
||||
<Blob Hash="85381dd86a541cd55012b7b2a96f35dca9cb4340" Size="18968" PackHash="4b68b1eb2767528f8817b77879c7a9158dd40b22" PackOffset="100689" />
|
||||
<Blob Hash="85386bcfc4fbed0b9d2001cba018ed7fabac0a9e" Size="30208" PackHash="a8ed13f4553f617964c6bcf87feea6fe639305ce" PackOffset="1989640" />
|
||||
<Blob Hash="853d619e4f80313db8640722d78dbecba08ae3ed" Size="3477" PackHash="e458507f455e3bac9232d632426fc4b75f29841d" PackOffset="1933971" />
|
||||
@@ -38658,7 +38661,7 @@
|
||||
<Blob Hash="85caaba77b9ca1ff84f8d6dd857dc8e7e37ac011" Size="3650" PackHash="72cc71fd1b06b9d608593626e08ebd8d150d0a8d" PackOffset="1331849" />
|
||||
<Blob Hash="85cd002bb6bdcee9ec6a616981706bd867e201e6" Size="265" PackHash="183240fd1b049e0a072c53e56195aad84aecf657" PackOffset="840135" />
|
||||
<Blob Hash="85d7c212721e37b2db339ff5dc9fbc8cc533416b" Size="109698" PackHash="c5ae184eaa6760174706ff03095aa041150e0bc7" PackOffset="1467898" />
|
||||
<Blob Hash="85dafc29a96addaf3c690148e3c542179260021b" Size="4547" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="231410" />
|
||||
<Blob Hash="85dafc29a96addaf3c690148e3c542179260021b" Size="4547" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="328720" />
|
||||
<Blob Hash="85dc24bc5e69d118bfa2db2540a075073af8ca8b" Size="1321" PackHash="435b84318b43c1178e4eb52628fb46a39961b284" PackOffset="103669" />
|
||||
<Blob Hash="85dfe63c56527f5f18a88b8d505d20a75163a37b" Size="38912" PackHash="a5a4b35f662228caee7476ddab2567611de6c35c" PackOffset="67592" />
|
||||
<Blob Hash="85e0f1770f8fc40b78ad2a2731c8aa212cc3cd0d" Size="806" PackHash="3d3afde190b4b5b2706d73b9557dacb2c6a0f036" PackOffset="2093461" />
|
||||
@@ -39623,7 +39626,7 @@
|
||||
<Blob Hash="92d60351f9c44b0125086e9297642b1f5a1c3feb" Size="9511" PackHash="4df09dedb5c89d210947d966cbedfbc6267aa7e2" PackOffset="2086961" />
|
||||
<Blob Hash="92d90c65d52c9a022ff903661487aa8d4ae46b21" Size="40200" PackHash="d25faf54b177d399192ede835440a8eb4948ab59" PackOffset="1647553" />
|
||||
<Blob Hash="92db0ae3618d21dda5e37be60ccc2a508591f063" Size="903" PackHash="af724a067c425dce4dc52010f00800d056379846" PackOffset="2065366" />
|
||||
<Blob Hash="92df07d01555785fcf6e81e45aee66427e6570dd" Size="3852" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="243994" />
|
||||
<Blob Hash="92df07d01555785fcf6e81e45aee66427e6570dd" Size="3852" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="341304" />
|
||||
<Blob Hash="92e44f68ec1babc9c5416b65c3132c8114aa4abb" Size="1640" PackHash="e70061ffc85b6027a648cac0b1c8c6ef7d4e3106" PackOffset="1938858" />
|
||||
<Blob Hash="92ec423b635879d59d6bc5167db35d83d0c3c010" Size="22785" PackHash="aa77d10dffb0ca8e30717f47444dbf9b98bcd8eb" PackOffset="2023849" />
|
||||
<Blob Hash="92eed42c4750581e7e8dd5c5a2ccef2927e6d3c1" Size="1579" PackHash="0eeebc46a6626ca5c135c498582ba13cc3e72586" PackOffset="593258" />
|
||||
@@ -41437,7 +41440,7 @@
|
||||
<Blob Hash="abb7a8060c4c0cb0b93191d85a54f9236c6a3765" Size="4994" PackHash="504c0a6da5f49d4bcd18f11ee59db45e32d6c143" PackOffset="99930" />
|
||||
<Blob Hash="abbf6265dddfd24d363232b856e300cde70f2ba5" Size="3468" PackHash="e458507f455e3bac9232d632426fc4b75f29841d" PackOffset="2055489" />
|
||||
<Blob Hash="abc12d2ac88322621266560cdc4592e9bc93403c" Size="56320" PackHash="0055e020f7505cf021eb66b73e3a8fa3cc308b05" PackOffset="1671267" />
|
||||
<Blob Hash="abc291c95d8f3470242f01609e177ecab88dbc22" Size="9091" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="271530" />
|
||||
<Blob Hash="abc291c95d8f3470242f01609e177ecab88dbc22" Size="9091" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="368840" />
|
||||
<Blob Hash="abc308f3e1788a4c35d26acdf5f44ac95ca00aa9" Size="362455" PackHash="583a63084ffb332c04044b7d60b05fd70cd30f4b" PackOffset="1321257" />
|
||||
<Blob Hash="abc4bbcffd354b8f70bdab56186b2c302671c227" Size="4584" PackHash="7491079d020d11f40f14eb94536fe09006ff2c16" PackOffset="2033540" />
|
||||
<Blob Hash="abca07ce9654bc49589d6a9dbc654f425d6ecaa4" Size="204672" PackHash="2ea1acac8711794581768a72ebb58e12c8afe508" PackOffset="8" />
|
||||
@@ -41567,7 +41570,6 @@
|
||||
<Blob Hash="ad6c0b900f3817eced54eb0098b5ef33dc9927cd" Size="51693" PackHash="4022d82d143e72ccce04e7825d3328a7b02fc901" PackOffset="426121" />
|
||||
<Blob Hash="ad6cc81566166bee2f23d6a9a14c1b38b6ccb767" Size="2825644" PackHash="8d63784005e297e4c94f9dc0c44da6404f7c22d1" PackOffset="8" />
|
||||
<Blob Hash="ad6ddf34aa15386247d4a871b6e6123e376833f8" Size="22527" PackHash="a4fd3b154d528d1625a83bf01c58f824bf78252e" PackOffset="1548204" />
|
||||
<Blob Hash="ad6e09e7dac8390583f42272278c17fcd2d8fda9" Size="41304" PackHash="4adf92b4c6c9666b70b0559298f2d3a1b6d2baf5" PackOffset="8" />
|
||||
<Blob Hash="ad6ee7494bd870eb02c19f64a2e1b59e23fb6c16" Size="130130" PackHash="e7c0d839f4862a30228ee915487ecd9f9b7c6554" PackOffset="1919335" />
|
||||
<Blob Hash="ad6f1788310a3a5a761873fef1a32416b7dbca89" Size="8558" PackHash="b8b36b31df40a1fc9087e4b313999fcda60845cc" PackOffset="1639178" />
|
||||
<Blob Hash="ad76303bfb96e647a724a4b9bd19ff9b102891c7" Size="58950" PackHash="993a6f12f18038e786994acdf2c5b1b614705b6e" PackOffset="252" />
|
||||
@@ -42989,7 +42991,7 @@
|
||||
<Blob Hash="c0b8d706afa895e4096bc348199cb4e02f6882be" Size="281376" PackHash="e7c0d839f4862a30228ee915487ecd9f9b7c6554" PackOffset="1415613" />
|
||||
<Blob Hash="c0bcebbd7198e55822be80f862308c67449f92bf" Size="196623" PackHash="6528d9c32ea9fb0a1246406c896c093cadd188be" PackOffset="1682692" />
|
||||
<Blob Hash="c0bf63903bf06552090c3d15232cf78f649c981d" Size="3877" PackHash="5e7d96af5e5b1cafa670bd77ae918457a118f7a5" PackOffset="163182" />
|
||||
<Blob Hash="c0c004857066f176b2e6640475c57a923b69cf46" Size="3122" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="263447" />
|
||||
<Blob Hash="c0c004857066f176b2e6640475c57a923b69cf46" Size="3122" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="360757" />
|
||||
<Blob Hash="c0c3585b9346b9af65d9f29754fd04ae79e1e61a" Size="486168" PackHash="29eae01c452b3ae340b64ad4266ea1152b4e6729" PackOffset="8" />
|
||||
<Blob Hash="c0c6c31575f4dab738369bf1d9c364dbff95b4bf" Size="350" PackHash="e458507f455e3bac9232d632426fc4b75f29841d" PackOffset="2083600" />
|
||||
<Blob Hash="c0cc17b8e6289f49afe77148796b16b62c1ec125" Size="23716" PackHash="33d0a2949662b327b35a881192e85107ecafc8ac" PackOffset="318280" />
|
||||
@@ -43284,7 +43286,7 @@
|
||||
<Blob Hash="c48195cf9250fc6d5dbe82800a99b9515dd689a8" Size="6080" PackHash="67f9a57842391bca1072e56b907d2adde02d2d34" PackOffset="2059602" />
|
||||
<Blob Hash="c4822d8d605ad956841c48c18a093921795d6859" Size="2930" PackHash="cb73a430e097bac42d93ec902203b7888ed0b681" PackOffset="445916" />
|
||||
<Blob Hash="c483961dc5bfe48ac569b9ee6705de4fa8bab3ce" Size="1514" PackHash="0e0fc56444fa93555de76ff8aaa98b0bd94a186d" PackOffset="2061676" />
|
||||
<Blob Hash="c4846aac3b99280e97b2c865360a460fdf4bd60f" Size="3831" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="235957" />
|
||||
<Blob Hash="c4846aac3b99280e97b2c865360a460fdf4bd60f" Size="3831" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="333267" />
|
||||
<Blob Hash="c4865afd2ec4460c5bcdacc6a625fadba5e97a00" Size="94" PackHash="c0bd7faa171ad74be5b72c3a97dd4271931e266b" PackOffset="2086768" />
|
||||
<Blob Hash="c487c6edf02f0e63da0e57119461337d42474d8f" Size="2480" PackHash="2631f487c5e698c5e0213f447e9542366eaca8ba" PackOffset="2091746" />
|
||||
<Blob Hash="c488502db82c703e1370e3638ec807c1e1cd94e6" Size="340277" PackHash="8eac56bd8c8cee088d0978068da9b9aefd77c5a3" PackOffset="540455" />
|
||||
@@ -44084,7 +44086,6 @@
|
||||
<Blob Hash="cee463779cfd70313c01e400467b7e27e8d275ae" Size="98196" PackHash="7e504e731d99b59de57d71becdb34fce6d198dec" PackOffset="190298" />
|
||||
<Blob Hash="cee9b9eb667fdea8190b8175d436b7f7065c9df3" Size="29239" PackHash="a5e99282914b18ad1dbc72e0b8323e977d746d08" PackOffset="1823398" />
|
||||
<Blob Hash="ceec955cf5fca5677f773cd8c42bb7eae1a96b5f" Size="693" PackHash="d67cb445f37637410f670b1d8682dcf22ced07ae" PackOffset="372692" />
|
||||
<Blob Hash="cefa61d5f12f7ffcc792535c1720de7ab60e1fcf" Size="20729" PackHash="4b7f431eef119ccdba22d4c2574663e160b8a91c" PackOffset="49527" />
|
||||
<Blob Hash="cefc01cb07d874022510248b7c2f132364af4c9a" Size="9192" PackHash="33d0a2949662b327b35a881192e85107ecafc8ac" PackOffset="496684" />
|
||||
<Blob Hash="cefea4b949fd7d77ee57f472f0375bf0e19b6498" Size="28204" PackHash="077b2d38582f0b10f5b7abbe23141dae500a4a90" PackOffset="1277209" />
|
||||
<Blob Hash="cf063d6270380694ef9d08c7554a58750f25befd" Size="52186" PackHash="2f3b66c8bc4bc7ba4a38982c19f7aea56a40fa44" PackOffset="1811523" />
|
||||
@@ -44129,7 +44130,7 @@
|
||||
<Blob Hash="cfa1ba2ce33f0c776abf98dc1093aaa5b50bc95e" Size="7275" PackHash="2f13e90048446b62f7b075e0a79209d62ee1b054" PackOffset="2080578" />
|
||||
<Blob Hash="cfa52e8482435c4a5530da795b593c8b68226079" Size="195" PackHash="e8c3e90942a5b288720c462500e119088f07598b" PackOffset="1249554" />
|
||||
<Blob Hash="cfa852ea23806341333378c673277dbfb5fc3f27" Size="3812" PackHash="fc72803a9439e161de25108be11e5429ed900f77" PackOffset="706826" />
|
||||
<Blob Hash="cfa8b5faa3c85b8772fb80c36683758da5436882" Size="5069" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="226341" />
|
||||
<Blob Hash="cfa8b5faa3c85b8772fb80c36683758da5436882" Size="5069" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="323651" />
|
||||
<Blob Hash="cfadb5f0a909cb5a788582a6123fc2acc2318018" Size="2141" PackHash="f583c0aed25a4020915efb60751fb8324d3bd971" PackOffset="2082271" />
|
||||
<Blob Hash="cfae25aa8913d083722900a1aba9293da7aa534b" Size="3464" PackHash="59c4bec5e2957d30ef37c5198c4b90381f3ba20f" PackOffset="753727" />
|
||||
<Blob Hash="cfae4d4817868637258a427e520c470396f7fc2f" Size="6702" PackHash="0255260ee4d81de161e877cdcc3af4d7fcf8d0e3" PackOffset="315313" />
|
||||
@@ -45031,7 +45032,7 @@
|
||||
<Blob Hash="dbd01c8eda1400eeca13b7985fa2dbd0285b886f" Size="88" PackHash="33d0a2949662b327b35a881192e85107ecafc8ac" PackOffset="1010496" />
|
||||
<Blob Hash="dbd9915a84f237102ceac1573ecdfd99805d0cf2" Size="490014" PackHash="b184d847c73d6d023a1fa8fd14420557267af75b" PackOffset="683958" />
|
||||
<Blob Hash="dbdd58c7fd195fc602c4541d6f416cc96094c121" Size="8024" PackHash="b8b36b31df40a1fc9087e4b313999fcda60845cc" PackOffset="1990189" />
|
||||
<Blob Hash="dbe3974bf27486cfdfee11c2395c05b994f4f091" Size="2575" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="300186" />
|
||||
<Blob Hash="dbe3974bf27486cfdfee11c2395c05b994f4f091" Size="2575" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="377931" />
|
||||
<Blob Hash="dbe409fb15def09f5a85213e79864d7a19643770" Size="29868" PackHash="15c1c1820f17cbc99a977498d87549e3b4060f7c" PackOffset="115176" />
|
||||
<Blob Hash="dbe4122c6758eefba8f2ff2c73cb099128ffee28" Size="9" PackHash="77e35cfb8539a11b247fa724909ef74bb3faa379" PackOffset="2096579" />
|
||||
<Blob Hash="dbe45539283bf86193200298a799fc0ba2755e01" Size="205312" PackHash="e02ceffa7dbf58acfed245113d911e454ca80807" PackOffset="658952" />
|
||||
@@ -45571,7 +45572,6 @@
|
||||
<Blob Hash="e3068c57ae2229cf0cb0ddba769520ece3502c46" Size="147" PackHash="b8b36b31df40a1fc9087e4b313999fcda60845cc" PackOffset="1257146" />
|
||||
<Blob Hash="e307d9064a47f64347b67bfc521f7354fdf29bf5" Size="39575" PackHash="62e18e2b34d9ca5872cacacfd6eb9e94afd0eb2e" PackOffset="1791418" />
|
||||
<Blob Hash="e311d70098af5348980f376d8f5b3d908266295c" Size="82965" PackHash="0efa3dcc442cd6815f2f720c105c1a7f016e5474" PackOffset="270839" />
|
||||
<Blob Hash="e31b8ffab60cdd24a429f7c518e4b83150d2fe2d" Size="49777" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="8" />
|
||||
<Blob Hash="e32a962ee1eeec946b6e292ff228cd670450a5bf" Size="6431" PackHash="0c445f80a2ecf9c21997b82ec24629626b390c41" PackOffset="1545591" />
|
||||
<Blob Hash="e32ec5d551c31d04cbf4da3538c9d424856b7ccc" Size="1508" PackHash="f583c0aed25a4020915efb60751fb8324d3bd971" PackOffset="2095350" />
|
||||
<Blob Hash="e3344777342b47cb0929b6ab5b9317baca956c76" Size="1214" PackHash="4b7f431eef119ccdba22d4c2574663e160b8a91c" PackOffset="1411359" />
|
||||
@@ -45644,6 +45644,7 @@
|
||||
<Blob Hash="e42fa27893d79d0b452990d4711bfa35dd035b13" Size="138204" PackHash="70a32db151b77e2f721ed08a9e712bb4cfd260d3" PackOffset="1232631" />
|
||||
<Blob Hash="e430792cb58f6f568f40e28de71aaa6c399ee2c2" Size="52" PackHash="c0bd7faa171ad74be5b72c3a97dd4271931e266b" PackOffset="2086716" />
|
||||
<Blob Hash="e4393dcf44750e6b205158cadeb5dbb002c8cdea" Size="1299522" PackHash="e817ca9104379dfa75233081d3d42cccbf3cb21f" PackOffset="8" />
|
||||
<Blob Hash="e43b6fa7c1b72e7f3f680238bdafd0145a2244a4" Size="33578" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="108161" />
|
||||
<Blob Hash="e44565503660cacef34045d75925cc3394dd3b57" Size="8009" PackHash="926540c5a0b84439444ce2305aa3737763bb95a3" PackOffset="1916082" />
|
||||
<Blob Hash="e44d4a2d8d32cc158c792bed375da895df66ade0" Size="674200" PackHash="cbd57862f9e6e563145e50b34acef65f589a6c22" PackOffset="659148" />
|
||||
<Blob Hash="e451351d8d91d6320ba31749f1cfb0a040fc90d1" Size="3651" PackHash="12d213957fbfe643a97d5072b1f6ae30aeebcbb7" PackOffset="1673168" />
|
||||
@@ -46145,7 +46146,6 @@
|
||||
<Blob Hash="ea757f9eb6d99360fc0b3ada77a813e896de18c3" Size="19115" PackHash="504c0a6da5f49d4bcd18f11ee59db45e32d6c143" PackOffset="169369" />
|
||||
<Blob Hash="ea7660fc18188c92b80f55970b556ba001e04995" Size="62881" PackHash="fb8c31646887718de45e229d7015c658f3c1bf5e" PackOffset="414648" />
|
||||
<Blob Hash="ea7ec2e57641a207d7a86effa8f724e9f8b3342a" Size="2775" PackHash="cb73a430e097bac42d93ec902203b7888ed0b681" PackOffset="714265" />
|
||||
<Blob Hash="ea84deef96ae8b9dd97306a4e420c34fffbd33ad" Size="35397" PackHash="4bb6349baec89b4c87d19f5576824f714a9e50ca" PackOffset="32818" />
|
||||
<Blob Hash="ea940cefad9ca4d7e165efa09eaf28b312f64ee0" Size="17920" PackHash="5b3005b0c21940273d4cc8a4720482f003e8bb3b" PackOffset="1114840" />
|
||||
<Blob Hash="ea9484c1382cb3acb0bd570ee4fb015494df63e9" Size="3568" PackHash="89550f66a2a48a9f1b9089703e9b33eb14a23ae5" PackOffset="1237589" />
|
||||
<Blob Hash="ea99928aad98fcc9fa457cf96d212cfdb44f3f04" Size="5423" PackHash="fc72803a9439e161de25108be11e5429ed900f77" PackOffset="438423" />
|
||||
@@ -47207,7 +47207,7 @@
|
||||
<Blob Hash="f807a3f84baa77f7ddab5f3054d7e15dae724bbe" Size="18506" PackHash="4b68b1eb2767528f8817b77879c7a9158dd40b22" PackOffset="410899" />
|
||||
<Blob Hash="f808183d52fdc4998c4eed5cfc6be28e5bfda048" Size="327506" PackHash="c594efd9ea8b4dee5949283c972b5f0992c20f4e" PackOffset="1260214" />
|
||||
<Blob Hash="f8112565817277081833c0d537cc7306aa7bce7c" Size="112" PackHash="1d09bb4f8ba502cef13de6d570839e6790bf3542" PackOffset="1706080" />
|
||||
<Blob Hash="f8135a19ab3dd88c4e0157c64878495607852267" Size="4513" PackHash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" PackOffset="255078" />
|
||||
<Blob Hash="f8135a19ab3dd88c4e0157c64878495607852267" Size="4513" PackHash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" PackOffset="352388" />
|
||||
<Blob Hash="f8144cd83bc5b5eb7c348573e515be10d70d9365" Size="21800" PackHash="5b3005b0c21940273d4cc8a4720482f003e8bb3b" PackOffset="253872" />
|
||||
<Blob Hash="f8165cfcc6a692f6bd2abb2335e0765f22cbe076" Size="22580" PackHash="2f143d8520d94bbf2cb250b35a8f79e3d3e8572c" PackOffset="1395776" />
|
||||
<Blob Hash="f8220e49c24fd3065dd35aeb29b65524fb3f5c88" Size="1468" PackHash="02f911003167be7b08c3fbf9bdababa124958f48" PackOffset="998563" />
|
||||
@@ -48921,7 +48921,6 @@
|
||||
<Pack Hash="7f71721b1137c69284b129b62faab352613a6878" Size="9170952" CompressedSize="2784128" RemotePath="2941462-bc7508e880884c49aaa0481bd9dc3ce4" />
|
||||
<Pack Hash="7f803418abf666f218e4fb96356d31245386d150" Size="2565268" CompressedSize="499636" RemotePath="3057215-a8cb2a7c3e8f42118ccdeba68eee51ec" />
|
||||
<Pack Hash="7f8b724b75c6f29c33f33a1f310cb495e079aaa1" Size="2106179" CompressedSize="2105793" RemotePath="2487260-b428468bcd6545bfbb79f02a6605b9ef" />
|
||||
<Pack Hash="7fc5dda654db28eeafb73eac158a0e7f9b8db967" Size="302761" CompressedSize="48742" RemotePath="3032739-f14a11ddb6824c5faecaac0a918edbbd" />
|
||||
<Pack Hash="7fccc82f9be0fa0f6e6261d3f42e4d4ceffd3373" Size="12083912" CompressedSize="3554327" RemotePath="2823453-a1a8970ad3b340dab4a39033489ea93b" />
|
||||
<Pack Hash="7fe64241b07105e31272f224ac763156f8b8296c" Size="5159922" CompressedSize="1274332" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
|
||||
<Pack Hash="7fef45bde9cd95e88de4acafea48670342c66480" Size="1210459" CompressedSize="1208768" RemotePath="2943240-c2a9d38c57e7438db3f8ee61341bdcec" />
|
||||
@@ -49391,6 +49390,7 @@
|
||||
<Pack Hash="b3374cffdc53a6ef70b1548fc15bdce8028a8568" Size="8001174" CompressedSize="2277343" RemotePath="2823453-a1a8970ad3b340dab4a39033489ea93b" />
|
||||
<Pack Hash="b33dbe936d08959ce00d8d551c9861052b05a0e3" Size="2005160" CompressedSize="420491" RemotePath="2468936-39e1c39556f84e60be8d850c452aed67" />
|
||||
<Pack Hash="b340df79902aa136e855ea8c79563a6004843491" Size="6146812" CompressedSize="1207197" RemotePath="2823453-a1a8970ad3b340dab4a39033489ea93b" />
|
||||
<Pack Hash="b3601b8dd175b9ae50d3e89ee8acc3f3926bc447" Size="380506" CompressedSize="63395" RemotePath="3058822-e4dcfa8945ff4ed793f3cc8ab59f68c1" />
|
||||
<Pack Hash="b3643e64562cf8928fe74794820c500f305fac17" Size="3846950" CompressedSize="1070791" RemotePath="2604938-a9e6e886491749ef99155ebfe50a18fa" />
|
||||
<Pack Hash="b38e92132b3781a0b91304d588fe987368db4b5e" Size="12954632" CompressedSize="2965249" RemotePath="2902827-fcb0d018c7244c24a109c548187a724e" />
|
||||
<Pack Hash="b3a267c43c45f392523e300a6f61318f4ae52d99" Size="42449972" CompressedSize="7029285" RemotePath="2746340-c2a61f9b32ff472ab773585edac060ee" />
|
||||
|
||||
@@ -1,38 +1,34 @@
|
||||
<?xml version='1.0' ?>
|
||||
<BuildGraph xmlns="http://www.epicgames.com/BuildGraph" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.epicgames.com/BuildGraph ../../Engine/Build/Graph/Schema.xsd" >
|
||||
|
||||
<!-- Directory to output Installed files to -->
|
||||
<Property Name="LocalInstalledDir" Value="$(RootDir)\LocalBuilds\Installed\Windows"/>
|
||||
<Property Name="LocalInstalledDirMac" Value="$(RootDir)/LocalBuilds/Installed/Mac"/>
|
||||
|
||||
<!-- Set base directory for output from installed builds if not already specified -->
|
||||
<Property Name="OutputDir" Default="$(RootDir)\LocalBuilds\PublishedInstall"/>
|
||||
<Property Name="OutputDirMac" Default="$(RootDir)/LocalBuilds/PublishedInstall"/>
|
||||
<!-- The output directory to store zip files and full symbols -->
|
||||
<Option Name="PublishDir" DefaultValue="$(RootDir)/LocalBuilds/Engine" Description="Root directory to contain published builds and symbols"/>
|
||||
|
||||
<!-- Create Labelled Directory to place published builds if specified -->
|
||||
<Property Name="BuildLabel" Default=""/>
|
||||
<Property Name="LabeledBuildDir" Value="$(BuildLabel)"/>
|
||||
<Property Name="LabeledBuildDir" Value="$(LabeledBuildDir)/" If="'$(LabeledBuildDir)' != '' And !HasTrailingSlash('$(LabeledBuildDir)')"/>
|
||||
<Property Name="PublishedInstallDir" Value="$(OutputDir)/Engine/$(LabeledBuildDir)Windows"/>
|
||||
<Property Name="PublishedInstallDirMac" Value="$(OutputDirMac)/Engine/$(LabeledBuildDir)Mac"/>
|
||||
<!-- Setup default target platforms for Installed build if they haven't been specified on the commandline -->
|
||||
<Option Name="WithWin64" Restrict="true|false" DefaultValue="true" Description="Include the Win64 target platform"/>
|
||||
<Option Name="WithWin32" Restrict="true|false" DefaultValue="true" Description="Include the Win32 target platform"/>
|
||||
<Option Name="WithMac" Restrict="true|false" DefaultValue="true" Description="Include the Mac target platform"/>
|
||||
<Option Name="WithAndroid" Restrict="true|false" DefaultValue="true" Description="Include the Android target platform"/>
|
||||
<Option Name="WithIOS" Restrict="true|false" DefaultValue="true" Description="Include the iOS target platform"/>
|
||||
<Option Name="WithTVOS" Restrict="true|false" DefaultValue="true" Description="Include the tvOS target platform"/>
|
||||
<Option Name="WithLinux" Restrict="true|false" DefaultValue="true" Description="Include the Linux target platform"/>
|
||||
<Option Name="WithHTML5" Restrict="true|false" DefaultValue="true" Description="Include the HTML5 target platform"/>
|
||||
<Option Name="WithPS4" Restrict="true|false" DefaultValue="false" Description="Include the PS4 target platform"/>
|
||||
<Option Name="WithXboxOne" Restrict="true|false" DefaultValue="false" Description="Include the XboxOne target platform"/>
|
||||
|
||||
<!-- Whether to create a prebuilt DDC -->
|
||||
<Option Name="WithDDC" Restrict="true|false" DefaultValue="true" Description="Build a standalone derived-data cache for the engine content and templates" />
|
||||
|
||||
<!-- The analytics type -->
|
||||
<Option Name="AnalyticsTypeOverride" DefaultValue="" Description="Identifier for analytic events to send"/>
|
||||
|
||||
<!-- The local output directory -->
|
||||
<Property Name="LocalInstalledDir" Value="$(RootDir)/LocalBuilds/Engine/Windows"/>
|
||||
<Property Name="LocalInstalledDirMac" Value="$(RootDir)/LocalBuilds/Engine/Mac"/>
|
||||
|
||||
<!-- Directory for storing build products like the Compressed DDC, Stripped and Signed files -->
|
||||
<Property Name="SavedOutput" Value="$(RootDir)/Saved"/>
|
||||
|
||||
<!-- Setup default target platforms for Installed build if they haven't been specified on the commandline -->
|
||||
<Property Name="WithWin64" Default="true"/>
|
||||
<Property Name="WithWin32" Default="true"/>
|
||||
<Property Name="WithMac" Default="true"/>
|
||||
<Property Name="WithAndroid" Default="true"/>
|
||||
<Property Name="WithIOS" Default="true"/>
|
||||
<Property Name="WithTVOS" Default="true"/>
|
||||
<Property Name="WithLinux" Default="true"/>
|
||||
<Property Name="WithHTML5" Default="true"/>
|
||||
<Property Name="WithPS4" Default="false"/>
|
||||
<Property Name="WithXboxOne" Default="false"/>
|
||||
|
||||
<Property Name="WithDDC" Default="true"/>
|
||||
|
||||
<!-- Architectures that we build for Android -->
|
||||
<Property Name="AndroidArchitectures" Value="armv7+arm64"/>
|
||||
<Property Name="AndroidGPUArchitectures" Value="es2"/>
|
||||
@@ -265,7 +261,7 @@
|
||||
</Node>
|
||||
</Agent>
|
||||
|
||||
<Property Name="CookPlatformsWin64" Default="Windows"/>
|
||||
<Property Name="CookPlatformsWin64" Value="Windows"/>
|
||||
<Property Name="CookPlatformsWin64" Value="$(CookPlatformsWin64)+WindowsNoEditor" If="'$(WithWin64)' == true Or '$(WithWin32)' == true"/>
|
||||
<Property Name="CookPlatformsWin64" Value="$(CookPlatformsWin64)+Android_ATC" If="'$(WithAndroid)' == true"/>
|
||||
<Property Name="CookPlatformsWin64" Value="$(CookPlatformsWin64)+IOS" If="'$(WithIOS)' == true"/>
|
||||
@@ -308,7 +304,7 @@
|
||||
</Node>
|
||||
</Agent>
|
||||
|
||||
<Property Name="CookPlatformsMac" Default="Mac"/>
|
||||
<Property Name="CookPlatformsMac" Value="Mac"/>
|
||||
<Property Name="CookPlatformsMac" Value="$(CookPlatformsMac)+MacNoEditor" If="'$(WithMac)' == true"/>
|
||||
<Property Name="CookPlatformsMac" Value="$(CookPlatformsMac)+Android_ATC" If="'$(WithAndroid)' == true"/>
|
||||
<Property Name="CookPlatformsMac" Value="$(CookPlatformsMac)+IOS" If="'$(WithIOS)' == true"/>
|
||||
@@ -452,7 +448,6 @@
|
||||
<Tag Files="#UE4Game HTML5;#UE4Game HTML5 Includes" With="#Installed Win64"/>
|
||||
<Property Name="CopyInstalledFilter" Value="$(CopyInstalledFilter);$(CopyHTML5Filter)"/>
|
||||
<Property Name="CopyInstalledExceptions" Value="$(CopyInstalledExceptions);$(CopyHTML5Exceptions)"/>
|
||||
<Property Name="CopyInstalledFilter" Value="$(CopyInstalledFilter);Engine/Source/ThirdParty/HTML5/emsdk/Win64/..."/>
|
||||
</Do>
|
||||
<Do If="'$(WithPS4)' == true">
|
||||
<Tag Files="#UE4Game PS4;#UE4Game PS4 Includes" With="#Installed Win64"/>
|
||||
@@ -552,7 +547,7 @@
|
||||
<Zip FromDir="$(LocalInstalledDir)" Files="#EditorOnly" ZipFile="EditorInstall.zip" Tag="#Zipped Installs"/>
|
||||
|
||||
<!-- Copy the files to their final location -->
|
||||
<Copy Files="#Zipped Installs" FromDir="$(RootDir)" ToDir="$(PublishedInstallDir)"/>
|
||||
<Copy Files="#Zipped Installs" FromDir="$(RootDir)" ToDir="$(PublishDir)/WindowsZips"/>
|
||||
<Delete Files="#Zipped Installs"/>
|
||||
</Node>
|
||||
|
||||
@@ -568,7 +563,7 @@
|
||||
<Node Name="Publish Installed Symbols Win64" Requires="$(SymbolRequirements)">
|
||||
<!-- Also include all of the DotNET binaries -->
|
||||
<Tag Files="Engine/Binaries/DotNET/...;$(SymbolRequirements)" Filter="*.pdb;*.dsym;*.map;*.exe;*.dll" Except=".../Binaries/Mac/..." With="#Symbols To Publish"/>
|
||||
<Copy Files="#Symbols To Publish" FromDir="$(RootDir)" ToDir="$(PublishedInstallDir)Symbols"/>
|
||||
<Copy Files="#Symbols To Publish" FromDir="$(RootDir)" ToDir="$(PublishDir)/WindowsSymbols"/>
|
||||
</Node>
|
||||
</Agent>
|
||||
|
||||
@@ -653,7 +648,6 @@
|
||||
<Tag Files="#UE4Game HTML5;#UE4Game HTML5 Includes" With="#Installed Mac"/>
|
||||
<Property Name="CopyInstalledFilter" Value="$(CopyInstalledFilter);$(CopyHTML5Filter)"/>
|
||||
<Property Name="CopyInstalledExceptions" Value="$(CopyInstalledExceptions);$(CopyHTML5Exceptions)"/>
|
||||
<Property Name="CopyInstalledFilter" Value="$(CopyInstalledFilter);Engine/Source/ThirdParty/HTML5/emsdk/Mac/..."/>
|
||||
</Do>
|
||||
|
||||
<!-- Tag any dependencies from all previous build products -->
|
||||
@@ -733,7 +727,7 @@
|
||||
<Zip FromDir="$(LocalInstalledDirMac)" Files="#EditorOnly" ZipFile="EditorInstall_OnMac.zip" Tag="#Zipped Installs"/>
|
||||
|
||||
<!-- Copy the files to their final location -->
|
||||
<Copy Files="#Zipped Installs" FromDir="$(RootDir)" ToDir="$(PublishedInstallDirMac)"/>
|
||||
<Copy Files="#Zipped Installs" FromDir="$(RootDir)" ToDir="$(PublishDir)/MacZips"/>
|
||||
<Delete Files="#Zipped Installs"/>
|
||||
</Node>
|
||||
|
||||
@@ -747,7 +741,7 @@
|
||||
|
||||
<Node Name="Publish Installed Symbols Mac" Requires="$(SymbolRequirements)">
|
||||
<Tag Files="$(SymbolRequirements)" Filter="*.pdb;*.dsym;*.map;*.exe;*.dll" Except=".../Binaries/Win64/...;.../Binaries/Win32/..." With="#Symbols To Publish"/>
|
||||
<Copy Files="#Symbols To Publish" FromDir="$(RootDir)" ToDir="$(PublishedInstallDirMac)Symbols"/>
|
||||
<Copy Files="#Symbols To Publish" FromDir="$(RootDir)" ToDir="$(PublishDir)/MacSymbols"/>
|
||||
</Node>
|
||||
</Agent>
|
||||
|
||||
|
||||
@@ -1,315 +0,0 @@
|
||||
[CopyEditor]
|
||||
; Tool dependencies
|
||||
/Engine/Binaries/DotNET/Ionic.Zip.Reduced.dll
|
||||
/Engine/Binaries/DotNET/OneSky.dll
|
||||
|
||||
; DDC
|
||||
-/Engine/DerivedDataCache/...
|
||||
/Engine/DerivedDataCache/Compressed.ddp
|
||||
|
||||
; In-editor documentation
|
||||
/Engine/Documentation/Source/Shared/...
|
||||
|
||||
; Content folders
|
||||
/Engine/Content/...
|
||||
-/Engine/Content/....psd
|
||||
-/Engine/Content/....pdn
|
||||
-/Engine/Content/....fbx
|
||||
-/Engine/Content/....po
|
||||
|
||||
; Config files
|
||||
/Engine/Config/...
|
||||
-/Engine/Config/....vdf
|
||||
/Engine/Programs/...
|
||||
-/Engine/Programs/UnrealGameSync/...
|
||||
|
||||
; Plugins
|
||||
/Engine/Plugins/....uplugin
|
||||
/Engine/Plugins/.../Content/...
|
||||
/Engine/Plugins/.../Resources/...
|
||||
/Engine/Plugins/.../Source/...
|
||||
/Engine/Plugins/.../Templates/...
|
||||
-/Engine/Plugins/Runtime/TwitchLiveStreaming/...
|
||||
|
||||
; Exclude Mac binaries on windows here, because previous wildcard for plugin resources matches OSX dsym resources on Windows
|
||||
{Win64} -/Engine/Plugins/.../Binaries/Mac/...
|
||||
|
||||
; Source code
|
||||
/Engine/Source/UE4Game.Target.cs
|
||||
/Engine/Source/UE4Editor.Target.cs
|
||||
/Engine/Source/Runtime/...
|
||||
/Engine/Source/Developer/...
|
||||
/Engine/Source/Editor/...
|
||||
/Engine/Source/ThirdParty/.../*.Build.cs
|
||||
/Engine/Source/ThirdParty/Licenses/...
|
||||
/Engine/Source/Programs/UnrealHeaderTool/...
|
||||
-/Engine/Source/Runtime/SQLiteSupport/...
|
||||
|
||||
; Shaders
|
||||
/Engine/Shaders/...
|
||||
|
||||
; Exclude all the intermediate files in the Engine/Saved folder
|
||||
-/Engine/Saved/...
|
||||
|
||||
; Valid templates will be included by name from the build script, but we need to exclude intermediates
|
||||
-/Templates/*/Binaries/...
|
||||
-/Templates/*/Build/Receipts/...
|
||||
-/Templates/*/Intermediate/...
|
||||
-/Templates/*/DerivedDataCache/...
|
||||
-/Templates/*/Saved/...
|
||||
-/Templates/*/manifest.json
|
||||
-/Templates/*/contents.txt
|
||||
|
||||
; Win64-specific dependencies
|
||||
{Win64} -/Engine/Binaries/Win64/UE4EditorServices.*
|
||||
{Win64} -/Engine/Binaries/Win64/UnrealVersionSelector*
|
||||
{Win64} /Engine/Binaries/ThirdParty/ICU/icu4c-53_1/Win32/VS2015/*
|
||||
{Win64} /Engine/Binaries/ThirdParty/ICU/icu4c-53_1/Win64/VS2015/*
|
||||
{Win64} /Engine/Binaries/ThirdParty/PhysX/PhysX-3.3/Win64/VS2015/*.dll
|
||||
{Win64} -/Engine/Binaries/ThirdParty/PhysX/PhysX-3.3/Win64/VS2015/*DEBUG_x64.dll
|
||||
{Win64} -/Engine/Binaries/ThirdParty/PhysX/PhysX-3.3/Win64/VS2015/*CHECKED_x64.dll
|
||||
{Win64} /Engine/Binaries/ThirdParty/Oculus/Audio/Win64/ovraudio64.dll
|
||||
|
||||
{Win64} /Engine/Binaries/ThirdParty/LeapMotion/...
|
||||
{Win64} /Engine/Binaries/ThirdParty/OSVRClientKit/bin/Win64/...
|
||||
{Win64} /Engine/Plugins/Runtime/LeapMotion/ThirdParty/LeapSDK/...
|
||||
|
||||
{Win64} /Engine/Build/BatchFiles/Build.bat
|
||||
{Win64} /Engine/Build/BatchFiles/Clean.bat
|
||||
{Win64} /Engine/Build/BatchFiles/Rebuild.bat
|
||||
{Win64} /Engine/Build/BatchFiles/RunUAT.bat
|
||||
{Win64} /Engine/Build/BatchFiles/GetVSComnToolsPath.bat
|
||||
{Win64} -/Engine/Build/Receipts/PS4MapFile*
|
||||
{Win64} -/Engine/Build/Receipts/XboxOnePDBFileUtil*
|
||||
{Win64} -/Engine/Build/Receipts/UE4Client-Linux*
|
||||
{Win64} -/Engine/Build/Receipts/UE4EditorServices*
|
||||
{Win64} -/Engine/Build/Receipts/UE4Server-Linux*
|
||||
|
||||
{Win64} /Engine/Extras/3dsMaxScripts/...
|
||||
{Win64} /Engine/Extras/VisualStudioDebugging/UE4.natvis
|
||||
{Win64} /Engine/Extras/Maya_AnimationRiggingTools/MayaTools/...
|
||||
{Win64} /Engine/Extras/MayaVelocityGridExporter/...
|
||||
{Win64} /Engine/Extras/UnrealVS/...
|
||||
{Win64} /Engine/Extras/Redist/en-us/*
|
||||
|
||||
; Mac-specific dependencies
|
||||
{Mac} /Engine/Binaries/ThirdParty/ICU/icu4c-53_1/Mac/*
|
||||
{Mac} /Engine/Binaries/ThirdParty/Mono/Mac/...
|
||||
{Mac} /Engine/Source/ThirdParty/CEF3/cef_binary_3.2357.1291.g47e6d4b_macosx64/Release/locale/...
|
||||
|
||||
{Mac} /Engine/Build/BatchFiles/Mac/Build.sh
|
||||
{Mac} /Engine/Build/BatchFiles/Mac/GenerateLLDBInit.sh
|
||||
{Mac} /Engine/Build/BatchFiles/Mac/FixDependencyFiles.sh
|
||||
{Mac} /Engine/Build/BatchFiles/Mac/GenerateProjectFiles.sh
|
||||
{Mac} /Engine/Build/BatchFiles/Mac/SetupMono.sh
|
||||
{Mac} /Engine/Build/BatchFiles/Mac/FixMonoFiles.sh
|
||||
{Mac} /Engine/Build/BatchFiles/Mac/RunMono.sh
|
||||
{Mac} /Engine/Build/BatchFiles/Mac/RunXBuild.sh
|
||||
{Mac} /Engine/Build/BatchFiles/RunUAT.command
|
||||
{Mac} /Engine/Build/BatchFiles/RunUAT.sh
|
||||
|
||||
{Mac} /Engine/Extras/LLDBDataFormatters/UE4DataFormatters.py
|
||||
{Mac} /Engine/Extras/Maya_AnimationRiggingTools/ArtToolsOSX/...
|
||||
|
||||
; Don't want these folders, even if they're part of ToolsForCompile
|
||||
{Mac} -/Engine/Binaries/Win32/...
|
||||
{Mac} -/Engine/Binaries/Win64/...
|
||||
|
||||
; Linux-specific dependencies
|
||||
{Linux} /Engine/Binaries/ThirdParty/ICU/icu4c-53_1/Linux/...
|
||||
|
||||
{Linux} /Engine/Build/BatchFiles/Linux/Build.sh
|
||||
{Linux} /Engine/Build/BatchFiles/Linux/BuildThirdParty.sh
|
||||
{Linux} /Engine/Build/BatchFiles/Linux/GenerateProjectFiles.sh
|
||||
{Linux} /Engine/Build/BatchFiles/Linux/GitDependencies.sh
|
||||
{Linux} /Engine/Build/BatchFiles/Linux/QASmokeManual.sh
|
||||
{Linux} /Engine/Build/BatchFiles/Linux/RunMono.sh
|
||||
{Linux} /Engine/Build/BatchFiles/Linux/RunXBuild.sh
|
||||
{Linux} /Engine/Build/BatchFiles/Linux/Setup.sh
|
||||
{Linux} /Engine/Build/BatchFiles/Linux/UpdateDeps.sh
|
||||
{Linux} /Engine/Build/BatchFiles/RunUAT.sh
|
||||
|
||||
|
||||
[CopyTargetPlatforms]
|
||||
; API docs
|
||||
/Engine/Documentation/CHM/API.chm
|
||||
|
||||
; Build files
|
||||
/Engine/Build/Build.version
|
||||
/Engine/Build/Target.cs.template
|
||||
|
||||
; Starter content
|
||||
/Samples/StarterContent/Content/...
|
||||
/Samples/MobileStarterContent/Content/...
|
||||
|
||||
; shared template resources
|
||||
/Templates/TemplateResources/...
|
||||
|
||||
[CopyTargetPlatform.Android]
|
||||
; Build files
|
||||
/Engine/Build/Android/...
|
||||
/Engine/Source/ThirdParty/Android/cxa_demangle/...
|
||||
/Engine/Source/ThirdParty/GoogleVR/...
|
||||
/Engine/Source/ThirdParty/Oculus/OculusMobile/SDK_1_0_0/Libs/...
|
||||
-/Engine/Binaries/Android/....apk
|
||||
|
||||
; AndroidWorks installer
|
||||
{Win64} /Engine/Extras/AndroidWorks/Win64/*.exe
|
||||
{Mac} /Engine/Extras/AndroidWorks/Mac/*.dmg
|
||||
|
||||
[CopyTargetPlatform.IOS]
|
||||
; Build files
|
||||
/Engine/Build/IOS/...
|
||||
/Engine/Source/ThirdParty/GoogleVR/...
|
||||
-/Engine/Build/IOS/....psd
|
||||
-/Engine/Build/IOS/....mobileprovision
|
||||
-/Engine/Build/IOS/UnrealRemoteTool
|
||||
|
||||
; Content-only on Win64: exclude things we only need for code projects
|
||||
{Win64} -/Engine/Binaries/IOS/*.a
|
||||
{Win64} -/Engine/Binaries/IOS/.../*.a
|
||||
{Win64} -/Engine/Binaries/IOS/UE4Game
|
||||
{Win64} -/Engine/Binaries/IOS/UE4Game-IOS-Shipping
|
||||
{Win64} -/Engine/Intermediate/.../IOS/...
|
||||
{Win64} -/Engine/Plugins/.../Binaries/IOS/...
|
||||
{Win64} /Engine/Binaries/DotNET/IOS/openssl.exe
|
||||
{Win64} /Engine/Binaries/ThirdParty/IOS/*
|
||||
|
||||
; All tools for Mac
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/DeploymentServer.exe
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/DeploymentServer.exe.config
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/DeploymentInterface.dll
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/DeploymentInterface.dll.config
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/iPhonePackager.exe
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/iPhonePackager.exe.config
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/MobileDeviceInterface.dll
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/MobileDeviceInterface.dll.config
|
||||
{Mac} /Engine/Source/ThirdParty/Facebook/IOS/...
|
||||
|
||||
[CopyTargetPlatform.TVOS]
|
||||
; Build files
|
||||
/Engine/Build/TVOS/...
|
||||
-/Engine/Build/TVOS/....psd
|
||||
-/Engine/Build/TVOS/....mobileprovision
|
||||
|
||||
; Content-only on Win64: exclude things we only need for code projects
|
||||
{Win64} -/Engine/Binaries/TVOS/*.a
|
||||
{Win64} -/Engine/Binaries/TVOS/.../*.a
|
||||
{Win64} -/Engine/Binaries/TVOS/UE4Game
|
||||
{Win64} -/Engine/Binaries/TVOS/UE4Game-TVOS-Shipping
|
||||
{Win64} -/Engine/Intermediate/.../TVOS/...
|
||||
{Win64} -/Engine/Plugins/.../Binaries/TVOS/...
|
||||
{Win64} /Engine/Binaries/DotNET/IOS/openssl.exe
|
||||
{Win64} /Engine/Binaries/ThirdParty/IOS/*
|
||||
|
||||
; All tools for Mac
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/DeploymentServer.exe
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/DeploymentServer.exe.config
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/DeploymentInterface.dll
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/DeploymentInterface.dll.config
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/iPhonePackager.exe
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/iPhonePackager.exe.config
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/MobileDeviceInterface.dll
|
||||
{Mac} /Engine/Binaries/DotNET/iOS/MobileDeviceInterface.dll.config
|
||||
{Mac} /Engine/Source/ThirdParty/Facebook/IOS/...
|
||||
|
||||
[CopyTargetPlatform.HTML5]
|
||||
; Build files
|
||||
/Engine/Build/HTML5/...
|
||||
; SDK
|
||||
/Engine/Source/ThirdParty/HTML5/emsdk/emscripten/...
|
||||
{Win64} /Engine/Source/ThirdParty/HTML5/emsdk/Win64/...
|
||||
{Mac} /Engine/Source/ThirdParty/HTML5/emsdk/Mac/...
|
||||
|
||||
[CopyTargetPlatform.Win32]
|
||||
; Just third party dependencies.
|
||||
/Engine/Binaries/ThirdParty/PhysX/PhysX-3.3/Win32/VS2015/*.dll
|
||||
-/Engine/Binaries/ThirdParty/PhysX/PhysX-3.3/Win32/VS2015/*DEBUG_x86.dll
|
||||
-/Engine/Binaries/ThirdParty/PhysX/PhysX-3.3/Win32/VS2015/*CHECKED_x86.dll
|
||||
|
||||
[CopyTargetPlatform.Linux]
|
||||
; Content-only: include pre-compiled executables manually
|
||||
-/Engine/Binaries/Linux/*
|
||||
/Engine/Binaries/Linux/CrashReportClient
|
||||
/Engine/Binaries/Linux/libopenal.so.1
|
||||
/Engine/Binaries/Linux/UE4Game
|
||||
/Engine/Binaries/Linux/UE4Game.target
|
||||
/Engine/Binaries/Linux/UE4Game-Linux-Shipping
|
||||
/Engine/Binaries/Linux/UE4Game-Linux-Shipping.target
|
||||
/Engine/Binaries/ThirdParty/ICU/icu4c-53_1/Linux/x86_64-unknown-linux-gnu/*.so
|
||||
/Engine/Config/Controller.vdf
|
||||
/Engine/Binaries/ThirdParty/OpenAL/Linux/*
|
||||
/Engine/Binaries/ThirdParty/Steamworks/Steamv132/Linux/*.so
|
||||
|
||||
[StripSymbols.Android]
|
||||
/Engine/Binaries/Android/....a
|
||||
/Engine/Binaries/Android/....so
|
||||
/Engine/Plugins/.../Binaries/Android/....a
|
||||
/Engine/Plugins/.../Binaries/Android/....so
|
||||
|
||||
[StripSymbols.IOS]
|
||||
/Engine/Binaries/IOS/....a
|
||||
/Engine/Plugins/.../Binaries/IOS/....a
|
||||
|
||||
[StripSymbols.TVOS]
|
||||
/Engine/Binaries/TVOS/....a
|
||||
/Engine/Plugins/.../Binaries/TVOS/....a
|
||||
|
||||
[StripSymbols.Mac]
|
||||
/Engine/Binaries/Mac/....a
|
||||
/Engine/Plugins/.../Binaries/Mac/....a
|
||||
|
||||
[StripSymbols.Win32]
|
||||
/Engine/Binaries/Win32/....pdb
|
||||
/Engine/Plugins/.../Binaries/Win32/....pdb
|
||||
|
||||
[StripSymbols.Win64]
|
||||
/Engine/Binaries/Win64/....pdb
|
||||
/Engine/Plugins/.../Binaries/Win64/....pdb
|
||||
{Win64} -/Engine/Binaries/Win64/UE4Editor*.pdb
|
||||
{Win64} -/Engine/Plugins/2D/Paper2D/Binaries/Win64/UE4Editor*.pdb
|
||||
|
||||
[StripSymbols.Linux]
|
||||
/Engine/Binaries/Linux/*.
|
||||
|
||||
[LauncherAttribute.compressed]
|
||||
*.pdb
|
||||
*.lib
|
||||
|
||||
[LauncherAttribute.readonly]
|
||||
/Engine/Source/...
|
||||
|
||||
[LauncherAttribute.tag:editor_symbols]
|
||||
*.pdb
|
||||
*.dsym
|
||||
|
||||
[LauncherAttribute.tag:starter_content]
|
||||
/Samples/StarterContent/...
|
||||
/Samples/MobileStarterContent/...
|
||||
|
||||
[LauncherAttribute.tag:templates]
|
||||
/FeaturePacks/...
|
||||
/Templates/...
|
||||
|
||||
[LauncherAttribute.tag:engine_source]
|
||||
/Engine/Source/....cpp
|
||||
|
||||
[LauncherAttribute.tag:art_tools]
|
||||
/Engine/Extras/3dsMaxScripts/...
|
||||
/Engine/Extras/Maya_AnimationRiggingTools/...
|
||||
/Engine/Extras/MayaVelocityGridExporter/...
|
||||
|
||||
[LauncherAttribute.tag:platform_IOS]
|
||||
/Engine/Binaries/IOS/...
|
||||
|
||||
[LauncherAttribute.tag:platform_Android]
|
||||
/Engine/Binaries/Android/...
|
||||
|
||||
[LauncherAttribute.tag:platform_HTML5]
|
||||
/Engine/Binaries/HTML5/...
|
||||
|
||||
[LauncherAttribute.tag:platform_Linux]
|
||||
/Engine/Binaries/Linux/...
|
||||
|
||||
[LauncherAttribute.tag:platform_TVOS]
|
||||
/Engine/Binaries/TVOS/...
|
||||
@@ -35,8 +35,8 @@
|
||||
<Property Name="ProjectsToBuildDDC" Value="$(ProjectsToBuildDDC);Samples/MobileStarterContent/MobileStarterContent.uproject"/>
|
||||
|
||||
<!-- Define Filters/Exceptions to make it easy to add to them -->
|
||||
<Property Name="CopyEditorFilter" Default=""/>
|
||||
<Property Name="CopyEditorExceptions" Default=""/>
|
||||
<Property Name="CopyEditorFilter" Value=""/>
|
||||
<Property Name="CopyEditorExceptions" Value=""/>
|
||||
|
||||
<!-- Tool dependencies -->
|
||||
<Property Name="CopyEditorFilter" Value="$(CopyEditorFilter);Engine/Binaries/DotNET/Ionic.Zip.Reduced.dll"/>
|
||||
@@ -134,20 +134,20 @@
|
||||
<!-- Target Platform Filters/Exceptions -->
|
||||
|
||||
<!-- Win64 -->
|
||||
<Property Name="CopyWin64Filter" Default=""/>
|
||||
<Property Name="CopyWin64Exceptions" Default=""/>
|
||||
<Property Name="CopyWin64Filter" Value=""/>
|
||||
<Property Name="CopyWin64Exceptions" Value=""/>
|
||||
|
||||
<!-- Win32 -->
|
||||
<Property Name="CopyWin32Filter" Default=""/>
|
||||
<Property Name="CopyWin32Exceptions" Default=""/>
|
||||
<Property Name="CopyWin32Filter" Value=""/>
|
||||
<Property Name="CopyWin32Exceptions" Value=""/>
|
||||
|
||||
<!-- Mac -->
|
||||
<Property Name="CopyMacFilter" Default=""/>
|
||||
<Property Name="CopyMacExceptions" Default=""/>
|
||||
<Property Name="CopyMacFilter" Value=""/>
|
||||
<Property Name="CopyMacExceptions" Value=""/>
|
||||
|
||||
<!-- Android -->
|
||||
<Property Name="CopyAndroidFilter" Default=""/>
|
||||
<Property Name="CopyAndroidExceptions" Default=""/>
|
||||
<Property Name="CopyAndroidFilter" Value=""/>
|
||||
<Property Name="CopyAndroidExceptions" Value=""/>
|
||||
|
||||
<!-- Build Files -->
|
||||
<Property Name="CopyAndroidFilter" Value="$(CopyAndroidFilter);Engine/Build/Android/..."/>
|
||||
@@ -157,8 +157,8 @@
|
||||
<Property Name="CopyAndroidExceptions" Value="$(CopyAndroidExceptions);Engine/Binaries/Android/....apk"/>
|
||||
|
||||
<!-- IOS -->
|
||||
<Property Name="CopyIOSFilter" Default=""/>
|
||||
<Property Name="CopyIOSExceptions" Default=""/>
|
||||
<Property Name="CopyIOSFilter" Value=""/>
|
||||
<Property Name="CopyIOSExceptions" Value=""/>
|
||||
|
||||
<!-- Build Files -->
|
||||
<Property Name="CopyIOSFilter" Value="$(CopyIOSFilter);Engine/Build/IOS/..."/>
|
||||
@@ -167,8 +167,8 @@
|
||||
<Property Name="CopyIOSExceptions" Value="$(CopyIOSExceptions);Engine/Build/IOS/UnrealRemoteTool"/>
|
||||
|
||||
<!-- TVOS -->
|
||||
<Property Name="CopyTVOSFilter" Default=""/>
|
||||
<Property Name="CopyTVOSExceptions" Default=""/>
|
||||
<Property Name="CopyTVOSFilter" Value=""/>
|
||||
<Property Name="CopyTVOSExceptions" Value=""/>
|
||||
|
||||
<!-- Build Files -->
|
||||
<Property Name="CopyTVOSFilter" Value="$(CopyTVOSFilter);Engine/Build/TVOS/..."/>
|
||||
@@ -176,8 +176,8 @@
|
||||
<Property Name="CopyTVOSExceptions" Value="$(CopyTVOSExceptions);Engine/Build/TVOS/....mobileprovision"/>
|
||||
|
||||
<!-- Linux -->
|
||||
<Property Name="CopyLinuxFilter" Default=""/>
|
||||
<Property Name="CopyLinuxExceptions" Default=""/>
|
||||
<Property Name="CopyLinuxFilter" Value=""/>
|
||||
<Property Name="CopyLinuxExceptions" Value=""/>
|
||||
|
||||
<!-- Content only - exclude things we only need for code projects -->
|
||||
<Property Name="CopyLinuxExceptions" Value="$(CopyLinuxExceptions);Engine/Binaries/Linux/....a"/>
|
||||
@@ -187,25 +187,27 @@
|
||||
<Property Name="CopyLinuxFilter" Value="$(CopyLinuxFilter);Engine/Binaries/ThirdParty/ICU/icu4c-53_1/Linux/x86_64-unknown-linux-gnu/*.so"/>
|
||||
|
||||
<!-- HTML5 -->
|
||||
<Property Name="CopyHTML5Filter" Default=""/>
|
||||
<Property Name="CopyHTML5Exceptions" Default=""/>
|
||||
<Property Name="CopyHTML5Filter" Value=""/>
|
||||
<Property Name="CopyHTML5Exceptions" Value=""/>
|
||||
|
||||
<!-- Build Files -->
|
||||
<Property Name="CopyHTML5Filter" Value="$(CopyHTML5Filter);Engine/Build/HTML5/..."/>
|
||||
|
||||
<!-- SDK -->
|
||||
<Property Name="CopyHTML5Filter" Value="$(CopyHTML5Filter);Engine/Source/ThirdParty/HTML5/emsdk/emscripten/..."/>
|
||||
<Property Name="CopyHTML5Filter" Value="$(CopyHTML5Filter);Engine/Extras/ThirdPartyNotUE/emsdk/emscripten/..."/>
|
||||
<Property Name="CopyHTML5Filter" Value="$(CopyHTML5Filter);Engine/Extras/ThirdPartyNotUE/emsdk/Win64/..." If="'$(HostPlatform)' == 'Win64'"/>
|
||||
<Property Name="CopyHTML5Filter" Value="$(CopyHTML5Filter);Engine/Extras/ThirdPartyNotUE/emsdk/Mac/..." If="'$(HostPlatform)' == 'Mac'"/>
|
||||
|
||||
<!-- PS4 -->
|
||||
<Property Name="CopyPS4Filter" Default=""/>
|
||||
<Property Name="CopyPS4Exceptions" Default=""/>
|
||||
<Property Name="CopyPS4Filter" Value=""/>
|
||||
<Property Name="CopyPS4Exceptions" Value=""/>
|
||||
|
||||
<!-- Build Files -->
|
||||
<Property Name="CopyPS4Filter" Value="$(CopyHTML5Filter);Engine/Build/PS4/..."/>
|
||||
|
||||
<!-- XboxOne -->
|
||||
<Property Name="CopyXboxOneFilter" Default=""/>
|
||||
<Property Name="CopyXboxOneExceptions" Default=""/>
|
||||
<Property Name="CopyXboxOneFilter" Value=""/>
|
||||
<Property Name="CopyXboxOneExceptions" Value=""/>
|
||||
|
||||
<!-- Build Files -->
|
||||
<Property Name="CopyXboxOneFilter" Value="$(CopyHTML5Filter);Engine/Build/XboxOne/..."/>
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
+DeviceProfileNameAndTypes=Mac,Mac
|
||||
+DeviceProfileNameAndTypes=MacNoEditor,MacNoEditor
|
||||
+DeviceProfileNameAndTypes=MacServer,MacServer
|
||||
+DeviceProfileNameAndTypes=WinRT,WinRT
|
||||
+DeviceProfileNameAndTypes=Linux,Linux
|
||||
+DeviceProfileNameAndTypes=LinuxNoEditor,LinuxNoEditor
|
||||
+DeviceProfileNameAndTypes=LinuxServer,LinuxServer
|
||||
@@ -434,10 +433,6 @@ BaseProfileName=Mac
|
||||
DeviceType=MacServer
|
||||
BaseProfileName=Mac
|
||||
|
||||
[WinRT DeviceProfile]
|
||||
DeviceType=WinRT
|
||||
BaseProfileName=
|
||||
|
||||
[Linux DeviceProfile]
|
||||
DeviceType=Linux
|
||||
BaseProfileName=
|
||||
|
||||
@@ -115,8 +115,6 @@ static const FPlatformInfo PlatformInfoArray[] = {
|
||||
BuildPlatformInfo(TEXT("AllDesktop"), TEXT("AllDesktop"), LOCTEXT("DesktopTargetPlatDisplay", "Desktop (Win+Mac+Linux)"), EPlatformType::Game, EPlatformFlags::None, FPlatformIconPaths(TEXT("Launcher/DesktopTarget/Platform_Desktop_24x"), TEXT("Launcher/DesktopTarget/Platform_Desktop_128x")), TEXT(""), TEXT(""), EPlatformSDKStatus::Unknown, TEXT(""), false/* see SProjectTargetPlatformSettings::Construct !!!! IsAvailableOnWindows || IsAvailableOnMac || IsAvailableOnLinux*/, TEXT(""), false, true),
|
||||
|
||||
BuildPlatformInfo(TEXT("TVOS"), TEXT("TVOS"), LOCTEXT("TVOSTargetPlatDisplay", "AppleTV"), EPlatformType::Game, EPlatformFlags::None, FPlatformIconPaths(TEXT("Launcher/TVOSTarget/Platform_TVOS_24x"), TEXT("Launcher/TVOSTarget/Platform_TVOS_128x")), TEXT(""), TEXT(""), EPlatformSDKStatus::Unknown, TEXT(""), IsAvailableOnWindows || IsAvailableOnMac, TEXT("TVOS"), false, true),
|
||||
|
||||
//BuildPlatformInfo(TEXT("WinRT"), TEXT("WinRT"), LOCTEXT("WinRT", "Windows RT"), EPlatformType::Game, EPlatformFlags::None, FPlatformIconPaths(TEXT("Launcher/WindowsTarget/Platform_WindowsNoEditor_24x"), TEXT("Launcher/WindowsTarget/Platform_WindowsNoEditor_128x")), TEXT("")),
|
||||
};
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Development|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\..\..\Binaries\DotNET\AutomationScripts\AllDesktop\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Development|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\..\..\Binaries\DotNET\AutomationScripts\Android\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Development|AnyCPU' ">
|
||||
<OutputPath>..\..\..\Binaries\DotNET\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<Optimize>false</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Development|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>..\..\..\..\Binaries\DotNET\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
|
||||
@@ -17,7 +17,6 @@ using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
using Tools.DotNETCommon;
|
||||
using Tools.DotNETCommon.CaselessDictionary;
|
||||
using Tools.DotNETCommon.HarvestEnvVars;
|
||||
|
||||
namespace AutomationTool
|
||||
{
|
||||
|
||||
@@ -144,7 +144,10 @@ namespace AutomationTool
|
||||
HelpMessage += "Parameters: " + Environment.NewLine;
|
||||
HelpMessage += Environment.NewLine;
|
||||
|
||||
HelpMessage += FormatParams(Params, 4, 24);
|
||||
foreach(string Line in FormatParams(Params, 4, 24))
|
||||
{
|
||||
HelpMessage += Line + Environment.NewLine;
|
||||
}
|
||||
}
|
||||
|
||||
Log(HelpMessage);
|
||||
@@ -163,7 +166,7 @@ namespace AutomationTool
|
||||
/// <param name="Indent">Indent from the left hand side</param>
|
||||
/// <param name="DefaultRightPadding">The minimum padding from the start of the param name to the start of the description (resizes with larger param names)</param>
|
||||
/// <returns></returns>
|
||||
static string FormatParams(List<string> Params, int Indent, int DefaultRightPadding)
|
||||
public static IEnumerable<string> FormatParams(IEnumerable<string> Params, int Indent, int DefaultRightPadding)
|
||||
{
|
||||
Dictionary<string, string> ParamDict = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
|
||||
|
||||
@@ -215,8 +218,16 @@ namespace AutomationTool
|
||||
}
|
||||
}
|
||||
|
||||
// results string
|
||||
string FormattedParams = string.Empty;
|
||||
// Get the window width, using a default value if there's no console attached to this process.
|
||||
int WindowWidth;
|
||||
try
|
||||
{
|
||||
WindowWidth = Console.WindowWidth;
|
||||
}
|
||||
catch
|
||||
{
|
||||
WindowWidth = 240;
|
||||
}
|
||||
|
||||
// Build the formatted params
|
||||
foreach (var ParamName in ParamDict.Keys)
|
||||
@@ -225,21 +236,16 @@ namespace AutomationTool
|
||||
string ParamString = IndentString + ParamName.PadRight(RightPadding);
|
||||
|
||||
// Build the description line by line, adding the same amount of intending each time.
|
||||
foreach (var DescriptionLine in WordWrap(ParamDict[ParamName], Console.WindowWidth - ParamString.Length))
|
||||
foreach (var DescriptionLine in WordWrap(ParamDict[ParamName], WindowWidth - ParamString.Length))
|
||||
{
|
||||
// Formatting as following:
|
||||
// <Indent>-param<Right Padding>Description<New line>
|
||||
FormattedParams += ParamString + DescriptionLine + Environment.NewLine;
|
||||
yield return ParamString + DescriptionLine;
|
||||
|
||||
// we replace the param string on subsequent lines with white space of the same length
|
||||
ParamString = string.Empty.PadRight(IndentString.Length + RightPadding);
|
||||
}
|
||||
|
||||
// new line after each param/desc combo
|
||||
FormattedParams += Environment.NewLine;
|
||||
}
|
||||
|
||||
return FormattedParams;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -594,8 +594,6 @@ namespace AutomationTool
|
||||
{
|
||||
case UnrealTargetPlatform.Win32:
|
||||
case UnrealTargetPlatform.Win64:
|
||||
case UnrealTargetPlatform.WinRT:
|
||||
case UnrealTargetPlatform.WinRT_ARM:
|
||||
case UnrealTargetPlatform.XboxOne:
|
||||
return ".exe";
|
||||
case UnrealTargetPlatform.PS4:
|
||||
|
||||
@@ -1566,9 +1566,7 @@ namespace AutomationTool
|
||||
var UBTFiles = new List<string>(new string[]
|
||||
{
|
||||
"UnrealBuildTool.exe",
|
||||
"UnrealBuildTool.exe.config",
|
||||
"EnvVarsToXML.exe",
|
||||
"EnvVarsToXML.exe.config"
|
||||
"UnrealBuildTool.exe.config"
|
||||
});
|
||||
|
||||
foreach (var UBTFile in UBTFiles)
|
||||
|
||||
@@ -56,8 +56,8 @@ namespace AutomationTool
|
||||
[Help("ShowNotifications", "Show notifications that will be sent for each node in the output")]
|
||||
[Help("Trigger=<Name>[+<Name>...]", "Activates the given triggers, including all the nodes behind them in the graph")]
|
||||
[Help("SkipTriggers", "Activate all triggers")]
|
||||
[Help("TicketSignature=<Name>", "Specifies the signature identifying the current job, to be written to tickets for nodes that require them. Tickets are ignored if this parameter is not specified.")]
|
||||
[Help("SkipTargetsWithoutTickets", "Excludes targets which we can't acquire tickets for, rather than failing")]
|
||||
[Help("TokenSignature=<Name>", "Specifies the signature identifying the current job, to be written to tokens for nodes that require them. Tokens are ignored if this parameter is not specified.")]
|
||||
[Help("SkipTargetsWithoutTokens", "Excludes targets which we can't acquire tokens for, rather than failing")]
|
||||
[Help("Preprocess=<FileName>", "Writes the preprocessed graph to the given file")]
|
||||
[Help("Export=<FileName>", "Exports a JSON file containing the preprocessed build graph, for use as part of a build system")]
|
||||
[Help("PublicTasksOnly", "Only include built-in tasks in the schema, excluding any other UAT modules")]
|
||||
@@ -80,12 +80,6 @@ namespace AutomationTool
|
||||
}
|
||||
|
||||
string TargetNames = ParseParamValue("Target", null);
|
||||
if(TargetNames == null)
|
||||
{
|
||||
LogError("Missing -Target= parameter for BuildGraph");
|
||||
return ExitCode.Error_Unknown;
|
||||
}
|
||||
|
||||
string SchemaFileName = ParseParamValue("Schema", null);
|
||||
string ExportFileName = ParseParamValue("Export", null);
|
||||
string PreprocessedFileName = ParseParamValue("Preprocess", null);
|
||||
@@ -93,15 +87,15 @@ namespace AutomationTool
|
||||
string SingleNodeName = ParseParamValue("SingleNode", null);
|
||||
string[] TriggerNames = ParseParamValue("Trigger", "").Split(new char[]{ '+', ';' }, StringSplitOptions.RemoveEmptyEntries).ToArray();
|
||||
bool bSkipTriggers = ParseParam("SkipTriggers");
|
||||
string TicketSignature = ParseParamValue("TicketSignature", null);
|
||||
bool bSkipTargetsWithoutTickets = ParseParam("SkipTargetsWithoutTickets");
|
||||
string TokenSignature = ParseParamValue("TokenSignature", null);
|
||||
bool bSkipTargetsWithoutTokens = ParseParam("SkipTargetsWithoutTokens");
|
||||
bool bClearHistory = ParseParam("Clean") || ParseParam("ClearHistory");
|
||||
bool bListOnly = ParseParam("ListOnly");
|
||||
bool bWriteToSharedStorage = ParseParam("WriteToSharedStorage") || CommandUtils.IsBuildMachine;
|
||||
bool bPublicTasksOnly = ParseParam("PublicTasksOnly");
|
||||
string ReportName = ParseParamValue("ReportName", null);
|
||||
|
||||
GraphPrintOptions PrintOptions = 0;
|
||||
GraphPrintOptions PrintOptions = GraphPrintOptions.ShowCommandLineOptions;
|
||||
if(ParseParam("ShowDeps"))
|
||||
{
|
||||
PrintOptions |= GraphPrintOptions.ShowDependencies;
|
||||
@@ -121,14 +115,8 @@ namespace AutomationTool
|
||||
}
|
||||
}
|
||||
|
||||
// Read any environment variables
|
||||
Dictionary<string, string> DefaultProperties = new Dictionary<string,string>(StringComparer.InvariantCultureIgnoreCase);
|
||||
foreach(DictionaryEntry Entry in Environment.GetEnvironmentVariables())
|
||||
{
|
||||
DefaultProperties[Entry.Key.ToString()] = Entry.Value.ToString();
|
||||
}
|
||||
|
||||
// Set up the standard properties which build scripts might need
|
||||
Dictionary<string, string> DefaultProperties = new Dictionary<string,string>(StringComparer.InvariantCultureIgnoreCase);
|
||||
DefaultProperties["Branch"] = P4Enabled ? P4Env.BuildRootP4 : "Unknown";
|
||||
DefaultProperties["EscapedBranch"] = P4Enabled ? P4Env.BuildRootEscaped : "Unknown";
|
||||
DefaultProperties["Change"] = P4Enabled ? P4Env.Changelist.ToString() : "0";
|
||||
@@ -145,7 +133,8 @@ namespace AutomationTool
|
||||
DefaultProperties["EnginePatchVersion"] = Version.PatchVersion.ToString();
|
||||
}
|
||||
|
||||
// Add any additional custom parameters from the command line (of the form -Set:X=Y)
|
||||
// Add any additional custom arguments from the command line (of the form -Set:X=Y)
|
||||
Dictionary<string, string> Arguments = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
|
||||
foreach (string Param in Params)
|
||||
{
|
||||
const string Prefix = "set:";
|
||||
@@ -154,7 +143,7 @@ namespace AutomationTool
|
||||
int EqualsIdx = Param.IndexOf('=');
|
||||
if(EqualsIdx >= 0)
|
||||
{
|
||||
DefaultProperties[Param.Substring(Prefix.Length, EqualsIdx - Prefix.Length)] = Param.Substring(EqualsIdx + 1);
|
||||
Arguments[Param.Substring(Prefix.Length, EqualsIdx - Prefix.Length)] = Param.Substring(EqualsIdx + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -179,7 +168,7 @@ namespace AutomationTool
|
||||
|
||||
// Read the script from disk
|
||||
Graph Graph;
|
||||
if(!ScriptReader.TryRead(new FileReference(ScriptFileName), DefaultProperties, Schema, out Graph))
|
||||
if(!ScriptReader.TryRead(new FileReference(ScriptFileName), Arguments, DefaultProperties, Schema, out Graph))
|
||||
{
|
||||
return ExitCode.Error_Unknown;
|
||||
}
|
||||
@@ -198,63 +187,75 @@ namespace AutomationTool
|
||||
|
||||
// Convert the supplied target references into nodes
|
||||
HashSet<Node> TargetNodes = new HashSet<Node>();
|
||||
foreach(string TargetName in TargetNames.Split(new char[]{ '+', ';' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()))
|
||||
if(TargetNames == null)
|
||||
{
|
||||
Node[] Nodes;
|
||||
if(!Graph.TryResolveReference(TargetName, out Nodes))
|
||||
{
|
||||
LogError("Target '{0}' is not in graph", TargetName);
|
||||
return ExitCode.Error_Unknown;
|
||||
}
|
||||
TargetNodes.UnionWith(Nodes);
|
||||
}
|
||||
|
||||
// Try to acquire tickets for all the target nodes we want to build
|
||||
if(TicketSignature != null)
|
||||
{
|
||||
// Find all the lock files
|
||||
HashSet<FileReference> RequiredTickets = new HashSet<FileReference>(TargetNodes.SelectMany(x => x.RequiredTickets));
|
||||
|
||||
// Try to create all the lock files
|
||||
List<FileReference> CreatedTickets = new List<FileReference>();
|
||||
if(!bListOnly)
|
||||
{
|
||||
CreatedTickets.AddRange(RequiredTickets.Where(x => WriteTicket(x, TicketSignature)));
|
||||
LogError("Missing -Target= parameter for BuildGraph");
|
||||
return ExitCode.Error_Unknown;
|
||||
}
|
||||
TargetNodes.UnionWith(Graph.Agents.SelectMany(x => x.Nodes));
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach(string TargetName in TargetNames.Split(new char[]{ '+', ';' }, StringSplitOptions.RemoveEmptyEntries).Select(x => x.Trim()))
|
||||
{
|
||||
Node[] Nodes;
|
||||
if(!Graph.TryResolveReference(TargetName, out Nodes))
|
||||
{
|
||||
LogError("Target '{0}' is not in graph", TargetName);
|
||||
return ExitCode.Error_Unknown;
|
||||
}
|
||||
TargetNodes.UnionWith(Nodes);
|
||||
}
|
||||
}
|
||||
|
||||
// Try to acquire tokens for all the target nodes we want to build
|
||||
if(TokenSignature != null)
|
||||
{
|
||||
// Find all the lock files
|
||||
HashSet<FileReference> RequiredTokens = new HashSet<FileReference>(TargetNodes.SelectMany(x => x.RequiredTokens));
|
||||
|
||||
// Try to create all the lock files
|
||||
List<FileReference> CreatedTokens = new List<FileReference>();
|
||||
if(!bListOnly)
|
||||
{
|
||||
CreatedTokens.AddRange(RequiredTokens.Where(x => WriteTokenFile(x, TokenSignature)));
|
||||
}
|
||||
|
||||
// Find all the tickets that we don't have
|
||||
Dictionary<FileReference, string> MissingTickets = new Dictionary<FileReference, string>();
|
||||
foreach(FileReference RequiredTicket in RequiredTickets)
|
||||
// Find all the tokens that we don't have
|
||||
Dictionary<FileReference, string> MissingTokens = new Dictionary<FileReference, string>();
|
||||
foreach(FileReference RequiredToken in RequiredTokens)
|
||||
{
|
||||
string CurrentOwner = ReadTicket(RequiredTicket);
|
||||
if(CurrentOwner != null && CurrentOwner != TicketSignature)
|
||||
string CurrentOwner = ReadTokenFile(RequiredToken);
|
||||
if(CurrentOwner != null && CurrentOwner != TokenSignature)
|
||||
{
|
||||
MissingTickets.Add(RequiredTicket, CurrentOwner);
|
||||
MissingTokens.Add(RequiredToken, CurrentOwner);
|
||||
}
|
||||
}
|
||||
|
||||
// If we want to skip all the nodes with missing locks, adjust the target nodes to account for it
|
||||
if(MissingTickets.Count > 0)
|
||||
if(MissingTokens.Count > 0)
|
||||
{
|
||||
if(bSkipTargetsWithoutTickets)
|
||||
if(bSkipTargetsWithoutTokens)
|
||||
{
|
||||
foreach(KeyValuePair<FileReference, string> Pair in MissingTickets)
|
||||
foreach(KeyValuePair<FileReference, string> Pair in MissingTokens)
|
||||
{
|
||||
List<Node> SkipNodes = TargetNodes.Where(x => x.RequiredTickets.Contains(Pair.Key)).ToList();
|
||||
List<Node> SkipNodes = TargetNodes.Where(x => x.RequiredTokens.Contains(Pair.Key)).ToList();
|
||||
Log("Skipping {0} due to previous build: {1}", String.Join(", ", SkipNodes), Pair.Value);
|
||||
TargetNodes.ExceptWith(SkipNodes);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach(KeyValuePair<FileReference, string> Pair in MissingTickets)
|
||||
foreach(KeyValuePair<FileReference, string> Pair in MissingTokens)
|
||||
{
|
||||
List<Node> SkipNodes = TargetNodes.Where(x => x.RequiredTickets.Contains(Pair.Key)).ToList();
|
||||
List<Node> SkipNodes = TargetNodes.Where(x => x.RequiredTokens.Contains(Pair.Key)).ToList();
|
||||
LogError("Cannot run {0} due to previous build: {1}", String.Join(", ", SkipNodes), Pair.Value);
|
||||
}
|
||||
foreach(FileReference CreatedTicket in CreatedTickets)
|
||||
foreach(FileReference CreatedToken in CreatedTokens)
|
||||
{
|
||||
CreatedTicket.Delete();
|
||||
CreatedToken.Delete();
|
||||
}
|
||||
return ExitCode.Error_Unknown;
|
||||
}
|
||||
@@ -307,7 +308,15 @@ namespace AutomationTool
|
||||
return ExitCode.Error_Unknown;
|
||||
}
|
||||
|
||||
// Print out all the diagnostic messages which still apply, unless we're running a step as part of a build system.
|
||||
// If we just want to show the contents of the graph, do so and exit.
|
||||
if(bListOnly)
|
||||
{
|
||||
HashSet<Node> CompletedNodes = FindCompletedNodes(Graph, Storage);
|
||||
Graph.Print(CompletedNodes, PrintOptions);
|
||||
return ExitCode.Success;
|
||||
}
|
||||
|
||||
// Print out all the diagnostic messages which still apply, unless we're running a step as part of a build system or just listing the contents of the file.
|
||||
if(SingleNode == null)
|
||||
{
|
||||
IEnumerable<GraphDiagnostic> Diagnostics = Graph.Diagnostics.Where(x => x.EnclosingTrigger == null || Triggers.Contains(x.EnclosingTrigger));
|
||||
@@ -329,12 +338,7 @@ namespace AutomationTool
|
||||
}
|
||||
|
||||
// Execute the command
|
||||
if(bListOnly)
|
||||
{
|
||||
HashSet<Node> CompletedNodes = FindCompletedNodes(Graph, Storage);
|
||||
Graph.Print(CompletedNodes, PrintOptions);
|
||||
}
|
||||
else if(ExportFileName != null)
|
||||
if(ExportFileName != null)
|
||||
{
|
||||
HashSet<Node> CompletedNodes = FindCompletedNodes(Graph, Storage);
|
||||
Graph.Print(CompletedNodes, PrintOptions);
|
||||
@@ -394,19 +398,19 @@ namespace AutomationTool
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads the contents of the given ticket
|
||||
/// Reads the contents of the given token
|
||||
/// </summary>
|
||||
/// <returns>Contents of the ticket, or null if it does not exist</returns>
|
||||
public string ReadTicket(FileReference Location)
|
||||
/// <returns>Contents of the token, or null if it does not exist</returns>
|
||||
public string ReadTokenFile(FileReference Location)
|
||||
{
|
||||
return Location.Exists()? File.ReadAllText(Location.FullName) : null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to write an owner to a ticket file transactionally
|
||||
/// Attempts to write an owner to a token file transactionally
|
||||
/// </summary>
|
||||
/// <returns>True if the lock was acquired, false otherwise</returns>
|
||||
public bool WriteTicket(FileReference Location, string Signature)
|
||||
public bool WriteTokenFile(FileReference Location, string Signature)
|
||||
{
|
||||
// Check it doesn't already exist
|
||||
if(Location.Exists())
|
||||
|
||||
@@ -18,15 +18,20 @@ namespace AutomationTool
|
||||
/// </summary>
|
||||
enum GraphPrintOptions
|
||||
{
|
||||
/// <summary>
|
||||
/// Includes a list of the graph options
|
||||
/// </summary>
|
||||
ShowCommandLineOptions = 0x1,
|
||||
|
||||
/// <summary>
|
||||
/// Includes the list of dependencies for each node
|
||||
/// </summary>
|
||||
ShowDependencies = 0x1,
|
||||
ShowDependencies = 0x2,
|
||||
|
||||
/// <summary>
|
||||
/// Includes the list of notifiers for each node
|
||||
/// </summary>
|
||||
ShowNotifications = 0x2,
|
||||
ShowNotifications = 0x4,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -61,11 +66,57 @@ namespace AutomationTool
|
||||
public ManualTrigger EnclosingTrigger;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents a graph option. These are expanded during preprocessing, but are retained in order to display help messages.
|
||||
/// </summary>
|
||||
class GraphOption
|
||||
{
|
||||
/// <summary>
|
||||
/// Name of this option
|
||||
/// </summary>
|
||||
public string Name;
|
||||
|
||||
/// <summary>
|
||||
/// Description for this option
|
||||
/// </summary>
|
||||
public string Description;
|
||||
|
||||
/// <summary>
|
||||
/// Default value for this option
|
||||
/// </summary>
|
||||
public string DefaultValue;
|
||||
|
||||
/// <summary>
|
||||
/// Constructor
|
||||
/// </summary>
|
||||
/// <param name="Name">The name of this option</param>
|
||||
public GraphOption(string Name, string Description, string DefaultValue)
|
||||
{
|
||||
this.Name = Name;
|
||||
this.Description = Description;
|
||||
this.DefaultValue = DefaultValue;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns a name of this option for debugging
|
||||
/// </summary>
|
||||
/// <returns>Name of the option</returns>
|
||||
public override string ToString()
|
||||
{
|
||||
return Name;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Definition of a graph.
|
||||
/// </summary>
|
||||
class Graph
|
||||
{
|
||||
/// <summary>
|
||||
/// List of options, in the order they were specified
|
||||
/// </summary>
|
||||
public List<GraphOption> Options = new List<GraphOption>();
|
||||
|
||||
/// <summary>
|
||||
/// List of agents containing nodes to execute
|
||||
/// </summary>
|
||||
@@ -499,9 +550,38 @@ namespace AutomationTool
|
||||
/// Print the contents of the graph
|
||||
/// </summary>
|
||||
/// <param name="NodeToState">Mapping of node to its current state</param>
|
||||
/// <param name="Options">Options for how to print the graph</param>
|
||||
public void Print(HashSet<Node> CompletedNodes, GraphPrintOptions Options)
|
||||
/// <param name="PrintOptions">Options for how to print the graph</param>
|
||||
public void Print(HashSet<Node> CompletedNodes, GraphPrintOptions PrintOptions)
|
||||
{
|
||||
// Print the options
|
||||
if((PrintOptions & GraphPrintOptions.ShowCommandLineOptions) != 0)
|
||||
{
|
||||
// Get the list of messages
|
||||
List<string> Messages = new List<string>();
|
||||
foreach(GraphOption Option in Options)
|
||||
{
|
||||
StringBuilder Message = new StringBuilder();
|
||||
Message.AppendFormat("-set:{0}=... {1}", Option.Name, Option.Description);
|
||||
if(!String.IsNullOrEmpty(Option.DefaultValue))
|
||||
{
|
||||
Message.AppendFormat(" (Default: {0})", Option.DefaultValue);
|
||||
}
|
||||
Messages.Add(Message.ToString());
|
||||
}
|
||||
|
||||
// Format them to the log
|
||||
if(Messages.Count > 0)
|
||||
{
|
||||
CommandUtils.Log("");
|
||||
CommandUtils.Log("Options:");
|
||||
CommandUtils.Log("");
|
||||
foreach(string Line in CommandUtils.FormatParams(Messages, 4, 24))
|
||||
{
|
||||
CommandUtils.Log(Line);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get a list of all the triggers, including the null global one
|
||||
List<ManualTrigger> AllTriggers = new List<ManualTrigger>();
|
||||
AllTriggers.Add(null);
|
||||
@@ -531,7 +611,7 @@ namespace AutomationTool
|
||||
|
||||
// Print the trigger name
|
||||
CommandUtils.Log(" Trigger: {0}", (Trigger == null)? "None" : Trigger.QualifiedName);
|
||||
if(Trigger != null && Options.HasFlag(GraphPrintOptions.ShowNotifications))
|
||||
if(Trigger != null && PrintOptions.HasFlag(GraphPrintOptions.ShowNotifications))
|
||||
{
|
||||
foreach(string User in Trigger.NotifyUsers)
|
||||
{
|
||||
@@ -549,7 +629,7 @@ namespace AutomationTool
|
||||
foreach(Node Node in Nodes)
|
||||
{
|
||||
CommandUtils.Log(" Node: {0}{1}", Node.Name, CompletedNodes.Contains(Node)? " (completed)" : "");
|
||||
if(Options.HasFlag(GraphPrintOptions.ShowDependencies))
|
||||
if(PrintOptions.HasFlag(GraphPrintOptions.ShowDependencies))
|
||||
{
|
||||
HashSet<Node> InputDependencies = new HashSet<Node>(Node.GetDirectInputDependencies());
|
||||
foreach(Node InputDependency in InputDependencies)
|
||||
@@ -562,7 +642,7 @@ namespace AutomationTool
|
||||
CommandUtils.Log(" after> {0}", OrderDependency.Name);
|
||||
}
|
||||
}
|
||||
if(Options.HasFlag(GraphPrintOptions.ShowNotifications))
|
||||
if(PrintOptions.HasFlag(GraphPrintOptions.ShowNotifications))
|
||||
{
|
||||
string Label = Node.bNotifyOnWarnings? "warnings" : "errors";
|
||||
foreach(string User in Node.NotifyUsers)
|
||||
|
||||
@@ -81,9 +81,9 @@ namespace AutomationTool
|
||||
public ManualTrigger ControllingTrigger;
|
||||
|
||||
/// <summary>
|
||||
/// Tickets which must be acquired for this node to run
|
||||
/// Tokens which must be acquired for this node to run
|
||||
/// </summary>
|
||||
public FileReference[] RequiredTickets;
|
||||
public FileReference[] RequiredTokens;
|
||||
|
||||
/// <summary>
|
||||
/// List of tasks to execute
|
||||
@@ -114,8 +114,8 @@ namespace AutomationTool
|
||||
/// <param name="InInputDependencies">Nodes which this node is dependent on for its inputs</param>
|
||||
/// <param name="InOrderDependencies">Nodes which this node needs to run after. Should include all input dependencies.</param>
|
||||
/// <param name="InControllingTrigger">The trigger which this node is behind</param>
|
||||
/// <param name="InTicket">Optional ticket which must be required for this node to run</param>
|
||||
public Node(string InName, NodeOutput[] InInputs, string[] InOutputNames, Node[] InInputDependencies, Node[] InOrderDependencies, ManualTrigger InControllingTrigger, FileReference[] InRequiredTickets)
|
||||
/// <param name="InRequiredTokens">Optional tokens which must be required for this node to run</param>
|
||||
public Node(string InName, NodeOutput[] InInputs, string[] InOutputNames, Node[] InInputDependencies, Node[] InOrderDependencies, ManualTrigger InControllingTrigger, FileReference[] InRequiredTokens)
|
||||
{
|
||||
Name = InName;
|
||||
Inputs = InInputs;
|
||||
@@ -128,7 +128,7 @@ namespace AutomationTool
|
||||
InputDependencies = InInputDependencies;
|
||||
OrderDependencies = InOrderDependencies;
|
||||
ControllingTrigger = InControllingTrigger;
|
||||
RequiredTickets = InRequiredTickets;
|
||||
RequiredTokens = InRequiredTokens;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -119,6 +119,8 @@ namespace AutomationTool
|
||||
Badge,
|
||||
Notify,
|
||||
Include,
|
||||
Option,
|
||||
EnvVar,
|
||||
Property,
|
||||
Warning,
|
||||
Error,
|
||||
@@ -164,10 +166,15 @@ namespace AutomationTool
|
||||
/// </summary>
|
||||
public readonly XmlSchema CompiledSchema;
|
||||
|
||||
/// <summary>
|
||||
/// Characters which are not permitted in names.
|
||||
/// </summary>
|
||||
public const string IllegalNameCharacters = "^<>:\"/\\|?*";
|
||||
|
||||
/// <summary>
|
||||
/// Pattern which matches any name; alphanumeric characters, with single embedded spaces.
|
||||
/// </summary>
|
||||
const string NamePattern = @"[A-Za-z0-9_]+( [A-Za-z0-9_]+)*";
|
||||
const string NamePattern = "[^ " + IllegalNameCharacters +"]+( [^ " + IllegalNameCharacters + "]+)*";
|
||||
|
||||
/// <summary>
|
||||
/// Pattern which matches a list of names, separated by semicolons.
|
||||
@@ -281,6 +288,8 @@ namespace AutomationTool
|
||||
NewSchema.Items.Add(CreateBadgeType());
|
||||
NewSchema.Items.Add(CreateNotifyType());
|
||||
NewSchema.Items.Add(CreateIncludeType());
|
||||
NewSchema.Items.Add(CreateOptionType());
|
||||
NewSchema.Items.Add(CreateEnvVarType());
|
||||
NewSchema.Items.Add(CreatePropertyType());
|
||||
NewSchema.Items.Add(CreateDiagnosticType(ScriptSchemaStandardType.Warning));
|
||||
NewSchema.Items.Add(CreateDiagnosticType(ScriptSchemaStandardType.Error));
|
||||
@@ -395,6 +404,8 @@ namespace AutomationTool
|
||||
GraphChoice.MinOccurs = 0;
|
||||
GraphChoice.MaxOccursString = "unbounded";
|
||||
GraphChoice.Items.Add(CreateSchemaElement("Include", ScriptSchemaStandardType.Include));
|
||||
GraphChoice.Items.Add(CreateSchemaElement("Option", ScriptSchemaStandardType.Option));
|
||||
GraphChoice.Items.Add(CreateSchemaElement("EnvVar", ScriptSchemaStandardType.EnvVar));
|
||||
GraphChoice.Items.Add(CreateSchemaElement("Property", ScriptSchemaStandardType.Property));
|
||||
GraphChoice.Items.Add(CreateSchemaElement("Agent", ScriptSchemaStandardType.Agent));
|
||||
GraphChoice.Items.Add(CreateSchemaElement("Trigger", ScriptSchemaStandardType.Trigger));
|
||||
@@ -405,7 +416,7 @@ namespace AutomationTool
|
||||
GraphChoice.Items.Add(CreateSchemaElement("Warning", ScriptSchemaStandardType.Warning));
|
||||
GraphChoice.Items.Add(CreateSchemaElement("Error", ScriptSchemaStandardType.Error));
|
||||
GraphChoice.Items.Add(CreateDoElement(ScriptSchemaStandardType.Graph));
|
||||
GraphChoice.Items.Add(CreateChooseElement(ScriptSchemaStandardType.Graph));
|
||||
GraphChoice.Items.Add(CreateSwitchElement(ScriptSchemaStandardType.Graph));
|
||||
GraphChoice.Items.Add(CreateForEachElement(ScriptSchemaStandardType.Graph));
|
||||
XmlSchemaComplexType GraphType = new XmlSchemaComplexType();
|
||||
GraphType.Name = GetTypeName(ScriptSchemaStandardType.Graph);
|
||||
@@ -443,12 +454,13 @@ namespace AutomationTool
|
||||
TriggerChoice.MinOccurs = 0;
|
||||
TriggerChoice.MaxOccursString = "unbounded";
|
||||
TriggerChoice.Items.Add(CreateSchemaElement("Property", ScriptSchemaStandardType.Property));
|
||||
TriggerChoice.Items.Add(CreateSchemaElement("EnvVar", ScriptSchemaStandardType.EnvVar));
|
||||
TriggerChoice.Items.Add(CreateSchemaElement("Agent", ScriptSchemaStandardType.Agent));
|
||||
TriggerChoice.Items.Add(CreateSchemaElement("Aggregate", ScriptSchemaStandardType.Aggregate));
|
||||
TriggerChoice.Items.Add(CreateSchemaElement("Warning", ScriptSchemaStandardType.Warning));
|
||||
TriggerChoice.Items.Add(CreateSchemaElement("Error", ScriptSchemaStandardType.Error));
|
||||
TriggerChoice.Items.Add(CreateDoElement(ScriptSchemaStandardType.TriggerBody));
|
||||
TriggerChoice.Items.Add(CreateChooseElement(ScriptSchemaStandardType.TriggerBody));
|
||||
TriggerChoice.Items.Add(CreateSwitchElement(ScriptSchemaStandardType.TriggerBody));
|
||||
TriggerChoice.Items.Add(CreateForEachElement(ScriptSchemaStandardType.TriggerBody));
|
||||
|
||||
XmlSchemaComplexType TriggerType = new XmlSchemaComplexType();
|
||||
@@ -488,11 +500,12 @@ namespace AutomationTool
|
||||
AgentChoice.MinOccurs = 0;
|
||||
AgentChoice.MaxOccursString = "unbounded";
|
||||
AgentChoice.Items.Add(CreateSchemaElement("Property", ScriptSchemaStandardType.Property));
|
||||
AgentChoice.Items.Add(CreateSchemaElement("EnvVar", ScriptSchemaStandardType.EnvVar));
|
||||
AgentChoice.Items.Add(CreateSchemaElement("Node", ScriptSchemaStandardType.Node));
|
||||
AgentChoice.Items.Add(CreateSchemaElement("Warning", ScriptSchemaStandardType.Warning));
|
||||
AgentChoice.Items.Add(CreateSchemaElement("Error", ScriptSchemaStandardType.Error));
|
||||
AgentChoice.Items.Add(CreateDoElement(ScriptSchemaStandardType.AgentBody));
|
||||
AgentChoice.Items.Add(CreateChooseElement(ScriptSchemaStandardType.AgentBody));
|
||||
AgentChoice.Items.Add(CreateSwitchElement(ScriptSchemaStandardType.AgentBody));
|
||||
AgentChoice.Items.Add(CreateForEachElement(ScriptSchemaStandardType.AgentBody));
|
||||
|
||||
XmlSchemaComplexType AgentType = new XmlSchemaComplexType();
|
||||
@@ -513,7 +526,7 @@ namespace AutomationTool
|
||||
Extension.Attributes.Add(CreateSchemaAttribute("Requires", ScriptSchemaStandardType.NameOrTagList, XmlSchemaUse.Optional));
|
||||
Extension.Attributes.Add(CreateSchemaAttribute("Produces", ScriptSchemaStandardType.TagList, XmlSchemaUse.Optional));
|
||||
Extension.Attributes.Add(CreateSchemaAttribute("After", ScriptSchemaStandardType.NameOrTagList, XmlSchemaUse.Optional));
|
||||
Extension.Attributes.Add(CreateSchemaAttribute("Ticket", ScriptSchemaStandardType.BalancedString, XmlSchemaUse.Optional));
|
||||
Extension.Attributes.Add(CreateSchemaAttribute("Token", ScriptSchemaStandardType.BalancedString, XmlSchemaUse.Optional));
|
||||
Extension.Attributes.Add(CreateSchemaAttribute("If", ScriptSchemaStandardType.BalancedString, XmlSchemaUse.Optional));
|
||||
Extension.Attributes.Add(CreateSchemaAttribute("NotifyOnWarnings", ScriptSchemaStandardType.Boolean, XmlSchemaUse.Optional));
|
||||
|
||||
@@ -536,10 +549,11 @@ namespace AutomationTool
|
||||
NodeChoice.MinOccurs = 0;
|
||||
NodeChoice.MaxOccursString = "unbounded";
|
||||
NodeChoice.Items.Add(CreateSchemaElement("Property", ScriptSchemaStandardType.Property));
|
||||
NodeChoice.Items.Add(CreateSchemaElement("EnvVar", ScriptSchemaStandardType.EnvVar));
|
||||
NodeChoice.Items.Add(CreateSchemaElement("Warning", ScriptSchemaStandardType.Warning));
|
||||
NodeChoice.Items.Add(CreateSchemaElement("Error", ScriptSchemaStandardType.Error));
|
||||
NodeChoice.Items.Add(CreateDoElement(ScriptSchemaStandardType.NodeBody));
|
||||
NodeChoice.Items.Add(CreateChooseElement(ScriptSchemaStandardType.NodeBody));
|
||||
NodeChoice.Items.Add(CreateSwitchElement(ScriptSchemaStandardType.NodeBody));
|
||||
NodeChoice.Items.Add(CreateForEachElement(ScriptSchemaStandardType.NodeBody));
|
||||
foreach (KeyValuePair<string, XmlSchemaComplexType> Pair in TaskNameToType.OrderBy(x => x.Key))
|
||||
{
|
||||
@@ -628,6 +642,35 @@ namespace AutomationTool
|
||||
return PropertyType;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the schema type representing a parameter type
|
||||
/// </summary>
|
||||
/// <returns>Type definition for a parameter</returns>
|
||||
static XmlSchemaType CreateOptionType()
|
||||
{
|
||||
XmlSchemaComplexType OptionType = new XmlSchemaComplexType();
|
||||
OptionType.Name = GetTypeName(ScriptSchemaStandardType.Option);
|
||||
OptionType.Attributes.Add(CreateSchemaAttribute("Name", ScriptSchemaStandardType.Name, XmlSchemaUse.Required));
|
||||
OptionType.Attributes.Add(CreateSchemaAttribute("Restrict", StringTypeName, XmlSchemaUse.Optional));
|
||||
OptionType.Attributes.Add(CreateSchemaAttribute("DefaultValue", StringTypeName, XmlSchemaUse.Required));
|
||||
OptionType.Attributes.Add(CreateSchemaAttribute("Description", StringTypeName, XmlSchemaUse.Required));
|
||||
OptionType.Attributes.Add(CreateSchemaAttribute("If", ScriptSchemaStandardType.BalancedString, XmlSchemaUse.Optional));
|
||||
return OptionType;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the schema type representing a environment variable type
|
||||
/// </summary>
|
||||
/// <returns>Type definition for an environment variable property</returns>
|
||||
static XmlSchemaType CreateEnvVarType()
|
||||
{
|
||||
XmlSchemaComplexType EnvVarType = new XmlSchemaComplexType();
|
||||
EnvVarType.Name = GetTypeName(ScriptSchemaStandardType.EnvVar);
|
||||
EnvVarType.Attributes.Add(CreateSchemaAttribute("Name", ScriptSchemaStandardType.Name, XmlSchemaUse.Required));
|
||||
EnvVarType.Attributes.Add(CreateSchemaAttribute("If", ScriptSchemaStandardType.BalancedString, XmlSchemaUse.Optional));
|
||||
return EnvVarType;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates the schema type representing a property type
|
||||
/// </summary>
|
||||
@@ -637,9 +680,7 @@ namespace AutomationTool
|
||||
XmlSchemaComplexType PropertyType = new XmlSchemaComplexType();
|
||||
PropertyType.Name = GetTypeName(ScriptSchemaStandardType.Property);
|
||||
PropertyType.Attributes.Add(CreateSchemaAttribute("Name", ScriptSchemaStandardType.Name, XmlSchemaUse.Required));
|
||||
PropertyType.Attributes.Add(CreateSchemaAttribute("Value", StringTypeName, XmlSchemaUse.Optional));
|
||||
PropertyType.Attributes.Add(CreateSchemaAttribute("Restrict", StringTypeName, XmlSchemaUse.Optional));
|
||||
PropertyType.Attributes.Add(CreateSchemaAttribute("Default", StringTypeName, XmlSchemaUse.Optional));
|
||||
PropertyType.Attributes.Add(CreateSchemaAttribute("Value", StringTypeName, XmlSchemaUse.Required));
|
||||
PropertyType.Attributes.Add(CreateSchemaAttribute("If", ScriptSchemaStandardType.BalancedString, XmlSchemaUse.Optional));
|
||||
return PropertyType;
|
||||
}
|
||||
@@ -681,48 +722,48 @@ namespace AutomationTool
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates an element representing a conditional "Choose" block, which recursively contains another type
|
||||
/// Creates an element representing a conditional "Switch" block, which recursively contains another type
|
||||
/// </summary>
|
||||
/// <param name="InnerType">The base type for the do block to contain</param>
|
||||
/// <returns>New schema element for the block</returns>
|
||||
static XmlSchemaElement CreateChooseElement(ScriptSchemaStandardType InnerType)
|
||||
static XmlSchemaElement CreateSwitchElement(ScriptSchemaStandardType InnerType)
|
||||
{
|
||||
// Create the "Option" element
|
||||
XmlSchemaComplexContentExtension OptionExtension = new XmlSchemaComplexContentExtension();
|
||||
OptionExtension.BaseTypeName = GetQualifiedTypeName(InnerType);
|
||||
OptionExtension.Attributes.Add(CreateSchemaAttribute("If", ScriptSchemaStandardType.BalancedString, XmlSchemaUse.Required));
|
||||
XmlSchemaComplexContentExtension CaseExtension = new XmlSchemaComplexContentExtension();
|
||||
CaseExtension.BaseTypeName = GetQualifiedTypeName(InnerType);
|
||||
CaseExtension.Attributes.Add(CreateSchemaAttribute("If", ScriptSchemaStandardType.BalancedString, XmlSchemaUse.Required));
|
||||
|
||||
XmlSchemaComplexContent OptionContentModel = new XmlSchemaComplexContent();
|
||||
OptionContentModel.Content = OptionExtension;
|
||||
XmlSchemaComplexContent CaseContentModel = new XmlSchemaComplexContent();
|
||||
CaseContentModel.Content = CaseExtension;
|
||||
|
||||
XmlSchemaComplexType OptionSchemaType = new XmlSchemaComplexType();
|
||||
OptionSchemaType.ContentModel = OptionContentModel;
|
||||
XmlSchemaComplexType CaseSchemaType = new XmlSchemaComplexType();
|
||||
CaseSchemaType.ContentModel = CaseContentModel;
|
||||
|
||||
XmlSchemaElement OptionElement = new XmlSchemaElement();
|
||||
OptionElement.Name = "Option";
|
||||
OptionElement.SchemaType = OptionSchemaType;
|
||||
OptionElement.MinOccurs = 0;
|
||||
OptionElement.MaxOccursString = "unbounded";
|
||||
XmlSchemaElement CaseElement = new XmlSchemaElement();
|
||||
CaseElement.Name = "Case";
|
||||
CaseElement.SchemaType = CaseSchemaType;
|
||||
CaseElement.MinOccurs = 0;
|
||||
CaseElement.MaxOccursString = "unbounded";
|
||||
|
||||
// Create the "Otherwise" element
|
||||
XmlSchemaElement OtherwiseElement = new XmlSchemaElement();
|
||||
OtherwiseElement.Name = "Otherwise";
|
||||
OtherwiseElement.Name = "Default";
|
||||
OtherwiseElement.SchemaTypeName = GetQualifiedTypeName(InnerType);
|
||||
OtherwiseElement.MinOccurs = 0;
|
||||
OtherwiseElement.MaxOccurs = 1;
|
||||
|
||||
// Create the "Choose" element
|
||||
XmlSchemaSequence ChooseSequence = new XmlSchemaSequence();
|
||||
ChooseSequence.Items.Add(OptionElement);
|
||||
ChooseSequence.Items.Add(OtherwiseElement);
|
||||
// Create the "Switch" element
|
||||
XmlSchemaSequence SwitchSequence = new XmlSchemaSequence();
|
||||
SwitchSequence.Items.Add(CaseElement);
|
||||
SwitchSequence.Items.Add(OtherwiseElement);
|
||||
|
||||
XmlSchemaComplexType ChooseSchemaType = new XmlSchemaComplexType();
|
||||
ChooseSchemaType.Particle = ChooseSequence;
|
||||
XmlSchemaComplexType SwitchSchemaType = new XmlSchemaComplexType();
|
||||
SwitchSchemaType.Particle = SwitchSequence;
|
||||
|
||||
XmlSchemaElement ChooseElement = new XmlSchemaElement();
|
||||
ChooseElement.Name = "Choose";
|
||||
ChooseElement.SchemaType = ChooseSchemaType;
|
||||
return ChooseElement;
|
||||
XmlSchemaElement SwitchElement = new XmlSchemaElement();
|
||||
SwitchElement.Name = "Switch";
|
||||
SwitchElement.SchemaType = SwitchSchemaType;
|
||||
return SwitchElement;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -10,6 +10,7 @@ using AutomationTool;
|
||||
using System.Reflection;
|
||||
using System.Diagnostics;
|
||||
using System.Xml.Schema;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace AutomationTool
|
||||
{
|
||||
@@ -188,27 +189,30 @@ namespace AutomationTool
|
||||
/// <summary>
|
||||
/// Private constructor. Use ScriptReader.TryRead() to read a script file.
|
||||
/// </summary>
|
||||
/// <param name="Properties">Predefined property name to value mapping</param>
|
||||
/// <param name="InSchema">Schema for the script</param>
|
||||
private ScriptReader(IDictionary<string, string> Properties, ScriptSchema InSchema)
|
||||
/// <param name="DefaultProperties">Default properties available to the script</param>
|
||||
/// <param name="Schema">Schema for the script</param>
|
||||
private ScriptReader(IDictionary<string, string> DefaultProperties, ScriptSchema Schema)
|
||||
{
|
||||
this.Schema = Schema;
|
||||
|
||||
EnterScope();
|
||||
foreach(KeyValuePair<string, string> Pair in Properties)
|
||||
|
||||
foreach(KeyValuePair<string, string> Pair in DefaultProperties)
|
||||
{
|
||||
ScopedProperties[ScopedProperties.Count - 1].Add(Pair.Key, Pair.Value);
|
||||
}
|
||||
Schema = InSchema;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Try to read a script file from the given file.
|
||||
/// </summary>
|
||||
/// <param name="File">File to read from</param>
|
||||
/// <param name="DefaultProperties">Manually defined properties to parse the graph with</param>
|
||||
/// <param name="InSchema">Schema for the script</param>
|
||||
/// <param name="Arguments">Arguments passed in to the graph on the command line</param>
|
||||
/// <param name="DefaultProperties">Default properties available to the script</param>
|
||||
/// <param name="Schema">Schema for the script</param>
|
||||
/// <param name="Graph">If successful, the graph constructed from the given script</param>
|
||||
/// <returns>True if the graph was read, false if there were errors</returns>
|
||||
public static bool TryRead(FileReference File, IDictionary<string, string> DefaultProperties, ScriptSchema Schema, out Graph Graph)
|
||||
public static bool TryRead(FileReference File, Dictionary<string, string> Arguments, Dictionary<string, string> DefaultProperties, ScriptSchema Schema, out Graph Graph)
|
||||
{
|
||||
// Check the file exists before doing anything.
|
||||
if (!File.Exists())
|
||||
@@ -220,23 +224,36 @@ namespace AutomationTool
|
||||
|
||||
// Read the file and build the graph
|
||||
ScriptReader Reader = new ScriptReader(DefaultProperties, Schema);
|
||||
if (Reader.TryRead(File) && Reader.NumErrors == 0)
|
||||
{
|
||||
Graph = Reader.Graph;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
if (!Reader.TryRead(File, Arguments) || Reader.NumErrors > 0)
|
||||
{
|
||||
Graph = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Make sure all the arguments were valid
|
||||
bool bInvalidArgument = false;
|
||||
foreach(string InvalidArgumentName in Arguments.Keys.Except(Reader.Graph.Options.Select(x => x.Name), StringComparer.InvariantCultureIgnoreCase))
|
||||
{
|
||||
CommandUtils.LogWarning("Unknown argument '{0}' for '{1}'", InvalidArgumentName, File.FullName);
|
||||
bInvalidArgument = true;
|
||||
}
|
||||
if(bInvalidArgument)
|
||||
{
|
||||
Graph = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return the constructed graph
|
||||
Graph = Reader.Graph;
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read the script from the given file
|
||||
/// </summary>
|
||||
/// <param name="File">File to read from</param>
|
||||
bool TryRead(FileReference File)
|
||||
/// <param name="Arguments">Arguments passed in to the graph on the command line</param>
|
||||
bool TryRead(FileReference File, Dictionary<string, string> Arguments)
|
||||
{
|
||||
// Read the document and validate it against the schema
|
||||
ScriptDocument Document;
|
||||
@@ -247,7 +264,7 @@ namespace AutomationTool
|
||||
}
|
||||
|
||||
// Read the root BuildGraph element
|
||||
ReadGraphBody(Document.DocumentElement, File.Directory);
|
||||
ReadGraphBody(Document.DocumentElement, File.Directory, Arguments);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -256,18 +273,25 @@ namespace AutomationTool
|
||||
/// </summary>
|
||||
/// <param name="Element">The parent element to read from</param>
|
||||
/// <param name="BaseDirectory">Base directory to resolve includes against</param>
|
||||
void ReadGraphBody(XmlElement Element, DirectoryReference BaseDirectory)
|
||||
/// <param name="Arguments">Arguments passed in to the graph on the command line</param>
|
||||
void ReadGraphBody(XmlElement Element, DirectoryReference BaseDirectory, Dictionary<string, string> Arguments)
|
||||
{
|
||||
foreach (ScriptElement ChildElement in Element.ChildNodes.OfType<ScriptElement>())
|
||||
{
|
||||
switch (ChildElement.Name)
|
||||
{
|
||||
case "Include":
|
||||
ReadInclude(ChildElement, BaseDirectory);
|
||||
ReadInclude(ChildElement, BaseDirectory, Arguments);
|
||||
break;
|
||||
case "Option":
|
||||
ReadOption(ChildElement, Arguments);
|
||||
break;
|
||||
case "Property":
|
||||
ReadProperty(ChildElement);
|
||||
break;
|
||||
case "EnvVar":
|
||||
ReadEnvVar(ChildElement);
|
||||
break;
|
||||
case "Agent":
|
||||
ReadAgent(ChildElement, null);
|
||||
break;
|
||||
@@ -293,13 +317,13 @@ namespace AutomationTool
|
||||
ReadDiagnostic(ChildElement, LogEventType.Error, null, null, null);
|
||||
break;
|
||||
case "Do":
|
||||
ReadBlock(ChildElement, x => ReadGraphBody(x, BaseDirectory));
|
||||
ReadBlock(ChildElement, x => ReadGraphBody(x, BaseDirectory, Arguments));
|
||||
break;
|
||||
case "Choose":
|
||||
ReadChoice(ChildElement, x => ReadGraphBody(x, BaseDirectory));
|
||||
case "Switch":
|
||||
ReadSwitch(ChildElement, x => ReadGraphBody(x, BaseDirectory, Arguments));
|
||||
break;
|
||||
case "ForEach":
|
||||
ReadForEach(ChildElement, x => ReadGraphBody(x, BaseDirectory));
|
||||
ReadForEach(ChildElement, x => ReadGraphBody(x, BaseDirectory, Arguments));
|
||||
break;
|
||||
default:
|
||||
LogError(ChildElement, "Invalid element '{0}'", ChildElement.Name);
|
||||
@@ -344,6 +368,61 @@ namespace AutomationTool
|
||||
ShadowProperties.RemoveAt(ShadowProperties.Count - 1);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sets a property value in the current scope
|
||||
/// </summary>
|
||||
/// <param name="Element">Element containing the property assignment. Used for error messages if the property is shadowed in another scope.</param>
|
||||
/// <param name="Name">Name of the property</param>
|
||||
/// <param name="Value">Value for the property</param>
|
||||
void SetPropertyValue(ScriptElement Element, string Name, string Value)
|
||||
{
|
||||
// Find the scope containing this property, defaulting to the current scope
|
||||
int ScopeIdx = 0;
|
||||
while(ScopeIdx < ScopedProperties.Count - 1 && !ScopedProperties[ScopeIdx].ContainsKey(Name))
|
||||
{
|
||||
ScopeIdx++;
|
||||
}
|
||||
|
||||
// Make sure this property name was not already used in a child scope; it likely indicates an error.
|
||||
if(ShadowProperties[ScopeIdx].Contains(Name))
|
||||
{
|
||||
LogError(Element, "Property '{0}' was already used in a child scope. Move this definition before the previous usage if they are intended to share scope, or use a different name.", Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Make sure it's added to the shadow property list for every parent scope
|
||||
for(int Idx = 0; Idx < ScopeIdx; Idx++)
|
||||
{
|
||||
ShadowProperties[Idx].Add(Name);
|
||||
}
|
||||
ScopedProperties[ScopeIdx][Name] = Value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tries to get the value of a property
|
||||
/// </summary>
|
||||
/// <param name="Name">Name of the property</param>
|
||||
/// <param name="Value">On success, contains the value of the property. Set to null otherwise.</param>
|
||||
/// <returns>True if the property was found, false otherwise</returns>
|
||||
bool TryGetPropertyValue(string Name, out string Value)
|
||||
{
|
||||
// Check each scope for the property
|
||||
for (int ScopeIdx = ScopedProperties.Count - 1; ScopeIdx >= 0; ScopeIdx--)
|
||||
{
|
||||
string ScopeValue;
|
||||
if (ScopedProperties[ScopeIdx].TryGetValue(Name, out ScopeValue))
|
||||
{
|
||||
Value = ScopeValue;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// If we didn't find it, return false.
|
||||
Value = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads the definition for a trigger.
|
||||
/// </summary>
|
||||
@@ -424,8 +503,8 @@ namespace AutomationTool
|
||||
case "Do":
|
||||
ReadBlock(ChildElement, x => ReadTriggerBody(x, Trigger));
|
||||
break;
|
||||
case "Choose":
|
||||
ReadChoice(ChildElement, x => ReadTriggerBody(x, Trigger));
|
||||
case "Switch":
|
||||
ReadSwitch(ChildElement, x => ReadTriggerBody(x, Trigger));
|
||||
break;
|
||||
case "ForEach":
|
||||
ReadForEach(ChildElement, x => ReadTriggerBody(x, Trigger));
|
||||
@@ -443,18 +522,83 @@ namespace AutomationTool
|
||||
/// </summary>
|
||||
/// <param name="Element">Xml element to read the definition from</param>
|
||||
/// <param name="BaseDir">Base directory to resolve relative include paths from </param>
|
||||
void ReadInclude(ScriptElement Element, DirectoryReference BaseDir)
|
||||
/// <param name="Arguments">Arguments passed in to the graph on the command line</param>
|
||||
void ReadInclude(ScriptElement Element, DirectoryReference BaseDir, Dictionary<string, string> Arguments)
|
||||
{
|
||||
if (EvaluateCondition(Element))
|
||||
{
|
||||
FileReference Script = FileReference.Combine(BaseDir, Element.GetAttribute("Script"));
|
||||
if (Script.Exists())
|
||||
if (!Script.Exists())
|
||||
{
|
||||
TryRead(Script);
|
||||
LogError(Element, "Cannot find included script '{0}'", Script.FullName);
|
||||
}
|
||||
else
|
||||
{
|
||||
LogError(Element, "Cannot find included script '{0}'", Script.FullName);
|
||||
TryRead(Script, Arguments);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads the definition of a graph option; a parameter which can be set by the user on the command-line or via an environment variable.
|
||||
/// </summary>
|
||||
/// <param name="Element">Xml element to read the definition from</param>
|
||||
/// <param name="Arguments">Arguments passed in to the graph on the command line</param>
|
||||
void ReadOption(ScriptElement Element, IDictionary<string, string> Arguments)
|
||||
{
|
||||
if (EvaluateCondition(Element))
|
||||
{
|
||||
string Name = ReadAttribute(Element, "Name");
|
||||
if (ValidateName(Element, Name))
|
||||
{
|
||||
// Make sure we're at global scope
|
||||
if(ScopedProperties.Count > 1)
|
||||
{
|
||||
throw new AutomationException("Incorrect scope depth for reading option settings");
|
||||
}
|
||||
|
||||
// Check if the property already exists. If it does, we don't need to register it as an option.
|
||||
string ExistingValue;
|
||||
if(TryGetPropertyValue(Name, out ExistingValue))
|
||||
{
|
||||
// If there's a restriction on this definition, check it matches
|
||||
string Restrict = ReadAttribute(Element, "Restrict");
|
||||
if(!String.IsNullOrEmpty(Restrict) && !Regex.IsMatch(ExistingValue, "^" + Restrict + "$", RegexOptions.IgnoreCase))
|
||||
{
|
||||
LogError(Element, "'{0} is already set to '{1}', which does not match the given restriction ('{2}')", Name, ExistingValue, Restrict);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Create a new option object to store the settings
|
||||
string Description = ReadAttribute(Element, "Description");
|
||||
string DefaultValue = ReadAttribute(Element, "DefaultValue");
|
||||
GraphOption Option = new GraphOption(Name, Description, DefaultValue);
|
||||
Graph.Options.Add(Option);
|
||||
|
||||
// Get the value of this property
|
||||
string Value;
|
||||
if(!Arguments.TryGetValue(Name, out Value))
|
||||
{
|
||||
Value = Option.DefaultValue;
|
||||
}
|
||||
SetPropertyValue(Element, Name, Value);
|
||||
|
||||
// If there's a restriction on it, check it's valid
|
||||
string Restrict = ReadAttribute(Element, "Restrict");
|
||||
if(!String.IsNullOrEmpty(Restrict))
|
||||
{
|
||||
string Pattern = "^" + Restrict + "$";
|
||||
if(!Regex.IsMatch(Value, Pattern, RegexOptions.IgnoreCase))
|
||||
{
|
||||
LogError(Element, "'{0}' is not a valid value for '{1}' (required: '{2}')", Value, Name, Restrict);
|
||||
}
|
||||
if(Option.DefaultValue != Value && !Regex.IsMatch(Option.DefaultValue, Pattern, RegexOptions.IgnoreCase))
|
||||
{
|
||||
LogError(Element, "Default value '{0}' is not valid for '{1}' (required: '{2}')", Option.DefaultValue, Name, Restrict);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -470,52 +614,25 @@ namespace AutomationTool
|
||||
string Name = ReadAttribute(Element, "Name");
|
||||
if (ValidateName(Element, Name))
|
||||
{
|
||||
// Find the scope containing this property, defaulting to the current scope
|
||||
int ScopeIdx = 0;
|
||||
while(ScopeIdx < ScopedProperties.Count - 1 && !ScopedProperties[ScopeIdx].ContainsKey(Name))
|
||||
{
|
||||
ScopeIdx++;
|
||||
}
|
||||
string Value = ReadAttribute(Element, "Value");
|
||||
SetPropertyValue(Element, Name, Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Make sure this property name was not already used in a child scope; it likely indicates an error.
|
||||
if(ShadowProperties[ScopeIdx].Contains(Name))
|
||||
{
|
||||
LogError(Element, "Property '{0}' was already used in a child scope. Move this definition before the previous usage if they are intended to share scope, or use a different name.", Name);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Make sure it's added to the shadow property list for every parent scope
|
||||
for(int Idx = 0; Idx < ScopeIdx; Idx++)
|
||||
{
|
||||
ShadowProperties[Idx].Add(Name);
|
||||
}
|
||||
|
||||
// Assign the property value
|
||||
if(Element.HasAttribute("Value"))
|
||||
{
|
||||
ScopedProperties[ScopeIdx][Name] = ReadAttribute(Element, "Value");
|
||||
}
|
||||
if(Element.HasAttribute("Default") && !ScopedProperties[ScopeIdx].ContainsKey(Name))
|
||||
{
|
||||
ScopedProperties[ScopeIdx][Name] = ReadAttribute(Element, "Default");
|
||||
}
|
||||
if(Element.HasAttribute("Restrict"))
|
||||
{
|
||||
// Find the valid values for this property
|
||||
string[] Values = ReadListAttribute(Element, "Restrict");
|
||||
|
||||
// Get the property value, and check it matches
|
||||
string Value;
|
||||
if(!ScopedProperties[ScopeIdx].TryGetValue(Name, out Value))
|
||||
{
|
||||
LogError(Element, "Property '{0}' is not defined.", Name);
|
||||
}
|
||||
else if(!Values.Any(x => String.Compare(x, Value, StringComparison.InvariantCultureIgnoreCase) == 0))
|
||||
{
|
||||
LogError(Element, "Property '{0}' is set to an invalid value ({1}). Valid values are {2}.", Name, Value, String.Join(", ", Values));
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Reads a property assignment from an environment variable.
|
||||
/// </summary>
|
||||
/// <param name="Element">Xml element to read the definition from</param>
|
||||
void ReadEnvVar(ScriptElement Element)
|
||||
{
|
||||
if (EvaluateCondition(Element))
|
||||
{
|
||||
string Name = ReadAttribute(Element, "Name");
|
||||
if (ValidateName(Element, Name))
|
||||
{
|
||||
string Value = Environment.GetEnvironmentVariable(Name) ?? "";
|
||||
SetPropertyValue(Element, Name, Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -594,8 +711,8 @@ namespace AutomationTool
|
||||
case "Do":
|
||||
ReadBlock(ChildElement, x => ReadAgentBody(x, ParentAgent, ControllingTrigger));
|
||||
break;
|
||||
case "Choose":
|
||||
ReadChoice(ChildElement, x => ReadAgentBody(x, ParentAgent, ControllingTrigger));
|
||||
case "Switch":
|
||||
ReadSwitch(ChildElement, x => ReadAgentBody(x, ParentAgent, ControllingTrigger));
|
||||
break;
|
||||
case "ForEach":
|
||||
ReadForEach(ChildElement, x => ReadAgentBody(x, ParentAgent, ControllingTrigger));
|
||||
@@ -679,7 +796,7 @@ namespace AutomationTool
|
||||
string[] RequiresNames = ReadListAttribute(Element, "Requires");
|
||||
string[] ProducesNames = ReadListAttribute(Element, "Produces");
|
||||
string[] AfterNames = ReadListAttribute(Element, "After");
|
||||
string[] TicketFileNames = ReadListAttribute(Element, "Ticket");
|
||||
string[] TokenFileNames = ReadListAttribute(Element, "Token");
|
||||
bool bNotifyOnWarnings = ReadBooleanAttribute(Element, "NotifyOnWarnings", true);
|
||||
|
||||
// Resolve all the inputs we depend on
|
||||
@@ -700,12 +817,12 @@ namespace AutomationTool
|
||||
}
|
||||
|
||||
// Remove all the lock names from the list of required names
|
||||
HashSet<FileReference> RequiredTickets = new HashSet<FileReference>(TicketFileNames.Select(x => FileReference.Combine(CommandUtils.RootDirectory, x)));
|
||||
HashSet<FileReference> RequiredTokens = new HashSet<FileReference>(TokenFileNames.Select(x => FileReference.Combine(CommandUtils.RootDirectory, x)));
|
||||
|
||||
// Recursively include all their dependencies too
|
||||
foreach (Node InputDependency in InputDependencies.ToArray())
|
||||
{
|
||||
RequiredTickets.UnionWith(InputDependency.RequiredTickets);
|
||||
RequiredTokens.UnionWith(InputDependency.RequiredTokens);
|
||||
InputDependencies.UnionWith(InputDependency.InputDependencies);
|
||||
}
|
||||
|
||||
@@ -756,7 +873,7 @@ namespace AutomationTool
|
||||
if (CheckNameIsUnique(Element, Name))
|
||||
{
|
||||
// Add it to the node lookup
|
||||
Node NewNode = new Node(Name, Inputs.ToArray(), ValidOutputNames.ToArray(), InputDependencies.ToArray(), OrderDependencies.ToArray(), ControllingTrigger, RequiredTickets.ToArray());
|
||||
Node NewNode = new Node(Name, Inputs.ToArray(), ValidOutputNames.ToArray(), InputDependencies.ToArray(), OrderDependencies.ToArray(), ControllingTrigger, RequiredTokens.ToArray());
|
||||
NewNode.bNotifyOnWarnings = bNotifyOnWarnings;
|
||||
Graph.NameToNode.Add(Name, NewNode);
|
||||
|
||||
@@ -801,8 +918,8 @@ namespace AutomationTool
|
||||
case "Do":
|
||||
ReadBlock(ChildElement, x => ReadNodeBody(x, NewNode, ParentAgent, ControllingTrigger));
|
||||
break;
|
||||
case "Choose":
|
||||
ReadChoice(ChildElement, x => ReadNodeBody(x, NewNode, ParentAgent, ControllingTrigger));
|
||||
case "Switch":
|
||||
ReadSwitch(ChildElement, x => ReadNodeBody(x, NewNode, ParentAgent, ControllingTrigger));
|
||||
break;
|
||||
case "ForEach":
|
||||
ReadForEach(ChildElement, x => ReadNodeBody(x, NewNode, ParentAgent, ControllingTrigger));
|
||||
@@ -829,15 +946,15 @@ namespace AutomationTool
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reads a "Choose" element
|
||||
/// Reads a "Switch" element
|
||||
/// </summary>
|
||||
/// <param name="Element">Xml element to read the definition from</param>
|
||||
/// <param name="ReadContents">Delegate to read the contents of the element, if the condition evaluates to true</param>
|
||||
void ReadChoice(ScriptElement Element, Action<ScriptElement> ReadContents)
|
||||
void ReadSwitch(ScriptElement Element, Action<ScriptElement> ReadContents)
|
||||
{
|
||||
foreach (ScriptElement ChildElement in Element.ChildNodes.OfType<ScriptElement>())
|
||||
{
|
||||
if (ChildElement.Name == "Otherwise" || EvaluateCondition(ChildElement))
|
||||
if (ChildElement.Name == "Default" || EvaluateCondition(ChildElement))
|
||||
{
|
||||
ReadContents(ChildElement);
|
||||
break;
|
||||
@@ -1256,7 +1373,7 @@ namespace AutomationTool
|
||||
LogError(Element, "Consecutive spaces in object name");
|
||||
return false;
|
||||
}
|
||||
if (!Char.IsLetterOrDigit(Name[Idx]) && Name[Idx] != '_' && Name[Idx] != ' ')
|
||||
if(Char.IsControl(Name[Idx]) || ScriptSchema.IllegalNameCharacters.IndexOf(Name[Idx]) != -1)
|
||||
{
|
||||
LogError(Element, "Invalid character in object name - '{0}'", Name[Idx]);
|
||||
return false;
|
||||
@@ -1417,17 +1534,8 @@ namespace AutomationTool
|
||||
string Name = Result.Substring(Idx + 2, EndIdx - (Idx + 2));
|
||||
|
||||
// Find the value for it, either from the dictionary or the environment block
|
||||
string Value = null;
|
||||
for (int ScopeIdx = ScopedProperties.Count - 1; ScopeIdx >= 0; ScopeIdx--)
|
||||
{
|
||||
if (ScopedProperties[ScopeIdx].TryGetValue(Name, out Value))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Write a warning if the property does not exist
|
||||
if(Value == null)
|
||||
string Value;
|
||||
if(!TryGetPropertyValue(Name, out Value))
|
||||
{
|
||||
LogWarning(Element, "Property '{0}' is not defined", Name);
|
||||
Value = "";
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user