Compare commits
	
		
			1197 Commits
		
	
	
		
			sandbox/sl
			...
			v1.1.0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					297dc90255 | ||
| 
						 | 
					499510f2be | ||
| 
						 | 
					2d6cb342c2 | ||
| 
						 | 
					c8f4c187b3 | ||
| 
						 | 
					14d827f44e | ||
| 
						 | 
					22f56b93e5 | ||
| 
						 | 
					3e32105d63 | ||
| 
						 | 
					2bf8fb5889 | ||
| 
						 | 
					f039a85fd8 | ||
| 
						 | 
					9f9cc8fe71 | ||
| 
						 | 
					d8216b19b6 | ||
| 
						 | 
					d46ddd0839 | ||
| 
						 | 
					8b1a14d12f | ||
| 
						 | 
					e50c842755 | ||
| 
						 | 
					22ae1403e9 | ||
| 
						 | 
					14c9fce8e4 | ||
| 
						 | 
					f2a6799cc9 | ||
| 
						 | 
					e918ed98d4 | ||
| 
						 | 
					e5cef5d5a6 | ||
| 
						 | 
					faed00d844 | ||
| 
						 | 
					101c2bd1fa | ||
| 
						 | 
					60b36abf85 | ||
| 
						 | 
					061a16d96e | ||
| 
						 | 
					1b27e93cd1 | ||
| 
						 | 
					3939e85b26 | ||
| 
						 | 
					dba053898a | ||
| 
						 | 
					504601bb14 | ||
| 
						 | 
					a7eea3e267 | ||
| 
						 | 
					d72c536ede | ||
| 
						 | 
					8e858f90f3 | ||
| 
						 | 
					c311b3b3a9 | ||
| 
						 | 
					21173e1999 | ||
| 
						 | 
					b5b61c179d | ||
| 
						 | 
					0c261715b0 | ||
| 
						 | 
					3c5ed6f52e | ||
| 
						 | 
					6dc21bce63 | ||
| 
						 | 
					87b12ac875 | ||
| 
						 | 
					72b7db36f3 | ||
| 
						 | 
					e0a80519c7 | ||
| 
						 | 
					46da1cae05 | ||
| 
						 | 
					e4dc2b9248 | ||
| 
						 | 
					6b33ca395f | ||
| 
						 | 
					9aa58f3fcb | ||
| 
						 | 
					d9ca52452b | ||
| 
						 | 
					8106df8f5a | ||
| 
						 | 
					c459d37c26 | ||
| 
						 | 
					811d0ff209 | ||
| 
						 | 
					21ac3c8f26 | ||
| 
						 | 
					4ed05a8bb1 | ||
| 
						 | 
					00794a93ec | ||
| 
						 | 
					8b15cf6929 | ||
| 
						 | 
					3df4436e1a | ||
| 
						 | 
					a46ec16569 | ||
| 
						 | 
					3f8349467a | ||
| 
						 | 
					31322c5faa | ||
| 
						 | 
					a337725625 | ||
| 
						 | 
					b3151c80fc | ||
| 
						 | 
					0799cccce3 | ||
| 
						 | 
					c88fc5b2f9 | ||
| 
						 | 
					cb265a497d | ||
| 
						 | 
					ccea000c4b | ||
| 
						 | 
					403966ae00 | ||
| 
						 | 
					bf2c903000 | ||
| 
						 | 
					85ef83a173 | ||
| 
						 | 
					1991123054 | ||
| 
						 | 
					9e9f5f3d70 | ||
| 
						 | 
					06dc2f6166 | ||
| 
						 | 
					66ba79f5fb | ||
| 
						 | 
					fd9df44a05 | ||
| 
						 | 
					3c021e1d79 | ||
| 
						 | 
					451ab0c01e | ||
| 
						 | 
					bcee56bed5 | ||
| 
						 | 
					921ffdd2c9 | ||
| 
						 | 
					9ed1b2f09e | ||
| 
						 | 
					6a819ce4fe | ||
| 
						 | 
					56e8485c84 | ||
| 
						 | 
					a05bf133ae | ||
| 
						 | 
					e68953b7c8 | ||
| 
						 | 
					9aa2bd8a03 | ||
| 
						 | 
					6b7cf3077d | ||
| 
						 | 
					eb0c5a6ffc | ||
| 
						 | 
					422f97d7ab | ||
| 
						 | 
					7af4eb014b | ||
| 
						 | 
					20cd3e6b8f | ||
| 
						 | 
					6b66c01c88 | ||
| 
						 | 
					9c41143d66 | ||
| 
						 | 
					e9cacfd66d | ||
| 
						 | 
					301409107f | ||
| 
						 | 
					ddf94f6184 | ||
| 
						 | 
					c21f53a501 | ||
| 
						 | 
					7a1590713e | ||
| 
						 | 
					9ed874713f | ||
| 
						 | 
					676610d2a8 | ||
| 
						 | 
					fd903902ef | ||
| 
						 | 
					154b4b4196 | ||
| 
						 | 
					953c6a011e | ||
| 
						 | 
					e50f96a4a3 | ||
| 
						 | 
					5d88a82aa0 | ||
| 
						 | 
					cbcfbe1b29 | ||
| 
						 | 
					888699091d | ||
| 
						 | 
					87c40b35eb | ||
| 
						 | 
					a6f538cefa | ||
| 
						 | 
					a60461a340 | ||
| 
						 | 
					f0f609c2e2 | ||
| 
						 | 
					91b5c98b3d | ||
| 
						 | 
					8d07a97acc | ||
| 
						 | 
					6d84322762 | ||
| 
						 | 
					c34d91a84e | ||
| 
						 | 
					aabae97e57 | ||
| 
						 | 
					52cf4dcaea | ||
| 
						 | 
					b8fa2839a2 | ||
| 
						 | 
					2578b767c3 | ||
| 
						 | 
					ce328b855f | ||
| 
						 | 
					aab70f4d7a | ||
| 
						 | 
					bcba86e2e9 | ||
| 
						 | 
					9a4052a4ec | ||
| 
						 | 
					b1bfd0ba87 | ||
| 
						 | 
					019384f2d3 | ||
| 
						 | 
					e2c6b05f9a | ||
| 
						 | 
					61c5e31ca1 | ||
| 
						 | 
					ad1216151d | ||
| 
						 | 
					02a31e6b3c | ||
| 
						 | 
					84be08b07f | ||
| 
						 | 
					313bfbb6a2 | ||
| 
						 | 
					2089f26b08 | ||
| 
						 | 
					507ee87e3e | ||
| 
						 | 
					f2bd11faa4 | ||
| 
						 | 
					0c1cec2205 | ||
| 
						 | 
					dadc9189ed | ||
| 
						 | 
					f05feab7b9 | ||
| 
						 | 
					02360dd2c2 | ||
| 
						 | 
					b0a12a2880 | ||
| 
						 | 
					b5ce9456db | ||
| 
						 | 
					e6047a17a9 | ||
| 
						 | 
					f93b1e7be1 | ||
| 
						 | 
					04b9e0d787 | ||
| 
						 | 
					ce42e79abc | ||
| 
						 | 
					565d0e6feb | ||
| 
						 | 
					6b151d436d | ||
| 
						 | 
					5f0b303c28 | ||
| 
						 | 
					3653fb473a | ||
| 
						 | 
					9e50ed7f27 | ||
| 
						 | 
					732cb9a643 | ||
| 
						 | 
					c535025c12 | ||
| 
						 | 
					e8223bd250 | ||
| 
						 | 
					7989bb7fe7 | ||
| 
						 | 
					6776bd62b5 | ||
| 
						 | 
					a5879f7c81 | ||
| 
						 | 
					12ee845ee7 | ||
| 
						 | 
					d02e74a073 | ||
| 
						 | 
					78071b3b97 | ||
| 
						 | 
					efd54f8f41 | ||
| 
						 | 
					8144132866 | ||
| 
						 | 
					e6df50031e | ||
| 
						 | 
					169823428f | ||
| 
						 | 
					12d45f62f6 | ||
| 
						 | 
					8c50a70a95 | ||
| 
						 | 
					768ae275dc | ||
| 
						 | 
					fea3556e20 | ||
| 
						 | 
					2e0d55314c | ||
| 
						 | 
					2dad8d65d9 | ||
| 
						 | 
					51acb01167 | ||
| 
						 | 
					417b852967 | ||
| 
						 | 
					45f4b87e8e | ||
| 
						 | 
					9df0d29823 | ||
| 
						 | 
					a040eb37e4 | ||
| 
						 | 
					fa1a9290e6 | ||
| 
						 | 
					d8ebdcd89d | ||
| 
						 | 
					11c706488b | ||
| 
						 | 
					e2000cc5ca | ||
| 
						 | 
					07c6eb18ad | ||
| 
						 | 
					749bc98618 | ||
| 
						 | 
					57d459ba82 | ||
| 
						 | 
					8aae246089 | ||
| 
						 | 
					109b69a706 | ||
| 
						 | 
					0b0bc8d098 | ||
| 
						 | 
					be8af188d0 | ||
| 
						 | 
					61311e6103 | ||
| 
						 | 
					510e0ab467 | ||
| 
						 | 
					83a91e789c | ||
| 
						 | 
					f103dcefaf | ||
| 
						 | 
					2a8f57f50d | ||
| 
						 | 
					fdb61a4531 | ||
| 
						 | 
					ab77b4e898 | ||
| 
						 | 
					55f74c59c7 | ||
| 
						 | 
					a910049aea | ||
| 
						 | 
					57cc35dd60 | ||
| 
						 | 
					9951f46133 | ||
| 
						 | 
					2b0aee4b5d | ||
| 
						 | 
					5e3f607e73 | ||
| 
						 | 
					21071373e7 | ||
| 
						 | 
					8be41bba80 | ||
| 
						 | 
					8978358358 | ||
| 
						 | 
					319f7c4d56 | ||
| 
						 | 
					83cef816fd | ||
| 
						 | 
					294aa37745 | ||
| 
						 | 
					630d3b95e2 | ||
| 
						 | 
					c14754be1d | ||
| 
						 | 
					8a6af9f98f | ||
| 
						 | 
					892102842a | ||
| 
						 | 
					f357e5e2f7 | ||
| 
						 | 
					47dcd769c1 | ||
| 
						 | 
					ac97b089d1 | ||
| 
						 | 
					185eb70011 | ||
| 
						 | 
					6a4ff6f325 | ||
| 
						 | 
					4753ee4166 | ||
| 
						 | 
					15c29afeca | ||
| 
						 | 
					315b58ec38 | ||
| 
						 | 
					de368fd0b5 | ||
| 
						 | 
					d830573111 | ||
| 
						 | 
					0e06bc817a | ||
| 
						 | 
					d3879738bf | ||
| 
						 | 
					ed208f7d2f | ||
| 
						 | 
					c1c5932260 | ||
| 
						 | 
					90b9f993c1 | ||
| 
						 | 
					e479379abb | ||
| 
						 | 
					4ade079633 | ||
| 
						 | 
					bd5bfd94b8 | ||
| 
						 | 
					9c2ca8c1ca | ||
| 
						 | 
					e6c91b625e | ||
| 
						 | 
					6c0d3d9522 | ||
| 
						 | 
					6ce1f15dfb | ||
| 
						 | 
					55610053af | ||
| 
						 | 
					892e23a5ba | ||
| 
						 | 
					34168287ed | ||
| 
						 | 
					28aa08748e | ||
| 
						 | 
					16a02e341c | ||
| 
						 | 
					7ec139ccc8 | ||
| 
						 | 
					80528410fc | ||
| 
						 | 
					66da859e5e | ||
| 
						 | 
					2a0d7b1a55 | ||
| 
						 | 
					5f25d4c175 | ||
| 
						 | 
					70a5104ead | ||
| 
						 | 
					87aa846b47 | ||
| 
						 | 
					0780f258da | ||
| 
						 | 
					b2c8dff727 | ||
| 
						 | 
					89cdfdb231 | ||
| 
						 | 
					77119a5cd8 | ||
| 
						 | 
					b73e6c89cd | ||
| 
						 | 
					5bfa29b6c5 | ||
| 
						 | 
					9f1083e9a0 | ||
| 
						 | 
					33d9ea5471 | ||
| 
						 | 
					2b2c0c9bda | ||
| 
						 | 
					3cb92b85b9 | ||
| 
						 | 
					31e86192ba | ||
| 
						 | 
					b510863f8f | ||
| 
						 | 
					2d8d15a71c | ||
| 
						 | 
					03fadc4b20 | ||
| 
						 | 
					d48ea5a2ab | ||
| 
						 | 
					adb10c47a8 | ||
| 
						 | 
					64c4be2669 | ||
| 
						 | 
					09080d4e5e | ||
| 
						 | 
					0c2b2c79ae | ||
| 
						 | 
					f56918ba9c | ||
| 
						 | 
					aa8650dd7f | ||
| 
						 | 
					efb4783d36 | ||
| 
						 | 
					a2407935d2 | ||
| 
						 | 
					0c2f8e77cc | ||
| 
						 | 
					bf1a8073c3 | ||
| 
						 | 
					b651875e24 | ||
| 
						 | 
					db389cb804 | ||
| 
						 | 
					bb1915274f | ||
| 
						 | 
					16a8948c45 | ||
| 
						 | 
					1d7d18c69c | ||
| 
						 | 
					63d9c4da5e | ||
| 
						 | 
					b0056c3b5e | ||
| 
						 | 
					056bcc8771 | ||
| 
						 | 
					080919b3c2 | ||
| 
						 | 
					c75f0ec379 | ||
| 
						 | 
					fd294c553a | ||
| 
						 | 
					c647ec4462 | ||
| 
						 | 
					24196dd987 | ||
| 
						 | 
					26c6a44c66 | ||
| 
						 | 
					0ccefd2c8f | ||
| 
						 | 
					a53d5a4c44 | ||
| 
						 | 
					c8df1656bd | ||
| 
						 | 
					e06c242baa | ||
| 
						 | 
					d7e09b6ada | ||
| 
						 | 
					72f459c77f | ||
| 
						 | 
					4f8f360098 | ||
| 
						 | 
					7d54dfc6e4 | ||
| 
						 | 
					24beb58dd5 | ||
| 
						 | 
					e542627b0c | ||
| 
						 | 
					247e7343d5 | ||
| 
						 | 
					c1c47e83b0 | ||
| 
						 | 
					51c4f9e6b1 | ||
| 
						 | 
					55fbdd58ac | ||
| 
						 | 
					c4aeff94b1 | ||
| 
						 | 
					f8b431c334 | ||
| 
						 | 
					d6020f9d52 | ||
| 
						 | 
					20573f0640 | ||
| 
						 | 
					41e3da3a8c | ||
| 
						 | 
					72af533f79 | ||
| 
						 | 
					153eec46e0 | ||
| 
						 | 
					8bc60e4749 | ||
| 
						 | 
					6b2792b0e0 | ||
| 
						 | 
					c4aa1d508e | ||
| 
						 | 
					afa1b66108 | ||
| 
						 | 
					6de67cd6e8 | ||
| 
						 | 
					a4e410a3ca | ||
| 
						 | 
					9fa6132fc5 | ||
| 
						 | 
					a69810b893 | ||
| 
						 | 
					e570b0406d | ||
| 
						 | 
					254889cdfc | ||
| 
						 | 
					be5bbc96e8 | ||
| 
						 | 
					aa7335e610 | ||
| 
						 | 
					6127af60c1 | ||
| 
						 | 
					bdd60a7be7 | ||
| 
						 | 
					16e101ba54 | ||
| 
						 | 
					06fc0f83b6 | ||
| 
						 | 
					34d7c8b3d4 | ||
| 
						 | 
					f46e17fd6f | ||
| 
						 | 
					4a91541c94 | ||
| 
						 | 
					e2bacd581a | ||
| 
						 | 
					15ea268d62 | ||
| 
						 | 
					97259b460c | ||
| 
						 | 
					b79879c2e3 | ||
| 
						 | 
					640ddcabcc | ||
| 
						 | 
					b5ee7b12d2 | ||
| 
						 | 
					f2cd4ded22 | ||
| 
						 | 
					e55974bf86 | ||
| 
						 | 
					c84d42f864 | ||
| 
						 | 
					c5434abc02 | ||
| 
						 | 
					3c755577b8 | ||
| 
						 | 
					120a464026 | ||
| 
						 | 
					edd98b7310 | ||
| 
						 | 
					3cad69430e | ||
| 
						 | 
					7b0feac4a4 | ||
| 
						 | 
					bdd35c13cc | ||
| 
						 | 
					2a6daa72f0 | ||
| 
						 | 
					3a9855556e | ||
| 
						 | 
					87953d115f | ||
| 
						 | 
					df49c7c58d | ||
| 
						 | 
					9532bda0fb | ||
| 
						 | 
					ea2229bab6 | ||
| 
						 | 
					2999ca3094 | ||
| 
						 | 
					3fcf0e3668 | ||
| 
						 | 
					82e8884ad8 | ||
| 
						 | 
					861ed6a5c1 | ||
| 
						 | 
					5a2fd63a2a | ||
| 
						 | 
					9d60506130 | ||
| 
						 | 
					f89e109f56 | ||
| 
						 | 
					4c14efd234 | ||
| 
						 | 
					aa6afc0164 | ||
| 
						 | 
					c954a33b05 | ||
| 
						 | 
					cbf574cead | ||
| 
						 | 
					b615a6d47f | ||
| 
						 | 
					fa25a31ed4 | ||
| 
						 | 
					75340193f7 | ||
| 
						 | 
					9dc95b0a12 | ||
| 
						 | 
					f89ea3432f | ||
| 
						 | 
					f0c01413fb | ||
| 
						 | 
					07c71ef7cc | ||
| 
						 | 
					e1a55b504a | ||
| 
						 | 
					44b5f76e34 | ||
| 
						 | 
					7ca6c91732 | ||
| 
						 | 
					d497ec688d | ||
| 
						 | 
					46639567a0 | ||
| 
						 | 
					e4f2ec7a52 | ||
| 
						 | 
					8002c31804 | ||
| 
						 | 
					63bf108731 | ||
| 
						 | 
					c60cb01ce0 | ||
| 
						 | 
					1427205215 | ||
| 
						 | 
					e44720af84 | ||
| 
						 | 
					e88f9e63ee | ||
| 
						 | 
					9bf3bc9a72 | ||
| 
						 | 
					88e24f07ae | ||
| 
						 | 
					e0309e1509 | ||
| 
						 | 
					cd1ef53d12 | ||
| 
						 | 
					6064384d59 | ||
| 
						 | 
					0db5599957 | ||
| 
						 | 
					9452dce181 | ||
| 
						 | 
					294777b915 | ||
| 
						 | 
					21970d1dc2 | ||
| 
						 | 
					efa69d26a1 | ||
| 
						 | 
					ff1d170e69 | ||
| 
						 | 
					de82809444 | ||
| 
						 | 
					f9dba66877 | ||
| 
						 | 
					e03330bd80 | ||
| 
						 | 
					9409af2083 | ||
| 
						 | 
					3579baa115 | ||
| 
						 | 
					2b5e6de806 | ||
| 
						 | 
					a82cc0205d | ||
| 
						 | 
					062864f4cc | ||
| 
						 | 
					49ea2bc3f4 | ||
| 
						 | 
					f182376dd6 | ||
| 
						 | 
					231339932b | ||
| 
						 | 
					bac6c229e5 | ||
| 
						 | 
					a99c20c0f4 | ||
| 
						 | 
					e59d53e999 | ||
| 
						 | 
					bdb4fb8991 | ||
| 
						 | 
					8b153a55c9 | ||
| 
						 | 
					2c0b4a24b9 | ||
| 
						 | 
					3d9c3f4937 | ||
| 
						 | 
					bc7151131d | ||
| 
						 | 
					7cdc986cdf | ||
| 
						 | 
					c6fb97a376 | ||
| 
						 | 
					f382173225 | ||
| 
						 | 
					5e54085703 | ||
| 
						 | 
					63a77cbed9 | ||
| 
						 | 
					efa17efced | ||
| 
						 | 
					ed9c66f584 | ||
| 
						 | 
					8d00562fba | ||
| 
						 | 
					664d9921b7 | ||
| 
						 | 
					4341e5af66 | ||
| 
						 | 
					2f9e51b8c9 | ||
| 
						 | 
					2d5c7f6740 | ||
| 
						 | 
					a5cd42feb9 | ||
| 
						 | 
					6505adf271 | ||
| 
						 | 
					04182a121a | ||
| 
						 | 
					217591fde5 | ||
| 
						 | 
					07ba411914 | ||
| 
						 | 
					05bde9d4a4 | ||
| 
						 | 
					c0de35b413 | ||
| 
						 | 
					af12c23e8e | ||
| 
						 | 
					8f8b526b54 | ||
| 
						 | 
					538865dfa5 | ||
| 
						 | 
					86712c50f2 | ||
| 
						 | 
					016a38be93 | ||
| 
						 | 
					2aa408524c | ||
| 
						 | 
					48b1917112 | ||
| 
						 | 
					ab00d209bc | ||
| 
						 | 
					3556deaca3 | ||
| 
						 | 
					7bce513afe | ||
| 
						 | 
					a572ac8327 | ||
| 
						 | 
					b6e27d5f0b | ||
| 
						 | 
					69aa303d96 | ||
| 
						 | 
					22ea8592c1 | ||
| 
						 | 
					380d64ecb1 | ||
| 
						 | 
					9b85079342 | ||
| 
						 | 
					6f9457ec12 | ||
| 
						 | 
					3c85c532bb | ||
| 
						 | 
					fa3e530bca | ||
| 
						 | 
					9f41a8b0aa | ||
| 
						 | 
					4a6ac727fe | ||
| 
						 | 
					1a7d25a484 | ||
| 
						 | 
					17c754fc00 | ||
| 
						 | 
					bd0c3409a8 | ||
| 
						 | 
					6829e62718 | ||
| 
						 | 
					86e07525d5 | ||
| 
						 | 
					3a16276cf7 | ||
| 
						 | 
					fdd51829b1 | ||
| 
						 | 
					0c2529a812 | ||
| 
						 | 
					3c19bc3fb3 | ||
| 
						 | 
					e529a825f7 | ||
| 
						 | 
					4c3ad66b7f | ||
| 
						 | 
					2a4b2a000c | ||
| 
						 | 
					35ce4eb01d | ||
| 
						 | 
					c0ee870b0a | ||
| 
						 | 
					b854bbd844 | ||
| 
						 | 
					e47306eb7a | ||
| 
						 | 
					6aea309a93 | ||
| 
						 | 
					5bc7b3a68e | ||
| 
						 | 
					c4b9089bb9 | ||
| 
						 | 
					222c72e50f | ||
| 
						 | 
					0e05f2c6c9 | ||
| 
						 | 
					800b70a3bf | ||
| 
						 | 
					bc9293b815 | ||
| 
						 | 
					1f20202e2c | ||
| 
						 | 
					4797a97215 | ||
| 
						 | 
					b870947d42 | ||
| 
						 | 
					112bd4e2b4 | ||
| 
						 | 
					1de5da80c9 | ||
| 
						 | 
					85358d04cd | ||
| 
						 | 
					c5f890af2c | ||
| 
						 | 
					694d4e7777 | ||
| 
						 | 
					b7a6f1d20e | ||
| 
						 | 
					734b1b2041 | ||
| 
						 | 
					f8e3d23b99 | ||
| 
						 | 
					2f964bac26 | ||
| 
						 | 
					01376858cd | ||
| 
						 | 
					edec5eb5e7 | ||
| 
						 | 
					4e8d35a461 | ||
| 
						 | 
					744f482350 | ||
| 
						 | 
					19987dcbfa | ||
| 
						 | 
					9cc1611588 | ||
| 
						 | 
					20307c70ae | ||
| 
						 | 
					99d870a472 | ||
| 
						 | 
					ff35649758 | ||
| 
						 | 
					5e562c77db | ||
| 
						 | 
					e96131705a | ||
| 
						 | 
					a4c2211ea3 | ||
| 
						 | 
					a609be5633 | ||
| 
						 | 
					cdae03a4eb | ||
| 
						 | 
					4645c89889 | ||
| 
						 | 
					91206793c2 | ||
| 
						 | 
					3e10be93f2 | ||
| 
						 | 
					810a06b12c | ||
| 
						 | 
					b84e8f20c3 | ||
| 
						 | 
					56417a3075 | ||
| 
						 | 
					9eb0b2f1da | ||
| 
						 | 
					e28e08146e | ||
| 
						 | 
					f3538f2b81 | ||
| 
						 | 
					a49b9e0014 | ||
| 
						 | 
					238dae8604 | ||
| 
						 | 
					b9f19f8917 | ||
| 
						 | 
					06f58c0df7 | ||
| 
						 | 
					c1bf6ca6cc | ||
| 
						 | 
					30e5deae5d | ||
| 
						 | 
					ea8d436f30 | ||
| 
						 | 
					27ee521753 | ||
| 
						 | 
					b956f2ceb2 | ||
| 
						 | 
					e6847aa0f0 | ||
| 
						 | 
					edfed938ba | ||
| 
						 | 
					f475f0c1bb | ||
| 
						 | 
					81da41732c | ||
| 
						 | 
					06c3d5bb9a | ||
| 
						 | 
					3e8c6d3d35 | ||
| 
						 | 
					b8791980b4 | ||
| 
						 | 
					61046b8d7a | ||
| 
						 | 
					7d984d8c38 | ||
| 
						 | 
					8ef25de377 | ||
| 
						 | 
					6f080f9cec | ||
| 
						 | 
					1f71d2e2c8 | ||
| 
						 | 
					56b06aef6d | ||
| 
						 | 
					1654ae9a2a | ||
| 
						 | 
					2f2302f8d5 | ||
| 
						 | 
					f11613b620 | ||
| 
						 | 
					bde2afbe23 | ||
| 
						 | 
					3a975d9489 | ||
| 
						 | 
					db8f0d2ca9 | ||
| 
						 | 
					b45065d38b | ||
| 
						 | 
					ca7e346669 | ||
| 
						 | 
					a11624497c | ||
| 
						 | 
					495b241fa6 | ||
| 
						 | 
					4894b45ced | ||
| 
						 | 
					76eb402668 | ||
| 
						 | 
					5b0de48ddd | ||
| 
						 | 
					fe270dd527 | ||
| 
						 | 
					65dfcf4696 | ||
| 
						 | 
					773bcc300d | ||
| 
						 | 
					a04ed0e8f3 | ||
| 
						 | 
					829179e888 | ||
| 
						 | 
					20bd1446c0 | ||
| 
						 | 
					52d13777da | ||
| 
						 | 
					ddcdbfd71e | ||
| 
						 | 
					1647f00c29 | ||
| 
						 | 
					0453aca5af | ||
| 
						 | 
					2bdda84e37 | ||
| 
						 | 
					c5fe641179 | ||
| 
						 | 
					7d1b37cdac | ||
| 
						 | 
					0afcc76971 | ||
| 
						 | 
					b2d9700f53 | ||
| 
						 | 
					d98a5ed4dd | ||
| 
						 | 
					6afafc313c | ||
| 
						 | 
					a25f6a9c88 | ||
| 
						 | 
					b5ea2fbc2c | ||
| 
						 | 
					74ad25a4c6 | ||
| 
						 | 
					da39e505dd | ||
| 
						 | 
					fd41cb8491 | ||
| 
						 | 
					e68894fa03 | ||
| 
						 | 
					f676171e52 | ||
| 
						 | 
					4e82f01547 | ||
| 
						 | 
					6b6f367c3d | ||
| 
						 | 
					04dce631a2 | ||
| 
						 | 
					4ab3175b12 | ||
| 
						 | 
					f1f28535c3 | ||
| 
						 | 
					b73a3693e5 | ||
| 
						 | 
					139577f937 | ||
| 
						 | 
					0e9a6ed72a | ||
| 
						 | 
					e9751d4b74 | ||
| 
						 | 
					84c3cd79d1 | ||
| 
						 | 
					7f0b11c0ae | ||
| 
						 | 
					211694f67e | ||
| 
						 | 
					8f910594bd | ||
| 
						 | 
					1a219c22b1 | ||
| 
						 | 
					d9b825cff2 | ||
| 
						 | 
					d89eb6ad5a | ||
| 
						 | 
					c156a68d06 | ||
| 
						 | 
					c231b0175d | ||
| 
						 | 
					283b0e25ac | ||
| 
						 | 
					ede0b15c9d | ||
| 
						 | 
					587ca06da9 | ||
| 
						 | 
					e83d36c053 | ||
| 
						 | 
					40991faeae | ||
| 
						 | 
					01433c5043 | ||
| 
						 | 
					6ae12c415e | ||
| 
						 | 
					622958449b | ||
| 
						 | 
					973a9c075d | ||
| 
						 | 
					37de0b8bdf | ||
| 
						 | 
					b4f70084cc | ||
| 
						 | 
					c8a23ad3f4 | ||
| 
						 | 
					ae8aa836d5 | ||
| 
						 | 
					80c3bbf657 | ||
| 
						 | 
					b748045470 | ||
| 
						 | 
					3e4a80cc35 | ||
| 
						 | 
					034cea5e72 | ||
| 
						 | 
					bb0ca87a0d | ||
| 
						 | 
					eacaabc592 | ||
| 
						 | 
					11694aab66 | ||
| 
						 | 
					fe53107fda | ||
| 
						 | 
					6611f66978 | ||
| 
						 | 
					05239f0c41 | ||
| 
						 | 
					f3a13cb236 | ||
| 
						 | 
					dc004e8c17 | ||
| 
						 | 
					02c30cdeef | ||
| 
						 | 
					2d29457c4d | ||
| 
						 | 
					b32da7c3da | ||
| 
						 | 
					9bcf07ae4a | ||
| 
						 | 
					14566125ea | ||
| 
						 | 
					db6ee54353 | ||
| 
						 | 
					4e4f835232 | ||
| 
						 | 
					81c0546407 | ||
| 
						 | 
					7296b3f922 | ||
| 
						 | 
					b433e12a3d | ||
| 
						 | 
					4cb0ebe5b2 | ||
| 
						 | 
					e3f850ee05 | ||
| 
						 | 
					be99868bd1 | ||
| 
						 | 
					8a9a11e8dc | ||
| 
						 | 
					2007c3bb38 | ||
| 
						 | 
					ba0822ba96 | ||
| 
						 | 
					deca8cfc44 | ||
| 
						 | 
					0d87098e08 | ||
| 
						 | 
					db67dcba6a | ||
| 
						 | 
					259ea23297 | ||
| 
						 | 
					ac998ec8d8 | ||
| 
						 | 
					c96f8e238d | ||
| 
						 | 
					3fde9964ce | ||
| 
						 | 
					2bd90c13a0 | ||
| 
						 | 
					653e69e334 | ||
| 
						 | 
					76495617e0 | ||
| 
						 | 
					55c3963c88 | ||
| 
						 | 
					109c20299c | ||
| 
						 | 
					6f23f24afe | ||
| 
						 | 
					10ed60dc71 | ||
| 
						 | 
					67a1f98c2c | ||
| 
						 | 
					458fb8f491 | ||
| 
						 | 
					2cd1c2855e | ||
| 
						 | 
					a60fc419f5 | ||
| 
						 | 
					87fd66bb0e | ||
| 
						 | 
					eb645abeac | ||
| 
						 | 
					d9959e336e | ||
| 
						 | 
					91b167202d | ||
| 
						 | 
					5223016337 | ||
| 
						 | 
					61599fb59f | ||
| 
						 | 
					1ade44b352 | ||
| 
						 | 
					299193dd1c | ||
| 
						 | 
					e7e5a58d0c | ||
| 
						 | 
					c7e6aabbca | ||
| 
						 | 
					7be5b6dae4 | ||
| 
						 | 
					92b0e544f3 | ||
| 
						 | 
					bf6b314d89 | ||
| 
						 | 
					9909047461 | ||
| 
						 | 
					5405bd9793 | ||
| 
						 | 
					532c30c83e | ||
| 
						 | 
					223d1b54cf | ||
| 
						 | 
					e71a010646 | ||
| 
						 | 
					66533b1a8d | ||
| 
						 | 
					f3ba4c6b82 | ||
| 
						 | 
					361717d2be | ||
| 
						 | 
					45feea4cf0 | ||
| 
						 | 
					af49c11250 | ||
| 
						 | 
					79327be6c7 | ||
| 
						 | 
					baa17db184 | ||
| 
						 | 
					abb7c2181e | ||
| 
						 | 
					8767ac3bc7 | ||
| 
						 | 
					9e4df2bcf5 | ||
| 
						 | 
					254a7483e5 | ||
| 
						 | 
					001bd51ceb | ||
| 
						 | 
					dce64343d6 | ||
| 
						 | 
					91907e0bf4 | ||
| 
						 | 
					69d8d386ed | ||
| 
						 | 
					1fba1e38ea | ||
| 
						 | 
					5fafa2d524 | ||
| 
						 | 
					96a42aaa2d | ||
| 
						 | 
					e90d17d240 | ||
| 
						 | 
					4e81a68af7 | ||
| 
						 | 
					7368dd4f8f | ||
| 
						 | 
					59129afc05 | ||
| 
						 | 
					221e00eaa9 | ||
| 
						 | 
					5c166470a5 | ||
| 
						 | 
					346358a5b7 | ||
| 
						 | 
					afb84bb1cc | ||
| 
						 | 
					8c2ee4273c | ||
| 
						 | 
					0e3bcc6f32 | ||
| 
						 | 
					1374a4db3b | ||
| 
						 | 
					d4700731ca | ||
| 
						 | 
					03973017a7 | ||
| 
						 | 
					04edde2b11 | ||
| 
						 | 
					da8eb716e8 | ||
| 
						 | 
					c73eb2ffff | ||
| 
						 | 
					d1c0ba8f7a | ||
| 
						 | 
					824e9410c6 | ||
| 
						 | 
					212f618373 | ||
| 
						 | 
					f1d6cc79e4 | ||
| 
						 | 
					8c5b73de2a | ||
| 
						 | 
					e5c236c210 | ||
| 
						 | 
					773768ae27 | ||
| 
						 | 
					9f002bee53 | ||
| 
						 | 
					4ce6928d5b | ||
| 
						 | 
					5b2fb32961 | ||
| 
						 | 
					4101b5c5ed | ||
| 
						 | 
					69ba6bd142 | ||
| 
						 | 
					5610970fe9 | ||
| 
						 | 
					34ba18760f | ||
| 
						 | 
					50916c6a7d | ||
| 
						 | 
					61f0c090df | ||
| 
						 | 
					9e4f76c154 | ||
| 
						 | 
					1a5a1903ea | ||
| 
						 | 
					0a72f568ec | ||
| 
						 | 
					5305e79eae | ||
| 
						 | 
					4a4ade6dc8 | ||
| 
						 | 
					8795b52512 | ||
| 
						 | 
					4fb5ce6a92 | ||
| 
						 | 
					4d052bdd91 | ||
| 
						 | 
					ba420f1097 | ||
| 
						 | 
					5a8cbb8955 | ||
| 
						 | 
					2dc24635ec | ||
| 
						 | 
					4f586f7bd0 | ||
| 
						 | 
					1fe5070b76 | ||
| 
						 | 
					9a248f1593 | ||
| 
						 | 
					40b850b458 | ||
| 
						 | 
					d8c525b8b1 | ||
| 
						 | 
					13b56eeb7a | ||
| 
						 | 
					f299d628f3 | ||
| 
						 | 
					22c05c0575 | ||
| 
						 | 
					b6679879b8 | ||
| 
						 | 
					a615c40499 | ||
| 
						 | 
					d75eb73653 | ||
| 
						 | 
					a39321f37e | ||
| 
						 | 
					cfab2caee1 | ||
| 
						 | 
					b5278f38b0 | ||
| 
						 | 
					e11f21af9a | ||
| 
						 | 
					fbea372817 | ||
| 
						 | 
					69aad3a720 | ||
| 
						 | 
					a126cd1760 | ||
| 
						 | 
					99fb568e67 | ||
| 
						 | 
					7838f4cfff | ||
| 
						 | 
					ab2dfd22f3 | ||
| 
						 | 
					ad6fe4a88c | ||
| 
						 | 
					8196cc85f8 | ||
| 
						 | 
					6d82d2d22e | ||
| 
						 | 
					1fbc81a970 | ||
| 
						 | 
					a0c11928db | ||
| 
						 | 
					a4c69e9a0f | ||
| 
						 | 
					1f3f18443d | ||
| 
						 | 
					d5b8f7860f | ||
| 
						 | 
					caa1b28be3 | ||
| 
						 | 
					63cb1a7ce0 | ||
| 
						 | 
					dba79821f0 | ||
| 
						 | 
					048497720c | ||
| 
						 | 
					99b9757685 | ||
| 
						 | 
					914f7c36d7 | ||
| 
						 | 
					c684d5e5f2 | ||
| 
						 | 
					ff39958cee | ||
| 
						 | 
					21ca4c4d5d | ||
| 
						 | 
					7def902261 | ||
| 
						 | 
					e3081b2502 | ||
| 
						 | 
					d04f852368 | ||
| 
						 | 
					a84177b432 | ||
| 
						 | 
					87254e0b7b | ||
| 
						 | 
					f96d56c4aa | ||
| 
						 | 
					00a1e2f8e4 | ||
| 
						 | 
					9c62f94129 | ||
| 
						 | 
					f62b33f140 | ||
| 
						 | 
					eafdc5e10a | ||
| 
						 | 
					5608c14020 | ||
| 
						 | 
					0e86235265 | ||
| 
						 | 
					ff52bf3691 | ||
| 
						 | 
					5ed116e220 | ||
| 
						 | 
					71a7501bcf | ||
| 
						 | 
					6b25501bf1 | ||
| 
						 | 
					6ed81fa5b3 | ||
| 
						 | 
					b4da1f83e6 | ||
| 
						 | 
					bd9d890605 | ||
| 
						 | 
					ba6f60dba7 | ||
| 
						 | 
					1bcf4e66bb | ||
| 
						 | 
					f7cf439b34 | ||
| 
						 | 
					814532a33c | ||
| 
						 | 
					df2023a6cb | ||
| 
						 | 
					c7a56f677d | ||
| 
						 | 
					cb7b1fb144 | ||
| 
						 | 
					a7d4d3c550 | ||
| 
						 | 
					89c6017cc0 | ||
| 
						 | 
					5c756005aa | ||
| 
						 | 
					52490354f3 | ||
| 
						 | 
					abc9958c52 | ||
| 
						 | 
					4ead98fa84 | ||
| 
						 | 
					33fa7c4ebe | ||
| 
						 | 
					eeb8117303 | ||
| 
						 | 
					eb16f00cf2 | ||
| 
						 | 
					ca5c1b17a2 | ||
| 
						 | 
					aeb86d615c | ||
| 
						 | 
					a6aa389d2f | ||
| 
						 | 
					3fbade23a2 | ||
| 
						 | 
					04ec930abc | ||
| 
						 | 
					e9465daee3 | ||
| 
						 | 
					6c565fada0 | ||
| 
						 | 
					bbf890fe27 | ||
| 
						 | 
					c09d8c1419 | ||
| 
						 | 
					a66d8d33dd | ||
| 
						 | 
					8942f70cdf | ||
| 
						 | 
					5a23352c03 | ||
| 
						 | 
					57ad189129 | ||
| 
						 | 
					dfa9e2c5ea | ||
| 
						 | 
					1b2abc5f49 | ||
| 
						 | 
					f10732554b | ||
| 
						 | 
					5db296dd70 | ||
| 
						 | 
					219ba87a93 | ||
| 
						 | 
					ccd6f7ed77 | ||
| 
						 | 
					1e7ded69cf | ||
| 
						 | 
					2e102855f4 | ||
| 
						 | 
					085fb4b737 | ||
| 
						 | 
					1083fe4999 | ||
| 
						 | 
					00fdb135a7 | ||
| 
						 | 
					5abafcc381 | ||
| 
						 | 
					4226f0ce64 | ||
| 
						 | 
					64355ecad3 | ||
| 
						 | 
					f8ffecb176 | ||
| 
						 | 
					5e1fd41357 | ||
| 
						 | 
					9594370e0c | ||
| 
						 | 
					db5057c742 | ||
| 
						 | 
					81d2206ff8 | ||
| 
						 | 
					0da77a840b | ||
| 
						 | 
					7a2b9c50a3 | ||
| 
						 | 
					d5c46bdfc0 | ||
| 
						 | 
					01527e743f | ||
| 
						 | 
					fd6da3b2e7 | ||
| 
						 | 
					1f32b1489c | ||
| 
						 | 
					47bc1c7013 | ||
| 
						 | 
					cfbfd39de8 | ||
| 
						 | 
					ef86bad0d1 | ||
| 
						 | 
					76557e34d2 | ||
| 
						 | 
					d9f898ab6d | ||
| 
						 | 
					454cbc96b7 | ||
| 
						 | 
					aa926fbd27 | ||
| 
						 | 
					2089b2cee5 | ||
| 
						 | 
					8d5ce819dd | ||
| 
						 | 
					72c76ca256 | ||
| 
						 | 
					aeca599087 | ||
| 
						 | 
					c36b6d4d01 | ||
| 
						 | 
					5b67329747 | ||
| 
						 | 
					373dcec57a | ||
| 
						 | 
					496bcbb0de | ||
| 
						 | 
					73c3d32705 | ||
| 
						 | 
					d2a6eb4b1e | ||
| 
						 | 
					ddb6edd831 | ||
| 
						 | 
					508ae1b3d5 | ||
| 
						 | 
					6f6cd3abb9 | ||
| 
						 | 
					3698c1f620 | ||
| 
						 | 
					7a49accd0b | ||
| 
						 | 
					09c933ea80 | ||
| 
						 | 
					43464e94ed | ||
| 
						 | 
					ad6a8ca58b | ||
| 
						 | 
					4a2b684ef4 | ||
| 
						 | 
					a9b465c5c9 | ||
| 
						 | 
					c7cfde42a9 | ||
| 
						 | 
					48438d6016 | ||
| 
						 | 
					b8f0b59985 | ||
| 
						 | 
					d5069b5af0 | ||
| 
						 | 
					cd103a5721 | ||
| 
						 | 
					05d9421e8b | ||
| 
						 | 
					c619f6cb0f | ||
| 
						 | 
					e1a8b6c8d5 | ||
| 
						 | 
					8fcb801d15 | ||
| 
						 | 
					8ba58951e9 | ||
| 
						 | 
					d889035fe6 | ||
| 
						 | 
					9409e38050 | ||
| 
						 | 
					f64f425a50 | ||
| 
						 | 
					0d2abe3084 | ||
| 
						 | 
					1312a7a2e2 | ||
| 
						 | 
					487c0299c9 | ||
| 
						 | 
					a3399291ad | ||
| 
						 | 
					918fb5487e | ||
| 
						 | 
					63f15987a5 | ||
| 
						 | 
					e749ae510f | ||
| 
						 | 
					8608de1c6f | ||
| 
						 | 
					ab48305fb6 | ||
| 
						 | 
					5e7a3bb69a | ||
| 
						 | 
					33cefd6f6e | ||
| 
						 | 
					8861174624 | ||
| 
						 | 
					88841f1059 | ||
| 
						 | 
					70f30aa95d | ||
| 
						 | 
					c99f9d7abf | ||
| 
						 | 
					538f110407 | ||
| 
						 | 
					e689a27d62 | ||
| 
						 | 
					fd09009227 | ||
| 
						 | 
					1aadcedcfb | ||
| 
						 | 
					4fd81a99f8 | ||
| 
						 | 
					d1abe62d1c | ||
| 
						 | 
					a9ce3e3834 | ||
| 
						 | 
					4b43167ad1 | ||
| 
						 | 
					6e156a4cd7 | ||
| 
						 | 
					921a32a306 | ||
| 
						 | 
					de4e9e3b44 | ||
| 
						 | 
					d4cdb683a4 | ||
| 
						 | 
					08702002e8 | ||
| 
						 | 
					aec5487cdd | ||
| 
						 | 
					2de858b9fc | ||
| 
						 | 
					9e9f61a317 | ||
| 
						 | 
					02423b2e92 | ||
| 
						 | 
					c32e0ecc59 | ||
| 
						 | 
					f212a98ee7 | ||
| 
						 | 
					91036996ac | ||
| 
						 | 
					610dd90288 | ||
| 
						 | 
					15f03c2f13 | ||
| 
						 | 
					f5c0d95e8c | ||
| 
						 | 
					af1acc851b | ||
| 
						 | 
					3d6815817c | ||
| 
						 | 
					fd7040d2b6 | ||
| 
						 | 
					82315be75d | ||
| 
						 | 
					8520b5c785 | ||
| 
						 | 
					ba11e24d47 | ||
| 
						 | 
					cec76a36d6 | ||
| 
						 | 
					9d138379a2 | ||
| 
						 | 
					f56b9ee92e | ||
| 
						 | 
					297b27655e | ||
| 
						 | 
					607f8420f3 | ||
| 
						 | 
					53e9987b4d | ||
| 
						 | 
					7d335868df | ||
| 
						 | 
					26b6a3b088 | ||
| 
						 | 
					0e43668546 | ||
| 
						 | 
					534ea700bd | ||
| 
						 | 
					b843aa4eda | ||
| 
						 | 
					f0c22a3f33 | ||
| 
						 | 
					49c31dc2b4 | ||
| 
						 | 
					6fdc9aa79f | ||
| 
						 | 
					4be062bbc3 | ||
| 
						 | 
					f5e433464b | ||
| 
						 | 
					beaafefcf1 | ||
| 
						 | 
					8edaf6e2f2 | ||
| 
						 | 
					4cde2ab765 | ||
| 
						 | 
					edfc93aeba | ||
| 
						 | 
					577910b464 | ||
| 
						 | 
					2fced87e75 | ||
| 
						 | 
					73065b67e4 | ||
| 
						 | 
					2cbd962088 | ||
| 
						 | 
					769c74c0ac | ||
| 
						 | 
					500fec2d5f | ||
| 
						 | 
					a61785b6a1 | ||
| 
						 | 
					bfe803bda3 | ||
| 
						 | 
					429dc676b1 | ||
| 
						 | 
					185557344a | ||
| 
						 | 
					de5182eef3 | ||
| 
						 | 
					8431e768c9 | ||
| 
						 | 
					de50520a8c | ||
| 
						 | 
					346b3e7ce9 | ||
| 
						 | 
					71bcd9f1af | ||
| 
						 | 
					6795e256c1 | ||
| 
						 | 
					8c48c943e7 | ||
| 
						 | 
					aa4a90c880 | ||
| 
						 | 
					2ec0cfbe99 | ||
| 
						 | 
					d0ec28b3d3 | ||
| 
						 | 
					e54dcfe88d | ||
| 
						 | 
					52f6e28e9e | ||
| 
						 | 
					3788b3564c | ||
| 
						 | 
					27972d2c1d | ||
| 
						 | 
					5c60a646f3 | ||
| 
						 | 
					75051c8b59 | ||
| 
						 | 
					5db0eeea21 | ||
| 
						 | 
					6e73748492 | ||
| 
						 | 
					170b87390e | ||
| 
						 | 
					2ae91fbef0 | ||
| 
						 | 
					e34e417d94 | ||
| 
						 | 
					3c9dd6c3ef | ||
| 
						 | 
					c5c5dcd0be | ||
| 
						 | 
					29c46b64a2 | ||
| 
						 | 
					3dc382294b | ||
| 
						 | 
					3f6f7289aa | ||
| 
						 | 
					b2aa401776 | ||
| 
						 | 
					76ec21928c | ||
| 
						 | 
					9c836daf65 | ||
| 
						 | 
					3ae2465788 | ||
| 
						 | 
					7ab08e1fee | ||
| 
						 | 
					128d2c23b3 | ||
| 
						 | 
					6daacdb785 | ||
| 
						 | 
					ed40ff9e2d | ||
| 
						 | 
					f3e9e2a0f8 | ||
| 
						 | 
					a0306ea660 | ||
| 
						 | 
					c5a049babd | ||
| 
						 | 
					5c24071504 | ||
| 
						 | 
					43baf7ff21 | ||
| 
						 | 
					7b8e7f0f3a | ||
| 
						 | 
					4561109a69 | ||
| 
						 | 
					7966dd5287 | ||
| 
						 | 
					fa836faede | ||
| 
						 | 
					56efffdcd1 | ||
| 
						 | 
					fb037ec05b | ||
| 
						 | 
					419f638910 | ||
| 
						 | 
					95adf3df77 | ||
| 
						 | 
					859abd6b5d | ||
| 
						 | 
					8432a1729f | ||
| 
						 | 
					e8f7b0f7f5 | ||
| 
						 | 
					244e2e1451 | ||
| 
						 | 
					5091e01ea1 | ||
| 
						 | 
					ddd260eb62 | ||
| 
						 | 
					e6948bf0f9 | ||
| 
						 | 
					de87c420ef | ||
| 
						 | 
					0eccee4378 | ||
| 
						 | 
					5d1d9911cb | ||
| 
						 | 
					1016b856d1 | ||
| 
						 | 
					fe9a604b1e | ||
| 
						 | 
					bc9c30a003 | ||
| 
						 | 
					9fc8cb39aa | ||
| 
						 | 
					8e87d58712 | ||
| 
						 | 
					0491c2cfc8 | ||
| 
						 | 
					3fae3283e6 | ||
| 
						 | 
					d05c4d8841 | ||
| 
						 | 
					e38c1680d6 | ||
| 
						 | 
					77ed11c506 | ||
| 
						 | 
					4a742e5c79 | ||
| 
						 | 
					27c04aaa67 | ||
| 
						 | 
					0bc31f1887 | ||
| 
						 | 
					fb37eda3e2 | ||
| 
						 | 
					05d75b4353 | ||
| 
						 | 
					eed2ce58e3 | ||
| 
						 | 
					84f7f20985 | ||
| 
						 | 
					1de99a2a81 | ||
| 
						 | 
					36be4f7f06 | ||
| 
						 | 
					a1cfcb413d | ||
| 
						 | 
					6f5189c044 | ||
| 
						 | 
					06ce0d8830 | ||
| 
						 | 
					987ac89403 | ||
| 
						 | 
					cfaee9f7c6 | ||
| 
						 | 
					3e6d476ac3 | ||
| 
						 | 
					d96ba65a23 | ||
| 
						 | 
					4decd27947 | ||
| 
						 | 
					31dab574cc | ||
| 
						 | 
					da761c9a22 | ||
| 
						 | 
					e4fa638653 | ||
| 
						 | 
					1fae7018a8 | ||
| 
						 | 
					d8fc974ac0 | ||
| 
						 | 
					6da2018789 | ||
| 
						 | 
					1771722b2f | ||
| 
						 | 
					8e17e82d9e | ||
| 
						 | 
					861175ef00 | ||
| 
						 | 
					d53492bba4 | ||
| 
						 | 
					658454a04c | ||
| 
						 | 
					b862c108dd | ||
| 
						 | 
					aee120afb9 | ||
| 
						 | 
					8ae92aef66 | ||
| 
						 | 
					e6db21ecc4 | ||
| 
						 | 
					418f4219fa | ||
| 
						 | 
					7af0d906e3 | ||
| 
						 | 
					945dad277d | ||
| 
						 | 
					c764c2a20f | ||
| 
						 | 
					3ed8fe8778 | ||
| 
						 | 
					cbf923b12c | ||
| 
						 | 
					d371ca93e5 | ||
| 
						 | 
					597d02b508 | ||
| 
						 | 
					fb5a692d27 | ||
| 
						 | 
					c6ef75690f | ||
| 
						 | 
					b2ae57f1b6 | ||
| 
						 | 
					562f1470ce | ||
| 
						 | 
					ac10665ad8 | ||
| 
						 | 
					07f7b66fae | ||
| 
						 | 
					c351aa7f1b | ||
| 
						 | 
					f42d52e6bd | ||
| 
						 | 
					da9402fbf6 | ||
| 
						 | 
					da227b901d | ||
| 
						 | 
					0c2cfff9b0 | ||
| 
						 | 
					0030303b69 | ||
| 
						 | 
					7725a7eb56 | ||
| 
						 | 
					27dad21548 | ||
| 
						 | 
					94d4fee08f | ||
| 
						 | 
					2debd5b5f7 | ||
| 
						 | 
					404e998eb7 | ||
| 
						 | 
					d3dfcde0f7 | ||
| 
						 | 
					d419b93e3e | ||
| 
						 | 
					0ff10bb1f7 | ||
| 
						 | 
					bb6bcbccda | ||
| 
						 | 
					353246bd60 | ||
| 
						 | 
					9d0b2cbbce | ||
| 
						 | 
					1ef86980b9 | ||
| 
						 | 
					4f8a166058 | ||
| 
						 | 
					6f53e59641 | ||
| 
						 | 
					02321de0f2 | ||
| 
						 | 
					41e6eceb28 | ||
| 
						 | 
					7d8199f0c3 | ||
| 
						 | 
					19054ab6da | ||
| 
						 | 
					fffa2a61d7 | ||
| 
						 | 
					c2b43164bd | ||
| 
						 | 
					9954d05ca6 | ||
| 
						 | 
					a39b5af10b | ||
| 
						 | 
					315e3c2518 | ||
| 
						 | 
					85e79ce288 | ||
| 
						 | 
					c96031da69 | ||
| 
						 | 
					cb14764fab | ||
| 
						 | 
					e5aaac24bb | ||
| 
						 | 
					cc17629f30 | ||
| 
						 | 
					13db80c282 | ||
| 
						 | 
					40dcae9c2e | ||
| 
						 | 
					615c90c948 | ||
| 
						 | 
					ddacf1cf69 | ||
| 
						 | 
					48140167cd | ||
| 
						 | 
					3273c7b679 | ||
| 
						 | 
					eaadfb5869 | ||
| 
						 | 
					adaf2b697c | ||
| 
						 | 
					58d2e70fc5 | ||
| 
						 | 
					0905af38fc | ||
| 
						 | 
					bb9c95ea53 | ||
| 
						 | 
					350ffe8dae | ||
| 
						 | 
					b601eb8cda | ||
| 
						 | 
					63fc44dfa5 | ||
| 
						 | 
					6bf7e2cc37 | ||
| 
						 | 
					ffc6aeef14 | ||
| 
						 | 
					c0a9cbebe1 | ||
| 
						 | 
					bf5f585b0d | ||
| 
						 | 
					209def2d72 | ||
| 
						 | 
					4aa12b6c5f | ||
| 
						 | 
					a870315629 | ||
| 
						 | 
					72ebafff51 | ||
| 
						 | 
					e5904f2d5e | ||
| 
						 | 
					07a7c08aef | ||
| 
						 | 
					a5ecaca6a7 | ||
| 
						 | 
					b18df82e1d | ||
| 
						 | 
					4e7e79f770 | ||
| 
						 | 
					385c2a76d1 | ||
| 
						 | 
					9e7fec216e | ||
| 
						 | 
					317f0da91e | ||
| 
						 | 
					4a15e55793 | ||
| 
						 | 
					60fde4d342 | ||
| 
						 | 
					6d19d40718 | ||
| 
						 | 
					f6214d1db8 | ||
| 
						 | 
					2d03f073a7 | ||
| 
						 | 
					408a8adc15 | ||
| 
						 | 
					8f279596cb | ||
| 
						 | 
					f3cb9ae459 | ||
| 
						 | 
					7cbe684ef5 | ||
| 
						 | 
					e9f513d74a | ||
| 
						 | 
					dcb23e2aaa | ||
| 
						 | 
					11a222f5d9 | ||
| 
						 | 
					73207a1d8b | ||
| 
						 | 
					27000ed6d9 | ||
| 
						 | 
					8a5c255b3d | ||
| 
						 | 
					bb30ffc4dc | ||
| 
						 | 
					3ee4e1e79f | ||
| 
						 | 
					3c18a2bb2e | ||
| 
						 | 
					cac54404b9 | ||
| 
						 | 
					c4887da39c | ||
| 
						 | 
					35bb74a6bd | ||
| 
						 | 
					e8e09d33df | ||
| 
						 | 
					82266a1ac9 | ||
| 
						 | 
					be3e0ff7c3 | ||
| 
						 | 
					0def48b60f | ||
| 
						 | 
					a3f71ccff6 | ||
| 
						 | 
					2caa36aa4f | ||
| 
						 | 
					999e155f55 | ||
| 
						 | 
					53d8e9dc97 | ||
| 
						 | 
					907e98fbb5 | ||
| 
						 | 
					58f19cc697 | ||
| 
						 | 
					dcaaadd8ed | ||
| 
						 | 
					af7d23c9b4 | ||
| 
						 | 
					2168a94495 | ||
| 
						 | 
					4e149bb447 | ||
| 
						 | 
					3bf235a4c9 | ||
| 
						 | 
					a69c18980f | ||
| 
						 | 
					336aa0b7da | ||
| 
						 | 
					eb8b4d9a99 | ||
| 
						 | 
					0ee525d6de | ||
| 
						 | 
					d3e9409bb0 | ||
| 
						 | 
					0822a62f40 | ||
| 
						 | 
					0cdfef1e22 | ||
| 
						 | 
					8064583d26 | ||
| 
						 | 
					419553258d | ||
| 
						 | 
					815e1e9fe4 | ||
| 
						 | 
					06e7320c3e | ||
| 
						 | 
					e867516843 | ||
| 
						 | 
					2f0331c90c | ||
| 
						 | 
					67fb3a5155 | ||
| 
						 | 
					f97f2b1bb6 | ||
| 
						 | 
					ce6c954d2e | ||
| 
						 | 
					edcf74c6ad | ||
| 
						 | 
					d6d5d43708 | ||
| 
						 | 
					57136a268a | ||
| 
						 | 
					cb791aaa2f | ||
| 
						 | 
					339c512762 | ||
| 
						 | 
					15f9bea73b | ||
| 
						 | 
					a1a4d23797 | ||
| 
						 | 
					3aafb47729 | ||
| 
						 | 
					8f711db4e8 | ||
| 
						 | 
					415371c9d9 | ||
| 
						 | 
					2c1b06e672 | ||
| 
						 | 
					72e22b0bb8 | ||
| 
						 | 
					c8338ebf7a | ||
| 
						 | 
					b082790c7d | ||
| 
						 | 
					eda7d538bf | ||
| 
						 | 
					55acda98f7 | ||
| 
						 | 
					96fd758ea9 | ||
| 
						 | 
					6ff2b0883a | ||
| 
						 | 
					e88d7ab245 | ||
| 
						 | 
					f50f2fd2a7 | ||
| 
						 | 
					1546e6a8c9 | ||
| 
						 | 
					48c28fc42c | ||
| 
						 | 
					3675b2291c | ||
| 
						 | 
					cf7c4732e5 | ||
| 
						 | 
					405499d835 | ||
| 
						 | 
					c28b10adeb | ||
| 
						 | 
					e0846c9c8c | ||
| 
						 | 
					ba976eaa9b | ||
| 
						 | 
					3af3593c8e | ||
| 
						 | 
					f7e2f1fedf | ||
| 
						 | 
					dd314351e6 | ||
| 
						 | 
					6dbdfe3422 | ||
| 
						 | 
					8b0cf5f79d | ||
| 
						 | 
					1942eeb886 | ||
| 
						 | 
					431dac08d1 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -48,7 +48,6 @@
 | 
			
		||||
/twopass_encoder.dox
 | 
			
		||||
/vp8_api1_migration.dox
 | 
			
		||||
/vp8_scalable_patterns
 | 
			
		||||
/vp8_scalable_patterns.c
 | 
			
		||||
/vp8_scalable_patterns.dox
 | 
			
		||||
/vp8_set_maps
 | 
			
		||||
/vp8_set_maps.c
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								.mailmap
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								.mailmap
									
									
									
									
									
								
							@@ -1,2 +1,8 @@
 | 
			
		||||
Adrian Grange <agrange@google.com>
 | 
			
		||||
Johann Koenig <johannkoenig@google.com>
 | 
			
		||||
Tero Rintaluoma <teror@google.com> <tero.rintaluoma@on2.com>
 | 
			
		||||
Tom Finegan <tomfinegan@google.com>
 | 
			
		||||
Ralph Giles <giles@xiph.org> <giles@entropywave.com>
 | 
			
		||||
Ralph Giles <giles@xiph.org> <giles@mozilla.com>
 | 
			
		||||
Alpha Lam <hclam@google.com> <hclam@chromium.org>
 | 
			
		||||
Deb Mukherjee <debargha@google.com>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										29
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								AUTHORS
									
									
									
									
									
								
							@@ -4,29 +4,58 @@
 | 
			
		||||
Aaron Watry <awatry@gmail.com>
 | 
			
		||||
Adrian Grange <agrange@google.com>
 | 
			
		||||
Alex Converse <alex.converse@gmail.com>
 | 
			
		||||
Alexis Ballier <aballier@gentoo.org>
 | 
			
		||||
Alok Ahuja <waveletcoeff@gmail.com>
 | 
			
		||||
Alpha Lam <hclam@google.com>
 | 
			
		||||
Andoni Morales Alastruey <ylatuya@gmail.com>
 | 
			
		||||
Andres Mejia <mcitadel@gmail.com>
 | 
			
		||||
Aron Rosenberg <arosenberg@logitech.com>
 | 
			
		||||
Attila Nagy <attilanagy@google.com>
 | 
			
		||||
Deb Mukherjee <debargha@google.com>
 | 
			
		||||
Fabio Pedretti <fabio.ped@libero.it>
 | 
			
		||||
Frank Galligan <fgalligan@google.com>
 | 
			
		||||
Fredrik Söderquist <fs@opera.com>
 | 
			
		||||
Fritz Koenig <frkoenig@google.com>
 | 
			
		||||
Gaute Strokkenes <gaute.strokkenes@broadcom.com>
 | 
			
		||||
Giuseppe Scrivano <gscrivano@gnu.org>
 | 
			
		||||
Guillermo Ballester Valor <gbvalor@gmail.com>
 | 
			
		||||
Henrik Lundin <hlundin@google.com>
 | 
			
		||||
James Berry <jamesberry@google.com>
 | 
			
		||||
James Zern <jzern@google.com>
 | 
			
		||||
Jan Kratochvil <jan.kratochvil@redhat.com>
 | 
			
		||||
Jeff Faust <jfaust@google.com>
 | 
			
		||||
Jeff Muizelaar <jmuizelaar@mozilla.com>
 | 
			
		||||
Jim Bankoski <jimbankoski@google.com>
 | 
			
		||||
Johann Koenig <johannkoenig@google.com>
 | 
			
		||||
John Koleszar <jkoleszar@google.com>
 | 
			
		||||
Joshua Bleecher Snyder <josh@treelinelabs.com>
 | 
			
		||||
Justin Clift <justin@salasaga.org>
 | 
			
		||||
Justin Lebar <justin.lebar@gmail.com>
 | 
			
		||||
KO Myung-Hun <komh@chollian.net>
 | 
			
		||||
Lou Quillio <louquillio@google.com>
 | 
			
		||||
Luca Barbato <lu_zero@gentoo.org>
 | 
			
		||||
Makoto Kato <makoto.kt@gmail.com>
 | 
			
		||||
Marco Paniconi <marpan@google.com>
 | 
			
		||||
Martin Ettl <ettl.martin78@googlemail.com>
 | 
			
		||||
Michael Kohler <michaelkohler@live.com>
 | 
			
		||||
Mike Hommey <mhommey@mozilla.com>
 | 
			
		||||
Mikhal Shemer <mikhal@google.com>
 | 
			
		||||
Pascal Massimino <pascal.massimino@gmail.com>
 | 
			
		||||
Patrik Westin <patrik.westin@gmail.com>
 | 
			
		||||
Paul Wilkins <paulwilkins@google.com>
 | 
			
		||||
Pavol Rusnak <stick@gk2.sk>
 | 
			
		||||
Philip Jägenstedt <philipj@opera.com>
 | 
			
		||||
Priit Laes <plaes@plaes.org>
 | 
			
		||||
Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
 | 
			
		||||
Rafaël Carré <funman@videolan.org>
 | 
			
		||||
Ralph Giles <giles@xiph.org>
 | 
			
		||||
Ronald S. Bultje <rbultje@google.com>
 | 
			
		||||
Scott LaVarnway <slavarnway@google.com>
 | 
			
		||||
Stefan Holmer <holmer@google.com>
 | 
			
		||||
Taekhyun Kim <takim@nvidia.com>
 | 
			
		||||
Takanori MATSUURA <t.matsuu@gmail.com>
 | 
			
		||||
Tero Rintaluoma <teror@google.com>
 | 
			
		||||
Thijs Vermeir <thijsvermeir@gmail.com>
 | 
			
		||||
Timothy B. Terriberry <tterribe@xiph.org>
 | 
			
		||||
Tom Finegan <tomfinegan@google.com>
 | 
			
		||||
Yaowu Xu <yaowu@google.com>
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										329
									
								
								CHANGELOG
									
									
									
									
									
								
							
							
						
						
									
										329
									
								
								CHANGELOG
									
									
									
									
									
								
							@@ -1,3 +1,332 @@
 | 
			
		||||
2012-05-09 v1.1.0 "Eider"
 | 
			
		||||
  This introduces a number of enhancements, mostly focused on real-time
 | 
			
		||||
  encoding. In addition, it fixes a decoder bug (first introduced in
 | 
			
		||||
  Duclair) so all users of that release are encouraged to upgrade.
 | 
			
		||||
 | 
			
		||||
  - Upgrading:
 | 
			
		||||
    This release is ABI and API compatible with Duclair (v1.0.0). Users
 | 
			
		||||
    of older releases should refer to the Upgrading notes in this
 | 
			
		||||
    document for that release.
 | 
			
		||||
 | 
			
		||||
    This release introduces a new temporal denoiser, controlled by the
 | 
			
		||||
    VP8E_SET_NOISE_SENSITIVITY control. The temporal denoiser does not
 | 
			
		||||
    currently take a strength parameter, so the control is effectively
 | 
			
		||||
    a boolean - zero (off) or non-zero (on). For compatibility with
 | 
			
		||||
    existing applications, the values accepted are the same as those
 | 
			
		||||
    for the spatial denoiser (0-6). The temporal denoiser is enabled
 | 
			
		||||
    by default, and the older spatial denoiser may be restored by
 | 
			
		||||
    configuring with --disable-temporal-denoising. The temporal denoiser
 | 
			
		||||
    is more computationally intensive than the spatial one.
 | 
			
		||||
 | 
			
		||||
    This release removes support for a legacy, decode only API that was
 | 
			
		||||
    supported, but deprecated, at the initial release of libvpx
 | 
			
		||||
    (v0.9.0). This is not expected to have any impact. If you are
 | 
			
		||||
    impacted, you can apply a reversion to commit 2bf8fb58 locally.
 | 
			
		||||
    Please update to the latest libvpx API if you are affected.
 | 
			
		||||
 | 
			
		||||
  - Enhancements:
 | 
			
		||||
      Adds a motion compensated temporal denoiser to the encoder, which
 | 
			
		||||
      gives higher quality than the older spatial denoiser. (See above
 | 
			
		||||
      for notes on upgrading).
 | 
			
		||||
 | 
			
		||||
      In addition, support for new compilers and platforms were added,
 | 
			
		||||
      including:
 | 
			
		||||
        improved support for XCode
 | 
			
		||||
        Android x86 NDK build
 | 
			
		||||
        OS/2 support
 | 
			
		||||
        SunCC support
 | 
			
		||||
 | 
			
		||||
      Changing resolution with vpx_codec_enc_config_set() is now
 | 
			
		||||
      supported. Previously, reinitializing the codec was required to
 | 
			
		||||
      change the input resolution.
 | 
			
		||||
 | 
			
		||||
      The vpxenc application has initial support for producing multiple
 | 
			
		||||
      encodes from the same input in one call. Resizing is not yet
 | 
			
		||||
      supported, but varying other codec parameters is. Use -- to
 | 
			
		||||
      delineate output streams. Options persist from one stream to the
 | 
			
		||||
      next.
 | 
			
		||||
 | 
			
		||||
      Also, the vpxenc application will now use a keyframe interval of
 | 
			
		||||
      5 seconds by default. Use the --kf-max-dist option to override.
 | 
			
		||||
 | 
			
		||||
  - Speed:
 | 
			
		||||
      Decoder performance improved 2.5% versus Duclair. Encoder speed is
 | 
			
		||||
      consistent with Duclair for most material. Two pass encoding of
 | 
			
		||||
      slideshow-like material will see significant improvements.
 | 
			
		||||
 | 
			
		||||
      Large realtime encoding speed gains at a small quality expense are
 | 
			
		||||
      possible by configuring the on-the-fly bitpacking experiment with
 | 
			
		||||
      --enable-onthefly-bitpacking. Realtime encoder can be up to 13%
 | 
			
		||||
      faster (ARM) depending on the number of threads and bitrate
 | 
			
		||||
      settings. This technique sees constant gain over the 5-16 speed
 | 
			
		||||
      range. For VC style input the loss seen is up to 0.2dB. See commit
 | 
			
		||||
      52cf4dca for further details.
 | 
			
		||||
 | 
			
		||||
  - Quality:
 | 
			
		||||
      On the whole, quality is consistent with the Duclair release. Some
 | 
			
		||||
      tweaks:
 | 
			
		||||
 | 
			
		||||
        Reduced blockiness in easy sections by applying a penalty to
 | 
			
		||||
        intra modes.
 | 
			
		||||
 | 
			
		||||
        Improved quality of static sections (like slideshows) with
 | 
			
		||||
        two pass encoding.
 | 
			
		||||
 | 
			
		||||
        Improved keyframe sizing with multiple temporal layers
 | 
			
		||||
 | 
			
		||||
  - Bug Fixes:
 | 
			
		||||
      Corrected alt-ref contribution to frame rate for visible updates
 | 
			
		||||
      to the alt-ref buffer. This affected applications making manual
 | 
			
		||||
      usage of the frame reference flags, or temporal layers.
 | 
			
		||||
 | 
			
		||||
      Additional constraints were added to disable multi-frame quality
 | 
			
		||||
      enhancement (MFQE) in sections of the frame where there is motion.
 | 
			
		||||
      (#392)
 | 
			
		||||
 | 
			
		||||
      Fixed corruption issues when vpx_codec_enc_config_set() was called
 | 
			
		||||
      with spatial resampling enabled.
 | 
			
		||||
 | 
			
		||||
      Fixed a decoder error introduced in Duclair where the segmentation
 | 
			
		||||
      map was not being reinitialized on keyframes (#378)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
2012-01-27 v1.0.0 "Duclair"
 | 
			
		||||
  Our fourth named release, focused on performance and features related to
 | 
			
		||||
  real-time encoding. It also fixes a decoder crash bug introduced in
 | 
			
		||||
  v0.9.7, so all users of that release are encouraged to upgrade.
 | 
			
		||||
 | 
			
		||||
  - Upgrading:
 | 
			
		||||
      This release is ABI incompatible with prior releases of libvpx, so the
 | 
			
		||||
      "major" version number has been bumped to 1. You must recompile your
 | 
			
		||||
      applications against the latest version of the libvpx headers. The
 | 
			
		||||
      API remains compatible, and this should not require code changes in most
 | 
			
		||||
      applications.
 | 
			
		||||
 | 
			
		||||
  - Enhancements:
 | 
			
		||||
      This release introduces several substantial new features to the encoder,
 | 
			
		||||
      of particular interest to real time streaming applications.
 | 
			
		||||
 | 
			
		||||
      Temporal scalability allows the encoder to produce a stream that can
 | 
			
		||||
      be decimated to different frame rates, with independent rate targetting
 | 
			
		||||
      for each substream.
 | 
			
		||||
 | 
			
		||||
      Multiframe quality enhancement postprocessing can make visual quality
 | 
			
		||||
      more consistent in the presence of frames that are substantially
 | 
			
		||||
      different quality than the surrounding frames, as in the temporal
 | 
			
		||||
      scalability case and in some forced keyframe scenarios.
 | 
			
		||||
 | 
			
		||||
      Multiple-resolution encoding support allows the encoding of the
 | 
			
		||||
      same content at different resolutions faster than encoding them
 | 
			
		||||
      separately.
 | 
			
		||||
 | 
			
		||||
  - Speed:
 | 
			
		||||
      Optimization targets for this release included the decoder and the real-
 | 
			
		||||
      time modes of the encoder. Decoder speed on x86 has improved 10.5% with
 | 
			
		||||
      this release. Encoder improvements followed a curve where speeds 1-3
 | 
			
		||||
      improved 4.0%-1.5%, speeds 4-8 improved <1%, and speeds 9-16 improved
 | 
			
		||||
      1.5% to 10.5%, respectively. "Best" mode speed is consistent with the
 | 
			
		||||
      Cayuga release.
 | 
			
		||||
 | 
			
		||||
  - Quality:
 | 
			
		||||
      Encoder quality in the single stream case is consistent with the Cayuga
 | 
			
		||||
      release.
 | 
			
		||||
 | 
			
		||||
  - Bug Fixes:
 | 
			
		||||
      This release fixes an OOB read decoder crash bug present in v0.9.7
 | 
			
		||||
      related to the clamping of motion vectors in SPLITMV blocks. This
 | 
			
		||||
      behavior could be triggered by corrupt input or by starting
 | 
			
		||||
      decoding from a P-frame.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
2011-08-15 v0.9.7-p1 "Cayuga" patch 1
 | 
			
		||||
  This is an incremental bugfix release against Cayuga. All users of that
 | 
			
		||||
  release are strongly encouraged to upgrade.
 | 
			
		||||
 | 
			
		||||
    - Fix potential OOB reads (cdae03a)
 | 
			
		||||
 | 
			
		||||
          An unbounded out of bounds read was discovered when the
 | 
			
		||||
          decoder was requested to perform error concealment (new in
 | 
			
		||||
          Cayuga) given a frame with corrupt partition sizes.
 | 
			
		||||
 | 
			
		||||
          A bounded out of bounds read was discovered affecting all
 | 
			
		||||
          versions of libvpx. Given an multipartition input frame that
 | 
			
		||||
          is truncated between the mode/mv partition and the first
 | 
			
		||||
          residiual paritition (in the block of partition offsets), up
 | 
			
		||||
          to 3 extra bytes could have been read from the source buffer.
 | 
			
		||||
          The code will not take any action regardless of the contents
 | 
			
		||||
          of these undefined bytes, as the truncated buffer is detected
 | 
			
		||||
          immediately following the read based on the calculated
 | 
			
		||||
          starting position of the coefficient partition.
 | 
			
		||||
 | 
			
		||||
    - Fix potential error concealment crash when the very first frame
 | 
			
		||||
      is missing or corrupt (a609be5)
 | 
			
		||||
 | 
			
		||||
    - Fix significant artifacts in error concealment (a4c2211, 99d870a)
 | 
			
		||||
 | 
			
		||||
    - Revert 1-pass CBR rate control changes (e961317)
 | 
			
		||||
      Further testing showed this change produced undesirable visual
 | 
			
		||||
      artifacts, rolling back for now.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
2011-08-02 v0.9.7 "Cayuga"
 | 
			
		||||
  Our third named release, focused on a faster, higher quality, encoder.
 | 
			
		||||
 | 
			
		||||
  - Upgrading:
 | 
			
		||||
    This release is backwards compatible with Aylesbury (v0.9.5) and
 | 
			
		||||
    Bali (v0.9.6). Users of older releases should refer to the Upgrading
 | 
			
		||||
    notes in this document for that release.
 | 
			
		||||
 | 
			
		||||
  - Enhancements:
 | 
			
		||||
          Stereo 3D format support for vpxenc
 | 
			
		||||
          Runtime detection of available processor cores.
 | 
			
		||||
          Allow specifying --end-usage by enum name
 | 
			
		||||
          vpxdec: test for frame corruption
 | 
			
		||||
          vpxenc: add quantizer histogram display
 | 
			
		||||
          vpxenc: add rate histogram display
 | 
			
		||||
          Set VPX_FRAME_IS_DROPPABLE
 | 
			
		||||
          update configure for ios sdk 4.3
 | 
			
		||||
          Avoid text relocations in ARM vp8 decoder
 | 
			
		||||
          Generate a vpx.pc file for pkg-config.
 | 
			
		||||
          New ways of passing encoded data between encoder and decoder.
 | 
			
		||||
 | 
			
		||||
  - Speed:
 | 
			
		||||
      This release includes across-the-board speed improvements to the
 | 
			
		||||
      encoder. On x86, these measure at approximately 11.5% in Best mode,
 | 
			
		||||
      21.5% in Good mode (speed 0), and 22.5% in Realtime mode (speed 6).
 | 
			
		||||
      On ARM Cortex A9 with Neon extensions, real-time encoding of video
 | 
			
		||||
      telephony content is 35% faster than Bali on single core and 48%
 | 
			
		||||
      faster on multi-core. On the NVidia Tegra2 platform, real time
 | 
			
		||||
      encoding is 40% faster than Bali.
 | 
			
		||||
 | 
			
		||||
      Decoder speed was not a priority for this release, but improved
 | 
			
		||||
      approximately 8.4% on x86.
 | 
			
		||||
 | 
			
		||||
          Reduce motion vector search on alt-ref frame.
 | 
			
		||||
          Encoder loopfilter running in its own thread
 | 
			
		||||
          Reworked loopfilter to precalculate more parameters
 | 
			
		||||
          SSE2/SSSE3 optimizations for build_predictors_mbuv{,_s}().
 | 
			
		||||
          Make hor UV predict ~2x faster (73 vs 132 cycles) using SSSE3.
 | 
			
		||||
          Removed redundant checks
 | 
			
		||||
          Reduced structure sizes
 | 
			
		||||
          utilize preload in ARMv6 MC/LPF/Copy routines
 | 
			
		||||
          ARM optimized quantization, dfct, variance, subtract
 | 
			
		||||
          Increase chrow row alignment to 16 bytes.
 | 
			
		||||
          disable trellis optimization for first pass
 | 
			
		||||
          Write SSSE3 sub-pixel filter function
 | 
			
		||||
          Improve SSE2 half-pixel filter funtions
 | 
			
		||||
          Add vp8_sub_pixel_variance16x8_ssse3 function
 | 
			
		||||
          Reduce unnecessary distortion computation
 | 
			
		||||
          Use diamond search to replace full search
 | 
			
		||||
          Preload reference area in sub-pixel motion search (real-time mode)
 | 
			
		||||
 | 
			
		||||
  - Quality:
 | 
			
		||||
      This release focused primarily on one-pass use cases, including
 | 
			
		||||
      video conferencing. Low latency data rate control was significantly
 | 
			
		||||
      improved, improving streamability over bandwidth constrained links.
 | 
			
		||||
      Added support for error concealment, allowing frames to maintain
 | 
			
		||||
      visual quality in the presence of substantial packet loss.
 | 
			
		||||
 | 
			
		||||
          Add rc_max_intra_bitrate_pct control
 | 
			
		||||
          Limit size of initial keyframe in one-pass.
 | 
			
		||||
          Improve framerate adaptation
 | 
			
		||||
          Improved 1-pass CBR rate control
 | 
			
		||||
          Improved KF insertion after fades to still.
 | 
			
		||||
          Improved key frame detection.
 | 
			
		||||
          Improved activity masking (lower PSNR impact for same SSIM boost)
 | 
			
		||||
          Improved interaction between GF and ARFs
 | 
			
		||||
          Adding error-concealment to the decoder.
 | 
			
		||||
          Adding support for independent partitions
 | 
			
		||||
          Adjusted rate-distortion constants
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  - Bug Fixes:
 | 
			
		||||
          Removed firstpass motion map
 | 
			
		||||
          Fix parallel make install
 | 
			
		||||
          Fix multithreaded encoding for 1 MB wide frame
 | 
			
		||||
          Fixed iwalsh_neon build problems with RVDS4.1
 | 
			
		||||
          Fix semaphore emulation, spin-wait intrinsics on Windows
 | 
			
		||||
          Fix build with xcode4 and simplify GLOBAL.
 | 
			
		||||
          Mark ARM asm objects as allowing a non-executable stack.
 | 
			
		||||
          Fix vpxenc encoding incorrect webm file header on big endian
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
2011-03-07 v0.9.6 "Bali"
 | 
			
		||||
  Our second named release, focused on a faster, higher quality, encoder.
 | 
			
		||||
 | 
			
		||||
  - Upgrading:
 | 
			
		||||
    This release is backwards compatible with Aylesbury (v0.9.5). Users
 | 
			
		||||
    of older releases should refer to the Upgrading notes in this
 | 
			
		||||
    document for that release.
 | 
			
		||||
 | 
			
		||||
  - Enhancements:
 | 
			
		||||
      vpxenc --psnr shows a summary when encode completes
 | 
			
		||||
      --tune=ssim option to enable activity masking
 | 
			
		||||
      improved postproc visualizations for development
 | 
			
		||||
      updated support for Apple iOS to SDK 4.2
 | 
			
		||||
      query decoder to determine which reference frames were updated
 | 
			
		||||
      implemented error tracking in the decoder
 | 
			
		||||
      fix pipe support on windows
 | 
			
		||||
 | 
			
		||||
  - Speed:
 | 
			
		||||
      Primary focus was on good quality mode, speed 0. Average improvement
 | 
			
		||||
      on x86 about 40%, up to 100% on user-generated content at that speed.
 | 
			
		||||
      Best quality mode speed improved 35%, and realtime speed 10-20%. This
 | 
			
		||||
      release also saw significant improvement in realtime encoding speed
 | 
			
		||||
      on ARM platforms.
 | 
			
		||||
 | 
			
		||||
        Improved encoder threading
 | 
			
		||||
        Dont pick encoder filter level when loopfilter is disabled.
 | 
			
		||||
        Avoid double copying of key frames into alt and golden buffer
 | 
			
		||||
        FDCT optimizations.
 | 
			
		||||
        x86 sse2 temporal filter
 | 
			
		||||
        SSSE3 version of fast quantizer
 | 
			
		||||
        vp8_rd_pick_best_mbsegmentation code restructure
 | 
			
		||||
        Adjusted breakout RD for SPLITMV
 | 
			
		||||
        Changed segmentation check order
 | 
			
		||||
        Improved rd_pick_intra4x4block
 | 
			
		||||
        Adds armv6 optimized variance calculation
 | 
			
		||||
        ARMv6 optimized sad16x16
 | 
			
		||||
        ARMv6 optimized half pixel variance calculations
 | 
			
		||||
        Full search SAD function optimization in SSE4.1
 | 
			
		||||
        Improve MV prediction accuracy to achieve performance gain
 | 
			
		||||
        Improve MV prediction in vp8_pick_inter_mode() for speed>3
 | 
			
		||||
 | 
			
		||||
  - Quality:
 | 
			
		||||
      Best quality mode improved PSNR 6.3%, and SSIM 6.1%. This release
 | 
			
		||||
      also includes support for "activity masking," which greatly improves
 | 
			
		||||
      SSIM at the expense of PSNR. For now, this feature is available with
 | 
			
		||||
      the --tune=ssim option. Further experimentation in this area
 | 
			
		||||
      is ongoing. This release also introduces a new rate control mode
 | 
			
		||||
      called "CQ," which changes the allocation of bits within a clip to
 | 
			
		||||
      the sections where they will have the most visual impact.
 | 
			
		||||
 | 
			
		||||
        Tuning for the more exact quantizer.
 | 
			
		||||
        Relax rate control for last few frames
 | 
			
		||||
        CQ Mode
 | 
			
		||||
        Limit key frame quantizer for forced key frames.
 | 
			
		||||
        KF/GF Pulsing
 | 
			
		||||
        Add simple version of activity masking.
 | 
			
		||||
        make rdmult adaptive for intra in quantizer RDO
 | 
			
		||||
        cap the best quantizer for 2nd order DC
 | 
			
		||||
        change the threshold of DC check for encode breakout
 | 
			
		||||
 | 
			
		||||
  - Bug Fixes:
 | 
			
		||||
      Fix crash on Sparc Solaris.
 | 
			
		||||
      Fix counter of fixed keyframe distance
 | 
			
		||||
      ARNR filter pointer update bug fix
 | 
			
		||||
      Fixed use of motion percentage in KF/GF group calc
 | 
			
		||||
      Changed condition for using RD in Intra Mode
 | 
			
		||||
      Fix encoder real-time only configuration.
 | 
			
		||||
      Fix ARM encoder crash with multiple token partitions
 | 
			
		||||
      Fixed bug first cluster timecode of webm file is wrong.
 | 
			
		||||
      Fixed various encoder bugs with odd-sized images
 | 
			
		||||
      vp8e_get_preview fixed when spatial resampling enabled
 | 
			
		||||
      quantizer: fix assertion in fast quantizer path
 | 
			
		||||
      Allocate source buffers to be multiples of 16
 | 
			
		||||
      Fix for manual Golden frame frequency
 | 
			
		||||
      Fix drastic undershoot in long form content
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
2010-10-28 v0.9.5 "Aylesbury"
 | 
			
		||||
  Our first named release, focused on a faster decoder, and a better encoder.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										9
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								LICENSE
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
Copyright (c) 2010, Google Inc. All rights reserved.
 | 
			
		||||
Copyright (c) 2010, The WebM Project authors. All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use in source and binary forms, with or without
 | 
			
		||||
modification, are permitted provided that the following conditions are
 | 
			
		||||
@@ -12,9 +12,10 @@ met:
 | 
			
		||||
    the documentation and/or other materials provided with the
 | 
			
		||||
    distribution.
 | 
			
		||||
 | 
			
		||||
  * Neither the name of Google nor the names of its contributors may
 | 
			
		||||
    be used to endorse or promote products derived from this software
 | 
			
		||||
    without specific prior written permission.
 | 
			
		||||
  * Neither the name of Google, nor the WebM Project, nor the names
 | 
			
		||||
    of its contributors may be used to endorse or promote products
 | 
			
		||||
    derived from this software without specific prior written
 | 
			
		||||
    permission.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README
									
									
									
									
									
								
							@@ -42,21 +42,13 @@ COMPILING THE APPLICATIONS/LIBRARIES:
 | 
			
		||||
  --help output of the configure script. As of this writing, the list of
 | 
			
		||||
  available targets is:
 | 
			
		||||
 | 
			
		||||
    armv5te-android-gcc
 | 
			
		||||
    armv5te-linux-rvct
 | 
			
		||||
    armv5te-linux-gcc
 | 
			
		||||
    armv5te-symbian-gcc
 | 
			
		||||
    armv5te-wince-vs8
 | 
			
		||||
    armv6-darwin-gcc
 | 
			
		||||
    armv6-linux-rvct
 | 
			
		||||
    armv6-linux-gcc
 | 
			
		||||
    armv6-symbian-gcc
 | 
			
		||||
    armv6-wince-vs8
 | 
			
		||||
    iwmmxt-linux-rvct
 | 
			
		||||
    iwmmxt-linux-gcc
 | 
			
		||||
    iwmmxt-wince-vs8
 | 
			
		||||
    iwmmxt2-linux-rvct
 | 
			
		||||
    iwmmxt2-linux-gcc
 | 
			
		||||
    iwmmxt2-wince-vs8
 | 
			
		||||
    armv7-android-gcc
 | 
			
		||||
    armv7-linux-rvct
 | 
			
		||||
    armv7-linux-gcc
 | 
			
		||||
    mips32-linux-gcc
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								args.c
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								args.c
									
									
									
									
									
								
							@@ -57,7 +57,7 @@ int arg_match(struct arg *arg_, const struct arg_def *def, char **argv)
 | 
			
		||||
    }
 | 
			
		||||
    else if (def->long_name)
 | 
			
		||||
    {
 | 
			
		||||
        int name_len = strlen(def->long_name);
 | 
			
		||||
        const size_t name_len = strlen(def->long_name);
 | 
			
		||||
 | 
			
		||||
        if (strlen(arg.argv[0]) >= name_len + 2
 | 
			
		||||
            && arg.argv[0][1] == '-'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<VisualStudioToolFile
 | 
			
		||||
	Name="armasm"
 | 
			
		||||
	Version="8.00"
 | 
			
		||||
	>
 | 
			
		||||
	<Rules>
 | 
			
		||||
		<CustomBuildRule
 | 
			
		||||
			Name="ARMASM"
 | 
			
		||||
			DisplayName="Armasm Assembler"
 | 
			
		||||
			CommandLine="armasm -o "$(IntDir)\$(InputName).obj" $(InputPath) -32 -ARCH 5
"
 | 
			
		||||
			Outputs="$(IntDir)\$(InputName).obj"
 | 
			
		||||
			FileExtensions="*.asm"
 | 
			
		||||
			ExecutionDescription="Assembling $(InputName).asm"
 | 
			
		||||
			ShowOnlyRuleProperties="false"
 | 
			
		||||
			>
 | 
			
		||||
			<Properties>
 | 
			
		||||
			</Properties>
 | 
			
		||||
		</CustomBuildRule>
 | 
			
		||||
	</Rules>
 | 
			
		||||
</VisualStudioToolFile>
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<VisualStudioToolFile
 | 
			
		||||
	Name="armasm"
 | 
			
		||||
	Version="8.00"
 | 
			
		||||
	>
 | 
			
		||||
	<Rules>
 | 
			
		||||
		<CustomBuildRule
 | 
			
		||||
			Name="ARMASM"
 | 
			
		||||
			DisplayName="Armasm Assembler"
 | 
			
		||||
			CommandLine="armasm -o "$(IntDir)\$(InputName).obj" $(InputPath) -32 -ARCH 6
"
 | 
			
		||||
			Outputs="$(IntDir)\$(InputName).obj"
 | 
			
		||||
			FileExtensions="*.asm"
 | 
			
		||||
			ExecutionDescription="Assembling $(InputName).asm"
 | 
			
		||||
			ShowOnlyRuleProperties="false"
 | 
			
		||||
			>
 | 
			
		||||
			<Properties>
 | 
			
		||||
			</Properties>
 | 
			
		||||
		</CustomBuildRule>
 | 
			
		||||
	</Rules>
 | 
			
		||||
</VisualStudioToolFile>
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<VisualStudioToolFile
 | 
			
		||||
	Name="armasm"
 | 
			
		||||
	Version="8.00"
 | 
			
		||||
	>
 | 
			
		||||
	<Rules>
 | 
			
		||||
		<CustomBuildRule
 | 
			
		||||
			Name="ARMASM"
 | 
			
		||||
			DisplayName="Armasm Assembler"
 | 
			
		||||
			CommandLine="armasm -o "$(IntDir)\$(InputName).obj" $(InputPath) -32 -cpu XSCALE
"
 | 
			
		||||
			Outputs="$(IntDir)\$(InputName).obj"
 | 
			
		||||
			FileExtensions="*.asm"
 | 
			
		||||
			ExecutionDescription="Assembling $(InputName).asm"
 | 
			
		||||
			ShowOnlyRuleProperties="false"
 | 
			
		||||
			>
 | 
			
		||||
			<Properties>
 | 
			
		||||
			</Properties>
 | 
			
		||||
		</CustomBuildRule>
 | 
			
		||||
	</Rules>
 | 
			
		||||
</VisualStudioToolFile>
 | 
			
		||||
@@ -1,13 +0,0 @@
 | 
			
		||||
@echo off
 | 
			
		||||
REM   Copyright (c) 2010 The WebM project authors. All Rights Reserved.
 | 
			
		||||
REM
 | 
			
		||||
REM   Use of this source code is governed by a BSD-style license
 | 
			
		||||
REM   that can be found in the LICENSE file in the root of the source
 | 
			
		||||
REM   tree. An additional intellectual property rights grant can be found
 | 
			
		||||
REM   in the file PATENTS.  All contributing project authors may
 | 
			
		||||
REM   be found in the AUTHORS file in the root of the source tree.
 | 
			
		||||
echo on
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
cl /I ".\\" /I "..\vp6_decoder_sdk" /I "..\vp6_decoder_sdk\vpx_ports" /D "NDEBUG" /D "_WIN32_WCE=0x420" /D "UNDER_CE" /D "WIN32_PLATFORM_PSPC" /D "WINCE" /D "_LIB" /D "ARM" /D "_ARM_" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MT /GS- /fp:fast /GR- /Fo"Pocket_PC_2003__ARMV4_\%1/" /Fd"Pocket_PC_2003__ARMV4_\%1/vc80.pdb" /W3 /nologo /c /TC ..\vp6_decoder_sdk\vp6_decoder\algo\common\arm\dec_asm_offsets_arm.c
 | 
			
		||||
obj_int_extract.exe rvds "Pocket_PC_2003__ARMV4_\%1/dec_asm_offsets_arm.obj"
 | 
			
		||||
@@ -1,88 +0,0 @@
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 9.00
 | 
			
		||||
# Visual Studio 2005
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "example", "example.vcproj", "{BA5FE66F-38DD-E034-F542-B1578C5FB950}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2} = {E1360C65-D375-4335-8057-7ED99CC3F9B2}
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "obj_int_extract", "obj_int_extract.vcproj", "{E1360C65-D375-4335-8057-7ED99CC3F9B2}"
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vpx", "vpx.vcproj", "{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2} = {E1360C65-D375-4335-8057-7ED99CC3F9B2}
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xma", "xma.vcproj", "{A955FC4A-73F1-44F7-135E-30D84D32F022}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2} = {E1360C65-D375-4335-8057-7ED99CC3F9B2}
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
			
		||||
		Debug|Mixed Platforms = Debug|Mixed Platforms
 | 
			
		||||
		Debug|Pocket PC 2003 (ARMV4) = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		Debug|Win32 = Debug|Win32
 | 
			
		||||
		Release|Mixed Platforms = Release|Mixed Platforms
 | 
			
		||||
		Release|Pocket PC 2003 (ARMV4) = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		Release|Win32 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Mixed Platforms.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Mixed Platforms.Build.0 = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Mixed Platforms.Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Debug|Win32.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Mixed Platforms.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Mixed Platforms.Build.0 = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Mixed Platforms.Deploy.0 = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{BA5FE66F-38DD-E034-F542-B1578C5FB950}.Release|Win32.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Mixed Platforms.ActiveCfg = Release|Win32
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Mixed Platforms.Build.0 = Release|Win32
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Win32
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Win32.ActiveCfg = Release|Win32
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Debug|Win32.Build.0 = Release|Win32
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Mixed Platforms.ActiveCfg = Release|Win32
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Mixed Platforms.Build.0 = Release|Win32
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Win32
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Win32.ActiveCfg = Release|Win32
 | 
			
		||||
		{E1360C65-D375-4335-8057-7ED99CC3F9B2}.Release|Win32.Build.0 = Release|Win32
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Mixed Platforms.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Mixed Platforms.Build.0 = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Mixed Platforms.Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|Win32.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Mixed Platforms.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Mixed Platforms.Build.0 = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Mixed Platforms.Deploy.0 = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|Win32.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Mixed Platforms.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Mixed Platforms.Build.0 = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Mixed Platforms.Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Pocket PC 2003 (ARMV4).ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Pocket PC 2003 (ARMV4).Build.0 = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Pocket PC 2003 (ARMV4).Deploy.0 = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Debug|Win32.ActiveCfg = Debug|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Mixed Platforms.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Mixed Platforms.Build.0 = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Mixed Platforms.Deploy.0 = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Pocket PC 2003 (ARMV4).ActiveCfg = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Pocket PC 2003 (ARMV4).Build.0 = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Pocket PC 2003 (ARMV4).Deploy.0 = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
		{A955FC4A-73F1-44F7-135E-30D84D32F022}.Release|Win32.ActiveCfg = Release|Pocket PC 2003 (ARMV4)
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										199
									
								
								build/make/Android.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										199
									
								
								build/make/Android.mk
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,199 @@
 | 
			
		||||
##
 | 
			
		||||
##  Copyright (c) 2012 The WebM project authors. All Rights Reserved.
 | 
			
		||||
##
 | 
			
		||||
##  Use of this source code is governed by a BSD-style license
 | 
			
		||||
##  that can be found in the LICENSE file in the root of the source
 | 
			
		||||
##  tree. An additional intellectual property rights grant can be found
 | 
			
		||||
##  in the file PATENTS.  All contributing project authors may
 | 
			
		||||
##  be found in the AUTHORS file in the root of the source tree.
 | 
			
		||||
##
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# This file is to be used for compiling libvpx for Android using the NDK.
 | 
			
		||||
# In an Android project place a libvpx checkout in the jni directory.
 | 
			
		||||
# Run the configure script from the jni directory.  Base libvpx
 | 
			
		||||
# encoder/decoder configuration will look similar to:
 | 
			
		||||
# ./libvpx/configure --target=armv7-android-gcc --disable-examples \
 | 
			
		||||
#                    --sdk-path=/opt/android-ndk-r6b/
 | 
			
		||||
#
 | 
			
		||||
# When targeting Android, realtime-only is enabled by default.  This can
 | 
			
		||||
# be overridden by adding the command line flag:
 | 
			
		||||
#  --disable-realtime-only
 | 
			
		||||
#
 | 
			
		||||
# This will create .mk files that contain variables that contain the
 | 
			
		||||
# source files to compile.
 | 
			
		||||
#
 | 
			
		||||
# Place an Android.mk file in the jni directory that references the
 | 
			
		||||
# Android.mk file in the libvpx directory:
 | 
			
		||||
# LOCAL_PATH := $(call my-dir)
 | 
			
		||||
# include $(CLEAR_VARS)
 | 
			
		||||
# include libvpx/build/make/Android.mk
 | 
			
		||||
#
 | 
			
		||||
# There are currently two TARGET_ARCH_ABI targets for ARM.
 | 
			
		||||
# armeabi and armeabi-v7a.  armeabi-v7a is selected by creating an
 | 
			
		||||
# Application.mk in the jni directory that contains:
 | 
			
		||||
# APP_ABI := armeabi-v7a
 | 
			
		||||
#
 | 
			
		||||
# To change to building armeabi, run ./libvpx/configure again, but with
 | 
			
		||||
# --target=arm5te-android-gcc and and modify the Application.mk file to
 | 
			
		||||
# set APP_ABI := armeabi
 | 
			
		||||
#
 | 
			
		||||
# Running ndk-build will build libvpx and include it in your project.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
CONFIG_DIR := $(LOCAL_PATH)
 | 
			
		||||
LIBVPX_PATH := $(LOCAL_PATH)/libvpx
 | 
			
		||||
ASM_CNV_PATH_LOCAL := $(TARGET_ARCH_ABI)/ads2gas
 | 
			
		||||
ASM_CNV_PATH := $(LOCAL_PATH)/$(ASM_CNV_PATH_LOCAL)
 | 
			
		||||
 | 
			
		||||
# Makefiles created by the libvpx configure process
 | 
			
		||||
# This will need to be fixed to handle x86.
 | 
			
		||||
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
 | 
			
		||||
  include $(CONFIG_DIR)/libs-armv7-android-gcc.mk
 | 
			
		||||
else
 | 
			
		||||
  include $(CONFIG_DIR)/libs-armv5te-android-gcc.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Rule that is normally in Makefile created by libvpx
 | 
			
		||||
# configure.  Used to filter out source files based on configuration.
 | 
			
		||||
enabled=$(filter-out $($(1)-no),$($(1)-yes))
 | 
			
		||||
 | 
			
		||||
# Override the relative path that is defined by the libvpx
 | 
			
		||||
# configure process
 | 
			
		||||
SRC_PATH_BARE := $(LIBVPX_PATH)
 | 
			
		||||
 | 
			
		||||
# Include the list of files to be built
 | 
			
		||||
include $(LIBVPX_PATH)/libs.mk
 | 
			
		||||
 | 
			
		||||
# Want arm, not thumb, optimized
 | 
			
		||||
LOCAL_ARM_MODE := arm
 | 
			
		||||
LOCAL_CFLAGS := -O3
 | 
			
		||||
 | 
			
		||||
# -----------------------------------------------------------------------------
 | 
			
		||||
# Template  : asm_offsets_template
 | 
			
		||||
# Arguments : 1: assembly offsets file to be created
 | 
			
		||||
#             2: c file to base assembly offsets on
 | 
			
		||||
# Returns   : None
 | 
			
		||||
# Usage     : $(eval $(call asm_offsets_template,<asmfile>, <srcfile>
 | 
			
		||||
# Rationale : Create offsets at compile time using for structures that are
 | 
			
		||||
#             defined in c, but used in assembly functions.
 | 
			
		||||
# -----------------------------------------------------------------------------
 | 
			
		||||
define asm_offsets_template
 | 
			
		||||
 | 
			
		||||
_SRC:=$(2)
 | 
			
		||||
_OBJ:=$(ASM_CNV_PATH)/$$(notdir $(2)).S
 | 
			
		||||
 | 
			
		||||
_FLAGS = $$($$(my)CFLAGS) \
 | 
			
		||||
          $$(call get-src-file-target-cflags,$(2)) \
 | 
			
		||||
          $$(call host-c-includes,$$(LOCAL_C_INCLUDES) $$(CONFIG_DIR)) \
 | 
			
		||||
          $$(LOCAL_CFLAGS) \
 | 
			
		||||
          $$(NDK_APP_CFLAGS) \
 | 
			
		||||
          $$(call host-c-includes,$$($(my)C_INCLUDES)) \
 | 
			
		||||
          -DINLINE_ASM \
 | 
			
		||||
          -S \
 | 
			
		||||
 | 
			
		||||
_TEXT = "Compile $$(call get-src-file-text,$(2))"
 | 
			
		||||
_CC   = $$(TARGET_CC)
 | 
			
		||||
 | 
			
		||||
$$(eval $$(call ev-build-file))
 | 
			
		||||
 | 
			
		||||
$(1) : $$(_OBJ) $(2)
 | 
			
		||||
	@mkdir -p $$(dir $$@)
 | 
			
		||||
	@grep $(OFFSET_PATTERN) $$< | tr -d '\#' | $(CONFIG_DIR)/$(ASM_CONVERSION) > $$@
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
# Use ads2gas script to convert from RVCT format to GAS format.  This passes
 | 
			
		||||
#  puts the processed file under $(ASM_CNV_PATH).  Local clean rule
 | 
			
		||||
#  to handle removing these
 | 
			
		||||
ASM_CNV_OFFSETS_DEPEND = $(ASM_CNV_PATH)/asm_com_offsets.asm
 | 
			
		||||
ifeq ($(CONFIG_VP8_DECODER), yes)
 | 
			
		||||
  ASM_CNV_OFFSETS_DEPEND += $(ASM_CNV_PATH)/asm_dec_offsets.asm
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(CONFIG_VP8_ENCODER), yes)
 | 
			
		||||
  ASM_CNV_OFFSETS_DEPEND += $(ASM_CNV_PATH)/asm_enc_offsets.asm
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
.PRECIOUS: %.asm.s
 | 
			
		||||
$(ASM_CNV_PATH)/libvpx/%.asm.s: $(LIBVPX_PATH)/%.asm $(ASM_CNV_OFFSETS_DEPEND)
 | 
			
		||||
	@mkdir -p $(dir $@)
 | 
			
		||||
	@$(CONFIG_DIR)/$(ASM_CONVERSION) <$< > $@
 | 
			
		||||
 | 
			
		||||
# For building vpx_rtcd.h, which has a rule in libs.mk
 | 
			
		||||
TGT_ISA:=$(word 1, $(subst -, ,$(TOOLCHAIN)))
 | 
			
		||||
target := libs
 | 
			
		||||
 | 
			
		||||
LOCAL_SRC_FILES += vpx_config.c
 | 
			
		||||
 | 
			
		||||
# Remove duplicate entries
 | 
			
		||||
CODEC_SRCS_UNIQUE = $(sort $(CODEC_SRCS))
 | 
			
		||||
 | 
			
		||||
# Pull out C files.  vpx_config.c is in the immediate directory and
 | 
			
		||||
# so it does not need libvpx/ prefixed like the rest of the source files.
 | 
			
		||||
CODEC_SRCS_C = $(filter %.c, $(CODEC_SRCS_UNIQUE))
 | 
			
		||||
LOCAL_CODEC_SRCS_C = $(filter-out vpx_config.c, $(CODEC_SRCS_C))
 | 
			
		||||
 | 
			
		||||
LOCAL_SRC_FILES += $(foreach file, $(LOCAL_CODEC_SRCS_C), libvpx/$(file))
 | 
			
		||||
 | 
			
		||||
# Pull out assembly files, splitting NEON from the rest.  This is
 | 
			
		||||
# done to specify that the NEON assembly files use NEON assembler flags.
 | 
			
		||||
CODEC_SRCS_ASM_ALL = $(filter %.asm.s, $(CODEC_SRCS_UNIQUE))
 | 
			
		||||
CODEC_SRCS_ASM = $(foreach v, \
 | 
			
		||||
                 $(CODEC_SRCS_ASM_ALL), \
 | 
			
		||||
                 $(if $(findstring neon,$(v)),,$(v)))
 | 
			
		||||
CODEC_SRCS_ASM_ADS2GAS = $(patsubst %.s, \
 | 
			
		||||
                         $(ASM_CNV_PATH_LOCAL)/libvpx/%.s, \
 | 
			
		||||
                         $(CODEC_SRCS_ASM))
 | 
			
		||||
LOCAL_SRC_FILES += $(CODEC_SRCS_ASM_ADS2GAS)
 | 
			
		||||
 | 
			
		||||
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
 | 
			
		||||
  CODEC_SRCS_ASM_NEON = $(foreach v, \
 | 
			
		||||
                        $(CODEC_SRCS_ASM_ALL),\
 | 
			
		||||
                        $(if $(findstring neon,$(v)),$(v),))
 | 
			
		||||
  CODEC_SRCS_ASM_NEON_ADS2GAS = $(patsubst %.s, \
 | 
			
		||||
                                $(ASM_CNV_PATH_LOCAL)/libvpx/%.s, \
 | 
			
		||||
                                $(CODEC_SRCS_ASM_NEON))
 | 
			
		||||
  LOCAL_SRC_FILES += $(patsubst %.s, \
 | 
			
		||||
                     %.s.neon, \
 | 
			
		||||
                     $(CODEC_SRCS_ASM_NEON_ADS2GAS))
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
LOCAL_CFLAGS += \
 | 
			
		||||
    -DHAVE_CONFIG_H=vpx_config.h \
 | 
			
		||||
    -I$(LIBVPX_PATH) \
 | 
			
		||||
    -I$(ASM_CNV_PATH)
 | 
			
		||||
 | 
			
		||||
LOCAL_MODULE := libvpx
 | 
			
		||||
 | 
			
		||||
LOCAL_LDLIBS := -llog
 | 
			
		||||
 | 
			
		||||
LOCAL_STATIC_LIBRARIES := cpufeatures
 | 
			
		||||
 | 
			
		||||
$(foreach file, $(LOCAL_SRC_FILES), $(LOCAL_PATH)/$(file)): vpx_rtcd.h
 | 
			
		||||
 | 
			
		||||
.PHONY: clean
 | 
			
		||||
clean:
 | 
			
		||||
	@echo "Clean: ads2gas files [$(TARGET_ARCH_ABI)]"
 | 
			
		||||
	@$(RM) $(CODEC_SRCS_ASM_ADS2GAS) $(CODEC_SRCS_ASM_NEON_ADS2GAS)
 | 
			
		||||
	@$(RM) $(patsubst %.asm, %.*, $(ASM_CNV_OFFSETS_DEPEND))
 | 
			
		||||
	@$(RM) -r $(ASM_CNV_PATH)
 | 
			
		||||
	@$(RM) $(CLEAN-OBJS)
 | 
			
		||||
 | 
			
		||||
include $(BUILD_SHARED_LIBRARY)
 | 
			
		||||
 | 
			
		||||
$(eval $(call asm_offsets_template,\
 | 
			
		||||
    $(ASM_CNV_PATH)/asm_com_offsets.asm, \
 | 
			
		||||
    $(LIBVPX_PATH)/vp8/common/asm_com_offsets.c))
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_VP8_DECODER), yes)
 | 
			
		||||
  $(eval $(call asm_offsets_template,\
 | 
			
		||||
    $(ASM_CNV_PATH)/asm_dec_offsets.asm, \
 | 
			
		||||
    $(LIBVPX_PATH)/vp8/decoder/asm_dec_offsets.c))
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_VP8_ENCODER), yes)
 | 
			
		||||
  $(eval $(call asm_offsets_template,\
 | 
			
		||||
    $(ASM_CNV_PATH)/asm_enc_offsets.asm, \
 | 
			
		||||
    $(LIBVPX_PATH)/vp8/encoder/asm_enc_offsets.c))
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
$(call import-module,cpufeatures)
 | 
			
		||||
							
								
								
									
										54
									
								
								build/make/Makefile
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										54
									
								
								build/make/Makefile
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							@@ -20,6 +20,7 @@ ifeq ($(target),)
 | 
			
		||||
all: .DEFAULT
 | 
			
		||||
clean:: .DEFAULT
 | 
			
		||||
install:: .DEFAULT
 | 
			
		||||
test:: .DEFAULT
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Note: md5sum is not installed on OS X, but openssl is. Openssl may not be
 | 
			
		||||
@@ -78,12 +79,13 @@ qexec=$(if $(quiet),@)
 | 
			
		||||
%: %.o
 | 
			
		||||
%.asm:
 | 
			
		||||
%.a:
 | 
			
		||||
%: %.cc
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Common rules"
 | 
			
		||||
#
 | 
			
		||||
.PHONY: all-$(target)
 | 
			
		||||
all-$(target):
 | 
			
		||||
.PHONY: all
 | 
			
		||||
all:
 | 
			
		||||
 | 
			
		||||
.PHONY: clean
 | 
			
		||||
clean::
 | 
			
		||||
@@ -94,15 +96,26 @@ clean::
 | 
			
		||||
dist:
 | 
			
		||||
.PHONY: install
 | 
			
		||||
install::
 | 
			
		||||
.PHONY: test
 | 
			
		||||
test::
 | 
			
		||||
 | 
			
		||||
$(BUILD_PFX)%.c.d: %.c
 | 
			
		||||
	$(if $(quiet),@echo "    [DEP] $@")
 | 
			
		||||
	$(qexec)mkdir -p $(dir $@)
 | 
			
		||||
	$(qexec)$(CC) $(CFLAGS) -M $< | $(fmt_deps) > $@
 | 
			
		||||
	$(qexec)$(CC) $(INTERNAL_CFLAGS) $(CFLAGS) -M $< | $(fmt_deps) > $@
 | 
			
		||||
 | 
			
		||||
$(BUILD_PFX)%.c.o: %.c
 | 
			
		||||
	$(if $(quiet),@echo "    [CC] $@")
 | 
			
		||||
	$(qexec)$(CC) $(CFLAGS) -c -o $@ $<
 | 
			
		||||
	$(qexec)$(CC) $(INTERNAL_CFLAGS) $(CFLAGS) -c -o $@ $<
 | 
			
		||||
 | 
			
		||||
$(BUILD_PFX)%.cc.d: %.cc
 | 
			
		||||
	$(if $(quiet),@echo "    [DEP] $@")
 | 
			
		||||
	$(qexec)mkdir -p $(dir $@)
 | 
			
		||||
	$(qexec)g++ $(INTERNAL_CFLAGS) $(CFLAGS) -M $< | $(fmt_deps) > $@
 | 
			
		||||
 | 
			
		||||
$(BUILD_PFX)%.cc.o: %.cc
 | 
			
		||||
	$(if $(quiet),@echo "    [CXX] $@")
 | 
			
		||||
	$(qexec)g++ $(INTERNAL_CFLAGS) $(CFLAGS) -c -o $@ $<
 | 
			
		||||
 | 
			
		||||
$(BUILD_PFX)%.asm.d: %.asm
 | 
			
		||||
	$(if $(quiet),@echo "    [DEP] $@")
 | 
			
		||||
@@ -124,6 +137,12 @@ $(BUILD_PFX)%.s.o: %.s
 | 
			
		||||
	$(if $(quiet),@echo "    [AS] $@")
 | 
			
		||||
	$(qexec)$(AS) $(ASFLAGS) -o $@ $<
 | 
			
		||||
 | 
			
		||||
.PRECIOUS: %.c.S
 | 
			
		||||
%.c.S: CFLAGS += -DINLINE_ASM
 | 
			
		||||
$(BUILD_PFX)%.c.S: %.c
 | 
			
		||||
	$(if $(quiet),@echo "    [GEN] $@")
 | 
			
		||||
	$(qexec)$(CC) -S $(CFLAGS) -o $@ $<
 | 
			
		||||
 | 
			
		||||
.PRECIOUS: %.asm.s
 | 
			
		||||
$(BUILD_PFX)%.asm.s: %.asm
 | 
			
		||||
	$(if $(quiet),@echo "    [ASM CONVERSION] $@")
 | 
			
		||||
@@ -152,8 +171,8 @@ endif
 | 
			
		||||
# Rule to extract assembly constants from C sources
 | 
			
		||||
#
 | 
			
		||||
obj_int_extract: build/make/obj_int_extract.c
 | 
			
		||||
	$(if $(quiet),echo "    [HOSTCC] $@")
 | 
			
		||||
	$(qexec)$(HOSTCC) -I. -o $@ $<
 | 
			
		||||
	$(if $(quiet),@echo "    [HOSTCC] $@")
 | 
			
		||||
	$(qexec)$(HOSTCC) -I. -I$(SRC_PATH_BARE) -o $@ $<
 | 
			
		||||
CLEAN-OBJS += obj_int_extract
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
@@ -169,7 +188,7 @@ cond_enabled=$(if $(filter yes,$($(1))), $(call enabled,$(2)))
 | 
			
		||||
 | 
			
		||||
find_file1=$(word 1,$(wildcard $(subst //,/,$(addsuffix /$(1),$(2)))))
 | 
			
		||||
find_file=$(foreach f,$(1),$(call find_file1,$(strip $(f)),$(strip $(2))) )
 | 
			
		||||
obj_pats=.c=.c.o $(AS_SFX)=$(AS_SFX).o
 | 
			
		||||
obj_pats=.c=.c.o $(AS_SFX)=$(AS_SFX).o .cc=.cc.o
 | 
			
		||||
objs=$(addprefix $(BUILD_PFX),$(foreach p,$(obj_pats),$(filter %.o,$(1:$(p))) ))
 | 
			
		||||
 | 
			
		||||
install_map_templates=$(eval $(call install_map_template,$(1),$(2)))
 | 
			
		||||
@@ -188,7 +207,13 @@ define linker_template
 | 
			
		||||
$(1): $(filter-out -%,$(2))
 | 
			
		||||
$(1):
 | 
			
		||||
	$(if $(quiet),@echo    "    [LD] $$@")
 | 
			
		||||
	$(qexec)$$(LD) $$(strip $$(LDFLAGS) -o $$@ $(2) $(3) $$(extralibs))
 | 
			
		||||
	$(qexec)$$(LD) $$(strip $$(INTERNAL_LDFLAGS) $$(LDFLAGS) -o $$@ $(2) $(3) $$(extralibs))
 | 
			
		||||
endef
 | 
			
		||||
define linkerxx_template
 | 
			
		||||
$(1): $(filter-out -%,$(2))
 | 
			
		||||
$(1):
 | 
			
		||||
	$(if $(quiet),@echo    "    [LD] $$@")
 | 
			
		||||
	$(qexec)g++ $$(strip $$(INTERNAL_LDFLAGS) $$(LDFLAGS) -o $$@ $(2) $(3) $$(extralibs))
 | 
			
		||||
endef
 | 
			
		||||
# make-3.80 has a bug with expanding large input strings to the eval function,
 | 
			
		||||
# which was triggered in some cases by the following component of
 | 
			
		||||
@@ -255,7 +280,7 @@ ifeq ($(filter clean,$(MAKECMDGOALS)),)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Configuration dependant rules
 | 
			
		||||
# Configuration dependent rules
 | 
			
		||||
#
 | 
			
		||||
$(call pairmap,install_map_templates,$(INSTALL_MAPS))
 | 
			
		||||
 | 
			
		||||
@@ -330,12 +355,10 @@ ifneq ($(call enabled,DIST-SRCS),)
 | 
			
		||||
    DIST-SRCS-$(CONFIG_MSVS)  += build/make/gen_msvs_proj.sh
 | 
			
		||||
    DIST-SRCS-$(CONFIG_MSVS)  += build/make/gen_msvs_sln.sh
 | 
			
		||||
    DIST-SRCS-$(CONFIG_MSVS)  += build/x86-msvs/yasm.rules
 | 
			
		||||
    DIST-SRCS-$(CONFIG_MSVS)  += build/x86-msvs/obj_int_extract.bat
 | 
			
		||||
    DIST-SRCS-$(CONFIG_RVCT) += build/make/armlink_adapter.sh
 | 
			
		||||
    #
 | 
			
		||||
    # This isn't really ARCH_ARM dependent, it's dependant on whether we're
 | 
			
		||||
    # using assembly code or not (CONFIG_OPTIMIZATIONS maybe). Just use
 | 
			
		||||
    # this for now.
 | 
			
		||||
    DIST-SRCS-$(ARCH_ARM)    += build/make/obj_int_extract.c
 | 
			
		||||
    # Include obj_int_extract if we use offsets from asm_*_offsets
 | 
			
		||||
    DIST-SRCS-$(ARCH_ARM)$(ARCH_X86)$(ARCH_X86_64)    += build/make/obj_int_extract.c
 | 
			
		||||
    DIST-SRCS-$(ARCH_ARM)    += build/make/ads2gas.pl
 | 
			
		||||
    DIST-SRCS-yes            += $(target:-$(TOOLCHAIN)=).mk
 | 
			
		||||
endif
 | 
			
		||||
@@ -355,6 +378,7 @@ ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
 | 
			
		||||
endif
 | 
			
		||||
BUILD_TARGETS += .docs .libs .bins
 | 
			
		||||
INSTALL_TARGETS += .install-docs .install-srcs .install-libs .install-bins
 | 
			
		||||
all-$(target): $(BUILD_TARGETS)
 | 
			
		||||
all: $(BUILD_TARGETS)
 | 
			
		||||
install:: $(INSTALL_TARGETS)
 | 
			
		||||
dist: $(INSTALL_TARGETS)
 | 
			
		||||
test::
 | 
			
		||||
 
 | 
			
		||||
@@ -21,8 +21,14 @@ print "@ This file was created from a .asm file\n";
 | 
			
		||||
print "@  using the ads2gas.pl script.\n";
 | 
			
		||||
print "\t.equ DO1STROUNDING, 0\n";
 | 
			
		||||
 | 
			
		||||
# Stack of procedure names.
 | 
			
		||||
@proc_stack = ();
 | 
			
		||||
 | 
			
		||||
while (<STDIN>)
 | 
			
		||||
{
 | 
			
		||||
    # Load and store alignment
 | 
			
		||||
    s/@/,:/g;
 | 
			
		||||
 | 
			
		||||
    # Comment character
 | 
			
		||||
    s/;/@/g;
 | 
			
		||||
 | 
			
		||||
@@ -79,7 +85,10 @@ while (<STDIN>)
 | 
			
		||||
    s/CODE([0-9][0-9])/.code $1/;
 | 
			
		||||
 | 
			
		||||
    # No AREA required
 | 
			
		||||
    s/^\s*AREA.*$/.text/;
 | 
			
		||||
    # But ALIGNs in AREA must be obeyed
 | 
			
		||||
    s/^\s*AREA.*ALIGN=([0-9])$/.text\n.p2align $1/;
 | 
			
		||||
    # If no ALIGN, strip the AREA and align to 4 bytes
 | 
			
		||||
    s/^\s*AREA.*$/.text\n.p2align 2/;
 | 
			
		||||
 | 
			
		||||
    # DCD to .word
 | 
			
		||||
    # This one is for incoming symbols
 | 
			
		||||
@@ -114,22 +123,38 @@ while (<STDIN>)
 | 
			
		||||
    # put the colon at the end of the line in the macro
 | 
			
		||||
    s/^([a-zA-Z_0-9\$]+)/$1:/ if !/EQU/;
 | 
			
		||||
 | 
			
		||||
    # Strip ALIGN
 | 
			
		||||
    s/\sALIGN/@ ALIGN/g;
 | 
			
		||||
    # ALIGN directive
 | 
			
		||||
    s/ALIGN/.balign/g;
 | 
			
		||||
 | 
			
		||||
    # Strip ARM
 | 
			
		||||
    s/\sARM/@ ARM/g;
 | 
			
		||||
    # ARM code
 | 
			
		||||
    s/\sARM/.arm/g;
 | 
			
		||||
 | 
			
		||||
    # Strip REQUIRE8
 | 
			
		||||
    #s/\sREQUIRE8/@ REQUIRE8/g;
 | 
			
		||||
    s/\sREQUIRE8/@ /g;      #EQU cause problem
 | 
			
		||||
    # eabi_attributes numerical equivalents can be found in the
 | 
			
		||||
    # "ARM IHI 0045C" document.
 | 
			
		||||
 | 
			
		||||
    # Strip PRESERVE8
 | 
			
		||||
    s/\sPRESERVE8/@ PRESERVE8/g;
 | 
			
		||||
    # REQUIRE8 Stack is required to be 8-byte aligned
 | 
			
		||||
    s/\sREQUIRE8/.eabi_attribute 24, 1 \@Tag_ABI_align_needed/g;
 | 
			
		||||
 | 
			
		||||
    # Strip PROC and ENDPROC
 | 
			
		||||
    s/\sPROC/@/g;
 | 
			
		||||
    s/\sENDP/@/g;
 | 
			
		||||
    # PRESERVE8 Stack 8-byte align is preserved
 | 
			
		||||
    s/\sPRESERVE8/.eabi_attribute 25, 1 \@Tag_ABI_align_preserved/g;
 | 
			
		||||
 | 
			
		||||
    # Use PROC and ENDP to give the symbols a .size directive.
 | 
			
		||||
    # This makes them show up properly in debugging tools like gdb and valgrind.
 | 
			
		||||
    if (/\bPROC\b/)
 | 
			
		||||
    {
 | 
			
		||||
        my $proc;
 | 
			
		||||
        /^_([\.0-9A-Z_a-z]\w+)\b/;
 | 
			
		||||
        $proc = $1;
 | 
			
		||||
        push(@proc_stack, $proc) if ($proc);
 | 
			
		||||
        s/\bPROC\b/@ $&/;
 | 
			
		||||
    }
 | 
			
		||||
    if (/\bENDP\b/)
 | 
			
		||||
    {
 | 
			
		||||
        my $proc;
 | 
			
		||||
        s/\bENDP\b/@ $&/;
 | 
			
		||||
        $proc = pop(@proc_stack);
 | 
			
		||||
        $_ = "\t.size $proc, .-$proc".$_ if ($proc);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # EQU directive
 | 
			
		||||
    s/(.*)EQU(.*)/.equ $1, $2/;
 | 
			
		||||
@@ -148,3 +173,6 @@ while (<STDIN>)
 | 
			
		||||
    next if /^\s*END\s*$/;
 | 
			
		||||
    print;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Mark that this object doesn't need an executable stack.
 | 
			
		||||
printf ("\t.section\t.note.GNU-stack,\"\",\%\%progbits\n");
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,8 @@ my @mapping_list = ("\$0", "\$1", "\$2", "\$3", "\$4", "\$5", "\$6", "\$7", "\$8
 | 
			
		||||
 | 
			
		||||
my @incoming_array;
 | 
			
		||||
 | 
			
		||||
my @imported_functions;
 | 
			
		||||
 | 
			
		||||
# Perl trim function to remove whitespace from the start and end of the string
 | 
			
		||||
sub trim($)
 | 
			
		||||
{
 | 
			
		||||
@@ -41,6 +43,9 @@ sub trim($)
 | 
			
		||||
 | 
			
		||||
while (<STDIN>)
 | 
			
		||||
{
 | 
			
		||||
    # Load and store alignment
 | 
			
		||||
    s/@/,:/g;
 | 
			
		||||
 | 
			
		||||
    # Comment character
 | 
			
		||||
    s/;/@/g;
 | 
			
		||||
 | 
			
		||||
@@ -97,7 +102,10 @@ while (<STDIN>)
 | 
			
		||||
    s/CODE([0-9][0-9])/.code $1/;
 | 
			
		||||
 | 
			
		||||
    # No AREA required
 | 
			
		||||
    s/^\s*AREA.*$/.text/;
 | 
			
		||||
    # But ALIGNs in AREA must be obeyed
 | 
			
		||||
    s/^\s*AREA.*ALIGN=([0-9])$/.text\n.p2align $1/;
 | 
			
		||||
    # If no ALIGN, strip the AREA and align to 4 bytes
 | 
			
		||||
    s/^\s*AREA.*$/.text\n.p2align 2/;
 | 
			
		||||
 | 
			
		||||
    # DCD to .word
 | 
			
		||||
    # This one is for incoming symbols
 | 
			
		||||
@@ -126,7 +134,18 @@ while (<STDIN>)
 | 
			
		||||
    # Make function visible to linker, and make additional symbol with
 | 
			
		||||
    # prepended underscore
 | 
			
		||||
    s/EXPORT\s+\|([\$\w]*)\|/.globl _$1\n\t.globl $1/;
 | 
			
		||||
    s/IMPORT\s+\|([\$\w]*)\|/.globl $1/;
 | 
			
		||||
 | 
			
		||||
    # Prepend imported functions with _
 | 
			
		||||
    if (s/IMPORT\s+\|([\$\w]*)\|/.globl $1/)
 | 
			
		||||
    {
 | 
			
		||||
        $function = trim($1);
 | 
			
		||||
        push(@imported_functions, $function);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    foreach $function (@imported_functions)
 | 
			
		||||
    {
 | 
			
		||||
        s/$function/_$function/;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    # No vertical bars required; make additional symbol with prepended
 | 
			
		||||
    # underscore
 | 
			
		||||
@@ -137,8 +156,8 @@ while (<STDIN>)
 | 
			
		||||
    # put the colon at the end of the line in the macro
 | 
			
		||||
    s/^([a-zA-Z_0-9\$]+)/$1:/ if !/EQU/;
 | 
			
		||||
 | 
			
		||||
    # Strip ALIGN
 | 
			
		||||
    s/\sALIGN/@ ALIGN/g;
 | 
			
		||||
    # ALIGN directive
 | 
			
		||||
    s/ALIGN/.balign/g;
 | 
			
		||||
 | 
			
		||||
    # Strip ARM
 | 
			
		||||
    s/\sARM/@ ARM/g;
 | 
			
		||||
@@ -151,8 +170,8 @@ while (<STDIN>)
 | 
			
		||||
    s/\sPRESERVE8/@ PRESERVE8/g;
 | 
			
		||||
 | 
			
		||||
    # Strip PROC and ENDPROC
 | 
			
		||||
    s/PROC/@/g;
 | 
			
		||||
    s/ENDP/@/g;
 | 
			
		||||
    s/\bPROC\b/@/g;
 | 
			
		||||
    s/\bENDP\b/@/g;
 | 
			
		||||
 | 
			
		||||
    # EQU directive
 | 
			
		||||
    s/(.*)EQU(.*)/.set $1, $2/;
 | 
			
		||||
 
 | 
			
		||||
@@ -17,15 +17,17 @@ for i; do
 | 
			
		||||
        on_of=1
 | 
			
		||||
    elif [ "$i" == "-v" ]; then
 | 
			
		||||
        verbose=1
 | 
			
		||||
    elif [ "$i" == "-g" ]; then
 | 
			
		||||
        args="${args} --debug"
 | 
			
		||||
    elif [ "$on_of" == "1" ]; then
 | 
			
		||||
        outfile=$i
 | 
			
		||||
    on_of=0
 | 
			
		||||
        on_of=0
 | 
			
		||||
    elif [ -f "$i" ]; then
 | 
			
		||||
        infiles="$infiles $i"
 | 
			
		||||
    elif [ "${i:0:2}" == "-l" ]; then
 | 
			
		||||
        libs="$libs ${i#-l}"
 | 
			
		||||
    elif [ "${i:0:2}" == "-L" ]; then
 | 
			
		||||
    libpaths="${libpaths} ${i#-L}"
 | 
			
		||||
        libpaths="${libpaths} ${i#-L}"
 | 
			
		||||
    else
 | 
			
		||||
        args="${args} ${i}"
 | 
			
		||||
    fi
 | 
			
		||||
 
 | 
			
		||||
@@ -78,11 +78,12 @@ Build options:
 | 
			
		||||
  --log=yes|no|FILE           file configure log is written to [config.err]
 | 
			
		||||
  --target=TARGET             target platform tuple [generic-gnu]
 | 
			
		||||
  --cpu=CPU                   optimize for a specific cpu rather than a family
 | 
			
		||||
  --extra-cflags=ECFLAGS      add ECFLAGS to CFLAGS [$CFLAGS]
 | 
			
		||||
  ${toggle_extra_warnings}    emit harmless warnings (always non-fatal)
 | 
			
		||||
  ${toggle_werror}            treat warnings as errors, if possible
 | 
			
		||||
                              (not available with all compilers)
 | 
			
		||||
  ${toggle_optimizations}     turn on/off compiler optimization flags
 | 
			
		||||
  ${toggle_pic}               turn on/off Position Independant Code
 | 
			
		||||
  ${toggle_pic}               turn on/off Position Independent Code
 | 
			
		||||
  ${toggle_ccache}            turn on/off compiler cache
 | 
			
		||||
  ${toggle_debug}             enable/disable debug mode
 | 
			
		||||
  ${toggle_gprof}             enable/disable gprof profiling instrumentation
 | 
			
		||||
@@ -339,7 +340,8 @@ EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
write_common_config_banner() {
 | 
			
		||||
    echo '# This file automatically generated by configure. Do not edit!' > config.mk
 | 
			
		||||
    print_webm_license config.mk "##" ""
 | 
			
		||||
    echo '# This file automatically generated by configure. Do not edit!' >> config.mk
 | 
			
		||||
    echo "TOOLCHAIN := ${toolchain}" >> config.mk
 | 
			
		||||
 | 
			
		||||
    case ${toolchain} in
 | 
			
		||||
@@ -366,8 +368,9 @@ true
 | 
			
		||||
write_common_target_config_mk() {
 | 
			
		||||
    local CC=${CC}
 | 
			
		||||
    enabled ccache && CC="ccache ${CC}"
 | 
			
		||||
    print_webm_license $1 "##" ""
 | 
			
		||||
 | 
			
		||||
    cat > $1 << EOF
 | 
			
		||||
    cat >> $1 << EOF
 | 
			
		||||
# This file automatically generated by configure. Do not edit!
 | 
			
		||||
SRC_PATH="$source_path"
 | 
			
		||||
SRC_PATH_BARE=$source_path
 | 
			
		||||
@@ -388,6 +391,8 @@ LDFLAGS = ${LDFLAGS}
 | 
			
		||||
ASFLAGS = ${ASFLAGS}
 | 
			
		||||
extralibs = ${extralibs}
 | 
			
		||||
AS_SFX    = ${AS_SFX:-.asm}
 | 
			
		||||
EXE_SFX   = ${EXE_SFX}
 | 
			
		||||
RTCD_OPTIONS = ${RTCD_OPTIONS}
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
    if enabled rvct; then cat >> $1 << EOF
 | 
			
		||||
@@ -409,13 +414,17 @@ EOF
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
write_common_target_config_h() {
 | 
			
		||||
    cat > ${TMP_H} << EOF
 | 
			
		||||
    print_webm_license ${TMP_H} "/*" " */"
 | 
			
		||||
    cat >> ${TMP_H} << EOF
 | 
			
		||||
/* This file automatically generated by configure. Do not edit! */
 | 
			
		||||
#ifndef VPX_CONFIG_H
 | 
			
		||||
#define VPX_CONFIG_H
 | 
			
		||||
#define RESTRICT    ${RESTRICT}
 | 
			
		||||
EOF
 | 
			
		||||
    print_config_h ARCH   "${TMP_H}" ${ARCH_LIST}
 | 
			
		||||
    print_config_h HAVE   "${TMP_H}" ${HAVE_LIST}
 | 
			
		||||
    print_config_h CONFIG "${TMP_H}" ${CONFIG_LIST}
 | 
			
		||||
    echo "#endif /* VPX_CONFIG_H */" >> ${TMP_H}
 | 
			
		||||
    mkdir -p `dirname "$1"`
 | 
			
		||||
    cmp "$1" ${TMP_H} >/dev/null 2>&1 || mv ${TMP_H} "$1"
 | 
			
		||||
}
 | 
			
		||||
@@ -442,11 +451,30 @@ process_common_cmdline() {
 | 
			
		||||
        ;;
 | 
			
		||||
        --cpu=*) tune_cpu="$optval"
 | 
			
		||||
        ;;
 | 
			
		||||
        --extra-cflags=*)
 | 
			
		||||
        extra_cflags="${optval}"
 | 
			
		||||
        ;;
 | 
			
		||||
        --enable-?*|--disable-?*)
 | 
			
		||||
        eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
 | 
			
		||||
        echo "${CMDLINE_SELECT} ${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null || die_unknown $opt
 | 
			
		||||
        if echo "${ARCH_EXT_LIST}" | grep "^ *$option\$" >/dev/null; then
 | 
			
		||||
            [ $action = "disable" ] && RTCD_OPTIONS="${RTCD_OPTIONS}${opt} "
 | 
			
		||||
        elif [ $action = "disable" ] && ! disabled $option ; then
 | 
			
		||||
          echo "${CMDLINE_SELECT}" | grep "^ *$option\$" >/dev/null ||
 | 
			
		||||
            die_unknown $opt
 | 
			
		||||
        elif [ $action = "enable" ] && ! enabled $option ; then
 | 
			
		||||
          echo "${CMDLINE_SELECT}" | grep "^ *$option\$" >/dev/null ||
 | 
			
		||||
            die_unknown $opt
 | 
			
		||||
        fi
 | 
			
		||||
        $action $option
 | 
			
		||||
        ;;
 | 
			
		||||
        --require-?*)
 | 
			
		||||
        eval `echo "$opt" | sed 's/--/action=/;s/-/ option=/;s/-/_/g'`
 | 
			
		||||
        if echo "${ARCH_EXT_LIST}" none | grep "^ *$option\$" >/dev/null; then
 | 
			
		||||
            RTCD_OPTIONS="${RTCD_OPTIONS}${opt} "
 | 
			
		||||
        else
 | 
			
		||||
            die_unknown $opt
 | 
			
		||||
        fi
 | 
			
		||||
        ;;
 | 
			
		||||
        --force-enable-?*|--force-disable-?*)
 | 
			
		||||
        eval `echo "$opt" | sed 's/--force-/action=/;s/-/ option=/;s/-/_/g'`
 | 
			
		||||
        $action $option
 | 
			
		||||
@@ -467,7 +495,11 @@ process_common_cmdline() {
 | 
			
		||||
        --libdir=*)
 | 
			
		||||
        libdir="${optval}"
 | 
			
		||||
        ;;
 | 
			
		||||
        --libc|--as|--prefix|--libdir)
 | 
			
		||||
        --sdk-path=*)
 | 
			
		||||
        [ -d "${optval}" ] || die "Not a directory: ${optval}"
 | 
			
		||||
        sdk_path="${optval}"
 | 
			
		||||
        ;;
 | 
			
		||||
        --libc|--as|--prefix|--libdir|--sdk-path)
 | 
			
		||||
        die "Option ${opt} requires argument"
 | 
			
		||||
        ;;
 | 
			
		||||
        --help|-h) show_help
 | 
			
		||||
@@ -512,6 +544,7 @@ setup_gnu_toolchain() {
 | 
			
		||||
    STRIP=${STRIP:-${CROSS}strip}
 | 
			
		||||
    NM=${NM:-${CROSS}nm}
 | 
			
		||||
        AS_SFX=.s
 | 
			
		||||
        EXE_SFX=
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
process_common_toolchain() {
 | 
			
		||||
@@ -551,6 +584,14 @@ process_common_toolchain() {
 | 
			
		||||
                tgt_isa=x86_64
 | 
			
		||||
                tgt_os=darwin10
 | 
			
		||||
                ;;
 | 
			
		||||
            *darwin11*)
 | 
			
		||||
                tgt_isa=x86_64
 | 
			
		||||
                tgt_os=darwin11
 | 
			
		||||
                ;;
 | 
			
		||||
            *darwin12*)
 | 
			
		||||
                tgt_isa=x86_64
 | 
			
		||||
                tgt_os=darwin12
 | 
			
		||||
                ;;
 | 
			
		||||
            *mingw32*|*cygwin*)
 | 
			
		||||
                [ -z "$tgt_isa" ] && tgt_isa=x86
 | 
			
		||||
                tgt_os=win32
 | 
			
		||||
@@ -561,6 +602,9 @@ process_common_toolchain() {
 | 
			
		||||
            *solaris2.10)
 | 
			
		||||
                tgt_os=solaris
 | 
			
		||||
                ;;
 | 
			
		||||
            *os2*)
 | 
			
		||||
                tgt_os=os2
 | 
			
		||||
                ;;
 | 
			
		||||
        esac
 | 
			
		||||
 | 
			
		||||
        if [ -n "$tgt_isa" ] && [ -n "$tgt_os" ]; then
 | 
			
		||||
@@ -589,37 +633,68 @@ process_common_toolchain() {
 | 
			
		||||
 | 
			
		||||
    # Enable the architecture family
 | 
			
		||||
    case ${tgt_isa} in
 | 
			
		||||
        arm*|iwmmxt*) enable arm;;
 | 
			
		||||
    mips*)        enable mips;;
 | 
			
		||||
        arm*) enable arm;;
 | 
			
		||||
        mips*) enable mips;;
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
    # PIC is probably what we want when building shared libs
 | 
			
		||||
    enabled shared && soft_enable pic
 | 
			
		||||
 | 
			
		||||
    # Handle darwin variants
 | 
			
		||||
    # Handle darwin variants. Newer SDKs allow targeting older
 | 
			
		||||
    # platforms, so find the newest SDK available.
 | 
			
		||||
    case ${toolchain} in
 | 
			
		||||
        *-darwin*)
 | 
			
		||||
            if [ -z "${DEVELOPER_DIR}" ]; then
 | 
			
		||||
                DEVELOPER_DIR=`xcode-select -print-path 2> /dev/null`
 | 
			
		||||
                [ $? -ne 0 ] && OSX_SKIP_DIR_CHECK=1
 | 
			
		||||
            fi
 | 
			
		||||
            if [ -z "${OSX_SKIP_DIR_CHECK}" ]; then
 | 
			
		||||
                OSX_SDK_ROOTS="${DEVELOPER_DIR}/SDKs"
 | 
			
		||||
                OSX_SDK_VERSIONS="MacOSX10.4u.sdk MacOSX10.5.sdk MacOSX10.6.sdk"
 | 
			
		||||
                OSX_SDK_VERSIONS="${OSX_SDK_VERSIONS} MacOSX10.7.sdk"
 | 
			
		||||
                for v in ${OSX_SDK_VERSIONS}; do
 | 
			
		||||
                    if [ -d "${OSX_SDK_ROOTS}/${v}" ]; then
 | 
			
		||||
                        osx_sdk_dir="${OSX_SDK_ROOTS}/${v}"
 | 
			
		||||
                    fi
 | 
			
		||||
                done
 | 
			
		||||
            fi
 | 
			
		||||
            ;;
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
    if [ -d "${osx_sdk_dir}" ]; then
 | 
			
		||||
        add_cflags  "-isysroot ${osx_sdk_dir}"
 | 
			
		||||
        add_ldflags "-isysroot ${osx_sdk_dir}"
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    case ${toolchain} in
 | 
			
		||||
        *-darwin8-*)
 | 
			
		||||
            add_cflags  "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
 | 
			
		||||
            add_cflags  "-mmacosx-version-min=10.4"
 | 
			
		||||
            add_ldflags "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
 | 
			
		||||
            add_ldflags "-mmacosx-version-min=10.4"
 | 
			
		||||
            ;;
 | 
			
		||||
        *-darwin9-*)
 | 
			
		||||
            add_cflags  "-isysroot /Developer/SDKs/MacOSX10.5.sdk"
 | 
			
		||||
            add_cflags  "-mmacosx-version-min=10.5"
 | 
			
		||||
            add_ldflags "-isysroot /Developer/SDKs/MacOSX10.5.sdk"
 | 
			
		||||
            add_ldflags "-mmacosx-version-min=10.5"
 | 
			
		||||
            ;;
 | 
			
		||||
        *-darwin10-*)
 | 
			
		||||
            add_cflags  "-isysroot /Developer/SDKs/MacOSX10.6.sdk"
 | 
			
		||||
            add_cflags  "-mmacosx-version-min=10.6"
 | 
			
		||||
            add_ldflags "-isysroot /Developer/SDKs/MacOSX10.6.sdk"
 | 
			
		||||
            add_ldflags "-mmacosx-version-min=10.6"
 | 
			
		||||
            ;;
 | 
			
		||||
        *-darwin11-*)
 | 
			
		||||
            add_cflags  "-mmacosx-version-min=10.7"
 | 
			
		||||
            add_ldflags "-mmacosx-version-min=10.7"
 | 
			
		||||
            ;;
 | 
			
		||||
        *-darwin12-*)
 | 
			
		||||
            add_cflags  "-mmacosx-version-min=10.8"
 | 
			
		||||
            add_ldflags "-mmacosx-version-min=10.8"
 | 
			
		||||
            ;;
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
    # Handle Solaris variants. Solaris 10 needs -lposix4
 | 
			
		||||
    case ${toolchain} in
 | 
			
		||||
        sparc-solaris-*)
 | 
			
		||||
            add_extralibs -lposix4
 | 
			
		||||
            disable fast_unaligned
 | 
			
		||||
            ;;
 | 
			
		||||
        *-solaris-*)
 | 
			
		||||
            add_extralibs -lposix4
 | 
			
		||||
            ;;
 | 
			
		||||
@@ -627,45 +702,49 @@ process_common_toolchain() {
 | 
			
		||||
 | 
			
		||||
    # Process ARM architecture variants
 | 
			
		||||
    case ${toolchain} in
 | 
			
		||||
    arm*|iwmmxt*)
 | 
			
		||||
    # on arm, isa versions are supersets
 | 
			
		||||
    enabled armv7a && soft_enable armv7 ### DEBUG
 | 
			
		||||
    enabled armv7 && soft_enable armv6
 | 
			
		||||
    enabled armv6 && soft_enable armv5te
 | 
			
		||||
    enabled armv6 && soft_enable fast_unaligned
 | 
			
		||||
    enabled iwmmxt2 && soft_enable iwmmxt
 | 
			
		||||
    enabled iwmmxt && soft_enable armv5te
 | 
			
		||||
    arm*)
 | 
			
		||||
        # on arm, isa versions are supersets
 | 
			
		||||
        case ${tgt_isa} in
 | 
			
		||||
        armv7)
 | 
			
		||||
            soft_enable neon
 | 
			
		||||
            soft_enable media
 | 
			
		||||
            soft_enable edsp
 | 
			
		||||
            soft_enable fast_unaligned
 | 
			
		||||
            ;;
 | 
			
		||||
        armv6)
 | 
			
		||||
            soft_enable media
 | 
			
		||||
            soft_enable edsp
 | 
			
		||||
            soft_enable fast_unaligned
 | 
			
		||||
            ;;
 | 
			
		||||
        armv5te)
 | 
			
		||||
            soft_enable edsp
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
 | 
			
		||||
    asm_conversion_cmd="cat"
 | 
			
		||||
        asm_conversion_cmd="cat"
 | 
			
		||||
 | 
			
		||||
        case ${tgt_cc} in
 | 
			
		||||
        gcc)
 | 
			
		||||
        if enabled iwmmxt || enabled iwmmxt2
 | 
			
		||||
            then
 | 
			
		||||
                CROSS=${CROSS:-arm-iwmmxt-linux-gnueabi-}
 | 
			
		||||
            elif enabled symbian; then
 | 
			
		||||
                CROSS=${CROSS:-arm-none-symbianelf-}
 | 
			
		||||
            else
 | 
			
		||||
                CROSS=${CROSS:-arm-none-linux-gnueabi-}
 | 
			
		||||
            fi
 | 
			
		||||
            CROSS=${CROSS:-arm-none-linux-gnueabi-}
 | 
			
		||||
            link_with_cc=gcc
 | 
			
		||||
            setup_gnu_toolchain
 | 
			
		||||
            arch_int=${tgt_isa##armv}
 | 
			
		||||
            arch_int=${arch_int%%te}
 | 
			
		||||
            check_add_asflags --defsym ARCHITECTURE=${arch_int}
 | 
			
		||||
            tune_cflags="-mtune="
 | 
			
		||||
        if enabled iwmmxt || enabled iwmmxt2
 | 
			
		||||
            then
 | 
			
		||||
                check_add_asflags -mcpu=${tgt_isa}
 | 
			
		||||
            elif enabled armv7
 | 
			
		||||
            then
 | 
			
		||||
                check_add_cflags -march=armv7-a -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp  #-ftree-vectorize
 | 
			
		||||
        check_add_asflags -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp  #-march=armv7-a
 | 
			
		||||
            if [ ${tgt_isa} == "armv7" ]; then
 | 
			
		||||
                if enabled neon
 | 
			
		||||
                then
 | 
			
		||||
                    check_add_cflags -mfpu=neon #-ftree-vectorize
 | 
			
		||||
                    check_add_asflags -mfpu=neon
 | 
			
		||||
                fi
 | 
			
		||||
                check_add_cflags -march=armv7-a -mcpu=cortex-a8 -mfloat-abi=softfp
 | 
			
		||||
                check_add_asflags -mcpu=cortex-a8 -mfloat-abi=softfp  #-march=armv7-a
 | 
			
		||||
            else
 | 
			
		||||
                check_add_cflags -march=${tgt_isa}
 | 
			
		||||
                check_add_asflags -march=${tgt_isa}
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            enabled debug && add_asflags -g
 | 
			
		||||
            asm_conversion_cmd="${source_path}/build/make/ads2gas.pl"
 | 
			
		||||
            ;;
 | 
			
		||||
        rvct)
 | 
			
		||||
@@ -678,10 +757,14 @@ process_common_toolchain() {
 | 
			
		||||
            tune_cflags="--cpu="
 | 
			
		||||
            tune_asflags="--cpu="
 | 
			
		||||
            if [ -z "${tune_cpu}" ]; then
 | 
			
		||||
            if enabled armv7
 | 
			
		||||
                then
 | 
			
		||||
                    check_add_cflags --cpu=Cortex-A8 --fpu=softvfp+vfpv3
 | 
			
		||||
                    check_add_asflags --cpu=Cortex-A8 --fpu=none
 | 
			
		||||
                if [ ${tgt_isa} == "armv7" ]; then
 | 
			
		||||
                    if enabled neon
 | 
			
		||||
                    then
 | 
			
		||||
                        check_add_cflags --fpu=softvfp+vfpv3
 | 
			
		||||
                        check_add_asflags --fpu=softvfp+vfpv3
 | 
			
		||||
                    fi
 | 
			
		||||
                    check_add_cflags --cpu=Cortex-A8
 | 
			
		||||
                    check_add_asflags --cpu=Cortex-A8
 | 
			
		||||
                else
 | 
			
		||||
                    check_add_cflags --cpu=${tgt_isa##armv}
 | 
			
		||||
                    check_add_asflags --cpu=${tgt_isa##armv}
 | 
			
		||||
@@ -690,16 +773,63 @@ process_common_toolchain() {
 | 
			
		||||
            arch_int=${tgt_isa##armv}
 | 
			
		||||
            arch_int=${arch_int%%te}
 | 
			
		||||
            check_add_asflags --pd "\"ARCHITECTURE SETA ${arch_int}\""
 | 
			
		||||
            enabled debug && add_asflags -g
 | 
			
		||||
            add_cflags --gnu
 | 
			
		||||
            add_cflags --enum_is_int
 | 
			
		||||
            add_cflags --wchar32
 | 
			
		||||
        ;;
 | 
			
		||||
        esac
 | 
			
		||||
 | 
			
		||||
        case ${tgt_os} in
 | 
			
		||||
        none*)
 | 
			
		||||
            disable multithread
 | 
			
		||||
            disable os_support
 | 
			
		||||
            ;;
 | 
			
		||||
 | 
			
		||||
        android*)
 | 
			
		||||
            SDK_PATH=${sdk_path}
 | 
			
		||||
            COMPILER_LOCATION=`find "${SDK_PATH}" \
 | 
			
		||||
                               -name "arm-linux-androideabi-gcc*" -print -quit`
 | 
			
		||||
            TOOLCHAIN_PATH=${COMPILER_LOCATION%/*}/arm-linux-androideabi-
 | 
			
		||||
            CC=${TOOLCHAIN_PATH}gcc
 | 
			
		||||
            AR=${TOOLCHAIN_PATH}ar
 | 
			
		||||
            LD=${TOOLCHAIN_PATH}gcc
 | 
			
		||||
            AS=${TOOLCHAIN_PATH}as
 | 
			
		||||
            STRIP=${TOOLCHAIN_PATH}strip
 | 
			
		||||
            NM=${TOOLCHAIN_PATH}nm
 | 
			
		||||
 | 
			
		||||
            if [ -z "${alt_libc}" ]; then
 | 
			
		||||
                alt_libc=`find "${SDK_PATH}" -name arch-arm -print | \
 | 
			
		||||
                          awk '{n = split($0,a,"/"); \
 | 
			
		||||
                                split(a[n-1],b,"-"); \
 | 
			
		||||
                                print $0 " " b[2]}' | \
 | 
			
		||||
                          sort -g -k 2 | \
 | 
			
		||||
                          awk '{ print $1 }' | tail -1`
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            add_cflags "--sysroot=${alt_libc}"
 | 
			
		||||
            add_ldflags "--sysroot=${alt_libc}"
 | 
			
		||||
 | 
			
		||||
            add_cflags "-I${SDK_PATH}/sources/android/cpufeatures/"
 | 
			
		||||
 | 
			
		||||
            enable pic
 | 
			
		||||
            soft_enable realtime_only
 | 
			
		||||
            if [ ${tgt_isa} == "armv7" ]; then
 | 
			
		||||
                enable runtime_cpu_detect
 | 
			
		||||
            fi
 | 
			
		||||
          ;;
 | 
			
		||||
 | 
			
		||||
        darwin*)
 | 
			
		||||
            SDK_PATH=/Developer/Platforms/iPhoneOS.platform/Developer
 | 
			
		||||
            if [ -z "${sdk_path}" ]; then
 | 
			
		||||
                SDK_PATH=`xcode-select -print-path 2> /dev/null`
 | 
			
		||||
                SDK_PATH=${SDK_PATH}/Platforms/iPhoneOS.platform/Developer
 | 
			
		||||
            else
 | 
			
		||||
                SDK_PATH=${sdk_path}
 | 
			
		||||
            fi
 | 
			
		||||
            TOOLCHAIN_PATH=${SDK_PATH}/usr/bin
 | 
			
		||||
            CC=${TOOLCHAIN_PATH}/gcc
 | 
			
		||||
            AR=${TOOLCHAIN_PATH}/ar
 | 
			
		||||
            LD=${TOOLCHAIN_PATH}/arm-apple-darwin9-gcc-4.2.1
 | 
			
		||||
            LD=${TOOLCHAIN_PATH}/arm-apple-darwin10-llvm-gcc-4.2
 | 
			
		||||
            AS=${TOOLCHAIN_PATH}/as
 | 
			
		||||
            STRIP=${TOOLCHAIN_PATH}/strip
 | 
			
		||||
            NM=${TOOLCHAIN_PATH}/nm
 | 
			
		||||
@@ -713,19 +843,19 @@ process_common_toolchain() {
 | 
			
		||||
            add_cflags -arch ${tgt_isa}
 | 
			
		||||
            add_ldflags -arch_only ${tgt_isa}
 | 
			
		||||
 | 
			
		||||
            add_cflags  "-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk"
 | 
			
		||||
            if [ -z "${alt_libc}" ]; then
 | 
			
		||||
                alt_libc=${SDK_PATH}/SDKs/iPhoneOS5.1.sdk
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            # This should be overridable
 | 
			
		||||
            alt_libc=${SDK_PATH}/SDKs/iPhoneOS3.1.sdk
 | 
			
		||||
            add_cflags  "-isysroot ${alt_libc}"
 | 
			
		||||
 | 
			
		||||
            # Add the paths for the alternate libc
 | 
			
		||||
#            for d in usr/include usr/include/gcc/darwin/4.0/; do
 | 
			
		||||
            for d in usr/include usr/include/gcc/darwin/4.0/ usr/lib/gcc/arm-apple-darwin9/4.0.1/include/; do
 | 
			
		||||
            for d in usr/include; do
 | 
			
		||||
                try_dir="${alt_libc}/${d}"
 | 
			
		||||
                [ -d "${try_dir}" ] && add_cflags -I"${try_dir}"
 | 
			
		||||
            done
 | 
			
		||||
 | 
			
		||||
            for d in lib usr/lib; do
 | 
			
		||||
            for d in lib usr/lib usr/lib/system; do
 | 
			
		||||
                try_dir="${alt_libc}/${d}"
 | 
			
		||||
                [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
 | 
			
		||||
            done
 | 
			
		||||
@@ -736,61 +866,27 @@ process_common_toolchain() {
 | 
			
		||||
        linux*)
 | 
			
		||||
            enable linux
 | 
			
		||||
            if enabled rvct; then
 | 
			
		||||
                # Compiling with RVCT requires an alternate libc (glibc) when
 | 
			
		||||
                # targetting linux.
 | 
			
		||||
                disabled builtin_libc \
 | 
			
		||||
                    || die "Must supply --libc when targetting *-linux-rvct"
 | 
			
		||||
                # Check if we have CodeSourcery GCC in PATH. Needed for
 | 
			
		||||
                # libraries
 | 
			
		||||
                hash arm-none-linux-gnueabi-gcc 2>&- || \
 | 
			
		||||
                  die "Couldn't find CodeSourcery GCC from PATH"
 | 
			
		||||
 | 
			
		||||
                # Set up compiler
 | 
			
		||||
                add_cflags --gnu
 | 
			
		||||
                add_cflags --enum_is_int
 | 
			
		||||
                add_cflags --library_interface=aeabi_glibc
 | 
			
		||||
                add_cflags --no_hide_all
 | 
			
		||||
                add_cflags --wchar32
 | 
			
		||||
                add_cflags --dwarf2
 | 
			
		||||
                add_cflags --gnu
 | 
			
		||||
                # Use armcc as a linker to enable translation of
 | 
			
		||||
                # some gcc specific options such as -lm and -lpthread.
 | 
			
		||||
                LD="armcc --translate_gcc"
 | 
			
		||||
 | 
			
		||||
                # Set up linker
 | 
			
		||||
                add_ldflags --sysv --no_startup --no_ref_cpp_init
 | 
			
		||||
                add_ldflags --entry=_start
 | 
			
		||||
                add_ldflags --keep '"*(.init)"' --keep '"*(.fini)"'
 | 
			
		||||
                add_ldflags --keep '"*(.init_array)"' --keep '"*(.fini_array)"'
 | 
			
		||||
                add_ldflags --dynamiclinker=/lib/ld-linux.so.3
 | 
			
		||||
                add_extralibs libc.so.6 -lc_nonshared crt1.o crti.o crtn.o
 | 
			
		||||
                # create configuration file (uses path to CodeSourcery GCC)
 | 
			
		||||
                armcc --arm_linux_configure --arm_linux_config_file=arm_linux.cfg
 | 
			
		||||
 | 
			
		||||
                # Add the paths for the alternate libc
 | 
			
		||||
                for d in usr/include; do
 | 
			
		||||
                    try_dir="${alt_libc}/${d}"
 | 
			
		||||
                    [ -d "${try_dir}" ] && add_cflags -J"${try_dir}"
 | 
			
		||||
                done
 | 
			
		||||
                add_cflags -J"${RVCT31INC}"
 | 
			
		||||
                for d in lib usr/lib; do
 | 
			
		||||
                    try_dir="${alt_libc}/${d}"
 | 
			
		||||
                    [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
 | 
			
		||||
                done
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                # glibc has some struct members named __align, which is a
 | 
			
		||||
                # storage modifier in RVCT. If we need to use this modifier,
 | 
			
		||||
                # we'll have to #undef it in our code. Note that this must
 | 
			
		||||
                # happen AFTER all libc inclues.
 | 
			
		||||
                add_cflags -D__align=x_align_x
 | 
			
		||||
                add_cflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg
 | 
			
		||||
                add_asflags --no_hide_all --apcs=/interwork
 | 
			
		||||
                add_ldflags --arm_linux_paths --arm_linux_config_file=arm_linux.cfg
 | 
			
		||||
                enabled pic && add_cflags --apcs=/fpic
 | 
			
		||||
                enabled pic && add_asflags --apcs=/fpic
 | 
			
		||||
                enabled shared && add_cflags --shared
 | 
			
		||||
            fi
 | 
			
		||||
        ;;
 | 
			
		||||
 | 
			
		||||
        symbian*)
 | 
			
		||||
            enable symbian
 | 
			
		||||
            # Add the paths for the alternate libc
 | 
			
		||||
            for d in include/libc; do
 | 
			
		||||
                try_dir="${alt_libc}/${d}"
 | 
			
		||||
                [ -d "${try_dir}" ] && add_cflags -I"${try_dir}"
 | 
			
		||||
            done
 | 
			
		||||
            for d in release/armv5/urel; do
 | 
			
		||||
                try_dir="${alt_libc}/${d}"
 | 
			
		||||
                [ -d "${try_dir}" ] && add_ldflags -L"${try_dir}"
 | 
			
		||||
            done
 | 
			
		||||
            add_cflags -DIMPORT_C=
 | 
			
		||||
 | 
			
		||||
        esac
 | 
			
		||||
    ;;
 | 
			
		||||
    mips*)
 | 
			
		||||
@@ -845,6 +941,9 @@ process_common_toolchain() {
 | 
			
		||||
                LD=${LD:-${CROSS}gcc}
 | 
			
		||||
                CROSS=${CROSS:-g}
 | 
			
		||||
                ;;
 | 
			
		||||
            os2)
 | 
			
		||||
                AS=${AS:-nasm}
 | 
			
		||||
                ;;
 | 
			
		||||
        esac
 | 
			
		||||
 | 
			
		||||
        AS="${alt_as:-${AS:-auto}}"
 | 
			
		||||
@@ -855,7 +954,7 @@ process_common_toolchain() {
 | 
			
		||||
                setup_gnu_toolchain
 | 
			
		||||
                add_cflags -use-msasm -use-asm
 | 
			
		||||
                add_ldflags -i-static
 | 
			
		||||
                enabled x86_64 && add_cflags -ipo -no-prec-div -static -xSSE3 -axSSE3
 | 
			
		||||
                enabled x86_64 && add_cflags -ipo -no-prec-div -static -xSSE2 -axSSE2
 | 
			
		||||
                enabled x86_64 && AR=xiar
 | 
			
		||||
                case ${tune_cpu} in
 | 
			
		||||
                    atom*)
 | 
			
		||||
@@ -873,6 +972,8 @@ process_common_toolchain() {
 | 
			
		||||
                link_with_cc=gcc
 | 
			
		||||
                tune_cflags="-march="
 | 
			
		||||
            setup_gnu_toolchain
 | 
			
		||||
                #for 32 bit x86 builds, -O3 did not turn on this flag
 | 
			
		||||
                enabled optimizations && check_add_cflags -fomit-frame-pointer
 | 
			
		||||
                ;;
 | 
			
		||||
        esac
 | 
			
		||||
 | 
			
		||||
@@ -888,8 +989,12 @@ process_common_toolchain() {
 | 
			
		||||
        [ "${AS##*/}" = nasm ] && add_asflags -Ox
 | 
			
		||||
        AS_SFX=.asm
 | 
			
		||||
        case  ${tgt_os} in
 | 
			
		||||
            win*)
 | 
			
		||||
                add_asflags -f win${bits}
 | 
			
		||||
            win32)
 | 
			
		||||
                add_asflags -f win32
 | 
			
		||||
                enabled debug && add_asflags -g cv8
 | 
			
		||||
            ;;
 | 
			
		||||
            win64)
 | 
			
		||||
                add_asflags -f x64
 | 
			
		||||
                enabled debug && add_asflags -g cv8
 | 
			
		||||
            ;;
 | 
			
		||||
            linux*|solaris*)
 | 
			
		||||
@@ -909,6 +1014,11 @@ process_common_toolchain() {
 | 
			
		||||
                # enabled icc && ! enabled pic && add_cflags -fno-pic -mdynamic-no-pic
 | 
			
		||||
                enabled icc && ! enabled pic && add_cflags -fno-pic
 | 
			
		||||
            ;;
 | 
			
		||||
            os2)
 | 
			
		||||
                add_asflags -f aout
 | 
			
		||||
                enabled debug && add_asflags -g
 | 
			
		||||
                EXE_SFX=.exe
 | 
			
		||||
            ;;
 | 
			
		||||
            *) log "Warning: Unknown os $tgt_os while setting up $AS flags"
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
@@ -940,15 +1050,23 @@ process_common_toolchain() {
 | 
			
		||||
    enabled gcov &&
 | 
			
		||||
        check_add_cflags -fprofile-arcs -ftest-coverage &&
 | 
			
		||||
        check_add_ldflags -fprofile-arcs -ftest-coverage
 | 
			
		||||
 | 
			
		||||
    if enabled optimizations; then
 | 
			
		||||
        enabled rvct && check_add_cflags -Otime
 | 
			
		||||
        enabled small && check_add_cflags -O2 || check_add_cflags -O3
 | 
			
		||||
        if enabled rvct; then
 | 
			
		||||
            enabled small && check_add_cflags -Ospace || check_add_cflags -Otime
 | 
			
		||||
        else
 | 
			
		||||
            enabled small && check_add_cflags -O2 ||  check_add_cflags -O3
 | 
			
		||||
        fi
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # Position Independant Code (PIC) support, for building relocatable
 | 
			
		||||
    # Position Independent Code (PIC) support, for building relocatable
 | 
			
		||||
    # shared objects
 | 
			
		||||
    enabled gcc && enabled pic && check_add_cflags -fPIC
 | 
			
		||||
 | 
			
		||||
    # Work around longjmp interception on glibc >= 2.11, to improve binary
 | 
			
		||||
    # compatibility. See http://code.google.com/p/webm/issues/detail?id=166
 | 
			
		||||
    enabled linux && check_add_cflags -D_FORTIFY_SOURCE=0
 | 
			
		||||
 | 
			
		||||
    # Check for strip utility variant
 | 
			
		||||
    ${STRIP} -V 2>/dev/null | grep GNU >/dev/null && enable gnu_strip
 | 
			
		||||
 | 
			
		||||
@@ -963,15 +1081,25 @@ EOF
 | 
			
		||||
    if enabled multithread; then
 | 
			
		||||
        case ${toolchain} in
 | 
			
		||||
            *-win*);;
 | 
			
		||||
            *-android-gcc);;
 | 
			
		||||
            *) check_header pthread.h && add_extralibs -lpthread
 | 
			
		||||
        esac
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # for sysconf(3) and friends.
 | 
			
		||||
    check_header unistd.h
 | 
			
		||||
 | 
			
		||||
    # glibc needs these
 | 
			
		||||
    if enabled linux; then
 | 
			
		||||
        add_cflags -D_LARGEFILE_SOURCE
 | 
			
		||||
        add_cflags -D_FILE_OFFSET_BITS=64
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    # append any user defined extra cflags
 | 
			
		||||
    if [ -n "${extra_cflags}" ] ; then
 | 
			
		||||
        check_add_cflags ${extra_cflags} || \
 | 
			
		||||
        die "Requested extra CFLAGS '${extra_cflags}' not supported by compiler"
 | 
			
		||||
    fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
process_toolchain() {
 | 
			
		||||
@@ -1004,6 +1132,22 @@ print_config_h() {
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_webm_license() {
 | 
			
		||||
    local destination=$1
 | 
			
		||||
    local prefix=$2
 | 
			
		||||
    local suffix=$3
 | 
			
		||||
    shift 3
 | 
			
		||||
    cat <<EOF > ${destination}
 | 
			
		||||
${prefix} Copyright (c) 2011 The WebM project authors. All Rights Reserved.${suffix}
 | 
			
		||||
${prefix} ${suffix}
 | 
			
		||||
${prefix} Use of this source code is governed by a BSD-style license${suffix}
 | 
			
		||||
${prefix} that can be found in the LICENSE file in the root of the source${suffix}
 | 
			
		||||
${prefix} tree. An additional intellectual property rights grant can be found${suffix}
 | 
			
		||||
${prefix} in the file PATENTS.  All contributing project authors may${suffix}
 | 
			
		||||
${prefix} be found in the AUTHORS file in the root of the source tree.${suffix}
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
process_targets() {
 | 
			
		||||
    true;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ done
 | 
			
		||||
 | 
			
		||||
[ -n "$srcfile" ] || show_help
 | 
			
		||||
sfx=${sfx:-asm}
 | 
			
		||||
includes=$(egrep -i "include +\"?+[a-z0-9_/]+\.${sfx}" $srcfile |
 | 
			
		||||
includes=$(LC_ALL=C egrep -i "include +\"?+[a-z0-9_/]+\.${sfx}" $srcfile |
 | 
			
		||||
           perl -p -e "s;.*?([a-z0-9_/]+.${sfx}).*;\1;")
 | 
			
		||||
#" restore editor state
 | 
			
		||||
for inc in ${includes}; do
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,8 @@ Options:
 | 
			
		||||
    --name=project_name         Name of the project (required)
 | 
			
		||||
    --proj-guid=GUID            GUID to use for the project
 | 
			
		||||
    --module-def=filename       File containing export definitions (for DLLs)
 | 
			
		||||
    --ver=version               Version (7,8) of visual studio to generate for
 | 
			
		||||
    --ver=version               Version (7,8,9) of visual studio to generate for
 | 
			
		||||
    --src-path-bare=dir         Path to root of source tree
 | 
			
		||||
    -Ipath/to/include           Additional include directories
 | 
			
		||||
    -DFLAG[=value]              Preprocessor macros to define
 | 
			
		||||
    -Lpath/to/lib               Additional library search paths
 | 
			
		||||
@@ -132,7 +133,7 @@ generate_filter() {
 | 
			
		||||
    open_tag Filter \
 | 
			
		||||
        Name=$name \
 | 
			
		||||
        Filter=$pats \
 | 
			
		||||
        UniqueIdentifier=`generate_uuid`
 | 
			
		||||
        UniqueIdentifier=`generate_uuid` \
 | 
			
		||||
 | 
			
		||||
    file_list_sz=${#file_list[@]}
 | 
			
		||||
    for i in ${!file_list[@]}; do
 | 
			
		||||
@@ -145,31 +146,21 @@ generate_filter() {
 | 
			
		||||
                if [ "$pat" == "asm" ] && $asm_use_custom_step; then
 | 
			
		||||
                    for plat in "${platforms[@]}"; do
 | 
			
		||||
                        for cfg in Debug Release; do
 | 
			
		||||
                            open_tag  FileConfiguration \
 | 
			
		||||
                            Name="${cfg}|${plat}"
 | 
			
		||||
                            open_tag FileConfiguration \
 | 
			
		||||
                                Name="${cfg}|${plat}" \
 | 
			
		||||
 | 
			
		||||
                            tag Tool \
 | 
			
		||||
                                Name="VCCustomBuildTool" \
 | 
			
		||||
                                Description="Assembling \$(InputFileName)" \
 | 
			
		||||
                                CommandLine="$(eval echo \$asm_${cfg}_cmdline)"\
 | 
			
		||||
                                Outputs="\$(InputName).obj"
 | 
			
		||||
                                CommandLine="$(eval echo \$asm_${cfg}_cmdline)" \
 | 
			
		||||
                                Outputs="\$(InputName).obj" \
 | 
			
		||||
 | 
			
		||||
                            close_tag FileConfiguration
 | 
			
		||||
                        done
 | 
			
		||||
                    done
 | 
			
		||||
                fi
 | 
			
		||||
 | 
			
		||||
                if [ "${f##*.}" == "cpp" ]; then
 | 
			
		||||
                    for plat in "${platforms[@]}"; do
 | 
			
		||||
                        for cfg in Debug Release; do
 | 
			
		||||
                        open_tag FileConfiguration \
 | 
			
		||||
                            Name="${cfg}|${plat}"
 | 
			
		||||
                        tag Tool \
 | 
			
		||||
                            Name="VCCLCompilerTool" \
 | 
			
		||||
                            CompileAs="2"
 | 
			
		||||
                        close_tag FileConfiguration
 | 
			
		||||
                        done
 | 
			
		||||
                    done
 | 
			
		||||
                fi
 | 
			
		||||
                close_tag  File
 | 
			
		||||
                close_tag File
 | 
			
		||||
 | 
			
		||||
                break
 | 
			
		||||
            fi
 | 
			
		||||
@@ -185,57 +176,63 @@ unset target
 | 
			
		||||
for opt in "$@"; do
 | 
			
		||||
    optval="${opt#*=}"
 | 
			
		||||
    case "$opt" in
 | 
			
		||||
    --help|-h) show_help
 | 
			
		||||
    ;;
 | 
			
		||||
    --target=*) target="${optval}"
 | 
			
		||||
    ;;
 | 
			
		||||
    --out=*) outfile="$optval"
 | 
			
		||||
    ;;
 | 
			
		||||
    --name=*) name="${optval}"
 | 
			
		||||
    ;;
 | 
			
		||||
    --proj-guid=*) guid="${optval}"
 | 
			
		||||
    ;;
 | 
			
		||||
    --module-def=*)
 | 
			
		||||
        link_opts="${link_opts} ModuleDefinitionFile=${optval}"
 | 
			
		||||
    ;;
 | 
			
		||||
    --exe) proj_kind="exe"
 | 
			
		||||
    ;;
 | 
			
		||||
    --lib) proj_kind="lib"
 | 
			
		||||
    ;;
 | 
			
		||||
    --static-crt) use_static_runtime=true
 | 
			
		||||
    ;;
 | 
			
		||||
    --ver=*) vs_ver="$optval"
 | 
			
		||||
             case $optval in
 | 
			
		||||
             [789])
 | 
			
		||||
             ;;
 | 
			
		||||
             *) die Unrecognized Visual Studio Version in $opt
 | 
			
		||||
             ;;
 | 
			
		||||
             esac
 | 
			
		||||
    ;;
 | 
			
		||||
    -I*) opt="${opt%/}"
 | 
			
		||||
         incs="${incs}${incs:+;}"${opt##-I}""
 | 
			
		||||
         yasmincs="${yasmincs} ${opt}"
 | 
			
		||||
    ;;
 | 
			
		||||
    -D*) defines="${defines}${defines:+;}${opt##-D}"
 | 
			
		||||
    ;;
 | 
			
		||||
    -L*) # fudge . to $(OutDir)
 | 
			
		||||
         if [ "${opt##-L}" == "." ]; then
 | 
			
		||||
             libdirs="${libdirs}${libdirs:+;}"\$(OutDir)""
 | 
			
		||||
         else
 | 
			
		||||
             # Also try directories for this platform/configuration
 | 
			
		||||
             libdirs="${libdirs}${libdirs:+;}"${opt##-L}""
 | 
			
		||||
             libdirs="${libdirs}${libdirs:+;}"${opt##-L}/\$(PlatformName)/\$(ConfigurationName)""
 | 
			
		||||
             libdirs="${libdirs}${libdirs:+;}"${opt##-L}/\$(PlatformName)""
 | 
			
		||||
         fi
 | 
			
		||||
    ;;
 | 
			
		||||
    -l*) libs="${libs}${libs:+ }${opt##-l}.lib"
 | 
			
		||||
    ;;
 | 
			
		||||
    -*) die_unknown $opt
 | 
			
		||||
    ;;
 | 
			
		||||
    *) file_list[${#file_list[@]}]="$opt"
 | 
			
		||||
       case "$opt" in
 | 
			
		||||
       *.asm) uses_asm=true;;
 | 
			
		||||
       esac
 | 
			
		||||
        --help|-h) show_help
 | 
			
		||||
        ;;
 | 
			
		||||
        --target=*) target="${optval}"
 | 
			
		||||
        ;;
 | 
			
		||||
        --out=*) outfile="$optval"
 | 
			
		||||
        ;;
 | 
			
		||||
        --name=*) name="${optval}"
 | 
			
		||||
        ;;
 | 
			
		||||
        --proj-guid=*) guid="${optval}"
 | 
			
		||||
        ;;
 | 
			
		||||
        --module-def=*) link_opts="${link_opts} ModuleDefinitionFile=${optval}"
 | 
			
		||||
        ;;
 | 
			
		||||
        --exe) proj_kind="exe"
 | 
			
		||||
        ;;
 | 
			
		||||
        --lib) proj_kind="lib"
 | 
			
		||||
        ;;
 | 
			
		||||
        --src-path-bare=*) src_path_bare="$optval"
 | 
			
		||||
        ;;
 | 
			
		||||
        --static-crt) use_static_runtime=true
 | 
			
		||||
        ;;
 | 
			
		||||
        --ver=*)
 | 
			
		||||
            vs_ver="$optval"
 | 
			
		||||
            case "$optval" in
 | 
			
		||||
                [789])
 | 
			
		||||
                ;;
 | 
			
		||||
                *) die Unrecognized Visual Studio Version in $opt
 | 
			
		||||
                ;;
 | 
			
		||||
            esac
 | 
			
		||||
        ;;
 | 
			
		||||
        -I*)
 | 
			
		||||
            opt="${opt%/}"
 | 
			
		||||
            incs="${incs}${incs:+;}"${opt##-I}""
 | 
			
		||||
            yasmincs="${yasmincs} ${opt}"
 | 
			
		||||
        ;;
 | 
			
		||||
        -D*) defines="${defines}${defines:+;}${opt##-D}"
 | 
			
		||||
        ;;
 | 
			
		||||
        -L*) # fudge . to $(OutDir)
 | 
			
		||||
            if [ "${opt##-L}" == "." ]; then
 | 
			
		||||
                libdirs="${libdirs}${libdirs:+;}"\$(OutDir)""
 | 
			
		||||
            else
 | 
			
		||||
                 # Also try directories for this platform/configuration
 | 
			
		||||
                 libdirs="${libdirs}${libdirs:+;}"${opt##-L}""
 | 
			
		||||
                 libdirs="${libdirs}${libdirs:+;}"${opt##-L}/\$(PlatformName)/\$(ConfigurationName)""
 | 
			
		||||
                 libdirs="${libdirs}${libdirs:+;}"${opt##-L}/\$(PlatformName)""
 | 
			
		||||
            fi
 | 
			
		||||
        ;;
 | 
			
		||||
        -l*) libs="${libs}${libs:+ }${opt##-l}.lib"
 | 
			
		||||
        ;;
 | 
			
		||||
        -*) die_unknown $opt
 | 
			
		||||
        ;;
 | 
			
		||||
        *)
 | 
			
		||||
            file_list[${#file_list[@]}]="$opt"
 | 
			
		||||
            case "$opt" in
 | 
			
		||||
                 *.asm) uses_asm=true
 | 
			
		||||
                 ;;
 | 
			
		||||
            esac
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
done
 | 
			
		||||
outfile=${outfile:-/dev/stdout}
 | 
			
		||||
@@ -278,11 +275,7 @@ done
 | 
			
		||||
 | 
			
		||||
# List Keyword for this target
 | 
			
		||||
case "$target" in
 | 
			
		||||
    x86*)
 | 
			
		||||
        keyword="ManagedCProj"
 | 
			
		||||
    ;;
 | 
			
		||||
    arm*|iwmmx*)
 | 
			
		||||
        keyword="Win32Proj"
 | 
			
		||||
    x86*) keyword="ManagedCProj"
 | 
			
		||||
    ;;
 | 
			
		||||
    *) die "Unsupported target $target!"
 | 
			
		||||
esac
 | 
			
		||||
@@ -298,402 +291,261 @@ case "$target" in
 | 
			
		||||
        asm_Debug_cmdline="yasm -Xvc -g cv8 -f \$(PlatformName) ${yasmincs} "\$(InputPath)""
 | 
			
		||||
        asm_Release_cmdline="yasm -Xvc -f \$(PlatformName) ${yasmincs} "\$(InputPath)""
 | 
			
		||||
    ;;
 | 
			
		||||
    arm*|iwmmx*)
 | 
			
		||||
        case "${name}" in
 | 
			
		||||
        obj_int_extract) platforms[0]="Win32"
 | 
			
		||||
        ;;
 | 
			
		||||
        *) platforms[0]="Pocket PC 2003 (ARMV4)"
 | 
			
		||||
        ;;
 | 
			
		||||
        esac
 | 
			
		||||
    ;;
 | 
			
		||||
    *) die "Unsupported target $target!"
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# List Command-line Arguments for this target
 | 
			
		||||
case "$target" in
 | 
			
		||||
    arm*|iwmmx*)
 | 
			
		||||
        if [ "$name" == "example" ];then
 | 
			
		||||
            ARGU="--codec vp6 --flipuv --progress _bnd.vp6"
 | 
			
		||||
        fi
 | 
			
		||||
        if [ "$name" == "xma" ];then
 | 
			
		||||
            ARGU="--codec vp6 -h 240 -w 320 -v"
 | 
			
		||||
        fi
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
generate_vcproj() {
 | 
			
		||||
    case "$proj_kind" in
 | 
			
		||||
    exe) vs_ConfigurationType=1
 | 
			
		||||
    ;;
 | 
			
		||||
    *)   vs_ConfigurationType=4
 | 
			
		||||
    ;;
 | 
			
		||||
        exe) vs_ConfigurationType=1
 | 
			
		||||
        ;;
 | 
			
		||||
        *)   vs_ConfigurationType=4
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
 | 
			
		||||
    echo "<?xml version=\"1.0\" encoding=\"Windows-1252\"?>"
 | 
			
		||||
    open_tag  VisualStudioProject \
 | 
			
		||||
                  ProjectType="Visual C++" \
 | 
			
		||||
                  Version="${vs_ver_id}" \
 | 
			
		||||
                  Name="${name}" \
 | 
			
		||||
                  ProjectGUID="{${guid}}" \
 | 
			
		||||
                  RootNamespace="${name}" \
 | 
			
		||||
                  Keyword="${keyword}"
 | 
			
		||||
    open_tag VisualStudioProject \
 | 
			
		||||
        ProjectType="Visual C++" \
 | 
			
		||||
        Version="${vs_ver_id}" \
 | 
			
		||||
        Name="${name}" \
 | 
			
		||||
        ProjectGUID="{${guid}}" \
 | 
			
		||||
        RootNamespace="${name}" \
 | 
			
		||||
        Keyword="${keyword}" \
 | 
			
		||||
 | 
			
		||||
    open_tag  Platforms
 | 
			
		||||
    open_tag Platforms
 | 
			
		||||
    for plat in "${platforms[@]}"; do
 | 
			
		||||
        tag   Platform Name="$plat"
 | 
			
		||||
        tag Platform Name="$plat"
 | 
			
		||||
    done
 | 
			
		||||
    close_tag Platforms
 | 
			
		||||
 | 
			
		||||
    open_tag  ToolFiles
 | 
			
		||||
    open_tag ToolFiles
 | 
			
		||||
    case "$target" in
 | 
			
		||||
        x86*) $uses_asm && tag ToolFile RelativePath="$self_dirname/../x86-msvs/yasm.rules"
 | 
			
		||||
        ;;
 | 
			
		||||
        arm*|iwmmx*)
 | 
			
		||||
            if [ "$name" == "vpx" ];then
 | 
			
		||||
            case "$target" in
 | 
			
		||||
                armv5*)
 | 
			
		||||
                    tag ToolFile RelativePath="$self_dirname/../arm-wince-vs8/armasmv5.rules"
 | 
			
		||||
                ;;
 | 
			
		||||
                armv6*)
 | 
			
		||||
                    tag ToolFile RelativePath="$self_dirname/../arm-wince-vs8/armasmv6.rules"
 | 
			
		||||
                ;;
 | 
			
		||||
                iwmmxt*)
 | 
			
		||||
                    tag ToolFile RelativePath="$self_dirname/../arm-wince-vs8/armasmxscale.rules"
 | 
			
		||||
                ;;
 | 
			
		||||
            esac
 | 
			
		||||
            fi
 | 
			
		||||
        ;;
 | 
			
		||||
    esac
 | 
			
		||||
    close_tag ToolFiles
 | 
			
		||||
 | 
			
		||||
    open_tag  Configurations
 | 
			
		||||
    open_tag Configurations
 | 
			
		||||
    for plat in "${platforms[@]}"; do
 | 
			
		||||
        plat_no_ws=`echo $plat | sed 's/[^A-Za-z0-9_]/_/g'`
 | 
			
		||||
        open_tag  Configuration \
 | 
			
		||||
                      Name="Debug|$plat" \
 | 
			
		||||
                      OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \
 | 
			
		||||
                      IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \
 | 
			
		||||
                      ConfigurationType="$vs_ConfigurationType" \
 | 
			
		||||
                      CharacterSet="1"
 | 
			
		||||
 | 
			
		||||
        if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
 | 
			
		||||
            case "$name" in
 | 
			
		||||
                vpx)         tag Tool \
 | 
			
		||||
                             Name="VCPreBuildEventTool" \
 | 
			
		||||
                             CommandLine="call obj_int_extract.bat \$(ConfigurationName)"
 | 
			
		||||
                             tag Tool \
 | 
			
		||||
                             Name="VCMIDLTool" \
 | 
			
		||||
                             TargetEnvironment="1"
 | 
			
		||||
                             tag Tool \
 | 
			
		||||
                             Name="VCCLCompilerTool" \
 | 
			
		||||
                             ExecutionBucket="7" \
 | 
			
		||||
                             Optimization="0" \
 | 
			
		||||
                             AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                             PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;DEBUG;_LIB;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
 | 
			
		||||
                             MinimalRebuild="true" \
 | 
			
		||||
                             RuntimeLibrary="1" \
 | 
			
		||||
                             BufferSecurityCheck="false" \
 | 
			
		||||
                             UsePrecompiledHeader="0" \
 | 
			
		||||
                             WarningLevel="3" \
 | 
			
		||||
                             DebugInformationFormat="1" \
 | 
			
		||||
                             CompileAs="1"
 | 
			
		||||
                             tag Tool \
 | 
			
		||||
                             Name="VCResourceCompilerTool" \
 | 
			
		||||
                             PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES)" \
 | 
			
		||||
                             Culture="1033" \
 | 
			
		||||
                             AdditionalIncludeDirectories="\$(IntDir)" \
 | 
			
		||||
                ;;
 | 
			
		||||
                example|xma) tag Tool \
 | 
			
		||||
                             Name="VCCLCompilerTool" \
 | 
			
		||||
                             ExecutionBucket="7" \
 | 
			
		||||
                             Optimization="0" \
 | 
			
		||||
                             AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                             PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;DEBUG;_CONSOLE;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
 | 
			
		||||
                             MinimalRebuild="true" \
 | 
			
		||||
                             RuntimeLibrary="1" \
 | 
			
		||||
                             BufferSecurityCheck="false" \
 | 
			
		||||
                             UsePrecompiledHeader="0" \
 | 
			
		||||
                             WarningLevel="3" \
 | 
			
		||||
                             DebugInformationFormat="1" \
 | 
			
		||||
                             CompileAs="1"
 | 
			
		||||
                             tag Tool \
 | 
			
		||||
                             Name="VCResourceCompilerTool" \
 | 
			
		||||
                             PreprocessorDefinitions="_DEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES)" \
 | 
			
		||||
                             Culture="1033" \
 | 
			
		||||
                             AdditionalIncludeDirectories="\$(IntDir)" \
 | 
			
		||||
                ;;
 | 
			
		||||
                obj_int_extract) tag Tool \
 | 
			
		||||
                             Name="VCCLCompilerTool" \
 | 
			
		||||
                             Optimization="0" \
 | 
			
		||||
                             AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                             PreprocessorDefinitions="WIN32;DEBUG;_CONSOLE" \
 | 
			
		||||
                             RuntimeLibrary="1" \
 | 
			
		||||
                             WarningLevel="3" \
 | 
			
		||||
                             DebugInformationFormat="1" \
 | 
			
		||||
                ;;
 | 
			
		||||
            esac
 | 
			
		||||
        fi
 | 
			
		||||
        open_tag Configuration \
 | 
			
		||||
            Name="Debug|$plat" \
 | 
			
		||||
            OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \
 | 
			
		||||
            IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \
 | 
			
		||||
            ConfigurationType="$vs_ConfigurationType" \
 | 
			
		||||
            CharacterSet="1" \
 | 
			
		||||
 | 
			
		||||
        case "$target" in
 | 
			
		||||
            x86*) tag Tool \
 | 
			
		||||
                Name="VCCLCompilerTool" \
 | 
			
		||||
                Optimization="0" \
 | 
			
		||||
                AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
 | 
			
		||||
                RuntimeLibrary="$debug_runtime" \
 | 
			
		||||
                UsePrecompiledHeader="0" \
 | 
			
		||||
                WarningLevel="3" \
 | 
			
		||||
                DebugInformationFormat="1" \
 | 
			
		||||
                Detect64BitPortabilityProblems="true" \
 | 
			
		||||
            x86*)
 | 
			
		||||
                case "$name" in
 | 
			
		||||
                    obj_int_extract)
 | 
			
		||||
                        tag Tool \
 | 
			
		||||
                            Name="VCCLCompilerTool" \
 | 
			
		||||
                            Optimization="0" \
 | 
			
		||||
                            AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                            PreprocessorDefinitions="WIN32;DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE" \
 | 
			
		||||
                            RuntimeLibrary="$debug_runtime" \
 | 
			
		||||
                            WarningLevel="3" \
 | 
			
		||||
                            Detect64BitPortabilityProblems="true" \
 | 
			
		||||
                            DebugInformationFormat="1" \
 | 
			
		||||
                    ;;
 | 
			
		||||
                    vpx)
 | 
			
		||||
                        tag Tool \
 | 
			
		||||
                            Name="VCPreBuildEventTool" \
 | 
			
		||||
                            CommandLine="call obj_int_extract.bat $src_path_bare" \
 | 
			
		||||
 | 
			
		||||
                $uses_asm && tag Tool Name="YASM"  IncludePaths="$incs" Debug="1"
 | 
			
		||||
                        tag Tool \
 | 
			
		||||
                            Name="VCCLCompilerTool" \
 | 
			
		||||
                            Optimization="0" \
 | 
			
		||||
                            AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                            PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
 | 
			
		||||
                            RuntimeLibrary="$debug_runtime" \
 | 
			
		||||
                            UsePrecompiledHeader="0" \
 | 
			
		||||
                            WarningLevel="3" \
 | 
			
		||||
                            DebugInformationFormat="1" \
 | 
			
		||||
                            Detect64BitPortabilityProblems="true" \
 | 
			
		||||
 | 
			
		||||
                        $uses_asm && tag Tool Name="YASM"  IncludePaths="$incs" Debug="true"
 | 
			
		||||
                    ;;
 | 
			
		||||
                    *)
 | 
			
		||||
                        tag Tool \
 | 
			
		||||
                            Name="VCCLCompilerTool" \
 | 
			
		||||
                            Optimization="0" \
 | 
			
		||||
                            AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                            PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
 | 
			
		||||
                            RuntimeLibrary="$debug_runtime" \
 | 
			
		||||
                            UsePrecompiledHeader="0" \
 | 
			
		||||
                            WarningLevel="3" \
 | 
			
		||||
                            DebugInformationFormat="1" \
 | 
			
		||||
                            Detect64BitPortabilityProblems="true" \
 | 
			
		||||
 | 
			
		||||
                        $uses_asm && tag Tool Name="YASM"  IncludePaths="$incs" Debug="true"
 | 
			
		||||
                    ;;
 | 
			
		||||
                esac
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
 | 
			
		||||
        case "$proj_kind" in
 | 
			
		||||
            exe)
 | 
			
		||||
                case "$target" in
 | 
			
		||||
                    x86*) tag Tool \
 | 
			
		||||
                          Name="VCLinkerTool" \
 | 
			
		||||
                          AdditionalDependencies="$debug_libs \$(NoInherit)" \
 | 
			
		||||
                          AdditionalLibraryDirectories="$libdirs" \
 | 
			
		||||
                          GenerateDebugInformation="true" \
 | 
			
		||||
                          ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \
 | 
			
		||||
 | 
			
		||||
                    ;;
 | 
			
		||||
                    arm*|iwmmx*)
 | 
			
		||||
                    x86*)
 | 
			
		||||
                        case "$name" in
 | 
			
		||||
                            obj_int_extract) tag Tool \
 | 
			
		||||
                                Name="VCLinkerTool" \
 | 
			
		||||
                                OutputFile="${name}.exe" \
 | 
			
		||||
                                GenerateDebugInformation="true"
 | 
			
		||||
                            obj_int_extract)
 | 
			
		||||
                                tag Tool \
 | 
			
		||||
                                    Name="VCLinkerTool" \
 | 
			
		||||
                                    OutputFile="${name}.exe" \
 | 
			
		||||
                                    GenerateDebugInformation="true" \
 | 
			
		||||
                            ;;
 | 
			
		||||
                            *) tag Tool \
 | 
			
		||||
                                Name="VCLinkerTool" \
 | 
			
		||||
                                AdditionalDependencies="$debug_libs" \
 | 
			
		||||
                                OutputFile="\$(OutDir)/${name}.exe" \
 | 
			
		||||
                                LinkIncremental="2" \
 | 
			
		||||
                                AdditionalLibraryDirectories="${libdirs};"..\lib/$plat_no_ws"" \
 | 
			
		||||
                                DelayLoadDLLs="\$(NOINHERIT)" \
 | 
			
		||||
                                GenerateDebugInformation="true" \
 | 
			
		||||
                                ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \
 | 
			
		||||
                                SubSystem="9" \
 | 
			
		||||
                                StackReserveSize="65536" \
 | 
			
		||||
                                StackCommitSize="4096" \
 | 
			
		||||
                                EntryPointSymbol="mainWCRTStartup" \
 | 
			
		||||
                                TargetMachine="3"
 | 
			
		||||
                            *)
 | 
			
		||||
                                tag Tool \
 | 
			
		||||
                                    Name="VCLinkerTool" \
 | 
			
		||||
                                    AdditionalDependencies="$debug_libs \$(NoInherit)" \
 | 
			
		||||
                                    AdditionalLibraryDirectories="$libdirs" \
 | 
			
		||||
                                    GenerateDebugInformation="true" \
 | 
			
		||||
                                    ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \
 | 
			
		||||
                            ;;
 | 
			
		||||
                        esac
 | 
			
		||||
                     ;;
 | 
			
		||||
                    ;;
 | 
			
		||||
                 esac
 | 
			
		||||
            ;;
 | 
			
		||||
            lib)
 | 
			
		||||
                case "$target" in
 | 
			
		||||
                      arm*|iwmmx*) tag Tool \
 | 
			
		||||
                                    Name="VCLibrarianTool" \
 | 
			
		||||
                                    AdditionalOptions=" /subsystem:windowsce,4.20 /machine:ARM" \
 | 
			
		||||
                                    OutputFile="\$(OutDir)/${name}.lib" \
 | 
			
		||||
                                ;;
 | 
			
		||||
                                *) tag Tool \
 | 
			
		||||
                                    Name="VCLibrarianTool" \
 | 
			
		||||
                                    OutputFile="\$(OutDir)/${name}${lib_sfx}d.lib" \
 | 
			
		||||
                                ;;
 | 
			
		||||
                    x86*)
 | 
			
		||||
                        tag Tool \
 | 
			
		||||
                            Name="VCLibrarianTool" \
 | 
			
		||||
                            OutputFile="\$(OutDir)/${name}${lib_sfx}d.lib" \
 | 
			
		||||
 | 
			
		||||
                    ;;
 | 
			
		||||
                esac
 | 
			
		||||
            ;;
 | 
			
		||||
            dll) tag Tool \
 | 
			
		||||
                 Name="VCLinkerTool" \
 | 
			
		||||
                AdditionalDependencies="\$(NoInherit)" \
 | 
			
		||||
                LinkIncremental="2" \
 | 
			
		||||
                GenerateDebugInformation="true" \
 | 
			
		||||
                AssemblyDebug="1" \
 | 
			
		||||
                TargetMachine="1" \
 | 
			
		||||
                      $link_opts
 | 
			
		||||
            dll)
 | 
			
		||||
                tag Tool \
 | 
			
		||||
                    Name="VCLinkerTool" \
 | 
			
		||||
                    AdditionalDependencies="\$(NoInherit)" \
 | 
			
		||||
                    LinkIncremental="2" \
 | 
			
		||||
                    GenerateDebugInformation="true" \
 | 
			
		||||
                    AssemblyDebug="1" \
 | 
			
		||||
                    TargetMachine="1" \
 | 
			
		||||
                    $link_opts \
 | 
			
		||||
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
 | 
			
		||||
        if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
 | 
			
		||||
            case "$name" in
 | 
			
		||||
                vpx)         tag DeploymentTool \
 | 
			
		||||
                             ForceDirty="-1" \
 | 
			
		||||
                             RegisterOutput="0"
 | 
			
		||||
                                ;;
 | 
			
		||||
                example|xma) tag DeploymentTool \
 | 
			
		||||
                             ForceDirty="-1" \
 | 
			
		||||
                             RegisterOutput="0"
 | 
			
		||||
                             tag DebuggerTool \
 | 
			
		||||
                             Arguments="${ARGU}"
 | 
			
		||||
                                ;;
 | 
			
		||||
            esac
 | 
			
		||||
        fi
 | 
			
		||||
        close_tag Configuration
 | 
			
		||||
 | 
			
		||||
        open_tag  Configuration \
 | 
			
		||||
                      Name="Release|$plat" \
 | 
			
		||||
                      OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \
 | 
			
		||||
                      IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \
 | 
			
		||||
                      ConfigurationType="$vs_ConfigurationType" \
 | 
			
		||||
                      CharacterSet="1" \
 | 
			
		||||
                      WholeProgramOptimization="0"
 | 
			
		||||
        open_tag Configuration \
 | 
			
		||||
            Name="Release|$plat" \
 | 
			
		||||
            OutputDirectory="\$(SolutionDir)$plat_no_ws/\$(ConfigurationName)" \
 | 
			
		||||
            IntermediateDirectory="$plat_no_ws/\$(ConfigurationName)/${name}" \
 | 
			
		||||
            ConfigurationType="$vs_ConfigurationType" \
 | 
			
		||||
            CharacterSet="1" \
 | 
			
		||||
            WholeProgramOptimization="0" \
 | 
			
		||||
 | 
			
		||||
        if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
 | 
			
		||||
            case "$name" in
 | 
			
		||||
                vpx)         tag Tool \
 | 
			
		||||
                                     Name="VCPreBuildEventTool" \
 | 
			
		||||
                                     CommandLine="call obj_int_extract.bat \$(ConfigurationName)"
 | 
			
		||||
                             tag Tool \
 | 
			
		||||
                                     Name="VCMIDLTool" \
 | 
			
		||||
                                     TargetEnvironment="1"
 | 
			
		||||
                             tag Tool \
 | 
			
		||||
                                             Name="VCCLCompilerTool" \
 | 
			
		||||
                                             ExecutionBucket="7" \
 | 
			
		||||
                                             Optimization="2" \
 | 
			
		||||
                                             FavorSizeOrSpeed="1" \
 | 
			
		||||
                                             AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                                             PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;_LIB;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
 | 
			
		||||
                                             RuntimeLibrary="0" \
 | 
			
		||||
                                             BufferSecurityCheck="false" \
 | 
			
		||||
                                             UsePrecompiledHeader="0" \
 | 
			
		||||
                                             WarningLevel="3" \
 | 
			
		||||
                                             DebugInformationFormat="0" \
 | 
			
		||||
                                             CompileAs="1"
 | 
			
		||||
                             tag Tool \
 | 
			
		||||
                                             Name="VCResourceCompilerTool" \
 | 
			
		||||
                                             PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES)" \
 | 
			
		||||
                                             Culture="1033" \
 | 
			
		||||
                                             AdditionalIncludeDirectories="\$(IntDir)" \
 | 
			
		||||
                ;;
 | 
			
		||||
                example|xma) tag Tool \
 | 
			
		||||
                             Name="VCCLCompilerTool" \
 | 
			
		||||
                             ExecutionBucket="7" \
 | 
			
		||||
                             Optimization="2" \
 | 
			
		||||
                             FavorSizeOrSpeed="1" \
 | 
			
		||||
                             AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                             PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES);WINCE;_CONSOLE;\$(ARCHFAM);\$(_ARCHFAM_);_UNICODE;UNICODE;" \
 | 
			
		||||
                             RuntimeLibrary="0" \
 | 
			
		||||
                             BufferSecurityCheck="false" \
 | 
			
		||||
                             UsePrecompiledHeader="0" \
 | 
			
		||||
                             WarningLevel="3" \
 | 
			
		||||
                             DebugInformationFormat="0" \
 | 
			
		||||
                             CompileAs="1"
 | 
			
		||||
                             tag Tool \
 | 
			
		||||
                             Name="VCResourceCompilerTool" \
 | 
			
		||||
                             PreprocessorDefinitions="NDEBUG;_WIN32_WCE=\$(CEVER);UNDER_CE;\$(PLATFORMDEFINES)" \
 | 
			
		||||
                             Culture="1033" \
 | 
			
		||||
                             AdditionalIncludeDirectories="\$(IntDir)" \
 | 
			
		||||
                ;;
 | 
			
		||||
                obj_int_extract) tag Tool \
 | 
			
		||||
                             Name="VCCLCompilerTool" \
 | 
			
		||||
                             AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                             PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE" \
 | 
			
		||||
                             RuntimeLibrary="0" \
 | 
			
		||||
                             UsePrecompiledHeader="0" \
 | 
			
		||||
                             WarningLevel="3" \
 | 
			
		||||
                             Detect64BitPortabilityProblems="true" \
 | 
			
		||||
                             DebugInformationFormat="0" \
 | 
			
		||||
                ;;
 | 
			
		||||
            esac
 | 
			
		||||
        fi
 | 
			
		||||
        case "$target" in
 | 
			
		||||
            x86*)
 | 
			
		||||
                case "$name" in
 | 
			
		||||
                    obj_int_extract)
 | 
			
		||||
                        tag Tool \
 | 
			
		||||
                            Name="VCCLCompilerTool" \
 | 
			
		||||
                            Optimization="2" \
 | 
			
		||||
                            FavorSizeorSpeed="1" \
 | 
			
		||||
                            AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                            PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE" \
 | 
			
		||||
                            RuntimeLibrary="$release_runtime" \
 | 
			
		||||
                            UsePrecompiledHeader="0" \
 | 
			
		||||
                            WarningLevel="3" \
 | 
			
		||||
                            Detect64BitPortabilityProblems="true" \
 | 
			
		||||
                            DebugInformationFormat="0" \
 | 
			
		||||
                    ;;
 | 
			
		||||
                    vpx)
 | 
			
		||||
                        tag Tool \
 | 
			
		||||
                            Name="VCPreBuildEventTool" \
 | 
			
		||||
                            CommandLine="call obj_int_extract.bat $src_path_bare" \
 | 
			
		||||
 | 
			
		||||
    case "$target" in
 | 
			
		||||
        x86*) tag       Tool \
 | 
			
		||||
                      Name="VCCLCompilerTool" \
 | 
			
		||||
                      AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                      PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
 | 
			
		||||
                      RuntimeLibrary="$release_runtime" \
 | 
			
		||||
                      UsePrecompiledHeader="0" \
 | 
			
		||||
                      WarningLevel="3" \
 | 
			
		||||
                      DebugInformationFormat="0" \
 | 
			
		||||
                      Detect64BitPortabilityProblems="true"
 | 
			
		||||
                        tag Tool \
 | 
			
		||||
                            Name="VCCLCompilerTool" \
 | 
			
		||||
                            Optimization="2" \
 | 
			
		||||
                            FavorSizeorSpeed="1" \
 | 
			
		||||
                            AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                            PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
 | 
			
		||||
                            RuntimeLibrary="$release_runtime" \
 | 
			
		||||
                            UsePrecompiledHeader="0" \
 | 
			
		||||
                            WarningLevel="3" \
 | 
			
		||||
                            DebugInformationFormat="0" \
 | 
			
		||||
                            Detect64BitPortabilityProblems="true" \
 | 
			
		||||
 | 
			
		||||
                $uses_asm && tag Tool Name="YASM"  IncludePaths="$incs"
 | 
			
		||||
                ;;
 | 
			
		||||
                        $uses_asm && tag Tool Name="YASM"  IncludePaths="$incs"
 | 
			
		||||
                    ;;
 | 
			
		||||
                    *)
 | 
			
		||||
                        tag Tool \
 | 
			
		||||
                            Name="VCCLCompilerTool" \
 | 
			
		||||
                            AdditionalIncludeDirectories="$incs" \
 | 
			
		||||
                            Optimization="2" \
 | 
			
		||||
                            FavorSizeorSpeed="1" \
 | 
			
		||||
                            PreprocessorDefinitions="WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;$defines" \
 | 
			
		||||
                            RuntimeLibrary="$release_runtime" \
 | 
			
		||||
                            UsePrecompiledHeader="0" \
 | 
			
		||||
                            WarningLevel="3" \
 | 
			
		||||
                            DebugInformationFormat="0" \
 | 
			
		||||
                            Detect64BitPortabilityProblems="true" \
 | 
			
		||||
 | 
			
		||||
                        $uses_asm && tag Tool Name="YASM"  IncludePaths="$incs"
 | 
			
		||||
                    ;;
 | 
			
		||||
                esac
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
 | 
			
		||||
        case "$proj_kind" in
 | 
			
		||||
            exe)
 | 
			
		||||
                case "$target" in
 | 
			
		||||
                    x86*) tag Tool \
 | 
			
		||||
                                  Name="VCLinkerTool" \
 | 
			
		||||
                                  AdditionalDependencies="$libs \$(NoInherit)" \
 | 
			
		||||
                                  AdditionalLibraryDirectories="$libdirs" \
 | 
			
		||||
                    ;;
 | 
			
		||||
                    arm*|iwmmx*)
 | 
			
		||||
                    x86*)
 | 
			
		||||
                        case "$name" in
 | 
			
		||||
                            obj_int_extract) tag Tool \
 | 
			
		||||
                                Name="VCLinkerTool" \
 | 
			
		||||
                                OutputFile="${name}.exe" \
 | 
			
		||||
                                LinkIncremental="1" \
 | 
			
		||||
                                GenerateDebugInformation="false" \
 | 
			
		||||
                                SubSystem="0" \
 | 
			
		||||
                                OptimizeReferences="0" \
 | 
			
		||||
                                EnableCOMDATFolding="0" \
 | 
			
		||||
                                TargetMachine="0"
 | 
			
		||||
                            obj_int_extract)
 | 
			
		||||
                                tag Tool \
 | 
			
		||||
                                    Name="VCLinkerTool" \
 | 
			
		||||
                                    OutputFile="${name}.exe" \
 | 
			
		||||
                                    GenerateDebugInformation="true" \
 | 
			
		||||
                            ;;
 | 
			
		||||
                            *) tag Tool \
 | 
			
		||||
                                Name="VCLinkerTool" \
 | 
			
		||||
                                AdditionalDependencies="$libs" \
 | 
			
		||||
                                OutputFile="\$(OutDir)/${name}.exe" \
 | 
			
		||||
                                LinkIncremental="1" \
 | 
			
		||||
                                AdditionalLibraryDirectories="${libdirs};"..\lib/$plat_no_ws"" \
 | 
			
		||||
                                DelayLoadDLLs="\$(NOINHERIT)" \
 | 
			
		||||
                                GenerateDebugInformation="true" \
 | 
			
		||||
                                ProgramDatabaseFile="\$(OutDir)/${name}.pdb" \
 | 
			
		||||
                                SubSystem="9" \
 | 
			
		||||
                                StackReserveSize="65536" \
 | 
			
		||||
                                StackCommitSize="4096" \
 | 
			
		||||
                                OptimizeReferences="2" \
 | 
			
		||||
                                EnableCOMDATFolding="2" \
 | 
			
		||||
                                EntryPointSymbol="mainWCRTStartup" \
 | 
			
		||||
                                TargetMachine="3"
 | 
			
		||||
                            *)
 | 
			
		||||
                                tag Tool \
 | 
			
		||||
                                    Name="VCLinkerTool" \
 | 
			
		||||
                                    AdditionalDependencies="$libs \$(NoInherit)" \
 | 
			
		||||
                                    AdditionalLibraryDirectories="$libdirs" \
 | 
			
		||||
 | 
			
		||||
                            ;;
 | 
			
		||||
                        esac
 | 
			
		||||
                     ;;
 | 
			
		||||
                    ;;
 | 
			
		||||
                 esac
 | 
			
		||||
            ;;
 | 
			
		||||
        lib)
 | 
			
		||||
            lib)
 | 
			
		||||
                case "$target" in
 | 
			
		||||
                      arm*|iwmmx*) tag Tool \
 | 
			
		||||
                                    Name="VCLibrarianTool" \
 | 
			
		||||
                                    AdditionalOptions=" /subsystem:windowsce,4.20 /machine:ARM" \
 | 
			
		||||
                                    OutputFile="\$(OutDir)/${name}.lib" \
 | 
			
		||||
                                ;;
 | 
			
		||||
                                *) tag Tool \
 | 
			
		||||
                                    Name="VCLibrarianTool" \
 | 
			
		||||
                                    OutputFile="\$(OutDir)/${name}${lib_sfx}.lib" \
 | 
			
		||||
                                ;;
 | 
			
		||||
                esac
 | 
			
		||||
        ;;
 | 
			
		||||
        dll) # note differences to debug version: LinkIncremental, AssemblyDebug
 | 
			
		||||
             tag Tool \
 | 
			
		||||
                      Name="VCLinkerTool" \
 | 
			
		||||
                      AdditionalDependencies="\$(NoInherit)" \
 | 
			
		||||
                      LinkIncremental="1" \
 | 
			
		||||
                      GenerateDebugInformation="true" \
 | 
			
		||||
                      TargetMachine="1" \
 | 
			
		||||
                      $link_opts
 | 
			
		||||
        esac
 | 
			
		||||
                    x86*)
 | 
			
		||||
                        tag Tool \
 | 
			
		||||
                            Name="VCLibrarianTool" \
 | 
			
		||||
                            OutputFile="\$(OutDir)/${name}${lib_sfx}.lib" \
 | 
			
		||||
 | 
			
		||||
        if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
 | 
			
		||||
            case "$name" in
 | 
			
		||||
                vpx)         tag DeploymentTool \
 | 
			
		||||
                             ForceDirty="-1" \
 | 
			
		||||
                             RegisterOutput="0"
 | 
			
		||||
                ;;
 | 
			
		||||
                example|xma) tag DeploymentTool \
 | 
			
		||||
                             ForceDirty="-1" \
 | 
			
		||||
                             RegisterOutput="0"
 | 
			
		||||
                             tag DebuggerTool \
 | 
			
		||||
                             Arguments="${ARGU}"
 | 
			
		||||
                                ;;
 | 
			
		||||
            esac
 | 
			
		||||
        fi
 | 
			
		||||
                    ;;
 | 
			
		||||
                esac
 | 
			
		||||
            ;;
 | 
			
		||||
            dll) # note differences to debug version: LinkIncremental, AssemblyDebug
 | 
			
		||||
                tag Tool \
 | 
			
		||||
                    Name="VCLinkerTool" \
 | 
			
		||||
                    AdditionalDependencies="\$(NoInherit)" \
 | 
			
		||||
                    LinkIncremental="1" \
 | 
			
		||||
                    GenerateDebugInformation="true" \
 | 
			
		||||
                    TargetMachine="1" \
 | 
			
		||||
                    $link_opts \
 | 
			
		||||
 | 
			
		||||
            ;;
 | 
			
		||||
        esac
 | 
			
		||||
 | 
			
		||||
        close_tag Configuration
 | 
			
		||||
    done
 | 
			
		||||
    close_tag Configurations
 | 
			
		||||
 | 
			
		||||
    open_tag  Files
 | 
			
		||||
    generate_filter srcs   "Source Files"   "cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
 | 
			
		||||
    generate_filter hdrs   "Header Files"   "h;hpp;hxx;hm;inl;inc;xsd"
 | 
			
		||||
    open_tag Files
 | 
			
		||||
    generate_filter srcs   "Source Files"   "c;cc;def;odl;idl;hpj;bat;asm;asmx"
 | 
			
		||||
    generate_filter hdrs   "Header Files"   "h;hm;inl;inc;xsd"
 | 
			
		||||
    generate_filter resrcs "Resource Files" "rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
 | 
			
		||||
    generate_filter resrcs "Build Files"    "mk"
 | 
			
		||||
    close_tag Files
 | 
			
		||||
 
 | 
			
		||||
@@ -139,9 +139,6 @@ process_global() {
 | 
			
		||||
            echo "${indent}${proj_guid}.${config}.ActiveCfg = ${config}"
 | 
			
		||||
            echo "${indent}${proj_guid}.${config}.Build.0 = ${config}"
 | 
			
		||||
 | 
			
		||||
            if [ "$target" == "armv6-wince-vs8" ] || [ "$target" == "armv5te-wince-vs8" ] || [ "$target" == "iwmmxt-wince-vs8" ] || [ "$target" == "iwmmxt2-wince-vs8" ];then
 | 
			
		||||
                echo "${indent}${proj_guid}.${config}.Deploy.0 = ${config}"
 | 
			
		||||
            fi
 | 
			
		||||
        done
 | 
			
		||||
        IFS=${IFS_bak}
 | 
			
		||||
    done
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										330
									
								
								build/make/rtcd.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										330
									
								
								build/make/rtcd.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,330 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
self=$0
 | 
			
		||||
 | 
			
		||||
usage() {
 | 
			
		||||
  cat <<EOF >&2
 | 
			
		||||
Usage: $self [options] FILE
 | 
			
		||||
 | 
			
		||||
Reads the Run Time CPU Detections definitions from FILE and generates a
 | 
			
		||||
C header file on stdout.
 | 
			
		||||
 | 
			
		||||
Options:
 | 
			
		||||
  --arch=ARCH   Architecture to generate defs for (required)
 | 
			
		||||
  --disable-EXT Disable support for EXT extensions
 | 
			
		||||
  --require-EXT Require support for EXT extensions
 | 
			
		||||
  --sym=SYMBOL  Unique symbol to use for RTCD initialization function
 | 
			
		||||
  --config=FILE File with CONFIG_FOO=yes lines to parse
 | 
			
		||||
EOF
 | 
			
		||||
  exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
die() {
 | 
			
		||||
  echo "$@" >&2
 | 
			
		||||
  exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
die_argument_required() {
 | 
			
		||||
  die "Option $opt requires argument"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
for opt; do
 | 
			
		||||
  optval="${opt#*=}"
 | 
			
		||||
  case "$opt" in
 | 
			
		||||
    --arch) die_argument_required;;
 | 
			
		||||
    --arch=*) arch=${optval};;
 | 
			
		||||
    --disable-*) eval "disable_${opt#--disable-}=true";;
 | 
			
		||||
    --require-*) REQUIRES="${REQUIRES}${opt#--require-} ";;
 | 
			
		||||
    --sym) die_argument_required;;
 | 
			
		||||
    --sym=*) symbol=${optval};;
 | 
			
		||||
    --config=*) config_file=${optval};;
 | 
			
		||||
    -h|--help)
 | 
			
		||||
      usage
 | 
			
		||||
      ;;
 | 
			
		||||
    -*)
 | 
			
		||||
      die "Unrecognized option: ${opt%%=*}"
 | 
			
		||||
      ;;
 | 
			
		||||
    *)
 | 
			
		||||
      defs_file="$defs_file $opt"
 | 
			
		||||
      ;;
 | 
			
		||||
  esac
 | 
			
		||||
  shift
 | 
			
		||||
done
 | 
			
		||||
for f in $defs_file; do [ -f "$f" ] || usage; done
 | 
			
		||||
[ -n "$arch" ] || usage
 | 
			
		||||
 | 
			
		||||
# Import the configuration
 | 
			
		||||
[ -f "$config_file" ] && eval $(grep CONFIG_ "$config_file")
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Routines for the RTCD DSL to call
 | 
			
		||||
#
 | 
			
		||||
prototype() {
 | 
			
		||||
  local rtyp
 | 
			
		||||
  case "$1" in
 | 
			
		||||
    unsigned) rtyp="$1 "; shift;;
 | 
			
		||||
  esac
 | 
			
		||||
  rtyp="${rtyp}$1"
 | 
			
		||||
  local fn="$2"
 | 
			
		||||
  local args="$3"
 | 
			
		||||
 | 
			
		||||
  eval "${2}_rtyp='$rtyp'"
 | 
			
		||||
  eval "${2}_args='$3'"
 | 
			
		||||
  ALL_FUNCS="$ALL_FUNCS $fn"
 | 
			
		||||
  specialize $fn c
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
specialize() {
 | 
			
		||||
  local fn="$1"
 | 
			
		||||
  shift
 | 
			
		||||
  for opt in "$@"; do
 | 
			
		||||
    eval "${fn}_${opt}=${fn}_${opt}"
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
require() {
 | 
			
		||||
  for fn in $ALL_FUNCS; do
 | 
			
		||||
    for opt in "$@"; do
 | 
			
		||||
      local ofn=$(eval "echo \$${fn}_${opt}")
 | 
			
		||||
      [ -z "$ofn" ] && continue
 | 
			
		||||
 | 
			
		||||
      # if we already have a default, then we can disable it, as we know
 | 
			
		||||
      # we can do better.
 | 
			
		||||
      local best=$(eval "echo \$${fn}_default")
 | 
			
		||||
      local best_ofn=$(eval "echo \$${best}")
 | 
			
		||||
      [ -n "$best" ] && [ "$best_ofn" != "$ofn" ] && eval "${best}_link=false"
 | 
			
		||||
      eval "${fn}_default=${fn}_${opt}"
 | 
			
		||||
      eval "${fn}_${opt}_link=true"
 | 
			
		||||
    done
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
forward_decls() {
 | 
			
		||||
  ALL_FORWARD_DECLS="$ALL_FORWARD_DECLS $1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Include the user's directives
 | 
			
		||||
#
 | 
			
		||||
for f in $defs_file; do
 | 
			
		||||
  . $f
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Process the directives according to the command line
 | 
			
		||||
#
 | 
			
		||||
process_forward_decls() {
 | 
			
		||||
  for fn in $ALL_FORWARD_DECLS; do
 | 
			
		||||
    eval $fn
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
determine_indirection() {
 | 
			
		||||
  [ "$CONFIG_RUNTIME_CPU_DETECT" = "yes" ] || require $ALL_ARCHS
 | 
			
		||||
  for fn in $ALL_FUNCS; do
 | 
			
		||||
    local n=""
 | 
			
		||||
    local rtyp="$(eval "echo \$${fn}_rtyp")"
 | 
			
		||||
    local args="$(eval "echo \"\$${fn}_args\"")"
 | 
			
		||||
    local dfn="$(eval "echo \$${fn}_default")"
 | 
			
		||||
    dfn=$(eval "echo \$${dfn}")
 | 
			
		||||
    for opt in "$@"; do
 | 
			
		||||
      local ofn=$(eval "echo \$${fn}_${opt}")
 | 
			
		||||
      [ -z "$ofn" ] && continue
 | 
			
		||||
      local link=$(eval "echo \$${fn}_${opt}_link")
 | 
			
		||||
      [ "$link" = "false" ] && continue
 | 
			
		||||
      n="${n}x"
 | 
			
		||||
    done
 | 
			
		||||
    if [ "$n" = "x" ]; then
 | 
			
		||||
      eval "${fn}_indirect=false"
 | 
			
		||||
    else
 | 
			
		||||
      eval "${fn}_indirect=true"
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
declare_function_pointers() {
 | 
			
		||||
  for fn in $ALL_FUNCS; do
 | 
			
		||||
    local rtyp="$(eval "echo \$${fn}_rtyp")"
 | 
			
		||||
    local args="$(eval "echo \"\$${fn}_args\"")"
 | 
			
		||||
    local dfn="$(eval "echo \$${fn}_default")"
 | 
			
		||||
    dfn=$(eval "echo \$${dfn}")
 | 
			
		||||
    for opt in "$@"; do
 | 
			
		||||
      local ofn=$(eval "echo \$${fn}_${opt}")
 | 
			
		||||
      [ -z "$ofn" ] && continue
 | 
			
		||||
      echo "$rtyp ${ofn}($args);"
 | 
			
		||||
    done
 | 
			
		||||
    if [ "$(eval "echo \$${fn}_indirect")" = "false" ]; then
 | 
			
		||||
      echo "#define ${fn} ${dfn}"
 | 
			
		||||
    else
 | 
			
		||||
      echo "RTCD_EXTERN $rtyp (*${fn})($args);"
 | 
			
		||||
    fi
 | 
			
		||||
    echo
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
set_function_pointers() {
 | 
			
		||||
  for fn in $ALL_FUNCS; do
 | 
			
		||||
    local n=""
 | 
			
		||||
    local rtyp="$(eval "echo \$${fn}_rtyp")"
 | 
			
		||||
    local args="$(eval "echo \"\$${fn}_args\"")"
 | 
			
		||||
    local dfn="$(eval "echo \$${fn}_default")"
 | 
			
		||||
    dfn=$(eval "echo \$${dfn}")
 | 
			
		||||
    if $(eval "echo \$${fn}_indirect"); then
 | 
			
		||||
      echo "    $fn = $dfn;"
 | 
			
		||||
      for opt in "$@"; do
 | 
			
		||||
        local ofn=$(eval "echo \$${fn}_${opt}")
 | 
			
		||||
        [ -z "$ofn" ] && continue
 | 
			
		||||
        [ "$ofn" = "$dfn" ] && continue;
 | 
			
		||||
        local link=$(eval "echo \$${fn}_${opt}_link")
 | 
			
		||||
        [ "$link" = "false" ] && continue
 | 
			
		||||
        local cond="$(eval "echo \$have_${opt}")"
 | 
			
		||||
        echo "    if (${cond}) $fn = $ofn;"
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
    echo
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
filter() {
 | 
			
		||||
  local filtered
 | 
			
		||||
  for opt in "$@"; do
 | 
			
		||||
    [ -z $(eval "echo \$disable_${opt}") ] && filtered="$filtered $opt"
 | 
			
		||||
  done
 | 
			
		||||
  echo $filtered
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Helper functions for generating the arch specific RTCD files
 | 
			
		||||
#
 | 
			
		||||
common_top() {
 | 
			
		||||
  local outfile_basename=$(basename ${symbol:-rtcd.h})
 | 
			
		||||
  local include_guard=$(echo $outfile_basename | tr '[a-z]' '[A-Z]' | tr -c '[A-Z]' _)
 | 
			
		||||
  cat <<EOF
 | 
			
		||||
#ifndef ${include_guard}
 | 
			
		||||
#define ${include_guard}
 | 
			
		||||
 | 
			
		||||
#ifdef RTCD_C
 | 
			
		||||
#define RTCD_EXTERN
 | 
			
		||||
#else
 | 
			
		||||
#define RTCD_EXTERN extern
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
$(process_forward_decls)
 | 
			
		||||
 | 
			
		||||
$(declare_function_pointers c $ALL_ARCHS)
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
common_bottom() {
 | 
			
		||||
  cat <<EOF
 | 
			
		||||
#endif
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
x86() {
 | 
			
		||||
  determine_indirection c $ALL_ARCHS
 | 
			
		||||
 | 
			
		||||
  # Assign the helper variable for each enabled extension
 | 
			
		||||
  for opt in $ALL_ARCHS; do
 | 
			
		||||
    local uc=$(echo $opt | tr '[a-z]' '[A-Z]')
 | 
			
		||||
    eval "have_${opt}=\"flags & HAS_${uc}\""
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  cat <<EOF
 | 
			
		||||
$(common_top)
 | 
			
		||||
void ${symbol:-rtcd}(void);
 | 
			
		||||
 | 
			
		||||
#ifdef RTCD_C
 | 
			
		||||
#include "vpx_ports/x86.h"
 | 
			
		||||
void ${symbol:-rtcd}(void)
 | 
			
		||||
{
 | 
			
		||||
    int flags = x86_simd_caps();
 | 
			
		||||
 | 
			
		||||
    (void)flags;
 | 
			
		||||
 | 
			
		||||
$(set_function_pointers c $ALL_ARCHS)
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
$(common_bottom)
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
arm() {
 | 
			
		||||
  determine_indirection c $ALL_ARCHS
 | 
			
		||||
 | 
			
		||||
  # Assign the helper variable for each enabled extension
 | 
			
		||||
  for opt in $ALL_ARCHS; do
 | 
			
		||||
    local uc=$(echo $opt | tr '[a-z]' '[A-Z]')
 | 
			
		||||
    eval "have_${opt}=\"flags & HAS_${uc}\""
 | 
			
		||||
  done
 | 
			
		||||
 | 
			
		||||
  cat <<EOF
 | 
			
		||||
$(common_top)
 | 
			
		||||
#include "vpx_config.h"
 | 
			
		||||
 | 
			
		||||
void ${symbol:-rtcd}(void);
 | 
			
		||||
 | 
			
		||||
#ifdef RTCD_C
 | 
			
		||||
#include "vpx_ports/arm.h"
 | 
			
		||||
void ${symbol:-rtcd}(void)
 | 
			
		||||
{
 | 
			
		||||
    int flags = arm_cpu_caps();
 | 
			
		||||
 | 
			
		||||
    (void)flags;
 | 
			
		||||
 | 
			
		||||
$(set_function_pointers c $ALL_ARCHS)
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
$(common_bottom)
 | 
			
		||||
EOF
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
unoptimized() {
 | 
			
		||||
  determine_indirection c
 | 
			
		||||
  cat <<EOF
 | 
			
		||||
$(common_top)
 | 
			
		||||
#include "vpx_config.h"
 | 
			
		||||
 | 
			
		||||
void ${symbol:-rtcd}(void);
 | 
			
		||||
 | 
			
		||||
#ifdef RTCD_C
 | 
			
		||||
void ${symbol:-rtcd}(void)
 | 
			
		||||
{
 | 
			
		||||
$(set_function_pointers c)
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
$(common_bottom)
 | 
			
		||||
EOF
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#
 | 
			
		||||
# Main Driver
 | 
			
		||||
#
 | 
			
		||||
require c
 | 
			
		||||
case $arch in
 | 
			
		||||
  x86)
 | 
			
		||||
    ALL_ARCHS=$(filter mmx sse sse2 sse3 ssse3 sse4_1)
 | 
			
		||||
    x86
 | 
			
		||||
    ;;
 | 
			
		||||
  x86_64)
 | 
			
		||||
    ALL_ARCHS=$(filter mmx sse sse2 sse3 ssse3 sse4_1)
 | 
			
		||||
    REQUIRES=${REQUIRES:-mmx sse sse2}
 | 
			
		||||
    require $(filter $REQUIRES)
 | 
			
		||||
    x86
 | 
			
		||||
    ;;
 | 
			
		||||
  armv5te)
 | 
			
		||||
    ALL_ARCHS=$(filter edsp)
 | 
			
		||||
    arm
 | 
			
		||||
    ;;
 | 
			
		||||
  armv6)
 | 
			
		||||
    ALL_ARCHS=$(filter edsp media)
 | 
			
		||||
    arm
 | 
			
		||||
    ;;
 | 
			
		||||
  armv7)
 | 
			
		||||
    ALL_ARCHS=$(filter edsp media neon)
 | 
			
		||||
    arm
 | 
			
		||||
    ;;
 | 
			
		||||
  *)
 | 
			
		||||
    unoptimized
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
							
								
								
									
										15
									
								
								build/x86-msvs/obj_int_extract.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								build/x86-msvs/obj_int_extract.bat
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
REM   Copyright (c) 2011 The WebM project authors. All Rights Reserved.
 | 
			
		||||
REM
 | 
			
		||||
REM   Use of this source code is governed by a BSD-style license
 | 
			
		||||
REM   that can be found in the LICENSE file in the root of the source
 | 
			
		||||
REM   tree. An additional intellectual property rights grant can be found
 | 
			
		||||
REM   in the file PATENTS.  All contributing project authors may
 | 
			
		||||
REM   be found in the AUTHORS file in the root of the source tree.
 | 
			
		||||
echo on
 | 
			
		||||
 | 
			
		||||
cl /I "./" /I "%1" /nologo /c "%1/vp8/common/asm_com_offsets.c"
 | 
			
		||||
cl /I "./" /I "%1" /nologo /c "%1/vp8/decoder/asm_dec_offsets.c"
 | 
			
		||||
cl /I "./" /I "%1" /nologo /c "%1/vp8/encoder/asm_enc_offsets.c"
 | 
			
		||||
obj_int_extract.exe rvds "asm_com_offsets.obj" > "asm_com_offsets.asm"
 | 
			
		||||
obj_int_extract.exe rvds "asm_dec_offsets.obj" > "asm_dec_offsets.asm"
 | 
			
		||||
obj_int_extract.exe rvds "asm_enc_offsets.obj" > "asm_enc_offsets.asm"
 | 
			
		||||
							
								
								
									
										103
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										103
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@@ -22,8 +22,10 @@ show_help(){
 | 
			
		||||
Advanced options:
 | 
			
		||||
  ${toggle_libs}                  don't build libraries
 | 
			
		||||
  ${toggle_examples}              don't build examples
 | 
			
		||||
  ${toggle_unit_tests}            build unit tests
 | 
			
		||||
  --libc=PATH                     path to alternate libc
 | 
			
		||||
  --as={yasm|nasm|auto}           use specified assembler [auto, yasm preferred]
 | 
			
		||||
  --sdk-path=PATH                 path to root of sdk (iOS, android builds only)
 | 
			
		||||
  ${toggle_fast_unaligned}        don't use unaligned accesses, even when
 | 
			
		||||
                                  supported by hardware [auto]
 | 
			
		||||
  ${toggle_codec_srcs}            in/exclude codec library source code
 | 
			
		||||
@@ -31,17 +33,21 @@ Advanced options:
 | 
			
		||||
  ${toggle_md5}                   support for output of checksum data
 | 
			
		||||
  ${toggle_static_msvcrt}         use static MSVCRT (VS builds only)
 | 
			
		||||
  ${toggle_vp8}                   VP8 codec support
 | 
			
		||||
  ${toggle_psnr}                  output of PSNR data, if supported (encoders)
 | 
			
		||||
  ${toggle_internal_stats}        output of encoder internal stats for debug, if supported (encoders)
 | 
			
		||||
  ${toggle_mem_tracker}           track memory usage
 | 
			
		||||
  ${toggle_postproc}              postprocessing
 | 
			
		||||
  ${toggle_multithread}           multithreaded encoding and decoding.
 | 
			
		||||
  ${toggle_multithread}           multithreaded encoding and decoding
 | 
			
		||||
  ${toggle_spatial_resampling}    spatial sampling (scaling) support
 | 
			
		||||
  ${toggle_realtime_only}         enable this option while building for real-time encoding
 | 
			
		||||
  ${toggle_onthefly_bitpacking}   enable on-the-fly bitpacking in real-time encoding
 | 
			
		||||
  ${toggle_error_concealment}     enable this option to get a decoder which is able to conceal losses
 | 
			
		||||
  ${toggle_runtime_cpu_detect}    runtime cpu detection
 | 
			
		||||
  ${toggle_shared}                shared library support
 | 
			
		||||
  ${toggle_static}                static library support
 | 
			
		||||
  ${toggle_small}                 favor smaller size over speed
 | 
			
		||||
  ${toggle_arm_asm_detok}         assembly version of the detokenizer (ARM platforms only)
 | 
			
		||||
  ${toggle_postproc_visualizer}   macro block / block level visualizers
 | 
			
		||||
  ${toggle_multi_res_encoding}    enable multiple-resolution encoding
 | 
			
		||||
  ${toggle_temporal_denoising}    enable temporal denoising and disable the spatial denoiser
 | 
			
		||||
 | 
			
		||||
Codecs:
 | 
			
		||||
  Codecs can be selectively enabled or disabled individually, or by family:
 | 
			
		||||
@@ -77,24 +83,19 @@ EOF
 | 
			
		||||
 | 
			
		||||
# all_platforms is a list of all supported target platforms. Maintain
 | 
			
		||||
# alphabetically by architecture, generic-gnu last.
 | 
			
		||||
all_platforms="${all_platforms} armv5te-android-gcc"
 | 
			
		||||
all_platforms="${all_platforms} armv5te-linux-rvct"
 | 
			
		||||
all_platforms="${all_platforms} armv5te-linux-gcc"
 | 
			
		||||
all_platforms="${all_platforms} armv5te-symbian-gcc"
 | 
			
		||||
all_platforms="${all_platforms} armv5te-wince-vs8"
 | 
			
		||||
all_platforms="${all_platforms} armv5te-none-rvct"
 | 
			
		||||
all_platforms="${all_platforms} armv6-darwin-gcc"
 | 
			
		||||
all_platforms="${all_platforms} armv6-linux-rvct"
 | 
			
		||||
all_platforms="${all_platforms} armv6-linux-gcc"
 | 
			
		||||
all_platforms="${all_platforms} armv6-symbian-gcc"
 | 
			
		||||
all_platforms="${all_platforms} armv6-wince-vs8"
 | 
			
		||||
all_platforms="${all_platforms} iwmmxt-linux-rvct"
 | 
			
		||||
all_platforms="${all_platforms} iwmmxt-linux-gcc"
 | 
			
		||||
all_platforms="${all_platforms} iwmmxt-wince-vs8"
 | 
			
		||||
all_platforms="${all_platforms} iwmmxt2-linux-rvct"
 | 
			
		||||
all_platforms="${all_platforms} iwmmxt2-linux-gcc"
 | 
			
		||||
all_platforms="${all_platforms} iwmmxt2-wince-vs8"
 | 
			
		||||
all_platforms="${all_platforms} armv6-none-rvct"
 | 
			
		||||
all_platforms="${all_platforms} armv7-android-gcc"   #neon Cortex-A8
 | 
			
		||||
all_platforms="${all_platforms} armv7-darwin-gcc"    #neon Cortex-A8
 | 
			
		||||
all_platforms="${all_platforms} armv7-linux-rvct"    #neon Cortex-A8
 | 
			
		||||
all_platforms="${all_platforms} armv7-linux-gcc"     #neon Cortex-A8
 | 
			
		||||
all_platforms="${all_platforms} armv7-none-rvct"     #neon Cortex-A8
 | 
			
		||||
all_platforms="${all_platforms} mips32-linux-gcc"
 | 
			
		||||
all_platforms="${all_platforms} ppc32-darwin8-gcc"
 | 
			
		||||
all_platforms="${all_platforms} ppc32-darwin9-gcc"
 | 
			
		||||
@@ -107,8 +108,12 @@ all_platforms="${all_platforms} x86-darwin8-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86-darwin8-icc"
 | 
			
		||||
all_platforms="${all_platforms} x86-darwin9-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86-darwin9-icc"
 | 
			
		||||
all_platforms="${all_platforms} x86-darwin10-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86-darwin11-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86-darwin12-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86-linux-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86-linux-icc"
 | 
			
		||||
all_platforms="${all_platforms} x86-os2-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86-solaris-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86-win32-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86-win32-vs7"
 | 
			
		||||
@@ -116,13 +121,19 @@ all_platforms="${all_platforms} x86-win32-vs8"
 | 
			
		||||
all_platforms="${all_platforms} x86-win32-vs9"
 | 
			
		||||
all_platforms="${all_platforms} x86_64-darwin9-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86_64-darwin10-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86_64-darwin11-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86_64-darwin12-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86_64-linux-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86_64-linux-icc"
 | 
			
		||||
all_platforms="${all_platforms} x86_64-solaris-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86_64-win64-gcc"
 | 
			
		||||
all_platforms="${all_platforms} x86_64-win64-vs8"
 | 
			
		||||
all_platforms="${all_platforms} x86_64-win64-vs9"
 | 
			
		||||
all_platforms="${all_platforms} universal-darwin8-gcc"
 | 
			
		||||
all_platforms="${all_platforms} universal-darwin9-gcc"
 | 
			
		||||
all_platforms="${all_platforms} universal-darwin10-gcc"
 | 
			
		||||
all_platforms="${all_platforms} universal-darwin11-gcc"
 | 
			
		||||
all_platforms="${all_platforms} universal-darwin12-gcc"
 | 
			
		||||
all_platforms="${all_platforms} generic-gnu"
 | 
			
		||||
 | 
			
		||||
# all_targets is a list of all targets that can be configured
 | 
			
		||||
@@ -154,11 +165,14 @@ enabled doxygen && php -v >/dev/null 2>&1 && enable install_docs
 | 
			
		||||
enable install_bins
 | 
			
		||||
enable install_libs
 | 
			
		||||
 | 
			
		||||
enable static
 | 
			
		||||
enable optimizations
 | 
			
		||||
enable fast_unaligned #allow unaligned accesses, if supported by hw
 | 
			
		||||
enable md5
 | 
			
		||||
enable spatial_resampling
 | 
			
		||||
enable multithread
 | 
			
		||||
enable os_support
 | 
			
		||||
enable temporal_denoising
 | 
			
		||||
 | 
			
		||||
[ -d ${source_path}/../include ] && enable alt_tree_layout
 | 
			
		||||
for d in vp8; do
 | 
			
		||||
@@ -172,6 +186,8 @@ else
 | 
			
		||||
# customer environment
 | 
			
		||||
[ -f ${source_path}/../include/vpx/vp8cx.h ] && CODECS="${CODECS} vp8_encoder"
 | 
			
		||||
[ -f ${source_path}/../include/vpx/vp8dx.h ] && CODECS="${CODECS} vp8_decoder"
 | 
			
		||||
[ -f ${source_path}/../include/vpx/vp8cx.h ] || disable vp8_encoder
 | 
			
		||||
[ -f ${source_path}/../include/vpx/vp8dx.h ] || disable vp8_decoder
 | 
			
		||||
 | 
			
		||||
[ -f ${source_path}/../lib/*/*mt.lib ] && soft_enable static_msvcrt
 | 
			
		||||
fi
 | 
			
		||||
@@ -188,11 +204,9 @@ ARCH_LIST="
 | 
			
		||||
    ppc64
 | 
			
		||||
"
 | 
			
		||||
ARCH_EXT_LIST="
 | 
			
		||||
    armv5te
 | 
			
		||||
    armv6
 | 
			
		||||
    armv7
 | 
			
		||||
    iwmmxt
 | 
			
		||||
    iwmmxt2
 | 
			
		||||
    edsp
 | 
			
		||||
    media
 | 
			
		||||
    neon
 | 
			
		||||
 | 
			
		||||
    mips32
 | 
			
		||||
 | 
			
		||||
@@ -212,6 +226,7 @@ HAVE_LIST="
 | 
			
		||||
    alt_tree_layout
 | 
			
		||||
    pthread_h
 | 
			
		||||
    sys_mman_h
 | 
			
		||||
    unistd_h
 | 
			
		||||
"
 | 
			
		||||
CONFIG_LIST="
 | 
			
		||||
    external_build
 | 
			
		||||
@@ -241,7 +256,7 @@ CONFIG_LIST="
 | 
			
		||||
    runtime_cpu_detect
 | 
			
		||||
    postproc
 | 
			
		||||
    multithread
 | 
			
		||||
    psnr
 | 
			
		||||
    internal_stats
 | 
			
		||||
    ${CODECS}
 | 
			
		||||
    ${CODEC_FAMILIES}
 | 
			
		||||
    encoders
 | 
			
		||||
@@ -249,10 +264,16 @@ CONFIG_LIST="
 | 
			
		||||
    static_msvcrt
 | 
			
		||||
    spatial_resampling
 | 
			
		||||
    realtime_only
 | 
			
		||||
    onthefly_bitpacking
 | 
			
		||||
    error_concealment
 | 
			
		||||
    shared
 | 
			
		||||
    static
 | 
			
		||||
    small
 | 
			
		||||
    arm_asm_detok
 | 
			
		||||
    postproc_visualizer
 | 
			
		||||
    os_support
 | 
			
		||||
    unit_tests
 | 
			
		||||
    multi_res_encoding
 | 
			
		||||
    temporal_denoising
 | 
			
		||||
"
 | 
			
		||||
CMDLINE_SELECT="
 | 
			
		||||
    extra_warnings
 | 
			
		||||
@@ -282,17 +303,22 @@ CMDLINE_SELECT="
 | 
			
		||||
    dc_recon
 | 
			
		||||
    postproc
 | 
			
		||||
    multithread
 | 
			
		||||
    psnr
 | 
			
		||||
    internal_stats
 | 
			
		||||
    ${CODECS}
 | 
			
		||||
    ${CODEC_FAMILIES}
 | 
			
		||||
    static_msvcrt
 | 
			
		||||
    mem_tracker
 | 
			
		||||
    spatial_resampling
 | 
			
		||||
    realtime_only
 | 
			
		||||
    onthefly_bitpacking
 | 
			
		||||
    error_concealment
 | 
			
		||||
    shared
 | 
			
		||||
    static
 | 
			
		||||
    small
 | 
			
		||||
    arm_asm_detok
 | 
			
		||||
    postproc_visualizer
 | 
			
		||||
    unit_tests
 | 
			
		||||
    multi_res_encoding
 | 
			
		||||
    temporal_denoising
 | 
			
		||||
"
 | 
			
		||||
 | 
			
		||||
process_cmdline() {
 | 
			
		||||
@@ -300,7 +326,7 @@ process_cmdline() {
 | 
			
		||||
        optval="${opt#*=}"
 | 
			
		||||
        case "$opt" in
 | 
			
		||||
        --disable-codecs) for c in ${CODECS}; do disable $c; done ;;
 | 
			
		||||
        *) process_common_cmdline $opt
 | 
			
		||||
        *) process_common_cmdline "$opt"
 | 
			
		||||
        ;;
 | 
			
		||||
        esac
 | 
			
		||||
    done
 | 
			
		||||
@@ -379,6 +405,7 @@ process_targets() {
 | 
			
		||||
    if [ -f "${source_path}/build/make/version.sh" ]; then
 | 
			
		||||
        local ver=`"$source_path/build/make/version.sh" --bare $source_path`
 | 
			
		||||
        DIST_DIR="${DIST_DIR}-${ver}"
 | 
			
		||||
        VERSION_STRING=${ver}
 | 
			
		||||
        ver=${ver%%-*}
 | 
			
		||||
        VERSION_PATCH=${ver##*.}
 | 
			
		||||
        ver=${ver%.*}
 | 
			
		||||
@@ -387,6 +414,8 @@ process_targets() {
 | 
			
		||||
        VERSION_MAJOR=${ver%.*}
 | 
			
		||||
    fi
 | 
			
		||||
    enabled child || cat <<EOF >> config.mk
 | 
			
		||||
 | 
			
		||||
PREFIX=${prefix}
 | 
			
		||||
ifeq (\$(MAKECMDGOALS),dist)
 | 
			
		||||
DIST_DIR?=${DIST_DIR}
 | 
			
		||||
else
 | 
			
		||||
@@ -394,6 +423,8 @@ DIST_DIR?=\$(DESTDIR)${prefix}
 | 
			
		||||
endif
 | 
			
		||||
LIBSUBDIR=${libdir##${prefix}/}
 | 
			
		||||
 | 
			
		||||
VERSION_STRING=${VERSION_STRING}
 | 
			
		||||
 | 
			
		||||
VERSION_MAJOR=${VERSION_MAJOR}
 | 
			
		||||
VERSION_MINOR=${VERSION_MINOR}
 | 
			
		||||
VERSION_PATCH=${VERSION_PATCH}
 | 
			
		||||
@@ -468,11 +499,20 @@ process_toolchain() {
 | 
			
		||||
    case $toolchain in
 | 
			
		||||
        universal-darwin*)
 | 
			
		||||
            local darwin_ver=${tgt_os##darwin}
 | 
			
		||||
            fat_bin_archs="$fat_bin_archs ppc32-${tgt_os}-gcc"
 | 
			
		||||
 | 
			
		||||
            # Intel
 | 
			
		||||
            fat_bin_archs="$fat_bin_archs x86-${tgt_os}-${tgt_cc}"
 | 
			
		||||
            if [ $darwin_ver -gt 8 ]; then
 | 
			
		||||
            # Snow Leopard (10.6/darwin10) dropped support for PPC
 | 
			
		||||
            # Include PPC support for all prior versions
 | 
			
		||||
            if [ $darwin_ver -lt 10 ]; then
 | 
			
		||||
                fat_bin_archs="$fat_bin_archs ppc32-${tgt_os}-gcc"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            # Tiger (10.4/darwin8) brought support for x86
 | 
			
		||||
            if [ $darwin_ver -ge 8 ]; then
 | 
			
		||||
                fat_bin_archs="$fat_bin_archs x86-${tgt_os}-${tgt_cc}"
 | 
			
		||||
            fi
 | 
			
		||||
 | 
			
		||||
            # Leopard (10.5/darwin9) brought 64 bit support
 | 
			
		||||
            if [ $darwin_ver -ge 9 ]; then
 | 
			
		||||
                fat_bin_archs="$fat_bin_archs x86_64-${tgt_os}-${tgt_cc}"
 | 
			
		||||
            fi
 | 
			
		||||
            ;;
 | 
			
		||||
@@ -488,7 +528,11 @@ process_toolchain() {
 | 
			
		||||
        check_add_cflags -Wpointer-arith
 | 
			
		||||
        check_add_cflags -Wtype-limits
 | 
			
		||||
        check_add_cflags -Wcast-qual
 | 
			
		||||
        enabled extra_warnings || check_add_cflags -Wno-unused
 | 
			
		||||
        check_add_cflags -Wimplicit-function-declaration
 | 
			
		||||
        check_add_cflags -Wuninitialized
 | 
			
		||||
        check_add_cflags -Wunused-variable
 | 
			
		||||
        check_add_cflags -Wunused-but-set-variable        
 | 
			
		||||
        enabled extra_warnings || check_add_cflags -Wno-unused-function
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    if enabled icc; then
 | 
			
		||||
@@ -550,7 +594,8 @@ process_toolchain() {
 | 
			
		||||
##
 | 
			
		||||
CONFIGURE_ARGS="$@"
 | 
			
		||||
process "$@"
 | 
			
		||||
cat <<EOF > ${BUILD_PFX}vpx_config.c
 | 
			
		||||
print_webm_license ${BUILD_PFX}vpx_config.c "/*" " */"
 | 
			
		||||
cat <<EOF >> ${BUILD_PFX}vpx_config.c
 | 
			
		||||
static const char* const cfg = "$CONFIGURE_ARGS";
 | 
			
		||||
const char *vpx_codec_build_config(void) {return cfg;}
 | 
			
		||||
EOF
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								docs.mk
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								docs.mk
									
									
									
									
									
								
							@@ -21,9 +21,6 @@ CODEC_DOX :=    mainpage.dox \
 | 
			
		||||
		usage_dx.dox \
 | 
			
		||||
 | 
			
		||||
# Other doxy files sourced in Markdown
 | 
			
		||||
TXT_DOX-$(CONFIG_VP8)          += vp8_api1_migration.dox
 | 
			
		||||
vp8_api1_migration.dox.DESC     = VP8 API 1.x Migration
 | 
			
		||||
 | 
			
		||||
TXT_DOX = $(call enabled,TXT_DOX)
 | 
			
		||||
 | 
			
		||||
%.dox: %.txt
 | 
			
		||||
@@ -34,7 +31,8 @@ TXT_DOX = $(call enabled,TXT_DOX)
 | 
			
		||||
 | 
			
		||||
EXAMPLE_PATH += $(SRC_PATH_BARE) #for CHANGELOG, README, etc
 | 
			
		||||
 | 
			
		||||
doxyfile: libs.doxy_template libs.doxy examples.doxy
 | 
			
		||||
doxyfile: $(if $(findstring examples, $(ALL_TARGETS)),examples.doxy)
 | 
			
		||||
doxyfile: libs.doxy_template libs.doxy
 | 
			
		||||
	@echo "    [CREATE] $@"
 | 
			
		||||
	@cat $^ > $@
 | 
			
		||||
	@echo "STRIP_FROM_PATH += $(SRC_PATH_BARE) $(BUILD_ROOT)" >> $@
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										56
									
								
								examples.mk
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								examples.mk
									
									
									
									
									
								
							@@ -16,7 +16,7 @@ UTILS-$(CONFIG_DECODERS)    += vpxdec.c
 | 
			
		||||
vpxdec.SRCS                 += md5_utils.c md5_utils.h
 | 
			
		||||
vpxdec.SRCS                 += vpx_ports/vpx_timer.h
 | 
			
		||||
vpxdec.SRCS                 += vpx/vpx_integer.h
 | 
			
		||||
vpxdec.SRCS                 += args.c args.h vpx_ports/config.h
 | 
			
		||||
vpxdec.SRCS                 += args.c args.h
 | 
			
		||||
vpxdec.SRCS                 += tools_common.c tools_common.h
 | 
			
		||||
vpxdec.SRCS                 += nestegg/halloc/halloc.h
 | 
			
		||||
vpxdec.SRCS                 += nestegg/halloc/src/align.h
 | 
			
		||||
@@ -30,13 +30,17 @@ vpxdec.DESCRIPTION           = Full featured decoder
 | 
			
		||||
UTILS-$(CONFIG_ENCODERS)    += vpxenc.c
 | 
			
		||||
vpxenc.SRCS                 += args.c args.h y4minput.c y4minput.h
 | 
			
		||||
vpxenc.SRCS                 += tools_common.c tools_common.h
 | 
			
		||||
vpxenc.SRCS                 += vpx_ports/config.h vpx_ports/mem_ops.h
 | 
			
		||||
vpxenc.SRCS                 += vpx_ports/mem_ops.h
 | 
			
		||||
vpxenc.SRCS                 += vpx_ports/mem_ops_aligned.h
 | 
			
		||||
vpxenc.SRCS                 += vpx_ports/vpx_timer.h
 | 
			
		||||
vpxenc.SRCS                 += libmkv/EbmlIDs.h
 | 
			
		||||
vpxenc.SRCS                 += libmkv/EbmlWriter.c
 | 
			
		||||
vpxenc.SRCS                 += libmkv/EbmlWriter.h
 | 
			
		||||
vpxenc.GUID                  = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
 | 
			
		||||
vpxenc.DESCRIPTION           = Full featured encoder
 | 
			
		||||
UTILS-$(CONFIG_ENCODERS)    += vp8_scalable_patterns.c
 | 
			
		||||
vp8_scalable_patterns.GUID   = 0D6A210B-F482-4D6F-8570-4A9C01ACC88C
 | 
			
		||||
vp8_scalable_patterns.DESCRIPTION = Temporal Scalability Encoder
 | 
			
		||||
 | 
			
		||||
# Clean up old ivfenc, ivfdec binaries.
 | 
			
		||||
ifeq ($(CONFIG_MSVS),yes)
 | 
			
		||||
@@ -77,13 +81,15 @@ GEN_EXAMPLES-$(CONFIG_ENCODERS) += decode_with_drops.c
 | 
			
		||||
endif
 | 
			
		||||
decode_with_drops.GUID           = CE5C53C4-8DDA-438A-86ED-0DDD3CDB8D26
 | 
			
		||||
decode_with_drops.DESCRIPTION    = Drops frames while decoding
 | 
			
		||||
ifeq ($(CONFIG_DECODERS),yes)
 | 
			
		||||
GEN_EXAMPLES-$(CONFIG_ERROR_CONCEALMENT) += decode_with_partial_drops.c
 | 
			
		||||
endif
 | 
			
		||||
decode_with_partial_drops.GUID           = 61C2D026-5754-46AC-916F-1343ECC5537E
 | 
			
		||||
decode_with_partial_drops.DESCRIPTION    = Drops parts of frames while decoding
 | 
			
		||||
GEN_EXAMPLES-$(CONFIG_ENCODERS) += error_resilient.c
 | 
			
		||||
error_resilient.GUID             = DF5837B9-4145-4F92-A031-44E4F832E00C
 | 
			
		||||
error_resilient.DESCRIPTION      = Error Resiliency Feature
 | 
			
		||||
 | 
			
		||||
GEN_EXAMPLES-$(CONFIG_VP8_ENCODER) += vp8_scalable_patterns.c
 | 
			
		||||
vp8_scalable_patterns.GUID          = 0D6A210B-F482-4D6F-8570-4A9C01ACC88C
 | 
			
		||||
vp8_scalable_patterns.DESCRIPTION   = VP8 Scalable Bitstream Patterns
 | 
			
		||||
GEN_EXAMPLES-$(CONFIG_VP8_ENCODER) += vp8_set_maps.c
 | 
			
		||||
vp8_set_maps.GUID                   = ECB2D24D-98B8-4015-A465-A4AF3DCC145F
 | 
			
		||||
vp8_set_maps.DESCRIPTION            = VP8 set active and ROI maps
 | 
			
		||||
@@ -91,10 +97,29 @@ GEN_EXAMPLES-$(CONFIG_VP8_ENCODER) += vp8cx_set_ref.c
 | 
			
		||||
vp8cx_set_ref.GUID                  = C5E31F7F-96F6-48BD-BD3E-10EBF6E8057A
 | 
			
		||||
vp8cx_set_ref.DESCRIPTION           = VP8 set encoder reference frame
 | 
			
		||||
 | 
			
		||||
# C file is provided, not generated automatically.
 | 
			
		||||
GEN_EXAMPLES-$(CONFIG_MULTI_RES_ENCODING) += vp8_multi_resolution_encoder.c
 | 
			
		||||
vp8_multi_resolution_encoder.SRCS  \
 | 
			
		||||
                         += third_party/libyuv/include/libyuv/basic_types.h  \
 | 
			
		||||
                            third_party/libyuv/include/libyuv/cpu_id.h  \
 | 
			
		||||
                            third_party/libyuv/include/libyuv/scale.h  \
 | 
			
		||||
                            third_party/libyuv/source/row.h \
 | 
			
		||||
                            third_party/libyuv/source/scale.c  \
 | 
			
		||||
                            third_party/libyuv/source/cpu_id.c
 | 
			
		||||
vp8_multi_resolution_encoder.GUID         = 04f8738e-63c8-423b-90fa-7c2703a374de
 | 
			
		||||
vp8_multi_resolution_encoder.DESCRIPTION  = VP8 Multiple-resolution Encoding
 | 
			
		||||
 | 
			
		||||
# Handle extra library flags depending on codec configuration
 | 
			
		||||
CODEC_EXTRA_LIBS-$(CONFIG_VP8)         += m
 | 
			
		||||
 | 
			
		||||
# We should not link to math library (libm) on RVCT
 | 
			
		||||
# when building for bare-metal targets
 | 
			
		||||
ifeq ($(CONFIG_OS_SUPPORT), yes)
 | 
			
		||||
CODEC_EXTRA_LIBS-$(CONFIG_VP8)         += m
 | 
			
		||||
else
 | 
			
		||||
    ifeq ($(CONFIG_GCC), yes)
 | 
			
		||||
    CODEC_EXTRA_LIBS-$(CONFIG_VP8)         += m
 | 
			
		||||
    endif
 | 
			
		||||
endif
 | 
			
		||||
#
 | 
			
		||||
# End of specified files. The rest of the build rules should happen
 | 
			
		||||
# automagically from here.
 | 
			
		||||
@@ -114,8 +139,8 @@ else
 | 
			
		||||
    LIB_PATH := $(call enabled,LIB_PATH)
 | 
			
		||||
    INC_PATH := $(call enabled,INC_PATH)
 | 
			
		||||
endif
 | 
			
		||||
CFLAGS += $(addprefix -I,$(INC_PATH))
 | 
			
		||||
LDFLAGS += $(addprefix -L,$(LIB_PATH))
 | 
			
		||||
INTERNAL_CFLAGS = $(addprefix -I,$(INC_PATH))
 | 
			
		||||
INTERNAL_LDFLAGS += $(addprefix -L,$(LIB_PATH))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Expand list of selected examples to build (as specified above)
 | 
			
		||||
@@ -144,20 +169,22 @@ $(eval $(if $(filter universal%,$(TOOLCHAIN)),LIPO_OBJS,BUILD_OBJS):=yes)
 | 
			
		||||
# Create build/install dependencies for all examples. The common case
 | 
			
		||||
# is handled here. The MSVS case is handled below.
 | 
			
		||||
NOT_MSVS = $(if $(CONFIG_MSVS),,yes)
 | 
			
		||||
DIST-BINS-$(NOT_MSVS)      += $(addprefix bin/,$(ALL_EXAMPLES:.c=))
 | 
			
		||||
INSTALL-BINS-$(NOT_MSVS)   += $(addprefix bin/,$(UTILS:.c=))
 | 
			
		||||
DIST-BINS-$(NOT_MSVS)      += $(addprefix bin/,$(ALL_EXAMPLES:.c=$(EXE_SFX)))
 | 
			
		||||
INSTALL-BINS-$(NOT_MSVS)   += $(addprefix bin/,$(UTILS:.c=$(EXE_SFX)))
 | 
			
		||||
DIST-SRCS-yes              += $(ALL_SRCS)
 | 
			
		||||
INSTALL-SRCS-yes           += $(UTIL_SRCS)
 | 
			
		||||
OBJS-$(NOT_MSVS)           += $(if $(BUILD_OBJS),$(call objs,$(ALL_SRCS)))
 | 
			
		||||
BINS-$(NOT_MSVS)           += $(addprefix $(BUILD_PFX),$(ALL_EXAMPLES:.c=))
 | 
			
		||||
BINS-$(NOT_MSVS)           += $(addprefix $(BUILD_PFX),$(ALL_EXAMPLES:.c=$(EXE_SFX)))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Instantiate linker template for all examples.
 | 
			
		||||
CODEC_LIB=$(if $(CONFIG_DEBUG_LIBS),vpx_g,vpx)
 | 
			
		||||
CODEC_LIB_SUF=$(if $(CONFIG_SHARED),.so,.a)
 | 
			
		||||
$(foreach bin,$(BINS-yes),\
 | 
			
		||||
    $(if $(BUILD_OBJS),$(eval $(bin): $(LIB_PATH)/lib$(CODEC_LIB).a))\
 | 
			
		||||
    $(if $(BUILD_OBJS),$(eval $(bin):\
 | 
			
		||||
        $(LIB_PATH)/lib$(CODEC_LIB)$(CODEC_LIB_SUF)))\
 | 
			
		||||
    $(if $(BUILD_OBJS),$(eval $(call linker_template,$(bin),\
 | 
			
		||||
        $(call objs,$($(notdir $(bin)).SRCS)) \
 | 
			
		||||
        $(call objs,$($(notdir $(bin:$(EXE_SFX)=)).SRCS)) \
 | 
			
		||||
        -l$(CODEC_LIB) $(addprefix -l,$(CODEC_EXTRA_LIBS))\
 | 
			
		||||
        )))\
 | 
			
		||||
    $(if $(LIPO_OBJS),$(eval $(call lipo_bin_template,$(bin))))\
 | 
			
		||||
@@ -206,7 +233,8 @@ $(1): $($(1:.vcproj=).SRCS)
 | 
			
		||||
            --ver=$$(CONFIG_VS_VERSION)\
 | 
			
		||||
            --proj-guid=$$($$(@:.vcproj=).GUID)\
 | 
			
		||||
            $$(if $$(CONFIG_STATIC_MSVCRT),--static-crt) \
 | 
			
		||||
            --out=$$@ $$(CFLAGS) $$(LDFLAGS) -l$$(CODEC_LIB) -lwinmm $$^
 | 
			
		||||
            --out=$$@ $$(INTERNAL_CFLAGS) $$(CFLAGS) \
 | 
			
		||||
            $$(INTERNAL_LDFLAGS) $$(LDFLAGS) -l$$(CODEC_LIB) -lwinmm $$^
 | 
			
		||||
endef
 | 
			
		||||
PROJECTS-$(CONFIG_MSVS) += $(ALL_EXAMPLES:.c=.vcproj)
 | 
			
		||||
INSTALL-BINS-$(CONFIG_MSVS) += $(foreach p,$(VS_PLATFORMS),\
 | 
			
		||||
 
 | 
			
		||||
@@ -34,8 +34,8 @@ MD5Init(&md5);
 | 
			
		||||
for(plane=0; plane < 3; plane++) {
 | 
			
		||||
    unsigned char *buf =img->planes[plane];
 | 
			
		||||
 | 
			
		||||
    for(y=0; y<img->d_h >> (plane?1:0); y++) {
 | 
			
		||||
        MD5Update(&md5, buf, img->d_w >> (plane?1:0));
 | 
			
		||||
    for(y=0; y < (plane ? (img->d_h + 1) >> 1 : img->d_h); y++) {
 | 
			
		||||
        MD5Update(&md5, buf, (plane ? (img->d_w + 1) >> 1 : img->d_w));
 | 
			
		||||
        buf += img->stride[plane];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										238
									
								
								examples/decode_with_partial_drops.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										238
									
								
								examples/decode_with_partial_drops.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,238 @@
 | 
			
		||||
@TEMPLATE decoder_tmpl.c
 | 
			
		||||
Decode With Partial Drops Example
 | 
			
		||||
=========================
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION
 | 
			
		||||
This is an example utility which drops a series of frames (or parts of frames),
 | 
			
		||||
as specified on the command line. This is useful for observing the error
 | 
			
		||||
recovery features of the codec.
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION
 | 
			
		||||
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EXTRA_INCLUDES
 | 
			
		||||
#include <time.h>
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EXTRA_INCLUDES
 | 
			
		||||
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HELPERS
 | 
			
		||||
struct parsed_header
 | 
			
		||||
{
 | 
			
		||||
    char key_frame;
 | 
			
		||||
    int version;
 | 
			
		||||
    char show_frame;
 | 
			
		||||
    int first_part_size;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int next_packet(struct parsed_header* hdr, int pos, int length, int mtu)
 | 
			
		||||
{
 | 
			
		||||
    int size = 0;
 | 
			
		||||
    int remaining = length - pos;
 | 
			
		||||
    /* Uncompressed part is 3 bytes for P frames and 10 bytes for I frames */
 | 
			
		||||
    int uncomp_part_size = (hdr->key_frame ? 10 : 3);
 | 
			
		||||
    /* number of bytes yet to send from header and the first partition */
 | 
			
		||||
    int remainFirst = uncomp_part_size + hdr->first_part_size - pos;
 | 
			
		||||
    if (remainFirst > 0)
 | 
			
		||||
    {
 | 
			
		||||
        if (remainFirst <= mtu)
 | 
			
		||||
        {
 | 
			
		||||
            size = remainFirst;
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            size = mtu;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return size;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* second partition; just slot it up according to MTU */
 | 
			
		||||
    if (remaining <= mtu)
 | 
			
		||||
    {
 | 
			
		||||
        size = remaining;
 | 
			
		||||
        return size;
 | 
			
		||||
    }
 | 
			
		||||
    return mtu;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void throw_packets(unsigned char* frame, int* size, int loss_rate,
 | 
			
		||||
                   int* thrown, int* kept)
 | 
			
		||||
{
 | 
			
		||||
    unsigned char loss_frame[256*1024];
 | 
			
		||||
    int pkg_size = 1;
 | 
			
		||||
    int pos = 0;
 | 
			
		||||
    int loss_pos = 0;
 | 
			
		||||
    struct parsed_header hdr;
 | 
			
		||||
    unsigned int tmp;
 | 
			
		||||
    int mtu = 1500;
 | 
			
		||||
 | 
			
		||||
    if (*size < 3)
 | 
			
		||||
    {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    putc('|', stdout);
 | 
			
		||||
    /* parse uncompressed 3 bytes */
 | 
			
		||||
    tmp = (frame[2] << 16) | (frame[1] << 8) | frame[0];
 | 
			
		||||
    hdr.key_frame = !(tmp & 0x1); /* inverse logic */
 | 
			
		||||
    hdr.version = (tmp >> 1) & 0x7;
 | 
			
		||||
    hdr.show_frame = (tmp >> 4) & 0x1;
 | 
			
		||||
    hdr.first_part_size = (tmp >> 5) & 0x7FFFF;
 | 
			
		||||
 | 
			
		||||
    /* don't drop key frames */
 | 
			
		||||
    if (hdr.key_frame)
 | 
			
		||||
    {
 | 
			
		||||
        int i;
 | 
			
		||||
        *kept = *size/mtu + ((*size % mtu > 0) ? 1 : 0); /* approximate */
 | 
			
		||||
        for (i=0; i < *kept; i++)
 | 
			
		||||
            putc('.', stdout);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    while ((pkg_size = next_packet(&hdr, pos, *size, mtu)) > 0)
 | 
			
		||||
    {
 | 
			
		||||
        int loss_event = ((rand() + 1.0)/(RAND_MAX + 1.0) < loss_rate/100.0);
 | 
			
		||||
        if (*thrown == 0 && !loss_event)
 | 
			
		||||
        {
 | 
			
		||||
            memcpy(loss_frame + loss_pos, frame + pos, pkg_size);
 | 
			
		||||
            loss_pos += pkg_size;
 | 
			
		||||
            (*kept)++;
 | 
			
		||||
            putc('.', stdout);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            (*thrown)++;
 | 
			
		||||
            putc('X', stdout);
 | 
			
		||||
        }
 | 
			
		||||
        pos += pkg_size;
 | 
			
		||||
    }
 | 
			
		||||
    memcpy(frame, loss_frame, loss_pos);
 | 
			
		||||
    memset(frame + loss_pos, 0, *size - loss_pos);
 | 
			
		||||
    *size = loss_pos;
 | 
			
		||||
}
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ HELPERS
 | 
			
		||||
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INIT
 | 
			
		||||
/* Initialize codec */
 | 
			
		||||
flags = VPX_CODEC_USE_ERROR_CONCEALMENT;
 | 
			
		||||
res = vpx_codec_dec_init(&codec, interface, &dec_cfg, flags);
 | 
			
		||||
if(res)
 | 
			
		||||
    die_codec(&codec, "Failed to initialize decoder");
 | 
			
		||||
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INIT
 | 
			
		||||
 | 
			
		||||
Usage
 | 
			
		||||
-----
 | 
			
		||||
This example adds a single argument to the `simple_decoder` example,
 | 
			
		||||
which specifies the range or pattern of frames to drop. The parameter is
 | 
			
		||||
parsed as follows:
 | 
			
		||||
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ USAGE
 | 
			
		||||
if(argc < 4 || argc > 6)
 | 
			
		||||
    die("Usage: %s <infile> <outfile> [-t <num threads>] <N-M|N/M|L,S>\n",
 | 
			
		||||
        argv[0]);
 | 
			
		||||
{
 | 
			
		||||
    char *nptr;
 | 
			
		||||
    int arg_num = 3;
 | 
			
		||||
    if (argc == 6 && strncmp(argv[arg_num++], "-t", 2) == 0)
 | 
			
		||||
        dec_cfg.threads = strtol(argv[arg_num++], NULL, 0);
 | 
			
		||||
    n = strtol(argv[arg_num], &nptr, 0);
 | 
			
		||||
    mode = (*nptr == '\0' || *nptr == ',') ? 2 : (*nptr == '-') ? 1 : 0;
 | 
			
		||||
 | 
			
		||||
    m = strtol(nptr+1, NULL, 0);
 | 
			
		||||
    if((!n && !m) || (*nptr != '-' && *nptr != '/' &&
 | 
			
		||||
        *nptr != '\0' && *nptr != ','))
 | 
			
		||||
        die("Couldn't parse pattern %s\n", argv[3]);
 | 
			
		||||
}
 | 
			
		||||
seed = (m > 0) ? m : (unsigned int)time(NULL);
 | 
			
		||||
srand(seed);thrown_frame = 0;
 | 
			
		||||
printf("Seed: %u\n", seed);
 | 
			
		||||
printf("Threads: %d\n", dec_cfg.threads);
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ USAGE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Dropping A Range Of Frames
 | 
			
		||||
--------------------------
 | 
			
		||||
To drop a range of frames, specify the starting frame and the ending
 | 
			
		||||
frame to drop, separated by a dash. The following command will drop
 | 
			
		||||
frames 5 through 10 (base 1).
 | 
			
		||||
 | 
			
		||||
  $ ./decode_with_partial_drops in.ivf out.i420 5-10
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Dropping A Pattern Of Frames
 | 
			
		||||
----------------------------
 | 
			
		||||
To drop a pattern of frames, specify the number of frames to drop and
 | 
			
		||||
the number of frames after which to repeat the pattern, separated by
 | 
			
		||||
a forward-slash. The following command will drop 3 of 7 frames.
 | 
			
		||||
Specifically, it will decode 4 frames, then drop 3 frames, and then
 | 
			
		||||
repeat.
 | 
			
		||||
 | 
			
		||||
  $ ./decode_with_partial_drops in.ivf out.i420 3/7
 | 
			
		||||
 | 
			
		||||
Dropping Random Parts Of Frames
 | 
			
		||||
-------------------------------
 | 
			
		||||
A third argument tuple is available to split the frame into 1500 bytes pieces
 | 
			
		||||
and randomly drop pieces rather than frames. The frame will be split at
 | 
			
		||||
partition boundaries where possible. The following example will seed the RNG
 | 
			
		||||
with the seed 123 and drop approximately 5% of the pieces. Pieces which
 | 
			
		||||
are depending on an already dropped piece will also be dropped.
 | 
			
		||||
 | 
			
		||||
  $ ./decode_with_partial_drops in.ivf out.i420 5,123
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Extra Variables
 | 
			
		||||
---------------
 | 
			
		||||
This example maintains the pattern passed on the command line in the
 | 
			
		||||
`n`, `m`, and `is_range` variables:
 | 
			
		||||
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EXTRA_VARS
 | 
			
		||||
int              n, m, mode;
 | 
			
		||||
unsigned int     seed;
 | 
			
		||||
int              thrown=0, kept=0;
 | 
			
		||||
int              thrown_frame=0, kept_frame=0;
 | 
			
		||||
vpx_codec_dec_cfg_t  dec_cfg = {0};
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ EXTRA_VARS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Making The Drop Decision
 | 
			
		||||
------------------------
 | 
			
		||||
The example decides whether to drop the frame based on the current
 | 
			
		||||
frame number, immediately before decoding the frame.
 | 
			
		||||
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PRE_DECODE
 | 
			
		||||
/* Decide whether to throw parts of the frame or the whole frame
 | 
			
		||||
   depending on the drop mode */
 | 
			
		||||
thrown_frame = 0;
 | 
			
		||||
kept_frame = 0;
 | 
			
		||||
switch (mode)
 | 
			
		||||
{
 | 
			
		||||
case 0:
 | 
			
		||||
    if (m - (frame_cnt-1)%m <= n)
 | 
			
		||||
    {
 | 
			
		||||
        frame_sz = 0;
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
case 1:
 | 
			
		||||
    if (frame_cnt >= n && frame_cnt <= m)
 | 
			
		||||
    {
 | 
			
		||||
        frame_sz = 0;
 | 
			
		||||
    }
 | 
			
		||||
    break;
 | 
			
		||||
case 2:
 | 
			
		||||
    throw_packets(frame, &frame_sz, n, &thrown_frame, &kept_frame);
 | 
			
		||||
    break;
 | 
			
		||||
default: break;
 | 
			
		||||
}
 | 
			
		||||
if (mode < 2)
 | 
			
		||||
{
 | 
			
		||||
    if (frame_sz == 0)
 | 
			
		||||
    {
 | 
			
		||||
        putc('X', stdout);
 | 
			
		||||
        thrown_frame++;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        putc('.', stdout);
 | 
			
		||||
        kept_frame++;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
thrown += thrown_frame;
 | 
			
		||||
kept += kept_frame;
 | 
			
		||||
fflush(stdout);
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PRE_DECODE
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
#define VPX_CODEC_DISABLE_COMPAT 1
 | 
			
		||||
#include "vpx/vpx_decoder.h"
 | 
			
		||||
#include "vpx/vp8dx.h"
 | 
			
		||||
#define interface (&vpx_codec_vp8_dx_algo)
 | 
			
		||||
#define interface (vpx_codec_vp8_dx())
 | 
			
		||||
@EXTRA_INCLUDES
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -42,6 +42,8 @@ static void die(const char *fmt, ...) {
 | 
			
		||||
 | 
			
		||||
@DIE_CODEC
 | 
			
		||||
 | 
			
		||||
@HELPERS
 | 
			
		||||
 | 
			
		||||
int main(int argc, char **argv) {
 | 
			
		||||
    FILE            *infile, *outfile;
 | 
			
		||||
    vpx_codec_ctx_t  codec;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
#define VPX_CODEC_DISABLE_COMPAT 1
 | 
			
		||||
#include "vpx/vpx_decoder.h"
 | 
			
		||||
#include "vpx/vp8dx.h"
 | 
			
		||||
#define interface (&vpx_codec_vp8_dx_algo)
 | 
			
		||||
#define interface (vpx_codec_vp8_dx())
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INCLUDES
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -47,8 +47,9 @@ while((img = vpx_codec_get_frame(&codec, &iter))) {
 | 
			
		||||
for(plane=0; plane < 3; plane++) {
 | 
			
		||||
    unsigned char *buf =img->planes[plane];
 | 
			
		||||
 | 
			
		||||
    for(y=0; y<img->d_h >> (plane?1:0); y++) {
 | 
			
		||||
        if(fwrite(buf, 1, img->d_w >> (plane?1:0), outfile));
 | 
			
		||||
    for(y=0; y < (plane ? (img->d_h + 1) >> 1 : img->d_h); y++) {
 | 
			
		||||
        if(fwrite(buf, 1, (plane ? (img->d_w + 1) >> 1 : img->d_w),
 | 
			
		||||
           outfile));
 | 
			
		||||
        buf += img->stride[plane];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
#define VPX_CODEC_DISABLE_COMPAT 1
 | 
			
		||||
#include "vpx/vpx_encoder.h"
 | 
			
		||||
#include "vpx/vp8cx.h"
 | 
			
		||||
#define interface (&vpx_codec_vp8_cx_algo)
 | 
			
		||||
#define interface (vpx_codec_vp8_cx())
 | 
			
		||||
#define fourcc    0x30385056
 | 
			
		||||
@EXTRA_INCLUDES
 | 
			
		||||
 | 
			
		||||
@@ -111,8 +111,6 @@ int main(int argc, char **argv) {
 | 
			
		||||
    vpx_codec_ctx_t      codec;
 | 
			
		||||
    vpx_codec_enc_cfg_t  cfg;
 | 
			
		||||
    int                  frame_cnt = 0;
 | 
			
		||||
    unsigned char        file_hdr[IVF_FILE_HDR_SZ];
 | 
			
		||||
    unsigned char        frame_hdr[IVF_FRAME_HDR_SZ];
 | 
			
		||||
    vpx_image_t          raw;
 | 
			
		||||
    vpx_codec_err_t      res;
 | 
			
		||||
    long                 width;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
#define VPX_CODEC_DISABLE_COMPAT 1
 | 
			
		||||
#include "vpx/vpx_encoder.h"
 | 
			
		||||
#include "vpx/vp8cx.h"
 | 
			
		||||
#define interface (&vpx_codec_vp8_cx_algo)
 | 
			
		||||
#define interface (vpx_codec_vp8_cx())
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_INCLUDES
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ res = vpx_codec_dec_init(&codec, interface, NULL,
 | 
			
		||||
if(res == VPX_CODEC_INCAPABLE) {
 | 
			
		||||
    printf("NOTICE: Postproc not supported by %s\n",
 | 
			
		||||
           vpx_codec_iface_name(interface));
 | 
			
		||||
    res = vpx_codec_dec_init(&codec, interface, NULL, 0);
 | 
			
		||||
    res = vpx_codec_dec_init(&codec, interface, NULL, flags);
 | 
			
		||||
}
 | 
			
		||||
if(res)
 | 
			
		||||
    die_codec(&codec, "Failed to initialize decoder");
 | 
			
		||||
@@ -58,7 +58,7 @@ if(frame_cnt%30 == 1) {
 | 
			
		||||
    if(vpx_codec_control(&codec, VP8_SET_POSTPROC, &pp))
 | 
			
		||||
        die_codec(&codec, "Failed to turn off postproc");
 | 
			
		||||
} else if(frame_cnt%30 == 16) {
 | 
			
		||||
    vp8_postproc_cfg_t  pp = {VP8_DEBLOCK | VP8_DEMACROBLOCK, 4, 0};
 | 
			
		||||
    vp8_postproc_cfg_t  pp = {VP8_DEBLOCK | VP8_DEMACROBLOCK | VP8_MFQE, 4, 0};
 | 
			
		||||
 | 
			
		||||
    if(vpx_codec_control(&codec, VP8_SET_POSTPROC, &pp))
 | 
			
		||||
        die_codec(&codec, "Failed to turn on postproc");
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ Initializing The Codec
 | 
			
		||||
----------------------
 | 
			
		||||
The decoder is initialized by the following code. This is an example for
 | 
			
		||||
the VP8 decoder, but the code is analogous for all algorithms. Replace
 | 
			
		||||
`&vpx_codec_vp8_dx_algo` with a pointer to the interface exposed by the
 | 
			
		||||
`vpx_codec_vp8_dx()` with a pointer to the interface exposed by the
 | 
			
		||||
algorithm you want to use. The `cfg` argument is left as NULL in this
 | 
			
		||||
example, because we want the algorithm to determine the stream
 | 
			
		||||
configuration (width/height) and allocate memory automatically. This
 | 
			
		||||
 
 | 
			
		||||
@@ -1,143 +0,0 @@
 | 
			
		||||
@TEMPLATE encoder_tmpl.c
 | 
			
		||||
VP8 Scalable Frame Patterns
 | 
			
		||||
===========================
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION
 | 
			
		||||
This is an example demonstrating how to control the VP8 encoder's
 | 
			
		||||
reference frame selection and update mechanism for video applications
 | 
			
		||||
that benefit from a scalable bitstream.
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Configuration
 | 
			
		||||
-------------
 | 
			
		||||
Scalable frame patterns are most useful in an error resilient context,
 | 
			
		||||
so error resiliency mode is enabled, as in the `error_resilient.c`
 | 
			
		||||
example. In addition, we want to disable automatic keyframe selection,
 | 
			
		||||
so we force an interval of 1000 frames.
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  ENC_SET_CFG2
 | 
			
		||||
 | 
			
		||||
/* Enable error resilient mode */
 | 
			
		||||
cfg.g_error_resilient = 1;
 | 
			
		||||
cfg.g_lag_in_frames   = 0;
 | 
			
		||||
cfg.kf_mode           = VPX_KF_FIXED;
 | 
			
		||||
 | 
			
		||||
/* Disable automatic keyframe placement */
 | 
			
		||||
cfg.kf_min_dist = cfg.kf_max_dist = 1000;
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ENC_SET_CFG2
 | 
			
		||||
 | 
			
		||||
This example uses the following frame pattern (L->last_frame,
 | 
			
		||||
G->golden_frame, A->alt_ref_frame):
 | 
			
		||||
 | 
			
		||||
*  Frame  0  Intra, use none,  update L&G&A
 | 
			
		||||
*  Frame  1  Inter, use LGA,   update none
 | 
			
		||||
*  Frame  2  Inter, use LGA,   update L
 | 
			
		||||
*  Frame  3  Inter, use LGA,   update none
 | 
			
		||||
*  Frame  4  Inter, use GA,    update L&G
 | 
			
		||||
*  Frame  5  Inter, use LGA,   update none
 | 
			
		||||
*  Frame  6  Inter, use LGA,   update L
 | 
			
		||||
*  Frame  7  Inter, use LGA,   update none
 | 
			
		||||
*  Frame  8  Inter, use A,     update L&G&A
 | 
			
		||||
*  Frame  9  Inter, use LGA,   update none
 | 
			
		||||
*  Frame 10  Inter, use LGA,   update L
 | 
			
		||||
*  Frame 11  Inter, use LGA,   update none
 | 
			
		||||
*  Frame 12  Inter, use GA,    update L&G
 | 
			
		||||
*  Frame 13  Inter, use LGA,   update none
 | 
			
		||||
*  Frame 14  Inter, use LGA,   update L
 | 
			
		||||
*  Frame 15  Inter, use LGA,   update none
 | 
			
		||||
*  ...Repeats the pattern from frame 0
 | 
			
		||||
 | 
			
		||||
Change this variable to test the 3 decodable streams case.
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TWOPASS_VARS
 | 
			
		||||
int                  num_streams = 5;
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TWOPASS_VARS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PER_FRAME_CFG
 | 
			
		||||
flags = 0;
 | 
			
		||||
if(num_streams == 5)
 | 
			
		||||
{
 | 
			
		||||
    switch(frame_cnt % 16) {
 | 
			
		||||
        case 0:
 | 
			
		||||
            flags |= VPX_EFLAG_FORCE_KF;
 | 
			
		||||
            flags |= VP8_EFLAG_FORCE_GF;
 | 
			
		||||
            flags |= VP8_EFLAG_FORCE_ARF;
 | 
			
		||||
            break;
 | 
			
		||||
        case 1:
 | 
			
		||||
        case 3:
 | 
			
		||||
        case 5:
 | 
			
		||||
        case 7:
 | 
			
		||||
        case 9:
 | 
			
		||||
        case 11:
 | 
			
		||||
        case 13:
 | 
			
		||||
        case 15:
 | 
			
		||||
            flags |= VP8_EFLAG_NO_UPD_LAST;
 | 
			
		||||
            flags |= VP8_EFLAG_NO_UPD_GF;
 | 
			
		||||
            flags |= VP8_EFLAG_NO_UPD_ARF;
 | 
			
		||||
            break;
 | 
			
		||||
        case 2:
 | 
			
		||||
        case 6:
 | 
			
		||||
        case 10:
 | 
			
		||||
        case 14:
 | 
			
		||||
            break;
 | 
			
		||||
        case 4:
 | 
			
		||||
            flags |= VP8_EFLAG_NO_REF_LAST;
 | 
			
		||||
            flags |= VP8_EFLAG_FORCE_GF;
 | 
			
		||||
            break;
 | 
			
		||||
        case 8:
 | 
			
		||||
            flags |= VP8_EFLAG_NO_REF_LAST;
 | 
			
		||||
            flags |= VP8_EFLAG_NO_REF_GF;
 | 
			
		||||
            flags |= VP8_EFLAG_FORCE_GF;
 | 
			
		||||
            flags |= VP8_EFLAG_FORCE_ARF;
 | 
			
		||||
            break;
 | 
			
		||||
        case 12:
 | 
			
		||||
            flags |= VP8_EFLAG_NO_REF_LAST;
 | 
			
		||||
            flags |= VP8_EFLAG_FORCE_GF;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
else
 | 
			
		||||
{
 | 
			
		||||
    switch(frame_cnt % 9) {
 | 
			
		||||
        case 0:
 | 
			
		||||
            if(frame_cnt==0)
 | 
			
		||||
            {
 | 
			
		||||
                flags |= VPX_EFLAG_FORCE_KF;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                cfg.rc_max_quantizer = 26;
 | 
			
		||||
                cfg.rc_min_quantizer = 0;
 | 
			
		||||
                cfg.rc_target_bitrate = 300;
 | 
			
		||||
                flags |= VP8_EFLAG_NO_REF_LAST;
 | 
			
		||||
                flags |= VP8_EFLAG_NO_REF_ARF;
 | 
			
		||||
            }
 | 
			
		||||
            flags |= VP8_EFLAG_FORCE_GF;
 | 
			
		||||
            flags |= VP8_EFLAG_FORCE_ARF;
 | 
			
		||||
            break;
 | 
			
		||||
        case 1:
 | 
			
		||||
        case 2:
 | 
			
		||||
        case 4:
 | 
			
		||||
        case 5:
 | 
			
		||||
        case 7:
 | 
			
		||||
        case 8:
 | 
			
		||||
            cfg.rc_max_quantizer = 45;
 | 
			
		||||
            cfg.rc_min_quantizer = 0;
 | 
			
		||||
            cfg.rc_target_bitrate = 230;
 | 
			
		||||
            break;
 | 
			
		||||
        case 3:
 | 
			
		||||
        case 6:
 | 
			
		||||
            cfg.rc_max_quantizer = 45;
 | 
			
		||||
            cfg.rc_min_quantizer = 0;
 | 
			
		||||
            cfg.rc_target_bitrate = 215;
 | 
			
		||||
            flags |= VP8_EFLAG_NO_REF_LAST;
 | 
			
		||||
            flags |= VP8_EFLAG_FORCE_ARF;
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PER_FRAME_CFG
 | 
			
		||||
 | 
			
		||||
Observing The Effects
 | 
			
		||||
---------------------
 | 
			
		||||
Use the `decode_with_drops` example to decode with various dropped frame
 | 
			
		||||
patterns. Good patterns to start with are 1/2, 3/4, 7/8, and 15/16
 | 
			
		||||
drops.
 | 
			
		||||
@@ -120,7 +120,7 @@ enum mkv
 | 
			
		||||
    //video
 | 
			
		||||
    Video = 0xE0,
 | 
			
		||||
    FlagInterlaced = 0x9A,
 | 
			
		||||
//  StereoMode = 0x53B8,
 | 
			
		||||
    StereoMode = 0x53B8,
 | 
			
		||||
    PixelWidth = 0xB0,
 | 
			
		||||
    PixelHeight = 0xBA,
 | 
			
		||||
    PixelCropBottom = 0x54AA,
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,7 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <wchar.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#if defined(_MSC_VER)
 | 
			
		||||
#define LITERALU64(n) n
 | 
			
		||||
#else
 | 
			
		||||
@@ -33,7 +34,7 @@ void Ebml_WriteLen(EbmlGlobal *glob, long long val)
 | 
			
		||||
 | 
			
		||||
    val |= (LITERALU64(0x000000000000080) << ((size - 1) * 7));
 | 
			
		||||
 | 
			
		||||
    Ebml_Serialize(glob, (void *) &val, size);
 | 
			
		||||
    Ebml_Serialize(glob, (void *) &val, sizeof(val), size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ebml_WriteString(EbmlGlobal *glob, const char *str)
 | 
			
		||||
@@ -60,21 +61,26 @@ void Ebml_WriteUTF8(EbmlGlobal *glob, const wchar_t *wstr)
 | 
			
		||||
 | 
			
		||||
void Ebml_WriteID(EbmlGlobal *glob, unsigned long class_id)
 | 
			
		||||
{
 | 
			
		||||
    int len;
 | 
			
		||||
 | 
			
		||||
    if (class_id >= 0x01000000)
 | 
			
		||||
        Ebml_Serialize(glob, (void *)&class_id, 4);
 | 
			
		||||
        len = 4;
 | 
			
		||||
    else if (class_id >= 0x00010000)
 | 
			
		||||
        Ebml_Serialize(glob, (void *)&class_id, 3);
 | 
			
		||||
        len = 3;
 | 
			
		||||
    else if (class_id >= 0x00000100)
 | 
			
		||||
        Ebml_Serialize(glob, (void *)&class_id, 2);
 | 
			
		||||
        len = 2;
 | 
			
		||||
    else
 | 
			
		||||
        Ebml_Serialize(glob, (void *)&class_id, 1);
 | 
			
		||||
        len = 1;
 | 
			
		||||
 | 
			
		||||
    Ebml_Serialize(glob, (void *)&class_id, sizeof(class_id), len);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ebml_SerializeUnsigned64(EbmlGlobal *glob, unsigned long class_id, uint64_t ui)
 | 
			
		||||
{
 | 
			
		||||
    unsigned char sizeSerialized = 8 | 0x80;
 | 
			
		||||
    Ebml_WriteID(glob, class_id);
 | 
			
		||||
    Ebml_Serialize(glob, &sizeSerialized, 1);
 | 
			
		||||
    Ebml_Serialize(glob, &ui, 8);
 | 
			
		||||
    Ebml_Serialize(glob, &sizeSerialized, sizeof(sizeSerialized), 1);
 | 
			
		||||
    Ebml_Serialize(glob, &ui, sizeof(ui), 8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ebml_SerializeUnsigned(EbmlGlobal *glob, unsigned long class_id, unsigned long ui)
 | 
			
		||||
@@ -97,8 +103,8 @@ void Ebml_SerializeUnsigned(EbmlGlobal *glob, unsigned long class_id, unsigned l
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    sizeSerialized = 0x80 | size;
 | 
			
		||||
    Ebml_Serialize(glob, &sizeSerialized, 1);
 | 
			
		||||
    Ebml_Serialize(glob, &ui, size);
 | 
			
		||||
    Ebml_Serialize(glob, &sizeSerialized, sizeof(sizeSerialized), 1);
 | 
			
		||||
    Ebml_Serialize(glob, &ui, sizeof(ui), size);
 | 
			
		||||
}
 | 
			
		||||
//TODO: perhaps this is a poor name for this id serializer helper function
 | 
			
		||||
void Ebml_SerializeBinary(EbmlGlobal *glob, unsigned long class_id, unsigned long bin)
 | 
			
		||||
@@ -119,14 +125,14 @@ void Ebml_SerializeFloat(EbmlGlobal *glob, unsigned long class_id, double d)
 | 
			
		||||
    unsigned char len = 0x88;
 | 
			
		||||
 | 
			
		||||
    Ebml_WriteID(glob, class_id);
 | 
			
		||||
    Ebml_Serialize(glob, &len, 1);
 | 
			
		||||
    Ebml_Serialize(glob,  &d, 8);
 | 
			
		||||
    Ebml_Serialize(glob, &len, sizeof(len), 1);
 | 
			
		||||
    Ebml_Serialize(glob,  &d, sizeof(d), 8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ebml_WriteSigned16(EbmlGlobal *glob, short val)
 | 
			
		||||
{
 | 
			
		||||
    signed long out = ((val & 0x003FFFFF) | 0x00200000) << 8;
 | 
			
		||||
    Ebml_Serialize(glob, &out, 3);
 | 
			
		||||
    Ebml_Serialize(glob, &out, sizeof(out), 3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Ebml_SerializeString(EbmlGlobal *glob, unsigned long class_id, const char *s)
 | 
			
		||||
@@ -143,7 +149,6 @@ void Ebml_SerializeUTF8(EbmlGlobal *glob, unsigned long class_id, wchar_t *s)
 | 
			
		||||
 | 
			
		||||
void Ebml_SerializeData(EbmlGlobal *glob, unsigned long class_id, unsigned char *data, unsigned long data_length)
 | 
			
		||||
{
 | 
			
		||||
    unsigned char size = 4;
 | 
			
		||||
    Ebml_WriteID(glob, class_id);
 | 
			
		||||
    Ebml_WriteLen(glob, data_length);
 | 
			
		||||
    Ebml_Write(glob,  data, data_length);
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@
 | 
			
		||||
#include "vpx/vpx_integer.h"
 | 
			
		||||
 | 
			
		||||
typedef struct EbmlGlobal EbmlGlobal;
 | 
			
		||||
void  Ebml_Serialize(EbmlGlobal *glob, const void *, unsigned long);
 | 
			
		||||
void  Ebml_Serialize(EbmlGlobal *glob, const void *, int, unsigned long);
 | 
			
		||||
void  Ebml_Write(EbmlGlobal *glob, const void *, unsigned long);
 | 
			
		||||
/////
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -35,11 +35,11 @@ void writeSimpleBlock(EbmlGlobal *glob, unsigned char trackNumber, short timeCod
 | 
			
		||||
    Ebml_WriteID(glob, SimpleBlock);
 | 
			
		||||
    unsigned long blockLength = 4 + dataLength;
 | 
			
		||||
    blockLength |= 0x10000000; //TODO check length < 0x0FFFFFFFF
 | 
			
		||||
    Ebml_Serialize(glob, &blockLength, 4);
 | 
			
		||||
    Ebml_Serialize(glob, &blockLength, sizeof(blockLength), 4);
 | 
			
		||||
    trackNumber |= 0x80;  //TODO check track nubmer < 128
 | 
			
		||||
    Ebml_Write(glob, &trackNumber, 1);
 | 
			
		||||
    //Ebml_WriteSigned16(glob, timeCode,2); //this is 3 bytes
 | 
			
		||||
    Ebml_Serialize(glob, &timeCode, 2);
 | 
			
		||||
    Ebml_Serialize(glob, &timeCode, sizeof(timeCode), 2);
 | 
			
		||||
    unsigned char flags = 0x00 | (isKeyframe ? 0x80 : 0x00) | (lacingFlag << 1) | discardable;
 | 
			
		||||
    Ebml_Write(glob, &flags, 1);
 | 
			
		||||
    Ebml_Write(glob, data, dataLength);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										266
									
								
								libs.mk
									
									
									
									
									
								
							
							
						
						
									
										266
									
								
								libs.mk
									
									
									
									
									
								
							@@ -9,8 +9,15 @@
 | 
			
		||||
##
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ASM:=$(if $(filter yes,$(CONFIG_GCC)),.asm.s,.asm)
 | 
			
		||||
# ARM assembly files are written in RVCT-style. We use some make magic to
 | 
			
		||||
# filter those files to allow GCC compilation
 | 
			
		||||
ifeq ($(ARCH_ARM),yes)
 | 
			
		||||
  ASM:=$(if $(filter yes,$(CONFIG_GCC)),.asm.s,.asm)
 | 
			
		||||
else
 | 
			
		||||
  ASM:=.asm
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CODEC_SRCS-yes += CHANGELOG
 | 
			
		||||
CODEC_SRCS-yes += libs.mk
 | 
			
		||||
 | 
			
		||||
include $(SRC_PATH_BARE)/vpx/vpx_codec.mk
 | 
			
		||||
@@ -28,8 +35,9 @@ ifeq ($(CONFIG_VP8_ENCODER),yes)
 | 
			
		||||
  include $(SRC_PATH_BARE)/$(VP8_PREFIX)vp8cx.mk
 | 
			
		||||
  CODEC_SRCS-yes += $(addprefix $(VP8_PREFIX),$(call enabled,VP8_CX_SRCS))
 | 
			
		||||
  CODEC_EXPORTS-yes += $(addprefix $(VP8_PREFIX),$(VP8_CX_EXPORTS))
 | 
			
		||||
  CODEC_SRCS-yes += $(VP8_PREFIX)vp8cx.mk vpx/vp8.h vpx/vp8cx.h vpx/vp8e.h
 | 
			
		||||
  INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8e.h include/vpx/vp8cx.h
 | 
			
		||||
  CODEC_SRCS-yes += $(VP8_PREFIX)vp8cx.mk vpx/vp8.h vpx/vp8cx.h
 | 
			
		||||
  CODEC_SRCS-$(ARCH_ARM) += $(VP8_PREFIX)vp8cx_arm.mk
 | 
			
		||||
  INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8cx.h
 | 
			
		||||
  INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP8_PREFIX)/%
 | 
			
		||||
  CODEC_DOC_SRCS += vpx/vp8.h vpx/vp8cx.h
 | 
			
		||||
  CODEC_DOC_SECTIONS += vp8 vp8_encoder
 | 
			
		||||
@@ -82,7 +90,9 @@ endif
 | 
			
		||||
$(eval $(if $(filter universal%,$(TOOLCHAIN)),LIPO_LIBVPX,BUILD_LIBVPX):=yes)
 | 
			
		||||
 | 
			
		||||
CODEC_SRCS-$(BUILD_LIBVPX) += build/make/version.sh
 | 
			
		||||
CODEC_SRCS-$(BUILD_LIBVPX) += build/make/rtcd.sh
 | 
			
		||||
CODEC_SRCS-$(BUILD_LIBVPX) += vpx/vpx_integer.h
 | 
			
		||||
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/asm_offsets.h
 | 
			
		||||
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/vpx_timer.h
 | 
			
		||||
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/mem.h
 | 
			
		||||
CODEC_SRCS-$(BUILD_LIBVPX) += $(BUILD_PFX)vpx_config.c
 | 
			
		||||
@@ -94,7 +104,7 @@ CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86_abi_support.asm
 | 
			
		||||
CODEC_SRCS-$(BUILD_LIBVPX) += vpx_ports/x86_cpuid.c
 | 
			
		||||
endif
 | 
			
		||||
CODEC_SRCS-$(ARCH_ARM) += vpx_ports/arm_cpudetect.c
 | 
			
		||||
CODEC_SRCS-$(ARCH_ARM) += $(BUILD_PFX)vpx_config.asm
 | 
			
		||||
CODEC_SRCS-$(ARCH_ARM) += vpx_ports/arm.h
 | 
			
		||||
CODEC_EXPORTS-$(BUILD_LIBVPX) += vpx/exports_com
 | 
			
		||||
CODEC_EXPORTS-$(CONFIG_ENCODERS) += vpx/exports_enc
 | 
			
		||||
CODEC_EXPORTS-$(CONFIG_DECODERS) += vpx/exports_dec
 | 
			
		||||
@@ -105,7 +115,6 @@ INSTALL-LIBS-yes += include/vpx/vpx_integer.h
 | 
			
		||||
INSTALL-LIBS-yes += include/vpx/vpx_codec_impl_top.h
 | 
			
		||||
INSTALL-LIBS-yes += include/vpx/vpx_codec_impl_bottom.h
 | 
			
		||||
INSTALL-LIBS-$(CONFIG_DECODERS) += include/vpx/vpx_decoder.h
 | 
			
		||||
INSTALL-LIBS-$(CONFIG_DECODERS) += include/vpx/vpx_decoder_compat.h
 | 
			
		||||
INSTALL-LIBS-$(CONFIG_ENCODERS) += include/vpx/vpx_encoder.h
 | 
			
		||||
ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
 | 
			
		||||
ifeq ($(CONFIG_MSVS),yes)
 | 
			
		||||
@@ -115,39 +124,41 @@ INSTALL-LIBS-$(CONFIG_SHARED) += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/v
 | 
			
		||||
INSTALL-LIBS-$(CONFIG_SHARED) += $(foreach p,$(VS_PLATFORMS),$(LIBSUBDIR)/$(p)/vpx.exp)
 | 
			
		||||
endif
 | 
			
		||||
else
 | 
			
		||||
INSTALL-LIBS-yes += $(LIBSUBDIR)/libvpx.a
 | 
			
		||||
INSTALL-LIBS-$(CONFIG_STATIC) += $(LIBSUBDIR)/libvpx.a
 | 
			
		||||
INSTALL-LIBS-$(CONFIG_DEBUG_LIBS) += $(LIBSUBDIR)/libvpx_g.a
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
CODEC_SRCS=$(call enabled,CODEC_SRCS)
 | 
			
		||||
CODEC_SRCS=$(filter-out %_test.cc,$(call enabled,CODEC_SRCS))
 | 
			
		||||
INSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(CODEC_SRCS)
 | 
			
		||||
INSTALL-SRCS-$(CONFIG_CODEC_SRCS) += $(call enabled,CODEC_EXPORTS)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Generate a list of all enabled sources, in particular for exporting to gyp
 | 
			
		||||
# based build systems.
 | 
			
		||||
libvpx_srcs.txt:
 | 
			
		||||
	@echo "    [CREATE] $@"
 | 
			
		||||
	@echo $(CODEC_SRCS) | xargs -n1 echo | sort -u > $@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
 | 
			
		||||
ifeq ($(CONFIG_MSVS),yes)
 | 
			
		||||
 | 
			
		||||
ifeq ($(ARCH_ARM),yes)
 | 
			
		||||
ifeq ($(HAVE_ARMV5TE),yes)
 | 
			
		||||
ARM_ARCH=v5
 | 
			
		||||
endif
 | 
			
		||||
ifeq ($(HAVE_ARMV6),yes)
 | 
			
		||||
ARM_ARCH=v6
 | 
			
		||||
endif
 | 
			
		||||
obj_int_extract.vcproj: $(SRC_PATH_BARE)/build/make/obj_int_extract.c
 | 
			
		||||
	@cp $(SRC_PATH_BARE)/build/arm-wince-vs8/obj_int_extract.bat .
 | 
			
		||||
	@cp $(SRC_PATH_BARE)/build/x86-msvs/obj_int_extract.bat .
 | 
			
		||||
	@echo "    [CREATE] $@"
 | 
			
		||||
	$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh\
 | 
			
		||||
			--exe\
 | 
			
		||||
			--target=$(TOOLCHAIN)\
 | 
			
		||||
            $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
 | 
			
		||||
            --name=obj_int_extract\
 | 
			
		||||
            --proj-guid=E1360C65-D375-4335-8057-7ED99CC3F9B2\
 | 
			
		||||
            --out=$@ $^\
 | 
			
		||||
            -I".";"$(SRC_PATH_BARE)"
 | 
			
		||||
	$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh \
 | 
			
		||||
    --exe \
 | 
			
		||||
    --target=$(TOOLCHAIN) \
 | 
			
		||||
    --name=obj_int_extract \
 | 
			
		||||
    --ver=$(CONFIG_VS_VERSION) \
 | 
			
		||||
    --proj-guid=E1360C65-D375-4335-8057-7ED99CC3F9B2 \
 | 
			
		||||
    $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
 | 
			
		||||
    --out=$@ $^ \
 | 
			
		||||
    -I. \
 | 
			
		||||
    -I"$(SRC_PATH_BARE)" \
 | 
			
		||||
 | 
			
		||||
PROJECTS-$(BUILD_LIBVPX) += obj_int_extract.vcproj
 | 
			
		||||
PROJECTS-$(BUILD_LIBVPX) += obj_int_extract.bat
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
vpx.def: $(call enabled,CODEC_EXPORTS)
 | 
			
		||||
	@echo "    [CREATE] $@"
 | 
			
		||||
@@ -158,32 +169,35 @@ CLEAN-OBJS += vpx.def
 | 
			
		||||
 | 
			
		||||
vpx.vcproj: $(CODEC_SRCS) vpx.def
 | 
			
		||||
	@echo "    [CREATE] $@"
 | 
			
		||||
	$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh\
 | 
			
		||||
			--lib\
 | 
			
		||||
			--target=$(TOOLCHAIN)\
 | 
			
		||||
	$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh \
 | 
			
		||||
			--lib \
 | 
			
		||||
			--target=$(TOOLCHAIN) \
 | 
			
		||||
            $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
 | 
			
		||||
            --name=vpx\
 | 
			
		||||
            --proj-guid=DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74\
 | 
			
		||||
            --module-def=vpx.def\
 | 
			
		||||
            --ver=$(CONFIG_VS_VERSION)\
 | 
			
		||||
            --out=$@ $(CFLAGS) $^\
 | 
			
		||||
            --name=vpx \
 | 
			
		||||
            --proj-guid=DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74 \
 | 
			
		||||
            --module-def=vpx.def \
 | 
			
		||||
            --ver=$(CONFIG_VS_VERSION) \
 | 
			
		||||
            --out=$@ $(CFLAGS) $^ \
 | 
			
		||||
            --src-path-bare="$(SRC_PATH_BARE)" \
 | 
			
		||||
 | 
			
		||||
PROJECTS-$(BUILD_LIBVPX) += vpx.vcproj
 | 
			
		||||
 | 
			
		||||
vpx.vcproj: vpx_config.asm
 | 
			
		||||
vpx.vcproj: vpx_rtcd.h
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
else
 | 
			
		||||
LIBVPX_OBJS=$(call objs,$(CODEC_SRCS))
 | 
			
		||||
OBJS-$(BUILD_LIBVPX) += $(LIBVPX_OBJS)
 | 
			
		||||
LIBS-$(BUILD_LIBVPX) += $(BUILD_PFX)libvpx.a $(BUILD_PFX)libvpx_g.a
 | 
			
		||||
LIBS-$(if $(BUILD_LIBVPX),$(CONFIG_STATIC)) += $(BUILD_PFX)libvpx.a $(BUILD_PFX)libvpx_g.a
 | 
			
		||||
$(BUILD_PFX)libvpx_g.a: $(LIBVPX_OBJS)
 | 
			
		||||
 | 
			
		||||
BUILD_LIBVPX_SO         := $(if $(BUILD_LIBVPX),$(CONFIG_SHARED))
 | 
			
		||||
LIBVPX_SO               := libvpx.so.$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH)
 | 
			
		||||
LIBS-$(BUILD_LIBVPX_SO) += $(BUILD_PFX)$(LIBVPX_SO)
 | 
			
		||||
LIBS-$(BUILD_LIBVPX_SO) += $(BUILD_PFX)$(LIBVPX_SO)\
 | 
			
		||||
                           $(notdir $(LIBVPX_SO_SYMLINKS))
 | 
			
		||||
$(BUILD_PFX)$(LIBVPX_SO): $(LIBVPX_OBJS) libvpx.ver
 | 
			
		||||
$(BUILD_PFX)$(LIBVPX_SO): extralibs += -lm -pthread
 | 
			
		||||
$(BUILD_PFX)$(LIBVPX_SO): extralibs += -lm
 | 
			
		||||
$(BUILD_PFX)$(LIBVPX_SO): SONAME = libvpx.so.$(VERSION_MAJOR)
 | 
			
		||||
$(BUILD_PFX)$(LIBVPX_SO): SO_VERSION_SCRIPT = libvpx.ver
 | 
			
		||||
LIBVPX_SO_SYMLINKS      := $(addprefix $(LIBSUBDIR)/, \
 | 
			
		||||
@@ -197,12 +211,41 @@ libvpx.ver: $(call enabled,CODEC_EXPORTS)
 | 
			
		||||
	$(qexec)echo "local: *; };" >> $@
 | 
			
		||||
CLEAN-OBJS += libvpx.ver
 | 
			
		||||
 | 
			
		||||
$(addprefix $(DIST_DIR)/,$(LIBVPX_SO_SYMLINKS)):
 | 
			
		||||
	@echo "    [LN]      $@"
 | 
			
		||||
	$(qexec)ln -sf $(LIBVPX_SO) $@
 | 
			
		||||
define libvpx_symlink_template
 | 
			
		||||
$(1): $(2)
 | 
			
		||||
	@echo "    [LN]      $$@"
 | 
			
		||||
	$(qexec)ln -sf $(LIBVPX_SO) $$@
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
$(eval $(call libvpx_symlink_template,\
 | 
			
		||||
    $(addprefix $(BUILD_PFX),$(notdir $(LIBVPX_SO_SYMLINKS))),\
 | 
			
		||||
    $(BUILD_PFX)$(LIBVPX_SO)))
 | 
			
		||||
$(eval $(call libvpx_symlink_template,\
 | 
			
		||||
    $(addprefix $(DIST_DIR)/,$(LIBVPX_SO_SYMLINKS)),\
 | 
			
		||||
    $(DIST_DIR)/$(LIBSUBDIR)/$(LIBVPX_SO)))
 | 
			
		||||
 | 
			
		||||
INSTALL-LIBS-$(CONFIG_SHARED) += $(LIBVPX_SO_SYMLINKS)
 | 
			
		||||
INSTALL-LIBS-$(CONFIG_SHARED) += $(LIBSUBDIR)/$(LIBVPX_SO)
 | 
			
		||||
 | 
			
		||||
LIBS-$(BUILD_LIBVPX) += vpx.pc
 | 
			
		||||
vpx.pc: config.mk libs.mk
 | 
			
		||||
	@echo "    [CREATE] $@"
 | 
			
		||||
	$(qexec)echo '# pkg-config file from libvpx $(VERSION_STRING)' > $@
 | 
			
		||||
	$(qexec)echo 'prefix=$(PREFIX)' >> $@
 | 
			
		||||
	$(qexec)echo 'exec_prefix=$${prefix}' >> $@
 | 
			
		||||
	$(qexec)echo 'libdir=$${prefix}/$(LIBSUBDIR)' >> $@
 | 
			
		||||
	$(qexec)echo 'includedir=$${prefix}/include' >> $@
 | 
			
		||||
	$(qexec)echo '' >> $@
 | 
			
		||||
	$(qexec)echo 'Name: vpx' >> $@
 | 
			
		||||
	$(qexec)echo 'Description: WebM Project VPx codec implementation' >> $@
 | 
			
		||||
	$(qexec)echo 'Version: $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH)' >> $@
 | 
			
		||||
	$(qexec)echo 'Requires:' >> $@
 | 
			
		||||
	$(qexec)echo 'Conflicts:' >> $@
 | 
			
		||||
	$(qexec)echo 'Libs: -L$${libdir} -lvpx' >> $@
 | 
			
		||||
	$(qexec)echo 'Cflags: -I$${includedir}' >> $@
 | 
			
		||||
INSTALL-LIBS-yes += $(LIBSUBDIR)/pkgconfig/vpx.pc
 | 
			
		||||
INSTALL_MAPS += $(LIBSUBDIR)/pkgconfig/%.pc %.pc
 | 
			
		||||
CLEAN-OBJS += vpx.pc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
LIBS-$(LIPO_LIBVPX) += libvpx.a
 | 
			
		||||
@@ -230,18 +273,159 @@ endif
 | 
			
		||||
#
 | 
			
		||||
# Add assembler dependencies for configuration and offsets
 | 
			
		||||
#
 | 
			
		||||
#$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm $(BUILD_PFX)vpx_asm_offsets.asm
 | 
			
		||||
$(filter %.s.o,$(OBJS-yes)):   $(BUILD_PFX)vpx_config.asm
 | 
			
		||||
$(filter %.asm.o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm
 | 
			
		||||
$(filter %.s.o,$(OBJS-yes)):     $(BUILD_PFX)vpx_config.asm
 | 
			
		||||
$(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)vpx_config.asm
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Calculate platform- and compiler-specific offsets for hand coded assembly
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
OFFSET_PATTERN:='^[a-zA-Z0-9_]* EQU'
 | 
			
		||||
 | 
			
		||||
ifeq ($(filter icc gcc,$(TGT_CC)), $(TGT_CC))
 | 
			
		||||
    $(BUILD_PFX)asm_com_offsets.asm: $(BUILD_PFX)$(VP8_PREFIX)common/asm_com_offsets.c.S
 | 
			
		||||
	LC_ALL=C grep $(OFFSET_PATTERN) $< | tr -d '$$\#' $(ADS2GAS) > $@
 | 
			
		||||
    $(BUILD_PFX)$(VP8_PREFIX)common/asm_com_offsets.c.S: $(VP8_PREFIX)common/asm_com_offsets.c
 | 
			
		||||
    CLEAN-OBJS += $(BUILD_PFX)asm_com_offsets.asm $(BUILD_PFX)$(VP8_PREFIX)common/asm_com_offsets.c.S
 | 
			
		||||
 | 
			
		||||
    $(BUILD_PFX)asm_enc_offsets.asm: $(BUILD_PFX)$(VP8_PREFIX)encoder/asm_enc_offsets.c.S
 | 
			
		||||
	LC_ALL=C grep $(OFFSET_PATTERN) $< | tr -d '$$\#' $(ADS2GAS) > $@
 | 
			
		||||
    $(BUILD_PFX)$(VP8_PREFIX)encoder/asm_enc_offsets.c.S: $(VP8_PREFIX)encoder/asm_enc_offsets.c
 | 
			
		||||
    CLEAN-OBJS += $(BUILD_PFX)asm_enc_offsets.asm $(BUILD_PFX)$(VP8_PREFIX)encoder/asm_enc_offsets.c.S
 | 
			
		||||
 | 
			
		||||
    $(BUILD_PFX)asm_dec_offsets.asm: $(BUILD_PFX)$(VP8_PREFIX)decoder/asm_dec_offsets.c.S
 | 
			
		||||
	LC_ALL=C grep $(OFFSET_PATTERN) $< | tr -d '$$\#' $(ADS2GAS) > $@
 | 
			
		||||
    $(BUILD_PFX)$(VP8_PREFIX)decoder/asm_dec_offsets.c.S: $(VP8_PREFIX)decoder/asm_dec_offsets.c
 | 
			
		||||
    CLEAN-OBJS += $(BUILD_PFX)asm_dec_offsets.asm $(BUILD_PFX)$(VP8_PREFIX)decoder/asm_dec_offsets.c.S
 | 
			
		||||
else
 | 
			
		||||
  ifeq ($(filter rvct,$(TGT_CC)), $(TGT_CC))
 | 
			
		||||
    asm_com_offsets.asm: obj_int_extract
 | 
			
		||||
    asm_com_offsets.asm: $(VP8_PREFIX)common/asm_com_offsets.c.o
 | 
			
		||||
	./obj_int_extract rvds $< $(ADS2GAS) > $@
 | 
			
		||||
    OBJS-yes += $(VP8_PREFIX)common/asm_com_offsets.c.o
 | 
			
		||||
    CLEAN-OBJS += asm_com_offsets.asm
 | 
			
		||||
    $(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)asm_com_offsets.asm
 | 
			
		||||
 | 
			
		||||
    asm_enc_offsets.asm: obj_int_extract
 | 
			
		||||
    asm_enc_offsets.asm: $(VP8_PREFIX)encoder/asm_enc_offsets.c.o
 | 
			
		||||
	./obj_int_extract rvds $< $(ADS2GAS) > $@
 | 
			
		||||
    OBJS-yes += $(VP8_PREFIX)encoder/asm_enc_offsets.c.o
 | 
			
		||||
    CLEAN-OBJS += asm_enc_offsets.asm
 | 
			
		||||
    $(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)asm_enc_offsets.asm
 | 
			
		||||
 | 
			
		||||
    asm_dec_offsets.asm: obj_int_extract
 | 
			
		||||
    asm_dec_offsets.asm: $(VP8_PREFIX)decoder/asm_dec_offsets.c.o
 | 
			
		||||
	./obj_int_extract rvds $< $(ADS2GAS) > $@
 | 
			
		||||
    OBJS-yes += $(VP8_PREFIX)decoder/asm_dec_offsets.c.o
 | 
			
		||||
    CLEAN-OBJS += asm_dec_offsets.asm
 | 
			
		||||
    $(filter %$(ASM).o,$(OBJS-yes)): $(BUILD_PFX)asm_dec_offsets.asm
 | 
			
		||||
  endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
$(shell $(SRC_PATH_BARE)/build/make/version.sh "$(SRC_PATH_BARE)" $(BUILD_PFX)vpx_version.h)
 | 
			
		||||
CLEAN-OBJS += $(BUILD_PFX)vpx_version.h
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# Rule to generate runtime cpu detection files
 | 
			
		||||
#
 | 
			
		||||
$(OBJS-yes:.o=.d): $(BUILD_PFX)vpx_rtcd.h
 | 
			
		||||
$(BUILD_PFX)vpx_rtcd.h: $(SRC_PATH_BARE)/$(sort $(filter %rtcd_defs.sh,$(CODEC_SRCS)))
 | 
			
		||||
	@echo "    [CREATE] $@"
 | 
			
		||||
	$(qexec)$(SRC_PATH_BARE)/build/make/rtcd.sh --arch=$(TGT_ISA) \
 | 
			
		||||
          --sym=vpx_rtcd \
 | 
			
		||||
          --config=$(target)$(if $(FAT_ARCHS),,-$(TOOLCHAIN)).mk \
 | 
			
		||||
          $(RTCD_OPTIONS) $^ > $@
 | 
			
		||||
CLEAN-OBJS += $(BUILD_PFX)vpx_rtcd.h
 | 
			
		||||
 | 
			
		||||
CODEC_DOC_SRCS += vpx/vpx_codec.h \
 | 
			
		||||
                  vpx/vpx_decoder.h \
 | 
			
		||||
                  vpx/vpx_encoder.h \
 | 
			
		||||
                  vpx/vpx_image.h
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
## libvpx test directives
 | 
			
		||||
##
 | 
			
		||||
 | 
			
		||||
ifeq ($(CONFIG_UNIT_TESTS),yes)
 | 
			
		||||
ifeq ($(CONFIG_EXTERNAL_BUILD),yes)
 | 
			
		||||
ifeq ($(CONFIG_MSVS),yes)
 | 
			
		||||
 | 
			
		||||
LIBVPX_TEST_SRCS=$(filter %_test.cc,$(call enabled,CODEC_SRCS))
 | 
			
		||||
LIBVPX_TEST_BINS=$(sort $(LIBVPX_TEST_SRCS:.cc.o=))
 | 
			
		||||
 | 
			
		||||
gtest.vcproj: $(SRC_PATH_BARE)/third_party/googletest/src/src/gtest-all.cc
 | 
			
		||||
	@echo "    [CREATE] $@"
 | 
			
		||||
	$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh \
 | 
			
		||||
            --lib \
 | 
			
		||||
            --target=$(TOOLCHAIN) \
 | 
			
		||||
            $(if $(CONFIG_STATIC_MSVCRT),--static-crt) \
 | 
			
		||||
            --name=gtest \
 | 
			
		||||
            --proj-guid=EC00E1EC-AF68-4D92-A255-181690D1C9B1 \
 | 
			
		||||
            --ver=$(CONFIG_VS_VERSION) \
 | 
			
		||||
            --src-path-bare="$(SRC_PATH_BARE)" \
 | 
			
		||||
            --out=gtest.vcproj $(SRC_PATH_BARE)/third_party/googletest/src/src/gtest-all.cc \
 | 
			
		||||
            -I. -I"$(SRC_PATH_BARE)/third_party/googletest/src/include" -I"$(SRC_PATH_BARE)/third_party/googletest/src"
 | 
			
		||||
 | 
			
		||||
PROJECTS-$(CONFIG_MSVS) += gtest.vcproj
 | 
			
		||||
 | 
			
		||||
define unit_test_vcproj_template
 | 
			
		||||
$(notdir $(1:.cc=.vcproj)): $(SRC_PATH_BARE)/$(1)
 | 
			
		||||
	@echo "    [vcproj] $$@"
 | 
			
		||||
	$$(SRC_PATH_BARE)/build/make/gen_msvs_proj.sh\
 | 
			
		||||
            --exe\
 | 
			
		||||
            --target=$$(TOOLCHAIN)\
 | 
			
		||||
            --name=$(notdir $(1:.cc=))\
 | 
			
		||||
            --ver=$$(CONFIG_VS_VERSION)\
 | 
			
		||||
            $$(if $$(CONFIG_STATIC_MSVCRT),--static-crt) \
 | 
			
		||||
            --out=$$@ $$(INTERNAL_CFLAGS) $$(CFLAGS) \
 | 
			
		||||
            -I. -I"$(SRC_PATH_BARE)/third_party/googletest/src/include" \
 | 
			
		||||
            -L. -lvpxmt -lwinmm -lgtestmt $$^
 | 
			
		||||
endef
 | 
			
		||||
 | 
			
		||||
$(foreach proj,$(LIBVPX_TEST_BINS),\
 | 
			
		||||
    $(eval $(call unit_test_vcproj_template,$(proj))))
 | 
			
		||||
 | 
			
		||||
PROJECTS-$(CONFIG_MSVS) += $(foreach proj,$(LIBVPX_TEST_BINS),\
 | 
			
		||||
     $(notdir $(proj:.cc=.vcproj)))
 | 
			
		||||
 | 
			
		||||
test::
 | 
			
		||||
	@set -e; for t in $(addprefix Win32/Release/,$(notdir $(LIBVPX_TEST_BINS:.cc=.exe))); do $$t; done
 | 
			
		||||
endif
 | 
			
		||||
else
 | 
			
		||||
 | 
			
		||||
include $(SRC_PATH_BARE)/third_party/googletest/gtest.mk
 | 
			
		||||
GTEST_SRCS := $(addprefix third_party/googletest/src/,$(call enabled,GTEST_SRCS))
 | 
			
		||||
GTEST_OBJS=$(call objs,$(GTEST_SRCS))
 | 
			
		||||
$(GTEST_OBJS) $(GTEST_OBJS:.o=.d): CFLAGS += -I$(SRC_PATH_BARE)/third_party/googletest/src
 | 
			
		||||
$(GTEST_OBJS) $(GTEST_OBJS:.o=.d): CFLAGS += -I$(SRC_PATH_BARE)/third_party/googletest/src/include
 | 
			
		||||
OBJS-$(BUILD_LIBVPX) += $(GTEST_OBJS)
 | 
			
		||||
LIBS-$(BUILD_LIBVPX) += $(BUILD_PFX)libgtest.a $(BUILD_PFX)libgtest_g.a
 | 
			
		||||
$(BUILD_PFX)libgtest_g.a: $(GTEST_OBJS)
 | 
			
		||||
 | 
			
		||||
LIBVPX_TEST_SRCS=$(filter %_test.cc,$(call enabled,CODEC_SRCS))
 | 
			
		||||
LIBVPX_TEST_OBJS=$(call objs,$(LIBVPX_TEST_SRCS))
 | 
			
		||||
$(LIBVPX_TEST_OBJS) $(LIBVPX_TEST_OBJS:.o=.d): CFLAGS += -I$(SRC_PATH_BARE)/third_party/googletest/src
 | 
			
		||||
$(LIBVPX_TEST_OBJS) $(LIBVPX_TEST_OBJS:.o=.d): CFLAGS += -I$(SRC_PATH_BARE)/third_party/googletest/src/include
 | 
			
		||||
LIBVPX_TEST_BINS=$(sort $(LIBVPX_TEST_OBJS:.cc.o=))
 | 
			
		||||
OBJS-$(BUILD_LIBVPX) += $(LIBVPX_TEST_OBJS)
 | 
			
		||||
 | 
			
		||||
$(foreach bin,$(LIBVPX_TEST_BINS),\
 | 
			
		||||
    $(if $(BUILD_LIBVPX),$(eval $(bin): libvpx.a libgtest.a ))\
 | 
			
		||||
    $(if $(BUILD_LIBVPX),$(eval $(call linkerxx_template,$(bin),\
 | 
			
		||||
        $(bin).cc.o \
 | 
			
		||||
        -L. -lvpx -lgtest -lpthread -lm)\
 | 
			
		||||
        )))\
 | 
			
		||||
    $(if $(LIPO_LIBS),$(eval $(call lipo_bin_template,$(bin))))\
 | 
			
		||||
 | 
			
		||||
test:: $(LIBVPX_TEST_BINS)
 | 
			
		||||
	@set -e; for t in $(LIBVPX_TEST_BINS); do $$t; done
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
## documentation directives
 | 
			
		||||
##
 | 
			
		||||
CLEAN-OBJS += libs.doxy
 | 
			
		||||
DOCS-yes += libs.doxy
 | 
			
		||||
libs.doxy: $(CODEC_DOC_SRCS)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										18
									
								
								mainpage.dox
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								mainpage.dox
									
									
									
									
									
								
							@@ -12,8 +12,12 @@
 | 
			
		||||
 | 
			
		||||
  This distribution of the WebM VP8 Codec SDK includes the following support:
 | 
			
		||||
 | 
			
		||||
  \if vp8_encoder    - \ref vp8_encoder   \endif
 | 
			
		||||
  \if vp8_decoder    - \ref vp8_decoder   \endif
 | 
			
		||||
  \if vp8_encoder
 | 
			
		||||
  - \ref vp8_encoder
 | 
			
		||||
  \endif
 | 
			
		||||
  \if vp8_decoder
 | 
			
		||||
  - \ref vp8_decoder
 | 
			
		||||
  \endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  \section main_startpoints Starting Points
 | 
			
		||||
@@ -24,14 +28,18 @@
 | 
			
		||||
  - Read the \ref samples "sample code" for examples of how to interact with the
 | 
			
		||||
    codec.
 | 
			
		||||
  - \ref codec reference
 | 
			
		||||
    \if encoder - \ref encoder reference \endif
 | 
			
		||||
    \if decoder - \ref decoder reference \endif
 | 
			
		||||
    \if encoder
 | 
			
		||||
    - \ref encoder reference
 | 
			
		||||
    \endif
 | 
			
		||||
    \if decoder
 | 
			
		||||
    - \ref decoder reference
 | 
			
		||||
    \endif
 | 
			
		||||
 | 
			
		||||
  \section main_support Support Options & FAQ
 | 
			
		||||
  The WebM project is an open source project supported by its community. For
 | 
			
		||||
  questions about this SDK, please mail the apps-devel@webmproject.org list.
 | 
			
		||||
  To contribute, see http://www.webmproject.org/code/contribute and mail
 | 
			
		||||
  vpx-devel@webmproject.org.
 | 
			
		||||
  codec-devel@webmproject.org.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*!\page changelog CHANGELOG
 | 
			
		||||
 
 | 
			
		||||
@@ -20,8 +20,6 @@
 | 
			
		||||
 * Still in the public domain.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>    /* for stupid systems */
 | 
			
		||||
 | 
			
		||||
#include <string.h>   /* for memcpy() */
 | 
			
		||||
 | 
			
		||||
#include "md5_utils.h"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								solution.mk
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								solution.mk
									
									
									
									
									
								
							@@ -9,46 +9,22 @@
 | 
			
		||||
##
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
ifeq ($(ARCH_ARM),yes)
 | 
			
		||||
ARM_DEVELOP=no
 | 
			
		||||
ARM_DEVELOP:=$(if $(filter %vpx.vcproj,$(wildcard *.vcproj)),yes)
 | 
			
		||||
 | 
			
		||||
ifeq ($(ARM_DEVELOP),yes)
 | 
			
		||||
vpx.sln:
 | 
			
		||||
	@echo "    [COPY] $@"
 | 
			
		||||
	@cp $(SRC_PATH_BARE)/build/arm-wince-vs8/vpx.sln .
 | 
			
		||||
PROJECTS-yes += vpx.sln
 | 
			
		||||
else
 | 
			
		||||
vpx.sln: $(wildcard *.vcproj)
 | 
			
		||||
	@echo "    [CREATE] $@"
 | 
			
		||||
	$(SRC_PATH_BARE)/build/make/gen_msvs_sln.sh \
 | 
			
		||||
            $(if $(filter %vpx.vcproj,$^),--dep=vpxdec:vpx) \
 | 
			
		||||
            $(if $(filter %vpx.vcproj,$^),--dep=xma:vpx) \
 | 
			
		||||
            --ver=$(CONFIG_VS_VERSION)\
 | 
			
		||||
            --target=$(TOOLCHAIN)\
 | 
			
		||||
            --out=$@ $^
 | 
			
		||||
vpx.sln.mk: vpx.sln
 | 
			
		||||
	@true
 | 
			
		||||
 | 
			
		||||
PROJECTS-yes += vpx.sln vpx.sln.mk
 | 
			
		||||
-include vpx.sln.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
else
 | 
			
		||||
vpx.sln: $(wildcard *.vcproj)
 | 
			
		||||
	@echo "    [CREATE] $@"
 | 
			
		||||
	$(SRC_PATH_BARE)/build/make/gen_msvs_sln.sh \
 | 
			
		||||
            $(if $(filter %vpx.vcproj,$^),\
 | 
			
		||||
                $(foreach vcp,$(filter-out %vpx.vcproj,$^),\
 | 
			
		||||
                  --dep=$(vcp:.vcproj=):vpx)) \
 | 
			
		||||
            --ver=$(CONFIG_VS_VERSION)\
 | 
			
		||||
            --out=$@ $^
 | 
			
		||||
                $(foreach vcp,$(filter-out %vpx.vcproj %gtest.vcproj %obj_int_extract.vcproj,$^),\
 | 
			
		||||
                  --dep=$(vcp:.vcproj=):vpx) \
 | 
			
		||||
                $(foreach vcp,$(filter %_test.vcproj,$^),\
 | 
			
		||||
                  --dep=$(vcp:.vcproj=):gtest)) \
 | 
			
		||||
                  --dep=vpx:obj_int_extract \
 | 
			
		||||
                  --ver=$(CONFIG_VS_VERSION)\
 | 
			
		||||
                  --out=$@ $^
 | 
			
		||||
vpx.sln.mk: vpx.sln
 | 
			
		||||
	@true
 | 
			
		||||
 | 
			
		||||
PROJECTS-yes += vpx.sln vpx.sln.mk
 | 
			
		||||
-include vpx.sln.mk
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Always install this file, as it is an unconditional post-build rule.
 | 
			
		||||
INSTALL_MAPS += src/%     $(SRC_PATH_BARE)/%
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								third_party/googletest/README.webm
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								third_party/googletest/README.webm
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
URL: http://code.google.com/p/googletest/
 | 
			
		||||
Version: 1.6.0
 | 
			
		||||
License: BSD
 | 
			
		||||
License File: COPYING
 | 
			
		||||
 | 
			
		||||
Description:
 | 
			
		||||
Google's framework for writing C++ tests on a variety of platforms
 | 
			
		||||
(Linux, Mac OS X, Windows, Windows CE, Symbian, etc).  Based on the
 | 
			
		||||
xUnit architecture.  Supports automatic test discovery, a rich set of
 | 
			
		||||
assertions, user-defined assertions, death tests, fatal and non-fatal
 | 
			
		||||
failures, various options for running the tests, and XML test report
 | 
			
		||||
generation.
 | 
			
		||||
 | 
			
		||||
Local Modifications:
 | 
			
		||||
None.
 | 
			
		||||
							
								
								
									
										1
									
								
								third_party/googletest/gtest.mk
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								third_party/googletest/gtest.mk
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
GTEST_SRCS-yes += src/gtest-all.cc 
 | 
			
		||||
							
								
								
									
										130
									
								
								third_party/googletest/src/CHANGES
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								third_party/googletest/src/CHANGES
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,130 @@
 | 
			
		||||
Changes for 1.6.0:
 | 
			
		||||
 | 
			
		||||
* New feature: ADD_FAILURE_AT() for reporting a test failure at the
 | 
			
		||||
  given source location -- useful for writing testing utilities.
 | 
			
		||||
* New feature: the universal value printer is moved from Google Mock
 | 
			
		||||
  to Google Test.
 | 
			
		||||
* New feature: type parameters and value parameters are reported in
 | 
			
		||||
  the XML report now.
 | 
			
		||||
* A gtest_disable_pthreads CMake option.
 | 
			
		||||
* Colored output works in GNU Screen sessions now.
 | 
			
		||||
* Parameters of value-parameterized tests are now printed in the
 | 
			
		||||
  textual output.
 | 
			
		||||
* Failures from ad hoc test assertions run before RUN_ALL_TESTS() are
 | 
			
		||||
  now correctly reported.
 | 
			
		||||
* Arguments of ASSERT_XY and EXPECT_XY no longer need to support << to
 | 
			
		||||
  ostream.
 | 
			
		||||
* More complete handling of exceptions.
 | 
			
		||||
* GTEST_ASSERT_XY can be used instead of ASSERT_XY in case the latter
 | 
			
		||||
  name is already used by another library.
 | 
			
		||||
* --gtest_catch_exceptions is now true by default, allowing a test
 | 
			
		||||
  program to continue after an exception is thrown.
 | 
			
		||||
* Value-parameterized test fixtures can now derive from Test and
 | 
			
		||||
  WithParamInterface<T> separately, easing conversion of legacy tests.
 | 
			
		||||
* Death test messages are clearly marked to make them more
 | 
			
		||||
  distinguishable from other messages.
 | 
			
		||||
* Compatibility fixes for Android, Google Native Client, MinGW, HP UX,
 | 
			
		||||
  PowerPC, Lucid autotools, libCStd, Sun C++, Borland C++ Builder (Code Gear),
 | 
			
		||||
  IBM XL C++ (Visual Age C++), and C++0x.
 | 
			
		||||
* Bug fixes and implementation clean-ups.
 | 
			
		||||
* Potentially incompatible changes: disables the harmful 'make install'
 | 
			
		||||
  command in autotools.
 | 
			
		||||
 | 
			
		||||
Changes for 1.5.0:
 | 
			
		||||
 | 
			
		||||
 * New feature: assertions can be safely called in multiple threads
 | 
			
		||||
   where the pthreads library is available.
 | 
			
		||||
 * New feature: predicates used inside EXPECT_TRUE() and friends
 | 
			
		||||
   can now generate custom failure messages.
 | 
			
		||||
 * New feature: Google Test can now be compiled as a DLL.
 | 
			
		||||
 * New feature: fused source files are included.
 | 
			
		||||
 * New feature: prints help when encountering unrecognized Google Test flags.
 | 
			
		||||
 * Experimental feature: CMake build script (requires CMake 2.6.4+).
 | 
			
		||||
 * Experimental feature: the Pump script for meta programming.
 | 
			
		||||
 * double values streamed to an assertion are printed with enough precision
 | 
			
		||||
   to differentiate any two different values.
 | 
			
		||||
 * Google Test now works on Solaris and AIX.
 | 
			
		||||
 * Build and test script improvements.
 | 
			
		||||
 * Bug fixes and implementation clean-ups.
 | 
			
		||||
 | 
			
		||||
 Potentially breaking changes:
 | 
			
		||||
 | 
			
		||||
 * Stopped supporting VC++ 7.1 with exceptions disabled.
 | 
			
		||||
 * Dropped support for 'make install'.
 | 
			
		||||
 | 
			
		||||
Changes for 1.4.0:
 | 
			
		||||
 | 
			
		||||
 * New feature: the event listener API
 | 
			
		||||
 * New feature: test shuffling
 | 
			
		||||
 * New feature: the XML report format is closer to junitreport and can
 | 
			
		||||
   be parsed by Hudson now.
 | 
			
		||||
 * New feature: when a test runs under Visual Studio, its failures are
 | 
			
		||||
   integrated in the IDE.
 | 
			
		||||
 * New feature: /MD(d) versions of VC++ projects.
 | 
			
		||||
 * New feature: elapsed time for the tests is printed by default.
 | 
			
		||||
 * New feature: comes with a TR1 tuple implementation such that Boost
 | 
			
		||||
   is no longer needed for Combine().
 | 
			
		||||
 * New feature: EXPECT_DEATH_IF_SUPPORTED macro and friends.
 | 
			
		||||
 * New feature: the Xcode project can now produce static gtest
 | 
			
		||||
   libraries in addition to a framework.
 | 
			
		||||
 * Compatibility fixes for Solaris, Cygwin, minGW, Windows Mobile,
 | 
			
		||||
   Symbian, gcc, and C++Builder.
 | 
			
		||||
 * Bug fixes and implementation clean-ups.
 | 
			
		||||
 | 
			
		||||
Changes for 1.3.0:
 | 
			
		||||
 | 
			
		||||
 * New feature: death tests on Windows, Cygwin, and Mac.
 | 
			
		||||
 * New feature: ability to use Google Test assertions in other testing
 | 
			
		||||
   frameworks.
 | 
			
		||||
 * New feature: ability to run disabled test via
 | 
			
		||||
   --gtest_also_run_disabled_tests.
 | 
			
		||||
 * New feature: the --help flag for printing the usage.
 | 
			
		||||
 * New feature: access to Google Test flag values in user code.
 | 
			
		||||
 * New feature: a script that packs Google Test into one .h and one
 | 
			
		||||
   .cc file for easy deployment.
 | 
			
		||||
 * New feature: support for distributing test functions to multiple
 | 
			
		||||
   machines (requires support from the test runner).
 | 
			
		||||
 * Bug fixes and implementation clean-ups.
 | 
			
		||||
 | 
			
		||||
Changes for 1.2.1:
 | 
			
		||||
 | 
			
		||||
 * Compatibility fixes for Linux IA-64 and IBM z/OS.
 | 
			
		||||
 * Added support for using Boost and other TR1 implementations.
 | 
			
		||||
 * Changes to the build scripts to support upcoming release of Google C++
 | 
			
		||||
   Mocking Framework.
 | 
			
		||||
 * Added Makefile to the distribution package.
 | 
			
		||||
 * Improved build instructions in README.
 | 
			
		||||
 | 
			
		||||
Changes for 1.2.0:
 | 
			
		||||
 | 
			
		||||
 * New feature: value-parameterized tests.
 | 
			
		||||
 * New feature: the ASSERT/EXPECT_(NON)FATAL_FAILURE(_ON_ALL_THREADS)
 | 
			
		||||
   macros.
 | 
			
		||||
 * Changed the XML report format to match JUnit/Ant's.
 | 
			
		||||
 * Added tests to the Xcode project.
 | 
			
		||||
 * Added scons/SConscript for building with SCons.
 | 
			
		||||
 * Added src/gtest-all.cc for building Google Test from a single file.
 | 
			
		||||
 * Fixed compatibility with Solaris and z/OS.
 | 
			
		||||
 * Enabled running Python tests on systems with python 2.3 installed,
 | 
			
		||||
   e.g. Mac OS X 10.4.
 | 
			
		||||
 * Bug fixes.
 | 
			
		||||
 | 
			
		||||
Changes for 1.1.0:
 | 
			
		||||
 | 
			
		||||
 * New feature: type-parameterized tests.
 | 
			
		||||
 * New feature: exception assertions.
 | 
			
		||||
 * New feature: printing elapsed time of tests.
 | 
			
		||||
 * Improved the robustness of death tests.
 | 
			
		||||
 * Added an Xcode project and samples.
 | 
			
		||||
 * Adjusted the output format on Windows to be understandable by Visual Studio.
 | 
			
		||||
 * Minor bug fixes.
 | 
			
		||||
 | 
			
		||||
Changes for 1.0.1:
 | 
			
		||||
 | 
			
		||||
 * Added project files for Visual Studio 7.1.
 | 
			
		||||
 * Fixed issues with compiling on Mac OS X.
 | 
			
		||||
 * Fixed issues with compiling on Cygwin.
 | 
			
		||||
 | 
			
		||||
Changes for 1.0.0:
 | 
			
		||||
 | 
			
		||||
 * Initial Open Source release of Google Test
 | 
			
		||||
							
								
								
									
										240
									
								
								third_party/googletest/src/CMakeLists.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										240
									
								
								third_party/googletest/src/CMakeLists.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,240 @@
 | 
			
		||||
########################################################################
 | 
			
		||||
# CMake build script for Google Test.
 | 
			
		||||
#
 | 
			
		||||
# To run the tests for Google Test itself on Linux, use 'make test' or
 | 
			
		||||
# ctest.  You can select which tests to run using 'ctest -R regex'.
 | 
			
		||||
# For more options, run 'ctest --help'.
 | 
			
		||||
 | 
			
		||||
# BUILD_SHARED_LIBS is a standard CMake variable, but we declare it here to
 | 
			
		||||
# make it prominent in the GUI.
 | 
			
		||||
option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF)
 | 
			
		||||
 | 
			
		||||
# When other libraries are using a shared version of runtime libraries,
 | 
			
		||||
# Google Test also has to use one.
 | 
			
		||||
option(
 | 
			
		||||
  gtest_force_shared_crt
 | 
			
		||||
  "Use shared (DLL) run-time lib even when Google Test is built as static lib."
 | 
			
		||||
  OFF)
 | 
			
		||||
 | 
			
		||||
option(gtest_build_tests "Build all of gtest's own tests." OFF)
 | 
			
		||||
 | 
			
		||||
option(gtest_build_samples "Build gtest's sample programs." OFF)
 | 
			
		||||
 | 
			
		||||
option(gtest_disable_pthreads "Disable uses of pthreads in gtest." OFF)
 | 
			
		||||
 | 
			
		||||
# Defines pre_project_set_up_hermetic_build() and set_up_hermetic_build().
 | 
			
		||||
include(cmake/hermetic_build.cmake OPTIONAL)
 | 
			
		||||
 | 
			
		||||
if (COMMAND pre_project_set_up_hermetic_build)
 | 
			
		||||
  pre_project_set_up_hermetic_build()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
########################################################################
 | 
			
		||||
#
 | 
			
		||||
# Project-wide settings
 | 
			
		||||
 | 
			
		||||
# Name of the project.
 | 
			
		||||
#
 | 
			
		||||
# CMake files in this project can refer to the root source directory
 | 
			
		||||
# as ${gtest_SOURCE_DIR} and to the root binary directory as
 | 
			
		||||
# ${gtest_BINARY_DIR}.
 | 
			
		||||
# Language "C" is required for find_package(Threads).
 | 
			
		||||
project(gtest CXX C)
 | 
			
		||||
cmake_minimum_required(VERSION 2.6.2)
 | 
			
		||||
 | 
			
		||||
if (COMMAND set_up_hermetic_build)
 | 
			
		||||
  set_up_hermetic_build()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# Define helper functions and macros used by Google Test.
 | 
			
		||||
include(cmake/internal_utils.cmake)
 | 
			
		||||
 | 
			
		||||
config_compiler_and_linker()  # Defined in internal_utils.cmake.
 | 
			
		||||
 | 
			
		||||
# Where Google Test's .h files can be found.
 | 
			
		||||
include_directories(
 | 
			
		||||
  ${gtest_SOURCE_DIR}/include
 | 
			
		||||
  ${gtest_SOURCE_DIR})
 | 
			
		||||
 | 
			
		||||
# Where Google Test's libraries can be found.
 | 
			
		||||
link_directories(${gtest_BINARY_DIR}/src)
 | 
			
		||||
 | 
			
		||||
########################################################################
 | 
			
		||||
#
 | 
			
		||||
# Defines the gtest & gtest_main libraries.  User tests should link
 | 
			
		||||
# with one of them.
 | 
			
		||||
 | 
			
		||||
# Google Test libraries.  We build them using more strict warnings than what
 | 
			
		||||
# are used for other targets, to ensure that gtest can be compiled by a user
 | 
			
		||||
# aggressive about warnings.
 | 
			
		||||
cxx_library(gtest "${cxx_strict}" src/gtest-all.cc)
 | 
			
		||||
cxx_library(gtest_main "${cxx_strict}" src/gtest_main.cc)
 | 
			
		||||
target_link_libraries(gtest_main gtest)
 | 
			
		||||
 | 
			
		||||
########################################################################
 | 
			
		||||
#
 | 
			
		||||
# Samples on how to link user tests with gtest or gtest_main.
 | 
			
		||||
#
 | 
			
		||||
# They are not built by default.  To build them, set the
 | 
			
		||||
# gtest_build_samples option to ON.  You can do it by running ccmake
 | 
			
		||||
# or specifying the -Dbuild_gtest_samples=ON flag when running cmake.
 | 
			
		||||
 | 
			
		||||
if (gtest_build_samples)
 | 
			
		||||
  cxx_executable(sample1_unittest samples gtest_main samples/sample1.cc)
 | 
			
		||||
  cxx_executable(sample2_unittest samples gtest_main samples/sample2.cc)
 | 
			
		||||
  cxx_executable(sample3_unittest samples gtest_main)
 | 
			
		||||
  cxx_executable(sample4_unittest samples gtest_main samples/sample4.cc)
 | 
			
		||||
  cxx_executable(sample5_unittest samples gtest_main samples/sample1.cc)
 | 
			
		||||
  cxx_executable(sample6_unittest samples gtest_main)
 | 
			
		||||
  cxx_executable(sample7_unittest samples gtest_main)
 | 
			
		||||
  cxx_executable(sample8_unittest samples gtest_main)
 | 
			
		||||
  cxx_executable(sample9_unittest samples gtest)
 | 
			
		||||
  cxx_executable(sample10_unittest samples gtest)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
########################################################################
 | 
			
		||||
#
 | 
			
		||||
# Google Test's own tests.
 | 
			
		||||
#
 | 
			
		||||
# You can skip this section if you aren't interested in testing
 | 
			
		||||
# Google Test itself.
 | 
			
		||||
#
 | 
			
		||||
# The tests are not built by default.  To build them, set the
 | 
			
		||||
# gtest_build_tests option to ON.  You can do it by running ccmake
 | 
			
		||||
# or specifying the -Dgtest_build_tests=ON flag when running cmake.
 | 
			
		||||
 | 
			
		||||
if (gtest_build_tests)
 | 
			
		||||
  # This must be set in the root directory for the tests to be run by
 | 
			
		||||
  # 'make test' or ctest.
 | 
			
		||||
  enable_testing()
 | 
			
		||||
 | 
			
		||||
  ############################################################
 | 
			
		||||
  # C++ tests built with standard compiler flags.
 | 
			
		||||
 | 
			
		||||
  cxx_test(gtest-death-test_test gtest_main)
 | 
			
		||||
  cxx_test(gtest_environment_test gtest)
 | 
			
		||||
  cxx_test(gtest-filepath_test gtest_main)
 | 
			
		||||
  cxx_test(gtest-linked_ptr_test gtest_main)
 | 
			
		||||
  cxx_test(gtest-listener_test gtest_main)
 | 
			
		||||
  cxx_test(gtest_main_unittest gtest_main)
 | 
			
		||||
  cxx_test(gtest-message_test gtest_main)
 | 
			
		||||
  cxx_test(gtest_no_test_unittest gtest)
 | 
			
		||||
  cxx_test(gtest-options_test gtest_main)
 | 
			
		||||
  cxx_test(gtest-param-test_test gtest
 | 
			
		||||
    test/gtest-param-test2_test.cc)
 | 
			
		||||
  cxx_test(gtest-port_test gtest_main)
 | 
			
		||||
  cxx_test(gtest_pred_impl_unittest gtest_main)
 | 
			
		||||
  cxx_test(gtest-printers_test gtest_main)
 | 
			
		||||
  cxx_test(gtest_prod_test gtest_main
 | 
			
		||||
    test/production.cc)
 | 
			
		||||
  cxx_test(gtest_repeat_test gtest)
 | 
			
		||||
  cxx_test(gtest_sole_header_test gtest_main)
 | 
			
		||||
  cxx_test(gtest_stress_test gtest)
 | 
			
		||||
  cxx_test(gtest-test-part_test gtest_main)
 | 
			
		||||
  cxx_test(gtest_throw_on_failure_ex_test gtest)
 | 
			
		||||
  cxx_test(gtest-typed-test_test gtest_main
 | 
			
		||||
    test/gtest-typed-test2_test.cc)
 | 
			
		||||
  cxx_test(gtest_unittest gtest_main)
 | 
			
		||||
  cxx_test(gtest-unittest-api_test gtest)
 | 
			
		||||
 | 
			
		||||
  ############################################################
 | 
			
		||||
  # C++ tests built with non-standard compiler flags.
 | 
			
		||||
 | 
			
		||||
  cxx_library(gtest_no_exception "${cxx_no_exception}"
 | 
			
		||||
    src/gtest-all.cc)
 | 
			
		||||
  cxx_library(gtest_main_no_exception "${cxx_no_exception}"
 | 
			
		||||
    src/gtest-all.cc src/gtest_main.cc)
 | 
			
		||||
  cxx_library(gtest_main_no_rtti "${cxx_no_rtti}"
 | 
			
		||||
    src/gtest-all.cc src/gtest_main.cc)
 | 
			
		||||
 | 
			
		||||
  cxx_test_with_flags(gtest-death-test_ex_nocatch_test
 | 
			
		||||
    "${cxx_exception} -DGTEST_ENABLE_CATCH_EXCEPTIONS_=0"
 | 
			
		||||
    gtest test/gtest-death-test_ex_test.cc)
 | 
			
		||||
  cxx_test_with_flags(gtest-death-test_ex_catch_test
 | 
			
		||||
    "${cxx_exception} -DGTEST_ENABLE_CATCH_EXCEPTIONS_=1"
 | 
			
		||||
    gtest test/gtest-death-test_ex_test.cc)
 | 
			
		||||
 | 
			
		||||
  cxx_test_with_flags(gtest_no_rtti_unittest "${cxx_no_rtti}"
 | 
			
		||||
    gtest_main_no_rtti test/gtest_unittest.cc)
 | 
			
		||||
 | 
			
		||||
  cxx_shared_library(gtest_dll "${cxx_default}"
 | 
			
		||||
    src/gtest-all.cc src/gtest_main.cc)
 | 
			
		||||
 | 
			
		||||
  cxx_executable_with_flags(gtest_dll_test_ "${cxx_default}"
 | 
			
		||||
    gtest_dll test/gtest_all_test.cc)
 | 
			
		||||
  set_target_properties(gtest_dll_test_
 | 
			
		||||
                        PROPERTIES
 | 
			
		||||
                        COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
 | 
			
		||||
 | 
			
		||||
  if (NOT MSVC OR NOT MSVC_VERSION EQUAL 1600)
 | 
			
		||||
    # The C++ Standard specifies tuple_element<int, class>.
 | 
			
		||||
    # Yet MSVC 10's <utility> declares tuple_element<size_t, class>.
 | 
			
		||||
    # That declaration conflicts with our own standard-conforming
 | 
			
		||||
    # tuple implementation.  Therefore using our own tuple with
 | 
			
		||||
    # MSVC 10 doesn't compile.
 | 
			
		||||
    cxx_library(gtest_main_use_own_tuple "${cxx_use_own_tuple}"
 | 
			
		||||
      src/gtest-all.cc src/gtest_main.cc)
 | 
			
		||||
 | 
			
		||||
    cxx_test_with_flags(gtest-tuple_test "${cxx_use_own_tuple}"
 | 
			
		||||
      gtest_main_use_own_tuple test/gtest-tuple_test.cc)
 | 
			
		||||
 | 
			
		||||
    cxx_test_with_flags(gtest_use_own_tuple_test "${cxx_use_own_tuple}"
 | 
			
		||||
      gtest_main_use_own_tuple
 | 
			
		||||
      test/gtest-param-test_test.cc test/gtest-param-test2_test.cc)
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  ############################################################
 | 
			
		||||
  # Python tests.
 | 
			
		||||
 | 
			
		||||
  cxx_executable(gtest_break_on_failure_unittest_ test gtest)
 | 
			
		||||
  py_test(gtest_break_on_failure_unittest)
 | 
			
		||||
 | 
			
		||||
  cxx_executable_with_flags(
 | 
			
		||||
    gtest_catch_exceptions_no_ex_test_
 | 
			
		||||
    "${cxx_no_exception}"
 | 
			
		||||
    gtest_main_no_exception
 | 
			
		||||
    test/gtest_catch_exceptions_test_.cc)
 | 
			
		||||
  cxx_executable_with_flags(
 | 
			
		||||
    gtest_catch_exceptions_ex_test_
 | 
			
		||||
    "${cxx_exception}"
 | 
			
		||||
    gtest_main
 | 
			
		||||
    test/gtest_catch_exceptions_test_.cc)
 | 
			
		||||
  py_test(gtest_catch_exceptions_test)
 | 
			
		||||
 | 
			
		||||
  cxx_executable(gtest_color_test_ test gtest)
 | 
			
		||||
  py_test(gtest_color_test)
 | 
			
		||||
 | 
			
		||||
  cxx_executable(gtest_env_var_test_ test gtest)
 | 
			
		||||
  py_test(gtest_env_var_test)
 | 
			
		||||
 | 
			
		||||
  cxx_executable(gtest_filter_unittest_ test gtest)
 | 
			
		||||
  py_test(gtest_filter_unittest)
 | 
			
		||||
 | 
			
		||||
  cxx_executable(gtest_help_test_ test gtest_main)
 | 
			
		||||
  py_test(gtest_help_test)
 | 
			
		||||
 | 
			
		||||
  cxx_executable(gtest_list_tests_unittest_ test gtest)
 | 
			
		||||
  py_test(gtest_list_tests_unittest)
 | 
			
		||||
 | 
			
		||||
  cxx_executable(gtest_output_test_ test gtest)
 | 
			
		||||
  py_test(gtest_output_test)
 | 
			
		||||
 | 
			
		||||
  cxx_executable(gtest_shuffle_test_ test gtest)
 | 
			
		||||
  py_test(gtest_shuffle_test)
 | 
			
		||||
 | 
			
		||||
  cxx_executable(gtest_throw_on_failure_test_ test gtest_no_exception)
 | 
			
		||||
  set_target_properties(gtest_throw_on_failure_test_
 | 
			
		||||
    PROPERTIES
 | 
			
		||||
    COMPILE_FLAGS "${cxx_no_exception}")
 | 
			
		||||
  py_test(gtest_throw_on_failure_test)
 | 
			
		||||
 | 
			
		||||
  cxx_executable(gtest_uninitialized_test_ test gtest)
 | 
			
		||||
  py_test(gtest_uninitialized_test)
 | 
			
		||||
 | 
			
		||||
  cxx_executable(gtest_xml_outfile1_test_ test gtest_main)
 | 
			
		||||
  cxx_executable(gtest_xml_outfile2_test_ test gtest_main)
 | 
			
		||||
  py_test(gtest_xml_outfiles_test)
 | 
			
		||||
 | 
			
		||||
  cxx_executable(gtest_xml_output_unittest_ test gtest)
 | 
			
		||||
  py_test(gtest_xml_output_unittest)
 | 
			
		||||
endif()
 | 
			
		||||
							
								
								
									
										37
									
								
								third_party/googletest/src/CONTRIBUTORS
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								third_party/googletest/src/CONTRIBUTORS
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
# This file contains a list of people who've made non-trivial
 | 
			
		||||
# contribution to the Google C++ Testing Framework project.  People
 | 
			
		||||
# who commit code to the project are encouraged to add their names
 | 
			
		||||
# here.  Please keep the list sorted by first names.
 | 
			
		||||
 | 
			
		||||
Ajay Joshi <jaj@google.com>
 | 
			
		||||
Balázs Dán <balazs.dan@gmail.com>
 | 
			
		||||
Bharat Mediratta <bharat@menalto.com>
 | 
			
		||||
Chandler Carruth <chandlerc@google.com>
 | 
			
		||||
Chris Prince <cprince@google.com>
 | 
			
		||||
Chris Taylor <taylorc@google.com>
 | 
			
		||||
Dan Egnor <egnor@google.com>
 | 
			
		||||
Eric Roman <eroman@chromium.org>
 | 
			
		||||
Hady Zalek <hady.zalek@gmail.com>
 | 
			
		||||
Jeffrey Yasskin <jyasskin@google.com>
 | 
			
		||||
Jói Sigurðsson <joi@google.com>
 | 
			
		||||
Keir Mierle <mierle@gmail.com>
 | 
			
		||||
Keith Ray <keith.ray@gmail.com>
 | 
			
		||||
Kenton Varda <kenton@google.com>
 | 
			
		||||
Manuel Klimek <klimek@google.com>
 | 
			
		||||
Markus Heule <markus.heule@gmail.com>
 | 
			
		||||
Mika Raento <mikie@iki.fi>
 | 
			
		||||
Miklós Fazekas <mfazekas@szemafor.com>
 | 
			
		||||
Pasi Valminen <pasi.valminen@gmail.com>
 | 
			
		||||
Patrick Hanna <phanna@google.com>
 | 
			
		||||
Patrick Riley <pfr@google.com>
 | 
			
		||||
Peter Kaminski <piotrk@google.com>
 | 
			
		||||
Preston Jackson <preston.a.jackson@gmail.com>
 | 
			
		||||
Rainer Klaffenboeck <rainer.klaffenboeck@dynatrace.com>
 | 
			
		||||
Russ Cox <rsc@google.com>
 | 
			
		||||
Russ Rufer <russ@pentad.com>
 | 
			
		||||
Sean Mcafee <eefacm@gmail.com>
 | 
			
		||||
Sigurður Ásgeirsson <siggi@google.com>
 | 
			
		||||
Tracy Bialik <tracy@pentad.com>
 | 
			
		||||
Vadim Berman <vadimb@google.com>
 | 
			
		||||
Vlad Losev <vladl@google.com>
 | 
			
		||||
Zhanyong Wan <wan@google.com>
 | 
			
		||||
							
								
								
									
										28
									
								
								third_party/googletest/src/COPYING
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								third_party/googletest/src/COPYING
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
Copyright 2008, Google Inc.
 | 
			
		||||
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.
 | 
			
		||||
    * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
contributors may be used to endorse or promote products derived from
 | 
			
		||||
this software without specific prior written permission.
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
OWNER 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.
 | 
			
		||||
							
								
								
									
										302
									
								
								third_party/googletest/src/Makefile.am
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										302
									
								
								third_party/googletest/src/Makefile.am
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,302 @@
 | 
			
		||||
# Automake file
 | 
			
		||||
 | 
			
		||||
ACLOCAL_AMFLAGS = -I m4
 | 
			
		||||
 | 
			
		||||
# Nonstandard package files for distribution
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
  CHANGES \
 | 
			
		||||
  CONTRIBUTORS \
 | 
			
		||||
  include/gtest/gtest-param-test.h.pump \
 | 
			
		||||
  include/gtest/internal/gtest-param-util-generated.h.pump \
 | 
			
		||||
  include/gtest/internal/gtest-tuple.h.pump \
 | 
			
		||||
  include/gtest/internal/gtest-type-util.h.pump \
 | 
			
		||||
  make/Makefile \
 | 
			
		||||
  scripts/fuse_gtest_files.py \
 | 
			
		||||
  scripts/gen_gtest_pred_impl.py \
 | 
			
		||||
  scripts/pump.py \
 | 
			
		||||
  scripts/test/Makefile
 | 
			
		||||
 | 
			
		||||
# gtest source files that we don't compile directly.  They are
 | 
			
		||||
# #included by gtest-all.cc.
 | 
			
		||||
GTEST_SRC = \
 | 
			
		||||
  src/gtest-death-test.cc \
 | 
			
		||||
  src/gtest-filepath.cc \
 | 
			
		||||
  src/gtest-internal-inl.h \
 | 
			
		||||
  src/gtest-port.cc \
 | 
			
		||||
  src/gtest-printers.cc \
 | 
			
		||||
  src/gtest-test-part.cc \
 | 
			
		||||
  src/gtest-typed-test.cc \
 | 
			
		||||
  src/gtest.cc
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST += $(GTEST_SRC)
 | 
			
		||||
 | 
			
		||||
# Sample files that we don't compile.
 | 
			
		||||
EXTRA_DIST += \
 | 
			
		||||
  samples/prime_tables.h \
 | 
			
		||||
  samples/sample2_unittest.cc \
 | 
			
		||||
  samples/sample3_unittest.cc \
 | 
			
		||||
  samples/sample4_unittest.cc \
 | 
			
		||||
  samples/sample5_unittest.cc \
 | 
			
		||||
  samples/sample6_unittest.cc \
 | 
			
		||||
  samples/sample7_unittest.cc \
 | 
			
		||||
  samples/sample8_unittest.cc \
 | 
			
		||||
  samples/sample9_unittest.cc
 | 
			
		||||
 | 
			
		||||
# C++ test files that we don't compile directly.
 | 
			
		||||
EXTRA_DIST += \
 | 
			
		||||
  test/gtest-death-test_ex_test.cc \
 | 
			
		||||
  test/gtest-death-test_test.cc \
 | 
			
		||||
  test/gtest-filepath_test.cc \
 | 
			
		||||
  test/gtest-linked_ptr_test.cc \
 | 
			
		||||
  test/gtest-listener_test.cc \
 | 
			
		||||
  test/gtest-message_test.cc \
 | 
			
		||||
  test/gtest-options_test.cc \
 | 
			
		||||
  test/gtest-param-test2_test.cc \
 | 
			
		||||
  test/gtest-param-test2_test.cc \
 | 
			
		||||
  test/gtest-param-test_test.cc \
 | 
			
		||||
  test/gtest-param-test_test.cc \
 | 
			
		||||
  test/gtest-param-test_test.h \
 | 
			
		||||
  test/gtest-port_test.cc \
 | 
			
		||||
  test/gtest-printers_test.cc \
 | 
			
		||||
  test/gtest-test-part_test.cc \
 | 
			
		||||
  test/gtest-tuple_test.cc \
 | 
			
		||||
  test/gtest-typed-test2_test.cc \
 | 
			
		||||
  test/gtest-typed-test_test.cc \
 | 
			
		||||
  test/gtest-typed-test_test.h \
 | 
			
		||||
  test/gtest-unittest-api_test.cc \
 | 
			
		||||
  test/gtest_break_on_failure_unittest_.cc \
 | 
			
		||||
  test/gtest_catch_exceptions_test_.cc \
 | 
			
		||||
  test/gtest_color_test_.cc \
 | 
			
		||||
  test/gtest_env_var_test_.cc \
 | 
			
		||||
  test/gtest_environment_test.cc \
 | 
			
		||||
  test/gtest_filter_unittest_.cc \
 | 
			
		||||
  test/gtest_help_test_.cc \
 | 
			
		||||
  test/gtest_list_tests_unittest_.cc \
 | 
			
		||||
  test/gtest_main_unittest.cc \
 | 
			
		||||
  test/gtest_no_test_unittest.cc \
 | 
			
		||||
  test/gtest_output_test_.cc \
 | 
			
		||||
  test/gtest_pred_impl_unittest.cc \
 | 
			
		||||
  test/gtest_prod_test.cc \
 | 
			
		||||
  test/gtest_repeat_test.cc \
 | 
			
		||||
  test/gtest_shuffle_test_.cc \
 | 
			
		||||
  test/gtest_sole_header_test.cc \
 | 
			
		||||
  test/gtest_stress_test.cc \
 | 
			
		||||
  test/gtest_throw_on_failure_ex_test.cc \
 | 
			
		||||
  test/gtest_throw_on_failure_test_.cc \
 | 
			
		||||
  test/gtest_uninitialized_test_.cc \
 | 
			
		||||
  test/gtest_unittest.cc \
 | 
			
		||||
  test/gtest_unittest.cc \
 | 
			
		||||
  test/gtest_xml_outfile1_test_.cc \
 | 
			
		||||
  test/gtest_xml_outfile2_test_.cc \
 | 
			
		||||
  test/gtest_xml_output_unittest_.cc \
 | 
			
		||||
  test/production.cc \
 | 
			
		||||
  test/production.h
 | 
			
		||||
 | 
			
		||||
# Python tests that we don't run.
 | 
			
		||||
EXTRA_DIST += \
 | 
			
		||||
  test/gtest_break_on_failure_unittest.py \
 | 
			
		||||
  test/gtest_catch_exceptions_test.py \
 | 
			
		||||
  test/gtest_color_test.py \
 | 
			
		||||
  test/gtest_env_var_test.py \
 | 
			
		||||
  test/gtest_filter_unittest.py \
 | 
			
		||||
  test/gtest_help_test.py \
 | 
			
		||||
  test/gtest_list_tests_unittest.py \
 | 
			
		||||
  test/gtest_output_test.py \
 | 
			
		||||
  test/gtest_output_test_golden_lin.txt \
 | 
			
		||||
  test/gtest_shuffle_test.py \
 | 
			
		||||
  test/gtest_test_utils.py \
 | 
			
		||||
  test/gtest_throw_on_failure_test.py \
 | 
			
		||||
  test/gtest_uninitialized_test.py \
 | 
			
		||||
  test/gtest_xml_outfiles_test.py \
 | 
			
		||||
  test/gtest_xml_output_unittest.py \
 | 
			
		||||
  test/gtest_xml_test_utils.py
 | 
			
		||||
 | 
			
		||||
# CMake script
 | 
			
		||||
EXTRA_DIST += \
 | 
			
		||||
  CMakeLists.txt \
 | 
			
		||||
  cmake/internal_utils.cmake
 | 
			
		||||
 | 
			
		||||
# MSVC project files
 | 
			
		||||
EXTRA_DIST += \
 | 
			
		||||
  msvc/gtest-md.sln \
 | 
			
		||||
  msvc/gtest-md.vcproj \
 | 
			
		||||
  msvc/gtest.sln \
 | 
			
		||||
  msvc/gtest.vcproj \
 | 
			
		||||
  msvc/gtest_main-md.vcproj \
 | 
			
		||||
  msvc/gtest_main.vcproj \
 | 
			
		||||
  msvc/gtest_prod_test-md.vcproj \
 | 
			
		||||
  msvc/gtest_prod_test.vcproj \
 | 
			
		||||
  msvc/gtest_unittest-md.vcproj \
 | 
			
		||||
  msvc/gtest_unittest.vcproj
 | 
			
		||||
 | 
			
		||||
# xcode project files
 | 
			
		||||
EXTRA_DIST += \
 | 
			
		||||
  xcode/Config/DebugProject.xcconfig \
 | 
			
		||||
  xcode/Config/FrameworkTarget.xcconfig \
 | 
			
		||||
  xcode/Config/General.xcconfig \
 | 
			
		||||
  xcode/Config/ReleaseProject.xcconfig \
 | 
			
		||||
  xcode/Config/StaticLibraryTarget.xcconfig \
 | 
			
		||||
  xcode/Config/TestTarget.xcconfig \
 | 
			
		||||
  xcode/Resources/Info.plist \
 | 
			
		||||
  xcode/Scripts/runtests.sh \
 | 
			
		||||
  xcode/Scripts/versiongenerate.py \
 | 
			
		||||
  xcode/gtest.xcodeproj/project.pbxproj
 | 
			
		||||
 | 
			
		||||
# xcode sample files
 | 
			
		||||
EXTRA_DIST += \
 | 
			
		||||
  xcode/Samples/FrameworkSample/Info.plist \
 | 
			
		||||
  xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj \
 | 
			
		||||
  xcode/Samples/FrameworkSample/runtests.sh \
 | 
			
		||||
  xcode/Samples/FrameworkSample/widget.cc \
 | 
			
		||||
  xcode/Samples/FrameworkSample/widget.h \
 | 
			
		||||
  xcode/Samples/FrameworkSample/widget_test.cc
 | 
			
		||||
 | 
			
		||||
# C++Builder project files
 | 
			
		||||
EXTRA_DIST += \
 | 
			
		||||
  codegear/gtest.cbproj \
 | 
			
		||||
  codegear/gtest.groupproj \
 | 
			
		||||
  codegear/gtest_all.cc \
 | 
			
		||||
  codegear/gtest_link.cc \
 | 
			
		||||
  codegear/gtest_main.cbproj \
 | 
			
		||||
  codegear/gtest_unittest.cbproj
 | 
			
		||||
 | 
			
		||||
# Distribute and install M4 macro
 | 
			
		||||
m4datadir = $(datadir)/aclocal
 | 
			
		||||
m4data_DATA = m4/gtest.m4
 | 
			
		||||
EXTRA_DIST += $(m4data_DATA)
 | 
			
		||||
 | 
			
		||||
# We define the global AM_CPPFLAGS as everything we compile includes from these
 | 
			
		||||
# directories.
 | 
			
		||||
AM_CPPFLAGS = -I$(srcdir) -I$(srcdir)/include
 | 
			
		||||
 | 
			
		||||
# Modifies compiler and linker flags for pthreads compatibility.
 | 
			
		||||
if HAVE_PTHREADS
 | 
			
		||||
  AM_CXXFLAGS = @PTHREAD_CFLAGS@ -DGTEST_HAS_PTHREAD=1
 | 
			
		||||
  AM_LIBS = @PTHREAD_LIBS@
 | 
			
		||||
else
 | 
			
		||||
  AM_CXXFLAGS = -DGTEST_HAS_PTHREAD=0
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Build rules for libraries.
 | 
			
		||||
lib_LTLIBRARIES = lib/libgtest.la lib/libgtest_main.la
 | 
			
		||||
 | 
			
		||||
lib_libgtest_la_SOURCES = src/gtest-all.cc
 | 
			
		||||
 | 
			
		||||
pkginclude_HEADERS = \
 | 
			
		||||
  include/gtest/gtest-death-test.h \
 | 
			
		||||
  include/gtest/gtest-message.h \
 | 
			
		||||
  include/gtest/gtest-param-test.h \
 | 
			
		||||
  include/gtest/gtest-printers.h \
 | 
			
		||||
  include/gtest/gtest-spi.h \
 | 
			
		||||
  include/gtest/gtest-test-part.h \
 | 
			
		||||
  include/gtest/gtest-typed-test.h \
 | 
			
		||||
  include/gtest/gtest.h \
 | 
			
		||||
  include/gtest/gtest_pred_impl.h \
 | 
			
		||||
  include/gtest/gtest_prod.h
 | 
			
		||||
 | 
			
		||||
pkginclude_internaldir = $(pkgincludedir)/internal
 | 
			
		||||
pkginclude_internal_HEADERS = \
 | 
			
		||||
  include/gtest/internal/gtest-death-test-internal.h \
 | 
			
		||||
  include/gtest/internal/gtest-filepath.h \
 | 
			
		||||
  include/gtest/internal/gtest-internal.h \
 | 
			
		||||
  include/gtest/internal/gtest-linked_ptr.h \
 | 
			
		||||
  include/gtest/internal/gtest-param-util-generated.h \
 | 
			
		||||
  include/gtest/internal/gtest-param-util.h \
 | 
			
		||||
  include/gtest/internal/gtest-port.h \
 | 
			
		||||
  include/gtest/internal/gtest-string.h \
 | 
			
		||||
  include/gtest/internal/gtest-tuple.h \
 | 
			
		||||
  include/gtest/internal/gtest-type-util.h
 | 
			
		||||
 | 
			
		||||
lib_libgtest_main_la_SOURCES = src/gtest_main.cc
 | 
			
		||||
lib_libgtest_main_la_LIBADD = lib/libgtest.la
 | 
			
		||||
 | 
			
		||||
# Bulid rules for samples and tests. Automake's naming for some of
 | 
			
		||||
# these variables isn't terribly obvious, so this is a brief
 | 
			
		||||
# reference:
 | 
			
		||||
#
 | 
			
		||||
# TESTS -- Programs run automatically by "make check"
 | 
			
		||||
# check_PROGRAMS -- Programs built by "make check" but not necessarily run
 | 
			
		||||
 | 
			
		||||
noinst_LTLIBRARIES = samples/libsamples.la
 | 
			
		||||
 | 
			
		||||
samples_libsamples_la_SOURCES = \
 | 
			
		||||
  samples/sample1.cc \
 | 
			
		||||
  samples/sample1.h \
 | 
			
		||||
  samples/sample2.cc \
 | 
			
		||||
  samples/sample2.h \
 | 
			
		||||
  samples/sample3-inl.h \
 | 
			
		||||
  samples/sample4.cc \
 | 
			
		||||
  samples/sample4.h
 | 
			
		||||
 | 
			
		||||
TESTS=
 | 
			
		||||
TESTS_ENVIRONMENT = GTEST_SOURCE_DIR="$(srcdir)/test" \
 | 
			
		||||
                    GTEST_BUILD_DIR="$(top_builddir)/test"
 | 
			
		||||
check_PROGRAMS=
 | 
			
		||||
 | 
			
		||||
# A simple sample on using gtest.
 | 
			
		||||
TESTS += samples/sample1_unittest
 | 
			
		||||
check_PROGRAMS += samples/sample1_unittest
 | 
			
		||||
samples_sample1_unittest_SOURCES = samples/sample1_unittest.cc
 | 
			
		||||
samples_sample1_unittest_LDADD = lib/libgtest_main.la \
 | 
			
		||||
                                 lib/libgtest.la \
 | 
			
		||||
                                 samples/libsamples.la
 | 
			
		||||
 | 
			
		||||
# Another sample.  It also verifies that libgtest works.
 | 
			
		||||
TESTS += samples/sample10_unittest
 | 
			
		||||
check_PROGRAMS += samples/sample10_unittest
 | 
			
		||||
samples_sample10_unittest_SOURCES = samples/sample10_unittest.cc
 | 
			
		||||
samples_sample10_unittest_LDADD = lib/libgtest.la
 | 
			
		||||
 | 
			
		||||
# This tests most constructs of gtest and verifies that libgtest_main
 | 
			
		||||
# and libgtest work.
 | 
			
		||||
TESTS += test/gtest_all_test
 | 
			
		||||
check_PROGRAMS += test/gtest_all_test
 | 
			
		||||
test_gtest_all_test_SOURCES = test/gtest_all_test.cc
 | 
			
		||||
test_gtest_all_test_LDADD = lib/libgtest_main.la \
 | 
			
		||||
                            lib/libgtest.la
 | 
			
		||||
 | 
			
		||||
# Tests that fused gtest files compile and work.
 | 
			
		||||
FUSED_GTEST_SRC = \
 | 
			
		||||
  fused-src/gtest/gtest-all.cc \
 | 
			
		||||
  fused-src/gtest/gtest.h \
 | 
			
		||||
  fused-src/gtest/gtest_main.cc
 | 
			
		||||
 | 
			
		||||
TESTS += test/fused_gtest_test
 | 
			
		||||
check_PROGRAMS += test/fused_gtest_test
 | 
			
		||||
test_fused_gtest_test_SOURCES = $(FUSED_GTEST_SRC) \
 | 
			
		||||
                                samples/sample1.cc samples/sample1_unittest.cc
 | 
			
		||||
test_fused_gtest_test_CPPFLAGS = -I"$(srcdir)/fused-src"
 | 
			
		||||
 | 
			
		||||
# Build rules for putting fused Google Test files into the distribution
 | 
			
		||||
# package. The user can also create those files by manually running
 | 
			
		||||
# scripts/fuse_gtest_files.py.
 | 
			
		||||
$(test_fused_gtest_test_SOURCES): fused-gtest
 | 
			
		||||
 | 
			
		||||
fused-gtest: $(pkginclude_HEADERS) $(pkginclude_internal_HEADERS) \
 | 
			
		||||
             $(GTEST_SRC) src/gtest-all.cc src/gtest_main.cc \
 | 
			
		||||
             scripts/fuse_gtest_files.py
 | 
			
		||||
	mkdir -p "$(srcdir)/fused-src"
 | 
			
		||||
	chmod -R u+w "$(srcdir)/fused-src"
 | 
			
		||||
	rm -f "$(srcdir)/fused-src/gtest/gtest-all.cc"
 | 
			
		||||
	rm -f "$(srcdir)/fused-src/gtest/gtest.h"
 | 
			
		||||
	"$(srcdir)/scripts/fuse_gtest_files.py" "$(srcdir)/fused-src"
 | 
			
		||||
	cp -f "$(srcdir)/src/gtest_main.cc" "$(srcdir)/fused-src/gtest/"
 | 
			
		||||
 | 
			
		||||
maintainer-clean-local:
 | 
			
		||||
	rm -rf "$(srcdir)/fused-src"
 | 
			
		||||
 | 
			
		||||
# Death tests may produce core dumps in the build directory. In case
 | 
			
		||||
# this happens, clean them to keep distcleancheck happy.
 | 
			
		||||
CLEANFILES = core
 | 
			
		||||
 | 
			
		||||
# Disables 'make install' as installing a compiled version of Google
 | 
			
		||||
# Test can lead to undefined behavior due to violation of the
 | 
			
		||||
# One-Definition Rule.
 | 
			
		||||
 | 
			
		||||
install-exec-local:
 | 
			
		||||
	echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system."
 | 
			
		||||
	false
 | 
			
		||||
 | 
			
		||||
install-data-local:
 | 
			
		||||
	echo "'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system."
 | 
			
		||||
	false
 | 
			
		||||
							
								
								
									
										424
									
								
								third_party/googletest/src/README
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										424
									
								
								third_party/googletest/src/README
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,424 @@
 | 
			
		||||
Google C++ Testing Framework
 | 
			
		||||
============================
 | 
			
		||||
 | 
			
		||||
http://code.google.com/p/googletest/
 | 
			
		||||
 | 
			
		||||
Overview
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
Google's framework for writing C++ tests on a variety of platforms
 | 
			
		||||
(Linux, Mac OS X, Windows, Windows CE, Symbian, etc).  Based on the
 | 
			
		||||
xUnit architecture.  Supports automatic test discovery, a rich set of
 | 
			
		||||
assertions, user-defined assertions, death tests, fatal and non-fatal
 | 
			
		||||
failures, various options for running the tests, and XML test report
 | 
			
		||||
generation.
 | 
			
		||||
 | 
			
		||||
Please see the project page above for more information as well as the
 | 
			
		||||
mailing list for questions, discussions, and development.  There is
 | 
			
		||||
also an IRC channel on OFTC (irc.oftc.net) #gtest available.  Please
 | 
			
		||||
join us!
 | 
			
		||||
 | 
			
		||||
Requirements for End Users
 | 
			
		||||
--------------------------
 | 
			
		||||
 | 
			
		||||
Google Test is designed to have fairly minimal requirements to build
 | 
			
		||||
and use with your projects, but there are some.  Currently, we support
 | 
			
		||||
Linux, Windows, Mac OS X, and Cygwin.  We will also make our best
 | 
			
		||||
effort to support other platforms (e.g. Solaris, AIX, and z/OS).
 | 
			
		||||
However, since core members of the Google Test project have no access
 | 
			
		||||
to these platforms, Google Test may have outstanding issues there.  If
 | 
			
		||||
you notice any problems on your platform, please notify
 | 
			
		||||
googletestframework@googlegroups.com.  Patches for fixing them are
 | 
			
		||||
even more welcome!
 | 
			
		||||
 | 
			
		||||
### Linux Requirements ###
 | 
			
		||||
 | 
			
		||||
These are the base requirements to build and use Google Test from a source
 | 
			
		||||
package (as described below):
 | 
			
		||||
  * GNU-compatible Make or gmake
 | 
			
		||||
  * POSIX-standard shell
 | 
			
		||||
  * POSIX(-2) Regular Expressions (regex.h)
 | 
			
		||||
  * A C++98-standard-compliant compiler
 | 
			
		||||
 | 
			
		||||
### Windows Requirements ###
 | 
			
		||||
 | 
			
		||||
  * Microsoft Visual C++ 7.1 or newer
 | 
			
		||||
 | 
			
		||||
### Cygwin Requirements ###
 | 
			
		||||
 | 
			
		||||
  * Cygwin 1.5.25-14 or newer
 | 
			
		||||
 | 
			
		||||
### Mac OS X Requirements ###
 | 
			
		||||
 | 
			
		||||
  * Mac OS X 10.4 Tiger or newer
 | 
			
		||||
  * Developer Tools Installed
 | 
			
		||||
 | 
			
		||||
Also, you'll need CMake 2.6.4 or higher if you want to build the
 | 
			
		||||
samples using the provided CMake script, regardless of the platform.
 | 
			
		||||
 | 
			
		||||
Requirements for Contributors
 | 
			
		||||
-----------------------------
 | 
			
		||||
 | 
			
		||||
We welcome patches.  If you plan to contribute a patch, you need to
 | 
			
		||||
build Google Test and its own tests from an SVN checkout (described
 | 
			
		||||
below), which has further requirements:
 | 
			
		||||
 | 
			
		||||
  * Python version 2.3 or newer (for running some of the tests and
 | 
			
		||||
    re-generating certain source files from templates)
 | 
			
		||||
  * CMake 2.6.4 or newer
 | 
			
		||||
 | 
			
		||||
Getting the Source
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
There are two primary ways of getting Google Test's source code: you
 | 
			
		||||
can download a stable source release in your preferred archive format,
 | 
			
		||||
or directly check out the source from our Subversion (SVN) repositary.
 | 
			
		||||
The SVN checkout requires a few extra steps and some extra software
 | 
			
		||||
packages on your system, but lets you track the latest development and
 | 
			
		||||
make patches much more easily, so we highly encourage it.
 | 
			
		||||
 | 
			
		||||
### Source Package ###
 | 
			
		||||
 | 
			
		||||
Google Test is released in versioned source packages which can be
 | 
			
		||||
downloaded from the download page [1].  Several different archive
 | 
			
		||||
formats are provided, but the only difference is the tools used to
 | 
			
		||||
manipulate them, and the size of the resulting file.  Download
 | 
			
		||||
whichever you are most comfortable with.
 | 
			
		||||
 | 
			
		||||
  [1] http://code.google.com/p/googletest/downloads/list
 | 
			
		||||
 | 
			
		||||
Once the package is downloaded, expand it using whichever tools you
 | 
			
		||||
prefer for that type.  This will result in a new directory with the
 | 
			
		||||
name "gtest-X.Y.Z" which contains all of the source code.  Here are
 | 
			
		||||
some examples on Linux:
 | 
			
		||||
 | 
			
		||||
  tar -xvzf gtest-X.Y.Z.tar.gz
 | 
			
		||||
  tar -xvjf gtest-X.Y.Z.tar.bz2
 | 
			
		||||
  unzip gtest-X.Y.Z.zip
 | 
			
		||||
 | 
			
		||||
### SVN Checkout ###
 | 
			
		||||
 | 
			
		||||
To check out the main branch (also known as the "trunk") of Google
 | 
			
		||||
Test, run the following Subversion command:
 | 
			
		||||
 | 
			
		||||
  svn checkout http://googletest.googlecode.com/svn/trunk/ gtest-svn
 | 
			
		||||
 | 
			
		||||
Setting up the Build
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
To build Google Test and your tests that use it, you need to tell your
 | 
			
		||||
build system where to find its headers and source files.  The exact
 | 
			
		||||
way to do it depends on which build system you use, and is usually
 | 
			
		||||
straightforward.
 | 
			
		||||
 | 
			
		||||
### Generic Build Instructions ###
 | 
			
		||||
 | 
			
		||||
Suppose you put Google Test in directory ${GTEST_DIR}.  To build it,
 | 
			
		||||
create a library build target (or a project as called by Visual Studio
 | 
			
		||||
and Xcode) to compile
 | 
			
		||||
 | 
			
		||||
  ${GTEST_DIR}/src/gtest-all.cc
 | 
			
		||||
 | 
			
		||||
with
 | 
			
		||||
 | 
			
		||||
  ${GTEST_DIR}/include and ${GTEST_DIR}
 | 
			
		||||
 | 
			
		||||
in the header search path.  Assuming a Linux-like system and gcc,
 | 
			
		||||
something like the following will do:
 | 
			
		||||
 | 
			
		||||
  g++ -I${GTEST_DIR}/include -I${GTEST_DIR} -c ${GTEST_DIR}/src/gtest-all.cc
 | 
			
		||||
  ar -rv libgtest.a gtest-all.o
 | 
			
		||||
 | 
			
		||||
Next, you should compile your test source file with
 | 
			
		||||
${GTEST_DIR}/include in the header search path, and link it with gtest
 | 
			
		||||
and any other necessary libraries:
 | 
			
		||||
 | 
			
		||||
  g++ -I${GTEST_DIR}/include path/to/your_test.cc libgtest.a -o your_test
 | 
			
		||||
 | 
			
		||||
As an example, the make/ directory contains a Makefile that you can
 | 
			
		||||
use to build Google Test on systems where GNU make is available
 | 
			
		||||
(e.g. Linux, Mac OS X, and Cygwin).  It doesn't try to build Google
 | 
			
		||||
Test's own tests.  Instead, it just builds the Google Test library and
 | 
			
		||||
a sample test.  You can use it as a starting point for your own build
 | 
			
		||||
script.
 | 
			
		||||
 | 
			
		||||
If the default settings are correct for your environment, the
 | 
			
		||||
following commands should succeed:
 | 
			
		||||
 | 
			
		||||
  cd ${GTEST_DIR}/make
 | 
			
		||||
  make
 | 
			
		||||
  ./sample1_unittest
 | 
			
		||||
 | 
			
		||||
If you see errors, try to tweak the contents of make/Makefile to make
 | 
			
		||||
them go away.  There are instructions in make/Makefile on how to do
 | 
			
		||||
it.
 | 
			
		||||
 | 
			
		||||
### Using CMake ###
 | 
			
		||||
 | 
			
		||||
Google Test comes with a CMake build script (CMakeLists.txt) that can
 | 
			
		||||
be used on a wide range of platforms ("C" stands for cross-platofrm.).
 | 
			
		||||
If you don't have CMake installed already, you can download it for
 | 
			
		||||
free from http://www.cmake.org/.
 | 
			
		||||
 | 
			
		||||
CMake works by generating native makefiles or build projects that can
 | 
			
		||||
be used in the compiler environment of your choice.  The typical
 | 
			
		||||
workflow starts with:
 | 
			
		||||
 | 
			
		||||
  mkdir mybuild       # Create a directory to hold the build output.
 | 
			
		||||
  cd mybuild
 | 
			
		||||
  cmake ${GTEST_DIR}  # Generate native build scripts.
 | 
			
		||||
 | 
			
		||||
If you want to build Google Test's samples, you should replace the
 | 
			
		||||
last command with
 | 
			
		||||
 | 
			
		||||
  cmake -Dgtest_build_samples=ON ${GTEST_DIR}
 | 
			
		||||
 | 
			
		||||
If you are on a *nix system, you should now see a Makefile in the
 | 
			
		||||
current directory.  Just type 'make' to build gtest.
 | 
			
		||||
 | 
			
		||||
If you use Windows and have Vistual Studio installed, a gtest.sln file
 | 
			
		||||
and several .vcproj files will be created.  You can then build them
 | 
			
		||||
using Visual Studio.
 | 
			
		||||
 | 
			
		||||
On Mac OS X with Xcode installed, a .xcodeproj file will be generated.
 | 
			
		||||
 | 
			
		||||
### Legacy Build Scripts ###
 | 
			
		||||
 | 
			
		||||
Before settling on CMake, we have been providing hand-maintained build
 | 
			
		||||
projects/scripts for Visual Studio, Xcode, and Autotools.  While we
 | 
			
		||||
continue to provide them for convenience, they are not actively
 | 
			
		||||
maintained any more.  We highly recommend that you follow the
 | 
			
		||||
instructions in the previous two sections to integrate Google Test
 | 
			
		||||
with your existing build system.
 | 
			
		||||
 | 
			
		||||
If you still need to use the legacy build scripts, here's how:
 | 
			
		||||
 | 
			
		||||
The msvc\ folder contains two solutions with Visual C++ projects.
 | 
			
		||||
Open the gtest.sln or gtest-md.sln file using Visual Studio, and you
 | 
			
		||||
are ready to build Google Test the same way you build any Visual
 | 
			
		||||
Studio project.  Files that have names ending with -md use DLL
 | 
			
		||||
versions of Microsoft runtime libraries (the /MD or the /MDd compiler
 | 
			
		||||
option).  Files without that suffix use static versions of the runtime
 | 
			
		||||
libraries (the /MT or the /MTd option).  Please note that one must use
 | 
			
		||||
the same option to compile both gtest and the test code.  If you use
 | 
			
		||||
Visual Studio 2005 or above, we recommend the -md version as /MD is
 | 
			
		||||
the default for new projects in these versions of Visual Studio.
 | 
			
		||||
 | 
			
		||||
On Mac OS X, open the gtest.xcodeproj in the xcode/ folder using
 | 
			
		||||
Xcode.  Build the "gtest" target.  The universal binary framework will
 | 
			
		||||
end up in your selected build directory (selected in the Xcode
 | 
			
		||||
"Preferences..." -> "Building" pane and defaults to xcode/build).
 | 
			
		||||
Alternatively, at the command line, enter:
 | 
			
		||||
 | 
			
		||||
  xcodebuild
 | 
			
		||||
 | 
			
		||||
This will build the "Release" configuration of gtest.framework in your
 | 
			
		||||
default build location.  See the "xcodebuild" man page for more
 | 
			
		||||
information about building different configurations and building in
 | 
			
		||||
different locations.
 | 
			
		||||
 | 
			
		||||
Tweaking Google Test
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
Google Test can be used in diverse environments.  The default
 | 
			
		||||
configuration may not work (or may not work well) out of the box in
 | 
			
		||||
some environments.  However, you can easily tweak Google Test by
 | 
			
		||||
defining control macros on the compiler command line.  Generally,
 | 
			
		||||
these macros are named like GTEST_XYZ and you define them to either 1
 | 
			
		||||
or 0 to enable or disable a certain feature.
 | 
			
		||||
 | 
			
		||||
We list the most frequently used macros below.  For a complete list,
 | 
			
		||||
see file include/gtest/internal/gtest-port.h.
 | 
			
		||||
 | 
			
		||||
### Choosing a TR1 Tuple Library ###
 | 
			
		||||
 | 
			
		||||
Some Google Test features require the C++ Technical Report 1 (TR1)
 | 
			
		||||
tuple library, which is not yet available with all compilers.  The
 | 
			
		||||
good news is that Google Test implements a subset of TR1 tuple that's
 | 
			
		||||
enough for its own need, and will automatically use this when the
 | 
			
		||||
compiler doesn't provide TR1 tuple.
 | 
			
		||||
 | 
			
		||||
Usually you don't need to care about which tuple library Google Test
 | 
			
		||||
uses.  However, if your project already uses TR1 tuple, you need to
 | 
			
		||||
tell Google Test to use the same TR1 tuple library the rest of your
 | 
			
		||||
project uses, or the two tuple implementations will clash.  To do
 | 
			
		||||
that, add
 | 
			
		||||
 | 
			
		||||
  -DGTEST_USE_OWN_TR1_TUPLE=0
 | 
			
		||||
 | 
			
		||||
to the compiler flags while compiling Google Test and your tests.  If
 | 
			
		||||
you want to force Google Test to use its own tuple library, just add
 | 
			
		||||
 | 
			
		||||
  -DGTEST_USE_OWN_TR1_TUPLE=1
 | 
			
		||||
 | 
			
		||||
to the compiler flags instead.
 | 
			
		||||
 | 
			
		||||
If you don't want Google Test to use tuple at all, add
 | 
			
		||||
 | 
			
		||||
  -DGTEST_HAS_TR1_TUPLE=0
 | 
			
		||||
 | 
			
		||||
and all features using tuple will be disabled.
 | 
			
		||||
 | 
			
		||||
### Multi-threaded Tests ###
 | 
			
		||||
 | 
			
		||||
Google Test is thread-safe where the pthread library is available.
 | 
			
		||||
After #include "gtest/gtest.h", you can check the GTEST_IS_THREADSAFE
 | 
			
		||||
macro to see whether this is the case (yes if the macro is #defined to
 | 
			
		||||
1, no if it's undefined.).
 | 
			
		||||
 | 
			
		||||
If Google Test doesn't correctly detect whether pthread is available
 | 
			
		||||
in your environment, you can force it with
 | 
			
		||||
 | 
			
		||||
  -DGTEST_HAS_PTHREAD=1
 | 
			
		||||
 | 
			
		||||
or
 | 
			
		||||
 | 
			
		||||
  -DGTEST_HAS_PTHREAD=0
 | 
			
		||||
 | 
			
		||||
When Google Test uses pthread, you may need to add flags to your
 | 
			
		||||
compiler and/or linker to select the pthread library, or you'll get
 | 
			
		||||
link errors.  If you use the CMake script or the deprecated Autotools
 | 
			
		||||
script, this is taken care of for you.  If you use your own build
 | 
			
		||||
script, you'll need to read your compiler and linker's manual to
 | 
			
		||||
figure out what flags to add.
 | 
			
		||||
 | 
			
		||||
### As a Shared Library (DLL) ###
 | 
			
		||||
 | 
			
		||||
Google Test is compact, so most users can build and link it as a
 | 
			
		||||
static library for the simplicity.  You can choose to use Google Test
 | 
			
		||||
as a shared library (known as a DLL on Windows) if you prefer.
 | 
			
		||||
 | 
			
		||||
To compile *gtest* as a shared library, add
 | 
			
		||||
 | 
			
		||||
  -DGTEST_CREATE_SHARED_LIBRARY=1
 | 
			
		||||
 | 
			
		||||
to the compiler flags.  You'll also need to tell the linker to produce
 | 
			
		||||
a shared library instead - consult your linker's manual for how to do
 | 
			
		||||
it.
 | 
			
		||||
 | 
			
		||||
To compile your *tests* that use the gtest shared library, add
 | 
			
		||||
 | 
			
		||||
  -DGTEST_LINKED_AS_SHARED_LIBRARY=1
 | 
			
		||||
 | 
			
		||||
to the compiler flags.
 | 
			
		||||
 | 
			
		||||
Note: while the above steps aren't technically necessary today when
 | 
			
		||||
using some compilers (e.g. GCC), they may become necessary in the
 | 
			
		||||
future, if we decide to improve the speed of loading the library (see
 | 
			
		||||
http://gcc.gnu.org/wiki/Visibility for details).  Therefore you are
 | 
			
		||||
recommended to always add the above flags when using Google Test as a
 | 
			
		||||
shared library.  Otherwise a future release of Google Test may break
 | 
			
		||||
your build script.
 | 
			
		||||
 | 
			
		||||
### Avoiding Macro Name Clashes ###
 | 
			
		||||
 | 
			
		||||
In C++, macros don't obey namespaces.  Therefore two libraries that
 | 
			
		||||
both define a macro of the same name will clash if you #include both
 | 
			
		||||
definitions.  In case a Google Test macro clashes with another
 | 
			
		||||
library, you can force Google Test to rename its macro to avoid the
 | 
			
		||||
conflict.
 | 
			
		||||
 | 
			
		||||
Specifically, if both Google Test and some other code define macro
 | 
			
		||||
FOO, you can add
 | 
			
		||||
 | 
			
		||||
  -DGTEST_DONT_DEFINE_FOO=1
 | 
			
		||||
 | 
			
		||||
to the compiler flags to tell Google Test to change the macro's name
 | 
			
		||||
from FOO to GTEST_FOO.  Currently FOO can be FAIL, SUCCEED, or TEST.
 | 
			
		||||
For example, with -DGTEST_DONT_DEFINE_TEST=1, you'll need to write
 | 
			
		||||
 | 
			
		||||
  GTEST_TEST(SomeTest, DoesThis) { ... }
 | 
			
		||||
 | 
			
		||||
instead of
 | 
			
		||||
 | 
			
		||||
  TEST(SomeTest, DoesThis) { ... }
 | 
			
		||||
 | 
			
		||||
in order to define a test.
 | 
			
		||||
 | 
			
		||||
Upgrating from an Earlier Version
 | 
			
		||||
---------------------------------
 | 
			
		||||
 | 
			
		||||
We strive to keep Google Test releases backward compatible.
 | 
			
		||||
Sometimes, though, we have to make some breaking changes for the
 | 
			
		||||
users' long-term benefits.  This section describes what you'll need to
 | 
			
		||||
do if you are upgrading from an earlier version of Google Test.
 | 
			
		||||
 | 
			
		||||
### Upgrading from 1.3.0 or Earlier ###
 | 
			
		||||
 | 
			
		||||
You may need to explicitly enable or disable Google Test's own TR1
 | 
			
		||||
tuple library.  See the instructions in section "Choosing a TR1 Tuple
 | 
			
		||||
Library".
 | 
			
		||||
 | 
			
		||||
### Upgrading from 1.4.0 or Earlier ###
 | 
			
		||||
 | 
			
		||||
The Autotools build script (configure + make) is no longer officially
 | 
			
		||||
supportted.  You are encouraged to migrate to your own build system or
 | 
			
		||||
use CMake.  If you still need to use Autotools, you can find
 | 
			
		||||
instructions in the README file from Google Test 1.4.0.
 | 
			
		||||
 | 
			
		||||
On platforms where the pthread library is available, Google Test uses
 | 
			
		||||
it in order to be thread-safe.  See the "Multi-threaded Tests" section
 | 
			
		||||
for what this means to your build script.
 | 
			
		||||
 | 
			
		||||
If you use Microsoft Visual C++ 7.1 with exceptions disabled, Google
 | 
			
		||||
Test will no longer compile.  This should affect very few people, as a
 | 
			
		||||
large portion of STL (including <string>) doesn't compile in this mode
 | 
			
		||||
anyway.  We decided to stop supporting it in order to greatly simplify
 | 
			
		||||
Google Test's implementation.
 | 
			
		||||
 | 
			
		||||
Developing Google Test
 | 
			
		||||
----------------------
 | 
			
		||||
 | 
			
		||||
This section discusses how to make your own changes to Google Test.
 | 
			
		||||
 | 
			
		||||
### Testing Google Test Itself ###
 | 
			
		||||
 | 
			
		||||
To make sure your changes work as intended and don't break existing
 | 
			
		||||
functionality, you'll want to compile and run Google Test's own tests.
 | 
			
		||||
For that you can use CMake:
 | 
			
		||||
 | 
			
		||||
  mkdir mybuild
 | 
			
		||||
  cd mybuild
 | 
			
		||||
  cmake -Dgtest_build_tests=ON ${GTEST_DIR}
 | 
			
		||||
 | 
			
		||||
Make sure you have Python installed, as some of Google Test's tests
 | 
			
		||||
are written in Python.  If the cmake command complains about not being
 | 
			
		||||
able to find Python ("Could NOT find PythonInterp (missing:
 | 
			
		||||
PYTHON_EXECUTABLE)"), try telling it explicitly where your Python
 | 
			
		||||
executable can be found:
 | 
			
		||||
 | 
			
		||||
  cmake -DPYTHON_EXECUTABLE=path/to/python -Dgtest_build_tests=ON ${GTEST_DIR}
 | 
			
		||||
 | 
			
		||||
Next, you can build Google Test and all of its own tests.  On *nix,
 | 
			
		||||
this is usually done by 'make'.  To run the tests, do
 | 
			
		||||
 | 
			
		||||
  make test
 | 
			
		||||
 | 
			
		||||
All tests should pass.
 | 
			
		||||
 | 
			
		||||
### Regenerating Source Files ###
 | 
			
		||||
 | 
			
		||||
Some of Google Test's source files are generated from templates (not
 | 
			
		||||
in the C++ sense) using a script.  A template file is named FOO.pump,
 | 
			
		||||
where FOO is the name of the file it will generate.  For example, the
 | 
			
		||||
file include/gtest/internal/gtest-type-util.h.pump is used to generate
 | 
			
		||||
gtest-type-util.h in the same directory.
 | 
			
		||||
 | 
			
		||||
Normally you don't need to worry about regenerating the source files,
 | 
			
		||||
unless you need to modify them.  In that case, you should modify the
 | 
			
		||||
corresponding .pump files instead and run the pump.py Python script to
 | 
			
		||||
regenerate them.  You can find pump.py in the scripts/ directory.
 | 
			
		||||
Read the Pump manual [2] for how to use it.
 | 
			
		||||
 | 
			
		||||
  [2] http://code.google.com/p/googletest/wiki/PumpManual
 | 
			
		||||
 | 
			
		||||
### Contributing a Patch ###
 | 
			
		||||
 | 
			
		||||
We welcome patches.  Please read the Google Test developer's guide [3]
 | 
			
		||||
for how you can contribute.  In particular, make sure you have signed
 | 
			
		||||
the Contributor License Agreement, or we won't be able to accept the
 | 
			
		||||
patch.
 | 
			
		||||
 | 
			
		||||
  [3] http://code.google.com/p/googletest/wiki/GoogleTestDevGuide
 | 
			
		||||
 | 
			
		||||
Happy testing!
 | 
			
		||||
							
								
								
									
										0
									
								
								third_party/googletest/src/build-aux/.keep
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								third_party/googletest/src/build-aux/.keep
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										216
									
								
								third_party/googletest/src/cmake/internal_utils.cmake
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										216
									
								
								third_party/googletest/src/cmake/internal_utils.cmake
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,216 @@
 | 
			
		||||
# Defines functions and macros useful for building Google Test and
 | 
			
		||||
# Google Mock.
 | 
			
		||||
#
 | 
			
		||||
# Note:
 | 
			
		||||
#
 | 
			
		||||
# - This file will be run twice when building Google Mock (once via
 | 
			
		||||
#   Google Test's CMakeLists.txt, and once via Google Mock's).
 | 
			
		||||
#   Therefore it shouldn't have any side effects other than defining
 | 
			
		||||
#   the functions and macros.
 | 
			
		||||
#
 | 
			
		||||
# - The functions/macros defined in this file may depend on Google
 | 
			
		||||
#   Test and Google Mock's option() definitions, and thus must be
 | 
			
		||||
#   called *after* the options have been defined.
 | 
			
		||||
 | 
			
		||||
# Tweaks CMake's default compiler/linker settings to suit Google Test's needs.
 | 
			
		||||
#
 | 
			
		||||
# This must be a macro(), as inside a function string() can only
 | 
			
		||||
# update variables in the function scope.
 | 
			
		||||
macro(fix_default_compiler_settings_)
 | 
			
		||||
  if (MSVC)
 | 
			
		||||
    # For MSVC, CMake sets certain flags to defaults we want to override.
 | 
			
		||||
    # This replacement code is taken from sample in the CMake Wiki at
 | 
			
		||||
    # http://www.cmake.org/Wiki/CMake_FAQ#Dynamic_Replace.
 | 
			
		||||
    foreach (flag_var
 | 
			
		||||
             CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
 | 
			
		||||
             CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO)
 | 
			
		||||
      if (NOT BUILD_SHARED_LIBS AND NOT gtest_force_shared_crt)
 | 
			
		||||
        # When Google Test is built as a shared library, it should also use
 | 
			
		||||
        # shared runtime libraries.  Otherwise, it may end up with multiple
 | 
			
		||||
        # copies of runtime library data in different modules, resulting in
 | 
			
		||||
        # hard-to-find crashes. When it is built as a static library, it is
 | 
			
		||||
        # preferable to use CRT as static libraries, as we don't have to rely
 | 
			
		||||
        # on CRT DLLs being available. CMake always defaults to using shared
 | 
			
		||||
        # CRT libraries, so we override that default here.
 | 
			
		||||
        string(REPLACE "/MD" "-MT" ${flag_var} "${${flag_var}}")
 | 
			
		||||
      endif()
 | 
			
		||||
 | 
			
		||||
      # We prefer more strict warning checking for building Google Test.
 | 
			
		||||
      # Replaces /W3 with /W4 in defaults.
 | 
			
		||||
      string(REPLACE "/W3" "-W4" ${flag_var} "${${flag_var}}")
 | 
			
		||||
    endforeach()
 | 
			
		||||
  endif()
 | 
			
		||||
endmacro()
 | 
			
		||||
 | 
			
		||||
# Defines the compiler/linker flags used to build Google Test and
 | 
			
		||||
# Google Mock.  You can tweak these definitions to suit your need.  A
 | 
			
		||||
# variable's value is empty before it's explicitly assigned to.
 | 
			
		||||
macro(config_compiler_and_linker)
 | 
			
		||||
  if (NOT gtest_disable_pthreads)
 | 
			
		||||
    # Defines CMAKE_USE_PTHREADS_INIT and CMAKE_THREAD_LIBS_INIT.
 | 
			
		||||
    find_package(Threads)
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  fix_default_compiler_settings_()
 | 
			
		||||
  if (MSVC)
 | 
			
		||||
    # Newlines inside flags variables break CMake's NMake generator.
 | 
			
		||||
    # TODO(vladl@google.com): Add -RTCs and -RTCu to debug builds.
 | 
			
		||||
    set(cxx_base_flags "-GS -W4 -WX -wd4127 -wd4251 -wd4275 -nologo -J -Zi")
 | 
			
		||||
    set(cxx_base_flags "${cxx_base_flags} -D_UNICODE -DUNICODE -DWIN32 -D_WIN32")
 | 
			
		||||
    set(cxx_base_flags "${cxx_base_flags} -DSTRICT -DWIN32_LEAN_AND_MEAN")
 | 
			
		||||
    set(cxx_exception_flags "-EHsc -D_HAS_EXCEPTIONS=1")
 | 
			
		||||
    set(cxx_no_exception_flags "-D_HAS_EXCEPTIONS=0")
 | 
			
		||||
    set(cxx_no_rtti_flags "-GR-")
 | 
			
		||||
  elseif (CMAKE_COMPILER_IS_GNUCXX)
 | 
			
		||||
    set(cxx_base_flags "-Wall -Wshadow")
 | 
			
		||||
    set(cxx_exception_flags "-fexceptions")
 | 
			
		||||
    set(cxx_no_exception_flags "-fno-exceptions")
 | 
			
		||||
    # Until version 4.3.2, GCC doesn't define a macro to indicate
 | 
			
		||||
    # whether RTTI is enabled.  Therefore we define GTEST_HAS_RTTI
 | 
			
		||||
    # explicitly.
 | 
			
		||||
    set(cxx_no_rtti_flags "-fno-rtti -DGTEST_HAS_RTTI=0")
 | 
			
		||||
    set(cxx_strict_flags "-Wextra")
 | 
			
		||||
  elseif (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
 | 
			
		||||
    set(cxx_exception_flags "-features=except")
 | 
			
		||||
    # Sun Pro doesn't provide macros to indicate whether exceptions and
 | 
			
		||||
    # RTTI are enabled, so we define GTEST_HAS_* explicitly.
 | 
			
		||||
    set(cxx_no_exception_flags "-features=no%except -DGTEST_HAS_EXCEPTIONS=0")
 | 
			
		||||
    set(cxx_no_rtti_flags "-features=no%rtti -DGTEST_HAS_RTTI=0")
 | 
			
		||||
  elseif (CMAKE_CXX_COMPILER_ID STREQUAL "VisualAge" OR
 | 
			
		||||
      CMAKE_CXX_COMPILER_ID STREQUAL "XL")
 | 
			
		||||
    # CMake 2.8 changes Visual Age's compiler ID to "XL".
 | 
			
		||||
    set(cxx_exception_flags "-qeh")
 | 
			
		||||
    set(cxx_no_exception_flags "-qnoeh")
 | 
			
		||||
    # Until version 9.0, Visual Age doesn't define a macro to indicate
 | 
			
		||||
    # whether RTTI is enabled.  Therefore we define GTEST_HAS_RTTI
 | 
			
		||||
    # explicitly.
 | 
			
		||||
    set(cxx_no_rtti_flags "-qnortti -DGTEST_HAS_RTTI=0")
 | 
			
		||||
  elseif (CMAKE_CXX_COMPILER_ID STREQUAL "HP")
 | 
			
		||||
    set(cxx_base_flags "-AA -mt")
 | 
			
		||||
    set(cxx_exception_flags "-DGTEST_HAS_EXCEPTIONS=1")
 | 
			
		||||
    set(cxx_no_exception_flags "+noeh -DGTEST_HAS_EXCEPTIONS=0")
 | 
			
		||||
    # RTTI can not be disabled in HP aCC compiler.
 | 
			
		||||
    set(cxx_no_rtti_flags "")
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  if (CMAKE_USE_PTHREADS_INIT)  # The pthreads library is available and allowed.
 | 
			
		||||
    set(cxx_base_flags "${cxx_base_flags} -DGTEST_HAS_PTHREAD=1")
 | 
			
		||||
  else()
 | 
			
		||||
    set(cxx_base_flags "${cxx_base_flags} -DGTEST_HAS_PTHREAD=0")
 | 
			
		||||
  endif()
 | 
			
		||||
 | 
			
		||||
  # For building gtest's own tests and samples.
 | 
			
		||||
  set(cxx_exception "${CMAKE_CXX_FLAGS} ${cxx_base_flags} ${cxx_exception_flags}")
 | 
			
		||||
  set(cxx_no_exception
 | 
			
		||||
    "${CMAKE_CXX_FLAGS} ${cxx_base_flags} ${cxx_no_exception_flags}")
 | 
			
		||||
  set(cxx_default "${cxx_exception}")
 | 
			
		||||
  set(cxx_no_rtti "${cxx_default} ${cxx_no_rtti_flags}")
 | 
			
		||||
  set(cxx_use_own_tuple "${cxx_default} -DGTEST_USE_OWN_TR1_TUPLE=1")
 | 
			
		||||
 | 
			
		||||
  # For building the gtest libraries.
 | 
			
		||||
  set(cxx_strict "${cxx_default} ${cxx_strict_flags}")
 | 
			
		||||
endmacro()
 | 
			
		||||
 | 
			
		||||
# Defines the gtest & gtest_main libraries.  User tests should link
 | 
			
		||||
# with one of them.
 | 
			
		||||
function(cxx_library_with_type name type cxx_flags)
 | 
			
		||||
  # type can be either STATIC or SHARED to denote a static or shared library.
 | 
			
		||||
  # ARGN refers to additional arguments after 'cxx_flags'.
 | 
			
		||||
  add_library(${name} ${type} ${ARGN})
 | 
			
		||||
  set_target_properties(${name}
 | 
			
		||||
    PROPERTIES
 | 
			
		||||
    COMPILE_FLAGS "${cxx_flags}")
 | 
			
		||||
  if (BUILD_SHARED_LIBS OR type STREQUAL "SHARED")
 | 
			
		||||
    set_target_properties(${name}
 | 
			
		||||
      PROPERTIES
 | 
			
		||||
      COMPILE_DEFINITIONS "GTEST_CREATE_SHARED_LIBRARY=1")
 | 
			
		||||
  endif()
 | 
			
		||||
  if (CMAKE_USE_PTHREADS_INIT)
 | 
			
		||||
    target_link_libraries(${name} ${CMAKE_THREAD_LIBS_INIT})
 | 
			
		||||
  endif()
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
########################################################################
 | 
			
		||||
#
 | 
			
		||||
# Helper functions for creating build targets.
 | 
			
		||||
 | 
			
		||||
function(cxx_shared_library name cxx_flags)
 | 
			
		||||
  cxx_library_with_type(${name} SHARED "${cxx_flags}" ${ARGN})
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
function(cxx_library name cxx_flags)
 | 
			
		||||
  cxx_library_with_type(${name} "" "${cxx_flags}" ${ARGN})
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
# cxx_executable_with_flags(name cxx_flags libs srcs...)
 | 
			
		||||
#
 | 
			
		||||
# creates a named C++ executable that depends on the given libraries and
 | 
			
		||||
# is built from the given source files with the given compiler flags.
 | 
			
		||||
function(cxx_executable_with_flags name cxx_flags libs)
 | 
			
		||||
  add_executable(${name} ${ARGN})
 | 
			
		||||
  if (cxx_flags)
 | 
			
		||||
    set_target_properties(${name}
 | 
			
		||||
      PROPERTIES
 | 
			
		||||
      COMPILE_FLAGS "${cxx_flags}")
 | 
			
		||||
  endif()
 | 
			
		||||
  if (BUILD_SHARED_LIBS)
 | 
			
		||||
    set_target_properties(${name}
 | 
			
		||||
      PROPERTIES
 | 
			
		||||
      COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1")
 | 
			
		||||
  endif()
 | 
			
		||||
  # To support mixing linking in static and dynamic libraries, link each
 | 
			
		||||
  # library in with an extra call to target_link_libraries.
 | 
			
		||||
  foreach (lib "${libs}")
 | 
			
		||||
    target_link_libraries(${name} ${lib})
 | 
			
		||||
  endforeach()
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
# cxx_executable(name dir lib srcs...)
 | 
			
		||||
#
 | 
			
		||||
# creates a named target that depends on the given libs and is built
 | 
			
		||||
# from the given source files.  dir/name.cc is implicitly included in
 | 
			
		||||
# the source file list.
 | 
			
		||||
function(cxx_executable name dir libs)
 | 
			
		||||
  cxx_executable_with_flags(
 | 
			
		||||
    ${name} "${cxx_default}" "${libs}" "${dir}/${name}.cc" ${ARGN})
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
# Sets PYTHONINTERP_FOUND and PYTHON_EXECUTABLE.
 | 
			
		||||
find_package(PythonInterp)
 | 
			
		||||
 | 
			
		||||
# cxx_test_with_flags(name cxx_flags libs srcs...)
 | 
			
		||||
#
 | 
			
		||||
# creates a named C++ test that depends on the given libs and is built
 | 
			
		||||
# from the given source files with the given compiler flags.
 | 
			
		||||
function(cxx_test_with_flags name cxx_flags libs)
 | 
			
		||||
  cxx_executable_with_flags(${name} "${cxx_flags}" "${libs}" ${ARGN})
 | 
			
		||||
  add_test(${name} ${name})
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
# cxx_test(name libs srcs...)
 | 
			
		||||
#
 | 
			
		||||
# creates a named test target that depends on the given libs and is
 | 
			
		||||
# built from the given source files.  Unlike cxx_test_with_flags,
 | 
			
		||||
# test/name.cc is already implicitly included in the source file list.
 | 
			
		||||
function(cxx_test name libs)
 | 
			
		||||
  cxx_test_with_flags("${name}" "${cxx_default}" "${libs}"
 | 
			
		||||
    "test/${name}.cc" ${ARGN})
 | 
			
		||||
endfunction()
 | 
			
		||||
 | 
			
		||||
# py_test(name)
 | 
			
		||||
#
 | 
			
		||||
# creates a Python test with the given name whose main module is in
 | 
			
		||||
# test/name.py.  It does nothing if Python is not installed.
 | 
			
		||||
function(py_test name)
 | 
			
		||||
  # We are not supporting Python tests on Linux yet as they consider
 | 
			
		||||
  # all Linux environments to be google3 and try to use google3 features.
 | 
			
		||||
  if (PYTHONINTERP_FOUND)
 | 
			
		||||
    # ${CMAKE_BINARY_DIR} is known at configuration time, so we can
 | 
			
		||||
    # directly bind it from cmake. ${CTEST_CONFIGURATION_TYPE} is known
 | 
			
		||||
    # only at ctest runtime (by calling ctest -c <Configuration>), so
 | 
			
		||||
    # we have to escape $ to delay variable substitution here.
 | 
			
		||||
    add_test(${name}
 | 
			
		||||
      ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test/${name}.py
 | 
			
		||||
          --build_dir=${CMAKE_CURRENT_BINARY_DIR}/\${CTEST_CONFIGURATION_TYPE})
 | 
			
		||||
  endif()
 | 
			
		||||
endfunction()
 | 
			
		||||
							
								
								
									
										138
									
								
								third_party/googletest/src/codegear/gtest.cbproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								third_party/googletest/src/codegear/gtest.cbproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,138 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <ProjectGuid>{bca37a72-5b07-46cf-b44e-89f8e06451a2}</ProjectGuid>
 | 
			
		||||
    <Config Condition="'$(Config)'==''">Release</Config>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
 | 
			
		||||
    <Base>true</Base>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
 | 
			
		||||
    <Base>true</Base>
 | 
			
		||||
    <Cfg_1>true</Cfg_1>
 | 
			
		||||
    <CfgParent>Base</CfgParent>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
 | 
			
		||||
    <Base>true</Base>
 | 
			
		||||
    <Cfg_2>true</Cfg_2>
 | 
			
		||||
    <CfgParent>Base</CfgParent>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Base)'!=''">
 | 
			
		||||
    <BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed>
 | 
			
		||||
    <OutputExt>lib</OutputExt>
 | 
			
		||||
    <DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput>
 | 
			
		||||
    <Defines>NO_STRICT</Defines>
 | 
			
		||||
    <DynamicRTL>true</DynamicRTL>
 | 
			
		||||
    <UsePackages>true</UsePackages>
 | 
			
		||||
    <ProjectType>CppStaticLibrary</ProjectType>
 | 
			
		||||
    <BCC_CPPCompileAlways>true</BCC_CPPCompileAlways>
 | 
			
		||||
    <PackageImports>rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;dclZipForged11.bpi;vclZipForged11.bpi;GR32_BDS2006.bpi;GR32_DSGN_BDS2006.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi;CExceptionExpert11.bpi</PackageImports>
 | 
			
		||||
    <BCC_wpar>false</BCC_wpar>
 | 
			
		||||
    <IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</IncludePath>
 | 
			
		||||
    <AllPackageLibs>rtl.lib;vcl.lib</AllPackageLibs>
 | 
			
		||||
    <TLIB_PageSize>32</TLIB_PageSize>
 | 
			
		||||
    <ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</ILINK_LibraryPath>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Cfg_1)'!=''">
 | 
			
		||||
    <BCC_OptimizeForSpeed>false</BCC_OptimizeForSpeed>
 | 
			
		||||
    <DCC_Optimize>false</DCC_Optimize>
 | 
			
		||||
    <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
 | 
			
		||||
    <Defines>_DEBUG;$(Defines)</Defines>
 | 
			
		||||
    <ILINK_FullDebugInfo>true</ILINK_FullDebugInfo>
 | 
			
		||||
    <BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion>
 | 
			
		||||
    <ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking>
 | 
			
		||||
    <BCC_UseRegisterVariables>None</BCC_UseRegisterVariables>
 | 
			
		||||
    <DCC_Define>DEBUG</DCC_Define>
 | 
			
		||||
    <BCC_DebugLineNumbers>true</BCC_DebugLineNumbers>
 | 
			
		||||
    <IntermediateOutputDir>Debug</IntermediateOutputDir>
 | 
			
		||||
    <TASM_DisplaySourceLines>true</TASM_DisplaySourceLines>
 | 
			
		||||
    <BCC_StackFrames>true</BCC_StackFrames>
 | 
			
		||||
    <BCC_DisableOptimizations>true</BCC_DisableOptimizations>
 | 
			
		||||
    <ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath)</ILINK_LibraryPath>
 | 
			
		||||
    <TASM_Debugging>Full</TASM_Debugging>
 | 
			
		||||
    <BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Cfg_2)'!=''">
 | 
			
		||||
    <Defines>NDEBUG;$(Defines)</Defines>
 | 
			
		||||
    <IntermediateOutputDir>Release</IntermediateOutputDir>
 | 
			
		||||
    <ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath)</ILINK_LibraryPath>
 | 
			
		||||
    <TASM_Debugging>None</TASM_Debugging>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ProjectExtensions>
 | 
			
		||||
    <Borland.Personality>CPlusPlusBuilder.Personality</Borland.Personality>
 | 
			
		||||
    <Borland.ProjectType>CppStaticLibrary</Borland.ProjectType>
 | 
			
		||||
    <BorlandProject>
 | 
			
		||||
<BorlandProject><CPlusPlusBuilder.Personality><VersionInfo><VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1033</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Debugging><Debugging Name="DebugSourceDirs"></Debugging></Debugging><Parameters><Parameters Name="RunParams"></Parameters><Parameters Name="Launcher"></Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="DebugCWD"></Parameters><Parameters Name="HostApplication"></Parameters><Parameters Name="RemoteHost"></Parameters><Parameters Name="RemotePath"></Parameters><Parameters Name="RemoteParams"></Parameters><Parameters Name="RemoteLauncher"></Parameters><Parameters Name="UseRemoteLauncher">False</Parameters><Parameters Name="RemoteCWD"></Parameters><Parameters Name="RemoteDebug">False</Parameters><Parameters Name="Debug Symbols Search Path"></Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Excluded_Packages>
 | 
			
		||||
      
 | 
			
		||||
      
 | 
			
		||||
      <Excluded_Packages Name="$(BDS)\bin\bcboffice2k100.bpl">CodeGear C++Builder Office 2000 Servers Package</Excluded_Packages>
 | 
			
		||||
      <Excluded_Packages Name="$(BDS)\bin\bcbofficexp100.bpl">CodeGear C++Builder Office XP Servers Package</Excluded_Packages>
 | 
			
		||||
    </Excluded_Packages><Linker><Linker Name="LibPrefix"></Linker><Linker Name="LibSuffix"></Linker><Linker Name="LibVersion"></Linker></Linker><ProjectProperties><ProjectProperties Name="AutoShowDeps">False</ProjectProperties><ProjectProperties Name="ManagePaths">True</ProjectProperties><ProjectProperties Name="VerifyPackages">True</ProjectProperties></ProjectProperties><HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Count">3</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item0">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item1">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item2">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\src;..\include</HistoryLists_hlIncludePath></HistoryLists_hlIncludePath><HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Count">1</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item0">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</HistoryLists_hlILINK_LibraryPath></HistoryLists_hlILINK_LibraryPath><HistoryLists_hlDefines><HistoryLists_hlDefines Name="Count">1</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item0">NO_STRICT</HistoryLists_hlDefines></HistoryLists_hlDefines><HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Count">1</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item0">32</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item1">16</HistoryLists_hlTLIB_PageSize></HistoryLists_hlTLIB_PageSize></CPlusPlusBuilder.Personality></BorlandProject></BorlandProject>
 | 
			
		||||
  </ProjectExtensions>
 | 
			
		||||
  <Import Project="$(MSBuildBinPath)\Borland.Cpp.Targets" />
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <None Include="..\include\gtest\gtest-death-test.h">
 | 
			
		||||
      <BuildOrder>3</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\gtest-message.h">
 | 
			
		||||
      <BuildOrder>4</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\gtest-param-test.h">
 | 
			
		||||
      <BuildOrder>5</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\gtest-spi.h">
 | 
			
		||||
      <BuildOrder>6</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\gtest-test-part.h">
 | 
			
		||||
      <BuildOrder>7</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\gtest-typed-test.h">
 | 
			
		||||
      <BuildOrder>8</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\gtest.h">
 | 
			
		||||
      <BuildOrder>0</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\gtest_pred_impl.h">
 | 
			
		||||
      <BuildOrder>1</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\gtest_prod.h">
 | 
			
		||||
      <BuildOrder>2</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\internal\gtest-death-test-internal.h">
 | 
			
		||||
      <BuildOrder>9</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\internal\gtest-filepath.h">
 | 
			
		||||
      <BuildOrder>10</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\internal\gtest-internal.h">
 | 
			
		||||
      <BuildOrder>11</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\internal\gtest-linked_ptr.h">
 | 
			
		||||
      <BuildOrder>12</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\internal\gtest-param-util-generated.h">
 | 
			
		||||
      <BuildOrder>14</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\internal\gtest-param-util.h">
 | 
			
		||||
      <BuildOrder>13</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\internal\gtest-port.h">
 | 
			
		||||
      <BuildOrder>15</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\internal\gtest-string.h">
 | 
			
		||||
      <BuildOrder>16</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <None Include="..\include\gtest\internal\gtest-type-util.h">
 | 
			
		||||
      <BuildOrder>17</BuildOrder>
 | 
			
		||||
    </None>
 | 
			
		||||
    <CppCompile Include="gtest_all.cc">
 | 
			
		||||
      <BuildOrder>18</BuildOrder>
 | 
			
		||||
    </CppCompile>
 | 
			
		||||
    <BuildConfiguration Include="Debug">
 | 
			
		||||
      <Key>Cfg_1</Key>
 | 
			
		||||
    </BuildConfiguration>
 | 
			
		||||
    <BuildConfiguration Include="Release">
 | 
			
		||||
      <Key>Cfg_2</Key>
 | 
			
		||||
    </BuildConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										54
									
								
								third_party/googletest/src/codegear/gtest.groupproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								third_party/googletest/src/codegear/gtest.groupproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <ProjectGuid>{c1d923e0-6cba-4332-9b6f-3420acbf5091}</ProjectGuid>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ItemGroup />
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <Projects Include="gtest.cbproj" />
 | 
			
		||||
    <Projects Include="gtest_main.cbproj" />
 | 
			
		||||
    <Projects Include="gtest_unittest.cbproj" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
  <ProjectExtensions>
 | 
			
		||||
    <Borland.Personality>Default.Personality</Borland.Personality>
 | 
			
		||||
    <Borland.ProjectType />
 | 
			
		||||
    <BorlandProject>
 | 
			
		||||
<BorlandProject xmlns=""><Default.Personality></Default.Personality></BorlandProject></BorlandProject>
 | 
			
		||||
  </ProjectExtensions>
 | 
			
		||||
  <Target Name="gtest">
 | 
			
		||||
    <MSBuild Projects="gtest.cbproj" Targets="" />
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Target Name="gtest:Clean">
 | 
			
		||||
    <MSBuild Projects="gtest.cbproj" Targets="Clean" />
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Target Name="gtest:Make">
 | 
			
		||||
    <MSBuild Projects="gtest.cbproj" Targets="Make" />
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Target Name="gtest_main">
 | 
			
		||||
    <MSBuild Projects="gtest_main.cbproj" Targets="" />
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Target Name="gtest_main:Clean">
 | 
			
		||||
    <MSBuild Projects="gtest_main.cbproj" Targets="Clean" />
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Target Name="gtest_main:Make">
 | 
			
		||||
    <MSBuild Projects="gtest_main.cbproj" Targets="Make" />
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Target Name="gtest_unittest">
 | 
			
		||||
    <MSBuild Projects="gtest_unittest.cbproj" Targets="" />
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Target Name="gtest_unittest:Clean">
 | 
			
		||||
    <MSBuild Projects="gtest_unittest.cbproj" Targets="Clean" />
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Target Name="gtest_unittest:Make">
 | 
			
		||||
    <MSBuild Projects="gtest_unittest.cbproj" Targets="Make" />
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Target Name="Build">
 | 
			
		||||
    <CallTarget Targets="gtest;gtest_main;gtest_unittest" />
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Target Name="Clean">
 | 
			
		||||
    <CallTarget Targets="gtest:Clean;gtest_main:Clean;gtest_unittest:Clean" />
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Target Name="Make">
 | 
			
		||||
    <CallTarget Targets="gtest:Make;gtest_main:Make;gtest_unittest:Make" />
 | 
			
		||||
  </Target>
 | 
			
		||||
  <Import Condition="Exists('$(MSBuildBinPath)\Borland.Group.Targets')" Project="$(MSBuildBinPath)\Borland.Group.Targets" />
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										38
									
								
								third_party/googletest/src/codegear/gtest_all.cc
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								third_party/googletest/src/codegear/gtest_all.cc
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
// Copyright 2009, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: Josh Kelley (joshkel@gmail.com)
 | 
			
		||||
//
 | 
			
		||||
// Google C++ Testing Framework (Google Test)
 | 
			
		||||
//
 | 
			
		||||
// C++Builder's IDE cannot build a static library from files with hyphens
 | 
			
		||||
// in their name.  See http://qc.codegear.com/wc/qcmain.aspx?d=70977 .
 | 
			
		||||
// This file serves as a workaround.
 | 
			
		||||
 | 
			
		||||
#include "src/gtest-all.cc"
 | 
			
		||||
							
								
								
									
										40
									
								
								third_party/googletest/src/codegear/gtest_link.cc
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								third_party/googletest/src/codegear/gtest_link.cc
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
// Copyright 2009, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: Josh Kelley (joshkel@gmail.com)
 | 
			
		||||
//
 | 
			
		||||
// Google C++ Testing Framework (Google Test)
 | 
			
		||||
//
 | 
			
		||||
// Links gtest.lib and gtest_main.lib into the current project in C++Builder.
 | 
			
		||||
// This means that these libraries can't be renamed, but it's the only way to
 | 
			
		||||
// ensure that Debug versus Release test builds are linked against the
 | 
			
		||||
// appropriate Debug or Release build of the libraries.
 | 
			
		||||
 | 
			
		||||
#pragma link "gtest.lib"
 | 
			
		||||
#pragma link "gtest_main.lib"
 | 
			
		||||
							
								
								
									
										82
									
								
								third_party/googletest/src/codegear/gtest_main.cbproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								third_party/googletest/src/codegear/gtest_main.cbproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <ProjectGuid>{bca37a72-5b07-46cf-b44e-89f8e06451a2}</ProjectGuid>
 | 
			
		||||
    <Config Condition="'$(Config)'==''">Release</Config>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
 | 
			
		||||
    <Base>true</Base>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
 | 
			
		||||
    <Base>true</Base>
 | 
			
		||||
    <Cfg_1>true</Cfg_1>
 | 
			
		||||
    <CfgParent>Base</CfgParent>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
 | 
			
		||||
    <Base>true</Base>
 | 
			
		||||
    <Cfg_2>true</Cfg_2>
 | 
			
		||||
    <CfgParent>Base</CfgParent>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Base)'!=''">
 | 
			
		||||
    <BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed>
 | 
			
		||||
    <OutputExt>lib</OutputExt>
 | 
			
		||||
    <DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput>
 | 
			
		||||
    <Defines>NO_STRICT</Defines>
 | 
			
		||||
    <DynamicRTL>true</DynamicRTL>
 | 
			
		||||
    <UsePackages>true</UsePackages>
 | 
			
		||||
    <ProjectType>CppStaticLibrary</ProjectType>
 | 
			
		||||
    <BCC_CPPCompileAlways>true</BCC_CPPCompileAlways>
 | 
			
		||||
    <PackageImports>rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;dclZipForged11.bpi;vclZipForged11.bpi;GR32_BDS2006.bpi;GR32_DSGN_BDS2006.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi;CExceptionExpert11.bpi</PackageImports>
 | 
			
		||||
    <BCC_wpar>false</BCC_wpar>
 | 
			
		||||
    <IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</IncludePath>
 | 
			
		||||
    <AllPackageLibs>rtl.lib;vcl.lib</AllPackageLibs>
 | 
			
		||||
    <TLIB_PageSize>32</TLIB_PageSize>
 | 
			
		||||
    <ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</ILINK_LibraryPath>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Cfg_1)'!=''">
 | 
			
		||||
    <BCC_OptimizeForSpeed>false</BCC_OptimizeForSpeed>
 | 
			
		||||
    <DCC_Optimize>false</DCC_Optimize>
 | 
			
		||||
    <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
 | 
			
		||||
    <Defines>_DEBUG;$(Defines)</Defines>
 | 
			
		||||
    <ILINK_FullDebugInfo>true</ILINK_FullDebugInfo>
 | 
			
		||||
    <BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion>
 | 
			
		||||
    <ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking>
 | 
			
		||||
    <BCC_UseRegisterVariables>None</BCC_UseRegisterVariables>
 | 
			
		||||
    <DCC_Define>DEBUG</DCC_Define>
 | 
			
		||||
    <BCC_DebugLineNumbers>true</BCC_DebugLineNumbers>
 | 
			
		||||
    <IntermediateOutputDir>Debug</IntermediateOutputDir>
 | 
			
		||||
    <TASM_DisplaySourceLines>true</TASM_DisplaySourceLines>
 | 
			
		||||
    <BCC_StackFrames>true</BCC_StackFrames>
 | 
			
		||||
    <BCC_DisableOptimizations>true</BCC_DisableOptimizations>
 | 
			
		||||
    <ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath)</ILINK_LibraryPath>
 | 
			
		||||
    <TASM_Debugging>Full</TASM_Debugging>
 | 
			
		||||
    <BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Cfg_2)'!=''">
 | 
			
		||||
    <Defines>NDEBUG;$(Defines)</Defines>
 | 
			
		||||
    <IntermediateOutputDir>Release</IntermediateOutputDir>
 | 
			
		||||
    <ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath)</ILINK_LibraryPath>
 | 
			
		||||
    <TASM_Debugging>None</TASM_Debugging>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ProjectExtensions>
 | 
			
		||||
    <Borland.Personality>CPlusPlusBuilder.Personality</Borland.Personality>
 | 
			
		||||
    <Borland.ProjectType>CppStaticLibrary</Borland.ProjectType>
 | 
			
		||||
    <BorlandProject>
 | 
			
		||||
<BorlandProject><CPlusPlusBuilder.Personality><VersionInfo><VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1033</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Debugging><Debugging Name="DebugSourceDirs"></Debugging></Debugging><Parameters><Parameters Name="RunParams"></Parameters><Parameters Name="Launcher"></Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="DebugCWD"></Parameters><Parameters Name="HostApplication"></Parameters><Parameters Name="RemoteHost"></Parameters><Parameters Name="RemotePath"></Parameters><Parameters Name="RemoteParams"></Parameters><Parameters Name="RemoteLauncher"></Parameters><Parameters Name="UseRemoteLauncher">False</Parameters><Parameters Name="RemoteCWD"></Parameters><Parameters Name="RemoteDebug">False</Parameters><Parameters Name="Debug Symbols Search Path"></Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Excluded_Packages>
 | 
			
		||||
      <Excluded_Packages Name="$(BDS)\bin\bcboffice2k100.bpl">CodeGear C++Builder Office 2000 Servers Package</Excluded_Packages>
 | 
			
		||||
      <Excluded_Packages Name="$(BDS)\bin\bcbofficexp100.bpl">CodeGear C++Builder Office XP Servers Package</Excluded_Packages>
 | 
			
		||||
    </Excluded_Packages><Linker><Linker Name="LibPrefix"></Linker><Linker Name="LibSuffix"></Linker><Linker Name="LibVersion"></Linker></Linker><ProjectProperties><ProjectProperties Name="AutoShowDeps">False</ProjectProperties><ProjectProperties Name="ManagePaths">True</ProjectProperties><ProjectProperties Name="VerifyPackages">True</ProjectProperties></ProjectProperties><HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Count">3</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item0">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item1">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\include;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item2">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\src;..\src;..\include</HistoryLists_hlIncludePath></HistoryLists_hlIncludePath><HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Count">1</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item0">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk</HistoryLists_hlILINK_LibraryPath></HistoryLists_hlILINK_LibraryPath><HistoryLists_hlDefines><HistoryLists_hlDefines Name="Count">1</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item0">NO_STRICT</HistoryLists_hlDefines></HistoryLists_hlDefines><HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Count">1</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item0">32</HistoryLists_hlTLIB_PageSize><HistoryLists_hlTLIB_PageSize Name="Item1">16</HistoryLists_hlTLIB_PageSize></HistoryLists_hlTLIB_PageSize></CPlusPlusBuilder.Personality></BorlandProject></BorlandProject>
 | 
			
		||||
  </ProjectExtensions>
 | 
			
		||||
  <Import Project="$(MSBuildBinPath)\Borland.Cpp.Targets" />
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <CppCompile Include="..\src\gtest_main.cc">
 | 
			
		||||
      <BuildOrder>0</BuildOrder>
 | 
			
		||||
    </CppCompile>
 | 
			
		||||
    <BuildConfiguration Include="Debug">
 | 
			
		||||
      <Key>Cfg_1</Key>
 | 
			
		||||
    </BuildConfiguration>
 | 
			
		||||
    <BuildConfiguration Include="Release">
 | 
			
		||||
      <Key>Cfg_2</Key>
 | 
			
		||||
    </BuildConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										88
									
								
								third_party/googletest/src/codegear/gtest_unittest.cbproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										88
									
								
								third_party/googletest/src/codegear/gtest_unittest.cbproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,88 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 | 
			
		||||
  <PropertyGroup>
 | 
			
		||||
    <ProjectGuid>{eea63393-5ac5-4b9c-8909-d75fef2daa41}</ProjectGuid>
 | 
			
		||||
    <Config Condition="'$(Config)'==''">Release</Config>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
 | 
			
		||||
    <Base>true</Base>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
 | 
			
		||||
    <Base>true</Base>
 | 
			
		||||
    <Cfg_1>true</Cfg_1>
 | 
			
		||||
    <CfgParent>Base</CfgParent>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
 | 
			
		||||
    <Base>true</Base>
 | 
			
		||||
    <Cfg_2>true</Cfg_2>
 | 
			
		||||
    <CfgParent>Base</CfgParent>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Base)'!=''">
 | 
			
		||||
    <OutputExt>exe</OutputExt>
 | 
			
		||||
    <BCC_OptimizeForSpeed>true</BCC_OptimizeForSpeed>
 | 
			
		||||
    <Defines>NO_STRICT</Defines>
 | 
			
		||||
    <DCC_CBuilderOutput>JPHNE</DCC_CBuilderOutput>
 | 
			
		||||
    <DynamicRTL>true</DynamicRTL>
 | 
			
		||||
    <ILINK_ObjectSearchPath>..\test</ILINK_ObjectSearchPath>
 | 
			
		||||
    <UsePackages>true</UsePackages>
 | 
			
		||||
    <ProjectType>CppConsoleApplication</ProjectType>
 | 
			
		||||
    <NoVCL>true</NoVCL>
 | 
			
		||||
    <BCC_CPPCompileAlways>true</BCC_CPPCompileAlways>
 | 
			
		||||
    <PackageImports>rtl.bpi;vcl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;bdertl.bpi;vcldbx.bpi;dsnap.bpi;dsnapcon.bpi;vclib.bpi;ibxpress.bpi;adortl.bpi;dbxcds.bpi;dbexpress.bpi;DbxCommonDriver.bpi;websnap.bpi;vclie.bpi;webdsnap.bpi;inet.bpi;inetdbbde.bpi;inetdbxpress.bpi;soaprtl.bpi;Rave75VCL.bpi;teeUI.bpi;tee.bpi;teedb.bpi;IndyCore.bpi;IndySystem.bpi;IndyProtocols.bpi;IntrawebDB_90_100.bpi;Intraweb_90_100.bpi;Jcl.bpi;JclVcl.bpi;JvCoreD11R.bpi;JvSystemD11R.bpi;JvStdCtrlsD11R.bpi;JvAppFrmD11R.bpi;JvBandsD11R.bpi;JvDBD11R.bpi;JvDlgsD11R.bpi;JvBDED11R.bpi;JvCmpD11R.bpi;JvCryptD11R.bpi;JvCtrlsD11R.bpi;JvCustomD11R.bpi;JvDockingD11R.bpi;JvDotNetCtrlsD11R.bpi;JvEDID11R.bpi;JvGlobusD11R.bpi;JvHMID11R.bpi;JvInterpreterD11R.bpi;JvJansD11R.bpi;JvManagedThreadsD11R.bpi;JvMMD11R.bpi;JvNetD11R.bpi;JvPageCompsD11R.bpi;JvPluginD11R.bpi;JvPrintPreviewD11R.bpi;JvRuntimeDesignD11R.bpi;JvTimeFrameworkD11R.bpi;JvValidatorsD11R.bpi;JvWizardD11R.bpi;JvXPCtrlsD11R.bpi;VclSmp.bpi</PackageImports>
 | 
			
		||||
    <BCC_wpar>false</BCC_wpar>
 | 
			
		||||
    <IncludePath>$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test;..</IncludePath>
 | 
			
		||||
    <ILINK_LibraryPath>$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test</ILINK_LibraryPath>
 | 
			
		||||
    <Multithreaded>true</Multithreaded>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Cfg_1)'!=''">
 | 
			
		||||
    <BCC_OptimizeForSpeed>false</BCC_OptimizeForSpeed>
 | 
			
		||||
    <DCC_Optimize>false</DCC_Optimize>
 | 
			
		||||
    <DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
 | 
			
		||||
    <Defines>_DEBUG;$(Defines)</Defines>
 | 
			
		||||
    <ILINK_FullDebugInfo>true</ILINK_FullDebugInfo>
 | 
			
		||||
    <BCC_InlineFunctionExpansion>false</BCC_InlineFunctionExpansion>
 | 
			
		||||
    <ILINK_DisableIncrementalLinking>true</ILINK_DisableIncrementalLinking>
 | 
			
		||||
    <BCC_UseRegisterVariables>None</BCC_UseRegisterVariables>
 | 
			
		||||
    <DCC_Define>DEBUG</DCC_Define>
 | 
			
		||||
    <BCC_DebugLineNumbers>true</BCC_DebugLineNumbers>
 | 
			
		||||
    <IntermediateOutputDir>Debug</IntermediateOutputDir>
 | 
			
		||||
    <TASM_DisplaySourceLines>true</TASM_DisplaySourceLines>
 | 
			
		||||
    <BCC_StackFrames>true</BCC_StackFrames>
 | 
			
		||||
    <BCC_DisableOptimizations>true</BCC_DisableOptimizations>
 | 
			
		||||
    <ILINK_LibraryPath>$(BDS)\lib\debug;$(ILINK_LibraryPath)</ILINK_LibraryPath>
 | 
			
		||||
    <TASM_Debugging>Full</TASM_Debugging>
 | 
			
		||||
    <BCC_SourceDebuggingOn>true</BCC_SourceDebuggingOn>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <PropertyGroup Condition="'$(Cfg_2)'!=''">
 | 
			
		||||
    <Defines>NDEBUG;$(Defines)</Defines>
 | 
			
		||||
    <IntermediateOutputDir>Release</IntermediateOutputDir>
 | 
			
		||||
    <ILINK_LibraryPath>$(BDS)\lib\release;$(ILINK_LibraryPath)</ILINK_LibraryPath>
 | 
			
		||||
    <TASM_Debugging>None</TASM_Debugging>
 | 
			
		||||
  </PropertyGroup>
 | 
			
		||||
  <ProjectExtensions>
 | 
			
		||||
    <Borland.Personality>CPlusPlusBuilder.Personality</Borland.Personality>
 | 
			
		||||
    <Borland.ProjectType>CppConsoleApplication</Borland.ProjectType>
 | 
			
		||||
    <BorlandProject>
 | 
			
		||||
<BorlandProject><CPlusPlusBuilder.Personality><VersionInfo><VersionInfo Name="IncludeVerInfo">False</VersionInfo><VersionInfo Name="AutoIncBuild">False</VersionInfo><VersionInfo Name="MajorVer">1</VersionInfo><VersionInfo Name="MinorVer">0</VersionInfo><VersionInfo Name="Release">0</VersionInfo><VersionInfo Name="Build">0</VersionInfo><VersionInfo Name="Debug">False</VersionInfo><VersionInfo Name="PreRelease">False</VersionInfo><VersionInfo Name="Special">False</VersionInfo><VersionInfo Name="Private">False</VersionInfo><VersionInfo Name="DLL">False</VersionInfo><VersionInfo Name="Locale">1033</VersionInfo><VersionInfo Name="CodePage">1252</VersionInfo></VersionInfo><VersionInfoKeys><VersionInfoKeys Name="CompanyName"></VersionInfoKeys><VersionInfoKeys Name="FileDescription"></VersionInfoKeys><VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="InternalName"></VersionInfoKeys><VersionInfoKeys Name="LegalCopyright"></VersionInfoKeys><VersionInfoKeys Name="LegalTrademarks"></VersionInfoKeys><VersionInfoKeys Name="OriginalFilename"></VersionInfoKeys><VersionInfoKeys Name="ProductName"></VersionInfoKeys><VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys><VersionInfoKeys Name="Comments"></VersionInfoKeys></VersionInfoKeys><Debugging><Debugging Name="DebugSourceDirs"></Debugging></Debugging><Parameters><Parameters Name="RunParams"></Parameters><Parameters Name="Launcher"></Parameters><Parameters Name="UseLauncher">False</Parameters><Parameters Name="DebugCWD"></Parameters><Parameters Name="HostApplication"></Parameters><Parameters Name="RemoteHost"></Parameters><Parameters Name="RemotePath"></Parameters><Parameters Name="RemoteParams"></Parameters><Parameters Name="RemoteLauncher"></Parameters><Parameters Name="UseRemoteLauncher">False</Parameters><Parameters Name="RemoteCWD"></Parameters><Parameters Name="RemoteDebug">False</Parameters><Parameters Name="Debug Symbols Search Path"></Parameters><Parameters Name="LoadAllSymbols">True</Parameters><Parameters Name="LoadUnspecifiedSymbols">False</Parameters></Parameters><Excluded_Packages>
 | 
			
		||||
      
 | 
			
		||||
      
 | 
			
		||||
      <Excluded_Packages Name="$(BDS)\bin\bcboffice2k100.bpl">CodeGear C++Builder Office 2000 Servers Package</Excluded_Packages>
 | 
			
		||||
      <Excluded_Packages Name="$(BDS)\bin\bcbofficexp100.bpl">CodeGear C++Builder Office XP Servers Package</Excluded_Packages>
 | 
			
		||||
    </Excluded_Packages><Linker><Linker Name="LibPrefix"></Linker><Linker Name="LibSuffix"></Linker><Linker Name="LibVersion"></Linker></Linker><ProjectProperties><ProjectProperties Name="AutoShowDeps">False</ProjectProperties><ProjectProperties Name="ManagePaths">True</ProjectProperties><ProjectProperties Name="VerifyPackages">True</ProjectProperties></ProjectProperties><HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Count">3</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item0">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test;..</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item1">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include;..\test</HistoryLists_hlIncludePath><HistoryLists_hlIncludePath Name="Item2">$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;..\include</HistoryLists_hlIncludePath></HistoryLists_hlIncludePath><HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Count">1</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item0">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item1">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;..\test</HistoryLists_hlILINK_LibraryPath><HistoryLists_hlILINK_LibraryPath Name="Item2">$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;$(OUTPUTDIR);..\test</HistoryLists_hlILINK_LibraryPath></HistoryLists_hlILINK_LibraryPath><HistoryLists_hlDefines><HistoryLists_hlDefines Name="Count">2</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item0">NO_STRICT</HistoryLists_hlDefines><HistoryLists_hlDefines Name="Item1">STRICT</HistoryLists_hlDefines></HistoryLists_hlDefines></CPlusPlusBuilder.Personality></BorlandProject></BorlandProject>
 | 
			
		||||
  </ProjectExtensions>
 | 
			
		||||
  <Import Project="$(MSBuildBinPath)\Borland.Cpp.Targets" />
 | 
			
		||||
  <ItemGroup>
 | 
			
		||||
    <CppCompile Include="..\test\gtest_unittest.cc">
 | 
			
		||||
      <BuildOrder>0</BuildOrder>
 | 
			
		||||
    </CppCompile>
 | 
			
		||||
    <CppCompile Include="gtest_link.cc">
 | 
			
		||||
      <BuildOrder>1</BuildOrder>
 | 
			
		||||
    </CppCompile>
 | 
			
		||||
    <BuildConfiguration Include="Debug">
 | 
			
		||||
      <Key>Cfg_1</Key>
 | 
			
		||||
    </BuildConfiguration>
 | 
			
		||||
    <BuildConfiguration Include="Release">
 | 
			
		||||
      <Key>Cfg_2</Key>
 | 
			
		||||
    </BuildConfiguration>
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
							
								
								
									
										68
									
								
								third_party/googletest/src/configure.ac
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								third_party/googletest/src/configure.ac
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
m4_include(m4/acx_pthread.m4)
 | 
			
		||||
 | 
			
		||||
# At this point, the Xcode project assumes the version string will be three
 | 
			
		||||
# integers separated by periods and surrounded by square brackets (e.g.
 | 
			
		||||
# "[1.0.1]"). It also asumes that there won't be any closing parenthesis
 | 
			
		||||
# between "AC_INIT(" and the closing ")" including comments and strings.
 | 
			
		||||
AC_INIT([Google C++ Testing Framework],
 | 
			
		||||
        [1.6.0],
 | 
			
		||||
        [googletestframework@googlegroups.com],
 | 
			
		||||
        [gtest])
 | 
			
		||||
 | 
			
		||||
# Provide various options to initialize the Autoconf and configure processes.
 | 
			
		||||
AC_PREREQ([2.59])
 | 
			
		||||
AC_CONFIG_SRCDIR([./COPYING])
 | 
			
		||||
AC_CONFIG_MACRO_DIR([m4])
 | 
			
		||||
AC_CONFIG_AUX_DIR([build-aux])
 | 
			
		||||
AC_CONFIG_HEADERS([build-aux/config.h])
 | 
			
		||||
AC_CONFIG_FILES([Makefile])
 | 
			
		||||
AC_CONFIG_FILES([scripts/gtest-config], [chmod +x scripts/gtest-config])
 | 
			
		||||
 | 
			
		||||
# Initialize Automake with various options. We require at least v1.9, prevent
 | 
			
		||||
# pedantic complaints about package files, and enable various distribution
 | 
			
		||||
# targets.
 | 
			
		||||
AM_INIT_AUTOMAKE([1.9 dist-bzip2 dist-zip foreign subdir-objects])
 | 
			
		||||
 | 
			
		||||
# Check for programs used in building Google Test.
 | 
			
		||||
AC_PROG_CC
 | 
			
		||||
AC_PROG_CXX
 | 
			
		||||
AC_LANG([C++])
 | 
			
		||||
AC_PROG_LIBTOOL
 | 
			
		||||
 | 
			
		||||
# TODO(chandlerc@google.com): Currently we aren't running the Python tests
 | 
			
		||||
# against the interpreter detected by AM_PATH_PYTHON, and so we condition
 | 
			
		||||
# HAVE_PYTHON by requiring "python" to be in the PATH, and that interpreter's
 | 
			
		||||
# version to be >= 2.3. This will allow the scripts to use a "/usr/bin/env"
 | 
			
		||||
# hashbang.
 | 
			
		||||
PYTHON=  # We *do not* allow the user to specify a python interpreter
 | 
			
		||||
AC_PATH_PROG([PYTHON],[python],[:])
 | 
			
		||||
AS_IF([test "$PYTHON" != ":"],
 | 
			
		||||
      [AM_PYTHON_CHECK_VERSION([$PYTHON],[2.3],[:],[PYTHON=":"])])
 | 
			
		||||
AM_CONDITIONAL([HAVE_PYTHON],[test "$PYTHON" != ":"])
 | 
			
		||||
 | 
			
		||||
# Configure pthreads.
 | 
			
		||||
AC_ARG_WITH([pthreads],
 | 
			
		||||
            [AS_HELP_STRING([--with-pthreads],
 | 
			
		||||
               [use pthreads (default is yes)])],
 | 
			
		||||
            [with_pthreads=$withval],
 | 
			
		||||
            [with_pthreads=check])
 | 
			
		||||
 | 
			
		||||
have_pthreads=no
 | 
			
		||||
AS_IF([test "x$with_pthreads" != "xno"],
 | 
			
		||||
      [ACX_PTHREAD(
 | 
			
		||||
        [],
 | 
			
		||||
        [AS_IF([test "x$with_pthreads" != "xcheck"],
 | 
			
		||||
               [AC_MSG_FAILURE(
 | 
			
		||||
                 [--with-pthreads was specified, but unable to be used])])])
 | 
			
		||||
       have_pthreads="$acx_pthread_ok"])
 | 
			
		||||
AM_CONDITIONAL([HAVE_PTHREADS],[test "x$have_pthreads" == "xyes"])
 | 
			
		||||
AC_SUBST(PTHREAD_CFLAGS)
 | 
			
		||||
AC_SUBST(PTHREAD_LIBS)
 | 
			
		||||
 | 
			
		||||
# TODO(chandlerc@google.com) Check for the necessary system headers.
 | 
			
		||||
 | 
			
		||||
# TODO(chandlerc@google.com) Check the types, structures, and other compiler
 | 
			
		||||
# and architecture characteristics.
 | 
			
		||||
 | 
			
		||||
# Output the generated files. No further autoconf macros may be used.
 | 
			
		||||
AC_OUTPUT
 | 
			
		||||
							
								
								
									
										283
									
								
								third_party/googletest/src/include/gtest/gtest-death-test.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										283
									
								
								third_party/googletest/src/include/gtest/gtest-death-test.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,283 @@
 | 
			
		||||
// Copyright 2005, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: wan@google.com (Zhanyong Wan)
 | 
			
		||||
//
 | 
			
		||||
// The Google C++ Testing Framework (Google Test)
 | 
			
		||||
//
 | 
			
		||||
// This header file defines the public API for death tests.  It is
 | 
			
		||||
// #included by gtest.h so a user doesn't need to include this
 | 
			
		||||
// directly.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
 | 
			
		||||
 | 
			
		||||
#include "gtest/internal/gtest-death-test-internal.h"
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
 | 
			
		||||
// This flag controls the style of death tests.  Valid values are "threadsafe",
 | 
			
		||||
// meaning that the death test child process will re-execute the test binary
 | 
			
		||||
// from the start, running only a single death test, or "fast",
 | 
			
		||||
// meaning that the child process will execute the test logic immediately
 | 
			
		||||
// after forking.
 | 
			
		||||
GTEST_DECLARE_string_(death_test_style);
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_DEATH_TEST
 | 
			
		||||
 | 
			
		||||
// The following macros are useful for writing death tests.
 | 
			
		||||
 | 
			
		||||
// Here's what happens when an ASSERT_DEATH* or EXPECT_DEATH* is
 | 
			
		||||
// executed:
 | 
			
		||||
//
 | 
			
		||||
//   1. It generates a warning if there is more than one active
 | 
			
		||||
//   thread.  This is because it's safe to fork() or clone() only
 | 
			
		||||
//   when there is a single thread.
 | 
			
		||||
//
 | 
			
		||||
//   2. The parent process clone()s a sub-process and runs the death
 | 
			
		||||
//   test in it; the sub-process exits with code 0 at the end of the
 | 
			
		||||
//   death test, if it hasn't exited already.
 | 
			
		||||
//
 | 
			
		||||
//   3. The parent process waits for the sub-process to terminate.
 | 
			
		||||
//
 | 
			
		||||
//   4. The parent process checks the exit code and error message of
 | 
			
		||||
//   the sub-process.
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
//   ASSERT_DEATH(server.SendMessage(56, "Hello"), "Invalid port number");
 | 
			
		||||
//   for (int i = 0; i < 5; i++) {
 | 
			
		||||
//     EXPECT_DEATH(server.ProcessRequest(i),
 | 
			
		||||
//                  "Invalid request .* in ProcessRequest()")
 | 
			
		||||
//         << "Failed to die on request " << i);
 | 
			
		||||
//   }
 | 
			
		||||
//
 | 
			
		||||
//   ASSERT_EXIT(server.ExitNow(), ::testing::ExitedWithCode(0), "Exiting");
 | 
			
		||||
//
 | 
			
		||||
//   bool KilledBySIGHUP(int exit_code) {
 | 
			
		||||
//     return WIFSIGNALED(exit_code) && WTERMSIG(exit_code) == SIGHUP;
 | 
			
		||||
//   }
 | 
			
		||||
//
 | 
			
		||||
//   ASSERT_EXIT(client.HangUpServer(), KilledBySIGHUP, "Hanging up!");
 | 
			
		||||
//
 | 
			
		||||
// On the regular expressions used in death tests:
 | 
			
		||||
//
 | 
			
		||||
//   On POSIX-compliant systems (*nix), we use the <regex.h> library,
 | 
			
		||||
//   which uses the POSIX extended regex syntax.
 | 
			
		||||
//
 | 
			
		||||
//   On other platforms (e.g. Windows), we only support a simple regex
 | 
			
		||||
//   syntax implemented as part of Google Test.  This limited
 | 
			
		||||
//   implementation should be enough most of the time when writing
 | 
			
		||||
//   death tests; though it lacks many features you can find in PCRE
 | 
			
		||||
//   or POSIX extended regex syntax.  For example, we don't support
 | 
			
		||||
//   union ("x|y"), grouping ("(xy)"), brackets ("[xy]"), and
 | 
			
		||||
//   repetition count ("x{5,7}"), among others.
 | 
			
		||||
//
 | 
			
		||||
//   Below is the syntax that we do support.  We chose it to be a
 | 
			
		||||
//   subset of both PCRE and POSIX extended regex, so it's easy to
 | 
			
		||||
//   learn wherever you come from.  In the following: 'A' denotes a
 | 
			
		||||
//   literal character, period (.), or a single \\ escape sequence;
 | 
			
		||||
//   'x' and 'y' denote regular expressions; 'm' and 'n' are for
 | 
			
		||||
//   natural numbers.
 | 
			
		||||
//
 | 
			
		||||
//     c     matches any literal character c
 | 
			
		||||
//     \\d   matches any decimal digit
 | 
			
		||||
//     \\D   matches any character that's not a decimal digit
 | 
			
		||||
//     \\f   matches \f
 | 
			
		||||
//     \\n   matches \n
 | 
			
		||||
//     \\r   matches \r
 | 
			
		||||
//     \\s   matches any ASCII whitespace, including \n
 | 
			
		||||
//     \\S   matches any character that's not a whitespace
 | 
			
		||||
//     \\t   matches \t
 | 
			
		||||
//     \\v   matches \v
 | 
			
		||||
//     \\w   matches any letter, _, or decimal digit
 | 
			
		||||
//     \\W   matches any character that \\w doesn't match
 | 
			
		||||
//     \\c   matches any literal character c, which must be a punctuation
 | 
			
		||||
//     .     matches any single character except \n
 | 
			
		||||
//     A?    matches 0 or 1 occurrences of A
 | 
			
		||||
//     A*    matches 0 or many occurrences of A
 | 
			
		||||
//     A+    matches 1 or many occurrences of A
 | 
			
		||||
//     ^     matches the beginning of a string (not that of each line)
 | 
			
		||||
//     $     matches the end of a string (not that of each line)
 | 
			
		||||
//     xy    matches x followed by y
 | 
			
		||||
//
 | 
			
		||||
//   If you accidentally use PCRE or POSIX extended regex features
 | 
			
		||||
//   not implemented by us, you will get a run-time failure.  In that
 | 
			
		||||
//   case, please try to rewrite your regular expression within the
 | 
			
		||||
//   above syntax.
 | 
			
		||||
//
 | 
			
		||||
//   This implementation is *not* meant to be as highly tuned or robust
 | 
			
		||||
//   as a compiled regex library, but should perform well enough for a
 | 
			
		||||
//   death test, which already incurs significant overhead by launching
 | 
			
		||||
//   a child process.
 | 
			
		||||
//
 | 
			
		||||
// Known caveats:
 | 
			
		||||
//
 | 
			
		||||
//   A "threadsafe" style death test obtains the path to the test
 | 
			
		||||
//   program from argv[0] and re-executes it in the sub-process.  For
 | 
			
		||||
//   simplicity, the current implementation doesn't search the PATH
 | 
			
		||||
//   when launching the sub-process.  This means that the user must
 | 
			
		||||
//   invoke the test program via a path that contains at least one
 | 
			
		||||
//   path separator (e.g. path/to/foo_test and
 | 
			
		||||
//   /absolute/path/to/bar_test are fine, but foo_test is not).  This
 | 
			
		||||
//   is rarely a problem as people usually don't put the test binary
 | 
			
		||||
//   directory in PATH.
 | 
			
		||||
//
 | 
			
		||||
// TODO(wan@google.com): make thread-safe death tests search the PATH.
 | 
			
		||||
 | 
			
		||||
// Asserts that a given statement causes the program to exit, with an
 | 
			
		||||
// integer exit status that satisfies predicate, and emitting error output
 | 
			
		||||
// that matches regex.
 | 
			
		||||
# define ASSERT_EXIT(statement, predicate, regex) \
 | 
			
		||||
    GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_FATAL_FAILURE_)
 | 
			
		||||
 | 
			
		||||
// Like ASSERT_EXIT, but continues on to successive tests in the
 | 
			
		||||
// test case, if any:
 | 
			
		||||
# define EXPECT_EXIT(statement, predicate, regex) \
 | 
			
		||||
    GTEST_DEATH_TEST_(statement, predicate, regex, GTEST_NONFATAL_FAILURE_)
 | 
			
		||||
 | 
			
		||||
// Asserts that a given statement causes the program to exit, either by
 | 
			
		||||
// explicitly exiting with a nonzero exit code or being killed by a
 | 
			
		||||
// signal, and emitting error output that matches regex.
 | 
			
		||||
# define ASSERT_DEATH(statement, regex) \
 | 
			
		||||
    ASSERT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)
 | 
			
		||||
 | 
			
		||||
// Like ASSERT_DEATH, but continues on to successive tests in the
 | 
			
		||||
// test case, if any:
 | 
			
		||||
# define EXPECT_DEATH(statement, regex) \
 | 
			
		||||
    EXPECT_EXIT(statement, ::testing::internal::ExitedUnsuccessfully, regex)
 | 
			
		||||
 | 
			
		||||
// Two predicate classes that can be used in {ASSERT,EXPECT}_EXIT*:
 | 
			
		||||
 | 
			
		||||
// Tests that an exit code describes a normal exit with a given exit code.
 | 
			
		||||
class GTEST_API_ ExitedWithCode {
 | 
			
		||||
 public:
 | 
			
		||||
  explicit ExitedWithCode(int exit_code);
 | 
			
		||||
  bool operator()(int exit_status) const;
 | 
			
		||||
 private:
 | 
			
		||||
  // No implementation - assignment is unsupported.
 | 
			
		||||
  void operator=(const ExitedWithCode& other);
 | 
			
		||||
 | 
			
		||||
  const int exit_code_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
# if !GTEST_OS_WINDOWS
 | 
			
		||||
// Tests that an exit code describes an exit due to termination by a
 | 
			
		||||
// given signal.
 | 
			
		||||
class GTEST_API_ KilledBySignal {
 | 
			
		||||
 public:
 | 
			
		||||
  explicit KilledBySignal(int signum);
 | 
			
		||||
  bool operator()(int exit_status) const;
 | 
			
		||||
 private:
 | 
			
		||||
  const int signum_;
 | 
			
		||||
};
 | 
			
		||||
# endif  // !GTEST_OS_WINDOWS
 | 
			
		||||
 | 
			
		||||
// EXPECT_DEBUG_DEATH asserts that the given statements die in debug mode.
 | 
			
		||||
// The death testing framework causes this to have interesting semantics,
 | 
			
		||||
// since the sideeffects of the call are only visible in opt mode, and not
 | 
			
		||||
// in debug mode.
 | 
			
		||||
//
 | 
			
		||||
// In practice, this can be used to test functions that utilize the
 | 
			
		||||
// LOG(DFATAL) macro using the following style:
 | 
			
		||||
//
 | 
			
		||||
// int DieInDebugOr12(int* sideeffect) {
 | 
			
		||||
//   if (sideeffect) {
 | 
			
		||||
//     *sideeffect = 12;
 | 
			
		||||
//   }
 | 
			
		||||
//   LOG(DFATAL) << "death";
 | 
			
		||||
//   return 12;
 | 
			
		||||
// }
 | 
			
		||||
//
 | 
			
		||||
// TEST(TestCase, TestDieOr12WorksInDgbAndOpt) {
 | 
			
		||||
//   int sideeffect = 0;
 | 
			
		||||
//   // Only asserts in dbg.
 | 
			
		||||
//   EXPECT_DEBUG_DEATH(DieInDebugOr12(&sideeffect), "death");
 | 
			
		||||
//
 | 
			
		||||
// #ifdef NDEBUG
 | 
			
		||||
//   // opt-mode has sideeffect visible.
 | 
			
		||||
//   EXPECT_EQ(12, sideeffect);
 | 
			
		||||
// #else
 | 
			
		||||
//   // dbg-mode no visible sideeffect.
 | 
			
		||||
//   EXPECT_EQ(0, sideeffect);
 | 
			
		||||
// #endif
 | 
			
		||||
// }
 | 
			
		||||
//
 | 
			
		||||
// This will assert that DieInDebugReturn12InOpt() crashes in debug
 | 
			
		||||
// mode, usually due to a DCHECK or LOG(DFATAL), but returns the
 | 
			
		||||
// appropriate fallback value (12 in this case) in opt mode. If you
 | 
			
		||||
// need to test that a function has appropriate side-effects in opt
 | 
			
		||||
// mode, include assertions against the side-effects.  A general
 | 
			
		||||
// pattern for this is:
 | 
			
		||||
//
 | 
			
		||||
// EXPECT_DEBUG_DEATH({
 | 
			
		||||
//   // Side-effects here will have an effect after this statement in
 | 
			
		||||
//   // opt mode, but none in debug mode.
 | 
			
		||||
//   EXPECT_EQ(12, DieInDebugOr12(&sideeffect));
 | 
			
		||||
// }, "death");
 | 
			
		||||
//
 | 
			
		||||
# ifdef NDEBUG
 | 
			
		||||
 | 
			
		||||
#  define EXPECT_DEBUG_DEATH(statement, regex) \
 | 
			
		||||
  do { statement; } while (::testing::internal::AlwaysFalse())
 | 
			
		||||
 | 
			
		||||
#  define ASSERT_DEBUG_DEATH(statement, regex) \
 | 
			
		||||
  do { statement; } while (::testing::internal::AlwaysFalse())
 | 
			
		||||
 | 
			
		||||
# else
 | 
			
		||||
 | 
			
		||||
#  define EXPECT_DEBUG_DEATH(statement, regex) \
 | 
			
		||||
  EXPECT_DEATH(statement, regex)
 | 
			
		||||
 | 
			
		||||
#  define ASSERT_DEBUG_DEATH(statement, regex) \
 | 
			
		||||
  ASSERT_DEATH(statement, regex)
 | 
			
		||||
 | 
			
		||||
# endif  // NDEBUG for EXPECT_DEBUG_DEATH
 | 
			
		||||
#endif  // GTEST_HAS_DEATH_TEST
 | 
			
		||||
 | 
			
		||||
// EXPECT_DEATH_IF_SUPPORTED(statement, regex) and
 | 
			
		||||
// ASSERT_DEATH_IF_SUPPORTED(statement, regex) expand to real death tests if
 | 
			
		||||
// death tests are supported; otherwise they just issue a warning.  This is
 | 
			
		||||
// useful when you are combining death test assertions with normal test
 | 
			
		||||
// assertions in one test.
 | 
			
		||||
#if GTEST_HAS_DEATH_TEST
 | 
			
		||||
# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
 | 
			
		||||
    EXPECT_DEATH(statement, regex)
 | 
			
		||||
# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \
 | 
			
		||||
    ASSERT_DEATH(statement, regex)
 | 
			
		||||
#else
 | 
			
		||||
# define EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
 | 
			
		||||
    GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, )
 | 
			
		||||
# define ASSERT_DEATH_IF_SUPPORTED(statement, regex) \
 | 
			
		||||
    GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, return)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_GTEST_DEATH_TEST_H_
 | 
			
		||||
							
								
								
									
										230
									
								
								third_party/googletest/src/include/gtest/gtest-message.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										230
									
								
								third_party/googletest/src/include/gtest/gtest-message.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,230 @@
 | 
			
		||||
// Copyright 2005, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: wan@google.com (Zhanyong Wan)
 | 
			
		||||
//
 | 
			
		||||
// The Google C++ Testing Framework (Google Test)
 | 
			
		||||
//
 | 
			
		||||
// This header file defines the Message class.
 | 
			
		||||
//
 | 
			
		||||
// IMPORTANT NOTE: Due to limitation of the C++ language, we have to
 | 
			
		||||
// leave some internal implementation details in this header file.
 | 
			
		||||
// They are clearly marked by comments like this:
 | 
			
		||||
//
 | 
			
		||||
//   // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
 | 
			
		||||
//
 | 
			
		||||
// Such code is NOT meant to be used by a user directly, and is subject
 | 
			
		||||
// to CHANGE WITHOUT NOTICE.  Therefore DO NOT DEPEND ON IT in a user
 | 
			
		||||
// program!
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
 | 
			
		||||
 | 
			
		||||
#include <limits>
 | 
			
		||||
 | 
			
		||||
#include "gtest/internal/gtest-string.h"
 | 
			
		||||
#include "gtest/internal/gtest-internal.h"
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
 | 
			
		||||
// The Message class works like an ostream repeater.
 | 
			
		||||
//
 | 
			
		||||
// Typical usage:
 | 
			
		||||
//
 | 
			
		||||
//   1. You stream a bunch of values to a Message object.
 | 
			
		||||
//      It will remember the text in a stringstream.
 | 
			
		||||
//   2. Then you stream the Message object to an ostream.
 | 
			
		||||
//      This causes the text in the Message to be streamed
 | 
			
		||||
//      to the ostream.
 | 
			
		||||
//
 | 
			
		||||
// For example;
 | 
			
		||||
//
 | 
			
		||||
//   testing::Message foo;
 | 
			
		||||
//   foo << 1 << " != " << 2;
 | 
			
		||||
//   std::cout << foo;
 | 
			
		||||
//
 | 
			
		||||
// will print "1 != 2".
 | 
			
		||||
//
 | 
			
		||||
// Message is not intended to be inherited from.  In particular, its
 | 
			
		||||
// destructor is not virtual.
 | 
			
		||||
//
 | 
			
		||||
// Note that stringstream behaves differently in gcc and in MSVC.  You
 | 
			
		||||
// can stream a NULL char pointer to it in the former, but not in the
 | 
			
		||||
// latter (it causes an access violation if you do).  The Message
 | 
			
		||||
// class hides this difference by treating a NULL char pointer as
 | 
			
		||||
// "(null)".
 | 
			
		||||
class GTEST_API_ Message {
 | 
			
		||||
 private:
 | 
			
		||||
  // The type of basic IO manipulators (endl, ends, and flush) for
 | 
			
		||||
  // narrow streams.
 | 
			
		||||
  typedef std::ostream& (*BasicNarrowIoManip)(std::ostream&);
 | 
			
		||||
 | 
			
		||||
 public:
 | 
			
		||||
  // Constructs an empty Message.
 | 
			
		||||
  // We allocate the stringstream separately because otherwise each use of
 | 
			
		||||
  // ASSERT/EXPECT in a procedure adds over 200 bytes to the procedure's
 | 
			
		||||
  // stack frame leading to huge stack frames in some cases; gcc does not reuse
 | 
			
		||||
  // the stack space.
 | 
			
		||||
  Message() : ss_(new ::std::stringstream) {
 | 
			
		||||
    // By default, we want there to be enough precision when printing
 | 
			
		||||
    // a double to a Message.
 | 
			
		||||
    *ss_ << std::setprecision(std::numeric_limits<double>::digits10 + 2);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Copy constructor.
 | 
			
		||||
  Message(const Message& msg) : ss_(new ::std::stringstream) {  // NOLINT
 | 
			
		||||
    *ss_ << msg.GetString();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Constructs a Message from a C-string.
 | 
			
		||||
  explicit Message(const char* str) : ss_(new ::std::stringstream) {
 | 
			
		||||
    *ss_ << str;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#if GTEST_OS_SYMBIAN
 | 
			
		||||
  // Streams a value (either a pointer or not) to this object.
 | 
			
		||||
  template <typename T>
 | 
			
		||||
  inline Message& operator <<(const T& value) {
 | 
			
		||||
    StreamHelper(typename internal::is_pointer<T>::type(), value);
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
#else
 | 
			
		||||
  // Streams a non-pointer value to this object.
 | 
			
		||||
  template <typename T>
 | 
			
		||||
  inline Message& operator <<(const T& val) {
 | 
			
		||||
    ::GTestStreamToHelper(ss_.get(), val);
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Streams a pointer value to this object.
 | 
			
		||||
  //
 | 
			
		||||
  // This function is an overload of the previous one.  When you
 | 
			
		||||
  // stream a pointer to a Message, this definition will be used as it
 | 
			
		||||
  // is more specialized.  (The C++ Standard, section
 | 
			
		||||
  // [temp.func.order].)  If you stream a non-pointer, then the
 | 
			
		||||
  // previous definition will be used.
 | 
			
		||||
  //
 | 
			
		||||
  // The reason for this overload is that streaming a NULL pointer to
 | 
			
		||||
  // ostream is undefined behavior.  Depending on the compiler, you
 | 
			
		||||
  // may get "0", "(nil)", "(null)", or an access violation.  To
 | 
			
		||||
  // ensure consistent result across compilers, we always treat NULL
 | 
			
		||||
  // as "(null)".
 | 
			
		||||
  template <typename T>
 | 
			
		||||
  inline Message& operator <<(T* const& pointer) {  // NOLINT
 | 
			
		||||
    if (pointer == NULL) {
 | 
			
		||||
      *ss_ << "(null)";
 | 
			
		||||
    } else {
 | 
			
		||||
      ::GTestStreamToHelper(ss_.get(), pointer);
 | 
			
		||||
    }
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
#endif  // GTEST_OS_SYMBIAN
 | 
			
		||||
 | 
			
		||||
  // Since the basic IO manipulators are overloaded for both narrow
 | 
			
		||||
  // and wide streams, we have to provide this specialized definition
 | 
			
		||||
  // of operator <<, even though its body is the same as the
 | 
			
		||||
  // templatized version above.  Without this definition, streaming
 | 
			
		||||
  // endl or other basic IO manipulators to Message will confuse the
 | 
			
		||||
  // compiler.
 | 
			
		||||
  Message& operator <<(BasicNarrowIoManip val) {
 | 
			
		||||
    *ss_ << val;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Instead of 1/0, we want to see true/false for bool values.
 | 
			
		||||
  Message& operator <<(bool b) {
 | 
			
		||||
    return *this << (b ? "true" : "false");
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // These two overloads allow streaming a wide C string to a Message
 | 
			
		||||
  // using the UTF-8 encoding.
 | 
			
		||||
  Message& operator <<(const wchar_t* wide_c_str) {
 | 
			
		||||
    return *this << internal::String::ShowWideCString(wide_c_str);
 | 
			
		||||
  }
 | 
			
		||||
  Message& operator <<(wchar_t* wide_c_str) {
 | 
			
		||||
    return *this << internal::String::ShowWideCString(wide_c_str);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_STD_WSTRING
 | 
			
		||||
  // Converts the given wide string to a narrow string using the UTF-8
 | 
			
		||||
  // encoding, and streams the result to this Message object.
 | 
			
		||||
  Message& operator <<(const ::std::wstring& wstr);
 | 
			
		||||
#endif  // GTEST_HAS_STD_WSTRING
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_GLOBAL_WSTRING
 | 
			
		||||
  // Converts the given wide string to a narrow string using the UTF-8
 | 
			
		||||
  // encoding, and streams the result to this Message object.
 | 
			
		||||
  Message& operator <<(const ::wstring& wstr);
 | 
			
		||||
#endif  // GTEST_HAS_GLOBAL_WSTRING
 | 
			
		||||
 | 
			
		||||
  // Gets the text streamed to this object so far as a String.
 | 
			
		||||
  // Each '\0' character in the buffer is replaced with "\\0".
 | 
			
		||||
  //
 | 
			
		||||
  // INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
 | 
			
		||||
  internal::String GetString() const {
 | 
			
		||||
    return internal::StringStreamToString(ss_.get());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
 | 
			
		||||
#if GTEST_OS_SYMBIAN
 | 
			
		||||
  // These are needed as the Nokia Symbian Compiler cannot decide between
 | 
			
		||||
  // const T& and const T* in a function template. The Nokia compiler _can_
 | 
			
		||||
  // decide between class template specializations for T and T*, so a
 | 
			
		||||
  // tr1::type_traits-like is_pointer works, and we can overload on that.
 | 
			
		||||
  template <typename T>
 | 
			
		||||
  inline void StreamHelper(internal::true_type /*dummy*/, T* pointer) {
 | 
			
		||||
    if (pointer == NULL) {
 | 
			
		||||
      *ss_ << "(null)";
 | 
			
		||||
    } else {
 | 
			
		||||
      ::GTestStreamToHelper(ss_.get(), pointer);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  template <typename T>
 | 
			
		||||
  inline void StreamHelper(internal::false_type /*dummy*/, const T& value) {
 | 
			
		||||
    ::GTestStreamToHelper(ss_.get(), value);
 | 
			
		||||
  }
 | 
			
		||||
#endif  // GTEST_OS_SYMBIAN
 | 
			
		||||
 | 
			
		||||
  // We'll hold the text streamed to this object here.
 | 
			
		||||
  const internal::scoped_ptr< ::std::stringstream> ss_;
 | 
			
		||||
 | 
			
		||||
  // We declare (but don't implement) this to prevent the compiler
 | 
			
		||||
  // from implementing the assignment operator.
 | 
			
		||||
  void operator=(const Message&);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Streams a Message to an ostream.
 | 
			
		||||
inline std::ostream& operator <<(std::ostream& os, const Message& sb) {
 | 
			
		||||
  return os << sb.GetString();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_GTEST_MESSAGE_H_
 | 
			
		||||
							
								
								
									
										1421
									
								
								third_party/googletest/src/include/gtest/gtest-param-test.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1421
									
								
								third_party/googletest/src/include/gtest/gtest-param-test.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										487
									
								
								third_party/googletest/src/include/gtest/gtest-param-test.h.pump
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										487
									
								
								third_party/googletest/src/include/gtest/gtest-param-test.h.pump
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,487 @@
 | 
			
		||||
$$ -*- mode: c++; -*-
 | 
			
		||||
$var n = 50  $$ Maximum length of Values arguments we want to support.
 | 
			
		||||
$var maxtuple = 10  $$ Maximum number of Combine arguments we want to support.
 | 
			
		||||
// Copyright 2008, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Authors: vladl@google.com (Vlad Losev)
 | 
			
		||||
//
 | 
			
		||||
// Macros and functions for implementing parameterized tests
 | 
			
		||||
// in Google C++ Testing Framework (Google Test)
 | 
			
		||||
//
 | 
			
		||||
// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
 | 
			
		||||
//
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Value-parameterized tests allow you to test your code with different
 | 
			
		||||
// parameters without writing multiple copies of the same test.
 | 
			
		||||
//
 | 
			
		||||
// Here is how you use value-parameterized tests:
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
 | 
			
		||||
// To write value-parameterized tests, first you should define a fixture
 | 
			
		||||
// class. It is usually derived from testing::TestWithParam<T> (see below for
 | 
			
		||||
// another inheritance scheme that's sometimes useful in more complicated
 | 
			
		||||
// class hierarchies), where the type of your parameter values.
 | 
			
		||||
// TestWithParam<T> is itself derived from testing::Test. T can be any
 | 
			
		||||
// copyable type. If it's a raw pointer, you are responsible for managing the
 | 
			
		||||
// lifespan of the pointed values.
 | 
			
		||||
 | 
			
		||||
class FooTest : public ::testing::TestWithParam<const char*> {
 | 
			
		||||
  // You can implement all the usual class fixture members here.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Then, use the TEST_P macro to define as many parameterized tests
 | 
			
		||||
// for this fixture as you want. The _P suffix is for "parameterized"
 | 
			
		||||
// or "pattern", whichever you prefer to think.
 | 
			
		||||
 | 
			
		||||
TEST_P(FooTest, DoesBlah) {
 | 
			
		||||
  // Inside a test, access the test parameter with the GetParam() method
 | 
			
		||||
  // of the TestWithParam<T> class:
 | 
			
		||||
  EXPECT_TRUE(foo.Blah(GetParam()));
 | 
			
		||||
  ...
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_P(FooTest, HasBlahBlah) {
 | 
			
		||||
  ...
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Finally, you can use INSTANTIATE_TEST_CASE_P to instantiate the test
 | 
			
		||||
// case with any set of parameters you want. Google Test defines a number
 | 
			
		||||
// of functions for generating test parameters. They return what we call
 | 
			
		||||
// (surprise!) parameter generators. Here is a  summary of them, which
 | 
			
		||||
// are all in the testing namespace:
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//  Range(begin, end [, step]) - Yields values {begin, begin+step,
 | 
			
		||||
//                               begin+step+step, ...}. The values do not
 | 
			
		||||
//                               include end. step defaults to 1.
 | 
			
		||||
//  Values(v1, v2, ..., vN)    - Yields values {v1, v2, ..., vN}.
 | 
			
		||||
//  ValuesIn(container)        - Yields values from a C-style array, an STL
 | 
			
		||||
//  ValuesIn(begin,end)          container, or an iterator range [begin, end).
 | 
			
		||||
//  Bool()                     - Yields sequence {false, true}.
 | 
			
		||||
//  Combine(g1, g2, ..., gN)   - Yields all combinations (the Cartesian product
 | 
			
		||||
//                               for the math savvy) of the values generated
 | 
			
		||||
//                               by the N generators.
 | 
			
		||||
//
 | 
			
		||||
// For more details, see comments at the definitions of these functions below
 | 
			
		||||
// in this file.
 | 
			
		||||
//
 | 
			
		||||
// The following statement will instantiate tests from the FooTest test case
 | 
			
		||||
// each with parameter values "meeny", "miny", and "moe".
 | 
			
		||||
 | 
			
		||||
INSTANTIATE_TEST_CASE_P(InstantiationName,
 | 
			
		||||
                        FooTest,
 | 
			
		||||
                        Values("meeny", "miny", "moe"));
 | 
			
		||||
 | 
			
		||||
// To distinguish different instances of the pattern, (yes, you
 | 
			
		||||
// can instantiate it more then once) the first argument to the
 | 
			
		||||
// INSTANTIATE_TEST_CASE_P macro is a prefix that will be added to the
 | 
			
		||||
// actual test case name. Remember to pick unique prefixes for different
 | 
			
		||||
// instantiations. The tests from the instantiation above will have
 | 
			
		||||
// these names:
 | 
			
		||||
//
 | 
			
		||||
//    * InstantiationName/FooTest.DoesBlah/0 for "meeny"
 | 
			
		||||
//    * InstantiationName/FooTest.DoesBlah/1 for "miny"
 | 
			
		||||
//    * InstantiationName/FooTest.DoesBlah/2 for "moe"
 | 
			
		||||
//    * InstantiationName/FooTest.HasBlahBlah/0 for "meeny"
 | 
			
		||||
//    * InstantiationName/FooTest.HasBlahBlah/1 for "miny"
 | 
			
		||||
//    * InstantiationName/FooTest.HasBlahBlah/2 for "moe"
 | 
			
		||||
//
 | 
			
		||||
// You can use these names in --gtest_filter.
 | 
			
		||||
//
 | 
			
		||||
// This statement will instantiate all tests from FooTest again, each
 | 
			
		||||
// with parameter values "cat" and "dog":
 | 
			
		||||
 | 
			
		||||
const char* pets[] = {"cat", "dog"};
 | 
			
		||||
INSTANTIATE_TEST_CASE_P(AnotherInstantiationName, FooTest, ValuesIn(pets));
 | 
			
		||||
 | 
			
		||||
// The tests from the instantiation above will have these names:
 | 
			
		||||
//
 | 
			
		||||
//    * AnotherInstantiationName/FooTest.DoesBlah/0 for "cat"
 | 
			
		||||
//    * AnotherInstantiationName/FooTest.DoesBlah/1 for "dog"
 | 
			
		||||
//    * AnotherInstantiationName/FooTest.HasBlahBlah/0 for "cat"
 | 
			
		||||
//    * AnotherInstantiationName/FooTest.HasBlahBlah/1 for "dog"
 | 
			
		||||
//
 | 
			
		||||
// Please note that INSTANTIATE_TEST_CASE_P will instantiate all tests
 | 
			
		||||
// in the given test case, whether their definitions come before or
 | 
			
		||||
// AFTER the INSTANTIATE_TEST_CASE_P statement.
 | 
			
		||||
//
 | 
			
		||||
// Please also note that generator expressions (including parameters to the
 | 
			
		||||
// generators) are evaluated in InitGoogleTest(), after main() has started.
 | 
			
		||||
// This allows the user on one hand, to adjust generator parameters in order
 | 
			
		||||
// to dynamically determine a set of tests to run and on the other hand,
 | 
			
		||||
// give the user a chance to inspect the generated tests with Google Test
 | 
			
		||||
// reflection API before RUN_ALL_TESTS() is executed.
 | 
			
		||||
//
 | 
			
		||||
// You can see samples/sample7_unittest.cc and samples/sample8_unittest.cc
 | 
			
		||||
// for more examples.
 | 
			
		||||
//
 | 
			
		||||
// In the future, we plan to publish the API for defining new parameter
 | 
			
		||||
// generators. But for now this interface remains part of the internal
 | 
			
		||||
// implementation and is subject to change.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// A parameterized test fixture must be derived from testing::Test and from
 | 
			
		||||
// testing::WithParamInterface<T>, where T is the type of the parameter
 | 
			
		||||
// values. Inheriting from TestWithParam<T> satisfies that requirement because
 | 
			
		||||
// TestWithParam<T> inherits from both Test and WithParamInterface. In more
 | 
			
		||||
// complicated hierarchies, however, it is occasionally useful to inherit
 | 
			
		||||
// separately from Test and WithParamInterface. For example:
 | 
			
		||||
 | 
			
		||||
class BaseTest : public ::testing::Test {
 | 
			
		||||
  // You can inherit all the usual members for a non-parameterized test
 | 
			
		||||
  // fixture here.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class DerivedTest : public BaseTest, public ::testing::WithParamInterface<int> {
 | 
			
		||||
  // The usual test fixture members go here too.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
TEST_F(BaseTest, HasFoo) {
 | 
			
		||||
  // This is an ordinary non-parameterized test.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TEST_P(DerivedTest, DoesBlah) {
 | 
			
		||||
  // GetParam works just the same here as if you inherit from TestWithParam.
 | 
			
		||||
  EXPECT_TRUE(foo.Blah(GetParam()));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif  // 0
 | 
			
		||||
 | 
			
		||||
#include "gtest/internal/gtest-port.h"
 | 
			
		||||
 | 
			
		||||
#if !GTEST_OS_SYMBIAN
 | 
			
		||||
# include <utility>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// scripts/fuse_gtest.py depends on gtest's own header being #included
 | 
			
		||||
// *unconditionally*.  Therefore these #includes cannot be moved
 | 
			
		||||
// inside #if GTEST_HAS_PARAM_TEST.
 | 
			
		||||
#include "gtest/internal/gtest-internal.h"
 | 
			
		||||
#include "gtest/internal/gtest-param-util.h"
 | 
			
		||||
#include "gtest/internal/gtest-param-util-generated.h"
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_PARAM_TEST
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
 | 
			
		||||
// Functions producing parameter generators.
 | 
			
		||||
//
 | 
			
		||||
// Google Test uses these generators to produce parameters for value-
 | 
			
		||||
// parameterized tests. When a parameterized test case is instantiated
 | 
			
		||||
// with a particular generator, Google Test creates and runs tests
 | 
			
		||||
// for each element in the sequence produced by the generator.
 | 
			
		||||
//
 | 
			
		||||
// In the following sample, tests from test case FooTest are instantiated
 | 
			
		||||
// each three times with parameter values 3, 5, and 8:
 | 
			
		||||
//
 | 
			
		||||
// class FooTest : public TestWithParam<int> { ... };
 | 
			
		||||
//
 | 
			
		||||
// TEST_P(FooTest, TestThis) {
 | 
			
		||||
// }
 | 
			
		||||
// TEST_P(FooTest, TestThat) {
 | 
			
		||||
// }
 | 
			
		||||
// INSTANTIATE_TEST_CASE_P(TestSequence, FooTest, Values(3, 5, 8));
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// Range() returns generators providing sequences of values in a range.
 | 
			
		||||
//
 | 
			
		||||
// Synopsis:
 | 
			
		||||
// Range(start, end)
 | 
			
		||||
//   - returns a generator producing a sequence of values {start, start+1,
 | 
			
		||||
//     start+2, ..., }.
 | 
			
		||||
// Range(start, end, step)
 | 
			
		||||
//   - returns a generator producing a sequence of values {start, start+step,
 | 
			
		||||
//     start+step+step, ..., }.
 | 
			
		||||
// Notes:
 | 
			
		||||
//   * The generated sequences never include end. For example, Range(1, 5)
 | 
			
		||||
//     returns a generator producing a sequence {1, 2, 3, 4}. Range(1, 9, 2)
 | 
			
		||||
//     returns a generator producing {1, 3, 5, 7}.
 | 
			
		||||
//   * start and end must have the same type. That type may be any integral or
 | 
			
		||||
//     floating-point type or a user defined type satisfying these conditions:
 | 
			
		||||
//     * It must be assignable (have operator=() defined).
 | 
			
		||||
//     * It must have operator+() (operator+(int-compatible type) for
 | 
			
		||||
//       two-operand version).
 | 
			
		||||
//     * It must have operator<() defined.
 | 
			
		||||
//     Elements in the resulting sequences will also have that type.
 | 
			
		||||
//   * Condition start < end must be satisfied in order for resulting sequences
 | 
			
		||||
//     to contain any elements.
 | 
			
		||||
//
 | 
			
		||||
template <typename T, typename IncrementT>
 | 
			
		||||
internal::ParamGenerator<T> Range(T start, T end, IncrementT step) {
 | 
			
		||||
  return internal::ParamGenerator<T>(
 | 
			
		||||
      new internal::RangeGenerator<T, IncrementT>(start, end, step));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
internal::ParamGenerator<T> Range(T start, T end) {
 | 
			
		||||
  return Range(start, end, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ValuesIn() function allows generation of tests with parameters coming from
 | 
			
		||||
// a container.
 | 
			
		||||
//
 | 
			
		||||
// Synopsis:
 | 
			
		||||
// ValuesIn(const T (&array)[N])
 | 
			
		||||
//   - returns a generator producing sequences with elements from
 | 
			
		||||
//     a C-style array.
 | 
			
		||||
// ValuesIn(const Container& container)
 | 
			
		||||
//   - returns a generator producing sequences with elements from
 | 
			
		||||
//     an STL-style container.
 | 
			
		||||
// ValuesIn(Iterator begin, Iterator end)
 | 
			
		||||
//   - returns a generator producing sequences with elements from
 | 
			
		||||
//     a range [begin, end) defined by a pair of STL-style iterators. These
 | 
			
		||||
//     iterators can also be plain C pointers.
 | 
			
		||||
//
 | 
			
		||||
// Please note that ValuesIn copies the values from the containers
 | 
			
		||||
// passed in and keeps them to generate tests in RUN_ALL_TESTS().
 | 
			
		||||
//
 | 
			
		||||
// Examples:
 | 
			
		||||
//
 | 
			
		||||
// This instantiates tests from test case StringTest
 | 
			
		||||
// each with C-string values of "foo", "bar", and "baz":
 | 
			
		||||
//
 | 
			
		||||
// const char* strings[] = {"foo", "bar", "baz"};
 | 
			
		||||
// INSTANTIATE_TEST_CASE_P(StringSequence, SrtingTest, ValuesIn(strings));
 | 
			
		||||
//
 | 
			
		||||
// This instantiates tests from test case StlStringTest
 | 
			
		||||
// each with STL strings with values "a" and "b":
 | 
			
		||||
//
 | 
			
		||||
// ::std::vector< ::std::string> GetParameterStrings() {
 | 
			
		||||
//   ::std::vector< ::std::string> v;
 | 
			
		||||
//   v.push_back("a");
 | 
			
		||||
//   v.push_back("b");
 | 
			
		||||
//   return v;
 | 
			
		||||
// }
 | 
			
		||||
//
 | 
			
		||||
// INSTANTIATE_TEST_CASE_P(CharSequence,
 | 
			
		||||
//                         StlStringTest,
 | 
			
		||||
//                         ValuesIn(GetParameterStrings()));
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
// This will also instantiate tests from CharTest
 | 
			
		||||
// each with parameter values 'a' and 'b':
 | 
			
		||||
//
 | 
			
		||||
// ::std::list<char> GetParameterChars() {
 | 
			
		||||
//   ::std::list<char> list;
 | 
			
		||||
//   list.push_back('a');
 | 
			
		||||
//   list.push_back('b');
 | 
			
		||||
//   return list;
 | 
			
		||||
// }
 | 
			
		||||
// ::std::list<char> l = GetParameterChars();
 | 
			
		||||
// INSTANTIATE_TEST_CASE_P(CharSequence2,
 | 
			
		||||
//                         CharTest,
 | 
			
		||||
//                         ValuesIn(l.begin(), l.end()));
 | 
			
		||||
//
 | 
			
		||||
template <typename ForwardIterator>
 | 
			
		||||
internal::ParamGenerator<
 | 
			
		||||
  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
 | 
			
		||||
ValuesIn(ForwardIterator begin, ForwardIterator end) {
 | 
			
		||||
  typedef typename ::testing::internal::IteratorTraits<ForwardIterator>
 | 
			
		||||
      ::value_type ParamType;
 | 
			
		||||
  return internal::ParamGenerator<ParamType>(
 | 
			
		||||
      new internal::ValuesInIteratorRangeGenerator<ParamType>(begin, end));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T, size_t N>
 | 
			
		||||
internal::ParamGenerator<T> ValuesIn(const T (&array)[N]) {
 | 
			
		||||
  return ValuesIn(array, array + N);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <class Container>
 | 
			
		||||
internal::ParamGenerator<typename Container::value_type> ValuesIn(
 | 
			
		||||
    const Container& container) {
 | 
			
		||||
  return ValuesIn(container.begin(), container.end());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Values() allows generating tests from explicitly specified list of
 | 
			
		||||
// parameters.
 | 
			
		||||
//
 | 
			
		||||
// Synopsis:
 | 
			
		||||
// Values(T v1, T v2, ..., T vN)
 | 
			
		||||
//   - returns a generator producing sequences with elements v1, v2, ..., vN.
 | 
			
		||||
//
 | 
			
		||||
// For example, this instantiates tests from test case BarTest each
 | 
			
		||||
// with values "one", "two", and "three":
 | 
			
		||||
//
 | 
			
		||||
// INSTANTIATE_TEST_CASE_P(NumSequence, BarTest, Values("one", "two", "three"));
 | 
			
		||||
//
 | 
			
		||||
// This instantiates tests from test case BazTest each with values 1, 2, 3.5.
 | 
			
		||||
// The exact type of values will depend on the type of parameter in BazTest.
 | 
			
		||||
//
 | 
			
		||||
// INSTANTIATE_TEST_CASE_P(FloatingNumbers, BazTest, Values(1, 2, 3.5));
 | 
			
		||||
//
 | 
			
		||||
// Currently, Values() supports from 1 to $n parameters.
 | 
			
		||||
//
 | 
			
		||||
$range i 1..n
 | 
			
		||||
$for i [[
 | 
			
		||||
$range j 1..i
 | 
			
		||||
 | 
			
		||||
template <$for j, [[typename T$j]]>
 | 
			
		||||
internal::ValueArray$i<$for j, [[T$j]]> Values($for j, [[T$j v$j]]) {
 | 
			
		||||
  return internal::ValueArray$i<$for j, [[T$j]]>($for j, [[v$j]]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
// Bool() allows generating tests with parameters in a set of (false, true).
 | 
			
		||||
//
 | 
			
		||||
// Synopsis:
 | 
			
		||||
// Bool()
 | 
			
		||||
//   - returns a generator producing sequences with elements {false, true}.
 | 
			
		||||
//
 | 
			
		||||
// It is useful when testing code that depends on Boolean flags. Combinations
 | 
			
		||||
// of multiple flags can be tested when several Bool()'s are combined using
 | 
			
		||||
// Combine() function.
 | 
			
		||||
//
 | 
			
		||||
// In the following example all tests in the test case FlagDependentTest
 | 
			
		||||
// will be instantiated twice with parameters false and true.
 | 
			
		||||
//
 | 
			
		||||
// class FlagDependentTest : public testing::TestWithParam<bool> {
 | 
			
		||||
//   virtual void SetUp() {
 | 
			
		||||
//     external_flag = GetParam();
 | 
			
		||||
//   }
 | 
			
		||||
// }
 | 
			
		||||
// INSTANTIATE_TEST_CASE_P(BoolSequence, FlagDependentTest, Bool());
 | 
			
		||||
//
 | 
			
		||||
inline internal::ParamGenerator<bool> Bool() {
 | 
			
		||||
  return Values(false, true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# if GTEST_HAS_COMBINE
 | 
			
		||||
// Combine() allows the user to combine two or more sequences to produce
 | 
			
		||||
// values of a Cartesian product of those sequences' elements.
 | 
			
		||||
//
 | 
			
		||||
// Synopsis:
 | 
			
		||||
// Combine(gen1, gen2, ..., genN)
 | 
			
		||||
//   - returns a generator producing sequences with elements coming from
 | 
			
		||||
//     the Cartesian product of elements from the sequences generated by
 | 
			
		||||
//     gen1, gen2, ..., genN. The sequence elements will have a type of
 | 
			
		||||
//     tuple<T1, T2, ..., TN> where T1, T2, ..., TN are the types
 | 
			
		||||
//     of elements from sequences produces by gen1, gen2, ..., genN.
 | 
			
		||||
//
 | 
			
		||||
// Combine can have up to $maxtuple arguments. This number is currently limited
 | 
			
		||||
// by the maximum number of elements in the tuple implementation used by Google
 | 
			
		||||
// Test.
 | 
			
		||||
//
 | 
			
		||||
// Example:
 | 
			
		||||
//
 | 
			
		||||
// This will instantiate tests in test case AnimalTest each one with
 | 
			
		||||
// the parameter values tuple("cat", BLACK), tuple("cat", WHITE),
 | 
			
		||||
// tuple("dog", BLACK), and tuple("dog", WHITE):
 | 
			
		||||
//
 | 
			
		||||
// enum Color { BLACK, GRAY, WHITE };
 | 
			
		||||
// class AnimalTest
 | 
			
		||||
//     : public testing::TestWithParam<tuple<const char*, Color> > {...};
 | 
			
		||||
//
 | 
			
		||||
// TEST_P(AnimalTest, AnimalLooksNice) {...}
 | 
			
		||||
//
 | 
			
		||||
// INSTANTIATE_TEST_CASE_P(AnimalVariations, AnimalTest,
 | 
			
		||||
//                         Combine(Values("cat", "dog"),
 | 
			
		||||
//                                 Values(BLACK, WHITE)));
 | 
			
		||||
//
 | 
			
		||||
// This will instantiate tests in FlagDependentTest with all variations of two
 | 
			
		||||
// Boolean flags:
 | 
			
		||||
//
 | 
			
		||||
// class FlagDependentTest
 | 
			
		||||
//     : public testing::TestWithParam<tuple(bool, bool)> > {
 | 
			
		||||
//   virtual void SetUp() {
 | 
			
		||||
//     // Assigns external_flag_1 and external_flag_2 values from the tuple.
 | 
			
		||||
//     tie(external_flag_1, external_flag_2) = GetParam();
 | 
			
		||||
//   }
 | 
			
		||||
// };
 | 
			
		||||
//
 | 
			
		||||
// TEST_P(FlagDependentTest, TestFeature1) {
 | 
			
		||||
//   // Test your code using external_flag_1 and external_flag_2 here.
 | 
			
		||||
// }
 | 
			
		||||
// INSTANTIATE_TEST_CASE_P(TwoBoolSequence, FlagDependentTest,
 | 
			
		||||
//                         Combine(Bool(), Bool()));
 | 
			
		||||
//
 | 
			
		||||
$range i 2..maxtuple
 | 
			
		||||
$for i [[
 | 
			
		||||
$range j 1..i
 | 
			
		||||
 | 
			
		||||
template <$for j, [[typename Generator$j]]>
 | 
			
		||||
internal::CartesianProductHolder$i<$for j, [[Generator$j]]> Combine(
 | 
			
		||||
    $for j, [[const Generator$j& g$j]]) {
 | 
			
		||||
  return internal::CartesianProductHolder$i<$for j, [[Generator$j]]>(
 | 
			
		||||
      $for j, [[g$j]]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
# endif  // GTEST_HAS_COMBINE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# define TEST_P(test_case_name, test_name) \
 | 
			
		||||
  class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) \
 | 
			
		||||
      : public test_case_name { \
 | 
			
		||||
   public: \
 | 
			
		||||
    GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {} \
 | 
			
		||||
    virtual void TestBody(); \
 | 
			
		||||
   private: \
 | 
			
		||||
    static int AddToRegistry() { \
 | 
			
		||||
      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
 | 
			
		||||
          GetTestCasePatternHolder<test_case_name>(\
 | 
			
		||||
              #test_case_name, __FILE__, __LINE__)->AddTestPattern(\
 | 
			
		||||
                  #test_case_name, \
 | 
			
		||||
                  #test_name, \
 | 
			
		||||
                  new ::testing::internal::TestMetaFactory< \
 | 
			
		||||
                      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)>()); \
 | 
			
		||||
      return 0; \
 | 
			
		||||
    } \
 | 
			
		||||
    static int gtest_registering_dummy_; \
 | 
			
		||||
    GTEST_DISALLOW_COPY_AND_ASSIGN_(\
 | 
			
		||||
        GTEST_TEST_CLASS_NAME_(test_case_name, test_name)); \
 | 
			
		||||
  }; \
 | 
			
		||||
  int GTEST_TEST_CLASS_NAME_(test_case_name, \
 | 
			
		||||
                             test_name)::gtest_registering_dummy_ = \
 | 
			
		||||
      GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::AddToRegistry(); \
 | 
			
		||||
  void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()
 | 
			
		||||
 | 
			
		||||
# define INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \
 | 
			
		||||
  ::testing::internal::ParamGenerator<test_case_name::ParamType> \
 | 
			
		||||
      gtest_##prefix##test_case_name##_EvalGenerator_() { return generator; } \
 | 
			
		||||
  int gtest_##prefix##test_case_name##_dummy_ = \
 | 
			
		||||
      ::testing::UnitTest::GetInstance()->parameterized_test_registry(). \
 | 
			
		||||
          GetTestCasePatternHolder<test_case_name>(\
 | 
			
		||||
              #test_case_name, __FILE__, __LINE__)->AddTestCaseInstantiation(\
 | 
			
		||||
                  #prefix, \
 | 
			
		||||
                  >est_##prefix##test_case_name##_EvalGenerator_, \
 | 
			
		||||
                  __FILE__, __LINE__)
 | 
			
		||||
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_HAS_PARAM_TEST
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
 | 
			
		||||
							
								
								
									
										796
									
								
								third_party/googletest/src/include/gtest/gtest-printers.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										796
									
								
								third_party/googletest/src/include/gtest/gtest-printers.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,796 @@
 | 
			
		||||
// Copyright 2007, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: wan@google.com (Zhanyong Wan)
 | 
			
		||||
 | 
			
		||||
// Google Test - The Google C++ Testing Framework
 | 
			
		||||
//
 | 
			
		||||
// This file implements a universal value printer that can print a
 | 
			
		||||
// value of any type T:
 | 
			
		||||
//
 | 
			
		||||
//   void ::testing::internal::UniversalPrinter<T>::Print(value, ostream_ptr);
 | 
			
		||||
//
 | 
			
		||||
// A user can teach this function how to print a class type T by
 | 
			
		||||
// defining either operator<<() or PrintTo() in the namespace that
 | 
			
		||||
// defines T.  More specifically, the FIRST defined function in the
 | 
			
		||||
// following list will be used (assuming T is defined in namespace
 | 
			
		||||
// foo):
 | 
			
		||||
//
 | 
			
		||||
//   1. foo::PrintTo(const T&, ostream*)
 | 
			
		||||
//   2. operator<<(ostream&, const T&) defined in either foo or the
 | 
			
		||||
//      global namespace.
 | 
			
		||||
//
 | 
			
		||||
// If none of the above is defined, it will print the debug string of
 | 
			
		||||
// the value if it is a protocol buffer, or print the raw bytes in the
 | 
			
		||||
// value otherwise.
 | 
			
		||||
//
 | 
			
		||||
// To aid debugging: when T is a reference type, the address of the
 | 
			
		||||
// value is also printed; when T is a (const) char pointer, both the
 | 
			
		||||
// pointer value and the NUL-terminated string it points to are
 | 
			
		||||
// printed.
 | 
			
		||||
//
 | 
			
		||||
// We also provide some convenient wrappers:
 | 
			
		||||
//
 | 
			
		||||
//   // Prints a value to a string.  For a (const or not) char
 | 
			
		||||
//   // pointer, the NUL-terminated string (but not the pointer) is
 | 
			
		||||
//   // printed.
 | 
			
		||||
//   std::string ::testing::PrintToString(const T& value);
 | 
			
		||||
//
 | 
			
		||||
//   // Prints a value tersely: for a reference type, the referenced
 | 
			
		||||
//   // value (but not the address) is printed; for a (const or not) char
 | 
			
		||||
//   // pointer, the NUL-terminated string (but not the pointer) is
 | 
			
		||||
//   // printed.
 | 
			
		||||
//   void ::testing::internal::UniversalTersePrint(const T& value, ostream*);
 | 
			
		||||
//
 | 
			
		||||
//   // Prints value using the type inferred by the compiler.  The difference
 | 
			
		||||
//   // from UniversalTersePrint() is that this function prints both the
 | 
			
		||||
//   // pointer and the NUL-terminated string for a (const or not) char pointer.
 | 
			
		||||
//   void ::testing::internal::UniversalPrint(const T& value, ostream*);
 | 
			
		||||
//
 | 
			
		||||
//   // Prints the fields of a tuple tersely to a string vector, one
 | 
			
		||||
//   // element for each field. Tuple support must be enabled in
 | 
			
		||||
//   // gtest-port.h.
 | 
			
		||||
//   std::vector<string> UniversalTersePrintTupleFieldsToStrings(
 | 
			
		||||
//       const Tuple& value);
 | 
			
		||||
//
 | 
			
		||||
// Known limitation:
 | 
			
		||||
//
 | 
			
		||||
// The print primitives print the elements of an STL-style container
 | 
			
		||||
// using the compiler-inferred type of *iter where iter is a
 | 
			
		||||
// const_iterator of the container.  When const_iterator is an input
 | 
			
		||||
// iterator but not a forward iterator, this inferred type may not
 | 
			
		||||
// match value_type, and the print output may be incorrect.  In
 | 
			
		||||
// practice, this is rarely a problem as for most containers
 | 
			
		||||
// const_iterator is a forward iterator.  We'll fix this if there's an
 | 
			
		||||
// actual need for it.  Note that this fix cannot rely on value_type
 | 
			
		||||
// being defined as many user-defined container types don't have
 | 
			
		||||
// value_type.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
 | 
			
		||||
 | 
			
		||||
#include <ostream>  // NOLINT
 | 
			
		||||
#include <sstream>
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <utility>
 | 
			
		||||
#include <vector>
 | 
			
		||||
#include "gtest/internal/gtest-port.h"
 | 
			
		||||
#include "gtest/internal/gtest-internal.h"
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
 | 
			
		||||
// Definitions in the 'internal' and 'internal2' name spaces are
 | 
			
		||||
// subject to change without notice.  DO NOT USE THEM IN USER CODE!
 | 
			
		||||
namespace internal2 {
 | 
			
		||||
 | 
			
		||||
// Prints the given number of bytes in the given object to the given
 | 
			
		||||
// ostream.
 | 
			
		||||
GTEST_API_ void PrintBytesInObjectTo(const unsigned char* obj_bytes,
 | 
			
		||||
                                     size_t count,
 | 
			
		||||
                                     ::std::ostream* os);
 | 
			
		||||
 | 
			
		||||
// For selecting which printer to use when a given type has neither <<
 | 
			
		||||
// nor PrintTo().
 | 
			
		||||
enum TypeKind {
 | 
			
		||||
  kProtobuf,              // a protobuf type
 | 
			
		||||
  kConvertibleToInteger,  // a type implicitly convertible to BiggestInt
 | 
			
		||||
                          // (e.g. a named or unnamed enum type)
 | 
			
		||||
  kOtherType              // anything else
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// TypeWithoutFormatter<T, kTypeKind>::PrintValue(value, os) is called
 | 
			
		||||
// by the universal printer to print a value of type T when neither
 | 
			
		||||
// operator<< nor PrintTo() is defined for T, where kTypeKind is the
 | 
			
		||||
// "kind" of T as defined by enum TypeKind.
 | 
			
		||||
template <typename T, TypeKind kTypeKind>
 | 
			
		||||
class TypeWithoutFormatter {
 | 
			
		||||
 public:
 | 
			
		||||
  // This default version is called when kTypeKind is kOtherType.
 | 
			
		||||
  static void PrintValue(const T& value, ::std::ostream* os) {
 | 
			
		||||
    PrintBytesInObjectTo(reinterpret_cast<const unsigned char*>(&value),
 | 
			
		||||
                         sizeof(value), os);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// We print a protobuf using its ShortDebugString() when the string
 | 
			
		||||
// doesn't exceed this many characters; otherwise we print it using
 | 
			
		||||
// DebugString() for better readability.
 | 
			
		||||
const size_t kProtobufOneLinerMaxLength = 50;
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
class TypeWithoutFormatter<T, kProtobuf> {
 | 
			
		||||
 public:
 | 
			
		||||
  static void PrintValue(const T& value, ::std::ostream* os) {
 | 
			
		||||
    const ::testing::internal::string short_str = value.ShortDebugString();
 | 
			
		||||
    const ::testing::internal::string pretty_str =
 | 
			
		||||
        short_str.length() <= kProtobufOneLinerMaxLength ?
 | 
			
		||||
        short_str : ("\n" + value.DebugString());
 | 
			
		||||
    *os << ("<" + pretty_str + ">");
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
class TypeWithoutFormatter<T, kConvertibleToInteger> {
 | 
			
		||||
 public:
 | 
			
		||||
  // Since T has no << operator or PrintTo() but can be implicitly
 | 
			
		||||
  // converted to BiggestInt, we print it as a BiggestInt.
 | 
			
		||||
  //
 | 
			
		||||
  // Most likely T is an enum type (either named or unnamed), in which
 | 
			
		||||
  // case printing it as an integer is the desired behavior.  In case
 | 
			
		||||
  // T is not an enum, printing it as an integer is the best we can do
 | 
			
		||||
  // given that it has no user-defined printer.
 | 
			
		||||
  static void PrintValue(const T& value, ::std::ostream* os) {
 | 
			
		||||
    const internal::BiggestInt kBigInt = value;
 | 
			
		||||
    *os << kBigInt;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Prints the given value to the given ostream.  If the value is a
 | 
			
		||||
// protocol message, its debug string is printed; if it's an enum or
 | 
			
		||||
// of a type implicitly convertible to BiggestInt, it's printed as an
 | 
			
		||||
// integer; otherwise the bytes in the value are printed.  This is
 | 
			
		||||
// what UniversalPrinter<T>::Print() does when it knows nothing about
 | 
			
		||||
// type T and T has neither << operator nor PrintTo().
 | 
			
		||||
//
 | 
			
		||||
// A user can override this behavior for a class type Foo by defining
 | 
			
		||||
// a << operator in the namespace where Foo is defined.
 | 
			
		||||
//
 | 
			
		||||
// We put this operator in namespace 'internal2' instead of 'internal'
 | 
			
		||||
// to simplify the implementation, as much code in 'internal' needs to
 | 
			
		||||
// use << in STL, which would conflict with our own << were it defined
 | 
			
		||||
// in 'internal'.
 | 
			
		||||
//
 | 
			
		||||
// Note that this operator<< takes a generic std::basic_ostream<Char,
 | 
			
		||||
// CharTraits> type instead of the more restricted std::ostream.  If
 | 
			
		||||
// we define it to take an std::ostream instead, we'll get an
 | 
			
		||||
// "ambiguous overloads" compiler error when trying to print a type
 | 
			
		||||
// Foo that supports streaming to std::basic_ostream<Char,
 | 
			
		||||
// CharTraits>, as the compiler cannot tell whether
 | 
			
		||||
// operator<<(std::ostream&, const T&) or
 | 
			
		||||
// operator<<(std::basic_stream<Char, CharTraits>, const Foo&) is more
 | 
			
		||||
// specific.
 | 
			
		||||
template <typename Char, typename CharTraits, typename T>
 | 
			
		||||
::std::basic_ostream<Char, CharTraits>& operator<<(
 | 
			
		||||
    ::std::basic_ostream<Char, CharTraits>& os, const T& x) {
 | 
			
		||||
  TypeWithoutFormatter<T,
 | 
			
		||||
      (internal::IsAProtocolMessage<T>::value ? kProtobuf :
 | 
			
		||||
       internal::ImplicitlyConvertible<const T&, internal::BiggestInt>::value ?
 | 
			
		||||
       kConvertibleToInteger : kOtherType)>::PrintValue(x, &os);
 | 
			
		||||
  return os;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace internal2
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
// This namespace MUST NOT BE NESTED IN ::testing, or the name look-up
 | 
			
		||||
// magic needed for implementing UniversalPrinter won't work.
 | 
			
		||||
namespace testing_internal {
 | 
			
		||||
 | 
			
		||||
// Used to print a value that is not an STL-style container when the
 | 
			
		||||
// user doesn't define PrintTo() for it.
 | 
			
		||||
template <typename T>
 | 
			
		||||
void DefaultPrintNonContainerTo(const T& value, ::std::ostream* os) {
 | 
			
		||||
  // With the following statement, during unqualified name lookup,
 | 
			
		||||
  // testing::internal2::operator<< appears as if it was declared in
 | 
			
		||||
  // the nearest enclosing namespace that contains both
 | 
			
		||||
  // ::testing_internal and ::testing::internal2, i.e. the global
 | 
			
		||||
  // namespace.  For more details, refer to the C++ Standard section
 | 
			
		||||
  // 7.3.4-1 [namespace.udir].  This allows us to fall back onto
 | 
			
		||||
  // testing::internal2::operator<< in case T doesn't come with a <<
 | 
			
		||||
  // operator.
 | 
			
		||||
  //
 | 
			
		||||
  // We cannot write 'using ::testing::internal2::operator<<;', which
 | 
			
		||||
  // gcc 3.3 fails to compile due to a compiler bug.
 | 
			
		||||
  using namespace ::testing::internal2;  // NOLINT
 | 
			
		||||
 | 
			
		||||
  // Assuming T is defined in namespace foo, in the next statement,
 | 
			
		||||
  // the compiler will consider all of:
 | 
			
		||||
  //
 | 
			
		||||
  //   1. foo::operator<< (thanks to Koenig look-up),
 | 
			
		||||
  //   2. ::operator<< (as the current namespace is enclosed in ::),
 | 
			
		||||
  //   3. testing::internal2::operator<< (thanks to the using statement above).
 | 
			
		||||
  //
 | 
			
		||||
  // The operator<< whose type matches T best will be picked.
 | 
			
		||||
  //
 | 
			
		||||
  // We deliberately allow #2 to be a candidate, as sometimes it's
 | 
			
		||||
  // impossible to define #1 (e.g. when foo is ::std, defining
 | 
			
		||||
  // anything in it is undefined behavior unless you are a compiler
 | 
			
		||||
  // vendor.).
 | 
			
		||||
  *os << value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace testing_internal
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
// UniversalPrinter<T>::Print(value, ostream_ptr) prints the given
 | 
			
		||||
// value to the given ostream.  The caller must ensure that
 | 
			
		||||
// 'ostream_ptr' is not NULL, or the behavior is undefined.
 | 
			
		||||
//
 | 
			
		||||
// We define UniversalPrinter as a class template (as opposed to a
 | 
			
		||||
// function template), as we need to partially specialize it for
 | 
			
		||||
// reference types, which cannot be done with function templates.
 | 
			
		||||
template <typename T>
 | 
			
		||||
class UniversalPrinter;
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void UniversalPrint(const T& value, ::std::ostream* os);
 | 
			
		||||
 | 
			
		||||
// Used to print an STL-style container when the user doesn't define
 | 
			
		||||
// a PrintTo() for it.
 | 
			
		||||
template <typename C>
 | 
			
		||||
void DefaultPrintTo(IsContainer /* dummy */,
 | 
			
		||||
                    false_type /* is not a pointer */,
 | 
			
		||||
                    const C& container, ::std::ostream* os) {
 | 
			
		||||
  const size_t kMaxCount = 32;  // The maximum number of elements to print.
 | 
			
		||||
  *os << '{';
 | 
			
		||||
  size_t count = 0;
 | 
			
		||||
  for (typename C::const_iterator it = container.begin();
 | 
			
		||||
       it != container.end(); ++it, ++count) {
 | 
			
		||||
    if (count > 0) {
 | 
			
		||||
      *os << ',';
 | 
			
		||||
      if (count == kMaxCount) {  // Enough has been printed.
 | 
			
		||||
        *os << " ...";
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    *os << ' ';
 | 
			
		||||
    // We cannot call PrintTo(*it, os) here as PrintTo() doesn't
 | 
			
		||||
    // handle *it being a native array.
 | 
			
		||||
    internal::UniversalPrint(*it, os);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (count > 0) {
 | 
			
		||||
    *os << ' ';
 | 
			
		||||
  }
 | 
			
		||||
  *os << '}';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Used to print a pointer that is neither a char pointer nor a member
 | 
			
		||||
// pointer, when the user doesn't define PrintTo() for it.  (A member
 | 
			
		||||
// variable pointer or member function pointer doesn't really point to
 | 
			
		||||
// a location in the address space.  Their representation is
 | 
			
		||||
// implementation-defined.  Therefore they will be printed as raw
 | 
			
		||||
// bytes.)
 | 
			
		||||
template <typename T>
 | 
			
		||||
void DefaultPrintTo(IsNotContainer /* dummy */,
 | 
			
		||||
                    true_type /* is a pointer */,
 | 
			
		||||
                    T* p, ::std::ostream* os) {
 | 
			
		||||
  if (p == NULL) {
 | 
			
		||||
    *os << "NULL";
 | 
			
		||||
  } else {
 | 
			
		||||
    // C++ doesn't allow casting from a function pointer to any object
 | 
			
		||||
    // pointer.
 | 
			
		||||
    //
 | 
			
		||||
    // IsTrue() silences warnings: "Condition is always true",
 | 
			
		||||
    // "unreachable code".
 | 
			
		||||
    if (IsTrue(ImplicitlyConvertible<T*, const void*>::value)) {
 | 
			
		||||
      // T is not a function type.  We just call << to print p,
 | 
			
		||||
      // relying on ADL to pick up user-defined << for their pointer
 | 
			
		||||
      // types, if any.
 | 
			
		||||
      *os << p;
 | 
			
		||||
    } else {
 | 
			
		||||
      // T is a function type, so '*os << p' doesn't do what we want
 | 
			
		||||
      // (it just prints p as bool).  We want to print p as a const
 | 
			
		||||
      // void*.  However, we cannot cast it to const void* directly,
 | 
			
		||||
      // even using reinterpret_cast, as earlier versions of gcc
 | 
			
		||||
      // (e.g. 3.4.5) cannot compile the cast when p is a function
 | 
			
		||||
      // pointer.  Casting to UInt64 first solves the problem.
 | 
			
		||||
      *os << reinterpret_cast<const void*>(
 | 
			
		||||
          reinterpret_cast<internal::UInt64>(p));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Used to print a non-container, non-pointer value when the user
 | 
			
		||||
// doesn't define PrintTo() for it.
 | 
			
		||||
template <typename T>
 | 
			
		||||
void DefaultPrintTo(IsNotContainer /* dummy */,
 | 
			
		||||
                    false_type /* is not a pointer */,
 | 
			
		||||
                    const T& value, ::std::ostream* os) {
 | 
			
		||||
  ::testing_internal::DefaultPrintNonContainerTo(value, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Prints the given value using the << operator if it has one;
 | 
			
		||||
// otherwise prints the bytes in it.  This is what
 | 
			
		||||
// UniversalPrinter<T>::Print() does when PrintTo() is not specialized
 | 
			
		||||
// or overloaded for type T.
 | 
			
		||||
//
 | 
			
		||||
// A user can override this behavior for a class type Foo by defining
 | 
			
		||||
// an overload of PrintTo() in the namespace where Foo is defined.  We
 | 
			
		||||
// give the user this option as sometimes defining a << operator for
 | 
			
		||||
// Foo is not desirable (e.g. the coding style may prevent doing it,
 | 
			
		||||
// or there is already a << operator but it doesn't do what the user
 | 
			
		||||
// wants).
 | 
			
		||||
template <typename T>
 | 
			
		||||
void PrintTo(const T& value, ::std::ostream* os) {
 | 
			
		||||
  // DefaultPrintTo() is overloaded.  The type of its first two
 | 
			
		||||
  // arguments determine which version will be picked.  If T is an
 | 
			
		||||
  // STL-style container, the version for container will be called; if
 | 
			
		||||
  // T is a pointer, the pointer version will be called; otherwise the
 | 
			
		||||
  // generic version will be called.
 | 
			
		||||
  //
 | 
			
		||||
  // Note that we check for container types here, prior to we check
 | 
			
		||||
  // for protocol message types in our operator<<.  The rationale is:
 | 
			
		||||
  //
 | 
			
		||||
  // For protocol messages, we want to give people a chance to
 | 
			
		||||
  // override Google Mock's format by defining a PrintTo() or
 | 
			
		||||
  // operator<<.  For STL containers, other formats can be
 | 
			
		||||
  // incompatible with Google Mock's format for the container
 | 
			
		||||
  // elements; therefore we check for container types here to ensure
 | 
			
		||||
  // that our format is used.
 | 
			
		||||
  //
 | 
			
		||||
  // The second argument of DefaultPrintTo() is needed to bypass a bug
 | 
			
		||||
  // in Symbian's C++ compiler that prevents it from picking the right
 | 
			
		||||
  // overload between:
 | 
			
		||||
  //
 | 
			
		||||
  //   PrintTo(const T& x, ...);
 | 
			
		||||
  //   PrintTo(T* x, ...);
 | 
			
		||||
  DefaultPrintTo(IsContainerTest<T>(0), is_pointer<T>(), value, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// The following list of PrintTo() overloads tells
 | 
			
		||||
// UniversalPrinter<T>::Print() how to print standard types (built-in
 | 
			
		||||
// types, strings, plain arrays, and pointers).
 | 
			
		||||
 | 
			
		||||
// Overloads for various char types.
 | 
			
		||||
GTEST_API_ void PrintTo(unsigned char c, ::std::ostream* os);
 | 
			
		||||
GTEST_API_ void PrintTo(signed char c, ::std::ostream* os);
 | 
			
		||||
inline void PrintTo(char c, ::std::ostream* os) {
 | 
			
		||||
  // When printing a plain char, we always treat it as unsigned.  This
 | 
			
		||||
  // way, the output won't be affected by whether the compiler thinks
 | 
			
		||||
  // char is signed or not.
 | 
			
		||||
  PrintTo(static_cast<unsigned char>(c), os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Overloads for other simple built-in types.
 | 
			
		||||
inline void PrintTo(bool x, ::std::ostream* os) {
 | 
			
		||||
  *os << (x ? "true" : "false");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Overload for wchar_t type.
 | 
			
		||||
// Prints a wchar_t as a symbol if it is printable or as its internal
 | 
			
		||||
// code otherwise and also as its decimal code (except for L'\0').
 | 
			
		||||
// The L'\0' char is printed as "L'\\0'". The decimal code is printed
 | 
			
		||||
// as signed integer when wchar_t is implemented by the compiler
 | 
			
		||||
// as a signed type and is printed as an unsigned integer when wchar_t
 | 
			
		||||
// is implemented as an unsigned type.
 | 
			
		||||
GTEST_API_ void PrintTo(wchar_t wc, ::std::ostream* os);
 | 
			
		||||
 | 
			
		||||
// Overloads for C strings.
 | 
			
		||||
GTEST_API_ void PrintTo(const char* s, ::std::ostream* os);
 | 
			
		||||
inline void PrintTo(char* s, ::std::ostream* os) {
 | 
			
		||||
  PrintTo(ImplicitCast_<const char*>(s), os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// signed/unsigned char is often used for representing binary data, so
 | 
			
		||||
// we print pointers to it as void* to be safe.
 | 
			
		||||
inline void PrintTo(const signed char* s, ::std::ostream* os) {
 | 
			
		||||
  PrintTo(ImplicitCast_<const void*>(s), os);
 | 
			
		||||
}
 | 
			
		||||
inline void PrintTo(signed char* s, ::std::ostream* os) {
 | 
			
		||||
  PrintTo(ImplicitCast_<const void*>(s), os);
 | 
			
		||||
}
 | 
			
		||||
inline void PrintTo(const unsigned char* s, ::std::ostream* os) {
 | 
			
		||||
  PrintTo(ImplicitCast_<const void*>(s), os);
 | 
			
		||||
}
 | 
			
		||||
inline void PrintTo(unsigned char* s, ::std::ostream* os) {
 | 
			
		||||
  PrintTo(ImplicitCast_<const void*>(s), os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// MSVC can be configured to define wchar_t as a typedef of unsigned
 | 
			
		||||
// short.  It defines _NATIVE_WCHAR_T_DEFINED when wchar_t is a native
 | 
			
		||||
// type.  When wchar_t is a typedef, defining an overload for const
 | 
			
		||||
// wchar_t* would cause unsigned short* be printed as a wide string,
 | 
			
		||||
// possibly causing invalid memory accesses.
 | 
			
		||||
#if !defined(_MSC_VER) || defined(_NATIVE_WCHAR_T_DEFINED)
 | 
			
		||||
// Overloads for wide C strings
 | 
			
		||||
GTEST_API_ void PrintTo(const wchar_t* s, ::std::ostream* os);
 | 
			
		||||
inline void PrintTo(wchar_t* s, ::std::ostream* os) {
 | 
			
		||||
  PrintTo(ImplicitCast_<const wchar_t*>(s), os);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Overload for C arrays.  Multi-dimensional arrays are printed
 | 
			
		||||
// properly.
 | 
			
		||||
 | 
			
		||||
// Prints the given number of elements in an array, without printing
 | 
			
		||||
// the curly braces.
 | 
			
		||||
template <typename T>
 | 
			
		||||
void PrintRawArrayTo(const T a[], size_t count, ::std::ostream* os) {
 | 
			
		||||
  UniversalPrint(a[0], os);
 | 
			
		||||
  for (size_t i = 1; i != count; i++) {
 | 
			
		||||
    *os << ", ";
 | 
			
		||||
    UniversalPrint(a[i], os);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Overloads for ::string and ::std::string.
 | 
			
		||||
#if GTEST_HAS_GLOBAL_STRING
 | 
			
		||||
GTEST_API_ void PrintStringTo(const ::string&s, ::std::ostream* os);
 | 
			
		||||
inline void PrintTo(const ::string& s, ::std::ostream* os) {
 | 
			
		||||
  PrintStringTo(s, os);
 | 
			
		||||
}
 | 
			
		||||
#endif  // GTEST_HAS_GLOBAL_STRING
 | 
			
		||||
 | 
			
		||||
GTEST_API_ void PrintStringTo(const ::std::string&s, ::std::ostream* os);
 | 
			
		||||
inline void PrintTo(const ::std::string& s, ::std::ostream* os) {
 | 
			
		||||
  PrintStringTo(s, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Overloads for ::wstring and ::std::wstring.
 | 
			
		||||
#if GTEST_HAS_GLOBAL_WSTRING
 | 
			
		||||
GTEST_API_ void PrintWideStringTo(const ::wstring&s, ::std::ostream* os);
 | 
			
		||||
inline void PrintTo(const ::wstring& s, ::std::ostream* os) {
 | 
			
		||||
  PrintWideStringTo(s, os);
 | 
			
		||||
}
 | 
			
		||||
#endif  // GTEST_HAS_GLOBAL_WSTRING
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_STD_WSTRING
 | 
			
		||||
GTEST_API_ void PrintWideStringTo(const ::std::wstring&s, ::std::ostream* os);
 | 
			
		||||
inline void PrintTo(const ::std::wstring& s, ::std::ostream* os) {
 | 
			
		||||
  PrintWideStringTo(s, os);
 | 
			
		||||
}
 | 
			
		||||
#endif  // GTEST_HAS_STD_WSTRING
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_TR1_TUPLE
 | 
			
		||||
// Overload for ::std::tr1::tuple.  Needed for printing function arguments,
 | 
			
		||||
// which are packed as tuples.
 | 
			
		||||
 | 
			
		||||
// Helper function for printing a tuple.  T must be instantiated with
 | 
			
		||||
// a tuple type.
 | 
			
		||||
template <typename T>
 | 
			
		||||
void PrintTupleTo(const T& t, ::std::ostream* os);
 | 
			
		||||
 | 
			
		||||
// Overloaded PrintTo() for tuples of various arities.  We support
 | 
			
		||||
// tuples of up-to 10 fields.  The following implementation works
 | 
			
		||||
// regardless of whether tr1::tuple is implemented using the
 | 
			
		||||
// non-standard variadic template feature or not.
 | 
			
		||||
 | 
			
		||||
inline void PrintTo(const ::std::tr1::tuple<>& t, ::std::ostream* os) {
 | 
			
		||||
  PrintTupleTo(t, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T1>
 | 
			
		||||
void PrintTo(const ::std::tr1::tuple<T1>& t, ::std::ostream* os) {
 | 
			
		||||
  PrintTupleTo(t, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T1, typename T2>
 | 
			
		||||
void PrintTo(const ::std::tr1::tuple<T1, T2>& t, ::std::ostream* os) {
 | 
			
		||||
  PrintTupleTo(t, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T1, typename T2, typename T3>
 | 
			
		||||
void PrintTo(const ::std::tr1::tuple<T1, T2, T3>& t, ::std::ostream* os) {
 | 
			
		||||
  PrintTupleTo(t, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T1, typename T2, typename T3, typename T4>
 | 
			
		||||
void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4>& t, ::std::ostream* os) {
 | 
			
		||||
  PrintTupleTo(t, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T1, typename T2, typename T3, typename T4, typename T5>
 | 
			
		||||
void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5>& t,
 | 
			
		||||
             ::std::ostream* os) {
 | 
			
		||||
  PrintTupleTo(t, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T1, typename T2, typename T3, typename T4, typename T5,
 | 
			
		||||
          typename T6>
 | 
			
		||||
void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6>& t,
 | 
			
		||||
             ::std::ostream* os) {
 | 
			
		||||
  PrintTupleTo(t, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T1, typename T2, typename T3, typename T4, typename T5,
 | 
			
		||||
          typename T6, typename T7>
 | 
			
		||||
void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7>& t,
 | 
			
		||||
             ::std::ostream* os) {
 | 
			
		||||
  PrintTupleTo(t, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T1, typename T2, typename T3, typename T4, typename T5,
 | 
			
		||||
          typename T6, typename T7, typename T8>
 | 
			
		||||
void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8>& t,
 | 
			
		||||
             ::std::ostream* os) {
 | 
			
		||||
  PrintTupleTo(t, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T1, typename T2, typename T3, typename T4, typename T5,
 | 
			
		||||
          typename T6, typename T7, typename T8, typename T9>
 | 
			
		||||
void PrintTo(const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9>& t,
 | 
			
		||||
             ::std::ostream* os) {
 | 
			
		||||
  PrintTupleTo(t, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T1, typename T2, typename T3, typename T4, typename T5,
 | 
			
		||||
          typename T6, typename T7, typename T8, typename T9, typename T10>
 | 
			
		||||
void PrintTo(
 | 
			
		||||
    const ::std::tr1::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>& t,
 | 
			
		||||
    ::std::ostream* os) {
 | 
			
		||||
  PrintTupleTo(t, os);
 | 
			
		||||
}
 | 
			
		||||
#endif  // GTEST_HAS_TR1_TUPLE
 | 
			
		||||
 | 
			
		||||
// Overload for std::pair.
 | 
			
		||||
template <typename T1, typename T2>
 | 
			
		||||
void PrintTo(const ::std::pair<T1, T2>& value, ::std::ostream* os) {
 | 
			
		||||
  *os << '(';
 | 
			
		||||
  // We cannot use UniversalPrint(value.first, os) here, as T1 may be
 | 
			
		||||
  // a reference type.  The same for printing value.second.
 | 
			
		||||
  UniversalPrinter<T1>::Print(value.first, os);
 | 
			
		||||
  *os << ", ";
 | 
			
		||||
  UniversalPrinter<T2>::Print(value.second, os);
 | 
			
		||||
  *os << ')';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Implements printing a non-reference type T by letting the compiler
 | 
			
		||||
// pick the right overload of PrintTo() for T.
 | 
			
		||||
template <typename T>
 | 
			
		||||
class UniversalPrinter {
 | 
			
		||||
 public:
 | 
			
		||||
  // MSVC warns about adding const to a function type, so we want to
 | 
			
		||||
  // disable the warning.
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
# pragma warning(push)          // Saves the current warning state.
 | 
			
		||||
# pragma warning(disable:4180)  // Temporarily disables warning 4180.
 | 
			
		||||
#endif  // _MSC_VER
 | 
			
		||||
 | 
			
		||||
  // Note: we deliberately don't call this PrintTo(), as that name
 | 
			
		||||
  // conflicts with ::testing::internal::PrintTo in the body of the
 | 
			
		||||
  // function.
 | 
			
		||||
  static void Print(const T& value, ::std::ostream* os) {
 | 
			
		||||
    // By default, ::testing::internal::PrintTo() is used for printing
 | 
			
		||||
    // the value.
 | 
			
		||||
    //
 | 
			
		||||
    // Thanks to Koenig look-up, if T is a class and has its own
 | 
			
		||||
    // PrintTo() function defined in its namespace, that function will
 | 
			
		||||
    // be visible here.  Since it is more specific than the generic ones
 | 
			
		||||
    // in ::testing::internal, it will be picked by the compiler in the
 | 
			
		||||
    // following statement - exactly what we want.
 | 
			
		||||
    PrintTo(value, os);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
# pragma warning(pop)           // Restores the warning state.
 | 
			
		||||
#endif  // _MSC_VER
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// UniversalPrintArray(begin, len, os) prints an array of 'len'
 | 
			
		||||
// elements, starting at address 'begin'.
 | 
			
		||||
template <typename T>
 | 
			
		||||
void UniversalPrintArray(const T* begin, size_t len, ::std::ostream* os) {
 | 
			
		||||
  if (len == 0) {
 | 
			
		||||
    *os << "{}";
 | 
			
		||||
  } else {
 | 
			
		||||
    *os << "{ ";
 | 
			
		||||
    const size_t kThreshold = 18;
 | 
			
		||||
    const size_t kChunkSize = 8;
 | 
			
		||||
    // If the array has more than kThreshold elements, we'll have to
 | 
			
		||||
    // omit some details by printing only the first and the last
 | 
			
		||||
    // kChunkSize elements.
 | 
			
		||||
    // TODO(wan@google.com): let the user control the threshold using a flag.
 | 
			
		||||
    if (len <= kThreshold) {
 | 
			
		||||
      PrintRawArrayTo(begin, len, os);
 | 
			
		||||
    } else {
 | 
			
		||||
      PrintRawArrayTo(begin, kChunkSize, os);
 | 
			
		||||
      *os << ", ..., ";
 | 
			
		||||
      PrintRawArrayTo(begin + len - kChunkSize, kChunkSize, os);
 | 
			
		||||
    }
 | 
			
		||||
    *os << " }";
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
// This overload prints a (const) char array compactly.
 | 
			
		||||
GTEST_API_ void UniversalPrintArray(const char* begin,
 | 
			
		||||
                                    size_t len,
 | 
			
		||||
                                    ::std::ostream* os);
 | 
			
		||||
 | 
			
		||||
// Implements printing an array type T[N].
 | 
			
		||||
template <typename T, size_t N>
 | 
			
		||||
class UniversalPrinter<T[N]> {
 | 
			
		||||
 public:
 | 
			
		||||
  // Prints the given array, omitting some elements when there are too
 | 
			
		||||
  // many.
 | 
			
		||||
  static void Print(const T (&a)[N], ::std::ostream* os) {
 | 
			
		||||
    UniversalPrintArray(a, N, os);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Implements printing a reference type T&.
 | 
			
		||||
template <typename T>
 | 
			
		||||
class UniversalPrinter<T&> {
 | 
			
		||||
 public:
 | 
			
		||||
  // MSVC warns about adding const to a function type, so we want to
 | 
			
		||||
  // disable the warning.
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
# pragma warning(push)          // Saves the current warning state.
 | 
			
		||||
# pragma warning(disable:4180)  // Temporarily disables warning 4180.
 | 
			
		||||
#endif  // _MSC_VER
 | 
			
		||||
 | 
			
		||||
  static void Print(const T& value, ::std::ostream* os) {
 | 
			
		||||
    // Prints the address of the value.  We use reinterpret_cast here
 | 
			
		||||
    // as static_cast doesn't compile when T is a function type.
 | 
			
		||||
    *os << "@" << reinterpret_cast<const void*>(&value) << " ";
 | 
			
		||||
 | 
			
		||||
    // Then prints the value itself.
 | 
			
		||||
    UniversalPrint(value, os);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
#ifdef _MSC_VER
 | 
			
		||||
# pragma warning(pop)           // Restores the warning state.
 | 
			
		||||
#endif  // _MSC_VER
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Prints a value tersely: for a reference type, the referenced value
 | 
			
		||||
// (but not the address) is printed; for a (const) char pointer, the
 | 
			
		||||
// NUL-terminated string (but not the pointer) is printed.
 | 
			
		||||
template <typename T>
 | 
			
		||||
void UniversalTersePrint(const T& value, ::std::ostream* os) {
 | 
			
		||||
  UniversalPrint(value, os);
 | 
			
		||||
}
 | 
			
		||||
inline void UniversalTersePrint(const char* str, ::std::ostream* os) {
 | 
			
		||||
  if (str == NULL) {
 | 
			
		||||
    *os << "NULL";
 | 
			
		||||
  } else {
 | 
			
		||||
    UniversalPrint(string(str), os);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
inline void UniversalTersePrint(char* str, ::std::ostream* os) {
 | 
			
		||||
  UniversalTersePrint(static_cast<const char*>(str), os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Prints a value using the type inferred by the compiler.  The
 | 
			
		||||
// difference between this and UniversalTersePrint() is that for a
 | 
			
		||||
// (const) char pointer, this prints both the pointer and the
 | 
			
		||||
// NUL-terminated string.
 | 
			
		||||
template <typename T>
 | 
			
		||||
void UniversalPrint(const T& value, ::std::ostream* os) {
 | 
			
		||||
  UniversalPrinter<T>::Print(value, os);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_TR1_TUPLE
 | 
			
		||||
typedef ::std::vector<string> Strings;
 | 
			
		||||
 | 
			
		||||
// This helper template allows PrintTo() for tuples and
 | 
			
		||||
// UniversalTersePrintTupleFieldsToStrings() to be defined by
 | 
			
		||||
// induction on the number of tuple fields.  The idea is that
 | 
			
		||||
// TuplePrefixPrinter<N>::PrintPrefixTo(t, os) prints the first N
 | 
			
		||||
// fields in tuple t, and can be defined in terms of
 | 
			
		||||
// TuplePrefixPrinter<N - 1>.
 | 
			
		||||
 | 
			
		||||
// The inductive case.
 | 
			
		||||
template <size_t N>
 | 
			
		||||
struct TuplePrefixPrinter {
 | 
			
		||||
  // Prints the first N fields of a tuple.
 | 
			
		||||
  template <typename Tuple>
 | 
			
		||||
  static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) {
 | 
			
		||||
    TuplePrefixPrinter<N - 1>::PrintPrefixTo(t, os);
 | 
			
		||||
    *os << ", ";
 | 
			
		||||
    UniversalPrinter<typename ::std::tr1::tuple_element<N - 1, Tuple>::type>
 | 
			
		||||
        ::Print(::std::tr1::get<N - 1>(t), os);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Tersely prints the first N fields of a tuple to a string vector,
 | 
			
		||||
  // one element for each field.
 | 
			
		||||
  template <typename Tuple>
 | 
			
		||||
  static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) {
 | 
			
		||||
    TuplePrefixPrinter<N - 1>::TersePrintPrefixToStrings(t, strings);
 | 
			
		||||
    ::std::stringstream ss;
 | 
			
		||||
    UniversalTersePrint(::std::tr1::get<N - 1>(t), &ss);
 | 
			
		||||
    strings->push_back(ss.str());
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Base cases.
 | 
			
		||||
template <>
 | 
			
		||||
struct TuplePrefixPrinter<0> {
 | 
			
		||||
  template <typename Tuple>
 | 
			
		||||
  static void PrintPrefixTo(const Tuple&, ::std::ostream*) {}
 | 
			
		||||
 | 
			
		||||
  template <typename Tuple>
 | 
			
		||||
  static void TersePrintPrefixToStrings(const Tuple&, Strings*) {}
 | 
			
		||||
};
 | 
			
		||||
// We have to specialize the entire TuplePrefixPrinter<> class
 | 
			
		||||
// template here, even though the definition of
 | 
			
		||||
// TersePrintPrefixToStrings() is the same as the generic version, as
 | 
			
		||||
// Embarcadero (formerly CodeGear, formerly Borland) C++ doesn't
 | 
			
		||||
// support specializing a method template of a class template.
 | 
			
		||||
template <>
 | 
			
		||||
struct TuplePrefixPrinter<1> {
 | 
			
		||||
  template <typename Tuple>
 | 
			
		||||
  static void PrintPrefixTo(const Tuple& t, ::std::ostream* os) {
 | 
			
		||||
    UniversalPrinter<typename ::std::tr1::tuple_element<0, Tuple>::type>::
 | 
			
		||||
        Print(::std::tr1::get<0>(t), os);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  template <typename Tuple>
 | 
			
		||||
  static void TersePrintPrefixToStrings(const Tuple& t, Strings* strings) {
 | 
			
		||||
    ::std::stringstream ss;
 | 
			
		||||
    UniversalTersePrint(::std::tr1::get<0>(t), &ss);
 | 
			
		||||
    strings->push_back(ss.str());
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Helper function for printing a tuple.  T must be instantiated with
 | 
			
		||||
// a tuple type.
 | 
			
		||||
template <typename T>
 | 
			
		||||
void PrintTupleTo(const T& t, ::std::ostream* os) {
 | 
			
		||||
  *os << "(";
 | 
			
		||||
  TuplePrefixPrinter< ::std::tr1::tuple_size<T>::value>::
 | 
			
		||||
      PrintPrefixTo(t, os);
 | 
			
		||||
  *os << ")";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Prints the fields of a tuple tersely to a string vector, one
 | 
			
		||||
// element for each field.  See the comment before
 | 
			
		||||
// UniversalTersePrint() for how we define "tersely".
 | 
			
		||||
template <typename Tuple>
 | 
			
		||||
Strings UniversalTersePrintTupleFieldsToStrings(const Tuple& value) {
 | 
			
		||||
  Strings result;
 | 
			
		||||
  TuplePrefixPrinter< ::std::tr1::tuple_size<Tuple>::value>::
 | 
			
		||||
      TersePrintPrefixToStrings(value, &result);
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
#endif  // GTEST_HAS_TR1_TUPLE
 | 
			
		||||
 | 
			
		||||
}  // namespace internal
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
::std::string PrintToString(const T& value) {
 | 
			
		||||
  ::std::stringstream ss;
 | 
			
		||||
  internal::UniversalTersePrint(value, &ss);
 | 
			
		||||
  return ss.str();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_GTEST_PRINTERS_H_
 | 
			
		||||
							
								
								
									
										232
									
								
								third_party/googletest/src/include/gtest/gtest-spi.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										232
									
								
								third_party/googletest/src/include/gtest/gtest-spi.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,232 @@
 | 
			
		||||
// Copyright 2007, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: wan@google.com (Zhanyong Wan)
 | 
			
		||||
//
 | 
			
		||||
// Utilities for testing Google Test itself and code that uses Google Test
 | 
			
		||||
// (e.g. frameworks built on top of Google Test).
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_GTEST_SPI_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_GTEST_SPI_H_
 | 
			
		||||
 | 
			
		||||
#include "gtest/gtest.h"
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
 | 
			
		||||
// This helper class can be used to mock out Google Test failure reporting
 | 
			
		||||
// so that we can test Google Test or code that builds on Google Test.
 | 
			
		||||
//
 | 
			
		||||
// An object of this class appends a TestPartResult object to the
 | 
			
		||||
// TestPartResultArray object given in the constructor whenever a Google Test
 | 
			
		||||
// failure is reported. It can either intercept only failures that are
 | 
			
		||||
// generated in the same thread that created this object or it can intercept
 | 
			
		||||
// all generated failures. The scope of this mock object can be controlled with
 | 
			
		||||
// the second argument to the two arguments constructor.
 | 
			
		||||
class GTEST_API_ ScopedFakeTestPartResultReporter
 | 
			
		||||
    : public TestPartResultReporterInterface {
 | 
			
		||||
 public:
 | 
			
		||||
  // The two possible mocking modes of this object.
 | 
			
		||||
  enum InterceptMode {
 | 
			
		||||
    INTERCEPT_ONLY_CURRENT_THREAD,  // Intercepts only thread local failures.
 | 
			
		||||
    INTERCEPT_ALL_THREADS           // Intercepts all failures.
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // The c'tor sets this object as the test part result reporter used
 | 
			
		||||
  // by Google Test.  The 'result' parameter specifies where to report the
 | 
			
		||||
  // results. This reporter will only catch failures generated in the current
 | 
			
		||||
  // thread. DEPRECATED
 | 
			
		||||
  explicit ScopedFakeTestPartResultReporter(TestPartResultArray* result);
 | 
			
		||||
 | 
			
		||||
  // Same as above, but you can choose the interception scope of this object.
 | 
			
		||||
  ScopedFakeTestPartResultReporter(InterceptMode intercept_mode,
 | 
			
		||||
                                   TestPartResultArray* result);
 | 
			
		||||
 | 
			
		||||
  // The d'tor restores the previous test part result reporter.
 | 
			
		||||
  virtual ~ScopedFakeTestPartResultReporter();
 | 
			
		||||
 | 
			
		||||
  // Appends the TestPartResult object to the TestPartResultArray
 | 
			
		||||
  // received in the constructor.
 | 
			
		||||
  //
 | 
			
		||||
  // This method is from the TestPartResultReporterInterface
 | 
			
		||||
  // interface.
 | 
			
		||||
  virtual void ReportTestPartResult(const TestPartResult& result);
 | 
			
		||||
 private:
 | 
			
		||||
  void Init();
 | 
			
		||||
 | 
			
		||||
  const InterceptMode intercept_mode_;
 | 
			
		||||
  TestPartResultReporterInterface* old_reporter_;
 | 
			
		||||
  TestPartResultArray* const result_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(ScopedFakeTestPartResultReporter);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
// A helper class for implementing EXPECT_FATAL_FAILURE() and
 | 
			
		||||
// EXPECT_NONFATAL_FAILURE().  Its destructor verifies that the given
 | 
			
		||||
// TestPartResultArray contains exactly one failure that has the given
 | 
			
		||||
// type and contains the given substring.  If that's not the case, a
 | 
			
		||||
// non-fatal failure will be generated.
 | 
			
		||||
class GTEST_API_ SingleFailureChecker {
 | 
			
		||||
 public:
 | 
			
		||||
  // The constructor remembers the arguments.
 | 
			
		||||
  SingleFailureChecker(const TestPartResultArray* results,
 | 
			
		||||
                       TestPartResult::Type type,
 | 
			
		||||
                       const string& substr);
 | 
			
		||||
  ~SingleFailureChecker();
 | 
			
		||||
 private:
 | 
			
		||||
  const TestPartResultArray* const results_;
 | 
			
		||||
  const TestPartResult::Type type_;
 | 
			
		||||
  const string substr_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(SingleFailureChecker);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace internal
 | 
			
		||||
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
// A set of macros for testing Google Test assertions or code that's expected
 | 
			
		||||
// to generate Google Test fatal failures.  It verifies that the given
 | 
			
		||||
// statement will cause exactly one fatal Google Test failure with 'substr'
 | 
			
		||||
// being part of the failure message.
 | 
			
		||||
//
 | 
			
		||||
// There are two different versions of this macro. EXPECT_FATAL_FAILURE only
 | 
			
		||||
// affects and considers failures generated in the current thread and
 | 
			
		||||
// EXPECT_FATAL_FAILURE_ON_ALL_THREADS does the same but for all threads.
 | 
			
		||||
//
 | 
			
		||||
// The verification of the assertion is done correctly even when the statement
 | 
			
		||||
// throws an exception or aborts the current function.
 | 
			
		||||
//
 | 
			
		||||
// Known restrictions:
 | 
			
		||||
//   - 'statement' cannot reference local non-static variables or
 | 
			
		||||
//     non-static members of the current object.
 | 
			
		||||
//   - 'statement' cannot return a value.
 | 
			
		||||
//   - You cannot stream a failure message to this macro.
 | 
			
		||||
//
 | 
			
		||||
// Note that even though the implementations of the following two
 | 
			
		||||
// macros are much alike, we cannot refactor them to use a common
 | 
			
		||||
// helper macro, due to some peculiarity in how the preprocessor
 | 
			
		||||
// works.  The AcceptsMacroThatExpandsToUnprotectedComma test in
 | 
			
		||||
// gtest_unittest.cc will fail to compile if we do that.
 | 
			
		||||
#define EXPECT_FATAL_FAILURE(statement, substr) \
 | 
			
		||||
  do { \
 | 
			
		||||
    class GTestExpectFatalFailureHelper {\
 | 
			
		||||
     public:\
 | 
			
		||||
      static void Execute() { statement; }\
 | 
			
		||||
    };\
 | 
			
		||||
    ::testing::TestPartResultArray gtest_failures;\
 | 
			
		||||
    ::testing::internal::SingleFailureChecker gtest_checker(\
 | 
			
		||||
        >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\
 | 
			
		||||
    {\
 | 
			
		||||
      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
 | 
			
		||||
          ::testing::ScopedFakeTestPartResultReporter:: \
 | 
			
		||||
          INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\
 | 
			
		||||
      GTestExpectFatalFailureHelper::Execute();\
 | 
			
		||||
    }\
 | 
			
		||||
  } while (::testing::internal::AlwaysFalse())
 | 
			
		||||
 | 
			
		||||
#define EXPECT_FATAL_FAILURE_ON_ALL_THREADS(statement, substr) \
 | 
			
		||||
  do { \
 | 
			
		||||
    class GTestExpectFatalFailureHelper {\
 | 
			
		||||
     public:\
 | 
			
		||||
      static void Execute() { statement; }\
 | 
			
		||||
    };\
 | 
			
		||||
    ::testing::TestPartResultArray gtest_failures;\
 | 
			
		||||
    ::testing::internal::SingleFailureChecker gtest_checker(\
 | 
			
		||||
        >est_failures, ::testing::TestPartResult::kFatalFailure, (substr));\
 | 
			
		||||
    {\
 | 
			
		||||
      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
 | 
			
		||||
          ::testing::ScopedFakeTestPartResultReporter:: \
 | 
			
		||||
          INTERCEPT_ALL_THREADS, >est_failures);\
 | 
			
		||||
      GTestExpectFatalFailureHelper::Execute();\
 | 
			
		||||
    }\
 | 
			
		||||
  } while (::testing::internal::AlwaysFalse())
 | 
			
		||||
 | 
			
		||||
// A macro for testing Google Test assertions or code that's expected to
 | 
			
		||||
// generate Google Test non-fatal failures.  It asserts that the given
 | 
			
		||||
// statement will cause exactly one non-fatal Google Test failure with 'substr'
 | 
			
		||||
// being part of the failure message.
 | 
			
		||||
//
 | 
			
		||||
// There are two different versions of this macro. EXPECT_NONFATAL_FAILURE only
 | 
			
		||||
// affects and considers failures generated in the current thread and
 | 
			
		||||
// EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS does the same but for all threads.
 | 
			
		||||
//
 | 
			
		||||
// 'statement' is allowed to reference local variables and members of
 | 
			
		||||
// the current object.
 | 
			
		||||
//
 | 
			
		||||
// The verification of the assertion is done correctly even when the statement
 | 
			
		||||
// throws an exception or aborts the current function.
 | 
			
		||||
//
 | 
			
		||||
// Known restrictions:
 | 
			
		||||
//   - You cannot stream a failure message to this macro.
 | 
			
		||||
//
 | 
			
		||||
// Note that even though the implementations of the following two
 | 
			
		||||
// macros are much alike, we cannot refactor them to use a common
 | 
			
		||||
// helper macro, due to some peculiarity in how the preprocessor
 | 
			
		||||
// works.  If we do that, the code won't compile when the user gives
 | 
			
		||||
// EXPECT_NONFATAL_FAILURE() a statement that contains a macro that
 | 
			
		||||
// expands to code containing an unprotected comma.  The
 | 
			
		||||
// AcceptsMacroThatExpandsToUnprotectedComma test in gtest_unittest.cc
 | 
			
		||||
// catches that.
 | 
			
		||||
//
 | 
			
		||||
// For the same reason, we have to write
 | 
			
		||||
//   if (::testing::internal::AlwaysTrue()) { statement; }
 | 
			
		||||
// instead of
 | 
			
		||||
//   GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)
 | 
			
		||||
// to avoid an MSVC warning on unreachable code.
 | 
			
		||||
#define EXPECT_NONFATAL_FAILURE(statement, substr) \
 | 
			
		||||
  do {\
 | 
			
		||||
    ::testing::TestPartResultArray gtest_failures;\
 | 
			
		||||
    ::testing::internal::SingleFailureChecker gtest_checker(\
 | 
			
		||||
        >est_failures, ::testing::TestPartResult::kNonFatalFailure, \
 | 
			
		||||
        (substr));\
 | 
			
		||||
    {\
 | 
			
		||||
      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
 | 
			
		||||
          ::testing::ScopedFakeTestPartResultReporter:: \
 | 
			
		||||
          INTERCEPT_ONLY_CURRENT_THREAD, >est_failures);\
 | 
			
		||||
      if (::testing::internal::AlwaysTrue()) { statement; }\
 | 
			
		||||
    }\
 | 
			
		||||
  } while (::testing::internal::AlwaysFalse())
 | 
			
		||||
 | 
			
		||||
#define EXPECT_NONFATAL_FAILURE_ON_ALL_THREADS(statement, substr) \
 | 
			
		||||
  do {\
 | 
			
		||||
    ::testing::TestPartResultArray gtest_failures;\
 | 
			
		||||
    ::testing::internal::SingleFailureChecker gtest_checker(\
 | 
			
		||||
        >est_failures, ::testing::TestPartResult::kNonFatalFailure, \
 | 
			
		||||
        (substr));\
 | 
			
		||||
    {\
 | 
			
		||||
      ::testing::ScopedFakeTestPartResultReporter gtest_reporter(\
 | 
			
		||||
          ::testing::ScopedFakeTestPartResultReporter::INTERCEPT_ALL_THREADS,\
 | 
			
		||||
          >est_failures);\
 | 
			
		||||
      if (::testing::internal::AlwaysTrue()) { statement; }\
 | 
			
		||||
    }\
 | 
			
		||||
  } while (::testing::internal::AlwaysFalse())
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_GTEST_SPI_H_
 | 
			
		||||
							
								
								
									
										176
									
								
								third_party/googletest/src/include/gtest/gtest-test-part.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										176
									
								
								third_party/googletest/src/include/gtest/gtest-test-part.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,176 @@
 | 
			
		||||
// Copyright 2008, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: mheule@google.com (Markus Heule)
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
 | 
			
		||||
 | 
			
		||||
#include <iosfwd>
 | 
			
		||||
#include <vector>
 | 
			
		||||
#include "gtest/internal/gtest-internal.h"
 | 
			
		||||
#include "gtest/internal/gtest-string.h"
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
 | 
			
		||||
// A copyable object representing the result of a test part (i.e. an
 | 
			
		||||
// assertion or an explicit FAIL(), ADD_FAILURE(), or SUCCESS()).
 | 
			
		||||
//
 | 
			
		||||
// Don't inherit from TestPartResult as its destructor is not virtual.
 | 
			
		||||
class GTEST_API_ TestPartResult {
 | 
			
		||||
 public:
 | 
			
		||||
  // The possible outcomes of a test part (i.e. an assertion or an
 | 
			
		||||
  // explicit SUCCEED(), FAIL(), or ADD_FAILURE()).
 | 
			
		||||
  enum Type {
 | 
			
		||||
    kSuccess,          // Succeeded.
 | 
			
		||||
    kNonFatalFailure,  // Failed but the test can continue.
 | 
			
		||||
    kFatalFailure      // Failed and the test should be terminated.
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // C'tor.  TestPartResult does NOT have a default constructor.
 | 
			
		||||
  // Always use this constructor (with parameters) to create a
 | 
			
		||||
  // TestPartResult object.
 | 
			
		||||
  TestPartResult(Type a_type,
 | 
			
		||||
                 const char* a_file_name,
 | 
			
		||||
                 int a_line_number,
 | 
			
		||||
                 const char* a_message)
 | 
			
		||||
      : type_(a_type),
 | 
			
		||||
        file_name_(a_file_name),
 | 
			
		||||
        line_number_(a_line_number),
 | 
			
		||||
        summary_(ExtractSummary(a_message)),
 | 
			
		||||
        message_(a_message) {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Gets the outcome of the test part.
 | 
			
		||||
  Type type() const { return type_; }
 | 
			
		||||
 | 
			
		||||
  // Gets the name of the source file where the test part took place, or
 | 
			
		||||
  // NULL if it's unknown.
 | 
			
		||||
  const char* file_name() const { return file_name_.c_str(); }
 | 
			
		||||
 | 
			
		||||
  // Gets the line in the source file where the test part took place,
 | 
			
		||||
  // or -1 if it's unknown.
 | 
			
		||||
  int line_number() const { return line_number_; }
 | 
			
		||||
 | 
			
		||||
  // Gets the summary of the failure message.
 | 
			
		||||
  const char* summary() const { return summary_.c_str(); }
 | 
			
		||||
 | 
			
		||||
  // Gets the message associated with the test part.
 | 
			
		||||
  const char* message() const { return message_.c_str(); }
 | 
			
		||||
 | 
			
		||||
  // Returns true iff the test part passed.
 | 
			
		||||
  bool passed() const { return type_ == kSuccess; }
 | 
			
		||||
 | 
			
		||||
  // Returns true iff the test part failed.
 | 
			
		||||
  bool failed() const { return type_ != kSuccess; }
 | 
			
		||||
 | 
			
		||||
  // Returns true iff the test part non-fatally failed.
 | 
			
		||||
  bool nonfatally_failed() const { return type_ == kNonFatalFailure; }
 | 
			
		||||
 | 
			
		||||
  // Returns true iff the test part fatally failed.
 | 
			
		||||
  bool fatally_failed() const { return type_ == kFatalFailure; }
 | 
			
		||||
 private:
 | 
			
		||||
  Type type_;
 | 
			
		||||
 | 
			
		||||
  // Gets the summary of the failure message by omitting the stack
 | 
			
		||||
  // trace in it.
 | 
			
		||||
  static internal::String ExtractSummary(const char* message);
 | 
			
		||||
 | 
			
		||||
  // The name of the source file where the test part took place, or
 | 
			
		||||
  // NULL if the source file is unknown.
 | 
			
		||||
  internal::String file_name_;
 | 
			
		||||
  // The line in the source file where the test part took place, or -1
 | 
			
		||||
  // if the line number is unknown.
 | 
			
		||||
  int line_number_;
 | 
			
		||||
  internal::String summary_;  // The test failure summary.
 | 
			
		||||
  internal::String message_;  // The test failure message.
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Prints a TestPartResult object.
 | 
			
		||||
std::ostream& operator<<(std::ostream& os, const TestPartResult& result);
 | 
			
		||||
 | 
			
		||||
// An array of TestPartResult objects.
 | 
			
		||||
//
 | 
			
		||||
// Don't inherit from TestPartResultArray as its destructor is not
 | 
			
		||||
// virtual.
 | 
			
		||||
class GTEST_API_ TestPartResultArray {
 | 
			
		||||
 public:
 | 
			
		||||
  TestPartResultArray() {}
 | 
			
		||||
 | 
			
		||||
  // Appends the given TestPartResult to the array.
 | 
			
		||||
  void Append(const TestPartResult& result);
 | 
			
		||||
 | 
			
		||||
  // Returns the TestPartResult at the given index (0-based).
 | 
			
		||||
  const TestPartResult& GetTestPartResult(int index) const;
 | 
			
		||||
 | 
			
		||||
  // Returns the number of TestPartResult objects in the array.
 | 
			
		||||
  int size() const;
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  std::vector<TestPartResult> array_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestPartResultArray);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// This interface knows how to report a test part result.
 | 
			
		||||
class TestPartResultReporterInterface {
 | 
			
		||||
 public:
 | 
			
		||||
  virtual ~TestPartResultReporterInterface() {}
 | 
			
		||||
 | 
			
		||||
  virtual void ReportTestPartResult(const TestPartResult& result) = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
// This helper class is used by {ASSERT|EXPECT}_NO_FATAL_FAILURE to check if a
 | 
			
		||||
// statement generates new fatal failures. To do so it registers itself as the
 | 
			
		||||
// current test part result reporter. Besides checking if fatal failures were
 | 
			
		||||
// reported, it only delegates the reporting to the former result reporter.
 | 
			
		||||
// The original result reporter is restored in the destructor.
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN A USER PROGRAM.
 | 
			
		||||
class GTEST_API_ HasNewFatalFailureHelper
 | 
			
		||||
    : public TestPartResultReporterInterface {
 | 
			
		||||
 public:
 | 
			
		||||
  HasNewFatalFailureHelper();
 | 
			
		||||
  virtual ~HasNewFatalFailureHelper();
 | 
			
		||||
  virtual void ReportTestPartResult(const TestPartResult& result);
 | 
			
		||||
  bool has_new_fatal_failure() const { return has_new_fatal_failure_; }
 | 
			
		||||
 private:
 | 
			
		||||
  bool has_new_fatal_failure_;
 | 
			
		||||
  TestPartResultReporterInterface* original_reporter_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(HasNewFatalFailureHelper);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace internal
 | 
			
		||||
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_GTEST_TEST_PART_H_
 | 
			
		||||
							
								
								
									
										259
									
								
								third_party/googletest/src/include/gtest/gtest-typed-test.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								third_party/googletest/src/include/gtest/gtest-typed-test.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,259 @@
 | 
			
		||||
// Copyright 2008 Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: wan@google.com (Zhanyong Wan)
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
 | 
			
		||||
 | 
			
		||||
// This header implements typed tests and type-parameterized tests.
 | 
			
		||||
 | 
			
		||||
// Typed (aka type-driven) tests repeat the same test for types in a
 | 
			
		||||
// list.  You must know which types you want to test with when writing
 | 
			
		||||
// typed tests. Here's how you do it:
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
 | 
			
		||||
// First, define a fixture class template.  It should be parameterized
 | 
			
		||||
// by a type.  Remember to derive it from testing::Test.
 | 
			
		||||
template <typename T>
 | 
			
		||||
class FooTest : public testing::Test {
 | 
			
		||||
 public:
 | 
			
		||||
  ...
 | 
			
		||||
  typedef std::list<T> List;
 | 
			
		||||
  static T shared_;
 | 
			
		||||
  T value_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Next, associate a list of types with the test case, which will be
 | 
			
		||||
// repeated for each type in the list.  The typedef is necessary for
 | 
			
		||||
// the macro to parse correctly.
 | 
			
		||||
typedef testing::Types<char, int, unsigned int> MyTypes;
 | 
			
		||||
TYPED_TEST_CASE(FooTest, MyTypes);
 | 
			
		||||
 | 
			
		||||
// If the type list contains only one type, you can write that type
 | 
			
		||||
// directly without Types<...>:
 | 
			
		||||
//   TYPED_TEST_CASE(FooTest, int);
 | 
			
		||||
 | 
			
		||||
// Then, use TYPED_TEST() instead of TEST_F() to define as many typed
 | 
			
		||||
// tests for this test case as you want.
 | 
			
		||||
TYPED_TEST(FooTest, DoesBlah) {
 | 
			
		||||
  // Inside a test, refer to TypeParam to get the type parameter.
 | 
			
		||||
  // Since we are inside a derived class template, C++ requires use to
 | 
			
		||||
  // visit the members of FooTest via 'this'.
 | 
			
		||||
  TypeParam n = this->value_;
 | 
			
		||||
 | 
			
		||||
  // To visit static members of the fixture, add the TestFixture::
 | 
			
		||||
  // prefix.
 | 
			
		||||
  n += TestFixture::shared_;
 | 
			
		||||
 | 
			
		||||
  // To refer to typedefs in the fixture, add the "typename
 | 
			
		||||
  // TestFixture::" prefix.
 | 
			
		||||
  typename TestFixture::List values;
 | 
			
		||||
  values.push_back(n);
 | 
			
		||||
  ...
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TYPED_TEST(FooTest, HasPropertyA) { ... }
 | 
			
		||||
 | 
			
		||||
#endif  // 0
 | 
			
		||||
 | 
			
		||||
// Type-parameterized tests are abstract test patterns parameterized
 | 
			
		||||
// by a type.  Compared with typed tests, type-parameterized tests
 | 
			
		||||
// allow you to define the test pattern without knowing what the type
 | 
			
		||||
// parameters are.  The defined pattern can be instantiated with
 | 
			
		||||
// different types any number of times, in any number of translation
 | 
			
		||||
// units.
 | 
			
		||||
//
 | 
			
		||||
// If you are designing an interface or concept, you can define a
 | 
			
		||||
// suite of type-parameterized tests to verify properties that any
 | 
			
		||||
// valid implementation of the interface/concept should have.  Then,
 | 
			
		||||
// each implementation can easily instantiate the test suite to verify
 | 
			
		||||
// that it conforms to the requirements, without having to write
 | 
			
		||||
// similar tests repeatedly.  Here's an example:
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
 | 
			
		||||
// First, define a fixture class template.  It should be parameterized
 | 
			
		||||
// by a type.  Remember to derive it from testing::Test.
 | 
			
		||||
template <typename T>
 | 
			
		||||
class FooTest : public testing::Test {
 | 
			
		||||
  ...
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Next, declare that you will define a type-parameterized test case
 | 
			
		||||
// (the _P suffix is for "parameterized" or "pattern", whichever you
 | 
			
		||||
// prefer):
 | 
			
		||||
TYPED_TEST_CASE_P(FooTest);
 | 
			
		||||
 | 
			
		||||
// Then, use TYPED_TEST_P() to define as many type-parameterized tests
 | 
			
		||||
// for this type-parameterized test case as you want.
 | 
			
		||||
TYPED_TEST_P(FooTest, DoesBlah) {
 | 
			
		||||
  // Inside a test, refer to TypeParam to get the type parameter.
 | 
			
		||||
  TypeParam n = 0;
 | 
			
		||||
  ...
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
TYPED_TEST_P(FooTest, HasPropertyA) { ... }
 | 
			
		||||
 | 
			
		||||
// Now the tricky part: you need to register all test patterns before
 | 
			
		||||
// you can instantiate them.  The first argument of the macro is the
 | 
			
		||||
// test case name; the rest are the names of the tests in this test
 | 
			
		||||
// case.
 | 
			
		||||
REGISTER_TYPED_TEST_CASE_P(FooTest,
 | 
			
		||||
                           DoesBlah, HasPropertyA);
 | 
			
		||||
 | 
			
		||||
// Finally, you are free to instantiate the pattern with the types you
 | 
			
		||||
// want.  If you put the above code in a header file, you can #include
 | 
			
		||||
// it in multiple C++ source files and instantiate it multiple times.
 | 
			
		||||
//
 | 
			
		||||
// To distinguish different instances of the pattern, the first
 | 
			
		||||
// argument to the INSTANTIATE_* macro is a prefix that will be added
 | 
			
		||||
// to the actual test case name.  Remember to pick unique prefixes for
 | 
			
		||||
// different instances.
 | 
			
		||||
typedef testing::Types<char, int, unsigned int> MyTypes;
 | 
			
		||||
INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, MyTypes);
 | 
			
		||||
 | 
			
		||||
// If the type list contains only one type, you can write that type
 | 
			
		||||
// directly without Types<...>:
 | 
			
		||||
//   INSTANTIATE_TYPED_TEST_CASE_P(My, FooTest, int);
 | 
			
		||||
 | 
			
		||||
#endif  // 0
 | 
			
		||||
 | 
			
		||||
#include "gtest/internal/gtest-port.h"
 | 
			
		||||
#include "gtest/internal/gtest-type-util.h"
 | 
			
		||||
 | 
			
		||||
// Implements typed tests.
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_TYPED_TEST
 | 
			
		||||
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
			
		||||
//
 | 
			
		||||
// Expands to the name of the typedef for the type parameters of the
 | 
			
		||||
// given test case.
 | 
			
		||||
# define GTEST_TYPE_PARAMS_(TestCaseName) gtest_type_params_##TestCaseName##_
 | 
			
		||||
 | 
			
		||||
// The 'Types' template argument below must have spaces around it
 | 
			
		||||
// since some compilers may choke on '>>' when passing a template
 | 
			
		||||
// instance (e.g. Types<int>)
 | 
			
		||||
# define TYPED_TEST_CASE(CaseName, Types) \
 | 
			
		||||
  typedef ::testing::internal::TypeList< Types >::type \
 | 
			
		||||
      GTEST_TYPE_PARAMS_(CaseName)
 | 
			
		||||
 | 
			
		||||
# define TYPED_TEST(CaseName, TestName) \
 | 
			
		||||
  template <typename gtest_TypeParam_> \
 | 
			
		||||
  class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \
 | 
			
		||||
      : public CaseName<gtest_TypeParam_> { \
 | 
			
		||||
   private: \
 | 
			
		||||
    typedef CaseName<gtest_TypeParam_> TestFixture; \
 | 
			
		||||
    typedef gtest_TypeParam_ TypeParam; \
 | 
			
		||||
    virtual void TestBody(); \
 | 
			
		||||
  }; \
 | 
			
		||||
  bool gtest_##CaseName##_##TestName##_registered_ GTEST_ATTRIBUTE_UNUSED_ = \
 | 
			
		||||
      ::testing::internal::TypeParameterizedTest< \
 | 
			
		||||
          CaseName, \
 | 
			
		||||
          ::testing::internal::TemplateSel< \
 | 
			
		||||
              GTEST_TEST_CLASS_NAME_(CaseName, TestName)>, \
 | 
			
		||||
          GTEST_TYPE_PARAMS_(CaseName)>::Register(\
 | 
			
		||||
              "", #CaseName, #TestName, 0); \
 | 
			
		||||
  template <typename gtest_TypeParam_> \
 | 
			
		||||
  void GTEST_TEST_CLASS_NAME_(CaseName, TestName)<gtest_TypeParam_>::TestBody()
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_HAS_TYPED_TEST
 | 
			
		||||
 | 
			
		||||
// Implements type-parameterized tests.
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_TYPED_TEST_P
 | 
			
		||||
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
			
		||||
//
 | 
			
		||||
// Expands to the namespace name that the type-parameterized tests for
 | 
			
		||||
// the given type-parameterized test case are defined in.  The exact
 | 
			
		||||
// name of the namespace is subject to change without notice.
 | 
			
		||||
# define GTEST_CASE_NAMESPACE_(TestCaseName) \
 | 
			
		||||
  gtest_case_##TestCaseName##_
 | 
			
		||||
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
			
		||||
//
 | 
			
		||||
// Expands to the name of the variable used to remember the names of
 | 
			
		||||
// the defined tests in the given test case.
 | 
			
		||||
# define GTEST_TYPED_TEST_CASE_P_STATE_(TestCaseName) \
 | 
			
		||||
  gtest_typed_test_case_p_state_##TestCaseName##_
 | 
			
		||||
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE DIRECTLY.
 | 
			
		||||
//
 | 
			
		||||
// Expands to the name of the variable used to remember the names of
 | 
			
		||||
// the registered tests in the given test case.
 | 
			
		||||
# define GTEST_REGISTERED_TEST_NAMES_(TestCaseName) \
 | 
			
		||||
  gtest_registered_test_names_##TestCaseName##_
 | 
			
		||||
 | 
			
		||||
// The variables defined in the type-parameterized test macros are
 | 
			
		||||
// static as typically these macros are used in a .h file that can be
 | 
			
		||||
// #included in multiple translation units linked together.
 | 
			
		||||
# define TYPED_TEST_CASE_P(CaseName) \
 | 
			
		||||
  static ::testing::internal::TypedTestCasePState \
 | 
			
		||||
      GTEST_TYPED_TEST_CASE_P_STATE_(CaseName)
 | 
			
		||||
 | 
			
		||||
# define TYPED_TEST_P(CaseName, TestName) \
 | 
			
		||||
  namespace GTEST_CASE_NAMESPACE_(CaseName) { \
 | 
			
		||||
  template <typename gtest_TypeParam_> \
 | 
			
		||||
  class TestName : public CaseName<gtest_TypeParam_> { \
 | 
			
		||||
   private: \
 | 
			
		||||
    typedef CaseName<gtest_TypeParam_> TestFixture; \
 | 
			
		||||
    typedef gtest_TypeParam_ TypeParam; \
 | 
			
		||||
    virtual void TestBody(); \
 | 
			
		||||
  }; \
 | 
			
		||||
  static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \
 | 
			
		||||
      GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).AddTestName(\
 | 
			
		||||
          __FILE__, __LINE__, #CaseName, #TestName); \
 | 
			
		||||
  } \
 | 
			
		||||
  template <typename gtest_TypeParam_> \
 | 
			
		||||
  void GTEST_CASE_NAMESPACE_(CaseName)::TestName<gtest_TypeParam_>::TestBody()
 | 
			
		||||
 | 
			
		||||
# define REGISTER_TYPED_TEST_CASE_P(CaseName, ...) \
 | 
			
		||||
  namespace GTEST_CASE_NAMESPACE_(CaseName) { \
 | 
			
		||||
  typedef ::testing::internal::Templates<__VA_ARGS__>::type gtest_AllTests_; \
 | 
			
		||||
  } \
 | 
			
		||||
  static const char* const GTEST_REGISTERED_TEST_NAMES_(CaseName) = \
 | 
			
		||||
      GTEST_TYPED_TEST_CASE_P_STATE_(CaseName).VerifyRegisteredTestNames(\
 | 
			
		||||
          __FILE__, __LINE__, #__VA_ARGS__)
 | 
			
		||||
 | 
			
		||||
// The 'Types' template argument below must have spaces around it
 | 
			
		||||
// since some compilers may choke on '>>' when passing a template
 | 
			
		||||
// instance (e.g. Types<int>)
 | 
			
		||||
# define INSTANTIATE_TYPED_TEST_CASE_P(Prefix, CaseName, Types) \
 | 
			
		||||
  bool gtest_##Prefix##_##CaseName GTEST_ATTRIBUTE_UNUSED_ = \
 | 
			
		||||
      ::testing::internal::TypeParameterizedTestCase<CaseName, \
 | 
			
		||||
          GTEST_CASE_NAMESPACE_(CaseName)::gtest_AllTests_, \
 | 
			
		||||
          ::testing::internal::TypeList< Types >::type>::Register(\
 | 
			
		||||
              #Prefix, #CaseName, GTEST_REGISTERED_TEST_NAMES_(CaseName))
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_HAS_TYPED_TEST_P
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
 | 
			
		||||
							
								
								
									
										2155
									
								
								third_party/googletest/src/include/gtest/gtest.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2155
									
								
								third_party/googletest/src/include/gtest/gtest.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										358
									
								
								third_party/googletest/src/include/gtest/gtest_pred_impl.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										358
									
								
								third_party/googletest/src/include/gtest/gtest_pred_impl.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,358 @@
 | 
			
		||||
// Copyright 2006, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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 file is AUTOMATICALLY GENERATED on 09/24/2010 by command
 | 
			
		||||
// 'gen_gtest_pred_impl.py 5'.  DO NOT EDIT BY HAND!
 | 
			
		||||
//
 | 
			
		||||
// Implements a family of generic predicate assertion macros.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
 | 
			
		||||
 | 
			
		||||
// Makes sure this header is not included before gtest.h.
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_GTEST_H_
 | 
			
		||||
# error Do not include gtest_pred_impl.h directly.  Include gtest.h instead.
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_GTEST_H_
 | 
			
		||||
 | 
			
		||||
// This header implements a family of generic predicate assertion
 | 
			
		||||
// macros:
 | 
			
		||||
//
 | 
			
		||||
//   ASSERT_PRED_FORMAT1(pred_format, v1)
 | 
			
		||||
//   ASSERT_PRED_FORMAT2(pred_format, v1, v2)
 | 
			
		||||
//   ...
 | 
			
		||||
//
 | 
			
		||||
// where pred_format is a function or functor that takes n (in the
 | 
			
		||||
// case of ASSERT_PRED_FORMATn) values and their source expression
 | 
			
		||||
// text, and returns a testing::AssertionResult.  See the definition
 | 
			
		||||
// of ASSERT_EQ in gtest.h for an example.
 | 
			
		||||
//
 | 
			
		||||
// If you don't care about formatting, you can use the more
 | 
			
		||||
// restrictive version:
 | 
			
		||||
//
 | 
			
		||||
//   ASSERT_PRED1(pred, v1)
 | 
			
		||||
//   ASSERT_PRED2(pred, v1, v2)
 | 
			
		||||
//   ...
 | 
			
		||||
//
 | 
			
		||||
// where pred is an n-ary function or functor that returns bool,
 | 
			
		||||
// and the values v1, v2, ..., must support the << operator for
 | 
			
		||||
// streaming to std::ostream.
 | 
			
		||||
//
 | 
			
		||||
// We also define the EXPECT_* variations.
 | 
			
		||||
//
 | 
			
		||||
// For now we only support predicates whose arity is at most 5.
 | 
			
		||||
// Please email googletestframework@googlegroups.com if you need
 | 
			
		||||
// support for higher arities.
 | 
			
		||||
 | 
			
		||||
// GTEST_ASSERT_ is the basic statement to which all of the assertions
 | 
			
		||||
// in this file reduce.  Don't use this in your code.
 | 
			
		||||
 | 
			
		||||
#define GTEST_ASSERT_(expression, on_failure) \
 | 
			
		||||
  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
 | 
			
		||||
  if (const ::testing::AssertionResult gtest_ar = (expression)) \
 | 
			
		||||
    ; \
 | 
			
		||||
  else \
 | 
			
		||||
    on_failure(gtest_ar.failure_message())
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Helper function for implementing {EXPECT|ASSERT}_PRED1.  Don't use
 | 
			
		||||
// this in your code.
 | 
			
		||||
template <typename Pred,
 | 
			
		||||
          typename T1>
 | 
			
		||||
AssertionResult AssertPred1Helper(const char* pred_text,
 | 
			
		||||
                                  const char* e1,
 | 
			
		||||
                                  Pred pred,
 | 
			
		||||
                                  const T1& v1) {
 | 
			
		||||
  if (pred(v1)) return AssertionSuccess();
 | 
			
		||||
 | 
			
		||||
  return AssertionFailure() << pred_text << "("
 | 
			
		||||
                            << e1 << ") evaluates to false, where"
 | 
			
		||||
                            << "\n" << e1 << " evaluates to " << v1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT1.
 | 
			
		||||
// Don't use this in your code.
 | 
			
		||||
#define GTEST_PRED_FORMAT1_(pred_format, v1, on_failure)\
 | 
			
		||||
  GTEST_ASSERT_(pred_format(#v1, v1),\
 | 
			
		||||
                on_failure)
 | 
			
		||||
 | 
			
		||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED1.  Don't use
 | 
			
		||||
// this in your code.
 | 
			
		||||
#define GTEST_PRED1_(pred, v1, on_failure)\
 | 
			
		||||
  GTEST_ASSERT_(::testing::AssertPred1Helper(#pred, \
 | 
			
		||||
                                             #v1, \
 | 
			
		||||
                                             pred, \
 | 
			
		||||
                                             v1), on_failure)
 | 
			
		||||
 | 
			
		||||
// Unary predicate assertion macros.
 | 
			
		||||
#define EXPECT_PRED_FORMAT1(pred_format, v1) \
 | 
			
		||||
  GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_NONFATAL_FAILURE_)
 | 
			
		||||
#define EXPECT_PRED1(pred, v1) \
 | 
			
		||||
  GTEST_PRED1_(pred, v1, GTEST_NONFATAL_FAILURE_)
 | 
			
		||||
#define ASSERT_PRED_FORMAT1(pred_format, v1) \
 | 
			
		||||
  GTEST_PRED_FORMAT1_(pred_format, v1, GTEST_FATAL_FAILURE_)
 | 
			
		||||
#define ASSERT_PRED1(pred, v1) \
 | 
			
		||||
  GTEST_PRED1_(pred, v1, GTEST_FATAL_FAILURE_)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Helper function for implementing {EXPECT|ASSERT}_PRED2.  Don't use
 | 
			
		||||
// this in your code.
 | 
			
		||||
template <typename Pred,
 | 
			
		||||
          typename T1,
 | 
			
		||||
          typename T2>
 | 
			
		||||
AssertionResult AssertPred2Helper(const char* pred_text,
 | 
			
		||||
                                  const char* e1,
 | 
			
		||||
                                  const char* e2,
 | 
			
		||||
                                  Pred pred,
 | 
			
		||||
                                  const T1& v1,
 | 
			
		||||
                                  const T2& v2) {
 | 
			
		||||
  if (pred(v1, v2)) return AssertionSuccess();
 | 
			
		||||
 | 
			
		||||
  return AssertionFailure() << pred_text << "("
 | 
			
		||||
                            << e1 << ", "
 | 
			
		||||
                            << e2 << ") evaluates to false, where"
 | 
			
		||||
                            << "\n" << e1 << " evaluates to " << v1
 | 
			
		||||
                            << "\n" << e2 << " evaluates to " << v2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT2.
 | 
			
		||||
// Don't use this in your code.
 | 
			
		||||
#define GTEST_PRED_FORMAT2_(pred_format, v1, v2, on_failure)\
 | 
			
		||||
  GTEST_ASSERT_(pred_format(#v1, #v2, v1, v2),\
 | 
			
		||||
                on_failure)
 | 
			
		||||
 | 
			
		||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED2.  Don't use
 | 
			
		||||
// this in your code.
 | 
			
		||||
#define GTEST_PRED2_(pred, v1, v2, on_failure)\
 | 
			
		||||
  GTEST_ASSERT_(::testing::AssertPred2Helper(#pred, \
 | 
			
		||||
                                             #v1, \
 | 
			
		||||
                                             #v2, \
 | 
			
		||||
                                             pred, \
 | 
			
		||||
                                             v1, \
 | 
			
		||||
                                             v2), on_failure)
 | 
			
		||||
 | 
			
		||||
// Binary predicate assertion macros.
 | 
			
		||||
#define EXPECT_PRED_FORMAT2(pred_format, v1, v2) \
 | 
			
		||||
  GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_NONFATAL_FAILURE_)
 | 
			
		||||
#define EXPECT_PRED2(pred, v1, v2) \
 | 
			
		||||
  GTEST_PRED2_(pred, v1, v2, GTEST_NONFATAL_FAILURE_)
 | 
			
		||||
#define ASSERT_PRED_FORMAT2(pred_format, v1, v2) \
 | 
			
		||||
  GTEST_PRED_FORMAT2_(pred_format, v1, v2, GTEST_FATAL_FAILURE_)
 | 
			
		||||
#define ASSERT_PRED2(pred, v1, v2) \
 | 
			
		||||
  GTEST_PRED2_(pred, v1, v2, GTEST_FATAL_FAILURE_)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Helper function for implementing {EXPECT|ASSERT}_PRED3.  Don't use
 | 
			
		||||
// this in your code.
 | 
			
		||||
template <typename Pred,
 | 
			
		||||
          typename T1,
 | 
			
		||||
          typename T2,
 | 
			
		||||
          typename T3>
 | 
			
		||||
AssertionResult AssertPred3Helper(const char* pred_text,
 | 
			
		||||
                                  const char* e1,
 | 
			
		||||
                                  const char* e2,
 | 
			
		||||
                                  const char* e3,
 | 
			
		||||
                                  Pred pred,
 | 
			
		||||
                                  const T1& v1,
 | 
			
		||||
                                  const T2& v2,
 | 
			
		||||
                                  const T3& v3) {
 | 
			
		||||
  if (pred(v1, v2, v3)) return AssertionSuccess();
 | 
			
		||||
 | 
			
		||||
  return AssertionFailure() << pred_text << "("
 | 
			
		||||
                            << e1 << ", "
 | 
			
		||||
                            << e2 << ", "
 | 
			
		||||
                            << e3 << ") evaluates to false, where"
 | 
			
		||||
                            << "\n" << e1 << " evaluates to " << v1
 | 
			
		||||
                            << "\n" << e2 << " evaluates to " << v2
 | 
			
		||||
                            << "\n" << e3 << " evaluates to " << v3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT3.
 | 
			
		||||
// Don't use this in your code.
 | 
			
		||||
#define GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, on_failure)\
 | 
			
		||||
  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, v1, v2, v3),\
 | 
			
		||||
                on_failure)
 | 
			
		||||
 | 
			
		||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED3.  Don't use
 | 
			
		||||
// this in your code.
 | 
			
		||||
#define GTEST_PRED3_(pred, v1, v2, v3, on_failure)\
 | 
			
		||||
  GTEST_ASSERT_(::testing::AssertPred3Helper(#pred, \
 | 
			
		||||
                                             #v1, \
 | 
			
		||||
                                             #v2, \
 | 
			
		||||
                                             #v3, \
 | 
			
		||||
                                             pred, \
 | 
			
		||||
                                             v1, \
 | 
			
		||||
                                             v2, \
 | 
			
		||||
                                             v3), on_failure)
 | 
			
		||||
 | 
			
		||||
// Ternary predicate assertion macros.
 | 
			
		||||
#define EXPECT_PRED_FORMAT3(pred_format, v1, v2, v3) \
 | 
			
		||||
  GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
 | 
			
		||||
#define EXPECT_PRED3(pred, v1, v2, v3) \
 | 
			
		||||
  GTEST_PRED3_(pred, v1, v2, v3, GTEST_NONFATAL_FAILURE_)
 | 
			
		||||
#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3) \
 | 
			
		||||
  GTEST_PRED_FORMAT3_(pred_format, v1, v2, v3, GTEST_FATAL_FAILURE_)
 | 
			
		||||
#define ASSERT_PRED3(pred, v1, v2, v3) \
 | 
			
		||||
  GTEST_PRED3_(pred, v1, v2, v3, GTEST_FATAL_FAILURE_)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Helper function for implementing {EXPECT|ASSERT}_PRED4.  Don't use
 | 
			
		||||
// this in your code.
 | 
			
		||||
template <typename Pred,
 | 
			
		||||
          typename T1,
 | 
			
		||||
          typename T2,
 | 
			
		||||
          typename T3,
 | 
			
		||||
          typename T4>
 | 
			
		||||
AssertionResult AssertPred4Helper(const char* pred_text,
 | 
			
		||||
                                  const char* e1,
 | 
			
		||||
                                  const char* e2,
 | 
			
		||||
                                  const char* e3,
 | 
			
		||||
                                  const char* e4,
 | 
			
		||||
                                  Pred pred,
 | 
			
		||||
                                  const T1& v1,
 | 
			
		||||
                                  const T2& v2,
 | 
			
		||||
                                  const T3& v3,
 | 
			
		||||
                                  const T4& v4) {
 | 
			
		||||
  if (pred(v1, v2, v3, v4)) return AssertionSuccess();
 | 
			
		||||
 | 
			
		||||
  return AssertionFailure() << pred_text << "("
 | 
			
		||||
                            << e1 << ", "
 | 
			
		||||
                            << e2 << ", "
 | 
			
		||||
                            << e3 << ", "
 | 
			
		||||
                            << e4 << ") evaluates to false, where"
 | 
			
		||||
                            << "\n" << e1 << " evaluates to " << v1
 | 
			
		||||
                            << "\n" << e2 << " evaluates to " << v2
 | 
			
		||||
                            << "\n" << e3 << " evaluates to " << v3
 | 
			
		||||
                            << "\n" << e4 << " evaluates to " << v4;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT4.
 | 
			
		||||
// Don't use this in your code.
 | 
			
		||||
#define GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, on_failure)\
 | 
			
		||||
  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, v1, v2, v3, v4),\
 | 
			
		||||
                on_failure)
 | 
			
		||||
 | 
			
		||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED4.  Don't use
 | 
			
		||||
// this in your code.
 | 
			
		||||
#define GTEST_PRED4_(pred, v1, v2, v3, v4, on_failure)\
 | 
			
		||||
  GTEST_ASSERT_(::testing::AssertPred4Helper(#pred, \
 | 
			
		||||
                                             #v1, \
 | 
			
		||||
                                             #v2, \
 | 
			
		||||
                                             #v3, \
 | 
			
		||||
                                             #v4, \
 | 
			
		||||
                                             pred, \
 | 
			
		||||
                                             v1, \
 | 
			
		||||
                                             v2, \
 | 
			
		||||
                                             v3, \
 | 
			
		||||
                                             v4), on_failure)
 | 
			
		||||
 | 
			
		||||
// 4-ary predicate assertion macros.
 | 
			
		||||
#define EXPECT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
 | 
			
		||||
  GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
 | 
			
		||||
#define EXPECT_PRED4(pred, v1, v2, v3, v4) \
 | 
			
		||||
  GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_NONFATAL_FAILURE_)
 | 
			
		||||
#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4) \
 | 
			
		||||
  GTEST_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
 | 
			
		||||
#define ASSERT_PRED4(pred, v1, v2, v3, v4) \
 | 
			
		||||
  GTEST_PRED4_(pred, v1, v2, v3, v4, GTEST_FATAL_FAILURE_)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Helper function for implementing {EXPECT|ASSERT}_PRED5.  Don't use
 | 
			
		||||
// this in your code.
 | 
			
		||||
template <typename Pred,
 | 
			
		||||
          typename T1,
 | 
			
		||||
          typename T2,
 | 
			
		||||
          typename T3,
 | 
			
		||||
          typename T4,
 | 
			
		||||
          typename T5>
 | 
			
		||||
AssertionResult AssertPred5Helper(const char* pred_text,
 | 
			
		||||
                                  const char* e1,
 | 
			
		||||
                                  const char* e2,
 | 
			
		||||
                                  const char* e3,
 | 
			
		||||
                                  const char* e4,
 | 
			
		||||
                                  const char* e5,
 | 
			
		||||
                                  Pred pred,
 | 
			
		||||
                                  const T1& v1,
 | 
			
		||||
                                  const T2& v2,
 | 
			
		||||
                                  const T3& v3,
 | 
			
		||||
                                  const T4& v4,
 | 
			
		||||
                                  const T5& v5) {
 | 
			
		||||
  if (pred(v1, v2, v3, v4, v5)) return AssertionSuccess();
 | 
			
		||||
 | 
			
		||||
  return AssertionFailure() << pred_text << "("
 | 
			
		||||
                            << e1 << ", "
 | 
			
		||||
                            << e2 << ", "
 | 
			
		||||
                            << e3 << ", "
 | 
			
		||||
                            << e4 << ", "
 | 
			
		||||
                            << e5 << ") evaluates to false, where"
 | 
			
		||||
                            << "\n" << e1 << " evaluates to " << v1
 | 
			
		||||
                            << "\n" << e2 << " evaluates to " << v2
 | 
			
		||||
                            << "\n" << e3 << " evaluates to " << v3
 | 
			
		||||
                            << "\n" << e4 << " evaluates to " << v4
 | 
			
		||||
                            << "\n" << e5 << " evaluates to " << v5;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED_FORMAT5.
 | 
			
		||||
// Don't use this in your code.
 | 
			
		||||
#define GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, on_failure)\
 | 
			
		||||
  GTEST_ASSERT_(pred_format(#v1, #v2, #v3, #v4, #v5, v1, v2, v3, v4, v5),\
 | 
			
		||||
                on_failure)
 | 
			
		||||
 | 
			
		||||
// Internal macro for implementing {EXPECT|ASSERT}_PRED5.  Don't use
 | 
			
		||||
// this in your code.
 | 
			
		||||
#define GTEST_PRED5_(pred, v1, v2, v3, v4, v5, on_failure)\
 | 
			
		||||
  GTEST_ASSERT_(::testing::AssertPred5Helper(#pred, \
 | 
			
		||||
                                             #v1, \
 | 
			
		||||
                                             #v2, \
 | 
			
		||||
                                             #v3, \
 | 
			
		||||
                                             #v4, \
 | 
			
		||||
                                             #v5, \
 | 
			
		||||
                                             pred, \
 | 
			
		||||
                                             v1, \
 | 
			
		||||
                                             v2, \
 | 
			
		||||
                                             v3, \
 | 
			
		||||
                                             v4, \
 | 
			
		||||
                                             v5), on_failure)
 | 
			
		||||
 | 
			
		||||
// 5-ary predicate assertion macros.
 | 
			
		||||
#define EXPECT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
 | 
			
		||||
  GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
 | 
			
		||||
#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5) \
 | 
			
		||||
  GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_NONFATAL_FAILURE_)
 | 
			
		||||
#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5) \
 | 
			
		||||
  GTEST_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
 | 
			
		||||
#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5) \
 | 
			
		||||
  GTEST_PRED5_(pred, v1, v2, v3, v4, v5, GTEST_FATAL_FAILURE_)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_GTEST_PRED_IMPL_H_
 | 
			
		||||
							
								
								
									
										58
									
								
								third_party/googletest/src/include/gtest/gtest_prod.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								third_party/googletest/src/include/gtest/gtest_prod.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
			
		||||
// Copyright 2006, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: wan@google.com (Zhanyong Wan)
 | 
			
		||||
//
 | 
			
		||||
// Google C++ Testing Framework definitions useful in production code.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_GTEST_PROD_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_GTEST_PROD_H_
 | 
			
		||||
 | 
			
		||||
// When you need to test the private or protected members of a class,
 | 
			
		||||
// use the FRIEND_TEST macro to declare your tests as friends of the
 | 
			
		||||
// class.  For example:
 | 
			
		||||
//
 | 
			
		||||
// class MyClass {
 | 
			
		||||
//  private:
 | 
			
		||||
//   void MyMethod();
 | 
			
		||||
//   FRIEND_TEST(MyClassTest, MyMethod);
 | 
			
		||||
// };
 | 
			
		||||
//
 | 
			
		||||
// class MyClassTest : public testing::Test {
 | 
			
		||||
//   // ...
 | 
			
		||||
// };
 | 
			
		||||
//
 | 
			
		||||
// TEST_F(MyClassTest, MyMethod) {
 | 
			
		||||
//   // Can call MyClass::MyMethod() here.
 | 
			
		||||
// }
 | 
			
		||||
 | 
			
		||||
#define FRIEND_TEST(test_case_name, test_name)\
 | 
			
		||||
friend class test_case_name##_##test_name##_Test
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_GTEST_PROD_H_
 | 
			
		||||
							
								
								
									
										308
									
								
								third_party/googletest/src/include/gtest/internal/gtest-death-test-internal.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										308
									
								
								third_party/googletest/src/include/gtest/internal/gtest-death-test-internal.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,308 @@
 | 
			
		||||
// Copyright 2005, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee)
 | 
			
		||||
//
 | 
			
		||||
// The Google C++ Testing Framework (Google Test)
 | 
			
		||||
//
 | 
			
		||||
// This header file defines internal utilities needed for implementing
 | 
			
		||||
// death tests.  They are subject to change without notice.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
 | 
			
		||||
 | 
			
		||||
#include "gtest/internal/gtest-internal.h"
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
GTEST_DECLARE_string_(internal_run_death_test);
 | 
			
		||||
 | 
			
		||||
// Names of the flags (needed for parsing Google Test flags).
 | 
			
		||||
const char kDeathTestStyleFlag[] = "death_test_style";
 | 
			
		||||
const char kDeathTestUseFork[] = "death_test_use_fork";
 | 
			
		||||
const char kInternalRunDeathTestFlag[] = "internal_run_death_test";
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_DEATH_TEST
 | 
			
		||||
 | 
			
		||||
// DeathTest is a class that hides much of the complexity of the
 | 
			
		||||
// GTEST_DEATH_TEST_ macro.  It is abstract; its static Create method
 | 
			
		||||
// returns a concrete class that depends on the prevailing death test
 | 
			
		||||
// style, as defined by the --gtest_death_test_style and/or
 | 
			
		||||
// --gtest_internal_run_death_test flags.
 | 
			
		||||
 | 
			
		||||
// In describing the results of death tests, these terms are used with
 | 
			
		||||
// the corresponding definitions:
 | 
			
		||||
//
 | 
			
		||||
// exit status:  The integer exit information in the format specified
 | 
			
		||||
//               by wait(2)
 | 
			
		||||
// exit code:    The integer code passed to exit(3), _exit(2), or
 | 
			
		||||
//               returned from main()
 | 
			
		||||
class GTEST_API_ DeathTest {
 | 
			
		||||
 public:
 | 
			
		||||
  // Create returns false if there was an error determining the
 | 
			
		||||
  // appropriate action to take for the current death test; for example,
 | 
			
		||||
  // if the gtest_death_test_style flag is set to an invalid value.
 | 
			
		||||
  // The LastMessage method will return a more detailed message in that
 | 
			
		||||
  // case.  Otherwise, the DeathTest pointer pointed to by the "test"
 | 
			
		||||
  // argument is set.  If the death test should be skipped, the pointer
 | 
			
		||||
  // is set to NULL; otherwise, it is set to the address of a new concrete
 | 
			
		||||
  // DeathTest object that controls the execution of the current test.
 | 
			
		||||
  static bool Create(const char* statement, const RE* regex,
 | 
			
		||||
                     const char* file, int line, DeathTest** test);
 | 
			
		||||
  DeathTest();
 | 
			
		||||
  virtual ~DeathTest() { }
 | 
			
		||||
 | 
			
		||||
  // A helper class that aborts a death test when it's deleted.
 | 
			
		||||
  class ReturnSentinel {
 | 
			
		||||
   public:
 | 
			
		||||
    explicit ReturnSentinel(DeathTest* test) : test_(test) { }
 | 
			
		||||
    ~ReturnSentinel() { test_->Abort(TEST_ENCOUNTERED_RETURN_STATEMENT); }
 | 
			
		||||
   private:
 | 
			
		||||
    DeathTest* const test_;
 | 
			
		||||
    GTEST_DISALLOW_COPY_AND_ASSIGN_(ReturnSentinel);
 | 
			
		||||
  } GTEST_ATTRIBUTE_UNUSED_;
 | 
			
		||||
 | 
			
		||||
  // An enumeration of possible roles that may be taken when a death
 | 
			
		||||
  // test is encountered.  EXECUTE means that the death test logic should
 | 
			
		||||
  // be executed immediately.  OVERSEE means that the program should prepare
 | 
			
		||||
  // the appropriate environment for a child process to execute the death
 | 
			
		||||
  // test, then wait for it to complete.
 | 
			
		||||
  enum TestRole { OVERSEE_TEST, EXECUTE_TEST };
 | 
			
		||||
 | 
			
		||||
  // An enumeration of the three reasons that a test might be aborted.
 | 
			
		||||
  enum AbortReason {
 | 
			
		||||
    TEST_ENCOUNTERED_RETURN_STATEMENT,
 | 
			
		||||
    TEST_THREW_EXCEPTION,
 | 
			
		||||
    TEST_DID_NOT_DIE
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  // Assumes one of the above roles.
 | 
			
		||||
  virtual TestRole AssumeRole() = 0;
 | 
			
		||||
 | 
			
		||||
  // Waits for the death test to finish and returns its status.
 | 
			
		||||
  virtual int Wait() = 0;
 | 
			
		||||
 | 
			
		||||
  // Returns true if the death test passed; that is, the test process
 | 
			
		||||
  // exited during the test, its exit status matches a user-supplied
 | 
			
		||||
  // predicate, and its stderr output matches a user-supplied regular
 | 
			
		||||
  // expression.
 | 
			
		||||
  // The user-supplied predicate may be a macro expression rather
 | 
			
		||||
  // than a function pointer or functor, or else Wait and Passed could
 | 
			
		||||
  // be combined.
 | 
			
		||||
  virtual bool Passed(bool exit_status_ok) = 0;
 | 
			
		||||
 | 
			
		||||
  // Signals that the death test did not die as expected.
 | 
			
		||||
  virtual void Abort(AbortReason reason) = 0;
 | 
			
		||||
 | 
			
		||||
  // Returns a human-readable outcome message regarding the outcome of
 | 
			
		||||
  // the last death test.
 | 
			
		||||
  static const char* LastMessage();
 | 
			
		||||
 | 
			
		||||
  static void set_last_death_test_message(const String& message);
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  // A string containing a description of the outcome of the last death test.
 | 
			
		||||
  static String last_death_test_message_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(DeathTest);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Factory interface for death tests.  May be mocked out for testing.
 | 
			
		||||
class DeathTestFactory {
 | 
			
		||||
 public:
 | 
			
		||||
  virtual ~DeathTestFactory() { }
 | 
			
		||||
  virtual bool Create(const char* statement, const RE* regex,
 | 
			
		||||
                      const char* file, int line, DeathTest** test) = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// A concrete DeathTestFactory implementation for normal use.
 | 
			
		||||
class DefaultDeathTestFactory : public DeathTestFactory {
 | 
			
		||||
 public:
 | 
			
		||||
  virtual bool Create(const char* statement, const RE* regex,
 | 
			
		||||
                      const char* file, int line, DeathTest** test);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Returns true if exit_status describes a process that was terminated
 | 
			
		||||
// by a signal, or exited normally with a nonzero exit code.
 | 
			
		||||
GTEST_API_ bool ExitedUnsuccessfully(int exit_status);
 | 
			
		||||
 | 
			
		||||
// Traps C++ exceptions escaping statement and reports them as test
 | 
			
		||||
// failures. Note that trapping SEH exceptions is not implemented here.
 | 
			
		||||
# if GTEST_HAS_EXCEPTIONS
 | 
			
		||||
#  define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \
 | 
			
		||||
  try { \
 | 
			
		||||
    GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
 | 
			
		||||
  } catch (const ::std::exception& gtest_exception) { \
 | 
			
		||||
    fprintf(\
 | 
			
		||||
        stderr, \
 | 
			
		||||
        "\n%s: Caught std::exception-derived exception escaping the " \
 | 
			
		||||
        "death test statement. Exception message: %s\n", \
 | 
			
		||||
        ::testing::internal::FormatFileLocation(__FILE__, __LINE__).c_str(), \
 | 
			
		||||
        gtest_exception.what()); \
 | 
			
		||||
    fflush(stderr); \
 | 
			
		||||
    death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \
 | 
			
		||||
  } catch (...) { \
 | 
			
		||||
    death_test->Abort(::testing::internal::DeathTest::TEST_THREW_EXCEPTION); \
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
# else
 | 
			
		||||
#  define GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, death_test) \
 | 
			
		||||
  GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement)
 | 
			
		||||
 | 
			
		||||
# endif
 | 
			
		||||
 | 
			
		||||
// This macro is for implementing ASSERT_DEATH*, EXPECT_DEATH*,
 | 
			
		||||
// ASSERT_EXIT*, and EXPECT_EXIT*.
 | 
			
		||||
# define GTEST_DEATH_TEST_(statement, predicate, regex, fail) \
 | 
			
		||||
  GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
 | 
			
		||||
  if (::testing::internal::AlwaysTrue()) { \
 | 
			
		||||
    const ::testing::internal::RE& gtest_regex = (regex); \
 | 
			
		||||
    ::testing::internal::DeathTest* gtest_dt; \
 | 
			
		||||
    if (!::testing::internal::DeathTest::Create(#statement, >est_regex, \
 | 
			
		||||
        __FILE__, __LINE__, >est_dt)) { \
 | 
			
		||||
      goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \
 | 
			
		||||
    } \
 | 
			
		||||
    if (gtest_dt != NULL) { \
 | 
			
		||||
      ::testing::internal::scoped_ptr< ::testing::internal::DeathTest> \
 | 
			
		||||
          gtest_dt_ptr(gtest_dt); \
 | 
			
		||||
      switch (gtest_dt->AssumeRole()) { \
 | 
			
		||||
        case ::testing::internal::DeathTest::OVERSEE_TEST: \
 | 
			
		||||
          if (!gtest_dt->Passed(predicate(gtest_dt->Wait()))) { \
 | 
			
		||||
            goto GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__); \
 | 
			
		||||
          } \
 | 
			
		||||
          break; \
 | 
			
		||||
        case ::testing::internal::DeathTest::EXECUTE_TEST: { \
 | 
			
		||||
          ::testing::internal::DeathTest::ReturnSentinel \
 | 
			
		||||
              gtest_sentinel(gtest_dt); \
 | 
			
		||||
          GTEST_EXECUTE_DEATH_TEST_STATEMENT_(statement, gtest_dt); \
 | 
			
		||||
          gtest_dt->Abort(::testing::internal::DeathTest::TEST_DID_NOT_DIE); \
 | 
			
		||||
          break; \
 | 
			
		||||
        } \
 | 
			
		||||
        default: \
 | 
			
		||||
          break; \
 | 
			
		||||
      } \
 | 
			
		||||
    } \
 | 
			
		||||
  } else \
 | 
			
		||||
    GTEST_CONCAT_TOKEN_(gtest_label_, __LINE__): \
 | 
			
		||||
      fail(::testing::internal::DeathTest::LastMessage())
 | 
			
		||||
// The symbol "fail" here expands to something into which a message
 | 
			
		||||
// can be streamed.
 | 
			
		||||
 | 
			
		||||
// A class representing the parsed contents of the
 | 
			
		||||
// --gtest_internal_run_death_test flag, as it existed when
 | 
			
		||||
// RUN_ALL_TESTS was called.
 | 
			
		||||
class InternalRunDeathTestFlag {
 | 
			
		||||
 public:
 | 
			
		||||
  InternalRunDeathTestFlag(const String& a_file,
 | 
			
		||||
                           int a_line,
 | 
			
		||||
                           int an_index,
 | 
			
		||||
                           int a_write_fd)
 | 
			
		||||
      : file_(a_file), line_(a_line), index_(an_index),
 | 
			
		||||
        write_fd_(a_write_fd) {}
 | 
			
		||||
 | 
			
		||||
  ~InternalRunDeathTestFlag() {
 | 
			
		||||
    if (write_fd_ >= 0)
 | 
			
		||||
      posix::Close(write_fd_);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  String file() const { return file_; }
 | 
			
		||||
  int line() const { return line_; }
 | 
			
		||||
  int index() const { return index_; }
 | 
			
		||||
  int write_fd() const { return write_fd_; }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  String file_;
 | 
			
		||||
  int line_;
 | 
			
		||||
  int index_;
 | 
			
		||||
  int write_fd_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(InternalRunDeathTestFlag);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Returns a newly created InternalRunDeathTestFlag object with fields
 | 
			
		||||
// initialized from the GTEST_FLAG(internal_run_death_test) flag if
 | 
			
		||||
// the flag is specified; otherwise returns NULL.
 | 
			
		||||
InternalRunDeathTestFlag* ParseInternalRunDeathTestFlag();
 | 
			
		||||
 | 
			
		||||
#else  // GTEST_HAS_DEATH_TEST
 | 
			
		||||
 | 
			
		||||
// This macro is used for implementing macros such as
 | 
			
		||||
// EXPECT_DEATH_IF_SUPPORTED and ASSERT_DEATH_IF_SUPPORTED on systems where
 | 
			
		||||
// death tests are not supported. Those macros must compile on such systems
 | 
			
		||||
// iff EXPECT_DEATH and ASSERT_DEATH compile with the same parameters on
 | 
			
		||||
// systems that support death tests. This allows one to write such a macro
 | 
			
		||||
// on a system that does not support death tests and be sure that it will
 | 
			
		||||
// compile on a death-test supporting system.
 | 
			
		||||
//
 | 
			
		||||
// Parameters:
 | 
			
		||||
//   statement -  A statement that a macro such as EXPECT_DEATH would test
 | 
			
		||||
//                for program termination. This macro has to make sure this
 | 
			
		||||
//                statement is compiled but not executed, to ensure that
 | 
			
		||||
//                EXPECT_DEATH_IF_SUPPORTED compiles with a certain
 | 
			
		||||
//                parameter iff EXPECT_DEATH compiles with it.
 | 
			
		||||
//   regex     -  A regex that a macro such as EXPECT_DEATH would use to test
 | 
			
		||||
//                the output of statement.  This parameter has to be
 | 
			
		||||
//                compiled but not evaluated by this macro, to ensure that
 | 
			
		||||
//                this macro only accepts expressions that a macro such as
 | 
			
		||||
//                EXPECT_DEATH would accept.
 | 
			
		||||
//   terminator - Must be an empty statement for EXPECT_DEATH_IF_SUPPORTED
 | 
			
		||||
//                and a return statement for ASSERT_DEATH_IF_SUPPORTED.
 | 
			
		||||
//                This ensures that ASSERT_DEATH_IF_SUPPORTED will not
 | 
			
		||||
//                compile inside functions where ASSERT_DEATH doesn't
 | 
			
		||||
//                compile.
 | 
			
		||||
//
 | 
			
		||||
//  The branch that has an always false condition is used to ensure that
 | 
			
		||||
//  statement and regex are compiled (and thus syntactically correct) but
 | 
			
		||||
//  never executed. The unreachable code macro protects the terminator
 | 
			
		||||
//  statement from generating an 'unreachable code' warning in case
 | 
			
		||||
//  statement unconditionally returns or throws. The Message constructor at
 | 
			
		||||
//  the end allows the syntax of streaming additional messages into the
 | 
			
		||||
//  macro, for compilational compatibility with EXPECT_DEATH/ASSERT_DEATH.
 | 
			
		||||
# define GTEST_UNSUPPORTED_DEATH_TEST_(statement, regex, terminator) \
 | 
			
		||||
    GTEST_AMBIGUOUS_ELSE_BLOCKER_ \
 | 
			
		||||
    if (::testing::internal::AlwaysTrue()) { \
 | 
			
		||||
      GTEST_LOG_(WARNING) \
 | 
			
		||||
          << "Death tests are not supported on this platform.\n" \
 | 
			
		||||
          << "Statement '" #statement "' cannot be verified."; \
 | 
			
		||||
    } else if (::testing::internal::AlwaysFalse()) { \
 | 
			
		||||
      ::testing::internal::RE::PartialMatch(".*", (regex)); \
 | 
			
		||||
      GTEST_SUPPRESS_UNREACHABLE_CODE_WARNING_BELOW_(statement); \
 | 
			
		||||
      terminator; \
 | 
			
		||||
    } else \
 | 
			
		||||
      ::testing::Message()
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_HAS_DEATH_TEST
 | 
			
		||||
 | 
			
		||||
}  // namespace internal
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_DEATH_TEST_INTERNAL_H_
 | 
			
		||||
							
								
								
									
										210
									
								
								third_party/googletest/src/include/gtest/internal/gtest-filepath.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										210
									
								
								third_party/googletest/src/include/gtest/internal/gtest-filepath.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,210 @@
 | 
			
		||||
// Copyright 2008, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: keith.ray@gmail.com (Keith Ray)
 | 
			
		||||
//
 | 
			
		||||
// Google Test filepath utilities
 | 
			
		||||
//
 | 
			
		||||
// This header file declares classes and functions used internally by
 | 
			
		||||
// Google Test.  They are subject to change without notice.
 | 
			
		||||
//
 | 
			
		||||
// This file is #included in <gtest/internal/gtest-internal.h>.
 | 
			
		||||
// Do not include this header file separately!
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
 | 
			
		||||
 | 
			
		||||
#include "gtest/internal/gtest-string.h"
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
// FilePath - a class for file and directory pathname manipulation which
 | 
			
		||||
// handles platform-specific conventions (like the pathname separator).
 | 
			
		||||
// Used for helper functions for naming files in a directory for xml output.
 | 
			
		||||
// Except for Set methods, all methods are const or static, which provides an
 | 
			
		||||
// "immutable value object" -- useful for peace of mind.
 | 
			
		||||
// A FilePath with a value ending in a path separator ("like/this/") represents
 | 
			
		||||
// a directory, otherwise it is assumed to represent a file. In either case,
 | 
			
		||||
// it may or may not represent an actual file or directory in the file system.
 | 
			
		||||
// Names are NOT checked for syntax correctness -- no checking for illegal
 | 
			
		||||
// characters, malformed paths, etc.
 | 
			
		||||
 | 
			
		||||
class GTEST_API_ FilePath {
 | 
			
		||||
 public:
 | 
			
		||||
  FilePath() : pathname_("") { }
 | 
			
		||||
  FilePath(const FilePath& rhs) : pathname_(rhs.pathname_) { }
 | 
			
		||||
 | 
			
		||||
  explicit FilePath(const char* pathname) : pathname_(pathname) {
 | 
			
		||||
    Normalize();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  explicit FilePath(const String& pathname) : pathname_(pathname) {
 | 
			
		||||
    Normalize();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  FilePath& operator=(const FilePath& rhs) {
 | 
			
		||||
    Set(rhs);
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void Set(const FilePath& rhs) {
 | 
			
		||||
    pathname_ = rhs.pathname_;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  String ToString() const { return pathname_; }
 | 
			
		||||
  const char* c_str() const { return pathname_.c_str(); }
 | 
			
		||||
 | 
			
		||||
  // Returns the current working directory, or "" if unsuccessful.
 | 
			
		||||
  static FilePath GetCurrentDir();
 | 
			
		||||
 | 
			
		||||
  // Given directory = "dir", base_name = "test", number = 0,
 | 
			
		||||
  // extension = "xml", returns "dir/test.xml". If number is greater
 | 
			
		||||
  // than zero (e.g., 12), returns "dir/test_12.xml".
 | 
			
		||||
  // On Windows platform, uses \ as the separator rather than /.
 | 
			
		||||
  static FilePath MakeFileName(const FilePath& directory,
 | 
			
		||||
                               const FilePath& base_name,
 | 
			
		||||
                               int number,
 | 
			
		||||
                               const char* extension);
 | 
			
		||||
 | 
			
		||||
  // Given directory = "dir", relative_path = "test.xml",
 | 
			
		||||
  // returns "dir/test.xml".
 | 
			
		||||
  // On Windows, uses \ as the separator rather than /.
 | 
			
		||||
  static FilePath ConcatPaths(const FilePath& directory,
 | 
			
		||||
                              const FilePath& relative_path);
 | 
			
		||||
 | 
			
		||||
  // Returns a pathname for a file that does not currently exist. The pathname
 | 
			
		||||
  // will be directory/base_name.extension or
 | 
			
		||||
  // directory/base_name_<number>.extension if directory/base_name.extension
 | 
			
		||||
  // already exists. The number will be incremented until a pathname is found
 | 
			
		||||
  // that does not already exist.
 | 
			
		||||
  // Examples: 'dir/foo_test.xml' or 'dir/foo_test_1.xml'.
 | 
			
		||||
  // There could be a race condition if two or more processes are calling this
 | 
			
		||||
  // function at the same time -- they could both pick the same filename.
 | 
			
		||||
  static FilePath GenerateUniqueFileName(const FilePath& directory,
 | 
			
		||||
                                         const FilePath& base_name,
 | 
			
		||||
                                         const char* extension);
 | 
			
		||||
 | 
			
		||||
  // Returns true iff the path is NULL or "".
 | 
			
		||||
  bool IsEmpty() const { return c_str() == NULL || *c_str() == '\0'; }
 | 
			
		||||
 | 
			
		||||
  // If input name has a trailing separator character, removes it and returns
 | 
			
		||||
  // the name, otherwise return the name string unmodified.
 | 
			
		||||
  // On Windows platform, uses \ as the separator, other platforms use /.
 | 
			
		||||
  FilePath RemoveTrailingPathSeparator() const;
 | 
			
		||||
 | 
			
		||||
  // Returns a copy of the FilePath with the directory part removed.
 | 
			
		||||
  // Example: FilePath("path/to/file").RemoveDirectoryName() returns
 | 
			
		||||
  // FilePath("file"). If there is no directory part ("just_a_file"), it returns
 | 
			
		||||
  // the FilePath unmodified. If there is no file part ("just_a_dir/") it
 | 
			
		||||
  // returns an empty FilePath ("").
 | 
			
		||||
  // On Windows platform, '\' is the path separator, otherwise it is '/'.
 | 
			
		||||
  FilePath RemoveDirectoryName() const;
 | 
			
		||||
 | 
			
		||||
  // RemoveFileName returns the directory path with the filename removed.
 | 
			
		||||
  // Example: FilePath("path/to/file").RemoveFileName() returns "path/to/".
 | 
			
		||||
  // If the FilePath is "a_file" or "/a_file", RemoveFileName returns
 | 
			
		||||
  // FilePath("./") or, on Windows, FilePath(".\\"). If the filepath does
 | 
			
		||||
  // not have a file, like "just/a/dir/", it returns the FilePath unmodified.
 | 
			
		||||
  // On Windows platform, '\' is the path separator, otherwise it is '/'.
 | 
			
		||||
  FilePath RemoveFileName() const;
 | 
			
		||||
 | 
			
		||||
  // Returns a copy of the FilePath with the case-insensitive extension removed.
 | 
			
		||||
  // Example: FilePath("dir/file.exe").RemoveExtension("EXE") returns
 | 
			
		||||
  // FilePath("dir/file"). If a case-insensitive extension is not
 | 
			
		||||
  // found, returns a copy of the original FilePath.
 | 
			
		||||
  FilePath RemoveExtension(const char* extension) const;
 | 
			
		||||
 | 
			
		||||
  // Creates directories so that path exists. Returns true if successful or if
 | 
			
		||||
  // the directories already exist; returns false if unable to create
 | 
			
		||||
  // directories for any reason. Will also return false if the FilePath does
 | 
			
		||||
  // not represent a directory (that is, it doesn't end with a path separator).
 | 
			
		||||
  bool CreateDirectoriesRecursively() const;
 | 
			
		||||
 | 
			
		||||
  // Create the directory so that path exists. Returns true if successful or
 | 
			
		||||
  // if the directory already exists; returns false if unable to create the
 | 
			
		||||
  // directory for any reason, including if the parent directory does not
 | 
			
		||||
  // exist. Not named "CreateDirectory" because that's a macro on Windows.
 | 
			
		||||
  bool CreateFolder() const;
 | 
			
		||||
 | 
			
		||||
  // Returns true if FilePath describes something in the file-system,
 | 
			
		||||
  // either a file, directory, or whatever, and that something exists.
 | 
			
		||||
  bool FileOrDirectoryExists() const;
 | 
			
		||||
 | 
			
		||||
  // Returns true if pathname describes a directory in the file-system
 | 
			
		||||
  // that exists.
 | 
			
		||||
  bool DirectoryExists() const;
 | 
			
		||||
 | 
			
		||||
  // Returns true if FilePath ends with a path separator, which indicates that
 | 
			
		||||
  // it is intended to represent a directory. Returns false otherwise.
 | 
			
		||||
  // This does NOT check that a directory (or file) actually exists.
 | 
			
		||||
  bool IsDirectory() const;
 | 
			
		||||
 | 
			
		||||
  // Returns true if pathname describes a root directory. (Windows has one
 | 
			
		||||
  // root directory per disk drive.)
 | 
			
		||||
  bool IsRootDirectory() const;
 | 
			
		||||
 | 
			
		||||
  // Returns true if pathname describes an absolute path.
 | 
			
		||||
  bool IsAbsolutePath() const;
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  // Replaces multiple consecutive separators with a single separator.
 | 
			
		||||
  // For example, "bar///foo" becomes "bar/foo". Does not eliminate other
 | 
			
		||||
  // redundancies that might be in a pathname involving "." or "..".
 | 
			
		||||
  //
 | 
			
		||||
  // A pathname with multiple consecutive separators may occur either through
 | 
			
		||||
  // user error or as a result of some scripts or APIs that generate a pathname
 | 
			
		||||
  // with a trailing separator. On other platforms the same API or script
 | 
			
		||||
  // may NOT generate a pathname with a trailing "/". Then elsewhere that
 | 
			
		||||
  // pathname may have another "/" and pathname components added to it,
 | 
			
		||||
  // without checking for the separator already being there.
 | 
			
		||||
  // The script language and operating system may allow paths like "foo//bar"
 | 
			
		||||
  // but some of the functions in FilePath will not handle that correctly. In
 | 
			
		||||
  // particular, RemoveTrailingPathSeparator() only removes one separator, and
 | 
			
		||||
  // it is called in CreateDirectoriesRecursively() assuming that it will change
 | 
			
		||||
  // a pathname from directory syntax (trailing separator) to filename syntax.
 | 
			
		||||
  //
 | 
			
		||||
  // On Windows this method also replaces the alternate path separator '/' with
 | 
			
		||||
  // the primary path separator '\\', so that for example "bar\\/\\foo" becomes
 | 
			
		||||
  // "bar\\foo".
 | 
			
		||||
 | 
			
		||||
  void Normalize();
 | 
			
		||||
 | 
			
		||||
  // Returns a pointer to the last occurence of a valid path separator in
 | 
			
		||||
  // the FilePath. On Windows, for example, both '/' and '\' are valid path
 | 
			
		||||
  // separators. Returns NULL if no path separator was found.
 | 
			
		||||
  const char* FindLastPathSeparator() const;
 | 
			
		||||
 | 
			
		||||
  String pathname_;
 | 
			
		||||
};  // class FilePath
 | 
			
		||||
 | 
			
		||||
}  // namespace internal
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_FILEPATH_H_
 | 
			
		||||
							
								
								
									
										1226
									
								
								third_party/googletest/src/include/gtest/internal/gtest-internal.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1226
									
								
								third_party/googletest/src/include/gtest/internal/gtest-internal.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										233
									
								
								third_party/googletest/src/include/gtest/internal/gtest-linked_ptr.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								third_party/googletest/src/include/gtest/internal/gtest-linked_ptr.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,233 @@
 | 
			
		||||
// Copyright 2003 Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Authors: Dan Egnor (egnor@google.com)
 | 
			
		||||
//
 | 
			
		||||
// A "smart" pointer type with reference tracking.  Every pointer to a
 | 
			
		||||
// particular object is kept on a circular linked list.  When the last pointer
 | 
			
		||||
// to an object is destroyed or reassigned, the object is deleted.
 | 
			
		||||
//
 | 
			
		||||
// Used properly, this deletes the object when the last reference goes away.
 | 
			
		||||
// There are several caveats:
 | 
			
		||||
// - Like all reference counting schemes, cycles lead to leaks.
 | 
			
		||||
// - Each smart pointer is actually two pointers (8 bytes instead of 4).
 | 
			
		||||
// - Every time a pointer is assigned, the entire list of pointers to that
 | 
			
		||||
//   object is traversed.  This class is therefore NOT SUITABLE when there
 | 
			
		||||
//   will often be more than two or three pointers to a particular object.
 | 
			
		||||
// - References are only tracked as long as linked_ptr<> objects are copied.
 | 
			
		||||
//   If a linked_ptr<> is converted to a raw pointer and back, BAD THINGS
 | 
			
		||||
//   will happen (double deletion).
 | 
			
		||||
//
 | 
			
		||||
// A good use of this class is storing object references in STL containers.
 | 
			
		||||
// You can safely put linked_ptr<> in a vector<>.
 | 
			
		||||
// Other uses may not be as good.
 | 
			
		||||
//
 | 
			
		||||
// Note: If you use an incomplete type with linked_ptr<>, the class
 | 
			
		||||
// *containing* linked_ptr<> must have a constructor and destructor (even
 | 
			
		||||
// if they do nothing!).
 | 
			
		||||
//
 | 
			
		||||
// Bill Gibbons suggested we use something like this.
 | 
			
		||||
//
 | 
			
		||||
// Thread Safety:
 | 
			
		||||
//   Unlike other linked_ptr implementations, in this implementation
 | 
			
		||||
//   a linked_ptr object is thread-safe in the sense that:
 | 
			
		||||
//     - it's safe to copy linked_ptr objects concurrently,
 | 
			
		||||
//     - it's safe to copy *from* a linked_ptr and read its underlying
 | 
			
		||||
//       raw pointer (e.g. via get()) concurrently, and
 | 
			
		||||
//     - it's safe to write to two linked_ptrs that point to the same
 | 
			
		||||
//       shared object concurrently.
 | 
			
		||||
// TODO(wan@google.com): rename this to safe_linked_ptr to avoid
 | 
			
		||||
// confusion with normal linked_ptr.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
 | 
			
		||||
#include "gtest/internal/gtest-port.h"
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
// Protects copying of all linked_ptr objects.
 | 
			
		||||
GTEST_API_ GTEST_DECLARE_STATIC_MUTEX_(g_linked_ptr_mutex);
 | 
			
		||||
 | 
			
		||||
// This is used internally by all instances of linked_ptr<>.  It needs to be
 | 
			
		||||
// a non-template class because different types of linked_ptr<> can refer to
 | 
			
		||||
// the same object (linked_ptr<Superclass>(obj) vs linked_ptr<Subclass>(obj)).
 | 
			
		||||
// So, it needs to be possible for different types of linked_ptr to participate
 | 
			
		||||
// in the same circular linked list, so we need a single class type here.
 | 
			
		||||
//
 | 
			
		||||
// DO NOT USE THIS CLASS DIRECTLY YOURSELF.  Use linked_ptr<T>.
 | 
			
		||||
class linked_ptr_internal {
 | 
			
		||||
 public:
 | 
			
		||||
  // Create a new circle that includes only this instance.
 | 
			
		||||
  void join_new() {
 | 
			
		||||
    next_ = this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Many linked_ptr operations may change p.link_ for some linked_ptr
 | 
			
		||||
  // variable p in the same circle as this object.  Therefore we need
 | 
			
		||||
  // to prevent two such operations from occurring concurrently.
 | 
			
		||||
  //
 | 
			
		||||
  // Note that different types of linked_ptr objects can coexist in a
 | 
			
		||||
  // circle (e.g. linked_ptr<Base>, linked_ptr<Derived1>, and
 | 
			
		||||
  // linked_ptr<Derived2>).  Therefore we must use a single mutex to
 | 
			
		||||
  // protect all linked_ptr objects.  This can create serious
 | 
			
		||||
  // contention in production code, but is acceptable in a testing
 | 
			
		||||
  // framework.
 | 
			
		||||
 | 
			
		||||
  // Join an existing circle.
 | 
			
		||||
  // L < g_linked_ptr_mutex
 | 
			
		||||
  void join(linked_ptr_internal const* ptr) {
 | 
			
		||||
    MutexLock lock(&g_linked_ptr_mutex);
 | 
			
		||||
 | 
			
		||||
    linked_ptr_internal const* p = ptr;
 | 
			
		||||
    while (p->next_ != ptr) p = p->next_;
 | 
			
		||||
    p->next_ = this;
 | 
			
		||||
    next_ = ptr;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Leave whatever circle we're part of.  Returns true if we were the
 | 
			
		||||
  // last member of the circle.  Once this is done, you can join() another.
 | 
			
		||||
  // L < g_linked_ptr_mutex
 | 
			
		||||
  bool depart() {
 | 
			
		||||
    MutexLock lock(&g_linked_ptr_mutex);
 | 
			
		||||
 | 
			
		||||
    if (next_ == this) return true;
 | 
			
		||||
    linked_ptr_internal const* p = next_;
 | 
			
		||||
    while (p->next_ != this) p = p->next_;
 | 
			
		||||
    p->next_ = next_;
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  mutable linked_ptr_internal const* next_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
class linked_ptr {
 | 
			
		||||
 public:
 | 
			
		||||
  typedef T element_type;
 | 
			
		||||
 | 
			
		||||
  // Take over ownership of a raw pointer.  This should happen as soon as
 | 
			
		||||
  // possible after the object is created.
 | 
			
		||||
  explicit linked_ptr(T* ptr = NULL) { capture(ptr); }
 | 
			
		||||
  ~linked_ptr() { depart(); }
 | 
			
		||||
 | 
			
		||||
  // Copy an existing linked_ptr<>, adding ourselves to the list of references.
 | 
			
		||||
  template <typename U> linked_ptr(linked_ptr<U> const& ptr) { copy(&ptr); }
 | 
			
		||||
  linked_ptr(linked_ptr const& ptr) {  // NOLINT
 | 
			
		||||
    assert(&ptr != this);
 | 
			
		||||
    copy(&ptr);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Assignment releases the old value and acquires the new.
 | 
			
		||||
  template <typename U> linked_ptr& operator=(linked_ptr<U> const& ptr) {
 | 
			
		||||
    depart();
 | 
			
		||||
    copy(&ptr);
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  linked_ptr& operator=(linked_ptr const& ptr) {
 | 
			
		||||
    if (&ptr != this) {
 | 
			
		||||
      depart();
 | 
			
		||||
      copy(&ptr);
 | 
			
		||||
    }
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Smart pointer members.
 | 
			
		||||
  void reset(T* ptr = NULL) {
 | 
			
		||||
    depart();
 | 
			
		||||
    capture(ptr);
 | 
			
		||||
  }
 | 
			
		||||
  T* get() const { return value_; }
 | 
			
		||||
  T* operator->() const { return value_; }
 | 
			
		||||
  T& operator*() const { return *value_; }
 | 
			
		||||
 | 
			
		||||
  bool operator==(T* p) const { return value_ == p; }
 | 
			
		||||
  bool operator!=(T* p) const { return value_ != p; }
 | 
			
		||||
  template <typename U>
 | 
			
		||||
  bool operator==(linked_ptr<U> const& ptr) const {
 | 
			
		||||
    return value_ == ptr.get();
 | 
			
		||||
  }
 | 
			
		||||
  template <typename U>
 | 
			
		||||
  bool operator!=(linked_ptr<U> const& ptr) const {
 | 
			
		||||
    return value_ != ptr.get();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  template <typename U>
 | 
			
		||||
  friend class linked_ptr;
 | 
			
		||||
 | 
			
		||||
  T* value_;
 | 
			
		||||
  linked_ptr_internal link_;
 | 
			
		||||
 | 
			
		||||
  void depart() {
 | 
			
		||||
    if (link_.depart()) delete value_;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void capture(T* ptr) {
 | 
			
		||||
    value_ = ptr;
 | 
			
		||||
    link_.join_new();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  template <typename U> void copy(linked_ptr<U> const* ptr) {
 | 
			
		||||
    value_ = ptr->get();
 | 
			
		||||
    if (value_)
 | 
			
		||||
      link_.join(&ptr->link_);
 | 
			
		||||
    else
 | 
			
		||||
      link_.join_new();
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template<typename T> inline
 | 
			
		||||
bool operator==(T* ptr, const linked_ptr<T>& x) {
 | 
			
		||||
  return ptr == x.get();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<typename T> inline
 | 
			
		||||
bool operator!=(T* ptr, const linked_ptr<T>& x) {
 | 
			
		||||
  return ptr != x.get();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// A function to convert T* into linked_ptr<T>
 | 
			
		||||
// Doing e.g. make_linked_ptr(new FooBarBaz<type>(arg)) is a shorter notation
 | 
			
		||||
// for linked_ptr<FooBarBaz<type> >(new FooBarBaz<type>(arg))
 | 
			
		||||
template <typename T>
 | 
			
		||||
linked_ptr<T> make_linked_ptr(T* ptr) {
 | 
			
		||||
  return linked_ptr<T>(ptr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}  // namespace internal
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_LINKED_PTR_H_
 | 
			
		||||
							
								
								
									
										4822
									
								
								third_party/googletest/src/include/gtest/internal/gtest-param-util-generated.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4822
									
								
								third_party/googletest/src/include/gtest/internal/gtest-param-util-generated.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										301
									
								
								third_party/googletest/src/include/gtest/internal/gtest-param-util-generated.h.pump
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										301
									
								
								third_party/googletest/src/include/gtest/internal/gtest-param-util-generated.h.pump
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,301 @@
 | 
			
		||||
$$ -*- mode: c++; -*-
 | 
			
		||||
$var n = 50  $$ Maximum length of Values arguments we want to support.
 | 
			
		||||
$var maxtuple = 10  $$ Maximum number of Combine arguments we want to support.
 | 
			
		||||
// Copyright 2008 Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: vladl@google.com (Vlad Losev)
 | 
			
		||||
 | 
			
		||||
// Type and function utilities for implementing parameterized tests.
 | 
			
		||||
// This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
 | 
			
		||||
//
 | 
			
		||||
// Currently Google Test supports at most $n arguments in Values,
 | 
			
		||||
// and at most $maxtuple arguments in Combine. Please contact
 | 
			
		||||
// googletestframework@googlegroups.com if you need more.
 | 
			
		||||
// Please note that the number of arguments to Combine is limited
 | 
			
		||||
// by the maximum arity of the implementation of tr1::tuple which is
 | 
			
		||||
// currently set at $maxtuple.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
 | 
			
		||||
 | 
			
		||||
// scripts/fuse_gtest.py depends on gtest's own header being #included
 | 
			
		||||
// *unconditionally*.  Therefore these #includes cannot be moved
 | 
			
		||||
// inside #if GTEST_HAS_PARAM_TEST.
 | 
			
		||||
#include "gtest/internal/gtest-param-util.h"
 | 
			
		||||
#include "gtest/internal/gtest-port.h"
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_PARAM_TEST
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
 | 
			
		||||
// Forward declarations of ValuesIn(), which is implemented in
 | 
			
		||||
// include/gtest/gtest-param-test.h.
 | 
			
		||||
template <typename ForwardIterator>
 | 
			
		||||
internal::ParamGenerator<
 | 
			
		||||
  typename ::testing::internal::IteratorTraits<ForwardIterator>::value_type>
 | 
			
		||||
ValuesIn(ForwardIterator begin, ForwardIterator end);
 | 
			
		||||
 | 
			
		||||
template <typename T, size_t N>
 | 
			
		||||
internal::ParamGenerator<T> ValuesIn(const T (&array)[N]);
 | 
			
		||||
 | 
			
		||||
template <class Container>
 | 
			
		||||
internal::ParamGenerator<typename Container::value_type> ValuesIn(
 | 
			
		||||
    const Container& container);
 | 
			
		||||
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
// Used in the Values() function to provide polymorphic capabilities.
 | 
			
		||||
template <typename T1>
 | 
			
		||||
class ValueArray1 {
 | 
			
		||||
 public:
 | 
			
		||||
  explicit ValueArray1(T1 v1) : v1_(v1) {}
 | 
			
		||||
 | 
			
		||||
  template <typename T>
 | 
			
		||||
  operator ParamGenerator<T>() const { return ValuesIn(&v1_, &v1_ + 1); }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  // No implementation - assignment is unsupported.
 | 
			
		||||
  void operator=(const ValueArray1& other);
 | 
			
		||||
 | 
			
		||||
  const T1 v1_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
$range i 2..n
 | 
			
		||||
$for i [[
 | 
			
		||||
$range j 1..i
 | 
			
		||||
 | 
			
		||||
template <$for j, [[typename T$j]]>
 | 
			
		||||
class ValueArray$i {
 | 
			
		||||
 public:
 | 
			
		||||
  ValueArray$i($for j, [[T$j v$j]]) : $for j, [[v$(j)_(v$j)]] {}
 | 
			
		||||
 | 
			
		||||
  template <typename T>
 | 
			
		||||
  operator ParamGenerator<T>() const {
 | 
			
		||||
    const T array[] = {$for j, [[v$(j)_]]};
 | 
			
		||||
    return ValuesIn(array);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  // No implementation - assignment is unsupported.
 | 
			
		||||
  void operator=(const ValueArray$i& other);
 | 
			
		||||
 | 
			
		||||
$for j [[
 | 
			
		||||
 | 
			
		||||
  const T$j v$(j)_;
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
# if GTEST_HAS_COMBINE
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
			
		||||
//
 | 
			
		||||
// Generates values from the Cartesian product of values produced
 | 
			
		||||
// by the argument generators.
 | 
			
		||||
//
 | 
			
		||||
$range i 2..maxtuple
 | 
			
		||||
$for i [[
 | 
			
		||||
$range j 1..i
 | 
			
		||||
$range k 2..i
 | 
			
		||||
 | 
			
		||||
template <$for j, [[typename T$j]]>
 | 
			
		||||
class CartesianProductGenerator$i
 | 
			
		||||
    : public ParamGeneratorInterface< ::std::tr1::tuple<$for j, [[T$j]]> > {
 | 
			
		||||
 public:
 | 
			
		||||
  typedef ::std::tr1::tuple<$for j, [[T$j]]> ParamType;
 | 
			
		||||
 | 
			
		||||
  CartesianProductGenerator$i($for j, [[const ParamGenerator<T$j>& g$j]])
 | 
			
		||||
      : $for j, [[g$(j)_(g$j)]] {}
 | 
			
		||||
  virtual ~CartesianProductGenerator$i() {}
 | 
			
		||||
 | 
			
		||||
  virtual ParamIteratorInterface<ParamType>* Begin() const {
 | 
			
		||||
    return new Iterator(this, $for j, [[g$(j)_, g$(j)_.begin()]]);
 | 
			
		||||
  }
 | 
			
		||||
  virtual ParamIteratorInterface<ParamType>* End() const {
 | 
			
		||||
    return new Iterator(this, $for j, [[g$(j)_, g$(j)_.end()]]);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  class Iterator : public ParamIteratorInterface<ParamType> {
 | 
			
		||||
   public:
 | 
			
		||||
    Iterator(const ParamGeneratorInterface<ParamType>* base, $for j, [[
 | 
			
		||||
 | 
			
		||||
      const ParamGenerator<T$j>& g$j,
 | 
			
		||||
      const typename ParamGenerator<T$j>::iterator& current$(j)]])
 | 
			
		||||
        : base_(base),
 | 
			
		||||
$for j, [[
 | 
			
		||||
 | 
			
		||||
          begin$(j)_(g$j.begin()), end$(j)_(g$j.end()), current$(j)_(current$j)
 | 
			
		||||
]]    {
 | 
			
		||||
      ComputeCurrentValue();
 | 
			
		||||
    }
 | 
			
		||||
    virtual ~Iterator() {}
 | 
			
		||||
 | 
			
		||||
    virtual const ParamGeneratorInterface<ParamType>* BaseGenerator() const {
 | 
			
		||||
      return base_;
 | 
			
		||||
    }
 | 
			
		||||
    // Advance should not be called on beyond-of-range iterators
 | 
			
		||||
    // so no component iterators must be beyond end of range, either.
 | 
			
		||||
    virtual void Advance() {
 | 
			
		||||
      assert(!AtEnd());
 | 
			
		||||
      ++current$(i)_;
 | 
			
		||||
 | 
			
		||||
$for k [[
 | 
			
		||||
      if (current$(i+2-k)_ == end$(i+2-k)_) {
 | 
			
		||||
        current$(i+2-k)_ = begin$(i+2-k)_;
 | 
			
		||||
        ++current$(i+2-k-1)_;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
      ComputeCurrentValue();
 | 
			
		||||
    }
 | 
			
		||||
    virtual ParamIteratorInterface<ParamType>* Clone() const {
 | 
			
		||||
      return new Iterator(*this);
 | 
			
		||||
    }
 | 
			
		||||
    virtual const ParamType* Current() const { return ¤t_value_; }
 | 
			
		||||
    virtual bool Equals(const ParamIteratorInterface<ParamType>& other) const {
 | 
			
		||||
      // Having the same base generator guarantees that the other
 | 
			
		||||
      // iterator is of the same type and we can downcast.
 | 
			
		||||
      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
 | 
			
		||||
          << "The program attempted to compare iterators "
 | 
			
		||||
          << "from different generators." << std::endl;
 | 
			
		||||
      const Iterator* typed_other =
 | 
			
		||||
          CheckedDowncastToActualType<const Iterator>(&other);
 | 
			
		||||
      // We must report iterators equal if they both point beyond their
 | 
			
		||||
      // respective ranges. That can happen in a variety of fashions,
 | 
			
		||||
      // so we have to consult AtEnd().
 | 
			
		||||
      return (AtEnd() && typed_other->AtEnd()) ||
 | 
			
		||||
         ($for j  && [[
 | 
			
		||||
 | 
			
		||||
          current$(j)_ == typed_other->current$(j)_
 | 
			
		||||
]]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
   private:
 | 
			
		||||
    Iterator(const Iterator& other)
 | 
			
		||||
        : base_(other.base_), $for j, [[
 | 
			
		||||
 | 
			
		||||
        begin$(j)_(other.begin$(j)_),
 | 
			
		||||
        end$(j)_(other.end$(j)_),
 | 
			
		||||
        current$(j)_(other.current$(j)_)
 | 
			
		||||
]] {
 | 
			
		||||
      ComputeCurrentValue();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void ComputeCurrentValue() {
 | 
			
		||||
      if (!AtEnd())
 | 
			
		||||
        current_value_ = ParamType($for j, [[*current$(j)_]]);
 | 
			
		||||
    }
 | 
			
		||||
    bool AtEnd() const {
 | 
			
		||||
      // We must report iterator past the end of the range when either of the
 | 
			
		||||
      // component iterators has reached the end of its range.
 | 
			
		||||
      return
 | 
			
		||||
$for j  || [[
 | 
			
		||||
 | 
			
		||||
          current$(j)_ == end$(j)_
 | 
			
		||||
]];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // No implementation - assignment is unsupported.
 | 
			
		||||
    void operator=(const Iterator& other);
 | 
			
		||||
 | 
			
		||||
    const ParamGeneratorInterface<ParamType>* const base_;
 | 
			
		||||
    // begin[i]_ and end[i]_ define the i-th range that Iterator traverses.
 | 
			
		||||
    // current[i]_ is the actual traversing iterator.
 | 
			
		||||
$for j [[
 | 
			
		||||
 | 
			
		||||
    const typename ParamGenerator<T$j>::iterator begin$(j)_;
 | 
			
		||||
    const typename ParamGenerator<T$j>::iterator end$(j)_;
 | 
			
		||||
    typename ParamGenerator<T$j>::iterator current$(j)_;
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
    ParamType current_value_;
 | 
			
		||||
  };  // class CartesianProductGenerator$i::Iterator
 | 
			
		||||
 | 
			
		||||
  // No implementation - assignment is unsupported.
 | 
			
		||||
  void operator=(const CartesianProductGenerator$i& other);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$for j [[
 | 
			
		||||
  const ParamGenerator<T$j> g$(j)_;
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
};  // class CartesianProductGenerator$i
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
			
		||||
//
 | 
			
		||||
// Helper classes providing Combine() with polymorphic features. They allow
 | 
			
		||||
// casting CartesianProductGeneratorN<T> to ParamGenerator<U> if T is
 | 
			
		||||
// convertible to U.
 | 
			
		||||
//
 | 
			
		||||
$range i 2..maxtuple
 | 
			
		||||
$for i [[
 | 
			
		||||
$range j 1..i
 | 
			
		||||
 | 
			
		||||
template <$for j, [[class Generator$j]]>
 | 
			
		||||
class CartesianProductHolder$i {
 | 
			
		||||
 public:
 | 
			
		||||
CartesianProductHolder$i($for j, [[const Generator$j& g$j]])
 | 
			
		||||
      : $for j, [[g$(j)_(g$j)]] {}
 | 
			
		||||
  template <$for j, [[typename T$j]]>
 | 
			
		||||
  operator ParamGenerator< ::std::tr1::tuple<$for j, [[T$j]]> >() const {
 | 
			
		||||
    return ParamGenerator< ::std::tr1::tuple<$for j, [[T$j]]> >(
 | 
			
		||||
        new CartesianProductGenerator$i<$for j, [[T$j]]>(
 | 
			
		||||
$for j,[[
 | 
			
		||||
 | 
			
		||||
        static_cast<ParamGenerator<T$j> >(g$(j)_)
 | 
			
		||||
]]));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  // No implementation - assignment is unsupported.
 | 
			
		||||
  void operator=(const CartesianProductHolder$i& other);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$for j [[
 | 
			
		||||
  const Generator$j g$(j)_;
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
};  // class CartesianProductHolder$i
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
# endif  // GTEST_HAS_COMBINE
 | 
			
		||||
 | 
			
		||||
}  // namespace internal
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  //  GTEST_HAS_PARAM_TEST
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_GENERATED_H_
 | 
			
		||||
							
								
								
									
										619
									
								
								third_party/googletest/src/include/gtest/internal/gtest-param-util.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										619
									
								
								third_party/googletest/src/include/gtest/internal/gtest-param-util.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,619 @@
 | 
			
		||||
// Copyright 2008 Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: vladl@google.com (Vlad Losev)
 | 
			
		||||
 | 
			
		||||
// Type and function utilities for implementing parameterized tests.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
 | 
			
		||||
 | 
			
		||||
#include <iterator>
 | 
			
		||||
#include <utility>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
// scripts/fuse_gtest.py depends on gtest's own header being #included
 | 
			
		||||
// *unconditionally*.  Therefore these #includes cannot be moved
 | 
			
		||||
// inside #if GTEST_HAS_PARAM_TEST.
 | 
			
		||||
#include "gtest/internal/gtest-internal.h"
 | 
			
		||||
#include "gtest/internal/gtest-linked_ptr.h"
 | 
			
		||||
#include "gtest/internal/gtest-port.h"
 | 
			
		||||
#include "gtest/gtest-printers.h"
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_PARAM_TEST
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
			
		||||
//
 | 
			
		||||
// Outputs a message explaining invalid registration of different
 | 
			
		||||
// fixture class for the same test case. This may happen when
 | 
			
		||||
// TEST_P macro is used to define two tests with the same name
 | 
			
		||||
// but in different namespaces.
 | 
			
		||||
GTEST_API_ void ReportInvalidTestCaseType(const char* test_case_name,
 | 
			
		||||
                                          const char* file, int line);
 | 
			
		||||
 | 
			
		||||
template <typename> class ParamGeneratorInterface;
 | 
			
		||||
template <typename> class ParamGenerator;
 | 
			
		||||
 | 
			
		||||
// Interface for iterating over elements provided by an implementation
 | 
			
		||||
// of ParamGeneratorInterface<T>.
 | 
			
		||||
template <typename T>
 | 
			
		||||
class ParamIteratorInterface {
 | 
			
		||||
 public:
 | 
			
		||||
  virtual ~ParamIteratorInterface() {}
 | 
			
		||||
  // A pointer to the base generator instance.
 | 
			
		||||
  // Used only for the purposes of iterator comparison
 | 
			
		||||
  // to make sure that two iterators belong to the same generator.
 | 
			
		||||
  virtual const ParamGeneratorInterface<T>* BaseGenerator() const = 0;
 | 
			
		||||
  // Advances iterator to point to the next element
 | 
			
		||||
  // provided by the generator. The caller is responsible
 | 
			
		||||
  // for not calling Advance() on an iterator equal to
 | 
			
		||||
  // BaseGenerator()->End().
 | 
			
		||||
  virtual void Advance() = 0;
 | 
			
		||||
  // Clones the iterator object. Used for implementing copy semantics
 | 
			
		||||
  // of ParamIterator<T>.
 | 
			
		||||
  virtual ParamIteratorInterface* Clone() const = 0;
 | 
			
		||||
  // Dereferences the current iterator and provides (read-only) access
 | 
			
		||||
  // to the pointed value. It is the caller's responsibility not to call
 | 
			
		||||
  // Current() on an iterator equal to BaseGenerator()->End().
 | 
			
		||||
  // Used for implementing ParamGenerator<T>::operator*().
 | 
			
		||||
  virtual const T* Current() const = 0;
 | 
			
		||||
  // Determines whether the given iterator and other point to the same
 | 
			
		||||
  // element in the sequence generated by the generator.
 | 
			
		||||
  // Used for implementing ParamGenerator<T>::operator==().
 | 
			
		||||
  virtual bool Equals(const ParamIteratorInterface& other) const = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Class iterating over elements provided by an implementation of
 | 
			
		||||
// ParamGeneratorInterface<T>. It wraps ParamIteratorInterface<T>
 | 
			
		||||
// and implements the const forward iterator concept.
 | 
			
		||||
template <typename T>
 | 
			
		||||
class ParamIterator {
 | 
			
		||||
 public:
 | 
			
		||||
  typedef T value_type;
 | 
			
		||||
  typedef const T& reference;
 | 
			
		||||
  typedef ptrdiff_t difference_type;
 | 
			
		||||
 | 
			
		||||
  // ParamIterator assumes ownership of the impl_ pointer.
 | 
			
		||||
  ParamIterator(const ParamIterator& other) : impl_(other.impl_->Clone()) {}
 | 
			
		||||
  ParamIterator& operator=(const ParamIterator& other) {
 | 
			
		||||
    if (this != &other)
 | 
			
		||||
      impl_.reset(other.impl_->Clone());
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const T& operator*() const { return *impl_->Current(); }
 | 
			
		||||
  const T* operator->() const { return impl_->Current(); }
 | 
			
		||||
  // Prefix version of operator++.
 | 
			
		||||
  ParamIterator& operator++() {
 | 
			
		||||
    impl_->Advance();
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
  // Postfix version of operator++.
 | 
			
		||||
  ParamIterator operator++(int /*unused*/) {
 | 
			
		||||
    ParamIteratorInterface<T>* clone = impl_->Clone();
 | 
			
		||||
    impl_->Advance();
 | 
			
		||||
    return ParamIterator(clone);
 | 
			
		||||
  }
 | 
			
		||||
  bool operator==(const ParamIterator& other) const {
 | 
			
		||||
    return impl_.get() == other.impl_.get() || impl_->Equals(*other.impl_);
 | 
			
		||||
  }
 | 
			
		||||
  bool operator!=(const ParamIterator& other) const {
 | 
			
		||||
    return !(*this == other);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  friend class ParamGenerator<T>;
 | 
			
		||||
  explicit ParamIterator(ParamIteratorInterface<T>* impl) : impl_(impl) {}
 | 
			
		||||
  scoped_ptr<ParamIteratorInterface<T> > impl_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ParamGeneratorInterface<T> is the binary interface to access generators
 | 
			
		||||
// defined in other translation units.
 | 
			
		||||
template <typename T>
 | 
			
		||||
class ParamGeneratorInterface {
 | 
			
		||||
 public:
 | 
			
		||||
  typedef T ParamType;
 | 
			
		||||
 | 
			
		||||
  virtual ~ParamGeneratorInterface() {}
 | 
			
		||||
 | 
			
		||||
  // Generator interface definition
 | 
			
		||||
  virtual ParamIteratorInterface<T>* Begin() const = 0;
 | 
			
		||||
  virtual ParamIteratorInterface<T>* End() const = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Wraps ParamGeneratorInterface<T> and provides general generator syntax
 | 
			
		||||
// compatible with the STL Container concept.
 | 
			
		||||
// This class implements copy initialization semantics and the contained
 | 
			
		||||
// ParamGeneratorInterface<T> instance is shared among all copies
 | 
			
		||||
// of the original object. This is possible because that instance is immutable.
 | 
			
		||||
template<typename T>
 | 
			
		||||
class ParamGenerator {
 | 
			
		||||
 public:
 | 
			
		||||
  typedef ParamIterator<T> iterator;
 | 
			
		||||
 | 
			
		||||
  explicit ParamGenerator(ParamGeneratorInterface<T>* impl) : impl_(impl) {}
 | 
			
		||||
  ParamGenerator(const ParamGenerator& other) : impl_(other.impl_) {}
 | 
			
		||||
 | 
			
		||||
  ParamGenerator& operator=(const ParamGenerator& other) {
 | 
			
		||||
    impl_ = other.impl_;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  iterator begin() const { return iterator(impl_->Begin()); }
 | 
			
		||||
  iterator end() const { return iterator(impl_->End()); }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  linked_ptr<const ParamGeneratorInterface<T> > impl_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Generates values from a range of two comparable values. Can be used to
 | 
			
		||||
// generate sequences of user-defined types that implement operator+() and
 | 
			
		||||
// operator<().
 | 
			
		||||
// This class is used in the Range() function.
 | 
			
		||||
template <typename T, typename IncrementT>
 | 
			
		||||
class RangeGenerator : public ParamGeneratorInterface<T> {
 | 
			
		||||
 public:
 | 
			
		||||
  RangeGenerator(T begin, T end, IncrementT step)
 | 
			
		||||
      : begin_(begin), end_(end),
 | 
			
		||||
        step_(step), end_index_(CalculateEndIndex(begin, end, step)) {}
 | 
			
		||||
  virtual ~RangeGenerator() {}
 | 
			
		||||
 | 
			
		||||
  virtual ParamIteratorInterface<T>* Begin() const {
 | 
			
		||||
    return new Iterator(this, begin_, 0, step_);
 | 
			
		||||
  }
 | 
			
		||||
  virtual ParamIteratorInterface<T>* End() const {
 | 
			
		||||
    return new Iterator(this, end_, end_index_, step_);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  class Iterator : public ParamIteratorInterface<T> {
 | 
			
		||||
   public:
 | 
			
		||||
    Iterator(const ParamGeneratorInterface<T>* base, T value, int index,
 | 
			
		||||
             IncrementT step)
 | 
			
		||||
        : base_(base), value_(value), index_(index), step_(step) {}
 | 
			
		||||
    virtual ~Iterator() {}
 | 
			
		||||
 | 
			
		||||
    virtual const ParamGeneratorInterface<T>* BaseGenerator() const {
 | 
			
		||||
      return base_;
 | 
			
		||||
    }
 | 
			
		||||
    virtual void Advance() {
 | 
			
		||||
      value_ = value_ + step_;
 | 
			
		||||
      index_++;
 | 
			
		||||
    }
 | 
			
		||||
    virtual ParamIteratorInterface<T>* Clone() const {
 | 
			
		||||
      return new Iterator(*this);
 | 
			
		||||
    }
 | 
			
		||||
    virtual const T* Current() const { return &value_; }
 | 
			
		||||
    virtual bool Equals(const ParamIteratorInterface<T>& other) const {
 | 
			
		||||
      // Having the same base generator guarantees that the other
 | 
			
		||||
      // iterator is of the same type and we can downcast.
 | 
			
		||||
      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
 | 
			
		||||
          << "The program attempted to compare iterators "
 | 
			
		||||
          << "from different generators." << std::endl;
 | 
			
		||||
      const int other_index =
 | 
			
		||||
          CheckedDowncastToActualType<const Iterator>(&other)->index_;
 | 
			
		||||
      return index_ == other_index;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
   private:
 | 
			
		||||
    Iterator(const Iterator& other)
 | 
			
		||||
        : ParamIteratorInterface<T>(),
 | 
			
		||||
          base_(other.base_), value_(other.value_), index_(other.index_),
 | 
			
		||||
          step_(other.step_) {}
 | 
			
		||||
 | 
			
		||||
    // No implementation - assignment is unsupported.
 | 
			
		||||
    void operator=(const Iterator& other);
 | 
			
		||||
 | 
			
		||||
    const ParamGeneratorInterface<T>* const base_;
 | 
			
		||||
    T value_;
 | 
			
		||||
    int index_;
 | 
			
		||||
    const IncrementT step_;
 | 
			
		||||
  };  // class RangeGenerator::Iterator
 | 
			
		||||
 | 
			
		||||
  static int CalculateEndIndex(const T& begin,
 | 
			
		||||
                               const T& end,
 | 
			
		||||
                               const IncrementT& step) {
 | 
			
		||||
    int end_index = 0;
 | 
			
		||||
    for (T i = begin; i < end; i = i + step)
 | 
			
		||||
      end_index++;
 | 
			
		||||
    return end_index;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // No implementation - assignment is unsupported.
 | 
			
		||||
  void operator=(const RangeGenerator& other);
 | 
			
		||||
 | 
			
		||||
  const T begin_;
 | 
			
		||||
  const T end_;
 | 
			
		||||
  const IncrementT step_;
 | 
			
		||||
  // The index for the end() iterator. All the elements in the generated
 | 
			
		||||
  // sequence are indexed (0-based) to aid iterator comparison.
 | 
			
		||||
  const int end_index_;
 | 
			
		||||
};  // class RangeGenerator
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Generates values from a pair of STL-style iterators. Used in the
 | 
			
		||||
// ValuesIn() function. The elements are copied from the source range
 | 
			
		||||
// since the source can be located on the stack, and the generator
 | 
			
		||||
// is likely to persist beyond that stack frame.
 | 
			
		||||
template <typename T>
 | 
			
		||||
class ValuesInIteratorRangeGenerator : public ParamGeneratorInterface<T> {
 | 
			
		||||
 public:
 | 
			
		||||
  template <typename ForwardIterator>
 | 
			
		||||
  ValuesInIteratorRangeGenerator(ForwardIterator begin, ForwardIterator end)
 | 
			
		||||
      : container_(begin, end) {}
 | 
			
		||||
  virtual ~ValuesInIteratorRangeGenerator() {}
 | 
			
		||||
 | 
			
		||||
  virtual ParamIteratorInterface<T>* Begin() const {
 | 
			
		||||
    return new Iterator(this, container_.begin());
 | 
			
		||||
  }
 | 
			
		||||
  virtual ParamIteratorInterface<T>* End() const {
 | 
			
		||||
    return new Iterator(this, container_.end());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  typedef typename ::std::vector<T> ContainerType;
 | 
			
		||||
 | 
			
		||||
  class Iterator : public ParamIteratorInterface<T> {
 | 
			
		||||
   public:
 | 
			
		||||
    Iterator(const ParamGeneratorInterface<T>* base,
 | 
			
		||||
             typename ContainerType::const_iterator iterator)
 | 
			
		||||
        : base_(base), iterator_(iterator) {}
 | 
			
		||||
    virtual ~Iterator() {}
 | 
			
		||||
 | 
			
		||||
    virtual const ParamGeneratorInterface<T>* BaseGenerator() const {
 | 
			
		||||
      return base_;
 | 
			
		||||
    }
 | 
			
		||||
    virtual void Advance() {
 | 
			
		||||
      ++iterator_;
 | 
			
		||||
      value_.reset();
 | 
			
		||||
    }
 | 
			
		||||
    virtual ParamIteratorInterface<T>* Clone() const {
 | 
			
		||||
      return new Iterator(*this);
 | 
			
		||||
    }
 | 
			
		||||
    // We need to use cached value referenced by iterator_ because *iterator_
 | 
			
		||||
    // can return a temporary object (and of type other then T), so just
 | 
			
		||||
    // having "return &*iterator_;" doesn't work.
 | 
			
		||||
    // value_ is updated here and not in Advance() because Advance()
 | 
			
		||||
    // can advance iterator_ beyond the end of the range, and we cannot
 | 
			
		||||
    // detect that fact. The client code, on the other hand, is
 | 
			
		||||
    // responsible for not calling Current() on an out-of-range iterator.
 | 
			
		||||
    virtual const T* Current() const {
 | 
			
		||||
      if (value_.get() == NULL)
 | 
			
		||||
        value_.reset(new T(*iterator_));
 | 
			
		||||
      return value_.get();
 | 
			
		||||
    }
 | 
			
		||||
    virtual bool Equals(const ParamIteratorInterface<T>& other) const {
 | 
			
		||||
      // Having the same base generator guarantees that the other
 | 
			
		||||
      // iterator is of the same type and we can downcast.
 | 
			
		||||
      GTEST_CHECK_(BaseGenerator() == other.BaseGenerator())
 | 
			
		||||
          << "The program attempted to compare iterators "
 | 
			
		||||
          << "from different generators." << std::endl;
 | 
			
		||||
      return iterator_ ==
 | 
			
		||||
          CheckedDowncastToActualType<const Iterator>(&other)->iterator_;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
   private:
 | 
			
		||||
    Iterator(const Iterator& other)
 | 
			
		||||
          // The explicit constructor call suppresses a false warning
 | 
			
		||||
          // emitted by gcc when supplied with the -Wextra option.
 | 
			
		||||
        : ParamIteratorInterface<T>(),
 | 
			
		||||
          base_(other.base_),
 | 
			
		||||
          iterator_(other.iterator_) {}
 | 
			
		||||
 | 
			
		||||
    const ParamGeneratorInterface<T>* const base_;
 | 
			
		||||
    typename ContainerType::const_iterator iterator_;
 | 
			
		||||
    // A cached value of *iterator_. We keep it here to allow access by
 | 
			
		||||
    // pointer in the wrapping iterator's operator->().
 | 
			
		||||
    // value_ needs to be mutable to be accessed in Current().
 | 
			
		||||
    // Use of scoped_ptr helps manage cached value's lifetime,
 | 
			
		||||
    // which is bound by the lifespan of the iterator itself.
 | 
			
		||||
    mutable scoped_ptr<const T> value_;
 | 
			
		||||
  };  // class ValuesInIteratorRangeGenerator::Iterator
 | 
			
		||||
 | 
			
		||||
  // No implementation - assignment is unsupported.
 | 
			
		||||
  void operator=(const ValuesInIteratorRangeGenerator& other);
 | 
			
		||||
 | 
			
		||||
  const ContainerType container_;
 | 
			
		||||
};  // class ValuesInIteratorRangeGenerator
 | 
			
		||||
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
			
		||||
//
 | 
			
		||||
// Stores a parameter value and later creates tests parameterized with that
 | 
			
		||||
// value.
 | 
			
		||||
template <class TestClass>
 | 
			
		||||
class ParameterizedTestFactory : public TestFactoryBase {
 | 
			
		||||
 public:
 | 
			
		||||
  typedef typename TestClass::ParamType ParamType;
 | 
			
		||||
  explicit ParameterizedTestFactory(ParamType parameter) :
 | 
			
		||||
      parameter_(parameter) {}
 | 
			
		||||
  virtual Test* CreateTest() {
 | 
			
		||||
    TestClass::SetParam(¶meter_);
 | 
			
		||||
    return new TestClass();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  const ParamType parameter_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestFactory);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
			
		||||
//
 | 
			
		||||
// TestMetaFactoryBase is a base class for meta-factories that create
 | 
			
		||||
// test factories for passing into MakeAndRegisterTestInfo function.
 | 
			
		||||
template <class ParamType>
 | 
			
		||||
class TestMetaFactoryBase {
 | 
			
		||||
 public:
 | 
			
		||||
  virtual ~TestMetaFactoryBase() {}
 | 
			
		||||
 | 
			
		||||
  virtual TestFactoryBase* CreateTestFactory(ParamType parameter) = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
			
		||||
//
 | 
			
		||||
// TestMetaFactory creates test factories for passing into
 | 
			
		||||
// MakeAndRegisterTestInfo function. Since MakeAndRegisterTestInfo receives
 | 
			
		||||
// ownership of test factory pointer, same factory object cannot be passed
 | 
			
		||||
// into that method twice. But ParameterizedTestCaseInfo is going to call
 | 
			
		||||
// it for each Test/Parameter value combination. Thus it needs meta factory
 | 
			
		||||
// creator class.
 | 
			
		||||
template <class TestCase>
 | 
			
		||||
class TestMetaFactory
 | 
			
		||||
    : public TestMetaFactoryBase<typename TestCase::ParamType> {
 | 
			
		||||
 public:
 | 
			
		||||
  typedef typename TestCase::ParamType ParamType;
 | 
			
		||||
 | 
			
		||||
  TestMetaFactory() {}
 | 
			
		||||
 | 
			
		||||
  virtual TestFactoryBase* CreateTestFactory(ParamType parameter) {
 | 
			
		||||
    return new ParameterizedTestFactory<TestCase>(parameter);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(TestMetaFactory);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
			
		||||
//
 | 
			
		||||
// ParameterizedTestCaseInfoBase is a generic interface
 | 
			
		||||
// to ParameterizedTestCaseInfo classes. ParameterizedTestCaseInfoBase
 | 
			
		||||
// accumulates test information provided by TEST_P macro invocations
 | 
			
		||||
// and generators provided by INSTANTIATE_TEST_CASE_P macro invocations
 | 
			
		||||
// and uses that information to register all resulting test instances
 | 
			
		||||
// in RegisterTests method. The ParameterizeTestCaseRegistry class holds
 | 
			
		||||
// a collection of pointers to the ParameterizedTestCaseInfo objects
 | 
			
		||||
// and calls RegisterTests() on each of them when asked.
 | 
			
		||||
class ParameterizedTestCaseInfoBase {
 | 
			
		||||
 public:
 | 
			
		||||
  virtual ~ParameterizedTestCaseInfoBase() {}
 | 
			
		||||
 | 
			
		||||
  // Base part of test case name for display purposes.
 | 
			
		||||
  virtual const string& GetTestCaseName() const = 0;
 | 
			
		||||
  // Test case id to verify identity.
 | 
			
		||||
  virtual TypeId GetTestCaseTypeId() const = 0;
 | 
			
		||||
  // UnitTest class invokes this method to register tests in this
 | 
			
		||||
  // test case right before running them in RUN_ALL_TESTS macro.
 | 
			
		||||
  // This method should not be called more then once on any single
 | 
			
		||||
  // instance of a ParameterizedTestCaseInfoBase derived class.
 | 
			
		||||
  virtual void RegisterTests() = 0;
 | 
			
		||||
 | 
			
		||||
 protected:
 | 
			
		||||
  ParameterizedTestCaseInfoBase() {}
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfoBase);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
			
		||||
//
 | 
			
		||||
// ParameterizedTestCaseInfo accumulates tests obtained from TEST_P
 | 
			
		||||
// macro invocations for a particular test case and generators
 | 
			
		||||
// obtained from INSTANTIATE_TEST_CASE_P macro invocations for that
 | 
			
		||||
// test case. It registers tests with all values generated by all
 | 
			
		||||
// generators when asked.
 | 
			
		||||
template <class TestCase>
 | 
			
		||||
class ParameterizedTestCaseInfo : public ParameterizedTestCaseInfoBase {
 | 
			
		||||
 public:
 | 
			
		||||
  // ParamType and GeneratorCreationFunc are private types but are required
 | 
			
		||||
  // for declarations of public methods AddTestPattern() and
 | 
			
		||||
  // AddTestCaseInstantiation().
 | 
			
		||||
  typedef typename TestCase::ParamType ParamType;
 | 
			
		||||
  // A function that returns an instance of appropriate generator type.
 | 
			
		||||
  typedef ParamGenerator<ParamType>(GeneratorCreationFunc)();
 | 
			
		||||
 | 
			
		||||
  explicit ParameterizedTestCaseInfo(const char* name)
 | 
			
		||||
      : test_case_name_(name) {}
 | 
			
		||||
 | 
			
		||||
  // Test case base name for display purposes.
 | 
			
		||||
  virtual const string& GetTestCaseName() const { return test_case_name_; }
 | 
			
		||||
  // Test case id to verify identity.
 | 
			
		||||
  virtual TypeId GetTestCaseTypeId() const { return GetTypeId<TestCase>(); }
 | 
			
		||||
  // TEST_P macro uses AddTestPattern() to record information
 | 
			
		||||
  // about a single test in a LocalTestInfo structure.
 | 
			
		||||
  // test_case_name is the base name of the test case (without invocation
 | 
			
		||||
  // prefix). test_base_name is the name of an individual test without
 | 
			
		||||
  // parameter index. For the test SequenceA/FooTest.DoBar/1 FooTest is
 | 
			
		||||
  // test case base name and DoBar is test base name.
 | 
			
		||||
  void AddTestPattern(const char* test_case_name,
 | 
			
		||||
                      const char* test_base_name,
 | 
			
		||||
                      TestMetaFactoryBase<ParamType>* meta_factory) {
 | 
			
		||||
    tests_.push_back(linked_ptr<TestInfo>(new TestInfo(test_case_name,
 | 
			
		||||
                                                       test_base_name,
 | 
			
		||||
                                                       meta_factory)));
 | 
			
		||||
  }
 | 
			
		||||
  // INSTANTIATE_TEST_CASE_P macro uses AddGenerator() to record information
 | 
			
		||||
  // about a generator.
 | 
			
		||||
  int AddTestCaseInstantiation(const string& instantiation_name,
 | 
			
		||||
                               GeneratorCreationFunc* func,
 | 
			
		||||
                               const char* /* file */,
 | 
			
		||||
                               int /* line */) {
 | 
			
		||||
    instantiations_.push_back(::std::make_pair(instantiation_name, func));
 | 
			
		||||
    return 0;  // Return value used only to run this method in namespace scope.
 | 
			
		||||
  }
 | 
			
		||||
  // UnitTest class invokes this method to register tests in this test case
 | 
			
		||||
  // test cases right before running tests in RUN_ALL_TESTS macro.
 | 
			
		||||
  // This method should not be called more then once on any single
 | 
			
		||||
  // instance of a ParameterizedTestCaseInfoBase derived class.
 | 
			
		||||
  // UnitTest has a guard to prevent from calling this method more then once.
 | 
			
		||||
  virtual void RegisterTests() {
 | 
			
		||||
    for (typename TestInfoContainer::iterator test_it = tests_.begin();
 | 
			
		||||
         test_it != tests_.end(); ++test_it) {
 | 
			
		||||
      linked_ptr<TestInfo> test_info = *test_it;
 | 
			
		||||
      for (typename InstantiationContainer::iterator gen_it =
 | 
			
		||||
               instantiations_.begin(); gen_it != instantiations_.end();
 | 
			
		||||
               ++gen_it) {
 | 
			
		||||
        const string& instantiation_name = gen_it->first;
 | 
			
		||||
        ParamGenerator<ParamType> generator((*gen_it->second)());
 | 
			
		||||
 | 
			
		||||
        Message test_case_name_stream;
 | 
			
		||||
        if ( !instantiation_name.empty() )
 | 
			
		||||
          test_case_name_stream << instantiation_name << "/";
 | 
			
		||||
        test_case_name_stream << test_info->test_case_base_name;
 | 
			
		||||
 | 
			
		||||
        int i = 0;
 | 
			
		||||
        for (typename ParamGenerator<ParamType>::iterator param_it =
 | 
			
		||||
                 generator.begin();
 | 
			
		||||
             param_it != generator.end(); ++param_it, ++i) {
 | 
			
		||||
          Message test_name_stream;
 | 
			
		||||
          test_name_stream << test_info->test_base_name << "/" << i;
 | 
			
		||||
          MakeAndRegisterTestInfo(
 | 
			
		||||
              test_case_name_stream.GetString().c_str(),
 | 
			
		||||
              test_name_stream.GetString().c_str(),
 | 
			
		||||
              NULL,  // No type parameter.
 | 
			
		||||
              PrintToString(*param_it).c_str(),
 | 
			
		||||
              GetTestCaseTypeId(),
 | 
			
		||||
              TestCase::SetUpTestCase,
 | 
			
		||||
              TestCase::TearDownTestCase,
 | 
			
		||||
              test_info->test_meta_factory->CreateTestFactory(*param_it));
 | 
			
		||||
        }  // for param_it
 | 
			
		||||
      }  // for gen_it
 | 
			
		||||
    }  // for test_it
 | 
			
		||||
  }  // RegisterTests
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  // LocalTestInfo structure keeps information about a single test registered
 | 
			
		||||
  // with TEST_P macro.
 | 
			
		||||
  struct TestInfo {
 | 
			
		||||
    TestInfo(const char* a_test_case_base_name,
 | 
			
		||||
             const char* a_test_base_name,
 | 
			
		||||
             TestMetaFactoryBase<ParamType>* a_test_meta_factory) :
 | 
			
		||||
        test_case_base_name(a_test_case_base_name),
 | 
			
		||||
        test_base_name(a_test_base_name),
 | 
			
		||||
        test_meta_factory(a_test_meta_factory) {}
 | 
			
		||||
 | 
			
		||||
    const string test_case_base_name;
 | 
			
		||||
    const string test_base_name;
 | 
			
		||||
    const scoped_ptr<TestMetaFactoryBase<ParamType> > test_meta_factory;
 | 
			
		||||
  };
 | 
			
		||||
  typedef ::std::vector<linked_ptr<TestInfo> > TestInfoContainer;
 | 
			
		||||
  // Keeps pairs of <Instantiation name, Sequence generator creation function>
 | 
			
		||||
  // received from INSTANTIATE_TEST_CASE_P macros.
 | 
			
		||||
  typedef ::std::vector<std::pair<string, GeneratorCreationFunc*> >
 | 
			
		||||
      InstantiationContainer;
 | 
			
		||||
 | 
			
		||||
  const string test_case_name_;
 | 
			
		||||
  TestInfoContainer tests_;
 | 
			
		||||
  InstantiationContainer instantiations_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseInfo);
 | 
			
		||||
};  // class ParameterizedTestCaseInfo
 | 
			
		||||
 | 
			
		||||
// INTERNAL IMPLEMENTATION - DO NOT USE IN USER CODE.
 | 
			
		||||
//
 | 
			
		||||
// ParameterizedTestCaseRegistry contains a map of ParameterizedTestCaseInfoBase
 | 
			
		||||
// classes accessed by test case names. TEST_P and INSTANTIATE_TEST_CASE_P
 | 
			
		||||
// macros use it to locate their corresponding ParameterizedTestCaseInfo
 | 
			
		||||
// descriptors.
 | 
			
		||||
class ParameterizedTestCaseRegistry {
 | 
			
		||||
 public:
 | 
			
		||||
  ParameterizedTestCaseRegistry() {}
 | 
			
		||||
  ~ParameterizedTestCaseRegistry() {
 | 
			
		||||
    for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();
 | 
			
		||||
         it != test_case_infos_.end(); ++it) {
 | 
			
		||||
      delete *it;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Looks up or creates and returns a structure containing information about
 | 
			
		||||
  // tests and instantiations of a particular test case.
 | 
			
		||||
  template <class TestCase>
 | 
			
		||||
  ParameterizedTestCaseInfo<TestCase>* GetTestCasePatternHolder(
 | 
			
		||||
      const char* test_case_name,
 | 
			
		||||
      const char* file,
 | 
			
		||||
      int line) {
 | 
			
		||||
    ParameterizedTestCaseInfo<TestCase>* typed_test_info = NULL;
 | 
			
		||||
    for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();
 | 
			
		||||
         it != test_case_infos_.end(); ++it) {
 | 
			
		||||
      if ((*it)->GetTestCaseName() == test_case_name) {
 | 
			
		||||
        if ((*it)->GetTestCaseTypeId() != GetTypeId<TestCase>()) {
 | 
			
		||||
          // Complain about incorrect usage of Google Test facilities
 | 
			
		||||
          // and terminate the program since we cannot guaranty correct
 | 
			
		||||
          // test case setup and tear-down in this case.
 | 
			
		||||
          ReportInvalidTestCaseType(test_case_name,  file, line);
 | 
			
		||||
          posix::Abort();
 | 
			
		||||
        } else {
 | 
			
		||||
          // At this point we are sure that the object we found is of the same
 | 
			
		||||
          // type we are looking for, so we downcast it to that type
 | 
			
		||||
          // without further checks.
 | 
			
		||||
          typed_test_info = CheckedDowncastToActualType<
 | 
			
		||||
              ParameterizedTestCaseInfo<TestCase> >(*it);
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    if (typed_test_info == NULL) {
 | 
			
		||||
      typed_test_info = new ParameterizedTestCaseInfo<TestCase>(test_case_name);
 | 
			
		||||
      test_case_infos_.push_back(typed_test_info);
 | 
			
		||||
    }
 | 
			
		||||
    return typed_test_info;
 | 
			
		||||
  }
 | 
			
		||||
  void RegisterTests() {
 | 
			
		||||
    for (TestCaseInfoContainer::iterator it = test_case_infos_.begin();
 | 
			
		||||
         it != test_case_infos_.end(); ++it) {
 | 
			
		||||
      (*it)->RegisterTests();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  typedef ::std::vector<ParameterizedTestCaseInfoBase*> TestCaseInfoContainer;
 | 
			
		||||
 | 
			
		||||
  TestCaseInfoContainer test_case_infos_;
 | 
			
		||||
 | 
			
		||||
  GTEST_DISALLOW_COPY_AND_ASSIGN_(ParameterizedTestCaseRegistry);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace internal
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  //  GTEST_HAS_PARAM_TEST
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_PARAM_UTIL_H_
 | 
			
		||||
							
								
								
									
										1775
									
								
								third_party/googletest/src/include/gtest/internal/gtest-port.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1775
									
								
								third_party/googletest/src/include/gtest/internal/gtest-port.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										350
									
								
								third_party/googletest/src/include/gtest/internal/gtest-string.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										350
									
								
								third_party/googletest/src/include/gtest/internal/gtest-string.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,350 @@
 | 
			
		||||
// Copyright 2005, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee)
 | 
			
		||||
//
 | 
			
		||||
// The Google C++ Testing Framework (Google Test)
 | 
			
		||||
//
 | 
			
		||||
// This header file declares the String class and functions used internally by
 | 
			
		||||
// Google Test.  They are subject to change without notice. They should not used
 | 
			
		||||
// by code external to Google Test.
 | 
			
		||||
//
 | 
			
		||||
// This header file is #included by <gtest/internal/gtest-internal.h>.
 | 
			
		||||
// It should not be #included by other files.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
 | 
			
		||||
 | 
			
		||||
#ifdef __BORLANDC__
 | 
			
		||||
// string.h is not guaranteed to provide strcpy on C++ Builder.
 | 
			
		||||
# include <mem.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "gtest/internal/gtest-port.h"
 | 
			
		||||
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
// String - a UTF-8 string class.
 | 
			
		||||
//
 | 
			
		||||
// For historic reasons, we don't use std::string.
 | 
			
		||||
//
 | 
			
		||||
// TODO(wan@google.com): replace this class with std::string or
 | 
			
		||||
// implement it in terms of the latter.
 | 
			
		||||
//
 | 
			
		||||
// Note that String can represent both NULL and the empty string,
 | 
			
		||||
// while std::string cannot represent NULL.
 | 
			
		||||
//
 | 
			
		||||
// NULL and the empty string are considered different.  NULL is less
 | 
			
		||||
// than anything (including the empty string) except itself.
 | 
			
		||||
//
 | 
			
		||||
// This class only provides minimum functionality necessary for
 | 
			
		||||
// implementing Google Test.  We do not intend to implement a full-fledged
 | 
			
		||||
// string class here.
 | 
			
		||||
//
 | 
			
		||||
// Since the purpose of this class is to provide a substitute for
 | 
			
		||||
// std::string on platforms where it cannot be used, we define a copy
 | 
			
		||||
// constructor and assignment operators such that we don't need
 | 
			
		||||
// conditional compilation in a lot of places.
 | 
			
		||||
//
 | 
			
		||||
// In order to make the representation efficient, the d'tor of String
 | 
			
		||||
// is not virtual.  Therefore DO NOT INHERIT FROM String.
 | 
			
		||||
class GTEST_API_ String {
 | 
			
		||||
 public:
 | 
			
		||||
  // Static utility methods
 | 
			
		||||
 | 
			
		||||
  // Returns the input enclosed in double quotes if it's not NULL;
 | 
			
		||||
  // otherwise returns "(null)".  For example, "\"Hello\"" is returned
 | 
			
		||||
  // for input "Hello".
 | 
			
		||||
  //
 | 
			
		||||
  // This is useful for printing a C string in the syntax of a literal.
 | 
			
		||||
  //
 | 
			
		||||
  // Known issue: escape sequences are not handled yet.
 | 
			
		||||
  static String ShowCStringQuoted(const char* c_str);
 | 
			
		||||
 | 
			
		||||
  // Clones a 0-terminated C string, allocating memory using new.  The
 | 
			
		||||
  // caller is responsible for deleting the return value using
 | 
			
		||||
  // delete[].  Returns the cloned string, or NULL if the input is
 | 
			
		||||
  // NULL.
 | 
			
		||||
  //
 | 
			
		||||
  // This is different from strdup() in string.h, which allocates
 | 
			
		||||
  // memory using malloc().
 | 
			
		||||
  static const char* CloneCString(const char* c_str);
 | 
			
		||||
 | 
			
		||||
#if GTEST_OS_WINDOWS_MOBILE
 | 
			
		||||
  // Windows CE does not have the 'ANSI' versions of Win32 APIs. To be
 | 
			
		||||
  // able to pass strings to Win32 APIs on CE we need to convert them
 | 
			
		||||
  // to 'Unicode', UTF-16.
 | 
			
		||||
 | 
			
		||||
  // Creates a UTF-16 wide string from the given ANSI string, allocating
 | 
			
		||||
  // memory using new. The caller is responsible for deleting the return
 | 
			
		||||
  // value using delete[]. Returns the wide string, or NULL if the
 | 
			
		||||
  // input is NULL.
 | 
			
		||||
  //
 | 
			
		||||
  // The wide string is created using the ANSI codepage (CP_ACP) to
 | 
			
		||||
  // match the behaviour of the ANSI versions of Win32 calls and the
 | 
			
		||||
  // C runtime.
 | 
			
		||||
  static LPCWSTR AnsiToUtf16(const char* c_str);
 | 
			
		||||
 | 
			
		||||
  // Creates an ANSI string from the given wide string, allocating
 | 
			
		||||
  // memory using new. The caller is responsible for deleting the return
 | 
			
		||||
  // value using delete[]. Returns the ANSI string, or NULL if the
 | 
			
		||||
  // input is NULL.
 | 
			
		||||
  //
 | 
			
		||||
  // The returned string is created using the ANSI codepage (CP_ACP) to
 | 
			
		||||
  // match the behaviour of the ANSI versions of Win32 calls and the
 | 
			
		||||
  // C runtime.
 | 
			
		||||
  static const char* Utf16ToAnsi(LPCWSTR utf16_str);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
  // Compares two C strings.  Returns true iff they have the same content.
 | 
			
		||||
  //
 | 
			
		||||
  // Unlike strcmp(), this function can handle NULL argument(s).  A
 | 
			
		||||
  // NULL C string is considered different to any non-NULL C string,
 | 
			
		||||
  // including the empty string.
 | 
			
		||||
  static bool CStringEquals(const char* lhs, const char* rhs);
 | 
			
		||||
 | 
			
		||||
  // Converts a wide C string to a String using the UTF-8 encoding.
 | 
			
		||||
  // NULL will be converted to "(null)".  If an error occurred during
 | 
			
		||||
  // the conversion, "(failed to convert from wide string)" is
 | 
			
		||||
  // returned.
 | 
			
		||||
  static String ShowWideCString(const wchar_t* wide_c_str);
 | 
			
		||||
 | 
			
		||||
  // Similar to ShowWideCString(), except that this function encloses
 | 
			
		||||
  // the converted string in double quotes.
 | 
			
		||||
  static String ShowWideCStringQuoted(const wchar_t* wide_c_str);
 | 
			
		||||
 | 
			
		||||
  // Compares two wide C strings.  Returns true iff they have the same
 | 
			
		||||
  // content.
 | 
			
		||||
  //
 | 
			
		||||
  // Unlike wcscmp(), this function can handle NULL argument(s).  A
 | 
			
		||||
  // NULL C string is considered different to any non-NULL C string,
 | 
			
		||||
  // including the empty string.
 | 
			
		||||
  static bool WideCStringEquals(const wchar_t* lhs, const wchar_t* rhs);
 | 
			
		||||
 | 
			
		||||
  // Compares two C strings, ignoring case.  Returns true iff they
 | 
			
		||||
  // have the same content.
 | 
			
		||||
  //
 | 
			
		||||
  // Unlike strcasecmp(), this function can handle NULL argument(s).
 | 
			
		||||
  // A NULL C string is considered different to any non-NULL C string,
 | 
			
		||||
  // including the empty string.
 | 
			
		||||
  static bool CaseInsensitiveCStringEquals(const char* lhs,
 | 
			
		||||
                                           const char* rhs);
 | 
			
		||||
 | 
			
		||||
  // Compares two wide C strings, ignoring case.  Returns true iff they
 | 
			
		||||
  // have the same content.
 | 
			
		||||
  //
 | 
			
		||||
  // Unlike wcscasecmp(), this function can handle NULL argument(s).
 | 
			
		||||
  // A NULL C string is considered different to any non-NULL wide C string,
 | 
			
		||||
  // including the empty string.
 | 
			
		||||
  // NB: The implementations on different platforms slightly differ.
 | 
			
		||||
  // On windows, this method uses _wcsicmp which compares according to LC_CTYPE
 | 
			
		||||
  // environment variable. On GNU platform this method uses wcscasecmp
 | 
			
		||||
  // which compares according to LC_CTYPE category of the current locale.
 | 
			
		||||
  // On MacOS X, it uses towlower, which also uses LC_CTYPE category of the
 | 
			
		||||
  // current locale.
 | 
			
		||||
  static bool CaseInsensitiveWideCStringEquals(const wchar_t* lhs,
 | 
			
		||||
                                               const wchar_t* rhs);
 | 
			
		||||
 | 
			
		||||
  // Formats a list of arguments to a String, using the same format
 | 
			
		||||
  // spec string as for printf.
 | 
			
		||||
  //
 | 
			
		||||
  // We do not use the StringPrintf class as it is not universally
 | 
			
		||||
  // available.
 | 
			
		||||
  //
 | 
			
		||||
  // The result is limited to 4096 characters (including the tailing
 | 
			
		||||
  // 0).  If 4096 characters are not enough to format the input,
 | 
			
		||||
  // "<buffer exceeded>" is returned.
 | 
			
		||||
  static String Format(const char* format, ...);
 | 
			
		||||
 | 
			
		||||
  // C'tors
 | 
			
		||||
 | 
			
		||||
  // The default c'tor constructs a NULL string.
 | 
			
		||||
  String() : c_str_(NULL), length_(0) {}
 | 
			
		||||
 | 
			
		||||
  // Constructs a String by cloning a 0-terminated C string.
 | 
			
		||||
  String(const char* a_c_str) {  // NOLINT
 | 
			
		||||
    if (a_c_str == NULL) {
 | 
			
		||||
      c_str_ = NULL;
 | 
			
		||||
      length_ = 0;
 | 
			
		||||
    } else {
 | 
			
		||||
      ConstructNonNull(a_c_str, strlen(a_c_str));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Constructs a String by copying a given number of chars from a
 | 
			
		||||
  // buffer.  E.g. String("hello", 3) creates the string "hel",
 | 
			
		||||
  // String("a\0bcd", 4) creates "a\0bc", String(NULL, 0) creates "",
 | 
			
		||||
  // and String(NULL, 1) results in access violation.
 | 
			
		||||
  String(const char* buffer, size_t a_length) {
 | 
			
		||||
    ConstructNonNull(buffer, a_length);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // The copy c'tor creates a new copy of the string.  The two
 | 
			
		||||
  // String objects do not share content.
 | 
			
		||||
  String(const String& str) : c_str_(NULL), length_(0) { *this = str; }
 | 
			
		||||
 | 
			
		||||
  // D'tor.  String is intended to be a final class, so the d'tor
 | 
			
		||||
  // doesn't need to be virtual.
 | 
			
		||||
  ~String() { delete[] c_str_; }
 | 
			
		||||
 | 
			
		||||
  // Allows a String to be implicitly converted to an ::std::string or
 | 
			
		||||
  // ::string, and vice versa.  Converting a String containing a NULL
 | 
			
		||||
  // pointer to ::std::string or ::string is undefined behavior.
 | 
			
		||||
  // Converting a ::std::string or ::string containing an embedded NUL
 | 
			
		||||
  // character to a String will result in the prefix up to the first
 | 
			
		||||
  // NUL character.
 | 
			
		||||
  String(const ::std::string& str) {
 | 
			
		||||
    ConstructNonNull(str.c_str(), str.length());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  operator ::std::string() const { return ::std::string(c_str(), length()); }
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_GLOBAL_STRING
 | 
			
		||||
  String(const ::string& str) {
 | 
			
		||||
    ConstructNonNull(str.c_str(), str.length());
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  operator ::string() const { return ::string(c_str(), length()); }
 | 
			
		||||
#endif  // GTEST_HAS_GLOBAL_STRING
 | 
			
		||||
 | 
			
		||||
  // Returns true iff this is an empty string (i.e. "").
 | 
			
		||||
  bool empty() const { return (c_str() != NULL) && (length() == 0); }
 | 
			
		||||
 | 
			
		||||
  // Compares this with another String.
 | 
			
		||||
  // Returns < 0 if this is less than rhs, 0 if this is equal to rhs, or > 0
 | 
			
		||||
  // if this is greater than rhs.
 | 
			
		||||
  int Compare(const String& rhs) const;
 | 
			
		||||
 | 
			
		||||
  // Returns true iff this String equals the given C string.  A NULL
 | 
			
		||||
  // string and a non-NULL string are considered not equal.
 | 
			
		||||
  bool operator==(const char* a_c_str) const { return Compare(a_c_str) == 0; }
 | 
			
		||||
 | 
			
		||||
  // Returns true iff this String is less than the given String.  A
 | 
			
		||||
  // NULL string is considered less than "".
 | 
			
		||||
  bool operator<(const String& rhs) const { return Compare(rhs) < 0; }
 | 
			
		||||
 | 
			
		||||
  // Returns true iff this String doesn't equal the given C string.  A NULL
 | 
			
		||||
  // string and a non-NULL string are considered not equal.
 | 
			
		||||
  bool operator!=(const char* a_c_str) const { return !(*this == a_c_str); }
 | 
			
		||||
 | 
			
		||||
  // Returns true iff this String ends with the given suffix.  *Any*
 | 
			
		||||
  // String is considered to end with a NULL or empty suffix.
 | 
			
		||||
  bool EndsWith(const char* suffix) const;
 | 
			
		||||
 | 
			
		||||
  // Returns true iff this String ends with the given suffix, not considering
 | 
			
		||||
  // case. Any String is considered to end with a NULL or empty suffix.
 | 
			
		||||
  bool EndsWithCaseInsensitive(const char* suffix) const;
 | 
			
		||||
 | 
			
		||||
  // Returns the length of the encapsulated string, or 0 if the
 | 
			
		||||
  // string is NULL.
 | 
			
		||||
  size_t length() const { return length_; }
 | 
			
		||||
 | 
			
		||||
  // Gets the 0-terminated C string this String object represents.
 | 
			
		||||
  // The String object still owns the string.  Therefore the caller
 | 
			
		||||
  // should NOT delete the return value.
 | 
			
		||||
  const char* c_str() const { return c_str_; }
 | 
			
		||||
 | 
			
		||||
  // Assigns a C string to this object.  Self-assignment works.
 | 
			
		||||
  const String& operator=(const char* a_c_str) {
 | 
			
		||||
    return *this = String(a_c_str);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Assigns a String object to this object.  Self-assignment works.
 | 
			
		||||
  const String& operator=(const String& rhs) {
 | 
			
		||||
    if (this != &rhs) {
 | 
			
		||||
      delete[] c_str_;
 | 
			
		||||
      if (rhs.c_str() == NULL) {
 | 
			
		||||
        c_str_ = NULL;
 | 
			
		||||
        length_ = 0;
 | 
			
		||||
      } else {
 | 
			
		||||
        ConstructNonNull(rhs.c_str(), rhs.length());
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  // Constructs a non-NULL String from the given content.  This
 | 
			
		||||
  // function can only be called when c_str_ has not been allocated.
 | 
			
		||||
  // ConstructNonNull(NULL, 0) results in an empty string ("").
 | 
			
		||||
  // ConstructNonNull(NULL, non_zero) is undefined behavior.
 | 
			
		||||
  void ConstructNonNull(const char* buffer, size_t a_length) {
 | 
			
		||||
    char* const str = new char[a_length + 1];
 | 
			
		||||
    memcpy(str, buffer, a_length);
 | 
			
		||||
    str[a_length] = '\0';
 | 
			
		||||
    c_str_ = str;
 | 
			
		||||
    length_ = a_length;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const char* c_str_;
 | 
			
		||||
  size_t length_;
 | 
			
		||||
};  // class String
 | 
			
		||||
 | 
			
		||||
// Streams a String to an ostream.  Each '\0' character in the String
 | 
			
		||||
// is replaced with "\\0".
 | 
			
		||||
inline ::std::ostream& operator<<(::std::ostream& os, const String& str) {
 | 
			
		||||
  if (str.c_str() == NULL) {
 | 
			
		||||
    os << "(null)";
 | 
			
		||||
  } else {
 | 
			
		||||
    const char* const c_str = str.c_str();
 | 
			
		||||
    for (size_t i = 0; i != str.length(); i++) {
 | 
			
		||||
      if (c_str[i] == '\0') {
 | 
			
		||||
        os << "\\0";
 | 
			
		||||
      } else {
 | 
			
		||||
        os << c_str[i];
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return os;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Gets the content of the stringstream's buffer as a String.  Each '\0'
 | 
			
		||||
// character in the buffer is replaced with "\\0".
 | 
			
		||||
GTEST_API_ String StringStreamToString(::std::stringstream* stream);
 | 
			
		||||
 | 
			
		||||
// Converts a streamable value to a String.  A NULL pointer is
 | 
			
		||||
// converted to "(null)".  When the input value is a ::string,
 | 
			
		||||
// ::std::string, ::wstring, or ::std::wstring object, each NUL
 | 
			
		||||
// character in it is replaced with "\\0".
 | 
			
		||||
 | 
			
		||||
// Declared here but defined in gtest.h, so that it has access
 | 
			
		||||
// to the definition of the Message class, required by the ARM
 | 
			
		||||
// compiler.
 | 
			
		||||
template <typename T>
 | 
			
		||||
String StreamableToString(const T& streamable);
 | 
			
		||||
 | 
			
		||||
}  // namespace internal
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_STRING_H_
 | 
			
		||||
							
								
								
									
										968
									
								
								third_party/googletest/src/include/gtest/internal/gtest-tuple.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										968
									
								
								third_party/googletest/src/include/gtest/internal/gtest-tuple.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,968 @@
 | 
			
		||||
// This file was GENERATED by a script.  DO NOT EDIT BY HAND!!!
 | 
			
		||||
 | 
			
		||||
// Copyright 2009 Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: wan@google.com (Zhanyong Wan)
 | 
			
		||||
 | 
			
		||||
// Implements a subset of TR1 tuple needed by Google Test and Google Mock.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
 | 
			
		||||
 | 
			
		||||
#include <utility>  // For ::std::pair.
 | 
			
		||||
 | 
			
		||||
// The compiler used in Symbian has a bug that prevents us from declaring the
 | 
			
		||||
// tuple template as a friend (it complains that tuple is redefined).  This
 | 
			
		||||
// hack bypasses the bug by declaring the members that should otherwise be
 | 
			
		||||
// private as public.
 | 
			
		||||
// Sun Studio versions < 12 also have the above bug.
 | 
			
		||||
#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
 | 
			
		||||
# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
 | 
			
		||||
#else
 | 
			
		||||
# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
 | 
			
		||||
    template <GTEST_10_TYPENAMES_(U)> friend class tuple; \
 | 
			
		||||
   private:
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// GTEST_n_TUPLE_(T) is the type of an n-tuple.
 | 
			
		||||
#define GTEST_0_TUPLE_(T) tuple<>
 | 
			
		||||
#define GTEST_1_TUPLE_(T) tuple<T##0, void, void, void, void, void, void, \
 | 
			
		||||
    void, void, void>
 | 
			
		||||
#define GTEST_2_TUPLE_(T) tuple<T##0, T##1, void, void, void, void, void, \
 | 
			
		||||
    void, void, void>
 | 
			
		||||
#define GTEST_3_TUPLE_(T) tuple<T##0, T##1, T##2, void, void, void, void, \
 | 
			
		||||
    void, void, void>
 | 
			
		||||
#define GTEST_4_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, void, void, void, \
 | 
			
		||||
    void, void, void>
 | 
			
		||||
#define GTEST_5_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, void, void, \
 | 
			
		||||
    void, void, void>
 | 
			
		||||
#define GTEST_6_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, void, \
 | 
			
		||||
    void, void, void>
 | 
			
		||||
#define GTEST_7_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
 | 
			
		||||
    void, void, void>
 | 
			
		||||
#define GTEST_8_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
 | 
			
		||||
    T##7, void, void>
 | 
			
		||||
#define GTEST_9_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
 | 
			
		||||
    T##7, T##8, void>
 | 
			
		||||
#define GTEST_10_TUPLE_(T) tuple<T##0, T##1, T##2, T##3, T##4, T##5, T##6, \
 | 
			
		||||
    T##7, T##8, T##9>
 | 
			
		||||
 | 
			
		||||
// GTEST_n_TYPENAMES_(T) declares a list of n typenames.
 | 
			
		||||
#define GTEST_0_TYPENAMES_(T)
 | 
			
		||||
#define GTEST_1_TYPENAMES_(T) typename T##0
 | 
			
		||||
#define GTEST_2_TYPENAMES_(T) typename T##0, typename T##1
 | 
			
		||||
#define GTEST_3_TYPENAMES_(T) typename T##0, typename T##1, typename T##2
 | 
			
		||||
#define GTEST_4_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
 | 
			
		||||
    typename T##3
 | 
			
		||||
#define GTEST_5_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
 | 
			
		||||
    typename T##3, typename T##4
 | 
			
		||||
#define GTEST_6_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
 | 
			
		||||
    typename T##3, typename T##4, typename T##5
 | 
			
		||||
#define GTEST_7_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
 | 
			
		||||
    typename T##3, typename T##4, typename T##5, typename T##6
 | 
			
		||||
#define GTEST_8_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
 | 
			
		||||
    typename T##3, typename T##4, typename T##5, typename T##6, typename T##7
 | 
			
		||||
#define GTEST_9_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
 | 
			
		||||
    typename T##3, typename T##4, typename T##5, typename T##6, \
 | 
			
		||||
    typename T##7, typename T##8
 | 
			
		||||
#define GTEST_10_TYPENAMES_(T) typename T##0, typename T##1, typename T##2, \
 | 
			
		||||
    typename T##3, typename T##4, typename T##5, typename T##6, \
 | 
			
		||||
    typename T##7, typename T##8, typename T##9
 | 
			
		||||
 | 
			
		||||
// In theory, defining stuff in the ::std namespace is undefined
 | 
			
		||||
// behavior.  We can do this as we are playing the role of a standard
 | 
			
		||||
// library vendor.
 | 
			
		||||
namespace std {
 | 
			
		||||
namespace tr1 {
 | 
			
		||||
 | 
			
		||||
template <typename T0 = void, typename T1 = void, typename T2 = void,
 | 
			
		||||
    typename T3 = void, typename T4 = void, typename T5 = void,
 | 
			
		||||
    typename T6 = void, typename T7 = void, typename T8 = void,
 | 
			
		||||
    typename T9 = void>
 | 
			
		||||
class tuple;
 | 
			
		||||
 | 
			
		||||
// Anything in namespace gtest_internal is Google Test's INTERNAL
 | 
			
		||||
// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code.
 | 
			
		||||
namespace gtest_internal {
 | 
			
		||||
 | 
			
		||||
// ByRef<T>::type is T if T is a reference; otherwise it's const T&.
 | 
			
		||||
template <typename T>
 | 
			
		||||
struct ByRef { typedef const T& type; };  // NOLINT
 | 
			
		||||
template <typename T>
 | 
			
		||||
struct ByRef<T&> { typedef T& type; };  // NOLINT
 | 
			
		||||
 | 
			
		||||
// A handy wrapper for ByRef.
 | 
			
		||||
#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type
 | 
			
		||||
 | 
			
		||||
// AddRef<T>::type is T if T is a reference; otherwise it's T&.  This
 | 
			
		||||
// is the same as tr1::add_reference<T>::type.
 | 
			
		||||
template <typename T>
 | 
			
		||||
struct AddRef { typedef T& type; };  // NOLINT
 | 
			
		||||
template <typename T>
 | 
			
		||||
struct AddRef<T&> { typedef T& type; };  // NOLINT
 | 
			
		||||
 | 
			
		||||
// A handy wrapper for AddRef.
 | 
			
		||||
#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type
 | 
			
		||||
 | 
			
		||||
// A helper for implementing get<k>().
 | 
			
		||||
template <int k> class Get;
 | 
			
		||||
 | 
			
		||||
// A helper for implementing tuple_element<k, T>.  kIndexValid is true
 | 
			
		||||
// iff k < the number of fields in tuple type T.
 | 
			
		||||
template <bool kIndexValid, int kIndex, class Tuple>
 | 
			
		||||
struct TupleElement;
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
struct TupleElement<true, 0, GTEST_10_TUPLE_(T)> { typedef T0 type; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
struct TupleElement<true, 1, GTEST_10_TUPLE_(T)> { typedef T1 type; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
struct TupleElement<true, 2, GTEST_10_TUPLE_(T)> { typedef T2 type; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
struct TupleElement<true, 3, GTEST_10_TUPLE_(T)> { typedef T3 type; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
struct TupleElement<true, 4, GTEST_10_TUPLE_(T)> { typedef T4 type; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
struct TupleElement<true, 5, GTEST_10_TUPLE_(T)> { typedef T5 type; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
struct TupleElement<true, 6, GTEST_10_TUPLE_(T)> { typedef T6 type; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
struct TupleElement<true, 7, GTEST_10_TUPLE_(T)> { typedef T7 type; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
struct TupleElement<true, 8, GTEST_10_TUPLE_(T)> { typedef T8 type; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
struct TupleElement<true, 9, GTEST_10_TUPLE_(T)> { typedef T9 type; };
 | 
			
		||||
 | 
			
		||||
}  // namespace gtest_internal
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
class tuple<> {
 | 
			
		||||
 public:
 | 
			
		||||
  tuple() {}
 | 
			
		||||
  tuple(const tuple& /* t */)  {}
 | 
			
		||||
  tuple& operator=(const tuple& /* t */) { return *this; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <GTEST_1_TYPENAMES_(T)>
 | 
			
		||||
class GTEST_1_TUPLE_(T) {
 | 
			
		||||
 public:
 | 
			
		||||
  template <int k> friend class gtest_internal::Get;
 | 
			
		||||
 | 
			
		||||
  tuple() : f0_() {}
 | 
			
		||||
 | 
			
		||||
  explicit tuple(GTEST_BY_REF_(T0) f0) : f0_(f0) {}
 | 
			
		||||
 | 
			
		||||
  tuple(const tuple& t) : f0_(t.f0_) {}
 | 
			
		||||
 | 
			
		||||
  template <GTEST_1_TYPENAMES_(U)>
 | 
			
		||||
  tuple(const GTEST_1_TUPLE_(U)& t) : f0_(t.f0_) {}
 | 
			
		||||
 | 
			
		||||
  tuple& operator=(const tuple& t) { return CopyFrom(t); }
 | 
			
		||||
 | 
			
		||||
  template <GTEST_1_TYPENAMES_(U)>
 | 
			
		||||
  tuple& operator=(const GTEST_1_TUPLE_(U)& t) {
 | 
			
		||||
    return CopyFrom(t);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
 | 
			
		||||
  template <GTEST_1_TYPENAMES_(U)>
 | 
			
		||||
  tuple& CopyFrom(const GTEST_1_TUPLE_(U)& t) {
 | 
			
		||||
    f0_ = t.f0_;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  T0 f0_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <GTEST_2_TYPENAMES_(T)>
 | 
			
		||||
class GTEST_2_TUPLE_(T) {
 | 
			
		||||
 public:
 | 
			
		||||
  template <int k> friend class gtest_internal::Get;
 | 
			
		||||
 | 
			
		||||
  tuple() : f0_(), f1_() {}
 | 
			
		||||
 | 
			
		||||
  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1) : f0_(f0),
 | 
			
		||||
      f1_(f1) {}
 | 
			
		||||
 | 
			
		||||
  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_) {}
 | 
			
		||||
 | 
			
		||||
  template <GTEST_2_TYPENAMES_(U)>
 | 
			
		||||
  tuple(const GTEST_2_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_) {}
 | 
			
		||||
  template <typename U0, typename U1>
 | 
			
		||||
  tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}
 | 
			
		||||
 | 
			
		||||
  tuple& operator=(const tuple& t) { return CopyFrom(t); }
 | 
			
		||||
 | 
			
		||||
  template <GTEST_2_TYPENAMES_(U)>
 | 
			
		||||
  tuple& operator=(const GTEST_2_TUPLE_(U)& t) {
 | 
			
		||||
    return CopyFrom(t);
 | 
			
		||||
  }
 | 
			
		||||
  template <typename U0, typename U1>
 | 
			
		||||
  tuple& operator=(const ::std::pair<U0, U1>& p) {
 | 
			
		||||
    f0_ = p.first;
 | 
			
		||||
    f1_ = p.second;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
 | 
			
		||||
  template <GTEST_2_TYPENAMES_(U)>
 | 
			
		||||
  tuple& CopyFrom(const GTEST_2_TUPLE_(U)& t) {
 | 
			
		||||
    f0_ = t.f0_;
 | 
			
		||||
    f1_ = t.f1_;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  T0 f0_;
 | 
			
		||||
  T1 f1_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <GTEST_3_TYPENAMES_(T)>
 | 
			
		||||
class GTEST_3_TUPLE_(T) {
 | 
			
		||||
 public:
 | 
			
		||||
  template <int k> friend class gtest_internal::Get;
 | 
			
		||||
 | 
			
		||||
  tuple() : f0_(), f1_(), f2_() {}
 | 
			
		||||
 | 
			
		||||
  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
 | 
			
		||||
      GTEST_BY_REF_(T2) f2) : f0_(f0), f1_(f1), f2_(f2) {}
 | 
			
		||||
 | 
			
		||||
  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
 | 
			
		||||
 | 
			
		||||
  template <GTEST_3_TYPENAMES_(U)>
 | 
			
		||||
  tuple(const GTEST_3_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_) {}
 | 
			
		||||
 | 
			
		||||
  tuple& operator=(const tuple& t) { return CopyFrom(t); }
 | 
			
		||||
 | 
			
		||||
  template <GTEST_3_TYPENAMES_(U)>
 | 
			
		||||
  tuple& operator=(const GTEST_3_TUPLE_(U)& t) {
 | 
			
		||||
    return CopyFrom(t);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
 | 
			
		||||
  template <GTEST_3_TYPENAMES_(U)>
 | 
			
		||||
  tuple& CopyFrom(const GTEST_3_TUPLE_(U)& t) {
 | 
			
		||||
    f0_ = t.f0_;
 | 
			
		||||
    f1_ = t.f1_;
 | 
			
		||||
    f2_ = t.f2_;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  T0 f0_;
 | 
			
		||||
  T1 f1_;
 | 
			
		||||
  T2 f2_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <GTEST_4_TYPENAMES_(T)>
 | 
			
		||||
class GTEST_4_TUPLE_(T) {
 | 
			
		||||
 public:
 | 
			
		||||
  template <int k> friend class gtest_internal::Get;
 | 
			
		||||
 | 
			
		||||
  tuple() : f0_(), f1_(), f2_(), f3_() {}
 | 
			
		||||
 | 
			
		||||
  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
 | 
			
		||||
      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3) : f0_(f0), f1_(f1), f2_(f2),
 | 
			
		||||
      f3_(f3) {}
 | 
			
		||||
 | 
			
		||||
  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_) {}
 | 
			
		||||
 | 
			
		||||
  template <GTEST_4_TYPENAMES_(U)>
 | 
			
		||||
  tuple(const GTEST_4_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
 | 
			
		||||
      f3_(t.f3_) {}
 | 
			
		||||
 | 
			
		||||
  tuple& operator=(const tuple& t) { return CopyFrom(t); }
 | 
			
		||||
 | 
			
		||||
  template <GTEST_4_TYPENAMES_(U)>
 | 
			
		||||
  tuple& operator=(const GTEST_4_TUPLE_(U)& t) {
 | 
			
		||||
    return CopyFrom(t);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
 | 
			
		||||
  template <GTEST_4_TYPENAMES_(U)>
 | 
			
		||||
  tuple& CopyFrom(const GTEST_4_TUPLE_(U)& t) {
 | 
			
		||||
    f0_ = t.f0_;
 | 
			
		||||
    f1_ = t.f1_;
 | 
			
		||||
    f2_ = t.f2_;
 | 
			
		||||
    f3_ = t.f3_;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  T0 f0_;
 | 
			
		||||
  T1 f1_;
 | 
			
		||||
  T2 f2_;
 | 
			
		||||
  T3 f3_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <GTEST_5_TYPENAMES_(T)>
 | 
			
		||||
class GTEST_5_TUPLE_(T) {
 | 
			
		||||
 public:
 | 
			
		||||
  template <int k> friend class gtest_internal::Get;
 | 
			
		||||
 | 
			
		||||
  tuple() : f0_(), f1_(), f2_(), f3_(), f4_() {}
 | 
			
		||||
 | 
			
		||||
  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
 | 
			
		||||
      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3,
 | 
			
		||||
      GTEST_BY_REF_(T4) f4) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4) {}
 | 
			
		||||
 | 
			
		||||
  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
 | 
			
		||||
      f4_(t.f4_) {}
 | 
			
		||||
 | 
			
		||||
  template <GTEST_5_TYPENAMES_(U)>
 | 
			
		||||
  tuple(const GTEST_5_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
 | 
			
		||||
      f3_(t.f3_), f4_(t.f4_) {}
 | 
			
		||||
 | 
			
		||||
  tuple& operator=(const tuple& t) { return CopyFrom(t); }
 | 
			
		||||
 | 
			
		||||
  template <GTEST_5_TYPENAMES_(U)>
 | 
			
		||||
  tuple& operator=(const GTEST_5_TUPLE_(U)& t) {
 | 
			
		||||
    return CopyFrom(t);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
 | 
			
		||||
  template <GTEST_5_TYPENAMES_(U)>
 | 
			
		||||
  tuple& CopyFrom(const GTEST_5_TUPLE_(U)& t) {
 | 
			
		||||
    f0_ = t.f0_;
 | 
			
		||||
    f1_ = t.f1_;
 | 
			
		||||
    f2_ = t.f2_;
 | 
			
		||||
    f3_ = t.f3_;
 | 
			
		||||
    f4_ = t.f4_;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  T0 f0_;
 | 
			
		||||
  T1 f1_;
 | 
			
		||||
  T2 f2_;
 | 
			
		||||
  T3 f3_;
 | 
			
		||||
  T4 f4_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <GTEST_6_TYPENAMES_(T)>
 | 
			
		||||
class GTEST_6_TUPLE_(T) {
 | 
			
		||||
 public:
 | 
			
		||||
  template <int k> friend class gtest_internal::Get;
 | 
			
		||||
 | 
			
		||||
  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_() {}
 | 
			
		||||
 | 
			
		||||
  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
 | 
			
		||||
      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
 | 
			
		||||
      GTEST_BY_REF_(T5) f5) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
 | 
			
		||||
      f5_(f5) {}
 | 
			
		||||
 | 
			
		||||
  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
 | 
			
		||||
      f4_(t.f4_), f5_(t.f5_) {}
 | 
			
		||||
 | 
			
		||||
  template <GTEST_6_TYPENAMES_(U)>
 | 
			
		||||
  tuple(const GTEST_6_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
 | 
			
		||||
      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_) {}
 | 
			
		||||
 | 
			
		||||
  tuple& operator=(const tuple& t) { return CopyFrom(t); }
 | 
			
		||||
 | 
			
		||||
  template <GTEST_6_TYPENAMES_(U)>
 | 
			
		||||
  tuple& operator=(const GTEST_6_TUPLE_(U)& t) {
 | 
			
		||||
    return CopyFrom(t);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
 | 
			
		||||
  template <GTEST_6_TYPENAMES_(U)>
 | 
			
		||||
  tuple& CopyFrom(const GTEST_6_TUPLE_(U)& t) {
 | 
			
		||||
    f0_ = t.f0_;
 | 
			
		||||
    f1_ = t.f1_;
 | 
			
		||||
    f2_ = t.f2_;
 | 
			
		||||
    f3_ = t.f3_;
 | 
			
		||||
    f4_ = t.f4_;
 | 
			
		||||
    f5_ = t.f5_;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  T0 f0_;
 | 
			
		||||
  T1 f1_;
 | 
			
		||||
  T2 f2_;
 | 
			
		||||
  T3 f3_;
 | 
			
		||||
  T4 f4_;
 | 
			
		||||
  T5 f5_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <GTEST_7_TYPENAMES_(T)>
 | 
			
		||||
class GTEST_7_TUPLE_(T) {
 | 
			
		||||
 public:
 | 
			
		||||
  template <int k> friend class gtest_internal::Get;
 | 
			
		||||
 | 
			
		||||
  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_() {}
 | 
			
		||||
 | 
			
		||||
  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
 | 
			
		||||
      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
 | 
			
		||||
      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6) : f0_(f0), f1_(f1), f2_(f2),
 | 
			
		||||
      f3_(f3), f4_(f4), f5_(f5), f6_(f6) {}
 | 
			
		||||
 | 
			
		||||
  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
 | 
			
		||||
      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
 | 
			
		||||
 | 
			
		||||
  template <GTEST_7_TYPENAMES_(U)>
 | 
			
		||||
  tuple(const GTEST_7_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
 | 
			
		||||
      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_) {}
 | 
			
		||||
 | 
			
		||||
  tuple& operator=(const tuple& t) { return CopyFrom(t); }
 | 
			
		||||
 | 
			
		||||
  template <GTEST_7_TYPENAMES_(U)>
 | 
			
		||||
  tuple& operator=(const GTEST_7_TUPLE_(U)& t) {
 | 
			
		||||
    return CopyFrom(t);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
 | 
			
		||||
  template <GTEST_7_TYPENAMES_(U)>
 | 
			
		||||
  tuple& CopyFrom(const GTEST_7_TUPLE_(U)& t) {
 | 
			
		||||
    f0_ = t.f0_;
 | 
			
		||||
    f1_ = t.f1_;
 | 
			
		||||
    f2_ = t.f2_;
 | 
			
		||||
    f3_ = t.f3_;
 | 
			
		||||
    f4_ = t.f4_;
 | 
			
		||||
    f5_ = t.f5_;
 | 
			
		||||
    f6_ = t.f6_;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  T0 f0_;
 | 
			
		||||
  T1 f1_;
 | 
			
		||||
  T2 f2_;
 | 
			
		||||
  T3 f3_;
 | 
			
		||||
  T4 f4_;
 | 
			
		||||
  T5 f5_;
 | 
			
		||||
  T6 f6_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <GTEST_8_TYPENAMES_(T)>
 | 
			
		||||
class GTEST_8_TUPLE_(T) {
 | 
			
		||||
 public:
 | 
			
		||||
  template <int k> friend class gtest_internal::Get;
 | 
			
		||||
 | 
			
		||||
  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_() {}
 | 
			
		||||
 | 
			
		||||
  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
 | 
			
		||||
      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
 | 
			
		||||
      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6,
 | 
			
		||||
      GTEST_BY_REF_(T7) f7) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
 | 
			
		||||
      f5_(f5), f6_(f6), f7_(f7) {}
 | 
			
		||||
 | 
			
		||||
  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
 | 
			
		||||
      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
 | 
			
		||||
 | 
			
		||||
  template <GTEST_8_TYPENAMES_(U)>
 | 
			
		||||
  tuple(const GTEST_8_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
 | 
			
		||||
      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_) {}
 | 
			
		||||
 | 
			
		||||
  tuple& operator=(const tuple& t) { return CopyFrom(t); }
 | 
			
		||||
 | 
			
		||||
  template <GTEST_8_TYPENAMES_(U)>
 | 
			
		||||
  tuple& operator=(const GTEST_8_TUPLE_(U)& t) {
 | 
			
		||||
    return CopyFrom(t);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
 | 
			
		||||
  template <GTEST_8_TYPENAMES_(U)>
 | 
			
		||||
  tuple& CopyFrom(const GTEST_8_TUPLE_(U)& t) {
 | 
			
		||||
    f0_ = t.f0_;
 | 
			
		||||
    f1_ = t.f1_;
 | 
			
		||||
    f2_ = t.f2_;
 | 
			
		||||
    f3_ = t.f3_;
 | 
			
		||||
    f4_ = t.f4_;
 | 
			
		||||
    f5_ = t.f5_;
 | 
			
		||||
    f6_ = t.f6_;
 | 
			
		||||
    f7_ = t.f7_;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  T0 f0_;
 | 
			
		||||
  T1 f1_;
 | 
			
		||||
  T2 f2_;
 | 
			
		||||
  T3 f3_;
 | 
			
		||||
  T4 f4_;
 | 
			
		||||
  T5 f5_;
 | 
			
		||||
  T6 f6_;
 | 
			
		||||
  T7 f7_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <GTEST_9_TYPENAMES_(T)>
 | 
			
		||||
class GTEST_9_TUPLE_(T) {
 | 
			
		||||
 public:
 | 
			
		||||
  template <int k> friend class gtest_internal::Get;
 | 
			
		||||
 | 
			
		||||
  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_() {}
 | 
			
		||||
 | 
			
		||||
  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
 | 
			
		||||
      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
 | 
			
		||||
      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
 | 
			
		||||
      GTEST_BY_REF_(T8) f8) : f0_(f0), f1_(f1), f2_(f2), f3_(f3), f4_(f4),
 | 
			
		||||
      f5_(f5), f6_(f6), f7_(f7), f8_(f8) {}
 | 
			
		||||
 | 
			
		||||
  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
 | 
			
		||||
      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
 | 
			
		||||
 | 
			
		||||
  template <GTEST_9_TYPENAMES_(U)>
 | 
			
		||||
  tuple(const GTEST_9_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
 | 
			
		||||
      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_) {}
 | 
			
		||||
 | 
			
		||||
  tuple& operator=(const tuple& t) { return CopyFrom(t); }
 | 
			
		||||
 | 
			
		||||
  template <GTEST_9_TYPENAMES_(U)>
 | 
			
		||||
  tuple& operator=(const GTEST_9_TUPLE_(U)& t) {
 | 
			
		||||
    return CopyFrom(t);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
 | 
			
		||||
  template <GTEST_9_TYPENAMES_(U)>
 | 
			
		||||
  tuple& CopyFrom(const GTEST_9_TUPLE_(U)& t) {
 | 
			
		||||
    f0_ = t.f0_;
 | 
			
		||||
    f1_ = t.f1_;
 | 
			
		||||
    f2_ = t.f2_;
 | 
			
		||||
    f3_ = t.f3_;
 | 
			
		||||
    f4_ = t.f4_;
 | 
			
		||||
    f5_ = t.f5_;
 | 
			
		||||
    f6_ = t.f6_;
 | 
			
		||||
    f7_ = t.f7_;
 | 
			
		||||
    f8_ = t.f8_;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  T0 f0_;
 | 
			
		||||
  T1 f1_;
 | 
			
		||||
  T2 f2_;
 | 
			
		||||
  T3 f3_;
 | 
			
		||||
  T4 f4_;
 | 
			
		||||
  T5 f5_;
 | 
			
		||||
  T6 f6_;
 | 
			
		||||
  T7 f7_;
 | 
			
		||||
  T8 f8_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
class tuple {
 | 
			
		||||
 public:
 | 
			
		||||
  template <int k> friend class gtest_internal::Get;
 | 
			
		||||
 | 
			
		||||
  tuple() : f0_(), f1_(), f2_(), f3_(), f4_(), f5_(), f6_(), f7_(), f8_(),
 | 
			
		||||
      f9_() {}
 | 
			
		||||
 | 
			
		||||
  explicit tuple(GTEST_BY_REF_(T0) f0, GTEST_BY_REF_(T1) f1,
 | 
			
		||||
      GTEST_BY_REF_(T2) f2, GTEST_BY_REF_(T3) f3, GTEST_BY_REF_(T4) f4,
 | 
			
		||||
      GTEST_BY_REF_(T5) f5, GTEST_BY_REF_(T6) f6, GTEST_BY_REF_(T7) f7,
 | 
			
		||||
      GTEST_BY_REF_(T8) f8, GTEST_BY_REF_(T9) f9) : f0_(f0), f1_(f1), f2_(f2),
 | 
			
		||||
      f3_(f3), f4_(f4), f5_(f5), f6_(f6), f7_(f7), f8_(f8), f9_(f9) {}
 | 
			
		||||
 | 
			
		||||
  tuple(const tuple& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_), f3_(t.f3_),
 | 
			
		||||
      f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_), f9_(t.f9_) {}
 | 
			
		||||
 | 
			
		||||
  template <GTEST_10_TYPENAMES_(U)>
 | 
			
		||||
  tuple(const GTEST_10_TUPLE_(U)& t) : f0_(t.f0_), f1_(t.f1_), f2_(t.f2_),
 | 
			
		||||
      f3_(t.f3_), f4_(t.f4_), f5_(t.f5_), f6_(t.f6_), f7_(t.f7_), f8_(t.f8_),
 | 
			
		||||
      f9_(t.f9_) {}
 | 
			
		||||
 | 
			
		||||
  tuple& operator=(const tuple& t) { return CopyFrom(t); }
 | 
			
		||||
 | 
			
		||||
  template <GTEST_10_TYPENAMES_(U)>
 | 
			
		||||
  tuple& operator=(const GTEST_10_TUPLE_(U)& t) {
 | 
			
		||||
    return CopyFrom(t);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
 | 
			
		||||
  template <GTEST_10_TYPENAMES_(U)>
 | 
			
		||||
  tuple& CopyFrom(const GTEST_10_TUPLE_(U)& t) {
 | 
			
		||||
    f0_ = t.f0_;
 | 
			
		||||
    f1_ = t.f1_;
 | 
			
		||||
    f2_ = t.f2_;
 | 
			
		||||
    f3_ = t.f3_;
 | 
			
		||||
    f4_ = t.f4_;
 | 
			
		||||
    f5_ = t.f5_;
 | 
			
		||||
    f6_ = t.f6_;
 | 
			
		||||
    f7_ = t.f7_;
 | 
			
		||||
    f8_ = t.f8_;
 | 
			
		||||
    f9_ = t.f9_;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  T0 f0_;
 | 
			
		||||
  T1 f1_;
 | 
			
		||||
  T2 f2_;
 | 
			
		||||
  T3 f3_;
 | 
			
		||||
  T4 f4_;
 | 
			
		||||
  T5 f5_;
 | 
			
		||||
  T6 f6_;
 | 
			
		||||
  T7 f7_;
 | 
			
		||||
  T8 f8_;
 | 
			
		||||
  T9 f9_;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// 6.1.3.2 Tuple creation functions.
 | 
			
		||||
 | 
			
		||||
// Known limitations: we don't support passing an
 | 
			
		||||
// std::tr1::reference_wrapper<T> to make_tuple().  And we don't
 | 
			
		||||
// implement tie().
 | 
			
		||||
 | 
			
		||||
inline tuple<> make_tuple() { return tuple<>(); }
 | 
			
		||||
 | 
			
		||||
template <GTEST_1_TYPENAMES_(T)>
 | 
			
		||||
inline GTEST_1_TUPLE_(T) make_tuple(const T0& f0) {
 | 
			
		||||
  return GTEST_1_TUPLE_(T)(f0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <GTEST_2_TYPENAMES_(T)>
 | 
			
		||||
inline GTEST_2_TUPLE_(T) make_tuple(const T0& f0, const T1& f1) {
 | 
			
		||||
  return GTEST_2_TUPLE_(T)(f0, f1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <GTEST_3_TYPENAMES_(T)>
 | 
			
		||||
inline GTEST_3_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2) {
 | 
			
		||||
  return GTEST_3_TUPLE_(T)(f0, f1, f2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <GTEST_4_TYPENAMES_(T)>
 | 
			
		||||
inline GTEST_4_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
 | 
			
		||||
    const T3& f3) {
 | 
			
		||||
  return GTEST_4_TUPLE_(T)(f0, f1, f2, f3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <GTEST_5_TYPENAMES_(T)>
 | 
			
		||||
inline GTEST_5_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
 | 
			
		||||
    const T3& f3, const T4& f4) {
 | 
			
		||||
  return GTEST_5_TUPLE_(T)(f0, f1, f2, f3, f4);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <GTEST_6_TYPENAMES_(T)>
 | 
			
		||||
inline GTEST_6_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
 | 
			
		||||
    const T3& f3, const T4& f4, const T5& f5) {
 | 
			
		||||
  return GTEST_6_TUPLE_(T)(f0, f1, f2, f3, f4, f5);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <GTEST_7_TYPENAMES_(T)>
 | 
			
		||||
inline GTEST_7_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
 | 
			
		||||
    const T3& f3, const T4& f4, const T5& f5, const T6& f6) {
 | 
			
		||||
  return GTEST_7_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <GTEST_8_TYPENAMES_(T)>
 | 
			
		||||
inline GTEST_8_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
 | 
			
		||||
    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7) {
 | 
			
		||||
  return GTEST_8_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <GTEST_9_TYPENAMES_(T)>
 | 
			
		||||
inline GTEST_9_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
 | 
			
		||||
    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
 | 
			
		||||
    const T8& f8) {
 | 
			
		||||
  return GTEST_9_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
inline GTEST_10_TUPLE_(T) make_tuple(const T0& f0, const T1& f1, const T2& f2,
 | 
			
		||||
    const T3& f3, const T4& f4, const T5& f5, const T6& f6, const T7& f7,
 | 
			
		||||
    const T8& f8, const T9& f9) {
 | 
			
		||||
  return GTEST_10_TUPLE_(T)(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 6.1.3.3 Tuple helper classes.
 | 
			
		||||
 | 
			
		||||
template <typename Tuple> struct tuple_size;
 | 
			
		||||
 | 
			
		||||
template <GTEST_0_TYPENAMES_(T)>
 | 
			
		||||
struct tuple_size<GTEST_0_TUPLE_(T)> { static const int value = 0; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_1_TYPENAMES_(T)>
 | 
			
		||||
struct tuple_size<GTEST_1_TUPLE_(T)> { static const int value = 1; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_2_TYPENAMES_(T)>
 | 
			
		||||
struct tuple_size<GTEST_2_TUPLE_(T)> { static const int value = 2; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_3_TYPENAMES_(T)>
 | 
			
		||||
struct tuple_size<GTEST_3_TUPLE_(T)> { static const int value = 3; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_4_TYPENAMES_(T)>
 | 
			
		||||
struct tuple_size<GTEST_4_TUPLE_(T)> { static const int value = 4; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_5_TYPENAMES_(T)>
 | 
			
		||||
struct tuple_size<GTEST_5_TUPLE_(T)> { static const int value = 5; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_6_TYPENAMES_(T)>
 | 
			
		||||
struct tuple_size<GTEST_6_TUPLE_(T)> { static const int value = 6; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_7_TYPENAMES_(T)>
 | 
			
		||||
struct tuple_size<GTEST_7_TUPLE_(T)> { static const int value = 7; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_8_TYPENAMES_(T)>
 | 
			
		||||
struct tuple_size<GTEST_8_TUPLE_(T)> { static const int value = 8; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_9_TYPENAMES_(T)>
 | 
			
		||||
struct tuple_size<GTEST_9_TUPLE_(T)> { static const int value = 9; };
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
struct tuple_size<GTEST_10_TUPLE_(T)> { static const int value = 10; };
 | 
			
		||||
 | 
			
		||||
template <int k, class Tuple>
 | 
			
		||||
struct tuple_element {
 | 
			
		||||
  typedef typename gtest_internal::TupleElement<
 | 
			
		||||
      k < (tuple_size<Tuple>::value), k, Tuple>::type type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type
 | 
			
		||||
 | 
			
		||||
// 6.1.3.4 Element access.
 | 
			
		||||
 | 
			
		||||
namespace gtest_internal {
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
class Get<0> {
 | 
			
		||||
 public:
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
 | 
			
		||||
  Field(Tuple& t) { return t.f0_; }  // NOLINT
 | 
			
		||||
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(0, Tuple))
 | 
			
		||||
  ConstField(const Tuple& t) { return t.f0_; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
class Get<1> {
 | 
			
		||||
 public:
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
 | 
			
		||||
  Field(Tuple& t) { return t.f1_; }  // NOLINT
 | 
			
		||||
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(1, Tuple))
 | 
			
		||||
  ConstField(const Tuple& t) { return t.f1_; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
class Get<2> {
 | 
			
		||||
 public:
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
 | 
			
		||||
  Field(Tuple& t) { return t.f2_; }  // NOLINT
 | 
			
		||||
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(2, Tuple))
 | 
			
		||||
  ConstField(const Tuple& t) { return t.f2_; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
class Get<3> {
 | 
			
		||||
 public:
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
 | 
			
		||||
  Field(Tuple& t) { return t.f3_; }  // NOLINT
 | 
			
		||||
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(3, Tuple))
 | 
			
		||||
  ConstField(const Tuple& t) { return t.f3_; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
class Get<4> {
 | 
			
		||||
 public:
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
 | 
			
		||||
  Field(Tuple& t) { return t.f4_; }  // NOLINT
 | 
			
		||||
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(4, Tuple))
 | 
			
		||||
  ConstField(const Tuple& t) { return t.f4_; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
class Get<5> {
 | 
			
		||||
 public:
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
 | 
			
		||||
  Field(Tuple& t) { return t.f5_; }  // NOLINT
 | 
			
		||||
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(5, Tuple))
 | 
			
		||||
  ConstField(const Tuple& t) { return t.f5_; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
class Get<6> {
 | 
			
		||||
 public:
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
 | 
			
		||||
  Field(Tuple& t) { return t.f6_; }  // NOLINT
 | 
			
		||||
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(6, Tuple))
 | 
			
		||||
  ConstField(const Tuple& t) { return t.f6_; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
class Get<7> {
 | 
			
		||||
 public:
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
 | 
			
		||||
  Field(Tuple& t) { return t.f7_; }  // NOLINT
 | 
			
		||||
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(7, Tuple))
 | 
			
		||||
  ConstField(const Tuple& t) { return t.f7_; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
class Get<8> {
 | 
			
		||||
 public:
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
 | 
			
		||||
  Field(Tuple& t) { return t.f8_; }  // NOLINT
 | 
			
		||||
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(8, Tuple))
 | 
			
		||||
  ConstField(const Tuple& t) { return t.f8_; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
class Get<9> {
 | 
			
		||||
 public:
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
 | 
			
		||||
  Field(Tuple& t) { return t.f9_; }  // NOLINT
 | 
			
		||||
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(9, Tuple))
 | 
			
		||||
  ConstField(const Tuple& t) { return t.f9_; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace gtest_internal
 | 
			
		||||
 | 
			
		||||
template <int k, GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_10_TUPLE_(T)))
 | 
			
		||||
get(GTEST_10_TUPLE_(T)& t) {
 | 
			
		||||
  return gtest_internal::Get<k>::Field(t);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <int k, GTEST_10_TYPENAMES_(T)>
 | 
			
		||||
GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k,  GTEST_10_TUPLE_(T)))
 | 
			
		||||
get(const GTEST_10_TUPLE_(T)& t) {
 | 
			
		||||
  return gtest_internal::Get<k>::ConstField(t);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 6.1.3.5 Relational operators
 | 
			
		||||
 | 
			
		||||
// We only implement == and !=, as we don't have a need for the rest yet.
 | 
			
		||||
 | 
			
		||||
namespace gtest_internal {
 | 
			
		||||
 | 
			
		||||
// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the
 | 
			
		||||
// first k fields of t1 equals the first k fields of t2.
 | 
			
		||||
// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if
 | 
			
		||||
// k1 != k2.
 | 
			
		||||
template <int kSize1, int kSize2>
 | 
			
		||||
struct SameSizeTuplePrefixComparator;
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
struct SameSizeTuplePrefixComparator<0, 0> {
 | 
			
		||||
  template <class Tuple1, class Tuple2>
 | 
			
		||||
  static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) {
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <int k>
 | 
			
		||||
struct SameSizeTuplePrefixComparator<k, k> {
 | 
			
		||||
  template <class Tuple1, class Tuple2>
 | 
			
		||||
  static bool Eq(const Tuple1& t1, const Tuple2& t2) {
 | 
			
		||||
    return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) &&
 | 
			
		||||
        ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace gtest_internal
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
 | 
			
		||||
inline bool operator==(const GTEST_10_TUPLE_(T)& t,
 | 
			
		||||
                       const GTEST_10_TUPLE_(U)& u) {
 | 
			
		||||
  return gtest_internal::SameSizeTuplePrefixComparator<
 | 
			
		||||
      tuple_size<GTEST_10_TUPLE_(T)>::value,
 | 
			
		||||
      tuple_size<GTEST_10_TUPLE_(U)>::value>::Eq(t, u);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <GTEST_10_TYPENAMES_(T), GTEST_10_TYPENAMES_(U)>
 | 
			
		||||
inline bool operator!=(const GTEST_10_TUPLE_(T)& t,
 | 
			
		||||
                       const GTEST_10_TUPLE_(U)& u) { return !(t == u); }
 | 
			
		||||
 | 
			
		||||
// 6.1.4 Pairs.
 | 
			
		||||
// Unimplemented.
 | 
			
		||||
 | 
			
		||||
}  // namespace tr1
 | 
			
		||||
}  // namespace std
 | 
			
		||||
 | 
			
		||||
#undef GTEST_0_TUPLE_
 | 
			
		||||
#undef GTEST_1_TUPLE_
 | 
			
		||||
#undef GTEST_2_TUPLE_
 | 
			
		||||
#undef GTEST_3_TUPLE_
 | 
			
		||||
#undef GTEST_4_TUPLE_
 | 
			
		||||
#undef GTEST_5_TUPLE_
 | 
			
		||||
#undef GTEST_6_TUPLE_
 | 
			
		||||
#undef GTEST_7_TUPLE_
 | 
			
		||||
#undef GTEST_8_TUPLE_
 | 
			
		||||
#undef GTEST_9_TUPLE_
 | 
			
		||||
#undef GTEST_10_TUPLE_
 | 
			
		||||
 | 
			
		||||
#undef GTEST_0_TYPENAMES_
 | 
			
		||||
#undef GTEST_1_TYPENAMES_
 | 
			
		||||
#undef GTEST_2_TYPENAMES_
 | 
			
		||||
#undef GTEST_3_TYPENAMES_
 | 
			
		||||
#undef GTEST_4_TYPENAMES_
 | 
			
		||||
#undef GTEST_5_TYPENAMES_
 | 
			
		||||
#undef GTEST_6_TYPENAMES_
 | 
			
		||||
#undef GTEST_7_TYPENAMES_
 | 
			
		||||
#undef GTEST_8_TYPENAMES_
 | 
			
		||||
#undef GTEST_9_TYPENAMES_
 | 
			
		||||
#undef GTEST_10_TYPENAMES_
 | 
			
		||||
 | 
			
		||||
#undef GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
#undef GTEST_BY_REF_
 | 
			
		||||
#undef GTEST_ADD_REF_
 | 
			
		||||
#undef GTEST_TUPLE_ELEMENT_
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
 | 
			
		||||
							
								
								
									
										336
									
								
								third_party/googletest/src/include/gtest/internal/gtest-tuple.h.pump
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										336
									
								
								third_party/googletest/src/include/gtest/internal/gtest-tuple.h.pump
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,336 @@
 | 
			
		||||
$$ -*- mode: c++; -*-
 | 
			
		||||
$var n = 10  $$ Maximum number of tuple fields we want to support.
 | 
			
		||||
$$ This meta comment fixes auto-indentation in Emacs. }}
 | 
			
		||||
// Copyright 2009 Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: wan@google.com (Zhanyong Wan)
 | 
			
		||||
 | 
			
		||||
// Implements a subset of TR1 tuple needed by Google Test and Google Mock.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
 | 
			
		||||
 | 
			
		||||
#include <utility>  // For ::std::pair.
 | 
			
		||||
 | 
			
		||||
// The compiler used in Symbian has a bug that prevents us from declaring the
 | 
			
		||||
// tuple template as a friend (it complains that tuple is redefined).  This
 | 
			
		||||
// hack bypasses the bug by declaring the members that should otherwise be
 | 
			
		||||
// private as public.
 | 
			
		||||
// Sun Studio versions < 12 also have the above bug.
 | 
			
		||||
#if defined(__SYMBIAN32__) || (defined(__SUNPRO_CC) && __SUNPRO_CC < 0x590)
 | 
			
		||||
# define GTEST_DECLARE_TUPLE_AS_FRIEND_ public:
 | 
			
		||||
#else
 | 
			
		||||
# define GTEST_DECLARE_TUPLE_AS_FRIEND_ \
 | 
			
		||||
    template <GTEST_$(n)_TYPENAMES_(U)> friend class tuple; \
 | 
			
		||||
   private:
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$range i 0..n-1
 | 
			
		||||
$range j 0..n
 | 
			
		||||
$range k 1..n
 | 
			
		||||
// GTEST_n_TUPLE_(T) is the type of an n-tuple.
 | 
			
		||||
#define GTEST_0_TUPLE_(T) tuple<>
 | 
			
		||||
 | 
			
		||||
$for k [[
 | 
			
		||||
$range m 0..k-1
 | 
			
		||||
$range m2 k..n-1
 | 
			
		||||
#define GTEST_$(k)_TUPLE_(T) tuple<$for m, [[T##$m]]$for m2 [[, void]]>
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
// GTEST_n_TYPENAMES_(T) declares a list of n typenames.
 | 
			
		||||
 | 
			
		||||
$for j [[
 | 
			
		||||
$range m 0..j-1
 | 
			
		||||
#define GTEST_$(j)_TYPENAMES_(T) $for m, [[typename T##$m]]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
// In theory, defining stuff in the ::std namespace is undefined
 | 
			
		||||
// behavior.  We can do this as we are playing the role of a standard
 | 
			
		||||
// library vendor.
 | 
			
		||||
namespace std {
 | 
			
		||||
namespace tr1 {
 | 
			
		||||
 | 
			
		||||
template <$for i, [[typename T$i = void]]>
 | 
			
		||||
class tuple;
 | 
			
		||||
 | 
			
		||||
// Anything in namespace gtest_internal is Google Test's INTERNAL
 | 
			
		||||
// IMPLEMENTATION DETAIL and MUST NOT BE USED DIRECTLY in user code.
 | 
			
		||||
namespace gtest_internal {
 | 
			
		||||
 | 
			
		||||
// ByRef<T>::type is T if T is a reference; otherwise it's const T&.
 | 
			
		||||
template <typename T>
 | 
			
		||||
struct ByRef { typedef const T& type; };  // NOLINT
 | 
			
		||||
template <typename T>
 | 
			
		||||
struct ByRef<T&> { typedef T& type; };  // NOLINT
 | 
			
		||||
 | 
			
		||||
// A handy wrapper for ByRef.
 | 
			
		||||
#define GTEST_BY_REF_(T) typename ::std::tr1::gtest_internal::ByRef<T>::type
 | 
			
		||||
 | 
			
		||||
// AddRef<T>::type is T if T is a reference; otherwise it's T&.  This
 | 
			
		||||
// is the same as tr1::add_reference<T>::type.
 | 
			
		||||
template <typename T>
 | 
			
		||||
struct AddRef { typedef T& type; };  // NOLINT
 | 
			
		||||
template <typename T>
 | 
			
		||||
struct AddRef<T&> { typedef T& type; };  // NOLINT
 | 
			
		||||
 | 
			
		||||
// A handy wrapper for AddRef.
 | 
			
		||||
#define GTEST_ADD_REF_(T) typename ::std::tr1::gtest_internal::AddRef<T>::type
 | 
			
		||||
 | 
			
		||||
// A helper for implementing get<k>().
 | 
			
		||||
template <int k> class Get;
 | 
			
		||||
 | 
			
		||||
// A helper for implementing tuple_element<k, T>.  kIndexValid is true
 | 
			
		||||
// iff k < the number of fields in tuple type T.
 | 
			
		||||
template <bool kIndexValid, int kIndex, class Tuple>
 | 
			
		||||
struct TupleElement;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$for i [[
 | 
			
		||||
template <GTEST_$(n)_TYPENAMES_(T)>
 | 
			
		||||
struct TupleElement<true, $i, GTEST_$(n)_TUPLE_(T)> [[]]
 | 
			
		||||
{ typedef T$i type; };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
}  // namespace gtest_internal
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
class tuple<> {
 | 
			
		||||
 public:
 | 
			
		||||
  tuple() {}
 | 
			
		||||
  tuple(const tuple& /* t */)  {}
 | 
			
		||||
  tuple& operator=(const tuple& /* t */) { return *this; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$for k [[
 | 
			
		||||
$range m 0..k-1
 | 
			
		||||
template <GTEST_$(k)_TYPENAMES_(T)>
 | 
			
		||||
class $if k < n [[GTEST_$(k)_TUPLE_(T)]] $else [[tuple]] {
 | 
			
		||||
 public:
 | 
			
		||||
  template <int k> friend class gtest_internal::Get;
 | 
			
		||||
 | 
			
		||||
  tuple() : $for m, [[f$(m)_()]] {}
 | 
			
		||||
 | 
			
		||||
  explicit tuple($for m, [[GTEST_BY_REF_(T$m) f$m]]) : [[]]
 | 
			
		||||
$for m, [[f$(m)_(f$m)]] {}
 | 
			
		||||
 | 
			
		||||
  tuple(const tuple& t) : $for m, [[f$(m)_(t.f$(m)_)]] {}
 | 
			
		||||
 | 
			
		||||
  template <GTEST_$(k)_TYPENAMES_(U)>
 | 
			
		||||
  tuple(const GTEST_$(k)_TUPLE_(U)& t) : $for m, [[f$(m)_(t.f$(m)_)]] {}
 | 
			
		||||
 | 
			
		||||
$if k == 2 [[
 | 
			
		||||
  template <typename U0, typename U1>
 | 
			
		||||
  tuple(const ::std::pair<U0, U1>& p) : f0_(p.first), f1_(p.second) {}
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
  tuple& operator=(const tuple& t) { return CopyFrom(t); }
 | 
			
		||||
 | 
			
		||||
  template <GTEST_$(k)_TYPENAMES_(U)>
 | 
			
		||||
  tuple& operator=(const GTEST_$(k)_TUPLE_(U)& t) {
 | 
			
		||||
    return CopyFrom(t);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
$if k == 2 [[
 | 
			
		||||
  template <typename U0, typename U1>
 | 
			
		||||
  tuple& operator=(const ::std::pair<U0, U1>& p) {
 | 
			
		||||
    f0_ = p.first;
 | 
			
		||||
    f1_ = p.second;
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
  GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
 | 
			
		||||
  template <GTEST_$(k)_TYPENAMES_(U)>
 | 
			
		||||
  tuple& CopyFrom(const GTEST_$(k)_TUPLE_(U)& t) {
 | 
			
		||||
 | 
			
		||||
$for m [[
 | 
			
		||||
    f$(m)_ = t.f$(m)_;
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
    return *this;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$for m [[
 | 
			
		||||
  T$m f$(m)_;
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
// 6.1.3.2 Tuple creation functions.
 | 
			
		||||
 | 
			
		||||
// Known limitations: we don't support passing an
 | 
			
		||||
// std::tr1::reference_wrapper<T> to make_tuple().  And we don't
 | 
			
		||||
// implement tie().
 | 
			
		||||
 | 
			
		||||
inline tuple<> make_tuple() { return tuple<>(); }
 | 
			
		||||
 | 
			
		||||
$for k [[
 | 
			
		||||
$range m 0..k-1
 | 
			
		||||
 | 
			
		||||
template <GTEST_$(k)_TYPENAMES_(T)>
 | 
			
		||||
inline GTEST_$(k)_TUPLE_(T) make_tuple($for m, [[const T$m& f$m]]) {
 | 
			
		||||
  return GTEST_$(k)_TUPLE_(T)($for m, [[f$m]]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
// 6.1.3.3 Tuple helper classes.
 | 
			
		||||
 | 
			
		||||
template <typename Tuple> struct tuple_size;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$for j [[
 | 
			
		||||
template <GTEST_$(j)_TYPENAMES_(T)>
 | 
			
		||||
struct tuple_size<GTEST_$(j)_TUPLE_(T)> { static const int value = $j; };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
template <int k, class Tuple>
 | 
			
		||||
struct tuple_element {
 | 
			
		||||
  typedef typename gtest_internal::TupleElement<
 | 
			
		||||
      k < (tuple_size<Tuple>::value), k, Tuple>::type type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define GTEST_TUPLE_ELEMENT_(k, Tuple) typename tuple_element<k, Tuple >::type
 | 
			
		||||
 | 
			
		||||
// 6.1.3.4 Element access.
 | 
			
		||||
 | 
			
		||||
namespace gtest_internal {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$for i [[
 | 
			
		||||
template <>
 | 
			
		||||
class Get<$i> {
 | 
			
		||||
 public:
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_($i, Tuple))
 | 
			
		||||
  Field(Tuple& t) { return t.f$(i)_; }  // NOLINT
 | 
			
		||||
 | 
			
		||||
  template <class Tuple>
 | 
			
		||||
  static GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_($i, Tuple))
 | 
			
		||||
  ConstField(const Tuple& t) { return t.f$(i)_; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
}  // namespace gtest_internal
 | 
			
		||||
 | 
			
		||||
template <int k, GTEST_$(n)_TYPENAMES_(T)>
 | 
			
		||||
GTEST_ADD_REF_(GTEST_TUPLE_ELEMENT_(k, GTEST_$(n)_TUPLE_(T)))
 | 
			
		||||
get(GTEST_$(n)_TUPLE_(T)& t) {
 | 
			
		||||
  return gtest_internal::Get<k>::Field(t);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <int k, GTEST_$(n)_TYPENAMES_(T)>
 | 
			
		||||
GTEST_BY_REF_(GTEST_TUPLE_ELEMENT_(k,  GTEST_$(n)_TUPLE_(T)))
 | 
			
		||||
get(const GTEST_$(n)_TUPLE_(T)& t) {
 | 
			
		||||
  return gtest_internal::Get<k>::ConstField(t);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 6.1.3.5 Relational operators
 | 
			
		||||
 | 
			
		||||
// We only implement == and !=, as we don't have a need for the rest yet.
 | 
			
		||||
 | 
			
		||||
namespace gtest_internal {
 | 
			
		||||
 | 
			
		||||
// SameSizeTuplePrefixComparator<k, k>::Eq(t1, t2) returns true if the
 | 
			
		||||
// first k fields of t1 equals the first k fields of t2.
 | 
			
		||||
// SameSizeTuplePrefixComparator(k1, k2) would be a compiler error if
 | 
			
		||||
// k1 != k2.
 | 
			
		||||
template <int kSize1, int kSize2>
 | 
			
		||||
struct SameSizeTuplePrefixComparator;
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
struct SameSizeTuplePrefixComparator<0, 0> {
 | 
			
		||||
  template <class Tuple1, class Tuple2>
 | 
			
		||||
  static bool Eq(const Tuple1& /* t1 */, const Tuple2& /* t2 */) {
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <int k>
 | 
			
		||||
struct SameSizeTuplePrefixComparator<k, k> {
 | 
			
		||||
  template <class Tuple1, class Tuple2>
 | 
			
		||||
  static bool Eq(const Tuple1& t1, const Tuple2& t2) {
 | 
			
		||||
    return SameSizeTuplePrefixComparator<k - 1, k - 1>::Eq(t1, t2) &&
 | 
			
		||||
        ::std::tr1::get<k - 1>(t1) == ::std::tr1::get<k - 1>(t2);
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}  // namespace gtest_internal
 | 
			
		||||
 | 
			
		||||
template <GTEST_$(n)_TYPENAMES_(T), GTEST_$(n)_TYPENAMES_(U)>
 | 
			
		||||
inline bool operator==(const GTEST_$(n)_TUPLE_(T)& t,
 | 
			
		||||
                       const GTEST_$(n)_TUPLE_(U)& u) {
 | 
			
		||||
  return gtest_internal::SameSizeTuplePrefixComparator<
 | 
			
		||||
      tuple_size<GTEST_$(n)_TUPLE_(T)>::value,
 | 
			
		||||
      tuple_size<GTEST_$(n)_TUPLE_(U)>::value>::Eq(t, u);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <GTEST_$(n)_TYPENAMES_(T), GTEST_$(n)_TYPENAMES_(U)>
 | 
			
		||||
inline bool operator!=(const GTEST_$(n)_TUPLE_(T)& t,
 | 
			
		||||
                       const GTEST_$(n)_TUPLE_(U)& u) { return !(t == u); }
 | 
			
		||||
 | 
			
		||||
// 6.1.4 Pairs.
 | 
			
		||||
// Unimplemented.
 | 
			
		||||
 | 
			
		||||
}  // namespace tr1
 | 
			
		||||
}  // namespace std
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$for j [[
 | 
			
		||||
#undef GTEST_$(j)_TUPLE_
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$for j [[
 | 
			
		||||
#undef GTEST_$(j)_TYPENAMES_
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
#undef GTEST_DECLARE_TUPLE_AS_FRIEND_
 | 
			
		||||
#undef GTEST_BY_REF_
 | 
			
		||||
#undef GTEST_ADD_REF_
 | 
			
		||||
#undef GTEST_TUPLE_ELEMENT_
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TUPLE_H_
 | 
			
		||||
							
								
								
									
										3330
									
								
								third_party/googletest/src/include/gtest/internal/gtest-type-util.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3330
									
								
								third_party/googletest/src/include/gtest/internal/gtest-type-util.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										296
									
								
								third_party/googletest/src/include/gtest/internal/gtest-type-util.h.pump
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										296
									
								
								third_party/googletest/src/include/gtest/internal/gtest-type-util.h.pump
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,296 @@
 | 
			
		||||
$$ -*- mode: c++; -*-
 | 
			
		||||
$var n = 50  $$ Maximum length of type lists we want to support.
 | 
			
		||||
// Copyright 2008 Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: wan@google.com (Zhanyong Wan)
 | 
			
		||||
 | 
			
		||||
// Type utilities needed for implementing typed and type-parameterized
 | 
			
		||||
// tests.  This file is generated by a SCRIPT.  DO NOT EDIT BY HAND!
 | 
			
		||||
//
 | 
			
		||||
// Currently we support at most $n types in a list, and at most $n
 | 
			
		||||
// type-parameterized tests in one type-parameterized test case.
 | 
			
		||||
// Please contact googletestframework@googlegroups.com if you need
 | 
			
		||||
// more.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
 | 
			
		||||
#define GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
 | 
			
		||||
 | 
			
		||||
#include "gtest/internal/gtest-port.h"
 | 
			
		||||
#include "gtest/internal/gtest-string.h"
 | 
			
		||||
 | 
			
		||||
// #ifdef __GNUC__ is too general here.  It is possible to use gcc without using
 | 
			
		||||
// libstdc++ (which is where cxxabi.h comes from).
 | 
			
		||||
# ifdef __GLIBCXX__
 | 
			
		||||
#  include <cxxabi.h>
 | 
			
		||||
# elif defined(__HP_aCC)
 | 
			
		||||
#  include <acxx_demangle.h>
 | 
			
		||||
# endif  // __GLIBCXX__
 | 
			
		||||
 | 
			
		||||
namespace testing {
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
// GetTypeName<T>() returns a human-readable name of type T.
 | 
			
		||||
// NB: This function is also used in Google Mock, so don't move it inside of
 | 
			
		||||
// the typed-test-only section below.
 | 
			
		||||
template <typename T>
 | 
			
		||||
String GetTypeName() {
 | 
			
		||||
# if GTEST_HAS_RTTI
 | 
			
		||||
 | 
			
		||||
  const char* const name = typeid(T).name();
 | 
			
		||||
#  if defined(__GLIBCXX__) || defined(__HP_aCC)
 | 
			
		||||
  int status = 0;
 | 
			
		||||
  // gcc's implementation of typeid(T).name() mangles the type name,
 | 
			
		||||
  // so we have to demangle it.
 | 
			
		||||
#   ifdef __GLIBCXX__
 | 
			
		||||
  using abi::__cxa_demangle;
 | 
			
		||||
#   endif // __GLIBCXX__
 | 
			
		||||
  char* const readable_name = __cxa_demangle(name, 0, 0, &status);
 | 
			
		||||
  const String name_str(status == 0 ? readable_name : name);
 | 
			
		||||
  free(readable_name);
 | 
			
		||||
  return name_str;
 | 
			
		||||
#  else
 | 
			
		||||
  return name;
 | 
			
		||||
#  endif  // __GLIBCXX__ || __HP_aCC
 | 
			
		||||
 | 
			
		||||
# else
 | 
			
		||||
 | 
			
		||||
  return "<type>";
 | 
			
		||||
 | 
			
		||||
# endif  // GTEST_HAS_RTTI
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
 | 
			
		||||
 | 
			
		||||
// AssertyTypeEq<T1, T2>::type is defined iff T1 and T2 are the same
 | 
			
		||||
// type.  This can be used as a compile-time assertion to ensure that
 | 
			
		||||
// two types are equal.
 | 
			
		||||
 | 
			
		||||
template <typename T1, typename T2>
 | 
			
		||||
struct AssertTypeEq;
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
struct AssertTypeEq<T, T> {
 | 
			
		||||
  typedef bool type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// A unique type used as the default value for the arguments of class
 | 
			
		||||
// template Types.  This allows us to simulate variadic templates
 | 
			
		||||
// (e.g. Types<int>, Type<int, double>, and etc), which C++ doesn't
 | 
			
		||||
// support directly.
 | 
			
		||||
struct None {};
 | 
			
		||||
 | 
			
		||||
// The following family of struct and struct templates are used to
 | 
			
		||||
// represent type lists.  In particular, TypesN<T1, T2, ..., TN>
 | 
			
		||||
// represents a type list with N types (T1, T2, ..., and TN) in it.
 | 
			
		||||
// Except for Types0, every struct in the family has two member types:
 | 
			
		||||
// Head for the first type in the list, and Tail for the rest of the
 | 
			
		||||
// list.
 | 
			
		||||
 | 
			
		||||
// The empty type list.
 | 
			
		||||
struct Types0 {};
 | 
			
		||||
 | 
			
		||||
// Type lists of length 1, 2, 3, and so on.
 | 
			
		||||
 | 
			
		||||
template <typename T1>
 | 
			
		||||
struct Types1 {
 | 
			
		||||
  typedef T1 Head;
 | 
			
		||||
  typedef Types0 Tail;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
$range i 2..n
 | 
			
		||||
 | 
			
		||||
$for i [[
 | 
			
		||||
$range j 1..i
 | 
			
		||||
$range k 2..i
 | 
			
		||||
template <$for j, [[typename T$j]]>
 | 
			
		||||
struct Types$i {
 | 
			
		||||
  typedef T1 Head;
 | 
			
		||||
  typedef Types$(i-1)<$for k, [[T$k]]> Tail;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
}  // namespace internal
 | 
			
		||||
 | 
			
		||||
// We don't want to require the users to write TypesN<...> directly,
 | 
			
		||||
// as that would require them to count the length.  Types<...> is much
 | 
			
		||||
// easier to write, but generates horrible messages when there is a
 | 
			
		||||
// compiler error, as gcc insists on printing out each template
 | 
			
		||||
// argument, even if it has the default value (this means Types<int>
 | 
			
		||||
// will appear as Types<int, None, None, ..., None> in the compiler
 | 
			
		||||
// errors).
 | 
			
		||||
//
 | 
			
		||||
// Our solution is to combine the best part of the two approaches: a
 | 
			
		||||
// user would write Types<T1, ..., TN>, and Google Test will translate
 | 
			
		||||
// that to TypesN<T1, ..., TN> internally to make error messages
 | 
			
		||||
// readable.  The translation is done by the 'type' member of the
 | 
			
		||||
// Types template.
 | 
			
		||||
 | 
			
		||||
$range i 1..n
 | 
			
		||||
template <$for i, [[typename T$i = internal::None]]>
 | 
			
		||||
struct Types {
 | 
			
		||||
  typedef internal::Types$n<$for i, [[T$i]]> type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
struct Types<$for i, [[internal::None]]> {
 | 
			
		||||
  typedef internal::Types0 type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
$range i 1..n-1
 | 
			
		||||
$for i [[
 | 
			
		||||
$range j 1..i
 | 
			
		||||
$range k i+1..n
 | 
			
		||||
template <$for j, [[typename T$j]]>
 | 
			
		||||
struct Types<$for j, [[T$j]]$for k[[, internal::None]]> {
 | 
			
		||||
  typedef internal::Types$i<$for j, [[T$j]]> type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
# define GTEST_TEMPLATE_ template <typename T> class
 | 
			
		||||
 | 
			
		||||
// The template "selector" struct TemplateSel<Tmpl> is used to
 | 
			
		||||
// represent Tmpl, which must be a class template with one type
 | 
			
		||||
// parameter, as a type.  TemplateSel<Tmpl>::Bind<T>::type is defined
 | 
			
		||||
// as the type Tmpl<T>.  This allows us to actually instantiate the
 | 
			
		||||
// template "selected" by TemplateSel<Tmpl>.
 | 
			
		||||
//
 | 
			
		||||
// This trick is necessary for simulating typedef for class templates,
 | 
			
		||||
// which C++ doesn't support directly.
 | 
			
		||||
template <GTEST_TEMPLATE_ Tmpl>
 | 
			
		||||
struct TemplateSel {
 | 
			
		||||
  template <typename T>
 | 
			
		||||
  struct Bind {
 | 
			
		||||
    typedef Tmpl<T> type;
 | 
			
		||||
  };
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
# define GTEST_BIND_(TmplSel, T) \
 | 
			
		||||
  TmplSel::template Bind<T>::type
 | 
			
		||||
 | 
			
		||||
// A unique struct template used as the default value for the
 | 
			
		||||
// arguments of class template Templates.  This allows us to simulate
 | 
			
		||||
// variadic templates (e.g. Templates<int>, Templates<int, double>,
 | 
			
		||||
// and etc), which C++ doesn't support directly.
 | 
			
		||||
template <typename T>
 | 
			
		||||
struct NoneT {};
 | 
			
		||||
 | 
			
		||||
// The following family of struct and struct templates are used to
 | 
			
		||||
// represent template lists.  In particular, TemplatesN<T1, T2, ...,
 | 
			
		||||
// TN> represents a list of N templates (T1, T2, ..., and TN).  Except
 | 
			
		||||
// for Templates0, every struct in the family has two member types:
 | 
			
		||||
// Head for the selector of the first template in the list, and Tail
 | 
			
		||||
// for the rest of the list.
 | 
			
		||||
 | 
			
		||||
// The empty template list.
 | 
			
		||||
struct Templates0 {};
 | 
			
		||||
 | 
			
		||||
// Template lists of length 1, 2, 3, and so on.
 | 
			
		||||
 | 
			
		||||
template <GTEST_TEMPLATE_ T1>
 | 
			
		||||
struct Templates1 {
 | 
			
		||||
  typedef TemplateSel<T1> Head;
 | 
			
		||||
  typedef Templates0 Tail;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
$range i 2..n
 | 
			
		||||
 | 
			
		||||
$for i [[
 | 
			
		||||
$range j 1..i
 | 
			
		||||
$range k 2..i
 | 
			
		||||
template <$for j, [[GTEST_TEMPLATE_ T$j]]>
 | 
			
		||||
struct Templates$i {
 | 
			
		||||
  typedef TemplateSel<T1> Head;
 | 
			
		||||
  typedef Templates$(i-1)<$for k, [[T$k]]> Tail;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
// We don't want to require the users to write TemplatesN<...> directly,
 | 
			
		||||
// as that would require them to count the length.  Templates<...> is much
 | 
			
		||||
// easier to write, but generates horrible messages when there is a
 | 
			
		||||
// compiler error, as gcc insists on printing out each template
 | 
			
		||||
// argument, even if it has the default value (this means Templates<list>
 | 
			
		||||
// will appear as Templates<list, NoneT, NoneT, ..., NoneT> in the compiler
 | 
			
		||||
// errors).
 | 
			
		||||
//
 | 
			
		||||
// Our solution is to combine the best part of the two approaches: a
 | 
			
		||||
// user would write Templates<T1, ..., TN>, and Google Test will translate
 | 
			
		||||
// that to TemplatesN<T1, ..., TN> internally to make error messages
 | 
			
		||||
// readable.  The translation is done by the 'type' member of the
 | 
			
		||||
// Templates template.
 | 
			
		||||
 | 
			
		||||
$range i 1..n
 | 
			
		||||
template <$for i, [[GTEST_TEMPLATE_ T$i = NoneT]]>
 | 
			
		||||
struct Templates {
 | 
			
		||||
  typedef Templates$n<$for i, [[T$i]]> type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <>
 | 
			
		||||
struct Templates<$for i, [[NoneT]]> {
 | 
			
		||||
  typedef Templates0 type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
$range i 1..n-1
 | 
			
		||||
$for i [[
 | 
			
		||||
$range j 1..i
 | 
			
		||||
$range k i+1..n
 | 
			
		||||
template <$for j, [[GTEST_TEMPLATE_ T$j]]>
 | 
			
		||||
struct Templates<$for j, [[T$j]]$for k[[, NoneT]]> {
 | 
			
		||||
  typedef Templates$i<$for j, [[T$j]]> type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
// The TypeList template makes it possible to use either a single type
 | 
			
		||||
// or a Types<...> list in TYPED_TEST_CASE() and
 | 
			
		||||
// INSTANTIATE_TYPED_TEST_CASE_P().
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
struct TypeList { typedef Types1<T> type; };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
$range i 1..n
 | 
			
		||||
template <$for i, [[typename T$i]]>
 | 
			
		||||
struct TypeList<Types<$for i, [[T$i]]> > {
 | 
			
		||||
  typedef typename Types<$for i, [[T$i]]>::type type;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_HAS_TYPED_TEST || GTEST_HAS_TYPED_TEST_P
 | 
			
		||||
 | 
			
		||||
}  // namespace internal
 | 
			
		||||
}  // namespace testing
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_INCLUDE_GTEST_INTERNAL_GTEST_TYPE_UTIL_H_
 | 
			
		||||
							
								
								
									
										363
									
								
								third_party/googletest/src/m4/acx_pthread.m4
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										363
									
								
								third_party/googletest/src/m4/acx_pthread.m4
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,363 @@
 | 
			
		||||
# This was retrieved from
 | 
			
		||||
#    http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?revision=1277&root=avahi
 | 
			
		||||
# See also (perhaps for new versions?)
 | 
			
		||||
#    http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?root=avahi
 | 
			
		||||
#
 | 
			
		||||
# We've rewritten the inconsistency check code (from avahi), to work
 | 
			
		||||
# more broadly.  In particular, it no longer assumes ld accepts -zdefs.
 | 
			
		||||
# This caused a restructing of the code, but the functionality has only
 | 
			
		||||
# changed a little.
 | 
			
		||||
 | 
			
		||||
dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
 | 
			
		||||
dnl
 | 
			
		||||
dnl @summary figure out how to build C programs using POSIX threads
 | 
			
		||||
dnl
 | 
			
		||||
dnl This macro figures out how to build C programs using POSIX threads.
 | 
			
		||||
dnl It sets the PTHREAD_LIBS output variable to the threads library and
 | 
			
		||||
dnl linker flags, and the PTHREAD_CFLAGS output variable to any special
 | 
			
		||||
dnl C compiler flags that are needed. (The user can also force certain
 | 
			
		||||
dnl compiler flags/libs to be tested by setting these environment
 | 
			
		||||
dnl variables.)
 | 
			
		||||
dnl
 | 
			
		||||
dnl Also sets PTHREAD_CC to any special C compiler that is needed for
 | 
			
		||||
dnl multi-threaded programs (defaults to the value of CC otherwise).
 | 
			
		||||
dnl (This is necessary on AIX to use the special cc_r compiler alias.)
 | 
			
		||||
dnl
 | 
			
		||||
dnl NOTE: You are assumed to not only compile your program with these
 | 
			
		||||
dnl flags, but also link it with them as well. e.g. you should link
 | 
			
		||||
dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS
 | 
			
		||||
dnl $LIBS
 | 
			
		||||
dnl
 | 
			
		||||
dnl If you are only building threads programs, you may wish to use
 | 
			
		||||
dnl these variables in your default LIBS, CFLAGS, and CC:
 | 
			
		||||
dnl
 | 
			
		||||
dnl        LIBS="$PTHREAD_LIBS $LIBS"
 | 
			
		||||
dnl        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 | 
			
		||||
dnl        CC="$PTHREAD_CC"
 | 
			
		||||
dnl
 | 
			
		||||
dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute
 | 
			
		||||
dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to
 | 
			
		||||
dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
 | 
			
		||||
dnl
 | 
			
		||||
dnl ACTION-IF-FOUND is a list of shell commands to run if a threads
 | 
			
		||||
dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to
 | 
			
		||||
dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the
 | 
			
		||||
dnl default action will define HAVE_PTHREAD.
 | 
			
		||||
dnl
 | 
			
		||||
dnl Please let the authors know if this macro fails on any platform, or
 | 
			
		||||
dnl if you have any other suggestions or comments. This macro was based
 | 
			
		||||
dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with
 | 
			
		||||
dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros
 | 
			
		||||
dnl posted by Alejandro Forero Cuervo to the autoconf macro repository.
 | 
			
		||||
dnl We are also grateful for the helpful feedback of numerous users.
 | 
			
		||||
dnl
 | 
			
		||||
dnl @category InstalledPackages
 | 
			
		||||
dnl @author Steven G. Johnson <stevenj@alum.mit.edu>
 | 
			
		||||
dnl @version 2006-05-29
 | 
			
		||||
dnl @license GPLWithACException
 | 
			
		||||
dnl 
 | 
			
		||||
dnl Checks for GCC shared/pthread inconsistency based on work by
 | 
			
		||||
dnl Marcin Owsiany <marcin@owsiany.pl>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([ACX_PTHREAD], [
 | 
			
		||||
AC_REQUIRE([AC_CANONICAL_HOST])
 | 
			
		||||
AC_LANG_SAVE
 | 
			
		||||
AC_LANG_C
 | 
			
		||||
acx_pthread_ok=no
 | 
			
		||||
 | 
			
		||||
# We used to check for pthread.h first, but this fails if pthread.h
 | 
			
		||||
# requires special compiler flags (e.g. on True64 or Sequent).
 | 
			
		||||
# It gets checked for in the link test anyway.
 | 
			
		||||
 | 
			
		||||
# First of all, check if the user has set any of the PTHREAD_LIBS,
 | 
			
		||||
# etcetera environment variables, and if threads linking works using
 | 
			
		||||
# them:
 | 
			
		||||
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
 | 
			
		||||
        save_CFLAGS="$CFLAGS"
 | 
			
		||||
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 | 
			
		||||
        save_LIBS="$LIBS"
 | 
			
		||||
        LIBS="$PTHREAD_LIBS $LIBS"
 | 
			
		||||
        AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
 | 
			
		||||
        AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes)
 | 
			
		||||
        AC_MSG_RESULT($acx_pthread_ok)
 | 
			
		||||
        if test x"$acx_pthread_ok" = xno; then
 | 
			
		||||
                PTHREAD_LIBS=""
 | 
			
		||||
                PTHREAD_CFLAGS=""
 | 
			
		||||
        fi
 | 
			
		||||
        LIBS="$save_LIBS"
 | 
			
		||||
        CFLAGS="$save_CFLAGS"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# We must check for the threads library under a number of different
 | 
			
		||||
# names; the ordering is very important because some systems
 | 
			
		||||
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
 | 
			
		||||
# libraries is broken (non-POSIX).
 | 
			
		||||
 | 
			
		||||
# Create a list of thread flags to try.  Items starting with a "-" are
 | 
			
		||||
# C compiler flags, and other items are library names, except for "none"
 | 
			
		||||
# which indicates that we try without any flags at all, and "pthread-config"
 | 
			
		||||
# which is a program returning the flags for the Pth emulation library.
 | 
			
		||||
 | 
			
		||||
acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
 | 
			
		||||
 | 
			
		||||
# The ordering *is* (sometimes) important.  Some notes on the
 | 
			
		||||
# individual items follow:
 | 
			
		||||
 | 
			
		||||
# pthreads: AIX (must check this before -lpthread)
 | 
			
		||||
# none: in case threads are in libc; should be tried before -Kthread and
 | 
			
		||||
#       other compiler flags to prevent continual compiler warnings
 | 
			
		||||
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
 | 
			
		||||
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
 | 
			
		||||
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
 | 
			
		||||
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
 | 
			
		||||
# -pthreads: Solaris/gcc
 | 
			
		||||
# -mthreads: Mingw32/gcc, Lynx/gcc
 | 
			
		||||
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
 | 
			
		||||
#      doesn't hurt to check since this sometimes defines pthreads too;
 | 
			
		||||
#      also defines -D_REENTRANT)
 | 
			
		||||
#      ... -mt is also the pthreads flag for HP/aCC
 | 
			
		||||
# pthread: Linux, etcetera
 | 
			
		||||
# --thread-safe: KAI C++
 | 
			
		||||
# pthread-config: use pthread-config program (for GNU Pth library)
 | 
			
		||||
 | 
			
		||||
case "${host_cpu}-${host_os}" in
 | 
			
		||||
        *solaris*)
 | 
			
		||||
 | 
			
		||||
        # On Solaris (at least, for some versions), libc contains stubbed
 | 
			
		||||
        # (non-functional) versions of the pthreads routines, so link-based
 | 
			
		||||
        # tests will erroneously succeed.  (We need to link with -pthreads/-mt/
 | 
			
		||||
        # -lpthread.)  (The stubs are missing pthread_cleanup_push, or rather
 | 
			
		||||
        # a function called by this macro, so we could check for that, but
 | 
			
		||||
        # who knows whether they'll stub that too in a future libc.)  So,
 | 
			
		||||
        # we'll just look for -pthreads and -lpthread first:
 | 
			
		||||
 | 
			
		||||
        acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags"
 | 
			
		||||
        ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
if test x"$acx_pthread_ok" = xno; then
 | 
			
		||||
for flag in $acx_pthread_flags; do
 | 
			
		||||
 | 
			
		||||
        case $flag in
 | 
			
		||||
                none)
 | 
			
		||||
                AC_MSG_CHECKING([whether pthreads work without any flags])
 | 
			
		||||
                ;;
 | 
			
		||||
 | 
			
		||||
                -*)
 | 
			
		||||
                AC_MSG_CHECKING([whether pthreads work with $flag])
 | 
			
		||||
                PTHREAD_CFLAGS="$flag"
 | 
			
		||||
                ;;
 | 
			
		||||
 | 
			
		||||
		pthread-config)
 | 
			
		||||
		AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no)
 | 
			
		||||
		if test x"$acx_pthread_config" = xno; then continue; fi
 | 
			
		||||
		PTHREAD_CFLAGS="`pthread-config --cflags`"
 | 
			
		||||
		PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
 | 
			
		||||
		;;
 | 
			
		||||
 | 
			
		||||
                *)
 | 
			
		||||
                AC_MSG_CHECKING([for the pthreads library -l$flag])
 | 
			
		||||
                PTHREAD_LIBS="-l$flag"
 | 
			
		||||
                ;;
 | 
			
		||||
        esac
 | 
			
		||||
 | 
			
		||||
        save_LIBS="$LIBS"
 | 
			
		||||
        save_CFLAGS="$CFLAGS"
 | 
			
		||||
        LIBS="$PTHREAD_LIBS $LIBS"
 | 
			
		||||
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 | 
			
		||||
 | 
			
		||||
        # Check for various functions.  We must include pthread.h,
 | 
			
		||||
        # since some functions may be macros.  (On the Sequent, we
 | 
			
		||||
        # need a special flag -Kthread to make this header compile.)
 | 
			
		||||
        # We check for pthread_join because it is in -lpthread on IRIX
 | 
			
		||||
        # while pthread_create is in libc.  We check for pthread_attr_init
 | 
			
		||||
        # due to DEC craziness with -lpthreads.  We check for
 | 
			
		||||
        # pthread_cleanup_push because it is one of the few pthread
 | 
			
		||||
        # functions on Solaris that doesn't have a non-functional libc stub.
 | 
			
		||||
        # We try pthread_create on general principles.
 | 
			
		||||
        AC_TRY_LINK([#include <pthread.h>],
 | 
			
		||||
                    [pthread_t th; pthread_join(th, 0);
 | 
			
		||||
                     pthread_attr_init(0); pthread_cleanup_push(0, 0);
 | 
			
		||||
                     pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
 | 
			
		||||
                    [acx_pthread_ok=yes])
 | 
			
		||||
 | 
			
		||||
        LIBS="$save_LIBS"
 | 
			
		||||
        CFLAGS="$save_CFLAGS"
 | 
			
		||||
 | 
			
		||||
        AC_MSG_RESULT($acx_pthread_ok)
 | 
			
		||||
        if test "x$acx_pthread_ok" = xyes; then
 | 
			
		||||
                break;
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        PTHREAD_LIBS=""
 | 
			
		||||
        PTHREAD_CFLAGS=""
 | 
			
		||||
done
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Various other checks:
 | 
			
		||||
if test "x$acx_pthread_ok" = xyes; then
 | 
			
		||||
        save_LIBS="$LIBS"
 | 
			
		||||
        LIBS="$PTHREAD_LIBS $LIBS"
 | 
			
		||||
        save_CFLAGS="$CFLAGS"
 | 
			
		||||
        CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
 | 
			
		||||
 | 
			
		||||
        # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
 | 
			
		||||
	AC_MSG_CHECKING([for joinable pthread attribute])
 | 
			
		||||
	attr_name=unknown
 | 
			
		||||
	for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
 | 
			
		||||
	    AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
 | 
			
		||||
                        [attr_name=$attr; break])
 | 
			
		||||
	done
 | 
			
		||||
        AC_MSG_RESULT($attr_name)
 | 
			
		||||
        if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
 | 
			
		||||
            AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
 | 
			
		||||
                               [Define to necessary symbol if this constant
 | 
			
		||||
                                uses a non-standard name on your system.])
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        AC_MSG_CHECKING([if more special flags are required for pthreads])
 | 
			
		||||
        flag=no
 | 
			
		||||
        case "${host_cpu}-${host_os}" in
 | 
			
		||||
            *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
 | 
			
		||||
            *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
 | 
			
		||||
        esac
 | 
			
		||||
        AC_MSG_RESULT(${flag})
 | 
			
		||||
        if test "x$flag" != xno; then
 | 
			
		||||
            PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
 | 
			
		||||
        fi
 | 
			
		||||
 | 
			
		||||
        LIBS="$save_LIBS"
 | 
			
		||||
        CFLAGS="$save_CFLAGS"
 | 
			
		||||
        # More AIX lossage: must compile with xlc_r or cc_r
 | 
			
		||||
	if test x"$GCC" != xyes; then
 | 
			
		||||
          AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
 | 
			
		||||
        else
 | 
			
		||||
          PTHREAD_CC=$CC
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# The next part tries to detect GCC inconsistency with -shared on some
 | 
			
		||||
	# architectures and systems. The problem is that in certain
 | 
			
		||||
	# configurations, when -shared is specified, GCC "forgets" to
 | 
			
		||||
	# internally use various flags which are still necessary.
 | 
			
		||||
	
 | 
			
		||||
	#
 | 
			
		||||
	# Prepare the flags
 | 
			
		||||
	#
 | 
			
		||||
	save_CFLAGS="$CFLAGS"
 | 
			
		||||
	save_LIBS="$LIBS"
 | 
			
		||||
	save_CC="$CC"
 | 
			
		||||
	
 | 
			
		||||
	# Try with the flags determined by the earlier checks.
 | 
			
		||||
	#
 | 
			
		||||
	# -Wl,-z,defs forces link-time symbol resolution, so that the
 | 
			
		||||
	# linking checks with -shared actually have any value
 | 
			
		||||
	#
 | 
			
		||||
	# FIXME: -fPIC is required for -shared on many architectures,
 | 
			
		||||
	# so we specify it here, but the right way would probably be to
 | 
			
		||||
	# properly detect whether it is actually required.
 | 
			
		||||
	CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS"
 | 
			
		||||
	LIBS="$PTHREAD_LIBS $LIBS"
 | 
			
		||||
	CC="$PTHREAD_CC"
 | 
			
		||||
	
 | 
			
		||||
	# In order not to create several levels of indentation, we test
 | 
			
		||||
	# the value of "$done" until we find the cure or run out of ideas.
 | 
			
		||||
	done="no"
 | 
			
		||||
	
 | 
			
		||||
	# First, make sure the CFLAGS we added are actually accepted by our
 | 
			
		||||
	# compiler.  If not (and OS X's ld, for instance, does not accept -z),
 | 
			
		||||
	# then we can't do this test.
 | 
			
		||||
	if test x"$done" = xno; then
 | 
			
		||||
	   AC_MSG_CHECKING([whether to check for GCC pthread/shared inconsistencies])
 | 
			
		||||
	   AC_TRY_LINK(,, , [done=yes])
 | 
			
		||||
	
 | 
			
		||||
	   if test "x$done" = xyes ; then
 | 
			
		||||
	      AC_MSG_RESULT([no])
 | 
			
		||||
	   else
 | 
			
		||||
	      AC_MSG_RESULT([yes])
 | 
			
		||||
	   fi
 | 
			
		||||
	fi
 | 
			
		||||
	
 | 
			
		||||
	if test x"$done" = xno; then
 | 
			
		||||
	   AC_MSG_CHECKING([whether -pthread is sufficient with -shared])
 | 
			
		||||
	   AC_TRY_LINK([#include <pthread.h>],
 | 
			
		||||
	      [pthread_t th; pthread_join(th, 0);
 | 
			
		||||
	      pthread_attr_init(0); pthread_cleanup_push(0, 0);
 | 
			
		||||
	      pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
 | 
			
		||||
	      [done=yes])
 | 
			
		||||
	   
 | 
			
		||||
	   if test "x$done" = xyes; then
 | 
			
		||||
	      AC_MSG_RESULT([yes])
 | 
			
		||||
	   else
 | 
			
		||||
	      AC_MSG_RESULT([no])
 | 
			
		||||
	   fi
 | 
			
		||||
	fi
 | 
			
		||||
	
 | 
			
		||||
	#
 | 
			
		||||
	# Linux gcc on some architectures such as mips/mipsel forgets
 | 
			
		||||
	# about -lpthread
 | 
			
		||||
	#
 | 
			
		||||
	if test x"$done" = xno; then
 | 
			
		||||
	   AC_MSG_CHECKING([whether -lpthread fixes that])
 | 
			
		||||
	   LIBS="-lpthread $PTHREAD_LIBS $save_LIBS"
 | 
			
		||||
	   AC_TRY_LINK([#include <pthread.h>],
 | 
			
		||||
	      [pthread_t th; pthread_join(th, 0);
 | 
			
		||||
	      pthread_attr_init(0); pthread_cleanup_push(0, 0);
 | 
			
		||||
	      pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
 | 
			
		||||
	      [done=yes])
 | 
			
		||||
	
 | 
			
		||||
	   if test "x$done" = xyes; then
 | 
			
		||||
	      AC_MSG_RESULT([yes])
 | 
			
		||||
	      PTHREAD_LIBS="-lpthread $PTHREAD_LIBS"
 | 
			
		||||
	   else
 | 
			
		||||
	      AC_MSG_RESULT([no])
 | 
			
		||||
	   fi
 | 
			
		||||
	fi
 | 
			
		||||
	#
 | 
			
		||||
	# FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc
 | 
			
		||||
	#
 | 
			
		||||
	if test x"$done" = xno; then
 | 
			
		||||
	   AC_MSG_CHECKING([whether -lc_r fixes that])
 | 
			
		||||
	   LIBS="-lc_r $PTHREAD_LIBS $save_LIBS"
 | 
			
		||||
	   AC_TRY_LINK([#include <pthread.h>],
 | 
			
		||||
	       [pthread_t th; pthread_join(th, 0);
 | 
			
		||||
	        pthread_attr_init(0); pthread_cleanup_push(0, 0);
 | 
			
		||||
	        pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
 | 
			
		||||
	       [done=yes])
 | 
			
		||||
	
 | 
			
		||||
	   if test "x$done" = xyes; then
 | 
			
		||||
	      AC_MSG_RESULT([yes])
 | 
			
		||||
	      PTHREAD_LIBS="-lc_r $PTHREAD_LIBS"
 | 
			
		||||
	   else
 | 
			
		||||
	      AC_MSG_RESULT([no])
 | 
			
		||||
	   fi
 | 
			
		||||
	fi
 | 
			
		||||
	if test x"$done" = xno; then
 | 
			
		||||
	   # OK, we have run out of ideas
 | 
			
		||||
	   AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries])
 | 
			
		||||
	
 | 
			
		||||
	   # so it's not safe to assume that we may use pthreads
 | 
			
		||||
	   acx_pthread_ok=no
 | 
			
		||||
	fi
 | 
			
		||||
	
 | 
			
		||||
	CFLAGS="$save_CFLAGS"
 | 
			
		||||
	LIBS="$save_LIBS"
 | 
			
		||||
	CC="$save_CC"
 | 
			
		||||
else
 | 
			
		||||
        PTHREAD_CC="$CC"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AC_SUBST(PTHREAD_LIBS)
 | 
			
		||||
AC_SUBST(PTHREAD_CFLAGS)
 | 
			
		||||
AC_SUBST(PTHREAD_CC)
 | 
			
		||||
 | 
			
		||||
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
 | 
			
		||||
if test x"$acx_pthread_ok" = xyes; then
 | 
			
		||||
        ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
 | 
			
		||||
        :
 | 
			
		||||
else
 | 
			
		||||
        acx_pthread_ok=no
 | 
			
		||||
        $2
 | 
			
		||||
fi
 | 
			
		||||
AC_LANG_RESTORE
 | 
			
		||||
])dnl ACX_PTHREAD
 | 
			
		||||
							
								
								
									
										74
									
								
								third_party/googletest/src/m4/gtest.m4
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								third_party/googletest/src/m4/gtest.m4
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
			
		||||
dnl GTEST_LIB_CHECK([minimum version [,
 | 
			
		||||
dnl                  action if found [,action if not found]]])
 | 
			
		||||
dnl
 | 
			
		||||
dnl Check for the presence of the Google Test library, optionally at a minimum
 | 
			
		||||
dnl version, and indicate a viable version with the HAVE_GTEST flag. It defines
 | 
			
		||||
dnl standard variables for substitution including GTEST_CPPFLAGS,
 | 
			
		||||
dnl GTEST_CXXFLAGS, GTEST_LDFLAGS, and GTEST_LIBS. It also defines
 | 
			
		||||
dnl GTEST_VERSION as the version of Google Test found. Finally, it provides
 | 
			
		||||
dnl optional custom action slots in the event GTEST is found or not.
 | 
			
		||||
AC_DEFUN([GTEST_LIB_CHECK],
 | 
			
		||||
[
 | 
			
		||||
dnl Provide a flag to enable or disable Google Test usage.
 | 
			
		||||
AC_ARG_ENABLE([gtest],
 | 
			
		||||
  [AS_HELP_STRING([--enable-gtest],
 | 
			
		||||
                  [Enable tests using the Google C++ Testing Framework.
 | 
			
		||||
                  (Default is enabled.)])],
 | 
			
		||||
  [],
 | 
			
		||||
  [enable_gtest=])
 | 
			
		||||
AC_ARG_VAR([GTEST_CONFIG],
 | 
			
		||||
           [The exact path of Google Test's 'gtest-config' script.])
 | 
			
		||||
AC_ARG_VAR([GTEST_CPPFLAGS],
 | 
			
		||||
           [C-like preprocessor flags for Google Test.])
 | 
			
		||||
AC_ARG_VAR([GTEST_CXXFLAGS],
 | 
			
		||||
           [C++ compile flags for Google Test.])
 | 
			
		||||
AC_ARG_VAR([GTEST_LDFLAGS],
 | 
			
		||||
           [Linker path and option flags for Google Test.])
 | 
			
		||||
AC_ARG_VAR([GTEST_LIBS],
 | 
			
		||||
           [Library linking flags for Google Test.])
 | 
			
		||||
AC_ARG_VAR([GTEST_VERSION],
 | 
			
		||||
           [The version of Google Test available.])
 | 
			
		||||
HAVE_GTEST="no"
 | 
			
		||||
AS_IF([test "x${enable_gtest}" != "xno"],
 | 
			
		||||
  [AC_MSG_CHECKING([for 'gtest-config'])
 | 
			
		||||
   AS_IF([test "x${enable_gtest}" != "xyes"],
 | 
			
		||||
     [AS_IF([test -x "${enable_gtest}/scripts/gtest-config"],
 | 
			
		||||
        [GTEST_CONFIG="${enable_gtest}/scripts/gtest-config"],
 | 
			
		||||
        [GTEST_CONFIG="${enable_gtest}/bin/gtest-config"])
 | 
			
		||||
      AS_IF([test -x "${GTEST_CONFIG}"], [],
 | 
			
		||||
        [AC_MSG_RESULT([no])
 | 
			
		||||
         AC_MSG_ERROR([dnl
 | 
			
		||||
Unable to locate either a built or installed Google Test.
 | 
			
		||||
The specific location '${enable_gtest}' was provided for a built or installed
 | 
			
		||||
Google Test, but no 'gtest-config' script could be found at this location.])
 | 
			
		||||
         ])],
 | 
			
		||||
     [AC_PATH_PROG([GTEST_CONFIG], [gtest-config])])
 | 
			
		||||
   AS_IF([test -x "${GTEST_CONFIG}"],
 | 
			
		||||
     [AC_MSG_RESULT([${GTEST_CONFIG}])
 | 
			
		||||
      m4_ifval([$1],
 | 
			
		||||
        [_gtest_min_version="--min-version=$1"
 | 
			
		||||
         AC_MSG_CHECKING([for Google Test at least version >= $1])],
 | 
			
		||||
        [_gtest_min_version="--min-version=0"
 | 
			
		||||
         AC_MSG_CHECKING([for Google Test])])
 | 
			
		||||
      AS_IF([${GTEST_CONFIG} ${_gtest_min_version}],
 | 
			
		||||
        [AC_MSG_RESULT([yes])
 | 
			
		||||
         HAVE_GTEST='yes'],
 | 
			
		||||
        [AC_MSG_RESULT([no])])],
 | 
			
		||||
     [AC_MSG_RESULT([no])])
 | 
			
		||||
   AS_IF([test "x${HAVE_GTEST}" = "xyes"],
 | 
			
		||||
     [GTEST_CPPFLAGS=`${GTEST_CONFIG} --cppflags`
 | 
			
		||||
      GTEST_CXXFLAGS=`${GTEST_CONFIG} --cxxflags`
 | 
			
		||||
      GTEST_LDFLAGS=`${GTEST_CONFIG} --ldflags`
 | 
			
		||||
      GTEST_LIBS=`${GTEST_CONFIG} --libs`
 | 
			
		||||
      GTEST_VERSION=`${GTEST_CONFIG} --version`
 | 
			
		||||
      AC_DEFINE([HAVE_GTEST],[1],[Defined when Google Test is available.])],
 | 
			
		||||
     [AS_IF([test "x${enable_gtest}" = "xyes"],
 | 
			
		||||
        [AC_MSG_ERROR([dnl
 | 
			
		||||
Google Test was enabled, but no viable version could be found.])
 | 
			
		||||
         ])])])
 | 
			
		||||
AC_SUBST([HAVE_GTEST])
 | 
			
		||||
AM_CONDITIONAL([HAVE_GTEST],[test "x$HAVE_GTEST" = "xyes"])
 | 
			
		||||
AS_IF([test "x$HAVE_GTEST" = "xyes"],
 | 
			
		||||
  [m4_ifval([$2], [$2])],
 | 
			
		||||
  [m4_ifval([$3], [$3])])
 | 
			
		||||
])
 | 
			
		||||
							
								
								
									
										80
									
								
								third_party/googletest/src/make/Makefile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								third_party/googletest/src/make/Makefile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
			
		||||
# A sample Makefile for building Google Test and using it in user
 | 
			
		||||
# tests.  Please tweak it to suit your environment and project.  You
 | 
			
		||||
# may want to move it to your project's root directory.
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS:
 | 
			
		||||
#
 | 
			
		||||
#   make [all]  - makes everything.
 | 
			
		||||
#   make TARGET - makes the given target.
 | 
			
		||||
#   make clean  - removes all files generated by make.
 | 
			
		||||
 | 
			
		||||
# Please tweak the following variable definitions as needed by your
 | 
			
		||||
# project, except GTEST_HEADERS, which you can use in your own targets
 | 
			
		||||
# but shouldn't modify.
 | 
			
		||||
 | 
			
		||||
# Points to the root of Google Test, relative to where this file is.
 | 
			
		||||
# Remember to tweak this if you move this file.
 | 
			
		||||
GTEST_DIR = ..
 | 
			
		||||
 | 
			
		||||
# Where to find user code.
 | 
			
		||||
USER_DIR = ../samples
 | 
			
		||||
 | 
			
		||||
# Flags passed to the preprocessor.
 | 
			
		||||
CPPFLAGS += -I$(GTEST_DIR)/include
 | 
			
		||||
 | 
			
		||||
# Flags passed to the C++ compiler.
 | 
			
		||||
CXXFLAGS += -g -Wall -Wextra
 | 
			
		||||
 | 
			
		||||
# All tests produced by this Makefile.  Remember to add new tests you
 | 
			
		||||
# created to the list.
 | 
			
		||||
TESTS = sample1_unittest
 | 
			
		||||
 | 
			
		||||
# All Google Test headers.  Usually you shouldn't change this
 | 
			
		||||
# definition.
 | 
			
		||||
GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
 | 
			
		||||
                $(GTEST_DIR)/include/gtest/internal/*.h
 | 
			
		||||
 | 
			
		||||
# House-keeping build targets.
 | 
			
		||||
 | 
			
		||||
all : $(TESTS)
 | 
			
		||||
 | 
			
		||||
clean :
 | 
			
		||||
	rm -f $(TESTS) gtest.a gtest_main.a *.o
 | 
			
		||||
 | 
			
		||||
# Builds gtest.a and gtest_main.a.
 | 
			
		||||
 | 
			
		||||
# Usually you shouldn't tweak such internal variables, indicated by a
 | 
			
		||||
# trailing _.
 | 
			
		||||
GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
 | 
			
		||||
 | 
			
		||||
# For simplicity and to avoid depending on Google Test's
 | 
			
		||||
# implementation details, the dependencies specified below are
 | 
			
		||||
# conservative and not optimized.  This is fine as Google Test
 | 
			
		||||
# compiles fast and for ordinary users its source rarely changes.
 | 
			
		||||
gtest-all.o : $(GTEST_SRCS_)
 | 
			
		||||
	$(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \
 | 
			
		||||
            $(GTEST_DIR)/src/gtest-all.cc
 | 
			
		||||
 | 
			
		||||
gtest_main.o : $(GTEST_SRCS_)
 | 
			
		||||
	$(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \
 | 
			
		||||
            $(GTEST_DIR)/src/gtest_main.cc
 | 
			
		||||
 | 
			
		||||
gtest.a : gtest-all.o
 | 
			
		||||
	$(AR) $(ARFLAGS) $@ $^
 | 
			
		||||
 | 
			
		||||
gtest_main.a : gtest-all.o gtest_main.o
 | 
			
		||||
	$(AR) $(ARFLAGS) $@ $^
 | 
			
		||||
 | 
			
		||||
# Builds a sample test.  A test should link with either gtest.a or
 | 
			
		||||
# gtest_main.a, depending on whether it defines its own main()
 | 
			
		||||
# function.
 | 
			
		||||
 | 
			
		||||
sample1.o : $(USER_DIR)/sample1.cc $(USER_DIR)/sample1.h $(GTEST_HEADERS)
 | 
			
		||||
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/sample1.cc
 | 
			
		||||
 | 
			
		||||
sample1_unittest.o : $(USER_DIR)/sample1_unittest.cc \
 | 
			
		||||
                     $(USER_DIR)/sample1.h $(GTEST_HEADERS)
 | 
			
		||||
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/sample1_unittest.cc
 | 
			
		||||
 | 
			
		||||
sample1_unittest : sample1.o sample1_unittest.o gtest_main.a
 | 
			
		||||
	$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@
 | 
			
		||||
							
								
								
									
										45
									
								
								third_party/googletest/src/msvc/gtest-md.sln
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								third_party/googletest/src/msvc/gtest-md.sln
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 8.00
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest-md", "gtest-md.vcproj", "{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_main-md", "gtest_main-md.vcproj", "{3AF54C8A-10BF-4332-9147-F68ED9862033}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_prod_test-md", "gtest_prod_test-md.vcproj", "{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_unittest-md", "gtest_unittest-md.vcproj", "{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfiguration) = preSolution
 | 
			
		||||
		Debug = Debug
 | 
			
		||||
		Release = Release
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfiguration) = postSolution
 | 
			
		||||
		{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Debug.ActiveCfg = Debug|Win32
 | 
			
		||||
		{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Debug.Build.0 = Debug|Win32
 | 
			
		||||
		{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Release.ActiveCfg = Release|Win32
 | 
			
		||||
		{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}.Release.Build.0 = Release|Win32
 | 
			
		||||
		{3AF54C8A-10BF-4332-9147-F68ED9862033}.Debug.ActiveCfg = Debug|Win32
 | 
			
		||||
		{3AF54C8A-10BF-4332-9147-F68ED9862033}.Debug.Build.0 = Debug|Win32
 | 
			
		||||
		{3AF54C8A-10BF-4332-9147-F68ED9862033}.Release.ActiveCfg = Release|Win32
 | 
			
		||||
		{3AF54C8A-10BF-4332-9147-F68ED9862033}.Release.Build.0 = Release|Win32
 | 
			
		||||
		{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Debug.ActiveCfg = Debug|Win32
 | 
			
		||||
		{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Debug.Build.0 = Debug|Win32
 | 
			
		||||
		{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Release.ActiveCfg = Release|Win32
 | 
			
		||||
		{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}.Release.Build.0 = Release|Win32
 | 
			
		||||
		{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Debug.ActiveCfg = Debug|Win32
 | 
			
		||||
		{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Debug.Build.0 = Debug|Win32
 | 
			
		||||
		{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Release.ActiveCfg = Release|Win32
 | 
			
		||||
		{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}.Release.Build.0 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ExtensibilityGlobals) = postSolution
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ExtensibilityAddIns) = postSolution
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										126
									
								
								third_party/googletest/src/msvc/gtest-md.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								third_party/googletest/src/msvc/gtest-md.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,126 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="gtest-md"
 | 
			
		||||
	ProjectGUID="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}"
 | 
			
		||||
	Keyword="Win32Proj">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Debug|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="4"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			ReferencesPath="">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
 | 
			
		||||
				MinimalRebuild="TRUE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="4"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLibrarianTool"
 | 
			
		||||
				OutputFile="$(OutDir)/gtestd.lib"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Release|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="4"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			ReferencesPath=""..\include";".."">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="3"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLibrarianTool"
 | 
			
		||||
				OutputFile="$(OutDir)/gtest.lib"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
 | 
			
		||||
			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath="..\src\gtest-all.cc">
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Debug|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Release|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Header Files"
 | 
			
		||||
			Filter="h;hpp;hxx;hm;inl;inc;xsd"
 | 
			
		||||
			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										45
									
								
								third_party/googletest/src/msvc/gtest.sln
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								third_party/googletest/src/msvc/gtest.sln
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
Microsoft Visual Studio Solution File, Format Version 8.00
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest", "gtest.vcproj", "{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_main", "gtest_main.vcproj", "{3AF54C8A-10BF-4332-9147-F68ED9862032}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_unittest", "gtest_unittest.vcproj", "{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gtest_prod_test", "gtest_prod_test.vcproj", "{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}"
 | 
			
		||||
	ProjectSection(ProjectDependencies) = postProject
 | 
			
		||||
	EndProjectSection
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SolutionConfiguration) = preSolution
 | 
			
		||||
		Debug = Debug
 | 
			
		||||
		Release = Release
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ProjectConfiguration) = postSolution
 | 
			
		||||
		{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug.ActiveCfg = Debug|Win32
 | 
			
		||||
		{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Debug.Build.0 = Debug|Win32
 | 
			
		||||
		{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release.ActiveCfg = Release|Win32
 | 
			
		||||
		{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}.Release.Build.0 = Release|Win32
 | 
			
		||||
		{3AF54C8A-10BF-4332-9147-F68ED9862032}.Debug.ActiveCfg = Debug|Win32
 | 
			
		||||
		{3AF54C8A-10BF-4332-9147-F68ED9862032}.Debug.Build.0 = Debug|Win32
 | 
			
		||||
		{3AF54C8A-10BF-4332-9147-F68ED9862032}.Release.ActiveCfg = Release|Win32
 | 
			
		||||
		{3AF54C8A-10BF-4332-9147-F68ED9862032}.Release.Build.0 = Release|Win32
 | 
			
		||||
		{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Debug.ActiveCfg = Debug|Win32
 | 
			
		||||
		{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Debug.Build.0 = Debug|Win32
 | 
			
		||||
		{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Release.ActiveCfg = Release|Win32
 | 
			
		||||
		{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}.Release.Build.0 = Release|Win32
 | 
			
		||||
		{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Debug.ActiveCfg = Debug|Win32
 | 
			
		||||
		{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Debug.Build.0 = Debug|Win32
 | 
			
		||||
		{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Release.ActiveCfg = Release|Win32
 | 
			
		||||
		{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}.Release.Build.0 = Release|Win32
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ExtensibilityGlobals) = postSolution
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(ExtensibilityAddIns) = postSolution
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
EndGlobal
 | 
			
		||||
							
								
								
									
										126
									
								
								third_party/googletest/src/msvc/gtest.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								third_party/googletest/src/msvc/gtest.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,126 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="gtest"
 | 
			
		||||
	ProjectGUID="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}"
 | 
			
		||||
	Keyword="Win32Proj">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Debug|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="4"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			ReferencesPath="">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
 | 
			
		||||
				MinimalRebuild="TRUE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="5"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="4"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLibrarianTool"
 | 
			
		||||
				OutputFile="$(OutDir)/gtestd.lib"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Release|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="4"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			ReferencesPath=""..\include";".."">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
 | 
			
		||||
				RuntimeLibrary="4"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="3"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLibrarianTool"
 | 
			
		||||
				OutputFile="$(OutDir)/gtest.lib"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
 | 
			
		||||
			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath="..\src\gtest-all.cc">
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Debug|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Release|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Header Files"
 | 
			
		||||
			Filter="h;hpp;hxx;hm;inl;inc;xsd"
 | 
			
		||||
			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										129
									
								
								third_party/googletest/src/msvc/gtest_main-md.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								third_party/googletest/src/msvc/gtest_main-md.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,129 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="gtest_main-md"
 | 
			
		||||
	ProjectGUID="{3AF54C8A-10BF-4332-9147-F68ED9862033}"
 | 
			
		||||
	Keyword="Win32Proj">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Debug|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="4"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			ReferencesPath="">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
 | 
			
		||||
				MinimalRebuild="TRUE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="4"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLibrarianTool"
 | 
			
		||||
				OutputFile="$(OutDir)/$(ProjectName)d.lib"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Release|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="4"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			ReferencesPath=""..\include";".."">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="3"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLibrarianTool"
 | 
			
		||||
				OutputFile="$(OutDir)/$(ProjectName).lib"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
		<ProjectReference
 | 
			
		||||
			ReferencedProjectIdentifier="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE8}"
 | 
			
		||||
			Name="gtest-md"/>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
 | 
			
		||||
			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath="..\src\gtest_main.cc">
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Debug|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Release|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Header Files"
 | 
			
		||||
			Filter="h;hpp;hxx;hm;inl;inc;xsd"
 | 
			
		||||
			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										129
									
								
								third_party/googletest/src/msvc/gtest_main.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								third_party/googletest/src/msvc/gtest_main.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,129 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="gtest_main"
 | 
			
		||||
	ProjectGUID="{3AF54C8A-10BF-4332-9147-F68ED9862032}"
 | 
			
		||||
	Keyword="Win32Proj">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Debug|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="4"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			ReferencesPath="">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
 | 
			
		||||
				MinimalRebuild="TRUE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="5"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="4"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLibrarianTool"
 | 
			
		||||
				OutputFile="$(OutDir)/$(ProjectName)d.lib"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Release|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="4"
 | 
			
		||||
			CharacterSet="2"
 | 
			
		||||
			ReferencesPath=""..\include";".."">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
 | 
			
		||||
				RuntimeLibrary="4"
 | 
			
		||||
				UsePrecompiledHeader="0"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="3"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLibrarianTool"
 | 
			
		||||
				OutputFile="$(OutDir)/$(ProjectName).lib"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
		<ProjectReference
 | 
			
		||||
			ReferencedProjectIdentifier="{C8F6C172-56F2-4E76-B5FA-C3B423B31BE7}"
 | 
			
		||||
			Name="gtest"/>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
 | 
			
		||||
			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath="..\src\gtest_main.cc">
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Debug|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Release|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Header Files"
 | 
			
		||||
			Filter="h;hpp;hxx;hm;inl;inc;xsd"
 | 
			
		||||
			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										164
									
								
								third_party/googletest/src/msvc/gtest_prod_test-md.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								third_party/googletest/src/msvc/gtest_prod_test-md.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,164 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="gtest_prod_test-md"
 | 
			
		||||
	ProjectGUID="{24848551-EF4F-47E8-9A9D-EA4D49BC3ECB}"
 | 
			
		||||
	Keyword="Win32Proj">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Debug|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
 | 
			
		||||
				MinimalRebuild="TRUE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				UsePrecompiledHeader="3"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="4"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				OutputFile="$(OutDir)/gtest_prod_test.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				ProgramDatabaseFile="$(OutDir)/gtest_prod_test.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Release|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				UsePrecompiledHeader="3"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="3"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				OutputFile="$(OutDir)/gtest_prod_test.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
		<ProjectReference
 | 
			
		||||
			ReferencedProjectIdentifier="{3AF54C8A-10BF-4332-9147-F68ED9862033}"
 | 
			
		||||
			Name="gtest_main-md"/>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
 | 
			
		||||
			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath="..\test\gtest_prod_test.cc">
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Debug|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""
 | 
			
		||||
						UsePrecompiledHeader="0"/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Release|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""
 | 
			
		||||
						UsePrecompiledHeader="0"/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
			</File>
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath="..\test\production.cc">
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Debug|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""
 | 
			
		||||
						UsePrecompiledHeader="0"/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Release|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""
 | 
			
		||||
						UsePrecompiledHeader="0"/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Header Files"
 | 
			
		||||
			Filter="h;hpp;hxx;hm;inl;inc;xsd"
 | 
			
		||||
			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath="..\test\production.h">
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										164
									
								
								third_party/googletest/src/msvc/gtest_prod_test.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								third_party/googletest/src/msvc/gtest_prod_test.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,164 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="gtest_prod_test"
 | 
			
		||||
	ProjectGUID="{24848551-EF4F-47E8-9A9D-EA4D49BC3ECA}"
 | 
			
		||||
	Keyword="Win32Proj">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Debug|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
 | 
			
		||||
				MinimalRebuild="TRUE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="5"
 | 
			
		||||
				UsePrecompiledHeader="3"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="4"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				OutputFile="$(OutDir)/gtest_prod_test.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				ProgramDatabaseFile="$(OutDir)/gtest_prod_test.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Release|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
 | 
			
		||||
				RuntimeLibrary="4"
 | 
			
		||||
				UsePrecompiledHeader="3"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="3"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				OutputFile="$(OutDir)/gtest_prod_test.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
		<ProjectReference
 | 
			
		||||
			ReferencedProjectIdentifier="{3AF54C8A-10BF-4332-9147-F68ED9862032}"
 | 
			
		||||
			Name="gtest_main"/>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
 | 
			
		||||
			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath="..\test\gtest_prod_test.cc">
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Debug|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""
 | 
			
		||||
						UsePrecompiledHeader="0"/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Release|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""
 | 
			
		||||
						UsePrecompiledHeader="0"/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
			</File>
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath="..\test\production.cc">
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Debug|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""
 | 
			
		||||
						UsePrecompiledHeader="0"/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Release|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""
 | 
			
		||||
						UsePrecompiledHeader="0"/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Header Files"
 | 
			
		||||
			Filter="h;hpp;hxx;hm;inl;inc;xsd"
 | 
			
		||||
			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath="..\test\production.h">
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										147
									
								
								third_party/googletest/src/msvc/gtest_unittest-md.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								third_party/googletest/src/msvc/gtest_unittest-md.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,147 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="gtest_unittest-md"
 | 
			
		||||
	ProjectGUID="{4D9FDFB5-986A-4139-823C-F4EE0ED481A2}"
 | 
			
		||||
	Keyword="Win32Proj">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Debug|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
 | 
			
		||||
				MinimalRebuild="TRUE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="3"
 | 
			
		||||
				UsePrecompiledHeader="3"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="4"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				OutputFile="$(OutDir)/gtest_unittest.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				ProgramDatabaseFile="$(OutDir)/gtest_unittest.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Release|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
 | 
			
		||||
				RuntimeLibrary="2"
 | 
			
		||||
				UsePrecompiledHeader="3"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="3"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				OutputFile="$(OutDir)/gtest_unittest.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
		<ProjectReference
 | 
			
		||||
			ReferencedProjectIdentifier="{3AF54C8A-10BF-4332-9147-F68ED9862033}"
 | 
			
		||||
			Name="gtest_main-md"/>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
 | 
			
		||||
			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath="..\test\gtest_unittest.cc">
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Debug|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						Optimization="1"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""
 | 
			
		||||
						BasicRuntimeChecks="0"
 | 
			
		||||
						UsePrecompiledHeader="0"
 | 
			
		||||
						DebugInformationFormat="3"/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Release|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""
 | 
			
		||||
						UsePrecompiledHeader="0"/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Header Files"
 | 
			
		||||
			Filter="h;hpp;hxx;hm;inl;inc;xsd"
 | 
			
		||||
			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										147
									
								
								third_party/googletest/src/msvc/gtest_unittest.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								third_party/googletest/src/msvc/gtest_unittest.vcproj
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,147 @@
 | 
			
		||||
<?xml version="1.0" encoding="Windows-1252"?>
 | 
			
		||||
<VisualStudioProject
 | 
			
		||||
	ProjectType="Visual C++"
 | 
			
		||||
	Version="7.10"
 | 
			
		||||
	Name="gtest_unittest"
 | 
			
		||||
	ProjectGUID="{4D9FDFB5-986A-4139-823C-F4EE0ED481A1}"
 | 
			
		||||
	Keyword="Win32Proj">
 | 
			
		||||
	<Platforms>
 | 
			
		||||
		<Platform
 | 
			
		||||
			Name="Win32"/>
 | 
			
		||||
	</Platforms>
 | 
			
		||||
	<Configurations>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Debug|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				Optimization="0"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
 | 
			
		||||
				MinimalRebuild="TRUE"
 | 
			
		||||
				BasicRuntimeChecks="3"
 | 
			
		||||
				RuntimeLibrary="5"
 | 
			
		||||
				UsePrecompiledHeader="3"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="4"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				OutputFile="$(OutDir)/gtest_unittest.exe"
 | 
			
		||||
				LinkIncremental="2"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				ProgramDatabaseFile="$(OutDir)/gtest_unittest.pdb"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
		<Configuration
 | 
			
		||||
			Name="Release|Win32"
 | 
			
		||||
			OutputDirectory="$(SolutionName)/$(ConfigurationName)"
 | 
			
		||||
			IntermediateDirectory="$(OutDir)/$(ProjectName)"
 | 
			
		||||
			ConfigurationType="1"
 | 
			
		||||
			CharacterSet="2">
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCLCompilerTool"
 | 
			
		||||
				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
 | 
			
		||||
				RuntimeLibrary="4"
 | 
			
		||||
				UsePrecompiledHeader="3"
 | 
			
		||||
				WarningLevel="3"
 | 
			
		||||
				Detect64BitPortabilityProblems="FALSE"
 | 
			
		||||
				DebugInformationFormat="3"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCCustomBuildTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCLinkerTool"
 | 
			
		||||
				OutputFile="$(OutDir)/gtest_unittest.exe"
 | 
			
		||||
				LinkIncremental="1"
 | 
			
		||||
				GenerateDebugInformation="TRUE"
 | 
			
		||||
				SubSystem="1"
 | 
			
		||||
				OptimizeReferences="2"
 | 
			
		||||
				EnableCOMDATFolding="2"
 | 
			
		||||
				TargetMachine="1"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCMIDLTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPostBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreBuildEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCPreLinkEventTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCResourceCompilerTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebServiceProxyGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCXMLDataGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCWebDeploymentTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCManagedWrapperGeneratorTool"/>
 | 
			
		||||
			<Tool
 | 
			
		||||
				Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
 | 
			
		||||
		</Configuration>
 | 
			
		||||
	</Configurations>
 | 
			
		||||
	<References>
 | 
			
		||||
		<ProjectReference
 | 
			
		||||
			ReferencedProjectIdentifier="{3AF54C8A-10BF-4332-9147-F68ED9862032}"
 | 
			
		||||
			Name="gtest_main"/>
 | 
			
		||||
	</References>
 | 
			
		||||
	<Files>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Source Files"
 | 
			
		||||
			Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
 | 
			
		||||
			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
 | 
			
		||||
			<File
 | 
			
		||||
				RelativePath="..\test\gtest_unittest.cc">
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Debug|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						Optimization="1"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""
 | 
			
		||||
						BasicRuntimeChecks="0"
 | 
			
		||||
						UsePrecompiledHeader="0"
 | 
			
		||||
						DebugInformationFormat="3"/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
				<FileConfiguration
 | 
			
		||||
					Name="Release|Win32">
 | 
			
		||||
					<Tool
 | 
			
		||||
						Name="VCCLCompilerTool"
 | 
			
		||||
						AdditionalIncludeDirectories=""..";"..\include""
 | 
			
		||||
						UsePrecompiledHeader="0"/>
 | 
			
		||||
				</FileConfiguration>
 | 
			
		||||
			</File>
 | 
			
		||||
		</Filter>
 | 
			
		||||
		<Filter
 | 
			
		||||
			Name="Header Files"
 | 
			
		||||
			Filter="h;hpp;hxx;hm;inl;inc;xsd"
 | 
			
		||||
			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
 | 
			
		||||
		</Filter>
 | 
			
		||||
	</Files>
 | 
			
		||||
	<Globals>
 | 
			
		||||
	</Globals>
 | 
			
		||||
</VisualStudioProject>
 | 
			
		||||
							
								
								
									
										123
									
								
								third_party/googletest/src/samples/prime_tables.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								third_party/googletest/src/samples/prime_tables.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,123 @@
 | 
			
		||||
// Copyright 2008 Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
//
 | 
			
		||||
// Author: wan@google.com (Zhanyong Wan)
 | 
			
		||||
// Author: vladl@google.com (Vlad Losev)
 | 
			
		||||
 | 
			
		||||
// This provides interface PrimeTable that determines whether a number is a
 | 
			
		||||
// prime and determines a next prime number. This interface is used
 | 
			
		||||
// in Google Test samples demonstrating use of parameterized tests.
 | 
			
		||||
 | 
			
		||||
#ifndef GTEST_SAMPLES_PRIME_TABLES_H_
 | 
			
		||||
#define GTEST_SAMPLES_PRIME_TABLES_H_
 | 
			
		||||
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
 | 
			
		||||
// The prime table interface.
 | 
			
		||||
class PrimeTable {
 | 
			
		||||
 public:
 | 
			
		||||
  virtual ~PrimeTable() {}
 | 
			
		||||
 | 
			
		||||
  // Returns true iff n is a prime number.
 | 
			
		||||
  virtual bool IsPrime(int n) const = 0;
 | 
			
		||||
 | 
			
		||||
  // Returns the smallest prime number greater than p; or returns -1
 | 
			
		||||
  // if the next prime is beyond the capacity of the table.
 | 
			
		||||
  virtual int GetNextPrime(int p) const = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Implementation #1 calculates the primes on-the-fly.
 | 
			
		||||
class OnTheFlyPrimeTable : public PrimeTable {
 | 
			
		||||
 public:
 | 
			
		||||
  virtual bool IsPrime(int n) const {
 | 
			
		||||
    if (n <= 1) return false;
 | 
			
		||||
 | 
			
		||||
    for (int i = 2; i*i <= n; i++) {
 | 
			
		||||
      // n is divisible by an integer other than 1 and itself.
 | 
			
		||||
      if ((n % i) == 0) return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  virtual int GetNextPrime(int p) const {
 | 
			
		||||
    for (int n = p + 1; n > 0; n++) {
 | 
			
		||||
      if (IsPrime(n)) return n;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return -1;
 | 
			
		||||
  }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Implementation #2 pre-calculates the primes and stores the result
 | 
			
		||||
// in an array.
 | 
			
		||||
class PreCalculatedPrimeTable : public PrimeTable {
 | 
			
		||||
 public:
 | 
			
		||||
  // 'max' specifies the maximum number the prime table holds.
 | 
			
		||||
  explicit PreCalculatedPrimeTable(int max)
 | 
			
		||||
      : is_prime_size_(max + 1), is_prime_(new bool[max + 1]) {
 | 
			
		||||
    CalculatePrimesUpTo(max);
 | 
			
		||||
  }
 | 
			
		||||
  virtual ~PreCalculatedPrimeTable() { delete[] is_prime_; }
 | 
			
		||||
 | 
			
		||||
  virtual bool IsPrime(int n) const {
 | 
			
		||||
    return 0 <= n && n < is_prime_size_ && is_prime_[n];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  virtual int GetNextPrime(int p) const {
 | 
			
		||||
    for (int n = p + 1; n < is_prime_size_; n++) {
 | 
			
		||||
      if (is_prime_[n]) return n;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return -1;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 private:
 | 
			
		||||
  void CalculatePrimesUpTo(int max) {
 | 
			
		||||
    ::std::fill(is_prime_, is_prime_ + is_prime_size_, true);
 | 
			
		||||
    is_prime_[0] = is_prime_[1] = false;
 | 
			
		||||
 | 
			
		||||
    for (int i = 2; i <= max; i++) {
 | 
			
		||||
      if (!is_prime_[i]) continue;
 | 
			
		||||
 | 
			
		||||
      // Marks all multiples of i (except i itself) as non-prime.
 | 
			
		||||
      for (int j = 2*i; j <= max; j += i) {
 | 
			
		||||
        is_prime_[j] = false;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const int is_prime_size_;
 | 
			
		||||
  bool* const is_prime_;
 | 
			
		||||
 | 
			
		||||
  // Disables compiler warning "assignment operator could not be generated."
 | 
			
		||||
  void operator=(const PreCalculatedPrimeTable& rhs);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif  // GTEST_SAMPLES_PRIME_TABLES_H_
 | 
			
		||||
							
								
								
									
										68
									
								
								third_party/googletest/src/samples/sample1.cc
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								third_party/googletest/src/samples/sample1.cc
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
			
		||||
// Copyright 2005, Google Inc.
 | 
			
		||||
// 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.
 | 
			
		||||
//     * Neither the name of Google Inc. nor the names of its
 | 
			
		||||
// contributors may be used to endorse or promote products derived from
 | 
			
		||||
// this software without specific prior written permission.
 | 
			
		||||
//
 | 
			
		||||
// 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
 | 
			
		||||
// OWNER 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.
 | 
			
		||||
 | 
			
		||||
// A sample program demonstrating using Google C++ testing framework.
 | 
			
		||||
//
 | 
			
		||||
// Author: wan@google.com (Zhanyong Wan)
 | 
			
		||||
 | 
			
		||||
#include "sample1.h"
 | 
			
		||||
 | 
			
		||||
// Returns n! (the factorial of n).  For negative n, n! is defined to be 1.
 | 
			
		||||
int Factorial(int n) {
 | 
			
		||||
  int result = 1;
 | 
			
		||||
  for (int i = 1; i <= n; i++) {
 | 
			
		||||
    result *= i;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Returns true iff n is a prime number.
 | 
			
		||||
bool IsPrime(int n) {
 | 
			
		||||
  // Trivial case 1: small numbers
 | 
			
		||||
  if (n <= 1) return false;
 | 
			
		||||
 | 
			
		||||
  // Trivial case 2: even numbers
 | 
			
		||||
  if (n % 2 == 0) return n == 2;
 | 
			
		||||
 | 
			
		||||
  // Now, we have that n is odd and n >= 3.
 | 
			
		||||
 | 
			
		||||
  // Try to divide n by every odd number i, starting from 3
 | 
			
		||||
  for (int i = 3; ; i += 2) {
 | 
			
		||||
    // We only have to try i up to the squre root of n
 | 
			
		||||
    if (i > n/i) break;
 | 
			
		||||
 | 
			
		||||
    // Now, we have i <= n/i < n.
 | 
			
		||||
    // If n is divisible by i, n is not prime.
 | 
			
		||||
    if (n % i == 0) return false;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // n has no integer factor in the range (1, n), and thus is prime.
 | 
			
		||||
  return true;
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user