cibuild.yml 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. name: CI build
  2. on:
  3. push:
  4. pull_request:
  5. release:
  6. types: [published]
  7. workflow_dispatch:
  8. jobs:
  9. build:
  10. runs-on: ${{ matrix.os }}
  11. strategy:
  12. fail-fast: true
  13. matrix:
  14. include:
  15. - os: ubuntu-latest
  16. compiler: clang
  17. env:
  18. idx: 1
  19. N: Clang-Linux-Minimal-Debug
  20. BUILD_TYPE: Debug
  21. ENABLE_SSL_DYNAMIC_LOADING: YES
  22. OPENSSL_1_0: NO
  23. OPENSSL_1_1: NO
  24. ENABLE_CXX: NO
  25. ENABLE_LUA_SHARED: NO
  26. C_STANDARD: auto
  27. CXX_STANDARD: auto
  28. BUILD_SHARED: NO
  29. NO_FILES: YES
  30. ENABLE_SSL: NO
  31. NO_CGI: YES
  32. ENABLE_IPV6: NO
  33. ENABLE_WEBSOCKETS: NO
  34. ENABLE_SERVER_STATS: NO
  35. ENABLE_LUA: NO
  36. ENABLE_DUKTAPE: NO
  37. NO_CACHING: NO
  38. ALLOW_WARNINGS: YES
  39. RUN_UNITTEST: 1
  40. - os: ubuntu-latest
  41. compiler: clang
  42. env:
  43. idx: 3
  44. N: Clang-Linux-Default-Release
  45. BUILD_TYPE: Release
  46. ENABLE_SSL_DYNAMIC_LOADING: YES
  47. OPENSSL_1_0: YES
  48. OPENSSL_1_1: NO
  49. ENABLE_CXX: NO
  50. ENABLE_LUA_SHARED: NO
  51. C_STANDARD: auto
  52. CXX_STANDARD: auto
  53. BUILD_SHARED: NO
  54. NO_FILES: NO
  55. ENABLE_SSL: YES
  56. NO_CGI: NO
  57. ENABLE_IPV6: NO
  58. ENABLE_WEBSOCKETS: NO
  59. ENABLE_SERVER_STATS: NO
  60. ENABLE_LUA: NO
  61. ENABLE_DUKTAPE: NO
  62. NO_CACHING: NO
  63. ALLOW_WARNINGS: YES
  64. RUN_UNITTEST: 1
  65. - os: ubuntu-latest
  66. compiler: gcc
  67. env:
  68. idx: 5
  69. N: GCC-Linux-Complete-NoLua-Release
  70. BUILD_TYPE: Release
  71. ENABLE_SSL_DYNAMIC_LOADING: YES
  72. OPENSSL_1_0: YES
  73. OPENSSL_1_1: NO
  74. ENABLE_CXX: NO
  75. ENABLE_LUA_SHARED: NO
  76. C_STANDARD: auto
  77. CXX_STANDARD: auto
  78. BUILD_SHARED: NO
  79. NO_FILES: NO
  80. ENABLE_SSL: YES
  81. NO_CGI: NO
  82. ENABLE_IPV6: YES
  83. ENABLE_WEBSOCKETS: YES
  84. ENABLE_SERVER_STATS: YES
  85. ENABLE_LUA: NO
  86. ENABLE_DUKTAPE: NO
  87. NO_CACHING: YES
  88. ALLOW_WARNINGS: YES
  89. RUN_UNITTEST: 1
  90. - os: ubuntu-latest
  91. compiler: clang
  92. env:
  93. idx: 6
  94. N: CLANG-AnyVersion-Linux-Coverage
  95. BUILD_TYPE: Coverage
  96. ENABLE_SSL_DYNAMIC_LOADING: YES
  97. OPENSSL_1_0: YES
  98. OPENSSL_1_1: NO
  99. ENABLE_CXX: NO
  100. ENABLE_LUA_SHARED: NO
  101. C_STANDARD: auto
  102. CXX_STANDARD: auto
  103. BUILD_SHARED: NO
  104. NO_FILES: NO
  105. ENABLE_SSL: YES
  106. NO_CGI: NO
  107. ENABLE_IPV6: YES
  108. ENABLE_WEBSOCKETS: YES
  109. ENABLE_SERVER_STATS: YES
  110. ENABLE_LUA: NO
  111. ENABLE_DUKTAPE: NO
  112. NO_CACHING: NO
  113. ALLOW_WARNINGS: YES
  114. RUN_UNITTEST: 1
  115. - os: ubuntu-latest
  116. compiler: clang
  117. env:
  118. idx: 9
  119. N: Clang-Linux-Default-Shared
  120. BUILD_TYPE: Debug
  121. ENABLE_SSL_DYNAMIC_LOADING: YES
  122. OPENSSL_1_0: NO
  123. OPENSSL_1_1: YES
  124. ENABLE_CXX: NO
  125. ENABLE_LUA_SHARED: NO
  126. C_STANDARD: auto
  127. CXX_STANDARD: auto
  128. BUILD_SHARED: YES
  129. NO_FILES: NO
  130. ENABLE_SSL: YES
  131. NO_CGI: NO
  132. ENABLE_IPV6: NO
  133. ENABLE_WEBSOCKETS: NO
  134. ENABLE_SERVER_STATS: NO
  135. ENABLE_LUA: NO
  136. ENABLE_DUKTAPE: NO
  137. NO_CACHING: NO
  138. ALLOW_WARNINGS: YES
  139. RUN_UNITTEST: 1
  140. - os: ubuntu-latest
  141. compiler: gcc
  142. env:
  143. idx: 15
  144. N: GCCLinuxDefault_RelWithDebInfo
  145. BUILD_TYPE: RelWithDebInfo
  146. ENABLE_SSL_DYNAMIC_LOADING: YES
  147. OPENSSL_1_0: YES
  148. OPENSSL_1_1: NO
  149. ENABLE_CXX: NO
  150. ENABLE_LUA_SHARED: NO
  151. C_STANDARD: auto
  152. CXX_STANDARD: auto
  153. BUILD_SHARED: NO
  154. NO_FILES: NO
  155. ENABLE_SSL: YES
  156. NO_CGI: NO
  157. ENABLE_IPV6: NO
  158. ENABLE_WEBSOCKETS: NO
  159. ENABLE_LUA: NO
  160. ENABLE_DUKTAPE: NO
  161. NO_CACHING: NO
  162. ALLOW_WARNINGS: YES
  163. RUN_UNITTEST: 1
  164. - os: ubuntu-latest
  165. compiler: gcc
  166. env:
  167. idx: 16
  168. N: GCCLinuxDefault_MinSizeRel
  169. BUILD_TYPE: MinSizeRel
  170. ENABLE_SSL_DYNAMIC_LOADING: YES
  171. OPENSSL_1_0: YES
  172. OPENSSL_1_1: NO
  173. ENABLE_CXX: NO
  174. ENABLE_LUA_SHARED: NO
  175. C_STANDARD: auto
  176. CXX_STANDARD: auto
  177. BUILD_SHARED: NO
  178. NO_FILES: NO
  179. ENABLE_SSL: YES
  180. NO_CGI: NO
  181. ENABLE_IPV6: NO
  182. ENABLE_WEBSOCKETS: NO
  183. ENABLE_LUA: NO
  184. ENABLE_DUKTAPE: NO
  185. NO_CACHING: NO
  186. ALLOW_WARNINGS: YES
  187. RUN_UNITTEST: 1
  188. - os: ubuntu-latest
  189. compiler: gcc
  190. env:
  191. idx: 17
  192. N: GCCLinuxDefault_None
  193. BUILD_TYPE: None
  194. ENABLE_SSL_DYNAMIC_LOADING: YES
  195. OPENSSL_1_0: YES
  196. OPENSSL_1_1: NO
  197. ENABLE_CXX: NO
  198. ENABLE_LUA_SHARED: NO
  199. C_STANDARD: auto
  200. CXX_STANDARD: auto
  201. BUILD_SHARED: NO
  202. NO_FILES: NO
  203. ENABLE_SSL: YES
  204. NO_CGI: NO
  205. ENABLE_IPV6: NO
  206. ENABLE_WEBSOCKETS: NO
  207. ENABLE_LUA: NO
  208. ENABLE_DUKTAPE: NO
  209. NO_CACHING: NO
  210. ALLOW_WARNINGS: YES
  211. RUN_UNITTEST: 1
  212. - os: ubuntu-latest
  213. compiler: gcc
  214. env:
  215. idx: 20
  216. N: GCCLinuxDefault_xenial
  217. BUILD_TYPE: Release
  218. ENABLE_SSL_DYNAMIC_LOADING: YES
  219. OPENSSL_1_0: YES
  220. OPENSSL_1_1: NO
  221. ENABLE_CXX: NO
  222. ENABLE_LUA_SHARED: NO
  223. C_STANDARD: auto
  224. CXX_STANDARD: auto
  225. BUILD_SHARED: NO
  226. NO_FILES: NO
  227. ENABLE_SSL: YES
  228. NO_CGI: NO
  229. ENABLE_IPV6: NO
  230. ENABLE_WEBSOCKETS: NO
  231. ENABLE_LUA: NO
  232. ENABLE_DUKTAPE: NO
  233. NO_CACHING: NO
  234. ALLOW_WARNINGS: YES
  235. RUN_UNITTEST: 1
  236. - os: ubuntu-latest
  237. compiler: gcc
  238. env:
  239. idx: 23
  240. N: GCCLinuxDefault_focal
  241. BUILD_TYPE: Release
  242. ENABLE_SSL_DYNAMIC_LOADING: YES
  243. OPENSSL_1_0: NO
  244. OPENSSL_1_1: YES
  245. ENABLE_CXX: NO
  246. ENABLE_LUA_SHARED: NO
  247. C_STANDARD: auto
  248. CXX_STANDARD: auto
  249. BUILD_SHARED: NO
  250. NO_FILES: NO
  251. ENABLE_SSL: YES
  252. NO_CGI: NO
  253. ENABLE_IPV6: NO
  254. ENABLE_WEBSOCKETS: NO
  255. ENABLE_LUA: NO
  256. ENABLE_DUKTAPE: NO
  257. NO_CACHING: NO
  258. ALLOW_WARNINGS: YES
  259. RUN_UNITTEST: 1
  260. # Disable Lua build, until someone knows how to fix the CMake files
  261. # see https://github.com/civetweb/civetweb/issues/543
  262. # - os: ubuntu-lastest
  263. # compiler: clang
  264. # env:
  265. # idx: 99
  266. # N: Clang-Linux-Complete-WithLua-Debug
  267. # BUILD_TYPE: Debug
  268. # ENABLE_SSL_DYNAMIC_LOADING: YES
  269. # OPENSSL_1_0: NO
  270. # OPENSSL_1_1: YES
  271. # ENABLE_CXX: NO
  272. # C_STANDARD: auto
  273. # CXX_STANDARD: auto
  274. # BUILD_SHARED: NO
  275. # NO_FILES: NO
  276. # ENABLE_SSL: YES
  277. # NO_CGI: NO
  278. # ENABLE_IPV6: YES
  279. # ENABLE_WEBSOCKETS: YES
  280. # ENABLE_SERVER_STATS: YES
  281. # ENABLE_LUA: YES
  282. # ENABLE_LUA_SHARED: YES
  283. # ENABLE_DUKTAPE: NO
  284. # NO_CACHING: YES
  285. # ALLOW_WARNINGS: YES
  286. # RUN_UNITTEST: 1
  287. - os: macos-latest
  288. compiler: clang
  289. env:
  290. idx: 8
  291. N: Clang-OSX-Complete-NoLua-Release-OpenSSL_1_1_NoDynLoad
  292. BUILD_TYPE: Release
  293. ENABLE_SSL_DYNAMIC_LOADING: NO
  294. OPENSSL_1_0: NO
  295. OPENSSL_1_1: YES
  296. ENABLE_CXX: NO
  297. ENABLE_LUA_SHARED: NO
  298. C_STANDARD: auto
  299. CXX_STANDARD: auto
  300. BUILD_SHARED: NO
  301. NO_FILES: NO
  302. ENABLE_SSL: YES
  303. NO_CGI: NO
  304. ENABLE_IPV6: YES
  305. ENABLE_WEBSOCKETS: YES
  306. ENABLE_SERVER_STATS: YES
  307. ENABLE_LUA: NO
  308. ENABLE_DUKTAPE: NO
  309. NO_CACHING: YES
  310. ALLOW_WARNINGS: YES
  311. RUN_UNITTEST: 1
  312. # mac-os 13 is the last version of MacOS runner using x86_64 architecture
  313. # mac-os 14 and later are using arm64 architecture
  314. # but OpenSSL 1.0 can't compile on arm64, so we set it fixed to mac-os 13
  315. - os: macos-13
  316. compiler: clang
  317. env:
  318. idx: 11
  319. N: OSX-Package
  320. BUILD_TYPE: Release
  321. ENABLE_SSL_DYNAMIC_LOADING: YES
  322. OPENSSL_1_0: YES
  323. OPENSSL_1_1: NO
  324. ENABLE_CXX: NO
  325. ENABLE_LUA_SHARED: NO
  326. C_STANDARD: auto
  327. CXX_STANDARD: auto
  328. BUILD_SHARED: NO
  329. NO_FILES: NO
  330. ENABLE_SSL: YES
  331. NO_CGI: NO
  332. ENABLE_IPV6: YES
  333. ENABLE_WEBSOCKETS: YES
  334. ENABLE_SERVER_STATS: NO
  335. ENABLE_LUA: NO
  336. ENABLE_DUKTAPE: NO
  337. NO_CACHING: NO
  338. ALLOW_WARNINGS: YES
  339. MACOSX_PACKAGE: 1
  340. RUN_UNITTEST: 1
  341. steps:
  342. - name: Checkout code
  343. uses: actions/checkout@v4.1.7
  344. - name: Install clang on Linux
  345. if: matrix.compiler == 'clang' && matrix.os == 'ubuntu-latest'
  346. run: |
  347. sudo apt-get install --no-install-recommends -y clang
  348. sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100
  349. sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++ 100
  350. - name: Install OpenSSL 1.0 on modern MacOS
  351. # Needed for recent versions of MacOS as they ship with OpenSSL 1.1 by default
  352. if: matrix.os == 'macos-13' && matrix.env.OPENSSL_1_0 == 'YES'
  353. run: |
  354. curl -O -L https://openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz
  355. tar -xzf openssl-1.0.2u.tar.gz
  356. cd openssl-1.0.2u
  357. ./Configure --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared shared darwin64-x86_64-cc
  358. #make depend
  359. make -j $(nproc)
  360. sudo make install_sw -j $(nproc)
  361. OPENSSL_ROOT_DIR=/usr/local/ssl
  362. LDFLAGS=-L${OPENSSL_ROOT_DIR}/lib
  363. CFLAGS=-I${OPENSSL_ROOT_DIR}/include
  364. ADDITIONAL_CMAKE_ARGS="-DCMAKE_SHARED_LINKER_FLAGS=${LDFLAGS} -DMAKE_C_FLAGS=${CFLAGS}"
  365. PKG_CONFIG_PATH=${OPENSSL_ROOT_DIR}/lib/pkgconfig
  366. echo "LDFLAGS=${LDFLAGS}" >> $GITHUB_ENV
  367. echo "CFLAGS=${CFLAGS}" >> $GITHUB_ENV
  368. echo "${OPENSSL_ROOT_DIR}/bin" >> $GITHUB_PATH
  369. echo "ADDITIONAL_CMAKE_ARGS=${ADDITIONAL_CMAKE_ARGS}" >> $GITHUB_ENV
  370. echo "PKG_CONFIG_PATH=${PKG_CONFIG_PATH}" >> $GITHUB_ENV
  371. echo "DYLD_LIBRARY_PATH=${OPENSSL_ROOT_DIR}/lib" >> $GITHUB_ENV
  372. - name: Set up OpenSSL 1.1 on modern MacOS
  373. # OpenSSL 1.1 is installed by default, so we just need to set the paths
  374. if: matrix.os == 'macos-latest' && matrix.env.OPENSSL_1_1 == 'YES'
  375. run: |
  376. OPENSSL_ROOT_DIR=$(brew --prefix openssl@1.1)
  377. LDFLAGS=-L${OPENSSL_ROOT_DIR}/lib
  378. CFLAGS=-I${OPENSSL_ROOT_DIR}/include
  379. ADDITIONAL_CMAKE_ARGS="-DCMAKE_SHARED_LINKER_FLAGS=${LDFLAGS} -DMAKE_C_FLAGS=${CFLAGS}"
  380. PKG_CONFIG_PATH=${OPENSSL_ROOT_DIR}/lib/pkgconfig
  381. echo "LDFLAGS=${LDFLAGS}" >> $GITHUB_ENV
  382. echo "CFLAGS=${CFLAGS}" >> $GITHUB_ENV
  383. echo "${OPENSSL_ROOT_DIR}/bin" >> $GITHUB_PATH
  384. echo "ADDITIONAL_CMAKE_ARGS=${ADDITIONAL_CMAKE_ARGS}" >> $GITHUB_ENV
  385. echo "PKG_CONFIG_PATH=${PKG_CONFIG_PATH}" >> $GITHUB_ENV
  386. - name: Install OpenSSL 1.0 on modern Linux
  387. # Needed for recent versions of Linux as they ship with OpenSSL 3.0 by default
  388. if: matrix.os == 'ubuntu-latest' && matrix.env.OPENSSL_1_0 == 'YES'
  389. run: |
  390. curl -O -L https://openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz
  391. tar -xzf openssl-1.0.2u.tar.gz
  392. cd openssl-1.0.2u
  393. ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared
  394. make depend
  395. make -j $(nproc)
  396. sudo make install_sw -j $(nproc)
  397. sudo ldconfig
  398. OPENSSL_ROOT_DIR=/usr/local/ssl
  399. LDFLAGS=-L${OPENSSL_ROOT_DIR}/lib
  400. CFLAGS=-I${OPENSSL_ROOT_DIR}/include
  401. ADDITIONAL_CMAKE_ARGS="-DCMAKE_SHARED_LINKER_FLAGS=${LDFLAGS} -DMAKE_C_FLAGS=${CFLAGS}"
  402. PKG_CONFIG_PATH=${OPENSSL_ROOT_DIR}/lib/pkgconfig
  403. echo "LDFLAGS=${LDFLAGS}" >> $GITHUB_ENV
  404. echo "CFLAGS=${CFLAGS}" >> $GITHUB_ENV
  405. echo "${OPENSSL_ROOT_DIR}/bin" >> $GITHUB_PATH
  406. echo "ADDITIONAL_CMAKE_ARGS=${ADDITIONAL_CMAKE_ARGS}" >> $GITHUB_ENV
  407. echo "PKG_CONFIG_PATH=${PKG_CONFIG_PATH}" >> $GITHUB_ENV
  408. echo "LD_LIBRARY_PATH=${OPENSSL_ROOT_DIR}/lib" >> $GITHUB_ENV
  409. - name: Install OpenSSL 1.1 on modern Linux
  410. # Needed for recent versions of Linux as they ship with OpenSSL 3.0 by default
  411. if: matrix.os == 'ubuntu-latest' && matrix.env.OPENSSL_1_1 == 'YES'
  412. run: |
  413. curl -O -L https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz
  414. tar -xzf openssl-1.1.1w.tar.gz
  415. cd openssl-1.1.1w
  416. ./config
  417. make -j $(nproc)
  418. sudo make install_sw -j $(nproc)
  419. sudo ldconfig
  420. - name: Print tool version information
  421. run: |
  422. openssl version
  423. cc --version
  424. cmake --version
  425. clang --version
  426. - name: Run CMake
  427. run: |
  428. cmake -S . -B output\
  429. -DCMAKE_BUILD_TYPE=${{ matrix.env.BUILD_TYPE }}\
  430. -DBUILD_SHARED_LIBS=${{ matrix.env.BUILD_SHARED }}\
  431. -DCIVETWEB_THIRD_PARTY_DIR=../src/third-party\
  432. -DCIVETWEB_ENABLE_THIRD_PARTY_OUTPUT=YES\
  433. -DCIVETWEB_ENABLE_SSL=${{ matrix.env.ENABLE_SSL }}\
  434. -DCIVETWEB_DISABLE_CGI=${{ matrix.env.NO_CGI }}\
  435. -DCIVETWEB_SERVE_NO_FILES=${{ matrix.env.NO_FILES }}\
  436. -DCIVETWEB_ENABLE_SSL_DYNAMIC_LOADING=${{ matrix.env.ENABLE_SSL_DYNAMIC_LOADING }}\
  437. -DCIVETWEB_SSL_OPENSSL_API_1_0=${{ matrix.env.OPENSSL_1_0 }}\
  438. -DCIVETWEB_SSL_OPENSSL_API_1_1=${{ matrix.env.OPENSSL_1_1 }}\
  439. -DCIVETWEB_SSL_OPENSSL_API_3_0=${{ matrix.env.OPENSSL_3_0 }}\
  440. -DCIVETWEB_ENABLE_WEBSOCKETS=${{ matrix.env.ENABLE_WEBSOCKETS }}\
  441. -DCIVETWEB_ENABLE_CXX=${{ matrix.env.ENABLE_CXX }}\
  442. -DCIVETWEB_ENABLE_SERVER_STATS=${{ matrix.env.ENABLE_SERVER_STATS }}\
  443. -DCIVETWEB_ENABLE_LUA=${{ matrix.env.ENABLE_LUA }}\
  444. -DCIVETWEB_ENABLE_LUA_SHARED=${{ matrix.env.ENABLE_LUA_SHARED }}\
  445. -DCIVETWEB_ENABLE_DUKTAPE=${{ matrix.env.ENABLE_DUKTAPE }}\
  446. -DCIVETWEB_DISABLE_CACHING=${{ matrix.env.NO_CACHING }}\
  447. -DCIVETWEB_C_STANDARD=${{ matrix.env.C_STANDARD }}\
  448. -DCIVETWEB_CXX_STANDARD=${{ matrix.env.CXX_STANDARD }}\
  449. -DCIVETWEB_ALLOW_WARNINGS=${{ matrix.env.ALLOW_WARNINGS }}\
  450. -DCIVETWEB_ENABLE_IPV6=${{ matrix.env.ENABLE_IPV6 }}\
  451. ${{ env.ADDITIONAL_CMAKE_ARGS }}
  452. - name: Build MacOS Package
  453. if: matrix.env.MACOSX_PACKAGE == 1
  454. run: |
  455. make -f Makefile.osx package -j $(nproc)
  456. - name: Build executable
  457. run: |
  458. cmake --build output -- -j $(nproc)
  459. - name: Check executable
  460. run: |
  461. ./output/src/civetweb -I
  462. - name: Run unit tests
  463. if: matrix.env.RUN_UNITTEST == 1
  464. run: |
  465. # kill processes that are using port 8084, which is used in the unit tests
  466. # Currently, this affects linux only, where 'mono' is using this port
  467. pid_8084=$(sudo lsof -t -i:8084 || true;)
  468. if [[ -n ${pid_8084} ]]; then
  469. echo "Killing process using port 8084: ${pid_8084}"
  470. sudo kill -9 ${pid_8084}
  471. fi
  472. # Run unit tests
  473. gcc unittest/cgi_test.c -o output/cgi_test.cgi
  474. cd output
  475. CTEST_OUTPUT_ON_FAILURE=1 CK_FORK=yes make all test -j $(nproc)