Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

839 lines
28 KiB

  1. #!/bin/bash
  2. # cryptest.sh - written and placed in public domain by Jeffrey Walton and Uri Blumenthal.
  3. # Copyright assigned to Crypto++ project.
  4. # This is a test script that can be used on some Linux/Unix/Apple machines
  5. # to automate building the library and running the self test with various
  6. # combinations of flags, options, and conditions.
  7. # Everything is tee'd into cryptest-result.txt. Change it to suite your taste. You
  8. # should be able to use `egrep -a "(Error|error|FAILED|Illegal)" cryptest-result.txt`
  9. # to quickly find errors and failures.
  10. # Set to suite your taste
  11. TEST_RESULTS=cryptest-result.txt
  12. BENCHMARK_RESULTS=cryptest-bench.txt
  13. WARN_TEST_RESULTS=cryptest-warn-result.txt
  14. # Respect user's preferred flags, but filter the stuff we expliclty test
  15. #if [ ! -z "CXXFLAGS" ]; then
  16. # ADD_CXXFLAGS=$(echo "$CXXFLAGS" | sed 's/\(-DDEBUG\|-DNDEBUG\|-O[0-9]\|-Os\|-Og\|-fsanitize=address\|-fsanitize=undefined\|-DDCRYPTOPP_NO_UNALIGNED_DATA_ACCESS\|-DDCRYPTOPP_NO_UNALIGNED_DATA_ACCESS\|-DDCRYPTOPP_NO_BACKWARDS_COMPATIBILITY_562\)//g')
  17. #else\
  18. # ADD_CXXFLAGS=""
  19. #fi
  20. # I can't seem to get the expression to work in sed on Apple. It returns the original CXXFLAGS.
  21. # If you want to test with additional flags, then put them in ADD_CXXFLAGS below.
  22. # ADD_CXXFLAGS="-mrdrnd -mrdseed"
  23. ADD_CXXFLAGS=""
  24. IS_DARWIN=$(uname -s | grep -i -c darwin)
  25. IS_LINUX=$(uname -s | grep -i -c linux)
  26. IS_CYGWIN=$(uname -s | grep -i -c cygwin)
  27. IS_MINGW=$(uname -s | grep -i -c mingw)
  28. IS_OPENBSD=$(uname -s | grep -i -c openbsd)
  29. # We need to use the C++ compiler to determine if c++11 is available. Otherwise
  30. # a mis-detection occurs on Mac OS X 10.9 and above. Below, we use the same
  31. # Implicit Variables as make. Also see
  32. # https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html
  33. if [ -z "$CXX" ]; then
  34. if [ "$IS_DARWIN" -ne "0" ]; then
  35. CXX=c++
  36. else
  37. # Linux, MinGW, Cygwin and fallback ...
  38. CXX=g++
  39. fi
  40. fi
  41. # Fixup
  42. if [ "$CXX" == "gcc" ]; then
  43. CXX=g++
  44. fi
  45. # Fixup
  46. if [ "$IS_OPENBSD" -ne "0" ]; then
  47. MAKE=gmake
  48. else
  49. MAKE=make
  50. fi
  51. if [ -z "$TMP" ]; then
  52. TMP=/tmp
  53. fi
  54. # Use the compiler driver, and not cpp, to tell us if the flag is consumed.
  55. $CXX -x c++ -dM -E -std=c++11 - < /dev/null > /dev/null 2>&1
  56. if [ "$?" -eq "0" ]; then
  57. HAVE_CXX11=1
  58. else
  59. HAVE_CXX11=0
  60. fi
  61. # OpenBSD 5.7 and OS X 10.5 cannot consume -std=c++03
  62. $CXX -x c++ -dM -E -std=c++03 - < /dev/null > /dev/null 2>&1
  63. if [ "$?" -eq "0" ]; then
  64. HAVE_CXX03=1
  65. else
  66. HAVE_CXX03=0
  67. fi
  68. # Set to 0 if you don't have UBsan
  69. $CXX -x c++ -fsanitize=undefined adhoc.cpp.proto -o $TMP/adhoc > /dev/null 2>&1
  70. if [ "$?" -eq "0" ]; then
  71. HAVE_UBSAN=1
  72. else
  73. HAVE_UBSAN=0
  74. fi
  75. # Fixup...
  76. if [ "$IS_CYGWIN" -ne "0" ] || [ "$IS_MINGW" -ne "0" ]; then
  77. HAVE_UBSAN=0
  78. fi
  79. # Set to 0 if you don't have Asan
  80. $CXX -x c++ -fsanitize=undefined adhoc.cpp.proto -o $TMP/adhoc > /dev/null 2>&1
  81. if [ "$?" -eq "0" ]; then
  82. HAVE_ASAN=1
  83. else
  84. HAVE_ASAN=0
  85. fi
  86. # Fixup...
  87. if [ "$IS_CYGWIN" -ne "0" ] || [ "$IS_MINGW" -ne "0" ]; then
  88. HAVE_ASAN=0
  89. fi
  90. #Final fixups for compilers liek GCC on ARM64
  91. if [ "$HAVE_UBSAN" -eq "0" ] || [ "$HAVE_ASAN" -eq "0" ]; then
  92. HAVE_UBAN=0
  93. HAVE_ASAN=0
  94. fi
  95. # Set to 0 if you don't have Valgrind. Valgrind tests take a long time...
  96. HAVE_VALGRIND=$(which valgrind 2>&1 | grep -v "no valgrind" | grep -i -c valgrind)
  97. # Echo back to ensure something is not missed.
  98. echo
  99. echo "HAVE_CXX03: $HAVE_CXX03"
  100. echo "HAVE_CXX11: $HAVE_CXX11"
  101. echo "HAVE_ASAN: $HAVE_ASAN"
  102. echo "HAVE_UBSAN: $HAVE_UBSAN"
  103. if [ "$HAVE_VALGRIND" -ne "0" ]; then
  104. echo "HAVE_VALGRIND: $HAVE_VALGRIND"
  105. fi
  106. if [ "$IS_DARWIN" -ne "0" ]; then
  107. echo "IS_DARWIN: $IS_DARWIN"
  108. unset MallocScribble MallocPreScribble MallocGuardEdges
  109. fi
  110. if [ "$IS_LINUX" -ne "0" ]; then
  111. echo "IS_LINUX: $IS_LINUX"
  112. fi
  113. if [ "$IS_CYGWIN" -ne "0" ]; then
  114. echo "IS_CYGWIN: $IS_CYGWIN"
  115. fi
  116. if [ "$IS_MINGW" -ne "0" ]; then
  117. echo "IS_MINGW: $IS_MINGW"
  118. fi
  119. echo "User CXXFLAGS: $CXXFLAGS"
  120. echo "Retained CXXFLAGS: $ADD_CXXFLAGS"
  121. echo "Compiler:" $($CXX --version | head -1)
  122. TEST_BEGIN=$(date)
  123. echo
  124. echo "Start time: $TEST_BEGIN"
  125. ############################################
  126. ############################################
  127. # Remove previous test results
  128. rm -f "$TEST_RESULTS" > /dev/null 2>&1
  129. touch "$TEST_RESULTS"
  130. rm -f "$BENCHMARK_RESULTS" > /dev/null 2>&1
  131. touch "$BENCHMARK_RESULTS"
  132. rm -f "$WARN_RESULTS" > /dev/null 2>&1
  133. touch "$WARN_RESULTS"
  134. ############################################
  135. # Basic debug build
  136. echo
  137. echo "************************************" | tee -a "$TEST_RESULTS"
  138. echo "Testing: debug, default CXXFLAGS" | tee -a "$TEST_RESULTS"
  139. echo
  140. unset CXXFLAGS
  141. "$MAKE" clean > /dev/null 2>&1
  142. export CXXFLAGS="-DDEBUG -g2 -O2"
  143. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  144. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  145. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  146. ############################################
  147. # Basic release build
  148. echo
  149. echo "************************************" | tee -a "$TEST_RESULTS"
  150. echo "Testing: release, default CXXFLAGS" | tee -a "$TEST_RESULTS"
  151. echo
  152. unset CXXFLAGS
  153. "$MAKE" clean > /dev/null 2>&1
  154. export CXXFLAGS="-DNDEBUG -g2 -O2"
  155. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  156. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  157. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  158. ############################################
  159. # Basic debug build, DISABLE_ASM
  160. echo
  161. echo "************************************" | tee -a "$TEST_RESULTS"
  162. echo "Testing: debug, default CXXFLAGS, DISABLE_ASM" | tee -a "$TEST_RESULTS"
  163. echo
  164. unset CXXFLAGS
  165. "$MAKE" clean > /dev/null 2>&1
  166. export CXXFLAGS="-DDEBUG -g2 -O2 -DCRYPTOPP_DISABLE_ASM"
  167. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  168. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  169. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  170. ############################################
  171. # Basic release build, DISABLE_ASM
  172. echo
  173. echo "************************************" | tee -a "$TEST_RESULTS"
  174. echo "Testing: release, default CXXFLAGS, DISABLE_ASM" | tee -a "$TEST_RESULTS"
  175. echo
  176. unset CXXFLAGS
  177. "$MAKE" clean > /dev/null 2>&1
  178. export CXXFLAGS="-DNDEBUG -g2 -O2 -DCRYPTOPP_DISABLE_ASM"
  179. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  180. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  181. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  182. ############################################
  183. # c++03 debug build
  184. if [ "$HAVE_CXX03" -ne "0" ]; then
  185. echo
  186. echo "************************************" | tee -a "$TEST_RESULTS"
  187. echo "Testing: debug, c++03" | tee -a "$TEST_RESULTS"
  188. echo
  189. unset CXXFLAGS
  190. "$MAKE" clean > /dev/null 2>&1
  191. export CXXFLAGS="-DDEBUG -g2 -O2 -std=c++03 $ADD_CXXFLAGS"
  192. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  193. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  194. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  195. fi
  196. ############################################
  197. # c++03 release build
  198. if [ "$HAVE_CXX03" -ne "0" ]; then
  199. echo
  200. echo "************************************" | tee -a "$TEST_RESULTS"
  201. echo "Testing: release, c++03" | tee -a "$TEST_RESULTS"
  202. echo
  203. unset CXXFLAGS
  204. "$MAKE" clean > /dev/null 2>&1
  205. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++03 $ADD_CXXFLAGS"
  206. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  207. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  208. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  209. fi
  210. ############################################
  211. # c++11 debug build
  212. if [ "$HAVE_CXX11" -ne "0" ]; then
  213. echo
  214. echo "************************************" | tee -a "$TEST_RESULTS"
  215. echo "Testing: debug, c++11" | tee -a "$TEST_RESULTS"
  216. echo
  217. unset CXXFLAGS
  218. "$MAKE" clean > /dev/null 2>&1
  219. export CXXFLAGS="-DDEBUG -g2 -O2 -std=c++11 $ADD_CXXFLAGS"
  220. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  221. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  222. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  223. fi
  224. ############################################
  225. # c++11 release build
  226. if [ "$HAVE_CXX11" -ne "0" ]; then
  227. echo
  228. echo "************************************" | tee -a "$TEST_RESULTS"
  229. echo "Testing: release, c++11" | tee -a "$TEST_RESULTS"
  230. echo
  231. unset CXXFLAGS
  232. "$MAKE" clean > /dev/null 2>&1
  233. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++11 $ADD_CXXFLAGS"
  234. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  235. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  236. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  237. fi
  238. ############################################
  239. # Debug build, all backwards compatibility.
  240. echo
  241. echo "************************************" | tee -a "$TEST_RESULTS"
  242. echo "Testing: debug, MAINTAIN_BACKWARDS_COMPATIBILITY" | tee -a "$TEST_RESULTS"
  243. echo
  244. unset CXXFLAGS
  245. "$MAKE" clean > /dev/null 2>&1
  246. export CXXFLAGS="-DDEBUG -g2 -O2 -DCRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY $ADD_CXXFLAGS"
  247. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  248. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  249. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  250. ############################################
  251. # Release build, all backwards compatibility.
  252. echo
  253. echo "************************************" | tee -a "$TEST_RESULTS"
  254. echo "Testing: release, MAINTAIN_BACKWARDS_COMPATIBILITY" | tee -a "$TEST_RESULTS"
  255. echo
  256. unset CXXFLAGS
  257. "$MAKE" clean > /dev/null 2>&1
  258. export CXXFLAGS="-DNDEBUG -g2 -O2 -DCRYPTOPP_MAINTAIN_BACKWARDS_COMPATIBILITY $ADD_CXXFLAGS"
  259. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  260. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  261. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  262. ############################################
  263. # Debug build, init_priority
  264. echo
  265. echo "************************************" | tee -a "$TEST_RESULTS"
  266. echo "Testing: debug, INIT_PRIORITY" | tee -a "$TEST_RESULTS"
  267. echo
  268. unset CXXFLAGS
  269. "$MAKE" clean > /dev/null 2>&1
  270. export CXXFLAGS="-DDEBUG -g2 -O1 -DCRYPTOPP_INIT_PRIORITY=250 $ADD_CXXFLAGS"
  271. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  272. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  273. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  274. ############################################
  275. # Release build, init_priority
  276. echo
  277. echo "************************************" | tee -a "$TEST_RESULTS"
  278. echo "Testing: release, INIT_PRIORITY" | tee -a "$TEST_RESULTS"
  279. echo
  280. unset CXXFLAGS
  281. "$MAKE" clean > /dev/null 2>&1
  282. export CXXFLAGS="-DNDEBUG -g2 -O2 -DCRYPTOPP_INIT_PRIORITY=250 $ADD_CXXFLAGS"
  283. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  284. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  285. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  286. ############################################
  287. # Release build, no unaligned data access
  288. # This test will not be needed in Crypto++ 5.7 and above
  289. echo
  290. echo "************************************" | tee -a "$TEST_RESULTS"
  291. echo "Testing: release, NO_UNALIGNED_DATA_ACCESS" | tee -a "$TEST_RESULTS"
  292. echo
  293. unset CXXFLAGS
  294. "$MAKE" clean > /dev/null 2>&1
  295. export CXXFLAGS="-DNDEBUG -g2 -O2 -DCRYPTOPP_NO_UNALIGNED_DATA_ACCESS $ADD_CXXFLAGS"
  296. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  297. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  298. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  299. ############################################
  300. # Release build, no backwards compatibility with Crypto++ 5.6.2.
  301. # This test will not be needed in Crypto++ 5.7 and above
  302. echo
  303. echo "************************************" | tee -a "$TEST_RESULTS"
  304. echo "Testing: release, NO_BACKWARDS_COMPATIBILITY_562" | tee -a "$TEST_RESULTS"
  305. echo
  306. unset CXXFLAGS
  307. "$MAKE" clean > /dev/null 2>&1
  308. export CXXFLAGS="-DNDEBUG -g2 -O2 -DCRYPTOPP_NO_BACKWARDS_COMPATIBILITY_562 $ADD_CXXFLAGS"
  309. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  310. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  311. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  312. ############################################
  313. # Debug build, OS Independence
  314. echo
  315. echo "************************************" | tee -a "$TEST_RESULTS"
  316. echo "Testing: debug, NO_OS_DEPENDENCE" | tee -a "$TEST_RESULTS"
  317. echo
  318. unset CXXFLAGS
  319. "$MAKE" clean > /dev/null 2>&1
  320. export CXXFLAGS="-DDEBUG -g2 -O1 -DNO_OS_DEPENDENCE $ADD_CXXFLAGS"
  321. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  322. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  323. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  324. ############################################
  325. # Release build, OS Independence
  326. echo
  327. echo "************************************" | tee -a "$TEST_RESULTS"
  328. echo "Testing: release, NO_OS_DEPENDENCE" | tee -a "$TEST_RESULTS"
  329. echo
  330. unset CXXFLAGS
  331. "$MAKE" clean > /dev/null 2>&1
  332. export CXXFLAGS="-DNDEBUG -g2 -O2 -DNO_OS_DEPENDENCE $ADD_CXXFLAGS"
  333. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  334. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  335. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  336. ############################################
  337. # Debug build at -O3
  338. echo
  339. echo "************************************" | tee -a "$TEST_RESULTS"
  340. echo "Testing: debug, -O3 optimizations" | tee -a "$TEST_RESULTS"
  341. echo
  342. unset CXXFLAGS
  343. "$MAKE" clean > /dev/null 2>&1
  344. export CXXFLAGS="-DDEBUG -g2 -O3 $ADD_CXXFLAGS"
  345. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  346. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  347. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  348. ############################################
  349. # Release build at -O3
  350. echo
  351. echo "************************************" | tee -a "$TEST_RESULTS"
  352. echo "Testing: release, -O3 optimizations" | tee -a "$TEST_RESULTS"
  353. echo
  354. unset CXXFLAGS
  355. "$MAKE" clean > /dev/null 2>&1
  356. export CXXFLAGS="-DNDEBUG -g2 -O3 $ADD_CXXFLAGS"
  357. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  358. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  359. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  360. ############################################
  361. # Debug build at -Os
  362. echo
  363. echo "************************************" | tee -a "$TEST_RESULTS"
  364. echo "Testing: debug, -Os optimizations" | tee -a "$TEST_RESULTS"
  365. echo
  366. unset CXXFLAGS
  367. "$MAKE" clean > /dev/null 2>&1
  368. export CXXFLAGS="-DDEBUG -g2 -Os $ADD_CXXFLAGS"
  369. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  370. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  371. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  372. ############################################
  373. # Release build at -Os
  374. echo
  375. echo "************************************" | tee -a "$TEST_RESULTS"
  376. echo "Testing: release, -Os optimizations" | tee -a "$TEST_RESULTS"
  377. echo
  378. unset CXXFLAGS
  379. "$MAKE" clean > /dev/null 2>&1
  380. export CXXFLAGS="-DNDEBUG -g2 -Os $ADD_CXXFLAGS"
  381. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  382. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  383. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  384. ############################################
  385. # Debug build, UBSan, c++03
  386. if [ "$HAVE_CXX03" -ne "0" ] && [ "$HAVE_UBSAN" -ne "0" ]; then
  387. echo
  388. echo "************************************" | tee -a "$TEST_RESULTS"
  389. echo "Testing: debug, c++03, UBsan" | tee -a "$TEST_RESULTS"
  390. echo
  391. unset CXXFLAGS
  392. "$MAKE" clean > /dev/null 2>&1
  393. export CXXFLAGS="-DDEBUG -g2 -O1 -std=c++03 $ADD_CXXFLAGS"
  394. "$MAKE" ubsan | tee -a "$TEST_RESULTS"
  395. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  396. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  397. fi
  398. ############################################
  399. # Release build, UBSan, c++03
  400. if [ "$HAVE_CXX03" -ne "0" ] && [ "$HAVE_UBSAN" -ne "0" ]; then
  401. echo
  402. echo "************************************" | tee -a "$TEST_RESULTS"
  403. echo "Testing: release, c++03, UBsan" | tee -a "$TEST_RESULTS"
  404. echo
  405. unset CXXFLAGS
  406. "$MAKE" clean > /dev/null 2>&1
  407. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++03 $ADD_CXXFLAGS"
  408. "$MAKE" ubsan | tee -a "$TEST_RESULTS"
  409. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  410. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  411. fi
  412. ############################################
  413. # Debug build, Asan, c++03
  414. if [ "$HAVE_CXX03" -ne "0" ] && [ "$HAVE_ASAN" -ne "0" ]; then
  415. echo
  416. echo "************************************" | tee -a "$TEST_RESULTS"
  417. echo "Testing: debug, c++03, Asan" | tee -a "$TEST_RESULTS"
  418. echo
  419. unset CXXFLAGS
  420. "$MAKE" clean > /dev/null 2>&1
  421. export CXXFLAGS="-DDEBUG -g2 -O1 -std=c++03 $ADD_CXXFLAGS"
  422. "$MAKE" asan | tee -a "$TEST_RESULTS"
  423. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  424. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  425. fi
  426. ############################################
  427. # Release build, Asan, c++03
  428. if [ "$HAVE_CXX03" -ne "0" ] && [ "$HAVE_ASAN" -ne "0" ]; then
  429. echo
  430. echo "************************************" | tee -a "$TEST_RESULTS"
  431. echo "Testing: release, c++03, Asan" | tee -a "$TEST_RESULTS"
  432. echo
  433. unset CXXFLAGS
  434. "$MAKE" clean > /dev/null 2>&1
  435. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++03 $ADD_CXXFLAGS"
  436. "$MAKE" asan | tee -a "$TEST_RESULTS"
  437. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  438. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  439. fi
  440. ############################################
  441. # Release build, UBSan, c++11
  442. if [ "$HAVE_CXX11" -ne "0" ] && [ "$HAVE_UBSAN" -ne "0" ]; then
  443. echo "************************************" | tee -a "$TEST_RESULTS"
  444. echo "Testing: c++11, UBsan" | tee -a "$TEST_RESULTS"
  445. echo
  446. unset CXXFLAGS
  447. "$MAKE" clean > /dev/null 2>&1
  448. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++11 $ADD_CXXFLAGS"
  449. "$MAKE" ubsan | tee -a "$TEST_RESULTS"
  450. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  451. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  452. fi
  453. ############################################
  454. # Release build, Asan, c++11
  455. if [ "$HAVE_CXX11" -ne "0" ] && [ "$HAVE_ASAN" -ne "0" ]; then
  456. echo
  457. echo "************************************" | tee -a "$TEST_RESULTS"
  458. echo "Testing: c++11, Asan" | tee -a "$TEST_RESULTS"
  459. echo
  460. unset CXXFLAGS
  461. "$MAKE" clean > /dev/null 2>&1
  462. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++11 $ADD_CXXFLAGS"
  463. "$MAKE" asan | tee -a "$TEST_RESULTS"
  464. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  465. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  466. fi
  467. # For Darwin, we need to test both -stdlib=libstdc++ (GNU) and
  468. # -stdlib=libc++ (LLVM) crossed with -std=c++03 and -std=c++11.
  469. ############################################
  470. # Darwin, c++03, libc++
  471. if [ "$HAVE_CXX03" -ne "0" ] && [ "$IS_DARWIN" -ne "0" ]; then
  472. echo
  473. echo "************************************" | tee -a "$TEST_RESULTS"
  474. echo "Testing: Darwin, c++03, libc++ (LLVM)" | tee -a "$TEST_RESULTS"
  475. echo
  476. unset CXXFLAGS
  477. "$MAKE" clean > /dev/null 2>&1
  478. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++03 -stdlib=libc++ $ADD_CXXFLAGS"
  479. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  480. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  481. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  482. fi
  483. ############################################
  484. # Darwin, c++03, libstdc++
  485. if [ "$HAVE_CXX03" -ne "0" ] && [ "$IS_DARWIN" -ne "0" ]; then
  486. echo
  487. echo "************************************" | tee -a "$TEST_RESULTS"
  488. echo "Testing: Darwin, c++03, libstdc++ (GNU)" | tee -a "$TEST_RESULTS"
  489. echo
  490. unset CXXFLAGS
  491. "$MAKE" clean > /dev/null 2>&1
  492. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++03 -stdlib=libstdc++ $ADD_CXXFLAGS"
  493. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  494. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  495. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  496. fi
  497. ############################################
  498. # Darwin, c++11, libc++
  499. if [ "$IS_DARWIN" -ne "0" ] && [ "$HAVE_CXX11" -ne "0" ]; then
  500. echo
  501. echo "************************************" | tee -a "$TEST_RESULTS"
  502. echo "Testing: Darwin, c++11, libc++ (LLVM)" | tee -a "$TEST_RESULTS"
  503. echo
  504. unset CXXFLAGS
  505. "$MAKE" clean > /dev/null 2>&1
  506. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++11 -stdlib=libc++ $ADD_CXXFLAGS"
  507. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  508. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  509. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  510. fi
  511. ############################################
  512. # Darwin, c++11, libstdc++
  513. if [ "$IS_DARWIN" -ne "0" ] && [ "$HAVE_CXX11" -ne "0" ]; then
  514. echo
  515. echo "************************************" | tee -a "$TEST_RESULTS"
  516. echo "Testing: Darwin, c++11, libstdc++ (GNU)" | tee -a "$TEST_RESULTS"
  517. echo
  518. unset CXXFLAGS
  519. "$MAKE" clean > /dev/null 2>&1
  520. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++11 -stdlib=libstdc++ $ADD_CXXFLAGS"
  521. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  522. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  523. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  524. fi
  525. ############################################
  526. # Darwin, c++03, Malloc Guards
  527. if [ "$IS_DARWIN" -ne "0" ] && [ "$HAVE_CXX03" -ne "0" ]; then
  528. echo
  529. echo "************************************" | tee -a "$TEST_RESULTS"
  530. echo "Testing: Darwin, c++03, Malloc Guards" | tee -a "$TEST_RESULTS"
  531. echo
  532. unset CXXFLAGS
  533. "$MAKE" clean > /dev/null 2>&1
  534. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++03 $ADD_CXXFLAGS"
  535. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  536. export MallocScribble=1
  537. export MallocPreScribble=1
  538. export MallocGuardEdges=1
  539. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  540. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  541. unset MallocScribble MallocPreScribble MallocGuardEdges
  542. fi
  543. ############################################
  544. # Darwin, c++11, Malloc Guards
  545. if [ "$IS_DARWIN" -ne "0" ] && [ "$HAVE_CXX11" -ne "0" ]; then
  546. echo
  547. echo "************************************" | tee -a "$TEST_RESULTS"
  548. echo "Testing: Darwin, c++11, Malloc Guards" | tee -a "$TEST_RESULTS"
  549. echo
  550. unset CXXFLAGS
  551. "$MAKE" clean > /dev/null 2>&1
  552. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++11 $ADD_CXXFLAGS"
  553. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  554. export MallocScribble=1
  555. export MallocPreScribble=1
  556. export MallocGuardEdges=1
  557. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  558. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  559. unset MallocScribble MallocPreScribble MallocGuardEdges
  560. fi
  561. # Try to locate a Xcode compiler for testing under Darwin
  562. XCODE_COMPILER=$(find /Applications/Xcode*.app/Contents/Developer -name clang++ | head -1)
  563. ############################################
  564. # Xcode compiler
  565. if [ "$IS_DARWIN" -ne "0" ] && [ -z "$XCODE_COMPILER" ]; then
  566. echo
  567. echo "************************************" | tee -a "$TEST_RESULTS"
  568. echo "Testing: Xcode Clang compiler" | tee -a "$TEST_RESULTS"
  569. echo
  570. unset CXXFLAGS
  571. "$MAKE" clean > /dev/null 2>&1
  572. expot CXX="$XCODE_COMPILER"
  573. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++11 $ADD_CXXFLAGS"
  574. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  575. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  576. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  577. fi
  578. ############################################
  579. # Benchmarks, c++03
  580. if [ "$HAVE_CXX03" -ne "0" ]; then
  581. echo
  582. echo "************************************" | tee -a "$TEST_RESULTS"
  583. echo "Testing: Benchmarks, c++03" | tee -a "$TEST_RESULTS"
  584. echo
  585. unset CXXFLAGS
  586. "$MAKE" clean > /dev/null 2>&1
  587. export CXXFLAGS="-DNDEBUG -O3 -std=c++03 $ADD_CXXFLAGS"
  588. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  589. ./cryptest.exe b 3 2.4+1e9 2>&1 | tee -a "$BENCHMARK_RESULTS"
  590. fi
  591. ############################################
  592. # Benchmarks, c++11
  593. if [ "$HAVE_CXX11" -ne "0" ]; then
  594. echo
  595. echo "************************************" | tee -a "$TEST_RESULTS"
  596. echo "Testing: Benchmarks, c++11" | tee -a "$TEST_RESULTS"
  597. echo
  598. unset CXXFLAGS
  599. "$MAKE" clean > /dev/null 2>&1
  600. export CXXFLAGS="-DNDEBUG -O3 -std=c++11 $ADD_CXXFLAGS"
  601. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  602. ./cryptest.exe b 3 2.4+1e9 2>&1 | tee -a "$BENCHMARK_RESULTS"
  603. fi
  604. # For Cygwin, we need to test both PREFER_BERKELEY_STYLE_SOCKETS
  605. # and PREFER_WINDOWS_STYLE_SOCKETS
  606. ############################################
  607. # MinGW and PREFER_BERKELEY_STYLE_SOCKETS
  608. if [ "$IS_MINGW" -ne "0" ]; then
  609. echo
  610. echo "************************************" | tee -a "$TEST_RESULTS"
  611. echo "Testing: MinGW, PREFER_BERKELEY_STYLE_SOCKETS" | tee -a "$TEST_RESULTS"
  612. echo
  613. unset CXXFLAGS
  614. "$MAKE" clean > /dev/null 2>&1
  615. export CXXFLAGS="-DNDEBUG -g2 -O2 -DPREFER_BERKELEY_STYLE_SOCKETS -DNO_WINDOWS_STYLE_SOCKETS $ADD_CXXFLAGS"
  616. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  617. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  618. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  619. fi
  620. ############################################
  621. # MinGW and PREFER_WINDOWS_STYLE_SOCKETS
  622. if [ "$IS_MINGW" -ne "0" ]; then
  623. echo
  624. echo "************************************" | tee -a "$TEST_RESULTS"
  625. echo "Testing: MinGW, PREFER_WINDOWS_STYLE_SOCKETS" | tee -a "$TEST_RESULTS"
  626. echo
  627. unset CXXFLAGS
  628. "$MAKE" clean > /dev/null 2>&1
  629. export CXXFLAGS="-DNDEBUG -g2 -O2 -DPREFER_WINDOWS_STYLE_SOCKETS -DNO_BERKELEY_STYLE_SOCKETS $ADD_CXXFLAGS"
  630. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  631. ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  632. ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  633. fi
  634. ############################################
  635. # Valgrind, c++03. Requires -O1 for accurate results
  636. if [ "$HAVE_CXX03" -ne "0" ] && [ "$HAVE_VALGRIND" -ne "0" ]; then
  637. echo
  638. echo "************************************" | tee -a "$TEST_RESULTS"
  639. echo "Testing: Valgrind, c++03" | tee -a "$TEST_RESULTS"
  640. echo
  641. unset CXXFLAGS
  642. "$MAKE" clean > /dev/null 2>&1
  643. export CXXFLAGS="-DNDEBUG -std=c++03 -g3 -O1 $ADD_CXXFLAGS"
  644. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  645. valgrind --track-origins=yes ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  646. valgrind --track-origins=yes ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  647. fi
  648. ############################################
  649. # Valgrind, c++11. Requires -O1 for accurate results
  650. if [ "$HAVE_VALGRIND" -ne "0" ] && [ "$HAVE_CXX11" -ne "0" ]; then
  651. echo
  652. echo "************************************" | tee -a "$TEST_RESULTS"
  653. echo "Testing: Valgrind, c++11" | tee -a "$TEST_RESULTS"
  654. echo
  655. unset CXXFLAGS
  656. "$MAKE" clean > /dev/null 2>&1
  657. export CXXFLAGS="-DNDEBUG -std=c++11 -g3 -O1 $ADD_CXXFLAGS"
  658. "$MAKE" static cryptest.exe 2>&1 | tee -a "$TEST_RESULTS"
  659. valgrind --track-origins=yes ./cryptest.exe v 2>&1 | tee -a "$TEST_RESULTS"
  660. valgrind --track-origins=yes ./cryptest.exe tv all 2>&1 | tee -a "$TEST_RESULTS"
  661. fi
  662. ############################################
  663. ############################################
  664. if [ "$CXX" == "g++" ] && [ "$HAVE_CXX11" -ne "0" ]; then
  665. ############################################
  666. # Basic debug build
  667. echo
  668. echo "************************************" | tee -a "$WARN_TEST_RESULTS"
  669. echo "Testing: debug, c++11, elevated warnings" | tee -a "$WARN_TEST_RESULTS"
  670. echo
  671. unset CXXFLAGS
  672. "$MAKE" clean > /dev/null 2>&1
  673. export CXXFLAGS="-DDEBUG -g2 -O2 -std=c++11 -DCRYPTOPP_NO_BACKWARDS_COMPATIBILITY_562 -Wall -Wextra -Wno-unknown-pragmas"
  674. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$WARN_TEST_RESULTS"
  675. ############################################
  676. # Basic release build
  677. echo
  678. echo "************************************" | tee -a "$WARN_TEST_RESULTS"
  679. echo "Testing: release, c++11, elevated warnings" | tee -a "$WARN_TEST_RESULTS"
  680. echo
  681. unset CXXFLAGS
  682. "$MAKE" clean > /dev/null 2>&1
  683. export CXXFLAGS="-DNDEBUG -g2 -O2 -std=c++11 -DCRYPTOPP_NO_BACKWARDS_COMPATIBILITY_562 -Wall -Wextra -Wno-unknown-pragmas"
  684. "$MAKE" static dynamic cryptest.exe 2>&1 | tee -a "$WARN_TEST_RESULTS"
  685. fi
  686. ############################################
  687. ############################################
  688. TEST_END=$(date)
  689. echo "************************************************" | tee -a "$TEST_RESULTS"
  690. echo "************************************************" | tee -a "$TEST_RESULTS"
  691. echo | tee -a "$TEST_RESULTS"
  692. echo "Testing started: $TEST_BEGIN" | tee -a "$TEST_RESULTS"
  693. echo "Testing finished: $TEST_END" | tee -a "$TEST_RESULTS"
  694. echo | tee -a "$TEST_RESULTS"
  695. COUNT=$(grep -a "Testing: " cryptest-result.txt | wc -l)
  696. if [ "$COUNT" -eq "0" ]; then
  697. echo "No configurations tested" | tee -a "$TEST_RESULTS"
  698. else
  699. echo "$COUNT configurations tested" | tee -a "$TEST_RESULTS"
  700. fi
  701. echo | tee -a "$TEST_RESULTS"
  702. # "FAILED" is from Crypto++
  703. # "Error" is from the GNU assembler
  704. # "error" is from the sanitizers
  705. # "Illegal", "0 errors" and "suppressed errors" are from Valgrind.
  706. COUNT=$(egrep -a '(Error|error|FAILED|Illegal)' cryptest-result.txt | egrep -v "( 0 errors|suppressed errors|memory error detector)" | wc -l)
  707. if [ "$COUNT" -eq "0" ]; then
  708. echo "No failures detected" | tee -a "$TEST_RESULTS"
  709. else
  710. echo "$COUNT errors detected" | tee -a "$TEST_RESULTS"
  711. echo
  712. egrep -an "(Error|error|FAILED|Illegal)" cryptest-result.txt
  713. fi
  714. echo | tee -a "$TEST_RESULTS"
  715. echo "************************************************" | tee -a "$TEST_RESULTS"
  716. echo "************************************************" | tee -a "$TEST_RESULTS"