Compare commits
509 Commits
main/gingo
...
feature/pr
Author | SHA1 | Date |
---|---|---|
kaetemi | e6a617b8bc | 4 years ago |
Nuno | c8ba121b88 | 4 years ago |
Nuno | 438cce1323 | 4 years ago |
Nuno | 005f1c755c | 4 years ago |
Nuno | 4108367413 | 4 years ago |
Nuno | 3ccdb43683 | 4 years ago |
Nuno | aad1a6edd0 | 4 years ago |
Nuno | 9b475fde60 | 4 years ago |
Nuno | 4401db3dc7 | 4 years ago |
Nuno | ca543ce9b6 | 4 years ago |
Nuno | 73fc8e09ef | 4 years ago |
Nuno | c2fa3133b9 | 4 years ago |
Nuno | 796582e235 | 4 years ago |
Nuno | 1c57ac7b8f | 4 years ago |
Nuno | 0f74f62640 | 4 years ago |
Nuno | d5c03115d9 | 4 years ago |
Nuno | fe9b7aea89 | 4 years ago |
Nuno | c4fc834e67 | 4 years ago |
Nuno | 729deabd7a | 4 years ago |
Nuno | 0479a5ba8e | 4 years ago |
Nuno | c4115ae2a4 | 4 years ago |
Nuno | 46ad8bcf5d | 4 years ago |
Nuno | af4f4a1de6 | 4 years ago |
Nuno | c0129de5ed | 4 years ago |
Nuno | 5761a4a638 | 4 years ago |
Nuno | 8d180bd38b | 4 years ago |
Nuno | bad68017b8 | 4 years ago |
Nuno | e0c4bcf4e0 | 4 years ago |
Nuno | a1d3f91a9b | 4 years ago |
Nuno | 2804161714 | 4 years ago |
Nuno | 371f529699 | 4 years ago |
Nuno | 4d4223c87c | 4 years ago |
Nuno | f7953eea36 | 4 years ago |
Nuno | 806cb449a1 | 4 years ago |
Nuno | b76ac3d37f | 4 years ago |
Nuno | d33f6b283f | 4 years ago |
Nuno | 08393ea94d | 4 years ago |
Nuno | 9b5a4d94cf | 4 years ago |
Nuno | ca042995c0 | 4 years ago |
Nuno | d88b549dbc | 4 years ago |
Nuno | e3b030b823 | 4 years ago |
Nuno | bf4ccacec6 | 4 years ago |
Nuno | f0cc3f3b42 | 4 years ago |
Nuno | 4008a69448 | 4 years ago |
kaetemi | 141e7c6459 | 4 years ago |
Nuno | 000fdfb5d7 | 4 years ago |
Nuno | 17d84c5925 | 4 years ago |
Nuno | 0e833c37ef | 4 years ago |
Nuno | 7f33e9bdd6 | 4 years ago |
Nuno | 5678ef1727 | 4 years ago |
Nuno | 619b5fd122 | 4 years ago |
Nuno | a58af169ab | 4 years ago |
Nuno | bd6c6c4fc2 | 4 years ago |
Ulukyn | d6dcd13938 | 4 years ago |
Ulukyn | 72d29ef8f6 | 4 years ago |
Ulukyn | 578ae687df | 4 years ago |
Ulukyn | 3c178cb506 | 4 years ago |
Ulukyn | 0d57aad8b9 | 4 years ago |
Ulukyn | e6bb1f2f54 | 4 years ago |
Ulukyn | ea095ca4f3 | 4 years ago |
Ulukyn | 8df98ce44a | 4 years ago |
Ulukyn | ae685b3d68 | 4 years ago |
Ulukyn | 653a8fb472 | 4 years ago |
Ulukyn | 5bddc6eaa7 | 4 years ago |
Ulukyn | 406072f3e1 | 4 years ago |
Ulukyn | 1c8a939797 | 4 years ago |
Ulukyn | 463738c036 | 4 years ago |
Ulukyn | 10666c23bd | 4 years ago |
Ulukyn | 085cead1a1 | 4 years ago |
Ulukyn | f764a0e6d9 | 4 years ago |
Ulukyn | 4dafe289e5 | 4 years ago |
Ulukyn | a3818593b8 | 4 years ago |
Ulukyn | 1b5f2ed003 | 4 years ago |
Ulukyn | ecf38c8ddc | 4 years ago |
Ulukyn | be3c81aa80 | 4 years ago |
Ulukyn | 887dbdad0d | 4 years ago |
Ulukyn | 62457be418 | 4 years ago |
Ulukyn | f3b22802e8 | 4 years ago |
Ulukyn | 230ca5ffdb | 4 years ago |
Ulukyn | 1a6b197411 | 4 years ago |
Ulukyn | d3b2e1f4b5 | 4 years ago |
Ulukyn | 164719aa55 | 4 years ago |
Ulukyn | ed4e88c773 | 4 years ago |
Ulukyn | b35ba142be | 4 years ago |
Nuno Gonçalves | 417b42487d | 4 years ago |
Nuno Gonçalves | dad6e43285 | 4 years ago |
Nuno Gonçalves | 16d3fa8e6a | 4 years ago |
kaetemi | cca82baa89 | 4 years ago |
kaetemi | a3a074f455 | 4 years ago |
kaetemi | 7873a839ef | 4 years ago |
kaetemi | 3352401f24 | 4 years ago |
kaetemi | 549a015847 | 4 years ago |
kaetemi | fb1557c08e | 4 years ago |
kaetemi | a3626de8bb | 4 years ago |
kaetemi | 0045696546 | 4 years ago |
kaetemi | a5dd6aa857 | 4 years ago |
kaetemi | 5da1678357 | 4 years ago |
kaetemi | 694338302e | 4 years ago |
kaetemi | 5b22e0950a | 4 years ago |
kaetemi | 20ed0a4412 | 4 years ago |
kaetemi | c8ecf0a756 | 4 years ago |
kaetemi | d07e219439 | 4 years ago |
kaetemi | 92bfb0aafb | 4 years ago |
kaetemi | 4407fc2970 | 4 years ago |
kaetemi | 3f63f27143 | 4 years ago |
kaetemi | cb9094f091 | 4 years ago |
kaetemi | 30117e92be | 4 years ago |
kaetemi | b9de2e99a3 | 4 years ago |
kaetemi | 77f92c72a9 | 4 years ago |
kaetemi | b33ff3cb93 | 4 years ago |
kaetemi | da9c5173a6 | 4 years ago |
kaetemi | 3ec5a87d40 | 4 years ago |
kaetemi | 2cd2b9502f | 4 years ago |
kaetemi | 88e2ebd31c | 4 years ago |
kaetemi | 492865deed | 4 years ago |
kaetemi | a1023f923f | 4 years ago |
kaetemi | ce8acd4ca2 | 4 years ago |
kaetemi | 9d722bb70f | 4 years ago |
kaetemi | 59c1c340b8 | 4 years ago |
kaetemi | 43af8e6695 | 4 years ago |
kaetemi | f128e0807c | 4 years ago |
kaetemi | 8cecbb4a7d | 4 years ago |
kaetemi | feb7e7a812 | 4 years ago |
kaetemi | 8b6c3276e4 | 4 years ago |
kaetemi | deb1c7c131 | 4 years ago |
kaetemi | fc3f0355a5 | 4 years ago |
kaetemi | 578cef6c85 | 4 years ago |
kaetemi | 413ca990d0 | 4 years ago |
kaetemi | 37d52231ef | 4 years ago |
kaetemi | f8cb53bfd8 | 4 years ago |
kaetemi | 90225d0011 | 4 years ago |
kaetemi | e08079fe5f | 4 years ago |
kaetemi | a188c6b38a | 4 years ago |
kaetemi | 3f0bacd374 | 4 years ago |
kaetemi | f9b7dbd4cb | 4 years ago |
kaetemi | 449c90a4b0 | 4 years ago |
kaetemi | dba5d1a1ca | 4 years ago |
kaetemi | bce886595e | 4 years ago |
kaetemi | e97cf09e04 | 4 years ago |
kaetemi | dbe34b0c8f | 4 years ago |
kaetemi | 7a647ab76d | 4 years ago |
kaetemi | 113f3f97d7 | 4 years ago |
kaetemi | 28fd4d9011 | 4 years ago |
kaetemi | fdbe73937a | 4 years ago |
kaetemi | d58854ab33 | 4 years ago |
kaetemi | b4b701f90e | 4 years ago |
Xtarsia | 35f30e566b | 4 years ago |
kaetemi | c341631dbf | 4 years ago |
kaetemi | 59ee36332c | 4 years ago |
kaetemi | 45bc21e5c9 | 4 years ago |
kaetemi | cf16ec5c44 | 4 years ago |
kaetemi | 817ca5bf2b | 4 years ago |
kaetemi | 7eeb845768 | 4 years ago |
kaetemi | 6d975e9879 | 4 years ago |
kaetemi | 305ed94561 | 4 years ago |
kaetemi | ebc220fedb | 4 years ago |
kaetemi | a7e880e724 | 4 years ago |
Xtarsia | 607b708465 | 4 years ago |
kaetemi | 144088af13 | 4 years ago |
kaetemi | 6dfff83589 | 4 years ago |
kaetemi | b5f320af33 | 4 years ago |
kaetemi | d1769c586f | 4 years ago |
kaetemi | 68b0fbeae8 | 4 years ago |
kaetemi | 879b792c6a | 4 years ago |
kaetemi | 431b1140e9 | 4 years ago |
kaetemi | 6f2e45d352 | 4 years ago |
kaetemi | 4169349166 | 4 years ago |
kaetemi | c624984da1 | 4 years ago |
kaetemi | b96d96f004 | 4 years ago |
kaetemi | 3609d6369a | 4 years ago |
kaetemi | 46541a700c | 4 years ago |
kaetemi | 8d4c0d0ef1 | 4 years ago |
kaetemi | be11ae1fb6 | 4 years ago |
kaetemi | f203559ecb | 4 years ago |
kaetemi | be28e102ec | 4 years ago |
kaetemi | d512d10f18 | 4 years ago |
kaetemi | 24ceb5df04 | 4 years ago |
kaetemi | bd0c694970 | 4 years ago |
kaetemi | 5769a3599e | 4 years ago |
kaetemi | 176e0975f6 | 4 years ago |
kaetemi | 7c4a2f857d | 4 years ago |
kaetemi | bc3a602ebc | 4 years ago |
kaetemi | 9eb7481c06 | 4 years ago |
kaetemi | 66debd7ebe | 4 years ago |
kaetemi | f0430ec8ad | 4 years ago |
kaetemi | caa4eea391 | 4 years ago |
kaetemi | 3604088713 | 4 years ago |
kaetemi | cd4b746bfa | 4 years ago |
kaetemi | 60f61caa2c | 4 years ago |
kaetemi | a5e9542f2f | 4 years ago |
kaetemi | 7b1136ff0b | 4 years ago |
kaetemi | abd5c38a80 | 4 years ago |
kaetemi | 2a37a76cb5 | 4 years ago |
kaetemi | 4c701386f4 | 4 years ago |
kaetemi | e9feca648a | 4 years ago |
kaetemi | 4ae411968e | 4 years ago |
kaetemi | aa2574e10a | 4 years ago |
kaetemi | a2c7c4dc25 | 4 years ago |
kaetemi | 29f313853d | 4 years ago |
kaetemi | 625d269c11 | 4 years ago |
kaetemi | dc12e2dea3 | 4 years ago |
kaetemi | ae1f4d2df3 | 4 years ago |
Xtarsia | dac3cc2292 | 4 years ago |
kaetemi | 9883454926 | 4 years ago |
kaetemi | b89441d673 | 4 years ago |
kaetemi | 35e18597ee | 4 years ago |
kaetemi | 6787bbf378 | 4 years ago |
kaetemi | a3e762f401 | 4 years ago |
kaetemi | 380722e2e6 | 4 years ago |
kaetemi | d11936a035 | 4 years ago |
kaetemi | c791fe5742 | 4 years ago |
Xtarsia | 5de288a2e7 | 4 years ago |
kaetemi | c08163dcb6 | 4 years ago |
kaetemi | ea6ba2ec97 | 4 years ago |
kaetemi | 9c6918d448 | 4 years ago |
kaetemi | 9cc899a3a6 | 4 years ago |
kaetemi | e773027c6d | 4 years ago |
kaetemi | 3e675b1422 | 4 years ago |
kaetemi | 5934147d9e | 4 years ago |
Xtarsia | 4ca95e1188 | 4 years ago |
kaetemi | 0499fce27d | 4 years ago |
kaetemi | 2295769ad5 | 4 years ago |
kaetemi | 1cfe858588 | 4 years ago |
kaetemi | 374601e8d1 | 4 years ago |
kaetemi | d86c000de2 | 4 years ago |
kaetemi | fa086ea4b9 | 4 years ago |
kaetemi | dcf242c3b1 | 4 years ago |
kaetemi | d31eb606eb | 4 years ago |
kaetemi | 46020d345c | 4 years ago |
kaetemi | 2b2b0a7d48 | 4 years ago |
Xtarsia | 277a854f8d | 4 years ago |
kaetemi | 52c7c16f69 | 4 years ago |
kaetemi | 92ee96a783 | 4 years ago |
kaetemi | b61ad76ac2 | 4 years ago |
Xtarsia | 7a9accde11 | 4 years ago |
kaetemi | d0f9685ee8 | 4 years ago |
Xtarsia | a2b68113ec | 4 years ago |
kaetemi | ec4e2e188e | 4 years ago |
kaetemi | 9580bd5ec0 | 4 years ago |
kaetemi | d2900df0f6 | 4 years ago |
kaetemi | ae876e481a | 4 years ago |
kaetemi | 8594b479e2 | 4 years ago |
Jan Boon | fbab39451f | 4 years ago |
kaetemi | 05501cf30b | 4 years ago |
kaetemi | 357bb28ef2 | 4 years ago |
kaetemi | 5056d3a72a | 4 years ago |
kaetemi | 91a44fd5b5 | 4 years ago |
kaetemi | a51597cf0b | 4 years ago |
kaetemi | f5553dfb59 | 4 years ago |
kaetemi | b4dc60f163 | 4 years ago |
kaetemi | 2859693c1e | 4 years ago |
kaetemi | 6853098df9 | 4 years ago |
kaetemi | c71f516ed2 | 4 years ago |
kaetemi | ccb141672f | 4 years ago |
kaetemi | 4a7a153a3e | 4 years ago |
kaetemi | e3ec67a698 | 4 years ago |
kaetemi | 505e13cd1e | 4 years ago |
Xtarsia | 14a0c5d471 | 4 years ago |
kaetemi | 7a035466da | 5 years ago |
kaetemi | 64fd9f0b78 | 5 years ago |
kaetemi | a7933bc818 | 5 years ago |
kaetemi | 669237dbae | 5 years ago |
kaetemi | a606684e34 | 5 years ago |
kaetemi | 4b4c14dabf | 5 years ago |
kaetemi | 7e232462d0 | 5 years ago |
kaetemi | 09cb0ea5d0 | 5 years ago |
kaetemi | f5eae12b80 | 5 years ago |
kaetemi | 1452a6ba6d | 5 years ago |
kaetemi | a6713b14a6 | 5 years ago |
kaetemi | b505ff9e13 | 5 years ago |
kaetemi | 154ae55165 | 5 years ago |
kaetemi | ada4e5bfbf | 5 years ago |
kaetemi | fb3e97db1d | 5 years ago |
kaetemi | 61974ec15c | 5 years ago |
kaetemi | af6c6b64c3 | 5 years ago |
kaetemi | 0528df7f0b | 5 years ago |
kaetemi | 18d2e393cf | 5 years ago |
kaetemi | 3da77ce061 | 5 years ago |
kaetemi | 90e1297c1d | 5 years ago |
kaetemi | 90931485ba | 5 years ago |
kaetemi | 195e9b1439 | 5 years ago |
kaetemi | 0f50806927 | 5 years ago |
kaetemi | 7d01d8411d | 5 years ago |
kaetemi | c1a3008ca0 | 5 years ago |
kaetemi | 3f39669c9a | 5 years ago |
kaetemi | 51ec683eea | 5 years ago |
kaetemi | ddc9cdabc4 | 5 years ago |
kaetemi | 324c69c8cc | 5 years ago |
kaetemi | 05fdc723f1 | 5 years ago |
Jan Boon | 4a55facb0c | 5 years ago |
kaetemi | def3d25249 | 5 years ago |
kaetemi | f32a5d95d4 | 5 years ago |
kaetemi | 5f3675446c | 5 years ago |
kaetemi | f39a7fe349 | 5 years ago |
kaetemi | 3117c55424 | 5 years ago |
Jan Boon | 185d71365e | 5 years ago |
kaetemi | 02c40934ef | 5 years ago |
kaetemi | f892608865 | 5 years ago |
Jan Boon | 9d1545bbe2 | 5 years ago |
kaetemi | 71a22b43db | 5 years ago |
kaetemi | 5a543239bb | 5 years ago |
Jan Boon | 6cdee90e4e | 5 years ago |
kaetemi | 17d91ad243 | 5 years ago |
kaetemi | 33bf80a3c7 | 5 years ago |
Jan Boon | 1f7fca7df3 | 5 years ago |
Jan Boon | a964da41f7 | 5 years ago |
kaetemi | a900a45153 | 5 years ago |
kaetemi | 0cfe43aa26 | 5 years ago |
kaetemi | 3e7035c6dd | 5 years ago |
kaetemi | ea021e1d96 | 5 years ago |
kaetemi | 55c3939789 | 5 years ago |
kaetemi | 7a71caca6e | 5 years ago |
kaetemi | 9dc0020b61 | 5 years ago |
kaetemi | c7b27c8d70 | 5 years ago |
kaetemi | 6c6a83bc5d | 5 years ago |
Jan Boon | 93f6770fe4 | 5 years ago |
Jan Boon | a94094f865 | 5 years ago |
Jan Boon | 746f033b5c | 5 years ago |
Jan Boon | 5d7e4a921f | 5 years ago |
Jan Boon | f48f4d4555 | 5 years ago |
Jan Boon | 31e1cd6feb | 5 years ago |
Jan Boon | 107728c944 | 5 years ago |
kaetemi | 4053220060 | 5 years ago |
kaetemi | 525db6976a | 5 years ago |
kaetemi | f344c0568c | 5 years ago |
kaetemi | 2d32bc2371 | 5 years ago |
kaetemi | 9d89d3dfca | 5 years ago |
kaetemi | 024447d9fb | 5 years ago |
kaetemi | d496d54ac4 | 5 years ago |
kaetemi | aec03f6234 | 5 years ago |
kaetemi | 1dce83d279 | 5 years ago |
kaetemi | 774b91df9c | 5 years ago |
kaetemi | d5b959db7e | 5 years ago |
kaetemi | b547fd62cb | 5 years ago |
kaetemi | eecd6f1f2c | 5 years ago |
kaetemi | 3f982c2214 | 5 years ago |
kaetemi | b232d0026a | 5 years ago |
kaetemi | be32f02a76 | 5 years ago |
Jan Boon | 48bc27c1e3 | 5 years ago |
kaetemi | 38a7b763d0 | 5 years ago |
kaetemi | f18f4196b4 | 5 years ago |
kaetemi | 35a9e747f7 | 5 years ago |
kaetemi | 8f1d0ebf23 | 5 years ago |
kaetemi | dabf75dbcf | 5 years ago |
kaetemi | a722988987 | 5 years ago |
kaetemi | c914e6fdf6 | 5 years ago |
kaetemi | ad4290f2c9 | 5 years ago |
kaetemi | 739730127d | 5 years ago |
kaetemi | 2cb353438b | 5 years ago |
kaetemi | 46786a1185 | 5 years ago |
kaetemi | 8daffed6c2 | 5 years ago |
kaetemi | 2a917ede27 | 5 years ago |
Jan Boon | 31a819f254 | 5 years ago |
kaetemi | ad15ada3ef | 5 years ago |
kaetemi | 2927b3dfb9 | 5 years ago |
kaetemi | e0a14d79ac | 5 years ago |
kaetemi | ba3c008767 | 5 years ago |
kaetemi | 8c6677dba6 | 5 years ago |
kaetemi | b6dbb65918 | 5 years ago |
Jan Boon | 4d742741d1 | 5 years ago |
kaetemi | 8dd7c52f8a | 5 years ago |
kaetemi | fcfc86c83e | 5 years ago |
kaetemi | f36c979c2e | 5 years ago |
kaetemi | 8bcccefd11 | 5 years ago |
kaetemi | 71c7e31806 | 5 years ago |
kaetemi | 6d5eb14d4f | 5 years ago |
kaetemi | 52d8304659 | 5 years ago |
kaetemi | 3cfedfcf9a | 5 years ago |
kaetemi | 0b47322d6c | 5 years ago |
kaetemi | bfed12711d | 5 years ago |
kaetemi | 84e924b496 | 5 years ago |
kaetemi | 613bb7ccd0 | 5 years ago |
kaetemi | 623ffc6be7 | 5 years ago |
kaetemi | 319ad4b0bf | 5 years ago |
kaetemi | de6eae7e0f | 5 years ago |
kaetemi | b159620fcc | 5 years ago |
kaetemi | 0e08489315 | 5 years ago |
kaetemi | 2ad9e1c78a | 5 years ago |
kaetemi | 8d7ce91b56 | 5 years ago |
kaetemi | 2d1d9c1b0b | 5 years ago |
kaetemi | 85e7b594c6 | 5 years ago |
kaetemi | f980988ae4 | 5 years ago |
kaetemi | ee8ccf13b7 | 5 years ago |
kaetemi | 8895eb88d6 | 5 years ago |
kaetemi | 679c7d7ac3 | 5 years ago |
kaetemi | ba6378e07c | 5 years ago |
kaetemi | b06b0fb08c | 5 years ago |
kaetemi | 81176f102f | 5 years ago |
Jan Boon | 2ad1b76886 | 5 years ago |
Jan Boon | b0fdfaeca9 | 5 years ago |
kaetemi | 4c7c240775 | 5 years ago |
kaetemi | ff87af8423 | 5 years ago |
kaetemi | afee5db9e2 | 5 years ago |
kaetemi | 0bae206bb2 | 5 years ago |
kaetemi | c57c9a1cf6 | 5 years ago |
Jan Boon | 0c8e9f7640 | 5 years ago |
kaetemi | 2b80ec75a9 | 5 years ago |
kaetemi | 0a2ce3c522 | 5 years ago |
kaetemi | 4ca10eb38c | 5 years ago |
kaetemi | 636d8dae55 | 5 years ago |
kaetemi | ecc2085b70 | 5 years ago |
kaetemi | 9b9829a6ab | 5 years ago |
kaetemi | 916be9833c | 5 years ago |
kaetemi | bb3f4052a7 | 5 years ago |
kaetemi | 439cae285d | 5 years ago |
Nimetu | ddd0a7507e | 5 years ago |
kaetemi | c54897bd4f | 5 years ago |
kaetemi | 94ad75bb72 | 5 years ago |
kaetemi | 6ed45fef0b | 5 years ago |
kaetemi | 85c9d4e4b6 | 5 years ago |
kaetemi | 7ac4eb3097 | 5 years ago |
kaetemi | 2f29d03d86 | 5 years ago |
kaetemi | f64ba76bfc | 5 years ago |
kaetemi | aa2386151f | 5 years ago |
kaetemi | 7505fae6d1 | 5 years ago |
kaetemi | f7bdd7ecd7 | 5 years ago |
kaetemi | d70c4a215d | 5 years ago |
kaetemi | 71a412c698 | 5 years ago |
kaetemi | 98a41b75bd | 5 years ago |
kaetemi | a86fb4e195 | 5 years ago |
kaetemi | 3ff031b5ff | 5 years ago |
Nimetu | 249ce945f1 | 5 years ago |
Nimetu | a6a8cb99f5 | 5 years ago |
ulukyn | f11bc06541 | 6 years ago |
Nimetu | 460eb92969 | 5 years ago |
Nimetu | ae68b543b8 | 5 years ago |
Inky | a5a6c321af | 6 years ago |
Inky | 89fa8ca0ac | 6 years ago |
Inky | 9c82a0436f | 6 years ago |
Inky | fb60e00acc | 6 years ago |
Inky | 0a48c4a6e3 | 6 years ago |
Nimetu | 1eb1b118f3 | 6 years ago |
Nimetu | 3b0324ad08 | 6 years ago |
Inky | 4baed9c664 | 6 years ago |
Inky | 41c3d0cbe0 | 6 years ago |
Inky | ccfffe0a8c | 6 years ago |
Inky | 17b96e4819 | 6 years ago |
Inky | 00d31f09c6 | 6 years ago |
ulukyn | 89c22b04a2 | 6 years ago |
ulukyn | cf4cb55f3e | 6 years ago |
ulukyn | 1b19cb4809 | 6 years ago |
Inky | fe4c58df42 | 6 years ago |
ulukyn | 498c02fa4d | 6 years ago |
ulukyn | a7e75b1c6c | 6 years ago |
Inky | d73ea16682 | 6 years ago |
Inky | 64987e8ed6 | 6 years ago |
Inky | 7230a84031 | 6 years ago |
Inky | 36918ac919 | 6 years ago |
Inky | 0683604ada | 6 years ago |
Inky | 038a3bca96 | 6 years ago |
Nimetu | a3bdd3dda5 | 6 years ago |
Inky | 4121a61c85 | 6 years ago |
Inky | 2f2329c67f | 6 years ago |
ulukyn | 9780decca0 | 6 years ago |
Inky | cad47321a3 | 6 years ago |
Inky | 417865bb3a | 6 years ago |
Ulukyn | 36036faffd | 6 years ago |
ulukyn | c0037fc55a | 6 years ago |
Inky | f96289dfbe | 6 years ago |
Riasan | e794b5dd01 | 6 years ago |
ulukyn | 11132f08e6 | 6 years ago |
Riasan | 2d83507b55 | 6 years ago |
ulukyn | 0debc7e6d6 | 6 years ago |
ulukyn | 698c71f137 | 6 years ago |
ulukyn | dcf959fe3d | 7 years ago |
Nimetu | 892d11d2be | 7 years ago |
kervala | 8f61819d43 | 7 years ago |
ulukyn | 0e7380599e | 7 years ago |
kervala | cf1df3e4de | 7 years ago |
ulukyn | 4beecdc81b | 7 years ago |
ulukyn | 0b970371a3 | 7 years ago |
ulukyn | 48f3d3b244 | 7 years ago |
ulukyn | e9e2590d53 | 7 years ago |
ulukyn | f7f1a6035e | 7 years ago |
ulukyn | 4f75f92610 | 7 years ago |
ulukyn | a50bd10b84 | 7 years ago |
ulukyn | 57406f6a8c | 7 years ago |
ulukyn | 65acd3bf9d | 7 years ago |
ulukyn | 16ce2e454c | 7 years ago |
ulukyn | c7bdaf513c | 7 years ago |
ulukyn | 724158c74c | 7 years ago |
Nuno Gonçalves | ed798cb62a | 7 years ago |
ulukyn | 971287ae78 | 7 years ago |
ulukyn | c56d2e136d | 7 years ago |
ulukyn | 3652b23bbb | 7 years ago |
ulukyn | 8b1ead9e77 | 7 years ago |
ulukyn | 5d7c8777a1 | 7 years ago |
ulukyn | 1a52cc3cb1 | 7 years ago |
ulukyn | 0093170ee9 | 7 years ago |
ulukyn | 50d6ae91ae | 7 years ago |
ulukyn | af6975ae11 | 7 years ago |
ulukyn | 0b0b980510 | 7 years ago |
ulukyn | f917d22b71 | 7 years ago |
ulukyn | 61cee990fc | 7 years ago |
ulukyn | fd458d5751 | 7 years ago |
ulukyn@gmail.com | 5c41e79ce0 | 7 years ago |
Riasan | 0b27a27a4c | 7 years ago |
ulukyn@gmail.com | 4f33715b06 | 7 years ago |
ulukyn@gmail.com | b623bb11f5 | 7 years ago |
ulukyn@gmail.com | 3baf7fdb12 | 7 years ago |
ulukyn@gmail.com | 4c91c418d4 | 7 years ago |
ulukyn@gmail.com | 99a949b889 | 7 years ago |
kaetemi | 998daa5c56 | 11 years ago |
kaetemi | a3a347fab4 | 11 years ago |
kaetemi | ba42ed3320 | 11 years ago |
kaetemi | 1359bbf8c2 | 11 years ago |
kaetemi | 5d9f3ce668 | 11 years ago |
kaetemi | 9fec239dfb | 11 years ago |
kaetemi | 06e9d20850 | 11 years ago |
@ -1,28 +1,27 @@
|
||||
4eddbaff0c5e5d685db96ee3e8427aa0fd96ac83 ryzomcore/v0.8.0
|
||||
00d9b6e29e95f56785fbf85abe60afd34674f402 ryzomcore/v0.9.0
|
||||
79776c337176dd5b02e1a74fe5dfb703b91747aa ryzomcore/v0.9.1
|
||||
fedf2aa443d09707beed814b0f499c6a5519cc84 ryzomcore/v0.10.0
|
||||
edaa3624a56420b02ccc64c26059801a389927ee ryzomcore/v0.11.0
|
||||
e3fe4855f22c3e75722e015dc33c091c340b3ad7 ryzomcore/v0.11.1
|
||||
9e583b717fd63be0be9fd60b99087abf1691ea49 ryzomcore/v0.11.2
|
||||
bfe5628e14a024ba7ea32e4b326ae433a07856b9 ryzomcore/v0.11.3
|
||||
9a6120735daa97c96ac5d85ca35c7f21f607bd87 ryzomcore/v0.12.0
|
||||
3e17907af67e8d66d80e6b714707bbf912607f2a ryzom-patch-3.0.0
|
||||
153e0b605c9e0c83ba05b6428c62838b49cc84b2 ryzom-patch-3.0.1
|
||||
9d41f2994d44b9aad92b83f945f114e4b6bed44a ryzom-patch-3.0.2
|
||||
4300cc14aad098b1f86ea4c55577b7fa4a4cb5d2 ryzom-patch-3.1.0
|
||||
d4060f217f4f834cc62a33f2f1ccdf3c28298066 ryzom-patch-3.1.0-hotfix
|
||||
043aaeb3d8a2a54177581b57bda87a9deaad510e ryzom-patch-3.1.0-april_patch
|
||||
4036ecf59e83960f03acebc2089eb2ff5eeaed0a ryzom-patch-3.2.0
|
||||
18403bb9485da3d9742c6f007a16d5619ebfb196 ryzom-patch-3.2.1
|
||||
822ff8f8917ad66e09e2c21c983282f6f693b9f6 ryzom-patch-3.3.0
|
||||
00dde390a394fce9da06c2f3264140282158d39f ryzom-patch-3.3.0
|
||||
dcd4c4d161ef775136e18c7e8f5072b75dede27e ryzom-patch-3.3.1
|
||||
fc4be8ebec5ca754ef4453bc6a9faef90837c674 ryzom-patch-3.4.0
|
||||
70eba02e8eab6920586dbabf74e9e8180c729980 ryzom-patch-3.4.0 Steam Fix
|
||||
3941482843f9cd130cfc16634efc08d34a98ed35 ryzom-patch-3.4.0 Atysmas
|
||||
ecae9feb4cceb78103e5d7236caccaf450796cdb ryzom-patch-3.5.0
|
||||
95783afa226f241062134eb62f4323295d29ac84 ryzom-patch-3.5.0.9637
|
||||
2102fb276eb69d49ed4923042215312a63c47c08 Live-746
|
||||
8eb94c3549be898fdc4a7c6d791d2477bdc11a18 ryzomcore/v1.0.1
|
||||
3e92c7104c20d6bc6c2147b4b5fc289e8621d322 ryzomcore/v1.0.0
|
||||
4eddbaff0c5e5d685db96ee3e8427aa0fd96ac83 v0.8.0
|
||||
00d9b6e29e95f56785fbf85abe60afd34674f402 v0.9.0
|
||||
79776c337176dd5b02e1a74fe5dfb703b91747aa v0.9.1
|
||||
fedf2aa443d09707beed814b0f499c6a5519cc84 v0.10.0
|
||||
edaa3624a56420b02ccc64c26059801a389927ee v0.11.0
|
||||
e3fe4855f22c3e75722e015dc33c091c340b3ad7 v0.11.1
|
||||
9e583b717fd63be0be9fd60b99087abf1691ea49 v0.11.2
|
||||
bfe5628e14a024ba7ea32e4b326ae433a07856b9 v0.11.3
|
||||
9a6120735daa97c96ac5d85ca35c7f21f607bd87 v0.12.0
|
||||
3e92c7104c20d6bc6c2147b4b5fc289e8621d322 v1.0.0
|
||||
8eb94c3549be898fdc4a7c6d791d2477bdc11a18 v1.0.1
|
||||
3e17907af67e8d66d80e6b714707bbf912607f2a ryzom/3.0.0
|
||||
153e0b605c9e0c83ba05b6428c62838b49cc84b2 ryzom/3.0.1
|
||||
9d41f2994d44b9aad92b83f945f114e4b6bed44a ryzom/3.0.2
|
||||
4300cc14aad098b1f86ea4c55577b7fa4a4cb5d2 ryzom/3.1.0
|
||||
d4060f217f4f834cc62a33f2f1ccdf3c28298066 ryzom/3.1.0-hotfix
|
||||
043aaeb3d8a2a54177581b57bda87a9deaad510e ryzom/3.1.0-april_patch
|
||||
4036ecf59e83960f03acebc2089eb2ff5eeaed0a ryzom/3.2.0
|
||||
18403bb9485da3d9742c6f007a16d5619ebfb196 ryzom/3.2.1
|
||||
822ff8f8917ad66e09e2c21c983282f6f693b9f6 ryzom/3.3.0
|
||||
00dde390a394fce9da06c2f3264140282158d39f ryzom/3.3.0
|
||||
dcd4c4d161ef775136e18c7e8f5072b75dede27e ryzom/3.3.1
|
||||
fc4be8ebec5ca754ef4453bc6a9faef90837c674 ryzom/3.4.0
|
||||
70eba02e8eab6920586dbabf74e9e8180c729980 ryzom/3.4.0-steam_fix
|
||||
3941482843f9cd130cfc16634efc08d34a98ed35 ryzom/3.4.0-atysmas
|
||||
ecae9feb4cceb78103e5d7236caccaf450796cdb ryzom/3.5.0
|
||||
95783afa226f241062134eb62f4323295d29ac84 ryzom/3.5.0.9637
|
||||
|
@ -1,8 +0,0 @@
|
||||
# This file is parsed by HunterGate command
|
||||
|
||||
hunter_config(luabind
|
||||
VERSION 0.9.1
|
||||
URL "https://github.com/nimetu/luabind/tarball/2fa4606"
|
||||
SHA1 "3b4646bab9f0b2362d7b8d71d78e40deaf3cc747"
|
||||
)
|
||||
|
@ -1,537 +0,0 @@
|
||||
# Copyright (c) 2013-2019, Ruslan Baratov
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
# This is a gate file to Hunter package manager.
|
||||
# Include this file using `include` command and add package you need, example:
|
||||
#
|
||||
# cmake_minimum_required(VERSION 3.2)
|
||||
#
|
||||
# include("cmake/HunterGate.cmake")
|
||||
# HunterGate(
|
||||
# URL "https://github.com/path/to/hunter/archive.tar.gz"
|
||||
# SHA1 "798501e983f14b28b10cda16afa4de69eee1da1d"
|
||||
# )
|
||||
#
|
||||
# project(MyProject)
|
||||
#
|
||||
# hunter_add_package(Foo)
|
||||
# hunter_add_package(Boo COMPONENTS Bar Baz)
|
||||
#
|
||||
# Projects:
|
||||
# * https://github.com/hunter-packages/gate/
|
||||
# * https://github.com/ruslo/hunter
|
||||
|
||||
option(HUNTER_ENABLED "Enable Hunter package manager support" ON)
|
||||
|
||||
if(HUNTER_ENABLED)
|
||||
if(CMAKE_VERSION VERSION_LESS "3.2")
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"At least CMake version 3.2 required for Hunter dependency management."
|
||||
" Update CMake or set HUNTER_ENABLED to OFF."
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(CMakeParseArguments) # cmake_parse_arguments
|
||||
|
||||
option(HUNTER_STATUS_PRINT "Print working status" ON)
|
||||
option(HUNTER_STATUS_DEBUG "Print a lot info" OFF)
|
||||
option(HUNTER_TLS_VERIFY "Enable/disable TLS certificate checking on downloads" ON)
|
||||
set(HUNTER_ROOT "" CACHE FILEPATH "Override the HUNTER_ROOT.")
|
||||
|
||||
set(HUNTER_ERROR_PAGE "https://hunter.readthedocs.io/en/latest/reference/errors")
|
||||
|
||||
function(hunter_gate_status_print)
|
||||
if(HUNTER_STATUS_PRINT OR HUNTER_STATUS_DEBUG)
|
||||
foreach(print_message ${ARGV})
|
||||
message(STATUS "[hunter] ${print_message}")
|
||||
endforeach()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_status_debug)
|
||||
if(HUNTER_STATUS_DEBUG)
|
||||
foreach(print_message ${ARGV})
|
||||
string(TIMESTAMP timestamp)
|
||||
message(STATUS "[hunter *** DEBUG *** ${timestamp}] ${print_message}")
|
||||
endforeach()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_error_page error_page)
|
||||
message("------------------------------ ERROR ------------------------------")
|
||||
message(" ${HUNTER_ERROR_PAGE}/${error_page}.html")
|
||||
message("-------------------------------------------------------------------")
|
||||
message("")
|
||||
message(FATAL_ERROR "")
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_internal_error)
|
||||
message("")
|
||||
foreach(print_message ${ARGV})
|
||||
message("[hunter ** INTERNAL **] ${print_message}")
|
||||
endforeach()
|
||||
message("[hunter ** INTERNAL **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
|
||||
message("")
|
||||
hunter_gate_error_page("error.internal")
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_fatal_error)
|
||||
cmake_parse_arguments(hunter "" "ERROR_PAGE" "" "${ARGV}")
|
||||
if("${hunter_ERROR_PAGE}" STREQUAL "")
|
||||
hunter_gate_internal_error("Expected ERROR_PAGE")
|
||||
endif()
|
||||
message("")
|
||||
foreach(x ${hunter_UNPARSED_ARGUMENTS})
|
||||
message("[hunter ** FATAL ERROR **] ${x}")
|
||||
endforeach()
|
||||
message("[hunter ** FATAL ERROR **] [Directory:${CMAKE_CURRENT_LIST_DIR}]")
|
||||
message("")
|
||||
hunter_gate_error_page("${hunter_ERROR_PAGE}")
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_user_error)
|
||||
hunter_gate_fatal_error(${ARGV} ERROR_PAGE "error.incorrect.input.data")
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_self root version sha1 result)
|
||||
string(COMPARE EQUAL "${root}" "" is_bad)
|
||||
if(is_bad)
|
||||
hunter_gate_internal_error("root is empty")
|
||||
endif()
|
||||
|
||||
string(COMPARE EQUAL "${version}" "" is_bad)
|
||||
if(is_bad)
|
||||
hunter_gate_internal_error("version is empty")
|
||||
endif()
|
||||
|
||||
string(COMPARE EQUAL "${sha1}" "" is_bad)
|
||||
if(is_bad)
|
||||
hunter_gate_internal_error("sha1 is empty")
|
||||
endif()
|
||||
|
||||
string(SUBSTRING "${sha1}" 0 7 archive_id)
|
||||
|
||||
if(EXISTS "${root}/cmake/Hunter")
|
||||
set(hunter_self "${root}")
|
||||
else()
|
||||
set(
|
||||
hunter_self
|
||||
"${root}/_Base/Download/Hunter/${version}/${archive_id}/Unpacked"
|
||||
)
|
||||
endif()
|
||||
|
||||
set("${result}" "${hunter_self}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
# Set HUNTER_GATE_ROOT cmake variable to suitable value.
|
||||
function(hunter_gate_detect_root)
|
||||
# Check CMake variable
|
||||
if(HUNTER_ROOT)
|
||||
set(HUNTER_GATE_ROOT "${HUNTER_ROOT}" PARENT_SCOPE)
|
||||
hunter_gate_status_debug("HUNTER_ROOT detected by cmake variable")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Check environment variable
|
||||
if(DEFINED ENV{HUNTER_ROOT})
|
||||
set(HUNTER_GATE_ROOT "$ENV{HUNTER_ROOT}" PARENT_SCOPE)
|
||||
hunter_gate_status_debug("HUNTER_ROOT detected by environment variable")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Check HOME environment variable
|
||||
if(DEFINED ENV{HOME})
|
||||
set(HUNTER_GATE_ROOT "$ENV{HOME}/.hunter" PARENT_SCOPE)
|
||||
hunter_gate_status_debug("HUNTER_ROOT set using HOME environment variable")
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Check SYSTEMDRIVE and USERPROFILE environment variable (windows only)
|
||||
if(WIN32)
|
||||
if(DEFINED ENV{SYSTEMDRIVE})
|
||||
set(HUNTER_GATE_ROOT "$ENV{SYSTEMDRIVE}/.hunter" PARENT_SCOPE)
|
||||
hunter_gate_status_debug(
|
||||
"HUNTER_ROOT set using SYSTEMDRIVE environment variable"
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{USERPROFILE})
|
||||
set(HUNTER_GATE_ROOT "$ENV{USERPROFILE}/.hunter" PARENT_SCOPE)
|
||||
hunter_gate_status_debug(
|
||||
"HUNTER_ROOT set using USERPROFILE environment variable"
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
hunter_gate_fatal_error(
|
||||
"Can't detect HUNTER_ROOT"
|
||||
ERROR_PAGE "error.detect.hunter.root"
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(hunter_gate_download dir)
|
||||
string(
|
||||
COMPARE
|
||||
NOTEQUAL
|
||||
"$ENV{HUNTER_DISABLE_AUTOINSTALL}"
|
||||
""
|
||||
disable_autoinstall
|
||||
)
|
||||
if(disable_autoinstall AND NOT HUNTER_RUN_INSTALL)
|
||||
hunter_gate_fatal_error(
|
||||
"Hunter not found in '${dir}'"
|
||||
"Set HUNTER_RUN_INSTALL=ON to auto-install it from '${HUNTER_GATE_URL}'"
|
||||
"Settings:"
|
||||
" HUNTER_ROOT: ${HUNTER_GATE_ROOT}"
|
||||
" HUNTER_SHA1: ${HUNTER_GATE_SHA1}"
|
||||
ERROR_PAGE "error.run.install"
|
||||
)
|
||||
endif()
|
||||
string(COMPARE EQUAL "${dir}" "" is_bad)
|
||||
if(is_bad)
|
||||
hunter_gate_internal_error("Empty 'dir' argument")
|
||||
endif()
|
||||
|
||||
string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" is_bad)
|
||||
if(is_bad)
|
||||
hunter_gate_internal_error("HUNTER_GATE_SHA1 empty")
|
||||
endif()
|
||||
|
||||
string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" is_bad)
|
||||
if(is_bad)
|
||||
hunter_gate_internal_error("HUNTER_GATE_URL empty")
|
||||
endif()
|
||||
|
||||
set(done_location "${dir}/DONE")
|
||||
set(sha1_location "${dir}/SHA1")
|
||||
|
||||
set(build_dir "${dir}/Build")
|
||||
set(cmakelists "${dir}/CMakeLists.txt")
|
||||
|
||||
hunter_gate_status_debug("Locking directory: ${dir}")
|
||||
file(LOCK "${dir}" DIRECTORY GUARD FUNCTION)
|
||||
hunter_gate_status_debug("Lock done")
|
||||
|
||||
if(EXISTS "${done_location}")
|
||||
# while waiting for lock other instance can do all the job
|
||||
hunter_gate_status_debug("File '${done_location}' found, skip install")
|
||||
return()
|
||||
endif()
|
||||
|
||||
file(REMOVE_RECURSE "${build_dir}")
|
||||
file(REMOVE_RECURSE "${cmakelists}")
|
||||
|
||||
file(MAKE_DIRECTORY "${build_dir}") # check directory permissions
|
||||
|
||||
# Disabling languages speeds up a little bit, reduces noise in the output
|
||||
# and avoids path too long windows error
|
||||
file(
|
||||
WRITE
|
||||
"${cmakelists}"
|
||||
"cmake_minimum_required(VERSION 3.2)\n"
|
||||
"project(HunterDownload LANGUAGES NONE)\n"
|
||||
"include(ExternalProject)\n"
|
||||
"ExternalProject_Add(\n"
|
||||
" Hunter\n"
|
||||
" URL\n"
|
||||
" \"${HUNTER_GATE_URL}\"\n"
|
||||
" URL_HASH\n"
|
||||
" SHA1=${HUNTER_GATE_SHA1}\n"
|
||||
" DOWNLOAD_DIR\n"
|
||||
" \"${dir}\"\n"
|
||||
" TLS_VERIFY\n"
|
||||
" ${HUNTER_TLS_VERIFY}\n"
|
||||
" SOURCE_DIR\n"
|
||||
" \"${dir}/Unpacked\"\n"
|
||||
" CONFIGURE_COMMAND\n"
|
||||
" \"\"\n"
|
||||
" BUILD_COMMAND\n"
|
||||
" \"\"\n"
|
||||
" INSTALL_COMMAND\n"
|
||||
" \"\"\n"
|
||||
")\n"
|
||||
)
|
||||
|
||||
if(HUNTER_STATUS_DEBUG)
|
||||
set(logging_params "")
|
||||
else()
|
||||
set(logging_params OUTPUT_QUIET)
|
||||
endif()
|
||||
|
||||
hunter_gate_status_debug("Run generate")
|
||||
|
||||
# Need to add toolchain file too.
|
||||
# Otherwise on Visual Studio + MDD this will fail with error:
|
||||
# "Could not find an appropriate version of the Windows 10 SDK installed on this machine"
|
||||
if(EXISTS "${CMAKE_TOOLCHAIN_FILE}")
|
||||
get_filename_component(absolute_CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}" ABSOLUTE)
|
||||
set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=${absolute_CMAKE_TOOLCHAIN_FILE}")
|
||||
else()
|
||||
# 'toolchain_arg' can't be empty
|
||||
set(toolchain_arg "-DCMAKE_TOOLCHAIN_FILE=")
|
||||
endif()
|
||||
|
||||
string(COMPARE EQUAL "${CMAKE_MAKE_PROGRAM}" "" no_make)
|
||||
if(no_make)
|
||||
set(make_arg "")
|
||||
else()
|
||||
# Test case: remove Ninja from PATH but set it via CMAKE_MAKE_PROGRAM
|
||||
set(make_arg "-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}")
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND
|
||||
"${CMAKE_COMMAND}"
|
||||
"-H${dir}"
|
||||
"-B${build_dir}"
|
||||
"-G${CMAKE_GENERATOR}"
|
||||
"${toolchain_arg}"
|
||||
${make_arg}
|
||||
WORKING_DIRECTORY "${dir}"
|
||||
RESULT_VARIABLE download_result
|
||||
${logging_params}
|
||||
)
|
||||
|
||||
if(NOT download_result EQUAL 0)
|
||||
hunter_gate_internal_error(
|
||||
"Configure project failed."
|
||||
"To reproduce the error run: ${CMAKE_COMMAND} -H${dir} -B${build_dir} -G${CMAKE_GENERATOR} ${toolchain_arg} ${make_arg}"
|
||||
"In directory ${dir}"
|
||||
)
|
||||
endif()
|
||||
|
||||
hunter_gate_status_print(
|
||||
"Initializing Hunter workspace (${HUNTER_GATE_SHA1})"
|
||||
" ${HUNTER_GATE_URL}"
|
||||
" -> ${dir}"
|
||||
)
|
||||
execute_process(
|
||||
COMMAND "${CMAKE_COMMAND}" --build "${build_dir}"
|
||||
WORKING_DIRECTORY "${dir}"
|
||||
RESULT_VARIABLE download_result
|
||||
${logging_params}
|
||||
)
|
||||
|
||||
if(NOT download_result EQUAL 0)
|
||||
hunter_gate_internal_error("Build project failed")
|
||||
endif()
|
||||
|
||||
file(REMOVE_RECURSE "${build_dir}")
|
||||
file(REMOVE_RECURSE "${cmakelists}")
|
||||
|
||||
file(WRITE "${sha1_location}" "${HUNTER_GATE_SHA1}")
|
||||
file(WRITE "${done_location}" "DONE")
|
||||
|
||||
hunter_gate_status_debug("Finished")
|
||||
endfunction()
|
||||
|
||||
# Must be a macro so master file 'cmake/Hunter' can
|
||||
# apply all variables easily just by 'include' command
|
||||
# (otherwise PARENT_SCOPE magic needed)
|
||||
macro(HunterGate)
|
||||
if(HUNTER_GATE_DONE)
|
||||
# variable HUNTER_GATE_DONE set explicitly for external project
|
||||
# (see `hunter_download`)
|
||||
set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES)
|
||||
endif()
|
||||
|
||||
# First HunterGate command will init Hunter, others will be ignored
|
||||
get_property(_hunter_gate_done GLOBAL PROPERTY HUNTER_GATE_DONE SET)
|
||||
|
||||
if(NOT HUNTER_ENABLED)
|
||||
# Empty function to avoid error "unknown function"
|
||||
function(hunter_add_package)
|
||||
endfunction()
|
||||
|
||||
set(
|
||||
_hunter_gate_disabled_mode_dir
|
||||
"${CMAKE_CURRENT_LIST_DIR}/cmake/Hunter/disabled-mode"
|
||||
)
|
||||
if(EXISTS "${_hunter_gate_disabled_mode_dir}")
|
||||
hunter_gate_status_debug(
|
||||
"Adding \"disabled-mode\" modules: ${_hunter_gate_disabled_mode_dir}"
|
||||
)
|
||||
list(APPEND CMAKE_PREFIX_PATH "${_hunter_gate_disabled_mode_dir}")
|
||||
endif()
|
||||
elseif(_hunter_gate_done)
|
||||
hunter_gate_status_debug("Secondary HunterGate (use old settings)")
|
||||
hunter_gate_self(
|
||||
"${HUNTER_CACHED_ROOT}"
|
||||
"${HUNTER_VERSION}"
|
||||
"${HUNTER_SHA1}"
|
||||
_hunter_self
|
||||
)
|
||||
include("${_hunter_self}/cmake/Hunter")
|
||||
else()
|
||||
set(HUNTER_GATE_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
|
||||
string(COMPARE NOTEQUAL "${PROJECT_NAME}" "" _have_project_name)
|
||||
if(_have_project_name)
|
||||
hunter_gate_fatal_error(
|
||||
"Please set HunterGate *before* 'project' command. "
|
||||
"Detected project: ${PROJECT_NAME}"
|
||||
ERROR_PAGE "error.huntergate.before.project"
|
||||
)
|
||||
endif()
|
||||
|
||||
cmake_parse_arguments(
|
||||
HUNTER_GATE "LOCAL" "URL;SHA1;GLOBAL;FILEPATH" "" ${ARGV}
|
||||
)
|
||||
|
||||
string(COMPARE EQUAL "${HUNTER_GATE_SHA1}" "" _empty_sha1)
|
||||
string(COMPARE EQUAL "${HUNTER_GATE_URL}" "" _empty_url)
|
||||
string(
|
||||
COMPARE
|
||||
NOTEQUAL
|
||||
"${HUNTER_GATE_UNPARSED_ARGUMENTS}"
|
||||
""
|
||||
_have_unparsed
|
||||
)
|
||||
string(COMPARE NOTEQUAL "${HUNTER_GATE_GLOBAL}" "" _have_global)
|
||||
string(COMPARE NOTEQUAL "${HUNTER_GATE_FILEPATH}" "" _have_filepath)
|
||||
|
||||
if(_have_unparsed)
|
||||
hunter_gate_user_error(
|
||||
"HunterGate unparsed arguments: ${HUNTER_GATE_UNPARSED_ARGUMENTS}"
|
||||
)
|
||||
endif()
|
||||
if(_empty_sha1)
|
||||
hunter_gate_user_error("SHA1 suboption of HunterGate is mandatory")
|
||||
endif()
|
||||
if(_empty_url)
|
||||
hunter_gate_user_error("URL suboption of HunterGate is mandatory")
|
||||
endif()
|
||||
if(_have_global)
|
||||
if(HUNTER_GATE_LOCAL)
|
||||
hunter_gate_user_error("Unexpected LOCAL (already has GLOBAL)")
|
||||
endif()
|
||||
if(_have_filepath)
|
||||
hunter_gate_user_error("Unexpected FILEPATH (already has GLOBAL)")
|
||||
endif()
|
||||
endif()
|
||||
if(HUNTER_GATE_LOCAL)
|
||||
if(_have_global)
|
||||
hunter_gate_user_error("Unexpected GLOBAL (already has LOCAL)")
|
||||
endif()
|
||||
if(_have_filepath)
|
||||
hunter_gate_user_error("Unexpected FILEPATH (already has LOCAL)")
|
||||
endif()
|
||||
endif()
|
||||
if(_have_filepath)
|
||||
if(_have_global)
|
||||
hunter_gate_user_error("Unexpected GLOBAL (already has FILEPATH)")
|
||||
endif()
|
||||
if(HUNTER_GATE_LOCAL)
|
||||
hunter_gate_user_error("Unexpected LOCAL (already has FILEPATH)")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
hunter_gate_detect_root() # set HUNTER_GATE_ROOT
|
||||
|
||||
# Beautify path, fix probable problems with windows path slashes
|
||||
get_filename_component(
|
||||
HUNTER_GATE_ROOT "${HUNTER_GATE_ROOT}" ABSOLUTE
|
||||
)
|
||||
hunter_gate_status_debug("HUNTER_ROOT: ${HUNTER_GATE_ROOT}")
|
||||
if(NOT HUNTER_ALLOW_SPACES_IN_PATH)
|
||||
string(FIND "${HUNTER_GATE_ROOT}" " " _contain_spaces)
|
||||
if(NOT _contain_spaces EQUAL -1)
|
||||
hunter_gate_fatal_error(
|
||||
"HUNTER_ROOT (${HUNTER_GATE_ROOT}) contains spaces."
|
||||
"Set HUNTER_ALLOW_SPACES_IN_PATH=ON to skip this error"
|
||||
"(Use at your own risk!)"
|
||||
ERROR_PAGE "error.spaces.in.hunter.root"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
string(
|
||||
REGEX
|
||||
MATCH
|
||||
"[0-9]+\\.[0-9]+\\.[0-9]+[-_a-z0-9]*"
|
||||
HUNTER_GATE_VERSION
|
||||
"${HUNTER_GATE_URL}"
|
||||
)
|
||||
string(COMPARE EQUAL "${HUNTER_GATE_VERSION}" "" _is_empty)
|
||||
if(_is_empty)
|
||||
set(HUNTER_GATE_VERSION "unknown")
|
||||
endif()
|
||||
|
||||
hunter_gate_self(
|
||||
"${HUNTER_GATE_ROOT}"
|
||||
"${HUNTER_GATE_VERSION}"
|
||||
"${HUNTER_GATE_SHA1}"
|
||||
_hunter_self
|
||||
)
|
||||
|
||||
set(_master_location "${_hunter_self}/cmake/Hunter")
|
||||
if(EXISTS "${HUNTER_GATE_ROOT}/cmake/Hunter")
|
||||
# Hunter downloaded manually (e.g. by 'git clone')
|
||||
set(_unused "xxxxxxxxxx")
|
||||
set(HUNTER_GATE_SHA1 "${_unused}")
|
||||
set(HUNTER_GATE_VERSION "${_unused}")
|
||||
else()
|
||||
get_filename_component(_archive_id_location "${_hunter_self}/.." ABSOLUTE)
|
||||
set(_done_location "${_archive_id_location}/DONE")
|
||||
set(_sha1_location "${_archive_id_location}/SHA1")
|
||||
|
||||
# Check Hunter already downloaded by HunterGate
|
||||
if(NOT EXISTS "${_done_location}")
|
||||
hunter_gate_download("${_archive_id_location}")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${_done_location}")
|
||||
hunter_gate_internal_error("hunter_gate_download failed")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${_sha1_location}")
|
||||
hunter_gate_internal_error("${_sha1_location} not found")
|
||||
endif()
|
||||
file(READ "${_sha1_location}" _sha1_value)
|
||||
string(TOLOWER "${_sha1_value}" _sha1_value_lower)
|
||||
string(TOLOWER "${HUNTER_GATE_SHA1}" _HUNTER_GATE_SHA1_lower)
|
||||
string(COMPARE EQUAL "${_sha1_value_lower}" "${_HUNTER_GATE_SHA1_lower}" _is_equal)
|
||||
if(NOT _is_equal)
|
||||
hunter_gate_internal_error(
|
||||
"Short SHA1 collision:"
|
||||
" ${_sha1_value} (from ${_sha1_location})"
|
||||
" ${HUNTER_GATE_SHA1} (HunterGate)"
|
||||
)
|
||||
endif()
|
||||
if(NOT EXISTS "${_master_location}")
|
||||
hunter_gate_user_error(
|
||||
"Master file not found:"
|
||||
" ${_master_location}"
|
||||
"try to update Hunter/HunterGate"
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
include("${_master_location}")
|
||||
set_property(GLOBAL PROPERTY HUNTER_GATE_DONE YES)
|
||||
endif()
|
||||
endmacro()
|
@ -1,120 +1,120 @@
|
||||
;--------------------------------
|
||||
;Include Modern UI
|
||||
!include "MUI2.nsh"
|
||||
|
||||
;--------------------------------
|
||||
;General
|
||||
!define Company "Winch Gate"
|
||||
!define GenericProduct "Ryzom"
|
||||
!define Product "Ryzom Installer"
|
||||
!define RegistryCat "HKCU"
|
||||
!define RegistryKey "Software\${Company}\${GenericProduct}"
|
||||
!define Executable "ryzom_installer_qt_r.exe"
|
||||
!define SrcDir "RyzomInstaller"
|
||||
!define Installer "ryzom_installer_windows.exe"
|
||||
|
||||
;Properly display all languages (Installer will not work on Windows 95, 98 or ME!)
|
||||
;Unicode true
|
||||
|
||||
;New XP style
|
||||
XPStyle on
|
||||
|
||||
;Name and file
|
||||
Name "${Product}"
|
||||
OutFile "${Installer}"
|
||||
|
||||
;Default installation folder
|
||||
InstallDir "$LOCALAPPDATA\${GenericProduct}"
|
||||
|
||||
;Get installation folder from registry if available
|
||||
InstallDirRegKey "${RegistryCat}" "${RegistryKey}" "${GenericProduct} Install Path"
|
||||
|
||||
;Request application privileges for Windows Vista
|
||||
RequestExecutionLevel user
|
||||
|
||||
;Best compression
|
||||
SetCompressor LZMA
|
||||
|
||||
; ???
|
||||
AllowSkipFiles on
|
||||
|
||||
;--------------------------------
|
||||
;Interface Settings
|
||||
|
||||
!define MUI_ICON "${SrcDir}\${GenericProduct}.ico"
|
||||
!define MUI_UNICON "${SrcDir}\${GenericProduct}.ico"
|
||||
!define MUI_HEADERIMAGE
|
||||
!define MUI_HEADERIMAGE_BITMAP "modern-header.bmp" ; optional
|
||||
!define MUI_WELCOMEFINISHPAGE_BITMAP "modern-wizard.bmp"
|
||||
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "modern-wizard.bmp"
|
||||
!define MUI_ABORTWARNING
|
||||
|
||||
;Show all languages, despite user's codepage
|
||||
!define MUI_LANGDLL_ALLLANGUAGES
|
||||
|
||||
;--------------------------------
|
||||
;Language Selection Dialog Settings
|
||||
|
||||
;Remember the installer language
|
||||
!define MUI_LANGDLL_REGISTRY_ROOT "${RegistryCat}"
|
||||
!define MUI_LANGDLL_REGISTRY_KEY "${RegistryKey}"
|
||||
!define MUI_LANGDLL_REGISTRY_VALUENAME "Language"
|
||||
|
||||
;--------------------------------
|
||||
;Pages
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
|
||||
!define MUI_FINISHPAGE_RUN "$INSTDIR\${Executable}"
|
||||
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
!insertmacro MUI_UNPAGE_WELCOME
|
||||
!insertmacro MUI_UNPAGE_CONFIRM
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
!insertmacro MUI_UNPAGE_FINISH
|
||||
|
||||
;--------------------------------
|
||||
;Languages
|
||||
|
||||
!insertmacro MUI_LANGUAGE "English" ;first language is the default language
|
||||
!insertmacro MUI_LANGUAGE "French"
|
||||
!insertmacro MUI_LANGUAGE "German"
|
||||
!insertmacro MUI_LANGUAGE "Spanish"
|
||||
|
||||
;--------------------------------
|
||||
;Reserve Files
|
||||
|
||||
;If you are using solid compression, files that are required before
|
||||
;the actual installation should be stored first in the data block,
|
||||
;because this will make your installer start faster.
|
||||
|
||||
!insertmacro MUI_RESERVEFILE_LANGDLL
|
||||
|
||||
;--------------------------------
|
||||
;Installer Sections
|
||||
|
||||
; ----------------------------------------
|
||||
; Default section
|
||||
Section
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
;Client, configuration and misc files
|
||||
File "${SrcDir}\${Executable}"
|
||||
File "${SrcDir}\msvcp120.dll"
|
||||
File "${SrcDir}\msvcr120.dll"
|
||||
|
||||
;Shortcut on desktop
|
||||
CreateShortCut "$DESKTOP\${Product}.lnk" "$INSTDIR\${Executable}"
|
||||
|
||||
;Store installation folder
|
||||
WriteRegStr "${RegistryCat}" "${RegistryKey}" "${GenericProduct} Install Path" $INSTDIR
|
||||
SectionEnd
|
||||
|
||||
;--------------------------------
|
||||
;Installer Functions
|
||||
|
||||
Function .onInit
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
FunctionEnd
|
||||
;--------------------------------
|
||||
;Include Modern UI
|
||||
!include "MUI2.nsh"
|
||||
|
||||
;--------------------------------
|
||||
;General
|
||||
!define Company "Winch Gate"
|
||||
!define GenericProduct "Ryzom"
|
||||
!define Product "Ryzom Installer"
|
||||
!define RegistryCat "HKCU"
|
||||
!define RegistryKey "Software\${Company}\${GenericProduct}"
|
||||
!define Executable "ryzom_installer_qt_r.exe"
|
||||
!define SrcDir "RyzomInstaller"
|
||||
!define Installer "ryzom_installer_windows.exe"
|
||||
|
||||
;Properly display all languages (Installer will not work on Windows 95, 98 or ME!)
|
||||
;Unicode true
|
||||
|
||||
;New XP style
|
||||
XPStyle on
|
||||
|
||||
;Name and file
|
||||
Name "${Product}"
|
||||
OutFile "${Installer}"
|
||||
|
||||
;Default installation folder
|
||||
InstallDir "$LOCALAPPDATA\${GenericProduct}"
|
||||
|
||||
;Get installation folder from registry if available
|
||||
InstallDirRegKey "${RegistryCat}" "${RegistryKey}" "${GenericProduct} Install Path"
|
||||
|
||||
;Request application privileges for Windows Vista
|
||||
RequestExecutionLevel user
|
||||
|
||||
;Best compression
|
||||
SetCompressor LZMA
|
||||
|
||||
; ???
|
||||
AllowSkipFiles on
|
||||
|
||||
;--------------------------------
|
||||
;Interface Settings
|
||||
|
||||
!define MUI_ICON "${SrcDir}\${GenericProduct}.ico"
|
||||
!define MUI_UNICON "${SrcDir}\${GenericProduct}.ico"
|
||||
!define MUI_HEADERIMAGE
|
||||
!define MUI_HEADERIMAGE_BITMAP "modern-header.bmp" ; optional
|
||||
!define MUI_WELCOMEFINISHPAGE_BITMAP "modern-wizard.bmp"
|
||||
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "modern-wizard.bmp"
|
||||
!define MUI_ABORTWARNING
|
||||
|
||||
;Show all languages, despite user's codepage
|
||||
!define MUI_LANGDLL_ALLLANGUAGES
|
||||
|
||||
;--------------------------------
|
||||
;Language Selection Dialog Settings
|
||||
|
||||
;Remember the installer language
|
||||
!define MUI_LANGDLL_REGISTRY_ROOT "${RegistryCat}"
|
||||
!define MUI_LANGDLL_REGISTRY_KEY "${RegistryKey}"
|
||||
!define MUI_LANGDLL_REGISTRY_VALUENAME "Language"
|
||||
|
||||
;--------------------------------
|
||||
;Pages
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
|
||||
!define MUI_FINISHPAGE_RUN "$INSTDIR\${Executable}"
|
||||
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
!insertmacro MUI_UNPAGE_WELCOME
|
||||
!insertmacro MUI_UNPAGE_CONFIRM
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
!insertmacro MUI_UNPAGE_FINISH
|
||||
|
||||
;--------------------------------
|
||||
;Languages
|
||||
|
||||
!insertmacro MUI_LANGUAGE "English" ;first language is the default language
|
||||
!insertmacro MUI_LANGUAGE "French"
|
||||
!insertmacro MUI_LANGUAGE "German"
|
||||
!insertmacro MUI_LANGUAGE "Spanish"
|
||||
|
||||
;--------------------------------
|
||||
;Reserve Files
|
||||
|
||||
;If you are using solid compression, files that are required before
|
||||
;the actual installation should be stored first in the data block,
|
||||
;because this will make your installer start faster.
|
||||
|
||||
!insertmacro MUI_RESERVEFILE_LANGDLL
|
||||
|
||||
;--------------------------------
|
||||
;Installer Sections
|
||||
|
||||
; ----------------------------------------
|
||||
; Default section
|
||||
Section
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
;Client, configuration and misc files
|
||||
File "${SrcDir}\${Executable}"
|
||||
File "${SrcDir}\msvcp120.dll"
|
||||
File "${SrcDir}\msvcr120.dll"
|
||||
|
||||
;Shortcut on desktop
|
||||
CreateShortCut "$DESKTOP\${Product}.lnk" "$INSTDIR\${Executable}"
|
||||
|
||||
;Store installation folder
|
||||
WriteRegStr "${RegistryCat}" "${RegistryKey}" "${GenericProduct} Install Path" $INSTDIR
|
||||
SectionEnd
|
||||
|
||||
;--------------------------------
|
||||
;Installer Functions
|
||||
|
||||
Function .onInit
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
FunctionEnd
|
||||
|
@ -1,298 +1,298 @@
|
||||
;--------------------------------
|
||||
;Include Modern UI
|
||||
!include "MUI2.nsh"
|
||||
|
||||
;--------------------------------
|
||||
;General
|
||||
!define Company "Nevrax"
|
||||
!define Product "Ryzom"
|
||||
!define Version "2.1.0"
|
||||
!define Patch "661"
|
||||
!define RegistryCat "HKLM"
|
||||
!define RegistryKey "Software\${Company}\${Product}"
|
||||
!define Executable "client_ryzom_rd.exe"
|
||||
!define DstDir "Output"
|
||||
!define SrcDir "Ryzom"
|
||||
!define Installer "ryzom_setup_${Patch}.exe"
|
||||
|
||||
;Registry key for uninstaller
|
||||
!define UninstallRegistryRoot "Software\Microsoft\Windows\CurrentVersion\Uninstall"
|
||||
!define UninstallRegistryKey "${UninstallRegistryRoot}\${Product}"
|
||||
|
||||
;Properly display all languages (Installer will not work on Windows 95, 98 or ME!)
|
||||
Unicode true
|
||||
|
||||
;New XP style
|
||||
XPStyle on
|
||||
|
||||
;Name and file
|
||||
Name "${Product}"
|
||||
OutFile "${DstDir}\${Installer}"
|
||||
|
||||
;Default installation folder
|
||||
InstallDir "$PROGRAMFILES\${Product}"
|
||||
|
||||
;Get installation folder from registry if available
|
||||
InstallDirRegKey "${RegistryCat}" "${RegistryKey}" "${Product} Install Path"
|
||||
|
||||
;Request application privileges for Windows Vista
|
||||
RequestExecutionLevel admin
|
||||
|
||||
;Best compression
|
||||
SetCompressor LZMA
|
||||
|
||||
; ???
|
||||
AllowSkipFiles on
|
||||
|
||||
;--------------------------------
|
||||
;Variables
|
||||
|
||||
;Will be used later
|
||||
Var MUI_TEMP
|
||||
Var STARTMENU_FOLDER
|
||||
|
||||
;--------------------------------
|
||||
;Interface Settings
|
||||
|
||||
!define MUI_ICON "${SrcDir}\ryzom.ico"
|
||||
!define MUI_UNICON "${SrcDir}\ryzom.ico"
|
||||
!define MUI_HEADERIMAGE
|
||||
!define MUI_HEADERIMAGE_BITMAP "modern-header.bmp" ; optional
|
||||
!define MUI_WELCOMEFINISHPAGE_BITMAP "modern-wizard.bmp"
|
||||
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "modern-wizard.bmp"
|
||||
!define MUI_ABORTWARNING
|
||||
|
||||
;Show all languages, despite user's codepage
|
||||
!define MUI_LANGDLL_ALLLANGUAGES
|
||||
|
||||
;--------------------------------
|
||||
;Language Selection Dialog Settings
|
||||
|
||||
;Remember the installer language
|
||||
!define MUI_LANGDLL_REGISTRY_ROOT "${RegistryCat}"
|
||||
!define MUI_LANGDLL_REGISTRY_KEY "${RegistryKey}"
|
||||
!define MUI_LANGDLL_REGISTRY_VALUENAME "Language"
|
||||
|
||||
;--------------------------------
|
||||
;Pages
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
|
||||
;Start Menu Folder Page Configuration
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${RegistryCat}"
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${RegistryKey}"
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
|
||||
|
||||
!insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
|
||||
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
|
||||
!define MUI_FINISHPAGE_RUN "$INSTDIR\${Executable}"
|
||||
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
!insertmacro MUI_UNPAGE_WELCOME
|
||||
!insertmacro MUI_UNPAGE_CONFIRM
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
!insertmacro MUI_UNPAGE_FINISH
|
||||
|
||||
;--------------------------------
|
||||
;Languages
|
||||
|
||||
!insertmacro MUI_LANGUAGE "English" ;first language is the default language
|
||||
!insertmacro MUI_LANGUAGE "French"
|
||||
!insertmacro MUI_LANGUAGE "German"
|
||||
;!insertmacro MUI_LANGUAGE "Spanish"
|
||||
|
||||
;--------------------------------
|
||||
;Reserve Files
|
||||
|
||||
;If you are using solid compression, files that are required before
|
||||
;the actual installation should be stored first in the data block,
|
||||
;because this will make your installer start faster.
|
||||
|
||||
!insertmacro MUI_RESERVEFILE_LANGDLL
|
||||
|
||||
;--------------------------------
|
||||
;Descriptions
|
||||
|
||||
;French
|
||||
LangString MSG_SUPPORT_URL_TITLE ${LANG_FRENCH} "Support"
|
||||
LangString MSG_SUPPORT_URL ${LANG_FRENCH} "http://app.ryzom.com/app_forum/index.php?page=topic/view/22047/1&post149889=fr#1"
|
||||
LangString MSG_HOME_URL_TITLE ${LANG_FRENCH} "${Product} sur le Web"
|
||||
LangString MSG_HOME_URL ${LANG_FRENCH} "http://ryzom.fr"
|
||||
LangString MSG_CONFIRM_DELETE_BACKUPS ${LANG_FRENCH} "Voulez-vous supprimer vos fichiers de sauvegarde ? Appuyer sur Oui pour effacer vos fichiers de sauvegarde."
|
||||
|
||||
;English
|
||||
LangString MSG_SUPPORT_URL_TITLE ${LANG_ENGLISH} "Support"
|
||||
LangString MSG_SUPPORT_URL ${LANG_ENGLISH} "http://app.ryzom.com/app_forum/index.php?page=topic/view/22047/1&post149889=en#1"
|
||||
LangString MSG_HOME_URL_TITLE ${LANG_ENGLISH} "${Product} on the Web"
|
||||
LangString MSG_HOME_URL ${LANG_ENGLISH} "http://ryzom.com"
|
||||
LangString MSG_CONFIRM_DELETE_BACKUPS ${LANG_ENGLISH} "Deleting Save Files? Click Yes to delete your own save files."
|
||||
|
||||
;German
|
||||
LangString MSG_SUPPORT_URL_TITLE ${LANG_GERMAN} "Support"
|
||||
LangString MSG_SUPPORT_URL ${LANG_GERMAN} "http://app.ryzom.com/app_forum/index.php?page=topic/view/22047/1&post149889=de#1"
|
||||
LangString MSG_HOME_URL_TITLE ${LANG_GERMAN} "${Product} im Internet"
|
||||
LangString MSG_HOME_URL ${LANG_GERMAN} "http://ryzom.de"
|
||||
LangString MSG_CONFIRM_DELETE_BACKUPS ${LANG_GERMAN} "Gespeicherte Dateien löschen? Klicke Ja um die eigenen Dateien zu löschen."
|
||||
|
||||
;--------------------------------
|
||||
;Installer Sections
|
||||
|
||||
!macro CreateInternetShortcut FILENAME URL ICONFILE
|
||||
WriteINIStr "${FILENAME}.url" "InternetShortcut" "URL" "${URL}"
|
||||
WriteINIStr "${FILENAME}.url" "InternetShortcut" "IconFile" "${ICONFILE}"
|
||||
WriteINIStr "${FILENAME}.url" "InternetShortcut" "IconIndex" "0"
|
||||
!macroend
|
||||
|
||||
; ----------------------------------------
|
||||
; Default section
|
||||
Section
|
||||
;Install for All Users
|
||||
SetShellVarContext all
|
||||
|
||||
;Game directories
|
||||
SetOutPath "$INSTDIR\cfg"
|
||||
File /r "${SrcDir}\cfg\*.*"
|
||||
|
||||
SetOutPath "$INSTDIR\data"
|
||||
File /r "${SrcDir}\data\*.*"
|
||||
|
||||
SetOutPath "$INSTDIR\examples"
|
||||
File /r "${SrcDir}\examples\*.*"
|
||||
|
||||
SetOutPath "$INSTDIR\user"
|
||||
File /r "${SrcDir}\user\*.*"
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
;Client, configuration and misc files
|
||||
File "${SrcDir}\client_default.cfg"
|
||||
File "${SrcDir}\${Executable}"
|
||||
File "${SrcDir}\configure.bat"
|
||||
File "${SrcDir}\d3dcompiler_43.dll"
|
||||
File "${SrcDir}\d3dx9_43.dll"
|
||||
File "${SrcDir}\fmod.dll"
|
||||
File "${SrcDir}\forum.url"
|
||||
File "${SrcDir}\launch.bat"
|
||||
File "${SrcDir}\msvcp100.dll"
|
||||
File "${SrcDir}\msvcr100.dll"
|
||||
File "${SrcDir}\nel_drv_direct3d_win_r.dll"
|
||||
File "${SrcDir}\nel_drv_fmod_win_r.dll"
|
||||
File "${SrcDir}\nel_drv_opengl_win_r.dll"
|
||||
File "${SrcDir}\ryzom.ico"
|
||||
File "${SrcDir}\ryzom.url"
|
||||
File "${SrcDir}\Ryzom6.ico"
|
||||
|
||||
;Create uninstaller
|
||||
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
||||
|
||||
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
||||
|
||||
;Create shortcuts in Start Menu
|
||||
CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
|
||||
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
|
||||
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\${Product}.lnk" "$INSTDIR\${Executable}"
|
||||
|
||||
;Create URLs
|
||||
!insertmacro CreateInternetShortcut "$SMPROGRAMS\$STARTMENU_FOLDER\$(MSG_SUPPORT_URL_TITLE)" "$(MSG_SUPPORT_URL)" "$INSTDIR\ryzom.ico"
|
||||
!insertmacro CreateInternetShortcut "$SMPROGRAMS\$STARTMENU_FOLDER\$(MSG_HOME_URL_TITLE)" "$(MSG_HOME_URL)" "$INSTDIR\ryzom.ico"
|
||||
|
||||
!insertmacro MUI_STARTMENU_WRITE_END
|
||||
|
||||
;Shortcut on desktop
|
||||
CreateShortCut "$DESKTOP\${Product}.lnk" "$INSTDIR\${Executable}"
|
||||
|
||||
;Add/Remove Program entry
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "DisplayIcon" "$INSTDIR\${Executable},0"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "DisplayName" "${Product}"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "DisplayVersion" "${Version}"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "InstallLocation" "$INSTDIR"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "QuietUninstallString" '"$INSTDIR\Uninstall.exe" /S'
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "UninstallString" "$INSTDIR\Uninstall.exe"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "Publisher" "${Company}"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "HelpLink" "$(MSG_SUPPORT_URL)"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "URLInfoAbout" "$(MSG_HOME_URL)"
|
||||
|
||||
;Store installation folder
|
||||
WriteRegStr "${RegistryCat}" "${RegistryKey}" "${Product} Install Path" $INSTDIR
|
||||
SectionEnd
|
||||
|
||||
;--------------------------------
|
||||
;Uninstaller Section
|
||||
Section "Uninstall"
|
||||
;Install for All Users
|
||||
SetShellVarContext all
|
||||
|
||||
;Game directories
|
||||
RMDir /r "$INSTDIR\cfg"
|
||||
RMDir /r "$INSTDIR\data"
|
||||
RMDir /r "$INSTDIR\examples"
|
||||
|
||||
;Temporary directories
|
||||
RMDir /r "$INSTDIR\cache"
|
||||
RMDir /r "$INSTDIR\unpack"
|
||||
|
||||
;Client, configuration and misc files
|
||||
Delete "$INSTDIR\client_default.cfg"
|
||||
Delete "$INSTDIR\${Executable}"
|
||||
Delete "$INSTDIR\configure.bat"
|
||||
Delete "$INSTDIR\d3dcompiler_43.dll"
|
||||
Delete "$INSTDIR\d3dx9_43.dll"
|
||||
Delete "$INSTDIR\fmod.dll"
|
||||
Delete "$INSTDIR\forum.url"
|
||||
Delete "$INSTDIR\launch.bat"
|
||||
Delete "$INSTDIR\msvcp100.dll"
|
||||
Delete "$INSTDIR\msvcr100.dll"
|
||||
Delete "$INSTDIR\nel_drv_direct3d_win_r.dll"
|
||||
Delete "$INSTDIR\nel_drv_fmod_win_r.dll"
|
||||
Delete "$INSTDIR\nel_drv_opengl_win_r.dll"
|
||||
Delete "$INSTDIR\ryzom.ico"
|
||||
Delete "$INSTDIR\ryzom.url"
|
||||
Delete "$INSTDIR\Ryzom6.ico"
|
||||
|
||||
;Delete uninstaller
|
||||
Delete "$INSTDIR\Uninstall.exe"
|
||||
|
||||
MessageBox MB_YESNO "$(MSG_CONFIRM_DELETE_BACKUPS)" IDNO DontDeleteMiscFiles
|
||||
|
||||
;Delete directory
|
||||
RMDir /r "$INSTDIR"
|
||||
|
||||
DontDeleteMiscFiles:
|
||||
|
||||
;Delete directory if empty
|
||||
RMDir "$INSTDIR"
|
||||
|
||||
;Delete all shortcuts
|
||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
|
||||
|
||||
;Delete Start Menu shortcuts
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\${Product}.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\$(MSG_HOME_URL_TITLE).url"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\$(MSG_SUPPORT_URL_TITLE).url"
|
||||
RMDir /r /REBOOTOK "$SMPROGRAMS\$MUI_TEMP"
|
||||
|
||||
;Delete desktop shortcut
|
||||
Delete "$DESKTOP\${Product}.lnk"
|
||||
|
||||
;Delete registry
|
||||
DeleteRegKey /ifempty "${RegistryCat}" "${RegistryKey}"
|
||||
DeleteRegKey "${RegistryCat}" "${UninstallRegistryKey}"
|
||||
SectionEnd
|
||||
|
||||
;--------------------------------
|
||||
;Installer Functions
|
||||
|
||||
Function .onInit
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
FunctionEnd
|
||||
|
||||
;--------------------------------
|
||||
;Uninstaller Functions
|
||||
|
||||
Function un.onInit
|
||||
!insertmacro MUI_UNGETLANGUAGE
|
||||
FunctionEnd
|
||||
;--------------------------------
|
||||
;Include Modern UI
|
||||
!include "MUI2.nsh"
|
||||
|
||||
;--------------------------------
|
||||
;General
|
||||
!define Company "Nevrax"
|
||||
!define Product "Ryzom"
|
||||
!define Version "2.1.0"
|
||||
!define Patch "661"
|
||||
!define RegistryCat "HKLM"
|
||||
!define RegistryKey "Software\${Company}\${Product}"
|
||||
!define Executable "client_ryzom_rd.exe"
|
||||
!define DstDir "Output"
|
||||
!define SrcDir "Ryzom"
|
||||
!define Installer "ryzom_setup_${Patch}.exe"
|
||||
|
||||
;Registry key for uninstaller
|
||||
!define UninstallRegistryRoot "Software\Microsoft\Windows\CurrentVersion\Uninstall"
|
||||
!define UninstallRegistryKey "${UninstallRegistryRoot}\${Product}"
|
||||
|
||||
;Properly display all languages (Installer will not work on Windows 95, 98 or ME!)
|
||||
Unicode true
|
||||
|
||||
;New XP style
|
||||
XPStyle on
|
||||
|
||||
;Name and file
|
||||
Name "${Product}"
|
||||
OutFile "${DstDir}\${Installer}"
|
||||
|
||||
;Default installation folder
|
||||
InstallDir "$PROGRAMFILES\${Product}"
|
||||
|
||||
;Get installation folder from registry if available
|
||||
InstallDirRegKey "${RegistryCat}" "${RegistryKey}" "${Product} Install Path"
|
||||
|
||||
;Request application privileges for Windows Vista
|
||||
RequestExecutionLevel admin
|
||||
|
||||
;Best compression
|
||||
SetCompressor LZMA
|
||||
|
||||
; ???
|
||||
AllowSkipFiles on
|
||||
|
||||
;--------------------------------
|
||||
;Variables
|
||||
|
||||
;Will be used later
|
||||
Var MUI_TEMP
|
||||
Var STARTMENU_FOLDER
|
||||
|
||||
;--------------------------------
|
||||
;Interface Settings
|
||||
|
||||
!define MUI_ICON "${SrcDir}\ryzom.ico"
|
||||
!define MUI_UNICON "${SrcDir}\ryzom.ico"
|
||||
!define MUI_HEADERIMAGE
|
||||
!define MUI_HEADERIMAGE_BITMAP "modern-header.bmp" ; optional
|
||||
!define MUI_WELCOMEFINISHPAGE_BITMAP "modern-wizard.bmp"
|
||||
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "modern-wizard.bmp"
|
||||
!define MUI_ABORTWARNING
|
||||
|
||||
;Show all languages, despite user's codepage
|
||||
!define MUI_LANGDLL_ALLLANGUAGES
|
||||
|
||||
;--------------------------------
|
||||
;Language Selection Dialog Settings
|
||||
|
||||
;Remember the installer language
|
||||
!define MUI_LANGDLL_REGISTRY_ROOT "${RegistryCat}"
|
||||
!define MUI_LANGDLL_REGISTRY_KEY "${RegistryKey}"
|
||||
!define MUI_LANGDLL_REGISTRY_VALUENAME "Language"
|
||||
|
||||
;--------------------------------
|
||||
;Pages
|
||||
!insertmacro MUI_PAGE_WELCOME
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
|
||||
;Start Menu Folder Page Configuration
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${RegistryCat}"
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${RegistryKey}"
|
||||
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
|
||||
|
||||
!insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
|
||||
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
|
||||
!define MUI_FINISHPAGE_RUN "$INSTDIR\${Executable}"
|
||||
|
||||
!insertmacro MUI_PAGE_FINISH
|
||||
|
||||
!insertmacro MUI_UNPAGE_WELCOME
|
||||
!insertmacro MUI_UNPAGE_CONFIRM
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
!insertmacro MUI_UNPAGE_FINISH
|
||||
|
||||
;--------------------------------
|
||||
;Languages
|
||||
|
||||
!insertmacro MUI_LANGUAGE "English" ;first language is the default language
|
||||
!insertmacro MUI_LANGUAGE "French"
|
||||
!insertmacro MUI_LANGUAGE "German"
|
||||
;!insertmacro MUI_LANGUAGE "Spanish"
|
||||
|
||||
;--------------------------------
|
||||
;Reserve Files
|
||||
|
||||
;If you are using solid compression, files that are required before
|
||||
;the actual installation should be stored first in the data block,
|
||||
;because this will make your installer start faster.
|
||||
|
||||
!insertmacro MUI_RESERVEFILE_LANGDLL
|
||||
|
||||
;--------------------------------
|
||||
;Descriptions
|
||||
|
||||
;French
|
||||
LangString MSG_SUPPORT_URL_TITLE ${LANG_FRENCH} "Support"
|
||||
LangString MSG_SUPPORT_URL ${LANG_FRENCH} "http://app.ryzom.com/app_forum/index.php?page=topic/view/22047/1&post149889=fr#1"
|
||||
LangString MSG_HOME_URL_TITLE ${LANG_FRENCH} "${Product} sur le Web"
|
||||
LangString MSG_HOME_URL ${LANG_FRENCH} "http://ryzom.fr"
|
||||
LangString MSG_CONFIRM_DELETE_BACKUPS ${LANG_FRENCH} "Voulez-vous supprimer vos fichiers de sauvegarde ? Appuyer sur Oui pour effacer vos fichiers de sauvegarde."
|
||||
|
||||
;English
|
||||
LangString MSG_SUPPORT_URL_TITLE ${LANG_ENGLISH} "Support"
|
||||
LangString MSG_SUPPORT_URL ${LANG_ENGLISH} "http://app.ryzom.com/app_forum/index.php?page=topic/view/22047/1&post149889=en#1"
|
||||
LangString MSG_HOME_URL_TITLE ${LANG_ENGLISH} "${Product} on the Web"
|
||||
LangString MSG_HOME_URL ${LANG_ENGLISH} "http://ryzom.com"
|
||||
LangString MSG_CONFIRM_DELETE_BACKUPS ${LANG_ENGLISH} "Deleting Save Files? Click Yes to delete your own save files."
|
||||
|
||||
;German
|
||||
LangString MSG_SUPPORT_URL_TITLE ${LANG_GERMAN} "Support"
|
||||
LangString MSG_SUPPORT_URL ${LANG_GERMAN} "http://app.ryzom.com/app_forum/index.php?page=topic/view/22047/1&post149889=de#1"
|
||||
LangString MSG_HOME_URL_TITLE ${LANG_GERMAN} "${Product} im Internet"
|
||||
LangString MSG_HOME_URL ${LANG_GERMAN} "http://ryzom.de"
|
||||
LangString MSG_CONFIRM_DELETE_BACKUPS ${LANG_GERMAN} "Gespeicherte Dateien löschen? Klicke Ja um die eigenen Dateien zu löschen."
|
||||
|
||||
;--------------------------------
|
||||
;Installer Sections
|
||||
|
||||
!macro CreateInternetShortcut FILENAME URL ICONFILE
|
||||
WriteINIStr "${FILENAME}.url" "InternetShortcut" "URL" "${URL}"
|
||||
WriteINIStr "${FILENAME}.url" "InternetShortcut" "IconFile" "${ICONFILE}"
|
||||
WriteINIStr "${FILENAME}.url" "InternetShortcut" "IconIndex" "0"
|
||||
!macroend
|
||||
|
||||
; ----------------------------------------
|
||||
; Default section
|
||||
Section
|
||||
;Install for All Users
|
||||
SetShellVarContext all
|
||||
|
||||
;Game directories
|
||||
SetOutPath "$INSTDIR\cfg"
|
||||
File /r "${SrcDir}\cfg\*.*"
|
||||
|
||||
SetOutPath "$INSTDIR\data"
|
||||
File /r "${SrcDir}\data\*.*"
|
||||
|
||||
SetOutPath "$INSTDIR\examples"
|
||||
File /r "${SrcDir}\examples\*.*"
|
||||
|
||||
SetOutPath "$INSTDIR\user"
|
||||
File /r "${SrcDir}\user\*.*"
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
;Client, configuration and misc files
|
||||
File "${SrcDir}\client_default.cfg"
|
||||
File "${SrcDir}\${Executable}"
|
||||
File "${SrcDir}\configure.bat"
|
||||
File "${SrcDir}\d3dcompiler_43.dll"
|
||||
File "${SrcDir}\d3dx9_43.dll"
|
||||
File "${SrcDir}\fmod.dll"
|
||||
File "${SrcDir}\forum.url"
|
||||
File "${SrcDir}\launch.bat"
|
||||
File "${SrcDir}\msvcp100.dll"
|
||||
File "${SrcDir}\msvcr100.dll"
|
||||
File "${SrcDir}\nel_drv_direct3d_win_r.dll"
|
||||
File "${SrcDir}\nel_drv_fmod_win_r.dll"
|
||||
File "${SrcDir}\nel_drv_opengl_win_r.dll"
|
||||
File "${SrcDir}\ryzom.ico"
|
||||
File "${SrcDir}\ryzom.url"
|
||||
File "${SrcDir}\Ryzom6.ico"
|
||||
|
||||
;Create uninstaller
|
||||
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
||||
|
||||
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
||||
|
||||
;Create shortcuts in Start Menu
|
||||
CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
|
||||
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
|
||||
CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\${Product}.lnk" "$INSTDIR\${Executable}"
|
||||
|
||||
;Create URLs
|
||||
!insertmacro CreateInternetShortcut "$SMPROGRAMS\$STARTMENU_FOLDER\$(MSG_SUPPORT_URL_TITLE)" "$(MSG_SUPPORT_URL)" "$INSTDIR\ryzom.ico"
|
||||
!insertmacro CreateInternetShortcut "$SMPROGRAMS\$STARTMENU_FOLDER\$(MSG_HOME_URL_TITLE)" "$(MSG_HOME_URL)" "$INSTDIR\ryzom.ico"
|
||||
|
||||
!insertmacro MUI_STARTMENU_WRITE_END
|
||||
|
||||
;Shortcut on desktop
|
||||
CreateShortCut "$DESKTOP\${Product}.lnk" "$INSTDIR\${Executable}"
|
||||
|
||||
;Add/Remove Program entry
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "DisplayIcon" "$INSTDIR\${Executable},0"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "DisplayName" "${Product}"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "DisplayVersion" "${Version}"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "InstallLocation" "$INSTDIR"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "QuietUninstallString" '"$INSTDIR\Uninstall.exe" /S'
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "UninstallString" "$INSTDIR\Uninstall.exe"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "Publisher" "${Company}"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "HelpLink" "$(MSG_SUPPORT_URL)"
|
||||
WriteRegStr HKLM "${UninstallRegistryKey}" "URLInfoAbout" "$(MSG_HOME_URL)"
|
||||
|
||||
;Store installation folder
|
||||
WriteRegStr "${RegistryCat}" "${RegistryKey}" "${Product} Install Path" $INSTDIR
|
||||
SectionEnd
|
||||
|
||||
;--------------------------------
|
||||
;Uninstaller Section
|
||||
Section "Uninstall"
|
||||
;Install for All Users
|
||||
SetShellVarContext all
|
||||
|
||||
;Game directories
|
||||
RMDir /r "$INSTDIR\cfg"
|
||||
RMDir /r "$INSTDIR\data"
|
||||
RMDir /r "$INSTDIR\examples"
|
||||
|
||||
;Temporary directories
|
||||
RMDir /r "$INSTDIR\cache"
|
||||
RMDir /r "$INSTDIR\unpack"
|
||||
|
||||
;Client, configuration and misc files
|
||||
Delete "$INSTDIR\client_default.cfg"
|
||||
Delete "$INSTDIR\${Executable}"
|
||||
Delete "$INSTDIR\configure.bat"
|
||||
Delete "$INSTDIR\d3dcompiler_43.dll"
|
||||
Delete "$INSTDIR\d3dx9_43.dll"
|
||||
Delete "$INSTDIR\fmod.dll"
|
||||
Delete "$INSTDIR\forum.url"
|
||||
Delete "$INSTDIR\launch.bat"
|
||||
Delete "$INSTDIR\msvcp100.dll"
|
||||
Delete "$INSTDIR\msvcr100.dll"
|
||||
Delete "$INSTDIR\nel_drv_direct3d_win_r.dll"
|
||||
Delete "$INSTDIR\nel_drv_fmod_win_r.dll"
|
||||
Delete "$INSTDIR\nel_drv_opengl_win_r.dll"
|
||||
Delete "$INSTDIR\ryzom.ico"
|
||||
Delete "$INSTDIR\ryzom.url"
|
||||
Delete "$INSTDIR\Ryzom6.ico"
|
||||
|
||||
;Delete uninstaller
|
||||
Delete "$INSTDIR\Uninstall.exe"
|
||||
|
||||
MessageBox MB_YESNO "$(MSG_CONFIRM_DELETE_BACKUPS)" IDNO DontDeleteMiscFiles
|
||||
|
||||
;Delete directory
|
||||
RMDir /r "$INSTDIR"
|
||||
|
||||
DontDeleteMiscFiles:
|
||||
|
||||
;Delete directory if empty
|
||||
RMDir "$INSTDIR"
|
||||
|
||||
;Delete all shortcuts
|
||||
!insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
|
||||
|
||||
;Delete Start Menu shortcuts
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\${Product}.lnk"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\$(MSG_HOME_URL_TITLE).url"
|
||||
Delete "$SMPROGRAMS\$MUI_TEMP\$(MSG_SUPPORT_URL_TITLE).url"
|
||||
RMDir /r /REBOOTOK "$SMPROGRAMS\$MUI_TEMP"
|
||||
|
||||
;Delete desktop shortcut
|
||||
Delete "$DESKTOP\${Product}.lnk"
|
||||
|
||||
;Delete registry
|
||||
DeleteRegKey /ifempty "${RegistryCat}" "${RegistryKey}"
|
||||
DeleteRegKey "${RegistryCat}" "${UninstallRegistryKey}"
|
||||
SectionEnd
|
||||
|
||||
;--------------------------------
|
||||
;Installer Functions
|
||||
|
||||
Function .onInit
|
||||
!insertmacro MUI_LANGDLL_DISPLAY
|
||||
FunctionEnd
|
||||
|
||||
;--------------------------------
|
||||
;Uninstaller Functions
|
||||
|
||||
Function un.onInit
|
||||
!insertmacro MUI_UNGETLANGUAGE
|
||||
FunctionEnd
|
||||
|
@ -1,83 +0,0 @@
|
||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2010-2019 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef CL_CSS_BACKGROUND_H
|
||||
#define CL_CSS_BACKGROUND_H
|
||||
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/rgba.h"
|
||||
#include "nel/gui/css_types.h"
|
||||
#include "nel/gui/css_length.h"
|
||||
|
||||
namespace NLGUI
|
||||
{
|
||||
/**
|
||||
* \brief CSS background info
|
||||
* \date 2021-07-02 11:36 GMT
|
||||
* \author Meelis Mägi (Nimetu)
|
||||
*/
|
||||
class CSSBackground
|
||||
{
|
||||
public:
|
||||
CSSBackground()
|
||||
:color(NLMISC::CRGBA::Transparent),
|
||||
repeatX(CSS_VALUE_REPEAT), repeatY(CSS_VALUE_REPEAT), attachment(CSS_VALUE_SCROLL),
|
||||
xAnchor(CSS_VALUE_LEFT), yAnchor(CSS_VALUE_TOP),
|
||||
clip(CSS_VALUE_BORDER_BOX), origin(CSS_VALUE_PADDING_BOX), size(CSS_VALUE_AUTO)
|
||||
{}
|
||||
|
||||
void setImage(const std::string &value);
|
||||
void setPosition(const std::string &value);
|
||||
void setSize(const std::string &value);
|
||||
void setRepeat(const std::string &value);
|
||||
void setOrigin(const std::string &value);
|
||||
void setClip(const std::string &value);
|
||||
void setAttachment(const std::string &value);
|
||||
void setColor(const std::string &value);
|
||||
|
||||
public:
|
||||
// TODO: only final layer has color
|
||||
NLMISC::CRGBA color;
|
||||
std::string image;
|
||||
|
||||
CSSValueType repeatX;
|
||||
CSSValueType repeatY;
|
||||
CSSValueType attachment;
|
||||
|
||||
CSSValueType xAnchor;
|
||||
CSSValueType yAnchor;
|
||||
CSSLength xPosition;
|
||||
CSSLength yPosition;
|
||||
|
||||
CSSValueType clip;
|
||||
CSSValueType origin;
|
||||
|
||||
CSSValueType size;
|
||||
CSSLength width;
|
||||
CSSLength height;
|
||||
|
||||
private:
|
||||
void positionFromOne(const std::vector<std::string> &parts);
|
||||
void positionFromTwo(const std::vector<std::string> &parts);
|
||||
void positionFromThree(const std::vector<std::string> &parts);
|
||||
void positionFromFour(const std::vector<std::string> &parts);
|
||||
};
|
||||
|
||||
}//namespace
|
||||
|
||||
#endif // CL_CSS_BACKGROUND_H
|
||||
|
||||
|
@ -1,193 +0,0 @@
|
||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2010-2019 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
|
||||
#ifndef NL_CSS_BACKGROUND_RENDERER_H
|
||||
#define NL_CSS_BACKGROUND_RENDERER_H
|
||||
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/rgba.h"
|
||||
#include "nel/misc/geom_ext.h"
|
||||
#include "nel/gui/css_types.h"
|
||||
#include "nel/gui/css_background.h"
|
||||
|
||||
namespace NLGUI
|
||||
{
|
||||
class CInterfaceElement;
|
||||
|
||||
/**
|
||||
* \brief Border renderer for GUI classes
|
||||
* \date 2021-06-29 15:17 GMT
|
||||
* \author Meelis Mägi (Nimetu)
|
||||
*/
|
||||
class CSSBackgroundRenderer
|
||||
{
|
||||
public:
|
||||
// alpha value from parent
|
||||
uint8 CurrentAlpha;
|
||||
|
||||
// TODO: should be moved to CSSBackground
|
||||
sint32 TextureId;
|
||||
|
||||
public:
|
||||
CSSBackgroundRenderer();
|
||||
~CSSBackgroundRenderer();
|
||||
|
||||
// return true if no background is set
|
||||
bool isEmpty() const
|
||||
{
|
||||
return m_Background.image.empty() && m_Background.color.A == 0;
|
||||
}
|
||||
|
||||
void setModulateGlobalColor(bool m) { m_ModulateGlobalColor = m; }
|
||||
|
||||
void updateCoords();
|
||||
void invalidateCoords() { m_Dirty = true; }
|
||||
void invalidateContent() { m_Dirty = true; };
|
||||
|
||||
void clear();
|
||||
void setBackground(const CSSBackground &bg);
|
||||
|
||||
// helper function to change background image
|
||||
void setImage(const std::string &bgtex);
|
||||
void setImageRepeat(bool b);
|
||||
void setImageCover(bool b);
|
||||
|
||||
// helper function to change background color
|
||||
void setColor(const NLMISC::CRGBA &color)
|
||||
{
|
||||
m_Dirty = true;
|
||||
m_Background.color = color;
|
||||
}
|
||||
|
||||
NLMISC::CRGBA getColor() const
|
||||
{
|
||||
return m_Background.color;
|
||||
}
|
||||
|
||||
// override painting area to be at least the size of viewport (ie, <html> background)
|
||||
void setFillViewport(bool b) {
|
||||
m_Dirty = true;
|
||||
m_FillViewport = b;
|
||||
}
|
||||
|
||||
void setViewport(CInterfaceElement *root)
|
||||
{
|
||||
m_Dirty = true;
|
||||
m_Viewport = root;
|
||||
}
|
||||
|
||||
void setBorderArea(sint32 x, sint32 y, sint32 w, sint32 h)
|
||||
{
|
||||
m_Dirty = true;
|
||||
m_BorderX = x;
|
||||
m_BorderY = y;
|
||||
m_BorderW = w;
|
||||
m_BorderH = h;
|
||||
}
|
||||
|
||||
void setPaddingArea(sint32 x, sint32 y, sint32 w, sint32 h)
|
||||
{
|
||||
m_Dirty = true;
|
||||
m_PaddingX = x;
|
||||
m_PaddingY = y;
|
||||
m_PaddingW = w;
|
||||
m_PaddingH = h;
|
||||
}
|
||||
|
||||
void setContentArea(sint32 x, sint32 y, sint32 w, sint32 h)
|
||||
{
|
||||
m_Dirty = true;
|
||||
m_ContentX = x;
|
||||
m_ContentY = y;
|
||||
m_ContentW = w;
|
||||
m_ContentH = h;
|
||||
}
|
||||
|
||||
// sizes for em, rem units
|
||||
void setFontSize(float rootFontSize, float fontSize)
|
||||
{
|
||||
m_Dirty = true;
|
||||
m_RootFontSize = rootFontSize;
|
||||
m_FontSize = fontSize;
|
||||
}
|
||||
|
||||
void draw();
|
||||
|
||||
private:
|
||||
sint32 m_BorderX, m_BorderY, m_BorderW, m_BorderH;
|
||||
sint32 m_PaddingX, m_PaddingY, m_PaddingW, m_PaddingH;
|
||||
sint32 m_ContentX, m_ContentY, m_ContentW, m_ContentH;
|
||||
|
||||
// font size for 'rem'
|
||||
float m_RootFontSize;
|
||||
|
||||
// font size for 'em'
|
||||
float m_FontSize;
|
||||
|
||||
// viewport element for vw,wh,vmin,vmax
|
||||
CInterfaceElement* m_Viewport;
|
||||
|
||||
struct SDrawQueue
|
||||
{
|
||||
sint32 TextureId;
|
||||
NLMISC::CQuadUV Quad;
|
||||
NLMISC::CRGBA Color;
|
||||
};
|
||||
std::vector<SDrawQueue> m_DrawQueue;
|
||||
|
||||
const sint8 m_RenderLayer;
|
||||
bool m_ModulateGlobalColor;
|
||||
// if true, painting area returns area at least the size of viewport (ie, <html> background)
|
||||
bool m_FillViewport;
|
||||
|
||||
// if true, then updateCoords() is called from draw()
|
||||
bool m_Dirty;
|
||||
|
||||
CSSBackground m_Background;
|
||||
|
||||
// get clip area based on background-clip
|
||||
void getPaintingArea(const CSSBackground &bg, sint32 &areaX, sint32 &areaY, sint32 &areaW, sint32 &areaH) const;
|
||||
|
||||
// get positioning area based on background-origin
|
||||
void getPositioningArea(const CSSBackground &bg, sint32 &areaX, sint32 &areaY, sint32 &areaW, sint32 &areaH) const;
|
||||
|
||||
// calculate image size based on background-size
|
||||
void calculateSize(const CSSBackground &bg, sint32 &texW, sint32 &texH) const;
|
||||
|
||||
// calculate image position based on background-position
|
||||
void calculatePosition(const CSSBackground &bg, sint32 &texX, sint32 &texY, sint32 &texW, sint32 &texH) const;
|
||||
|
||||
// calculate image tile position, size, count, and spacing based on background-repeat
|
||||
void calculateTiles(const CSSBackground &bg, sint32 &texX, sint32 &texY, sint32 &texW, sint32 &texH, sint32 &tilesX, sint32 &tilesY, sint32 &spacingX, sint32 &spacingY) const;
|
||||
|
||||
// position, size, and count for first tile to cover an area
|
||||
void getImageTile(sint32 &tilePos, sint32 &tileSize, sint32 &spacing, sint32 &tiles, sint32 areaPos, sint32 areaSize, CSSValueType repeat) const;
|
||||
|
||||
// push background color to draw queue
|
||||
void buildColorQuads(const CSSBackground &bg);
|
||||
|
||||
// push background image to draw quque
|
||||
void buildImageQuads(const CSSBackground &bg, sint32 textureId);
|
||||
|
||||
}; // CSSBackgroundRenderer
|
||||
|
||||
}//namespace
|
||||
|
||||
#endif // NL_CSS_BACKGROUND_RENDERER_H
|
||||
|
||||
|
@ -1,72 +0,0 @@
|
||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2010-2019 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef CL_CSS_BORDER_H
|
||||
#define CL_CSS_BORDER_H
|
||||
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/misc/rgba.h"
|
||||
#include "nel/gui/css_types.h"
|
||||
#include "nel/gui/css_length.h"
|
||||
|
||||
namespace NLGUI
|
||||
{
|
||||
/**
|
||||
* \brief CSS border info
|
||||
* \date 2021-07-23 09:51 GMT
|
||||
* \author Meelis Mägi (Nimetu)
|
||||
*/
|
||||
class CSSBorder
|
||||
{
|
||||
public:
|
||||
CSSBorder()
|
||||
{
|
||||
reset();
|
||||
}
|
||||
|
||||
CSSBorder(uint width, CSSLineStyle style, NLMISC::CRGBA color)
|
||||
{
|
||||
set(width, style, color);
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
set(CSS_LINE_WIDTH_MEDIUM, CSS_LINE_STYLE_NONE, NLMISC::CRGBA::Transparent);
|
||||
}
|
||||
|
||||
void set(uint width, CSSLineStyle style, NLMISC::CRGBA color)
|
||||
{
|
||||
Width.setFloatValue(width, "px");
|
||||
Style = style;
|
||||
Color = color;
|
||||
}
|
||||
|
||||
bool empty() const
|
||||
{
|
||||
return Style == CSS_LINE_STYLE_NONE || Style == CSS_LINE_STYLE_HIDDEN
|
||||
|| Width.getFloat() == 0;
|
||||
}
|
||||
|
||||
CSSLength Width;
|
||||
CSSLineStyle Style;
|
||||
NLMISC::CRGBA Color;
|
||||
};
|
||||
|
||||
}//namespace
|
||||
|
||||
#endif // CL_CSS_BORDER_H
|
||||
|
||||
|
@ -1,76 +0,0 @@
|
||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2010-2021 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#ifndef CL_CSS_LENGTH_H
|
||||
#define CL_CSS_LENGTH_H
|
||||
|
||||
#include "nel/misc/types_nl.h"
|
||||
#include "nel/gui/css_types.h"
|
||||
|
||||
namespace NLGUI
|
||||
{
|
||||
/**
|
||||
* \brief CSS types used in GUI classes
|
||||
* \date 2021-07-02 11:36 GMT
|
||||
* \author Meelis Mägi (Nimetu)
|
||||
*/
|
||||
|
||||
class CSSLength
|
||||
{
|
||||
public:
|
||||
enum Kind {
|
||||
Auto, Relative, Fixed
|
||||
};
|
||||
|
||||
CSSLength(float value = 0, CSSUnitType unit = CSS_UNIT_NONE, Kind kind = Auto)
|
||||
: m_Value(value), m_Unit(unit), m_Kind(Auto)
|
||||
{}
|
||||
|
||||
void setAuto() { m_Kind = Auto; }
|
||||
bool parseValue(const std::string &value, bool allowPercent = true, bool allowNegative = false);
|
||||
void setFloatValue(float f, const std::string &unit);
|
||||
|
||||
float getValue() const;
|
||||
float getFloat() const { return m_Value; }
|
||||
|
||||
bool isPercent() const { return m_Unit == CSS_UNIT_PERCENT; }
|
||||
|
||||
bool isAuto() const { return m_Kind == Auto; }
|
||||
bool isRelative() const { return m_Kind == Relative; }
|
||||
|
||||
// % uses relValue
|
||||
// em uses emSize
|
||||
// rem uses remSize
|
||||
// vw,vh,vi,vb,vmin,vmax uses vwSize/vhSize
|
||||
float calculate(uint32 relValue, uint32 emSize, uint32 remSize, uint32 vwSize, uint32 whSize) const;
|
||||
|
||||
CSSUnitType getUnit() const { return m_Unit; }
|
||||
|
||||
std::string toString() const;
|
||||
|
||||
private:
|
||||
void setUnit(const std::string &unit);
|
||||
|
||||
float m_Value;
|
||||
CSSUnitType m_Unit;
|
||||
Kind m_Kind;
|
||||
};
|
||||
|
||||
}//namespace
|
||||
|
||||
#endif // CL_CSS_LENGTH_H
|
||||
|
||||
|
@ -1,427 +0,0 @@
|
||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2010-2021 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "stdpch.h"
|
||||
|
||||
#include <string>
|
||||
#include "nel/gui/libwww.h"
|
||||
#include "nel/gui/css_length.h"
|
||||
#include "nel/gui/css_background.h"
|
||||
|
||||
using namespace NLMISC;
|
||||
|
||||
#ifdef DEBUG_NEW
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
|
||||
namespace NLGUI
|
||||
{
|
||||
|
||||
void CSSBackground::setImage(const std::string &value)
|
||||
{
|
||||
image = value;
|
||||
}
|
||||
|
||||
void CSSBackground::setPosition(const std::string &value)
|
||||
{
|
||||
std::vector<std::string> parts;
|
||||
splitString(toLowerAscii(value), " ", parts);
|
||||
|
||||
if (parts.empty() || parts.size() > 4)
|
||||
return;
|
||||
|
||||
switch(parts.size())
|
||||
{
|
||||
case 1:
|
||||
positionFromOne(parts);
|
||||
break;
|
||||
case 2:
|
||||
positionFromTwo(parts);
|
||||
break;
|
||||
case 3:
|
||||
positionFromThree(parts);
|
||||
break;
|
||||
case 4:
|
||||
positionFromFour(parts);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void CSSBackground::setSize(const std::string &value)
|
||||
{
|
||||
std::vector<std::string> parts;
|
||||
splitString(toLowerAscii(value), " ", parts);
|
||||
if (parts.size() > 2)
|
||||
return;
|
||||
|
||||
if (parts.size() == 1 && (parts[0] == "cover" || parts[0] == "contain"))
|
||||
{
|
||||
if (parts[0] == "cover")
|
||||
size = CSS_VALUE_COVER;
|
||||
else
|
||||
size = CSS_VALUE_CONTAIN;
|
||||
|
||||
width.setAuto();
|
||||
height.setAuto();
|
||||
return;
|
||||
}
|
||||
|
||||
// height will default to 'auto' if not set
|
||||
if (parts.size() == 1)
|
||||
parts.push_back("auto");
|
||||
|
||||
if (parts[0] == "auto" && parts[1] == "auto")
|
||||
{
|
||||
size = CSS_VALUE_AUTO;
|
||||
width.setAuto();
|
||||
height.setAuto();
|
||||
return;
|
||||
}
|
||||
|
||||
CSSLength newW, newH;
|
||||
bool success = true;
|
||||
if (parts[0] == "auto")
|
||||
{
|
||||
newW.setAuto();
|
||||
}
|
||||
else
|
||||
{
|
||||
float fval;
|
||||
std::string unit;
|
||||
if (!getCssLength(fval, unit, parts[0]))
|
||||
{
|
||||
nlwarning("Failed to parse background-size[0] '%s'", parts[0].c_str());
|
||||
return;
|
||||
}
|
||||
newW.setFloatValue(fval, unit);
|
||||
}
|
||||
|
||||
if (parts[1] == "auto")
|
||||
{
|
||||
newH.setAuto();
|
||||
}
|
||||
else
|
||||
{
|
||||
float fval;
|
||||
std::string unit;
|
||||
if (!getCssLength(fval, unit, parts[1]))
|
||||
{
|
||||
nlwarning("Failed to parse background-size[1] '%s'", parts[1].c_str());
|
||||
return;
|
||||
}
|
||||
newH.setFloatValue(fval, unit);
|
||||
}
|
||||
|
||||
size = CSS_VALUE_LENGTH;
|
||||
width = newW;
|
||||
height = newH;
|
||||
}
|
||||
|
||||
void CSSBackground::setRepeat(const std::string &value)
|
||||
{
|
||||
std::vector<std::string> parts;
|
||||
splitString(toLowerAscii(value), " ", parts);
|
||||
if (parts.size() == 0 || parts.size() > 2)
|
||||
return;
|
||||
|
||||
if (parts.size() == 1)
|
||||
{
|
||||
if (parts[0] == "repeat-x")
|
||||
parts.push_back("no-repeat");
|
||||
else if (parts[0] == "repeat-y")
|
||||
parts.insert(parts.begin(), "no-repeat");
|
||||
else //repeat, space, round, no-repeat
|
||||
parts.push_back(parts[0]);
|
||||
}
|
||||
|
||||
|
||||
if (parts[0] == "repeat") repeatX = CSS_VALUE_REPEAT;
|
||||
else if (parts[0] == "no-repeat") repeatX = CSS_VALUE_NOREPEAT;
|
||||
else if (parts[0] == "space") repeatX = CSS_VALUE_SPACE;
|
||||
else if (parts[0] == "round") repeatX = CSS_VALUE_ROUND;
|
||||
else repeatX = CSS_VALUE_REPEAT;
|
||||
|
||||
if (parts[1] == "repeat") repeatY = CSS_VALUE_REPEAT;
|
||||
else if (parts[1] == "no-repeat") repeatY = CSS_VALUE_NOREPEAT;
|
||||
else if (parts[1] == "space") repeatY = CSS_VALUE_SPACE;
|
||||
else if (parts[1] == "round") repeatY = CSS_VALUE_ROUND;
|
||||
else repeatY = CSS_VALUE_REPEAT;
|
||||
}
|
||||
|
||||
void CSSBackground::setOrigin(const std::string &value)
|
||||
{
|
||||
if (value == "border-box") origin = CSS_VALUE_BORDER_BOX;
|
||||
else if (value == "padding-box") origin = CSS_VALUE_PADDING_BOX;
|
||||
else if (value == "content-box") origin = CSS_VALUE_CONTENT_BOX;
|
||||
else origin = CSS_VALUE_PADDING_BOX;
|
||||
}
|
||||
|
||||
void CSSBackground::setClip(const std::string &value)
|
||||
{
|
||||
if (value == "border-box") clip = CSS_VALUE_BORDER_BOX;
|
||||
else if (value == "padding-box") clip = CSS_VALUE_PADDING_BOX;
|
||||
else if (value == "content-box") clip = CSS_VALUE_CONTENT_BOX;
|
||||
//else if (value == "text") clip = CSSValueType::Text;
|
||||
else clip = CSS_VALUE_PADDING_BOX;
|
||||
}
|
||||
|
||||
void CSSBackground::setAttachment(const std::string &value)
|
||||
{
|
||||
if (value == "fixed") attachment = CSS_VALUE_FIXED;
|
||||
else if (value == "local") attachment = CSS_VALUE_LOCAL;
|
||||
else if (value == "scroll") attachment = CSS_VALUE_SCROLL;
|
||||
else attachment = CSS_VALUE_SCROLL;
|
||||
}
|
||||
|
||||
void CSSBackground::setColor(const std::string &value)
|
||||
{
|
||||
NLMISC::CRGBA tmp;
|
||||
if (scanHTMLColor(value.c_str(), tmp))
|
||||
color = tmp;
|
||||
}
|
||||
|
||||
static bool isHorizontalKeyword(const std::string &val)
|
||||
{
|
||||
return val == "left" || val == "right";
|
||||
}
|
||||
|
||||
static bool isVerticalKeyword(const std::string &val)
|
||||
{
|
||||
return val == "top" || val == "bottom";
|
||||
}
|
||||
|
||||
void CSSBackground::positionFromOne(const std::vector<std::string> &parts)
|
||||
{
|
||||
CSSValueType newH = CSS_VALUE_LEFT;
|
||||
CSSValueType newV = CSS_VALUE_TOP;
|
||||
CSSLength newX, newY;
|
||||
newX.setFloatValue(0, "%");
|
||||
newY.setFloatValue(0, "%");
|
||||
|
||||
uint index = 0;
|
||||
float fval;
|
||||
std::string unit;
|
||||
if (isHorizontalKeyword(parts[index]))
|
||||
{
|
||||
newH = parts[index] == "left" ? CSS_VALUE_LEFT : CSS_VALUE_RIGHT;
|
||||
newV = CSS_VALUE_CENTER;
|
||||
}
|
||||
else if (isVerticalKeyword(parts[index]))
|
||||
{
|
||||
newH = CSS_VALUE_CENTER;
|
||||
newV = parts[index] == "top" ? CSS_VALUE_TOP : CSS_VALUE_BOTTOM;
|
||||
}
|
||||
else if (parts[index] == "center")
|
||||
{
|
||||
newH = CSS_VALUE_CENTER;
|
||||
newV = CSS_VALUE_CENTER;
|
||||
}
|
||||
else if (getCssLength(fval, unit, parts[index], true))
|
||||
{
|
||||
newX.setFloatValue(fval, unit);
|
||||
newV = CSS_VALUE_CENTER;
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
xAnchor = newH;
|
||||
yAnchor = newV;
|
||||
xPosition = newX;
|
||||
yPosition = newY;
|
||||
}
|
||||
|
||||
void CSSBackground::positionFromTwo(const std::vector<std::string> &parts)
|
||||
{
|
||||
CSSValueType newH = CSS_VALUE_LEFT;
|
||||
CSSValueType newV = CSS_VALUE_TOP;
|
||||
CSSLength newX, newY;
|
||||
newX.setFloatValue(0, "%");
|
||||
newY.setFloatValue(0, "%");
|
||||
|
||||
float fval;
|
||||
std::string unit;
|
||||
uint index = 0;
|
||||
bool hasCenter = false;
|
||||
bool hasX = false;
|
||||
bool hasY = false;
|
||||
for (uint index = 0; index < parts.size(); index++)
|
||||
{
|
||||
if (parts[index] == "center")
|
||||
{
|
||||
hasCenter = true;
|
||||
}
|
||||
else if (isHorizontalKeyword(parts[index]))
|
||||
{
|
||||
if (hasX) return;
|
||||
hasX = true;
|
||||
newH = parts[index] == "left" ? CSS_VALUE_LEFT : CSS_VALUE_RIGHT;
|
||||
}
|
||||
else if (isVerticalKeyword(parts[index]))
|
||||
{
|
||||
if (hasY) return;
|
||||
hasY = true;
|
||||
newV = parts[index] == "top" ? CSS_VALUE_TOP : CSS_VALUE_BOTTOM;
|
||||
}
|
||||
else if (getCssLength(fval, unit, parts[index], true))
|
||||
{
|
||||
// invalid: 'top 50%';
|
||||
if (hasY) return;
|
||||
if (!hasX)
|
||||
{
|
||||
hasX = true;
|
||||
newX.setFloatValue(fval, unit);
|
||||
}
|
||||
else
|
||||
{
|
||||
hasY = true;
|
||||
newY.setFloatValue(fval, unit);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasCenter)
|
||||
{
|
||||
if (!hasX)
|
||||
newH = CSS_VALUE_CENTER;
|
||||
if (!hasY)
|
||||
newV = CSS_VALUE_CENTER;
|
||||
}
|
||||
|
||||
xAnchor = newH;
|
||||
yAnchor = newV;
|
||||
xPosition = newX;
|
||||
yPosition = newY;
|
||||
}
|
||||
|
||||
void CSSBackground::positionFromThree(const std::vector<std::string> &parts)
|
||||
{
|
||||
CSSValueType newH = CSS_VALUE_LEFT;
|
||||
CSSValueType newV = CSS_VALUE_TOP;
|
||||
CSSLength newX, newY;
|
||||
newX.setFloatValue(0, "%");
|
||||
newY.setFloatValue(0, "%");
|
||||
|
||||
float fval;
|
||||
std::string unit;
|
||||
bool hasCenter = false;
|
||||
bool hasX = false;
|
||||
bool hasY = false;
|
||||
for(uint index = 0; index < 3; index++)
|
||||
{
|
||||
if (parts[index] == "center")
|
||||
{
|
||||
if (hasCenter) return;
|
||||
hasCenter = true;
|
||||
}
|
||||
else if (isHorizontalKeyword(parts[index]))
|
||||
{
|
||||
if (hasX) return;
|
||||
hasX = true;
|
||||
newH = parts[index] == "left" ? CSS_VALUE_LEFT : CSS_VALUE_RIGHT;
|
||||
if ((index+1) < parts.size() && getCssLength(fval, unit, parts[index+1], true))
|
||||
{
|
||||
newX.setFloatValue(fval, unit);
|
||||
index++;
|
||||
}
|
||||
}
|
||||
else if (isVerticalKeyword(parts[index]))
|
||||
{
|
||||
if (hasY) return;
|
||||
hasY = true;
|
||||
newV = parts[index] == "top" ? CSS_VALUE_TOP : CSS_VALUE_BOTTOM;
|
||||
if ((index+1) < parts.size() && getCssLength(fval, unit, parts[index+1], true))
|
||||
{
|
||||
newY.setFloatValue(fval, unit);
|
||||
index++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (hasCenter)
|
||||
{
|
||||
if (hasX && hasY)
|
||||
return;
|
||||
|
||||
if (!hasX)
|
||||
newH = CSS_VALUE_CENTER;
|
||||
else
|
||||
newV = CSS_VALUE_CENTER;
|
||||
}
|
||||
|
||||
xAnchor = newH;
|
||||
yAnchor = newV;
|
||||
xPosition = newX;
|
||||
yPosition = newY;
|
||||
}
|
||||
|
||||
void CSSBackground::positionFromFour(const std::vector<std::string> &parts)
|
||||
{
|
||||
CSSValueType newH = CSS_VALUE_LEFT;
|
||||
CSSValueType newV = CSS_VALUE_TOP;
|
||||
CSSLength newX, newY;
|
||||
newX.setFloatValue(0, "%");
|
||||
newY.setFloatValue(0, "%");
|
||||
|
||||
float fval;
|
||||
std::string unit;
|
||||
bool hasX = false;
|
||||
bool hasY = false;
|
||||
for(uint index = 0; index<4; index+=2)
|
||||
{
|
||||
if (parts[index] == "center")
|
||||
return;
|
||||
|
||||
if (isHorizontalKeyword(parts[index]))
|
||||
{
|
||||
if (hasX) return;
|
||||
hasX = true;
|
||||
if (!getCssLength(fval, unit, parts[index+1], true)) return;
|
||||
newH = parts[index] == "left" ? CSS_VALUE_LEFT : CSS_VALUE_RIGHT;
|
||||
newX.setFloatValue(fval, unit);
|
||||
}
|
||||
else if (isVerticalKeyword(parts[index]))
|
||||
{
|
||||
if (hasY) return;
|
||||
hasY = true;
|
||||
if (!getCssLength(fval, unit, parts[index+1], true)) return;
|
||||
newV = parts[index] == "top" ? CSS_VALUE_TOP : CSS_VALUE_BOTTOM;
|
||||
newY.setFloatValue(fval, unit);
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
xAnchor = newH;
|
||||
yAnchor = newV;
|
||||
xPosition = newX;
|
||||
yPosition = newY;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
@ -1,597 +0,0 @@
|
||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2010-2019 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
#include "stdpch.h"
|
||||
#include "nel/gui/css_background_renderer.h"
|
||||
#include "nel/gui/css_border_renderer.h"
|
||||
#include "nel/gui/view_renderer.h"
|
||||
#include "nel/gui/widget_manager.h"
|
||||
#include "nel/gui/view_bitmap.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace NLMISC;
|
||||
|
||||
#ifdef DEBUG_NEW
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
|
||||
namespace NLGUI
|
||||
{
|
||||
// ----------------------------------------------------------------------------
|
||||
CSSBackgroundRenderer::CSSBackgroundRenderer()
|
||||
: CurrentAlpha(255), TextureId(-1),
|
||||
m_BorderX(0), m_BorderY(0), m_BorderW(0), m_BorderH(0),
|
||||
m_PaddingX(0), m_PaddingY(0), m_PaddingW(0), m_PaddingH(0),
|
||||
m_ContentX(0), m_ContentY(0), m_ContentW(0), m_ContentH(0),
|
||||
m_RootFontSize(16.f), m_FontSize(16.f), m_Viewport(NULL),
|
||||
m_RenderLayer(0), m_ModulateGlobalColor(false), m_FillViewport(false),
|
||||
m_Dirty(false)
|
||||
{
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
CSSBackgroundRenderer::~CSSBackgroundRenderer()
|
||||
{
|
||||
if (TextureId != -1)
|
||||
CViewRenderer::getInstance()->deleteTexture(TextureId);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::clear()
|
||||
{
|
||||
m_Dirty = true;
|
||||
|
||||
if (TextureId != -1)
|
||||
CViewRenderer::getInstance()->deleteTexture(TextureId);
|
||||
|
||||
TextureId = -1;
|
||||
m_Background.image.clear();
|
||||
m_Background.color.A = 0;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::setBackground(const CSSBackground &bg)
|
||||
{
|
||||
m_Dirty = true;
|
||||
// TODO: CSSBackground should keep track of TextureId
|
||||
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
||||
if (bg.image != m_Background.image && TextureId != -1)
|
||||
rVR.deleteTexture(TextureId);
|
||||
|
||||
m_Background = bg;
|
||||
// TODO: does not accept urls
|
||||
if (TextureId == -1 && !bg.image.empty())
|
||||
{
|
||||
// TODO: make CViewRenderer accept urls
|
||||
if (bg.image.find("://") != std::string::npos)
|
||||
TextureId = rVR.createTexture(bg.image, 0, 0, -1, -1, false);
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::setImage(const std::string &bgtex)
|
||||
{
|
||||
m_Dirty = true;
|
||||
// TODO: CSSBackground should keep track of TextureId
|
||||
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
||||
if (bgtex != m_Background.image && TextureId != -1)
|
||||
{
|
||||
rVR.deleteTexture(TextureId);
|
||||
TextureId = -1;
|
||||
}
|
||||
m_Background.image = bgtex;
|
||||
|
||||
if (TextureId == -1 && !bgtex.empty())
|
||||
{
|
||||
// TODO: make CViewRenderer accept urls
|
||||
if (bgtex.find("://") != std::string::npos)
|
||||
TextureId = rVR.createTexture(bgtex, 0, 0, -1, -1, false);
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::setImageRepeat(bool b)
|
||||
{
|
||||
m_Background.repeatX = b ? CSS_VALUE_REPEAT : CSS_VALUE_NOREPEAT;
|
||||
m_Background.repeatY = b ? CSS_VALUE_REPEAT : CSS_VALUE_NOREPEAT;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::setImageCover(bool b)
|
||||
{
|
||||
m_Background.size = b ? CSS_VALUE_COVER : CSS_VALUE_AUTO;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::updateCoords()
|
||||
{
|
||||
m_Dirty = false;
|
||||
m_DrawQueue.clear();
|
||||
|
||||
// TODO: color from last background layer
|
||||
buildColorQuads(m_Background);
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
// background-image
|
||||
buildImageQuads(m_Background, TextureId);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::draw() {
|
||||
if (m_Dirty) updateCoords();
|
||||
if (m_DrawQueue.empty()) return;
|
||||
|
||||
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
||||
|
||||
// flush draw cache to ensure correct draw order
|
||||
rVR.flush();
|
||||
|
||||
// TODO: no need for widget manager, if global color is set from parent
|
||||
CRGBA globalColor;
|
||||
if (m_ModulateGlobalColor)
|
||||
globalColor = CWidgetManager::getInstance()->getGlobalColor();
|
||||
|
||||
// TODO: there might be issue on draw order IF using multiple textures
|
||||
// and second (top) texture is created before first one.
|
||||
for(uint i = 0; i < m_DrawQueue.size(); ++i)
|
||||
{
|
||||
CRGBA color = m_DrawQueue[i].Color;
|
||||
if (m_ModulateGlobalColor)
|
||||
color.modulateFromColor (color, globalColor);
|
||||
|
||||
color.A = (uint8) (((uint16) CurrentAlpha * (uint16) color.A) >> 8);
|
||||
rVR.drawQuad(m_RenderLayer, m_DrawQueue[i].Quad, m_DrawQueue[i].TextureId, color, false);
|
||||
}
|
||||
|
||||
// flush draw cache to ensure correct draw order
|
||||
rVR.flush();
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::getPositioningArea(const CSSBackground &bg, sint32 &areaX, sint32 &areaY, sint32 &areaW, sint32 &areaH) const
|
||||
{
|
||||
switch(bg.origin)
|
||||
{
|
||||
case CSS_VALUE_PADDING_BOX:
|
||||
areaX = m_PaddingX;
|
||||
areaY = m_PaddingY;
|
||||
areaW = m_PaddingW;
|
||||
areaH = m_PaddingH;
|
||||
break;
|
||||
case CSS_VALUE_CONTENT_BOX:
|
||||
areaX = m_ContentX;
|
||||
areaY = m_ContentY;
|
||||
areaW = m_ContentW;
|
||||
areaH = m_ContentH;
|
||||
break;
|
||||
case CSS_VALUE_BORDER_BOX:
|
||||
// fall thru
|
||||
default:
|
||||
areaX = m_BorderX;
|
||||
areaY = m_BorderY;
|
||||
areaW = m_BorderW;
|
||||
areaH = m_BorderH;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::getPaintingArea(const CSSBackground &bg, sint32 &areaX, sint32 &areaY, sint32 &areaW, sint32 &areaH) const
|
||||
{
|
||||
switch(bg.clip)
|
||||
{
|
||||
case CSS_VALUE_PADDING_BOX:
|
||||
areaX = m_PaddingX;
|
||||
areaY = m_PaddingY;
|
||||
areaW = m_PaddingW;
|
||||
areaH = m_PaddingH;
|
||||
break;
|
||||
case CSS_VALUE_CONTENT_BOX:
|
||||
areaX = m_ContentX;
|
||||
areaY = m_ContentY;
|
||||
areaW = m_ContentW;
|
||||
areaH = m_ContentH;
|
||||
break;
|
||||
case CSS_VALUE_BORDER_BOX:
|
||||
// fall thru
|
||||
default:
|
||||
areaX = m_BorderX;
|
||||
areaY = m_BorderY;
|
||||
areaW = m_BorderW;
|
||||
areaH = m_BorderH;
|
||||
break;
|
||||
}
|
||||
|
||||
if (m_FillViewport && m_Viewport)
|
||||
{
|
||||
sint32 newX = std::min(areaX, m_Viewport->getXReal());
|
||||
sint32 newY = std::min(areaY, m_Viewport->getYReal());
|
||||
areaW = std::max(areaX + areaW, m_Viewport->getXReal() + m_Viewport->getWReal()) - newX;
|
||||
areaH = std::max(areaY + areaH, m_Viewport->getYReal() + m_Viewport->getHReal()) - newY;
|
||||
areaX = newX;
|
||||
areaY = newY;
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::calculateSize(const CSSBackground &bg, sint32 &texW, sint32 &texH) const
|
||||
{
|
||||
sint32 areaX, areaY, areaW, areaH;
|
||||
getPositioningArea(bg, areaX, areaY, areaW, areaH);
|
||||
|
||||
sint32 vpW=0;
|
||||
sint32 vpH=0;
|
||||
if (m_Viewport)
|
||||
{
|
||||
vpW = m_Viewport->getWReal();
|
||||
vpH = m_Viewport->getHReal();
|
||||
}
|
||||
|
||||
float whRatio = (float)texW / (float)texH;
|
||||
switch(bg.size)
|
||||
{
|
||||
case CSS_VALUE_LENGTH:
|
||||
{
|
||||
if (bg.width.isAuto() && bg.height.isAuto())
|
||||
{
|
||||
// no-op
|
||||
}
|
||||
else if (bg.width.isAuto())
|
||||
{
|
||||
texH = bg.height.calculate(areaH, m_FontSize, m_RootFontSize, vpW, vpH);
|
||||
texW = texH * whRatio;
|
||||
}
|
||||
else if (bg.height.isAuto())
|
||||
{
|
||||
// calculate Height
|
||||
texW = bg.width.calculate(areaW, m_FontSize, m_RootFontSize, vpW, vpH);
|
||||
texH = texW / whRatio;
|
||||
}
|
||||
else
|
||||
{
|
||||
texW = bg.width.calculate(areaW, m_FontSize, m_RootFontSize, vpW, vpH);
|
||||
texH = bg.height.calculate(areaH, m_FontSize, m_RootFontSize, vpW, vpH);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CSS_VALUE_AUTO:
|
||||
{
|
||||
// no-op
|
||||
break;
|
||||
}
|
||||
case CSS_VALUE_COVER:
|
||||
{
|
||||
float canvasRatio = (float)areaW / (float)areaH;
|
||||
if (whRatio < canvasRatio)
|
||||
{
|
||||
texW = areaW;
|
||||
texH = areaW / whRatio;
|
||||
} else {
|
||||
texW = areaH * whRatio;
|
||||
texH = areaH;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CSS_VALUE_CONTAIN:
|
||||
{
|
||||
// same as covert, but ratio check is reversed
|
||||
float canvasRatio = (float)areaW / (float)areaH;
|
||||
if (whRatio > canvasRatio)
|
||||
{
|
||||
texW = areaW;
|
||||
texH = areaW / whRatio;
|
||||
} else {
|
||||
texW = areaH * whRatio;
|
||||
texH = areaH;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::calculatePosition(const CSSBackground &bg, sint32 &texX, sint32 &texY, sint32 &texW, sint32 &texH) const
|
||||
{
|
||||
sint32 areaX, areaY, areaW, areaH;
|
||||
getPositioningArea(bg, areaX, areaY, areaW, areaH);
|
||||
|
||||
sint32 vpW=0;
|
||||
sint32 vpH=0;
|
||||
if (m_Viewport)
|
||||
{
|
||||
vpW = m_Viewport->getWReal();
|
||||
vpH = m_Viewport->getHReal();
|
||||
}
|
||||
|
||||
float ofsX = bg.xPosition.calculate(1, m_FontSize, m_RootFontSize, vpW, vpH);
|
||||
float ofsY = bg.yPosition.calculate(1, m_FontSize, m_RootFontSize, vpW, vpH);
|
||||
|
||||
if (bg.xPosition.isPercent() || bg.xAnchor == CSS_VALUE_CENTER)
|
||||
{
|
||||
if (bg.xAnchor == CSS_VALUE_RIGHT)
|
||||
ofsX = 1.f - ofsX;
|
||||
else if (bg.xAnchor == CSS_VALUE_CENTER)
|
||||
ofsX = 0.5f;
|
||||
|
||||
ofsX = (float)(areaW - texW) * ofsX;
|
||||
}
|
||||
else if (bg.xAnchor == CSS_VALUE_RIGHT)
|
||||
{
|
||||
ofsX = areaW - texW - ofsX;
|
||||
}
|
||||
|
||||
// areaY is bottom edge, areaY+areaH is top edge
|
||||
if (bg.yPosition.isPercent() || bg.yAnchor == CSS_VALUE_CENTER)
|
||||
{
|
||||
if (bg.yAnchor == CSS_VALUE_TOP)
|
||||
ofsY = 1.f - ofsY;
|
||||
else if (bg.yAnchor == CSS_VALUE_CENTER)
|
||||
ofsY = 0.5f;
|
||||
|
||||
ofsY = (float)(areaH - texH) * ofsY;
|
||||
}
|
||||
else if (bg.yAnchor == CSS_VALUE_TOP)
|
||||
{
|
||||
ofsY = areaH - texH - ofsY;
|
||||
}
|
||||
|
||||
texX = areaX + ofsX;
|
||||
texY = areaY + ofsY;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::getImageTile(sint32 &tilePos, sint32 &tileSize, sint32 &spacing, sint32 &tiles, sint32 areaPos, sint32 areaSize, CSSValueType repeat) const
|
||||
{
|
||||
switch(repeat)
|
||||
{
|
||||
case CSS_VALUE_NOREPEAT:
|
||||
{
|
||||
tiles = 1;
|
||||
spacing = 0;
|
||||
break;
|
||||
}
|
||||
case CSS_VALUE_SPACE:
|
||||
{
|
||||
// if no space for 2+ tiles, then show single one on calculated tilePos
|
||||
if (tileSize * 2 > areaSize)
|
||||
{
|
||||
// set spacing large enough to only display single tile
|
||||
tiles = 1;
|
||||
spacing = areaSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
// available for middle tiles
|
||||
sint32 midSize = (areaSize - tileSize*2);
|
||||
// number of middle tiles
|
||||
sint32 midTiles = midSize / tileSize;
|
||||
|
||||
tiles = 2 + midTiles;
|
||||
tilePos = areaPos;
|
||||
// int div for floor()
|
||||
spacing = ( midSize - tileSize * midTiles) / (midTiles + 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CSS_VALUE_ROUND:
|
||||
// fall-thru - size is already calculated
|
||||
case CSS_VALUE_REPEAT:
|
||||
// fall-thru
|
||||
default:
|
||||
{
|
||||
tilePos -= std::ceil(abs(tilePos - areaPos)/(float)tileSize)*tileSize;
|
||||
tiles = std::ceil((std::abs(areaPos - tilePos) + areaSize) / (float)tileSize);
|
||||
spacing = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::calculateTiles(const CSSBackground &bg, sint32 &texX, sint32 &texY, sint32 &texW, sint32 &texH, sint32 &tilesX, sint32 &tilesY, sint32 &spacingX, sint32 &spacingY) const
|
||||
{
|
||||
sint32 areaX, areaY, areaW, areaH;
|
||||
getPositioningArea(bg, areaX, areaY, areaW, areaH);
|
||||
|
||||
// texX,texY is for position area (ie content-box), but painting area can be bigger (ie border-box)
|
||||
sint32 paintX, paintY, paintW, paintH;
|
||||
getPaintingArea(bg, paintX, paintY, paintW, paintH);
|
||||
if (paintX < areaX)
|
||||
areaX -= std::ceil((areaX - paintX) / (float)texW) * texW;
|
||||
if ((paintX + paintW) > (areaX + areaW))
|
||||
areaW += std::ceil(((paintX + paintW) - (areaX + areaW)) / (float)texW) * texW;
|
||||
if (paintY < areaY)
|
||||
areaY -= std::ceil((areaY - paintY) / (float)texH) * texH;
|
||||
if ((paintY + paintH) > (areaY + areaH))
|
||||
areaH += std::ceil(((paintY + paintH) - (areaY + areaH)) / (float)texH) * texH;
|
||||
|
||||
if (texW <= 0 || texH <= 0 || areaW <= 0 || areaH <= 0)
|
||||
{
|
||||
tilesX = tilesY = 0;
|
||||
spacingX = spacingY = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (bg.repeatX == CSS_VALUE_ROUND)
|
||||
{
|
||||
sint numTiles = std::max(1, (sint)std::round((float)areaW / texW));
|
||||
texW = areaW / numTiles;
|
||||
if (bg.height.isAuto() && bg.repeatY != CSS_VALUE_ROUND)
|
||||
{
|
||||
float aspect = (float)areaW / (numTiles * texW);
|
||||
texH = texW * aspect;
|
||||
}
|
||||
}
|
||||
|
||||
if (bg.repeatY == CSS_VALUE_ROUND)
|
||||
{
|
||||
sint numTiles = std::max(1, (sint)std::round((float)areaH / texH));
|
||||
texH = areaH / numTiles;
|
||||
if (bg.width.isAuto() && bg.repeatX != CSS_VALUE_ROUND)
|
||||
{
|
||||
float aspect = (float)areaH / (numTiles * texH);
|
||||
texW = texH * aspect;
|
||||
}
|
||||
}
|
||||
|
||||
getImageTile(texX, texW, spacingX, tilesX, areaX, areaW, bg.repeatX);
|
||||
getImageTile(texY, texH, spacingY, tilesY, areaY, areaH, bg.repeatY);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::buildColorQuads(const CSSBackground &bg)
|
||||
{
|
||||
if (bg.color.A == 0)
|
||||
return;
|
||||
|
||||
// painting area defined with background-clip
|
||||
sint32 x, y, w, h;
|
||||
getPaintingArea(bg, x, y, w, h);
|
||||
|
||||
if (w <= 0 || h <= 0)
|
||||
return;
|
||||
|
||||
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
||||
|
||||
SDrawQueue shape;
|
||||
shape.Quad.Uv0.set(0.f, 1.f);
|
||||
shape.Quad.Uv1.set(1.f, 1.f);
|
||||
shape.Quad.Uv2.set(1.f, 0.f);
|
||||
shape.Quad.Uv3.set(0.f, 0.f);
|
||||
|
||||
shape.Quad.V0.set(x, y, 0);
|
||||
shape.Quad.V1.set(x+w, y, 0);
|
||||
shape.Quad.V2.set(x+w, y+h, 0);
|
||||
shape.Quad.V3.set(x, y+h, 0);
|
||||
|
||||
shape.Color = bg.color;
|
||||
shape.TextureId = rVR.getBlankTextureId();
|
||||
|
||||
m_DrawQueue.push_back(shape);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void CSSBackgroundRenderer::buildImageQuads(const CSSBackground &bg, sint32 textureId)
|
||||
{
|
||||
// TODO: m_Background should have textureId and that should be "reserved" in CViewRenderer
|
||||
// even before download is finished
|
||||
if (textureId < 0)
|
||||
return;
|
||||
|
||||
CViewRenderer &rVR = *CViewRenderer::getInstance();
|
||||
|
||||
sint32 texW = 0;
|
||||
sint32 texH = 0;
|
||||
rVR.getTextureSizeFromId(textureId, texW, texH);
|
||||
if (texW <= 0 || texH <= 0)
|
||||
return;
|
||||
|
||||
// get requested texture size
|
||||
calculateSize(m_Background, texW, texH);
|
||||
if(texW <= 0 || texH <= 0)
|
||||
return;
|
||||
|
||||
// get texture left/top corner
|
||||
sint32 texX, texY;
|
||||
calculatePosition(m_Background, texX, texY, texW, texH);
|
||||
|
||||
sint32 tilesX, tilesY;
|
||||
sint32 spacingX, spacingY;
|
||||
calculateTiles(m_Background, texX, texY, texW, texH, tilesX, tilesY, spacingX, spacingY);
|
||||
|
||||
sint32 clipL, clipB, clipR, clipT;
|
||||
getPaintingArea(m_Background, clipL, clipB, clipR, clipT);
|
||||
clipR += clipL;
|
||||
clipT += clipB;
|
||||
|
||||
m_DrawQueue.reserve(tilesX * tilesY + m_DrawQueue.size());
|
||||
for(sint32 tileX = 0; tileX < tilesX; tileX++)
|
||||
{
|
||||
for(sint32 tileY = 0; tileY < tilesY; tileY++)
|
||||
{
|
||||
sint32 tileL = texX + tileX * (texW + spacingX);
|
||||
sint32 tileB = texY + tileY * (texH + spacingY);
|
||||
sint32 tileR = tileL + texW;
|
||||
sint32 tileT = tileB + texH;
|
||||
|
||||
// tile is outside clip area
|
||||
if (tileT <= clipB || tileB >= clipT || tileR <= clipL || tileL >= clipR)
|
||||
continue;
|
||||
|
||||
CUV uv0(0,1);
|
||||
CUV uv1(1,1);
|
||||
CUV uv2(1,0);
|
||||
CUV uv3(0,0);
|
||||
|
||||
// clip if tile not totally inside clip area
|
||||
if (!(tileL >= clipL && tileR <= clipR && tileB >= clipB && tileT <= clipT))
|
||||
{
|
||||
float ratio;
|
||||
if (tileL < clipL)
|
||||
{
|
||||
ratio = ((float)(clipL - tileL))/((float)(tileR - tileL));
|
||||
tileL = clipL;
|
||||
uv0.U += ratio*(uv1.U-uv0.U);
|
||||
uv3.U += ratio*(uv2.U-uv3.U);
|
||||
}
|
||||
|
||||
if (tileB < clipB)
|
||||
{
|
||||
ratio = ((float)(clipB - tileB))/((float)(tileT - tileB));
|
||||
tileB = clipB;
|
||||
uv0.V += ratio*(uv3.V-uv0.V);
|
||||
uv1.V += ratio*(uv2.V-uv1.V);
|
||||
}
|
||||
|
||||
if (tileR > clipR)
|
||||
{
|
||||
ratio = ((float)(clipR - tileR))/((float)(tileL - tileR));
|
||||
tileR = clipR;
|
||||
uv2.U += ratio*(uv3.U-uv2.U);
|
||||
uv1.U += ratio*(uv0.U-uv1.U);
|
||||
}
|
||||
|
||||
if (tileT > clipT)
|
||||
{
|
||||
ratio = ((float)(clipT - tileT))/((float)(tileB - tileT));
|
||||
tileT = clipT;
|
||||
uv2.V += ratio*(uv1.V-uv2.V);
|
||||
uv3.V += ratio*(uv0.V-uv3.V);
|
||||
}
|
||||
}
|
||||
|
||||
SDrawQueue shape;
|
||||
shape.Quad.Uv0 = uv0;
|
||||
shape.Quad.Uv1 = uv1;
|
||||
shape.Quad.Uv2 = uv2;
|
||||
shape.Quad.Uv3 = uv3;
|
||||
|
||||
shape.Color = CRGBA::White;
|
||||
shape.TextureId = textureId;
|
||||
|
||||
shape.Quad.V0.set(tileL, tileB, 0);
|
||||
shape.Quad.V1.set(tileR, tileB, 0);
|
||||
shape.Quad.V2.set(tileR, tileT, 0);
|
||||
shape.Quad.V3.set(tileL, tileT, 0);
|
||||
|
||||
m_DrawQueue.push_back(shape);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}//namespace
|
||||
|
@ -1,225 +0,0 @@
|
||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
||||
// Copyright (C) 2010-2021 Winch Gate Property Limited
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Affero General Public License as
|
||||
// published by the Free Software Foundation, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Affero General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Affero General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "stdpch.h"
|
||||
|
||||
#include <string>
|
||||
#include "nel/gui/css_length.h"
|
||||
|
||||
using namespace NLMISC;
|
||||
|
||||
#ifdef DEBUG_NEW
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
|
||||
namespace NLGUI
|
||||
{
|
||||
|
||||
bool CSSLength::parseValue(const std::string &value, bool allowPercent, bool allowNegative)
|
||||
{
|
||||
static const std::set<std::string> knownUnits = {
|
||||
"%", "rem", "em", "px", "pt", "vw", "vh", "vi", "vb", "vmin", "vmax"
|
||||
};
|
||||
|
||||
std::string::size_type pos = 0;
|
||||
std::string::size_type len = value.size();
|
||||
if (len == 0)
|
||||
return false;
|
||||
|
||||
if (len == 1 && value[0] == '0')
|
||||
{
|
||||
m_Value = 0;
|
||||
m_Kind = Auto;
|
||||
return true;
|
||||
}
|
||||
|
||||
// +100px; -100px
|
||||
if (value[0] == '+')
|
||||
pos++;
|
||||
else if (allowNegative && value[0] == '-')
|
||||
pos++;
|
||||
|
||||
while(pos < len)
|
||||
{
|
||||
bool isNumeric = (value[pos] >= '0' && value[pos] <= '9')
|
||||
|| (pos == 0 && value[pos] == '.')
|
||||
|| (pos > 0 && value[pos] == '.' && value[pos-1] >= '0' && value[pos-1] <= '9');
|
||||
|
||||
if (!isNumeric)
|
||||
break;
|
||||
|
||||
pos++;
|
||||
}
|
||||
|
||||
std::string unit = toLowerAscii(value.substr(pos));
|
||||
if (knownUnits.count(unit))
|
||||
{
|
||||
std::string tmpstr = value.substr(0, pos);
|
||||
return fromString(tmpstr, m_Value);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
float CSSLength::getValue() const
|
||||
{
|
||||
if (m_Unit == CSS_UNIT_PERCENT)
|
||||
return m_Value / 100.f;
|
||||
|
||||
return m_Value;
|
||||
}
|
||||
void CSSLength::setFloatValue(float f, const std::string &unit)
|
||||
{
|
||||
m_Value = f;
|
||||
setUnit(unit);
|
||||
}
|
||||
|
||||
void CSSLength::setUnit(const std::string &unit)
|
||||
{
|
||||
if (unit.empty())
|
||||
{
|
||||
m_Unit = CSS_UNIT_NONE;
|
||||
m_Kind = Fixed;
|
||||
}
|
||||
else if (unit == "px")
|
||||
{
|
||||
m_Unit = CSS_UNIT_PX;
|
||||
m_Kind = Fixed;
|
||||
} else if (unit == "pt")
|
||||
{
|
||||
m_Unit = CSS_UNIT_PT;
|
||||
m_Kind = Fixed;
|
||||
} else if (unit == "%")
|
||||
{
|
||||
m_Unit = CSS_UNIT_PERCENT;
|
||||
m_Kind = Relative;
|
||||
} else if (unit == "em")
|
||||
{
|
||||
m_Unit = CSS_UNIT_EM;
|
||||
m_Kind = Relative;
|
||||
} else if (unit == "rem")
|
||||
{
|
||||
m_Unit = CSS_UNIT_REM;
|
||||
m_Kind = Relative;
|
||||
} else if (unit == "vw")
|
||||
{
|
||||
m_Unit = CSS_UNIT_VW;
|
||||
m_Kind = Relative;
|
||||
} else if (unit == "vh")
|
||||
{
|
||||
m_Unit = CSS_UNIT_VH;
|
||||
m_Kind = Relative;
|
||||
} else if (unit == "vi")
|
||||
{
|
||||
m_Unit = CSS_UNIT_VI;
|
||||
m_Kind = Relative;
|
||||
} else if (unit == "vb")
|
||||
{
|
||||
m_Unit = CSS_UNIT_VB;
|
||||
m_Kind = Relative;
|
||||
} else if (unit == "vmin")
|
||||
{
|
||||
m_Unit = CSS_UNIT_VMIN;
|
||||
m_Kind = Relative;
|
||||
} else if (unit == "vmax")
|
||||
{
|
||||
m_Unit = CSS_UNIT_VMAX;
|
||||
m_Kind = Relative;
|
||||
} else if (unit == "auto")
|
||||
{
|
||||
m_Unit = CSS_UNIT_NONE;
|
||||
m_Kind = Auto;
|
||||
} else
|
||||
{
|
||||
// fallback to auto
|
||||
m_Unit = CSS_UNIT_NONE;
|
||||
m_Kind = Auto;
|
||||
}
|
||||
}
|
||||
|
||||
float CSSLength::calculate(uint32 relValue, uint32 emSize, uint32 remSize, uint32 vwSize, uint32 vhSize = 0) const
|
||||
{
|
||||
if (m_Kind == Auto)
|
||||
return 0;
|
||||
|
||||
float value = getValue();
|
||||
switch(m_Unit)
|
||||
{
|
||||
case CSS_UNIT_EM:
|
||||
return emSize * value;
|
||||
case CSS_UNIT_REM:
|
||||
return remSize * value;
|
||||
case CSS_UNIT_PERCENT:
|
||||
return relValue * value;
|
||||
case CSS_UNIT_PX:
|
||||
case CSS_UNIT_PT:
|
||||
return value;
|
||||
case CSS_UNIT_VW:
|
||||
case CSS_UNIT_VI:
|
||||
// Vi for horizontal writing mode only
|
||||
return (float)vwSize*0.01f;
|
||||
case CSS_UNIT_VH:
|
||||
case CSS_UNIT_VB:
|
||||
// Vb for horizontal writing mode only
|
||||
return (float)vhSize*0.01f;
|
||||
case CSS_UNIT_VMIN:
|
||||
return (float)std::min(vwSize, vhSize)*0.01f;
|
||||
case CSS_UNIT_VMAX:
|
||||
return (float)std::max(vwSize, vhSize)*0.01f;
|
||||
}
|
||||
|
||||
nldebug("Unknown CSS unit '%s'", toString().c_str());
|
||||
return value;
|
||||
}
|
||||
|
||||
std::string CSSLength::toString() const
|
||||
{
|
||||
if (m_Kind == Auto)
|
||||
return "auto";
|
||||
|
||||
std::string ret;
|
||||
ret += NLMISC::toString("%f", m_Value);
|
||||
|
||||
size_t pos = ret.find(".");
|
||||
for( ; pos < ret.size(); ++pos)
|
||||
{
|
||||
if (ret[pos] != '0')
|
||||
break;
|
||||
}
|
||||
if (pos == ret.size())
|
||||
ret = ret.substr(0, ret.find("."));
|
||||
|
||||
switch(m_Unit)
|
||||
{
|
||||
case CSS_UNIT_NONE: break;
|
||||
case CSS_UNIT_EM: ret += "em"; break;
|
||||
case CSS_UNIT_REM: ret += "rem"; break;
|
||||
case CSS_UNIT_PERCENT: ret += "%"; break;
|
||||
case CSS_UNIT_PX: ret += "px"; break;
|
||||
case CSS_UNIT_PT: ret += "pt"; break;
|
||||
case CSS_UNIT_VW: ret += "vw"; break;
|
||||
case CSS_UNIT_VH: ret += "vh"; break;
|
||||
case CSS_UNIT_VI: ret += "vi"; break;
|
||||
case CSS_UNIT_VB: ret += "vb"; break;
|
||||
case CSS_UNIT_VMIN: ret += "vmin"; break;
|
||||
case CSS_UNIT_VMAX: ret += "vmax"; break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,94 +1,94 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# \file 1_export.py
|
||||
# \brief Run all export processes
|
||||
# \date 2009-02-18 09:22GMT
|
||||
# \author Jan Boon (Kaetemi)
|
||||
# Python port of game data build pipeline.
|
||||
# Run all export processes
|
||||
#
|
||||
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
# Copyright (C) 2009-2014 by authors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||
sys.path.append("configuration")
|
||||
|
||||
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Export')
|
||||
# parser.add_argument('--haltonerror', '-eh', action='store_true')
|
||||
parser.add_argument('--includeproject', '-ipj', nargs='+')
|
||||
parser.add_argument('--excludeproject', '-epj', nargs='+')
|
||||
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.includeproject == None and not args.excludeproject == None:
|
||||
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
|
||||
exit()
|
||||
|
||||
if not args.includeprocess == None and not args.excludeprocess == None:
|
||||
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
|
||||
exit()
|
||||
|
||||
if os.path.isfile("log.log"):
|
||||
os.remove("log.log")
|
||||
log = open("log.log", "w")
|
||||
from scripts import *
|
||||
from buildsite_local import *
|
||||
from tools import *
|
||||
|
||||
sys.path.append(WorkspaceDirectory)
|
||||
from projects import *
|
||||
|
||||
# Log error
|
||||
printLog(log, "")
|
||||
printLog(log, "-------")
|
||||
printLog(log, "--- Run the export processes")
|
||||
printLog(log, "-------")
|
||||
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||
printLog(log, "")
|
||||
# For each project
|
||||
for projectName in ProjectsToProcess:
|
||||
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
|
||||
printLog(log, "PROJECT " + projectName)
|
||||
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
|
||||
os.chdir("processes")
|
||||
try:
|
||||
if not args.includeprocess == None:
|
||||
subprocess.call([ "python", "1_export.py", "--includeprocess" ] + args.includeprocess)
|
||||
elif not args.excludeprocess == None:
|
||||
subprocess.call([ "python", "1_export.py", "--excludeprocess" ] + args.excludeprocess)
|
||||
else:
|
||||
subprocess.call([ "python", "1_export.py" ])
|
||||
except Exception, e:
|
||||
printLog(log, "<" + projectName + "> " + str(e))
|
||||
os.chdir("..")
|
||||
try:
|
||||
projectLog = open("processes/log.log", "r")
|
||||
projectLogData = projectLog.read()
|
||||
projectLog.close()
|
||||
log.write(projectLogData)
|
||||
except Exception, e:
|
||||
printLog(log, "<" + projectName + "> " + str(e))
|
||||
else:
|
||||
printLog(log, "IGNORE PROJECT " + projectName)
|
||||
printLog(log, "")
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("1_export.log"):
|
||||
os.remove("1_export.log")
|
||||
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_export.log")
|
||||
shutil.move("log.log", "1_export.log")
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# \file 1_export.py
|
||||
# \brief Run all export processes
|
||||
# \date 2009-02-18 09:22GMT
|
||||
# \author Jan Boon (Kaetemi)
|
||||
# Python port of game data build pipeline.
|
||||
# Run all export processes
|
||||
#
|
||||
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
# Copyright (C) 2009-2014 by authors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||
sys.path.append("configuration")
|
||||
|
||||
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Export')
|
||||
# parser.add_argument('--haltonerror', '-eh', action='store_true')
|
||||
parser.add_argument('--includeproject', '-ipj', nargs='+')
|
||||
parser.add_argument('--excludeproject', '-epj', nargs='+')
|
||||
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.includeproject == None and not args.excludeproject == None:
|
||||
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
|
||||
exit()
|
||||
|
||||
if not args.includeprocess == None and not args.excludeprocess == None:
|
||||
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
|
||||
exit()
|
||||
|
||||
if os.path.isfile("log.log"):
|
||||
os.remove("log.log")
|
||||
log = open("log.log", "w")
|
||||
from scripts import *
|
||||
from buildsite_local import *
|
||||
from tools import *
|
||||
|
||||
sys.path.append(WorkspaceDirectory)
|
||||
from projects import *
|
||||
|
||||
# Log error
|
||||
printLog(log, "")
|
||||
printLog(log, "-------")
|
||||
printLog(log, "--- Run the export processes")
|
||||
printLog(log, "-------")
|
||||
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||
printLog(log, "")
|
||||
# For each project
|
||||
for projectName in ProjectsToProcess:
|
||||
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
|
||||
printLog(log, "PROJECT " + projectName)
|
||||
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
|
||||
os.chdir("processes")
|
||||
try:
|
||||
if not args.includeprocess == None:
|
||||
subprocess.call([ "python", "1_export.py", "--includeprocess" ] + args.includeprocess)
|
||||
elif not args.excludeprocess == None:
|
||||
subprocess.call([ "python", "1_export.py", "--excludeprocess" ] + args.excludeprocess)
|
||||
else:
|
||||
subprocess.call([ "python", "1_export.py" ])
|
||||
except Exception, e:
|
||||
printLog(log, "<" + projectName + "> " + str(e))
|
||||
os.chdir("..")
|
||||
try:
|
||||
projectLog = open("processes/log.log", "r")
|
||||
projectLogData = projectLog.read()
|
||||
projectLog.close()
|
||||
log.write(projectLogData)
|
||||
except Exception, e:
|
||||
printLog(log, "<" + projectName + "> " + str(e))
|
||||
else:
|
||||
printLog(log, "IGNORE PROJECT " + projectName)
|
||||
printLog(log, "")
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("1_export.log"):
|
||||
os.remove("1_export.log")
|
||||
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_export.log")
|
||||
shutil.move("log.log", "1_export.log")
|
||||
|
@ -1,94 +1,94 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# \file 2_build.py
|
||||
# \brief Run all build processes
|
||||
# \date 2009-02-18 09:22GMT
|
||||
# \author Jan Boon (Kaetemi)
|
||||
# Python port of game data build pipeline.
|
||||
# Run all build processes
|
||||
#
|
||||
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
# Copyright (C) 2009-2014 by authors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||
sys.path.append("configuration")
|
||||
|
||||
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Build')
|
||||
# parser.add_argument('--haltonerror', '-eh', action='store_true')
|
||||
parser.add_argument('--includeproject', '-ipj', nargs='+')
|
||||
parser.add_argument('--excludeproject', '-epj', nargs='+')
|
||||
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.includeproject == None and not args.excludeproject == None:
|
||||
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
|
||||
exit()
|
||||
|
||||
if not args.includeprocess == None and not args.excludeprocess == None:
|
||||
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
|
||||
exit()
|
||||
|
||||
if os.path.isfile("log.log"):
|
||||
os.remove("log.log")
|
||||
log = open("log.log", "w")
|
||||
from scripts import *
|
||||
from buildsite_local import *
|
||||
from tools import *
|
||||
|
||||
sys.path.append(WorkspaceDirectory)
|
||||
from projects import *
|
||||
|
||||
# Log error
|
||||
printLog(log, "")
|
||||
printLog(log, "-------")
|
||||
printLog(log, "--- Run the build processes")
|
||||
printLog(log, "-------")
|
||||
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||
printLog(log, "")
|
||||
# For each project
|
||||
for projectName in ProjectsToProcess:
|
||||
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
|
||||
printLog(log, "PROJECT " + projectName)
|
||||
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
|
||||
os.chdir("processes")
|
||||
try:
|
||||
if not args.includeprocess == None:
|
||||
subprocess.call([ "python", "2_build.py", "--includeprocess" ] + args.includeprocess)
|
||||
elif not args.excludeprocess == None:
|
||||
subprocess.call([ "python", "2_build.py", "--excludeprocess" ] + args.excludeprocess)
|
||||
else:
|
||||
subprocess.call([ "python", "2_build.py" ])
|
||||
except Exception, e:
|
||||
printLog(log, "<" + projectName + "> " + str(e))
|
||||
os.chdir("..")
|
||||
try:
|
||||
projectLog = open("processes/log.log", "r")
|
||||
projectLogData = projectLog.read()
|
||||
projectLog.close()
|
||||
log.write(projectLogData)
|
||||
except Exception, e:
|
||||
printLog(log, "<" + projectName + "> " + str(e))
|
||||
else:
|
||||
printLog(log, "IGNORE PROJECT " + projectName)
|
||||
printLog(log, "")
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("2_build.log"):
|
||||
os.remove("2_build.log")
|
||||
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_build.log")
|
||||
shutil.move("log.log", "2_build.log")
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# \file 2_build.py
|
||||
# \brief Run all build processes
|
||||
# \date 2009-02-18 09:22GMT
|
||||
# \author Jan Boon (Kaetemi)
|
||||
# Python port of game data build pipeline.
|
||||
# Run all build processes
|
||||
#
|
||||
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
# Copyright (C) 2009-2014 by authors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||
sys.path.append("configuration")
|
||||
|
||||
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Build')
|
||||
# parser.add_argument('--haltonerror', '-eh', action='store_true')
|
||||
parser.add_argument('--includeproject', '-ipj', nargs='+')
|
||||
parser.add_argument('--excludeproject', '-epj', nargs='+')
|
||||
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.includeproject == None and not args.excludeproject == None:
|
||||
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
|
||||
exit()
|
||||
|
||||
if not args.includeprocess == None and not args.excludeprocess == None:
|
||||
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
|
||||
exit()
|
||||
|
||||
if os.path.isfile("log.log"):
|
||||
os.remove("log.log")
|
||||
log = open("log.log", "w")
|
||||
from scripts import *
|
||||
from buildsite_local import *
|
||||
from tools import *
|
||||
|
||||
sys.path.append(WorkspaceDirectory)
|
||||
from projects import *
|
||||
|
||||
# Log error
|
||||
printLog(log, "")
|
||||
printLog(log, "-------")
|
||||
printLog(log, "--- Run the build processes")
|
||||
printLog(log, "-------")
|
||||
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||
printLog(log, "")
|
||||
# For each project
|
||||
for projectName in ProjectsToProcess:
|
||||
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
|
||||
printLog(log, "PROJECT " + projectName)
|
||||
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
|
||||
os.chdir("processes")
|
||||
try:
|
||||
if not args.includeprocess == None:
|
||||
subprocess.call([ "python", "2_build.py", "--includeprocess" ] + args.includeprocess)
|
||||
elif not args.excludeprocess == None:
|
||||
subprocess.call([ "python", "2_build.py", "--excludeprocess" ] + args.excludeprocess)
|
||||
else:
|
||||
subprocess.call([ "python", "2_build.py" ])
|
||||
except Exception, e:
|
||||
printLog(log, "<" + projectName + "> " + str(e))
|
||||
os.chdir("..")
|
||||
try:
|
||||
projectLog = open("processes/log.log", "r")
|
||||
projectLogData = projectLog.read()
|
||||
projectLog.close()
|
||||
log.write(projectLogData)
|
||||
except Exception, e:
|
||||
printLog(log, "<" + projectName + "> " + str(e))
|
||||
else:
|
||||
printLog(log, "IGNORE PROJECT " + projectName)
|
||||
printLog(log, "")
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("2_build.log"):
|
||||
os.remove("2_build.log")
|
||||
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_build.log")
|
||||
shutil.move("log.log", "2_build.log")
|
||||
|
@ -1,94 +1,94 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# \file 3_install.py
|
||||
# \brief Run all install processes
|
||||
# \date 2009-02-18 16:19GMT
|
||||
# \author Jan Boon (Kaetemi)
|
||||
# Python port of game data build pipeline.
|
||||
# Run all install processes
|
||||
#
|
||||
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
# Copyright (C) 2009-2014 by authors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||
sys.path.append("configuration")
|
||||
|
||||
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Install')
|
||||
# parser.add_argument('--haltonerror', '-eh', action='store_true')
|
||||
parser.add_argument('--includeproject', '-ipj', nargs='+')
|
||||
parser.add_argument('--excludeproject', '-epj', nargs='+')
|
||||
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.includeproject == None and not args.excludeproject == None:
|
||||
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
|
||||
exit()
|
||||
|
||||
if not args.includeprocess == None and not args.excludeprocess == None:
|
||||
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
|
||||
exit()
|
||||
|
||||
if os.path.isfile("log.log"):
|
||||
os.remove("log.log")
|
||||
log = open("log.log", "w")
|
||||
from scripts import *
|
||||
from buildsite_local import *
|
||||
from tools import *
|
||||
|
||||
sys.path.append(WorkspaceDirectory)
|
||||
from projects import *
|
||||
|
||||
# Log error
|
||||
printLog(log, "")
|
||||
printLog(log, "-------")
|
||||
printLog(log, "--- Run the install processes")
|
||||
printLog(log, "-------")
|
||||
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||
printLog(log, "")
|
||||
# For each project
|
||||
for projectName in ProjectsToProcess:
|
||||
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
|
||||
printLog(log, "PROJECT " + projectName)
|
||||
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
|
||||
os.chdir("processes")
|
||||
try:
|
||||
if not args.includeprocess == None:
|
||||
subprocess.call([ "python", "3_install.py", "--includeprocess" ] + args.includeprocess)
|
||||
elif not args.excludeprocess == None:
|
||||
subprocess.call([ "python", "3_install.py", "--excludeprocess" ] + args.excludeprocess)
|
||||
else:
|
||||
subprocess.call([ "python", "3_install.py" ])
|
||||
except Exception, e:
|
||||
printLog(log, "<" + projectName + "> " + str(e))
|
||||
os.chdir("..")
|
||||
try:
|
||||
projectLog = open("processes/log.log", "r")
|
||||
projectLogData = projectLog.read()
|
||||
projectLog.close()
|
||||
log.write(projectLogData)
|
||||
except Exception, e:
|
||||
printLog(log, "<" + projectName + "> " + str(e))
|
||||
else:
|
||||
printLog(log, "IGNORE PROJECT " + projectName)
|
||||
printLog(log, "")
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("3_install.log"):
|
||||
os.remove("3_install.log")
|
||||
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_install.log")
|
||||
shutil.move("log.log", "3_install.log")
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# \file 3_install.py
|
||||
# \brief Run all install processes
|
||||
# \date 2009-02-18 16:19GMT
|
||||
# \author Jan Boon (Kaetemi)
|
||||
# Python port of game data build pipeline.
|
||||
# Run all install processes
|
||||
#
|
||||
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
# Copyright (C) 2009-2014 by authors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time, sys, os, shutil, subprocess, distutils.dir_util, argparse
|
||||
sys.path.append("configuration")
|
||||
|
||||
parser = argparse.ArgumentParser(description='Ryzom Core - Build Gamedata - Install')
|
||||
# parser.add_argument('--haltonerror', '-eh', action='store_true')
|
||||
parser.add_argument('--includeproject', '-ipj', nargs='+')
|
||||
parser.add_argument('--excludeproject', '-epj', nargs='+')
|
||||
parser.add_argument('--includeprocess', '-ipc', nargs='+')
|
||||
parser.add_argument('--excludeprocess', '-epc', nargs='+')
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.includeproject == None and not args.excludeproject == None:
|
||||
print "ERROR --includeproject cannot be combined with --excludeproject, exit."
|
||||
exit()
|
||||
|
||||
if not args.includeprocess == None and not args.excludeprocess == None:
|
||||
print "ERROR --includeprocess cannot be combined with --excludeprocess, exit."
|
||||
exit()
|
||||
|
||||
if os.path.isfile("log.log"):
|
||||
os.remove("log.log")
|
||||
log = open("log.log", "w")
|
||||
from scripts import *
|
||||
from buildsite_local import *
|
||||
from tools import *
|
||||
|
||||
sys.path.append(WorkspaceDirectory)
|
||||
from projects import *
|
||||
|
||||
# Log error
|
||||
printLog(log, "")
|
||||
printLog(log, "-------")
|
||||
printLog(log, "--- Run the install processes")
|
||||
printLog(log, "-------")
|
||||
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||
printLog(log, "")
|
||||
# For each project
|
||||
for projectName in ProjectsToProcess:
|
||||
if ((args.includeproject == None or projectName in args.includeproject) and (args.excludeproject == None or not projectName in args.excludeproject)):
|
||||
printLog(log, "PROJECT " + projectName)
|
||||
os.putenv("NELBUILDACTIVEPROJECT", os.path.abspath(WorkspaceDirectory + "/" + projectName))
|
||||
os.chdir("processes")
|
||||
try:
|
||||
if not args.includeprocess == None:
|
||||
subprocess.call([ "python", "3_install.py", "--includeprocess" ] + args.includeprocess)
|
||||
elif not args.excludeprocess == None:
|
||||
subprocess.call([ "python", "3_install.py", "--excludeprocess" ] + args.excludeprocess)
|
||||
else:
|
||||
subprocess.call([ "python", "3_install.py" ])
|
||||
except Exception, e:
|
||||
printLog(log, "<" + projectName + "> " + str(e))
|
||||
os.chdir("..")
|
||||
try:
|
||||
projectLog = open("processes/log.log", "r")
|
||||
projectLogData = projectLog.read()
|
||||
projectLog.close()
|
||||
log.write(projectLogData)
|
||||
except Exception, e:
|
||||
printLog(log, "<" + projectName + "> " + str(e))
|
||||
else:
|
||||
printLog(log, "IGNORE PROJECT " + projectName)
|
||||
printLog(log, "")
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("3_install.log"):
|
||||
os.remove("3_install.log")
|
||||
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_install.log")
|
||||
shutil.move("log.log", "3_install.log")
|
||||
|
@ -1,181 +1,181 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# \file 9_upload.py
|
||||
# \brief Upload data to servers
|
||||
# \date 2009-02-18 16:19GMT
|
||||
# \author Jan Boon (Kaetemi)
|
||||
# Game data build pipeline.
|
||||
# Upload data to servers
|
||||
#
|
||||
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
# Copyright (C) 2011 Kaetemi
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||
sys.path.append("configuration")
|
||||
|
||||
if os.path.isfile("log.log"):
|
||||
os.remove("log.log")
|
||||
log = open("log.log", "w")
|
||||
from scripts import *
|
||||
from buildsite_local import *
|
||||
from tools import *
|
||||
|
||||
try:
|
||||
from upload import *
|
||||
except ImportError:
|
||||
# Not documenting this. Because we can.
|
||||
printLog(log, "ERROR Upload not configured, bye.")
|
||||
exit()
|
||||
|
||||
sys.path.append(WorkspaceDirectory)
|
||||
from projects import *
|
||||
|
||||
# Log error
|
||||
printLog(log, "")
|
||||
printLog(log, "-------")
|
||||
printLog(log, "--- Upload data to servers")
|
||||
printLog(log, "-------")
|
||||
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||
printLog(log, "")
|
||||
|
||||
# Find tools
|
||||
# Not documenting this. Because we can.
|
||||
Psftp = findFileMultiDir(log, ToolDirectories + WindowsExeDllCfgDirectories, UploadPsftpTool)
|
||||
printLog(log, "PSFTP " + Psftp)
|
||||
|
||||
def downloadVersionTag(server, user, sshkey, dir):
|
||||
if os.path.isfile("upload.tag"):
|
||||
os.remove("upload.tag")
|
||||
if os.path.isfile("upload.batch"):
|
||||
os.remove("upload.batch")
|
||||
ub = open("upload.batch", "w")
|
||||
ub.write("cd " + dir + "\n")
|
||||
ub.write("get upload.tag upload.tag\n")
|
||||
ub.write("quit\n")
|
||||
ub.close()
|
||||
subprocess.call([ Psftp, "-b", "upload.batch", "-i", sshkey, user + "@" + server ])
|
||||
os.remove("upload.batch")
|
||||
if os.path.isfile("upload.tag"):
|
||||
ft = open("upload.tag")
|
||||
result = float(ft.read()) # float, really
|
||||
ft.close()
|
||||
os.remove("upload.tag")
|
||||
printLog(log, "INFO Upload tag is " + str(result))
|
||||
return result
|
||||
else:
|
||||
printLog(log, "WARNING Upload tag not found, uploading everything")
|
||||
return 0
|
||||
|
||||
def isDirectoryNeeded(ft, dir):
|
||||
files = os.listdir(dir)
|
||||
for fileName in files:
|
||||
if isLegalFileName(fileName):
|
||||
fileFull = dir + "/" + fileName
|
||||
if os.path.isfile(fileFull):
|
||||
nftf = os.stat(fileFull).st_mtime
|
||||
if nftf > ft:
|
||||
return True
|
||||
elif os.path.isdir(fileFull):
|
||||
if isDirectoryNeeded(ft, fileFull):
|
||||
return True
|
||||
elif not os.path.isdir(fileFull):
|
||||
printLog(log, "isDirectoryNeeded: file not dir or file?!" + fileFull)
|
||||
return False
|
||||
|
||||
def listDirectoryUpload(ft, ub, udb, dir):
|
||||
nft = 0
|
||||
files = os.listdir(dir)
|
||||
for fileName in files:
|
||||
if isLegalFileName(fileName):
|
||||
fileFull = dir + "/" + fileName
|
||||
if os.path.isfile(fileFull):
|
||||
nftf = os.stat(fileFull).st_mtime
|
||||
if nftf > ft:
|
||||
ub.write("put " + fileFull + " " + fileName + "\n")
|
||||
if nftf > nft:
|
||||
nft = nftf
|
||||
elif os.path.isdir(fileFull):
|
||||
if isDirectoryNeeded(ft, fileFull):
|
||||
udb.write("mkdir " + fileName + "\n")
|
||||
ub.write("cd " + fileName + "\n")
|
||||
udb.write("cd " + fileName + "\n")
|
||||
nft2 = listDirectoryUpload(ft, ub, udb, fileFull)
|
||||
if (nft2 > nft):
|
||||
nft = nft2
|
||||
ub.write("cd ..\n")
|
||||
udb.write("cd ..\n")
|
||||
elif not os.path.isdir(fileFull):
|
||||
printLog(log, "listDirectoryUpload: file not dir or file?!" + fileFull)
|
||||
return nft
|
||||
|
||||
def uploadSftp(server, user, sshkey, dir_to, dir_from, addcmd):
|
||||
ft = downloadVersionTag(server, user, sshkey, dir_to)
|
||||
if isDirectoryNeeded(ft, dir_from):
|
||||
if os.path.isfile("upload_dir.batch"):
|
||||
os.remove("upload_dir.batch")
|
||||
if os.path.isfile("upload.batch"):
|
||||
os.remove("upload.batch")
|
||||
udb = open("upload_dir.batch", "w")
|
||||
udb.write("cd " + dir_to + "\n")
|
||||
ub = open("upload.batch", "w")
|
||||
ub.write("cd " + dir_to + "\n")
|
||||
for ac in addcmd:
|
||||
ub.write(ac + "\n")
|
||||
ftn = listDirectoryUpload(ft, ub, udb, dir_from)
|
||||
if (ft > ftn):
|
||||
ftn = ft
|
||||
nft = open("upload.tag", "w")
|
||||
nft.write(str(ftn))
|
||||
nft.close()
|
||||
ub.write("put upload.tag upload.tag\n")
|
||||
ub.write("quit\n")
|
||||
ub.close()
|
||||
udb.write("quit\n")
|
||||
udb.close()
|
||||
subprocess.call([ Psftp, "-be", "-b", "upload_dir.batch", "-i", sshkey, user + "@" + server ])
|
||||
subprocess.call([ Psftp, "-b", "upload.batch", "-i", sshkey, user + "@" + server ])
|
||||
os.remove("upload_dir.batch")
|
||||
os.remove("upload.batch")
|
||||
os.remove("upload.tag")
|
||||
else:
|
||||
printLog(log, "SKIP " + dir_to)
|
||||
|
||||
printLog(log, ">>> Upload patch <<<")
|
||||
for target in UploadPatch:
|
||||
uploadSftp(target[0], target[1], target[2], target[3], ClientPatchDirectory + "/patch", [ ])
|
||||
|
||||
printLog(log, ">>> Upload data_shard <<<")
|
||||
for target in UploadShard:
|
||||
uploadSftp(target[0], target[1], target[2], target[3], DataShardDirectory, [ "rm *.packed_sheets", "rm primitive_cache/*.binprim" ])
|
||||
|
||||
printLog(log, ">>> Upload data_common <<<")
|
||||
for target in UploadCommon:
|
||||
uploadSftp(target[0], target[1], target[2], target[3], DataCommonDirectory, [ ])
|
||||
|
||||
printLog(log, ">>> Upload data_leveldesign/leveldesign <<<")
|
||||
for target in UploadLeveldesign:
|
||||
uploadSftp(target[0], target[1], target[2], target[3], LeveldesignDirectory, [ ])
|
||||
|
||||
printLog(log, ">>> Upload data_leveldesign/primitives <<<")
|
||||
for target in UploadPrimitives:
|
||||
uploadSftp(target[0], target[1], target[2], target[3], PrimitivesDirectory, [ ])
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("9_upload.log"):
|
||||
os.remove("9_upload.log")
|
||||
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_upload.log")
|
||||
shutil.move("log.log", "9_upload.log")
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# \file 9_upload.py
|
||||
# \brief Upload data to servers
|
||||
# \date 2009-02-18 16:19GMT
|
||||
# \author Jan Boon (Kaetemi)
|
||||
# Game data build pipeline.
|
||||
# Upload data to servers
|
||||
#
|
||||
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
# Copyright (C) 2011 Kaetemi
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||
sys.path.append("configuration")
|
||||
|
||||
if os.path.isfile("log.log"):
|
||||
os.remove("log.log")
|
||||
log = open("log.log", "w")
|
||||
from scripts import *
|
||||
from buildsite_local import *
|
||||
from tools import *
|
||||
|
||||
try:
|
||||
from upload import *
|
||||
except ImportError:
|
||||
# Not documenting this. Because we can.
|
||||
printLog(log, "ERROR Upload not configured, bye.")
|
||||
exit()
|
||||
|
||||
sys.path.append(WorkspaceDirectory)
|
||||
from projects import *
|
||||
|
||||
# Log error
|
||||
printLog(log, "")
|
||||
printLog(log, "-------")
|
||||
printLog(log, "--- Upload data to servers")
|
||||
printLog(log, "-------")
|
||||
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||
printLog(log, "")
|
||||
|
||||
# Find tools
|
||||
# Not documenting this. Because we can.
|
||||
Psftp = findFileMultiDir(log, ToolDirectories + WindowsExeDllCfgDirectories, UploadPsftpTool)
|
||||
printLog(log, "PSFTP " + Psftp)
|
||||
|
||||
def downloadVersionTag(server, user, sshkey, dir):
|
||||
if os.path.isfile("upload.tag"):
|
||||
os.remove("upload.tag")
|
||||
if os.path.isfile("upload.batch"):
|
||||
os.remove("upload.batch")
|
||||
ub = open("upload.batch", "w")
|
||||
ub.write("cd " + dir + "\n")
|
||||
ub.write("get upload.tag upload.tag\n")
|
||||
ub.write("quit\n")
|
||||
ub.close()
|
||||
subprocess.call([ Psftp, "-b", "upload.batch", "-i", sshkey, user + "@" + server ])
|
||||
os.remove("upload.batch")
|
||||
if os.path.isfile("upload.tag"):
|
||||
ft = open("upload.tag")
|
||||
result = float(ft.read()) # float, really
|
||||
ft.close()
|
||||
os.remove("upload.tag")
|
||||
printLog(log, "INFO Upload tag is " + str(result))
|
||||
return result
|
||||
else:
|
||||
printLog(log, "WARNING Upload tag not found, uploading everything")
|
||||
return 0
|
||||
|
||||
def isDirectoryNeeded(ft, dir):
|
||||
files = os.listdir(dir)
|
||||
for fileName in files:
|
||||
if isLegalFileName(fileName):
|
||||
fileFull = dir + "/" + fileName
|
||||
if os.path.isfile(fileFull):
|
||||
nftf = os.stat(fileFull).st_mtime
|
||||
if nftf > ft:
|
||||
return True
|
||||
elif os.path.isdir(fileFull):
|
||||
if isDirectoryNeeded(ft, fileFull):
|
||||
return True
|
||||
elif not os.path.isdir(fileFull):
|
||||
printLog(log, "isDirectoryNeeded: file not dir or file?!" + fileFull)
|
||||
return False
|
||||
|
||||
def listDirectoryUpload(ft, ub, udb, dir):
|
||||
nft = 0
|
||||
files = os.listdir(dir)
|
||||
for fileName in files:
|
||||
if isLegalFileName(fileName):
|
||||
fileFull = dir + "/" + fileName
|
||||
if os.path.isfile(fileFull):
|
||||
nftf = os.stat(fileFull).st_mtime
|
||||
if nftf > ft:
|
||||
ub.write("put " + fileFull + " " + fileName + "\n")
|
||||
if nftf > nft:
|
||||
nft = nftf
|
||||
elif os.path.isdir(fileFull):
|
||||
if isDirectoryNeeded(ft, fileFull):
|
||||
udb.write("mkdir " + fileName + "\n")
|
||||
ub.write("cd " + fileName + "\n")
|
||||
udb.write("cd " + fileName + "\n")
|
||||
nft2 = listDirectoryUpload(ft, ub, udb, fileFull)
|
||||
if (nft2 > nft):
|
||||
nft = nft2
|
||||
ub.write("cd ..\n")
|
||||
udb.write("cd ..\n")
|
||||
elif not os.path.isdir(fileFull):
|
||||
printLog(log, "listDirectoryUpload: file not dir or file?!" + fileFull)
|
||||
return nft
|
||||
|
||||
def uploadSftp(server, user, sshkey, dir_to, dir_from, addcmd):
|
||||
ft = downloadVersionTag(server, user, sshkey, dir_to)
|
||||
if isDirectoryNeeded(ft, dir_from):
|
||||
if os.path.isfile("upload_dir.batch"):
|
||||
os.remove("upload_dir.batch")
|
||||
if os.path.isfile("upload.batch"):
|
||||
os.remove("upload.batch")
|
||||
udb = open("upload_dir.batch", "w")
|
||||
udb.write("cd " + dir_to + "\n")
|
||||
ub = open("upload.batch", "w")
|
||||
ub.write("cd " + dir_to + "\n")
|
||||
for ac in addcmd:
|
||||
ub.write(ac + "\n")
|
||||
ftn = listDirectoryUpload(ft, ub, udb, dir_from)
|
||||
if (ft > ftn):
|
||||
ftn = ft
|
||||
nft = open("upload.tag", "w")
|
||||
nft.write(str(ftn))
|
||||
nft.close()
|
||||
ub.write("put upload.tag upload.tag\n")
|
||||
ub.write("quit\n")
|
||||
ub.close()
|
||||
udb.write("quit\n")
|
||||
udb.close()
|
||||
subprocess.call([ Psftp, "-be", "-b", "upload_dir.batch", "-i", sshkey, user + "@" + server ])
|
||||
subprocess.call([ Psftp, "-b", "upload.batch", "-i", sshkey, user + "@" + server ])
|
||||
os.remove("upload_dir.batch")
|
||||
os.remove("upload.batch")
|
||||
os.remove("upload.tag")
|
||||
else:
|
||||
printLog(log, "SKIP " + dir_to)
|
||||
|
||||
printLog(log, ">>> Upload patch <<<")
|
||||
for target in UploadPatch:
|
||||
uploadSftp(target[0], target[1], target[2], target[3], ClientPatchDirectory + "/patch", [ ])
|
||||
|
||||
printLog(log, ">>> Upload data_shard <<<")
|
||||
for target in UploadShard:
|
||||
uploadSftp(target[0], target[1], target[2], target[3], DataShardDirectory, [ "rm *.packed_sheets", "rm primitive_cache/*.binprim" ])
|
||||
|
||||
printLog(log, ">>> Upload data_common <<<")
|
||||
for target in UploadCommon:
|
||||
uploadSftp(target[0], target[1], target[2], target[3], DataCommonDirectory, [ ])
|
||||
|
||||
printLog(log, ">>> Upload data_leveldesign/leveldesign <<<")
|
||||
for target in UploadLeveldesign:
|
||||
uploadSftp(target[0], target[1], target[2], target[3], LeveldesignDirectory, [ ])
|
||||
|
||||
printLog(log, ">>> Upload data_leveldesign/primitives <<<")
|
||||
for target in UploadPrimitives:
|
||||
uploadSftp(target[0], target[1], target[2], target[3], PrimitivesDirectory, [ ])
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("9_upload.log"):
|
||||
os.remove("9_upload.log")
|
||||
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_upload.log")
|
||||
shutil.move("log.log", "9_upload.log")
|
||||
|
@ -1,74 +1,74 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# \file a1_worldedit_data.py
|
||||
# \brief Install worldedit data
|
||||
# \date 2014-09-10 14:01GMT
|
||||
# \author Jan Boon (Kaetemi)
|
||||
# Python port of game data build pipeline.
|
||||
# Install worldedit data
|
||||
#
|
||||
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
# Copyright (C) 2014 by authors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||
sys.path.append("configuration")
|
||||
|
||||
if os.path.isfile("log.log"):
|
||||
os.remove("log.log")
|
||||
log = open("log.log", "w")
|
||||
from scripts import *
|
||||
from buildsite_local import *
|
||||
from tools import *
|
||||
|
||||
sys.path.append(WorkspaceDirectory)
|
||||
from projects import *
|
||||
|
||||
# Log error
|
||||
printLog(log, "")
|
||||
printLog(log, "-------")
|
||||
printLog(log, "--- Install worldedit data")
|
||||
printLog(log, "-------")
|
||||
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||
printLog(log, "")
|
||||
|
||||
for ecosystem in WorldEditEcosystems:
|
||||
ecosystemName = ecosystem[0]
|
||||
srcZoneLigos = ExportBuildDirectory + "/ecosystems/" + ecosystemName + "/ligo_es/zoneligos/"
|
||||
dstZoneLigos = WorldEditInstallDirectory + "/" + ecosystemName + "/zoneligos/"
|
||||
mkPath(log, srcZoneLigos)
|
||||
mkPath(log, dstZoneLigos)
|
||||
copyFilesNoTreeIfNeeded(log, srcZoneLigos, dstZoneLigos)
|
||||
srcZoneBitmaps = DatabaseDirectory + "/landscape/ligo/" + ecosystemName + "/zonebitmaps/"
|
||||
dstZoneBitmaps = WorldEditInstallDirectory + "/" + ecosystemName + "/zonebitmaps/"
|
||||
mkPath(log, srcZoneBitmaps)
|
||||
mkPath(log, dstZoneBitmaps)
|
||||
copyFilesExtNoTreeIfNeeded(log, srcZoneBitmaps, dstZoneBitmaps, ".tga")
|
||||
copyFilesExtNoTreeIfNeeded(log, srcZoneBitmaps, dstZoneBitmaps, ".png")
|
||||
dstCollisionMap = WorldEditInstallDirectory + "/" + ecosystemName + "/collisionmap/"
|
||||
mkPath(log, dstCollisionMap)
|
||||
for continentName in ecosystem[1]:
|
||||
srcCollisionMap = ExportBuildDirectory + "/continents/" + continentName + "/ai_wmap/"
|
||||
mkPath(log, srcCollisionMap)
|
||||
copyFilesExtNoTreeIfNeeded(log, srcCollisionMap, dstCollisionMap, ".tga")
|
||||
copyFilesExtNoTreeIfNeeded(log, srcCollisionMap, dstCollisionMap, ".png")
|
||||
printLog(log, "")
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("a1_worldedit_data.log"):
|
||||
os.remove("a1_worldedit_data.log")
|
||||
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_worldedit_data.log")
|
||||
shutil.move("log.log", "a1_worldedit_data.log")
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# \file a1_worldedit_data.py
|
||||
# \brief Install worldedit data
|
||||
# \date 2014-09-10 14:01GMT
|
||||
# \author Jan Boon (Kaetemi)
|
||||
# Python port of game data build pipeline.
|
||||
# Install worldedit data
|
||||
#
|
||||
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
# Copyright (C) 2014 by authors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||
sys.path.append("configuration")
|
||||
|
||||
if os.path.isfile("log.log"):
|
||||
os.remove("log.log")
|
||||
log = open("log.log", "w")
|
||||
from scripts import *
|
||||
from buildsite_local import *
|
||||
from tools import *
|
||||
|
||||
sys.path.append(WorkspaceDirectory)
|
||||
from projects import *
|
||||
|
||||
# Log error
|
||||
printLog(log, "")
|
||||
printLog(log, "-------")
|
||||
printLog(log, "--- Install worldedit data")
|
||||
printLog(log, "-------")
|
||||
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||
printLog(log, "")
|
||||
|
||||
for ecosystem in WorldEditEcosystems:
|
||||
ecosystemName = ecosystem[0]
|
||||
srcZoneLigos = ExportBuildDirectory + "/ecosystems/" + ecosystemName + "/ligo_es/zoneligos/"
|
||||
dstZoneLigos = WorldEditInstallDirectory + "/" + ecosystemName + "/zoneligos/"
|
||||
mkPath(log, srcZoneLigos)
|
||||
mkPath(log, dstZoneLigos)
|
||||
copyFilesNoTreeIfNeeded(log, srcZoneLigos, dstZoneLigos)
|
||||
srcZoneBitmaps = DatabaseDirectory + "/landscape/ligo/" + ecosystemName + "/zonebitmaps/"
|
||||
dstZoneBitmaps = WorldEditInstallDirectory + "/" + ecosystemName + "/zonebitmaps/"
|
||||
mkPath(log, srcZoneBitmaps)
|
||||
mkPath(log, dstZoneBitmaps)
|
||||
copyFilesExtNoTreeIfNeeded(log, srcZoneBitmaps, dstZoneBitmaps, ".tga")
|
||||
copyFilesExtNoTreeIfNeeded(log, srcZoneBitmaps, dstZoneBitmaps, ".png")
|
||||
dstCollisionMap = WorldEditInstallDirectory + "/" + ecosystemName + "/collisionmap/"
|
||||
mkPath(log, dstCollisionMap)
|
||||
for continentName in ecosystem[1]:
|
||||
srcCollisionMap = ExportBuildDirectory + "/continents/" + continentName + "/ai_wmap/"
|
||||
mkPath(log, srcCollisionMap)
|
||||
copyFilesExtNoTreeIfNeeded(log, srcCollisionMap, dstCollisionMap, ".tga")
|
||||
copyFilesExtNoTreeIfNeeded(log, srcCollisionMap, dstCollisionMap, ".png")
|
||||
printLog(log, "")
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("a1_worldedit_data.log"):
|
||||
os.remove("a1_worldedit_data.log")
|
||||
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_worldedit_data.log")
|
||||
shutil.move("log.log", "a1_worldedit_data.log")
|
||||
|
@ -1,93 +1,93 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# \file b2_shard_data.py
|
||||
# \brief Install shard data
|
||||
# \date 2009-02-18 16:19GMT
|
||||
# \author Jan Boon (Kaetemi)
|
||||
# Python port of game data build pipeline.
|
||||
# Install shard data
|
||||
#
|
||||
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
# Copyright (C) 2009-2014 by authors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||
sys.path.append("configuration")
|
||||
|
||||
if os.path.isfile("log.log"):
|
||||
os.remove("log.log")
|
||||
log = open("log.log", "w")
|
||||
from scripts import *
|
||||
from buildsite_local import *
|
||||
from tools import *
|
||||
|
||||
sys.path.append(WorkspaceDirectory)
|
||||
from projects import *
|
||||
|
||||
# Log error
|
||||
printLog(log, "")
|
||||
printLog(log, "-------")
|
||||
printLog(log, "--- Install shard data")
|
||||
printLog(log, "-------")
|
||||
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||
printLog(log, "")
|
||||
|
||||
for dir in InstallShardDataDirectories:
|
||||
printLog(log, "SHARD PACKAGE " + dir)
|
||||
mkPath(log, ShardInstallDirectory + "/" + dir)
|
||||
printLog(log, "FROM " + dir)
|
||||
mkPath(log, InstallDirectory + "/" + dir)
|
||||
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + dir, ShardInstallDirectory + "/" + dir)
|
||||
for package in InstallShardDataFiles:
|
||||
dstDir = package[0]
|
||||
mkPath(log, ShardInstallDirectory + "/" + dstDir)
|
||||
printLog(log, "SHARD PACKAGE " + dstDir)
|
||||
copyFileListNoTreeIfNeeded(log, InstallDirectory, ShardInstallDirectory + "/" + dstDir, package[1])
|
||||
for multiDir in InstallShardDataMultiDirectories:
|
||||
dstDir = multiDir[0]
|
||||
mkPath(log, ShardInstallDirectory + "/" + dstDir)
|
||||
printLog(log, "SHARD PACKAGE " + dstDir)
|
||||
for srcDir in multiDir[1]:
|
||||
printLog(log, "FROM " + srcDir)
|
||||
mkPath(log, InstallDirectory + "/" + srcDir)
|
||||
mkPath(log, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
|
||||
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + srcDir, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
|
||||
for multiDir in InstallShardDataPrimitivesDirectories:
|
||||
dstDir = multiDir[0]
|
||||
mkPath(log, ShardInstallDirectory + "/" + dstDir)
|
||||
printLog(log, "SHARD PACKAGE " + dstDir)
|
||||
for srcDir in multiDir[1]:
|
||||
printLog(log, "FROM PRIMITIVES " + srcDir)
|
||||
mkPath(log, PrimitivesDirectory + "/" + srcDir)
|
||||
mkPath(log, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
|
||||
copyFilesNoTreeIfNeeded(log, PrimitivesDirectory + "/" + srcDir, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
|
||||
for execDir in InstallShardDataExecutables:
|
||||
dstDir = execDir[0]
|
||||
mkPath(log, LinuxServiceExecutableDirectory)
|
||||
mkPath(log, PatchmanCfgDefaultDirectory)
|
||||
mkPath(log, InstallDirectory)
|
||||
mkPath(log, ShardInstallDirectory + "/" + dstDir)
|
||||
printLog(log, "SHARD PACKAGE " + dstDir)
|
||||
copyFileIfNeeded(log, LinuxServiceExecutableDirectory + "/" + execDir[1][1], ShardInstallDirectory + "/" + dstDir + "/" + execDir[1][0])
|
||||
copyFileListNoTreeIfNeeded(log, PatchmanCfgDefaultDirectory, ShardInstallDirectory + "/" + dstDir, execDir[2])
|
||||
copyFileListNoTreeIfNeeded(log, InstallDirectory, ShardInstallDirectory + "/" + dstDir, execDir[3])
|
||||
printLog(log, "")
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("b2_shard_data.log"):
|
||||
os.remove("b2_shard_data.log")
|
||||
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_shard_data.log")
|
||||
shutil.move("log.log", "b2_shard_data.log")
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# \file b2_shard_data.py
|
||||
# \brief Install shard data
|
||||
# \date 2009-02-18 16:19GMT
|
||||
# \author Jan Boon (Kaetemi)
|
||||
# Python port of game data build pipeline.
|
||||
# Install shard data
|
||||
#
|
||||
# NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||||
# Copyright (C) 2009-2014 by authors
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as
|
||||
# published by the Free Software Foundation, either version 3 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time, sys, os, shutil, subprocess, distutils.dir_util
|
||||
sys.path.append("configuration")
|
||||
|
||||
if os.path.isfile("log.log"):
|
||||
os.remove("log.log")
|
||||
log = open("log.log", "w")
|
||||
from scripts import *
|
||||
from buildsite_local import *
|
||||
from tools import *
|
||||
|
||||
sys.path.append(WorkspaceDirectory)
|
||||
from projects import *
|
||||
|
||||
# Log error
|
||||
printLog(log, "")
|
||||
printLog(log, "-------")
|
||||
printLog(log, "--- Install shard data")
|
||||
printLog(log, "-------")
|
||||
printLog(log, time.strftime("%Y-%m-%d %H:%MGMT", time.gmtime(time.time())))
|
||||
printLog(log, "")
|
||||
|
||||
for dir in InstallShardDataDirectories:
|
||||
printLog(log, "SHARD PACKAGE " + dir)
|
||||
mkPath(log, ShardInstallDirectory + "/" + dir)
|
||||
printLog(log, "FROM " + dir)
|
||||
mkPath(log, InstallDirectory + "/" + dir)
|
||||
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + dir, ShardInstallDirectory + "/" + dir)
|
||||
for package in InstallShardDataFiles:
|
||||
dstDir = package[0]
|
||||
mkPath(log, ShardInstallDirectory + "/" + dstDir)
|
||||
printLog(log, "SHARD PACKAGE " + dstDir)
|
||||
copyFileListNoTreeIfNeeded(log, InstallDirectory, ShardInstallDirectory + "/" + dstDir, package[1])
|
||||
for multiDir in InstallShardDataMultiDirectories:
|
||||
dstDir = multiDir[0]
|
||||
mkPath(log, ShardInstallDirectory + "/" + dstDir)
|
||||
printLog(log, "SHARD PACKAGE " + dstDir)
|
||||
for srcDir in multiDir[1]:
|
||||
printLog(log, "FROM " + srcDir)
|
||||
mkPath(log, InstallDirectory + "/" + srcDir)
|
||||
mkPath(log, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
|
||||
copyFilesNoTreeIfNeeded(log, InstallDirectory + "/" + srcDir, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
|
||||
for multiDir in InstallShardDataPrimitivesDirectories:
|
||||
dstDir = multiDir[0]
|
||||
mkPath(log, ShardInstallDirectory + "/" + dstDir)
|
||||
printLog(log, "SHARD PACKAGE " + dstDir)
|
||||
for srcDir in multiDir[1]:
|
||||
printLog(log, "FROM PRIMITIVES " + srcDir)
|
||||
mkPath(log, PrimitivesDirectory + "/" + srcDir)
|
||||
mkPath(log, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
|
||||
copyFilesNoTreeIfNeeded(log, PrimitivesDirectory + "/" + srcDir, ShardInstallDirectory + "/" + dstDir + "/" + srcDir)
|
||||
for execDir in InstallShardDataExecutables:
|
||||
dstDir = execDir[0]
|
||||
mkPath(log, LinuxServiceExecutableDirectory)
|
||||
mkPath(log, PatchmanCfgDefaultDirectory)
|
||||
mkPath(log, InstallDirectory)
|
||||
mkPath(log, ShardInstallDirectory + "/" + dstDir)
|
||||
printLog(log, "SHARD PACKAGE " + dstDir)
|
||||
copyFileIfNeeded(log, LinuxServiceExecutableDirectory + "/" + execDir[1][1], ShardInstallDirectory + "/" + dstDir + "/" + execDir[1][0])
|
||||
copyFileListNoTreeIfNeeded(log, PatchmanCfgDefaultDirectory, ShardInstallDirectory + "/" + dstDir, execDir[2])
|
||||
copyFileListNoTreeIfNeeded(log, InstallDirectory, ShardInstallDirectory + "/" + dstDir, execDir[3])
|
||||
printLog(log, "")
|
||||
|
||||
log.close()
|
||||
if os.path.isfile("b2_shard_data.log"):
|
||||
os.remove("b2_shard_data.log")
|
||||
shutil.copy("log.log", time.strftime("%Y-%m-%d-%H-%M-GMT", time.gmtime(time.time())) + "_shard_data.log")
|
||||
shutil.move("log.log", "b2_shard_data.log")
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue