diff --git a/Assets/EmuHawkMono.sh b/Assets/EmuHawkMono.sh index 0cdaada150..13c50ea866 100755 --- a/Assets/EmuHawkMono.sh +++ b/Assets/EmuHawkMono.sh @@ -2,9 +2,10 @@ cd "$(dirname "$(realpath "$0")")" libpath="" if [ "$(command -v lsb_release)" ]; then - case "$(lsb_release -i | cut -c17- | tr -d "\n" | tr A-Z a-z)" in + case "$(lsb_release -i | head -n1 | cut -c17- | tr A-Z a-z)" in "arch"|"artix"|"manjarolinux") libpath="/usr/lib";; "fedora"|"gentoo"|"opensuse") libpath="/usr/lib64";; + "nixos") libpath="/usr/lib"; printf "Running on NixOS? Why aren't you using the Nix expr?\n";; "debian"|"linuxmint"|"pop"|"ubuntu") libpath="/usr/lib/x86_64-linux-gnu";; esac else diff --git a/Dist/deps-2_7.nix b/Dist/deps-2_7.nix deleted file mode 100644 index f52bdfd18c..0000000000 --- a/Dist/deps-2_7.nix +++ /dev/null @@ -1 +0,0 @@ -{ fetchNuGet }: map fetchNuGet (import ./deps-base.nix {}).hawk-2_7 diff --git a/Dist/deps-2_8.nix b/Dist/deps-2_8.nix deleted file mode 100644 index 0767142572..0000000000 --- a/Dist/deps-2_8.nix +++ /dev/null @@ -1 +0,0 @@ -{ fetchNuGet }: map fetchNuGet (import ./deps-base.nix {}).hawk-2_8 diff --git a/Dist/deps-base.nix b/Dist/deps-base.nix deleted file mode 100644 index b98dd37af3..0000000000 --- a/Dist/deps-base.nix +++ /dev/null @@ -1,195 +0,0 @@ -{ lib ? (import {}).lib }: let - since-2_7 = [ - ({ name = "Cyotek.Drawing.BitmapFont"; version = "2.0.2"; sha256 = "0h1s1h7bs3iaxmyv1gi5r0712kf40njljdcff52i87fi9jz76lj9"; }) - ({ name = "DotNetAnalyzers.DocumentationAnalyzers"; version = "1.0.0-beta.59"; sha256 = "03kllr1f52jq5a0b1fa2s57yz1bp0awh36n4dk679nqgbg6m8flj"; }) - ({ name = "DotNetAnalyzers.DocumentationAnalyzers.Unstable"; version = "1.0.0.59"; sha256 = "1491q3rby0ysm2bszr33r9h48wk4bz3bz748ziz8p2rklcqrhn5f"; }) - ({ name = "JunitXml.TestLogger"; version = "3.0.98"; sha256 = "1xl6kjaa8b84y8fy0q60mym28nqza3vm3pd4fc8ragcmfh2k5rxv"; }) - ({ name = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; }) - ({ name = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; }) - ({ name = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; }) - ({ name = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; }) - ({ name = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; }) - ({ name = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; }) - ({ name = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; }) - ({ name = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.2"; sha256 = "0i42rn8xmvhn08799manpym06kpw89qy9080myyy2ngy565pqh0a"; }) - ({ name = "Microsoft.NETFramework.ReferenceAssemblies.net48"; version = "1.0.2"; sha256 = "10ry214g6v4s57vmk1pyqz8z3fsqxl44qyn68y0rrfjcpn29sh5m"; }) - ({ name = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; }) - ({ name = "Microsoft.Win32.SystemEvents"; version = "5.0.0"; sha256 = "0sja4ba0mrvdamn0r9mhq38b9dxi08yb3c1hzh29n1z6ws1hlrcq"; }) - ({ name = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; }) - ({ name = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; }) - ({ name = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; }) - ({ name = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; }) - ({ name = "NuGet.Frameworks"; version = "5.0.0"; sha256 = "18ijvmj13cwjdrrm52c8fpq021531zaz4mj4b4zapxaqzzxf2qjr"; }) - ({ name = "OpenTK"; version = "3.3.2"; sha256 = "0jcy4ldq5qp6s1441l12dycfgq0llx4i97y2bbv3n99hg7qvk9vm"; }) - ({ name = "OpenTK.GLControl"; version = "3.1.0"; sha256 = "0j9h89qzwicpd396s49pp51vs3h92ksai444k68w85x62mg07cnm"; }) - ({ name = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; }) - ({ name = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; }) - ({ name = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; }) - ({ name = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; }) - ({ name = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; }) - ({ name = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; }) - ({ name = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; }) - ({ name = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; }) - ({ name = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; }) - ({ name = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; }) - ({ name = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; }) - ({ name = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; }) - ({ name = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; }) - ({ name = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; }) - ({ name = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; }) - ({ name = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; }) - ({ name = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; }) - ({ name = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; }) - ({ name = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; }) - ({ name = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; }) - ({ name = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; }) - ({ name = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; }) - ({ name = "System.ComponentModel.Annotations"; version = "5.0.0"; sha256 = "021h7x98lblq9avm1bgpa4i31c2kgsa7zn4sqhxf39g087ar756j"; }) - ({ name = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; }) - ({ name = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; }) - ({ name = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; }) - ({ name = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; }) - ({ name = "System.Diagnostics.TextWriterTraceListener"; version = "4.3.0"; sha256 = "09db74f36wkwg30f7v7zhz1yhkyrnl5v6bdwljq1jdfgzcfch7c3"; }) - ({ name = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; }) - ({ name = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; }) - ({ name = "System.Diagnostics.TraceSource"; version = "4.3.0"; sha256 = "1kyw4d7dpjczhw6634nrmg7yyyzq72k75x38y0l0nwhigdlp1766"; }) - ({ name = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; }) - ({ name = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; }) - ({ name = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; }) - ({ name = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; }) - ({ name = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; }) - ({ name = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; }) - ({ name = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; }) - ({ name = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; }) - ({ name = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; }) - ({ name = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; }) - ({ name = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; }) - ({ name = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; }) - ({ name = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; }) - ({ name = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; }) - ({ name = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; }) - ({ name = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; }) - ({ name = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; }) - ({ name = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; }) - ({ name = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; }) - ({ name = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; }) - ({ name = "System.Net.Http"; version = "4.3.4"; sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl"; }) - ({ name = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; }) - ({ name = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; }) - ({ name = "System.Numerics.Vectors"; version = "4.4.0"; sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba"; }) - ({ name = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; }) - ({ name = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; }) - ({ name = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; }) - ({ name = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; }) - ({ name = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; }) - ({ name = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; }) - ({ name = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; }) - ({ name = "System.Reflection.Emit"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; }) - ({ name = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; }) - ({ name = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; }) - ({ name = "System.Reflection.Emit.ILGeneration"; version = "4.7.0"; sha256 = "0l8jpxhpgjlf1nkz5lvp61r4kfdbhr29qi8aapcxn3izd9wd0j8r"; }) - ({ name = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; }) - ({ name = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; }) - ({ name = "System.Reflection.Emit.Lightweight"; version = "4.7.0"; sha256 = "0mbjfajmafkca47zr8v36brvknzks5a7pgb49kfq2d188pyv6iap"; }) - ({ name = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; }) - ({ name = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; }) - ({ name = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; }) - ({ name = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; }) - ({ name = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; }) - ({ name = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; }) - ({ name = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; }) - ({ name = "System.Resources.Extensions"; version = "5.0.0"; sha256 = "0v2zdwpnqky43zhjrd2dwbap02n4pfwrhl9sz70zp3mpx7z6qxnj"; }) - ({ name = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; }) - ({ name = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; }) - ({ name = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; }) - ({ name = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; }) - ({ name = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.3"; sha256 = "1afi6s2r1mh1kygbjmfba6l4f87pi5sg13p4a48idqafli94qxln"; }) - ({ name = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; }) - ({ name = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; }) - ({ name = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; }) - ({ name = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; }) - ({ name = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; }) - ({ name = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; }) - ({ name = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; }) - ({ name = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; }) - ({ name = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; }) - ({ name = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; }) - ({ name = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; }) - ({ name = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; }) - ({ name = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; }) - ({ name = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; }) - ({ name = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; }) - ({ name = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; }) - ({ name = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; }) - ({ name = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; }) - ({ name = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; }) - ({ name = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; }) - ({ name = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; }) - ({ name = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; }) - ({ name = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; }) - ({ name = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; }) - ({ name = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; }) - ({ name = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; }) - ({ name = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; }) - ({ name = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; }) - ({ name = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; }) - ({ name = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; }) - ({ name = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; }) - ({ name = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; }) - ({ name = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; }) - ]; - until-2_8 = [ - ({ name = "Microsoft.AspNetCore.App.Ref"; version = "5.0.0"; sha256 = "0d7sjr89zwq0wxirf8la05hfalv9nhvlczg1c7a508k8aw79jvfg"; }) - ({ name = "Microsoft.CodeCoverage"; version = "16.10.0"; sha256 = "0nimrz7araj72d4ckpkqprvg6rgdv5y1bvmv63pqqbphbif9fjd1"; }) - ({ name = "Microsoft.NET.Test.Sdk"; version = "16.10.0"; sha256 = "1rz5d3h2427xp86qm8l35bs7xkl93771gk8401bsd7mrrad86nwb"; }) - ({ name = "Microsoft.TestPlatform.ObjectModel"; version = "16.10.0"; sha256 = "062llwghbmf5vhrczylyzhlflhd5lx05607aipmximd66p50wzbk"; }) - ({ name = "Microsoft.TestPlatform.TestHost"; version = "16.10.0"; sha256 = "1lhwwxlylmklp8wwirfmdc4dzfp2h8fxgw847cqy8by8h5wcwbjc"; }) - ({ name = "MSTest.TestAdapter"; version = "2.2.3"; sha256 = "14lfcagmcqv2kqyaanxdrhh57v6g7h790v6k9sicdbmahwnkkia2"; }) - ({ name = "MSTest.TestFramework"; version = "2.2.3"; sha256 = "1ycmya48212j4295qwldyzpm20001zdlmzna0zi9m3jvhlvhjggg"; }) - ({ name = "SharpCompress"; version = "0.26.0"; sha256 = "03cygf8p44j1bfn6z9cn2xrw6zhvhq17xac1sph5rgq7vq2m5iq5"; }) - ({ name = "System.Runtime.CompilerServices.Unsafe"; version = "4.7.1"; sha256 = "119br3pd85lq8zcgh4f60jzmv1g976q1kdgi3hvqdlhfbw6siz2j"; }) - ({ name = "System.Text.Encoding.CodePages"; version = "4.7.1"; sha256 = "1y1hdap9qbl7vp74j8s9zcbh3v1rnrrvcc55wj1hl6has2v3qh1r"; }) - ]; - since-2_8 = [ - ({ name = "Microsoft.CodeCoverage"; version = "17.0.0"; sha256 = "18gdbsqf6i79ld4ikqr4jhx9ndsggm865b5xj1xmnmgg12ydp19a"; }) - ({ name = "Microsoft.NET.Test.Sdk"; version = "17.0.0"; sha256 = "0bknyf5kig5icwjxls7pcn51x2b2qf91dz9qv67fl70v6cczaz2r"; }) - ({ name = "Microsoft.TestPlatform.ObjectModel"; version = "17.0.0"; sha256 = "1bh5scbvl6ndldqv20sl34h4y257irm9ziv2wyfc3hka6912fhn7"; }) - ({ name = "Microsoft.TestPlatform.TestHost"; version = "17.0.0"; sha256 = "06mn31cgpp7d8lwdyjanh89prc66j37dchn74vrd9s588rq0y70r"; }) - ({ name = "MSTest.TestAdapter"; version = "2.2.8"; sha256 = "045k737srwvm6dpad04dkj7ln38csf45lps5j88w8hyzrdgllbb9"; }) - ({ name = "MSTest.TestFramework"; version = "2.2.8"; sha256 = "1jw7sl2li7xzx8scciz9bc2rw8cnwcwxr8061zykrgg1dbjx6aa3"; }) - ({ name = "SharpCompress"; version = "0.30.1"; sha256 = "1hib2hxjrlikwsczym1qn2slaapgjw8qzd8gmid8bryaz8hv044h"; }) - ({ name = "System.Collections.Immutable"; version = "5.0.0"; sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r"; }) - ({ name = "System.Runtime.CompilerServices.Unsafe"; version = "5.0.0"; sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x"; }) - ({ name = "System.Text.Encoding.CodePages"; version = "5.0.0"; sha256 = "1bn2pzaaq4wx9ixirr8151vm5hynn3lmrljcgjx9yghmm4k677k0"; }) - ]; - until-2_9 = [ - ({ name = "Menees.Analyzers"; version = "2.0.4"; sha256 = "0nvg9jw99066cf3aqg3iqllsabq8l100wbki62yq8ldmqlygg0wr"; }) - ({ name = "Microsoft.NETCore.Platforms"; version = "3.1.1"; sha256 = "05hmaygd5131rnqi6ipv7agsbpi7ka18779vw45iw6b385l7n987"; }) - ({ name = "Nullable"; version = "1.3.0"; sha256 = "1h4m6as8ahkjm6adz42rnp33kgxgkn0aj7a1m09c73w4fps1ypcd"; }) - ({ name = "StyleCop.Analyzers"; version = "1.2.0-beta.333"; sha256 = "0ayfbwm5lqw0y9gshvdw1a0jym21bzrw7qv41n504hnq3sjdxjh6"; }) - ({ name = "StyleCop.Analyzers.Unstable"; version = "1.2.0.333"; sha256 = "04jkfv3azqvd1nd2fsi0gi3mcrxjj9cf5cmavhbcqc5ibjjrarjz"; }) - ({ name = "System.Drawing.Common"; version = "5.0.2"; sha256 = "08kgiywg5whhw80xshlrp0q9mkl8hlkgqdsnk1gm6bb898f1l3gs"; }) - ]; - since-2_9 = [ - ({ name = "Google.FlatBuffers"; version = "22.9.24"; sha256 = "0v72xrzcd7pphjizi2y5amk11nqjvhm7qqcb899rypl91a8vxw04"; }) - ({ name = "Menees.Analyzers"; version = "3.0.8"; sha256 = "1apv06cmnrakaylyh85hjyn380cnj0h53j3pakyp0f4jnpgw0bgf"; }) - ({ name = "Meziantou.Analyzer"; version = "1.0.707"; sha256 = "09drs16fr0xly4k8drznw7pa5f2byjc9km0pm0c3rrhl7jsz4ds5"; }) - ({ name = "Microsoft.AspNetCore.App.Ref"; version = "6.0.9"; sha256 = "16zdir94cacz2qrndspkyvwq7gp0cp20wdixkazfzxk8h5fhgbzw"; }) - ({ name = "Microsoft.Bcl.HashCode"; version = "1.1.1"; sha256 = "0xwfph92p92d8hgrdiaka4cazqsjpg4ywfxfx6qbk3939f29kzl0"; }) - ({ name = "Nullable"; version = "1.3.1"; sha256 = "0hwrr4q22c0i056dqy3v431rxjv7md910ihz0pjsi16qxsbpw7p7"; }) - ({ name = "StyleCop.Analyzers"; version = "1.2.0-beta.435"; sha256 = "0dirz0av24ds2k7hgpss15y4wlhwlzz22qdjvkq0n3g3sxcckrsy"; }) - ({ name = "StyleCop.Analyzers.Unstable"; version = "1.2.0.435"; sha256 = "1jv4ha4y2c9922n21yf2dvfkmi8qfa8z28gk5zsqdyck08izp9mh"; }) - ({ name = "System.Drawing.Common"; version = "5.0.3"; sha256 = "1rnvqh5hwsqvxgn9g8g98sppg32llhk4y45lgv4dw0q6k945pgcy"; }) - ]; - partialLists = [ - until-2_8 - until-2_9 - since-2_7 - since-2_8 - since-2_9 - ]; - versions = [ "hawk-2_7" "hawk-2_8" "hawk-2_9" ]; - versionCount = builtins.length versions; - f = i: builtins.foldl' (a: b: a ++ b) [] (lib.sublist i versionCount partialLists); -in assert (builtins.length partialLists) == versionCount * 2 - 1; - builtins.listToAttrs (lib.imap0 (i: name: { inherit name; value = f i; }) versions) diff --git a/Dist/deps-historical.nix b/Dist/deps-historical.nix new file mode 100644 index 0000000000..839b269e1a --- /dev/null +++ b/Dist/deps-historical.nix @@ -0,0 +1,298 @@ +let + only-2_6_2-through-2_9 = [ + { pname = "Cyotek.Drawing.BitmapFont"; version = "2.0.2"; sha256 = "0h1s1h7bs3iaxmyv1gi5r0712kf40njljdcff52i87fi9jz76lj9"; } + ]; + only-2_6_3_and-2_7 = [ + { pname = "Microsoft.CodeCoverage"; version = "16.10.0"; sha256 = "0nimrz7araj72d4ckpkqprvg6rgdv5y1bvmv63pqqbphbif9fjd1"; } + { pname = "Microsoft.NET.Test.Sdk"; version = "16.10.0"; sha256 = "1rz5d3h2427xp86qm8l35bs7xkl93771gk8401bsd7mrrad86nwb"; } + { pname = "Microsoft.NETCore.Platforms"; version = "3.1.1"; sha256 = "05hmaygd5131rnqi6ipv7agsbpi7ka18779vw45iw6b385l7n987"; } + { pname = "Microsoft.TestPlatform.ObjectModel"; version = "16.10.0"; sha256 = "062llwghbmf5vhrczylyzhlflhd5lx05607aipmximd66p50wzbk"; } + { pname = "Microsoft.TestPlatform.TestHost"; version = "16.10.0"; sha256 = "1lhwwxlylmklp8wwirfmdc4dzfp2h8fxgw847cqy8by8h5wcwbjc"; } + { pname = "MSTest.TestAdapter"; version = "2.2.3"; sha256 = "14lfcagmcqv2kqyaanxdrhh57v6g7h790v6k9sicdbmahwnkkia2"; } + { pname = "MSTest.TestFramework"; version = "2.2.3"; sha256 = "1ycmya48212j4295qwldyzpm20001zdlmzna0zi9m3jvhlvhjggg"; } + { pname = "SharpCompress"; version = "0.26.0"; sha256 = "03cygf8p44j1bfn6z9cn2xrw6zhvhq17xac1sph5rgq7vq2m5iq5"; } + { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.7.1"; sha256 = "119br3pd85lq8zcgh4f60jzmv1g976q1kdgi3hvqdlhfbw6siz2j"; } + { pname = "System.Text.Encoding.CodePages"; version = "4.7.1"; sha256 = "1y1hdap9qbl7vp74j8s9zcbh3v1rnrrvcc55wj1hl6has2v3qh1r"; } + ]; + only-2_6_3-through-2_8 = [ + { pname = "OpenTK"; version = "3.3.2"; sha256 = "0jcy4ldq5qp6s1441l12dycfgq0llx4i97y2bbv3n99hg7qvk9vm"; } + { pname = "System.Drawing.Common"; version = "5.0.2"; sha256 = "08kgiywg5whhw80xshlrp0q9mkl8hlkgqdsnk1gm6bb898f1l3gs"; } + ]; + only-2_6_3-through-2_9 = [ + { pname = "JunitXml.TestLogger"; version = "3.0.98"; sha256 = "1xl6kjaa8b84y8fy0q60mym28nqza3vm3pd4fc8ragcmfh2k5rxv"; } + { pname = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.2"; sha256 = "0i42rn8xmvhn08799manpym06kpw89qy9080myyy2ngy565pqh0a"; } + { pname = "Microsoft.NETFramework.ReferenceAssemblies.net48"; version = "1.0.2"; sha256 = "10ry214g6v4s57vmk1pyqz8z3fsqxl44qyn68y0rrfjcpn29sh5m"; } + { pname = "System.Resources.Extensions"; version = "5.0.0"; sha256 = "0v2zdwpnqky43zhjrd2dwbap02n4pfwrhl9sz70zp3mpx7z6qxnj"; } + ]; + only-2_8-and-2_9 = [ + { pname = "Microsoft.CodeCoverage"; version = "17.0.0"; sha256 = "18gdbsqf6i79ld4ikqr4jhx9ndsggm865b5xj1xmnmgg12ydp19a"; } + { pname = "Microsoft.NET.Test.Sdk"; version = "17.0.0"; sha256 = "0bknyf5kig5icwjxls7pcn51x2b2qf91dz9qv67fl70v6cczaz2r"; } + { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.0.0"; sha256 = "1bh5scbvl6ndldqv20sl34h4y257irm9ziv2wyfc3hka6912fhn7"; } + { pname = "Microsoft.TestPlatform.TestHost"; version = "17.0.0"; sha256 = "06mn31cgpp7d8lwdyjanh89prc66j37dchn74vrd9s588rq0y70r"; } + { pname = "MSTest.TestAdapter"; version = "2.2.8"; sha256 = "045k737srwvm6dpad04dkj7ln38csf45lps5j88w8hyzrdgllbb9"; } + { pname = "MSTest.TestFramework"; version = "2.2.8"; sha256 = "1jw7sl2li7xzx8scciz9bc2rw8cnwcwxr8061zykrgg1dbjx6aa3"; } + { pname = "SharpCompress"; version = "0.30.1"; sha256 = "1hib2hxjrlikwsczym1qn2slaapgjw8qzd8gmid8bryaz8hv044h"; } + { pname = "System.Collections.Immutable"; version = "5.0.0"; sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r"; } + ]; +in { + until-2_6 = []; + only-2_6 = []; + since-2_6 = [ + { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; } + { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; } + { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; } + { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; } + { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; } + { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; } + { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; } + { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; } + { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; } + { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; } + { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; } + { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; } + { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; } + { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; } + { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; } + { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; } + { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; } + { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; } + { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; } + { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; } + { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; } + { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; } + { pname = "runtime.any.System.Threading.Timer"; version = "4.3.0"; sha256 = "0aw4phrhwqz9m61r79vyfl5la64bjxj8l34qnrcwb28v49fg2086"; } + { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; } + { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; } + { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; } + { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; } + { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; } + { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; } + { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; } + { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; } + { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; } + { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; } + { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; } + { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; } + { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; } + { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; } + { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; } + { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; } + { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; } + { pname = "runtime.unix.System.Console"; version = "4.3.0"; sha256 = "1pfpkvc6x2if8zbdzg9rnc5fx51yllprl8zkm5npni2k50lisy80"; } + { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; } + { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; } + { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; } + { pname = "runtime.unix.System.Net.Sockets"; version = "4.3.0"; sha256 = "03npdxzy8gfv035bv1b9rz7c7hv0rxl5904wjz51if491mw0xy12"; } + { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; } + { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; } + { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; } + { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; } + { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; } + { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; } + { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; } + { pname = "System.ComponentModel.Annotations"; version = "5.0.0"; sha256 = "021h7x98lblq9avm1bgpa4i31c2kgsa7zn4sqhxf39g087ar756j"; } + { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; } + { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; } + { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; } + { pname = "System.Diagnostics.TextWriterTraceListener"; version = "4.3.0"; sha256 = "09db74f36wkwg30f7v7zhz1yhkyrnl5v6bdwljq1jdfgzcfch7c3"; } + { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; } + { pname = "System.Diagnostics.TraceSource"; version = "4.3.0"; sha256 = "1kyw4d7dpjczhw6634nrmg7yyyzq72k75x38y0l0nwhigdlp1766"; } + { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; } + { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; } + { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; } + { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; } + { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; } + { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; } + { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; } + { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; } + { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; } + { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; } + { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; } + { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; } + { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; } + { pname = "System.Net.Http"; version = "4.3.4"; sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl"; } + { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; } + { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; } + { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; } + { pname = "System.Numerics.Vectors"; version = "4.4.0"; sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba"; } + { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; } + { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; } + { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; } + { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; } + { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; } + { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; } + { pname = "System.Reflection.Emit.ILGeneration"; version = "4.7.0"; sha256 = "0l8jpxhpgjlf1nkz5lvp61r4kfdbhr29qi8aapcxn3izd9wd0j8r"; } + { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; } + { pname = "System.Reflection.Emit.Lightweight"; version = "4.7.0"; sha256 = "0mbjfajmafkca47zr8v36brvknzks5a7pgb49kfq2d188pyv6iap"; } + { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; } + { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; } + { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; } + { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; } + { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; } + { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; } + { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.3"; sha256 = "1afi6s2r1mh1kygbjmfba6l4f87pi5sg13p4a48idqafli94qxln"; } + { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; } + { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; } + { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; } + { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; } + { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; } + { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; } + { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; } + { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; } + { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; } + { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; } + { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; } + { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; } + { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; } + { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; } + { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; } + { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; } + { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; } + { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; } + { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; } + { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; } + { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; } + { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; } + { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; } + { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; } + { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; } + ]; + + until-2_6_1 = [ + { pname = "Microsoft.VisualBasic"; version = "10.3.0"; sha256 = "1l2351srrbxjvf5kdzid50246fapb957xxiqi8n0caf5wbs8lwzq"; } + { pname = "SharpZipLib"; version = "1.1.0"; sha256 = "1jlqnza79sicf5p6v4ssyn70j7gbd3yrcjhgv5iykzb7d9kbcjqg"; } + ]; + only-2_6_1 = []; + since-2_6_1 = []; + + until-2_6_2 = [ + { pname = "Cyotek.Drawing.BitmapFont"; version = "1.0.2"; sha256 = "18rzr6b2403i8i51h18zf82lwkdvnyw9bn4qd7l7sk1xlc9qgjga"; } + { pname = "OpenTK"; version = "3.1.0"; sha256 = "0qh541p4mlih5i1bjla8yzv21dv7gpmqijf9k0r6wjc309pcf9pp"; } + ]; + only-2_6_2 = only-2_6_2-through-2_9; + since-2_6_2 = []; + + until-2_6_3 = [ + { pname = "JunitXml.TestLogger"; version = "2.1.78"; sha256 = "0sdh4hckig6jbr8hbmih1lc8ax1lcvari0dfy9y5ipvvphdkcn5k"; } + { pname = "Microsoft.CodeCoverage"; version = "16.8.3"; sha256 = "1r49rr83s9agbs3xkmf1dlkvqbay163qvwz6r2z6lgh92r9flksv"; } + { pname = "Microsoft.NET.Test.Sdk"; version = "16.8.3"; sha256 = "1ahah4vgdjfymab7cd49rpdagsjd1x1hid3h82yln99b3p91whkd"; } + { pname = "Microsoft.NETCore.Platforms"; version = "2.1.2"; sha256 = "1507hnpr9my3z4w1r6xk5n0s1j3y6a2c2cnynj76za7cphxi1141"; } + { pname = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.0"; sha256 = "0na724xhvqm63vq9y18fl9jw9q2v99bdwr353378s5fsi11qzxp9"; } + { pname = "Microsoft.NETFramework.ReferenceAssemblies.net48"; version = "1.0.0"; sha256 = "1kl3nx89mkyn07rc3ny0mzrnyndzyk95bl5b0khkdkncqnha02zx"; } + { pname = "Microsoft.TestPlatform.ObjectModel"; version = "16.8.3"; sha256 = "0szyg2p18w9lhlp52iylrr97w3kdalab089imhc53x1850avddsg"; } + { pname = "Microsoft.TestPlatform.TestHost"; version = "16.8.3"; sha256 = "0lgjvzhh2gkcl1r1f9w97wv5zy0p8iga68ml6v10m9wxh640zdqr"; } + { pname = "MSTest.TestAdapter"; version = "2.1.2"; sha256 = "1390nyc0sf5c4j75cq58bzqjcw77sp2lmpllmm5sp8ysi0fjyfs5"; } + { pname = "MSTest.TestFramework"; version = "2.1.2"; sha256 = "1617q2accpa8fwy9n1snmjxyx2fz3phks62mdi45cl65kdin0x4z"; } + { pname = "Newtonsoft.Json"; version = "12.0.3"; sha256 = "17dzl305d835mzign8r15vkmav2hq8l6g7942dfjpnzr17wwl89x"; } + { pname = "OpenTK"; version = "3.3.0"; sha256 = "1nnwam2lc9zmadi0k2nvv764m6n8sn0nk8cdgg8574i3dn0llmha"; } + { pname = "runtime.native.System"; version = "4.0.0"; sha256 = "1ppk69xk59ggacj9n7g6fyxvzmk1g5p4fkijm0d7xqfkig98qrkf"; } + { pname = "SharpCompress"; version = "0.24.0"; sha256 = "13bzq8ggipr5254654l2ndm6jdxj9ggandy01gpjxnjwy4jhaz9p"; } + { pname = "System.Drawing.Common"; version = "5.0.0"; sha256 = "0fag8hr2v9bswrsjka311lhbr1a43yzcc36j4fadz0f0kl2hby7h"; } + { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.2"; sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi"; } + { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.0.0"; sha256 = "0glmvarf3jz5xh22iy3w9v3wyragcm4hfdr17v90vs7vcrm7fgp6"; } + { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w"; } + ]; + only-2_6_3 = only-2_6_2-through-2_9 ++ only-2_6_3_and-2_7 ++ only-2_6_3-through-2_8 ++ only-2_6_3-through-2_9; + since-2_6_3 = [ + { pname = "DotNetAnalyzers.DocumentationAnalyzers"; version = "1.0.0-beta.59"; sha256 = "03kllr1f52jq5a0b1fa2s57yz1bp0awh36n4dk679nqgbg6m8flj"; } + { pname = "DotNetAnalyzers.DocumentationAnalyzers.Unstable"; version = "1.0.0.59"; sha256 = "1491q3rby0ysm2bszr33r9h48wk4bz3bz748ziz8p2rklcqrhn5f"; } + { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; } + { pname = "System.Reflection.Emit"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; } + ]; + + until-2_7 = []; + only-2_7 = only-2_6_2-through-2_9 ++ only-2_6_3_and-2_7 ++ only-2_6_3-through-2_8 ++ only-2_6_3-through-2_9; + since-2_7 = []; + + until-2_8 = []; + only-2_8 = only-2_6_2-through-2_9 ++ only-2_6_3-through-2_8 ++ only-2_6_3-through-2_9 ++ only-2_8-and-2_9; + since-2_8 = [ + { pname = "System.Runtime.CompilerServices.Unsafe"; version = "5.0.0"; sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x"; } + { pname = "System.Text.Encoding.CodePages"; version = "5.0.0"; sha256 = "1bn2pzaaq4wx9ixirr8151vm5hynn3lmrljcgjx9yghmm4k677k0"; } + ]; + + until-2_9 = [ + { pname = "Nullable"; version = "1.3.0"; sha256 = "1h4m6as8ahkjm6adz42rnp33kgxgkn0aj7a1m09c73w4fps1ypcd"; } + { pname = "OpenTK.GLControl"; version = "3.1.0"; sha256 = "0j9h89qzwicpd396s49pp51vs3h92ksai444k68w85x62mg07cnm"; } + ]; + only-2_9 = only-2_6_2-through-2_9 ++ only-2_6_3-through-2_9 ++ only-2_8-and-2_9 ++ [ + { pname = "Menees.Analyzers"; version = "3.0.8"; sha256 = "1apv06cmnrakaylyh85hjyn380cnj0h53j3pakyp0f4jnpgw0bgf"; } + { pname = "Meziantou.Analyzer"; version = "1.0.707"; sha256 = "09drs16fr0xly4k8drznw7pa5f2byjc9km0pm0c3rrhl7jsz4ds5"; } + { pname = "System.Drawing.Common"; version = "5.0.3"; sha256 = "1rnvqh5hwsqvxgn9g8g98sppg32llhk4y45lgv4dw0q6k945pgcy"; } + ]; + since-2_9 = [ + { pname = "Google.FlatBuffers"; version = "22.9.24"; sha256 = "0v72xrzcd7pphjizi2y5amk11nqjvhm7qqcb899rypl91a8vxw04"; } + { pname = "Microsoft.Bcl.HashCode"; version = "1.1.1"; sha256 = "0xwfph92p92d8hgrdiaka4cazqsjpg4ywfxfx6qbk3939f29kzl0"; } + { pname = "Nullable"; version = "1.3.1"; sha256 = "0hwrr4q22c0i056dqy3v431rxjv7md910ihz0pjsi16qxsbpw7p7"; } + { pname = "OpenTK"; version = "3.3.3"; sha256 = "1ab67cmwd5nzdp1476m2ikb3m7a7hhn7wdfl6zfzp0wngzbcvzv9"; } + { pname = "OpenTK.GLControl"; version = "3.3.3"; sha256 = "0nc9yykylkf4qmrzbkn368iaq5jzly8ryw99sggd293qhp2s1kqm"; } + { pname = "StyleCop.Analyzers"; version = "1.2.0-beta.435"; sha256 = "0dirz0av24ds2k7hgpss15y4wlhwlzz22qdjvkq0n3g3sxcckrsy"; } + { pname = "StyleCop.Analyzers.Unstable"; version = "1.2.0.435"; sha256 = "1jv4ha4y2c9922n21yf2dvfkmi8qfa8z28gk5zsqdyck08izp9mh"; } + ]; + + until-2_9_1 = [ + { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; } + { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; } + { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; } + { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; } + { pname = "Microsoft.Win32.SystemEvents"; version = "5.0.0"; sha256 = "0sja4ba0mrvdamn0r9mhq38b9dxi08yb3c1hzh29n1z6ws1hlrcq"; } + { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; } + { pname = "NuGet.Frameworks"; version = "5.0.0"; sha256 = "18ijvmj13cwjdrrm52c8fpq021531zaz4mj4b4zapxaqzzxf2qjr"; } + { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; } + { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; } + { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; } + { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; } + { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; } + { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; } + { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; } + { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; } + { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; } + { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; } + { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; } + { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; } + { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; } + { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; } + { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; } + { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; } + { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; } + { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; } + { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; } + { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; } + { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; } + { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; } + { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; } + { pname = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; } + { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; } + { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; } + { pname = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; } + { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; } + { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; } + { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; } + { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; } + { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; } + ]; + only-2_9_1 = [ + { pname = "Cyotek.Drawing.BitmapFont"; version = "2.0.4"; sha256 = "04n0lq9sqfjzyvkqav6qrc8v9fb7jv1n7jk0j4r6ivfbmffzq8if"; } + { pname = "JunitXml.TestLogger"; version = "3.0.124"; sha256 = "1s70k74bkw0fhfkylak289c2s7l6vijz7n5j64qyw7bjzncqs4n7"; } + { pname = "Menees.Analyzers"; version = "3.0.10"; sha256 = "1fgkr4x8cnjmn6xj106g1y5smc49x9qkmb8c42nx7sqg3lzwqpgb"; } + { pname = "Meziantou.Analyzer"; version = "2.0.33"; sha256 = "0lyi217pijxh7jw5xg47ks5r32s77g0xlw9nf42vjbmczfmhk23d"; } + { pname = "Microsoft.CodeCoverage"; version = "17.5.0"; sha256 = "0briw00gb5bz9k9kx00p6ghq47w501db7gb6ig5zzmz9hb8lw4a4"; } + { pname = "Microsoft.NET.Test.Sdk"; version = "17.5.0"; sha256 = "00gz2i8kx4mlq1ywj3imvf7wc6qzh0bsnynhw06z0mgyha1a21jy"; } + { pname = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.3"; sha256 = "0hc4d4d4358g5192mf8faijwk0bpf9pjwcfd3h85sr67j0zhj6hl"; } + { pname = "Microsoft.NETFramework.ReferenceAssemblies.net48"; version = "1.0.3"; sha256 = "18h4265rn5dy5d1igddsz1ilygcyyj4id4cn2qsr3sz7722k8zla"; } + { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.5.0"; sha256 = "0qkjyf3ky6xpjg5is2sdsawm99ka7fzgid2bvpglwmmawqgm8gls"; } + { pname = "Microsoft.TestPlatform.TestHost"; version = "17.5.0"; sha256 = "17g0k3r5n8grba8kg4nghjyhnq9w8v0w6c2nkyyygvfh8k8x9wh3"; } + { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.0"; sha256 = "0c6pcj088g1yd1vs529q3ybgsd2vjlk5y1ic6dkmbhvrp5jibl9p"; } + { pname = "MSTest.TestAdapter"; version = "2.2.9"; sha256 = "0wvnpnwhfwbbgzdpqjwdmndda4x2ha8zq3pbd8x008g2kj1d5ggl"; } + { pname = "MSTest.TestFramework"; version = "2.2.9"; sha256 = "1wd57ky7nxmddp1nn3sy6p9w1jdfg89z1yw0yrg16byn501jrs23"; } + { pname = "Newtonsoft.Json"; version = "13.0.3"; sha256 = "0xrwysmrn4midrjal8g2hr1bbg38iyisl0svamb11arqws4w2bw7"; } + { pname = "NuGet.Frameworks"; version = "5.11.0"; sha256 = "0wv26gq39hfqw9md32amr5771s73f5zn1z9vs4y77cgynxr73s4z"; } + { pname = "SharpCompress"; version = "0.31.0"; sha256 = "01az7amjkxjbya5rdcqwxzrh2d3kybf1gsd3617rsxvvxadyra1r"; } + { pname = "System.Collections.Immutable"; version = "7.0.0"; sha256 = "1n9122cy6v3qhsisc9lzwa1m1j62b8pi2678nsmnlyvfpk0zdagm"; } + { pname = "System.Drawing.Common"; version = "6.0.0"; sha256 = "02n8rzm58dac2np8b3xw8ychbvylja4nh6938l5k2fhyn40imlgz"; } + { pname = "System.Memory"; version = "4.5.5"; sha256 = "08jsfwimcarfzrhlyvjjid61j02irx6xsklf32rv57x2aaikvx0h"; } + { pname = "System.Resources.Extensions"; version = "7.0.0"; sha256 = "0d5gk5g5qqkwa728jwx9yabgjvgywsy6k8r5vgqv2dmlvjrqflb4"; } + { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; } + ]; + since-2_9_1 = []; +} \ No newline at end of file diff --git a/Dist/deps.nix b/Dist/deps.nix index d1d7d3a59f..45bb617c72 100644 --- a/Dist/deps.nix +++ b/Dist/deps.nix @@ -1 +1,195 @@ -{ fetchNuGet }: map fetchNuGet (import ./deps-base.nix {}).hawk-2_9 +# This file was automatically generated by passthru.fetch-deps. +# Please dont edit it manually, your changes might get overwritten! + +{ fetchNuGet }: [ + (fetchNuGet { pname = "Cyotek.Drawing.BitmapFont"; version = "2.0.4"; sha256 = "04n0lq9sqfjzyvkqav6qrc8v9fb7jv1n7jk0j4r6ivfbmffzq8if"; }) + (fetchNuGet { pname = "DotNetAnalyzers.DocumentationAnalyzers"; version = "1.0.0-beta.59"; sha256 = "03kllr1f52jq5a0b1fa2s57yz1bp0awh36n4dk679nqgbg6m8flj"; }) + (fetchNuGet { pname = "DotNetAnalyzers.DocumentationAnalyzers.Unstable"; version = "1.0.0.59"; sha256 = "1491q3rby0ysm2bszr33r9h48wk4bz3bz748ziz8p2rklcqrhn5f"; }) + (fetchNuGet { pname = "Google.FlatBuffers"; version = "22.9.24"; sha256 = "0v72xrzcd7pphjizi2y5amk11nqjvhm7qqcb899rypl91a8vxw04"; }) + (fetchNuGet { pname = "JunitXml.TestLogger"; version = "3.0.124"; sha256 = "1s70k74bkw0fhfkylak289c2s7l6vijz7n5j64qyw7bjzncqs4n7"; }) + (fetchNuGet { pname = "Menees.Analyzers"; version = "3.0.10"; sha256 = "1fgkr4x8cnjmn6xj106g1y5smc49x9qkmb8c42nx7sqg3lzwqpgb"; }) + (fetchNuGet { pname = "Meziantou.Analyzer"; version = "2.0.33"; sha256 = "0lyi217pijxh7jw5xg47ks5r32s77g0xlw9nf42vjbmczfmhk23d"; }) + (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "7.0.0"; sha256 = "1waiggh3g1cclc81gmjrqbh128kwfjky3z79ma4bd2ms9pa3gvfm"; }) + (fetchNuGet { pname = "Microsoft.Bcl.HashCode"; version = "1.1.1"; sha256 = "0xwfph92p92d8hgrdiaka4cazqsjpg4ywfxfx6qbk3939f29kzl0"; }) + (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "17.5.0"; sha256 = "0briw00gb5bz9k9kx00p6ghq47w501db7gb6ig5zzmz9hb8lw4a4"; }) + (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; }) + (fetchNuGet { pname = "Microsoft.Data.Sqlite"; version = "7.0.9"; sha256 = "1k86yaxs5rhn2f9d2lag6012pr9z5s5qyp47s9wpf54kmvbvxw57"; }) + (fetchNuGet { pname = "Microsoft.Data.Sqlite.Core"; version = "7.0.9"; sha256 = "1jvcily6sbjqpgns3fyiiv3yyggdbsc7wa4wypmfi442s45rkl4k"; }) + (fetchNuGet { pname = "Microsoft.DotNet.PlatformAbstractions"; version = "3.1.6"; sha256 = "0b9myd7gqbpaw9pkd2bx45jhik9mwj0f1ss57sk2cxmag2lkdws5"; }) + (fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "7.0.0"; sha256 = "04wb6hw3r7mmhg57215r1mb01q17glyaddjw1j5g1drsws914fj4"; }) + (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.5.0"; sha256 = "00gz2i8kx4mlq1ywj3imvf7wc6qzh0bsnynhw06z0mgyha1a21jy"; }) + (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; }) + (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; }) + (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies"; version = "1.0.3"; sha256 = "0hc4d4d4358g5192mf8faijwk0bpf9pjwcfd3h85sr67j0zhj6hl"; }) + (fetchNuGet { pname = "Microsoft.NETFramework.ReferenceAssemblies.net48"; version = "1.0.3"; sha256 = "18h4265rn5dy5d1igddsz1ilygcyyj4id4cn2qsr3sz7722k8zla"; }) + (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.5.0"; sha256 = "0qkjyf3ky6xpjg5is2sdsawm99ka7fzgid2bvpglwmmawqgm8gls"; }) + (fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "17.5.0"; sha256 = "17g0k3r5n8grba8kg4nghjyhnq9w8v0w6c2nkyyygvfh8k8x9wh3"; }) + (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; }) + (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.0"; sha256 = "0c6pcj088g1yd1vs529q3ybgsd2vjlk5y1ic6dkmbhvrp5jibl9p"; }) + (fetchNuGet { pname = "MSTest.TestAdapter"; version = "2.2.9"; sha256 = "0wvnpnwhfwbbgzdpqjwdmndda4x2ha8zq3pbd8x008g2kj1d5ggl"; }) + (fetchNuGet { pname = "MSTest.TestFramework"; version = "2.2.9"; sha256 = "1wd57ky7nxmddp1nn3sy6p9w1jdfg89z1yw0yrg16byn501jrs23"; }) + (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; }) + (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; }) + (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; }) + (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.3"; sha256 = "0xrwysmrn4midrjal8g2hr1bbg38iyisl0svamb11arqws4w2bw7"; }) + (fetchNuGet { pname = "NuGet.Frameworks"; version = "5.11.0"; sha256 = "0wv26gq39hfqw9md32amr5771s73f5zn1z9vs4y77cgynxr73s4z"; }) + (fetchNuGet { pname = "Nullable"; version = "1.3.1"; sha256 = "0hwrr4q22c0i056dqy3v431rxjv7md910ihz0pjsi16qxsbpw7p7"; }) + (fetchNuGet { pname = "PolySharp"; version = "1.10.0"; sha256 = "06qici3hhk6a0jmy0nyvspcnmhbapnic6iin3i28pkdvrii02hnz"; }) + (fetchNuGet { pname = "ppy.SDL2-CS"; version = "1.0.630-alpha"; sha256 = "0jrf70jrz976b49ac0ygfy9qph2w7fnbfrqv0g0x7hlpaip33ra8"; }) + (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; }) + (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; }) + (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; }) + (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; }) + (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; }) + (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; }) + (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; }) + (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; }) + (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; }) + (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; }) + (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; }) + (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; }) + (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; }) + (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; }) + (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; }) + (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; }) + (fetchNuGet { pname = "runtime.any.System.Threading.Timer"; version = "4.3.0"; sha256 = "0aw4phrhwqz9m61r79vyfl5la64bjxj8l34qnrcwb28v49fg2086"; }) + (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; }) + (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; }) + (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; }) + (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; }) + (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; }) + (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; }) + (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; }) + (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; }) + (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; }) + (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; }) + (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; }) + (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; }) + (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; }) + (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; }) + (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; }) + (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; }) + (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; }) + (fetchNuGet { pname = "runtime.unix.System.Console"; version = "4.3.0"; sha256 = "1pfpkvc6x2if8zbdzg9rnc5fx51yllprl8zkm5npni2k50lisy80"; }) + (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; }) + (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; }) + (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; }) + (fetchNuGet { pname = "runtime.unix.System.Net.Sockets"; version = "4.3.0"; sha256 = "03npdxzy8gfv035bv1b9rz7c7hv0rxl5904wjz51if491mw0xy12"; }) + (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; }) + (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; }) + (fetchNuGet { pname = "SharpCompress"; version = "0.31.0"; sha256 = "01az7amjkxjbya5rdcqwxzrh2d3kybf1gsd3617rsxvvxadyra1r"; }) + (fetchNuGet { pname = "SharpDX"; version = "4.2.0"; sha256 = "1hvg44sicvcby4kfgxmbj1y0cz8ybddas4hkiw8smyh00822cw8i"; }) + (fetchNuGet { pname = "SharpDX.Direct3D9"; version = "4.2.0"; sha256 = "051b7rvmh4phy6id6jyk3n4f8jmfir77i5kcgmfgvppkdvfj15gn"; }) + (fetchNuGet { pname = "SharpDX.DirectSound"; version = "4.2.0"; sha256 = "13hyclpi58sqmhfmxp9zgspyxxhl4wf6vl9mqp6p9xmy0z4r9yf2"; }) + (fetchNuGet { pname = "SharpGen.Runtime"; version = "2.0.0-beta.13"; sha256 = "1250z6sa9ghf84czlkzvaysb29c0n229z1f0vh5qls89akrkl7h8"; }) + (fetchNuGet { pname = "SharpGen.Runtime.COM"; version = "2.0.0-beta.13"; sha256 = "1lmv3jp2g7mgy9j23pd3j0wr3p89qiq8v6c6qxqf688izyni1166"; }) + (fetchNuGet { pname = "Silk.NET.Core"; version = "2.18.0"; sha256 = "0rj6xi6ia8p3wzg62cvybp16gwz92zdl7w2ll7aclzmlf6s70ml8"; }) + (fetchNuGet { pname = "Silk.NET.Maths"; version = "2.18.0"; sha256 = "1nkl1sikp7vxljrr0yagb96r3cm6rqg902dg7i0zjc4pj641bqjy"; }) + (fetchNuGet { pname = "Silk.NET.OpenAL"; version = "2.18.0"; sha256 = "1j0wzm4cxj6l52rjn9y7yw3bk4knf5ynjavhxg1b770k4169lgf2"; }) + (fetchNuGet { pname = "Silk.NET.OpenAL.Extensions.Creative"; version = "2.18.0"; sha256 = "0vm8lb0xfbbqs470v84346hyj4w4y4z2mbs6395nx01vx89x0y26"; }) + (fetchNuGet { pname = "Silk.NET.OpenAL.Extensions.Enumeration"; version = "2.18.0"; sha256 = "0lnhzb5x5mwp1nc8ibvp26v3c65sd02dfyzvif9ywli1ajmj2bnw"; }) + (fetchNuGet { pname = "Silk.NET.OpenGL.Legacy"; version = "2.18.0"; sha256 = "1f86dzf7slrp6dnsxhrgwdzbv1gf22ydr2igd5k0rnnr6g2iyrzy"; }) + (fetchNuGet { pname = "SQLitePCLRaw.bundle_e_sqlite3"; version = "2.1.4"; sha256 = "0shdspl9cm71wwqg9103s44r0l01r3sgnpxr523y4a0wlgac50g0"; }) + (fetchNuGet { pname = "SQLitePCLRaw.core"; version = "2.1.4"; sha256 = "09akxz92qipr1cj8mk2hw99i0b81wwbwx26gpk21471zh543f8ld"; }) + (fetchNuGet { pname = "SQLitePCLRaw.lib.e_sqlite3"; version = "2.1.4"; sha256 = "11l85ksv1ck46j8z08fyf0c3l572zmp9ynb7p5chm5iyrh8xwkkn"; }) + (fetchNuGet { pname = "SQLitePCLRaw.provider.dynamic_cdecl"; version = "2.1.4"; sha256 = "0pv2haxc2ml4y4sfc9cll9gd9s3kvw044si95bl0lhrdnlsv909g"; }) + (fetchNuGet { pname = "SQLitePCLRaw.provider.e_sqlite3"; version = "2.1.4"; sha256 = "0b8f51nrjkq0pmfzjaqk5rp7r0cp2lbdm2whynj3xsjklppzmn35"; }) + (fetchNuGet { pname = "StyleCop.Analyzers"; version = "1.2.0-beta.435"; sha256 = "0dirz0av24ds2k7hgpss15y4wlhwlzz22qdjvkq0n3g3sxcckrsy"; }) + (fetchNuGet { pname = "StyleCop.Analyzers.Unstable"; version = "1.2.0.435"; sha256 = "1jv4ha4y2c9922n21yf2dvfkmi8qfa8z28gk5zsqdyck08izp9mh"; }) + (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; }) + (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; }) + (fetchNuGet { pname = "System.Buffers"; version = "4.4.0"; sha256 = "183f8063w8zqn99pv0ni0nnwh7fgx46qzxamwnans55hhs2l0g19"; }) + (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; }) + (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; }) + (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; }) + (fetchNuGet { pname = "System.Collections.Immutable"; version = "7.0.0"; sha256 = "1n9122cy6v3qhsisc9lzwa1m1j62b8pi2678nsmnlyvfpk0zdagm"; }) + (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "5.0.0"; sha256 = "021h7x98lblq9avm1bgpa4i31c2kgsa7zn4sqhxf39g087ar756j"; }) + (fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; }) + (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; }) + (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; }) + (fetchNuGet { pname = "System.Diagnostics.TextWriterTraceListener"; version = "4.3.0"; sha256 = "09db74f36wkwg30f7v7zhz1yhkyrnl5v6bdwljq1jdfgzcfch7c3"; }) + (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; }) + (fetchNuGet { pname = "System.Diagnostics.TraceSource"; version = "4.3.0"; sha256 = "1kyw4d7dpjczhw6634nrmg7yyyzq72k75x38y0l0nwhigdlp1766"; }) + (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; }) + (fetchNuGet { pname = "System.Drawing.Common"; version = "6.0.0"; sha256 = "02n8rzm58dac2np8b3xw8ychbvylja4nh6938l5k2fhyn40imlgz"; }) + (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; }) + (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; }) + (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; }) + (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; }) + (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; }) + (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; }) + (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; }) + (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; }) + (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; }) + (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; }) + (fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; }) + (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; }) + (fetchNuGet { pname = "System.Memory"; version = "4.5.5"; sha256 = "08jsfwimcarfzrhlyvjjid61j02irx6xsklf32rv57x2aaikvx0h"; }) + (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; }) + (fetchNuGet { pname = "System.Net.Http"; version = "4.3.4"; sha256 = "0kdp31b8819v88l719j6my0yas6myv9d1viql3qz5577mv819jhl"; }) + (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; }) + (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; }) + (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; }) + (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.4.0"; sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba"; }) + (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; }) + (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; }) + (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; }) + (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; }) + (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; }) + (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; }) + (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; }) + (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.7.0"; sha256 = "0l8jpxhpgjlf1nkz5lvp61r4kfdbhr29qi8aapcxn3izd9wd0j8r"; }) + (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; }) + (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.7.0"; sha256 = "0mbjfajmafkca47zr8v36brvknzks5a7pgb49kfq2d188pyv6iap"; }) + (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; }) + (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; }) + (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; }) + (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; }) + (fetchNuGet { pname = "System.Resources.Extensions"; version = "7.0.0"; sha256 = "0d5gk5g5qqkwa728jwx9yabgjvgywsy6k8r5vgqv2dmlvjrqflb4"; }) + (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; }) + (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; }) + (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.2"; sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi"; }) + (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.3"; sha256 = "1afi6s2r1mh1kygbjmfba6l4f87pi5sg13p4a48idqafli94qxln"; }) + (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.7.1"; sha256 = "119br3pd85lq8zcgh4f60jzmv1g976q1kdgi3hvqdlhfbw6siz2j"; }) + (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "5.0.0"; sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x"; }) + (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; }) + (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; }) + (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; }) + (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; }) + (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.0.0"; sha256 = "0glmvarf3jz5xh22iy3w9v3wyragcm4hfdr17v90vs7vcrm7fgp6"; }) + (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; }) + (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; }) + (fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; }) + (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; }) + (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; }) + (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; }) + (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; }) + (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; }) + (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; }) + (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; }) + (fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; }) + (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; }) + (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; }) + (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "5.0.0"; sha256 = "1bn2pzaaq4wx9ixirr8151vm5hynn3lmrljcgjx9yghmm4k677k0"; }) + (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; }) + (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "7.0.0"; sha256 = "1151hbyrcf8kyg1jz8k9awpbic98lwz9x129rg7zk1wrs6vjlpxl"; }) + (fetchNuGet { pname = "System.Text.Json"; version = "7.0.0"; sha256 = "0scb0lp7wbgcinaa4kqiqs7b8i5nx4ppfad81138jiwd1sl37pyp"; }) + (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; }) + (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; }) + (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; }) + (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; }) + (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; }) + (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; }) + (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; }) + (fetchNuGet { pname = "System.ValueTuple"; version = "4.5.0"; sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy"; }) + (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; }) + (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; }) + (fetchNuGet { pname = "Ultz.Bcl.Half"; version = "1.0.0"; sha256 = "1a77c7iv1ngldhrjk5j5gijaanmq5k26lqg99symrcmn90dmcxkf"; }) + (fetchNuGet { pname = "Ultz.Bcl.Half.Fallback"; version = "1.0.0"; sha256 = "1c34rv9dc81sp53gvcqnfr69ncf4fi2vq07cj1hixaf7wmd32k14"; }) + (fetchNuGet { pname = "Vortice.DirectInput"; version = "2.4.2"; sha256 = "0dhw843crww6kaiikpwazpz4b62val8k8drkb8jwrpviy50anfgz"; }) + (fetchNuGet { pname = "Vortice.DirectX"; version = "2.4.2"; sha256 = "11yjyvyz922z1ygl8gxmdym3918df12nl7xxry4pdjpl8is33qic"; }) + (fetchNuGet { pname = "Vortice.Mathematics"; version = "1.4.25"; sha256 = "0vl6g087disxyzskvkbnwym74s47lkza0ly3nk4y0y88zibcggrj"; }) + (fetchNuGet { pname = "Vortice.MediaFoundation"; version = "2.4.2"; sha256 = "0nk8r564w8x791nqn5457jcq0gj7v6k5v1mziisqy4945byjxcdl"; }) + (fetchNuGet { pname = "Vortice.XAudio2"; version = "2.4.2"; sha256 = "0iwnaa0jdl3782k9i9j2c0s7lyxjky1ph6i8dv12w3ym2p19h3qc"; }) + (fetchNuGet { pname = "Vortice.XInput"; version = "2.4.2"; sha256 = "0qpnih6k6mbc027f3hka5588j2v7m1hf81lh29whcww1cqw89sxm"; }) +] \ No newline at end of file diff --git a/Dist/exposed-attr-checker.nix b/Dist/exposed-attr-checker.nix new file mode 100644 index 0000000000..306e3c4368 --- /dev/null +++ b/Dist/exposed-attr-checker.nix @@ -0,0 +1,42 @@ +{ lib ? (import {}).lib +}: let + /** returns negation of needle's length iff not found */ + indexOf = needle: haystack: let + len = lib.stringLength needle; + naiveImpl = i: if lib.substring i len haystack == needle then i else naiveImpl (i + 1); + cleverImpl = lib.converge + (i: let + substr = lib.substring i len haystack; + in if lib.strings.levenshteinAtMost (len - 1) needle substr + then if needle == substr then i else i + 1 + else i + len) + 0; + in if lib.hasInfix needle haystack + then if len < 85000000 then naiveImpl 0 else cleverImpl # from testing on a ~1600 KLOC file, cleverImpl starts being faster around this point (presumably because it makes fewer allocations)--though it's still only ~600 ms execution time + else -len; + /** returns haystack iff not found */ + substringAfter = needle: haystack: lib.substring + ((indexOf needle haystack) + (lib.stringLength needle)) + (lib.stringLength haystack) + haystack; + /** returns empty string iff not found */ + substringBefore = needle: haystack: lib.substring 0 (indexOf needle haystack) haystack; + /** + * Filters a list `l` by evaluating a predicate on each element and its index (0-based). + * The predicate callback `f` has same parameters as for `imap0`, but should return a bool, + * `true` iff the value should be included in the resulting list. + * The resulting list only includes the filtered-for elements, not their indices. + */ + ifilter0 = f: l: lib.pipe l [ + (lib.imap0 (i: v: { inherit i v; })) + (lib.filter (a: f a.i a.v)) + (lib.catAttrs "v") + ]; + ac = lib.attrNames (import ./.. {}); # could also check shell.nix, but that's completely programmatic and a strict subset of default.nix so there's not much point + ex = lib.pipe (lib.readFile ./nix_expr_usage_docs.md) [ + (substringAfter "MARKER_FOR_HELPER_SCRIPT_START") + (substringBefore "MARKER_FOR_HELPER_SCRIPT_END") + (lib.splitString "`") + (ifilter0 (i: _: lib.mod i 2 == 1)) + ]; +in { missing = lib.subtractLists ac ex; extra = lib.subtractLists ex ac; } \ No newline at end of file diff --git a/Dist/historical.nix b/Dist/historical.nix new file mode 100644 index 0000000000..3dda40aedc --- /dev/null +++ b/Dist/historical.nix @@ -0,0 +1,215 @@ +{ lib +# infrastructure +, drvVersionAtLeast +, replaceDotWithUnderscore +, fetchFromGitHub +, fetchFromGitLab +, mkNugetDeps +# makedeps +, dotnet-sdk_5 +, dotnet-sdk_6 +}: let + /** + * updating? make sure to hit the rest of this file, the hand-written deps `/Dist/deps-historical.nix`, + * the shell script for CI `/Dist/nix_expr_check_attrs.sh`, and the docs `/Dist/nix_expr_usage_docs.md` + */ + releases = [ "2.9.1" "2.9" "2.8" "2.7" "2.6.3" "2.6.2" "2.6.1" "2.6" ]; + releaseCount = lib.length releases; + releaseFrags = builtins.map replaceDotWithUnderscore releases; + releaseOffsetLookup = lib.listToAttrs (lib.imap0 (lib.flip lib.nameValuePair) releaseFrags); + depsForHistoricalRelease = releaseFrag: fetchNuGet: let + file = import ./deps-historical.nix; + windows = (builtins.map (s: file."since-${s}") releaseFrags) ++ (builtins.map (s: file."until-${s}") releaseFrags); + extras = builtins.map (s: file."only-${s}") releaseFrags; + i = releaseOffsetLookup.${releaseFrag}; + in builtins.map fetchNuGet (lib.elemAt extras i ++ lib.concatLists (lib.sublist i releaseCount windows)); + releaseTagSourceInfos = let + f = { hashPostPatching, rev, version, postFetch ? "", dotnet-sdk ? null }: let + shortHash = lib.substring 0 9 rev; + fetcherArgs = { + inherit rev; + repo = "BizHawk"; + hash = hashPostPatching; + postFetch = '' + shortHash=${shortHash} + '' + postFetch; + }; + in (lib.optionalAttrs (dotnet-sdk != null) { inherit dotnet-sdk; }) // { + inherit shortHash version; + branch = "master"; + drv = fetchFromGitHub (fetcherArgs // { owner = "TASEmulators"; }); + #TODO can use `srcs` w/ `buildDotnetModule`? + # verified hashes match for 2.7 through 2.9, but 2.9.1 rev (745efb1dd) was missing (force-push nonsense IIRC) + drv1 = fetchFromGitLab (fetcherArgs // { owner = "TASVideos"; }); + nugetDeps = let + releaseFrag = replaceDotWithUnderscore version; + in mkNugetDeps { + name = "BizHawk-${releaseFrag}-deps"; + nugetDeps = { fetchNuGet }: depsForHistoricalRelease releaseFrag fetchNuGet; + }; + }; + /** + * `$(...)` is literal here--these scripts invoke Git in subshells, + * and we need to run them during the build without `nativeBuildInputs = [ git ];` + */ + from-2_6_2-through-2_9-no-git-patch = '' + sed 's/$(git rev-parse --verify HEAD)/'"$shortHash"'/' -i $out/Dist/.InvokeCLIOnMainSln.sh + ''; + /** ditto */ + pre-2_9_1-no-git-patch = '' + sed -e 's/$(git rev-parse --abbrev-ref HEAD)/master/' \ + -e 's/$(git log -1 --format="%h")/'"$shortHash"'/' \ + -i $out/Build/standin.sh + sed 's/$(git rev-list HEAD --count)/'"$commitCount"'/' -i $out/Build/standin.sh + ''; + in lib.mapAttrs (_: f) { + info-2_9_1 = { + version = "2.9.1"; + rev = "745efb1dd8eb82f31ba9201a79cdfc5bcaf1f5d1"; + /** + * `$(...)` is literal here--this script invokes Git in a subshell, + * and we need to run it during the build without `nativeBuildInputs = [ git ];` + * (though in this case the build would continue with the dummy value after printing an error) + */ + postFetch = '' + sed 's/$(git rev-parse --verify HEAD || printf "0000000000000000000000000000000000000000")/'"$shortHash"'/' \ + -i $out/Dist/.InvokeCLIOnMainSln.sh + ''; + hashPostPatching = "sha256-g6U0B+wY5uosP5WyNFKylBRX9kq+zM6H+f05egYqcAQ="; + }; + info-2_9 = { + version = "2.9"; + rev = "ac3a8c7e5f0711b51defdb3f121d1a63c44818c3"; + postFetch = '' + commitCount=20208 + '' + pre-2_9_1-no-git-patch + from-2_6_2-through-2_9-no-git-patch; + hashPostPatching = "sha256-gDLStqpRGxTlXip+FKWj/O7sQElBNjQK8HpjZbXsrC0="; + }; + info-2_8 = { + version = "2.8"; + rev = "e731e0f32903cd40b83ed75bba3b1e3753105ce2"; + postFetch = '' + commitCount=19337 + '' + pre-2_9_1-no-git-patch + from-2_6_2-through-2_9-no-git-patch; + hashPostPatching = "sha256-TfxAA8QkyImau0MxCdbTWFKneXZwpXYPIB+iN9z+Unk="; + }; + info-2_7 = { + version = "2.7"; + rev = "dbaf2595625f79093eeec37d2d4a7a9a4d37f370"; + postFetch = '' + commitCount=19020 + '' + pre-2_9_1-no-git-patch + from-2_6_2-through-2_9-no-git-patch; + hashPostPatching = "sha256-IX8WmNU+gEY8Vh6OAC3XogiGSmAfdAks4HPJVt4K/4w="; + dotnet-sdk = dotnet-sdk_5; + }; + info-2_6_3 = { + version = "2.6.3"; + rev = "167bfeb4c0821ac066a006233149e2e3c5b0dbe0"; + postFetch = '' + commitCount=18925 + '' + pre-2_9_1-no-git-patch + from-2_6_2-through-2_9-no-git-patch; + hashPostPatching = "sha256-2+r35rVDNYQ1sKffjSph+bsSWRtz1v3jgDqAi5WrhKo="; + dotnet-sdk = dotnet-sdk_5; + }; + info-2_6_2 = { + version = "2.6.2"; + rev = "c5e6aadb0e4cf697385d29c2a481a3ae0017145e"; + postFetch = '' + commitCount=18704 + '' + pre-2_9_1-no-git-patch + from-2_6_2-through-2_9-no-git-patch; + hashPostPatching = "sha256-TPf2lFI4PrswoPFQAKrr9vQPHQ9Qi5afgPSyJEErKuo="; + dotnet-sdk = dotnet-sdk_5; + }; + info-2_6_1 = { + version = "2.6.1"; + rev = "bd31773d9e44e698fd5c0356a600e532b0a9251f"; + postFetch = '' + commitCount=18467 + '' + pre-2_9_1-no-git-patch; + hashPostPatching = "sha256-2+zIlHIENzakZGxjSGfA0owFRr5K2u5EagxTbnKeVsw="; + dotnet-sdk = dotnet-sdk_5; + }; + info-2_6 = { + version = "2.6"; + rev = "7749d02382d1c9e682cbd28ff3dd3240e5b91227"; + postFetch = '' + commitCount=18376 + '' + pre-2_9_1-no-git-patch; + hashPostPatching = "sha256-kswmNENYxumQlJdUKRQcb5Ni5+aXUqKxEnJ8jX5OHQ0="; + dotnet-sdk = dotnet-sdk_5; + }; + }; +in { + inherit depsForHistoricalRelease releaseFrags releaseTagSourceInfos; + /** called by `buildAssembliesFor` i.e. immediately before use of a `hawkSourceInfo` */ + populateHawkSourceInfo = hawkSourceInfo: let + inherit (hawkSourceInfo) version; + neededExtraManagedDepsApprox = [ "virtu" ] + ++ lib.optionals (drvVersionAtLeast "2.6" version) [ "hawkQuantizer" "isoParser" ] + ++ lib.optionals (drvVersionAtLeast "2.6.2" version) [ "flatBuffersGenOutput" "srcGenReflectionCache" ] + ++ lib.optionals (!drvVersionAtLeast "2.9" version) [ "flatBuffersCore" "gongShell" ] + ++ lib.optionals (drvVersionAtLeast "2.9" version) [ "bizhawkAnalyzer" "nlua" ] + ++ lib.optional (drvVersionAtLeast "2.9.1" version) "srcGenVersionInfo" + ++ lib.optionals (!drvVersionAtLeast "2.9.2" version) [ "slimDX" "systemDataSqliteDropIn" ] + ++ lib.optional (drvVersionAtLeast "2.9.2" version) "srcGenSettingsUtil" + ; + in { + inherit neededExtraManagedDepsApprox; + __contentAddressed = false; #TODO try w/ CA + copyingAssetsInEmuHawkProj = drvVersionAtLeast "2.6.3" version; + dotnet-sdk = dotnet-sdk_6; + exePathRespectsEnvVar = drvVersionAtLeast "2.9.2" version; + hasAssetsInOutput = !drvVersionAtLeast "2.6.1" version; + hasFFmpegPatch_e68a49aa5 = drvVersionAtLeast "2.9.2" version; # with e68a49aa5, downloading *and running* FFmpeg finally works; TODO use FFmpeg from Nixpkgs since it's a stable version (4.4.1) + hasMiscTypeCheckerPatch_6afb3be98 = drvVersionAtLeast "2.6.2" version; + neededExtraManagedDeps = neededExtraManagedDepsApprox; + needsSDL = drvVersionAtLeast "2.9.2" version; + nugetDeps = ./deps.nix; + packageScriptNeeds7Zip = !drvVersionAtLeast "2.6.3" version; + packageScriptRemovesWinFilesFromLinux = drvVersionAtLeast "2.9.2" version; + pathConfigNeedsOrdinal = !drvVersionAtLeast "2.7.1" version; + releaseArtifactHasRogueOTKAsmConfig = version == "2.9.1"; + versionProjNeedsDoubleBuild = !drvVersionAtLeast "2.9.1" version; + #TODO warn about missing/broken features when eval'ing older releases + } // hawkSourceInfo; + /** to be passed to `splitReleaseArtifact` */ + releaseArtifactInfos = lib.mapAttrs' + (releaseFrag: value: { + name = "bizhawkAssemblies-${releaseFrag}-bin"; + value = { + hawkSourceInfo = releaseTagSourceInfos."info-${releaseFrag}" // { branch = "release"; } // value.hawkSourceInfo or {}; + } // value; + }) + { + "2_9_1" = { + stripRoot = false; + hashPrePatching = "sha256-5aKUbNStQ89hnfaxv7MTQ+1qDfy+QNMyLS5WUTdhue4="; + }; + "2_9" = { + hashPrePatching = "sha256-gE0iu2L2yvC6dxBcv9Facm8RKPp9dseD7fAH3fnaZsY="; + }; + "2_8" = { + stripRoot = false; + hashPrePatching = "sha256-IRbhI22l30OPn8zJ4HPemjWUohUvZStlEYKnV7RArFA="; + }; + "2_7" = { + hashPrePatching = "sha256-rc9Tk5Pc4p6YR33cowB9W01iRl8FYgAI/V1CHc+pL5E="; + }; + "2_6_3" = { + stripRoot = false; + hashPrePatching = "sha256-gCHySfNOjqazbQDqk5lKJIYmPI6onqcaVDwuY8Ud2ns="; + }; + "2_6_2" = { + zippedTarball = true; + hashPrePatching = "sha256-tlnF/ZQOkLMbiEV2BqhxzQ/KixGZ30+LgOUoHvpv13s="; + }; + "2_6_1" = { + zippedTarball = true; + hashPrePatching = "sha256-Ou4NbRo7Gh0HWviXSEHtp0PpsGDdYsN8yhR0/gQy3rY="; + }; + "2_6" = { + zippedTarball = true; + hashPrePatching = "sha256-AHP1mgedC9wUq+YAJD0gM4Lrl0H0UkrWyifEDC9KLog="; + }; + }; +} \ No newline at end of file diff --git a/Dist/launch-scripts.nix b/Dist/launch-scripts.nix new file mode 100644 index 0000000000..0f5c57694c --- /dev/null +++ b/Dist/launch-scripts.nix @@ -0,0 +1,111 @@ +{ lib +# infrastructure +, writeShellScript +, writeText +# rundeps +, bizhawkAssemblies +, mkfifo +, mktemp +, nixGL +# other parameters +, debugPInvokes +, debugDotnetHostCrashes +, initConfig # pretend this is JSON; the following env. vars will be substituted by the wrapper script (if surrounded by double-percent e.g. `%%BIZHAWK_DATA_HOME%%`): `BIZHAWK_DATA_HOME` +, isManualLocalBuild # i.e. dotnet build in nix-shell; skips everything involving BIZHAWK_DATA_HOME, such as copying Assets and initConfig +}: let + hawkVersion = bizhawkAssemblies.hawkSourceInfo.version; + commentLineIf = b: lib.optionalString b "# "; + /** + * shell script to copy std{out,err} to files but leave them going to console; + * call as `redirect-output-to-files /target/stdout.txt /target/stderr.txt /path/to/bin arg1 arg2...` + */ + redirectOutputToFiles = writeShellScript "redirect-output-to-files" '' + mktemp='${lib.getBin mktemp}/bin/mktemp' + o="$("$mktemp" -u)" + e="$("$mktemp" -u)" + '${lib.getBin mkfifo}/bin/mkfifo' "$o" "$e" + tee "$1" <"$o" & + shift + tee "$1" <"$e" | sed "s/.*/$(tput setaf 1)&$(tput sgr0)/" >&2 & + shift + exec "$@" >"$o" 2>"$e" + ''; + emuhawk = let + initConfigFile = writeText "config.json" (builtins.toJSON ({ + LastWrittenFrom = if builtins.length (builtins.splitVersion hawkVersion) < 3 then "${hawkVersion}.0" else hawkVersion; # 2.x.0 never included the trailing 0 in display name, and didn't include it in the internal value after 2.5(?); need to do version range check here + PathEntries = { + Paths = [ + ({ System = "Global_NULL"; Type = "Base"; Path = "%%BIZHAWK_DATA_HOME%%"; } + // lib.optionalAttrs bizhawkAssemblies.hawkSourceInfo.pathConfigNeedsOrdinal { Ordinal = 1; }) + ]; + }; + } // initConfig)); + assetManagementScript = ''if [ "$XDG_DATA_HOME" ]; then + BIZHAWK_DATA_HOME="$XDG_DATA_HOME" + else + BIZHAWK_DATA_HOME="$HOME/.local/share" + fi + export BIZHAWK_DATA_HOME="$BIZHAWK_DATA_HOME/emuhawk-monort-${hawkVersion}" + if [ ! -e "$BIZHAWK_DATA_HOME" ]; then + mkdir -p "$BIZHAWK_DATA_HOME" + cd '${bizhawkAssemblies.assets}' + find . -type f -not -wholename './nix-support/*' -exec install -DvT {} "$BIZHAWK_DATA_HOME/{}" \; + fi + cd "$BIZHAWK_DATA_HOME" + if [ ! -e 'config.json' ]; then + sed "s@%%BIZHAWK_DATA_HOME%%@$PWD@g" '${initConfigFile}' >config.json + printf "wrote initial config to %s\n" "$PWD/config.json" + fi + + export BIZHAWK_INT_SYSLIB_PATH='${bizhawkAssemblies.extraUnmanagedDeps}/lib' + ''; + noAssetManagementScript = ''cd "$BIZHAWK_HOME" + + export BIZHAWK_INT_SYSLIB_PATH="$PWD/dll" + ''; + in writeShellScript "emuhawk-mono-wrapper" '' + set -e + + if [ ! -e "$BIZHAWK_HOME/EmuHawk.exe" ]; then + printf "no such file: %s\n" "$BIZHAWK_HOME/EmuHawk.exe" + exit 1 + fi + + ${if isManualLocalBuild then noAssetManagementScript else assetManagementScript} + ldLibPath="$BIZHAWK_INT_SYSLIB_PATH:${lib.makeLibraryPath bizhawkAssemblies.buildInputs}" + if [ -z "$LD_LIBRARY_PATH" ]; then + export LD_LIBRARY_PATH="$ldLibPath" + else + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$ldLibPath" + fi + ${lib.optionalString (!debugPInvokes) "# "}export MONO_LOG_LEVEL=debug MONO_LOG_MASK=dll # pass `--arg debugPInvokes true` to nix-build to enable + ${lib.optionalString debugDotnetHostCrashes "# "}export MONO_CRASH_NOFILE=1 # pass `--arg debugDotnetHostCrashes true` to nix-build to disable + if [ "$1" = '--mono-no-redirect' ]; then + printf "(passing --mono-no-redirect is no longer necessary)\n" >&2 + shift + fi + printf "(capturing output in %s/EmuHawkMono_last*.txt)\n" "$PWD" >&2 + exec '${redirectOutputToFiles}' EmuHawkMono_laststdout.txt EmuHawkMono_laststderr.txt \ + '${lib.getBin bizhawkAssemblies.mono}/bin/mono' \ + "$BIZHAWK_HOME/EmuHawk.exe" --config=config.json "$@" + ''; +in { + inherit emuhawk; + discohawk = writeShellScript "discohawk-mono-wrapper" '' + set -e + + if [ ! -e "$BIZHAWK_HOME/DiscoHawk.exe" ]; then + printf "no such file: %s\n" "$BIZHAWK_HOME/DiscoHawk.exe" + exit 1 + fi + + if [ -z "$LD_LIBRARY_PATH" ]; then + export LD_LIBRARY_PATH="$BIZHAWK_HOME/dll" + else + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$BIZHAWK_HOME/dll" + fi + ${lib.optionalString (!debugPInvokes) "# "}export MONO_LOG_LEVEL=debug MONO_LOG_MASK=dll # pass `--arg debugPInvokes true` to nix-build to enable + exec '${lib.getBin bizhawkAssemblies.mono}/bin/mono' "$BIZHAWK_HOME/DiscoHawk.exe" "$@" + ''; + emuhawkNonNixOS = writeShellScript "emuhawk-mono-wrapper-non-nixos" ''exec '${nixGL}/bin/nixGL' '${emuhawk}' "$@"''; +} \ No newline at end of file diff --git a/Dist/mono-6.12.0.151.nix b/Dist/mono-6.12.0.151.nix deleted file mode 100644 index b7aa4e71e5..0000000000 --- a/Dist/mono-6.12.0.151.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ mono, fetchFromGitHub }: -mono.overrideAttrs (old: rec { - version = "6.12.0.151"; - src = fetchFromGitHub { - owner = "mono"; - repo = "mono"; - rev = "mono-${version}"; - hash = "sha256-rdItM+O6PLQlxPNhMVFpXxRN0XWMC/jcxEeOBNoLo8c="; - fetchSubmodules = true; - }; - nativeBuildInputs = old.nativeBuildInputs ++ [ mono ]; -}) diff --git a/Dist/nix_expr_check_attrs.sh b/Dist/nix_expr_check_attrs.sh new file mode 100644 index 0000000000..572f382ab5 --- /dev/null +++ b/Dist/nix_expr_check_attrs.sh @@ -0,0 +1,43 @@ +#!/bin/sh +set -e +cd "$(dirname "$0")/.." + +printf "Checking all documented attrs are actually exposed (expect \`missing = [];\`)...\n" +nix-instantiate --eval --strict -E 'import Dist/exposed-attr-checker.nix {}' +printf "\n" + +attrNamesToCheck='discohawk-latest emuhawk-2_9_1 emuhawk-2_9 emuhawk-2_8 emuhawk-2_7 emuhawk-2_6_3 emuhawk-2_6_2 emuhawk-2_6_1 emuhawk-2_6' +# not checking `forNixOS = false` since it's just the same wrapped with nixGL +#commonBuildFlags='--pure --arg doCheck true' # not working :( +commonBuildFlags='--pure' +b() { + printf "%s\n" "nix-build $commonBuildFlags $*" + nix-build $commonBuildFlags "$@" + printf "\n" +} +printf "Checking Nix expr is still functional (no guarantees EmuHawk will run). For best results, uninstall (nix-env -e ) and clear cached builds (nix-env --delete-generations +1; nix-store --gc).\nTHIS MAY TAKE A WHILE.\n" +if [ "$1" = "skipmsbuild" ]; then + printf "Skipping building from source in CWD and building old releases from source.\n" +else + if [ "$1" = "skipcwd" ]; then + printf "Skipping building from source in CWD.\n" + else + printf "Starting with the slowest first, building from source in CWD (pass 'skipcwd' as first arg to skip).\n" + b -A emuhawk --argstr buildConfig 'Debug' +# b -A emuhawk --argstr buildConfig 'Debug' --check # definitely not + b -A emuhawk +# b -A emuhawk --check # definitely not +# b -A discohawk # nah +# b -A discohawk --check # definitely not + fi + printf "Building old releases from source (pass 'skipmsbuild' as first arg to skip).\n" + for a in $attrNamesToCheck; do + b -A "$a" +# b -A "$a.assemblies" --check # not reproducible yet :( + done +fi +printf "Packaging releases.\n" +for a in $attrNamesToCheck; do + b -A "$a-bin" + b -A "$a-bin.assemblies" --check +done \ No newline at end of file diff --git a/Dist/nix_expr_update_deps.sh b/Dist/nix_expr_update_deps.sh deleted file mode 100755 index 16089a830e..0000000000 --- a/Dist/nix_expr_update_deps.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh -cd "$(dirname "$0")/.." || exit $? - -p=Dist/packages #TODO tempfile? -dotnet restore --packages="$p" BizHawk.sln "$@" >/dev/null -ec=$? -if [ $ec -ne 0 ]; then - rm -fr "$p" - echo "NuGet restore failed" - exit $ec -fi - -f=Dist/deps-new.nix # needs to be valid Nix path, so no spaces -nuget-to-nix "$p" >"$f" -ec=$? -rm -fr "$p" -if [ $ec -ne 0 ]; then - rm "$f" - echo "Nix codegen failed" - exit $ec -fi - -sed -i -e 's/{ fetchNuGet }: //' -e 's/fetchNuGet //g' -e 's/pname =/name =/g' "$f" -nix-instantiate -E "let f = (import {}).lib.subtractLists; curr = (import Dist/deps-base.nix).hawk_2_8_1; new = import $f; in builtins.foldl' (a: b: builtins.trace b a) [] [ \"removed:\" (f new curr) \"added:\" (f curr new) ]" -rm "$f" diff --git a/Dist/nix_expr_usage_docs.md b/Dist/nix_expr_usage_docs.md new file mode 100644 index 0000000000..d01fd8b0d0 --- /dev/null +++ b/Dist/nix_expr_usage_docs.md @@ -0,0 +1,80 @@ +## Available attributes + + +Installables: + +Version | Attr for asms | Attr for EmuHawk | Attr for DiscoHawk +--:|:--|:--|:-- +2.9.2 dev (CWD) | `bizhawkAssemblies` | `emuhawk` | `discohawk` +2.9.1 | (`bizhawkAssemblies-latest-bin` = ) `bizhawkAssemblies-2_9_1-bin` | (`emuhawk-latest-bin` = ) `emuhawk-2_9_1-bin` | (`discohawk-latest-bin` = ) `discohawk-2_9_1-bin` +2.9.1 from source | (`bizhawkAssemblies-latest` = ) `bizhawkAssemblies-2_9_1` | (`emuhawk-latest` = ) `emuhawk-2_9_1` | (`discohawk-latest` = ) `discohawk-2_9_1` +||| +2.9 | `bizhawkAssemblies-2_9-bin` | `emuhawk-2_9-bin` | DIY +2.9 from source | DIY | `emuhawk-2_9` | DIY +2.8 | `bizhawkAssemblies-2_8-bin` | `emuhawk-2_8-bin` | DIY +2.8 from source | DIY | `emuhawk-2_8` | DIY +2.7 | `bizhawkAssemblies-2_7-bin` | `emuhawk-2_7-bin` | DIY +2.7 from source | DIY | `emuhawk-2_7` | DIY +2.6.3 | `bizhawkAssemblies-2_6_3-bin` | `emuhawk-2_6_3-bin` | DIY +2.6.3 from source | DIY | `emuhawk-2_6_3` | DIY +2.6.2 | `bizhawkAssemblies-2_6_2-bin` | `emuhawk-2_6_2-bin` | DIY +2.6.2 from source | DIY | `emuhawk-2_6_2` | DIY +2.6.1 | `bizhawkAssemblies-2_6_1-bin` | `emuhawk-2_6_1-bin` | DIY +2.6.1 from source | DIY | `emuhawk-2_6_1` | DIY +2.6 | `bizhawkAssemblies-2_6-bin` | `emuhawk-2_6-bin` | DIY +2.6 from source | DIY | `emuhawk-2_6` | DIY + +Nix functions and data: +- `buildAssembliesFor` +- `buildDiscoHawkInstallableFor` +- `buildEmuHawkInstallableFor` +- `buildExtraManagedDepsFor` +- `buildUnmanagedDepsFor` +- `depsForHistoricalRelease` +- `launchScriptsForLocalBuild` +- `releaseTagSourceInfos` +- `splitReleaseArtifact` + + +There are a few parameters you can tweak without writing a full Nix expression: +- `--arg forNixOS false` wraps the final executable with [nixGL](https://github.com/nix-community/nixGL) so it can run on normal distros. +- `--argstr buildConfig Debug` builds the BizHawk solution in Debug configuration. +- `--argstr extraDefines "CoolFeatureFlag"` adds to ``. +- `--arg initConfig {}` can be used to set up keybinds and such, though you probably won't want to use `--arg` for that. +- Check the source for the full list. + +Every installable can also be used with `nix-shell`. Omitting `-A` is the same as `nix-shell -A emuhawk-latest`. + + +The `emuhawk-*` (and `discohawk-*`) attrs are wrappers, so `nix-build --check` won't rebuild the assemblies. +You can use e.g. `-A emuhawk-latest.assemblies --check`. + +The `bizhawkAssemblies-*` attrs (and `*.assemblies`) each have 4 outputs: `!out`, `!assets`, `!extraUnmanagedDeps`, and `!waterboxCores`. +See `packages.nix` for more detail and help with overriding. + +## Building local copy of repo (incl. changes) + +### Use Nix on local source (CWD) + +As per the above table: +```sh +nix-build --pure -A emuhawk +result/bin/emuhawk-* --mono-no-redirect + +# may need to run this first if the checked-in copy of `Dist/deps.nix` hasn't been updated: +nix-build --pure -A emuhawk.fetch-deps && ./result +``` + +### Use dotnet from Nix + +```sh +nix-shell # = `nix-shell -A emuhawk-latest` +# (in shell): +Dist/BuildDebug.sh # = `dotnet build -c Debug BizHawk.sln` +emuhawk-monort-local # = `cd output && mono EmuHawk.exe` + +# if deps (besides NuGet packages) have changed, may need to do this instead, but it will do a slow copy of the repo to the Nix store +nix-shell -A emuhawk +``` \ No newline at end of file diff --git a/Dist/packages-managed.nix b/Dist/packages-managed.nix new file mode 100644 index 0000000000..879a91891e --- /dev/null +++ b/Dist/packages-managed.nix @@ -0,0 +1,20 @@ +{ lib, buildDotnetModule, runCommand, hawkSourceInfo }: let + grabFromReferences = { filePfx, subdir ? "" }: runCommand filePfx { + inherit (hawkSourceInfo) __contentAddressed; + meta.sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; + } ''mkdir -p "$out${subdir}"; cp -vt "$out${subdir}" '${hawkSourceInfo.drv}/References${subdir}'/${filePfx}*''; +in { #TODO build all but flatBuffersCore, gongShell, slimDX, and systemDataSqliteDropIn from source + bizhawkAnalyzer = grabFromReferences { filePfx = "BizHawk.Analyzer"; }; + flatBuffersCore = grabFromReferences { filePfx = "FlatBuffers.Core"; }; + flatBuffersGenOutput = grabFromReferences { filePfx = "FlatBuffers.GenOutput"; }; + gongShell = grabFromReferences { filePfx = "GongShell"; }; + hawkQuantizer = grabFromReferences { filePfx = "PcxFileTypePlugin.HawkQuantizer"; }; + isoParser = grabFromReferences { filePfx = "ISOParser"; }; + nlua = grabFromReferences { filePfx = "NLua"; }; + slimDX = grabFromReferences { filePfx = "SlimDX"; subdir = "/x64"; }; + srcGenReflectionCache = grabFromReferences { filePfx = "BizHawk.SrcGen.ReflectionCache"; }; + srcGenSettingsUtil = grabFromReferences { filePfx = "BizHawk.SrcGen.SettingsUtil"; }; + srcGenVersionInfo = grabFromReferences { filePfx = "BizHawk.SrcGen.VersionInfo"; }; + systemDataSqliteDropIn = grabFromReferences { filePfx = "System.Data.SQLite"; subdir = "/x64/SQLite"; }; + virtu = grabFromReferences { filePfx = "Virtu"; }; +} \ No newline at end of file diff --git a/Dist/packages.nix b/Dist/packages.nix new file mode 100644 index 0000000000..44ed2be45b --- /dev/null +++ b/Dist/packages.nix @@ -0,0 +1,307 @@ +{ lib +, stdenv +# infrastructure +, populateHawkSourceInfo +, replaceDotWithUnderscore +, buildDotnetModule +, fetchpatch +, fetchzip +, hardLinkJoin +, launchScriptsFor +, makeDesktopItem +, releaseTagSourceInfos +, runCommand +, symlinkJoin +, writeShellScriptBin +# makedeps +, git +# rundeps +, lua +, mono +, openal +, SDL2 +, udev +, zstd +# other parameters +, buildConfig +, doCheck +, emuhawkBuildFlavour +, extraDefines +, extraDotnetBuildFlags +}: let + /** to override just one, you'll probably want to manually import packages-managed.nix, and combine that with the output of this */ + buildExtraManagedDepsFor = hawkSourceInfo: let + pm = import ./packages-managed.nix { + inherit lib + buildDotnetModule runCommand + hawkSourceInfo; + }; + in symlinkJoin { + name = "bizhawk-managed-deps"; + paths = builtins.map (s: pm.${s}) (lib.sort lib.lessThan hawkSourceInfo.neededExtraManagedDeps); + }; + /** + * NOTE: This impl. is unfinished, only useful for checking that overriding is possible. + * For actually overriding `extraUnmanagedDeps`, roll your own `symlinkJoin` impl. or something. + * + * TODO replace this with something more like `buildExtraManagedDepsFor`; for existing Nix exprs see https://gitlab.com/YoshiRulz/yoshis-hawk-thoughts/-/issues/10 + */ + buildUnmanagedDepsFor = hawkSourceInfo: stdenv.mkDerivation { + inherit (hawkSourceInfo) version; + pname = "bizhawk-native-deps"; + src = hawkSourceInfo.drv; + dontBuild = true; + installPhase = '' + runHook preInstall + + mkdir -p $out; cp -vt $out Assets/dll/*.so + chmod -x $out/* + + runHook postInstall + ''; + dontFixup = true; + }; + genDepsHostTargetFor = { hawkSourceInfo, mono' ? mono }: [ lua mono' openal (lib.getOutput "out" zstd) ] + ++ lib.optionals hawkSourceInfo.needsSDL [ SDL2 (lib.getOutput "out" udev) ] + ; + /** + * see splitReleaseArtifact re: outputs + * and no you can't build only DiscoHawk and its deps; deal with it + */ + buildAssembliesFor = hawkSourceInfo': let + hawkSourceInfo = populateHawkSourceInfo hawkSourceInfo'; + extraManagedDeps = hawkSourceInfo.extraManagedDeps or buildExtraManagedDepsFor hawkSourceInfo; + in buildDotnetModule (lib.fix (finalAttrs: { # proper `finalAttrs` not supported >:( + inherit doCheck mono; + inherit (hawkSourceInfo) __contentAddressed dotnet-sdk nugetDeps version; + pname = "BizHawk"; + isLocalBuild = lib.hasSuffix "-local" finalAttrs.version; + src = hawkSourceInfo.drv; + postUnpack = lib.optionalString finalAttrs.isLocalBuild ''(cd BizHawk-*-local; Dist/CleanupBuildOutputDirs.sh)''; + outputs = [ "out" "assets" "extraUnmanagedDeps" "waterboxCores" ]; + propagatedBuildOutputs = []; # without this, other outputs depend on `out` + strictDeps = true; + nativeBuildInputs = lib.optional finalAttrs.isLocalBuild git; + buildInputs = genDepsHostTargetFor { + inherit hawkSourceInfo; + mono' = finalAttrs.mono; + }; + patches = lib.optional (!hawkSourceInfo.hasMiscTypeCheckerPatch_6afb3be98) (fetchpatch { + url = "https://github.com/TASEmulators/BizHawk/commit/6afb3be98cd3d8bf111c8e61fdc29fc3136aab1e.patch"; + hash = "sha256-xZeZS939i5XZh1VgTGqXL1wPcpgYWINoskrXQfIPw5M="; + }); + postPatch = '' + sed -e 's/SimpleSubshell("uname", "-r", [^)]\+)/"${builtins.toString stdenv.hostPlatform.uname.release}"/' \ + -e 's/SimpleSubshell("uname", "-s", [^)]\+)/"${builtins.toString stdenv.hostPlatform.uname.system}"/' \ + -i src/BizHawk.Common/OSTailoredCode.cs + + sed '/Assets\/\*\*/d' -i ${if hawkSourceInfo.copyingAssetsInEmuHawkProj # stop MSBuild from copying Assets, we'll do that in installPhase + then "src/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj" + else "src/BizHawk.Common/BizHawk.Common.csproj"} + + rm -fr References; cp -LrT '${extraManagedDeps}' References + ''; + buildType = buildConfig; #TODO move debug symbols to `!debug`? + extraDotnetBuildFlags = let + s = lib.optionalString (extraDefines != "") "-p:MachineExtraCompilationFlag=${extraDefines} "; + in "-maxcpucount:$NIX_BUILD_CORES -p:BuildInParallel=true --no-restore ${s}${extraDotnetBuildFlags}"; + buildPhase = '' + runHook preBuild + + ${if hawkSourceInfo.versionProjNeedsDoubleBuild then + ''cd src/BizHawk.Version + dotnet build ${finalAttrs.extraDotnetBuildFlags} + cd ../.. + '' else ""}Dist/Build${finalAttrs.buildType}.sh ${finalAttrs.extraDotnetBuildFlags} + + runHook postBuild + ''; + checkNativeInputs = finalAttrs.buildInputs; + /** TODO WHY DOESN'T THIS WORK */ + checkPhase = '' + runHook preCheck + + export GITLAB_CI=1 # pretend to be in GitLab CI -- platform-specific tests don't run in CI because they assume an Arch filesystem (on Linux hosts) + # from 2.7.1, use standard -p:ContinuousIntegrationBuild=true instead + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${lib.makeLibraryPath finalAttrs.checkNativeInputs}" + Dist/BuildTest${finalAttrs.buildType}.sh ${finalAttrs.extraDotnetBuildFlags} + + # can't build w/ extra Analyzers, it fails to restore :( +# Dist/Build${finalAttrs.buildType}.sh -p:MachineRunAnalyzersDuringBuild=true ${finalAttrs.extraDotnetBuildFlags} + + runHook postCheck + ''; + installPhase = '' + runHook preInstall + + ${if hawkSourceInfo.packageScriptRemovesWinFilesFromLinux then "" else + ''( + cd Assets/dll; + rm -f "lua54.dll" \ + "mupen64plus-audio-bkm.dll" "mupen64plus-input-bkm.dll" "mupen64plus-rsp-cxd4-sse2.dll" "mupen64plus-rsp-hle.dll" "mupen64plus-video-angrylion-rdp.dll" "mupen64plus-video-glide64.dll" "mupen64plus-video-glide64mk2.dll" "mupen64plus-video-GLideN64.dll" "mupen64plus-video-rice.dll" "mupen64plus.dll" "octoshock.dll" \ + "bizlynx.dll" "bizswan.dll" "blip_buf.dll" "libbizhash.dll" "libdarm.dll" "libemu83.dll" "libfwunpack.dll" "libgambatte.dll" "libLibretroBridge.dll" "libquicknes.dll" "librcheevos.dll" "libsameboy.dll" "mgba.dll" "MSXHawk.dll" "waterboxhost.dll" + ) + ''}rm Assets/EmuHawkMono.sh # replaced w/ launch-scripts.nix + cp -avT Assets $assets + ${if hawkSourceInfo.hasAssetsInOutput then ''sed '/packaged_output\/dll/d' -i Dist/Package.sh + rm output/dll/*.xml # that's what that Package.sh line did, though I've forgotten why and don't care to rediscover it + mv -t $assets/dll output/dll/* + '' else ""}chmod -x $assets/dll/*.so # no idea why these are all executable + + mkdir -p $extraUnmanagedDeps/lib; mv -t $extraUnmanagedDeps/lib $assets/dll/*.so* + mkdir -p $waterboxCores/dll; mv -t $waterboxCores/dll $assets/dll/*.wbx* + + ${if hawkSourceInfo.packageScriptNeeds7Zip then ''sed '/7za a -t7z -mx9/d' -i Dist/Package.sh # not worth figuring this out + '' else ""}Dist/Package.sh linux-x64 + ${if hawkSourceInfo.hasAssetsInOutput then ''mkdir packaged_output/dll + '' else ""}mkdir -p $out; cp -avt $out packaged_output/*.exe* packaged_output/dll + mv -t $out/dll $assets/dll/* + mv -t $out $assets/defctrl.json $assets/gamedb $assets/Shaders + printf '${emuhawkBuildFlavour}' >$out/dll/custombuild.txt + + runHook postInstall + ''; + dontPatchELF = true; + passthru = { + inherit extraManagedDeps # could use this to backport changes to ExternalProjects? IDK + hawkSourceInfo; # simple way to override `nugetDeps` for patching: `buildAssembliesFor (bizhawkAssemblies-latest.hawkSourceInfo // { nugetDeps = /*...*/; })` + inherit (finalAttrs) mono; +# extraUnmanagedDeps = buildUnmanagedDepsFor hawkSourceInfo; # this will override the output of the same name, example: `buildEmuHawkInstallableFor { bizhawkAssemblies = bizhawkAssemblies-latest // { extraUnmanagedDeps = /*...*/; }; }` + # can similarly override `assets` output, only used by launch script to populate `BIZHAWK_DATA_HOME` if the dir doesn't exist at runtime, + # and `waterboxCores` output, which holds just the Waterbox cores, as the name suggests + }; + meta.sourceProvenance = [ lib.sourceTypes.binaryNativeCode ]; # `extraUnmanagedDeps` and `waterboxCores` outputs; will work on from-source later + })); + buildInstallable = + { bizhawkAssemblies + , pname + , launchScript + , desktopName + , desktopIcon + }: let + exeName = "${pname}-${bizhawkAssemblies.hawkSourceInfo.version}"; + in symlinkJoin { + inherit (bizhawkAssemblies.hawkSourceInfo) __contentAddressed; + name = exeName; + paths = [ + (let + # in versions < 2.9.2, Waterbox cores load from `Assembly.GetEntryAssembly().Location + "/../dll"`, but `Location` resolves symlinks so only `!bin` is visible -_- + farm = (if bizhawkAssemblies.hawkSourceInfo.exePathRespectsEnvVar then symlinkJoin else hardLinkJoin) { + inherit (bizhawkAssemblies.hawkSourceInfo) __contentAddressed; + name = "bizhawk-asms-and-wbox"; + paths = [ bizhawkAssemblies bizhawkAssemblies.waterboxCores ]; + }; + in writeShellScriptBin exeName ''BIZHAWK_HOME='${farm}' exec '${launchScript}' "$@"'') + (makeDesktopItem { + inherit desktopName; # actually Name + exec = exeName; + icon = desktopIcon; + name = exeName; # actually filename + }) + ]; + passthru = { + inherit (bizhawkAssemblies) fetch-deps hawkSourceInfo; + assemblies = bizhawkAssemblies; + }; + meta = let + p = lib.systems.inspect.patterns; + in { + platforms = [ + (p.isLinux // p.isAarch64) + (p.isLinux // p.isx86_32) + (p.isLinux // p.isx86_64) + + # `isMacOS` seems to be unused in Nixpkgs, though most mentions of `isDarwin` aren't from `lib.systems.inspect.patterns` so maybe it's only right for the legacy method + # won't bother w/ PPC or x86 Macs, they're too weak + (p.isDarwin // p.isAarch64) + (p.isDarwin // p.isx86_64) + + # not sure where Nix' Windows support is at right now, whether isWindows is the relevant pattern, or whether Nix on Windows will be suitable for us once it is usable +# (p.isWindows // p.isAarch64) +# (p.isWindows // p.isx86_32) +# (p.isWindows // p.isx86_64) + ]; + badPlatforms = [ p.isDarwin p.isAarch64 p.isx86_32 ]; + }; + }; + buildInstallable' = + { hawkSourceInfo + , bizhawkAssemblies + , pname + , launchScriptAttrName + , desktopName + , desktopIcon + }: let + bizhawkAssembliesFinal = if bizhawkAssemblies != null + then lib.traceIf (hawkSourceInfo != null) "`hawkSourceInfo` passed to `build{EmuHawk,DiscoHawk}InstallableFor` will be ignored in favour of `bizhawkAssemblies.hawkSourceInfo`" + bizhawkAssemblies + else assert lib.assertMsg (hawkSourceInfo != null) "must pass either `hawkSourceInfo` or `bizhawkAssemblies` to `build{EmuHawk,DiscoHawk}InstallableFor`"; + buildAssembliesFor hawkSourceInfo; + in buildInstallable { + inherit desktopName pname; + bizhawkAssemblies = bizhawkAssembliesFinal; + desktopIcon = if desktopIcon != null then desktopIcon else pname; + launchScript = (launchScriptsFor bizhawkAssembliesFinal false).${launchScriptAttrName}; + }; +in { + inherit buildAssembliesFor buildExtraManagedDepsFor buildUnmanagedDepsFor; + /** + * assemblies and (managed) dependencies, and some other immutable things like the gamedb, are in the `out` output; + * unmanaged/native dependencies are in the `extraUnmanagedDeps` output (under `/lib`); + * Waterbox cores are in the `waterboxCores` output (under `/dll`); + * the rest of the "assets" (bundled scripts, palettes, etc.) are in the `assets` output + */ + splitReleaseArtifact = + { hawkSourceInfo + , hashPrePatching + , zippedTarball ? false + , url ? "https://github.com/TASEmulators/BizHawk/releases/download/${hawkSourceInfo.version}/BizHawk-${hawkSourceInfo.version}-linux-x64${if zippedTarball then ".tar.zip" else ".tar.gz"}" + , stripRoot ? true + }: assert buildConfig == "Release"; let + artifact = fetchzip { inherit stripRoot url; hash = hashPrePatching; }; + hawkSourceInfo' = populateHawkSourceInfo hawkSourceInfo; + in runCommand "BizHawk-${hawkSourceInfo.version}-bin" { + buildInputs = genDepsHostTargetFor { hawkSourceInfo = hawkSourceInfo'; }; # is using `buildInputs` like this correct? it's necessary because the launch script reads from it + outputs = [ "out" "assets" "extraUnmanagedDeps" "waterboxCores" ]; + passthru = { + inherit mono; + hawkSourceInfo = hawkSourceInfo'; + }; + meta.sourceProvenance = [ lib.sourceTypes.binaryNativeCode lib.sourceTypes.binaryBytecode ]; + } '' + ${if zippedTarball then ''mkdir -p $assets; tar -xf '${artifact}'/*.tar -C $assets'' else ''cp -aT '${artifact}' $assets''} + cd $assets + find . -type d -exec chmod +w {} \; + rm -f EmuHawkMono.sh + ${if hawkSourceInfo'.releaseArtifactHasRogueOTKAsmConfig then ''mv -ft dll OpenTK.dll.config + '' else ""}rmdir Firmware + mkdir ExternalTools && touch ExternalTools/.keep + + mkdir -p $out; mv -t $out defctrl.json DiscoHawk.exe* dll EmuHawk.exe* gamedb Shaders + printf '${emuhawkBuildFlavour}' >$out/dll/custombuild.txt + + mkdir -p $extraUnmanagedDeps/lib; mv -t $extraUnmanagedDeps/lib $out/dll/*.so* + mkdir -p $waterboxCores/dll; mv -t $waterboxCores/dll $out/dll/*.wbx* + ''; + buildDiscoHawkInstallableFor = + { bizhawkAssemblies ? null + , hawkSourceInfo ? null + , desktopName ? "DiscoHawk (Mono Runtime)" + , desktopIcon ? null + }: buildInstallable' { + inherit bizhawkAssemblies desktopIcon desktopName hawkSourceInfo; + pname = "discohawk-monort"; + launchScriptAttrName = "discohawk"; + }; + buildEmuHawkInstallableFor = + { bizhawkAssemblies ? null + , hawkSourceInfo ? null + , forNixOS ? true + , desktopName ? "EmuHawk (Mono Runtime)" + , desktopIcon ? null + }: buildInstallable' { + inherit bizhawkAssemblies desktopIcon desktopName hawkSourceInfo; + pname = "emuhawk-monort"; + launchScriptAttrName = if forNixOS then "emuhawk" else "emuhawkNonNixOS"; + }; +} \ No newline at end of file diff --git a/Dist/wrapper-scripts.nix b/Dist/wrapper-scripts.nix deleted file mode 100644 index 69e9727fc5..0000000000 --- a/Dist/wrapper-scripts.nix +++ /dev/null @@ -1,125 +0,0 @@ -{ lib -# infrastructure -, commentUnless -, versionAtLeast -, writeShellScriptBin -, writeText -# rundeps -, bizhawk -, mesa -, mono -, openal -, zstd -# other parameters -, debugPInvokes -, hawkVersion -, initConfig # pretend this is JSON; the following env. vars will be substituted by the wrapper script (if surrounded by double-percent e.g. `%%BIZHAWK_DATA_HOME%%`): `BIZHAWK_DATA_HOME` -}: -let - glHackLibs = rec { - Fedora_33 = [ - "libdrm_amdgpu.so.1" "libdrm_nouveau.so.2" "libdrm_radeon.so.1" "libedit.so.0" "libelf.so.1" "libffi.so.6" "libLLVM-11.so" "libtinfo.so.6" "libvulkan.so.1" - ]; - Manjaro_21_0_3 = [ # should match Arch and Manjaro releases from '20/'21 - "libdrm_amdgpu.so.1" "libdrm_nouveau.so.2" "libdrm_radeon.so.1" "libedit.so.0" "libelf.so.1" "libffi.so.7" "libGLdispatch.so.0" "libicudata.so.69" "libicuuc.so.69" "libLLVM-11.so" "liblzma.so.5" "libncursesw.so.6" "libsensors.so.5" "libstdc++.so.6" "libvulkan.so.1" "libxml2.so.2" "libz.so.1" "libzstd.so.1" - ]; - Manjaro_21_2_1 = [ # should match Arch and Manjaro releases from '22 - "libdrm_amdgpu.so.1" "libdrm_nouveau.so.2" "libdrm_radeon.so.1" "libedit.so.0" "libelf.so.1" "libffi.so.8" "libicudata.so.70" "libicuuc.so.70" "libLLVM-13.so" "libncursesw.so.6" "libsensors.so.5" "libstdc++.so.6" "libvulkan.so.1" "libxml2.so.2" "libzstd.so.1" - ]; - LinuxMint_20_2 = [ # should match Ubuntu 20.04 and similar distros - "libbsd.so.0" "libedit.so.2" "libLLVM-12.so.1" "libtinfo.so.6" - ] ++ Manjaro_21_0_3; #TODO split - }; - glHackLibsFlat = lib.unique (lib.flatten (builtins.attrValues glHackLibs)); - initConfigFile = writeText "config.json" (builtins.toJSON ({ - LastWrittenFrom = if builtins.length (builtins.splitVersion hawkVersion) < 3 then "${hawkVersion}.0" else hawkVersion; - PathEntries = { - Paths = [ - ({ "System" = "Global_NULL"; Type = "Base"; Path = "%%BIZHAWK_DATA_HOME%%"; } // lib.optionalAttrs (!versionAtLeast "2.7.1" hawkVersion) { "Ordinal" = 1; }) - ]; - }; - } // initConfig)); -in rec { - discoWrapper = writeShellScriptBin "discohawk-wrapper" '' - set -e - - if [ ! -e "$BIZHAWK_HOME/EmuHawk.exe" ]; then - printf "no such file: %s\n" "$BIZHAWK_HOME/EmuHawk.exe" - exit 1 - fi - - export LD_LIBRARY_PATH="$BIZHAWK_HOME/dll" - ${commentUnless debugPInvokes}export MONO_LOG_LEVEL=debug MONO_LOG_MASK=dll - exec ${mono}/bin/mono "$BIZHAWK_HOME/DiscoHawk.exe" "$@" - ''; - wrapperScript = writeShellScriptBin "emuhawk-wrapper" '' - set -e - - if [ ! -e "$BIZHAWK_HOME/EmuHawk.exe" ]; then - printf "no such file: %s\n" "$BIZHAWK_HOME/EmuHawk.exe" - exit 1 - fi - - if [ "$XDG_DATA_HOME" ]; then - BIZHAWK_DATA_HOME="$XDG_DATA_HOME" - else - BIZHAWK_DATA_HOME="$HOME/.local/share" - fi - BIZHAWK_DATA_HOME="$BIZHAWK_DATA_HOME/emuhawk-monort-${hawkVersion}" - if [ ! -e "$BIZHAWK_DATA_HOME" ]; then - mkdir -p "$BIZHAWK_DATA_HOME" - cd "${bizhawk.out}" - find . -type f -not -wholename "./nix-support/*" -exec install -DvT "{}" "$BIZHAWK_DATA_HOME/{}" \; - fi - if [ ! -e "$BIZHAWK_DATA_HOME/config.json" ]; then - sed "s@%%BIZHAWK_DATA_HOME%%@$BIZHAWK_DATA_HOME@g" "${initConfigFile}" >"$BIZHAWK_DATA_HOME/config.json" - printf "wrote initial config to %s\n" "$BIZHAWK_DATA_HOME/config.json" - fi - cd "$BIZHAWK_DATA_HOME" - - export LD_LIBRARY_PATH="$BIZHAWK_HOME/dll:$BIZHAWK_GLHACKDIR:${lib.makeLibraryPath [ openal zstd ]}" - ${commentUnless debugPInvokes}export MONO_LOG_LEVEL=debug MONO_LOG_MASK=dll - if [ "$1" = "--mono-no-redirect" ]; then - shift - printf "(received --mono-no-redirect, stdout was not captured)\n" >EmuHawkMono_laststdout.txt - printf "(received --mono-no-redirect, stderr was not captured)\n" >EmuHawkMono_laststderr.txt - exec ${mono}/bin/mono "$BIZHAWK_HOME/EmuHawk.exe" --config=config.json "$@" - else - exec ${mono}/bin/mono "$BIZHAWK_HOME/EmuHawk.exe" --config=config.json "$@" >EmuHawkMono_laststdout.txt 2>EmuHawkMono_laststderr.txt - fi - ''; - wrapperScriptNonNixOS = writeShellScriptBin "emuhawk-wrapper-non-nixos" '' - set -e - - if [ "$XDG_STATE_HOME" ]; then - BIZHAWK_GLHACKDIR="$XDG_STATE_HOME" - else - BIZHAWK_GLHACKDIR="$HOME/.local/state" - fi - export BIZHAWK_GLHACKDIR="$BIZHAWK_GLHACKDIR/emuhawk-monort-${hawkVersion}-non-nixos" - mkdir -p "$BIZHAWK_GLHACKDIR" - if [ ! -e "$BIZHAWK_GLHACKDIR/libGLX_indirect.so.0" ]; then - ln -fsvT "${lib.getOutput "drivers" mesa}/lib/libGLX_mesa.so.0" "$BIZHAWK_GLHACKDIR/libGLX_indirect.so.0" - fi - # collect links to certain GL libs (and their deps) from host, added to LD_LIBRARY_PATH without polluting it with all libs from host - for l in ${builtins.concatStringsSep " " glHackLibsFlat}; do - if [ -e "$BIZHAWK_GLHACKDIR/$l" ]; then continue; fi - # else it's either a broken link or it doesn't exist, we use ln -f to cover both - for d in /usr/lib64 /usr/lib /usr/lib/x86_64-linux-gnu /lib64 /lib; do - if [ -e "$d/$l" ]; then - ln -fsvT "$d/$l" "$BIZHAWK_GLHACKDIR/$l" - break - fi - done - done - - for d in /usr/lib64/dri /usr/lib/dri /usr/lib/x86_64-linux-gnu/dri; do - if [ -e "$d" ]; then - export LIBGL_DRIVERS_PATH=$d - break - fi - done - - exec ${wrapperScript}/bin/emuhawk-wrapper "$@" - ''; -} diff --git a/README.md b/README.md index c263a43417..49918a38ee 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ A multi-system emulator written in C#. As well as quality-of-life features for c [![(latest) release | GitHub](https://img.shields.io/github/release/TASEmulators/BizHawk.svg?logo=github&logoColor=333333&sort=semver&style=popout)](https://github.com/TASEmulators/BizHawk/releases/latest) [![latest dev build | GitLab CI](https://img.shields.io/badge/latest_dev_build-GitLab_CI-orange.svg?logo=gitlab&style=popout)](https://gitlab.com/TASVideos/BizHawk/-/pipelines/master/latest) [![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASEmulators/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASEmulators/BizHawk/issues) + +[![built with nix](https://builtwithnix.org/badge.svg)](https://builtwithnix.org) [![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/5365/badge)](https://bestpractices.coreinfrastructure.org/projects/5365) --- @@ -14,6 +16,7 @@ Jump to: * [Windows](#windows) * [Unix](#unix) * [macOS](#macos-legacy-bizhawk) + * [Nix/NixOS](#nixnixos) * [Development builds](#development-builds) * [Building](#building) * [Usage](#usage) @@ -120,7 +123,7 @@ Install the listed package with your package manager (some buttons are links to [![Manjaro | bizhawk-monort (AUR)](https://img.shields.io/badge/Manjaro-bizhawk--monort_(AUR)-%2335BF5C.svg?logo=manjaro&style=popout)](https://aur.archlinux.org/packages/bizhawk-monort) -No package for your distro? Grab the latest release here on GitHub: +No package for your distro? Install via Nix (see below), or install manually by grabbing the latest release here on GitHub: [![Misc. Linux | bizhawk-monort](https://img.shields.io/badge/Misc._Linux-bizhawk--monort-%23FCC624.svg?logo=linux&logoColor=black&style=popout)](https://github.com/TASEmulators/BizHawk/releases/latest) @@ -140,6 +143,17 @@ EmuHawk depends on certain libraries for graphics, and these don't work on macOS * Use another machine with Windows or Linux, or install either in a VM (WINE is not a VM). * Use an older 1.x release which was ported to macOS by @Sappharad (with replacements for the missing libraries). Links and more details are in [this TASVideos forum thread](https://tasvideos.org/Forum/Topics/12659) (jump to last page for latest binaries). * For the technically-minded, download the [source](https://github.com/Sappharad/BizHawk/tree/MacUnixMonoCompat) of an older 2.x release. @Sappharad put a lot of work into it but ultimately decided to stop. + * ...or use the Nix expression as a starting point instead. + +[to top](#bizhawk) + +#### Nix/NixOS + +(Curious what this Nix thing is about? [Start here](https://zero-to-nix.com).) + +Dev builds and a few recent releases can be built with Nix, either by cloning the repo, or by `fetchzip`'ing a commit and importing the expression from it. (The repo isn't a Flake yet, but you should be able to IFD.) +See the [dedicated Nix usage readme](nix_expr_usage_docs.md) for what attributes are exposed. +If you use a non-NixOS distro with Nix installed, you just need to add one argument and your host graphics drivers will be picked up thanks to nixGL. [to top](#bizhawk) diff --git a/default.nix b/default.nix index d911d9f7d2..e82df742b1 100644 --- a/default.nix +++ b/default.nix @@ -1,180 +1,147 @@ -# THIS IS A WORK IN PROGRESS! -# To save you having to build Mono locally, install the Cachix client (`nix-env -iA nixpkgs.cachix`) and run `cachix use mono-for-bizhawk` (both commands only need to run once ever). See https://docs.cachix.org for more info. - -{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/21.11.tar.gz") {} -# infrastructure +{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/23.05.tar.gz") {} +, lib ? pkgs.lib , stdenv ? pkgs.stdenvNoCC +# infrastructure , buildDotnetModule ? pkgs.buildDotnetModule , fetchFromGitHub ? pkgs.fetchFromGitHub -#, makeDesktopItem ? pkgs.makeDesktopItem -, makeWrapper ? pkgs.makeWrapper +, fetchFromGitLab ? pkgs.fetchFromGitLab +, fetchpatch ? pkgs.fetchpatch +, fetchzip ? pkgs.fetchzip +, makeDesktopItem ? pkgs.makeDesktopItem +, mkNugetDeps ? pkgs.mkNugetDeps +, runCommand ? pkgs.runCommand +, symlinkJoin ? pkgs.symlinkJoin +, writeShellScript ? pkgs.writeShellScript +, writeShellScriptBin ? pkgs.writeShellScriptBin +, writeText ? pkgs.writeText # source -, useCWDAsSource ? false # deprecated -, hawkSourceInfoDev ? rec { - version = "2.8.1-local"; # distinguishes parallel installs' config and other data - shorthash = "000000000"; # this and the branch name are written into movies and savestates, written to config to detect in-place upgrades (N/A to Nix), and of course also shown in the About dialog - branch = "master"; # must be regex-escaped (interpolated as `sed "s/.../${branch}/"`) - drv = builtins.path { path = ./.; name = "BizHawk-${version}"; }; # did have filter here for speed, but it wasn't faster and it wasn't correct and it couldn't be made correct and I'm mad +, hawkSourceInfoDevBuild ? let # called "dev build", but you could pass whatever branch and commit you want here + version = "2.9.2-local"; # used in default value of `BIZHAWK_DATA_HOME`, which distinguishes parallel installs' config and other data +in { + inherit version; + branch = "master"; # must be regex-escaped (interpolated as `sed "s/.../${branch}/"`); written into movies and savestates, written to config to detect in-place upgrades (N/A to Nix), and of course also shown in the About dialog + drv = builtins.path { path = ./.; name = "BizHawk-${version}"; }; # source derivation; did have filter here for speed, but it wasn't faster and it wasn't correct and it couldn't be made correct and I'm mad } # makedeps -, dotnet-sdk_5 ? pkgs.dotnetCorePackages.sdk_5_0 -, dotnet-sdk_6 ? pkgs.dotnetCorePackages.sdk_6_0 -# rundeps for NixOS hosts -#, gtk2-x11 ? pkgs.gtk2-x11 -# rundeps for all Linux hosts -, mesa ? pkgs.mesa +, dotnet-sdk_6 ? pkgs.dotnet-sdk_6 +, dotnet-sdk_5 ? let result = builtins.tryEval pkgs.dotnet-sdk_5; in if result.success + then result.value + else (import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/5234f4ce9340fffb705b908fff4896faeddb8a12^.tar.gz") {}).dotnet-sdk_5 +, git ? pkgs.gitMinimal # only when building from-CWD (`-local`) +# rundeps +, coreutils ? pkgs.coreutils +, lua ? pkgs.lua54Packages.lua , mono ? null +, nixGLChannel ? (pkgs.nixgl or import (fetchTarball "https://github.com/guibou/nixGL/archive/489d6b095ab9d289fe11af0219a9ff00fe87c7c5.tar.gz") {}) +, nixGL ? nixGLChannel.auto.nixGLDefault +#, nixVulkan ? nixGLChannel.auto.nixVulkanNvidia , openal ? pkgs.openal -, uname ? stdenv +, SDL2 ? pkgs.SDL2 +, udev ? pkgs.udev , zstd ? pkgs.zstd # other parameters , buildConfig ? "Release" # "Debug"/"Release" -, debugPInvokes ? false # forwarded to Dist/wrapper-scripts.nix +, debugPInvokes ? false # forwarded to Dist/launch-scripts.nix +, debugDotnetHostCrashes ? false # forwarded to Dist/launch-scripts.nix , doCheck ? false # runs `Dist/BuildTest${buildConfig}.sh` -, forNixOS ? false -, initConfig ? {} # forwarded to Dist/wrapper-scripts.nix (see docs there) -}: -let - lib = pkgs.lib; - commentUnless = b: lib.optionalString (!b) "# "; - versionAtLeast = exVer: acVer: builtins.compareVersions exVer acVer <= 0; - monoFinal = if mono != null - then mono - else if versionAtLeast "6.12.0.151" pkgs.mono.version - then pkgs.mono - else pkgs.callPackage Dist/mono-6.12.0.151.nix {}; # not actually reproducible :( https://github.com/NixOS/nixpkgs/issues/143110#issuecomment-984251253 - buildAssembliesFor = hawkSourceInfo: buildDotnetModule rec { - pname = "BizHawk"; - version = hawkSourceInfo.version; - src = hawkSourceInfo.drv; - outputs = [ "bin" "out" ]; - dotnet-sdk = if hawkSourceInfo ? dotnet-sdk then hawkSourceInfo.dotnet-sdk else dotnet-sdk_6; - nativeBuildInputs = [ zstd ]; - buildInputs = [ mesa monoFinal openal uname zstd ];# ++ lib.optionals (forNixOS) [ gtk2-x11 ]; - projectFile = "BizHawk.sln"; - nugetDeps = if hawkSourceInfo ? nugetDeps then hawkSourceInfo.nugetDeps else Dist/deps.nix; - extraDotnetBuildFlags = "-maxcpucount:$NIX_BUILD_CORES -p:BuildInParallel=true --no-restore"; - postPatch = '' - # confused? '$(...)' is literal here - # these scripts invoke Git in subshells and we want to run them now, at compile time, without Git - sed -i 's/$(git rev-parse --verify HEAD)/${hawkSourceInfo.shorthash}/' Dist/.InvokeCLIOnMainSln.sh - sed -i -e 's/$(git rev-parse --abbrev-ref HEAD)/${hawkSourceInfo.branch}/' -e 's/$(git log -1 --format="%h")/${hawkSourceInfo.shorthash}/' Build/standin.sh - sed -i 's/$(git rev-list HEAD --count)//' Build/standin.sh # const field is unused - - # stop MSBuild from copying Assets, we'll do that later - sed -i '/Assets\/\*\*/d' src/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj - sed -i '/mkdir "packaged_output\/Firmware/d' Dist/Package.sh # and we don't need this +, emuhawkBuildFlavour ? "NixHawk" +, extraDefines ? "" # added to ``, so ';'-separated +, extraDotnetBuildFlags ? "" # currently passed to EVERY `dotnet build` and `dotnet test` invocation (and does not replace the flags for parallel compilation added by default) +, forNixOS ? true +, initConfig ? {} # forwarded to Dist/launch-scripts.nix (see docs there) +}: let + replaceDotWithUnderscore = s: lib.replaceStrings [ "." ] [ "_" ] s; + drvVersionAtLeast = exVer: acVer: builtins.compareVersions exVer acVer <= 0; + /** you can't actually make hard links in the sandbox, so this just copies, and we'll rely on Nix' automatic deduping */ + hardLinkJoin = + { name + , paths + , preferLocalBuild ? true + , allowSubstitutes ? false + , __contentAddressed ? false + }: runCommand name { + inherit __contentAddressed allowSubstitutes paths preferLocalBuild; + passAsFile = [ "paths" ]; + } '' + mkdir -p $out + for d in $(cat $pathsPath); do + cd "$d" + find . -type d -exec mkdir -p "$out/{}" \; + for f in $(find . -type f); do cp -T "$(realpath "$f")" "$out/$f"; done + done ''; - buildPhase = '' - cd src/BizHawk.Version - dotnet build ${extraDotnetBuildFlags} - cd ../.. - Dist/Build${buildConfig}.sh ${extraDotnetBuildFlags} - printf "NixHawk" >output/dll/custombuild.txt - Dist/Package.sh linux-x64 - ''; - inherit doCheck; - checkPhase = '' - export GITLAB_CI=1 # pretend to be in GitLab CI -- platform-specific tests don't run in CI because they assume an Arch filesystem (on Linux hosts) - # from 2.7.1, use standard -p:ContinuousIntegrationBuild=true instead - export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${lib.makeLibraryPath [ zstd ]}" - Dist/BuildTest${buildConfig}.sh ${extraDotnetBuildFlags} - - # can't build w/ extra Analyzers, it fails to restore :( -# Dist/Build${buildConfig}.sh -p:MachineRunAnalyzersDuringBuild=true ${extraDotnetBuildFlags} - ''; - installPhase = '' - cp -avT packaged_output $bin - cp -avt $bin Assets/defctrl.json && rm Assets/defctrl.json - cp -avt $bin/dll Assets/dll/* && rm -r Assets/dll - rm Assets/EmuHawkMono.sh # replaced w/ scripts from wrapperScripts - cp -avt $bin Assets/gamedb && rm -r Assets/gamedb - cp -avt $bin Assets/Shaders && rm -r Assets/Shaders - cp -avT Assets $out - ''; - dontPatchELF = true; + inherit (import Dist/historical.nix { + inherit lib + drvVersionAtLeast replaceDotWithUnderscore + fetchFromGitHub fetchFromGitLab mkNugetDeps + dotnet-sdk_5 dotnet-sdk_6; + }) depsForHistoricalRelease populateHawkSourceInfo releaseArtifactInfos releaseFrags releaseTagSourceInfos; + launchScriptsFor = bizhawkAssemblies: isManualLocalBuild: import Dist/launch-scripts.nix { + inherit lib + writeShellScript writeText + bizhawkAssemblies nixGL + debugPInvokes debugDotnetHostCrashes initConfig isManualLocalBuild; + mkfifo = coreutils; + mktemp = coreutils; }; - wrapperScriptsFor = { hawkSourceInfo, bizhawkAssemblies }: import Dist/wrapper-scripts.nix { - inherit (pkgs) lib writeShellScriptBin writeText; - inherit commentUnless versionAtLeast mesa openal zstd debugPInvokes initConfig; - bizhawk = bizhawkAssemblies; - hawkVersion = hawkSourceInfo.version; - mono = monoFinal; + pp = import Dist/packages.nix { + inherit lib stdenv + populateHawkSourceInfo replaceDotWithUnderscore + buildDotnetModule fetchpatch fetchzip hardLinkJoin launchScriptsFor makeDesktopItem + releaseTagSourceInfos runCommand symlinkJoin writeShellScriptBin + git + lua openal SDL2 udev zstd + buildConfig doCheck emuhawkBuildFlavour extraDefines extraDotnetBuildFlags; + mono = if mono != null + then mono # allow older Mono if set explicitly + else if drvVersionAtLeast "6.12.0.151" pkgs.mono.version + then pkgs.mono + else lib.trace "provided Mono too old, using Mono from Nixpkgs 23.05" + (import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/23.05.tar.gz") {}).mono; }; - mkWrapperWrapper = { hawkSourceInfo, bizhawkAssemblies, pname, innerWrapper, desktopName }: stdenv.mkDerivation rec { - inherit pname; - version = hawkSourceInfo.version; - exeName = "${pname}-${version}"; - nativeBuildInputs = [ makeWrapper ]; - buildInputs = [ bizhawkAssemblies ]; - # there must be a helper for this somewhere... - dontUnpack = true; - dontPatch = true; - dontConfigure = true; - dontBuild = true; - installPhase = '' - mkdir -p $out/bin - makeWrapper ${innerWrapper} $out/bin/${exeName} \ - --set BIZHAWK_HOME ${bizhawkAssemblies} - ''; - dontFixup = true; -# desktopItems = [ (makeDesktopItem { -# name = "${pname}-${version}"; # actually filename -# exec = "${exeName}"; -# inherit desktopName; # actually Name -# }) ]; + emuhawk-local = pp.buildEmuHawkInstallableFor { + inherit forNixOS; + hawkSourceInfo = hawkSourceInfoDevBuild; }; - buildDiscoHawkWrapperFor = { hawkSourceInfo, bizhawkAssemblies ? buildAssembliesFor hawkSourceInfo }: let - wrapperScripts = wrapperScriptsFor { inherit hawkSourceInfo bizhawkAssemblies; }; - in mkWrapperWrapper { - inherit hawkSourceInfo bizhawkAssemblies; - pname = "discohawk-monort"; - innerWrapper = "${wrapperScripts.discoWrapper}/bin/discohawk-wrapper"; - desktopName = "DiscoHawk (Mono Runtime)"; - }; - buildEmuHawkWrapperFor = { hawkSourceInfo, bizhawkAssemblies ? buildAssembliesFor hawkSourceInfo }: let - wrapperScripts = wrapperScriptsFor { inherit hawkSourceInfo bizhawkAssemblies; }; - in mkWrapperWrapper { - inherit hawkSourceInfo bizhawkAssemblies; - pname = "emuhawk-monort"; - innerWrapper = if forNixOS - then "${wrapperScripts.wrapperScript}/bin/emuhawk-wrapper" - else "${wrapperScripts.wrapperScriptNonNixOS}/bin/emuhawk-wrapper-non-nixos"; - desktopName = "EmuHawk (Mono Runtime)"; - }; -in rec { - bizhawkAssemblies = buildAssembliesFor hawkSourceInfoDev; # assemblies and dependencies, and some other immutable things like the gamedb, are in the `bin` output; the rest of the "assets" (bundled scripts, palettes, etc.) are in the `out` output - discohawk = buildDiscoHawkWrapperFor { inherit bizhawkAssemblies; hawkSourceInfo = hawkSourceInfoDev; }; - emuhawk-2_7 = buildEmuHawkWrapperFor { - hawkSourceInfo = { - version = "2.7"; - shorthash = "dbaf25956"; - branch = "master"; - drv = fetchFromGitHub { - owner = "TASEmulators"; - repo = "BizHawk"; - rev = "dbaf2595625f79093eeec37d2d4a7a9a4d37f370"; - hash = "sha256-KXe69svPIIFaXgT9t+02pwdQ6WWqdqgUdtaE2S4/YxA="; - }; - dotnet-sdk = dotnet-sdk_5; - nugetDeps = Dist/deps-2_7.nix; + asmsFromReleaseArtifacts = lib.mapAttrs (_: pp.splitReleaseArtifact) releaseArtifactInfos; + # the asms for from-CWD and latest release from-source are exposed below as `bizhawkAssemblies` and `bizhawkAssemblies-latest`, respectively + # apart from that, no `asmsFromSource`, since if you're only after the assets you might as well use the release artifact + releasesEmuHawkInstallables = lib.listToAttrs (lib.concatLists (builtins.map + (versionFrag: [ + ({ + name = "emuhawk-${versionFrag}"; + value = pp.buildEmuHawkInstallableFor { + inherit forNixOS; + hawkSourceInfo = releaseTagSourceInfos."info-${versionFrag}"; + }; + }) + ({ + name = "emuhawk-${versionFrag}-bin"; + value = pp.buildEmuHawkInstallableFor { + inherit forNixOS; + bizhawkAssemblies = asmsFromReleaseArtifacts."bizhawkAssemblies-${versionFrag}-bin"; + }; + }) + ]) + releaseFrags)); + latestVersionFrag = lib.head releaseFrags; + combined = pp // asmsFromReleaseArtifacts // releasesEmuHawkInstallables // { + inherit depsForHistoricalRelease releaseTagSourceInfos; + bizhawkAssemblies = pp.buildAssembliesFor hawkSourceInfoDevBuild; + "bizhawkAssemblies-${latestVersionFrag}" = pp.buildAssembliesFor releaseTagSourceInfos."info-${latestVersionFrag}"; + discohawk = pp.buildDiscoHawkInstallableFor { hawkSourceInfo = hawkSourceInfoDevBuild; }; + "discohawk-${latestVersionFrag}" = pp.buildDiscoHawkInstallableFor { + hawkSourceInfo = releaseTagSourceInfos."info-${latestVersionFrag}"; }; - }; - emuhawk-2_8 = buildEmuHawkWrapperFor { - hawkSourceInfo = { - version = "2.8"; - shorthash = "e731e0f32"; - branch = "master"; - drv = fetchFromGitHub { - owner = "TASEmulators"; - repo = "BizHawk"; - rev = "e731e0f32903cd40b83ed75bba3b1e3753105ce2"; - hash = "sha256-kP6zvTbhctqGCmjDOtQgBGII1T0xIyN5keq7d/lfWVM="; - }; - nugetDeps = Dist/deps-2_8.nix; + "discohawk-${latestVersionFrag}-bin" = pp.buildDiscoHawkInstallableFor { + bizhawkAssemblies = asmsFromReleaseArtifacts."bizhawkAssemblies-${latestVersionFrag}-bin"; }; + emuhawk = emuhawk-local; + launchScriptsForLocalBuild = launchScriptsFor emuhawk-local.assemblies true; }; - emuhawk = buildEmuHawkWrapperFor { inherit bizhawkAssemblies; hawkSourceInfo = hawkSourceInfoDev; }; - emuhawkWrapperScriptNonNixOS = (wrapperScriptsFor { inherit bizhawkAssemblies; hawkSourceInfo = hawkSourceInfoDev; }).wrapperScriptNonNixOS; - mono = monoFinal; -} +in combined // lib.listToAttrs (lib.concatLists (builtins.map + (f: [ + { name = f "latest-bin"; value = combined.${f "${latestVersionFrag}-bin"}; } + { name = f "latest"; value = combined.${f latestVersionFrag}; } + ]) + [ (s: "bizhawkAssemblies-${s}") (s: "emuhawk-${s}") (s: "discohawk-${s}") ])) \ No newline at end of file diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000000..80d4c3303d --- /dev/null +++ b/shell.nix @@ -0,0 +1,41 @@ +{ pkgs ? import {} +, lib ? pkgs.lib +, mkShell ? pkgs.mkShell +, git-cola ? pkgs.git-cola +, git ? pkgs.gitMinimal +, nano ? pkgs.nano +, debugDotnetHostCrashes ? false # forwarded to Dist/launch-scripts.nix +, debugPInvokes ? false # forwarded to Dist/launch-scripts.nix +, forNixOS ? true +, useKate ? false +, useNanoAndCola ? false +, useVSCode ? false +}: let + # thinking of exposing pre-configured IDEs from `default.nix` so they're available here + avail = import ./. { inherit debugDotnetHostCrashes debugPInvokes forNixOS; }; + f = drv: mkShell { + packages = [ git ] + ++ lib.optionals useNanoAndCola [ git-cola nano ] + ++ lib.optionals useKate [] #TODO + ++ lib.optionals useVSCode [] #TODO https://devblogs.microsoft.com/dotnet/csharp-dev-kit-now-generally-available/ https://learn.microsoft.com/en-us/training/modules/implement-visual-studio-code-debugging-tools/ + ; + inputsFrom = [ drv ]; + shellHook = '' + export BIZHAWKBUILD_HOME='${builtins.toString ./.}' + export BIZHAWK_HOME="$BIZHAWKBUILD_HOME/output" + alias discohawk-monort-local='${avail.launchScriptsForLocalBuild.discohawk}' + alias emuhawk-monort-local='${avail.launchScriptsForLocalBuild.emuhawk}' + pfx="$(realpath --relative-to="$PWD" "$BIZHAWKBUILD_HOME")/" + if [ "$pfx" = "./" ]; then pfx=""; fi + printf "%s\n%s\n" \ + "Run ''${pfx}Dist/Build{Debug,Release}.sh to build the solution. You may need to clean up with ''${pfx}Dist/CleanupBuildOutputDirs.sh." \ + "Once built, running {discohawk,emuhawk}-monort-local will pull from ''${pfx}output/* and use Mono from Nixpkgs." + ''; + }; + shells = lib.pipe avail [ + (lib.mapAttrs (name: drv: if lib.hasPrefix "bizhawkAssemblies-" name then drv else drv.assemblies or null)) + (lib.filterAttrs (_: drv: drv != null)) + (lib.mapAttrs (_: asms: lib.traceIf (lib.hasSuffix "-bin" asms.name) "the attr specified packages BizHawk from release artifacts; some builddeps may be missing from this shell" + f asms)) + ]; +in shells // shells.emuhawk-latest \ No newline at end of file