Compare commits
2524 Commits
feature/ne
...
main/gingo
Author | SHA1 | Date |
---|---|---|
Nuno Gonçalves (Ulukyn) | 7df9b2f255 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 8697553956 | 3 years ago |
nimetu | d2508c8b15 | 3 years ago |
Nuno Gonçalves (Ulukyn) | d385dedabc | 3 years ago |
Nuno Gonçalves (Ulukyn) | ae33eb99bf | 3 years ago |
Nuno Gonçalves (Ulukyn) | 2b88fd66ba | 3 years ago |
Ben Saine | be5bfd992c | 3 years ago |
Nuno Gonçalves (Ulukyn) | 9a24e7557f | 3 years ago |
Nuno Gonçalves (Ulukyn) | 8708fd74c6 | 3 years ago |
Nuno | db86219eab | 3 years ago |
Nuno Gonçalves (Ulukyn) | c6ec8a8d7d | 3 years ago |
Ben Saine | 357934fcde | 3 years ago |
Nuno Gonçalves (Ulukyn) | e784c3aab1 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 22b4c074e8 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 255257a7f5 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 855410f3d0 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 71a2c6f6e8 | 3 years ago |
Ben Saine | 3b2553e3dd | 3 years ago |
Nuno Gonçalves (Ulukyn) | 54c7e09a10 | 3 years ago |
Meelis Mägi | aebab35cad | 3 years ago |
Nuno Gonçalves (Ulukyn) | 7cb6d4287e | 3 years ago |
Meelis Mägi | 663de25cbe | 3 years ago |
Nuno | a7811f553e | 3 years ago |
Nuno | 743bf7f601 | 3 years ago |
Nuno Gonçalves (Ulukyn) | e891dddd1e | 3 years ago |
Meelis Mägi | e185ddc19f | 3 years ago |
Nuno Gonçalves (Ulukyn) | b12c7ac25c | 3 years ago |
Meelis Mägi | 9cff221a1e | 3 years ago |
Nuno Gonçalves (Ulukyn) | 219bf0e066 | 3 years ago |
Meelis Mägi | c012e7ffcf | 3 years ago |
Ben Saine | 82b724fe88 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 9f2d2e7dda | 3 years ago |
Ben Saine | 5df8ec43a0 | 3 years ago |
Nimetu | 7c82f26bac | 3 years ago |
Nimetu | 3521d2d02e | 3 years ago |
Nuno | 88280ef02f | 3 years ago |
Nimetu | 7344c98e6e | 3 years ago |
Nimetu | 005e714f7d | 3 years ago |
Nimetu | 37abc25dcb | 3 years ago |
kaetemi | ec41ba753f | 3 years ago |
kaetemi | 63b4ea547a | 3 years ago |
Nimetu | c31747a939 | 3 years ago |
Nimetu | 8aa1aed3bd | 3 years ago |
Nimetu | 19c5b582bc | 3 years ago |
Nuno | 993d749dba | 3 years ago |
Nimetu | f6ac9bc4c1 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 9e3064871a | 3 years ago |
Nimetu | 36e83e32f4 | 3 years ago |
Nuno | 0df3879358 | 3 years ago |
Nuno | b7e5ac18e9 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 80623a20cc | 3 years ago |
Nuno Gonçalves (Ulukyn) | efbceec12e | 3 years ago |
Nimetu | 013aad73d2 | 3 years ago |
Nuno | de638dfe6c | 3 years ago |
Nuno | 177e2395a5 | 3 years ago |
Nuno | 0e2ec103ab | 3 years ago |
Nuno | 574efe0c36 | 3 years ago |
Nuno | e43515e88a | 3 years ago |
Nuno | 41794a1122 | 3 years ago |
Nimetu | c47db9bf94 | 3 years ago |
Nimetu | b325126b20 | 3 years ago |
Nuno | 35a7a6628b | 3 years ago |
Nimetu | aa34e88101 | 3 years ago |
Nuno | b667ccb6b6 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 568d8ab895 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 7f01b21d11 | 3 years ago |
Nuno Gonçalves (Ulukyn) | d436d5616a | 3 years ago |
Nuno Gonçalves (Ulukyn) | 973e183f2e | 3 years ago |
Nuno | 5c56c87d09 | 3 years ago |
Nuno | c616010246 | 3 years ago |
Nuno | 700a9aadb7 | 3 years ago |
Nuno Gonçalves (Ulukyn) | a246f3e5d0 | 3 years ago |
Meelis Mägi | bbc291b9d3 | 3 years ago |
Nuno Gonçalves (Ulukyn) | a64981a92a | 3 years ago |
Nuno Gonçalves (Ulukyn) | 17c9dd061a | 3 years ago |
Ben Saine | b72a71e87c | 3 years ago |
bensaine | b4ce38099f | 3 years ago |
Nimetu | 9eaf7d3550 | 3 years ago |
Nimetu | 26827d2c66 | 3 years ago |
Nuno Gonçalves (Ulukyn) | b6781af51e | 3 years ago |
Nuno Gonçalves (Ulukyn) | e1b611f219 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 8d7932a271 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 0cc7a35dad | 3 years ago |
Nuno | 2304445c39 | 3 years ago |
Ulu Kyn | 701d7309e5 | 3 years ago |
Ulu Kyn | f3d0c9dc5b | 3 years ago |
Ulu Kyn | a71f022c1a | 3 years ago |
Nuno | cc3d42737e | 3 years ago |
Nuno | 1e590f1a69 | 3 years ago |
Nuno | f450b57be0 | 3 years ago |
Nuno | fbb343ad51 | 3 years ago |
bensaine | e1527b724b | 3 years ago |
bensaine | c3a633ae50 | 3 years ago |
Nuno | a76e8e1a64 | 3 years ago |
Nuno | 2df441225c | 3 years ago |
Nuno | 56cbc51005 | 3 years ago |
Nuno | 7ce53abffe | 3 years ago |
Nuno | 4c4028822e | 3 years ago |
Nuno | b4323b6515 | 3 years ago |
Nuno | 9923062417 | 3 years ago |
Nuno | 8f74ba7851 | 3 years ago |
Nuno | d6f367b2ba | 3 years ago |
Nuno | 3f5c3c5d98 | 3 years ago |
Nuno | 514f4613a8 | 3 years ago |
Ben Saine | 24b0c99034 | 3 years ago |
Nuno | 3dc2aa1bb6 | 3 years ago |
Nuno | 543be4bc4c | 3 years ago |
Nuno | 80007bc602 | 3 years ago |
Nuno | cf9855a6d5 | 3 years ago |
Nuno | bec18c661d | 3 years ago |
Nimetu | 13eef096b4 | 3 years ago |
Nimetu | d8deff3f23 | 3 years ago |
Nimetu | 2efc16ce52 | 3 years ago |
Nimetu | 5064f0417b | 3 years ago |
Nimetu | d893d15daf | 3 years ago |
kaetemi | 82ef7e5e81 | 3 years ago |
kaetemi | 8f839dc9c7 | 3 years ago |
kaetemi | 5fcaafbc60 | 3 years ago |
kaetemi | 6d60cfee71 | 3 years ago |
kaetemi | 3076b62063 | 3 years ago |
kaetemi | 3d208e024d | 3 years ago |
kaetemi | af16f09d52 | 3 years ago |
kaetemi | b9d4aa2abd | 3 years ago |
Nimetu | 759ece01d0 | 3 years ago |
Nuno | 4a06fe15dd | 3 years ago |
Nuno | 575d5d9957 | 3 years ago |
Nuno | 0d68ca05e2 | 3 years ago |
Nuno | 6091e76516 | 3 years ago |
Nuno | 0fbbf10361 | 3 years ago |
Nuno | 557f5d3d6c | 3 years ago |
Nuno | d7d1bc60c2 | 3 years ago |
Nuno | 3709ea4520 | 3 years ago |
Nuno | 70286d36a9 | 3 years ago |
Ulu Kyn | 92ff9f12b0 | 3 years ago |
Nimetu | 8cbb306db8 | 3 years ago |
Nuno | 36c2ff5b86 | 3 years ago |
Nuno | 1a49c4cd0b | 3 years ago |
Ben Saine | 111d4a7a0a | 3 years ago |
bensaine | 6cfc9585f5 | 3 years ago |
Nimetu | f76ad7a3eb | 3 years ago |
Nimetu | ce0d1234cc | 3 years ago |
Nuno Gonçalves (Ulukyn) | 5d91c33ddd | 3 years ago |
Nimetu | 78478e32cd | 3 years ago |
Nimetu | ea6e4d91c3 | 3 years ago |
Nimetu | d388ff78ec | 3 years ago |
Nimetu | 0b503e352b | 3 years ago |
Nimetu | df4833bf0f | 3 years ago |
Nuno Gonçalves (Ulukyn) | 8ef89b80b0 | 3 years ago |
Nuno Gonçalves (Ulukyn) | bdea7d24d2 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 90161cd121 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 583a16d126 | 3 years ago |
Nimetu | 591ea6869e | 3 years ago |
Nuno Gonçalves (Ulukyn) | 01a2508567 | 3 years ago |
Nuno Gonçalves (Ulukyn) | b86b9283b2 | 3 years ago |
Nimetu | 0225beefa6 | 3 years ago |
Nimetu | 0de1580520 | 3 years ago |
Nimetu | d9dd9863b7 | 3 years ago |
Ulukyn | 7bed39665e | 3 years ago |
Nimetu | 9ecda65791 | 3 years ago |
Nimetu | fc6ecc7dbd | 3 years ago |
Nimetu | 5c53148907 | 3 years ago |
Nimetu | 028f6cdd3e | 3 years ago |
Nuno | 6a1ea5ff59 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 72ccfc9a02 | 3 years ago |
Ulukyn | 0e2a14c822 | 3 years ago |
Nimetu | a4248d5fa1 | 3 years ago |
Nimetu | 984b2b3590 | 3 years ago |
Nimetu | 3f3991816b | 3 years ago |
Nimetu | e0d54f7897 | 3 years ago |
Nimetu | 37eec8cd7f | 3 years ago |
Nimetu | 2046c4bf6e | 3 years ago |
Nimetu | 12c515c264 | 3 years ago |
Nimetu | 285cfb163f | 3 years ago |
Nimetu | a40ddf7955 | 3 years ago |
Nimetu | dff191a7c2 | 3 years ago |
Nimetu | f26dc534c8 | 3 years ago |
Nimetu | dfe45029ab | 3 years ago |
Nimetu | 65edd9f95d | 3 years ago |
Nuno | 4331e35227 | 3 years ago |
Nuno Gonçalves (Ulukyn) | ce5817721a | 3 years ago |
Nuno Gonçalves (Ulukyn) | aae899b65a | 3 years ago |
Nimetu | 487f9f060e | 3 years ago |
Nimetu | 2e816ddf6e | 3 years ago |
Nimetu | 5d4a04169b | 3 years ago |
Nimetu | b2ec03d1a1 | 3 years ago |
Nimetu | 234465387b | 3 years ago |
Nimetu | 2133f6d2b7 | 3 years ago |
Nimetu | 63f1fb73dd | 3 years ago |
Nimetu | a040f7a2a8 | 3 years ago |
Nimetu | 565932c18d | 3 years ago |
Nimetu | cade609a3a | 3 years ago |
Nimetu | 093702a704 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 4c66865de7 | 3 years ago |
Nimetu | c00a9be398 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 458861951b | 3 years ago |
Nuno Gonçalves (Ulukyn) | 3f991d3781 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 8d5c0facf8 | 3 years ago |
Nuno Gonçalves (Ulukyn) | 178a22d961 | 3 years ago |
Nuno Gonçalves (Ulukyn) | f9dafe720c | 3 years ago |
Nuno Gonçalves (Ulukyn) | 72691a3379 | 3 years ago |
Nuno Gonçalves (Ulukyn) | bc991c8146 | 3 years ago |
Riasan | 62a821bc1d | 3 years ago |
Riasan | 103179ece7 | 3 years ago |
Nimetu | 19d0162332 | 3 years ago |
Nimetu | 5bf139f690 | 3 years ago |
Nimetu | d0d38238a8 | 3 years ago |
Nimetu | 95716b65ca | 3 years ago |
Nimetu | 75f490d394 | 3 years ago |
Nuno | 64bff20e03 | 4 years ago |
Nuno | 1eb651a946 | 4 years ago |
Nuno | 7da7d8cbbe | 4 years ago |
Nuno | 0ee26a6488 | 4 years ago |
Nuno | 9e404a5965 | 4 years ago |
Nuno | 97099768dc | 4 years ago |
kaetemi | 7d1661df42 | 4 years ago |
kaetemi | 19a0d929bb | 4 years ago |
Nuno | a443848924 | 4 years ago |
Nuno | ca0dc24aa0 | 4 years ago |
Nuno | 6d68e96dd4 | 4 years ago |
kaetemi | 0c5f4cdc1a | 4 years ago |
kaetemi | 8a7e96f7a6 | 4 years ago |
kaetemi | a227dccbb8 | 4 years ago |
kaetemi | 6d4b58c281 | 4 years ago |
kaetemi | fcf97d93df | 4 years ago |
kaetemi | c5658cfe26 | 4 years ago |
Nimetu | bc0071ac57 | 4 years ago |
kaetemi | 37a729b5cc | 4 years ago |
Nuno Gonçalves (Ulukyn) | efc1883cca | 4 years ago |
Nuno | 83a021e1e6 | 4 years ago |
kaetemi | 9d303b2a9a | 4 years ago |
Nuno | 58b5941bbe | 4 years ago |
Nuno | 431b1ea339 | 4 years ago |
kaetemi | c70ca1f8ab | 4 years ago |
Nuno | 6c3d6403b0 | 4 years ago |
Nuno | 405974c9c0 | 4 years ago |
kaetemi | bb03f80d84 | 4 years ago |
kaetemi | c6f8baa058 | 4 years ago |
kaetemi | 2c167fb360 | 4 years ago |
kaetemi | b9bdabd1f0 | 4 years ago |
kaetemi | d4a3a5bc06 | 4 years ago |
kaetemi | cdc2cacfc0 | 4 years ago |
kaetemi | c5ed59638e | 4 years ago |
kaetemi | 85ec6e618e | 4 years ago |
kaetemi | 1aba4c13cb | 4 years ago |
kaetemi | 56d747fa02 | 4 years ago |
Nuno | cc5bd3ddae | 4 years ago |
Nuno | 5613eb855e | 4 years ago |
Nimetu | 5614028f63 | 4 years ago |
Nimetu | a28bda89e6 | 4 years ago |
Nimetu | b2d6c313db | 4 years ago |
Nuno | 74c643f147 | 4 years ago |
Nuno | 3d43c3c626 | 4 years ago |
Nimetu | 78fa873003 | 4 years ago |
Nimetu | 96a03d1cf5 | 4 years ago |
Nimetu | 52e0e71c4a | 4 years ago |
Nimetu | 3b91146d23 | 4 years ago |
Nimetu | 474802810b | 4 years ago |
Nuno | 6bd853f7bf | 4 years ago |
Nuno | 49b4295765 | 4 years ago |
Nimetu | 1e465b6cff | 4 years ago |
Nimetu | 5abdccfd63 | 4 years ago |
Nimetu | a7bc98b0b4 | 4 years ago |
Nimetu | 825d70a80e | 4 years ago |
Nimetu | acd12c7c37 | 4 years ago |
Nimetu | aaa699014e | 4 years ago |
Nimetu | 624d78fe1a | 4 years ago |
Nimetu | f8d498e4b2 | 4 years ago |
Nimetu | cd4914ab94 | 4 years ago |
Nimetu | 3362afaa4d | 4 years ago |
Nuno | c5b34c927e | 4 years ago |
Nuno | fa3eab3305 | 4 years ago |
Nuno | 7d1534fb31 | 4 years ago |
Nuno | 791eb639df | 4 years ago |
Nuno | 772990d421 | 4 years ago |
Nuno | c8fd716f8a | 4 years ago |
Nuno | 72f7cbe4fa | 4 years ago |
Nuno | 9d2fc8c630 | 4 years ago |
Nuno | b4e54d5ad4 | 4 years ago |
Nuno | 904daebd88 | 4 years ago |
Nuno | 9c996b5fe3 | 4 years ago |
Nuno | 7964a42927 | 4 years ago |
Nuno | 24cb13d744 | 4 years ago |
Nuno | c8f4a85f0c | 4 years ago |
Nuno | 7bd936ea24 | 4 years ago |
Nuno | 4bcea9a70e | 4 years ago |
Nuno | 762e3b603e | 4 years ago |
Nuno | 292e142319 | 4 years ago |
Nuno | cdb1786018 | 4 years ago |
Nimetu | 1299484163 | 4 years ago |
Nimetu | 668e15e394 | 4 years ago |
Sit Melai | cdf1bacee1 | 4 years ago |
Nuno | 1ec4f88471 | 4 years ago |
Sit Melai | 673ce18e72 | 4 years ago |
Nuno | 54fd022501 | 4 years ago |
Nuno | 5fe26ec6d6 | 4 years ago |
Nuno | 40a9e782c3 | 4 years ago |
Nuno | 155e268ece | 4 years ago |
Nuno | 649527039b | 4 years ago |
Nuno | d350b1621d | 4 years ago |
Nuno | 22bab29654 | 4 years ago |
Nuno | 5632fffa44 | 4 years ago |
Nuno | 1cc000cc6c | 4 years ago |
Nuno | e9b7345ba5 | 4 years ago |
Nuno | 6f4319bfcb | 4 years ago |
Nuno | ab958d1891 | 4 years ago |
Nuno | c3c7e15c81 | 4 years ago |
Nuno | 568a7a10a9 | 4 years ago |
Nuno | f886d5eac7 | 4 years ago |
Nuno | 540ab1ffc8 | 4 years ago |
Nuno | 629e8f5272 | 4 years ago |
Nuno | 868f462d5f | 4 years ago |
Nuno | 5a7d067a71 | 4 years ago |
Nuno | 17f818eace | 4 years ago |
Nuno | 5825332757 | 4 years ago |
Nimetu | c1170a0a4d | 4 years ago |
Nimetu | 291d332b56 | 4 years ago |
Nimetu | d8f54820c4 | 4 years ago |
Nimetu | 155418b20b | 4 years ago |
Nimetu | d665e1fc45 | 4 years ago |
Nimetu | 36f9888b91 | 4 years ago |
Nimetu | 17782d5d21 | 4 years ago |
Nimetu | 8f1db24504 | 4 years ago |
Nuno | 85e788da81 | 4 years ago |
Nimetu | 04b4ae5333 | 4 years ago |
Nimetu | cc44eaf935 | 4 years ago |
Nimetu | e1e7bd837c | 4 years ago |
Nimetu | e5c0c63e3e | 4 years ago |
Nimetu | dbc77c7fc0 | 4 years ago |
Nimetu | db7afb07bd | 4 years ago |
Nimetu | 95cacf75a6 | 4 years ago |
Nimetu | 92eb1dcdc7 | 4 years ago |
Nimetu | 89a921e140 | 4 years ago |
Nimetu | 87e88cee6f | 4 years ago |
Nimetu | 36d482e6d1 | 4 years ago |
Nimetu | 4505ecf8a2 | 4 years ago |
Nimetu | 2f5b4d7c5b | 4 years ago |
Nimetu | 27826eb448 | 4 years ago |
Nimetu | d210c23b26 | 4 years ago |
Nimetu | 9262302baa | 4 years ago |
Nuno | 54de87acf4 | 4 years ago |
Nuno | ebab993e3e | 4 years ago |
Nuno | 3613dfd305 | 4 years ago |
Nuno | c09f82db16 | 4 years ago |
Nuno | 6402a31e4e | 4 years ago |
Nuno | 27cdcf1e02 | 4 years ago |
Nuno | de90245f27 | 4 years ago |
Nuno | bf2f8e39a5 | 4 years ago |
Nimetu | 26482eef1b | 4 years ago |
Nimetu | 383e362ed7 | 4 years ago |
Nimetu | c09ed63120 | 4 years ago |
Nimetu | fdb271bdb3 | 4 years ago |
kaetemi | dba92deea5 | 4 years ago |
Nuno | 0fb9422426 | 4 years ago |
kaetemi | 2528e542cb | 4 years ago |
kaetemi | 719f178f70 | 4 years ago |
Riasan | f83d8a206e | 4 years ago |
Riasan | 8cd863ff44 | 4 years ago |
Nuno | 89065eee3f | 4 years ago |
Sit Melai | 91b3ff25b4 | 4 years ago |
Nimetu | 4bcf9270eb | 4 years ago |
Sit Melai | c75071b488 | 4 years ago |
Nimetu | 04a5aa372b | 4 years ago |
Nimetu | 65415dfc55 | 4 years ago |
Nimetu | 29ef76e537 | 4 years ago |
Nimetu | 040eee5c9e | 4 years ago |
Nimetu | c6ede4a8b4 | 4 years ago |
Nuno | adf9a646b7 | 4 years ago |
Nuno | 2aaa928cdc | 4 years ago |
Nuno | 83d0e600f1 | 4 years ago |
Nuno | df69a1706f | 4 years ago |
Nuno | 6651e839f3 | 4 years ago |
Nuno | 62be2ab1fb | 4 years ago |
Nuno | 8c62f4e64c | 4 years ago |
Nuno | 2075bf7443 | 4 years ago |
Nuno | 44caf59afd | 4 years ago |
Nuno | 057cf828f4 | 4 years ago |
Nuno | 8d2071524c | 4 years ago |
Nuno | 6db93a0ef0 | 4 years ago |
Nuno | f61d10c75e | 4 years ago |
Nuno | 90728f372a | 4 years ago |
Nuno | 8fa5de61e3 | 4 years ago |
Nuno | 74dbe1e52c | 4 years ago |
Nuno | 6adf44f0b0 | 4 years ago |
Nuno | 98124a3bd5 | 4 years ago |
Nuno | 46ecaac095 | 4 years ago |
Nuno | 06e2840be5 | 4 years ago |
Nuno | bbabe75247 | 4 years ago |
Nuno | b62ddc49d2 | 4 years ago |
Nuno | 690286b2c4 | 4 years ago |
Nuno | ada7dec7d3 | 4 years ago |
Nuno | 98b091ab63 | 4 years ago |
Nuno | 53252d40db | 4 years ago |
Nuno | 2b648934ea | 4 years ago |
Nuno | 46c7b0309d | 4 years ago |
Nuno | 347ed4b2fb | 4 years ago |
Nuno | b9d29d5cfe | 4 years ago |
Nuno | ea212bcba2 | 4 years ago |
Nuno | 281ec4ba60 | 4 years ago |
Nuno | 951f000be4 | 4 years ago |
Nuno | 4726e74dcd | 4 years ago |
Nuno | c5fffb9ff0 | 4 years ago |
Nuno | ae9989dfe4 | 4 years ago |
Nuno | d35ae0db80 | 4 years ago |
Nuno | 3dbdbad80a | 4 years ago |
Riasan | 0a81f40606 | 4 years ago |
kaetemi | 00037b3644 | 4 years ago |
Nuno | c63b21150e | 4 years ago |
Nuno | 9771d79bc3 | 4 years ago |
kaetemi | ea1b3dbc28 | 4 years ago |
kaetemi | 93ad5e469c | 4 years ago |
kaetemi | b6b05b595a | 4 years ago |
kaetemi | 46410206ad | 4 years ago |
Nimetu | b70573d1dc | 4 years ago |
Nimetu | 7111cf44b3 | 4 years ago |
Nimetu | cb77552121 | 4 years ago |
Nuno | 2bf8faf29e | 4 years ago |
Nuno | b984e2e3d8 | 4 years ago |
Nuno | 140c380eb5 | 4 years ago |
Nuno | 1225fc0fe8 | 4 years ago |
Nuno | 13cb05c732 | 4 years ago |
Nimetu | f39038f98d | 4 years ago |
Nimetu | 990c38ca81 | 4 years ago |
Nimetu | 661a2bdaf7 | 4 years ago |
Nuno | f84184af25 | 4 years ago |
Nuno | 4b6e0184a3 | 4 years ago |
kaetemi | 87b5a77d4f | 4 years ago |
Nuno | 269526e87f | 4 years ago |
kaetemi | 30ece314c5 | 4 years ago |
Nuno | b8668813df | 4 years ago |
Nuno | 6f9dce0fdc | 4 years ago |
kaetemi | 3164e5fe3e | 4 years ago |
kaetemi | 06be2d003c | 4 years ago |
kaetemi | 06006cffd3 | 4 years ago |
kaetemi | 8fff5b8754 | 4 years ago |
kaetemi | 00520d6c11 | 4 years ago |
Nuno | fd8b2436ff | 4 years ago |
Nuno | 588bd79535 | 4 years ago |
Nuno | ced0ca3e1c | 4 years ago |
Nimetu | 76d29b2eda | 4 years ago |
kaetemi | a1f1bd888c | 4 years ago |
kaetemi | e998d3a85c | 4 years ago |
kaetemi | 5c3b0cf14b | 4 years ago |
Nuno | c327303222 | 4 years ago |
Nuno | 864eba1629 | 4 years ago |
Nuno | 29c3651063 | 4 years ago |
Nimetu | d9d9c6e1e6 | 4 years ago |
Nimetu | 779f87d6e7 | 4 years ago |
Nimetu | 53437989d4 | 4 years ago |
Nuno | acfb37103f | 4 years ago |
Nuno | 3d38a8ca89 | 4 years ago |
Nuno | 4f34ce36ae | 4 years ago |
Nuno | 8d2b26b738 | 4 years ago |
Nuno | 79e65a6b9e | 4 years ago |
Nuno | 6e59af8dc9 | 4 years ago |
Nuno | d23166ae49 | 4 years ago |
Nuno | 0b110c6a88 | 4 years ago |
Nuno | 13398f094a | 4 years ago |
Nuno | 7018a4439c | 4 years ago |
Riasan | cbbbc74a60 | 4 years ago |
Nuno | dab6321caa | 4 years ago |
Nuno | 07390fed37 | 4 years ago |
Nuno | ec98cd2e65 | 4 years ago |
Nuno | ad52a23437 | 4 years ago |
Nuno | c78d1d934f | 4 years ago |
Nuno | 677933ed98 | 4 years ago |
Nuno | 541529bb3f | 4 years ago |
Nuno | a273f78851 | 4 years ago |
Nuno | cb207bdd9d | 4 years ago |
Nuno | 8ec332fefa | 4 years ago |
Nuno | 2f776eab9c | 4 years ago |
Nuno | 04aa097781 | 4 years ago |
Nuno | 3996327394 | 4 years ago |
Nuno | 27e553ccb5 | 4 years ago |
Nimetu | 6bed86797b | 4 years ago |
Nuno | 323be1612e | 4 years ago |
Nuno | 184582cfc9 | 4 years ago |
Nimetu | e39cd0a8d3 | 4 years ago |
Nuno | 0b9599c57b | 4 years ago |
Sit Melai | 9d7f2af1a7 | 4 years ago |
Nuno | e021c09051 | 4 years ago |
Nuno | 52ff736ee9 | 4 years ago |
Nuno | d2c56f4b7c | 4 years ago |
Nuno | 2bdc6fb7ae | 4 years ago |
Nuno | a848eab99c | 4 years ago |
kaetemi | abf2715fa3 | 4 years ago |
kaetemi | 147cb75a80 | 4 years ago |
kaetemi | 3df1fd3857 | 4 years ago |
kaetemi | 257f6a6e23 | 4 years ago |
kaetemi | aa7d667b10 | 4 years ago |
kaetemi | 813b4d72d1 | 4 years ago |
kaetemi | b3bed095f8 | 4 years ago |
kaetemi | 210515addd | 4 years ago |
kaetemi | 57fbaf1feb | 4 years ago |
kaetemi | d6fe42f6a0 | 4 years ago |
kaetemi | 47d6e09099 | 4 years ago |
kaetemi | 23110247de | 4 years ago |
Nimetu | f3f67af69e | 4 years ago |
kaetemi | b1ef06d900 | 4 years ago |
kaetemi | 470b48ea0d | 4 years ago |
kaetemi | b0f1c73d77 | 4 years ago |
kaetemi | 109ed7eba5 | 4 years ago |
Nuno | 9ae2df4527 | 4 years ago |
kaetemi | f9cc9a1abe | 4 years ago |
kaetemi | 2e0b00d93c | 4 years ago |
kaetemi | 14da4d1e61 | 4 years ago |
kaetemi | 66ef424af0 | 4 years ago |
kaetemi | b884360c0e | 4 years ago |
kaetemi | 5fed277adf | 4 years ago |
kaetemi | cb949ae13a | 4 years ago |
kaetemi | c770191bef | 4 years ago |
Nimetu | 762962ef25 | 4 years ago |
Nimetu | 9f3250f4db | 4 years ago |
kaetemi | 8809d39835 | 4 years ago |
kaetemi | 773f27dfcb | 4 years ago |
kaetemi | 99df03dad0 | 4 years ago |
kaetemi | e20af7828a | 4 years ago |
kaetemi | bb564a6302 | 4 years ago |
kaetemi | 3b6e27e800 | 4 years ago |
kaetemi | 297de1d19a | 4 years ago |
kaetemi | 2444d94f4f | 4 years ago |
kaetemi | 0d2633b697 | 4 years ago |
kaetemi | c9f967b52b | 4 years ago |
kaetemi | e9fdac30a2 | 4 years ago |
kaetemi | 64b978b77a | 4 years ago |
kaetemi | 0ba45054d0 | 4 years ago |
kaetemi | f50b59702e | 4 years ago |
kaetemi | b220dac7b3 | 4 years ago |
Nimetu | 465a36b250 | 4 years ago |
Nimetu | e8c18b1b44 | 4 years ago |
Nimetu | 73610be10d | 4 years ago |
Nimetu | 72098f624d | 4 years ago |
kaetemi | 91bceae902 | 4 years ago |
kaetemi | be60cf8978 | 4 years ago |
kaetemi | 5bb21d7aa0 | 4 years ago |
kaetemi | 745db95184 | 4 years ago |
kaetemi | 3dfc6d5807 | 4 years ago |
kaetemi | f8de4aff59 | 4 years ago |
kaetemi | 36c676e2b2 | 4 years ago |
kaetemi | 281630c280 | 4 years ago |
kaetemi | ffa6179b82 | 4 years ago |
kaetemi | 73b8ba9e4e | 4 years ago |
kaetemi | 11b453baaa | 4 years ago |
kaetemi | 0dfff69c6f | 4 years ago |
kaetemi | c27547c3a3 | 4 years ago |
kaetemi | 52e3ca024f | 4 years ago |
kaetemi | 298e912949 | 4 years ago |
kaetemi | c069b70ce8 | 4 years ago |
Jan Boon | f859a39da4 | 4 years ago |
Jan Boon | 9d3891f1aa | 4 years ago |
Jan Boon | 2bb13937e8 | 4 years ago |
Jan Boon | afa22ee22b | 4 years ago |
Jan Boon | 6c247256d2 | 4 years ago |
Jan Boon | da9254e748 | 4 years ago |
Jan Boon | a1337dbda9 | 4 years ago |
kaetemi | 04805ec38c | 4 years ago |
Jan Boon | cd8ed8ab57 | 4 years ago |
kaetemi | 1a6e5e6e2b | 4 years ago |
kaetemi | 7249546db6 | 4 years ago |
kaetemi | 7adbb84514 | 4 years ago |
kaetemi | eac2aed175 | 4 years ago |
Jan Boon | 3a2922021e | 4 years ago |
kaetemi | 32ce3667a3 | 4 years ago |
kaetemi | e2afa4db5b | 4 years ago |
kaetemi | d201b8a392 | 4 years ago |
kaetemi | 72d9f8ea4f | 4 years ago |
kaetemi | ad0e970785 | 4 years ago |
kaetemi | 5fe2fae8b0 | 4 years ago |
kaetemi | 2d9f10bee3 | 4 years ago |
kaetemi | ecabc00ec5 | 4 years ago |
kaetemi | 5a470a7b16 | 4 years ago |
kaetemi | 9d534882e8 | 4 years ago |
kaetemi | 246ea2f603 | 4 years ago |
kaetemi | 7e8f84462f | 4 years ago |
kaetemi | 22fd1132ed | 4 years ago |
kaetemi | 0629951ba6 | 4 years ago |
kaetemi | 1c09d2ea4b | 4 years ago |
kaetemi | 13f99b393f | 4 years ago |
kaetemi | c061f3df3a | 4 years ago |
kaetemi | d238d2122b | 4 years ago |
kaetemi | 2a7bf997b9 | 4 years ago |
kaetemi | 39fc4895d2 | 4 years ago |
kaetemi | 7812ccafc1 | 4 years ago |
kaetemi | ff49b89b73 | 4 years ago |
kaetemi | 47c0c8cc07 | 4 years ago |
kaetemi | 0bd43913e1 | 4 years ago |
kaetemi | 182a917338 | 4 years ago |
kaetemi | 38e5dfe007 | 4 years ago |
Ryzom Pipeline | 19e00522d9 | 4 years ago |
kaetemi | 4fba8cc18d | 4 years ago |
kaetemi | 7ea4b2b989 | 4 years ago |
kaetemi | 592ec2aaf1 | 4 years ago |
kaetemi | 8dc777495a | 4 years ago |
Jan Boon | 7c028d7a83 | 4 years ago |
Jan Boon | e5fce11618 | 4 years ago |
Jan Boon | ce9c7aae84 | 4 years ago |
Jan Boon | 396f0d808e | 4 years ago |
Jan Boon | 850b8e0158 | 4 years ago |
Jan Boon | bc66f3a464 | 4 years ago |
kaetemi | 9ff5eee1e8 | 4 years ago |
kaetemi | 560a19e6f7 | 4 years ago |
kaetemi | 2450f95c03 | 4 years ago |
Jan Boon | 856f7e88f2 | 4 years ago |
kaetemi | 632f8133a2 | 4 years ago |
kaetemi | 376dd2aff1 | 4 years ago |
kaetemi | ac799e444d | 4 years ago |
kaetemi | 0b191bc6db | 4 years ago |
kaetemi | 079f9dff25 | 4 years ago |
kaetemi | 051c46b95a | 4 years ago |
kaetemi | 1963bdedcc | 4 years ago |
kaetemi | 6cd52d7871 | 4 years ago |
kaetemi | f8ef5743e3 | 4 years ago |
kaetemi | 2eb088ef1c | 4 years ago |
kaetemi | 2de4907b83 | 4 years ago |
kaetemi | 54337b757b | 4 years ago |
kaetemi | e1195fe34e | 4 years ago |
kaetemi | 506f9f26bd | 4 years ago |
kaetemi | c3ef0fc91c | 4 years ago |
kaetemi | c129ce87df | 4 years ago |
kaetemi | 9021ce465f | 4 years ago |
kaetemi | 698bfff501 | 4 years ago |
kaetemi | 6ff5ddd790 | 4 years ago |
kaetemi | 1ec9f16de4 | 4 years ago |
kaetemi | 993c37f56d | 4 years ago |
kaetemi | 55d83c9486 | 4 years ago |
kaetemi | 1d696b8921 | 4 years ago |
kaetemi | 932a612f53 | 4 years ago |
kaetemi | 1a045e437e | 4 years ago |
kaetemi | dca59073aa | 4 years ago |
kaetemi | 25049eaead | 4 years ago |
kaetemi | 8fc6ec3b35 | 4 years ago |
kaetemi | 81143cdf43 | 4 years ago |
kaetemi | 973531f461 | 4 years ago |
kaetemi | a3780e307e | 4 years ago |
kaetemi | c252b56c93 | 4 years ago |
kaetemi | 2568b6f321 | 4 years ago |
kaetemi | 06b430349c | 4 years ago |
kaetemi | 78917354d9 | 4 years ago |
kaetemi | 8c6609943b | 4 years ago |
kaetemi | 639b432817 | 4 years ago |
kaetemi | 8d94baaf14 | 4 years ago |
kaetemi | c068d757eb | 4 years ago |
kaetemi | c68c3746dd | 4 years ago |
kaetemi | 9896eae64d | 4 years ago |
kaetemi | 0367e4f7c3 | 4 years ago |
kaetemi | 8be138931d | 4 years ago |
kaetemi | 771248fcf4 | 4 years ago |
kaetemi | dd28130617 | 4 years ago |
kaetemi | 1300d5d4d4 | 4 years ago |
kaetemi | 3dddc5ab40 | 4 years ago |
kaetemi | bbf4a0ac8a | 4 years ago |
kaetemi | 6531fb0a2e | 4 years ago |
kaetemi | c4b142f770 | 4 years ago |
kaetemi | 8bf18d2e1d | 4 years ago |
kaetemi | b1056ee5ca | 4 years ago |
kaetemi | 2bd4c24a5e | 4 years ago |
kaetemi | e74e229ad9 | 4 years ago |
Nimetu | ae91cc4179 | 4 years ago |
Nimetu | b4901bf267 | 4 years ago |
Nimetu | 720f6da8b9 | 4 years ago |
Nimetu | 6ccd8853db | 4 years ago |
Nuno | cc7793202b | 4 years ago |
Nuno | 0bb160545f | 4 years ago |
Nuno | 0e1b464e98 | 4 years ago |
Nuno | dfe051a8df | 4 years ago |
Nuno Gonçalves (Ulukyn) | 2f6133c8ba | 4 years ago |
Nuno Gonçalves (Ulukyn) | 95f8cefecc | 4 years ago |
Nuno Gonçalves (Ulukyn) | b98cd5e345 | 4 years ago |
Nuno Gonçalves (Ulukyn) | bca2a28187 | 4 years ago |
Sit Melai | b7cbeeb2ae | 4 years ago |
Ulukyn | 5d4e81e24c | 4 years ago |
Ulukyn | c73fff2ca6 | 4 years ago |
Nimetu | 9532fc3a81 | 4 years ago |
Nimetu | 6b59fc0081 | 4 years ago |
Sit Melai | 47bf9ecbc8 | 4 years ago |
Sit Melai | 02732c1241 | 4 years ago |
Sit Melai | f96f0b41b9 | 4 years ago |
Sit Melai | 5dc85db8b1 | 4 years ago |
Sit Melai | 49fcec5759 | 4 years ago |
Sit Melai | b8b21914f6 | 4 years ago |
Sit Melai | bccc86bd99 | 4 years ago |
Sit Melai | e5b3b752d5 | 4 years ago |
Sit Melai | c06469b2a0 | 4 years ago |
Ulukyn | 6fa74cd5c2 | 5 years ago |
Riasan | 8cd685d1f4 | 5 years ago |
Riasan | f31eeff8fc | 5 years ago |
Sit Melai | 7e10c697eb | 5 years ago |
Nimetu | f7be62eb3d | 5 years ago |
Nimetu | 2a4b16ab1b | 5 years ago |
Ulukyn | f7e8e3f516 | 5 years ago |
Ulukyn | 107dbc1987 | 5 years ago |
Ulukyn | 97dc744759 | 5 years ago |
Ulukyn | 012339dcf1 | 5 years ago |
Ulukyn | 884c65fc26 | 5 years ago |
Ulukyn | 07f9a55e48 | 5 years ago |
Ulukyn | a87b0f4c97 | 5 years ago |
Nimetu | d367e32a40 | 5 years ago |
Ulukyn | 4138a99fb7 | 5 years ago |
Nimetu | 5e3cd0321a | 5 years ago |
Nimetu | 4fd3f59b9a | 5 years ago |
Ulukyn | 7be52a10fe | 5 years ago |
Ulukyn | f4a104bf3f | 5 years ago |
Ulukyn | 80a6bf72a9 | 5 years ago |
Ulukyn | 17e539132b | 5 years ago |
Ulukyn | 27bd2cec01 | 5 years ago |
Ulukyn | 6597f32fc1 | 5 years ago |
Ulukyn | 9e2872d15e | 5 years ago |
Ulukyn | 901f33d9a7 | 5 years ago |
Ulukyn | 421de3fa91 | 5 years ago |
Ulukyn | 08fb509d99 | 5 years ago |
Sit Melai | 6c8aeb6ae3 | 5 years ago |
Sit Melai | 59c794f716 | 5 years ago |
Heernis | 3c052d5fcc | 5 years ago |
Sit Melai | c2e7807f99 | 5 years ago |
Riasan | d130a7f826 | 5 years ago |
Ulukyn | fd2cc53d68 | 5 years ago |
Ulukyn | 6ae34e08d9 | 5 years ago |
Ulukyn | 80568ade1c | 5 years ago |
Ulukyn | a8016b6a59 | 5 years ago |
Ulukyn | d0fdfe175d | 5 years ago |
Ulukyn | 4254b6788a | 5 years ago |
Riasan | ada46dfabc | 5 years ago |
Nimetu | c09736a08a | 5 years ago |
Nimetu | e9f63f2556 | 5 years ago |
Nimetu | 334d1d2af1 | 5 years ago |
Nimetu | 3aa0493570 | 5 years ago |
kaetemi | fc197880a4 | 5 years ago |
Ulukyn | ada3c09a51 | 5 years ago |
Ulukyn | 83061f7f03 | 5 years ago |
Ulukyn | 3c6bed32fd | 5 years ago |
Nimetu | 92b3a31f0b | 5 years ago |
Ulukyn | f396858ea9 | 5 years ago |
Ulukyn | eae8f9999d | 5 years ago |
Ulukyn | b8885cd661 | 5 years ago |
Ulukyn | f67a1cde32 | 5 years ago |
Ulukyn | feb1a5647d | 5 years ago |
Ulukyn | f3009c4178 | 5 years ago |
Ulukyn | 820bd23cf6 | 5 years ago |
Ulukyn | c883ea63e0 | 5 years ago |
Ulukyn | 791a6641d9 | 5 years ago |
Ulukyn | 521a5c8fb7 | 5 years ago |
Ulukyn | da876dcf7c | 5 years ago |
Ulukyn | 0069db15a6 | 5 years ago |
Ulukyn | 3da2f45363 | 5 years ago |
Ulukyn | 1143ecaae0 | 5 years ago |
Heernis | bcc107e187 | 5 years ago |
karu | da890311bb | 5 years ago |
Nimetu | 4ebca98559 | 5 years ago |
Nimetu | 98709e55db | 5 years ago |
Nimetu | 36187626a9 | 5 years ago |
Nimetu | bde8d008d1 | 5 years ago |
Nimetu | 6993a2731f | 5 years ago |
kaetemi | 3cbfa82a6e | 5 years ago |
kaetemi | ec61fa02b6 | 5 years ago |
Nimetu | 52d6f89e1e | 5 years ago |
Nimetu | 5bddfcfb22 | 5 years ago |
kaetemi | d0068265fb | 5 years ago |
kaetemi | 8b8308c354 | 5 years ago |
kaetemi | c00701eee1 | 5 years ago |
kaetemi | db92cbc6bb | 5 years ago |
kaetemi | 1ab8fe06de | 5 years ago |
Ulukyn | aa15fd4e98 | 5 years ago |
Ulukyn | 0f8673beac | 5 years ago |
Ulukyn | 219914b4bf | 5 years ago |
Ulukyn | fb4aebf506 | 5 years ago |
Ulukyn | 81832ae0af | 5 years ago |
kaetemi | 5c0c6d2417 | 5 years ago |
kaetemi | 9b0852a91d | 5 years ago |
kaetemi | 05d6b16b9c | 5 years ago |
kaetemi | 39d6ca285a | 5 years ago |
kaetemi | c8fc110a9e | 5 years ago |
kaetemi | a9fc9c2015 | 5 years ago |
Ulukyn | e32c852d96 | 5 years ago |
Ulukyn | f3a02d4f2a | 5 years ago |
Ulukyn | bd99cd8aed | 5 years ago |
Ulukyn | 77d8cce15a | 5 years ago |
Ulukyn | aa0d9d0be9 | 5 years ago |
Ulukyn | 0845e19408 | 5 years ago |
Ulukyn | ece240448d | 5 years ago |
Ulukyn | 07ff703de2 | 5 years ago |
Ulukyn | f6116a813b | 5 years ago |
kaetemi | d293b3ef02 | 5 years ago |
kaetemi | a4aafa410a | 5 years ago |
kaetemi | 56ee772548 | 5 years ago |
kaetemi | 1a037ad3eb | 5 years ago |
kaetemi | a82df91bba | 5 years ago |
kaetemi | 900ec1a69a | 5 years ago |
kaetemi | 491d39ff08 | 5 years ago |
Ulukyn | 422a8bb744 | 5 years ago |
Nimetu | 0f5dbc318c | 5 years ago |
Nimetu | 2a2431b1d3 | 5 years ago |
Nimetu | 505283a17c | 5 years ago |
Nimetu | 1ab44cf123 | 5 years ago |
Ulukyn | 25d4cca3a9 | 5 years ago |
Ulukyn | 6a40fcf12d | 5 years ago |
Ulukyn | bf0042173f | 5 years ago |
Ulukyn | 681568ce08 | 5 years ago |
Ulukyn | 47863be96e | 5 years ago |
Ulukyn | ade5b6e702 | 5 years ago |
Ulukyn | ecd8b952a2 | 5 years ago |
Ulukyn | 272f91210b | 5 years ago |
Ulukyn | 24d4fb8253 | 5 years ago |
Nimetu | 24fd5a6230 | 5 years ago |
Riasan | 9043e78794 | 5 years ago |
Nimetu | 5250d22706 | 5 years ago |
Nimetu | 682985978d | 5 years ago |
Nimetu | b3f8f307b0 | 5 years ago |
Ulukyn | b5ffa8becd | 5 years ago |
kaetemi | 87cd9f19a4 | 5 years ago |
kaetemi | 83210ce17b | 5 years ago |
kaetemi | bcac1e7955 | 5 years ago |
kaetemi | 75777b3497 | 5 years ago |
kaetemi | e020c9f0d0 | 5 years ago |
Ulukyn | 92090056ea | 5 years ago |
Nimetu | a6c7b3dd37 | 5 years ago |
Ulukyn | 1e54da83ef | 5 years ago |
Ulukyn | 6ec06b29ab | 5 years ago |
Ulukyn | 7b15da1018 | 5 years ago |
Nimetu | 67b74ad2b7 | 5 years ago |
Nimetu | ddd16d4851 | 5 years ago |
Nimetu | 110f1715ea | 5 years ago |
Nimetu | 598be95efd | 5 years ago |
kaetemi | 4f0bbbad69 | 5 years ago |
kaetemi | 50be041116 | 5 years ago |
Nimetu | 7f373a904e | 5 years ago |
Nimetu | 983475ff7c | 5 years ago |
kaetemi | b713dccdc9 | 5 years ago |
Jan Boon | c9163412ad | 5 years ago |
Jan Boon | d2d89ac44f | 5 years ago |
Jan Boon | d036b616b5 | 5 years ago |
Jan Boon | 7b8f1b9a61 | 5 years ago |
Ulukyn | 44824414b1 | 5 years ago |
Ulukyn | 95b0f63622 | 5 years ago |
Ulukyn | 264b50a5ec | 5 years ago |
Jan Boon | 34ba374d8b | 5 years ago |
kaetemi | 075a34f7cc | 5 years ago |
kaetemi | e41339fa2d | 5 years ago |
kaetemi | 6961c10556 | 5 years ago |
kaetemi | 2c1be97a50 | 5 years ago |
kaetemi | e4883acceb | 5 years ago |
kaetemi | aeb127e011 | 5 years ago |
Ulukyn | 143b96c214 | 5 years ago |
Ulukyn | d4e5af7df2 | 5 years ago |
Ulukyn | 8dc9b89f94 | 5 years ago |
Nimetu | 2d86c5377d | 5 years ago |
Nimetu | 2c92649a72 | 5 years ago |
kaetemi | 6b9a1f39cd | 5 years ago |
kaetemi | 0244c348ee | 5 years ago |
kaetemi | f0687a8157 | 5 years ago |
kaetemi | f41126f4b2 | 5 years ago |
Jan Boon | abb6af4f3b | 5 years ago |
Ulukyn | 04f9d593e0 | 5 years ago |
Nimetu | 3be969a73d | 5 years ago |
Nimetu | 14076b899d | 5 years ago |
Ulukyn | ce8b05b284 | 5 years ago |
Nimetu | f78decc6ad | 5 years ago |
Ulukyn | 42b291c73e | 5 years ago |
Nimetu | 4aa94b3ae9 | 5 years ago |
Nimetu | c0110133d7 | 5 years ago |
Nimetu | c36faf2d61 | 5 years ago |
Ulukyn | fef0cad61a | 5 years ago |
Ulukyn | debb6b7d0c | 5 years ago |
Nimetu | e1dff3b4b8 | 5 years ago |
Nimetu | 6afd9ea1f2 | 5 years ago |
Nimetu | f449bb7c51 | 5 years ago |
Heernis | f11ed5ea49 | 5 years ago |
Ulukyn | 050d9fea2f | 5 years ago |
Ulukyn | 9a8f29bb67 | 5 years ago |
Ulukyn | c2e879ebcc | 5 years ago |
Ulukyn | 11086f9b44 | 5 years ago |
Ulukyn | 311e739d98 | 5 years ago |
Ulukyn | f6f7e553fc | 5 years ago |
Ulukyn | 255271cde5 | 5 years ago |
Ulukyn | 6d233cdc2c | 5 years ago |
Ulukyn | f337a28ae2 | 5 years ago |
Ulukyn | a36694614f | 5 years ago |
Ulukyn | bcb8080d42 | 5 years ago |
kaetemi | 7256109dcb | 5 years ago |
kaetemi | 86b809e581 | 5 years ago |
kaetemi | f8bee17d3c | 5 years ago |
kaetemi | c056cd7d24 | 5 years ago |
kaetemi | 0a1e8186b3 | 5 years ago |
kaetemi | 71e3ed5868 | 5 years ago |
kaetemi | 9d5af13c5e | 5 years ago |
kaetemi | e65d1587e7 | 5 years ago |
kaetemi | 168c770716 | 5 years ago |
kaetemi | 71c7d3161e | 5 years ago |
kaetemi | cd555f640b | 5 years ago |
kaetemi | 2ebe1c2a3d | 5 years ago |
Ulukyn | 2c9193fa74 | 5 years ago |
Ulukyn | 7e84ee9ec9 | 5 years ago |
Ulukyn | ff5d4e941c | 5 years ago |
Nimetu | f853adfcba | 5 years ago |
Nimetu | 1f736fc347 | 5 years ago |
Ulukyn | 8f3aaee987 | 5 years ago |
Ulukyn | 8d0172e1fb | 5 years ago |
Ulukyn | f06eebf26c | 5 years ago |
Ulukyn | 31ecfdf181 | 5 years ago |
Ulukyn | 4997576923 | 5 years ago |
Ulukyn | 9b6693763f | 5 years ago |
Ulukyn | b9d1cf26b7 | 5 years ago |
Ulukyn | ae25e054d4 | 5 years ago |
Ulukyn | 269f8c4b2d | 5 years ago |
Ulukyn | a3db3c6ba6 | 5 years ago |
Nimetu | 4d9aa3e684 | 5 years ago |
Nimetu | e99b7e257d | 5 years ago |
Nimetu | 94873c3d3f | 5 years ago |
Nimetu | 586e49282f | 5 years ago |
Nimetu | ca20d582b3 | 5 years ago |
Nimetu | 7cb5c817a6 | 5 years ago |
Nimetu | ec1dfca0c5 | 5 years ago |
Ulukyn | df6c0969c2 | 5 years ago |
Ulukyn | 590abe8bfd | 5 years ago |
Ulukyn | b31fa09af7 | 5 years ago |
Ulukyn | 3220a2aa47 | 5 years ago |
Ulukyn | c639bb3c07 | 5 years ago |
Nimetu | 2f635117f7 | 5 years ago |
Nimetu | 9c46a9d8f7 | 5 years ago |
Nimetu | dccbb376a0 | 5 years ago |
Nimetu | 0bec2ee2ff | 5 years ago |
Nimetu | 1337908369 | 5 years ago |
Nimetu | 0078df9593 | 5 years ago |
Ulukyn | 0cf26cbdf8 | 5 years ago |
Nimetu | 34083dee80 | 5 years ago |
Nimetu | edb0c1fe73 | 5 years ago |
Nimetu | 9aabe0bf35 | 5 years ago |
Nimetu | 3b08d50b83 | 5 years ago |
Nimetu | 90dcb7257f | 5 years ago |
Ulukyn | 523c07d9d9 | 5 years ago |
Ulukyn | e89d3233dc | 5 years ago |
Ulukyn | 96e95c19ee | 5 years ago |
Ulukyn | e10f79dbf2 | 5 years ago |
Ulukyn | 0aff3b4365 | 5 years ago |
Ulukyn | b0fa434c05 | 5 years ago |
Ulukyn | e349cb4399 | 5 years ago |
Ulukyn | f9cf9db049 | 5 years ago |
Ulukyn | 92f3c01a74 | 5 years ago |
Ulukyn | 3ffab7c1a1 | 5 years ago |
Ulukyn | 4df2489f59 | 5 years ago |
Ulukyn | de6418bb9a | 5 years ago |
Ulukyn | 1db0300515 | 5 years ago |
Nimetu | af221b7118 | 5 years ago |
Nimetu | e3df74eaee | 5 years ago |
Nimetu | ff9aa6c608 | 5 years ago |
Ulukyn | 435b4362d3 | 5 years ago |
Ulukyn | f9d37a390a | 5 years ago |
Ulukyn | 99413cff48 | 5 years ago |
Ulukyn | d45f6efcef | 5 years ago |
Ulukyn | 01cb2cfdd8 | 5 years ago |
Ulukyn | 5f762edac4 | 5 years ago |
Ulukyn | bfadcfaff5 | 5 years ago |
Ulukyn | 55172c93b5 | 5 years ago |
Ulukyn | c950373782 | 5 years ago |
Ulukyn | b1d18ddb53 | 5 years ago |
Ulukyn | b869cd07d6 | 5 years ago |
Ulukyn | aaa24fd0f4 | 5 years ago |
Ulukyn | 6747613b03 | 5 years ago |
Ulukyn | ac6afb7b2f | 5 years ago |
Ulukyn | 4048ef29db | 5 years ago |
Ulukyn | b5b395c127 | 5 years ago |
Ulukyn | a7d2175f93 | 5 years ago |
Ulukyn | b16d132e1d | 5 years ago |
Ulukyn | e3cef8803e | 5 years ago |
Ulukyn | cb2201a69a | 5 years ago |
Nimetu | dfeba1426a | 5 years ago |
Nimetu | c5d8f7b2de | 5 years ago |
Ulukyn | c9bec465bc | 5 years ago |
Nimetu | 7856e93723 | 5 years ago |
Nimetu | 8f59a71e3c | 5 years ago |
Nimetu | 15433b263b | 5 years ago |
Nimetu | b13d51242c | 5 years ago |
Nimetu | 2191d21bce | 5 years ago |
Nimetu | 8be553401d | 5 years ago |
Ulukyn | 58a731628b | 5 years ago |
Ulukyn | eb8daeb652 | 5 years ago |
Ulukyn | c6d5163c1d | 5 years ago |
Ulukyn | 2c63a3aa96 | 5 years ago |
Ulukyn | 4709e766b9 | 5 years ago |
Ulukyn | b2207337fa | 5 years ago |
Ulukyn | 47dc707c91 | 5 years ago |
Ulukyn | 232af164ed | 5 years ago |
Ulukyn | f18101d97e | 5 years ago |
Ulukyn | 0df2bdec2b | 5 years ago |
Ulukyn | ed17e66d97 | 5 years ago |
Ulukyn | 7f149563f6 | 5 years ago |
Nimetu | e22d271408 | 5 years ago |
Ulukyn | d77d3b7102 | 5 years ago |
Ulukyn | e049c34c8d | 5 years ago |
Ulukyn | 6114cb1044 | 5 years ago |
Ulukyn | 609d6b470f | 5 years ago |
Ulukyn | 414011ee37 | 5 years ago |
Ulukyn | b558a1a18b | 5 years ago |
Ulukyn | b033942d36 | 5 years ago |
Ulukyn | de8c9dddcb | 5 years ago |
Ulukyn | 6e00000b9b | 5 years ago |
Ulukyn | 15ce2cd39c | 5 years ago |
Ulukyn | f9738713a7 | 5 years ago |
Nimetu | f46ec8f6ff | 5 years ago |
Nimetu | b208c0b805 | 5 years ago |
Nimetu | d2ccc09b7d | 5 years ago |
Nimetu | 58cc988fbc | 5 years ago |
Ulukyn | 20b1f3a4c5 | 5 years ago |
Ulukyn | 586d84bc20 | 5 years ago |
Ulukyn | b88341792a | 5 years ago |
Ulukyn | 1c562ddbe6 | 5 years ago |
Ulukyn | 4675b8b8b9 | 5 years ago |
Ulukyn | d2edcbf4ee | 5 years ago |
Ulukyn | 954151ca73 | 5 years ago |
Ulukyn | 45b1bab23f | 5 years ago |
Ulukyn | 123197b90b | 5 years ago |
Ulukyn | 4b847a086a | 5 years ago |
Ulukyn | 9f61f08e74 | 5 years ago |
Ulukyn | aacbcf1e65 | 5 years ago |
Ulukyn | c838136d1a | 5 years ago |
Ulukyn | 0455d07125 | 5 years ago |
Ulukyn | 6785217b3a | 5 years ago |
Ulukyn | cc5423fdd5 | 5 years ago |
Ulukyn | c22f8776f4 | 5 years ago |
Nimetu | f5c0cbcdf3 | 5 years ago |
Nimetu | 8b2108af2f | 5 years ago |
Ulukyn | a7ca6f4499 | 5 years ago |
Ulukyn | 9e5f20a679 | 5 years ago |
Ulukyn | 11573ee85a | 5 years ago |
Ulukyn | 48a9a84d0e | 5 years ago |
Ulukyn | 2f27af125e | 5 years ago |
Ulukyn | 10f864b234 | 5 years ago |
Ulukyn | 0ac92bc08b | 5 years ago |
Ulukyn | 34c1265bce | 5 years ago |
Ulukyn | a6ee9fec63 | 5 years ago |
Ulukyn | fe008c0e52 | 5 years ago |
Ulukyn | 935c5df73a | 5 years ago |
Ulukyn | 7a0737e759 | 5 years ago |
Ulukyn | 09d8346558 | 5 years ago |
Ulukyn | 7f53767d85 | 5 years ago |
karu | 6a7fc98a52 | 5 years ago |
Ulukyn | 3d919974cf | 5 years ago |
Ulukyn | 691bf67c4d | 5 years ago |
Ulukyn | f053eaa157 | 5 years ago |
Ulukyn | 30fabcbd0a | 5 years ago |
Ulukyn | 3966020294 | 5 years ago |
Ulukyn | eeac201cf3 | 5 years ago |
Ulukyn | 357e3f07e4 | 5 years ago |
Ulukyn | 188c3494fa | 5 years ago |
Ulukyn | 51776f9203 | 5 years ago |
Ulukyn | 7b8a4e2210 | 5 years ago |
Ulukyn | 762dcd15e2 | 5 years ago |
Ulukyn | ac43b90ba0 | 5 years ago |
Ulukyn | df3c7c2f2e | 5 years ago |
Ulukyn | 780b9c7e63 | 5 years ago |
Ulukyn | f4ee795fde | 5 years ago |
Ulukyn | c521de1d48 | 5 years ago |
kaetemi | ae68ce722e | 5 years ago |
kaetemi | 2cdfc0ce29 | 5 years ago |
kaetemi | bddbed9da2 | 5 years ago |
kaetemi | d56eab0420 | 5 years ago |
kaetemi | 02270e7113 | 5 years ago |
kaetemi | 695ebeb0ef | 5 years ago |
kaetemi | e2610a025c | 5 years ago |
kaetemi | 45a43384da | 5 years ago |
kaetemi | 4645d1837d | 5 years ago |
kaetemi | e1c48be4ba | 5 years ago |
kaetemi | 761770d4eb | 5 years ago |
kaetemi | 8d48c8ee74 | 5 years ago |
Riasan | d5ceb97fa0 | 5 years ago |
kaetemi | 3ed3841c3a | 5 years ago |
kaetemi | 1069a5acf9 | 5 years ago |
kaetemi | 35bfb16ff9 | 5 years ago |
Ulukyn | cdc33730ad | 5 years ago |
Ulukyn | 305a27f0db | 5 years ago |
kaetemi | 281a599036 | 5 years ago |
kaetemi | ef6f2ea34b | 5 years ago |
kaetemi | 174aff62d7 | 5 years ago |
kaetemi | d934f5769a | 5 years ago |
kaetemi | 1b35b7812b | 5 years ago |
kaetemi | c2d0b6206c | 5 years ago |
kaetemi | 83316e6e2c | 5 years ago |
kaetemi | dc734ed662 | 5 years ago |
kaetemi | c2f01edab0 | 5 years ago |
kaetemi | c8e562f377 | 5 years ago |
kaetemi | 22f487876c | 5 years ago |
kaetemi | 8e21fed1e6 | 5 years ago |
kaetemi | 38d3344972 | 5 years ago |
kaetemi | 43452ea27c | 5 years ago |
kaetemi | ff4a521b07 | 5 years ago |
kaetemi | 76c252b23c | 5 years ago |
kaetemi | b28c9ef8c4 | 5 years ago |
kaetemi | f66a8b8fdc | 5 years ago |
kaetemi | ef058b10ff | 5 years ago |
kaetemi | 76e0e9c105 | 5 years ago |
kaetemi | 1cf2a792ae | 5 years ago |
kaetemi | dbef81c3c2 | 5 years ago |
kaetemi | 09e31cf75a | 5 years ago |
kaetemi | b32b1becec | 5 years ago |
kaetemi | cfaae39b83 | 5 years ago |
Jan Boon | 03340ee875 | 5 years ago |
Nimetu | 02e7393c14 | 5 years ago |
Nimetu | df21e21085 | 5 years ago |
NO-BREAK SPACE OÜ | 8cbadfbbcc | 5 years ago |
Jan Boon | 671035c9b1 | 5 years ago |
NO-BREAK SPACE OÜ | 46043f088a | 5 years ago |
kaetemi | a0869f11cd | 5 years ago |
kaetemi | a34541fe95 | 5 years ago |
kaetemi | 20c339891d | 5 years ago |
kaetemi | 0f59a02662 | 5 years ago |
NO-BREAK SPACE OÜ | c51e17cf0c | 5 years ago |
Jan Boon | 5487d77cf8 | 5 years ago |
kaetemi | edb3ba6002 | 5 years ago |
kaetemi | 111562822d | 5 years ago |
NO-BREAK SPACE OÜ | 94f0899f99 | 5 years ago |
kaetemi | 057b3ab11b | 5 years ago |
kaetemi | 830803cfe9 | 5 years ago |
kaetemi | c330067f19 | 5 years ago |
NO-BREAK SPACE OÜ | 80076ae97a | 5 years ago |
kaetemi | bbee8579c7 | 5 years ago |
kaetemi | 3475b3046a | 5 years ago |
kaetemi | 68d8e21629 | 5 years ago |
kaetemi | 22e9c17a72 | 5 years ago |
NO-BREAK SPACE OÜ | 5c872ad06e | 5 years ago |
kaetemi | c15e75ecc8 | 5 years ago |
kaetemi | 255c6956c7 | 5 years ago |
NO-BREAK SPACE OÜ | 1f6b79202c | 5 years ago |
kaetemi | 02305cdb33 | 5 years ago |
kaetemi | ed8a5c14a7 | 5 years ago |
NO-BREAK SPACE OÜ | f239faeb63 | 5 years ago |
Jan Boon | af31769a63 | 5 years ago |
kaetemi | e9c175d3f3 | 5 years ago |
kaetemi | dedb0cbc08 | 5 years ago |
kaetemi | cf2d5e939f | 5 years ago |
kaetemi | 3fe0ad30a3 | 5 years ago |
kaetemi | ce9fac5233 | 5 years ago |
kaetemi | 49a4d00522 | 5 years ago |
kaetemi | 8e4edcb954 | 5 years ago |
NO-BREAK SPACE OÜ | 8100f15ce7 | 5 years ago |
kaetemi | 9307cac83c | 5 years ago |
kaetemi | 2faa1d7ab8 | 5 years ago |
kaetemi | dd1043eaae | 5 years ago |
kaetemi | c635a27722 | 5 years ago |
kaetemi | 67bba962d7 | 5 years ago |
kaetemi | a24c758d95 | 5 years ago |
kaetemi | 943a3c239a | 5 years ago |
kaetemi | f81f348d64 | 5 years ago |
kaetemi | 41c4cdbc7b | 5 years ago |
kaetemi | 41a803dd40 | 5 years ago |
Nimetu | 84ff3391c3 | 5 years ago |
NO-BREAK SPACE OÜ | bd29ed2808 | 5 years ago |
kaetemi | 4c74d13931 | 5 years ago |
NO-BREAK SPACE OÜ | dc1bd19f61 | 5 years ago |
kaetemi | a138c727b7 | 5 years ago |
NO-BREAK SPACE OÜ | a53051c316 | 5 years ago |
kaetemi | 3d370f5f65 | 5 years ago |
kaetemi | 344b41439b | 5 years ago |
NO-BREAK SPACE OÜ | 442983e1a8 | 5 years ago |
kaetemi | 1e1a4419e6 | 5 years ago |
NO-BREAK SPACE OÜ | 8b17f84a6b | 5 years ago |
kaetemi | a9250a74f1 | 5 years ago |
Nimetu | 4c1daee42c | 5 years ago |
Nimetu | fec9975f58 | 5 years ago |
Nimetu | fc9d423c94 | 5 years ago |
Nimetu | 1d5580a2d6 | 5 years ago |
Ulu Kyn | b5b8de283b | 5 years ago |
kervala | 71b65b9564 | 5 years ago |
kervala | 9d9819f1c0 | 5 years ago |
kervala | 0914828ee2 | 5 years ago |
kervala | fb93157afd | 5 years ago |
kervala | 61a137797a | 5 years ago |
kervala | f190869d59 | 5 years ago |
kervala | a8097f47d4 | 5 years ago |
kervala | ca75cc4dea | 5 years ago |
kervala | 390d987557 | 5 years ago |
Ulu Kyn | 7b3c09f873 | 5 years ago |
Ulu Kyn | 3f7fc2e870 | 5 years ago |
Ulu Kyn | 4c0438d702 | 5 years ago |
Ulu Kyn | 139b03f0f1 | 5 years ago |
Ulu Kyn | 99caf036ff | 5 years ago |
Ulu Kyn | 6c35550c83 | 5 years ago |
Ulu Kyn | 8221ee2eb9 | 5 years ago |
Ulu Kyn | fd1f151504 | 5 years ago |
Ulu Kyn | c43b4b8bc0 | 5 years ago |
Ulu Kyn | a806758fad | 5 years ago |
Ulu Kyn | 58e24f9c58 | 5 years ago |
Herrah | 99ededcfcb | 5 years ago |
Ulu Kyn | e32e4492ce | 5 years ago |
Ulu Kyn | e3dc99e078 | 5 years ago |
Nuno Gonçalves | 9e406019d8 | 5 years ago |
Nimetu | 076d4b73c1 | 5 years ago |
Nimetu | 25d04f65bd | 5 years ago |
Nuno Gonçalves | 19789a2544 | 5 years ago |
Nuno Gonçalves | 2220c41a46 | 5 years ago |
Nuno Gonçalves | 9a2e820495 | 5 years ago |
Nuno Gonçalves | 230639bf0e | 5 years ago |
Nuno Gonçalves | c950019044 | 5 years ago |
Nimetu | e4cce24f80 | 5 years ago |
Nimetu | 5dc8b4ef86 | 5 years ago |
Nimetu | 8060c05be5 | 5 years ago |
Nimetu | 07ba1aa3d0 | 5 years ago |
Nimetu | 6a81640199 | 5 years ago |
Nimetu | 07a83ba15a | 5 years ago |
Nimetu | 48b5f159b7 | 5 years ago |
Nuno Gonçalves | 56ce661b5b | 5 years ago |
Nuno Gonçalves | a8c4ba0493 | 5 years ago |
Nuno Gonçalves | 0c01011cd4 | 5 years ago |
Nimetu | 2e3fa918d4 | 5 years ago |
Nimetu | 5843ebede0 | 5 years ago |
Nimetu | d7c754039e | 5 years ago |
Nimetu | 963a9814da | 5 years ago |
Nimetu | 79fd4cf8d7 | 5 years ago |
Nimetu | 0ef7419fd6 | 5 years ago |
Nuno Gonçalves | 89973681a2 | 5 years ago |
Nuno Gonçalves | 683af88cb9 | 5 years ago |
Nuno Gonçalves | a4d2f80579 | 5 years ago |
Nimetu | c6dc92e0ec | 5 years ago |
Nimetu | da5b7212f8 | 5 years ago |
Nimetu | d3c6098207 | 5 years ago |
Nimetu | 14b1c1232a | 5 years ago |
Nimetu | 5940e276fb | 5 years ago |
Nimetu | 4ec9024077 | 5 years ago |
Nimetu | f25771118d | 5 years ago |
Nimetu | 25ee8029e3 | 5 years ago |
Nimetu | 0f23f3a59b | 5 years ago |
Nimetu | 0fb06e0ff3 | 5 years ago |
Nimetu | 1a98c83080 | 5 years ago |
Nimetu | 24d03e9c26 | 5 years ago |
Nimetu | 19b5dd96d1 | 5 years ago |
Nimetu | f952202c09 | 5 years ago |
Nimetu | 036410af62 | 5 years ago |
Nimetu | 30e0018d0a | 5 years ago |
Nimetu | 26e356723e | 5 years ago |
Nimetu | 13bdecc3aa | 5 years ago |
Nimetu | 2dee4e41ea | 5 years ago |
Nimetu | ecc658703c | 5 years ago |
Nimetu | 72b6d1e4c5 | 5 years ago |
Nimetu | 379a7f0e98 | 5 years ago |
Nimetu | cc437ef7a9 | 5 years ago |
Nuno Gonçalves | de69dfc285 | 5 years ago |
Inky | d0b3d0596c | 5 years ago |
Inky | cc3a609b01 | 5 years ago |
Nuno Gonçalves | f5776610f1 | 5 years ago |
Inky | 11f2044c7d | 5 years ago |
Riasan | 8aea3d661a | 5 years ago |
Nimetu | b53d797745 | 5 years ago |
Nimetu | 3c1d6a2401 | 5 years ago |
Nimetu | 4a15779094 | 5 years ago |
Nimetu | 8b4c179a15 | 5 years ago |
Nimetu | 39e0f4b4f2 | 5 years ago |
ulukyn | e3fbe18162 | 5 years ago |
ulukyn | 959d52fd80 | 5 years ago |
ulukyn | 6fad7343e8 | 5 years ago |
Nimetu | b423c0f057 | 5 years ago |
Nimetu | 131f05387a | 5 years ago |
Nimetu | 7a2608e38c | 5 years ago |
Nimetu | 7148d476ad | 5 years ago |
Nimetu | bbfc20c81d | 5 years ago |
Nimetu | fe3c0167ba | 6 years ago |
Nimetu | c9a5fbacd9 | 6 years ago |
Nimetu | b822f1388e | 6 years ago |
Nimetu | e3b0cdeadf | 6 years ago |
Nimetu | 7af4e78d6d | 6 years ago |
Nimetu | 7d688f1a64 | 6 years ago |
Inky | bfbb8e1292 | 6 years ago |
Inky | 045a80b59e | 6 years ago |
Inky | 1ad5cf7a8e | 6 years ago |
Inky | c752619f13 | 6 years ago |
Inky | 26aef169b1 | 6 years ago |
Inky | 8006dbeabe | 6 years ago |
Inky | 6fdbdc9ed1 | 6 years ago |
Inky | f75e413994 | 6 years ago |
Inky | 3acbf83058 | 6 years ago |
Inky | 77496daef4 | 6 years ago |
Inky | c545629a10 | 6 years ago |
Inky | 1910f7bc86 | 6 years ago |
Inky | c1e76fcbb2 | 6 years ago |
Inky | 20fe11c53f | 6 years ago |
Inky | 3da8dcbdac | 6 years ago |
Inky | 6fcb6f0669 | 6 years ago |
Inky | a7cdf29463 | 6 years ago |
Inky | b2b16e3cce | 6 years ago |
Inky | 0f3f64cdc2 | 6 years ago |
Inky | c8927c9c4b | 6 years ago |
Inky | 5d1233e805 | 6 years ago |
Inky | f5e9b7703c | 6 years ago |
Inky | a1492e70e0 | 6 years ago |
Inky | 098df688b9 | 6 years ago |
Inky | 6d16b46890 | 6 years ago |
Inky | 331b0d8718 | 6 years ago |
Inky | 9dec7f9dbe | 6 years ago |
Inky | d9cb317667 | 6 years ago |
Inky | 90e508032c | 6 years ago |
Inky | 4a5de4cb13 | 6 years ago |
Inky | 9d294ef242 | 6 years ago |
Inky | f17aeff6f2 | 6 years ago |
Inky | 860d6e2abb | 6 years ago |
Inky | bfab92082b | 6 years ago |
Inky | 64e26124f8 | 6 years ago |
Inky | 21dfa80b73 | 6 years ago |
Inky | ac4d9efd8b | 6 years ago |
Inky | 00f850f143 | 6 years ago |
Nimetu | a4b3e57fd0 | 6 years ago |
Nimetu | 527d4bf00c | 6 years ago |
Nimetu | 8b2aef9317 | 6 years ago |
Nimetu | abad5aa84e | 6 years ago |
Nimetu | c439a10cfe | 6 years ago |
Nimetu | c123f63afd | 6 years ago |
Nimetu | ba42b50cf0 | 6 years ago |
Nimetu | a22767af76 | 6 years ago |
ulukyn | f8af0da354 | 6 years ago |
ulukyn | 9fc1987631 | 6 years ago |
Jan Boon | 1163d11ede | 6 years ago |
Jan Boon | 4d45de3e7d | 6 years ago |
Jan Boon | ba6ab62626 | 6 years ago |
ulukyn | 2c6bfe7d54 | 6 years ago |
Riasan | 4f08aa3082 | 6 years ago |
NO-BREAK SPACE OÜ | 20f3cd00c3 | 6 years ago |
kaetemi | 7ce995b294 | 6 years ago |
NO-BREAK SPACE OÜ | 583e53cecd | 6 years ago |
kaetemi | 08ac7175dc | 6 years ago |
Inky | 570c73576c | 6 years ago |
Inky | b8712f6791 | 6 years ago |
Inky | e513b4f8fa | 6 years ago |
Inky | 85be9aed36 | 6 years ago |
Inky | e4ea12409b | 6 years ago |
Inky | 18adc2f529 | 6 years ago |
Inky | 56da8888d5 | 6 years ago |
Nimetu | 7bbf80eb8b | 6 years ago |
Nimetu | a926abc45c | 6 years ago |
Inky | 63b58b0c84 | 6 years ago |
Inky | 377ed0152a | 6 years ago |
ulukyn | 72d636ded1 | 6 years ago |
Nimetu | 2f883ddb1d | 6 years ago |
Nimetu | e0a1cd3c4a | 6 years ago |
Nimetu | 4636e32885 | 6 years ago |
Nimetu | efaadfe121 | 6 years ago |
NO-BREAK SPACE OÜ | 39eb30b64f | 6 years ago |
kaetemi | 0017a5fb26 | 6 years ago |
Nimetu | 2ee59b8d27 | 6 years ago |
Nimetu | 41e6951fb2 | 6 years ago |
Nimetu | e61c5937f3 | 6 years ago |
Nimetu | e573c7b6e9 | 6 years ago |
Inky | 5810176f6c | 6 years ago |
Inky | 7d4b2d1e62 | 6 years ago |
Inky | b82ad0e052 | 6 years ago |
Inky | fc47b51d23 | 6 years ago |
Riasan | cba4d7948d | 6 years ago |
Riasan | 716e59ba90 | 6 years ago |
ulukyn | 739d000055 | 6 years ago |
ulukyn | 963162855c | 6 years ago |
ulukyn | 89ef083460 | 6 years ago |
Nimetu | e0dcc54070 | 6 years ago |
Nimetu | 7ed7491f04 | 6 years ago |
Inky | 795606628f | 6 years ago |
Inky | e572cc3e83 | 6 years ago |
NO-BREAK SPACE OÜ | 926f545e0f | 6 years ago |
Jan Boon | 22d077d3c7 | 6 years ago |
kaetemi | f688c23580 | 6 years ago |
kaetemi | 6cc30e7e6b | 6 years ago |
ulukyn | bf34575037 | 6 years ago |
kaetemi | 5d9e1d9bf8 | 6 years ago |
kaetemi | f3c45d7e82 | 6 years ago |
kaetemi | 76d88f546a | 6 years ago |
kaetemi | 2d29e7224f | 6 years ago |
kaetemi | 8bae2ef613 | 6 years ago |
kaetemi | 8d96487b69 | 6 years ago |
kaetemi | 20920be7bd | 6 years ago |
ulukyn | 57a32f10ee | 6 years ago |
ulukyn | 6c9a8da387 | 6 years ago |
ulukyn | 4cbb69bd28 | 6 years ago |
ulukyn | ff3bb625af | 6 years ago |
ulukyn | 3daf9a79fb | 6 years ago |
Riasan | 2aa065d109 | 6 years ago |
Nimetu | 86873815bb | 6 years ago |
Nimetu | d0efd91ad1 | 6 years ago |
Nimetu | 8859480ecb | 6 years ago |
ulukyn | 293418e333 | 6 years ago |
ulukyn | 89a7ac3121 | 6 years ago |
ulukyn | 899bb98f07 | 6 years ago |
Inky | a7134ad158 | 6 years ago |
Nimetu | 011277ab14 | 6 years ago |
ulukyn | 74660fe103 | 6 years ago |
ulukyn | e91c72fd76 | 6 years ago |
ulukyn | c487580686 | 6 years ago |
ulukyn | fc15c778fe | 6 years ago |
Nimetu | e1b11e929d | 6 years ago |
Nimetu | 9d3667cab4 | 6 years ago |
Nimetu | 3515d41789 | 6 years ago |
Nimetu | bb6562f47b | 6 years ago |
Nimetu | 5b3c2159c0 | 6 years ago |
Inky | a42d3bc598 | 6 years ago |
Inky | b9c41706c0 | 6 years ago |
Nimetu | d5a9c3610f | 6 years ago |
Nimetu | eb8e4fc39b | 6 years ago |
Inky | c3be9defe2 | 6 years ago |
Inky | e6fd1e4dd4 | 6 years ago |
Inky | fb6ae0e305 | 6 years ago |
Inky | 1e931e32b9 | 6 years ago |
Inky | 4f14b5667e | 6 years ago |
Inky | 4105168375 | 6 years ago |
Inky | 4b46ad3404 | 6 years ago |
Nimetu | 1504a33167 | 6 years ago |
Nimetu | a76308cbde | 6 years ago |
Nimetu | 7167ddb394 | 6 years ago |
Inky | c469194de3 | 6 years ago |
Inky | 0ee458b231 | 6 years ago |
Inky | 63172a634b | 6 years ago |
Nimetu | bfda3977a5 | 6 years ago |
ulukyn | 41b0fac726 | 6 years ago |
ulukyn | b7ec1c68ac | 6 years ago |
ulukyn | 8df7fd34e1 | 6 years ago |
ulukyn | 2d0d50cb70 | 6 years ago |
kervala | ab00d8a2f1 | 6 years ago |
kervala | 5a05e28fc6 | 6 years ago |
ulukyn | cc6159a9d5 | 6 years ago |
Inky | 438b521ece | 6 years ago |
Nimetu | bbd0e5c878 | 6 years ago |
kervala | 82d24c0507 | 6 years ago |
Inky | ade58bd747 | 6 years ago |
Ulukyn | f5f4411a00 | 6 years ago |
Inky | 485295d27d | 6 years ago |
Nimetu | ae56129ada | 6 years ago |
Nimetu | f979597830 | 6 years ago |
Inky | f27a7ec795 | 6 years ago |
Ulukyn | c582964448 | 6 years ago |
ulukyn | 7d9b1f58f0 | 6 years ago |
Nimetu | abf44b1cbe | 6 years ago |
Nimetu | 6948adc0f7 | 6 years ago |
kervala | 265c42cc50 | 6 years ago |
Nimetu | d483d64dfc | 6 years ago |
Nimetu | 3ccb4e0ae3 | 6 years ago |
Nimetu | 2b927a7a47 | 6 years ago |
Nimetu | 0b3d21a394 | 6 years ago |
Nimetu | 18ab71b3be | 6 years ago |
Nimetu | fb8f74bac1 | 6 years ago |
Nimetu | 117dc37a33 | 6 years ago |
Inky | da8702479f | 6 years ago |
Riasan | 21f2c0ea59 | 6 years ago |
Nimetu | 85c52973e7 | 6 years ago |
Riasan | 29cb0c579f | 6 years ago |
ulukyn | 8434cb1a34 | 6 years ago |
ulukyn | 39004eb54b | 6 years ago |
Nimetu | 9d87325715 | 6 years ago |
Riasan | dc6b4a917d | 6 years ago |
Riasan | a61e714112 | 6 years ago |
ulukyn | 425268e956 | 6 years ago |
ulukyn | ce83c0ae51 | 6 years ago |
Nimetu | 48247f10e5 | 6 years ago |
Nimetu | cbb092c3d5 | 6 years ago |
Nimetu | 42f45aff1e | 6 years ago |
Nimetu | e4b83a4724 | 6 years ago |
Nimetu | 3734cffccf | 6 years ago |
Riasan | d2df2043c5 | 6 years ago |
Riasan | d8cfde63f8 | 6 years ago |
Nimetu | 5ed62187dc | 6 years ago |
Nimetu | 5cc2a0c280 | 6 years ago |
Nimetu | 5e42d09482 | 6 years ago |
Riasan | 0ec72e904e | 6 years ago |
Nimetu | fb56cd960e | 6 years ago |
Nimetu | b7851fc282 | 6 years ago |
Nimetu | 002005f294 | 6 years ago |
Nimetu | fc03cea84a | 6 years ago |
Nuno Gonçalves | 617682afe6 | 6 years ago |
Nuno Gonçalves | c9d19b4879 | 6 years ago |
Nimetu | 582d5461f0 | 6 years ago |
ulukyn | 0b507cba7b | 6 years ago |
ulukyn | db5a7b141a | 6 years ago |
ulukyn | 478e2a646f | 6 years ago |
ulukyn | 020c59153d | 6 years ago |
ulukyn | 4f1008a413 | 6 years ago |
Nimetu | 9e605dd103 | 6 years ago |
Nimetu | 6c029e7af7 | 6 years ago |
Nimetu | 9503e2f28f | 6 years ago |
Riasan | f14c4d7746 | 6 years ago |
ulukyn | 23fe859e19 | 6 years ago |
Nimetu | 345e114589 | 6 years ago |
Nimetu | e780b09ace | 6 years ago |
Nimetu | 4c516f90f5 | 6 years ago |
Nimetu | 673c7a71e7 | 6 years ago |
Riasan | c6978f769f | 6 years ago |
Riasan | 319ae23064 | 6 years ago |
Riasan | 3e2e6cb696 | 6 years ago |
Riasan | 3c66bf2ba2 | 6 years ago |
Riasan | 1390a45f71 | 6 years ago |
Nimetu | e4ac3748e9 | 6 years ago |
Nimetu | c43ffc5a85 | 6 years ago |
Riasan | 92388de52d | 6 years ago |
Nimetu | 2bba699a82 | 6 years ago |
Nimetu | 4f410c22d7 | 6 years ago |
kervala | 37f5f6ef5b | 6 years ago |
ulukyn | d599fa4c14 | 6 years ago |
ulukyn | b4d09e0774 | 6 years ago |
ulukyn | 6f65197479 | 6 years ago |
ulukyn | 569599281b | 6 years ago |
ulukyn | 10562b720b | 6 years ago |
ulukyn | 1fc73a8079 | 6 years ago |
ulukyn | f821ff6973 | 6 years ago |
Riasan | d51b3b2eae | 6 years ago |
Riasan | 90c99b0b0e | 6 years ago |
Riasan | 48b2e9799e | 6 years ago |
ulukyn | 3b9550ca2a | 6 years ago |
ulukyn | 033bd1f373 | 6 years ago |
Riasan | 9c680f43ce | 6 years ago |
Riasan | 537865cdb9 | 6 years ago |
ulukyn | 60feb8bc57 | 6 years ago |
ulukyn | dd6057ad71 | 6 years ago |
ulukyn | e4ad9e425b | 6 years ago |
ulukyn | 056c6b86e6 | 6 years ago |
Riasan | 882e067fc0 | 6 years ago |
Riasan | a82a018f40 | 6 years ago |
Riasan | eb1c367464 | 6 years ago |
teanwen | 4ca7ea8957 | 6 years ago |
ulukyn | 6c731f049e | 6 years ago |
ulukyn | 363a59d238 | 6 years ago |
Riasan | b59b8a51a9 | 6 years ago |
Nimetu | 56727e7818 | 6 years ago |
ulukyn | 5648981968 | 6 years ago |
Riasan | 0d4b4cb7d8 | 6 years ago |
Riasan | e6d73fa1e1 | 6 years ago |
Riasan | c1510a8fb8 | 6 years ago |
Riasan | beb3dca614 | 6 years ago |
Riasan | 80204090d4 | 6 years ago |
Riasan | 57e55ed250 | 6 years ago |
Riasan | 5601d84d60 | 6 years ago |
Riasan | 2b24a51439 | 6 years ago |
Riasan | 3343f46e11 | 6 years ago |
Riasan | 82e5e1a4fc | 6 years ago |
Riasan | 19285bc8e9 | 6 years ago |
Riasan | cdbd2e1f47 | 6 years ago |
ulukyn | 203187542c | 6 years ago |
ulukyn | 57440753a9 | 6 years ago |
Riasan | f8a252abcf | 6 years ago |
Nimetu | 1dc01cf2ff | 6 years ago |
Nimetu | 2dd3764ca8 | 6 years ago |
kervala | 1e613c967c | 6 years ago |
kervala | 2f3a5f2606 | 6 years ago |
kervala | 5a7e143f55 | 6 years ago |
kervala | 689cc3e40a | 6 years ago |
Nimetu | 9debb33767 | 6 years ago |
ulukyn | 9237868f44 | 6 years ago |
ulukyn | c2ae7742a7 | 6 years ago |
ulukyn | d6cbf71729 | 6 years ago |
ulukyn | 24af545155 | 6 years ago |
ulukyn | 397fc6a589 | 6 years ago |
ulukyn | 29d931ed3c | 6 years ago |
Riasan | 2fce4d5f5a | 6 years ago |
Ul U'Kyn | 453c81bc7c | 6 years ago |
Riasan | 56f450782f | 6 years ago |
Riasan | dda9dff6ba | 6 years ago |
Riasan | e0266dedcb | 6 years ago |
Riasan | 28fd5a7265 | 6 years ago |
kervala | e300f6219e | 6 years ago |
Nimetu | 2e479e6165 | 6 years ago |
Nimetu | 9d0576fbcf | 6 years ago |
ulukyn | 115f47bada | 6 years ago |
ulukyn | 506b56c1c6 | 6 years ago |
kervala | 125f11fc2e | 6 years ago |
kervala | 364327047e | 6 years ago |
ulukyn | 682b7d16b4 | 6 years ago |
kervala | 6eb407e5be | 6 years ago |
ulukyn | df4f3b7f8c | 6 years ago |
kervala | 81929a6a75 | 6 years ago |
kervala | 53166342d8 | 6 years ago |
ulukyn | 239f823305 | 6 years ago |
ulukyn | dbce461590 | 6 years ago |
ulukyn | b1ce25a9b8 | 6 years ago |
kervala | ab234a43b0 | 6 years ago |
ulukyn | a2fb4158c1 | 6 years ago |
ulukyn | f8924c44ad | 6 years ago |
ulukyn | cab6b7faed | 6 years ago |
kervala | 5365b16c48 | 6 years ago |
kervala | 4545b43160 | 6 years ago |
kervala | c3e95b7a74 | 6 years ago |
kervala | 7620964a4e | 6 years ago |
kervala | f6bc7081d1 | 6 years ago |
kervala | 05d601f8ec | 6 years ago |
ulukyn | 79a62ed048 | 6 years ago |
kervala | f8a4be8683 | 6 years ago |
kervala | e14d43f262 | 6 years ago |
Riasan | eb4f1aac92 | 6 years ago |
ulukyn | 217533f0f7 | 6 years ago |
ulukyn | 0fe98e8150 | 6 years ago |
ulukyn | 5d5a818fd6 | 6 years ago |
Riasan | 1bfc9824ba | 6 years ago |
kervala | 0e3d466678 | 7 years ago |
kervala | 29afcd7f9c | 7 years ago |
Riasan | ca3e8f284c | 7 years ago |
ulukyn | 15cbe4d1c1 | 7 years ago |
ulukyn | 9192b129d9 | 7 years ago |
Nimetu | c84ef71e21 | 7 years ago |
ulukyn | 455ee32bd5 | 7 years ago |
ulukyn | 7dd56d06d0 | 7 years ago |
ulukyn | 9eca2f69cd | 7 years ago |
Riasan | 30bbcb2345 | 7 years ago |
kervala | 6311240b6c | 7 years ago |
Riasan | 5e7799f089 | 7 years ago |
ulukyn | 085770a098 | 7 years ago |
ulukyn | fbcaf29a3d | 7 years ago |
ulukyn | 100161466d | 7 years ago |
ulukyn | df9c2ff282 | 7 years ago |
ulukyn | dca2173d63 | 7 years ago |
ulukyn | f3f561f96a | 7 years ago |
kervala | ed394862b7 | 7 years ago |
kervala | 72277a51a2 | 7 years ago |
ulukyn | fc974e09a6 | 7 years ago |
ulukyn | 31fd4e311d | 7 years ago |
kervala | afceebb641 | 7 years ago |
ulukyn | 0b41daaaa2 | 7 years ago |
ulukyn | 8ab4221593 | 7 years ago |
ulukyn | 5fcd64b537 | 7 years ago |
ulukyn | 7741d3e0c5 | 7 years ago |
Nuno Gonçalves | 6f22bc0478 | 7 years ago |
ulukyn | a5f98add80 | 7 years ago |
ulukyn | bb667c736c | 7 years ago |
ulukyn | 668d7a556f | 7 years ago |
ulukyn | e17b290367 | 7 years ago |
ulukyn | 93364d86b4 | 7 years ago |
ulukyn | fb2ab5c6a7 | 7 years ago |
ulukyn | a7e2f90e1e | 7 years ago |
ulukyn | 7c12f1027f | 7 years ago |
ulukyn | d824ff5baf | 7 years ago |
ulukyn | b377eefdf3 | 7 years ago |
ulukyn | 5c9418cff7 | 7 years ago |
ulukyn | 6cc550732b | 7 years ago |
ulukyn | fcfb17c784 | 7 years ago |
ulukyn | 2625d08c09 | 7 years ago |
Nimetu | 531b07db69 | 7 years ago |
ulukyn | 9cc97b8eba | 7 years ago |
Riasan | 22b06fdb3e | 7 years ago |
Riasan | 05baa720e9 | 7 years ago |
ulukyn | 741aac46de | 7 years ago |
Nimetu | dcb7114370 | 7 years ago |
Nimetu | f960a1114f | 7 years ago |
Nimetu | d48dd75efd | 7 years ago |
Riasan | 475f456926 | 7 years ago |
Nimetu | 0a3f2744b8 | 7 years ago |
Nimetu | 4b588caaf6 | 7 years ago |
Nimetu | 6bb44135c0 | 7 years ago |
Nimetu | 675cd54232 | 7 years ago |
Riasan | 0159dfdd70 | 7 years ago |
Nimetu | e7a8f104bf | 7 years ago |
Nimetu | fd2e269e3c | 7 years ago |
Nimetu | 066057d04c | 7 years ago |
Nimetu | 5ee74c1c05 | 7 years ago |
Nimetu | 923084a818 | 7 years ago |
Nimetu | 11150e6b79 | 5 years ago |
Nimetu | a5aa8e48a5 | 5 years ago |
Riasan | 92683b7ac0 | 7 years ago |
Riasan | a7b0079909 | 7 years ago |
Riasan | 8be4abf0fe | 7 years ago |
Riasan | f47f2b4801 | 7 years ago |
Riasan | 7c8eb4b3c6 | 7 years ago |
Riasan | 146ccbbe4c | 7 years ago |
Nuno Gonçalves | 13b6f49c8e | 7 years ago |
Nimetu | 26d8b86949 | 7 years ago |
Nimetu | 79c48999ec | 7 years ago |
ulukyn | 11559c57c1 | 7 years ago |
ulukyn | b927d75287 | 7 years ago |
ulukyn | f6eee28b3e | 7 years ago |
kervala | 7c8e7850ea | 7 years ago |
ulukyn | b67bd10278 | 7 years ago |
ulukyn | 855598aa86 | 7 years ago |
ulukyn | f02a992413 | 7 years ago |
ulukyn | a0f48f4c8e | 7 years ago |
ulukyn | d2d1062127 | 7 years ago |
Riasan | c6fa21c9d7 | 7 years ago |
Riasan | e22ca5df54 | 7 years ago |
Riasan | 5ca66c6714 | 7 years ago |
ulukyn | 7a4a59a816 | 7 years ago |
ulukyn | d7fe602ccd | 7 years ago |
ulukyn | 3be81cd4d6 | 7 years ago |
ulukyn | ed6e38b1f4 | 7 years ago |
kervala | 0f02701326 | 7 years ago |
Ul U'Kyn | eaf08e863e | 7 years ago |
ulukyn@gmail.com | 805fb726cc | 7 years ago |
Riasan | d2a46df79d | 7 years ago |
Riasan | 31fe6a4095 | 7 years ago |
kervala | 6cbc8d1d8a | 7 years ago |
ulukyn@gmail.com | da814e1c5a | 7 years ago |
Riasan | 5afbc26916 | 7 years ago |
Ul U'Kyn | b5234633b4 | 7 years ago |
Riasan | c60705a297 | 7 years ago |
kervala | ed0437c906 | 7 years ago |
kervala | afef0699c9 | 7 years ago |
kervala | c4a1176cb3 | 7 years ago |
kervala | 45c88d64ba | 7 years ago |
kervala | 347b783e3e | 7 years ago |
Ul U'Kyn | 9d4829ec54 | 7 years ago |
Ul U'Kyn | c37ef9592e | 7 years ago |
ulukyn@gmail.com | d45e69783d | 7 years ago |
ulukyn@gmail.com | cf7f969311 | 7 years ago |
ulukyn@gmail.com | ed8b4282e9 | 7 years ago |
ulukyn@gmail.com | 370972d860 | 7 years ago |
Nimetu | c03dcd268f | 7 years ago |
kervala | 336f339c1f | 7 years ago |
kervala | 52fe4dd7fe | 7 years ago |
Nimetu | e4f6010fbe | 7 years ago |
kervala | d9f18c96d8 | 7 years ago |
Nimetu | 09dd0e57c5 | 7 years ago |
kervala | e234b1518f | 7 years ago |
kervala | 016f9dae35 | 7 years ago |
ulukyn@gmail.com | f7a3e6a4ee | 7 years ago |
Nimetu | c440e9fc40 | 7 years ago |
Nimetu | b46c12b7b4 | 7 years ago |
ulukyn@gmail.com | 49f048787f | 7 years ago |
kervala | d29865deae | 7 years ago |
Nimetu | 201fc3eb12 | 7 years ago |
Nimetu | ecc7cac376 | 7 years ago |
kervala | 1088b2a493 | 7 years ago |
kervala | ac7474c7ba | 7 years ago |
ulukyn@gmail.com | 4b22f4bf11 | 7 years ago |
Nimetu | 05e1346b5e | 7 years ago |
Nimetu | c7e0b56a40 | 7 years ago |
ulukyn@gmail.com | 27364b29d2 | 7 years ago |
ulukyn@gmail.com | b640c0ce97 | 7 years ago |
Nimetu | 37d6dc50f0 | 7 years ago |
Nimetu | 655dee03b4 | 8 years ago |
kervala | b349fe3c77 | 8 years ago |
kervala | bee1a57ab9 | 8 years ago |
kervala | 36bd31c809 | 8 years ago |
Nimetu | 527d257b93 | 8 years ago |
Nimetu | 30512804d5 | 8 years ago |
kervala | 105c95f71b | 8 years ago |
Nimetu | cb65c89d19 | 8 years ago |
kervala | feff7422d2 | 8 years ago |
Nuno Gonçalves | 648e3ba184 | 8 years ago |
Nuno Gonçalves | c9c0cbe88f | 8 years ago |
kervala | 627cec783c | 8 years ago |
kervala | a728f3b73e | 8 years ago |
kervala | cb55615659 | 8 years ago |
Riasan | abe569ce51 | 8 years ago |
Nimetu | 2b7dac4450 | 8 years ago |
Nimetu | 087958eb6c | 8 years ago |
Riasan | 1760d16dd2 | 8 years ago |
Riasan | 2dbcb978a4 | 8 years ago |
Riasan | 6fb823a9be | 8 years ago |
Riasan | cfc1951be6 | 8 years ago |
Riasan | 9d01b4dfd8 | 8 years ago |
Nimetu | fcbdbd17b7 | 8 years ago |
Nimetu | bb3b7e8277 | 8 years ago |
Nimetu | b8a3405ad7 | 8 years ago |
Nimetu | 5f8fc673d1 | 8 years ago |
kervala | 5e27fe01f1 | 8 years ago |
Nimetu | 082704210b | 8 years ago |
Nimetu | eb23a3b61c | 8 years ago |
kervala | f739ed9e62 | 8 years ago |
kervala | d0a199d22d | 8 years ago |
Nimetu | b78e8541ef | 8 years ago |
kervala | 90c1a21ba6 | 8 years ago |
kervala | d0e8ee195c | 8 years ago |
kervala | 91b126a33a | 8 years ago |
kervala | 0845ebb5bd | 8 years ago |
Nimetu | 8f5588e0ec | 8 years ago |
kervala | 685bb9fb14 | 8 years ago |
Nimetu | aa4f7ff697 | 8 years ago |
Ul U'Kyn | af3fe227c8 | 8 years ago |
Nuno Gonçalves | 79e916f61d | 8 years ago |
Nuno Gonçalves | d33d0ffdc5 | 8 years ago |
Nuno Gonçalves | b40d52a5b1 | 8 years ago |
Nuno Gonçalves | bc8ae1ed07 | 8 years ago |
Ul U'Kyn | 0e122c76ba | 8 years ago |
Nimetu | 1f948211b8 | 8 years ago |
Guillaume Dupuy | ea7119bead | 8 years ago |
Guillaume Dupuy | 79636f393d | 8 years ago |
Nimetu | 624a0c867b | 8 years ago |
Nuno Gonçalves | 37990da5f5 | 8 years ago |
Nimetu | 2939beddba | 8 years ago |
Nimetu | b54155f690 | 8 years ago |
Nimetu | 946b509700 | 8 years ago |
Nimetu | 71e4004dd0 | 8 years ago |
Guillaume Dupuy | 67877cb846 | 8 years ago |
Guillaume Dupuy | b0ad916c37 | 8 years ago |
Nimetu | f52abb2933 | 8 years ago |
Nimetu | 327686c1ce | 8 years ago |
Nimetu | 34573de13b | 8 years ago |
Nimetu | 88c81e8895 | 8 years ago |
Nuno Gonçalves | 70823d15a9 | 8 years ago |
ulukyn@gmail.com | c43627159c | 8 years ago |
Nimetu | ab5aa5b2c4 | 8 years ago |
ulukyn@gmail.com | 8dce467417 | 8 years ago |
ulukyn@gmail.com | 56c4674d10 | 8 years ago |
Nuno Gonçalves | 14c7013348 | 8 years ago |
kervala | 47ac7ddd94 | 8 years ago |
kervala | 0a86498c0f | 8 years ago |
kervala | eb91466d3b | 8 years ago |
kervala | 2dbbfd6598 | 8 years ago |
kervala | 84618b4fbe | 8 years ago |
kervala | 928777516e | 8 years ago |
kervala | cdd1250066 | 8 years ago |
kervala | c91cd27a25 | 8 years ago |
kervala | 6320e1309a | 8 years ago |
Nuno Gonçalves | fbf0d664fc | 8 years ago |
kervala | 6927bb5849 | 8 years ago |
kervala | 4514d1179b | 8 years ago |
Nimetu | 4e4985d647 | 8 years ago |
Nimetu | b95fed61f2 | 8 years ago |
kervala | f069df82b3 | 8 years ago |
Nuno Gonçalves | 0fd0934111 | 8 years ago |
kervala | 8884a8fcb1 | 8 years ago |
kervala | b04451c473 | 8 years ago |
kervala | 929cf93b87 | 8 years ago |
kervala | 89318ea69d | 8 years ago |
kervala | 0328f16c6c | 8 years ago |
kervala | c8bc57d0a4 | 8 years ago |
kervala | 4e99767ae2 | 8 years ago |
Cédric OCHS | 0c830e00e1 | 8 years ago |
Guillaume Dupuy | 73191a2388 | 8 years ago |
Guillaume Dupuy | fb280101f1 | 8 years ago |
kervala | 81008cd9ff | 8 years ago |
ulukyn@gmail.com | 3f58cbd077 | 8 years ago |
ulukyn@gmail.com | b0dc979718 | 8 years ago |
ulukyn@gmail.com | 6238139c08 | 8 years ago |
ulukyn@gmail.com | 6ff3cc9d77 | 8 years ago |
ulukyn@gmail.com | c6f10d493d | 8 years ago |
ulukyn@gmail.com | 68e6dbaf9a | 8 years ago |
ulukyn@gmail.com | 80fc274813 | 8 years ago |
kervala | afe3863f0f | 8 years ago |
kervala | c14d0733c9 | 8 years ago |
kervala | 2b53cc82aa | 8 years ago |
kervala | 035a267e92 | 8 years ago |
kervala | ac404a2c8f | 8 years ago |
ulukyn@gmail.com | 1a4c020e56 | 8 years ago |
ulukyn@gmail.com | 9e73cd8d22 | 8 years ago |
ulukyn@gmail.com | bd7b703f3a | 8 years ago |
kervala | f085121937 | 8 years ago |
kervala | c767e55344 | 8 years ago |
kervala | ef625959f0 | 8 years ago |
kervala | cf98f1fdbc | 8 years ago |
kervala | 5ce03c278b | 8 years ago |
kervala | fef7cc88fb | 8 years ago |
kervala | 4316dfaa98 | 8 years ago |
kervala | c7f2bc6fa3 | 8 years ago |
kervala | 991372378a | 8 years ago |
kervala | 38d472220e | 8 years ago |
kervala | eddc1e8434 | 8 years ago |
kervala | 042eb30b6f | 8 years ago |
kervala | 0beab678ac | 8 years ago |
kervala | 44f2bcef8e | 8 years ago |
kervala | c9c542de8b | 8 years ago |
kervala | 316ee0d69c | 8 years ago |
Cédric OCHS | f864aceee1 | 8 years ago |
Guillaume Dupuy | e82cb174e0 | 8 years ago |
Guillaume Dupuy | 6bfb1fb588 | 8 years ago |
kervala | 920f226d98 | 8 years ago |
kervala | beb8ffc847 | 8 years ago |
Nimetu | 6150489f57 | 8 years ago |
Nimetu | 082b23ef55 | 8 years ago |
kervala | f8176cedb3 | 8 years ago |
kervala | ab93110312 | 8 years ago |
kervala | 8adf092cb8 | 8 years ago |
kervala | fe0210690d | 8 years ago |
kervala | ea165fd7d7 | 8 years ago |
kervala | 3950b8c255 | 8 years ago |
kervala | 4eb21c1612 | 8 years ago |
Nuno Gonçalves | aadf864e4e | 8 years ago |
Nimetu | 3c6866381f | 8 years ago |
kervala | 4461c0de7b | 8 years ago |
kervala | 7628842931 | 8 years ago |
kervala | 50d80ad08a | 8 years ago |
kervala | 7e2bbe1f37 | 8 years ago |
Nuno Gonçalves | 8b2d23109f | 8 years ago |
kervala | ff1e902b5b | 8 years ago |
kervala | 235e9bdbfd | 8 years ago |
kervala | 5844a4ff32 | 8 years ago |
kervala | 7a894c1506 | 8 years ago |
kervala | 814b3d003b | 8 years ago |
kervala | 837197ca53 | 8 years ago |
kervala | ca752e575c | 8 years ago |
kervala | 0c30ddd380 | 8 years ago |
kervala | 1e1f6ece8b | 8 years ago |
kervala | 2afe4e5944 | 8 years ago |
kervala | 5322109eb3 | 8 years ago |
kervala | 280a2b5175 | 8 years ago |
kervala | 35367c691f | 8 years ago |
kervala | a4fa0ca0fe | 8 years ago |
kervala | ea30d0051b | 8 years ago |
kervala | 68163157ba | 8 years ago |
kervala | c3c3951bd0 | 8 years ago |
kervala | 564f00014a | 8 years ago |
kervala | d6eadbf02b | 8 years ago |
kervala | 588d50a429 | 8 years ago |
kervala | acfdb8d6fa | 8 years ago |
kervala | d5d4ba1e0c | 8 years ago |
kervala | 7363803b2c | 8 years ago |
Cédric OCHS | 33fe8d5148 | 8 years ago |
kervala | 064c3778f2 | 8 years ago |
Guillaume Dupuy | b19f5e3c7e | 8 years ago |
Guillaume Dupuy | 7592d3e6c4 | 8 years ago |
kervala | 1879212116 | 8 years ago |
kervala | 6964d7a68e | 8 years ago |
kervala | d2cd7ebb1a | 8 years ago |
kervala | 2e7af6ab0d | 8 years ago |
kervala | 1e98eeaa0b | 8 years ago |
kervala | d100dd7823 | 8 years ago |
kervala | 9bd254d25a | 8 years ago |
kervala | 5517ff15f5 | 8 years ago |
kervala | ea1522c904 | 8 years ago |
kervala | 6392301ebc | 8 years ago |
kervala | 9b70baf02b | 8 years ago |
kervala | 7b3fe00c6a | 8 years ago |
kervala | 73368b0635 | 8 years ago |
kervala | 0238b30489 | 8 years ago |
kervala | 35cdaab027 | 8 years ago |
kervala | f5240615b5 | 8 years ago |
kervala | 5ed1b3a35b | 8 years ago |
kervala | a7b799fef0 | 8 years ago |
kervala | a54d032093 | 8 years ago |
kervala | 6c7059b6fe | 8 years ago |
kervala | 1891033bc1 | 8 years ago |
kervala | 14ee62676f | 8 years ago |
kervala | c418eb0c03 | 8 years ago |
kervala | 702516171d | 8 years ago |
kervala | 142a06f40d | 8 years ago |
kervala | f525deb1e2 | 8 years ago |
Guillaume Dupuy | a79c371598 | 8 years ago |
Guillaume Dupuy | 14966eef4c | 8 years ago |
Guillaume Dupuy | 02316b9e8d | 8 years ago |
Guillaume Dupuy | 2818e9339d | 8 years ago |
kervala | c3c377e4a6 | 8 years ago |
kervala | fe9def78f0 | 8 years ago |
Guillaume Dupuy | 9c5ecea867 | 8 years ago |
Guillaume Dupuy | 0e467cba86 | 8 years ago |
Guillaume Dupuy | 1d960d91ff | 8 years ago |
kervala | 8324628ad4 | 8 years ago |
kervala | c3c4e56e4f | 8 years ago |
kervala | 2c84f4b178 | 8 years ago |
kervala | 55d357e555 | 8 years ago |
kervala | 2c757adbaa | 8 years ago |
kervala | 1f95d69a81 | 8 years ago |
kervala | 40fdaa50fa | 8 years ago |
kervala | 3ab030e359 | 8 years ago |
kervala | 41d0e70064 | 8 years ago |
kervala | aefaa8f098 | 8 years ago |
kervala | a32878ab06 | 8 years ago |
kervala | a484a4aa53 | 8 years ago |
kervala | 7559190c29 | 8 years ago |
kervala | 4992c14a5f | 8 years ago |
kervala | 0eeae6c652 | 8 years ago |
kervala | e4d156be08 | 8 years ago |
kervala | 67cc549fe6 | 8 years ago |
kervala | 20f0092e63 | 8 years ago |
kervala | fd3b681203 | 8 years ago |
kervala | d68dbdef7a | 8 years ago |
kervala | c5881e9f11 | 8 years ago |
kervala | 320f3e6c46 | 8 years ago |
kervala | 45c9b402ad | 8 years ago |
kervala | 136325930a | 8 years ago |
kervala | ac9dcd663d | 8 years ago |
kervala | 73bce1e259 | 8 years ago |
kervala | e812b2ed6e | 8 years ago |
kervala | 0b0171b723 | 8 years ago |
kervala | 032e46b97a | 8 years ago |
kervala | 2fc39bc14d | 8 years ago |
kervala | 881e5457ac | 8 years ago |
kervala | abdb7fca21 | 8 years ago |
kervala | dcf90f381f | 8 years ago |
kervala | ce576954e0 | 8 years ago |
kervala | 3d84a68df4 | 8 years ago |
kervala | fbe367bd39 | 8 years ago |
kervala | 4d0c075cc1 | 8 years ago |
kervala | 9c4e3c36c7 | 8 years ago |
kervala | ff0a240d40 | 8 years ago |
Nimetu | 935b80cc68 | 8 years ago |
kervala | fe825a0adc | 8 years ago |
kervala | acd58ceb07 | 8 years ago |
kervala | 894659bdc8 | 8 years ago |
kervala | 7eac64f18c | 8 years ago |
kervala | dcec9eeee6 | 8 years ago |
kervala | 6a7f4083f3 | 8 years ago |
kervala | 54134899f3 | 8 years ago |
kervala | 6b2c4a44b1 | 8 years ago |
kervala | ce3cb3efa4 | 8 years ago |
kervala | dfe40fe491 | 8 years ago |
kervala | 25beda5c17 | 8 years ago |
kervala | d95aa50bdf | 8 years ago |
kervala | e3576787ed | 8 years ago |
kervala | 0037b40751 | 8 years ago |
kervala | cba648fa5a | 8 years ago |
kervala | 6d4b9b5235 | 8 years ago |
kervala | 914cb6af64 | 8 years ago |
kervala | 0e3320554a | 8 years ago |
kervala | 3d461d9dd5 | 8 years ago |
kervala | bf5d8a366a | 8 years ago |
kervala | 52c150f067 | 8 years ago |
kervala | 904e17475e | 8 years ago |
kervala | 7178c5ba20 | 8 years ago |
Nimetu | 5848afcc6d | 8 years ago |
Nimetu | 0766ec46f8 | 8 years ago |
Nimetu | a86c38648b | 8 years ago |
kervala | 8835bc7551 | 8 years ago |
kervala | 51df1034d9 | 8 years ago |
Nimetu | b08fa15377 | 8 years ago |
ulukyn | 243bed54ec | 8 years ago |
kervala | f843974930 | 8 years ago |
kervala | e6f33e71c9 | 8 years ago |
kervala | c2b11fc1f7 | 8 years ago |
kervala | 13f862c8aa | 9 years ago |
kervala | 96f7cd9f59 | 9 years ago |
kervala | 166acdf69c | 9 years ago |
kervala | 77cc868cd6 | 9 years ago |
kervala | dc0c46a0e3 | 9 years ago |
kervala | cacecebfff | 9 years ago |
kervala | aada068245 | 9 years ago |
Nimetu | 869e8572cf | 9 years ago |
kervala | 20ac3b6698 | 9 years ago |
Nimetu | 16eeb70f61 | 9 years ago |
Nimetu | 705d3a6168 | 9 years ago |
kervala | 205ce29bfa | 9 years ago |
Riasan | 0a75d3ef7d | 9 years ago |
kervala | 13d7f5c1dd | 9 years ago |
Nimetu | 0a00bca5a3 | 9 years ago |
Riasan | b526dab356 | 9 years ago |
Nimetu | d1fdaaf786 | 9 years ago |
kervala | c3202d871e | 9 years ago |
kervala | 939cb136b7 | 9 years ago |
Nimetu | ec616deeb8 | 9 years ago |
Riasan | f4bb446439 | 9 years ago |
Nimetu | 1f98ed86d6 | 9 years ago |
kervala | 8375badcdd | 9 years ago |
kervala | ea45b2f8c7 | 9 years ago |
kervala | 90362c3609 | 9 years ago |
Nimetu | 8f9ab3c024 | 9 years ago |
kervala | 1553937124 | 9 years ago |
kervala | 3386ee874e | 9 years ago |
Nimetu | a8113bfaff | 9 years ago |
kervala | c9ad23a812 | 9 years ago |
kervala | bb692940d2 | 9 years ago |
kervala | 1aea0f981c | 9 years ago |
kervala | fa01980634 | 9 years ago |
Nimetu | f90fa23206 | 9 years ago |
kervala | f5aa87c9df | 9 years ago |
kervala | 29422726a2 | 9 years ago |
kervala | 1425aad8e3 | 9 years ago |
kervala | 7ebc0ae072 | 9 years ago |
kervala | 65e48df782 | 9 years ago |
kervala | c166ed35b0 | 9 years ago |
kervala | 88f5c244d3 | 9 years ago |
Nimetu | 52f81ca56d | 9 years ago |
kervala | b9ade7142a | 9 years ago |
kervala | 36ff7e50b4 | 9 years ago |
kervala | ec7cc189df | 9 years ago |
kervala | 86084649a2 | 9 years ago |
vl | f86da6ec78 | 9 years ago |
kervala | a1994702a3 | 9 years ago |
kervala | 85948a1f1c | 9 years ago |
kervala | 719e6f6e85 | 9 years ago |
kervala | 119bbe1f71 | 9 years ago |
kervala | e23c41e477 | 9 years ago |
kervala | 81098186e3 | 9 years ago |
kervala | cf79569bb0 | 9 years ago |
kervala | addbfd7553 | 9 years ago |
kervala | 47d1d7a111 | 9 years ago |
kervala | 9017d28485 | 9 years ago |
kervala | 57268e0f43 | 9 years ago |
kervala | c396eecebf | 9 years ago |
kervala | a22483e021 | 9 years ago |
kervala | d03bbcdf73 | 9 years ago |
Nimetu | 60a739955b | 9 years ago |
kervala | bd69c167d3 | 9 years ago |
Nimetu | f02b388d06 | 9 years ago |
kervala | 248eb71752 | 9 years ago |
kervala | 49c801c5d8 | 9 years ago |
kervala | ff5a82ec4f | 9 years ago |
kervala | c7f2d2c701 | 9 years ago |
Nimetu | 5a2dc969cb | 9 years ago |
kervala | 0296ba8123 | 9 years ago |
kervala | 9e33df4532 | 9 years ago |
kervala | 155902a229 | 9 years ago |
kervala | a9685ac366 | 9 years ago |
kervala | 1168825ee1 | 9 years ago |
Nimetu | f7f275671f | 9 years ago |
kervala | 4e6058d9e6 | 9 years ago |
kervala | d44b8adf7e | 9 years ago |
kervala | 4a6eed78e9 | 9 years ago |
kervala | ed522e4445 | 9 years ago |
kervala | 601cb4347a | 9 years ago |
Nimetu | 7a8c8d95d8 | 9 years ago |
Nimetu | edd16d9a82 | 9 years ago |
kervala | b8cec2dff1 | 9 years ago |
kervala | 8553a9abfb | 9 years ago |
kervala | 366d3a7583 | 9 years ago |
kervala | 51e4d2a53c | 9 years ago |
kervala | 7f5219dd16 | 9 years ago |
kervala | 69e8116333 | 9 years ago |
kervala | 7d9ff0ad72 | 9 years ago |
kervala | c0f51c1c5b | 9 years ago |
kervala | 465609f942 | 9 years ago |
kervala | 54ac3bd1d5 | 9 years ago |
kervala | 346a0297f6 | 9 years ago |
kervala | 6cd73cca03 | 9 years ago |
kervala | ef5b22045c | 9 years ago |
kervala | 5b93785499 | 9 years ago |
kervala | 2d8407157b | 9 years ago |
kervala | 435573b305 | 9 years ago |
kervala | b33a9f7651 | 9 years ago |
kervala | 6862a48c47 | 9 years ago |
kervala | e42d3a3f74 | 9 years ago |
kervala | 53f2292613 | 9 years ago |
kervala | 19c149b5f3 | 9 years ago |
Nimetu | d4c8f5760b | 9 years ago |
kervala | 8f6a72e86f | 9 years ago |
kervala | 5837c14e64 | 9 years ago |
Nimetu | 37ea9de8ad | 9 years ago |
Nimetu | e2d1213708 | 9 years ago |
kervala | 05ca6f74c6 | 9 years ago |
kervala | 7bcde43a63 | 9 years ago |
kaetemi | f767e7a488 | 9 years ago |
kervala | 6b2e47e59e | 9 years ago |
kervala | 264e8be1a2 | 9 years ago |
kervala | 833976be5b | 9 years ago |
kervala | 1eddef3c93 | 9 years ago |
kervala | bbaaa17d7a | 9 years ago |
kervala | d99cf4bd95 | 9 years ago |
kervala | 410b9bcf55 | 9 years ago |
kervala | 0c0bac175f | 9 years ago |
kervala | 114543ba07 | 9 years ago |
kervala | 182a9201c3 | 9 years ago |
kervala | b0d50dea69 | 9 years ago |
kervala | 13abb130bd | 9 years ago |
kervala | d340f00d01 | 9 years ago |
kervala | 81829bf73e | 9 years ago |
kervala | 992b624d4c | 9 years ago |
kervala | f258a9695a | 9 years ago |
kervala | 8f82ad85db | 9 years ago |
kaetemi | b9d366372e | 9 years ago |
kaetemi | 0c2ff923b7 | 9 years ago |
kervala | 96c1328bef | 9 years ago |
kervala | eedfe1471b | 9 years ago |
kervala | 6686503e51 | 9 years ago |
kervala | 2f23fabd02 | 9 years ago |
kervala | 0db2ed85ca | 9 years ago |
kervala | 46f6df3310 | 9 years ago |
kervala | efe7de773f | 9 years ago |
Nimetu | 261d9c789b | 9 years ago |
Nimetu | b7a3575746 | 9 years ago |
Nimetu | 5c7eeb6d32 | 9 years ago |
kervala | 31bdbb1fdc | 9 years ago |
kervala | d382cc2cc3 | 9 years ago |
kervala | f23c05c848 | 9 years ago |
kervala | 0ee75e810a | 9 years ago |
kervala | 29b03a445a | 9 years ago |
kervala | 26722fb579 | 9 years ago |
kervala | 12f3abbaaf | 9 years ago |
kervala | 62104e31b1 | 9 years ago |
kervala | f481a12799 | 9 years ago |
kervala | 36ed03aa5a | 9 years ago |
kervala | f8e46962e2 | 9 years ago |
kervala | 5123c48885 | 9 years ago |
kervala | e23f32e902 | 9 years ago |
kervala | dc042a3739 | 9 years ago |
kervala | d01204e972 | 9 years ago |
kervala | c54cdb7543 | 9 years ago |
kervala | bca35ec6e1 | 9 years ago |
kervala | 4985d4d724 | 9 years ago |
kervala | 3246b6ca55 | 9 years ago |
kervala | 89f4131e8d | 9 years ago |
kervala | 91f995b259 | 9 years ago |
kervala | 537f6ab83e | 9 years ago |
kervala | 776542be27 | 9 years ago |
kervala | 3728c5d00e | 9 years ago |
kervala | e2d437e846 | 9 years ago |
kervala | 5284bd37f1 | 9 years ago |
kervala | 291d37a3e5 | 9 years ago |
kervala | ece1809a70 | 9 years ago |
kervala | 0f8401a241 | 9 years ago |
kervala | c652fa8e37 | 9 years ago |
kervala | 3161ec2a77 | 9 years ago |
kervala | b555303a14 | 9 years ago |
kervala | d1e0ec8e1b | 9 years ago |
kervala | 6eebd478ee | 9 years ago |
kervala | abfa371561 | 9 years ago |
kervala | 848c660aef | 9 years ago |
kervala | 806b92920f | 9 years ago |
kervala | 499157b220 | 9 years ago |
kervala | 9a7dee4445 | 9 years ago |
kervala | cb46be8051 | 9 years ago |
kervala | 37424fdef4 | 9 years ago |
kervala | 8327d22117 | 9 years ago |
Nimetu | b7f809c6a7 | 9 years ago |
kervala | 89e29c8a43 | 9 years ago |
kervala | b4b2721369 | 9 years ago |
kervala | b873aae389 | 9 years ago |
Nimetu | 6230b76778 | 9 years ago |
kervala | e7e8832130 | 9 years ago |
kervala | 4c31865b0e | 9 years ago |
kervala | 77ae086af8 | 9 years ago |
kervala | fb41219ce8 | 9 years ago |
kervala | 8008b68877 | 9 years ago |
kervala | e1e580d82d | 9 years ago |
kervala | ff20ec3e8e | 9 years ago |
kervala | e892193a4f | 9 years ago |
kervala | 19dbdf4fad | 9 years ago |
kervala | 2093482f72 | 9 years ago |
kervala | 9c1d6d9831 | 9 years ago |
kervala | 3a0576a740 | 9 years ago |
kervala | 14b4eb7b25 | 9 years ago |
kervala | 55f4d2a677 | 9 years ago |
kervala | 24b3eeb235 | 9 years ago |
kervala | ed78c7153c | 9 years ago |
kervala | b5ef1ace01 | 9 years ago |
kervala | ddff1b4e5e | 9 years ago |
kervala | fa4fb1992d | 9 years ago |
kervala | 4fbe9caeba | 9 years ago |
kervala | aecf7b79b9 | 9 years ago |
kervala | 87e628cba0 | 9 years ago |
kervala | 487aca0979 | 9 years ago |
kervala | 0e0dbf688d | 9 years ago |
kervala | 3c75bdb82e | 9 years ago |
kervala | 6459d901ef | 9 years ago |
kervala | ed68c612ac | 9 years ago |
kervala | cf7a1e589f | 9 years ago |
kervala | 51b4f3e5ab | 9 years ago |
kervala | 782b410eef | 9 years ago |
kervala | 8cd6d46d1d | 9 years ago |
kervala | cffaaa7a77 | 9 years ago |
kervala | 563e79d3b8 | 9 years ago |
kervala | 5d26033ff8 | 9 years ago |
kervala | bd0da4d824 | 9 years ago |
kervala | 885b8da55f | 9 years ago |
kervala | f0d6d70b8c | 9 years ago |
kervala | 82274e7f99 | 9 years ago |
kervala | ccfd1c9721 | 9 years ago |
kervala | eae2e3fea1 | 9 years ago |
kervala | fbed1d5854 | 9 years ago |
kervala | 0540c386a6 | 9 years ago |
kervala | 325242c2e4 | 9 years ago |
kervala | 2be87f3c3e | 9 years ago |
kervala | 1cbf1720ca | 9 years ago |
kervala | 700b75f44a | 9 years ago |
kervala | e6b2e0088b | 9 years ago |
kervala | 5adebf258d | 9 years ago |
kervala | a8a1e04299 | 9 years ago |
kervala | 5f70be0308 | 9 years ago |
kervala | 9aea637643 | 9 years ago |
kervala | cf414d8c14 | 9 years ago |
kervala | 7abbc07bc7 | 9 years ago |
kervala | 5a6580dc38 | 9 years ago |
kervala | 539a99b1e3 | 9 years ago |
Nimetu | 6b13fdd770 | 9 years ago |
kervala | e2c7127f84 | 9 years ago |
kervala | 9059709265 | 9 years ago |
kervala | d03e896702 | 9 years ago |
kervala | bb0d2f6aa0 | 9 years ago |
kervala | f50c9c0866 | 9 years ago |
kervala | 3faac85a41 | 9 years ago |
kervala | d96e1da521 | 9 years ago |
kervala | d54e569b3f | 9 years ago |
kervala | 016f56578a | 9 years ago |
kervala | 6ea1421fd3 | 9 years ago |
kervala | cc282fd3d5 | 9 years ago |
kervala | b149c94a26 | 9 years ago |
kervala | cca0dd450e | 9 years ago |
kervala | fadb57ed00 | 9 years ago |
kervala | 72c70dee6a | 9 years ago |
kervala | f54b41f5cc | 9 years ago |
kervala | 563f92d27b | 9 years ago |
kervala | f820e7b703 | 9 years ago |
kervala | 7f5a9f4d91 | 9 years ago |
kervala | 3c4f324bfe | 9 years ago |
kervala | df816b2a5d | 9 years ago |
kervala | f3a971fc21 | 9 years ago |
kervala | 9a342f7acf | 9 years ago |
kervala | 6471fada97 | 9 years ago |
kervala | 4c5de7f9b7 | 9 years ago |
Nimetu | e44e131365 | 9 years ago |
kervala | 63983cd5ac | 9 years ago |
kervala | de5b3b478f | 9 years ago |
kervala | 4ca5d07360 | 9 years ago |
kervala | b1b5e87fe1 | 9 years ago |
kervala | 343278c586 | 9 years ago |
kervala | ef8c8d0401 | 9 years ago |
kervala | 9dc7f5102b | 9 years ago |
kervala | 3f4a5010f6 | 9 years ago |
kervala | 45367135d5 | 9 years ago |
kervala | ef29c2b5ef | 9 years ago |
kervala | ad3df5084a | 9 years ago |
kervala | ddba3e583c | 9 years ago |
Nimetu | 410ddea49d | 9 years ago |
kervala | 4785b88068 | 9 years ago |
kervala | ad6e10df76 | 9 years ago |
kervala | 5ee0b484da | 9 years ago |
kervala | e91c529a98 | 9 years ago |
kervala | 9b4127311b | 9 years ago |
kervala | 91c559d48a | 9 years ago |
kervala | b78afa1c4d | 9 years ago |
kervala | 738c28dae8 | 9 years ago |
kervala | 9a7d4d3684 | 9 years ago |
kervala | c9262b01c2 | 9 years ago |
kervala | cf89d60682 | 9 years ago |
kervala | a1ee429b92 | 9 years ago |
kervala | 47364c47c3 | 9 years ago |
kervala | 11c0a073ed | 9 years ago |
kervala | 295818e9a8 | 9 years ago |
kervala | bcfdd36844 | 9 years ago |
kervala | 46ce493ccb | 9 years ago |
kervala | 9bc9c8585b | 9 years ago |
kervala | df308276ed | 9 years ago |
kervala | 7247cba9eb | 9 years ago |
kervala | 2f45ff1ebe | 9 years ago |
kervala | 98c485bd94 | 9 years ago |
Nimetu | da34e717af | 9 years ago |
kervala | aee315bda9 | 9 years ago |
kervala | 6710268d0a | 9 years ago |
kervala | 12ae39eb53 | 9 years ago |
kervala | 83f43657ad | 9 years ago |
kervala | 545569d049 | 9 years ago |
kervala | 7a0c06a845 | 9 years ago |
kervala | 4806693f49 | 9 years ago |
kervala | 9b5c426c19 | 9 years ago |
kervala | d999e4a3bd | 9 years ago |
kervala | 86a903c96e | 9 years ago |
kervala | b6cf535fb0 | 9 years ago |
kervala | 59c0cf7f00 | 9 years ago |
Nimetu | bed1d04f6f | 9 years ago |
kervala | 8965a4d7a5 | 9 years ago |
kervala | 806a6d21ab | 9 years ago |
kervala | 5bc5527fd6 | 9 years ago |
kervala | 0d82e4ad7f | 9 years ago |
kervala | 335f5329ee | 9 years ago |
kervala | d7e9922dd7 | 9 years ago |
kervala | f4c853d922 | 9 years ago |
kervala | eb60aa4446 | 9 years ago |
kervala | 3b985311e0 | 9 years ago |
Nimetu | df07403586 | 9 years ago |
Nimetu | 67eee7f3dd | 9 years ago |
kervala | 664fef5c59 | 9 years ago |
kervala | 83bdc24c1f | 9 years ago |
kervala | 12da01085f | 9 years ago |
Nimetu | 193abf876b | 9 years ago |
kervala | ec4dea9975 | 9 years ago |
kervala | b1885e9783 | 9 years ago |
kervala | 1e9092a385 | 9 years ago |
kervala | d927ada0ae | 9 years ago |
kervala | 23ffb50cf1 | 9 years ago |
kervala | 9b337a064b | 9 years ago |
kervala | 92fde75ea0 | 9 years ago |
kervala | 56052cd908 | 9 years ago |
kervala | 050a3679f1 | 9 years ago |
kervala | f305a1f832 | 9 years ago |
kervala | 9135ed66cf | 9 years ago |
kervala | b079810b86 | 9 years ago |
kervala | 7ad47a3f91 | 9 years ago |
kervala | 0e63e81565 | 9 years ago |
Nimetu | 9d3ac48137 | 9 years ago |
Nimetu | f3223d268e | 9 years ago |
kervala | dcd5b3b325 | 9 years ago |
kervala | 0ff606bfe2 | 9 years ago |
Nimetu | 5ddc59f696 | 9 years ago |
Nimetu | 6746f163bd | 9 years ago |
kervala | 74f297f588 | 9 years ago |
kervala | 40d1e3407b | 9 years ago |
kervala | 7c37cce41e | 9 years ago |
kervala | 6e30322aba | 9 years ago |
kervala | 341ab98894 | 9 years ago |
kervala | 6f031728f5 | 9 years ago |
kervala | f90a29004c | 9 years ago |
Nimetu | 5c6e2109c4 | 9 years ago |
kervala | 8cbb4743e7 | 9 years ago |
kervala | f0d76f7ea1 | 9 years ago |
kervala | 58506f462c | 9 years ago |
Nimetu | 5fc50473f7 | 9 years ago |
kervala | b0b7e64936 | 9 years ago |
kervala | b46dfe178f | 9 years ago |
kervala | 9e60db1a89 | 9 years ago |
kervala | b9e6658562 | 9 years ago |
kervala | 00ce08e006 | 9 years ago |
kervala | d46f3fa5e9 | 9 years ago |
kervala | 78c311a1c5 | 9 years ago |
kervala | 8bcbe5b2b0 | 9 years ago |
kervala | e0decad6af | 9 years ago |
kervala | af3aede724 | 9 years ago |
kervala | e88b07519e | 9 years ago |
Nimetu | f37758b330 | 9 years ago |
kervala | f2f2c2edef | 9 years ago |
kervala | 9df3111f21 | 9 years ago |
kervala | 6643500a7c | 9 years ago |
kervala | fac22c9ae4 | 9 years ago |
kervala | b7cb377ca0 | 9 years ago |
Nimetu | 152200decc | 9 years ago |
kervala | 9c6d5322a7 | 9 years ago |
kervala | fd4519f447 | 9 years ago |
kervala | 5258818c8d | 9 years ago |
kervala | 2586f493f4 | 9 years ago |
kervala | 2021f97a6c | 9 years ago |
Nimetu | d380ce2522 | 9 years ago |
kervala | 3fea1d90ac | 9 years ago |
kervala | 6d1346d0cb | 9 years ago |
kervala | 09198ccde4 | 9 years ago |
kervala | 62a8964c79 | 9 years ago |
kervala | ec731539b9 | 9 years ago |
kervala | 1009cc933b | 9 years ago |
kervala | e87442e582 | 9 years ago |
kervala | 06b0c49412 | 9 years ago |
kervala | 5688c75bba | 9 years ago |
kervala | 10c890f16f | 9 years ago |
kervala | 876d880f87 | 9 years ago |
kervala | 02594e50de | 9 years ago |
kervala | 369a9efe0d | 9 years ago |
kervala | 0f41024e93 | 9 years ago |
kervala | ba2cfee2b1 | 9 years ago |
kervala | 96ac3ecefc | 9 years ago |
kervala | 5e9d8ff513 | 9 years ago |
kervala | 5a667862f4 | 9 years ago |
kervala | 04900c43ee | 9 years ago |
kervala | 60270b4e0c | 9 years ago |
kervala | f9357dd41d | 9 years ago |
kervala | 9dffada687 | 9 years ago |
kervala | f5a771fd7b | 9 years ago |
kervala | 241c715483 | 9 years ago |
kervala | 2c71549aff | 9 years ago |
kervala | 092a2acdb0 | 9 years ago |
kervala | 62053d8189 | 9 years ago |
kervala | 7e0e11ef3d | 9 years ago |
kervala | c1799e95d8 | 9 years ago |
kervala | 58a8f59c21 | 9 years ago |
kervala | a30af1401c | 9 years ago |
kervala | 4f574b034b | 9 years ago |
kervala | 049a5a6e91 | 9 years ago |
kervala | 0fa40775f4 | 9 years ago |
kervala | 797a83fcb0 | 9 years ago |
kervala | 201de6998f | 9 years ago |
kervala | a2ba342e06 | 9 years ago |
kervala | 64e4468943 | 9 years ago |
kervala | 7f62faa794 | 9 years ago |
Nimetu | c5a3d993be | 9 years ago |
Nimetu | bc9593e938 | 9 years ago |
kervala | 28bbf76c8f | 9 years ago |
kervala | a1c89b0d7b | 9 years ago |
kervala | cdab63fb2c | 9 years ago |
kervala | f8ad0e4466 | 9 years ago |
kervala | 3f55f85e10 | 9 years ago |
kervala | 2548561d1e | 9 years ago |
kervala | cc7c889775 | 9 years ago |
kervala | 53783c0e71 | 9 years ago |
kervala | 9cfebf3eb3 | 9 years ago |
kervala | 1e892148c7 | 9 years ago |
Nimetu | b3ffea9a17 | 9 years ago |
Nimetu | dc01c6afec | 9 years ago |
kervala | 6fa9131bf8 | 9 years ago |
kervala | cf4de232fc | 9 years ago |
kervala | 5a34740b15 | 9 years ago |
kervala | 54ce40729d | 9 years ago |
kervala | d30be0841e | 9 years ago |
kervala | f095121991 | 9 years ago |
kervala | 2e96c40211 | 9 years ago |
kervala | 8b0d8282bc | 9 years ago |
kervala | b44b24acd3 | 9 years ago |
kervala | a15d9b803e | 9 years ago |
kervala | 1f68b32b7b | 9 years ago |
Nimetu | 4abb02afcd | 9 years ago |
kervala | 93f27a1a48 | 9 years ago |
kervala | 0e96e3505d | 9 years ago |
kervala | 41be501160 | 9 years ago |
kervala | 8df64e7c4f | 9 years ago |
kervala | aa3a9dcead | 9 years ago |
Nimetu | c51d3ae2e0 | 10 years ago |
kervala | a21ebfe544 | 10 years ago |
kervala | 385e066ac0 | 10 years ago |
kervala | 4600c74b6b | 10 years ago |
kaetemi | 5db42f1eb6 | 10 years ago |
kaetemi | a33799d210 | 10 years ago |
kaetemi | f07e471597 | 10 years ago |
kervala | 9882d17a45 | 10 years ago |
kervala | 09169bfa87 | 10 years ago |
kervala | 67b7e02983 | 10 years ago |
kervala | f4ddf2dd86 | 10 years ago |
kervala | 97eac497ff | 10 years ago |
kervala | 0e0df2d1b7 | 10 years ago |
kaetemi | 3c04d70f28 | 10 years ago |
kaetemi | 5358cfd420 | 10 years ago |
kaetemi | 3b9fe3e9c3 | 10 years ago |
dfighter1985 | 1715cf7efe | 10 years ago |
kervala | 147d8bdde1 | 10 years ago |
kervala | e7166c1161 | 10 years ago |
kervala | 05ce10d09f | 10 years ago |
kervala | ec61c84fc9 | 10 years ago |
kervala | c561bd8d82 | 10 years ago |
kervala | 47051791fa | 10 years ago |
kervala | eb05c962de | 10 years ago |
kervala | 49b18b72b5 | 10 years ago |
dfighter1985 | ab2a455db2 | 10 years ago |
dfighter1985 | 9ca3370dd4 | 10 years ago |
dfighter1985 | 18c2e7ff0e | 10 years ago |
dfighter1985 | 9073cf72df | 10 years ago |
dfighter1985 | b2d137eb07 | 10 years ago |
kaetemi | 79b6fcae28 | 10 years ago |
kaetemi | 2095646575 | 10 years ago |
dfighter1985 | d62f7a21a7 | 10 years ago |
kaetemi | e277fedfb8 | 10 years ago |
kaetemi | 0f59cb4343 | 10 years ago |
kaetemi | a7af274ae0 | 10 years ago |
kaetemi | b19c685ace | 10 years ago |
kaetemi | 153ea8169d | 10 years ago |
kaetemi | 6b5d7b66a4 | 10 years ago |
kaetemi | b7208c9513 | 10 years ago |
kaetemi | 358f19acae | 10 years ago |
kaetemi | 242476e1f6 | 10 years ago |
kaetemi | 53b3a51b54 | 10 years ago |
kaetemi | 8d93e9308f | 10 years ago |
kaetemi | 9a1510caf0 | 10 years ago |
kaetemi | 40f4eb4ad2 | 10 years ago |
kaetemi | 85615992d7 | 10 years ago |
kaetemi | fb7955103b | 10 years ago |
kaetemi | dccfc87975 | 10 years ago |
kaetemi | e6a327fb1a | 10 years ago |
kaetemi | 105ecbff90 | 10 years ago |
kaetemi | 7d09a6cb15 | 10 years ago |
kaetemi | 4ba6b6c4bf | 10 years ago |
kaetemi | 20b4fc8a87 | 10 years ago |
kaetemi | 9c3e8674ae | 10 years ago |
kaetemi | fe4c2becf8 | 10 years ago |
kaetemi | 0fe2401260 | 10 years ago |
kaetemi | 04528999c8 | 10 years ago |
kaetemi | b698c10475 | 10 years ago |
kervala | 305a6658ec | 10 years ago |
kervala | e489f177a0 | 10 years ago |
kaetemi | dcd272c81a | 10 years ago |
kaetemi | 0c71506129 | 10 years ago |
kaetemi | dce524e19b | 10 years ago |
kaetemi | fad363efb5 | 10 years ago |
kervala | 574382fcbb | 11 years ago |
kervala | 0a50d81178 | 11 years ago |
kervala | 61e3ddfa18 | 11 years ago |
kervala | a7eedeb7c7 | 11 years ago |
kaetemi | fea9413c18 | 11 years ago |
kervala | 1150cfeb75 | 11 years ago |
kervala | 55e7199c69 | 11 years ago |
kervala | 732ffaa384 | 11 years ago |
kervala | 056fef8a52 | 11 years ago |
kervala | 8cb4428ff5 | 11 years ago |
@ -0,0 +1,532 @@
|
|||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Ryzom Core
|
||||||
|
# Authors: Nevrax and the Ryzom Core Community
|
||||||
|
# Version: 0.12.0
|
||||||
|
#
|
||||||
|
# Notes:
|
||||||
|
# * Changing install location: add -DCMAKE_INSTALL_PREFIX:PATH=/my/new/path
|
||||||
|
# * Changing specific install location variables:
|
||||||
|
# * NL_ETC_PREFIX (default: $CMAKE_INSTALL_PREFIX/etc)
|
||||||
|
# * NL_SHARE_PREFIX (default: $CMAKE_INSTALL_PREFIX/share)
|
||||||
|
# * NL_BIN_PREFIX (default: $CMAKE_INSTALL_PREFIX/bin)
|
||||||
|
# * NL_SBIN_PREFIX (default: $CMAKE_INSTALL_PREFIX/sbin)
|
||||||
|
# * NL_LIB_PREFIX (default: $CMAKE_INSTALL_PREFIX/lib)
|
||||||
|
# * NL_DRIVER_PREFIX (default: $CMAKE_INSTALL_PREFIX/lib (windows) or $CMAKE_INSTALL_PREFIX/lib/nel)
|
||||||
|
# * Enable building of documentation: add -DBUILD_DOCUMENTATION:BOOL=ON - new make target: DoxygenDoc
|
||||||
|
# * Updating version: update header (above) but also update NL_VERSION below.
|
||||||
|
# * To build binary archive, use the 'package' target.
|
||||||
|
# To build source archive, use the 'package_source' target.
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Load some macros.
|
||||||
|
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Set CMake 2.6 Policies.
|
||||||
|
IF(COMMAND cmake_policy)
|
||||||
|
# Works around warnings libraries linked against that don't
|
||||||
|
# have absolute paths (e.g. -lpthread)
|
||||||
|
cmake_policy(SET CMP0003 NEW)
|
||||||
|
|
||||||
|
# allow to link to qtmain automatically under Windows
|
||||||
|
IF(POLICY CMP0020)
|
||||||
|
CMAKE_POLICY(SET CMP0020 NEW)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Downloads and install Hunger into HUNTER_ROOT directory.
|
||||||
|
OPTION(HUNTER_ENABLED "Enable Hunter package manager" OFF)
|
||||||
|
IF(HUNTER_ENABLED)
|
||||||
|
INCLUDE("CMakeModules/HunterGate.cmake")
|
||||||
|
HunterGate(
|
||||||
|
URL "https://github.com/cpp-pm/hunter/archive/v0.23.321.tar.gz"
|
||||||
|
SHA1 "5e53cbb0429037ea8e2592bfd92704b8ff3ab492"
|
||||||
|
FILEPATH "${CMAKE_CURRENT_LIST_DIR}/CMakeModules/HunterConfig.cmake"
|
||||||
|
)
|
||||||
|
|
||||||
|
# default options for hunterized build
|
||||||
|
SET(WITH_STATIC ON CACHE BOOL "static" FORCE)
|
||||||
|
SET(WITH_STATIC_DRIVERS ON CACHE BOOL "static drivers" FORCE)
|
||||||
|
SET(WITH_STATIC_CURL ON CACHE BOOL "static curl" FORCE)
|
||||||
|
SET(WITH_STATIC_LIBXML2 ON CACHE BOOL "static libxml2" FORCE)
|
||||||
|
SET(WITH_STATIC_EXTERNAL ON CACHE BOOL "static external" FORCE)
|
||||||
|
SET(WITH_EXTERNAL OFF CACHE BOOL "external libs" FORCE)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
INCLUDE(nel)
|
||||||
|
INCLUDE(ConfigureChecks)
|
||||||
|
INCLUDE(CheckDepends)
|
||||||
|
INCLUDE(${CMAKE_ROOT}/Modules/Documentation.cmake OPTIONAL)
|
||||||
|
|
||||||
|
MESSAGE("EXTERNAL ${WITH_EXTERNAL}")
|
||||||
|
|
||||||
|
# Force out of source builds.
|
||||||
|
CHECK_OUT_OF_SOURCE()
|
||||||
|
|
||||||
|
# To be able to specify a different deployment target on Mac OS X :
|
||||||
|
# export MACOSX_DEPLOYMENT_TARGET=10.6
|
||||||
|
|
||||||
|
IF(CMAKE_VERSION VERSION_GREATER "2.8.10")
|
||||||
|
STRING(TIMESTAMP CURRENT_YEAR "%Y")
|
||||||
|
ELSE()
|
||||||
|
SET(CURRENT_YEAR "2019")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
|
||||||
|
PROJECT(RyzomCore CXX C)
|
||||||
|
SET(NL_VERSION_MAJOR 1)
|
||||||
|
SET(NL_VERSION_MINOR 1)
|
||||||
|
SET(NL_VERSION_PATCH 0 CACHE STRING "Patch version")
|
||||||
|
SET(YEAR "2001-${CURRENT_YEAR}")
|
||||||
|
SET(AUTHOR "Winch Gate and The Ryzom Core Community")
|
||||||
|
|
||||||
|
SET(RYZOM_VERSION_MAJOR 3)
|
||||||
|
SET(RYZOM_VERSION_MINOR 6)
|
||||||
|
SET(RYZOM_VERSION_PATCH 0)
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Redirect output files
|
||||||
|
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||||
|
|
||||||
|
# DLL should be in the same directory as EXE under Windows
|
||||||
|
IF(WIN32)
|
||||||
|
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
||||||
|
ELSE()
|
||||||
|
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WIN32)
|
||||||
|
IF(WITH_MFC)
|
||||||
|
FIND_PACKAGE(MFC QUIET)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Set default config options
|
||||||
|
#
|
||||||
|
NL_SETUP_DEFAULT_OPTIONS()
|
||||||
|
NL_SETUP_NEL_DEFAULT_OPTIONS()
|
||||||
|
NL_SETUP_NELNS_DEFAULT_OPTIONS()
|
||||||
|
NL_SETUP_RYZOM_DEFAULT_OPTIONS()
|
||||||
|
NL_SETUP_SNOWBALLS_DEFAULT_OPTIONS()
|
||||||
|
|
||||||
|
NL_SETUP_BUILD()
|
||||||
|
NL_SETUP_BUILD_FLAGS()
|
||||||
|
|
||||||
|
NL_SETUP_PREFIX_PATHS()
|
||||||
|
RYZOM_SETUP_PREFIX_PATHS()
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Default values for URL's
|
||||||
|
SET(RYZOM_CLIENT_CREATE_ACCOUNT_URL "https://open.ryzom.dev/ams/" CACHE STRING "Ryzom Client Create Account URL")
|
||||||
|
SET(RYZOM_CLIENT_EDIT_ACCOUNT_URL "https://open.ryzom.dev/ams/" CACHE STRING "Ryzom Client Edit Account URL")
|
||||||
|
SET(RYZOM_CLIENT_FORGET_PASSWORD_URL "https://open.ryzom.dev/ams/" CACHE STRING "Ryzom Client Forget Password URL")
|
||||||
|
SET(RYZOM_CLIENT_PATCH_URL "https://cdn.ryzom.dev/open/patch/" CACHE STRING "Ryzom Client Patch URL")
|
||||||
|
SET(RYZOM_CLIENT_APP_NAME "default")
|
||||||
|
|
||||||
|
SET(RYZOM_WEBIG_MAIN_URL "https://open.ryzom.dev/" CACHE STRING "Ryzom Client WebIG Main URL")
|
||||||
|
SET(RYZOM_WEBIG_TRUSTED_DOMAIN "open.ryzom.dev" CACHE STRING "Ryzom Client WebIG Trusted Domain")
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# urls when compiling ryzom live client
|
||||||
|
IF(WITH_RYZOM_LIVE)
|
||||||
|
MESSAGE("Using RYZOM_LIVE urls")
|
||||||
|
SET(RYZOM_CLIENT_CREATE_ACCOUNT_URL "https://me.ryzom.com")
|
||||||
|
SET(RYZOM_CLIENT_EDIT_ACCOUNT_URL "https://me.ryzom.com")
|
||||||
|
SET(RYZOM_CLIENT_FORGET_PASSWORD_URL "https://me.ryzom.com/?forget_password=1")
|
||||||
|
SET(RYZOM_CLIENT_PATCH_URL "http://dl.ryzom.com/patch_live")
|
||||||
|
SET(RYZOM_CLIENT_APP_NAME "ryzom_live")
|
||||||
|
|
||||||
|
SET(RYZOM_WEBIG_MAIN_URL "https://app.ryzom.com/")
|
||||||
|
SET(RYZOM_WEBIG_TRUSTED_DOMAIN "app.ryzom.com")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
#Platform specifics
|
||||||
|
|
||||||
|
SETUP_EXTERNAL()
|
||||||
|
|
||||||
|
IF(WIN32)
|
||||||
|
SET(WINSOCK2_LIB ws2_32.lib)
|
||||||
|
|
||||||
|
IF(WITH_MFC)
|
||||||
|
FIND_PACKAGE(CustomMFC REQUIRED)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(HUNTER_ENABLED)
|
||||||
|
## TODO: hack for freetype hunter package
|
||||||
|
SET(ON 1)
|
||||||
|
##
|
||||||
|
HUNTER_ADD_PACKAGE(ZLIB)
|
||||||
|
|
||||||
|
FIND_PACKAGE(ZLIB CONFIG REQUIRED)
|
||||||
|
SET(ZLIB_LIBRARY ZLIB::zlib)
|
||||||
|
|
||||||
|
HUNTER_ADD_PACKAGE(libxml2)
|
||||||
|
FIND_PACKAGE(libxml2 CONFIG REQUIRED)
|
||||||
|
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} libxml2::libxml2)
|
||||||
|
|
||||||
|
HUNTER_ADD_PACKAGE(OpenSSL)
|
||||||
|
FIND_PACKAGE(OpenSSL REQUIRED)
|
||||||
|
# TODO: is OpenSSL::Crypto only needed for WIN32?
|
||||||
|
SET(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto)
|
||||||
|
|
||||||
|
# for precompiled headers, not needed if using TARGET_PRECOMPILE_HEADERS() from cmake 3.16+
|
||||||
|
SET(ZLIB_INCLUDE_DIR ZLIB_ROOT/include)
|
||||||
|
SET(LIBXML2_INCLUDE_DIR ${LIBXML2_ROOT}/include/libxml2)
|
||||||
|
ELSE()
|
||||||
|
FIND_PACKAGE(ZLIB REQUIRED)
|
||||||
|
FIND_PACKAGE(LibXml2 REQUIRED)
|
||||||
|
FIND_PACKAGE(PNG REQUIRED)
|
||||||
|
FIND_PACKAGE(OpenSSL REQUIRED)
|
||||||
|
FIND_PACKAGE(GIF)
|
||||||
|
FIND_PACKAGE(Jpeg)
|
||||||
|
|
||||||
|
IF(WIN32)
|
||||||
|
SET(OPENSSL_LIBRARIES ${OPENSSL_LIBRARIES} Crypt32.lib)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF() #hunter
|
||||||
|
|
||||||
|
IF(WITH_LIBOVR)
|
||||||
|
FIND_PACKAGE(LibOVR)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_LIBVR)
|
||||||
|
FIND_PACKAGE(LibVR)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
NL_CONFIGURE_CHECKS()
|
||||||
|
|
||||||
|
IF(WITH_STATIC_LIBXML2)
|
||||||
|
SET(LIBXML2_DEFINITIONS ${LIBXML2_DEFINITIONS} -DLIBXML_STATIC)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_LIBXML2_ICONV)
|
||||||
|
FIND_PACKAGE(Iconv REQUIRED)
|
||||||
|
INCLUDE_DIRECTORIES(${ICONV_INCLUDE_DIR})
|
||||||
|
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${ICONV_LIBRARIES})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_STATIC)
|
||||||
|
# libxml2 could need winsock2 library
|
||||||
|
IF(WINSOCK2_LIB)
|
||||||
|
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${WINSOCK2_LIB})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(UNIX)
|
||||||
|
# under Linux and OS X, recent libxml2 versions are linked against liblzma
|
||||||
|
FIND_PACKAGE(LibLZMA)
|
||||||
|
IF(LIBLZMA_LIBRARIES)
|
||||||
|
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${LIBLZMA_LIBRARIES})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
# under Linux and OS X, recent libxml2 versions are linked against libicu
|
||||||
|
# FIND_PACKAGE(Icu)
|
||||||
|
FIND_LIBRARY(ICU_LIBRARY icuuc)
|
||||||
|
IF(ICU_LIBRARY)
|
||||||
|
FIND_LIBRARY(ICU_DATA_LIBRARY icudata)
|
||||||
|
IF(ICU_LIBRARY)
|
||||||
|
MESSAGE(STATUS "ICU UC was found: ${ICU_LIBRARY}")
|
||||||
|
ELSE()
|
||||||
|
MESSAGE(STATUS "ICU UC was NOT found")
|
||||||
|
ENDIF()
|
||||||
|
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${ICU_DATA_LIBRARY} ${ICU_LIBRARY})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/PCHSupport.cmake)
|
||||||
|
|
||||||
|
IF(FINAL_VERSION)
|
||||||
|
ADD_DEFINITIONS(-DFINAL_VERSION=1)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_SSE2)
|
||||||
|
ADD_DEFINITIONS(-DNL_HAS_SSE2)
|
||||||
|
IF(WITH_SSE3)
|
||||||
|
ADD_DEFINITIONS(-DNL_HAS_SSE3)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(APPLE)
|
||||||
|
FIND_LIBRARY(CARBON_FRAMEWORK Carbon)
|
||||||
|
FIND_LIBRARY(FOUNDATION_FRAMEWORK Foundation)
|
||||||
|
FIND_LIBRARY(SECURITY_FRAMEWORK Security)
|
||||||
|
|
||||||
|
IF(APPLE_CERTIFICATE)
|
||||||
|
# Find codesign_allocate
|
||||||
|
|
||||||
|
# Xcode 7.0 and later versions
|
||||||
|
SET(CODESIGN_ALLOCATE ${OSX_DEVELOPER_ROOT}/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate)
|
||||||
|
|
||||||
|
IF(NOT EXISTS "${CODESIGN_ALLOCATE}")
|
||||||
|
# Xcode 6.4 and previous versions
|
||||||
|
SET(CODESIGN_ALLOCATE ${CMAKE_OSX_SYSROOT}/usr/bin/codesign_allocate)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(NOT EXISTS "${CODESIGN_ALLOCATE}")
|
||||||
|
# System path
|
||||||
|
SET(CODESIGN_ALLOCATE /usr/bin/codesign_allocate)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(NOT EXISTS "${CODESIGN_ALLOCATE}")
|
||||||
|
MESSAGE(WARNING "Unable to find codesign_allocate in standard directories")
|
||||||
|
SET(CODESIGN_ALLOCATE)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
INCLUDE(FindHelpers)
|
||||||
|
|
||||||
|
#TODO: hunter qt package
|
||||||
|
IF(WITH_QT5)
|
||||||
|
FIND_QT5()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_QT)
|
||||||
|
SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${QTDIR} $ENV{QTDIR})
|
||||||
|
|
||||||
|
# Use Qt 4
|
||||||
|
FIND_PACKAGE(Qt4 COMPONENTS QtCore QtGui QtXml QtOpenGL REQUIRED)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
#TODO: hunter assimp package
|
||||||
|
IF(WITH_ASSIMP)
|
||||||
|
FIND_PACKAGE(assimp REQUIRED)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_NEL)
|
||||||
|
IF(WITH_NEL_TESTS)
|
||||||
|
FIND_PACKAGE(CppTest)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(HUNTER_ENABLED)
|
||||||
|
IF(WITH_GUI)
|
||||||
|
HUNTER_ADD_PACKAGE(luabind)
|
||||||
|
FIND_PACKAGE(Luabind REQUIRED)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
HUNTER_ADD_PACKAGE(CURL)
|
||||||
|
FIND_PACKAGE(CURL CONFIG REQUIRED)
|
||||||
|
# TODO: for nelgui
|
||||||
|
SET(CURL_LIBRARIES CURL::libcurl libxml2::libxml2)
|
||||||
|
ELSE()
|
||||||
|
IF(WITH_GUI)
|
||||||
|
FIND_PACKAGE(Luabind REQUIRED)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
FIND_PACKAGE(CURL REQUIRED)
|
||||||
|
|
||||||
|
IF((WIN32 OR CURL_LIBRARIES MATCHES "\\.a") AND WITH_STATIC_CURL)
|
||||||
|
SET(CURL_STATIC ON)
|
||||||
|
ELSE()
|
||||||
|
SET(CURL_STATIC OFF)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(CURL_STATIC)
|
||||||
|
SET(CURL_DEFINITIONS -DCURL_STATICLIB)
|
||||||
|
|
||||||
|
LIST(APPEND CURL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
|
||||||
|
LIST(APPEND CURL_LIBRARIES ${OPENSSL_LIBRARIES})
|
||||||
|
|
||||||
|
IF(WIN32)
|
||||||
|
LIST(APPEND CURL_LIBRARIES Crypt32 Cryptui)
|
||||||
|
ELSE()
|
||||||
|
# CURL depends on libidn
|
||||||
|
FIND_LIBRARY(IDN_LIBRARY idn)
|
||||||
|
IF(IDN_LIBRARY)
|
||||||
|
LIST(APPEND CURL_LIBRARIES ${IDN_LIBRARY})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
# CURL Macports version can depend on libidn, libidn2, libintl, libpsl and libiconv too
|
||||||
|
IF(APPLE)
|
||||||
|
FIND_LIBRARY(INTL_LIBRARY intl)
|
||||||
|
IF(INTL_LIBRARY)
|
||||||
|
LIST(APPEND CURL_LIBRARIES ${INTL_LIBRARY})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
FIND_LIBRARY(IDN2_LIBRARY idn2)
|
||||||
|
IF(IDN2_LIBRARY)
|
||||||
|
LIST(APPEND CURL_LIBRARIES ${IDN2_LIBRARY})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
FIND_LIBRARY(PSL_LIBRARY psl)
|
||||||
|
IF(PSL_LIBRARY)
|
||||||
|
LIST(APPEND CURL_LIBRARIES ${PSL_LIBRARY})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
FIND_LIBRARY(UNISTRING_LIBRARY unistring)
|
||||||
|
IF(UNISTRING_LIBRARY)
|
||||||
|
LIST(APPEND CURL_LIBRARIES ${UNISTRING_LIBRARY})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
LIST(APPEND CURL_LIBRARIES ${SECURITY_FRAMEWORK})
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
ENDIF() #hunter
|
||||||
|
|
||||||
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/nel/include)
|
||||||
|
ADD_SUBDIRECTORY(nel)
|
||||||
|
|
||||||
|
# Aliases for targets
|
||||||
|
SET(NELMISC_LIBRARIES nelmisc)
|
||||||
|
SET(NELNET_LIBRARIES nelnet)
|
||||||
|
SET(NELLIGO_LIBRARIES nelligo)
|
||||||
|
SET(NELGEORGES_LIBRARIES nelgeorges)
|
||||||
|
SET(NEL3D_LIBRARIES nel3d)
|
||||||
|
SET(NELGUI_LIBRARIES nelgui)
|
||||||
|
SET(NELSOUND_LIBRARIES nelsound)
|
||||||
|
ELSE()
|
||||||
|
# FIND_PACKAGE(NeL COMPONENTS 3d misc pacs sound nimp REQUIRED)
|
||||||
|
FIND_PACKAGE(NeL REQUIRED)
|
||||||
|
INCLUDE_DIRECTORIES(${NEL_INCLUDE_DIRS})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_RYZOM)
|
||||||
|
ADD_SUBDIRECTORY(ryzom)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_NELNS)
|
||||||
|
ADD_SUBDIRECTORY(nelns)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_SNOWBALLS)
|
||||||
|
ADD_SUBDIRECTORY(snowballs2)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_TOOLS)
|
||||||
|
ADD_SUBDIRECTORY(tool)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_STUDIO)
|
||||||
|
ADD_SUBDIRECTORY(studio)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_PERSONAL)
|
||||||
|
ADD_SUBDIRECTORY(personal)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
# To build the documention, you will have to enable it
|
||||||
|
# and then do the equivalent of "make DoxygenDoc".
|
||||||
|
IF(BUILD_DOCUMENTATION)
|
||||||
|
IF(DOT)
|
||||||
|
SET(HAVE_DOT YES)
|
||||||
|
ELSE()
|
||||||
|
SET(HAVE_DOT NO)
|
||||||
|
ENDIF()
|
||||||
|
# This processes our Doxyfile.in and substitutes paths to generate
|
||||||
|
# a final Doxyfile
|
||||||
|
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doc/Doxyfile.cmake.in ${CMAKE_BINARY_DIR}/doc/Doxyfile)
|
||||||
|
|
||||||
|
ADD_CUSTOM_TARGET(DoxygenDoc ${DOXYGEN} ${CMAKE_BINARY_DIR}/doc/Doxyfile)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(WITH_NEL_TESTS)
|
||||||
|
ENABLE_TESTING()
|
||||||
|
ADD_TEST(nel_unit_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/nel_unit_test --html)
|
||||||
|
IF(BUILD_DASHBOARD)
|
||||||
|
INCLUDE(Dart)
|
||||||
|
SET(SVNCOMMAND svn)
|
||||||
|
SET(SVNSOURCEDIR http://dev.ryzom.com/svn/trunk/nel)
|
||||||
|
SET(GENERATELOGS svn2cl)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
# packaging information
|
||||||
|
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Ryzom Core MMORPG Framework")
|
||||||
|
SET(CPACK_PACKAGE_VENDOR "Ryzom Core")
|
||||||
|
SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README)
|
||||||
|
SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/COPYING)
|
||||||
|
SET(CPACK_PACKAGE_VERSION_MAJOR "${NL_VERSION_MAJOR}")
|
||||||
|
SET(CPACK_PACKAGE_VERSION_MINOR "${NL_VERSION_MINOR}")
|
||||||
|
SET(CPACK_PACKAGE_VERSION_PATCH "${NL_VERSION_PATCH}")
|
||||||
|
SET(CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_BINARY_DIR};NeL;ALL;/")
|
||||||
|
SET(CPACK_PACKAGE_EXECUTABLES "ryzomcore${NL_VERSION}" "ryzomcore")
|
||||||
|
SET(CPACK_SET_DESTDIR TRUE)
|
||||||
|
|
||||||
|
# NSIS Specific Packing Setup
|
||||||
|
SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "RyzomCore")
|
||||||
|
SET(CPACK_NSIS_MODIFY_PATH "ON")
|
||||||
|
SET(CPACK_NSIS_MUI_ICON ${CMAKE_SOURCE_DIR}/resources/nevraxpill.ico)
|
||||||
|
SET(CPACK_NSIS_MUI_UNIICON ${CMAKE_SOURCE_DIR}/resources/nevraxpill.ico)
|
||||||
|
SET(CPACK_PACKAGE_ICON ${CMAKE_SOURCE_DIR}/resources\\\\nel.bmp)
|
||||||
|
SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} RyzomCore")
|
||||||
|
SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\dev.ryzom.com")
|
||||||
|
SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\dev.ryzom.com\\\\projects\\\\nel\\\\wiki")
|
||||||
|
SET(CPACK_NSIS_CONTACT "matt.raykowski@gmail.com")
|
||||||
|
|
||||||
|
## Source Packages
|
||||||
|
SET(CPACK_PACKAGE_FILE_NAME "ryzomcore-${NL_VERSION}")
|
||||||
|
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "ryzomcore-${NL_VERSION}")
|
||||||
|
IF(WIN32)
|
||||||
|
#SET(CPACK_GENERATOR "NSIS")
|
||||||
|
SET(CPACK_GENERATOR "NSIS;ZIP")
|
||||||
|
SET(CPACK_SOURCE_GENERATOR "ZIP")
|
||||||
|
ELSE()
|
||||||
|
SET(CPACK_GENERATOR "TGZ")
|
||||||
|
SET(CPACK_SOURCE_GENERATOR "TGZ")
|
||||||
|
ENDIF()
|
||||||
|
set(CPACK_SOURCE_IGNORE_FILES
|
||||||
|
"~$"
|
||||||
|
"\\\\.cvsignore$"
|
||||||
|
"^${CMAKE_SOURCE_DIR}.*/CVS/"
|
||||||
|
"^${CMAKE_SOURCE_DIR}.*/\\\\.svn/"
|
||||||
|
"^${CMAKE_SOURCE_DIR}/debian/"
|
||||||
|
"^${CMAKE_SOURCE_DIR}/old/")
|
||||||
|
IF(WIN32)
|
||||||
|
IF(NOT CMAKE_BUILD_TYPE STREQUAL "Release")
|
||||||
|
SET(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE)
|
||||||
|
IF(WITH_QT)
|
||||||
|
INCLUDE(${QT_USE_FILE})
|
||||||
|
INSTALL(FILES
|
||||||
|
"${QT_LIBRARY_DIR}/../bin/QtGuid4.dll"
|
||||||
|
"${QT_LIBRARY_DIR}/../bin/QtXmld4.dll"
|
||||||
|
"${QT_LIBRARY_DIR}/../bin/QtCored4.dll"
|
||||||
|
DESTINATION ${NL_BIN_PREFIX})
|
||||||
|
ENDIF()
|
||||||
|
ELSE()
|
||||||
|
IF(WITH_QT)
|
||||||
|
INCLUDE(${QT_USE_FILE})
|
||||||
|
INSTALL(FILES
|
||||||
|
"${QT_LIBRARY_DIR}/../bin/QtGui4.dll"
|
||||||
|
"${QT_LIBRARY_DIR}/../bin/QtXml4.dll"
|
||||||
|
"${QT_LIBRARY_DIR}/../bin/QtCore4.dll"
|
||||||
|
DESTINATION ${NL_BIN_PREFIX})
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
# Install CEGUI and its dependencies.
|
||||||
|
IF(WITH_NEL_CEGUI)
|
||||||
|
INSTALL(FILES "${CEGUI_LIB_DIR}/CEGUIBase.dll" DESTINATION ${NL_BIN_PREFIX})
|
||||||
|
INSTALL(FILES "${CEGUI_LIB_DIR}/CEGUIDevilImageCodec.dll" DESTINATION ${NL_BIN_PREFIX})
|
||||||
|
INSTALL(FILES "${CEGUI_LIB_DIR}/CEGUIExpatParser.dll" DESTINATION ${NL_BIN_PREFIX})
|
||||||
|
INSTALL(FILES "${CEGUI_LIB_DIR}/CEGUIFalagardWRBase.dll" DESTINATION ${NL_BIN_PREFIX})
|
||||||
|
INSTALL(FILES "${CEGUI_LIB_DIR}/Devil.dll" DESTINATION ${NL_BIN_PREFIX})
|
||||||
|
INSTALL(FILES "${CEGUI_LIB_DIR}/ILU.dll" DESTINATION ${NL_BIN_PREFIX})
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
# Only the tools require MFC.
|
||||||
|
IF(WITH_TOOLS)
|
||||||
|
SET(CMAKE_INSTALL_MFC_LIBRARIES TRUE)
|
||||||
|
ENDIF()
|
||||||
|
#INCLUDE(InstallRequiredSystemLibraries)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
INCLUDE(CPack)
|
||||||
|
|
||||||
|
INCLUDE(CMakePackaging.txt)
|
||||||
|
|
||||||
|
## Debian Packages
|
||||||
|
#INCLUDE(UseDebian)
|
||||||
|
#IF(DEBIAN_FOUND)
|
||||||
|
# ADD_DEBIAN_TARGETS(nel)
|
||||||
|
#ENDIF()
|
@ -0,0 +1,9 @@
|
|||||||
|
INCLUDE(FindHelpers)
|
||||||
|
|
||||||
|
IF(TARGET_X64)
|
||||||
|
SET(FMOD_BASE fmod64)
|
||||||
|
ELSE()
|
||||||
|
SET(FMOD_BASE fmodvc)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
FIND_PACKAGE_HELPER(FMOD fmod.h RELEASE ${FMOD_BASE} DEBUG ${FMOD_BASE}d SUFFIXES fmod3)
|
@ -0,0 +1,119 @@
|
|||||||
|
# - Find MS Visual C++
|
||||||
|
#
|
||||||
|
# VC_DIR - where to find Visual C++
|
||||||
|
# VC_INCLUDE_DIR - where to find headers
|
||||||
|
# VC_INCLUDE_DIRS - where to find headers
|
||||||
|
# VC_LIBRARY_DIR - where to find libraries
|
||||||
|
# VC_FOUND - True if MSVC found
|
||||||
|
|
||||||
|
IF(CMAKE_CXX_COMPILER)
|
||||||
|
SET(_COMPILER ${CMAKE_CXX_COMPILER})
|
||||||
|
SET(_VERSION ${CMAKE_CXX_COMPILER_VERSION})
|
||||||
|
ELSEIF(CMAKE_C_COMPILER)
|
||||||
|
SET(_COMPILER ${CMAKE_C_COMPILER})
|
||||||
|
SET(_VERSION ${CMAKE_C_COMPILER_VERSION})
|
||||||
|
ELSE()
|
||||||
|
MESSAGE(FATAL_ERROR "No way to determine Visual C++ location")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(MSVC_VERSION LESS 1910)
|
||||||
|
IF(MSVC_VERSION LESS 1500)
|
||||||
|
MESSAGE(FATAL_ERROR "Unsupported version of Visual C++ (minimum version is 2008)")
|
||||||
|
ELSEIF(MSVC_VERSION LESS 1600)
|
||||||
|
SET(MSVC_TOOLSET "90")
|
||||||
|
SET(_NAME "2008")
|
||||||
|
ELSEIF(MSVC_VERSION LESS 1700)
|
||||||
|
SET(MSVC_TOOLSET "100")
|
||||||
|
SET(_NAME "2010")
|
||||||
|
ELSEIF(MSVC_VERSION LESS 1800)
|
||||||
|
SET(MSVC_TOOLSET "110")
|
||||||
|
SET(_NAME "2012")
|
||||||
|
ELSEIF(MSVC_VERSION LESS 1900)
|
||||||
|
SET(MSVC_TOOLSET "120")
|
||||||
|
SET(_NAME "2013")
|
||||||
|
ELSE()
|
||||||
|
SET(MSVC_TOOLSET "140")
|
||||||
|
SET(_NAME "2015")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
STRING(REGEX REPLACE "/bin/.+" "" VC_DIR ${_COMPILER})
|
||||||
|
|
||||||
|
MESSAGE(STATUS "Found Visual C++ ${_NAME} (${_VERSION}) in ${VC_DIR}")
|
||||||
|
ELSE()
|
||||||
|
# Toolset = version of runtime DLLs
|
||||||
|
SET(MSVC_TOOLSET "140")
|
||||||
|
|
||||||
|
IF(MSVC_VERSION LESS 1920)
|
||||||
|
SET(_NAME "2017")
|
||||||
|
ELSE()
|
||||||
|
SET(_NAME "2019")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
STRING(REGEX REPLACE "/MSVC/.+" "/MSVC" VC_DIR ${_COMPILER})
|
||||||
|
|
||||||
|
FILE(GLOB MSVC_TOOLCHAIN_VERSIONS RELATIVE ${VC_DIR} "${VC_DIR}/*")
|
||||||
|
|
||||||
|
IF(MSVC_TOOLCHAIN_VERSIONS)
|
||||||
|
LIST(SORT MSVC_TOOLCHAIN_VERSIONS)
|
||||||
|
LIST(REVERSE MSVC_TOOLCHAIN_VERSIONS)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(MSVC_TOOLCHAIN_VERSIONS)
|
||||||
|
LIST(GET MSVC_TOOLCHAIN_VERSIONS 0 MSVC_TOOLCHAIN_VERSION)
|
||||||
|
|
||||||
|
SET(VC_DIR "${VC_DIR}/${MSVC_TOOLCHAIN_VERSION}")
|
||||||
|
|
||||||
|
MESSAGE(STATUS "Found Visual C++ ${_NAME} (${_VERSION} with toolchain ${MSVC_TOOLCHAIN_VERSION}) in ${VC_DIR}")
|
||||||
|
ELSE()
|
||||||
|
MESSAGE(FATAL_ERROR "Unable to find Visual C++ in ${VC_DIR}")
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(NOT VC_INCLUDE_DIR AND VC_DIR AND EXISTS "${VC_DIR}")
|
||||||
|
SET(VC_INCLUDE_DIR "${VC_DIR}/include")
|
||||||
|
IF(EXISTS "${VC_INCLUDE_DIR}")
|
||||||
|
SET(VC_FOUND ON)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
SET(MSVC_REDIST_DIR "${EXTERNAL_PATH}/redist")
|
||||||
|
|
||||||
|
IF(NOT EXISTS "${MSVC_REDIST_DIR}")
|
||||||
|
SET(MSVC_REDIST_DIR "${VC_DIR}/redist")
|
||||||
|
|
||||||
|
IF(NOT EXISTS "${MSVC_REDIST_DIR}")
|
||||||
|
SET(MSVC_REDIST_DIR)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(MSVC_REDIST_DIR)
|
||||||
|
IF(MSVC_VERSION GREATER 1909)
|
||||||
|
# If you have VC++ 2017 Express, put x64/Microsoft.VC141.CRT/*.dll in ${EXTERNAL_PATH}/redist
|
||||||
|
# original files whould be in ${VC_DIR}/Redist/MSVC/14.11.25325/x64/Microsoft.VC141.CRT
|
||||||
|
SET(MSVC14_REDIST_DIR "${MSVC_REDIST_DIR}")
|
||||||
|
ELSEIF(MSVC14)
|
||||||
|
SET(MSVC14_REDIST_DIR "${MSVC_REDIST_DIR}")
|
||||||
|
ELSEIF(MSVC12)
|
||||||
|
# If you have VC++ 2013 Express, put x64/Microsoft.VC120.CRT/*.dll in ${EXTERNAL_PATH}/redist
|
||||||
|
SET(MSVC12_REDIST_DIR "${MSVC_REDIST_DIR}")
|
||||||
|
ELSEIF(MSVC11)
|
||||||
|
# If you have VC++ 2012 Express, put x64/Microsoft.VC110.CRT/*.dll in ${EXTERNAL_PATH}/redist
|
||||||
|
SET(MSVC11_REDIST_DIR "${MSVC_REDIST_DIR}")
|
||||||
|
ELSEIF(MSVC10)
|
||||||
|
# If you have VC++ 2010 Express, put x64/Microsoft.VC100.CRT/*.dll in ${EXTERNAL_PATH}/redist
|
||||||
|
SET(MSVC10_REDIST_DIR "${MSVC_REDIST_DIR}")
|
||||||
|
ELSEIF(MSVC90)
|
||||||
|
SET(MSVC90_REDIST_DIR "${MSVC_REDIST_DIR}")
|
||||||
|
ELSEIF(MSVC80)
|
||||||
|
SET(MSVC80_REDIST_DIR "${MSVC_REDIST_DIR}")
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
IF(VC_INCLUDE_DIR)
|
||||||
|
MESSAGE(STATUS "Using VC++ headers from ${VC_INCLUDE_DIR}")
|
||||||
|
ELSE()
|
||||||
|
MESSAGE(FATAL_ERROR "Unable to find VC++ headers")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
|
SET(VC_INCLUDE_DIRS ${VC_INCLUDE_DIR})
|
||||||
|
INCLUDE_DIRECTORIES(${VC_INCLUDE_DIR})
|
@ -0,0 +1,3 @@
|
|||||||
|
INCLUDE(FindHelpers)
|
||||||
|
|
||||||
|
FIND_PACKAGE_HELPER(Ogg ogg/ogg.h)
|
@ -0,0 +1,5 @@
|
|||||||
|
INCLUDE(FindHelpers)
|
||||||
|
|
||||||
|
FIND_PACKAGE_HELPER(STLport iostream
|
||||||
|
RELEASE stlport_cygwin stlport_gcc stlport_x stlport_x.5.2 stlport_statix stlport_static
|
||||||
|
DEBUG stlport_cygwin_debug stlport_cygwin_stldebug stlport_gcc_debug stlport_gcc_stldebug stlportstld_x stlportstld_x.5.2 stlportd_statix stlportd_static)
|
@ -0,0 +1,14 @@
|
|||||||
|
INCLUDE(FindHelpers)
|
||||||
|
|
||||||
|
FIND_PACKAGE_HELPER(Squish squish.h)
|
||||||
|
|
||||||
|
IF(SQUISH_FOUND)
|
||||||
|
IF(NOT SQUISH_FIND_QUIETLY)
|
||||||
|
MESSAGE(STATUS "Found Squish: ${SQUISH_LIBRARIES}")
|
||||||
|
ENDIF()
|
||||||
|
FILE(STRINGS ${SQUISH_INCLUDE_DIR}/squish.h METRIC REGEX "metric = 0")
|
||||||
|
IF(METRIC)
|
||||||
|
SET(SQUISH_COMPRESS_HAS_METRIC ON)
|
||||||
|
SET(SQUISH_DEFINITIONS -DSQUISH_COMPRESS_HAS_METRIC)
|
||||||
|
ENDIF()
|
||||||
|
ENDIF()
|
@ -0,0 +1,8 @@
|
|||||||
|
INCLUDE(FindHelpers)
|
||||||
|
|
||||||
|
FIND_PACKAGE_HELPER(Vorbis vorbisenc.h)
|
||||||
|
FIND_PACKAGE_HELPER(VorbisFile vorbisfile.h SUFFIXES vorbis)
|
||||||
|
|
||||||
|
IF(VORBISFILE_FOUND)
|
||||||
|
SET(VORBIS_LIBRARIES ${VORBIS_LIBRARIES} ${VORBISFILE_LIBRARIES})
|
||||||
|
ENDIF()
|
@ -0,0 +1,8 @@
|
|||||||
|
# This file is parsed by HunterGate command
|
||||||
|
|
||||||
|
hunter_config(luabind
|
||||||
|
VERSION 0.9.1
|
||||||
|
URL "https://github.com/nimetu/luabind/tarball/2fa4606"
|
||||||
|
SHA1 "3b4646bab9f0b2362d7b8d71d78e40deaf3cc747"
|
||||||
|
)
|
||||||
|
|
@ -0,0 +1,537 @@
|
|||||||
|
# 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()
|
@ -0,0 +1,661 @@
|
|||||||
|
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 19 November 2007
|
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The GNU Affero General Public License is a free, copyleft license for
|
||||||
|
software and other kinds of works, specifically designed to ensure
|
||||||
|
cooperation with the community in the case of network server software.
|
||||||
|
|
||||||
|
The licenses for most software and other practical works are designed
|
||||||
|
to take away your freedom to share and change the works. By contrast,
|
||||||
|
our General Public Licenses are intended to guarantee your freedom to
|
||||||
|
share and change all versions of a program--to make sure it remains free
|
||||||
|
software for all its users.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
price. Our General Public Licenses are designed to make sure that you
|
||||||
|
have the freedom to distribute copies of free software (and charge for
|
||||||
|
them if you wish), that you receive source code or can get it if you
|
||||||
|
want it, that you can change the software or use pieces of it in new
|
||||||
|
free programs, and that you know you can do these things.
|
||||||
|
|
||||||
|
Developers that use our General Public Licenses protect your rights
|
||||||
|
with two steps: (1) assert copyright on the software, and (2) offer
|
||||||
|
you this License which gives you legal permission to copy, distribute
|
||||||
|
and/or modify the software.
|
||||||
|
|
||||||
|
A secondary benefit of defending all users' freedom is that
|
||||||
|
improvements made in alternate versions of the program, if they
|
||||||
|
receive widespread use, become available for other developers to
|
||||||
|
incorporate. Many developers of free software are heartened and
|
||||||
|
encouraged by the resulting cooperation. However, in the case of
|
||||||
|
software used on network servers, this result may fail to come about.
|
||||||
|
The GNU General Public License permits making a modified version and
|
||||||
|
letting the public access it on a server without ever releasing its
|
||||||
|
source code to the public.
|
||||||
|
|
||||||
|
The GNU Affero General Public License is designed specifically to
|
||||||
|
ensure that, in such cases, the modified source code becomes available
|
||||||
|
to the community. It requires the operator of a network server to
|
||||||
|
provide the source code of the modified version running there to the
|
||||||
|
users of that server. Therefore, public use of a modified version, on
|
||||||
|
a publicly accessible server, gives the public access to the source
|
||||||
|
code of the modified version.
|
||||||
|
|
||||||
|
An older license, called the Affero General Public License and
|
||||||
|
published by Affero, was designed to accomplish similar goals. This is
|
||||||
|
a different license, not a version of the Affero GPL, but Affero has
|
||||||
|
released a new version of the Affero GPL which permits relicensing under
|
||||||
|
this license.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
0. Definitions.
|
||||||
|
|
||||||
|
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||||
|
|
||||||
|
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||||
|
works, such as semiconductor masks.
|
||||||
|
|
||||||
|
"The Program" refers to any copyrightable work licensed under this
|
||||||
|
License. Each licensee is addressed as "you". "Licensees" and
|
||||||
|
"recipients" may be individuals or organizations.
|
||||||
|
|
||||||
|
To "modify" a work means to copy from or adapt all or part of the work
|
||||||
|
in a fashion requiring copyright permission, other than the making of an
|
||||||
|
exact copy. The resulting work is called a "modified version" of the
|
||||||
|
earlier work or a work "based on" the earlier work.
|
||||||
|
|
||||||
|
A "covered work" means either the unmodified Program or a work based
|
||||||
|
on the Program.
|
||||||
|
|
||||||
|
To "propagate" a work means to do anything with it that, without
|
||||||
|
permission, would make you directly or secondarily liable for
|
||||||
|
infringement under applicable copyright law, except executing it on a
|
||||||
|
computer or modifying a private copy. Propagation includes copying,
|
||||||
|
distribution (with or without modification), making available to the
|
||||||
|
public, and in some countries other activities as well.
|
||||||
|
|
||||||
|
To "convey" a work means any kind of propagation that enables other
|
||||||
|
parties to make or receive copies. Mere interaction with a user through
|
||||||
|
a computer network, with no transfer of a copy, is not conveying.
|
||||||
|
|
||||||
|
An interactive user interface displays "Appropriate Legal Notices"
|
||||||
|
to the extent that it includes a convenient and prominently visible
|
||||||
|
feature that (1) displays an appropriate copyright notice, and (2)
|
||||||
|
tells the user that there is no warranty for the work (except to the
|
||||||
|
extent that warranties are provided), that licensees may convey the
|
||||||
|
work under this License, and how to view a copy of this License. If
|
||||||
|
the interface presents a list of user commands or options, such as a
|
||||||
|
menu, a prominent item in the list meets this criterion.
|
||||||
|
|
||||||
|
1. Source Code.
|
||||||
|
|
||||||
|
The "source code" for a work means the preferred form of the work
|
||||||
|
for making modifications to it. "Object code" means any non-source
|
||||||
|
form of a work.
|
||||||
|
|
||||||
|
A "Standard Interface" means an interface that either is an official
|
||||||
|
standard defined by a recognized standards body, or, in the case of
|
||||||
|
interfaces specified for a particular programming language, one that
|
||||||
|
is widely used among developers working in that language.
|
||||||
|
|
||||||
|
The "System Libraries" of an executable work include anything, other
|
||||||
|
than the work as a whole, that (a) is included in the normal form of
|
||||||
|
packaging a Major Component, but which is not part of that Major
|
||||||
|
Component, and (b) serves only to enable use of the work with that
|
||||||
|
Major Component, or to implement a Standard Interface for which an
|
||||||
|
implementation is available to the public in source code form. A
|
||||||
|
"Major Component", in this context, means a major essential component
|
||||||
|
(kernel, window system, and so on) of the specific operating system
|
||||||
|
(if any) on which the executable work runs, or a compiler used to
|
||||||
|
produce the work, or an object code interpreter used to run it.
|
||||||
|
|
||||||
|
The "Corresponding Source" for a work in object code form means all
|
||||||
|
the source code needed to generate, install, and (for an executable
|
||||||
|
work) run the object code and to modify the work, including scripts to
|
||||||
|
control those activities. However, it does not include the work's
|
||||||
|
System Libraries, or general-purpose tools or generally available free
|
||||||
|
programs which are used unmodified in performing those activities but
|
||||||
|
which are not part of the work. For example, Corresponding Source
|
||||||
|
includes interface definition files associated with source files for
|
||||||
|
the work, and the source code for shared libraries and dynamically
|
||||||
|
linked subprograms that the work is specifically designed to require,
|
||||||
|
such as by intimate data communication or control flow between those
|
||||||
|
subprograms and other parts of the work.
|
||||||
|
|
||||||
|
The Corresponding Source need not include anything that users
|
||||||
|
can regenerate automatically from other parts of the Corresponding
|
||||||
|
Source.
|
||||||
|
|
||||||
|
The Corresponding Source for a work in source code form is that
|
||||||
|
same work.
|
||||||
|
|
||||||
|
2. Basic Permissions.
|
||||||
|
|
||||||
|
All rights granted under this License are granted for the term of
|
||||||
|
copyright on the Program, and are irrevocable provided the stated
|
||||||
|
conditions are met. This License explicitly affirms your unlimited
|
||||||
|
permission to run the unmodified Program. The output from running a
|
||||||
|
covered work is covered by this License only if the output, given its
|
||||||
|
content, constitutes a covered work. This License acknowledges your
|
||||||
|
rights of fair use or other equivalent, as provided by copyright law.
|
||||||
|
|
||||||
|
You may make, run and propagate covered works that you do not
|
||||||
|
convey, without conditions so long as your license otherwise remains
|
||||||
|
in force. You may convey covered works to others for the sole purpose
|
||||||
|
of having them make modifications exclusively for you, or provide you
|
||||||
|
with facilities for running those works, provided that you comply with
|
||||||
|
the terms of this License in conveying all material for which you do
|
||||||
|
not control copyright. Those thus making or running the covered works
|
||||||
|
for you must do so exclusively on your behalf, under your direction
|
||||||
|
and control, on terms that prohibit them from making any copies of
|
||||||
|
your copyrighted material outside their relationship with you.
|
||||||
|
|
||||||
|
Conveying under any other circumstances is permitted solely under
|
||||||
|
the conditions stated below. Sublicensing is not allowed; section 10
|
||||||
|
makes it unnecessary.
|
||||||
|
|
||||||
|
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||||
|
|
||||||
|
No covered work shall be deemed part of an effective technological
|
||||||
|
measure under any applicable law fulfilling obligations under article
|
||||||
|
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||||
|
similar laws prohibiting or restricting circumvention of such
|
||||||
|
measures.
|
||||||
|
|
||||||
|
When you convey a covered work, you waive any legal power to forbid
|
||||||
|
circumvention of technological measures to the extent such circumvention
|
||||||
|
is effected by exercising rights under this License with respect to
|
||||||
|
the covered work, and you disclaim any intention to limit operation or
|
||||||
|
modification of the work as a means of enforcing, against the work's
|
||||||
|
users, your or third parties' legal rights to forbid circumvention of
|
||||||
|
technological measures.
|
||||||
|
|
||||||
|
4. Conveying Verbatim Copies.
|
||||||
|
|
||||||
|
You may convey verbatim copies of the Program's source code as you
|
||||||
|
receive it, in any medium, provided that you conspicuously and
|
||||||
|
appropriately publish on each copy an appropriate copyright notice;
|
||||||
|
keep intact all notices stating that this License and any
|
||||||
|
non-permissive terms added in accord with section 7 apply to the code;
|
||||||
|
keep intact all notices of the absence of any warranty; and give all
|
||||||
|
recipients a copy of this License along with the Program.
|
||||||
|
|
||||||
|
You may charge any price or no price for each copy that you convey,
|
||||||
|
and you may offer support or warranty protection for a fee.
|
||||||
|
|
||||||
|
5. Conveying Modified Source Versions.
|
||||||
|
|
||||||
|
You may convey a work based on the Program, or the modifications to
|
||||||
|
produce it from the Program, in the form of source code under the
|
||||||
|
terms of section 4, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The work must carry prominent notices stating that you modified
|
||||||
|
it, and giving a relevant date.
|
||||||
|
|
||||||
|
b) The work must carry prominent notices stating that it is
|
||||||
|
released under this License and any conditions added under section
|
||||||
|
7. This requirement modifies the requirement in section 4 to
|
||||||
|
"keep intact all notices".
|
||||||
|
|
||||||
|
c) You must license the entire work, as a whole, under this
|
||||||
|
License to anyone who comes into possession of a copy. This
|
||||||
|
License will therefore apply, along with any applicable section 7
|
||||||
|
additional terms, to the whole of the work, and all its parts,
|
||||||
|
regardless of how they are packaged. This License gives no
|
||||||
|
permission to license the work in any other way, but it does not
|
||||||
|
invalidate such permission if you have separately received it.
|
||||||
|
|
||||||
|
d) If the work has interactive user interfaces, each must display
|
||||||
|
Appropriate Legal Notices; however, if the Program has interactive
|
||||||
|
interfaces that do not display Appropriate Legal Notices, your
|
||||||
|
work need not make them do so.
|
||||||
|
|
||||||
|
A compilation of a covered work with other separate and independent
|
||||||
|
works, which are not by their nature extensions of the covered work,
|
||||||
|
and which are not combined with it such as to form a larger program,
|
||||||
|
in or on a volume of a storage or distribution medium, is called an
|
||||||
|
"aggregate" if the compilation and its resulting copyright are not
|
||||||
|
used to limit the access or legal rights of the compilation's users
|
||||||
|
beyond what the individual works permit. Inclusion of a covered work
|
||||||
|
in an aggregate does not cause this License to apply to the other
|
||||||
|
parts of the aggregate.
|
||||||
|
|
||||||
|
6. Conveying Non-Source Forms.
|
||||||
|
|
||||||
|
You may convey a covered work in object code form under the terms
|
||||||
|
of sections 4 and 5, provided that you also convey the
|
||||||
|
machine-readable Corresponding Source under the terms of this License,
|
||||||
|
in one of these ways:
|
||||||
|
|
||||||
|
a) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by the
|
||||||
|
Corresponding Source fixed on a durable physical medium
|
||||||
|
customarily used for software interchange.
|
||||||
|
|
||||||
|
b) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by a
|
||||||
|
written offer, valid for at least three years and valid for as
|
||||||
|
long as you offer spare parts or customer support for that product
|
||||||
|
model, to give anyone who possesses the object code either (1) a
|
||||||
|
copy of the Corresponding Source for all the software in the
|
||||||
|
product that is covered by this License, on a durable physical
|
||||||
|
medium customarily used for software interchange, for a price no
|
||||||
|
more than your reasonable cost of physically performing this
|
||||||
|
conveying of source, or (2) access to copy the
|
||||||
|
Corresponding Source from a network server at no charge.
|
||||||
|
|
||||||
|
c) Convey individual copies of the object code with a copy of the
|
||||||
|
written offer to provide the Corresponding Source. This
|
||||||
|
alternative is allowed only occasionally and noncommercially, and
|
||||||
|
only if you received the object code with such an offer, in accord
|
||||||
|
with subsection 6b.
|
||||||
|
|
||||||
|
d) Convey the object code by offering access from a designated
|
||||||
|
place (gratis or for a charge), and offer equivalent access to the
|
||||||
|
Corresponding Source in the same way through the same place at no
|
||||||
|
further charge. You need not require recipients to copy the
|
||||||
|
Corresponding Source along with the object code. If the place to
|
||||||
|
copy the object code is a network server, the Corresponding Source
|
||||||
|
may be on a different server (operated by you or a third party)
|
||||||
|
that supports equivalent copying facilities, provided you maintain
|
||||||
|
clear directions next to the object code saying where to find the
|
||||||
|
Corresponding Source. Regardless of what server hosts the
|
||||||
|
Corresponding Source, you remain obligated to ensure that it is
|
||||||
|
available for as long as needed to satisfy these requirements.
|
||||||
|
|
||||||
|
e) Convey the object code using peer-to-peer transmission, provided
|
||||||
|
you inform other peers where the object code and Corresponding
|
||||||
|
Source of the work are being offered to the general public at no
|
||||||
|
charge under subsection 6d.
|
||||||
|
|
||||||
|
A separable portion of the object code, whose source code is excluded
|
||||||
|
from the Corresponding Source as a System Library, need not be
|
||||||
|
included in conveying the object code work.
|
||||||
|
|
||||||
|
A "User Product" is either (1) a "consumer product", which means any
|
||||||
|
tangible personal property which is normally used for personal, family,
|
||||||
|
or household purposes, or (2) anything designed or sold for incorporation
|
||||||
|
into a dwelling. In determining whether a product is a consumer product,
|
||||||
|
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||||
|
product received by a particular user, "normally used" refers to a
|
||||||
|
typical or common use of that class of product, regardless of the status
|
||||||
|
of the particular user or of the way in which the particular user
|
||||||
|
actually uses, or expects or is expected to use, the product. A product
|
||||||
|
is a consumer product regardless of whether the product has substantial
|
||||||
|
commercial, industrial or non-consumer uses, unless such uses represent
|
||||||
|
the only significant mode of use of the product.
|
||||||
|
|
||||||
|
"Installation Information" for a User Product means any methods,
|
||||||
|
procedures, authorization keys, or other information required to install
|
||||||
|
and execute modified versions of a covered work in that User Product from
|
||||||
|
a modified version of its Corresponding Source. The information must
|
||||||
|
suffice to ensure that the continued functioning of the modified object
|
||||||
|
code is in no case prevented or interfered with solely because
|
||||||
|
modification has been made.
|
||||||
|
|
||||||
|
If you convey an object code work under this section in, or with, or
|
||||||
|
specifically for use in, a User Product, and the conveying occurs as
|
||||||
|
part of a transaction in which the right of possession and use of the
|
||||||
|
User Product is transferred to the recipient in perpetuity or for a
|
||||||
|
fixed term (regardless of how the transaction is characterized), the
|
||||||
|
Corresponding Source conveyed under this section must be accompanied
|
||||||
|
by the Installation Information. But this requirement does not apply
|
||||||
|
if neither you nor any third party retains the ability to install
|
||||||
|
modified object code on the User Product (for example, the work has
|
||||||
|
been installed in ROM).
|
||||||
|
|
||||||
|
The requirement to provide Installation Information does not include a
|
||||||
|
requirement to continue to provide support service, warranty, or updates
|
||||||
|
for a work that has been modified or installed by the recipient, or for
|
||||||
|
the User Product in which it has been modified or installed. Access to a
|
||||||
|
network may be denied when the modification itself materially and
|
||||||
|
adversely affects the operation of the network or violates the rules and
|
||||||
|
protocols for communication across the network.
|
||||||
|
|
||||||
|
Corresponding Source conveyed, and Installation Information provided,
|
||||||
|
in accord with this section must be in a format that is publicly
|
||||||
|
documented (and with an implementation available to the public in
|
||||||
|
source code form), and must require no special password or key for
|
||||||
|
unpacking, reading or copying.
|
||||||
|
|
||||||
|
7. Additional Terms.
|
||||||
|
|
||||||
|
"Additional permissions" are terms that supplement the terms of this
|
||||||
|
License by making exceptions from one or more of its conditions.
|
||||||
|
Additional permissions that are applicable to the entire Program shall
|
||||||
|
be treated as though they were included in this License, to the extent
|
||||||
|
that they are valid under applicable law. If additional permissions
|
||||||
|
apply only to part of the Program, that part may be used separately
|
||||||
|
under those permissions, but the entire Program remains governed by
|
||||||
|
this License without regard to the additional permissions.
|
||||||
|
|
||||||
|
When you convey a copy of a covered work, you may at your option
|
||||||
|
remove any additional permissions from that copy, or from any part of
|
||||||
|
it. (Additional permissions may be written to require their own
|
||||||
|
removal in certain cases when you modify the work.) You may place
|
||||||
|
additional permissions on material, added by you to a covered work,
|
||||||
|
for which you have or can give appropriate copyright permission.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, for material you
|
||||||
|
add to a covered work, you may (if authorized by the copyright holders of
|
||||||
|
that material) supplement the terms of this License with terms:
|
||||||
|
|
||||||
|
a) Disclaiming warranty or limiting liability differently from the
|
||||||
|
terms of sections 15 and 16 of this License; or
|
||||||
|
|
||||||
|
b) Requiring preservation of specified reasonable legal notices or
|
||||||
|
author attributions in that material or in the Appropriate Legal
|
||||||
|
Notices displayed by works containing it; or
|
||||||
|
|
||||||
|
c) Prohibiting misrepresentation of the origin of that material, or
|
||||||
|
requiring that modified versions of such material be marked in
|
||||||
|
reasonable ways as different from the original version; or
|
||||||
|
|
||||||
|
d) Limiting the use for publicity purposes of names of licensors or
|
||||||
|
authors of the material; or
|
||||||
|
|
||||||
|
e) Declining to grant rights under trademark law for use of some
|
||||||
|
trade names, trademarks, or service marks; or
|
||||||
|
|
||||||
|
f) Requiring indemnification of licensors and authors of that
|
||||||
|
material by anyone who conveys the material (or modified versions of
|
||||||
|
it) with contractual assumptions of liability to the recipient, for
|
||||||
|
any liability that these contractual assumptions directly impose on
|
||||||
|
those licensors and authors.
|
||||||
|
|
||||||
|
All other non-permissive additional terms are considered "further
|
||||||
|
restrictions" within the meaning of section 10. If the Program as you
|
||||||
|
received it, or any part of it, contains a notice stating that it is
|
||||||
|
governed by this License along with a term that is a further
|
||||||
|
restriction, you may remove that term. If a license document contains
|
||||||
|
a further restriction but permits relicensing or conveying under this
|
||||||
|
License, you may add to a covered work material governed by the terms
|
||||||
|
of that license document, provided that the further restriction does
|
||||||
|
not survive such relicensing or conveying.
|
||||||
|
|
||||||
|
If you add terms to a covered work in accord with this section, you
|
||||||
|
must place, in the relevant source files, a statement of the
|
||||||
|
additional terms that apply to those files, or a notice indicating
|
||||||
|
where to find the applicable terms.
|
||||||
|
|
||||||
|
Additional terms, permissive or non-permissive, may be stated in the
|
||||||
|
form of a separately written license, or stated as exceptions;
|
||||||
|
the above requirements apply either way.
|
||||||
|
|
||||||
|
8. Termination.
|
||||||
|
|
||||||
|
You may not propagate or modify a covered work except as expressly
|
||||||
|
provided under this License. Any attempt otherwise to propagate or
|
||||||
|
modify it is void, and will automatically terminate your rights under
|
||||||
|
this License (including any patent licenses granted under the third
|
||||||
|
paragraph of section 11).
|
||||||
|
|
||||||
|
However, if you cease all violation of this License, then your
|
||||||
|
license from a particular copyright holder is reinstated (a)
|
||||||
|
provisionally, unless and until the copyright holder explicitly and
|
||||||
|
finally terminates your license, and (b) permanently, if the copyright
|
||||||
|
holder fails to notify you of the violation by some reasonable means
|
||||||
|
prior to 60 days after the cessation.
|
||||||
|
|
||||||
|
Moreover, your license from a particular copyright holder is
|
||||||
|
reinstated permanently if the copyright holder notifies you of the
|
||||||
|
violation by some reasonable means, this is the first time you have
|
||||||
|
received notice of violation of this License (for any work) from that
|
||||||
|
copyright holder, and you cure the violation prior to 30 days after
|
||||||
|
your receipt of the notice.
|
||||||
|
|
||||||
|
Termination of your rights under this section does not terminate the
|
||||||
|
licenses of parties who have received copies or rights from you under
|
||||||
|
this License. If your rights have been terminated and not permanently
|
||||||
|
reinstated, you do not qualify to receive new licenses for the same
|
||||||
|
material under section 10.
|
||||||
|
|
||||||
|
9. Acceptance Not Required for Having Copies.
|
||||||
|
|
||||||
|
You are not required to accept this License in order to receive or
|
||||||
|
run a copy of the Program. Ancillary propagation of a covered work
|
||||||
|
occurring solely as a consequence of using peer-to-peer transmission
|
||||||
|
to receive a copy likewise does not require acceptance. However,
|
||||||
|
nothing other than this License grants you permission to propagate or
|
||||||
|
modify any covered work. These actions infringe copyright if you do
|
||||||
|
not accept this License. Therefore, by modifying or propagating a
|
||||||
|
covered work, you indicate your acceptance of this License to do so.
|
||||||
|
|
||||||
|
10. Automatic Licensing of Downstream Recipients.
|
||||||
|
|
||||||
|
Each time you convey a covered work, the recipient automatically
|
||||||
|
receives a license from the original licensors, to run, modify and
|
||||||
|
propagate that work, subject to this License. You are not responsible
|
||||||
|
for enforcing compliance by third parties with this License.
|
||||||
|
|
||||||
|
An "entity transaction" is a transaction transferring control of an
|
||||||
|
organization, or substantially all assets of one, or subdividing an
|
||||||
|
organization, or merging organizations. If propagation of a covered
|
||||||
|
work results from an entity transaction, each party to that
|
||||||
|
transaction who receives a copy of the work also receives whatever
|
||||||
|
licenses to the work the party's predecessor in interest had or could
|
||||||
|
give under the previous paragraph, plus a right to possession of the
|
||||||
|
Corresponding Source of the work from the predecessor in interest, if
|
||||||
|
the predecessor has it or can get it with reasonable efforts.
|
||||||
|
|
||||||
|
You may not impose any further restrictions on the exercise of the
|
||||||
|
rights granted or affirmed under this License. For example, you may
|
||||||
|
not impose a license fee, royalty, or other charge for exercise of
|
||||||
|
rights granted under this License, and you may not initiate litigation
|
||||||
|
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||||
|
any patent claim is infringed by making, using, selling, offering for
|
||||||
|
sale, or importing the Program or any portion of it.
|
||||||
|
|
||||||
|
11. Patents.
|
||||||
|
|
||||||
|
A "contributor" is a copyright holder who authorizes use under this
|
||||||
|
License of the Program or a work on which the Program is based. The
|
||||||
|
work thus licensed is called the contributor's "contributor version".
|
||||||
|
|
||||||
|
A contributor's "essential patent claims" are all patent claims
|
||||||
|
owned or controlled by the contributor, whether already acquired or
|
||||||
|
hereafter acquired, that would be infringed by some manner, permitted
|
||||||
|
by this License, of making, using, or selling its contributor version,
|
||||||
|
but do not include claims that would be infringed only as a
|
||||||
|
consequence of further modification of the contributor version. For
|
||||||
|
purposes of this definition, "control" includes the right to grant
|
||||||
|
patent sublicenses in a manner consistent with the requirements of
|
||||||
|
this License.
|
||||||
|
|
||||||
|
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||||
|
patent license under the contributor's essential patent claims, to
|
||||||
|
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||||
|
propagate the contents of its contributor version.
|
||||||
|
|
||||||
|
In the following three paragraphs, a "patent license" is any express
|
||||||
|
agreement or commitment, however denominated, not to enforce a patent
|
||||||
|
(such as an express permission to practice a patent or covenant not to
|
||||||
|
sue for patent infringement). To "grant" such a patent license to a
|
||||||
|
party means to make such an agreement or commitment not to enforce a
|
||||||
|
patent against the party.
|
||||||
|
|
||||||
|
If you convey a covered work, knowingly relying on a patent license,
|
||||||
|
and the Corresponding Source of the work is not available for anyone
|
||||||
|
to copy, free of charge and under the terms of this License, through a
|
||||||
|
publicly available network server or other readily accessible means,
|
||||||
|
then you must either (1) cause the Corresponding Source to be so
|
||||||
|
available, or (2) arrange to deprive yourself of the benefit of the
|
||||||
|
patent license for this particular work, or (3) arrange, in a manner
|
||||||
|
consistent with the requirements of this License, to extend the patent
|
||||||
|
license to downstream recipients. "Knowingly relying" means you have
|
||||||
|
actual knowledge that, but for the patent license, your conveying the
|
||||||
|
covered work in a country, or your recipient's use of the covered work
|
||||||
|
in a country, would infringe one or more identifiable patents in that
|
||||||
|
country that you have reason to believe are valid.
|
||||||
|
|
||||||
|
If, pursuant to or in connection with a single transaction or
|
||||||
|
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||||
|
covered work, and grant a patent license to some of the parties
|
||||||
|
receiving the covered work authorizing them to use, propagate, modify
|
||||||
|
or convey a specific copy of the covered work, then the patent license
|
||||||
|
you grant is automatically extended to all recipients of the covered
|
||||||
|
work and works based on it.
|
||||||
|
|
||||||
|
A patent license is "discriminatory" if it does not include within
|
||||||
|
the scope of its coverage, prohibits the exercise of, or is
|
||||||
|
conditioned on the non-exercise of one or more of the rights that are
|
||||||
|
specifically granted under this License. You may not convey a covered
|
||||||
|
work if you are a party to an arrangement with a third party that is
|
||||||
|
in the business of distributing software, under which you make payment
|
||||||
|
to the third party based on the extent of your activity of conveying
|
||||||
|
the work, and under which the third party grants, to any of the
|
||||||
|
parties who would receive the covered work from you, a discriminatory
|
||||||
|
patent license (a) in connection with copies of the covered work
|
||||||
|
conveyed by you (or copies made from those copies), or (b) primarily
|
||||||
|
for and in connection with specific products or compilations that
|
||||||
|
contain the covered work, unless you entered into that arrangement,
|
||||||
|
or that patent license was granted, prior to 28 March 2007.
|
||||||
|
|
||||||
|
Nothing in this License shall be construed as excluding or limiting
|
||||||
|
any implied license or other defenses to infringement that may
|
||||||
|
otherwise be available to you under applicable patent law.
|
||||||
|
|
||||||
|
12. No Surrender of Others' Freedom.
|
||||||
|
|
||||||
|
If conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot convey a
|
||||||
|
covered work so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you may
|
||||||
|
not convey it at all. For example, if you agree to terms that obligate you
|
||||||
|
to collect a royalty for further conveying from those to whom you convey
|
||||||
|
the Program, the only way you could satisfy both those terms and this
|
||||||
|
License would be to refrain entirely from conveying the Program.
|
||||||
|
|
||||||
|
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, if you modify the
|
||||||
|
Program, your modified version must prominently offer all users
|
||||||
|
interacting with it remotely through a computer network (if your version
|
||||||
|
supports such interaction) an opportunity to receive the Corresponding
|
||||||
|
Source of your version by providing access to the Corresponding Source
|
||||||
|
from a network server at no charge, through some standard or customary
|
||||||
|
means of facilitating copying of software. This Corresponding Source
|
||||||
|
shall include the Corresponding Source for any work covered by version 3
|
||||||
|
of the GNU General Public License that is incorporated pursuant to the
|
||||||
|
following paragraph.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, you have
|
||||||
|
permission to link or combine any covered work with a work licensed
|
||||||
|
under version 3 of the GNU General Public License into a single
|
||||||
|
combined work, and to convey the resulting work. The terms of this
|
||||||
|
License will continue to apply to the part which is the covered work,
|
||||||
|
but the work with which it is combined will remain governed by version
|
||||||
|
3 of the GNU General Public License.
|
||||||
|
|
||||||
|
14. Revised Versions of this License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions of
|
||||||
|
the GNU Affero General Public License from time to time. Such new versions
|
||||||
|
will be similar in spirit to the present version, but may differ in detail to
|
||||||
|
address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the
|
||||||
|
Program specifies that a certain numbered version of the GNU Affero General
|
||||||
|
Public License "or any later version" applies to it, you have the
|
||||||
|
option of following the terms and conditions either of that numbered
|
||||||
|
version or of any later version published by the Free Software
|
||||||
|
Foundation. If the Program does not specify a version number of the
|
||||||
|
GNU Affero General Public License, you may choose any version ever published
|
||||||
|
by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Program specifies that a proxy can decide which future
|
||||||
|
versions of the GNU Affero General Public License can be used, that proxy's
|
||||||
|
public statement of acceptance of a version permanently authorizes you
|
||||||
|
to choose that version for the Program.
|
||||||
|
|
||||||
|
Later license versions may give you additional or different
|
||||||
|
permissions. However, no additional obligations are imposed on any
|
||||||
|
author or copyright holder as a result of your choosing to follow a
|
||||||
|
later version.
|
||||||
|
|
||||||
|
15. Disclaimer of Warranty.
|
||||||
|
|
||||||
|
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||||
|
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||||
|
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||||
|
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||||
|
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||||
|
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. Limitation of Liability.
|
||||||
|
|
||||||
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||||
|
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||||
|
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||||
|
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||||
|
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||||
|
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||||
|
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGES.
|
||||||
|
|
||||||
|
17. Interpretation of Sections 15 and 16.
|
||||||
|
|
||||||
|
If the disclaimer of warranty and limitation of liability provided
|
||||||
|
above cannot be given local legal effect according to their terms,
|
||||||
|
reviewing courts shall apply local law that most closely approximates
|
||||||
|
an absolute waiver of all civil liability in connection with the
|
||||||
|
Program, unless a warranty or assumption of liability accompanies a
|
||||||
|
copy of the Program in return for a fee.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Programs
|
||||||
|
|
||||||
|
If you develop a new program, and you want it to be of the greatest
|
||||||
|
possible use to the public, the best way to achieve this is to make it
|
||||||
|
free software which everyone can redistribute and change under these terms.
|
||||||
|
|
||||||
|
To do so, attach the following notices to the program. It is safest
|
||||||
|
to attach them to the start of each source file to most effectively
|
||||||
|
state the exclusion of warranty; and each file should have at least
|
||||||
|
the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the program's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If your software can interact with users remotely through a computer
|
||||||
|
network, you should also make sure that it provides a way for users to
|
||||||
|
get its source. For example, if your program is a web application, its
|
||||||
|
interface could display a "Source" link that leads users to an archive
|
||||||
|
of the code. There are many ways you could offer source, and different
|
||||||
|
solutions will be better for different programs; see section 13 for the
|
||||||
|
specific requirements.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or school,
|
||||||
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||||
|
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||||
|
<https://www.gnu.org/licenses/>.
|
@ -1,42 +1,164 @@
|
|||||||
jobs:
|
jobs:
|
||||||
- job: ubuntu16
|
- job: ubuntu18
|
||||||
timeoutInMinutes: 120
|
timeoutInMinutes: 120
|
||||||
pool:
|
pool:
|
||||||
vmImage: 'Ubuntu-16.04'
|
vmImage: 'ubuntu-18.04'
|
||||||
steps:
|
steps:
|
||||||
- script: |
|
- script: |
|
||||||
sudo apt-get update
|
sudo apt update
|
||||||
sudo apt-get install -y software-properties-common
|
sudo apt install -y software-properties-common
|
||||||
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
# sudo add-apt-repository ppa:ubuntu-toolchain-r/test
|
||||||
sudo apt-get update
|
sudo apt update
|
||||||
sudo apt-get install cmake build-essential -y
|
sudo apt install cmake build-essential -y
|
||||||
sudo apt-get install gcc-8 g++-8 -y
|
sudo apt install gcc-8 g++-8 -y
|
||||||
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 60
|
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 60
|
||||||
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 60
|
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 60
|
||||||
sudo apt-get install bison autoconf automake -y
|
sudo apt install bison autoconf automake -y
|
||||||
sudo apt-get install libpng12-dev -y
|
sudo apt install libpng-dev -y
|
||||||
sudo apt-get install libjpeg-dev -y
|
sudo apt install libjpeg-dev -y
|
||||||
sudo apt-get install libgif-dev libfreetype6-dev -y
|
sudo apt install libgif-dev libfreetype6-dev -y
|
||||||
sudo apt-get install freeglut3-dev -y
|
sudo apt install freeglut3-dev -y
|
||||||
sudo apt-get install liblua5.1-dev libluabind-dev libcpptest-dev -y
|
sudo apt install liblua5.2-dev libluabind-dev libcpptest-dev -y
|
||||||
sudo apt-get install libogg-dev libvorbis-dev libopenal-dev -y
|
sudo apt install libogg-dev libvorbis-dev libopenal-dev -y
|
||||||
sudo apt-get install libavcodec-dev libavformat-dev libavdevice-dev libswscale-dev libpostproc-dev -y
|
sudo apt install libavcodec-dev libavformat-dev libavdevice-dev libswscale-dev libpostproc-dev -y
|
||||||
sudo apt-get install libmysqlclient-dev -y
|
sudo apt install libmysqlclient-dev -y
|
||||||
sudo apt-get install libxml2-dev -y
|
sudo apt install libxml2-dev -y
|
||||||
sudo apt-get install libcurl4-openssl-dev libssl-dev -y
|
sudo apt install libcurl4-openssl-dev libssl-dev -y
|
||||||
sudo apt-get install libsquish-dev -y
|
sudo apt install libsquish-dev -y
|
||||||
sudo apt-get install liblzma-dev -y
|
sudo apt install liblzma-dev -y
|
||||||
sudo apt-get install libgsf-1-dev -y
|
sudo apt install libgsf-1-dev -y
|
||||||
sudo apt-get install qtbase5-dev qttools5-dev qttools5-dev-tools
|
sudo apt install qtbase5-dev qttools5-dev qttools5-dev-tools
|
||||||
|
displayName: 'Dependencies'
|
||||||
|
- script: |
|
||||||
|
mkdir build
|
||||||
|
cmake --version
|
||||||
|
cd build
|
||||||
|
cmake -DWITH_STATIC=ON -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=ON -DWITH_LUA51=OFF -DWITH_LUA52=ON -DWITH_RYZOM=ON -DWITH_RYZOM_SERVER=ON -DWITH_RYZOM_CLIENT=ON -DWITH_RYZOM_TOOLS=ON -DWITH_NEL_TOOLS=ON -DWITH_NELNS=ON -DWITH_NELNS_LOGIN_SYSTEM=ON -DWITH_NELNS_SERVER=ON -DWITH_QT5=ON -DWITH_LIBGSF=ON ..
|
||||||
|
cat CMakeCache.txt
|
||||||
|
displayName: 'CMake'
|
||||||
|
- script: |
|
||||||
|
cd build
|
||||||
|
make -j`nproc`
|
||||||
|
displayName: 'Make'
|
||||||
|
- job: ubuntu20
|
||||||
|
timeoutInMinutes: 120
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-20.04'
|
||||||
|
steps:
|
||||||
|
- script: |
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y software-properties-common
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install cmake build-essential -y
|
||||||
|
sudo apt install bison autoconf automake -y
|
||||||
|
sudo apt install libpng-dev -y
|
||||||
|
sudo apt install libjpeg-dev -y
|
||||||
|
sudo apt install libgif-dev libfreetype6-dev -y
|
||||||
|
sudo apt install freeglut3-dev -y
|
||||||
|
sudo apt install liblua5.2-dev libluabind-dev libcpptest-dev -y
|
||||||
|
sudo apt install libogg-dev libvorbis-dev libopenal-dev -y
|
||||||
|
sudo apt install libavcodec-dev libavformat-dev libavdevice-dev libswscale-dev libpostproc-dev -y
|
||||||
|
sudo apt install libmysqlclient-dev -y
|
||||||
|
sudo apt install libxml2-dev -y
|
||||||
|
sudo apt install libcurl4-openssl-dev libssl-dev -y
|
||||||
|
sudo apt install libsquish-dev -y
|
||||||
|
sudo apt install liblzma-dev -y
|
||||||
|
sudo apt install libgsf-1-dev -y
|
||||||
|
sudo apt install qtbase5-dev qttools5-dev qttools5-dev-tools
|
||||||
displayName: 'Dependencies'
|
displayName: 'Dependencies'
|
||||||
- script: |
|
- script: |
|
||||||
mkdir build
|
mkdir build
|
||||||
cmake --version
|
cmake --version
|
||||||
cd build
|
cd build
|
||||||
cmake -DWITH_STATIC=ON -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=ON -DWITH_LUA51=ON -DWITH_RYZOM=ON -DWITH_RYZOM_SERVER=ON -DWITH_RYZOM_CLIENT=ON -DWITH_RYZOM_TOOLS=ON -DWITH_NEL_TOOLS=ON -DWITH_NELNS=ON -DWITH_NELNS_LOGIN_SYSTEM=ON -DWITH_NELNS_SERVER=ON -DWITH_QT5=ON -DWITH_LIBGSF=ON ../code
|
cmake -DWITH_STATIC=ON -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=ON -DWITH_LUA51=OFF -DWITH_LUA52=ON -DWITH_RYZOM=ON -DWITH_RYZOM_SERVER=ON -DWITH_RYZOM_CLIENT=ON -DWITH_RYZOM_TOOLS=ON -DWITH_NEL_TOOLS=ON -DWITH_NELNS=ON -DWITH_NELNS_LOGIN_SYSTEM=ON -DWITH_NELNS_SERVER=ON -DWITH_QT5=ON -DWITH_LIBGSF=ON ..
|
||||||
cat CMakeCache.txt
|
cat CMakeCache.txt
|
||||||
displayName: 'CMake'
|
displayName: 'CMake'
|
||||||
- script: |
|
- script: |
|
||||||
cd build
|
cd build
|
||||||
make -j`nproc`
|
make -j`nproc`
|
||||||
displayName: 'Make'
|
displayName: 'Make'
|
||||||
|
- job: windows2019
|
||||||
|
timeoutInMinutes: 120
|
||||||
|
pool:
|
||||||
|
vmImage: 'windows-2019'
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
fetchDepth: 1
|
||||||
|
- task: Cache@2
|
||||||
|
inputs:
|
||||||
|
key: 'hunter-win2019-x64-rel'
|
||||||
|
path: "c:/.hunter/_Base/Cache"
|
||||||
|
- task: CmdLine@2
|
||||||
|
inputs:
|
||||||
|
script: |
|
||||||
|
aria2c https://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe
|
||||||
|
7z x DXSDK_Jun10.exe -oC:\ -r -y
|
||||||
|
del DXSDK_Jun10.exe
|
||||||
|
- task: CMake@1
|
||||||
|
inputs:
|
||||||
|
workingDirectory: build.release
|
||||||
|
cmakeArgs: '-DCMAKE_CONFIGURATION_TYPES=Release -DHUNTER_ENABLED=ON -DHUNTER_CONFIGURATION_TYPES=Release -DFINAL_VERSION=OFF -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_NEL_TOOLS=OFF -DWITH_RYZOM_TOOLS=OFF -DWITH_RYZOM_SERVER=OFF -DWITH_RYZOM_CLIENT=ON -DWITH_DRIVER_OPENGL=ON -DWITH_DRIVER_OPENAL=ON -DWITH_DRIVER_DIRECT3D=ON -DWITH_DRIVER_XAUDIO2=ON -DDXSDK_DIR=C:/DXSDK ..'
|
||||||
|
- task: MSBuild@1
|
||||||
|
inputs:
|
||||||
|
solution: build.release/ALL_BUILD.vcxproj
|
||||||
|
maximumCpuCount: true
|
||||||
|
configuration: release
|
||||||
|
platform: 'x64'
|
||||||
|
- job: ubuntu18hunter
|
||||||
|
timeoutInMinutes: 120
|
||||||
|
pool:
|
||||||
|
vmImage: ubuntu-18.04
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
fetchDepth: 0
|
||||||
|
- script: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends libasound2-dev libgl1-mesa-dev libjack-dev libpulse-dev libxrandr-dev libxrender-dev libxxf86vm-dev
|
||||||
|
displayName: 'Dependencies'
|
||||||
|
- task: Cache@2
|
||||||
|
inputs:
|
||||||
|
key: 'hunter317-ubuntu18-rel"'
|
||||||
|
path: "$(Pipeline.Workspace)/.hunter/_Base/Cache"
|
||||||
|
- script: |
|
||||||
|
mkdir build.release
|
||||||
|
cmake --version
|
||||||
|
cd build.release
|
||||||
|
unset SYSTEM
|
||||||
|
export MAKEFLAGS=-j`nproc`
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=Release -DHUNTER_ENABLED=ON -DHUNTER_CONFIGURATION_TYPES=Release -DHUNTER_ROOT="$(Pipeline.Workspace)/.hunter" -DFINAL_VERSION=OFF -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_NEL_TOOLS=OFF -DWITH_RYZOM_TOOLS=OFF -DWITH_RYZOM_SERVER=OFF -DWITH_RYZOM_CLIENT=ON -DWITH_DRIVER_OPENGL=ON -DWITH_DRIVER_OPENAL=ON ..
|
||||||
|
displayName: 'CMake, release'
|
||||||
|
- script: |
|
||||||
|
cd build.release
|
||||||
|
make -j`nproc`
|
||||||
|
displayName: 'Make, release'
|
||||||
|
#- task: PublishPipelineArtifact@1
|
||||||
|
# inputs:
|
||||||
|
# targetPath: build.release/bin
|
||||||
|
# artifactName: RyzomUbuntu18Release
|
||||||
|
- job: macOS11
|
||||||
|
timeoutInMinutes: 120
|
||||||
|
pool:
|
||||||
|
vmImage: 'macOS-11'
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
fetchDepth: 0
|
||||||
|
- task: Cache@2
|
||||||
|
inputs:
|
||||||
|
key: 'hunter317-macOS11-rel"'
|
||||||
|
path: "$(Pipeline.Workspace)/.hunter/_Base/Cache"
|
||||||
|
- task: CMake@1
|
||||||
|
inputs:
|
||||||
|
workingDirectory: build.release
|
||||||
|
cmakeArgs: '-GXcode -DCMAKE_CONFIGURATION_TYPES=Release -DHUNTER_ENABLED=ON -DHUNTER_STATUS_DEBUG=ON -DHUNTER_CONFIGURATION_TYPES=Release -DHUNTER_ROOT="$(Pipeline.Workspace)/.hunter" -DWITH_LIBXML2_ICONV=OFF -DFINAL_VERSION=OFF -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_NEL_TOOLS=OFF -DWITH_RYZOM_TOOLS=OFF -DWITH_RYZOM_SERVER=OFF -DWITH_RYZOM_CLIENT=ON -DWITH_DRIVER_OPENGL=ON -DWITH_DRIVER_OPENAL=ON -DWITH_DRIVER_DIRECT3D=OFF -DWITH_DRIVER_XAUDIO2=OFF ..'
|
||||||
|
- task: Xcode@5
|
||||||
|
inputs:
|
||||||
|
actions: 'build'
|
||||||
|
configuration: Release
|
||||||
|
sdk: macosx12.0
|
||||||
|
xcWorkspacePath: 'build.release/RyzomCore.xcodeproj'
|
||||||
|
scheme: 'ALL_BUILD'
|
||||||
|
packageApp: false
|
||||||
|
#- task: PublishPipelineArtifact@1
|
||||||
|
# inputs:
|
||||||
|
# targetPath: build.release/bin/
|
||||||
|
# artifactName: RyzomClientMacOS11Release
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
; Top-most EditorConfig file
|
|
||||||
root = true
|
|
||||||
|
|
||||||
; 4-column tab indentation
|
|
||||||
[*.cpp]
|
|
||||||
indent_style = tab
|
|
||||||
indent_size = 4
|
|
||||||
|
|
||||||
[*.c]
|
|
||||||
indent_style = tab
|
|
||||||
indent_size = 4
|
|
||||||
|
|
||||||
[*.h]
|
|
||||||
indent_style = tab
|
|
||||||
indent_size = 4
|
|
||||||
|
|
||||||
[*.py]
|
|
||||||
indent_style = tab
|
|
||||||
indent_size = 4
|
|
||||||
|
|
||||||
[*.config]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
@ -1,425 +0,0 @@
|
|||||||
#-----------------------------------------------------------------------------
|
|
||||||
#
|
|
||||||
# Ryzom Core
|
|
||||||
# Authors: Nevrax and the Ryzom Core Community
|
|
||||||
# Version: 0.12.0
|
|
||||||
#
|
|
||||||
# Notes:
|
|
||||||
# * Changing install location: add -DCMAKE_INSTALL_PREFIX:PATH=/my/new/path
|
|
||||||
# * Changing specific install location variables:
|
|
||||||
# * NL_ETC_PREFIX (default: $CMAKE_INSTALL_PREFIX/etc)
|
|
||||||
# * NL_SHARE_PREFIX (default: $CMAKE_INSTALL_PREFIX/share)
|
|
||||||
# * NL_BIN_PREFIX (default: $CMAKE_INSTALL_PREFIX/bin)
|
|
||||||
# * NL_SBIN_PREFIX (default: $CMAKE_INSTALL_PREFIX/sbin)
|
|
||||||
# * NL_LIB_PREFIX (default: $CMAKE_INSTALL_PREFIX/lib)
|
|
||||||
# * NL_DRIVER_PREFIX (default: $CMAKE_INSTALL_PREFIX/lib (windows) or $CMAKE_INSTALL_PREFIX/lib/nel)
|
|
||||||
# * Enable building of documentation: add -DBUILD_DOCUMENTATION:BOOL=ON - new make target: DoxygenDoc
|
|
||||||
# * Updating version: update header (above) but also update NL_VERSION below.
|
|
||||||
# * To build binary archive, use the 'package' target.
|
|
||||||
# To build source archive, use the 'package_source' target.
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
|
||||||
# Load some macros.
|
|
||||||
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
|
|
||||||
#-----------------------------------------------------------------------------
|
|
||||||
# Set CMake 2.6 Policies.
|
|
||||||
IF(COMMAND cmake_policy)
|
|
||||||
# Works around warnings libraries linked against that don't
|
|
||||||
# have absolute paths (e.g. -lpthread)
|
|
||||||
cmake_policy(SET CMP0003 NEW)
|
|
||||||
|
|
||||||
# allow to link to qtmain automatically under Windows
|
|
||||||
IF(POLICY CMP0020)
|
|
||||||
CMAKE_POLICY(SET CMP0020 NEW)
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
INCLUDE(nel)
|
|
||||||
INCLUDE(ConfigureChecks)
|
|
||||||
INCLUDE(CheckDepends)
|
|
||||||
INCLUDE(${CMAKE_ROOT}/Modules/Documentation.cmake OPTIONAL)
|
|
||||||
|
|
||||||
# Force out of source builds.
|
|
||||||
CHECK_OUT_OF_SOURCE()
|
|
||||||
|
|
||||||
# To be able to specify a different deployment target on Mac OS X :
|
|
||||||
# export MACOSX_DEPLOYMENT_TARGET=10.6
|
|
||||||
|
|
||||||
IF(CMAKE_VERSION VERSION_GREATER "2.8.10")
|
|
||||||
STRING(TIMESTAMP CURRENT_YEAR "%Y")
|
|
||||||
ELSE()
|
|
||||||
SET(CURRENT_YEAR "2016")
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
|
|
||||||
PROJECT(RyzomCore CXX C)
|
|
||||||
SET(NL_VERSION_MAJOR 1)
|
|
||||||
SET(NL_VERSION_MINOR 0)
|
|
||||||
SET(NL_VERSION_PATCH 0)
|
|
||||||
SET(YEAR "2004-${CURRENT_YEAR}")
|
|
||||||
SET(AUTHOR "Winch Gate and The Ryzom Core Community")
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
|
||||||
# Redirect output files
|
|
||||||
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
||||||
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
||||||
|
|
||||||
# DLL should be in the same directory as EXE under Windows
|
|
||||||
IF(WIN32)
|
|
||||||
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
||||||
ELSE()
|
|
||||||
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WIN32)
|
|
||||||
IF(WITH_MFC)
|
|
||||||
FIND_PACKAGE(MFC QUIET)
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
|
||||||
# Set default config options
|
|
||||||
#
|
|
||||||
NL_SETUP_DEFAULT_OPTIONS()
|
|
||||||
NL_SETUP_NEL_DEFAULT_OPTIONS()
|
|
||||||
NL_SETUP_NELNS_DEFAULT_OPTIONS()
|
|
||||||
NL_SETUP_RYZOM_DEFAULT_OPTIONS()
|
|
||||||
NL_SETUP_SNOWBALLS_DEFAULT_OPTIONS()
|
|
||||||
|
|
||||||
NL_SETUP_BUILD()
|
|
||||||
NL_SETUP_BUILD_FLAGS()
|
|
||||||
|
|
||||||
NL_SETUP_PREFIX_PATHS()
|
|
||||||
RYZOM_SETUP_PREFIX_PATHS()
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
|
||||||
#Platform specifics
|
|
||||||
|
|
||||||
SETUP_EXTERNAL()
|
|
||||||
|
|
||||||
IF(WIN32)
|
|
||||||
SET(WINSOCK2_LIB ws2_32.lib)
|
|
||||||
|
|
||||||
IF(WITH_MFC)
|
|
||||||
FIND_PACKAGE(CustomMFC REQUIRED)
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
FIND_PACKAGE(ZLIB REQUIRED)
|
|
||||||
FIND_PACKAGE(LibXml2 REQUIRED)
|
|
||||||
FIND_PACKAGE(PNG REQUIRED)
|
|
||||||
FIND_PACKAGE(OpenSSL REQUIRED)
|
|
||||||
FIND_PACKAGE(GIF)
|
|
||||||
FIND_PACKAGE(Jpeg)
|
|
||||||
|
|
||||||
IF(WIN32)
|
|
||||||
SET(OPENSSL_LIBRARIES ${OPENSSL_LIBRARIES} Crypt32.lib)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_LIBOVR)
|
|
||||||
FIND_PACKAGE(LibOVR)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_LIBVR)
|
|
||||||
FIND_PACKAGE(LibVR)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
NL_CONFIGURE_CHECKS()
|
|
||||||
|
|
||||||
IF(WITH_STATIC_LIBXML2)
|
|
||||||
SET(LIBXML2_DEFINITIONS ${LIBXML2_DEFINITIONS} -DLIBXML_STATIC)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_LIBXML2_ICONV)
|
|
||||||
FIND_PACKAGE(Iconv REQUIRED)
|
|
||||||
INCLUDE_DIRECTORIES(${ICONV_INCLUDE_DIR})
|
|
||||||
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${ICONV_LIBRARIES})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_STATIC)
|
|
||||||
# libxml2 could need winsock2 library
|
|
||||||
IF(WINSOCK2_LIB)
|
|
||||||
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${WINSOCK2_LIB})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(UNIX)
|
|
||||||
# under Linux and OS X, recent libxml2 versions are linked against liblzma
|
|
||||||
FIND_PACKAGE(LibLZMA)
|
|
||||||
IF(LIBLZMA_LIBRARIES)
|
|
||||||
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${LIBLZMA_LIBRARIES})
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/PCHSupport.cmake)
|
|
||||||
|
|
||||||
IF(FINAL_VERSION)
|
|
||||||
ADD_DEFINITIONS(-DFINAL_VERSION=1)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_SSE2)
|
|
||||||
ADD_DEFINITIONS(-DNL_HAS_SSE2)
|
|
||||||
IF(WITH_SSE3)
|
|
||||||
ADD_DEFINITIONS(-DNL_HAS_SSE3)
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(APPLE)
|
|
||||||
FIND_LIBRARY(CARBON_FRAMEWORK Carbon)
|
|
||||||
FIND_LIBRARY(FOUNDATION_FRAMEWORK Foundation)
|
|
||||||
FIND_LIBRARY(SECURITY_FRAMEWORK Security)
|
|
||||||
|
|
||||||
IF(APPLE_CERTIFICATE)
|
|
||||||
# Find codesign_allocate
|
|
||||||
|
|
||||||
# Xcode 7.0 and later versions
|
|
||||||
SET(CODESIGN_ALLOCATE ${OSX_DEVELOPER_ROOT}/Toolchains/XcodeDefault.xctoolchain/usr/bin/codesign_allocate)
|
|
||||||
|
|
||||||
IF(NOT EXISTS "${CODESIGN_ALLOCATE}")
|
|
||||||
# Xcode 6.4 and previous versions
|
|
||||||
SET(CODESIGN_ALLOCATE ${CMAKE_OSX_SYSROOT}/usr/bin/codesign_allocate)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(NOT EXISTS "${CODESIGN_ALLOCATE}")
|
|
||||||
# System path
|
|
||||||
SET(CODESIGN_ALLOCATE /usr/bin/codesign_allocate)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(NOT EXISTS "${CODESIGN_ALLOCATE}")
|
|
||||||
MESSAGE(WARNING "Unable to find codesign_allocate in standard directories")
|
|
||||||
SET(CODESIGN_ALLOCATE)
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
INCLUDE(FindHelpers)
|
|
||||||
|
|
||||||
IF(WITH_QT5)
|
|
||||||
FIND_QT5()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_QT)
|
|
||||||
SET(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${QTDIR} $ENV{QTDIR})
|
|
||||||
|
|
||||||
# Use Qt 4
|
|
||||||
FIND_PACKAGE(Qt4 COMPONENTS QtCore QtGui QtXml QtOpenGL REQUIRED)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_ASSIMP)
|
|
||||||
FIND_PACKAGE(assimp REQUIRED)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_NEL)
|
|
||||||
IF(WITH_NEL_TESTS)
|
|
||||||
FIND_PACKAGE(CppTest)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_GUI)
|
|
||||||
FIND_PACKAGE(Luabind REQUIRED)
|
|
||||||
FIND_PACKAGE(CURL REQUIRED)
|
|
||||||
|
|
||||||
IF((WIN32 OR CURL_LIBRARIES MATCHES "\\.a") AND WITH_STATIC_CURL)
|
|
||||||
SET(CURL_STATIC ON)
|
|
||||||
ELSE()
|
|
||||||
SET(CURL_STATIC OFF)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(CURL_STATIC)
|
|
||||||
SET(CURL_DEFINITIONS -DCURL_STATICLIB)
|
|
||||||
|
|
||||||
LIST(APPEND CURL_INCLUDE_DIRS ${OPENSSL_INCLUDE_DIR})
|
|
||||||
LIST(APPEND CURL_LIBRARIES ${OPENSSL_LIBRARIES})
|
|
||||||
|
|
||||||
IF(WIN32)
|
|
||||||
LIST(APPEND CURL_LIBRARIES Crypt32 Cryptui)
|
|
||||||
ELSE()
|
|
||||||
# CURL depends on libidn
|
|
||||||
FIND_LIBRARY(IDN_LIBRARY idn)
|
|
||||||
IF(IDN_LIBRARY)
|
|
||||||
LIST(APPEND CURL_LIBRARIES ${IDN_LIBRARY})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
# CURL Macports version can depend on libidn, libidn2, libintl, libpsl and libiconv too
|
|
||||||
IF(APPLE)
|
|
||||||
FIND_LIBRARY(INTL_LIBRARY intl)
|
|
||||||
IF(INTL_LIBRARY)
|
|
||||||
LIST(APPEND CURL_LIBRARIES ${INTL_LIBRARY})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
FIND_LIBRARY(IDN2_LIBRARY idn2)
|
|
||||||
IF(IDN2_LIBRARY)
|
|
||||||
LIST(APPEND CURL_LIBRARIES ${IDN2_LIBRARY})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
FIND_LIBRARY(PSL_LIBRARY psl)
|
|
||||||
IF(PSL_LIBRARY)
|
|
||||||
LIST(APPEND CURL_LIBRARIES ${PSL_LIBRARY})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
FIND_LIBRARY(UNISTRING_LIBRARY unistring)
|
|
||||||
IF(UNISTRING_LIBRARY)
|
|
||||||
LIST(APPEND CURL_LIBRARIES ${UNISTRING_LIBRARY})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
LIST(APPEND CURL_LIBRARIES ${SECURITY_FRAMEWORK})
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/nel/include)
|
|
||||||
ADD_SUBDIRECTORY(nel)
|
|
||||||
|
|
||||||
# Aliases for targets
|
|
||||||
SET(NELMISC_LIBRARIES nelmisc)
|
|
||||||
SET(NELNET_LIBRARIES nelnet)
|
|
||||||
SET(NELLIGO_LIBRARIES nelligo)
|
|
||||||
SET(NELGEORGES_LIBRARIES nelgeorges)
|
|
||||||
SET(NEL3D_LIBRARIES nel3d)
|
|
||||||
SET(NELGUI_LIBRARIES nelgui)
|
|
||||||
SET(NELSOUND_LIBRARIES nelsound)
|
|
||||||
ELSE()
|
|
||||||
# FIND_PACKAGE(NeL COMPONENTS 3d misc pacs sound nimp REQUIRED)
|
|
||||||
FIND_PACKAGE(NeL REQUIRED)
|
|
||||||
INCLUDE_DIRECTORIES(${NEL_INCLUDE_DIRS})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_RYZOM)
|
|
||||||
ADD_SUBDIRECTORY(ryzom)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_NELNS)
|
|
||||||
ADD_SUBDIRECTORY(nelns)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_SNOWBALLS)
|
|
||||||
ADD_SUBDIRECTORY(snowballs2)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_TOOLS)
|
|
||||||
ADD_SUBDIRECTORY(tool)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_STUDIO)
|
|
||||||
ADD_SUBDIRECTORY(studio)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_PERSONAL)
|
|
||||||
ADD_SUBDIRECTORY(personal)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
# To build the documention, you will have to enable it
|
|
||||||
# and then do the equivalent of "make DoxygenDoc".
|
|
||||||
IF(BUILD_DOCUMENTATION)
|
|
||||||
IF(DOT)
|
|
||||||
SET(HAVE_DOT YES)
|
|
||||||
ELSE()
|
|
||||||
SET(HAVE_DOT NO)
|
|
||||||
ENDIF()
|
|
||||||
# This processes our Doxyfile.in and substitutes paths to generate
|
|
||||||
# a final Doxyfile
|
|
||||||
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/doc/Doxyfile.cmake.in ${CMAKE_BINARY_DIR}/doc/Doxyfile)
|
|
||||||
|
|
||||||
ADD_CUSTOM_TARGET(DoxygenDoc ${DOXYGEN} ${CMAKE_BINARY_DIR}/doc/Doxyfile)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_NEL_TESTS)
|
|
||||||
ENABLE_TESTING()
|
|
||||||
ADD_TEST(nel_unit_test ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/nel_unit_test --html)
|
|
||||||
IF(BUILD_DASHBOARD)
|
|
||||||
INCLUDE(Dart)
|
|
||||||
SET(SVNCOMMAND svn)
|
|
||||||
SET(SVNSOURCEDIR http://dev.ryzom.com/svn/trunk/nel)
|
|
||||||
SET(GENERATELOGS svn2cl)
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
# packaging information
|
|
||||||
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Ryzom Core MMORPG Framework")
|
|
||||||
SET(CPACK_PACKAGE_VENDOR "Ryzom Core")
|
|
||||||
SET(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README)
|
|
||||||
SET(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/COPYING)
|
|
||||||
SET(CPACK_PACKAGE_VERSION_MAJOR "${NL_VERSION_MAJOR}")
|
|
||||||
SET(CPACK_PACKAGE_VERSION_MINOR "${NL_VERSION_MINOR}")
|
|
||||||
SET(CPACK_PACKAGE_VERSION_PATCH "${NL_VERSION_PATCH}")
|
|
||||||
SET(CPACK_INSTALL_CMAKE_PROJECTS "${CMAKE_BINARY_DIR};NeL;ALL;/")
|
|
||||||
SET(CPACK_PACKAGE_EXECUTABLES "ryzomcore${NL_VERSION}" "ryzomcore")
|
|
||||||
SET(CPACK_SET_DESTDIR TRUE)
|
|
||||||
|
|
||||||
# NSIS Specific Packing Setup
|
|
||||||
SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "RyzomCore")
|
|
||||||
SET(CPACK_NSIS_MODIFY_PATH "ON")
|
|
||||||
SET(CPACK_NSIS_MUI_ICON ${CMAKE_SOURCE_DIR}/resources/nevraxpill.ico)
|
|
||||||
SET(CPACK_NSIS_MUI_UNIICON ${CMAKE_SOURCE_DIR}/resources/nevraxpill.ico)
|
|
||||||
SET(CPACK_PACKAGE_ICON ${CMAKE_SOURCE_DIR}/resources\\\\nel.bmp)
|
|
||||||
SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} RyzomCore")
|
|
||||||
SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\dev.ryzom.com")
|
|
||||||
SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\dev.ryzom.com\\\\projects\\\\nel\\\\wiki")
|
|
||||||
SET(CPACK_NSIS_CONTACT "matt.raykowski@gmail.com")
|
|
||||||
|
|
||||||
## Source Packages
|
|
||||||
SET(CPACK_PACKAGE_FILE_NAME "ryzomcore-${NL_VERSION}")
|
|
||||||
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "ryzomcore-${NL_VERSION}")
|
|
||||||
IF(WIN32)
|
|
||||||
#SET(CPACK_GENERATOR "NSIS")
|
|
||||||
SET(CPACK_GENERATOR "NSIS;ZIP")
|
|
||||||
SET(CPACK_SOURCE_GENERATOR "ZIP")
|
|
||||||
ELSE()
|
|
||||||
SET(CPACK_GENERATOR "TGZ")
|
|
||||||
SET(CPACK_SOURCE_GENERATOR "TGZ")
|
|
||||||
ENDIF()
|
|
||||||
set(CPACK_SOURCE_IGNORE_FILES
|
|
||||||
"~$"
|
|
||||||
"\\\\.cvsignore$"
|
|
||||||
"^${CMAKE_SOURCE_DIR}.*/CVS/"
|
|
||||||
"^${CMAKE_SOURCE_DIR}.*/\\\\.svn/"
|
|
||||||
"^${CMAKE_SOURCE_DIR}/debian/"
|
|
||||||
"^${CMAKE_SOURCE_DIR}/old/")
|
|
||||||
IF(WIN32)
|
|
||||||
IF(NOT CMAKE_BUILD_TYPE STREQUAL "Release")
|
|
||||||
SET(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE)
|
|
||||||
IF(WITH_QT)
|
|
||||||
INCLUDE(${QT_USE_FILE})
|
|
||||||
INSTALL(FILES
|
|
||||||
"${QT_LIBRARY_DIR}/../bin/QtGuid4.dll"
|
|
||||||
"${QT_LIBRARY_DIR}/../bin/QtXmld4.dll"
|
|
||||||
"${QT_LIBRARY_DIR}/../bin/QtCored4.dll"
|
|
||||||
DESTINATION ${NL_BIN_PREFIX})
|
|
||||||
ENDIF()
|
|
||||||
ELSE()
|
|
||||||
IF(WITH_QT)
|
|
||||||
INCLUDE(${QT_USE_FILE})
|
|
||||||
INSTALL(FILES
|
|
||||||
"${QT_LIBRARY_DIR}/../bin/QtGui4.dll"
|
|
||||||
"${QT_LIBRARY_DIR}/../bin/QtXml4.dll"
|
|
||||||
"${QT_LIBRARY_DIR}/../bin/QtCore4.dll"
|
|
||||||
DESTINATION ${NL_BIN_PREFIX})
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
# Install CEGUI and its dependencies.
|
|
||||||
IF(WITH_NEL_CEGUI)
|
|
||||||
INSTALL(FILES "${CEGUI_LIB_DIR}/CEGUIBase.dll" DESTINATION ${NL_BIN_PREFIX})
|
|
||||||
INSTALL(FILES "${CEGUI_LIB_DIR}/CEGUIDevilImageCodec.dll" DESTINATION ${NL_BIN_PREFIX})
|
|
||||||
INSTALL(FILES "${CEGUI_LIB_DIR}/CEGUIExpatParser.dll" DESTINATION ${NL_BIN_PREFIX})
|
|
||||||
INSTALL(FILES "${CEGUI_LIB_DIR}/CEGUIFalagardWRBase.dll" DESTINATION ${NL_BIN_PREFIX})
|
|
||||||
INSTALL(FILES "${CEGUI_LIB_DIR}/Devil.dll" DESTINATION ${NL_BIN_PREFIX})
|
|
||||||
INSTALL(FILES "${CEGUI_LIB_DIR}/ILU.dll" DESTINATION ${NL_BIN_PREFIX})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
# Only the tools require MFC.
|
|
||||||
IF(WITH_TOOLS)
|
|
||||||
SET(CMAKE_INSTALL_MFC_LIBRARIES TRUE)
|
|
||||||
ENDIF()
|
|
||||||
#INCLUDE(InstallRequiredSystemLibraries)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
INCLUDE(CPack)
|
|
||||||
|
|
||||||
INCLUDE(CMakePackaging.txt)
|
|
||||||
|
|
||||||
## Debian Packages
|
|
||||||
#INCLUDE(UseDebian)
|
|
||||||
#IF(DEBIAN_FOUND)
|
|
||||||
# ADD_DEBIAN_TARGETS(nel)
|
|
||||||
#ENDIF()
|
|
@ -1,57 +0,0 @@
|
|||||||
# - Locate FMOD library
|
|
||||||
# This module defines
|
|
||||||
# FMOD_LIBRARY, the library to link against
|
|
||||||
# FMOD_FOUND, if false, do not try to link to FMOD
|
|
||||||
# FMOD_INCLUDE_DIR, where to find headers.
|
|
||||||
|
|
||||||
IF(FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
|
|
||||||
# in cache already
|
|
||||||
SET(FMOD_FIND_QUIETLY TRUE)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
|
|
||||||
FIND_PATH(FMOD_INCLUDE_DIR
|
|
||||||
fmod.h
|
|
||||||
PATHS
|
|
||||||
$ENV{FMOD_DIR}/include
|
|
||||||
/usr/local/include
|
|
||||||
/usr/include
|
|
||||||
/sw/include
|
|
||||||
/opt/local/include
|
|
||||||
/opt/csw/include
|
|
||||||
/opt/include
|
|
||||||
PATH_SUFFIXES fmod fmod3
|
|
||||||
)
|
|
||||||
|
|
||||||
IF(TARGET_X64)
|
|
||||||
SET(FMOD_LIBRARY_NAMES fmod64 fmod)
|
|
||||||
ELSE()
|
|
||||||
SET(FMOD_LIBRARY_NAMES fmodvc fmod)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
FIND_LIBRARY(FMOD_LIBRARY
|
|
||||||
NAMES
|
|
||||||
${FMOD_LIBRARY_NAMES}
|
|
||||||
PATHS
|
|
||||||
$ENV{FMOD_DIR}/lib
|
|
||||||
/usr/local/lib
|
|
||||||
/usr/lib
|
|
||||||
/usr/local/X11R6/lib
|
|
||||||
/usr/X11R6/lib
|
|
||||||
/sw/lib
|
|
||||||
/opt/local/lib
|
|
||||||
/opt/csw/lib
|
|
||||||
/opt/lib
|
|
||||||
/usr/freeware/lib64
|
|
||||||
)
|
|
||||||
|
|
||||||
IF(FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
|
|
||||||
SET(FMOD_FOUND "YES")
|
|
||||||
IF(NOT FMOD_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found FMOD: ${FMOD_LIBRARY}")
|
|
||||||
ENDIF()
|
|
||||||
ELSE()
|
|
||||||
IF(NOT FMOD_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Warning: Unable to find FMOD!")
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
@ -1,182 +0,0 @@
|
|||||||
# - Find MS Visual C++
|
|
||||||
#
|
|
||||||
# VC_INCLUDE_DIR - where to find headers
|
|
||||||
# VC_INCLUDE_DIRS - where to find headers
|
|
||||||
# VC_LIBRARY_DIR - where to find libraries
|
|
||||||
# VC_FOUND - True if MSVC found.
|
|
||||||
|
|
||||||
MACRO(ADD_TRAILING_SLASH _FILENAME_VAR)
|
|
||||||
# put content in a new variable
|
|
||||||
SET(_FILENAME ${${_FILENAME_VAR}})
|
|
||||||
# get length of the string
|
|
||||||
STRING(LENGTH ${_FILENAME} _LEN)
|
|
||||||
# convert length to last pos
|
|
||||||
MATH(EXPR _POS "${_LEN}-1")
|
|
||||||
# get last character of the string
|
|
||||||
STRING(SUBSTRING ${_FILENAME} ${_POS} 1 _FILENAME_END)
|
|
||||||
# compare it with a slash
|
|
||||||
IF(NOT _FILENAME_END STREQUAL "/")
|
|
||||||
# not a slash, append it
|
|
||||||
SET(${_FILENAME_VAR} "${_FILENAME}/")
|
|
||||||
ELSE()
|
|
||||||
# already a slash
|
|
||||||
ENDIF()
|
|
||||||
ENDMACRO()
|
|
||||||
|
|
||||||
MACRO(DETECT_VC_VERSION_HELPER _ROOT _VERSION)
|
|
||||||
# Software/Wow6432Node/...
|
|
||||||
GET_FILENAME_COMPONENT(VC${_VERSION}_DIR "[${_ROOT}\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7;${_VERSION}]" ABSOLUTE)
|
|
||||||
|
|
||||||
IF(VC${_VERSION}_DIR AND VC${_VERSION}_DIR STREQUAL "/registry")
|
|
||||||
SET(VC${_VERSION}_DIR)
|
|
||||||
GET_FILENAME_COMPONENT(VC${_VERSION}_DIR "[${_ROOT}\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7;${_VERSION}]" ABSOLUTE)
|
|
||||||
|
|
||||||
IF(VC${_VERSION}_DIR AND NOT VC${_VERSION}_DIR STREQUAL "/registry")
|
|
||||||
# be sure it's finishing by a /
|
|
||||||
ADD_TRAILING_SLASH(VC${_VERSION}_DIR)
|
|
||||||
|
|
||||||
SET(VC${_VERSION}_DIR "${VC${_VERSION}_DIR}VC/")
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(VC${_VERSION}_DIR AND NOT VC${_VERSION}_DIR STREQUAL "/registry")
|
|
||||||
SET(VC${_VERSION}_FOUND ON)
|
|
||||||
DETECT_EXPRESS_VERSION(${_VERSION})
|
|
||||||
IF(NOT MSVC_FIND_QUIETLY)
|
|
||||||
SET(_VERSION_STR ${_VERSION})
|
|
||||||
IF(MSVC_EXPRESS)
|
|
||||||
SET(_VERSION_STR "${_VERSION_STR} Express")
|
|
||||||
ENDIF()
|
|
||||||
MESSAGE(STATUS "Found Visual C++ ${_VERSION_STR} in ${VC${_VERSION}_DIR}")
|
|
||||||
ENDIF()
|
|
||||||
ELSEIF(VC${_VERSION}_DIR AND NOT VC${_VERSION}_DIR STREQUAL "/registry")
|
|
||||||
SET(VC${_VERSION}_FOUND OFF)
|
|
||||||
SET(VC${_VERSION}_DIR "")
|
|
||||||
ENDIF()
|
|
||||||
ENDMACRO()
|
|
||||||
|
|
||||||
MACRO(DETECT_VC_VERSION _VERSION)
|
|
||||||
IF(NOT VC_FOUND)
|
|
||||||
SET(VC${_VERSION}_FOUND OFF)
|
|
||||||
DETECT_VC_VERSION_HELPER("HKEY_CURRENT_USER" ${_VERSION})
|
|
||||||
|
|
||||||
IF(NOT VC${_VERSION}_FOUND)
|
|
||||||
DETECT_VC_VERSION_HELPER("HKEY_LOCAL_MACHINE" ${_VERSION})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(VC${_VERSION}_FOUND)
|
|
||||||
SET(VC_FOUND ON)
|
|
||||||
SET(VC_DIR "${VC${_VERSION}_DIR}")
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
ENDMACRO()
|
|
||||||
|
|
||||||
MACRO(DETECT_EXPRESS_VERSION _VERSION)
|
|
||||||
GET_FILENAME_COMPONENT(MSVC_EXPRESS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\${_VERSION}\\Setup\\VC;ProductDir]" ABSOLUTE)
|
|
||||||
|
|
||||||
IF(MSVC_EXPRESS AND NOT MSVC_EXPRESS STREQUAL "/registry")
|
|
||||||
SET(MSVC_EXPRESS ON)
|
|
||||||
ENDIF()
|
|
||||||
ENDMACRO()
|
|
||||||
|
|
||||||
IF(MSVC_VERSION GREATER 1909)
|
|
||||||
DETECT_VC_VERSION("15.0")
|
|
||||||
SET(MSVC_TOOLSET "140")
|
|
||||||
|
|
||||||
SET(VC_DIR "${VC_DIR}Tools/MSVC")
|
|
||||||
|
|
||||||
FILE(GLOB MSVC_TOOLCHAIN_VERSIONS RELATIVE ${VC_DIR} "${VC_DIR}/*")
|
|
||||||
|
|
||||||
IF(MSVC_TOOLCHAIN_VERSIONS)
|
|
||||||
LIST(SORT MSVC_TOOLCHAIN_VERSIONS)
|
|
||||||
LIST(REVERSE MSVC_TOOLCHAIN_VERSIONS)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(NOT MSVC_TOOLCHAIN_VERSIONS)
|
|
||||||
MESSAGE(FATAL_ERROR "No MSVC version found in default search path ${VC_DIR}")
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
LIST(GET MSVC_TOOLCHAIN_VERSIONS 0 MSVC_TOOLCHAIN_VERSION)
|
|
||||||
|
|
||||||
SET(VC_DIR "${VC_DIR}/${MSVC_TOOLCHAIN_VERSION}")
|
|
||||||
SET(VC_INCLUDE_DIR "${VC_DIR}/include")
|
|
||||||
ELSEIF(MSVC14)
|
|
||||||
DETECT_VC_VERSION("14.0")
|
|
||||||
SET(MSVC_TOOLSET "140")
|
|
||||||
ELSEIF(MSVC12)
|
|
||||||
DETECT_VC_VERSION("12.0")
|
|
||||||
SET(MSVC_TOOLSET "120")
|
|
||||||
ELSEIF(MSVC11)
|
|
||||||
DETECT_VC_VERSION("11.0")
|
|
||||||
SET(MSVC_TOOLSET "110")
|
|
||||||
ELSEIF(MSVC10)
|
|
||||||
DETECT_VC_VERSION("10.0")
|
|
||||||
SET(MSVC_TOOLSET "100")
|
|
||||||
ELSEIF(MSVC90)
|
|
||||||
DETECT_VC_VERSION("9.0")
|
|
||||||
SET(MSVC_TOOLSET "90")
|
|
||||||
ELSEIF(MSVC80)
|
|
||||||
DETECT_VC_VERSION("8.0")
|
|
||||||
SET(MSVC_TOOLSET "80")
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
# If you plan to use VC++ compilers with WINE, set VC_DIR environment variable
|
|
||||||
IF(NOT VC_DIR)
|
|
||||||
SET(VC_DIR $ENV{VC_DIR})
|
|
||||||
# Fix path
|
|
||||||
FILE(TO_CMAKE_PATH ${VC_DIR} VC_DIR)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(NOT VC_DIR)
|
|
||||||
IF(CMAKE_CXX_COMPILER)
|
|
||||||
SET(_COMPILER ${CMAKE_CXX_COMPILER})
|
|
||||||
ELSE()
|
|
||||||
SET(_COMPILER ${CMAKE_C_COMPILER})
|
|
||||||
ENDIF()
|
|
||||||
STRING(REGEX REPLACE "/(bin|BIN|Bin)/.+" "" VC_DIR ${_COMPILER})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(NOT VC_INCLUDE_DIR AND VC_DIR AND EXISTS "${VC_DIR}")
|
|
||||||
SET(VC_INCLUDE_DIR "${VC_DIR}/include")
|
|
||||||
IF(EXISTS "${VC_INCLUDE_DIR}")
|
|
||||||
SET(VC_FOUND ON)
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
SET(MSVC_REDIST_DIR "${EXTERNAL_PATH}/redist")
|
|
||||||
|
|
||||||
IF(NOT EXISTS "${MSVC_REDIST_DIR}")
|
|
||||||
SET(MSVC_REDIST_DIR "${VC_DIR}/redist")
|
|
||||||
|
|
||||||
IF(NOT EXISTS "${MSVC_REDIST_DIR}")
|
|
||||||
SET(MSVC_REDIST_DIR)
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(MSVC_REDIST_DIR)
|
|
||||||
IF(MSVC1411 OR MSVC1410)
|
|
||||||
# If you have VC++ 2017 Express, put x64/Microsoft.VC141.CRT/*.dll in ${EXTERNAL_PATH}/redist
|
|
||||||
# original files whould be in ${VC_DIR}/Redist/MSVC/14.11.25325/x64/Microsoft.VC141.CRT
|
|
||||||
SET(MSVC14_REDIST_DIR "${MSVC_REDIST_DIR}")
|
|
||||||
ELSEIF(MSVC14)
|
|
||||||
SET(MSVC14_REDIST_DIR "${MSVC_REDIST_DIR}")
|
|
||||||
ELSEIF(MSVC12)
|
|
||||||
# If you have VC++ 2013 Express, put x64/Microsoft.VC120.CRT/*.dll in ${EXTERNAL_PATH}/redist
|
|
||||||
SET(MSVC12_REDIST_DIR "${MSVC_REDIST_DIR}")
|
|
||||||
ELSEIF(MSVC11)
|
|
||||||
# If you have VC++ 2012 Express, put x64/Microsoft.VC110.CRT/*.dll in ${EXTERNAL_PATH}/redist
|
|
||||||
SET(MSVC11_REDIST_DIR "${MSVC_REDIST_DIR}")
|
|
||||||
ELSEIF(MSVC10)
|
|
||||||
# If you have VC++ 2010 Express, put x64/Microsoft.VC100.CRT/*.dll in ${EXTERNAL_PATH}/redist
|
|
||||||
SET(MSVC10_REDIST_DIR "${MSVC_REDIST_DIR}")
|
|
||||||
ELSEIF(MSVC90)
|
|
||||||
SET(MSVC90_REDIST_DIR "${MSVC_REDIST_DIR}")
|
|
||||||
ELSEIF(MSVC80)
|
|
||||||
SET(MSVC80_REDIST_DIR "${MSVC_REDIST_DIR}")
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
MESSAGE(STATUS "Using headers from ${VC_INCLUDE_DIR}")
|
|
||||||
|
|
||||||
SET(VC_INCLUDE_DIRS ${VC_INCLUDE_DIR})
|
|
||||||
INCLUDE_DIRECTORIES(${VC_INCLUDE_DIR})
|
|
@ -1,49 +0,0 @@
|
|||||||
# - Locate Ogg library
|
|
||||||
# This module defines
|
|
||||||
# OGG_LIBRARY, the library to link against
|
|
||||||
# OGG_FOUND, if false, do not try to link to OGG
|
|
||||||
# OGG_INCLUDE_DIR, where to find headers.
|
|
||||||
|
|
||||||
IF(OGG_LIBRARY AND OGG_INCLUDE_DIR)
|
|
||||||
# in cache already
|
|
||||||
SET(OGG_FIND_QUIETLY TRUE)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
|
|
||||||
FIND_PATH(OGG_INCLUDE_DIR
|
|
||||||
ogg/ogg.h
|
|
||||||
PATHS
|
|
||||||
$ENV{OGG_DIR}/include
|
|
||||||
/usr/local/include
|
|
||||||
/usr/include
|
|
||||||
/sw/include
|
|
||||||
/opt/local/include
|
|
||||||
/opt/csw/include
|
|
||||||
/opt/include
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_LIBRARY(OGG_LIBRARY
|
|
||||||
NAMES ogg libogg
|
|
||||||
PATHS
|
|
||||||
$ENV{OGG_DIR}/lib
|
|
||||||
/usr/local/lib
|
|
||||||
/usr/lib
|
|
||||||
/usr/local/X11R6/lib
|
|
||||||
/usr/X11R6/lib
|
|
||||||
/sw/lib
|
|
||||||
/opt/local/lib
|
|
||||||
/opt/csw/lib
|
|
||||||
/opt/lib
|
|
||||||
/usr/freeware/lib64
|
|
||||||
)
|
|
||||||
|
|
||||||
IF(OGG_LIBRARY AND OGG_INCLUDE_DIR)
|
|
||||||
SET(OGG_FOUND "YES")
|
|
||||||
IF(NOT OGG_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found Ogg: ${OGG_LIBRARY}")
|
|
||||||
ENDIF()
|
|
||||||
ELSE()
|
|
||||||
IF(NOT OGG_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Warning: Unable to find Ogg!")
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
@ -1,91 +0,0 @@
|
|||||||
# Look for a directory containing STLport.
|
|
||||||
#
|
|
||||||
# The following values are defined
|
|
||||||
# STLPORT_INCLUDE_DIR - where to find vector, etc.
|
|
||||||
# STLPORT_LIBRARIES - link against these to use STLport
|
|
||||||
# STLPORT_FOUND - True if the STLport is available.
|
|
||||||
|
|
||||||
# also defined, but not for general use are
|
|
||||||
IF(STLPORT_LIBRARIES AND STLPORT_INCLUDE_DIR)
|
|
||||||
# in cache already
|
|
||||||
SET(STLPORT_FIND_QUIETLY TRUE)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
FIND_PATH(STLPORT_INCLUDE_DIR
|
|
||||||
iostream
|
|
||||||
PATHS
|
|
||||||
/usr/local/include
|
|
||||||
/usr/include
|
|
||||||
/sw/include
|
|
||||||
/opt/local/include
|
|
||||||
/opt/csw/include
|
|
||||||
/opt/include
|
|
||||||
PATH_SUFFIXES stlport
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_LIBRARY(STLPORT_LIBRARY_DEBUG
|
|
||||||
NAMES
|
|
||||||
stlport_cygwin_debug
|
|
||||||
stlport_cygwin_stldebug
|
|
||||||
stlport_gcc_debug
|
|
||||||
stlport_gcc_stldebug
|
|
||||||
stlportstld_x
|
|
||||||
stlportstld_x.5.2
|
|
||||||
stlportd
|
|
||||||
stlportd_statix
|
|
||||||
stlportd_static
|
|
||||||
PATHS
|
|
||||||
/usr/local/lib
|
|
||||||
/usr/lib
|
|
||||||
/usr/local/X11R6/lib
|
|
||||||
/usr/X11R6/lib
|
|
||||||
/sw/lib
|
|
||||||
/opt/local/lib
|
|
||||||
/opt/csw/lib
|
|
||||||
/opt/lib
|
|
||||||
/usr/freeware/lib64
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_LIBRARY(STLPORT_LIBRARY_RELEASE
|
|
||||||
NAMES
|
|
||||||
stlport_cygwin
|
|
||||||
stlport_gcc
|
|
||||||
stlport
|
|
||||||
stlport_x
|
|
||||||
stlport_x.5.2
|
|
||||||
stlport_statix
|
|
||||||
stlport_static
|
|
||||||
PATHS
|
|
||||||
/usr/local/lib
|
|
||||||
/usr/lib
|
|
||||||
/usr/local/X11R6/lib
|
|
||||||
/usr/X11R6/lib
|
|
||||||
/sw/lib
|
|
||||||
/opt/local/lib
|
|
||||||
/opt/csw/lib
|
|
||||||
/opt/lib
|
|
||||||
/usr/freeware/lib64
|
|
||||||
)
|
|
||||||
|
|
||||||
IF(STLPORT_INCLUDE_DIR)
|
|
||||||
IF(STLPORT_LIBRARY_RELEASE)
|
|
||||||
SET(STLPORT_FOUND TRUE)
|
|
||||||
|
|
||||||
SET(STLPORT_LIBRARIES ${STLPORT_LIBRARY_RELEASE})
|
|
||||||
IF(STLPORT_LIBRARY_DEBUG)
|
|
||||||
SET(STLPORT_LIBRARIES optimized ${STLPORT_LIBRARIES} debug ${STLPORT_LIBRARY_DEBUG})
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(STLPORT_FOUND)
|
|
||||||
IF(NOT STLPORT_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found STLport: ${STLPORT_LIBRARIES}")
|
|
||||||
ENDIF()
|
|
||||||
ELSE()
|
|
||||||
IF(NOT STLPORT_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Warning: Unable to find STLport!")
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
MARK_AS_ADVANCED(STLPORT_LIBRARY_RELEASE STLPORT_LIBRARY_DEBUG)
|
|
@ -1,83 +0,0 @@
|
|||||||
#
|
|
||||||
# Find the LibSquish includes and library
|
|
||||||
#
|
|
||||||
# This module defines
|
|
||||||
# SQUISH_INCLUDE_DIR, where to find squish.h
|
|
||||||
# SQUISH_LIBRARIES, where to find the Squish libraries.
|
|
||||||
# SQUISH_FOUND, If false, do not try to use Squish.
|
|
||||||
|
|
||||||
# also defined, but not for general use are
|
|
||||||
IF(SQUISH_LIBRARIES AND SQUISH_INCLUDE_DIR)
|
|
||||||
# in cache already
|
|
||||||
SET(SQUISH_FIND_QUIETLY TRUE)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
FIND_PATH(SQUISH_INCLUDE_DIR
|
|
||||||
squish.h
|
|
||||||
PATHS
|
|
||||||
/usr/local/include
|
|
||||||
/usr/include
|
|
||||||
/sw/include
|
|
||||||
/opt/local/include
|
|
||||||
/opt/csw/include
|
|
||||||
/opt/include
|
|
||||||
PATH_SUFFIXES cppunit
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_LIBRARY(SQUISH_LIBRARY_RELEASE
|
|
||||||
squish
|
|
||||||
PATHS
|
|
||||||
/usr/local/lib
|
|
||||||
/usr/lib
|
|
||||||
/usr/local/X11R6/lib
|
|
||||||
/usr/X11R6/lib
|
|
||||||
/sw/lib
|
|
||||||
/opt/local/lib
|
|
||||||
/opt/csw/lib
|
|
||||||
/opt/lib
|
|
||||||
/usr/freeware/lib64
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_LIBRARY(SQUISH_LIBRARY_DEBUG
|
|
||||||
squishd
|
|
||||||
PATHS
|
|
||||||
/usr/local/lib
|
|
||||||
/usr/lib
|
|
||||||
/usr/local/X11R6/lib
|
|
||||||
/usr/X11R6/lib
|
|
||||||
/sw/lib
|
|
||||||
/opt/local/lib
|
|
||||||
/opt/csw/lib
|
|
||||||
/opt/lib
|
|
||||||
/usr/freeware/lib64
|
|
||||||
)
|
|
||||||
|
|
||||||
IF(SQUISH_INCLUDE_DIR)
|
|
||||||
IF(SQUISH_LIBRARY_RELEASE)
|
|
||||||
SET(SQUISH_FOUND "YES")
|
|
||||||
SET(SQUISH_LIBRARIES "optimized;${SQUISH_LIBRARY_RELEASE}")
|
|
||||||
IF(SQUISH_LIBRARY_DEBUG)
|
|
||||||
SET(SQUISH_LIBRARIES "${SQUISH_LIBRARIES};debug;${SQUISH_LIBRARY_DEBUG}")
|
|
||||||
ELSE()
|
|
||||||
SET(SQUISH_LIBRARIES "${SQUISH_LIBRARIES};debug;${SQUISH_LIBRARY_RELEASE}")
|
|
||||||
MESSAGE("Debug Squish NOT found, using the release version!")
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(SQUISH_FOUND)
|
|
||||||
IF(NOT SQUISH_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found Squish: ${SQUISH_LIBRARIES}")
|
|
||||||
ENDIF()
|
|
||||||
FILE(STRINGS ${SQUISH_INCLUDE_DIR}/squish.h METRIC REGEX "metric = 0")
|
|
||||||
IF(METRIC)
|
|
||||||
SET(SQUISH_COMPRESS_HAS_METRIC ON)
|
|
||||||
SET(SQUISH_DEFINITIONS -DSQUISH_COMPRESS_HAS_METRIC)
|
|
||||||
ENDIF()
|
|
||||||
ELSE()
|
|
||||||
IF(NOT SQUISH_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Warning: Unable to find Squish!")
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
MARK_AS_ADVANCED(SQUISH_LIBRARY_RELEASE SQUISH_LIBRARY_DEBUG)
|
|
@ -1,65 +0,0 @@
|
|||||||
# - Locate Vorbis library
|
|
||||||
# This module defines
|
|
||||||
# VORBIS_LIBRARY, the library to link against
|
|
||||||
# VORBIS_FOUND, if false, do not try to link to VORBIS
|
|
||||||
# VORBIS_INCLUDE_DIR, where to find headers.
|
|
||||||
|
|
||||||
IF(VORBIS_LIBRARY AND VORBIS_INCLUDE_DIR)
|
|
||||||
# in cache already
|
|
||||||
SET(VORBIS_FIND_QUIETLY TRUE)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
|
|
||||||
FIND_PATH(VORBIS_INCLUDE_DIR
|
|
||||||
vorbis/vorbisfile.h
|
|
||||||
PATHS
|
|
||||||
$ENV{VORBIS_DIR}/include
|
|
||||||
/usr/local/include
|
|
||||||
/usr/include
|
|
||||||
/sw/include
|
|
||||||
/opt/local/include
|
|
||||||
/opt/csw/include
|
|
||||||
/opt/include
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_LIBRARY(VORBIS_LIBRARY
|
|
||||||
NAMES vorbis libvorbis
|
|
||||||
PATHS
|
|
||||||
$ENV{VORBIS_DIR}/lib
|
|
||||||
/usr/local/lib
|
|
||||||
/usr/lib
|
|
||||||
/usr/local/X11R6/lib
|
|
||||||
/usr/X11R6/lib
|
|
||||||
/sw/lib
|
|
||||||
/opt/local/lib
|
|
||||||
/opt/csw/lib
|
|
||||||
/opt/lib
|
|
||||||
/usr/freeware/lib64
|
|
||||||
)
|
|
||||||
|
|
||||||
FIND_LIBRARY(VORBISFILE_LIBRARY
|
|
||||||
NAMES vorbisfile libvorbisfile
|
|
||||||
PATHS
|
|
||||||
$ENV{VORBIS_DIR}/lib
|
|
||||||
/usr/local/lib
|
|
||||||
/usr/lib
|
|
||||||
/usr/local/X11R6/lib
|
|
||||||
/usr/X11R6/lib
|
|
||||||
/sw/lib
|
|
||||||
/opt/local/lib
|
|
||||||
/opt/csw/lib
|
|
||||||
/opt/lib
|
|
||||||
/usr/freeware/lib64
|
|
||||||
)
|
|
||||||
|
|
||||||
IF(VORBIS_LIBRARY AND VORBISFILE_LIBRARY AND VORBIS_INCLUDE_DIR)
|
|
||||||
SET(VORBIS_FOUND "YES")
|
|
||||||
SET(VORBIS_LIBRARIES ${VORBIS_LIBRARY} ${VORBISFILE_LIBRARY})
|
|
||||||
IF(NOT VORBIS_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Found Vorbis: ${VORBIS_LIBRARY}")
|
|
||||||
ENDIF()
|
|
||||||
ELSE()
|
|
||||||
IF(NOT VORBIS_FIND_QUIETLY)
|
|
||||||
MESSAGE(STATUS "Warning: Unable to find Vorbis!")
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
@ -1,65 +0,0 @@
|
|||||||
IF(WITH_STATIC_DRIVERS)
|
|
||||||
ADD_DEFINITIONS(-DNL_STATIC)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WIN32)
|
|
||||||
# On Win32 we can also build the MAX plugins.
|
|
||||||
IF(WITH_NEL_MAXPLUGIN)
|
|
||||||
FIND_PACKAGE(3dsMaxSDK)
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_3D)
|
|
||||||
FIND_PACKAGE(FreeType)
|
|
||||||
|
|
||||||
IF(WITH_NEL_CEGUI)
|
|
||||||
FIND_PACKAGE(CEGUI)
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_SOUND)
|
|
||||||
FIND_PACKAGE(Ogg)
|
|
||||||
FIND_PACKAGE(Vorbis)
|
|
||||||
FIND_PACKAGE(FFmpeg COMPONENTS AVCODEC AVFORMAT AVUTIL SWRESAMPLE)
|
|
||||||
|
|
||||||
IF(WITH_DRIVER_OPENAL)
|
|
||||||
FIND_PACKAGE(OpenAL)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_DRIVER_FMOD)
|
|
||||||
FIND_PACKAGE(FMOD)
|
|
||||||
ENDIF()
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_GTK)
|
|
||||||
FIND_PACKAGE(GTK2)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_INSTALL_LIBRARIES)
|
|
||||||
IF(UNIX)
|
|
||||||
SET(prefix ${CMAKE_INSTALL_PREFIX})
|
|
||||||
SET(exec_prefix ${NL_BIN_ABSOLUTE_PREFIX})
|
|
||||||
SET(libdir ${NL_LIB_ABSOLUTE_PREFIX})
|
|
||||||
SET(includedir ${CMAKE_INSTALL_PREFIX}/include)
|
|
||||||
SET(enable_ligo ${WITH_LIGO})
|
|
||||||
SET(enable_logic ${WITH_LOGIC})
|
|
||||||
SET(enable_georges ${WITH_GEORGES})
|
|
||||||
SET(enable_net ${WITH_NET})
|
|
||||||
SET(enable_3d ${WITH_3D})
|
|
||||||
SET(enable_pacs ${WITH_PACS})
|
|
||||||
SET(enable_sound ${WITH_SOUND})
|
|
||||||
CONFIGURE_FILE(nel-config.in ${CMAKE_CURRENT_BINARY_DIR}/nel-config)
|
|
||||||
|
|
||||||
INSTALL(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/nel-config DESTINATION ${NL_BIN_PREFIX})
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
ADD_SUBDIRECTORY(include)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
ADD_SUBDIRECTORY(src)
|
|
||||||
|
|
||||||
IF(WITH_NEL_SAMPLES)
|
|
||||||
ADD_SUBDIRECTORY(samples)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
ADD_SUBDIRECTORY(tools)
|
|
@ -1,84 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file fxaa.h
|
|
||||||
* \brief CFXAA
|
|
||||||
* \date 2014-08-03 21:41GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CFXAA
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2014 by authors
|
|
||||||
*
|
|
||||||
* This file is part of NL3D.
|
|
||||||
* NL3D 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.
|
|
||||||
*
|
|
||||||
* NL3D 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 NL3D. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NL3D_FXAA_H
|
|
||||||
#define NL3D_FXAA_H
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#include <nel/misc/smart_ptr.h>
|
|
||||||
#include <nel/misc/geom_ext.h>
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
#include <nel/3d/u_material.h>
|
|
||||||
#include <nel/3d/vertex_buffer.h>
|
|
||||||
|
|
||||||
#define NL_STEREO_MAX_USER_CAMERAS 8
|
|
||||||
|
|
||||||
namespace NL3D {
|
|
||||||
|
|
||||||
class ITexture;
|
|
||||||
class CTextureUser;
|
|
||||||
class CPixelProgram;
|
|
||||||
class CVertexProgram;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief CFXAA
|
|
||||||
* \date 2014-08-03 21:41GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CFXAA
|
|
||||||
*/
|
|
||||||
class CFXAA
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CFXAA(NL3D::UDriver *driver);
|
|
||||||
virtual ~CFXAA();
|
|
||||||
|
|
||||||
/// Apply effect to current render target. Render target must be managed by render target manager
|
|
||||||
virtual void applyEffect();
|
|
||||||
|
|
||||||
private:
|
|
||||||
UDriver *m_Driver;
|
|
||||||
|
|
||||||
NL3D::UMaterial m_Mat;
|
|
||||||
// NL3D::CVertexBuffer m_VB;
|
|
||||||
NLMISC::CQuadUV m_QuadUV;
|
|
||||||
CVertexProgram *m_VP;
|
|
||||||
CPixelProgram *m_PP;
|
|
||||||
|
|
||||||
uint m_Width;
|
|
||||||
uint m_Height;
|
|
||||||
|
|
||||||
}; /* class CFXAA */
|
|
||||||
|
|
||||||
} /* namespace NL3D */
|
|
||||||
|
|
||||||
#endif /* #ifndef NL3D_FXAA_H */
|
|
||||||
|
|
||||||
/* end of file */
|
|
@ -1,49 +0,0 @@
|
|||||||
/** \file geometry_program.h
|
|
||||||
* Geometry program definition
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Copyright, 2000, 2001 Nevrax Ltd.
|
|
||||||
*
|
|
||||||
* This file is part of NEVRAX NEL.
|
|
||||||
* NEVRAX NEL is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
|
|
||||||
* NEVRAX NEL 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
|
|
||||||
* General Public License for more details.
|
|
||||||
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with NEVRAX NEL; see the file COPYING. If not, write to the
|
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
|
||||||
* MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NL_GEOMETRY_PROGRAM_H
|
|
||||||
#define NL_GEOMETRY_PROGRAM_H
|
|
||||||
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
#include <nel/misc/smart_ptr.h>
|
|
||||||
#include <nel/3d/program.h>
|
|
||||||
|
|
||||||
#include <list>
|
|
||||||
|
|
||||||
namespace NL3D {
|
|
||||||
|
|
||||||
class CGeometryProgram : public IProgram
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/// Constructor
|
|
||||||
CGeometryProgram();
|
|
||||||
/// Destructor
|
|
||||||
virtual ~CGeometryProgram ();
|
|
||||||
};
|
|
||||||
|
|
||||||
} // NL3D
|
|
||||||
|
|
||||||
|
|
||||||
#endif // NL_GEOMETRY_PROGRAM_H
|
|
||||||
|
|
||||||
/* End of vertex_program.h */
|
|
@ -1,49 +0,0 @@
|
|||||||
/** \file pixel_program.h
|
|
||||||
* Pixel program definition
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Copyright, 2000, 2001 Nevrax Ltd.
|
|
||||||
*
|
|
||||||
* This file is part of NEVRAX NEL.
|
|
||||||
* NEVRAX NEL is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
|
|
||||||
* NEVRAX NEL 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
|
|
||||||
* General Public License for more details.
|
|
||||||
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with NEVRAX NEL; see the file COPYING. If not, write to the
|
|
||||||
* Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
|
||||||
* MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NL_PIXEL_PROGRAM_H
|
|
||||||
#define NL_PIXEL_PROGRAM_H
|
|
||||||
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
#include <nel/misc/smart_ptr.h>
|
|
||||||
#include <nel/3d/program.h>
|
|
||||||
|
|
||||||
#include <list>
|
|
||||||
|
|
||||||
namespace NL3D {
|
|
||||||
|
|
||||||
class CPixelProgram : public IProgram
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/// Constructor
|
|
||||||
CPixelProgram();
|
|
||||||
/// Destructor
|
|
||||||
virtual ~CPixelProgram ();
|
|
||||||
};
|
|
||||||
|
|
||||||
} // NL3D
|
|
||||||
|
|
||||||
|
|
||||||
#endif // NL_PIXEL_PROGRAM_H
|
|
||||||
|
|
||||||
/* End of vertex_program.h */
|
|
@ -1,83 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file render_target_manager.h
|
|
||||||
* \brief CRenderTargetManager
|
|
||||||
* \date 2014-07-30 21:30GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CRenderTargetManager
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2013 by authors
|
|
||||||
*
|
|
||||||
* This file is part of NL3D.
|
|
||||||
* NL3D 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.
|
|
||||||
*
|
|
||||||
* NL3D 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 NL3D. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NL3D_RENDER_TARGET_MANAGER_H
|
|
||||||
#define NL3D_RENDER_TARGET_MANAGER_H
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#include <nel/misc/smart_ptr.h>
|
|
||||||
#include <nel/misc/geom_ext.h>
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
#include <nel/3d/u_texture.h>
|
|
||||||
|
|
||||||
namespace NL3D {
|
|
||||||
|
|
||||||
class UDriver;
|
|
||||||
class ITexture;
|
|
||||||
class CTextureUser;
|
|
||||||
class CDriverUser;
|
|
||||||
|
|
||||||
struct CRenderTargetDescInt;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief CRenderTargetManager
|
|
||||||
* \date 2013-07-03 20:17GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CRenderTargetManager
|
|
||||||
* Usage: Call 'getRenderTarget' when you start using a render target,
|
|
||||||
* call 'recycledRenderTarget' when the render target can be recycled.
|
|
||||||
* At end of frame call cleanup.
|
|
||||||
* Assumes semi-constant render target quantity between frames,
|
|
||||||
* except on changes of resolution or feature settings.
|
|
||||||
*/
|
|
||||||
class CRenderTargetManager
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CRenderTargetManager();
|
|
||||||
~CRenderTargetManager();
|
|
||||||
|
|
||||||
NL3D::CTextureUser *getRenderTarget(uint width, uint height, bool mode2D = false, UTexture::TUploadFormat format = UTexture::Auto);
|
|
||||||
void recycleRenderTarget(NL3D::CTextureUser *renderTarget);
|
|
||||||
|
|
||||||
void cleanup();
|
|
||||||
|
|
||||||
private:
|
|
||||||
friend class CDriverUser;
|
|
||||||
NL3D::UDriver *m_Driver;
|
|
||||||
std::vector<CRenderTargetDescInt *> m_RenderTargets;
|
|
||||||
|
|
||||||
}; /* class CRenderTargetManager */
|
|
||||||
|
|
||||||
} /* namespace NL3D */
|
|
||||||
|
|
||||||
#endif /* #ifndef NL3D_RENDER_TARGET_MANAGER_H */
|
|
||||||
|
|
||||||
/* end of file */
|
|
@ -1,185 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file stereo_ovr.h
|
|
||||||
* \brief CStereoOVR
|
|
||||||
* \date 2013-06-25 22:22GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CStereoOVR
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2013 by authors
|
|
||||||
*
|
|
||||||
* This file is part of NL3D.
|
|
||||||
* NL3D 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.
|
|
||||||
*
|
|
||||||
* NL3D 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 NL3D. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Linking this library statically or dynamically with other modules
|
|
||||||
* is making a combined work based on this library. Thus, the terms
|
|
||||||
* and conditions of the GNU General Public License cover the whole
|
|
||||||
* combination.
|
|
||||||
*
|
|
||||||
* As a special exception, the copyright holders of this library give
|
|
||||||
* you permission to link this library with the Oculus SDK to produce
|
|
||||||
* an executable, regardless of the license terms of the Oculus SDK,
|
|
||||||
* and distribute linked combinations including the two, provided that
|
|
||||||
* you also meet the terms and conditions of the license of the Oculus
|
|
||||||
* SDK. You must obey the GNU General Public License in all respects
|
|
||||||
* for all of the code used other than the Oculus SDK. If you modify
|
|
||||||
* this file, you may extend this exception to your version of the
|
|
||||||
* file, but you are not obligated to do so. If you do not wish to do
|
|
||||||
* so, delete this exception statement from your version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NL3D_STEREO_OVR_H
|
|
||||||
#define NL3D_STEREO_OVR_H
|
|
||||||
|
|
||||||
#ifdef HAVE_LIBOVR_02
|
|
||||||
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#include <nel/misc/smart_ptr.h>
|
|
||||||
#include <nel/misc/geom_ext.h>
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
#include <nel/3d/stereo_hmd.h>
|
|
||||||
#include <nel/3d/frustum.h>
|
|
||||||
#include <nel/3d/viewport.h>
|
|
||||||
#include <nel/3d/u_material.h>
|
|
||||||
|
|
||||||
namespace NL3D {
|
|
||||||
|
|
||||||
class ITexture;
|
|
||||||
class CTextureUser;
|
|
||||||
class CStereoOVRDevicePtr;
|
|
||||||
class CStereoOVRDeviceHandle;
|
|
||||||
class CPixelProgramOVR;
|
|
||||||
|
|
||||||
#define NL_STEREO_MAX_USER_CAMERAS 8
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief CStereoOVR
|
|
||||||
* \date 2013-06-25 22:22GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CStereoOVR
|
|
||||||
*/
|
|
||||||
class CStereoOVR : public IStereoHMD
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CStereoOVR(const CStereoOVRDeviceHandle *handle);
|
|
||||||
virtual ~CStereoOVR();
|
|
||||||
|
|
||||||
/// Sets driver and generates necessary render targets
|
|
||||||
virtual void setDriver(NL3D::UDriver *driver);
|
|
||||||
|
|
||||||
/// Gets the required screen resolution for this device
|
|
||||||
virtual bool getScreenResolution(uint &width, uint &height);
|
|
||||||
/// Set latest camera position etcetera
|
|
||||||
virtual void updateCamera(uint cid, const NL3D::UCamera *camera);
|
|
||||||
/// Get the frustum to use for clipping
|
|
||||||
virtual void getClippingFrustum(uint cid, NL3D::UCamera *camera) const;
|
|
||||||
/// Get the original frustum of the camera
|
|
||||||
virtual void getOriginalFrustum(uint cid, NL3D::UCamera *camera) const;
|
|
||||||
|
|
||||||
/// Is there a next pass
|
|
||||||
virtual bool nextPass();
|
|
||||||
/// Gets the current viewport
|
|
||||||
virtual const NL3D::CViewport &getCurrentViewport() const;
|
|
||||||
/// Gets the current camera frustum
|
|
||||||
virtual const NL3D::CFrustum &getCurrentFrustum(uint cid) const;
|
|
||||||
/// Gets the current camera frustum
|
|
||||||
virtual void getCurrentFrustum(uint cid, NL3D::UCamera *camera) const;
|
|
||||||
/// Gets the current camera matrix
|
|
||||||
virtual void getCurrentMatrix(uint cid, NL3D::UCamera *camera) const;
|
|
||||||
|
|
||||||
/// At the start of a new render target
|
|
||||||
virtual bool wantClear();
|
|
||||||
/// The 3D scene
|
|
||||||
virtual bool wantScene();
|
|
||||||
/// Interface within the 3D scene
|
|
||||||
virtual bool wantInterface3D();
|
|
||||||
/// 2D Interface
|
|
||||||
virtual bool wantInterface2D();
|
|
||||||
|
|
||||||
/// Returns true if a new render target was set, always fase if not using render targets
|
|
||||||
virtual bool beginRenderTarget();
|
|
||||||
/// Returns true if a render target was fully drawn, always false if not using render targets
|
|
||||||
virtual bool endRenderTarget();
|
|
||||||
|
|
||||||
|
|
||||||
/// Get the HMD orientation
|
|
||||||
virtual NLMISC::CQuat getOrientation() const;
|
|
||||||
|
|
||||||
/// Set the GUI reference
|
|
||||||
virtual void setInterfaceMatrix(const NL3D::CMatrix &matrix);
|
|
||||||
|
|
||||||
/// Get GUI center (1 = width, 1 = height, 0 = center)
|
|
||||||
virtual void getInterface2DShift(uint cid, float &x, float &y, float distance) const;
|
|
||||||
|
|
||||||
/// Set the head model, eye position relative to orientation point
|
|
||||||
virtual void setEyePosition(const NLMISC::CVector &v);
|
|
||||||
/// Get the head model, eye position relative to orientation point
|
|
||||||
virtual const NLMISC::CVector &getEyePosition() const;
|
|
||||||
|
|
||||||
/// Set the scale of the game in units per meter
|
|
||||||
virtual void setScale(float s);
|
|
||||||
|
|
||||||
/// Calculates internal camera information based on the reference camera
|
|
||||||
void initCamera(uint cid, const NL3D::UCamera *camera);
|
|
||||||
/// Render GUI
|
|
||||||
void renderGUI();
|
|
||||||
|
|
||||||
/// Checks if the device used by this class was actually created
|
|
||||||
bool isDeviceCreated();
|
|
||||||
|
|
||||||
static void listDevices(std::vector<CStereoDeviceInfo> &devicesOut);
|
|
||||||
static bool isLibraryInUse();
|
|
||||||
static void releaseLibrary();
|
|
||||||
|
|
||||||
private:
|
|
||||||
CStereoOVRDevicePtr *m_DevicePtr;
|
|
||||||
int m_Stage;
|
|
||||||
int m_SubStage;
|
|
||||||
CViewport m_RegularViewport;
|
|
||||||
CViewport m_LeftViewport;
|
|
||||||
CViewport m_RightViewport;
|
|
||||||
CFrustum m_ClippingFrustum[NL_STEREO_MAX_USER_CAMERAS];
|
|
||||||
CFrustum m_LeftFrustum[NL_STEREO_MAX_USER_CAMERAS];
|
|
||||||
CFrustum m_RightFrustum[NL_STEREO_MAX_USER_CAMERAS];
|
|
||||||
CFrustum m_OriginalFrustum[NL_STEREO_MAX_USER_CAMERAS];
|
|
||||||
CMatrix m_CameraMatrix[NL_STEREO_MAX_USER_CAMERAS];
|
|
||||||
CMatrix m_InterfaceCameraMatrix;
|
|
||||||
mutable bool m_OrientationCached;
|
|
||||||
mutable NLMISC::CQuat m_OrientationCache;
|
|
||||||
UDriver *m_Driver;
|
|
||||||
NL3D::CTextureUser *m_SceneTexture;
|
|
||||||
NL3D::UMaterial m_BarrelMat;
|
|
||||||
NL3D::CTextureUser *m_GUITexture;
|
|
||||||
NLMISC::CQuadUV m_BarrelQuadLeft;
|
|
||||||
NLMISC::CQuadUV m_BarrelQuadRight;
|
|
||||||
NLMISC::CRefPtr<CPixelProgramOVR> m_PixelProgram;
|
|
||||||
NLMISC::CVector m_EyePosition;
|
|
||||||
float m_Scale;
|
|
||||||
|
|
||||||
}; /* class CStereoOVR */
|
|
||||||
|
|
||||||
} /* namespace NL3D */
|
|
||||||
|
|
||||||
#endif /* HAVE_LIBOVR */
|
|
||||||
|
|
||||||
#endif /* #ifndef NL3D_STEREO_OVR_H */
|
|
||||||
|
|
||||||
/* end of file */
|
|
@ -1,37 +0,0 @@
|
|||||||
SUBDIRS(misc)
|
|
||||||
|
|
||||||
IF(WITH_3D)
|
|
||||||
SUBDIRS(3d)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_GUI)
|
|
||||||
ADD_SUBDIRECTORY(gui)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_GEORGES)
|
|
||||||
SUBDIRS(georges)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_LIGO)
|
|
||||||
SUBDIRS(ligo)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_LOGIC)
|
|
||||||
SUBDIRS(logic)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_NET)
|
|
||||||
SUBDIRS(net)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_SOUND)
|
|
||||||
SUBDIRS(sound)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_PACS)
|
|
||||||
SUBDIRS(pacs)
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF(WITH_NEL_CEGUI)
|
|
||||||
SUBDIRS(cegui)
|
|
||||||
ENDIF()
|
|
@ -1,150 +0,0 @@
|
|||||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
||||||
// Copyright (C) 2010 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_PARSER_H
|
|
||||||
#define CL_CSS_PARSER_H
|
|
||||||
|
|
||||||
#include "nel/misc/types_nl.h"
|
|
||||||
#include "nel/gui/css_style.h"
|
|
||||||
#include "nel/gui/css_selector.h"
|
|
||||||
|
|
||||||
namespace NLGUI
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* \brief CSS style parsing
|
|
||||||
* \date 2019-03-15 10:50 GMT
|
|
||||||
* \author Meelis Mägi (Nimetu)
|
|
||||||
*/
|
|
||||||
class CCssParser {
|
|
||||||
public:
|
|
||||||
// parse style declaration, eg "color: red; font-size: 10px;"
|
|
||||||
static TStyle parseDecls(const std::string &styleString);
|
|
||||||
|
|
||||||
// parse css stylesheet
|
|
||||||
void parseStylesheet(const std::string &cssString, std::vector<CCssStyle::SStyleRule> &rules);
|
|
||||||
|
|
||||||
private:
|
|
||||||
// stylesheet currently parsed
|
|
||||||
ucstring _Style;
|
|
||||||
// keep track of current position in _Style
|
|
||||||
size_t _Position;
|
|
||||||
|
|
||||||
std::vector<CCssStyle::SStyleRule> _Rules;
|
|
||||||
|
|
||||||
private:
|
|
||||||
// @media ( .. ) { .. }
|
|
||||||
void readAtRule();
|
|
||||||
|
|
||||||
// a#id.class[attr=val] { .. }
|
|
||||||
void readRule();
|
|
||||||
|
|
||||||
// move past whitespace
|
|
||||||
void skipWhitespace();
|
|
||||||
|
|
||||||
// skip valid IDENT
|
|
||||||
bool skipIdentifier();
|
|
||||||
|
|
||||||
// skip over {}, (), or [] block
|
|
||||||
void skipBlock();
|
|
||||||
|
|
||||||
// skip over string quoted with ' or "
|
|
||||||
void skipString();
|
|
||||||
|
|
||||||
// backslash escape
|
|
||||||
void escape();
|
|
||||||
|
|
||||||
// normalize newline chars and remove comments
|
|
||||||
void preprocess();
|
|
||||||
|
|
||||||
// parse selectors + combinators
|
|
||||||
std::vector<CCssSelector> parse_selector(const ucstring &sel, std::string &pseudoElement) const;
|
|
||||||
|
|
||||||
// parse selector and style
|
|
||||||
void parseRule(const ucstring &selectorString, const ucstring &styleString);
|
|
||||||
|
|
||||||
inline bool is_eof() const
|
|
||||||
{
|
|
||||||
return _Position >= _Style.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool is_whitespace(ucchar ch) const
|
|
||||||
{
|
|
||||||
return (ch == (ucchar)' ' || ch == (ucchar)'\t' || ch == (ucchar)'\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool is_hex(ucchar ch) const
|
|
||||||
{
|
|
||||||
return ((ch >= (ucchar)'0' && ch <= (ucchar)'9') ||
|
|
||||||
(ch >= (ucchar)'a' && ch <= (ucchar)'f') ||
|
|
||||||
(ch >= (ucchar)'A' && ch <= (ucchar)'F'));
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool maybe_escape() const
|
|
||||||
{
|
|
||||||
// escaping newline (\n) only allowed inside strings
|
|
||||||
return (_Style.size() - _Position) >= 1 && _Style[_Position] == (ucchar)'\\' && _Style[_Position+1] != '\n';
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool is_quote(ucchar ch) const
|
|
||||||
{
|
|
||||||
return ch== (ucchar)'"' || ch == (ucchar)'\'';
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool is_block_open(ucchar ch) const
|
|
||||||
{
|
|
||||||
return ch == (ucchar)'{' || ch == (ucchar)'[' || ch == (ucchar)'(';
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool is_block_close(ucchar ch, ucchar open) const
|
|
||||||
{
|
|
||||||
return ((open == '{' && ch == (ucchar)'}') ||
|
|
||||||
(open == '[' && ch == (ucchar)']') ||
|
|
||||||
(open == '(' && ch == (ucchar)')'));
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool is_comment_open() const
|
|
||||||
{
|
|
||||||
if (_Position+1 > _Style.size())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
return _Style[_Position] == (ucchar)'/' && _Style[_Position+1] == (ucchar)'*';
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool is_nonascii(ucchar ch) const
|
|
||||||
{
|
|
||||||
return ch >= 0x80 /*&& ch <= 255*/;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool is_alpha(ucchar ch) const
|
|
||||||
{
|
|
||||||
return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool is_digit(ucchar ch) const
|
|
||||||
{
|
|
||||||
return ch >= '0' && ch <= '9';
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool is_nmchar(ucchar ch) const
|
|
||||||
{
|
|
||||||
// checking escape here does not check if next char is '\n' or not
|
|
||||||
return ch == '_' || ch == '-' || is_alpha(ch) || is_digit(ch) || is_nonascii(ch) || ch == '\\'/*is_escape(ch)*/;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}//namespace
|
|
||||||
|
|
||||||
#endif // CL_CSS_PARSER_H
|
|
||||||
|
|
@ -1,230 +0,0 @@
|
|||||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
||||||
// Copyright (C) 2010 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_STYLE_H
|
|
||||||
#define CL_CSS_STYLE_H
|
|
||||||
|
|
||||||
#include "nel/misc/types_nl.h"
|
|
||||||
#include "nel/misc/rgba.h"
|
|
||||||
#include "nel/gui/css_selector.h"
|
|
||||||
|
|
||||||
namespace NLGUI
|
|
||||||
{
|
|
||||||
class CHtmlElement;
|
|
||||||
|
|
||||||
typedef std::map<std::string, std::string> TStyle;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief CSS style rules
|
|
||||||
* \date 2019-03-15 10:50 GMT
|
|
||||||
* \author Meelis Mägi (Nimetu)
|
|
||||||
*/
|
|
||||||
class CStyleParams
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
struct STextShadow
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
STextShadow(bool enabled = false, bool outline = false, sint32 x=1, sint32 y=1, NLMISC::CRGBA color=NLMISC::CRGBA::Black)
|
|
||||||
: Enabled(enabled), Outline(outline), X(x), Y(y), Color(color)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
bool Enabled;
|
|
||||||
bool Outline;
|
|
||||||
sint32 X;
|
|
||||||
sint32 Y;
|
|
||||||
NLMISC::CRGBA Color;
|
|
||||||
};
|
|
||||||
public:
|
|
||||||
CStyleParams () : FontFamily(""), TextColor(255,255,255,255), TextShadow()
|
|
||||||
{
|
|
||||||
FontSize=10;
|
|
||||||
FontWeight=400;
|
|
||||||
FontOblique=false;
|
|
||||||
Underlined=false;
|
|
||||||
StrikeThrough=false;
|
|
||||||
GlobalColor=false;
|
|
||||||
DisplayBlock=false;
|
|
||||||
Width=-1;
|
|
||||||
Height=-1;
|
|
||||||
MaxWidth=-1;
|
|
||||||
MaxHeight=-1;
|
|
||||||
BorderWidth=-1;
|
|
||||||
BackgroundColor=NLMISC::CRGBA::Black;
|
|
||||||
BackgroundColorOver=NLMISC::CRGBA::Black;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool hasStyle(const std::string &key) const
|
|
||||||
{
|
|
||||||
return StyleRules.find(key) != StyleRules.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string getStyle(const std::string &key) const
|
|
||||||
{
|
|
||||||
TStyle::const_iterator it = StyleRules.find(key);
|
|
||||||
return (it != StyleRules.end() ? it->second : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
uint FontSize;
|
|
||||||
uint FontWeight;
|
|
||||||
bool FontOblique;
|
|
||||||
std::string FontFamily;
|
|
||||||
NLMISC::CRGBA TextColor;
|
|
||||||
STextShadow TextShadow;
|
|
||||||
bool GlobalColor;
|
|
||||||
bool Underlined;
|
|
||||||
bool StrikeThrough;
|
|
||||||
bool DisplayBlock;
|
|
||||||
sint32 Width;
|
|
||||||
sint32 Height;
|
|
||||||
sint32 MaxWidth;
|
|
||||||
sint32 MaxHeight;
|
|
||||||
sint32 BorderWidth;
|
|
||||||
NLMISC::CRGBA BackgroundColor;
|
|
||||||
NLMISC::CRGBA BackgroundColorOver;
|
|
||||||
|
|
||||||
std::string WhiteSpace;
|
|
||||||
std::string TextAlign;
|
|
||||||
std::string VerticalAlign;
|
|
||||||
|
|
||||||
TStyle StyleRules;
|
|
||||||
};
|
|
||||||
|
|
||||||
class CCssStyle {
|
|
||||||
public:
|
|
||||||
struct SStyleRule {
|
|
||||||
std::vector<CCssSelector> Selector;
|
|
||||||
TStyle Properties;
|
|
||||||
|
|
||||||
// pseudo element like ':before'
|
|
||||||
std::string PseudoElement;
|
|
||||||
|
|
||||||
// returns selector specificity
|
|
||||||
uint specificity() const;
|
|
||||||
};
|
|
||||||
|
|
||||||
// 'browser' style, overwriten with '<html>'
|
|
||||||
CStyleParams Root;
|
|
||||||
|
|
||||||
// current element style
|
|
||||||
CStyleParams Current;
|
|
||||||
|
|
||||||
// known style rules sorted by specificity
|
|
||||||
std::vector<SStyleRule> _StyleRules;
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<CStyleParams> _StyleStack;
|
|
||||||
|
|
||||||
// test if str is one of "thin/medium/thick" and return its pixel value
|
|
||||||
bool scanCssLength(const std::string& str, uint32 &px) const;
|
|
||||||
|
|
||||||
// read style attribute
|
|
||||||
void getStyleParams(const std::string &styleString, CStyleParams &style, const CStyleParams ¤t) const;
|
|
||||||
void getStyleParams(const TStyle &styleRules, CStyleParams &style, const CStyleParams ¤t) const;
|
|
||||||
|
|
||||||
// extract from styleRules into style.StyleRules (expand shorthand, normalize, calculate current font-size)
|
|
||||||
void normalize(const TStyle &styleRules, CStyleParams &style, const CStyleParams ¤t) const;
|
|
||||||
|
|
||||||
// apply style.StyleRyles
|
|
||||||
void apply(CStyleParams &style, const CStyleParams ¤t) const;
|
|
||||||
|
|
||||||
// merge src into dest by overwriting key in dest
|
|
||||||
void merge(TStyle &dst, const TStyle &src) const;
|
|
||||||
|
|
||||||
// match selector to dom path
|
|
||||||
bool match(const std::vector<CCssSelector> &selector, const CHtmlElement &elm) const;
|
|
||||||
|
|
||||||
// parse 'background' into 'background-color', 'background-image', etc
|
|
||||||
void parseBackgroundShorthand(const std::string &value, CStyleParams &style) const;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void reset();
|
|
||||||
|
|
||||||
// parse <style>..</style> tag or css file content
|
|
||||||
void parseStylesheet(const std::string &styleString);
|
|
||||||
|
|
||||||
// set element style from matching css rules
|
|
||||||
void getStyleFor(CHtmlElement &elm) const;
|
|
||||||
|
|
||||||
inline uint getFontSizeSmaller() const
|
|
||||||
{
|
|
||||||
if (Current.FontSize < 5)
|
|
||||||
return 3;
|
|
||||||
return Current.FontSize-2;
|
|
||||||
}
|
|
||||||
|
|
||||||
sint styleStackIndex = 0;
|
|
||||||
|
|
||||||
inline void pushStyle()
|
|
||||||
{
|
|
||||||
styleStackIndex++;
|
|
||||||
_StyleStack.push_back(Current);
|
|
||||||
|
|
||||||
Current.DisplayBlock = false;
|
|
||||||
Current.Width=-1;
|
|
||||||
Current.Height=-1;
|
|
||||||
Current.MaxWidth=-1;
|
|
||||||
Current.MaxHeight=-1;
|
|
||||||
Current.BorderWidth=-1;
|
|
||||||
|
|
||||||
Current.StyleRules.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void popStyle()
|
|
||||||
{
|
|
||||||
styleStackIndex--;
|
|
||||||
if (_StyleStack.empty())
|
|
||||||
{
|
|
||||||
Current = Root;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Current = _StyleStack.back();
|
|
||||||
_StyleStack.pop_back();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// apply style to this.Root
|
|
||||||
void applyRootStyle(const std::string &styleString);
|
|
||||||
void applyRootStyle(const TStyle &styleRules);
|
|
||||||
|
|
||||||
// apply style to this.Current
|
|
||||||
void applyStyle(const std::string &styleString);
|
|
||||||
void applyStyle(const TStyle &styleRules);
|
|
||||||
|
|
||||||
void applyCssMinMax(sint32 &width, sint32 &height, sint32 minw=0, sint32 minh=0, sint32 maxw=0, sint32 maxh=0) const;
|
|
||||||
|
|
||||||
// check if current style property matches value
|
|
||||||
bool checkStyle(const std::string &key, const std::string &val) const
|
|
||||||
{
|
|
||||||
return Current.hasStyle(key) && Current.getStyle(key) == val;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool hasStyle(const std::string &key) const
|
|
||||||
{
|
|
||||||
return Current.hasStyle(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string getStyle(const std::string &key) const
|
|
||||||
{
|
|
||||||
return Current.getStyle(key);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}//namespace
|
|
||||||
|
|
||||||
#endif // CL_CSS_STYLE_H
|
|
||||||
|
|
@ -1,71 +0,0 @@
|
|||||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
||||||
// Copyright (C) 2010 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 DBMANAGER_H
|
|
||||||
#define DBMANAGER_H
|
|
||||||
|
|
||||||
#include "nel/misc/cdb_manager.h"
|
|
||||||
|
|
||||||
namespace NLGUI
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
Database Manager
|
|
||||||
|
|
||||||
Provides access to a simple CDB based tree hierarchical data store
|
|
||||||
*/
|
|
||||||
class CDBManager : public NLMISC::CCDBManager
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
static CDBManager* getInstance();
|
|
||||||
static void release();
|
|
||||||
|
|
||||||
/**
|
|
||||||
Retrieves a leaf node from the database.
|
|
||||||
@param name - name of the data leaf node we are querying.
|
|
||||||
@param create - when true if a node cannot be found it is created.
|
|
||||||
*/
|
|
||||||
NLMISC::CCDBNodeLeaf* getDbProp( const std::string &name, bool create = true );
|
|
||||||
|
|
||||||
/**
|
|
||||||
Deletes a node from the database.
|
|
||||||
@param name - name of the node.
|
|
||||||
*/
|
|
||||||
void delDbProp( const std::string &name );
|
|
||||||
|
|
||||||
/**
|
|
||||||
Returns a leaf node's content as an sint32
|
|
||||||
@param name - name of the leaf node.
|
|
||||||
*/
|
|
||||||
sint32 getDbValue32( const std::string &name );
|
|
||||||
|
|
||||||
/**
|
|
||||||
Returns the root branch of the database.
|
|
||||||
*/
|
|
||||||
NLMISC::CCDBNodeBranch* getDB() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
CDBManager();
|
|
||||||
~CDBManager();
|
|
||||||
|
|
||||||
static CDBManager *instance;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,31 +0,0 @@
|
|||||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
||||||
// Copyright (C) 2010 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 <string>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace NLGUI
|
|
||||||
{
|
|
||||||
/// Watches the currently selected GUI widget
|
|
||||||
class IEditorSelectionWatcher
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
/// Notifies the watcher about the change
|
|
||||||
virtual void selectionChanged() = 0;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
|||||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
||||||
// Copyright (C) 2010 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_HTML_PARSER_H
|
|
||||||
#define CL_HTML_PARSER_H
|
|
||||||
|
|
||||||
#include "nel/misc/types_nl.h"
|
|
||||||
|
|
||||||
namespace NLGUI
|
|
||||||
{
|
|
||||||
class CHtmlElement;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief HTML parsing
|
|
||||||
* \date 2019-03-15 10:50 GMT
|
|
||||||
* \author Meelis Mägi (Nimetu)
|
|
||||||
*/
|
|
||||||
class CHtmlParser
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
bool parseHtml(std::string htmlString) const;
|
|
||||||
|
|
||||||
// parse html string into DOM, extract <style> tags into styleString, <link stylesheet> urls into links
|
|
||||||
void getDOM(std::string htmlString, CHtmlElement &parent, std::string &styleString, std::vector<std::string> &links) const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
// iterate over libxml html tree, build DOM, and join all <style> tags together
|
|
||||||
void parseNode(xmlNode *a_node, CHtmlElement &parent, std::string &styleString, std::vector<std::string> &links) const;
|
|
||||||
|
|
||||||
// read <style> tag and add its content to styleString
|
|
||||||
void parseStyle(xmlNode *a_node, std::string &styleString) const;
|
|
||||||
|
|
||||||
// update parent/sibling in elm.Children
|
|
||||||
void reindexChilds(CHtmlElement &elm) const;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
|||||||
#ifndef STRING_CASE_H
|
|
||||||
#define STRING_CASE_H
|
|
||||||
|
|
||||||
#include "nel/misc/types_nl.h"
|
|
||||||
#include "nel/misc/ucstring.h"
|
|
||||||
|
|
||||||
namespace NLGUI
|
|
||||||
{
|
|
||||||
|
|
||||||
enum TCaseMode
|
|
||||||
{
|
|
||||||
CaseNormal = 0, // Nothing done
|
|
||||||
CaseLower, // All letters in lowercase
|
|
||||||
CaseUpper, // All letters in uppercase
|
|
||||||
CaseFirstStringLetterUp, // The first letter of the string is uppercase, the others are lowercase
|
|
||||||
CaseFirstSentenceLetterUp, // The first letter of the string and each sentences are uppercase, the others are lowercase. Sentences are seprated with '.'.
|
|
||||||
CaseFirstWordLetterUp, // The first letter of each word is uppercase, the others are lowercase
|
|
||||||
CaseCount
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
void setCase( ucstring &str, TCaseMode mode );
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
@ -1,369 +0,0 @@
|
|||||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
||||||
// Copyright (C) 2010 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 CDB_H
|
|
||||||
#define CDB_H
|
|
||||||
|
|
||||||
// misc
|
|
||||||
#include "types_nl.h"
|
|
||||||
#include "smart_ptr.h"
|
|
||||||
#include "string_mapper.h"
|
|
||||||
#include "sstring.h"
|
|
||||||
|
|
||||||
// Forward declarations for libxml2
|
|
||||||
typedef struct _xmlNode xmlNode;
|
|
||||||
typedef xmlNode *xmlNodePtr;
|
|
||||||
|
|
||||||
namespace NLMISC
|
|
||||||
{
|
|
||||||
class IProgressCallback;
|
|
||||||
class CBitMemStream;
|
|
||||||
class CCDBNodeLeaf;
|
|
||||||
class CCDBNodeBranch;
|
|
||||||
class CCDBBankHandler;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Interface to manage a database node, can contain a unique property or a set of property
|
|
||||||
* \author Stephane Coutelas
|
|
||||||
* \author Nevrax France
|
|
||||||
* \date 2002
|
|
||||||
*/
|
|
||||||
|
|
||||||
class ICDBNode : public CRefCount
|
|
||||||
{
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// end of IDBNode interface
|
|
||||||
// start of CDB sub-class definitions
|
|
||||||
|
|
||||||
public:
|
|
||||||
enum EPropType
|
|
||||||
{
|
|
||||||
UNKNOWN = 0,
|
|
||||||
// Unsigned
|
|
||||||
I1, I2, I3, I4, I5, I6, I7, I8, I9, I10, I11, I12, I13, I14, I15, I16,
|
|
||||||
I17, I18, I19, I20, I21, I22, I23, I24, I25, I26, I27, I28, I29, I30, I31, I32,
|
|
||||||
I33, I34, I35, I36, I37, I38, I39, I40, I41, I42, I43, I44, I45, I46, I47, I48,
|
|
||||||
I49, I50, I51, I52, I53, I54, I55, I56, I57, I58, I59, I60, I61, I62, I63, I64,
|
|
||||||
// Signed
|
|
||||||
S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15, S16,
|
|
||||||
S17, S18, S19, S20, S21, S22, S23, S24, S25, S26, S27, S28, S29, S30, S31, S32,
|
|
||||||
S33, S34, S35, S36, S37, S38, S39, S40, S41, S42, S43, S44, S45, S46, S47, S48,
|
|
||||||
S49, S50, S51, S52, S53, S54, S55, S56, S57, S58, S59, S60, S61, S62, S63, S64,
|
|
||||||
TEXT, Nb_Prop_Type
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* observer interface to a database property
|
|
||||||
* \author Nicolas Brigand
|
|
||||||
* \author Nevrax France
|
|
||||||
* \date 2002
|
|
||||||
*/
|
|
||||||
class IPropertyObserver : public CRefCount
|
|
||||||
{
|
|
||||||
public :
|
|
||||||
virtual ~IPropertyObserver() {}
|
|
||||||
virtual void update(ICDBNode* node ) = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Text id
|
|
||||||
* \author Stephane Coutelas
|
|
||||||
* \author Nevrax France
|
|
||||||
* \date 2002
|
|
||||||
*/
|
|
||||||
class CTextId
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* Default constructor
|
|
||||||
*/
|
|
||||||
CTextId(): _Idx(0) {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Init this text id from a string
|
|
||||||
*/
|
|
||||||
explicit CTextId( const std::string& str ): _Idx(0)
|
|
||||||
{
|
|
||||||
const std::string &s = str;
|
|
||||||
uint32 i, j;
|
|
||||||
for (i=0,j=0; i+j<s.size(); j++)
|
|
||||||
if (s[i+j]==':')
|
|
||||||
{
|
|
||||||
_Ids.push_back(s.substr(i,j));
|
|
||||||
i+=j+1; // +1 to skip the ':'
|
|
||||||
j=0;
|
|
||||||
}
|
|
||||||
// deal with the last id in the string (terminated by a '\x0' and not a ':')
|
|
||||||
_Ids.push_back(s.substr(i,j));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build a string from this text id
|
|
||||||
*/
|
|
||||||
std::string toString() const
|
|
||||||
{
|
|
||||||
if (_Ids.empty()) return std::string("");
|
|
||||||
std::string str=_Ids[0];
|
|
||||||
for (uint i=1; i<_Ids.size(); i++)
|
|
||||||
str +=std::string(":")+ _Ids[i];
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Push back a sub name id to this id
|
|
||||||
*/
|
|
||||||
void push( const std::string &str ) { _Ids.push_back( str ); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Remove the last sub name id to this id
|
|
||||||
*/
|
|
||||||
void pop() { _Ids.pop_back(); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the next sub id
|
|
||||||
*/
|
|
||||||
const std::string &readNext() const
|
|
||||||
{
|
|
||||||
nlassert( _Idx < _Ids.size() );
|
|
||||||
return _Ids[_Idx++];
|
|
||||||
}
|
|
||||||
|
|
||||||
/** return true if a call to readNext can be performed
|
|
||||||
*/
|
|
||||||
bool hasElements() const { return _Idx < _Ids.size(); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the current index in Id
|
|
||||||
*/
|
|
||||||
uint getCurrentIndex() const { return _Idx; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the count of strings composing this id
|
|
||||||
*/
|
|
||||||
uint size() const { return (uint)_Ids.size(); }
|
|
||||||
|
|
||||||
/** Return an element. empty if bad index
|
|
||||||
*/
|
|
||||||
const std::string &getElement(uint idx)
|
|
||||||
{
|
|
||||||
static std::string empty;
|
|
||||||
if(idx>=size())
|
|
||||||
return empty;
|
|
||||||
else
|
|
||||||
return _Ids[idx];
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<std::string> _Ids;
|
|
||||||
mutable uint _Idx;
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// end of CDB sub-class definitions
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------
|
|
||||||
// IDBNode interface definition
|
|
||||||
|
|
||||||
public :
|
|
||||||
|
|
||||||
/**
|
|
||||||
* destructor
|
|
||||||
*/
|
|
||||||
virtual ~ICDBNode() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build the structure of the database from a file
|
|
||||||
* \param f is the stream
|
|
||||||
*/
|
|
||||||
virtual void init( xmlNodePtr node, IProgressCallback &progressCallBack, bool mapBanks=false, CCDBBankHandler *bankHandler = NULL ) = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save a backup of the database
|
|
||||||
* \param id is the text id of the property/grp
|
|
||||||
* \param f is the stream
|
|
||||||
*/
|
|
||||||
virtual void write( CTextId& id, FILE * f) = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the database from a stream coming from the FE
|
|
||||||
* \param gc the server gameCycle of this update. Any outdated update are aborted
|
|
||||||
* \param f : the stream.
|
|
||||||
*/
|
|
||||||
virtual void readDelta( TGameCycle gc, CBitMemStream & f ) = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a node . Create it if it does not exist yet
|
|
||||||
* \param id : the CTextId identifying the node
|
|
||||||
*/
|
|
||||||
virtual ICDBNode * getNode( const CTextId& id, bool bCreate = true )=0 ;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a node
|
|
||||||
* \param idx is the node index
|
|
||||||
*/
|
|
||||||
virtual ICDBNode * getNode( uint16 idx ) = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a node index
|
|
||||||
* \param node is a pointer to the node
|
|
||||||
* \param index is a reference that receive the result
|
|
||||||
* \return true if the node was found
|
|
||||||
*/
|
|
||||||
virtual bool getNodeIndex( ICDBNode* node , uint & index) = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the value of a property (the update flag is set to false)
|
|
||||||
* \param id is the text id of the property/grp
|
|
||||||
* \param name is the name of the property
|
|
||||||
* \return the value of the property
|
|
||||||
*/
|
|
||||||
virtual sint64 getProp( CTextId& id ) = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the value of a property (the update flag is set to true)
|
|
||||||
* \param id is the text id of the property/grp
|
|
||||||
* \param name is the name of the property
|
|
||||||
* \param value is the value of the property
|
|
||||||
* \return bool : 'true' if property found.
|
|
||||||
*/
|
|
||||||
virtual bool setProp( CTextId& id, sint64 value ) = 0;
|
|
||||||
|
|
||||||
/// Reset all leaf data from this point
|
|
||||||
virtual void resetData(TGameCycle gc, bool forceReset=false) = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the node and his children
|
|
||||||
*/
|
|
||||||
virtual void clear() = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* add an observer to a property
|
|
||||||
* \param observer : pointer to an observer
|
|
||||||
* \param id text id identifying the property
|
|
||||||
* \return false if the node doesn't exist
|
|
||||||
*/
|
|
||||||
virtual bool addObserver(IPropertyObserver* observer, CTextId& id) = 0;
|
|
||||||
|
|
||||||
/** remove an obsever
|
|
||||||
* \param observer : pointer to an observer
|
|
||||||
* \param id text id identifying the property
|
|
||||||
* \return false if the node or observer doesn t exist
|
|
||||||
*/
|
|
||||||
virtual bool removeObserver(IPropertyObserver* observer, CTextId& id) = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inform a node of its parenthood
|
|
||||||
*/
|
|
||||||
virtual void setParent(CCDBNodeBranch * /* parent */) { nlassertex(0,("setParent() not overloaded for given node type!")); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the parent of a node
|
|
||||||
*/
|
|
||||||
virtual CCDBNodeBranch* getParent() { nlassertex(0,("getParent() not overloaded for given node type!")); return NULL; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the name of this node
|
|
||||||
*/
|
|
||||||
const std::string * getName() const { return &_DBSM->localUnmap(_Name); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the full name of this node separator is ':' (ie UI:INTERFACE:REDSTUFF)
|
|
||||||
* This will not return the fullname with the ROOT !
|
|
||||||
*/
|
|
||||||
std::string getFullName();
|
|
||||||
|
|
||||||
/// Count the leaves
|
|
||||||
virtual uint countLeaves() const = 0;
|
|
||||||
|
|
||||||
/// Find the leaf which count is specified (if found, the returned value is non-null and count is 0)
|
|
||||||
virtual CCDBNodeLeaf *findLeafAtCount( uint& count ) = 0;
|
|
||||||
|
|
||||||
/// Set the atomic branch flag (when all the modified nodes of a branch should be tranmitted at the same time)
|
|
||||||
void setAtomic( bool atomicBranch ) { _AtomicFlag = atomicBranch; }
|
|
||||||
|
|
||||||
/// Return true if the branch has the atomic flag
|
|
||||||
bool isAtomic() const { return _AtomicFlag; }
|
|
||||||
|
|
||||||
// test if the node is a leaf
|
|
||||||
virtual bool isLeaf() const = 0;
|
|
||||||
|
|
||||||
/// Debug purpose
|
|
||||||
virtual void display (const std::string &/* prefix */){}
|
|
||||||
|
|
||||||
/// Return the string id corresponding to the argument
|
|
||||||
static TStringId getStringId(const std::string& nodeName)
|
|
||||||
{
|
|
||||||
if (_DBSM == NULL) _DBSM = CStringMapper::createLocalMapper();
|
|
||||||
return _DBSM->localMap(nodeName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return a pointer to the string corresponding to the argument
|
|
||||||
static const std::string *getStringFromId(TStringId nodeStringId)
|
|
||||||
{
|
|
||||||
if (_DBSM == NULL) _DBSM = CStringMapper::createLocalMapper();
|
|
||||||
return &_DBSM->localUnmap(nodeStringId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// release string mapper
|
|
||||||
static void releaseStringMapper();
|
|
||||||
|
|
||||||
static bool isDatabaseVerbose(){ return verboseDatabase; }
|
|
||||||
static void setVerboseDatabase( bool b ){ verboseDatabase = b; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
/// Constructor
|
|
||||||
ICDBNode() : _AtomicFlag(false)
|
|
||||||
{
|
|
||||||
if (_DBSM == NULL) _DBSM = CStringMapper::createLocalMapper();
|
|
||||||
_Name = CStringMapper::emptyId();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Constructor
|
|
||||||
ICDBNode (const std::string &name) : _AtomicFlag(false)
|
|
||||||
{
|
|
||||||
if (_DBSM == NULL) _DBSM = CStringMapper::createLocalMapper();
|
|
||||||
_Name = _DBSM->localMap(name);
|
|
||||||
//_NameDbg = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
// utility to build full name efficiently (without reallocating the string at each parent level)
|
|
||||||
void _buildFullName(CSString &fullName);
|
|
||||||
|
|
||||||
/// Atomic flag: is the branch an atomic group, or is the leaf a member of an atomic group
|
|
||||||
bool _AtomicFlag : 1;
|
|
||||||
|
|
||||||
/// Name of the node
|
|
||||||
TStringId _Name;
|
|
||||||
//std::string _NameDbg;
|
|
||||||
|
|
||||||
static CStringMapper *_DBSM;
|
|
||||||
|
|
||||||
static bool verboseDatabase;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // CDB_H
|
|
@ -1,266 +0,0 @@
|
|||||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
||||||
// Copyright (C) 2010 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 CDB_BRANCH_H
|
|
||||||
#define CDB_BRANCH_H
|
|
||||||
|
|
||||||
#include "cdb.h"
|
|
||||||
|
|
||||||
#define NL_CDB_OPTIMIZE_PREDICT 1
|
|
||||||
|
|
||||||
namespace NLMISC{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Database Node which contains a set of properties
|
|
||||||
* \author Stephane Coutelas
|
|
||||||
* \author Nevrax France
|
|
||||||
* \date 2002
|
|
||||||
*/
|
|
||||||
class CCDBNodeBranch : public ICDBNode
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
class ICDBDBBranchObserverHandle
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual ~ICDBDBBranchObserverHandle(){}
|
|
||||||
|
|
||||||
virtual ICDBNode* owner() = 0;
|
|
||||||
virtual IPropertyObserver* observer() = 0;
|
|
||||||
virtual bool observesLeaf( const std::string &leafName ) = 0;
|
|
||||||
virtual bool inList( uint list ) = 0;
|
|
||||||
virtual void addToFlushableList() = 0;
|
|
||||||
virtual void removeFromFlushableList( uint list ) = 0;
|
|
||||||
virtual void removeFromFlushableList() = 0;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
// default constructor
|
|
||||||
CCDBNodeBranch(const std::string &name) : ICDBNode(name)
|
|
||||||
{
|
|
||||||
_Parent = NULL;
|
|
||||||
_IdBits = 0;
|
|
||||||
_Sorted = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build the structure of the database from a file
|
|
||||||
* \param f is the stream
|
|
||||||
*/
|
|
||||||
void init( xmlNodePtr node, class IProgressCallback &progressCallBack, bool mapBanks=false, CCDBBankHandler *bankHandler = NULL );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add a new sub node
|
|
||||||
* \param node is the new subnode
|
|
||||||
* \param nodeName is the name of the node
|
|
||||||
*/
|
|
||||||
void attachChild( ICDBNode * node, std::string nodeName );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a node . Create it if it does not exist yet
|
|
||||||
* \param id : the CTextId identifying the node
|
|
||||||
*/
|
|
||||||
ICDBNode * getNode (const CTextId& id, bool bCreate=true);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a node. Return NULL if out of bounds (no warning)
|
|
||||||
* \param idx is the node index
|
|
||||||
*/
|
|
||||||
ICDBNode * getNode( uint16 idx );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a node index
|
|
||||||
* \param node is a pointer to the node
|
|
||||||
*/
|
|
||||||
virtual bool getNodeIndex( ICDBNode* node , uint& index)
|
|
||||||
{
|
|
||||||
index=0;
|
|
||||||
for ( std::vector<ICDBNode*>::const_iterator it = _Nodes.begin(); it != _Nodes.end(); it++)
|
|
||||||
{
|
|
||||||
if (*it == node)
|
|
||||||
return true;
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// return the child with the given node id, creating it if requested
|
|
||||||
CCDBNodeLeaf *getLeaf( const char *id, bool bCreate );
|
|
||||||
CCDBNodeLeaf *getLeaf( const std::string &id, bool bCreate ) { return getLeaf(id.c_str(), bCreate); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save a backup of the database
|
|
||||||
* \param id is the text id of the property/grp
|
|
||||||
* \param f is the stream
|
|
||||||
*/
|
|
||||||
void write( CTextId& id, FILE * f);
|
|
||||||
|
|
||||||
/// Update the database from the delta, but map the first level with the bank mapping (see _CDBBankToUnifiedIndexMapping)
|
|
||||||
void readAndMapDelta( TGameCycle gc, CBitMemStream& s, uint bank, CCDBBankHandler *bankHandler );
|
|
||||||
|
|
||||||
/// Update the database from a stream coming from the FE
|
|
||||||
void readDelta( TGameCycle gc, CBitMemStream & f );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the value of a property (the update flag is set to false)
|
|
||||||
* \param id is the text id of the property/grp
|
|
||||||
* \param name is the name of the property
|
|
||||||
* \return the value of the property
|
|
||||||
*/
|
|
||||||
sint64 getProp( CTextId& id );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the value of a property (the update flag is set to true)
|
|
||||||
* \param id is the text id of the property/grp
|
|
||||||
* \param name is the name of the property
|
|
||||||
* \param value is the value of the property
|
|
||||||
* \return bool : 'true' if property found.
|
|
||||||
*/
|
|
||||||
bool setProp( CTextId& id, sint64 value );
|
|
||||||
|
|
||||||
/// Clear the node and his children
|
|
||||||
void clear();
|
|
||||||
|
|
||||||
void resetNode( TGameCycle gc, uint node )
|
|
||||||
{
|
|
||||||
if( node > _Nodes.size() )
|
|
||||||
return;
|
|
||||||
|
|
||||||
_Nodes[ node ]->resetData( gc );
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Reset all leaf data from this point
|
|
||||||
void resetData(TGameCycle gc, bool forceReset=false)
|
|
||||||
{
|
|
||||||
for ( uint i=0; i!=_Nodes.size(); ++i )
|
|
||||||
{
|
|
||||||
_Nodes[i]->resetData(gc, forceReset);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destructor
|
|
||||||
*/
|
|
||||||
virtual ~CCDBNodeBranch() { clear(); }
|
|
||||||
|
|
||||||
// the parent node for a branch (NULL by default)
|
|
||||||
virtual void setParent(CCDBNodeBranch *parent) { _Parent=parent; }
|
|
||||||
|
|
||||||
virtual CCDBNodeBranch* getParent()
|
|
||||||
{
|
|
||||||
return _Parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
//get the number of nodes
|
|
||||||
uint16 getNbNodes()
|
|
||||||
{
|
|
||||||
return (uint16)_Nodes.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Count the leaves
|
|
||||||
virtual uint countLeaves() const;
|
|
||||||
|
|
||||||
/// Find the leaf which count is specified (if found, the returned value is non-null and count is 0)
|
|
||||||
virtual CCDBNodeLeaf *findLeafAtCount( uint& count );
|
|
||||||
|
|
||||||
virtual void display (const std::string &prefix);
|
|
||||||
|
|
||||||
void removeNode (const CTextId& id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* add an observer to a property
|
|
||||||
* \param observer : pointer to an observer
|
|
||||||
* \param id text id identifying the property
|
|
||||||
* \return false if the node doen t exist
|
|
||||||
*/
|
|
||||||
virtual bool addObserver(IPropertyObserver* observer, CTextId& id);
|
|
||||||
|
|
||||||
/** remove an obsever
|
|
||||||
* \param observer : pointer to an observer
|
|
||||||
* \return false if the node or observer doesn t exist
|
|
||||||
*/
|
|
||||||
virtual bool removeObserver(IPropertyObserver* observer, CTextId& id);
|
|
||||||
|
|
||||||
// Add an observer to this branch. It will be notified of any change in the sub-leaves
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Add observer to all sub-leaves, except if a positive filter is set:
|
|
||||||
* If positiveLeafNameFilter is non-empty, only changes to leaves having names found in it
|
|
||||||
* will be notified (this is equivalent to creating a sub-branch containing only the specified leaves
|
|
||||||
* and setting a branch observer on it, except you don't need to change your database paths
|
|
||||||
* and update large amounts of code!).
|
|
||||||
*/
|
|
||||||
void addBranchObserver( ICDBDBBranchObserverHandle* handle, const std::vector<std::string>& positiveLeafNameFilter=std::vector<std::string>());
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Easy version of addBranchObserver() (see above).
|
|
||||||
* Examples of dbPathFromThisNode:
|
|
||||||
* "" -> this node
|
|
||||||
* "FOO:BAR" -> sub-branch "BAR" of "FOO" which is a sub-branch of this node
|
|
||||||
*/
|
|
||||||
void addBranchObserver( ICDBDBBranchObserverHandle *handle, const char *dbPathFromThisNode, const char **positiveLeafNameFilter=NULL, uint positiveLeafNameFilterSize=0);
|
|
||||||
|
|
||||||
// Remove observer from all sub-leaves
|
|
||||||
bool removeBranchObserver(IPropertyObserver* observer);
|
|
||||||
|
|
||||||
/// Easy version of removeBranchObserver() (see above and see easy version of addBranchObserver())
|
|
||||||
void removeBranchObserver(const char *dbPathFromThisNode, ICDBNode::IPropertyObserver& observer);
|
|
||||||
|
|
||||||
virtual bool isLeaf() const { return false; }
|
|
||||||
|
|
||||||
// mark this branch and parent branch as 'modified'. This is usually called by sub-leaves
|
|
||||||
void onLeafChanged( TStringId leafName );
|
|
||||||
|
|
||||||
/// Find a subnode at this level
|
|
||||||
ICDBNode * find (const std::string &nodeName);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
typedef std::list< ICDBDBBranchObserverHandle* > TObserverHandleList;
|
|
||||||
|
|
||||||
CCDBNodeBranch *_Parent;
|
|
||||||
|
|
||||||
/// database subnodes not sorted
|
|
||||||
std::vector<ICDBNode*> _Nodes;
|
|
||||||
|
|
||||||
/// subnodes sorted by name
|
|
||||||
std::vector<ICDBNode*> _NodesByName;
|
|
||||||
|
|
||||||
// number of bits required to stock my children's ids
|
|
||||||
uint8 _IdBits : 7;
|
|
||||||
bool _Sorted : 1;
|
|
||||||
|
|
||||||
// observers for this node or branch
|
|
||||||
TObserverHandleList observerHandles;
|
|
||||||
|
|
||||||
/// called by clear
|
|
||||||
void removeAllBranchObserver();
|
|
||||||
|
|
||||||
#if NL_CDB_OPTIMIZE_PREDICT
|
|
||||||
CRefPtr<ICDBNode> _PredictNode;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // CDB_BRANCH_H
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,91 +0,0 @@
|
|||||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
||||||
// Copyright (C) 2010 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_CDB_CHECK_SUM_H
|
|
||||||
#define NL_CDB_CHECK_SUM_H
|
|
||||||
|
|
||||||
#include "types_nl.h"
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace NLMISC{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* class implementing check sum for the client database
|
|
||||||
* these check sum can be used to ensure that linked properties have all been modified
|
|
||||||
* \author Nicolas Brigand
|
|
||||||
* \author Nevrax France
|
|
||||||
* \date 2002
|
|
||||||
*/
|
|
||||||
class CCDBCheckSum
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
///constructor
|
|
||||||
CCDBCheckSum();
|
|
||||||
|
|
||||||
//clear the sum
|
|
||||||
void clear()
|
|
||||||
{
|
|
||||||
_Sum = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
///add an uint8 to the sum
|
|
||||||
void add(uint8 el);
|
|
||||||
|
|
||||||
///add a value to the check sum
|
|
||||||
template <class T>
|
|
||||||
void add(const T & el)
|
|
||||||
{
|
|
||||||
T value = el;
|
|
||||||
for (uint8 i=0; i< sizeof(T); i++)
|
|
||||||
{
|
|
||||||
uint8 tmp = (uint8)(value & 0xFF);
|
|
||||||
add(tmp);
|
|
||||||
value >>=8;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///add a vector to the sum
|
|
||||||
template <class T>
|
|
||||||
void addVector(const std::vector<T> & vect)
|
|
||||||
{
|
|
||||||
for (typename std::vector<T>::const_iterator it = vect.begin(); it != vect.end(); it++)
|
|
||||||
add(*it);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32 getSum()
|
|
||||||
{
|
|
||||||
return _Sum;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
///the checsum result
|
|
||||||
uint32 _Sum;
|
|
||||||
|
|
||||||
///the following values are used in the check algorithm
|
|
||||||
uint32 _Factor;
|
|
||||||
uint32 _Const1;
|
|
||||||
uint32 _Const2;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // NL_CDB_CHECK_SUM_H
|
|
||||||
|
|
||||||
/* End of cdb_check_sum.h */
|
|
@ -1,264 +0,0 @@
|
|||||||
// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
|
|
||||||
// Copyright (C) 2010 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 CDB_LEAF_H
|
|
||||||
#define CDB_LEAF_H
|
|
||||||
|
|
||||||
#include "cdb.h"
|
|
||||||
#include "cdb_branch.h"
|
|
||||||
#include "time_nl.h"
|
|
||||||
#include "rgba.h"
|
|
||||||
|
|
||||||
namespace NLMISC{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Database node which contains a unique property
|
|
||||||
* \author Stephane Coutelas
|
|
||||||
* \author Nevrax France
|
|
||||||
* \date 2002
|
|
||||||
*/
|
|
||||||
class CCDBNodeLeaf : public ICDBNode
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// flush all observers calls for modified nodes
|
|
||||||
static void flushObserversCalls();
|
|
||||||
|
|
||||||
|
|
||||||
/// Return the value of the property.
|
|
||||||
inline sint64 getValue64() const { return _Property; }
|
|
||||||
|
|
||||||
/// Set the value of the property (set '_Changed' flag with 'true').
|
|
||||||
void setValue64 (sint64 prop);
|
|
||||||
|
|
||||||
inline sint32 getValue32() const { return (sint32)(_Property & 0xffffffff); }
|
|
||||||
void setValue32 (sint32 prop);
|
|
||||||
inline sint16 getValue16() const { return (sint16)(_Property & 0xffff); }
|
|
||||||
void setValue16 (sint16 prop);
|
|
||||||
inline sint8 getValue8() const { return (sint8)(_Property & 0xff); }
|
|
||||||
void setValue8 (sint8 prop);
|
|
||||||
inline bool getValueBool() const { return (_Property!=(sint64)0 ); }
|
|
||||||
void setValueBool (bool prop);
|
|
||||||
inline CRGBA getValueRGBA() const
|
|
||||||
{
|
|
||||||
CRGBA col;
|
|
||||||
col.R = (uint8)(_Property&0xff);
|
|
||||||
col.G = (uint8)((_Property>>8)&0xff);
|
|
||||||
col.B = (uint8)((_Property>>16)&0xff);
|
|
||||||
col.A = (uint8)((_Property>>24)&0xff);
|
|
||||||
return col;
|
|
||||||
}
|
|
||||||
void setValueRGBA (const CRGBA &color);
|
|
||||||
|
|
||||||
/// Return the value of the property before the database change
|
|
||||||
inline sint64 getOldValue64() const { return _oldProperty; }
|
|
||||||
inline sint32 getOldValue32() const { return (sint32)(_oldProperty & 0xffffffff); }
|
|
||||||
inline sint16 getOldValue16() const { return (sint16)(_oldProperty & 0xffff); }
|
|
||||||
inline sint8 getOldValue8() const { return (sint8)(_oldProperty & 0xff); }
|
|
||||||
inline bool getOldValueBool() const { return (_oldProperty!=(sint64)0 ); }
|
|
||||||
|
|
||||||
|
|
||||||
/// Return the type of the property.
|
|
||||||
inline const EPropType &type() const {return _Type;}
|
|
||||||
|
|
||||||
/// Set the property Type.
|
|
||||||
inline void type(const EPropType &t) {_Type = t;}
|
|
||||||
|
|
||||||
/// Return 'true' if the property changed since last call.
|
|
||||||
inline const bool &changed() const {return _Changed;}
|
|
||||||
|
|
||||||
/// Set the property flag to known if the property changed since last call.
|
|
||||||
inline void changed(const bool &c) {_Changed = c;}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default constructor
|
|
||||||
*/
|
|
||||||
CCDBNodeLeaf(const std::string &name) : ICDBNode(name)
|
|
||||||
{
|
|
||||||
_Parent=0;
|
|
||||||
_Property = 0;
|
|
||||||
_oldProperty = 0;
|
|
||||||
_Type = UNKNOWN;
|
|
||||||
_Changed = false;
|
|
||||||
_LastChangeGC = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build the structure of the database from a file
|
|
||||||
* \param f is the stream
|
|
||||||
*/
|
|
||||||
void init( xmlNodePtr node, IProgressCallback &progressCallBack, bool mapBanks=false, CCDBBankHandler *bankHandler = NULL );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a node
|
|
||||||
* \param idx is the node index
|
|
||||||
*/
|
|
||||||
ICDBNode * getNode( uint16 idx );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a node . Create it if it does not exist yet
|
|
||||||
* \param id : the CTextId identifying the node
|
|
||||||
*/
|
|
||||||
ICDBNode * getNode (const CTextId& id, bool bCreate);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a node index
|
|
||||||
* \param node is a pointer to the node
|
|
||||||
*/
|
|
||||||
virtual bool getNodeIndex( ICDBNode* /* node */, uint& /* index */)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Save a backup of the database
|
|
||||||
* \param id is the text id of the property/grp
|
|
||||||
* \param f is the stream
|
|
||||||
*/
|
|
||||||
void write( CTextId& id, FILE * f);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the database from a stream coming from the FE
|
|
||||||
* \param f : the stream.
|
|
||||||
*/
|
|
||||||
void readDelta(TGameCycle gc, CBitMemStream & f );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the value of a property (the update flag is set to false)
|
|
||||||
* \param id is the text id of the property/grp
|
|
||||||
* \param name is the name of the property
|
|
||||||
* \return the structure of the property
|
|
||||||
*/
|
|
||||||
sint64 getProp( CTextId& id );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the value of a property (the update flag is set to true)
|
|
||||||
* \param id is the text id of the property/grp
|
|
||||||
* \param name is the name of the property
|
|
||||||
* \param value is the value of the property
|
|
||||||
* \return bool : 'false' if id is too long.
|
|
||||||
*/
|
|
||||||
bool setProp( CTextId& id, sint64 value );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the value of a property, only if gc>=_LastChangeGC
|
|
||||||
*/
|
|
||||||
bool setPropCheckGC(TGameCycle gc, sint64 value);
|
|
||||||
|
|
||||||
/// Reset all leaf data from this point
|
|
||||||
void resetData(TGameCycle gc, bool forceReset=false);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear the node and his children
|
|
||||||
*/
|
|
||||||
void clear();
|
|
||||||
|
|
||||||
|
|
||||||
// the parent node for a branch (NULL by default)
|
|
||||||
virtual void setParent(CCDBNodeBranch* parent) { _Parent=parent; }
|
|
||||||
|
|
||||||
//get the node parent
|
|
||||||
virtual CCDBNodeBranch *getParent()
|
|
||||||
{
|
|
||||||
return _Parent;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Count the leaves
|
|
||||||
virtual uint countLeaves() const
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Find the leaf which count is specified (if found, the returned value is non-null and count is 0)
|
|
||||||
virtual CCDBNodeLeaf *findLeafAtCount( uint& count )
|
|
||||||
{
|
|
||||||
if ( count == 0 )
|
|
||||||
return this;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
--count;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Debug purpose
|
|
||||||
virtual void display(const std::string &prefix);
|
|
||||||
|
|
||||||
|
|
||||||
virtual bool isLeaf() const { return true; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* add an observer to a property
|
|
||||||
* \param observer : pointer to an observer
|
|
||||||
* \param id text id identifying the property
|
|
||||||
* \return false if the node doen t exist
|
|
||||||
*/
|
|
||||||
virtual bool addObserver(IPropertyObserver* observer, CTextId& id);
|
|
||||||
|
|
||||||
/** remove an obsever
|
|
||||||
* \param observer : pointer to an observer
|
|
||||||
* \param id text id identifying the property
|
|
||||||
* \return false if the node or observer doesn t exist
|
|
||||||
*/
|
|
||||||
virtual bool removeObserver(IPropertyObserver* observer, CTextId& id);
|
|
||||||
|
|
||||||
|
|
||||||
/// get the last change GameCycle (server tick) for this value
|
|
||||||
TGameCycle getLastChangeGC() const {return _LastChangeGC;}
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
CCDBNodeBranch * _Parent;
|
|
||||||
|
|
||||||
/// property value
|
|
||||||
sint64 _Property;
|
|
||||||
sint64 _oldProperty;
|
|
||||||
|
|
||||||
/// property type
|
|
||||||
EPropType _Type;
|
|
||||||
|
|
||||||
/// true if this value has changed
|
|
||||||
bool _Changed;
|
|
||||||
|
|
||||||
/// gamecycle (servertick) of the last change for this value.
|
|
||||||
/// change are made in readDelta only for change >= _LastChangeGC
|
|
||||||
TGameCycle _LastChangeGC;
|
|
||||||
|
|
||||||
/// observers to call when the value really change
|
|
||||||
std::vector<IPropertyObserver*> _Observers;
|
|
||||||
|
|
||||||
private:
|
|
||||||
void notifyObservers();
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
////////////////////
|
|
||||||
// INLINE MEMBERS //
|
|
||||||
////////////////////
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // CDB_LEAF_H
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,112 +0,0 @@
|
|||||||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
|
||||||
// Copyright (C) 2010 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_SHA1_H
|
|
||||||
#define NL_SHA1_H
|
|
||||||
|
|
||||||
#include "types_nl.h"
|
|
||||||
#include "common.h"
|
|
||||||
#include "stream.h"
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
struct CHashKey
|
|
||||||
{
|
|
||||||
CHashKey () { HashKeyString.resize(20); }
|
|
||||||
|
|
||||||
CHashKey (const unsigned char Message_Digest[20])
|
|
||||||
{
|
|
||||||
HashKeyString.clear();
|
|
||||||
for(sint i = 0; i < 20 ; ++i)
|
|
||||||
{
|
|
||||||
HashKeyString += Message_Digest[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Init the hash key with a binary key format or a text key format
|
|
||||||
CHashKey (const std::string &str)
|
|
||||||
{
|
|
||||||
if (str.size() == 20)
|
|
||||||
{
|
|
||||||
HashKeyString = str;
|
|
||||||
}
|
|
||||||
else if (str.size() == 40)
|
|
||||||
{
|
|
||||||
HashKeyString.clear();
|
|
||||||
for(uint i = 0; i < str.size(); i+=2)
|
|
||||||
{
|
|
||||||
uint8 val;
|
|
||||||
if (isdigit((unsigned char)str[i+0]))
|
|
||||||
val = str[i+0]-'0';
|
|
||||||
else
|
|
||||||
val = 10+tolower(str[i+0])-'a';
|
|
||||||
val *= 16;
|
|
||||||
if (isdigit((unsigned char)str[i+1]))
|
|
||||||
val += str[i+1]-'0';
|
|
||||||
else
|
|
||||||
val += 10+tolower(str[i+1])-'a';
|
|
||||||
|
|
||||||
HashKeyString += val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nlwarning ("SHA: Bad hash key format");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// return the hash key in text format
|
|
||||||
std::string toString() const
|
|
||||||
{
|
|
||||||
std::string str;
|
|
||||||
for (uint i = 0; i < HashKeyString.size(); i++)
|
|
||||||
{
|
|
||||||
str += NLMISC::toString("%02X", (uint8)(HashKeyString[i]));
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
// serial the hash key in binary format
|
|
||||||
void serial (NLMISC::IStream &stream)
|
|
||||||
{
|
|
||||||
stream.serial (HashKeyString);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator==(const CHashKey &v) const
|
|
||||||
{
|
|
||||||
return HashKeyString == v.HashKeyString;
|
|
||||||
}
|
|
||||||
|
|
||||||
// this string is always 20 bytes long and is the code in binary format (can't print it directly)
|
|
||||||
std::string HashKeyString;
|
|
||||||
};
|
|
||||||
|
|
||||||
inline bool operator <(const struct CHashKey &a,const struct CHashKey &b)
|
|
||||||
{
|
|
||||||
return a.HashKeyString<b.HashKeyString;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This function get a filename (it works with big files) and returns his SHA hash key
|
|
||||||
// when forcePath is true, it doesn't use NLMISC::lookup
|
|
||||||
CHashKey getSHA1(const std::string &filename, bool forcePath = false);
|
|
||||||
|
|
||||||
// This function get a buffer with size and returns his SHA hash key
|
|
||||||
CHashKey getSHA1(const uint8 *buffer, uint32 size);
|
|
||||||
|
|
||||||
// This function get a buffer and key with size and returns his HMAC-SHA1 hash key
|
|
||||||
CHashKey getHMacSHA1(const uint8 *text, uint32 text_len, const uint8 *key, uint32 key_len);
|
|
||||||
|
|
||||||
#endif // NL_SHA1_H
|
|
@ -1,362 +0,0 @@
|
|||||||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
|
||||||
// Copyright (C) 2010 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_STRING_COMMON_H
|
|
||||||
#define NL_STRING_COMMON_H
|
|
||||||
|
|
||||||
#include "types_nl.h"
|
|
||||||
|
|
||||||
#include <cstdio>
|
|
||||||
#include <cstring>
|
|
||||||
#include <cstdarg>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
namespace NLMISC
|
|
||||||
{
|
|
||||||
|
|
||||||
// get a string and add \r before \n if necessary
|
|
||||||
std::string addSlashR (const std::string &str);
|
|
||||||
std::string removeSlashR (const std::string &str);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \def MaxCStringSize
|
|
||||||
*
|
|
||||||
* The maximum size allowed for C string (zero terminated string) buffer.
|
|
||||||
* This value is used when we have to create a standard C string buffer and we don't know exactly the final size of the string.
|
|
||||||
*/
|
|
||||||
const int MaxCStringSize = 2048;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \def NLMISC_CONVERT_VARGS(dest,format)
|
|
||||||
*
|
|
||||||
* This macro converts variable arguments into C string (zero terminated string).
|
|
||||||
* This function takes care to avoid buffer overflow.
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
*\code
|
|
||||||
void MyFunction(const char *format, ...)
|
|
||||||
{
|
|
||||||
string str;
|
|
||||||
NLMISC_CONVERT_VARGS (str, format, NLMISC::MaxCStringSize);
|
|
||||||
// str contains the result of the conversion
|
|
||||||
}
|
|
||||||
*\endcode
|
|
||||||
*
|
|
||||||
* \param _dest \c string or \c char* that contains the result of the convertion
|
|
||||||
* \param _format format of the string, it must be the last argument before the \c '...'
|
|
||||||
* \param _size size of the buffer that will contain the C string
|
|
||||||
*/
|
|
||||||
#define NLMISC_CONVERT_VARGS(_dest,_format,_size) \
|
|
||||||
char _cstring[_size]; \
|
|
||||||
va_list _args; \
|
|
||||||
va_start (_args, _format); \
|
|
||||||
int _res = vsnprintf (_cstring, _size-1, _format, _args); \
|
|
||||||
if (_res == -1 || _res == _size-1) \
|
|
||||||
{ \
|
|
||||||
_cstring[_size-1] = '\0'; \
|
|
||||||
} \
|
|
||||||
va_end (_args); \
|
|
||||||
_dest = _cstring
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** sMart sprintf function. This function do a sprintf and add a zero at the end of the buffer
|
|
||||||
* if there no enough room in the buffer.
|
|
||||||
*
|
|
||||||
* \param buffer a C string
|
|
||||||
* \param count Size of the buffer
|
|
||||||
* \param format of the string, it must be the last argument before the \c '...'
|
|
||||||
*/
|
|
||||||
sint smprintf( char *buffer, size_t count, const char *format, ... );
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef NL_OS_WINDOWS
|
|
||||||
|
|
||||||
//
|
|
||||||
// These functions are needed by template system to failed the compilation if you pass bad type on nlinfo...
|
|
||||||
//
|
|
||||||
|
|
||||||
inline void _check(int /* a */) { }
|
|
||||||
inline void _check(unsigned int /* a */) { }
|
|
||||||
inline void _check(char /* a */) { }
|
|
||||||
inline void _check(unsigned char /* a */) { }
|
|
||||||
inline void _check(long /* a */) { }
|
|
||||||
inline void _check(unsigned long /* a */) { }
|
|
||||||
|
|
||||||
#ifdef NL_COMP_VC6
|
|
||||||
inline void _check(uint8 /* a */) { }
|
|
||||||
#endif // NL_COMP_VC6
|
|
||||||
|
|
||||||
inline void _check(sint8 /* a */) { }
|
|
||||||
inline void _check(uint16 /* a */) { }
|
|
||||||
inline void _check(sint16 /* a */) { }
|
|
||||||
|
|
||||||
#ifdef NL_COMP_VC6
|
|
||||||
inline void _check(uint32 /* a */) { }
|
|
||||||
inline void _check(sint32 /* a */) { }
|
|
||||||
#endif // NL_COMP_VC6
|
|
||||||
|
|
||||||
inline void _check(uint64 /* a */) { }
|
|
||||||
inline void _check(sint64 /* a */) { }
|
|
||||||
inline void _check(float /* a */) { }
|
|
||||||
inline void _check(double /* a */) { }
|
|
||||||
inline void _check(const char * /* a */) { }
|
|
||||||
inline void _check(const void * /* a */) { }
|
|
||||||
|
|
||||||
#define CHECK_TYPES(__a,__b) \
|
|
||||||
inline __a(const char *fmt) { __b(fmt); } \
|
|
||||||
template<class A> __a(const char *fmt, A a) { _check(a); __b(fmt, a); } \
|
|
||||||
template<class A, class B> __a(const char *fmt, A a, B b) { _check(a); _check(b); __b(fmt, a, b); } \
|
|
||||||
template<class A, class B, class C> __a(const char *fmt, A a, B b, C c) { _check(a); _check(b); _check(c); __b(fmt, a, b, c); } \
|
|
||||||
template<class A, class B, class C, class D> __a(const char *fmt, A a, B b, C c, D d) { _check(a); _check(b); _check(c); _check(d); __b(fmt, a, b, c, d); } \
|
|
||||||
template<class A, class B, class C, class D, class E> __a(const char *fmt, A a, B b, C c, D d, E e) { _check(a); _check(b); _check(c); _check(d); _check(e); __b(fmt, a, b, c, d, e); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F> __a(const char *fmt, A a, B b, C c, D d, E e, F f) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); __b(fmt, a, b, c, d, e, f); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); __b(fmt, a, b, c, d, e, f, g); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); __b(fmt, a, b, c, d, e, f, g, h); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); __b(fmt, a, b, c, d, e, f, g, h, i); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); __b(fmt, a, b, c, d, e, f, g, h, i, j); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); __b(fmt, a, b, c, d, e, f, g, h, i, j, k); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N, class O> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); _check(o); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N, class O, class P> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o, P p) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); _check(o); _check(p); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N, class O, class P, class Q> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o, P p, Q q) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); _check(o); _check(p); _check(q); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N, class O, class P, class Q, class R> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o, P p, Q q, R r) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); _check(o); _check(p); _check(q); _check(r); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N, class O, class P, class Q, class R, class S> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o, P p, Q q, R r, S s) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); _check(o); _check(p); _check(q); _check(r); _check(s); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N, class O, class P, class Q, class R, class S, class T> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o, P p, Q q, R r, S s, T t) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); _check(o); _check(p); _check(q); _check(r); _check(s); _check(t); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N, class O, class P, class Q, class R, class S, class T, class U> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o, P p, Q q, R r, S s, T t, U u) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); _check(o); _check(p); _check(q); _check(r); _check(s); _check(t); _check(u); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N, class O, class P, class Q, class R, class S, class T, class U, class V> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o, P p, Q q, R r, S s, T t, U u, V v) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); _check(o); _check(p); _check(q); _check(r); _check(s); _check(t); _check(u); _check(v); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N, class O, class P, class Q, class R, class S, class T, class U, class V, class W> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o, P p, Q q, R r, S s, T t, U u, V v, W w) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); _check(o); _check(p); _check(q); _check(r); _check(s); _check(t); _check(u); _check(v); _check(w); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N, class O, class P, class Q, class R, class S, class T, class U, class V, class W, class X> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o, P p, Q q, R r, S s, T t, U u, V v, W w, X x) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); _check(o); _check(p); _check(q); _check(r); _check(s); _check(t); _check(u); _check(v); _check(w); _check(x); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N, class O, class P, class Q, class R, class S, class T, class U, class V, class W, class X, class Y> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o, P p, Q q, R r, S s, T t, U u, V v, W w, X x, Y y) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); _check(o); _check(p); _check(q); _check(r); _check(s); _check(t); _check(u); _check(v); _check(w); _check(x); _check(y); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y); } \
|
|
||||||
template<class A, class B, class C, class D, class E, class F, class G, class H, class I, class J, class K, class L, class M, class N, class O, class P, class Q, class R, class S, class T, class U, class V, class W, class X, class Y, class Z> __a(const char *fmt, A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l, M m, N n, O o, P p, Q q, R r, S s, T t, U u, V v, W w, X x, Y y, Z z) { _check(a); _check(b); _check(c); _check(d); _check(e); _check(f); _check(g); _check(h); _check(i); _check(j); _check(k); _check(l); _check(m); _check(n); _check(o); _check(p); _check(q); _check(r); _check(s); _check(t); _check(u); _check(v); _check(w); _check(x); _check(y); _check(z); __b(fmt, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z); }
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef NL_OS_WINDOWS
|
|
||||||
inline std::string _toString(const char *format, ...)
|
|
||||||
#else
|
|
||||||
inline std::string toString(const char *format, ...)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
std::string Result;
|
|
||||||
NLMISC_CONVERT_VARGS(Result, format, NLMISC::MaxCStringSize);
|
|
||||||
return Result;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef NL_OS_WINDOWS
|
|
||||||
CHECK_TYPES(std::string toString, return _toString)
|
|
||||||
#endif // NL_OS_WINDOWS
|
|
||||||
|
|
||||||
template<class T> std::string toStringPtr(const T *val) { return toString("%p", val); }
|
|
||||||
|
|
||||||
template<class T> std::string toStringEnum(const T &val) { return toString("%u", (uint32)val); }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Template Object toString.
|
|
||||||
* \param obj any object providing a "std::string toString()" method. The object doesn't have to derive from anything.
|
|
||||||
*
|
|
||||||
* the VC++ error "error C2228: left of '.toString' must have class/struct/union type" means you don't provide
|
|
||||||
* a toString() method to your object.
|
|
||||||
*/
|
|
||||||
template<class T> std::string toString(const T &obj)
|
|
||||||
{
|
|
||||||
return obj.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
//inline std::string toString(const char *val) { return toString("%s", val); }
|
|
||||||
inline std::string toString(const uint8 &val) { return toString("%hu", (uint16)val); }
|
|
||||||
inline std::string toString(const sint8 &val) { return toString("%hd", (sint16)val); }
|
|
||||||
inline std::string toString(const uint16 &val) { return toString("%hu", val); }
|
|
||||||
inline std::string toString(const sint16 &val) { return toString("%hd", val); }
|
|
||||||
inline std::string toString(const uint32 &val) { return toString("%u", val); }
|
|
||||||
inline std::string toString(const sint32 &val) { return toString("%d", val); }
|
|
||||||
inline std::string toString(const uint64 &val) { return toString("%" NL_I64 "u", val); }
|
|
||||||
inline std::string toString(const sint64 &val) { return toString("%" NL_I64 "d", val); }
|
|
||||||
|
|
||||||
#ifdef NL_COMP_GCC
|
|
||||||
# if GCC_VERSION == 40102
|
|
||||||
|
|
||||||
// error fix for size_t? gcc 4.1.2 requested this type instead of size_t ...
|
|
||||||
inline std::string toString(const long unsigned int &val)
|
|
||||||
{
|
|
||||||
#ifdef _LP64
|
|
||||||
return toString((uint64)val);
|
|
||||||
#else
|
|
||||||
return toString((uint32)val);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (SIZEOF_SIZE_T) == 8
|
|
||||||
inline std::string toString(const size_t &val) { return toString("%" NL_I64 "u", val); }
|
|
||||||
#else
|
|
||||||
#ifdef NL_OS_MAC
|
|
||||||
inline std::string toString(const size_t &val) { return toString("%u", val); }
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
inline std::string toString(const float &val) { return toString("%f", val); }
|
|
||||||
inline std::string toString(const double &val) { return toString("%lf", val); }
|
|
||||||
inline std::string toString(const bool &val) { return val ? "1":"0"; }
|
|
||||||
inline std::string toString(const std::string &val) { return val; }
|
|
||||||
|
|
||||||
// stl vectors of bool use bit reference and not real bools, so define the operator for bit reference
|
|
||||||
|
|
||||||
#ifdef NL_COMP_VC6
|
|
||||||
inline std::string toString(const uint &val) { return toString("%u", val); }
|
|
||||||
inline std::string toString(const sint &val) { return toString("%d", val); }
|
|
||||||
#endif // NL_COMP_VC6
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
bool fromString(const std::string &str, T &obj)
|
|
||||||
{
|
|
||||||
return obj.fromString(str);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool fromString(const std::string &str, uint32 &val) { if (str.find('-') != std::string::npos) { val = 0; return false; } char *end; unsigned long v; errno = 0; v = strtoul(str.c_str(), &end, 10); if (errno || v > UINT_MAX || end == str.c_str()) { val = 0; return false; } else { val = (uint32)v; return true; } }
|
|
||||||
inline bool fromString(const std::string &str, sint32 &val) { char *end; long v; errno = 0; v = strtol(str.c_str(), &end, 10); if (errno || v > INT_MAX || v < INT_MIN || end == str.c_str()) { val = 0; return false; } else { val = (sint32)v; return true; } }
|
|
||||||
inline bool fromString(const std::string &str, uint8 &val) { char *end; long v; errno = 0; v = strtol(str.c_str(), &end, 10); if (errno || v > UCHAR_MAX || v < 0 || end == str.c_str()) { val = 0; return false; } else { val = (uint8)v; return true; } }
|
|
||||||
inline bool fromString(const std::string &str, sint8 &val) { char *end; long v; errno = 0; v = strtol(str.c_str(), &end, 10); if (errno || v > SCHAR_MAX || v < SCHAR_MIN || end == str.c_str()) { val = 0; return false; } else { val = (sint8)v; return true; } }
|
|
||||||
inline bool fromString(const std::string &str, uint16 &val) { char *end; long v; errno = 0; v = strtol(str.c_str(), &end, 10); if (errno || v > USHRT_MAX || v < 0 || end == str.c_str()) { val = 0; return false; } else { val = (uint16)v; return true; } }
|
|
||||||
inline bool fromString(const std::string &str, sint16 &val) { char *end; long v; errno = 0; v = strtol(str.c_str(), &end, 10); if (errno || v > SHRT_MAX || v < SHRT_MIN || end == str.c_str()) { val = 0; return false; } else { val = (sint16)v; return true; } }
|
|
||||||
inline bool fromString(const std::string &str, uint64 &val) { bool ret = sscanf(str.c_str(), "%" NL_I64 "u", &val) == 1; if (!ret) val = 0; return ret; }
|
|
||||||
inline bool fromString(const std::string &str, sint64 &val) { bool ret = sscanf(str.c_str(), "%" NL_I64 "d", &val) == 1; if (!ret) val = 0; return ret; }
|
|
||||||
inline bool fromString(const std::string &str, float &val) { bool ret = sscanf(str.c_str(), "%f", &val) == 1; if (!ret) val = 0.0f; return ret; }
|
|
||||||
inline bool fromString(const std::string &str, double &val) { bool ret = sscanf(str.c_str(), "%lf", &val) == 1; if (!ret) val = 0.0; return ret; }
|
|
||||||
|
|
||||||
// Fast string to bool, reliably defined for strings starting with 0, 1, t, T, f, F, y, Y, n, N, anything else is undefined.
|
|
||||||
// (str[0] == '1' || (str[0] & 0xD2) == 0x50)
|
|
||||||
// - Kaetemi
|
|
||||||
|
|
||||||
bool fromString(const std::string &str, bool &val);
|
|
||||||
|
|
||||||
inline bool fromString(const std::string &str, std::string &val) { val = str; return true; }
|
|
||||||
|
|
||||||
// stl vectors of bool use bit reference and not real bools, so define the operator for bit reference
|
|
||||||
|
|
||||||
#ifdef NL_COMP_VC6
|
|
||||||
inline bool fromString(const std::string &str, uint &val) { return sscanf(str.c_str(), "%u", &val) == 1; }
|
|
||||||
inline bool fromString(const std::string &str, sint &val) { return sscanf(str.c_str(), "%d", &val) == 1; }
|
|
||||||
#endif // NL_COMP_VC6
|
|
||||||
|
|
||||||
// Convert local codepage to UTF-8
|
|
||||||
// On Windows, the local codepage is undetermined
|
|
||||||
// On Linux, the local codepage is always UTF-8 (no-op)
|
|
||||||
std::string mbcsToUtf8(const char *str, size_t len = 0);
|
|
||||||
std::string mbcsToUtf8(const std::string &str);
|
|
||||||
|
|
||||||
// Convert wide codepage to UTF-8
|
|
||||||
// On Windows, the wide codepage is UTF-16
|
|
||||||
// On Linux, the wide codepage is UTF-32
|
|
||||||
std::string wideToUtf8(const wchar_t *str, size_t len = 0);
|
|
||||||
std::string wideToUtf8(const std::wstring &str);
|
|
||||||
|
|
||||||
// Convert UTF-8 to wide character set
|
|
||||||
std::wstring utf8ToWide(const char *str, size_t len = 0);
|
|
||||||
std::wstring utf8ToWide(const std::string &str);
|
|
||||||
|
|
||||||
// Convert UTF-8 to local multibyte character set
|
|
||||||
std::string utf8ToMbcs(const char *str, size_t len = 0);
|
|
||||||
std::string utf8ToMbcs(const std::string &str);
|
|
||||||
|
|
||||||
// Convert wide to local multibyte character set
|
|
||||||
std::string wideToMbcs(const wchar_t *str, size_t len = 0);
|
|
||||||
std::string wideToMbcs(const std::wstring &str);
|
|
||||||
|
|
||||||
// Convert local multibyte to wide character set
|
|
||||||
std::wstring mbcsToWide(const char *str, size_t len = 0);
|
|
||||||
std::wstring mbcsToWide(const std::string &str);
|
|
||||||
|
|
||||||
inline const char *asCStr(const char *str) { return str; }
|
|
||||||
inline const char *asCStr(const std::string &str) { return str.c_str(); }
|
|
||||||
inline const wchar_t *asCStr(const wchar_t *str) { return str; }
|
|
||||||
inline const wchar_t *asCStr(const std::wstring &str) { return str.c_str(); }
|
|
||||||
|
|
||||||
#if defined(NL_OS_WINDOWS)
|
|
||||||
#define nlUtf8ToMbcs(str) (NLMISC::utf8ToMbcs(str).c_str())
|
|
||||||
#define nlMbcsToUtf8(str) (NLMISC::mbcsToUtf8(str).c_str())
|
|
||||||
#else
|
|
||||||
#define nlUtf8ToMbcs(str) (NLMISC::asCStr(str))
|
|
||||||
#define nlMbcsToUtf8(str) (NLMISC::asCStr(str))
|
|
||||||
#endif
|
|
||||||
#define nlWideToUtf8(str) (NLMISC::wideToUtf8(str).c_str())
|
|
||||||
#define nlUtf8ToWide(str) (NLMISC::utf8ToWide(str).c_str())
|
|
||||||
#define nlWideToMbcs(str) (NLMISC::wideToMbcs(str).c_str())
|
|
||||||
#define nlMbcsToWide(str) (NLMISC::mbcsToWide(str).c_str())
|
|
||||||
|
|
||||||
// On Windows, tstring is either local multibyte or utf-16 wide
|
|
||||||
// On Linux, tstring is always utf-8
|
|
||||||
|
|
||||||
#if defined(NL_OS_WINDOWS) && (defined(UNICODE) || defined(_UNICODE))
|
|
||||||
typedef std::wstring tstring;
|
|
||||||
typedef wchar_t tchar;
|
|
||||||
inline std::string tStrToUtf8(const tchar *str) { return wideToUtf8((const wchar_t *)str); }
|
|
||||||
inline std::string tStrToUtf8(const tstring &str) { return wideToUtf8((const std::wstring &)str); }
|
|
||||||
inline std::wstring tStrToWide(const tchar *str) { return (const wchar_t *)str; }
|
|
||||||
inline std::wstring tStrToWide(const tstring &str) { return (const std::wstring &)str; }
|
|
||||||
inline std::string tStrToMbcs(const tchar *str) { return wideToMbcs((const wchar_t *)str); }
|
|
||||||
inline std::string tStrToMbcs(const tstring &str) { return wideToMbcs((const std::wstring &)str); }
|
|
||||||
#define nlTStrToUtf8(str) (NLMISC::tStrToUtf8(str).c_str())
|
|
||||||
#define nlTStrToWide(str) ((const wchar_t *)NLMISC::asCStr(str))
|
|
||||||
#define nlTStrToMbcs(str) (NLMISC::tStrToMbcs(str).c_str())
|
|
||||||
inline tstring utf8ToTStr(const char *str) {return (const tstring &)utf8ToWide(str); }
|
|
||||||
inline tstring utf8ToTStr(const std::string &str) { return (const tstring &)utf8ToWide(str); }
|
|
||||||
inline tstring wideToTStr(const wchar_t *str) { return (const tchar *)str; }
|
|
||||||
inline tstring wideToTStr(const std::wstring &str) { return (const tstring &)str; }
|
|
||||||
inline tstring mbcsToTStr(const char *str) { return (const tstring &)mbcsToWide(str); }
|
|
||||||
inline tstring mbcsToTStr(const std::string &str) { return (const tstring &)mbcsToWide(str); }
|
|
||||||
#define nlUtf8ToTStr(str) (NLMISC::utf8ToTStr(str).c_str())
|
|
||||||
#define nlWideToTStr(str) ((const tchar *)NLMISC::asCStr(str))
|
|
||||||
#define nlMbcsToTStr(str) (NLMISC::mbcsToTStr(str).c_str())
|
|
||||||
#else
|
|
||||||
typedef std::string tstring;
|
|
||||||
typedef char tchar;
|
|
||||||
inline std::string tStrToUtf8(const tchar *str) { return mbcsToUtf8((const char *)str); }
|
|
||||||
inline std::string tStrToUtf8(const tstring &str) { return mbcsToUtf8((const std::string &)str); }
|
|
||||||
inline std::wstring tStrToWide(const tchar *str) { return mbcsToWide((const char *)str); }
|
|
||||||
inline std::wstring tStrToWide(const tstring &str) { return mbcsToWide((const std::string &)str); }
|
|
||||||
inline std::string tStrToMbcs(const tchar *str) { return (const char *)str; }
|
|
||||||
inline std::string tStrToMbcs(const tstring &str) { return (const std::string &)str; }
|
|
||||||
#if defined(NL_OS_WINDOWS)
|
|
||||||
#define nlTStrToUtf8(str) (NLMISC::tStrToUtf8(str).c_str())
|
|
||||||
#else
|
|
||||||
#define nlTStrToUtf8(str) ((const char *)NLMISC::asCStr(str))
|
|
||||||
#endif
|
|
||||||
#define nlTStrToWide(str) (NLMISC::tStrToWide(str).c_str())
|
|
||||||
#define nlTStrToMbcs(str) ((const char *)NLMISC::asCStr(str))
|
|
||||||
inline tstring utf8ToTStr(const char *str) { return (const tstring &)utf8ToMbcs(str); }
|
|
||||||
inline tstring utf8ToTStr(const std::string &str) { return (const tstring &)utf8ToMbcs(str); }
|
|
||||||
inline tstring wideToTStr(const wchar_t *str) { return (const tstring &)wideToMbcs(str); }
|
|
||||||
inline tstring wideToTStr(const std::wstring &str) { return (const tstring &)wideToMbcs(str); }
|
|
||||||
inline tstring mbcsToTStr(const char *str) { return (const tchar *)str; }
|
|
||||||
inline tstring mbcsToTStr(const std::string &str) { return (const tstring &)str; }
|
|
||||||
#if defined(NL_OS_WINDOWS)
|
|
||||||
#define nlUtf8ToTStr(str) (NLMISC::utf8ToTStr(str).c_str())
|
|
||||||
#else
|
|
||||||
#define nlUtf8ToTStr(str) ((const tchar *)NLMISC::asCStr(str))
|
|
||||||
#endif
|
|
||||||
#define nlWideToTStr(str) (NLMISC::wideToTStr(str).c_str())
|
|
||||||
#define nlMbcsToTStr(str) ((const tchar *)NLMISC::asCStr(str))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} // NLMISC
|
|
||||||
|
|
||||||
#endif // NL_STRING_COMMON_H
|
|
@ -1,190 +0,0 @@
|
|||||||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
|
||||||
// Copyright (C) 2010 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 STRING_MAPPER_H
|
|
||||||
#define STRING_MAPPER_H
|
|
||||||
|
|
||||||
#include "types_nl.h"
|
|
||||||
#include "stream.h"
|
|
||||||
#include "mutex.h"
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <set>
|
|
||||||
|
|
||||||
namespace NLMISC
|
|
||||||
{
|
|
||||||
|
|
||||||
// const string * as uint (the TStringId returned by CStringMapper is a pointer to a string object)
|
|
||||||
//#ifdef HAVE_X86_64
|
|
||||||
//typedef uint64 TStringId;
|
|
||||||
//#else
|
|
||||||
//typedef uint TStringId;
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
typedef const std::string *TStringId;
|
|
||||||
|
|
||||||
// Traits for hash_map using CStringId
|
|
||||||
struct CStringIdHashMapTraits
|
|
||||||
{
|
|
||||||
enum { bucket_size = 4, min_buckets = 8 };
|
|
||||||
CStringIdHashMapTraits() { }
|
|
||||||
size_t operator() (const NLMISC::TStringId &stringId) const
|
|
||||||
{
|
|
||||||
return (size_t)stringId;
|
|
||||||
}
|
|
||||||
bool operator() (const NLMISC::TStringId &strId1, const NLMISC::TStringId &strId2) const
|
|
||||||
{
|
|
||||||
return (size_t)strId1 < (size_t)strId2;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/** A static class that map string to integer and vice-versa
|
|
||||||
* Each different string is tranformed into an unique integer identifier.
|
|
||||||
* If the same string is submited twice, the same id is returned.
|
|
||||||
* The class can also return the string associated with an id.
|
|
||||||
*
|
|
||||||
* \author Boris Boucher
|
|
||||||
* \author Nevrax France
|
|
||||||
* \date 2003
|
|
||||||
*/
|
|
||||||
class CStringMapper
|
|
||||||
{
|
|
||||||
class CCharComp
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
bool operator()(std::string *x, std::string *y) const
|
|
||||||
{
|
|
||||||
return (*x) < (*y);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
class CAutoFastMutex
|
|
||||||
{
|
|
||||||
CFastMutex *_Mutex;
|
|
||||||
public:
|
|
||||||
CAutoFastMutex(CFastMutex *mtx) : _Mutex(mtx) {_Mutex->enter();}
|
|
||||||
~CAutoFastMutex() {_Mutex->leave();}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Local Data
|
|
||||||
std::set<std::string*,CCharComp> _StringTable;
|
|
||||||
std::string* _EmptyId;
|
|
||||||
CFastMutex _Mutex; // Must be thread-safe (Called by CPortal/CCluster, each of them called by CInstanceGroup)
|
|
||||||
|
|
||||||
// The 'singleton' for static methods
|
|
||||||
static CStringMapper _GlobalMapper;
|
|
||||||
|
|
||||||
// private constructor.
|
|
||||||
CStringMapper();
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
~CStringMapper()
|
|
||||||
{
|
|
||||||
localClear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Globaly map a string into a unique Id. ** This method IS Thread-Safe **
|
|
||||||
static TStringId map(const std::string &str) { return _GlobalMapper.localMap(str); }
|
|
||||||
/// Globaly unmap a string. ** This method IS Thread-Safe **
|
|
||||||
static const std::string &unmap(const TStringId &stringId) { return _GlobalMapper.localUnmap(stringId); }
|
|
||||||
/// Globaly helper to serial a string id. ** This method IS Thread-Safe **
|
|
||||||
static void serialString(NLMISC::IStream &f, TStringId &id) {_GlobalMapper.localSerialString(f, id);}
|
|
||||||
/// Return the global id for the empty string (helper function). NB: Works with every instance of CStringMapper
|
|
||||||
static TStringId emptyId() { return 0; }
|
|
||||||
|
|
||||||
// ** This method IS Thread-Safe **
|
|
||||||
static void clear() { _GlobalMapper.localClear(); }
|
|
||||||
|
|
||||||
/// Create a local mapper. You can dispose of it by deleting it.
|
|
||||||
static CStringMapper * createLocalMapper();
|
|
||||||
/// Localy map a string into a unique Id
|
|
||||||
TStringId localMap(const std::string &str);
|
|
||||||
/// Localy unmap a string
|
|
||||||
const std::string &localUnmap(const TStringId &stringId) { return (stringId==0)?*_EmptyId:*((std::string*)stringId); }
|
|
||||||
/// Localy helper to serial a string id
|
|
||||||
void localSerialString(NLMISC::IStream &f, TStringId &id);
|
|
||||||
|
|
||||||
void localClear();
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
// linear from 0 (0 is empty string) (The TSStringId returned by CStaticStringMapper
|
|
||||||
// is an index in the vector and begin at 0)
|
|
||||||
typedef uint TSStringId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* After endAdd you cannot add strings anymore or it will assert
|
|
||||||
* \author Matthieu Besson
|
|
||||||
* \author Nevrax France
|
|
||||||
* \date November 2003
|
|
||||||
*/
|
|
||||||
class CStaticStringMapper
|
|
||||||
{
|
|
||||||
|
|
||||||
std::map<std::string, TSStringId> _TempStringTable;
|
|
||||||
std::map<TSStringId, std::string> _TempIdTable;
|
|
||||||
|
|
||||||
uint32 _IdCounter;
|
|
||||||
char *_AllStrings;
|
|
||||||
std::vector<char*> _IdToStr;
|
|
||||||
bool _MemoryCompressed; // If false use the 2 maps
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
CStaticStringMapper()
|
|
||||||
{
|
|
||||||
_IdCounter = 0;
|
|
||||||
_AllStrings = NULL;
|
|
||||||
_MemoryCompressed = false;
|
|
||||||
add("");
|
|
||||||
}
|
|
||||||
|
|
||||||
~CStaticStringMapper()
|
|
||||||
{
|
|
||||||
clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Globaly map a string into a unique Id
|
|
||||||
TSStringId add(const std::string &str);
|
|
||||||
|
|
||||||
// see if a string is already present in the map
|
|
||||||
bool isAdded(const std::string &str) const;
|
|
||||||
|
|
||||||
void memoryCompress();
|
|
||||||
// Uncompress the map.
|
|
||||||
void memoryUncompress();
|
|
||||||
/// Globaly unmap a string
|
|
||||||
const char * get(TSStringId stringId);
|
|
||||||
/// Return the global id for the empty string (helper function)
|
|
||||||
static TSStringId emptyId() { return 0; }
|
|
||||||
|
|
||||||
void clear();
|
|
||||||
|
|
||||||
uint32 getCount() { return _IdCounter; }
|
|
||||||
|
|
||||||
// helper serialize a string id as a string
|
|
||||||
void serial(NLMISC::IStream &f, TSStringId &strId);
|
|
||||||
|
|
||||||
// helper serialize a string id vector
|
|
||||||
void serial(NLMISC::IStream &f, std::vector<TSStringId> &strIdVect);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
} //namespace NLMISC
|
|
||||||
|
|
||||||
#endif // STRING_MAPPER_H
|
|
||||||
|
|
@ -1,390 +0,0 @@
|
|||||||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
|
||||||
// Copyright (C) 2010 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_UCSTRING_H
|
|
||||||
#define NL_UCSTRING_H
|
|
||||||
|
|
||||||
#include "types_nl.h"
|
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \typedef ucstring
|
|
||||||
* An unicode string class (16 bits per character).
|
|
||||||
* Add features to convert and assign \c ucstring to \c string and \c string to \c ucstring.
|
|
||||||
*/
|
|
||||||
typedef std::basic_string<ucchar> ucstringbase;
|
|
||||||
|
|
||||||
class ucstring : public ucstringbase
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
ucstring () {}
|
|
||||||
|
|
||||||
ucstring (const ucstringbase &str) : ucstringbase (str) {}
|
|
||||||
|
|
||||||
ucstring (const std::string &str) : ucstringbase ()
|
|
||||||
{
|
|
||||||
rawCopy(str);
|
|
||||||
}
|
|
||||||
|
|
||||||
~ucstring () {}
|
|
||||||
|
|
||||||
ucstring &operator= (ucchar c)
|
|
||||||
{
|
|
||||||
resize (1);
|
|
||||||
operator[](0) = c;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
ucstring &operator= (const char *str)
|
|
||||||
{
|
|
||||||
resize (strlen (str));
|
|
||||||
for (uint i = 0; i < strlen (str); i++)
|
|
||||||
{
|
|
||||||
operator[](i) = uint8(str[i]);
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
ucstring &operator= (const std::string &str)
|
|
||||||
{
|
|
||||||
resize (str.size ());
|
|
||||||
for (uint i = 0; i < str.size (); i++)
|
|
||||||
{
|
|
||||||
operator[](i) = uint8(str[i]);
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
ucstring &operator= (const ucstringbase &str)
|
|
||||||
{
|
|
||||||
ucstringbase::operator =(str);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
ucstring& operator= (const ucchar *str)
|
|
||||||
{
|
|
||||||
ucstringbase::operator =(str);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
ucstring &operator+= (ucchar c)
|
|
||||||
{
|
|
||||||
resize (size() + 1);
|
|
||||||
operator[](size()-1) = c;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
ucstring &operator+= (const char *str)
|
|
||||||
{
|
|
||||||
size_t s = size();
|
|
||||||
resize (s + strlen(str));
|
|
||||||
for (uint i = 0; i < strlen(str); i++)
|
|
||||||
{
|
|
||||||
operator[](s+i) = uint8(str[i]);
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
ucstring &operator+= (const std::string &str)
|
|
||||||
{
|
|
||||||
size_t s = size();
|
|
||||||
resize (s + str.size());
|
|
||||||
for (uint i = 0; i < str.size(); i++)
|
|
||||||
{
|
|
||||||
operator[](s+i) = uint8(str[i]);
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
ucstring &operator+= (const ucstringbase &str)
|
|
||||||
{
|
|
||||||
ucstringbase::operator +=(str);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
const ucchar *c_str() const
|
|
||||||
{
|
|
||||||
const ucchar *tmp = ucstringbase::c_str();
|
|
||||||
const_cast<ucchar*>(tmp)[size()] = 0;
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Converts the controlled ucstring to a string str
|
|
||||||
void toString (std::string &str) const
|
|
||||||
{
|
|
||||||
str.resize (size ());
|
|
||||||
for (uint i = 0; i < str.size (); i++)
|
|
||||||
{
|
|
||||||
if (operator[](i) > 255)
|
|
||||||
str[i] = '?';
|
|
||||||
else
|
|
||||||
str[i] = (char) operator[](i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Converts the controlled ucstring and returns the resulting string
|
|
||||||
std::string toString () const
|
|
||||||
{
|
|
||||||
std::string str;
|
|
||||||
toString(str);
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Convert this ucstring (16bits char) into a utf8 string
|
|
||||||
std::string toUtf8() const
|
|
||||||
{
|
|
||||||
std::string res;
|
|
||||||
ucstring::const_iterator first(begin()), last(end());
|
|
||||||
for (; first != last; ++first)
|
|
||||||
{
|
|
||||||
//ucchar c = *first;
|
|
||||||
uint nbLoop = 0;
|
|
||||||
if (*first < 0x80)
|
|
||||||
res += char(*first);
|
|
||||||
else if (*first < 0x800)
|
|
||||||
{
|
|
||||||
ucchar c = *first;
|
|
||||||
c = c >> 6;
|
|
||||||
c = c & 0x1F;
|
|
||||||
res += char(c) | 0xC0;
|
|
||||||
nbLoop = 1;
|
|
||||||
}
|
|
||||||
else /*if (*first < 0x10000)*/
|
|
||||||
{
|
|
||||||
ucchar c = *first;
|
|
||||||
c = c >> 12;
|
|
||||||
c = c & 0x0F;
|
|
||||||
res += char(c) | 0xE0;
|
|
||||||
nbLoop = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (uint i=0; i<nbLoop; ++i)
|
|
||||||
{
|
|
||||||
ucchar c = *first;
|
|
||||||
c = c >> ((nbLoop - i - 1) * 6);
|
|
||||||
c = c & 0x3F;
|
|
||||||
res += char(c) | 0x80;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
ucstring substr(size_type pos = 0, size_type n = npos) const
|
|
||||||
{
|
|
||||||
return ucstringbase::substr(pos, n);
|
|
||||||
}
|
|
||||||
|
|
||||||
// for luabind (can't bind to 'substr' else ...)
|
|
||||||
ucstring luabind_substr(size_type pos = 0, size_type n = npos) const
|
|
||||||
{
|
|
||||||
return ucstringbase::substr(pos, n);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Convert the utf8 string into this ucstring (16 bits char)
|
|
||||||
void fromUtf8(const std::string &stringUtf8)
|
|
||||||
{
|
|
||||||
// clear the string
|
|
||||||
erase();
|
|
||||||
|
|
||||||
uint8 c;
|
|
||||||
ucchar code;
|
|
||||||
sint iterations = 0;
|
|
||||||
|
|
||||||
std::string::const_iterator first(stringUtf8.begin()), last(stringUtf8.end());
|
|
||||||
for (; first != last; )
|
|
||||||
{
|
|
||||||
c = *first++;
|
|
||||||
code = c;
|
|
||||||
|
|
||||||
if ((code & 0xFE) == 0xFC)
|
|
||||||
{
|
|
||||||
code &= 0x01;
|
|
||||||
iterations = 5;
|
|
||||||
}
|
|
||||||
else if ((code & 0xFC) == 0xF8)
|
|
||||||
{
|
|
||||||
code &= 0x03;
|
|
||||||
iterations = 4;
|
|
||||||
}
|
|
||||||
else if ((code & 0xF8) == 0xF0)
|
|
||||||
{
|
|
||||||
code &= 0x07;
|
|
||||||
iterations = 3;
|
|
||||||
}
|
|
||||||
else if ((code & 0xF0) == 0xE0)
|
|
||||||
{
|
|
||||||
code &= 0x0F;
|
|
||||||
iterations = 2;
|
|
||||||
}
|
|
||||||
else if ((code & 0xE0) == 0xC0)
|
|
||||||
{
|
|
||||||
code &= 0x1F;
|
|
||||||
iterations = 1;
|
|
||||||
}
|
|
||||||
else if ((code & 0x80) == 0x80)
|
|
||||||
{
|
|
||||||
// If it's not a valid UTF8 string, just copy the line without utf8 conversion
|
|
||||||
rawCopy(stringUtf8);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
push_back(code);
|
|
||||||
iterations = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (iterations)
|
|
||||||
{
|
|
||||||
for (sint i = 0; i < iterations; i++)
|
|
||||||
{
|
|
||||||
if (first == last)
|
|
||||||
{
|
|
||||||
// If it's not a valid UTF8 string, just copy the line without utf8 conversion
|
|
||||||
rawCopy(stringUtf8);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8 ch;
|
|
||||||
ch = *first ++;
|
|
||||||
|
|
||||||
if ((ch & 0xC0) != 0x80)
|
|
||||||
{
|
|
||||||
// If it's not a valid UTF8 string, just copy the line without utf8 conversion
|
|
||||||
rawCopy(stringUtf8);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
code <<= 6;
|
|
||||||
code |= (ucchar)(ch & 0x3F);
|
|
||||||
}
|
|
||||||
push_back(code);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static ucstring makeFromUtf8(const std::string &stringUtf8)
|
|
||||||
{
|
|
||||||
ucstring ret;
|
|
||||||
ret.fromUtf8(stringUtf8);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
void rawCopy(const std::string &str)
|
|
||||||
{
|
|
||||||
// We need to convert the char into 8bits unsigned int before promotion to 16 bits
|
|
||||||
// otherwise, as char are signed on some compiler (MSCV for ex), the sign bit is extended to 16 bits.
|
|
||||||
resize(str.size());
|
|
||||||
std::string::const_iterator first(str.begin()), last(str.end());
|
|
||||||
iterator dest(begin());
|
|
||||||
for (;first != last; ++first, ++dest)
|
|
||||||
{
|
|
||||||
*dest = uint8(*first);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
inline ucstring operator+(const ucstringbase &ucstr, ucchar c)
|
|
||||||
{
|
|
||||||
ucstring ret;
|
|
||||||
ret= ucstr;
|
|
||||||
ret+= c;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline ucstring operator+(const ucstringbase &ucstr, const char *c)
|
|
||||||
{
|
|
||||||
ucstring ret;
|
|
||||||
ret= ucstr;
|
|
||||||
ret+= c;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline ucstring operator+(const ucstringbase &ucstr, const std::string &c)
|
|
||||||
{
|
|
||||||
ucstring ret;
|
|
||||||
ret= ucstr;
|
|
||||||
ret+= c;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline ucstring operator+(ucchar c, const ucstringbase &ucstr)
|
|
||||||
{
|
|
||||||
ucstring ret;
|
|
||||||
ret= c;
|
|
||||||
ret += ucstr;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline ucstring operator+(const char *c, const ucstringbase &ucstr)
|
|
||||||
{
|
|
||||||
ucstring ret;
|
|
||||||
ret= c;
|
|
||||||
ret += ucstr;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline ucstring operator+(const std::string &c, const ucstringbase &ucstr)
|
|
||||||
{
|
|
||||||
ucstring ret;
|
|
||||||
ret= c;
|
|
||||||
ret += ucstr;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace NLMISC
|
|
||||||
{
|
|
||||||
|
|
||||||
// Traits for hash_map using CEntityId
|
|
||||||
struct CUCStringHashMapTraits
|
|
||||||
{
|
|
||||||
enum { bucket_size = 4, min_buckets = 8 };
|
|
||||||
CUCStringHashMapTraits() { }
|
|
||||||
size_t operator() (const ucstring &id ) const
|
|
||||||
{
|
|
||||||
return id.size();
|
|
||||||
}
|
|
||||||
bool operator() (const ucstring &id1, const ucstring &id2) const
|
|
||||||
{
|
|
||||||
return id1 < id2;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Convert an unicode string in lower case.
|
|
||||||
* Characters with accent are converted in a lowercase character with accent
|
|
||||||
* \param a string or a char to transform to lower case
|
|
||||||
*/
|
|
||||||
|
|
||||||
ucstring toLower (const ucstring &str);
|
|
||||||
void toLower (ucchar *str);
|
|
||||||
ucchar toLower (ucchar c);
|
|
||||||
|
|
||||||
/** Convert an unicode string in upper case.
|
|
||||||
* Characters with accent are converted in a uppercase character without accent
|
|
||||||
* \param a string or a char to transform to upper case
|
|
||||||
*/
|
|
||||||
|
|
||||||
ucstring toUpper (const ucstring &str);
|
|
||||||
void toUpper (ucchar *str);
|
|
||||||
ucchar toUpper (ucchar c);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // NL_UCSTRING_H
|
|
@ -1,596 +0,0 @@
|
|||||||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
|
||||||
// Copyright (C) 2010 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_SERVICE_H
|
|
||||||
#define NL_SERVICE_H
|
|
||||||
|
|
||||||
//
|
|
||||||
// Includes
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "nel/misc/types_nl.h"
|
|
||||||
|
|
||||||
#include "nel/misc/config_file.h"
|
|
||||||
#include "nel/misc/entity_id.h"
|
|
||||||
#include "nel/misc/variable.h"
|
|
||||||
#include "nel/misc/command.h"
|
|
||||||
#include "nel/misc/entity_id.h"
|
|
||||||
#include "nel/misc/cpu_time_stat.h"
|
|
||||||
#include "nel/misc/sstring.h"
|
|
||||||
|
|
||||||
#include "unified_network.h"
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
namespace NLMISC
|
|
||||||
{
|
|
||||||
class CWindowDisplayer;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(NL_OS_WINDOWS) && defined(_WINDOWS)
|
|
||||||
#ifndef WINAPI
|
|
||||||
#define WINAPI __stdcall
|
|
||||||
#endif
|
|
||||||
#ifndef APIENTRY
|
|
||||||
#define APIENTRY WINAPI
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct HINSTANCE__;
|
|
||||||
typedef struct HINSTANCE__ *HINSTANCE;
|
|
||||||
|
|
||||||
typedef char CHAR;
|
|
||||||
typedef wchar_t WCHAR;
|
|
||||||
|
|
||||||
typedef CHAR *LPSTR;
|
|
||||||
typedef WCHAR *LPWSTR;
|
|
||||||
|
|
||||||
#if defined(UNICODE) || defined(_UNICODE)
|
|
||||||
typedef LPWSTR LPTSTR;
|
|
||||||
#else
|
|
||||||
typedef LPSTR LPTSTR;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace NLNET
|
|
||||||
{
|
|
||||||
|
|
||||||
class CCallbackServer;
|
|
||||||
class IServiceUpdatable;
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Macros
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The goal of this macro is to simplify the service creation, it creates the main body function.
|
|
||||||
*
|
|
||||||
* If you don't want to give a callback array, just put EmptyCallbackArray in the last argument
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
*\code
|
|
||||||
// Create the Test Service class
|
|
||||||
class CTestService : public IService
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void init () { nlinfo("init()"); }
|
|
||||||
bool update () { nlinfo ("update();"); return true; }
|
|
||||||
void release () { nlinfo("release()"); }
|
|
||||||
};
|
|
||||||
// Create the main() function that create a test service instance and execute it.
|
|
||||||
// "TS" is the short service name and "test_service" is the long one.
|
|
||||||
// The name of the config file is based on the long name!
|
|
||||||
// EmptyCallbackArray means that you don't provide right now the callback
|
|
||||||
// the last 2 path are where is the config file is (directory) and where to log info (directory)
|
|
||||||
NLNET_SERVICE_MAIN(CTestService, "TS", "test_service", 0, EmptyCallbackArray, "", "");
|
|
||||||
*\endcode
|
|
||||||
*
|
|
||||||
* If you want the port to not be auto-assigned by the naming service, set the port to a number different than 0.
|
|
||||||
*
|
|
||||||
* Args used by service are always in lower case:
|
|
||||||
*
|
|
||||||
* -A followed by the path where to execute the service (it uses chdir())
|
|
||||||
* -B followed by the IP address where the naming service is
|
|
||||||
* -C followed by the path where we can find the config file
|
|
||||||
* -D followed by the client listening address of the frontend for the login system (FS only)
|
|
||||||
* -I to start the service iconified
|
|
||||||
* -L followed by the directory where we have to log
|
|
||||||
* -N followed by the alias name (used by the admin system)
|
|
||||||
* -P followed by the listen port (ListenAddress)
|
|
||||||
* -Q to make the service quit immediately after the first update
|
|
||||||
* -S followed by the shard Id (sint32) (WS only)
|
|
||||||
* -T followed by the IP address where the login service is (WS only)
|
|
||||||
* -W followed by the path where to save all shard data (SaveFilesDirectory)
|
|
||||||
* -Z[u] to just init the config file then return (used for test), use Zu to not release the service
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#if defined(NL_OS_WINDOWS) && defined(_WINDOWS)
|
|
||||||
#define NLNET_SERVICE_MAIN(__ServiceClassName, __ServiceShortName, __ServiceLongName, __ServicePort, __ServiceCallbackArray, __ConfigDir, __LogDir) \
|
|
||||||
\
|
|
||||||
int APIENTRY nltWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) \
|
|
||||||
{ \
|
|
||||||
NLMISC::CApplicationContext serviceContext; \
|
|
||||||
__ServiceClassName *scn = new __ServiceClassName; \
|
|
||||||
scn->setArgs (nlTStrToUtf8(lpCmdLine)); \
|
|
||||||
createDebug(NULL,!scn->haveLongArg("nolog"));\
|
|
||||||
scn->setCallbackArray (__ServiceCallbackArray, sizeof(__ServiceCallbackArray)/sizeof(__ServiceCallbackArray[0])); \
|
|
||||||
sint retval = scn->main (__ServiceShortName, __ServiceLongName, __ServicePort, __ConfigDir, __LogDir, __DATE__ " " __TIME__); \
|
|
||||||
delete scn; \
|
|
||||||
return retval; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
#define NLNET_SERVICE_MAIN(__ServiceClassName, __ServiceShortName, __ServiceLongName, __ServicePort, __ServiceCallbackArray, __ConfigDir, __LogDir) \
|
|
||||||
\
|
|
||||||
int nltmain(int argc, const NLMISC::tchar **argv) \
|
|
||||||
{ \
|
|
||||||
NLMISC::CApplicationContext serviceContext; \
|
|
||||||
__ServiceClassName *scn = new __ServiceClassName; \
|
|
||||||
scn->setArgs (argc, argv); \
|
|
||||||
createDebug(NULL,!scn->haveLongArg("nolog"));\
|
|
||||||
scn->setCallbackArray (__ServiceCallbackArray, sizeof(__ServiceCallbackArray)/sizeof(__ServiceCallbackArray[0])); \
|
|
||||||
sint retval = scn->main (__ServiceShortName, __ServiceLongName, __ServicePort, __ConfigDir, __LogDir, __DATE__ " " __TIME__); \
|
|
||||||
delete scn; \
|
|
||||||
return retval; \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define DEFAULT_SHARD_ID 666
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Typedefs
|
|
||||||
//
|
|
||||||
|
|
||||||
//typedef uint16 TServiceId;
|
|
||||||
|
|
||||||
/// Callback where you can return true for direct clearance, or false for later clearance.
|
|
||||||
typedef bool (*TRequestClosureClearanceCallback) ();
|
|
||||||
|
|
||||||
//
|
|
||||||
// Variables provided to application and unused in the NeL library itself.
|
|
||||||
//
|
|
||||||
|
|
||||||
extern TUnifiedCallbackItem EmptyCallbackArray[1];
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
// Classes
|
|
||||||
//
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base class for all network services.
|
|
||||||
* You must inherite from this class to create your own service. You must not
|
|
||||||
* create ctor and dtor but implement init() and release() methods.
|
|
||||||
* You have to create a global callback array called CallbackArray.
|
|
||||||
*
|
|
||||||
* \ref service_howto
|
|
||||||
*
|
|
||||||
* Temporary command line arguments :
|
|
||||||
* \li -n<AliasName>
|
|
||||||
*
|
|
||||||
* \author Vianney Lecroart
|
|
||||||
* \author Olivier Cado
|
|
||||||
* \author Nevrax France
|
|
||||||
* \date 2000
|
|
||||||
*/
|
|
||||||
class IService
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
/// \name User overload methods. These methods can be overload by the user do handle init, update and release operation.
|
|
||||||
// @{
|
|
||||||
|
|
||||||
/** Called before the displayer is created, no displayer or network connection are built.
|
|
||||||
Use this callback to check some args and perform some command line based stuff */
|
|
||||||
virtual void commandStart () {}
|
|
||||||
|
|
||||||
/// Initializes the service (must be called before the first call to update())
|
|
||||||
virtual void init () {}
|
|
||||||
|
|
||||||
/// This function is called every "frame" (you must call init() before). It returns false if the service is stopped.
|
|
||||||
virtual bool update () { return true; }
|
|
||||||
|
|
||||||
/// Finalization. Release the service. For example, this function frees all allocations made in the init() function.
|
|
||||||
virtual void release () {}
|
|
||||||
|
|
||||||
//@}
|
|
||||||
|
|
||||||
|
|
||||||
/// \name get methods. These methods provide a way to read internal service variables.
|
|
||||||
// @{
|
|
||||||
|
|
||||||
/// Returns the instance of the service to access to methods/variables class
|
|
||||||
static IService *getInstance ();
|
|
||||||
|
|
||||||
/// Returns true if the service singleton has been initialized
|
|
||||||
static bool isServiceInitialized() { return _Instance != NULL; }
|
|
||||||
|
|
||||||
/// Returns the current service short name (ie: TS)
|
|
||||||
const std::string &getServiceShortName () const { return _ShortName; }
|
|
||||||
|
|
||||||
/// Returns the current service long name (ie: test_serivce)
|
|
||||||
const std::string &getServiceLongName () const { return _LongName; }
|
|
||||||
|
|
||||||
/// Returns the current service alias name setted by AES
|
|
||||||
const std::string &getServiceAliasName () const { return _AliasName; }
|
|
||||||
|
|
||||||
/// Returns the current service unified name that is alias/short-id or short-id if alias is empty
|
|
||||||
std::string getServiceUnifiedName () const;
|
|
||||||
|
|
||||||
/// Returns the service identifier
|
|
||||||
TServiceId getServiceId () const { return _SId; }
|
|
||||||
|
|
||||||
/// Return the host name of the host machine
|
|
||||||
const std::string &getHostName() const { return _HostName; }
|
|
||||||
|
|
||||||
/// Returns the status
|
|
||||||
sint getExitStatus () const { return _ExitStatus; }
|
|
||||||
|
|
||||||
/// Returns the date of launch of the service. Unit: see CTime::getSecondsSince1970()
|
|
||||||
uint32 getLaunchingDate () const;
|
|
||||||
|
|
||||||
/// Return true if this service don't use the NS (naming service)
|
|
||||||
bool getDontUseNS() const { return _DontUseNS; }
|
|
||||||
|
|
||||||
/// Return true if this service don't use the AES (admin executor service)
|
|
||||||
bool getDontUseAES() const { return _DontUseAES; }
|
|
||||||
|
|
||||||
/// Returns arguments of the program pass from the user to the program using parameters (ie: "myprog param1 param2")
|
|
||||||
const NLMISC::CVectorSString &getArgs () const { return _Args; }
|
|
||||||
|
|
||||||
/// Returns true if the argument if present in the command line (ie: haveArg('p') will return true if -p is in the command line)
|
|
||||||
bool haveArg (char argName) const;
|
|
||||||
|
|
||||||
/** Returns the parameter linked to an option
|
|
||||||
* getArg('p') will return toto if -ptoto is in the command line
|
|
||||||
* getArg('p') will return C:\Documents and Settings\toto.tmp if -p"C:\Documents and Settings\toto.tmp" is in the command line
|
|
||||||
* It'll thrown an Exception if the argName is not found
|
|
||||||
*/
|
|
||||||
std::string getArg (char argName) const;
|
|
||||||
|
|
||||||
/// return true if named long arg is present on the commandline
|
|
||||||
/// eg haveLongArg("toto") returns true if "--toto" or "--toto=xxx" can be found on commandline
|
|
||||||
bool haveLongArg (const char* argName) const;
|
|
||||||
|
|
||||||
/// returns the value associated with the given named argument
|
|
||||||
/// both "--toto=xxx" and "--toto xxx" are acceptable
|
|
||||||
/// quotes round arguments are stripped
|
|
||||||
std::string getLongArg (const char* argName) const;
|
|
||||||
|
|
||||||
/// Returns an uniq id for an entities on this service.
|
|
||||||
/*uint64 getEntityId (uint8 type)
|
|
||||||
{
|
|
||||||
return NLMISC::CEntityId::getNewEntityId( type ).getRawId();
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/// Returns the recording state (don't needed if you use layer5)
|
|
||||||
CCallbackNetBase::TRecordingState getRecordingState() const { return _RecordingState; }
|
|
||||||
|
|
||||||
|
|
||||||
//@}
|
|
||||||
|
|
||||||
|
|
||||||
/// \name set methods. These methods provide a way to modify internal service variables.
|
|
||||||
// @{
|
|
||||||
|
|
||||||
/** Sets the status of the service, this status is return to the application. EXIT_SUCCESS is the default status
|
|
||||||
* You can set it to EXIT_FAILURE or any value you want. It's useful when you use the service in a script and you
|
|
||||||
* want to know the return value of the application to do the appropriate things.
|
|
||||||
*/
|
|
||||||
void setExitStatus (sint exitStatus) { _ExitStatus = exitStatus; }
|
|
||||||
|
|
||||||
/** Call this function if you want the service quits next loop. The code will be returned outside of the application.
|
|
||||||
* \warning If you set the code to 0, it ll NOT exit the service */
|
|
||||||
void exit (sint code = 0x10);
|
|
||||||
|
|
||||||
/** Selects timeout value in seconds for each update. You are absolutely certain that your update()
|
|
||||||
* function will not be called before this amount of time you set.
|
|
||||||
* If you set the update timeout value higher than 0, all messages in queues will be process until the time greater than the timeout user update().
|
|
||||||
* If you set the update timeout value to 0, all messages in queues will be process one time before calling the user update().
|
|
||||||
*
|
|
||||||
* The default value is 100 (100ms) or the value found in the config file (UpdateTimeout)
|
|
||||||
*/
|
|
||||||
void setUpdateTimeout (NLMISC::TTime timeout) { /*if (timeout>1.0) nlerror ("IServer::setUpdateTimeout is now a double in SECOND and not ms");*/ _UpdateTimeout = timeout; }
|
|
||||||
|
|
||||||
//@}
|
|
||||||
|
|
||||||
//@{
|
|
||||||
//@name Service status management methods
|
|
||||||
/// Push a new status on the status stack.
|
|
||||||
void setCurrentStatus(const std::string &status);
|
|
||||||
/// Remove a status from the status stack. If this status is at top of stack, the next status become the current status
|
|
||||||
void clearCurrentStatus(const std::string &status);
|
|
||||||
/// Add a tag in the status string
|
|
||||||
void addStatusTag(const std::string &statusTag);
|
|
||||||
/// Remove a tag from the status string
|
|
||||||
void removeStatusTag(const std::string &statusTag);
|
|
||||||
/// Get the current status with attached tags
|
|
||||||
std::string getFullStatus() const;
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/// \name variables. These variables can be read/modified by the user.
|
|
||||||
// @{
|
|
||||||
|
|
||||||
NLMISC::CConfigFile ConfigFile;
|
|
||||||
|
|
||||||
// use to display result of command (on file and windows displayer) **without** filter
|
|
||||||
NLMISC::CLog CommandLog;
|
|
||||||
|
|
||||||
//@}
|
|
||||||
|
|
||||||
|
|
||||||
/// \name private methods. These methods are used by internal system but can't be put in private, don't use them.
|
|
||||||
// @{
|
|
||||||
|
|
||||||
/// This main is called by the macro (service5 says if we have to use layer5 or not)
|
|
||||||
sint main (const char *serviceShortName, const char *serviceLongName, uint16 servicePort, const char *configDir, const char *logDir, const char *compilationDate);
|
|
||||||
|
|
||||||
/// Sets the command line and init _Args variable. You must call this before calling main()
|
|
||||||
void setArgs (int argc, const char **argv);
|
|
||||||
|
|
||||||
/// Sets the command line and init _Args variable. You must call this before calling main()
|
|
||||||
void setArgs (int argc, const wchar_t **argv);
|
|
||||||
|
|
||||||
/// Sets the command line and init _Args variable. You must call this before calling main()
|
|
||||||
void setArgs (const char *args);
|
|
||||||
|
|
||||||
/// Sets the default callback array given from the macro
|
|
||||||
void setCallbackArray (TUnifiedCallbackItem *array, uint nbelem) { _CallbackArray = array; _CallbackArraySize = nbelem; }
|
|
||||||
|
|
||||||
/// Require to reset the hierarchical timer
|
|
||||||
void requireResetMeasures();
|
|
||||||
|
|
||||||
/// Ctor. You must not inherit ctor but overload init() function
|
|
||||||
IService ();
|
|
||||||
|
|
||||||
/// Dtor. You must not inherit dtor but overload release() function
|
|
||||||
virtual ~IService ();
|
|
||||||
|
|
||||||
//@}
|
|
||||||
|
|
||||||
//@{
|
|
||||||
/// \name Updatable are object that require an update at each service loop
|
|
||||||
/// Register an updatable interface
|
|
||||||
void registerUpdatable(IServiceUpdatable *updatable);
|
|
||||||
/// Unregister an updatable interface
|
|
||||||
void unregisterUpdatable(IServiceUpdatable *updatable);
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/// The window displayer instance
|
|
||||||
NLMISC::CWindowDisplayer *WindowDisplayer;
|
|
||||||
|
|
||||||
/// Directory where to store files that the services will write but are the same for all shard instance (for example: packet_sheets)
|
|
||||||
/// Use .toString() to access to the value
|
|
||||||
NLMISC::CVariable<std::string> WriteFilesDirectory;
|
|
||||||
|
|
||||||
/// Directory where to store files that the services will write during the exploitation of the game (for example: player backup, string cache)
|
|
||||||
/// Use .toString() to access to the value
|
|
||||||
NLMISC::CVariable<std::string> SaveFilesDirectory;
|
|
||||||
|
|
||||||
/// If true (default), the provided SaveFilesDirectory will be converted to a full path (ex: "saves" -> "/home/dir/saves")
|
|
||||||
NLMISC::CVariable<bool> ConvertSavesFilesDirectoryToFullPath;
|
|
||||||
|
|
||||||
/** You can provide a callback interface (only one) that will be called if any of the directory variables
|
|
||||||
* (WriteFilesDirectory, SaveFilesDirectory, ConfigDirectory, LogDirectory, RunningDirectory) is changed
|
|
||||||
* (also called for the first setting read from the .cfg file). Default is NULL.
|
|
||||||
*/
|
|
||||||
void setDirectoryChangeCallback( NLMISC::IVariableChangedCallback *cbi ) { _DirectoryChangedCBI = cbi; }
|
|
||||||
|
|
||||||
void setVersion (const std::string &version) { Version = version; }
|
|
||||||
|
|
||||||
uint16 getPort() { return ListeningPort; }
|
|
||||||
|
|
||||||
// Warning: can take a moment to be received from the WS. The default value (when not received yet) is DEFAULT_SHARD_ID.
|
|
||||||
uint32 getShardId() const { return _ShardId; }
|
|
||||||
|
|
||||||
const NLMISC::CCPUTimeStat& getCPUUsageStats() const { return _CPUUsageStats; }
|
|
||||||
|
|
||||||
/// Allow the service to return a status string with important value
|
|
||||||
virtual std::string getServiceStatusString() const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If your service needs a delay when it is asked to quit, provide a callback here (optional).
|
|
||||||
* Then, when the service will be asked to quit, this callback will be called. Then you can
|
|
||||||
* either return true to allow immediate closure, or false to delay the closure. The closure
|
|
||||||
* will then happen after you call clearForClosure().
|
|
||||||
*
|
|
||||||
* If you don't provide a callback here, or if you call with NULL, the service will exit
|
|
||||||
* immediately when asked to quit.
|
|
||||||
*/
|
|
||||||
void setClosureClearanceCallback( TRequestClosureClearanceCallback cb ) { _RequestClosureClearanceCallback = cb; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If using clearance for closure (see setClosureClearanceCallback()), you can call this method
|
|
||||||
* to allow the service to quit. If calling it while your callback has not be called yet, the
|
|
||||||
* callback will be bypassed and the service will quit immediately when asked to quit. If calling it
|
|
||||||
* after you callback was called (and you returned false), the service will quit shortly.
|
|
||||||
*/
|
|
||||||
void clearForClosure() { _ClosureClearanceStatus = CCClearedForClosure; }
|
|
||||||
|
|
||||||
/** Set the shard id (by the user code), when known before IService receives it by the WS).
|
|
||||||
* If a non-default value is already set and different than shardId => nlerror.
|
|
||||||
* If later IService receives a different value from the WS => nlerror.
|
|
||||||
*/
|
|
||||||
void anticipateShardId( uint32 shardId );
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
/// \name methods. These methods are used by internal system.
|
|
||||||
// @{
|
|
||||||
|
|
||||||
/// Changes the recording state (use if you know what you are doing)
|
|
||||||
void setRecordingState( CCallbackNetBase::TRecordingState rec ) { _RecordingState = rec; }
|
|
||||||
|
|
||||||
/** Set the shard id (received from the WS). See also anticipateShardId().
|
|
||||||
*/
|
|
||||||
void setShardId( uint32 shardId );
|
|
||||||
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/// \name variables. These variables are used by the internal system.
|
|
||||||
// @{
|
|
||||||
|
|
||||||
/// Array of arguments pass from the command line
|
|
||||||
NLMISC::CVectorSString _Args;
|
|
||||||
|
|
||||||
/// Host name of the host machine that run the service
|
|
||||||
std::string _HostName;
|
|
||||||
/// Listening port of this service
|
|
||||||
NLMISC::CVariable<uint16> ListeningPort;
|
|
||||||
|
|
||||||
/// Recording state
|
|
||||||
CCallbackNetBase::TRecordingState _RecordingState;
|
|
||||||
|
|
||||||
/// Current service name sets by the actual service when declaring NLNET_SERVICE_MAIN
|
|
||||||
std::string _ShortName; // ie: "NS"
|
|
||||||
std::string _LongName; // ie: "naming_service"
|
|
||||||
std::string _AliasName; // this name is initialized by the admin executor service via the args
|
|
||||||
|
|
||||||
/// Instance of this service (singleton)
|
|
||||||
static IService *_Instance;
|
|
||||||
|
|
||||||
/// Select timeout value in milliseconds between to call of user update()
|
|
||||||
NLMISC::TTime _UpdateTimeout;
|
|
||||||
|
|
||||||
/// the service id of this sevice
|
|
||||||
TServiceId _SId;
|
|
||||||
|
|
||||||
/// the exit status of this service (the status is returned by the service at the release time)
|
|
||||||
sint _ExitStatus;
|
|
||||||
|
|
||||||
/// true if the service initialisation is passed
|
|
||||||
bool _Initialized;
|
|
||||||
|
|
||||||
/// The directory where the configfile is
|
|
||||||
NLMISC::CVariable<std::string> ConfigDirectory;
|
|
||||||
|
|
||||||
/// The directory where the logfiles are
|
|
||||||
NLMISC::CVariable<std::string> LogDirectory;
|
|
||||||
|
|
||||||
/// The directory where the service is running
|
|
||||||
NLMISC::CVariable<std::string> RunningDirectory;
|
|
||||||
|
|
||||||
NLMISC::CVariable<std::string> Version;
|
|
||||||
|
|
||||||
TUnifiedCallbackItem *_CallbackArray;
|
|
||||||
uint _CallbackArraySize;
|
|
||||||
|
|
||||||
/// true if the service don't use the naming service
|
|
||||||
bool _DontUseNS;
|
|
||||||
/// true if the service don't use the admin executor service
|
|
||||||
bool _DontUseAES;
|
|
||||||
|
|
||||||
/// Require to reset the hierarchical timer
|
|
||||||
bool _ResetMeasures;
|
|
||||||
|
|
||||||
/// Shard Id
|
|
||||||
uint32 _ShardId;
|
|
||||||
|
|
||||||
/// CPU usage stats
|
|
||||||
NLMISC::CCPUTimeStat _CPUUsageStats;
|
|
||||||
|
|
||||||
/// Registered updatable interface
|
|
||||||
std::set<IServiceUpdatable*> _Updatables;
|
|
||||||
|
|
||||||
//@{
|
|
||||||
//@name Service running status management
|
|
||||||
/// The status stack is used to display the most recent set status.
|
|
||||||
std::vector<std::string> _ServiceStatusStack;
|
|
||||||
/// The status tags. All added tags are displayed.
|
|
||||||
std::set<std::string> _ServiveStatusTags;
|
|
||||||
//@}
|
|
||||||
|
|
||||||
enum TClosureClearanceStatus { CCMustRequestClearance, CCWaitingForClearance, CCClearedForClosure, CCCallbackThenClose=256 };
|
|
||||||
|
|
||||||
/// Closure clearance state (either CCMustRequestClearance, CCWaitingForClearance, CCClearedForClosure or CCCallbackThenClose + any other as a backup value)
|
|
||||||
uint _ClosureClearanceStatus;
|
|
||||||
|
|
||||||
/// Closure clearance callback (NULL if no closure clearance required)
|
|
||||||
TRequestClosureClearanceCallback _RequestClosureClearanceCallback;
|
|
||||||
|
|
||||||
/// Directory changed callback
|
|
||||||
NLMISC::IVariableChangedCallback* _DirectoryChangedCBI;
|
|
||||||
|
|
||||||
friend void serviceGetView (uint32 rid, const std::string &rawvarpath, std::vector<std::string> &vara, std::vector<std::string> &vala);
|
|
||||||
friend void cbAESConnection (const std::string &serviceName, TServiceId sid, void *arg);
|
|
||||||
friend struct nel_serviceInfoClass;
|
|
||||||
friend struct nel_getWinDisplayerInfoClass;
|
|
||||||
friend void cbDirectoryChanged (NLMISC::IVariable &var);
|
|
||||||
friend void cbReceiveShardId (NLNET::CMessage& msgin, const std::string &serviceName, TServiceId serviceId);
|
|
||||||
|
|
||||||
NLMISC_CATEGORISED_DYNVARIABLE_FRIEND(nel, State);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/** Interface class for object that need an update call during each service loop.
|
|
||||||
*/
|
|
||||||
class IServiceUpdatable
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
IServiceUpdatable()
|
|
||||||
{
|
|
||||||
if (IService::isServiceInitialized())
|
|
||||||
{
|
|
||||||
IService::getInstance()->registerUpdatable(this);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
nlwarning("IServiceUpdatable : IService is not initialized, IUpdatable will not be called");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
virtual ~IServiceUpdatable()
|
|
||||||
{
|
|
||||||
if (IService::isServiceInitialized())
|
|
||||||
{
|
|
||||||
IService *service = IService::getInstance();
|
|
||||||
|
|
||||||
service->unregisterUpdatable(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// implemente this virtual in you derived class
|
|
||||||
virtual void serviceLoopUpdate() =0;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
inline IService *IService::getInstance()
|
|
||||||
{
|
|
||||||
if (_Instance == NULL)
|
|
||||||
{
|
|
||||||
/* the nel context MUST be initialised */
|
|
||||||
nlassertex(NLMISC::INelContext::isContextInitialised(), ("You are trying to access a safe singleton without having initialized a NeL context. The simplest correction is to add 'NLMISC::CApplicationContext myApplicationContext;' at the very beginning of your application."));
|
|
||||||
// try to retrieve the safe singleton pointer
|
|
||||||
_Instance = reinterpret_cast<IService*>(NLMISC::INelContext::getInstance().getSingletonPointer("IService"));
|
|
||||||
}
|
|
||||||
return _Instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}; // NLNET
|
|
||||||
|
|
||||||
#endif // NL_SERVICE_H
|
|
||||||
|
|
||||||
/* End of service.h */
|
|
@ -1,111 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file audio_decoder_vorbis.h
|
|
||||||
* \brief CAudioDecoderVorbis
|
|
||||||
* \date 2012-04-11 09:35GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CAudioDecoderVorbis
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2008-2012 by authors
|
|
||||||
*
|
|
||||||
* This file is part of RYZOM CORE.
|
|
||||||
* RYZOM CORE 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.
|
|
||||||
*
|
|
||||||
* RYZOM CORE 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 RYZOM CORE. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NLSOUND_AUDIO_DECODER_VORBIS_H
|
|
||||||
#define NLSOUND_AUDIO_DECODER_VORBIS_H
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
|
|
||||||
// 3rd Party includes
|
|
||||||
#ifdef NL_OS_WINDOWS
|
|
||||||
# pragma warning( push )
|
|
||||||
# pragma warning( disable : 4244 )
|
|
||||||
#endif
|
|
||||||
#include <vorbis/vorbisfile.h>
|
|
||||||
#ifdef NL_OS_WINDOWS
|
|
||||||
# pragma warning( pop )
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#include <nel/sound/audio_decoder.h>
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
|
|
||||||
namespace NLSOUND {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief CAudioDecoderVorbis
|
|
||||||
* \date 2008-08-30 11:38GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CAudioDecoderVorbis
|
|
||||||
* Create trough IAudioDecoder, type "ogg"
|
|
||||||
*/
|
|
||||||
class CAudioDecoderVorbis : public IAudioDecoder
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
// outside pointers
|
|
||||||
NLMISC::IStream *_Stream;
|
|
||||||
|
|
||||||
// pointers
|
|
||||||
|
|
||||||
// instances
|
|
||||||
OggVorbis_File _OggVorbisFile;
|
|
||||||
bool _Loop;
|
|
||||||
bool _IsMusicEnded;
|
|
||||||
sint32 _StreamOffset;
|
|
||||||
sint32 _StreamSize;
|
|
||||||
public:
|
|
||||||
CAudioDecoderVorbis(NLMISC::IStream *stream, bool loop);
|
|
||||||
virtual ~CAudioDecoderVorbis();
|
|
||||||
inline NLMISC::IStream *getStream() { return _Stream; }
|
|
||||||
inline sint32 getStreamSize() { return _StreamSize; }
|
|
||||||
inline sint32 getStreamOffset() { return _StreamOffset; }
|
|
||||||
|
|
||||||
/// Get information on a music file (only artist and title at the moment).
|
|
||||||
static bool getInfo(NLMISC::IStream *stream, std::string &artist, std::string &title, float &length);
|
|
||||||
|
|
||||||
/// Get how many bytes the music buffer requires for output minimum.
|
|
||||||
virtual uint32 getRequiredBytes();
|
|
||||||
|
|
||||||
/// Get an amount of bytes between minimum and maximum (can be lower than minimum if at end).
|
|
||||||
virtual uint32 getNextBytes(uint8 *buffer, uint32 minimum, uint32 maximum);
|
|
||||||
|
|
||||||
/// Get the amount of channels (2 is stereo) in output.
|
|
||||||
virtual uint8 getChannels();
|
|
||||||
|
|
||||||
/// Get the samples per second (often 44100) in output.
|
|
||||||
virtual uint getSamplesPerSec();
|
|
||||||
|
|
||||||
/// Get the bits per sample (often 16) in output.
|
|
||||||
virtual uint8 getBitsPerSample();
|
|
||||||
|
|
||||||
/// Get if the music has ended playing (never true if loop).
|
|
||||||
virtual bool isMusicEnded();
|
|
||||||
|
|
||||||
/// Get the total time in seconds.
|
|
||||||
virtual float getLength();
|
|
||||||
|
|
||||||
/// Set looping
|
|
||||||
virtual void setLooping(bool loop);
|
|
||||||
}; /* class CAudioDecoderVorbis */
|
|
||||||
|
|
||||||
} /* namespace NLSOUND */
|
|
||||||
|
|
||||||
#endif /* #ifndef NLSOUND_AUDIO_DECODER_VORBIS_H */
|
|
||||||
|
|
||||||
/* end of file */
|
|
@ -1,66 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file containers.h
|
|
||||||
* \brief CContainers
|
|
||||||
* \date 2012-04-10 13:57GMT
|
|
||||||
* \author Unknown (Unknown)
|
|
||||||
* CContainers
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2012 by authors
|
|
||||||
*
|
|
||||||
* This file is part of RYZOM CORE.
|
|
||||||
* RYZOM CORE 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.
|
|
||||||
*
|
|
||||||
* RYZOM CORE 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 RYZOM CORE. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NLSOUND_CONTAINERS_H
|
|
||||||
#define NLSOUND_CONTAINERS_H
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
|
|
||||||
namespace NLSOUND {
|
|
||||||
class CSourceCommon;
|
|
||||||
|
|
||||||
/// Hasher functor for hashed container with pointer key.
|
|
||||||
template <class Pointer>
|
|
||||||
struct THashPtr : public std::unary_function<const Pointer &, size_t>
|
|
||||||
{
|
|
||||||
enum { bucket_size = 4, min_buckets = 8, };
|
|
||||||
size_t operator () (const Pointer &ptr) const
|
|
||||||
{
|
|
||||||
//CHashSet<uint>::hasher h;
|
|
||||||
// transtype the pointer into int then hash it
|
|
||||||
//return h.operator()(uint(uintptr_t(ptr)));
|
|
||||||
return (size_t)(uintptr_t)ptr;
|
|
||||||
}
|
|
||||||
inline bool operator() (const Pointer &ptr1, const Pointer &ptr2) const
|
|
||||||
{
|
|
||||||
// delegate the work to someone else as well?
|
|
||||||
return (uintptr_t)ptr1 < (uintptr_t)ptr2;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef CHashSet<CSourceCommon*, THashPtr<CSourceCommon*> > TSourceContainer;
|
|
||||||
|
|
||||||
} /* namespace NLSOUND */
|
|
||||||
|
|
||||||
#endif /* #ifndef NLSOUND_CONTAINERS_H */
|
|
||||||
|
|
||||||
/* end of file */
|
|
@ -1,102 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file group_controller.h
|
|
||||||
* \brief CGroupController
|
|
||||||
* \date 2012-04-10 09:29GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CGroupController
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2012 by authors
|
|
||||||
*
|
|
||||||
* This file is part of RYZOM CORE.
|
|
||||||
* RYZOM CORE 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.
|
|
||||||
*
|
|
||||||
* RYZOM CORE 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 RYZOM CORE. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NLSOUND_GROUP_CONTROLLER_H
|
|
||||||
#define NLSOUND_GROUP_CONTROLLER_H
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
#include <string>
|
|
||||||
#include <map>
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#include <nel/misc/common.h>
|
|
||||||
#include <nel/sound/u_group_controller.h>
|
|
||||||
#include <nel/sound/containers.h>
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
|
|
||||||
namespace NLSOUND {
|
|
||||||
class CGroupControllerRoot;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief CGroupController
|
|
||||||
* \date 2012-04-10 09:29GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CGroupController
|
|
||||||
*/
|
|
||||||
class CGroupController : public UGroupController
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
friend class CGroupControllerRoot;
|
|
||||||
|
|
||||||
private:
|
|
||||||
CGroupController *m_Parent;
|
|
||||||
std::map<std::string, CGroupController *> m_Children;
|
|
||||||
|
|
||||||
/// Gain as set by the interface
|
|
||||||
float m_Gain;
|
|
||||||
|
|
||||||
/// Gain including parent gain
|
|
||||||
float m_FinalGain;
|
|
||||||
|
|
||||||
int m_NbSourcesInclChild;
|
|
||||||
TSourceContainer m_Sources;
|
|
||||||
|
|
||||||
public:
|
|
||||||
CGroupController(CGroupController *parent);
|
|
||||||
|
|
||||||
/// \name UGroupController
|
|
||||||
//@{
|
|
||||||
virtual void setGain(float gain) { NLMISC::clamp(gain, 0.0f, 1.0f); if (m_Gain != gain) { m_Gain = gain; updateSourceGain(); } }
|
|
||||||
virtual float getGain() { return m_Gain; }
|
|
||||||
//@}
|
|
||||||
|
|
||||||
inline float getFinalGain() const { return m_FinalGain; }
|
|
||||||
|
|
||||||
void addSource(CSourceCommon *source);
|
|
||||||
void removeSource(CSourceCommon *source);
|
|
||||||
|
|
||||||
virtual std::string getPath();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual ~CGroupController(); // subnodes can only be deleted by the root
|
|
||||||
|
|
||||||
private:
|
|
||||||
inline float calculateTotalGain() { return m_Gain; }
|
|
||||||
virtual void calculateFinalGain();
|
|
||||||
virtual void increaseSources();
|
|
||||||
virtual void decreaseSources();
|
|
||||||
void updateSourceGain();
|
|
||||||
|
|
||||||
}; /* class CGroupController */
|
|
||||||
|
|
||||||
} /* namespace NLSOUND */
|
|
||||||
|
|
||||||
#endif /* #ifndef NLSOUND_GROUP_CONTROLLER_H */
|
|
||||||
|
|
||||||
/* end of file */
|
|
@ -1,70 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file group_controller_root.h
|
|
||||||
* \brief CGroupControllerRoot
|
|
||||||
* \date 2012-04-10 09:44GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CGroupControllerRoot
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2012 by authors
|
|
||||||
*
|
|
||||||
* This file is part of RYZOM CORE.
|
|
||||||
* RYZOM CORE 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.
|
|
||||||
*
|
|
||||||
* RYZOM CORE 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 RYZOM CORE. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NLSOUND_GROUP_CONTROLLER_ROOT_H
|
|
||||||
#define NLSOUND_GROUP_CONTROLLER_ROOT_H
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#include <nel/misc/singleton.h>
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
#include <nel/sound/group_controller.h>
|
|
||||||
|
|
||||||
namespace NLSOUND {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief CGroupControllerRoot
|
|
||||||
* \date 2012-04-10 09:44GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CGroupControllerRoot
|
|
||||||
*/
|
|
||||||
class CGroupControllerRoot : public CGroupController, public NLMISC::CManualSingleton<CGroupControllerRoot>
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CGroupControllerRoot();
|
|
||||||
virtual ~CGroupControllerRoot();
|
|
||||||
|
|
||||||
/// Gets the group controller in a certain path with separator '/', if it doesn't exist yet it will be created.
|
|
||||||
CGroupController *getGroupController(const std::string &path);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual std::string getPath();
|
|
||||||
virtual void calculateFinalGain();
|
|
||||||
virtual void increaseSources();
|
|
||||||
virtual void decreaseSources();
|
|
||||||
static bool isReservedName(const std::string &nodeName);
|
|
||||||
|
|
||||||
}; /* class CGroupControllerRoot */
|
|
||||||
|
|
||||||
} /* namespace NLSOUND */
|
|
||||||
|
|
||||||
#endif /* #ifndef NLSOUND_GROUP_CONTROLLER_ROOT_H */
|
|
||||||
|
|
||||||
/* end of file */
|
|
@ -1,174 +0,0 @@
|
|||||||
// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
|
||||||
// Copyright (C) 2010 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_SOUND_H
|
|
||||||
#define NL_SOUND_H
|
|
||||||
|
|
||||||
#include "nel/misc/types_nl.h"
|
|
||||||
#include "nel/misc/stream.h"
|
|
||||||
#include "nel/misc/string_mapper.h"
|
|
||||||
#include "nel/sound/u_source.h"
|
|
||||||
#include "nel/georges/u_form_elm.h"
|
|
||||||
#include "nel/misc/sheet_id.h"
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
namespace NLSOUND {
|
|
||||||
|
|
||||||
|
|
||||||
class ISoundDriver;
|
|
||||||
class IBuffer;
|
|
||||||
class CSound;
|
|
||||||
class CGroupController;
|
|
||||||
|
|
||||||
|
|
||||||
/// Sound names hash map
|
|
||||||
//typedef std::hash_map<std::string, CSound*> TSoundMap;
|
|
||||||
typedef CHashMap<NLMISC::CSheetId, CSound*, NLMISC::CStringIdHashMapTraits> TSoundMap;
|
|
||||||
|
|
||||||
/// Sound names set (for ambiant sounds)
|
|
||||||
typedef std::set<CSound*> TSoundSet;
|
|
||||||
|
|
||||||
const double Sqrt12_2 = 1.0594630943592952645618252949463; // 2^1/12
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A sound base class and its static properties
|
|
||||||
* \author Olivier Cado
|
|
||||||
* \author Nevrax France
|
|
||||||
* \date 2001
|
|
||||||
*/
|
|
||||||
class CSound
|
|
||||||
{
|
|
||||||
friend class CAudioMixerUser;
|
|
||||||
public:
|
|
||||||
/// Factory for specialized sound.
|
|
||||||
static CSound *createSound(const std::string &name, NLGEORGES::UFormElm& formRoot);
|
|
||||||
|
|
||||||
enum TSOUND_TYPE
|
|
||||||
{
|
|
||||||
SOUND_SIMPLE,
|
|
||||||
SOUND_COMPLEX,
|
|
||||||
SOUND_BACKGROUND,
|
|
||||||
SOUND_CONTEXT,
|
|
||||||
SOUND_MUSIC, // soon to be deprecated hopefully
|
|
||||||
SOUND_STREAM,
|
|
||||||
SOUND_STREAM_FILE
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/// Constructor
|
|
||||||
CSound();
|
|
||||||
/// Destructor
|
|
||||||
virtual ~CSound();
|
|
||||||
|
|
||||||
/// Get the type of the sound.
|
|
||||||
virtual TSOUND_TYPE getSoundType() =0;
|
|
||||||
|
|
||||||
/// Load the sound parameters from georges' form
|
|
||||||
virtual void importForm(const std::string& filename, NLGEORGES::UFormElm& formRoot);
|
|
||||||
|
|
||||||
/// Return the looping state
|
|
||||||
bool getLooping() const { return _Looping; }
|
|
||||||
/// Return the gain
|
|
||||||
float getGain() const { return _Gain; }
|
|
||||||
/// Return the pitch
|
|
||||||
float getPitch() const { return _Pitch; }
|
|
||||||
/// Return the initial priority
|
|
||||||
TSoundPriority getPriority() const { return _Priority; }
|
|
||||||
/// Return true if cone is meaningful
|
|
||||||
// virtual bool isDetailed() const = 0; // not used?
|
|
||||||
/// Return the inner angle of the cone
|
|
||||||
float getConeInnerAngle() const { return _ConeInnerAngle; }
|
|
||||||
/// Return the outer angle of the cone
|
|
||||||
float getConeOuterAngle() const { return _ConeOuterAngle; }
|
|
||||||
/// Return the outer gain of the cone
|
|
||||||
float getConeOuterGain() const { return _ConeOuterGain; }
|
|
||||||
/// Return the direction vector.
|
|
||||||
const NLMISC::CVector &getDirectionVector()const { return _Direction;}
|
|
||||||
/// Return the length of the sound in ms
|
|
||||||
virtual uint32 getDuration() = 0;
|
|
||||||
/// Return the name (must be unique)
|
|
||||||
const NLMISC::CSheetId& getName() const { return _Name; }
|
|
||||||
|
|
||||||
/// Return the min distance (if detailed()) (default 1.0f if not implemented by sound type)
|
|
||||||
virtual float getMinDistance() const { return _MinDist; }
|
|
||||||
/// Return the max distance (if detailed())
|
|
||||||
virtual float getMaxDistance() const { return _MaxDist; }
|
|
||||||
|
|
||||||
inline CGroupController *getGroupController() const { return _GroupController; }
|
|
||||||
|
|
||||||
/// Set looping
|
|
||||||
void setLooping( bool looping ) { _Looping = looping; }
|
|
||||||
|
|
||||||
/// Used by the george sound plugin to check sound recursion (ie sound 'toto' use sound 'titi' witch also use sound 'toto' ...).
|
|
||||||
virtual void getSubSoundList(std::vector<std::pair<std::string, CSound*> > &subsounds) const =0;
|
|
||||||
|
|
||||||
|
|
||||||
virtual void serial(NLMISC::IStream &s);
|
|
||||||
|
|
||||||
NLMISC::TStringId getUserVarControler() { return _UserVarControler; }
|
|
||||||
|
|
||||||
bool operator<( const CSound& otherSound ) const
|
|
||||||
{
|
|
||||||
//return NLMISC::CStringMapper::unmap(_Name) < NLMISC::CStringMapper::unmap(otherSound._Name);
|
|
||||||
return _Name.toString() < otherSound._Name.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
|
|
||||||
// Static properties
|
|
||||||
float _Gain; // [0,1]
|
|
||||||
float _Pitch; // ]0,1]
|
|
||||||
TSoundPriority _Priority;
|
|
||||||
float _ConeInnerAngle, _ConeOuterAngle, _ConeOuterGain;
|
|
||||||
NLMISC::CVector _Direction;
|
|
||||||
|
|
||||||
bool _Looping;
|
|
||||||
|
|
||||||
/// Distance to where the source is played at maximum volume. Used for stealing physical sources.
|
|
||||||
/// Note: for compatibility reasons, _MinDist is not serial()'ized here in CSound. _MaxDist is.
|
|
||||||
float _MinDist;
|
|
||||||
/// Clipping distance for complex or backgound sound.
|
|
||||||
float _MaxDist;
|
|
||||||
|
|
||||||
// Sound name.
|
|
||||||
NLMISC::CSheetId _Name;
|
|
||||||
/// An optional user var controler.
|
|
||||||
NLMISC::TStringId _UserVarControler;
|
|
||||||
|
|
||||||
/// The group controller, always exists, owned by the audio mixer
|
|
||||||
CGroupController *_GroupController;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ESoundFileNotFound
|
|
||||||
*/
|
|
||||||
class ESoundFileNotFound : public NLMISC::Exception
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ESoundFileNotFound( const std::string filename ) :
|
|
||||||
NLMISC::Exception( (std::string("Sound file not found, or invalid file format: ")+filename).c_str() ) {}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
} // NLSOUND
|
|
||||||
|
|
||||||
|
|
||||||
#endif // NL_SOUND_H
|
|
||||||
|
|
||||||
/* End of sound.h */
|
|
||||||
|
|
@ -1,100 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file source_music_channel.h
|
|
||||||
* \brief CSourceMusicChannel
|
|
||||||
* \date 2012-04-11 16:08GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CSourceMusicChannel
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2012 by authors
|
|
||||||
*
|
|
||||||
* This file is part of RYZOM CORE.
|
|
||||||
* RYZOM CORE 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.
|
|
||||||
*
|
|
||||||
* RYZOM CORE 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 RYZOM CORE. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NLSOUND_SOURCE_MUSIC_CHANNEL_H
|
|
||||||
#define NLSOUND_SOURCE_MUSIC_CHANNEL_H
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#include <nel/sound/driver/music_channel.h>
|
|
||||||
#include <nel/sound/stream_file_sound.h>
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
|
|
||||||
namespace NLSOUND {
|
|
||||||
class CStreamFileSource;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief CSourceMusicChannel
|
|
||||||
* \date 2012-04-11 16:08GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CSourceMusicChannel
|
|
||||||
*/
|
|
||||||
class CSourceMusicChannel : public IMusicChannel
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CSourceMusicChannel();
|
|
||||||
virtual ~CSourceMusicChannel();
|
|
||||||
|
|
||||||
/** Play some music (.ogg etc...)
|
|
||||||
* NB: if an old music was played, it is first stop with stopMusic()
|
|
||||||
* \param filepath file path, CPath::lookup is done here
|
|
||||||
* \param async stream music from hard disk, preload in memory if false
|
|
||||||
* \param loop must be true to play the music in loop.
|
|
||||||
*/
|
|
||||||
virtual bool play(const std::string &filepath, bool async, bool loop);
|
|
||||||
|
|
||||||
/// Stop the music previously loaded and played (the Memory is also freed)
|
|
||||||
virtual void stop();
|
|
||||||
|
|
||||||
/// Makes sure any resources are freed, but keeps available for next play call
|
|
||||||
virtual void reset();
|
|
||||||
|
|
||||||
/// Pause the music previously loaded and played (the Memory is not freed)
|
|
||||||
virtual void pause();
|
|
||||||
|
|
||||||
/// Resume the music previously paused
|
|
||||||
virtual void resume();
|
|
||||||
|
|
||||||
/// Return true if a song is finished.
|
|
||||||
virtual bool isEnded();
|
|
||||||
|
|
||||||
/// Return true if the song is still loading asynchronously and hasn't started playing yet (false if not async), used to delay fading
|
|
||||||
virtual bool isLoadingAsync();
|
|
||||||
|
|
||||||
/// Return the total length (in second) of the music currently played
|
|
||||||
virtual float getLength();
|
|
||||||
|
|
||||||
/** Set the music volume (if any music played). (volume value inside [0 , 1]) (default: 1)
|
|
||||||
* NB: the volume of music is NOT affected by IListener::setGain()
|
|
||||||
*/
|
|
||||||
virtual void setVolume(float gain);
|
|
||||||
|
|
||||||
private:
|
|
||||||
CStreamFileSound m_Sound;
|
|
||||||
CStreamFileSource *m_Source;
|
|
||||||
float m_Gain;
|
|
||||||
|
|
||||||
}; /* class CSourceMusicChannel */
|
|
||||||
|
|
||||||
} /* namespace NLSOUND */
|
|
||||||
|
|
||||||
#endif /* #ifndef NLSOUND_SOURCE_MUSIC_CHANNEL_H */
|
|
||||||
|
|
||||||
/* end of file */
|
|
@ -1,94 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file stream_file_sound.h
|
|
||||||
* \brief CStreamFileSound
|
|
||||||
* \date 2012-04-11 09:57GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CStreamFileSound
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2012 by authors
|
|
||||||
*
|
|
||||||
* This file is part of RYZOM CORE.
|
|
||||||
* RYZOM CORE 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.
|
|
||||||
*
|
|
||||||
* RYZOM CORE 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 RYZOM CORE. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NLSOUND_STREAM_FILE_SOUND_H
|
|
||||||
#define NLSOUND_STREAM_FILE_SOUND_H
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
#include <nel/sound/stream_sound.h>
|
|
||||||
|
|
||||||
namespace NLSOUND {
|
|
||||||
class CSourceMusicChannel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief CStreamFileSound
|
|
||||||
* \date 2012-04-11 09:57GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CStreamFileSound
|
|
||||||
*/
|
|
||||||
class CStreamFileSound : public CStreamSound
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
friend class CSourceMusicChannel;
|
|
||||||
|
|
||||||
public:
|
|
||||||
CStreamFileSound();
|
|
||||||
virtual ~CStreamFileSound();
|
|
||||||
|
|
||||||
/// Get the type of the sound.
|
|
||||||
virtual TSOUND_TYPE getSoundType() { return SOUND_STREAM_FILE; }
|
|
||||||
|
|
||||||
/// Load the sound parameters from georges' form
|
|
||||||
virtual void importForm(const std::string& filename, NLGEORGES::UFormElm& formRoot);
|
|
||||||
|
|
||||||
/// Used by the george sound plugin to check sound recursion (ie sound 'toto' use sound 'titi' witch also use sound 'toto' ...).
|
|
||||||
virtual void getSubSoundList(std::vector<std::pair<std::string, CSound*> > &/* subsounds */) const { }
|
|
||||||
|
|
||||||
/// Serialize the sound data.
|
|
||||||
virtual void serial(NLMISC::IStream &s);
|
|
||||||
|
|
||||||
/// Return the length of the sound in ms
|
|
||||||
virtual uint32 getDuration() { return 0; }
|
|
||||||
|
|
||||||
inline bool getAsync() { return m_Async; }
|
|
||||||
|
|
||||||
inline const std::string &getFilePath() { return m_FilePath; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
/// Used by CSourceMusicChannel to set the filePath and default settings on other parameters.
|
|
||||||
void setMusicFilePath(const std::string &filePath, bool async = true, bool loop = false);
|
|
||||||
|
|
||||||
private:
|
|
||||||
CStreamFileSound(const CStreamFileSound &);
|
|
||||||
CStreamFileSound &operator=(const CStreamFileSound &);
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool m_Async;
|
|
||||||
std::string m_FilePath;
|
|
||||||
|
|
||||||
}; /* class CStreamFileSound */
|
|
||||||
|
|
||||||
} /* namespace NLSOUND */
|
|
||||||
|
|
||||||
#endif /* #ifndef NLSOUND_STREAM_FILE_SOUND_H */
|
|
||||||
|
|
||||||
/* end of file */
|
|
@ -1,111 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file stream_file_source.h
|
|
||||||
* \brief CStreamFileSource
|
|
||||||
* \date 2012-04-11 09:57GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CStreamFileSource
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2012 by authors
|
|
||||||
*
|
|
||||||
* This file is part of RYZOM CORE.
|
|
||||||
* RYZOM CORE 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.
|
|
||||||
*
|
|
||||||
* RYZOM CORE 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 RYZOM CORE. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NLSOUND_STREAM_FILE_SOURCE_H
|
|
||||||
#define NLSOUND_STREAM_FILE_SOURCE_H
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
#include <nel/misc/thread.h>
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
#include <nel/sound/stream_source.h>
|
|
||||||
#include <nel/sound/stream_file_sound.h>
|
|
||||||
|
|
||||||
namespace NLSOUND {
|
|
||||||
class IAudioDecoder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief CStreamFileSource
|
|
||||||
* \date 2012-04-11 09:57GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* CStreamFileSource
|
|
||||||
*/
|
|
||||||
class CStreamFileSource : public CStreamSource, private NLMISC::IRunnable
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
CStreamFileSource(CStreamFileSound *streamFileSound = NULL, bool spawn = false, TSpawnEndCallback cb = 0, void *cbUserParam = 0, NL3D::CCluster *cluster = 0, CGroupController *groupController = NULL);
|
|
||||||
virtual ~CStreamFileSource();
|
|
||||||
|
|
||||||
/// Return the source type
|
|
||||||
TSOURCE_TYPE getType() const { return SOURCE_STREAM_FILE; }
|
|
||||||
|
|
||||||
/// \name Playback control
|
|
||||||
//@{
|
|
||||||
/// Play
|
|
||||||
virtual void play();
|
|
||||||
/// Stop playing
|
|
||||||
virtual void stop();
|
|
||||||
/// Get playing state. Return false even if the source has stopped on its own.
|
|
||||||
virtual bool isPlaying();
|
|
||||||
/// Pause (following legacy music channel implementation)
|
|
||||||
void pause();
|
|
||||||
/// Resume (following legacy music channel implementation)
|
|
||||||
void resume();
|
|
||||||
/// check if song ended (following legacy music channel implementation)
|
|
||||||
bool isEnded();
|
|
||||||
/// (following legacy music channel implementation)
|
|
||||||
float getLength();
|
|
||||||
/// check if still loading (following legacy music channel implementation)
|
|
||||||
bool isLoadingAsync();
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/// \name Decoding thread
|
|
||||||
//@{
|
|
||||||
virtual void getName (std::string &result) const { result = "CStreamFileSource"; }
|
|
||||||
virtual void run();
|
|
||||||
//@}
|
|
||||||
|
|
||||||
// TODO: getTime
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool prepareDecoder();
|
|
||||||
inline bool bufferMore(uint bytes);
|
|
||||||
|
|
||||||
private:
|
|
||||||
CStreamFileSource(const CStreamFileSource &);
|
|
||||||
CStreamFileSource &operator=(const CStreamFileSource &);
|
|
||||||
|
|
||||||
private:
|
|
||||||
inline CStreamFileSound *getStreamFileSound() { return static_cast<CStreamFileSound *>(m_StreamSound); }
|
|
||||||
|
|
||||||
NLMISC::IThread *m_Thread;
|
|
||||||
|
|
||||||
IAudioDecoder *m_AudioDecoder;
|
|
||||||
|
|
||||||
bool m_Paused;
|
|
||||||
bool m_DecodingEnded;
|
|
||||||
|
|
||||||
}; /* class CStreamFileSource */
|
|
||||||
|
|
||||||
} /* namespace NLSOUND */
|
|
||||||
|
|
||||||
#endif /* #ifndef NLSOUND_STREAM_FILE_SOURCE_H */
|
|
||||||
|
|
||||||
/* end of file */
|
|
@ -1,65 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file u_group_controller.h
|
|
||||||
* \brief UGroupController
|
|
||||||
* \date 2012-04-10 12:49GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* UGroupController
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2012 by authors
|
|
||||||
*
|
|
||||||
* This file is part of RYZOM CORE.
|
|
||||||
* RYZOM CORE 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.
|
|
||||||
*
|
|
||||||
* RYZOM CORE 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 RYZOM CORE. If not, see
|
|
||||||
* <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef NLSOUND_U_GROUP_CONTROLLER_H
|
|
||||||
#define NLSOUND_U_GROUP_CONTROLLER_H
|
|
||||||
#include <nel/misc/types_nl.h>
|
|
||||||
|
|
||||||
// STL includes
|
|
||||||
|
|
||||||
// NeL includes
|
|
||||||
|
|
||||||
// Project includes
|
|
||||||
|
|
||||||
#define NLSOUND_SHEET_V1_DEFAULT_SOUND_GROUP_CONTROLLER "sound:effects:game"
|
|
||||||
#define NLSOUND_SHEET_V1_DEFAULT_SOUND_MUSIC_GROUP_CONTROLLER "sound:music:game"
|
|
||||||
#define NLSOUND_SHEET_V1_DEFAULT_SOUND_STREAM_GROUP_CONTROLLER "sound:dialog:game"
|
|
||||||
|
|
||||||
namespace NLSOUND {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief UGroupController
|
|
||||||
* \date 2012-04-10 12:49GMT
|
|
||||||
* \author Jan Boon (Kaetemi)
|
|
||||||
* UGroupController
|
|
||||||
*/
|
|
||||||
class UGroupController
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
virtual void setGain(float gain) = 0;
|
|
||||||
virtual float getGain() = 0;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual ~UGroupController() { }
|
|
||||||
|
|
||||||
}; /* class UGroupController */
|
|
||||||
|
|
||||||
} /* namespace NLSOUND */
|
|
||||||
|
|
||||||
#endif /* #ifndef NLSOUND_U_GROUP_CONTROLLER_H */
|
|
||||||
|
|
||||||
/* end of file */
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue