sw.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. void build(Solution &s)
  2. {
  3. auto add_deps = [](auto &t)
  4. {
  5. t += "HAVE_LIBGIF"_d;
  6. t += "HAVE_LIBJP2K"_d;
  7. t += "HAVE_LIBJPEG"_d;
  8. t += "HAVE_LIBPNG"_d;
  9. t += "HAVE_LIBTIFF"_d;
  10. t += "HAVE_LIBWEBP"_d;
  11. t += "HAVE_LIBWEBP_ANIM"_d;
  12. t += "HAVE_LIBZ"_d;
  13. t += "org.sw.demo.gif"_dep;
  14. t += "org.sw.demo.jpeg"_dep;
  15. t += "org.sw.demo.uclouvain.openjpeg.openjp2"_dep;
  16. t += "org.sw.demo.glennrp.png"_dep;
  17. t += "org.sw.demo.tiff"_dep;
  18. t += "org.sw.demo.webmproject.webp"_dep;
  19. };
  20. auto &leptonica = s.addTarget<LibraryTarget>("danbloomberg.leptonica", "1.85.0");
  21. leptonica += Git("https://github.com/DanBloomberg/leptonica");
  22. {
  23. leptonica.setChecks("leptonica");
  24. leptonica.ApiName = "LEPT_DLL";
  25. leptonica +=
  26. "src/.*\\.c"_rr,
  27. "src/.*\\.h"_rr,
  28. "src/endianness.h.in";
  29. leptonica.Public +=
  30. "src"_id;
  31. add_deps(leptonica);
  32. leptonica += "LIBJP2K_HEADER=\"openjpeg.h\""_d;
  33. leptonica.Public += "HAVE_CONFIG_H"_d;
  34. if (leptonica.Variables["WORDS_BIGENDIAN"] == 1)
  35. leptonica.Variables["ENDIANNESS"] = "L_BIG_ENDIAN";
  36. else
  37. leptonica.Variables["ENDIANNESS"] = "L_LITTLE_ENDIAN";
  38. leptonica.Variables["APPLE_UNIVERSAL_BUILD"] = "defined (__APPLE_CC__)";
  39. leptonica.configureFile("src/endianness.h.in", "endianness.h");
  40. leptonica.writeFileOnce("config_auto.h");
  41. if (leptonica.getBuildSettings().TargetOS.Type == OSType::Windows ||
  42. leptonica.getBuildSettings().TargetOS.Type == OSType::Mingw)
  43. leptonica += "User32.lib"_slib, "Gdi32.lib"_slib;
  44. }
  45. auto &progs = leptonica.addDirectory("progs");
  46. {
  47. auto add_prog = [&s, &progs, &leptonica, &add_deps](const String &name, const Files &files) -> decltype(auto)
  48. {
  49. auto &t = progs.addExecutable(name);
  50. t.Scope = TargetScope::Test;
  51. t.setRootDirectory("prog");
  52. t += files;
  53. t += leptonica;
  54. add_deps(t);
  55. return t;
  56. };
  57. StringMap<Files> m_progs{
  58. {"adaptmap_reg", {"adaptmap_reg.c"}},
  59. {"adaptnorm_reg", {"adaptnorm_reg.c"}},
  60. {"affine_reg", {"affine_reg.c"}},
  61. {"alltests_reg", {"alltests_reg.c"}},
  62. {"alphaops_reg", {"alphaops_reg.c"}},
  63. {"alphaxform_reg", {"alphaxform_reg.c"}},
  64. {"baseline_reg", {"baseline_reg.c"}},
  65. {"bilateral1_reg", {"bilateral1_reg.c"}},
  66. {"bilateral2_reg", {"bilateral2_reg.c"}},
  67. {"bilinear_reg", {"bilinear_reg.c"}},
  68. {"binarize_reg", {"binarize_reg.c"}},
  69. {"binmorph1_reg", {"binmorph1_reg.c"}},
  70. {"binmorph2_reg", {"binmorph2_reg.c"}},
  71. {"binmorph3_reg", {"binmorph3_reg.c"}},
  72. {"binmorph4_reg", {"binmorph4_reg.c"}},
  73. {"binmorph5_reg", {"binmorph5_reg.c"}},
  74. {"binmorph6_reg", {"binmorph6_reg.c"}},
  75. {"blackwhite_reg", {"blackwhite_reg.c"}},
  76. {"blend1_reg", {"blend1_reg.c"}},
  77. {"blend2_reg", {"blend2_reg.c"}},
  78. {"blend3_reg", {"blend3_reg.c"}},
  79. {"blend4_reg", {"blend4_reg.c"}},
  80. {"blend5_reg", {"blend5_reg.c"}},
  81. {"boxa1_reg", {"boxa1_reg.c"}},
  82. {"boxa2_reg", {"boxa2_reg.c"}},
  83. {"boxa3_reg", {"boxa3_reg.c"}},
  84. {"boxa4_reg", {"boxa4_reg.c"}},
  85. {"bytea_reg", {"bytea_reg.c"}},
  86. {"ccbord_reg", {"ccbord_reg.c"}},
  87. {"ccthin1_reg", {"ccthin1_reg.c"}},
  88. {"ccthin2_reg", {"ccthin2_reg.c"}},
  89. {"checkerboard_reg", {"checkerboard_reg.c"}},
  90. {"circle_reg", {"circle_reg.c"}},
  91. {"cmapquant_reg", {"cmapquant_reg.c"}},
  92. {"colorcontent_reg", {"colorcontent_reg.c"}},
  93. {"colorfill_reg", {"colorfill_reg.c"}},
  94. {"coloring_reg", {"coloring_reg.c"}},
  95. {"colorize_reg", {"colorize_reg.c"}},
  96. {"colormask_reg", {"colormask_reg.c"}},
  97. {"colormorph_reg", {"colormorph_reg.c"}},
  98. {"colorquant_reg", {"colorquant_reg.c"}},
  99. {"colorseg_reg", {"colorseg_reg.c"}},
  100. {"colorspace_reg", {"colorspace_reg.c"}},
  101. {"compare_reg", {"compare_reg.c"}},
  102. {"compfilter_reg", {"compfilter_reg.c"}},
  103. {"conncomp_reg", {"conncomp_reg.c"}},
  104. {"conversion_reg", {"conversion_reg.c"}},
  105. {"convolve_reg", {"convolve_reg.c"}},
  106. {"crop_reg", {"crop_reg.c"}},
  107. {"dewarp_reg", {"dewarp_reg.c"}},
  108. {"distance_reg", {"distance_reg.c"}},
  109. {"dither_reg", {"dither_reg.c"}},
  110. {"dna_reg", {"dna_reg.c"}},
  111. {"dwamorph1_reg", {"dwamorph1_reg.c", "dwalinear.3.c", "dwalinearlow.3.c"}},
  112. {"dwamorph2_reg", {"dwamorph2_reg.c", "dwalinear.3.c", "dwalinearlow.3.c"}},
  113. {"edge_reg", {"edge_reg.c"}},
  114. {"encoding_reg", {"encoding_reg.c"}},
  115. {"enhance_reg", {"enhance_reg.c"}},
  116. {"equal_reg", {"equal_reg.c"}},
  117. {"expand_reg", {"expand_reg.c"}},
  118. {"extrema_reg", {"extrema_reg.c"}},
  119. {"falsecolor_reg", {"falsecolor_reg.c"}},
  120. {"fhmtauto_reg", {"fhmtauto_reg.c"}},
  121. {"files_reg", {"files_reg.c"}},
  122. {"findcorners_reg", {"findcorners_reg.c"}},
  123. {"findpattern1_reg", {"findpattern1_reg.c"}},
  124. {"findpattern2_reg", {"findpattern2_reg.c"}},
  125. {"flipdetect_reg", {"flipdetect_reg.c"}},
  126. {"fmorphauto_reg", {"fmorphauto_reg.c"}},
  127. {"fpix1_reg", {"fpix1_reg.c"}},
  128. {"fpix2_reg", {"fpix2_reg.c"}},
  129. {"genfonts_reg", {"genfonts_reg.c"}},
  130. {"gifio_reg", {"gifio_reg.c"}},
  131. {"grayfill_reg", {"grayfill_reg.c"}},
  132. {"graymorph1_reg", {"graymorph1_reg.c"}},
  133. {"graymorph2_reg", {"graymorph2_reg.c"}},
  134. {"grayquant_reg", {"grayquant_reg.c"}},
  135. {"hardlight_reg", {"hardlight_reg.c"}},
  136. {"hash_reg", {"hash_reg.c"}},
  137. {"heap_reg", {"heap_reg.c"}},
  138. {"insert_reg", {"insert_reg.c"}},
  139. {"ioformats_reg", {"ioformats_reg.c"}},
  140. {"iomisc_reg", {"iomisc_reg.c"}},
  141. {"italic_reg", {"italic_reg.c"}},
  142. {"jbclass_reg", {"jbclass_reg.c"}},
  143. {"jp2kio_reg", {"jp2kio_reg.c"}},
  144. {"jpegio_reg", {"jpegio_reg.c"}},
  145. {"kernel_reg", {"kernel_reg.c"}},
  146. {"label_reg", {"label_reg.c"}},
  147. {"lineremoval_reg", {"lineremoval_reg.c"}},
  148. {"locminmax_reg", {"locminmax_reg.c"}},
  149. {"logicops_reg", {"logicops_reg.c"}},
  150. {"lowaccess_reg", {"lowaccess_reg.c"}},
  151. {"lowsat_reg", {"lowsat_reg.c"}},
  152. {"maze_reg", {"maze_reg.c"}},
  153. {"mtiff_reg", {"mtiff_reg.c"}},
  154. {"multitype_reg", {"multitype_reg.c"}},
  155. {"nearline_reg", {"nearline_reg.c"}},
  156. {"newspaper_reg", {"newspaper_reg.c"}},
  157. {"numa1_reg", {"numa1_reg.c"}},
  158. {"numa2_reg", {"numa2_reg.c"}},
  159. {"numa3_reg", {"numa3_reg.c"}},
  160. {"overlap_reg", {"overlap_reg.c"}},
  161. {"pageseg_reg", {"pageseg_reg.c"}},
  162. {"paintmask_reg", {"paintmask_reg.c"}},
  163. {"paint_reg", {"paint_reg.c"}},
  164. {"partition_reg", {"partition_reg.c"}},
  165. {"pdfio1_reg", {"pdfio1_reg.c"}},
  166. {"pdfio2_reg", {"pdfio2_reg.c"}},
  167. {"pdfseg_reg", {"pdfseg_reg.c"}},
  168. {"pixa1_reg", {"pixa1_reg.c"}},
  169. {"pixa2_reg", {"pixa2_reg.c"}},
  170. {"pixadisp_reg", {"pixadisp_reg.c"}},
  171. {"pixalloc_reg", {"pixalloc_reg.c"}},
  172. {"pixcomp_reg", {"pixcomp_reg.c"}},
  173. {"pixmem_reg", {"pixmem_reg.c"}},
  174. {"pixserial_reg", {"pixserial_reg.c"}},
  175. {"pixtile_reg", {"pixtile_reg.c"}},
  176. {"pngio_reg", {"pngio_reg.c"}},
  177. {"pnmio_reg", {"pnmio_reg.c"}},
  178. {"projection_reg", {"projection_reg.c"}},
  179. {"projective_reg", {"projective_reg.c"}},
  180. {"psioseg_reg", {"psioseg_reg.c"}},
  181. {"psio_reg", {"psio_reg.c"}},
  182. {"pta_reg", {"pta_reg.c"}},
  183. {"ptra1_reg", {"ptra1_reg.c"}},
  184. {"ptra2_reg", {"ptra2_reg.c"}},
  185. {"quadtree_reg", {"quadtree_reg.c"}},
  186. {"rankbin_reg", {"rankbin_reg.c"}},
  187. {"rankhisto_reg", {"rankhisto_reg.c"}},
  188. {"rank_reg", {"rank_reg.c"}},
  189. {"rasteropip_reg", {"rasteropip_reg.c"}},
  190. {"rasterop_reg", {"rasterop_reg.c"}},
  191. {"rectangle_reg", {"rectangle_reg.c"}},
  192. {"rotate1_reg", {"rotate1_reg.c"}},
  193. {"rotate2_reg", {"rotate2_reg.c"}},
  194. {"scale_reg", {"scale_reg.c"}},
  195. {"selio_reg", {"selio_reg.c"}},
  196. {"shear1_reg", {"shear1_reg.c"}},
  197. {"shear2_reg", {"shear2_reg.c"}},
  198. {"skew_reg", {"skew_reg.c"}},
  199. {"smallpix_reg", {"smallpix_reg.c"}},
  200. {"smoothedge_reg", {"smoothedge_reg.c"}},
  201. {"speckle_reg", {"speckle_reg.c"}},
  202. {"splitcomp_reg", {"splitcomp_reg.c"}},
  203. {"string_reg", {"string_reg.c"}},
  204. {"subpixel_reg", {"subpixel_reg.c"}},
  205. {"texturefill_reg", {"texturefill_reg.c"}},
  206. {"threshnorm_reg", {"threshnorm_reg.c"}},
  207. {"translate_reg", {"translate_reg.c"}},
  208. {"warper_reg", {"warper_reg.c"}},
  209. {"watershed_reg", {"watershed_reg.c"}},
  210. {"webpio_reg", {"webpio_reg.c"}},
  211. {"webpanimio_reg", {"webpanimio_reg.c"}},
  212. {"wordboxes_reg", {"wordboxes_reg.c"}},
  213. {"writetext_reg", {"writetext_reg.c"}},
  214. {"xformbox_reg", {"xformbox_reg.c"}},
  215. {"adaptmap_dark", {"adaptmap_dark.c"}},
  216. {"arabic_lines", {"arabic_lines.c"}},
  217. {"arithtest", {"arithtest.c"}},
  218. {"autogentest1", {"autogentest1.c"}},
  219. {"autogentest2", {"autogentest2.c", "autogen.137.c"}},
  220. {"barcodetest", {"barcodetest.c"}},
  221. {"binarize_set", {"binarize_set.c"}},
  222. {"binarizefiles", {"binarizefiles.c"}},
  223. {"bincompare", {"bincompare.c"}},
  224. {"blendcmaptest", {"blendcmaptest.c"}},
  225. {"buffertest", {"buffertest.c"}},
  226. {"ccbordtest", {"ccbordtest.c"}},
  227. {"cctest1", {"cctest1.c"}},
  228. {"cleanpdf", {"cleanpdf.c"}},
  229. {"colorsegtest", {"colorsegtest.c"}},
  230. {"comparepages", {"comparepages.c"}},
  231. {"comparepixa", {"comparepixa.c"}},
  232. {"comparetest", {"comparetest.c"}},
  233. {"compresspdf", {"compresspdf.c"}},
  234. {"contrasttest", {"contrasttest.c"}},
  235. {"convertfilestopdf", {"convertfilestopdf.c"}},
  236. {"convertfilestops", {"convertfilestops.c"}},
  237. {"convertformat", {"convertformat.c"}},
  238. {"convertsegfilestopdf", {"convertsegfilestopdf.c"}},
  239. {"convertsegfilestops", {"convertsegfilestops.c"}},
  240. {"converttogray", {"converttogray.c"}},
  241. {"converttopdf", {"converttopdf.c"}},
  242. {"converttops", {"converttops.c"}},
  243. {"cornertest", {"cornertest.c"}},
  244. {"corrupttest", {"corrupttest.c"}},
  245. {"croppdf", {"croppdf.c"}},
  246. {"croptext", {"croptext.c"}},
  247. {"deskew_it", {"deskew_it.c"}},
  248. {"dewarprules", {"dewarprules.c"}},
  249. {"dewarptest1", {"dewarptest1.c"}},
  250. {"dewarptest2", {"dewarptest2.c"}},
  251. {"dewarptest3", {"dewarptest3.c"}},
  252. {"dewarptest4", {"dewarptest4.c"}},
  253. {"dewarptest5", {"dewarptest5.c"}},
  254. {"digitprep1", {"digitprep1.c"}},
  255. {"displayboxa", {"displayboxa.c"}},
  256. {"displayboxes_on_pixa", {"displayboxes_on_pixa.c"}},
  257. {"displaypix", {"displaypix.c"}},
  258. {"displaypixa", {"displaypixa.c"}},
  259. {"dwalineargen", {"dwalineargen.c"}},
  260. {"fcombautogen", {"fcombautogen.c"}},
  261. {"fhmtautogen", {"fhmtautogen.c"}},
  262. {"fileinfo", {"fileinfo.c"}},
  263. {"findbinding", {"findbinding.c"}},
  264. {"find_colorregions", {"find_colorregions.c"}},
  265. {"findpattern1", {"findpattern1.c"}},
  266. {"findpattern2", {"findpattern2.c"}},
  267. {"findpattern3", {"findpattern3.c"}},
  268. {"fmorphautogen", {"fmorphautogen.c"}},
  269. {"fpixcontours", {"fpixcontours.c"}},
  270. {"gammatest", {"gammatest.c"}},
  271. {"graphicstest", {"graphicstest.c"}},
  272. {"graymorphtest", {"graymorphtest.c"}},
  273. {"hashtest", {"hashtest.c"}},
  274. {"histoduptest", {"histoduptest.c"}},
  275. {"histotest", {"histotest.c"}},
  276. {"htmlviewer", {"htmlviewer.c"}},
  277. {"imagetops", {"imagetops.c"}},
  278. {"jbcorrelation", {"jbcorrelation.c"}},
  279. {"jbrankhaus", {"jbrankhaus.c"}},
  280. {"jbwords", {"jbwords.c"}},
  281. {"lightcolortest", {"lightcolortest.c"}},
  282. {"listtest", {"listtest.c"}},
  283. {"livre_adapt", {"livre_adapt.c"}},
  284. {"livre_hmt", {"livre_hmt.c"}},
  285. {"livre_makefigs", {"livre_makefigs.c"}},
  286. {"livre_orient", {"livre_orient.c"}},
  287. {"livre_pageseg", {"livre_pageseg.c"}},
  288. {"livre_seedgen", {"livre_seedgen.c"}},
  289. {"livre_tophat", {"livre_tophat.c"}},
  290. {"maketile", {"maketile.c"}},
  291. {"maptest", {"maptest.c"}},
  292. {"messagetest", {"messagetest.c"}},
  293. {"misctest1", {"misctest1.c"}},
  294. {"misctest2", {"misctest2.c"}},
  295. {"modifyhuesat", {"modifyhuesat.c"}},
  296. {"morphseq_reg", {"morphseq_reg.c"}},
  297. {"morphtest1", {"morphtest1.c"}},
  298. {"numaranktest", {"numaranktest.c"}},
  299. {"otsutest1", {"otsutest1.c"}},
  300. {"otsutest2", {"otsutest2.c"}},
  301. {"pagesegtest1", {"pagesegtest1.c"}},
  302. {"pagesegtest2", {"pagesegtest2.c"}},
  303. {"partifytest", {"partifytest.c"}},
  304. {"partitiontest", {"partitiontest.c"}},
  305. {"percolatetest", {"percolatetest.c"}},
  306. {"pixaatest", {"pixaatest.c"}},
  307. {"pixafileinfo", {"pixafileinfo.c"}},
  308. {"plottest", {"plottest.c"}},
  309. {"printimage", {"printimage.c"}},
  310. {"printsplitimage", {"printsplitimage.c"}},
  311. {"printtiff", {"printtiff.c"}},
  312. {"rasteroptest", {"rasteroptest.c"}},
  313. {"rbtreetest", {"rbtreetest.c"}},
  314. {"recog_bootnum1", {"recog_bootnum1.c"}},
  315. {"recog_bootnum2", {"recog_bootnum2.c"}},
  316. {"recog_bootnum3", {"recog_bootnum3.c"}},
  317. {"recogsort", {"recogsort.c"}},
  318. {"recogtest1", {"recogtest1.c"}},
  319. {"recogtest2", {"recogtest2.c"}},
  320. {"recogtest3", {"recogtest3.c"}},
  321. {"recogtest4", {"recogtest4.c"}},
  322. {"recogtest5", {"recogtest5.c"}},
  323. {"recogtest6", {"recogtest6.c"}},
  324. {"recogtest7", {"recogtest7.c"}},
  325. {"reducetest", {"reducetest.c"}},
  326. {"removecmap", {"removecmap.c"}},
  327. {"renderfonts", {"renderfonts.c"}},
  328. {"replacebytes", {"replacebytes.c"}},
  329. {"rotatefastalt", {"rotatefastalt.c"}},
  330. {"rotate_it", {"rotate_it.c"}},
  331. {"rotateorthtest1", {"rotateorthtest1.c"}},
  332. {"rotateorth_reg", {"rotateorth_reg.c"}},
  333. {"rotatetest1", {"rotatetest1.c"}},
  334. {"runlengthtest", {"runlengthtest.c"}},
  335. {"scaleandtile", {"scaleandtile.c"}},
  336. {"scaleimages", {"scaleimages.c"}},
  337. {"scale_it", {"scale_it.c"}},
  338. {"scaletest1", {"scaletest1.c"}},
  339. {"scaletest2", {"scaletest2.c"}},
  340. {"seedfilltest", {"seedfilltest.c"}},
  341. {"seedspread_reg", {"seedspread_reg.c"}},
  342. {"settest", {"settest.c"}},
  343. {"sharptest", {"sharptest.c"}},
  344. {"sheartest", {"sheartest.c"}},
  345. {"showedges", {"showedges.c"}},
  346. {"skewtest", {"skewtest.c"}},
  347. {"sorttest", {"sorttest.c"}},
  348. {"splitimage2pdf", {"splitimage2pdf.c"}},
  349. {"splitpdf", {"splitpdf.c"}},
  350. {"sudokutest", {"sudokutest.c"}},
  351. {"textorient", {"textorient.c"}},
  352. {"tiffpdftest", {"tiffpdftest.c"}},
  353. {"trctest", {"trctest.c"}},
  354. {"underlinetest", {"underlinetest.c"}},
  355. {"warpertest", {"warpertest.c"}},
  356. {"wordsinorder", {"wordsinorder.c"}},
  357. {"writemtiff", {"writemtiff.c"}},
  358. {"xtractprotos", {"xtractprotos.c"}},
  359. {"yuvtest", {"yuvtest.c"}},
  360. };
  361. for (auto &[p, files] : m_progs)
  362. add_prog(p, files);
  363. }
  364. }
  365. #pragma optimize("", on)
  366. void check(Checker &c)
  367. {
  368. auto &s = c.addSet("leptonica");
  369. s.checkFunctionExists("fmemopen");
  370. s.checkFunctionExists("fstatat");
  371. s.checkFunctionExists("dirfd");
  372. s.checkIncludeExists("dlfcn.h");
  373. s.checkIncludeExists("inttypes.h");
  374. s.checkIncludeExists("memory.h");
  375. s.checkIncludeExists("stdint.h");
  376. s.checkIncludeExists("stdlib.h");
  377. s.checkIncludeExists("strings.h");
  378. s.checkIncludeExists("string.h");
  379. s.checkIncludeExists("sys/stat.h");
  380. s.checkIncludeExists("sys/types.h");
  381. s.checkIncludeExists("unistd.h");
  382. s.checkTypeSize("size_t");
  383. s.checkTypeSize("void *");
  384. }