remind-rb 6.2.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (658) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +328 -0
  3. data/README.md +141 -0
  4. data/ext/remind/shim.c +379 -0
  5. data/lib/remind/builder.rb +252 -0
  6. data/lib/remind/library.rb +141 -0
  7. data/lib/remind/native.rb +257 -0
  8. data/lib/remind/reminder.rb +527 -0
  9. data/lib/remind/runtime.rb +130 -0
  10. data/lib/remind/session.rb +246 -0
  11. data/lib/remind/source.rb +160 -0
  12. data/lib/remind/value.rb +170 -0
  13. data/lib/remind/version.rb +13 -0
  14. data/lib/remind.rb +147 -0
  15. data/remind-v06.02.10/COPYRIGHT +300 -0
  16. data/remind-v06.02.10/configure +5684 -0
  17. data/remind-v06.02.10/configure.ac +131 -0
  18. data/remind-v06.02.10/docs/WHATSNEW +3858 -0
  19. data/remind-v06.02.10/include/ansitext.rem +35 -0
  20. data/remind-v06.02.10/include/holidays/ad/02.rem +15 -0
  21. data/remind-v06.02.10/include/holidays/ad/03.rem +14 -0
  22. data/remind-v06.02.10/include/holidays/ad/04.rem +14 -0
  23. data/remind-v06.02.10/include/holidays/ad/05.rem +14 -0
  24. data/remind-v06.02.10/include/holidays/ad/06.rem +16 -0
  25. data/remind-v06.02.10/include/holidays/ad/07.rem +15 -0
  26. data/remind-v06.02.10/include/holidays/ad/08.rem +14 -0
  27. data/remind-v06.02.10/include/holidays/ad.rem +28 -0
  28. data/remind-v06.02.10/include/holidays/ae.rem +10 -0
  29. data/remind-v06.02.10/include/holidays/al.rem +33 -0
  30. data/remind-v06.02.10/include/holidays/am.rem +19 -0
  31. data/remind-v06.02.10/include/holidays/ao.rem +41 -0
  32. data/remind-v06.02.10/include/holidays/ar.rem +38 -0
  33. data/remind-v06.02.10/include/holidays/as.rem +40 -0
  34. data/remind-v06.02.10/include/holidays/at/1.rem +15 -0
  35. data/remind-v06.02.10/include/holidays/at/2.rem +16 -0
  36. data/remind-v06.02.10/include/holidays/at/3.rem +15 -0
  37. data/remind-v06.02.10/include/holidays/at/4.rem +15 -0
  38. data/remind-v06.02.10/include/holidays/at/5.rem +15 -0
  39. data/remind-v06.02.10/include/holidays/at/6.rem +15 -0
  40. data/remind-v06.02.10/include/holidays/at/7.rem +15 -0
  41. data/remind-v06.02.10/include/holidays/at/8.rem +15 -0
  42. data/remind-v06.02.10/include/holidays/at/9.rem +15 -0
  43. data/remind-v06.02.10/include/holidays/at.rem +32 -0
  44. data/remind-v06.02.10/include/holidays/au/act.rem +27 -0
  45. data/remind-v06.02.10/include/holidays/au/nsw.rem +25 -0
  46. data/remind-v06.02.10/include/holidays/au/nt.rem +28 -0
  47. data/remind-v06.02.10/include/holidays/au/qld.rem +23 -0
  48. data/remind-v06.02.10/include/holidays/au/sa.rem +29 -0
  49. data/remind-v06.02.10/include/holidays/au/tas.rem +16 -0
  50. data/remind-v06.02.10/include/holidays/au/vic.rem +24 -0
  51. data/remind-v06.02.10/include/holidays/au/wa.rem +24 -0
  52. data/remind-v06.02.10/include/holidays/au.rem +21 -0
  53. data/remind-v06.02.10/include/holidays/aw.rem +19 -0
  54. data/remind-v06.02.10/include/holidays/az.rem +44 -0
  55. data/remind-v06.02.10/include/holidays/ba/bih.rem +23 -0
  56. data/remind-v06.02.10/include/holidays/ba/brc.rem +20 -0
  57. data/remind-v06.02.10/include/holidays/ba/srp.rem +23 -0
  58. data/remind-v06.02.10/include/holidays/ba.rem +22 -0
  59. data/remind-v06.02.10/include/holidays/bb.rem +28 -0
  60. data/remind-v06.02.10/include/holidays/bd.rem +14 -0
  61. data/remind-v06.02.10/include/holidays/be.rem +24 -0
  62. data/remind-v06.02.10/include/holidays/bf.rem +29 -0
  63. data/remind-v06.02.10/include/holidays/bg.rem +34 -0
  64. data/remind-v06.02.10/include/holidays/bh.rem +11 -0
  65. data/remind-v06.02.10/include/holidays/bi.rem +30 -0
  66. data/remind-v06.02.10/include/holidays/bn.rem +22 -0
  67. data/remind-v06.02.10/include/holidays/bo/b.rem +13 -0
  68. data/remind-v06.02.10/include/holidays/bo/c.rem +13 -0
  69. data/remind-v06.02.10/include/holidays/bo/h.rem +13 -0
  70. data/remind-v06.02.10/include/holidays/bo/l.rem +13 -0
  71. data/remind-v06.02.10/include/holidays/bo/n.rem +13 -0
  72. data/remind-v06.02.10/include/holidays/bo/o.rem +13 -0
  73. data/remind-v06.02.10/include/holidays/bo/p.rem +13 -0
  74. data/remind-v06.02.10/include/holidays/bo/s.rem +13 -0
  75. data/remind-v06.02.10/include/holidays/bo/t.rem +13 -0
  76. data/remind-v06.02.10/include/holidays/bo.rem +32 -0
  77. data/remind-v06.02.10/include/holidays/br/ac.rem +21 -0
  78. data/remind-v06.02.10/include/holidays/br/al.rem +16 -0
  79. data/remind-v06.02.10/include/holidays/br/am.rem +13 -0
  80. data/remind-v06.02.10/include/holidays/br/ap.rem +15 -0
  81. data/remind-v06.02.10/include/holidays/br/ba.rem +13 -0
  82. data/remind-v06.02.10/include/holidays/br/ce.rem +15 -0
  83. data/remind-v06.02.10/include/holidays/br/df.rem +14 -0
  84. data/remind-v06.02.10/include/holidays/br/es.rem +13 -0
  85. data/remind-v06.02.10/include/holidays/br/go.rem +14 -0
  86. data/remind-v06.02.10/include/holidays/br/ma.rem +13 -0
  87. data/remind-v06.02.10/include/holidays/br/mg.rem +13 -0
  88. data/remind-v06.02.10/include/holidays/br/ms.rem +13 -0
  89. data/remind-v06.02.10/include/holidays/br/pa.rem +13 -0
  90. data/remind-v06.02.10/include/holidays/br/pb.rem +13 -0
  91. data/remind-v06.02.10/include/holidays/br/pe.rem +13 -0
  92. data/remind-v06.02.10/include/holidays/br/pi.rem +13 -0
  93. data/remind-v06.02.10/include/holidays/br/pr.rem +13 -0
  94. data/remind-v06.02.10/include/holidays/br/rj.rem +13 -0
  95. data/remind-v06.02.10/include/holidays/br/rn.rem +14 -0
  96. data/remind-v06.02.10/include/holidays/br/ro.rem +14 -0
  97. data/remind-v06.02.10/include/holidays/br/rr.rem +13 -0
  98. data/remind-v06.02.10/include/holidays/br/rs.rem +13 -0
  99. data/remind-v06.02.10/include/holidays/br/sc.rem +14 -0
  100. data/remind-v06.02.10/include/holidays/br/se.rem +13 -0
  101. data/remind-v06.02.10/include/holidays/br/sp.rem +13 -0
  102. data/remind-v06.02.10/include/holidays/br/to.rem +15 -0
  103. data/remind-v06.02.10/include/holidays/br.rem +33 -0
  104. data/remind-v06.02.10/include/holidays/bs.rem +26 -0
  105. data/remind-v06.02.10/include/holidays/bw.rem +31 -0
  106. data/remind-v06.02.10/include/holidays/by.rem +17 -0
  107. data/remind-v06.02.10/include/holidays/bz.rem +43 -0
  108. data/remind-v06.02.10/include/holidays/ca/ab.rem +17 -0
  109. data/remind-v06.02.10/include/holidays/ca/bc.rem +14 -0
  110. data/remind-v06.02.10/include/holidays/ca/mb.rem +16 -0
  111. data/remind-v06.02.10/include/holidays/ca/nb.rem +14 -0
  112. data/remind-v06.02.10/include/holidays/ca/nl.rem +19 -0
  113. data/remind-v06.02.10/include/holidays/ca/ns.rem +16 -0
  114. data/remind-v06.02.10/include/holidays/ca/nt.rem +14 -0
  115. data/remind-v06.02.10/include/holidays/ca/nu.rem +16 -0
  116. data/remind-v06.02.10/include/holidays/ca/on.rem +16 -0
  117. data/remind-v06.02.10/include/holidays/ca/pe.rem +13 -0
  118. data/remind-v06.02.10/include/holidays/ca/qc.rem +18 -0
  119. data/remind-v06.02.10/include/holidays/ca/sk.rem +14 -0
  120. data/remind-v06.02.10/include/holidays/ca/yt.rem +17 -0
  121. data/remind-v06.02.10/include/holidays/ca.rem +37 -0
  122. data/remind-v06.02.10/include/holidays/cg.rem +17 -0
  123. data/remind-v06.02.10/include/holidays/ch/ag.rem +22 -0
  124. data/remind-v06.02.10/include/holidays/ch/ai.rem +20 -0
  125. data/remind-v06.02.10/include/holidays/ch/ar.rem +16 -0
  126. data/remind-v06.02.10/include/holidays/ch/be.rem +17 -0
  127. data/remind-v06.02.10/include/holidays/ch/bl.rem +17 -0
  128. data/remind-v06.02.10/include/holidays/ch/bs.rem +17 -0
  129. data/remind-v06.02.10/include/holidays/ch/fr.rem +19 -0
  130. data/remind-v06.02.10/include/holidays/ch/ge.rem +17 -0
  131. data/remind-v06.02.10/include/holidays/ch/gl.rem +22 -0
  132. data/remind-v06.02.10/include/holidays/ch/gr.rem +18 -0
  133. data/remind-v06.02.10/include/holidays/ch/ju.rem +21 -0
  134. data/remind-v06.02.10/include/holidays/ch/lu.rem +21 -0
  135. data/remind-v06.02.10/include/holidays/ch/ne.rem +18 -0
  136. data/remind-v06.02.10/include/holidays/ch/nw.rem +24 -0
  137. data/remind-v06.02.10/include/holidays/ch/ow.rem +24 -0
  138. data/remind-v06.02.10/include/holidays/ch/sg.rem +20 -0
  139. data/remind-v06.02.10/include/holidays/ch/sh.rem +20 -0
  140. data/remind-v06.02.10/include/holidays/ch/so.rem +17 -0
  141. data/remind-v06.02.10/include/holidays/ch/sz.rem +22 -0
  142. data/remind-v06.02.10/include/holidays/ch/tg.rem +18 -0
  143. data/remind-v06.02.10/include/holidays/ch/ti.rem +23 -0
  144. data/remind-v06.02.10/include/holidays/ch/ur.rem +22 -0
  145. data/remind-v06.02.10/include/holidays/ch/vd.rem +17 -0
  146. data/remind-v06.02.10/include/holidays/ch/vs.rem +23 -0
  147. data/remind-v06.02.10/include/holidays/ch/zg.rem +23 -0
  148. data/remind-v06.02.10/include/holidays/ch/zh.rem +18 -0
  149. data/remind-v06.02.10/include/holidays/ch.rem +18 -0
  150. data/remind-v06.02.10/include/holidays/chinese-new-year.rem +86 -0
  151. data/remind-v06.02.10/include/holidays/cl/ap.rem +13 -0
  152. data/remind-v06.02.10/include/holidays/cl/nb.rem +13 -0
  153. data/remind-v06.02.10/include/holidays/cl.rem +46 -0
  154. data/remind-v06.02.10/include/holidays/cm.rem +21 -0
  155. data/remind-v06.02.10/include/holidays/co.rem +85 -0
  156. data/remind-v06.02.10/include/holidays/cr.rem +39 -0
  157. data/remind-v06.02.10/include/holidays/cu.rem +19 -0
  158. data/remind-v06.02.10/include/holidays/cw.rem +24 -0
  159. data/remind-v06.02.10/include/holidays/cy.rem +27 -0
  160. data/remind-v06.02.10/include/holidays/cz.rem +20 -0
  161. data/remind-v06.02.10/include/holidays/de/bb.rem +15 -0
  162. data/remind-v06.02.10/include/holidays/de/be.rem +13 -0
  163. data/remind-v06.02.10/include/holidays/de/bw.rem +15 -0
  164. data/remind-v06.02.10/include/holidays/de/by.rem +18 -0
  165. data/remind-v06.02.10/include/holidays/de/hb.rem +13 -0
  166. data/remind-v06.02.10/include/holidays/de/he.rem +13 -0
  167. data/remind-v06.02.10/include/holidays/de/hh.rem +13 -0
  168. data/remind-v06.02.10/include/holidays/de/mv.rem +14 -0
  169. data/remind-v06.02.10/include/holidays/de/ni.rem +13 -0
  170. data/remind-v06.02.10/include/holidays/de/nw.rem +14 -0
  171. data/remind-v06.02.10/include/holidays/de/rp.rem +14 -0
  172. data/remind-v06.02.10/include/holidays/de/sh.rem +13 -0
  173. data/remind-v06.02.10/include/holidays/de/sl.rem +15 -0
  174. data/remind-v06.02.10/include/holidays/de/sn.rem +14 -0
  175. data/remind-v06.02.10/include/holidays/de/st.rem +14 -0
  176. data/remind-v06.02.10/include/holidays/de/th.rem +14 -0
  177. data/remind-v06.02.10/include/holidays/de.rem +23 -0
  178. data/remind-v06.02.10/include/holidays/discordian.rem +25 -0
  179. data/remind-v06.02.10/include/holidays/dj.rem +12 -0
  180. data/remind-v06.02.10/include/holidays/dk.rem +23 -0
  181. data/remind-v06.02.10/include/holidays/dm.rem +24 -0
  182. data/remind-v06.02.10/include/holidays/do.rem +36 -0
  183. data/remind-v06.02.10/include/holidays/dz.rem +12 -0
  184. data/remind-v06.02.10/include/holidays/ec.rem +48 -0
  185. data/remind-v06.02.10/include/holidays/ee.rem +19 -0
  186. data/remind-v06.02.10/include/holidays/eg.rem +17 -0
  187. data/remind-v06.02.10/include/holidays/es/an.rem +17 -0
  188. data/remind-v06.02.10/include/holidays/es/ar.rem +17 -0
  189. data/remind-v06.02.10/include/holidays/es/as.rem +17 -0
  190. data/remind-v06.02.10/include/holidays/es/cb.rem +15 -0
  191. data/remind-v06.02.10/include/holidays/es/ce.rem +15 -0
  192. data/remind-v06.02.10/include/holidays/es/cl.rem +17 -0
  193. data/remind-v06.02.10/include/holidays/es/cm.rem +15 -0
  194. data/remind-v06.02.10/include/holidays/es/cn.rem +15 -0
  195. data/remind-v06.02.10/include/holidays/es/ct.rem +16 -0
  196. data/remind-v06.02.10/include/holidays/es/ex.rem +16 -0
  197. data/remind-v06.02.10/include/holidays/es/ga.rem +15 -0
  198. data/remind-v06.02.10/include/holidays/es/ib.rem +15 -0
  199. data/remind-v06.02.10/include/holidays/es/mc.rem +17 -0
  200. data/remind-v06.02.10/include/holidays/es/md.rem +16 -0
  201. data/remind-v06.02.10/include/holidays/es/ml.rem +15 -0
  202. data/remind-v06.02.10/include/holidays/es/nc.rem +15 -0
  203. data/remind-v06.02.10/include/holidays/es/pv.rem +15 -0
  204. data/remind-v06.02.10/include/holidays/es/ri.rem +16 -0
  205. data/remind-v06.02.10/include/holidays/es/vc.rem +16 -0
  206. data/remind-v06.02.10/include/holidays/es.rem +23 -0
  207. data/remind-v06.02.10/include/holidays/et.rem +20 -0
  208. data/remind-v06.02.10/include/holidays/fi.rem +43 -0
  209. data/remind-v06.02.10/include/holidays/fr/bl.rem +13 -0
  210. data/remind-v06.02.10/include/holidays/fr/ges.rem +14 -0
  211. data/remind-v06.02.10/include/holidays/fr/gp.rem +16 -0
  212. data/remind-v06.02.10/include/holidays/fr/gy.rem +13 -0
  213. data/remind-v06.02.10/include/holidays/fr/mf.rem +13 -0
  214. data/remind-v06.02.10/include/holidays/fr/mq.rem +15 -0
  215. data/remind-v06.02.10/include/holidays/fr/nc.rem +13 -0
  216. data/remind-v06.02.10/include/holidays/fr/pf.rem +15 -0
  217. data/remind-v06.02.10/include/holidays/fr/re.rem +13 -0
  218. data/remind-v06.02.10/include/holidays/fr/wf.rem +14 -0
  219. data/remind-v06.02.10/include/holidays/fr/yt.rem +13 -0
  220. data/remind-v06.02.10/include/holidays/fr.rem +18 -0
  221. data/remind-v06.02.10/include/holidays/ga.rem +18 -0
  222. data/remind-v06.02.10/include/holidays/gb/eng.rem +14 -0
  223. data/remind-v06.02.10/include/holidays/gb/nir.rem +20 -0
  224. data/remind-v06.02.10/include/holidays/gb/sct.rem +20 -0
  225. data/remind-v06.02.10/include/holidays/gb/wls.rem +14 -0
  226. data/remind-v06.02.10/include/holidays/gb.rem +27 -0
  227. data/remind-v06.02.10/include/holidays/ge.rem +24 -0
  228. data/remind-v06.02.10/include/holidays/gh.rem +34 -0
  229. data/remind-v06.02.10/include/holidays/gl.rem +25 -0
  230. data/remind-v06.02.10/include/holidays/gr.rem +37 -0
  231. data/remind-v06.02.10/include/holidays/gt.rem +24 -0
  232. data/remind-v06.02.10/include/holidays/gu.rem +37 -0
  233. data/remind-v06.02.10/include/holidays/hk.rem +25 -0
  234. data/remind-v06.02.10/include/holidays/hn.rem +18 -0
  235. data/remind-v06.02.10/include/holidays/hr.rem +21 -0
  236. data/remind-v06.02.10/include/holidays/ht.rem +34 -0
  237. data/remind-v06.02.10/include/holidays/hu.rem +20 -0
  238. data/remind-v06.02.10/include/holidays/id.rem +15 -0
  239. data/remind-v06.02.10/include/holidays/ie.rem +41 -0
  240. data/remind-v06.02.10/include/holidays/im.rem +26 -0
  241. data/remind-v06.02.10/include/holidays/in/ap.rem +14 -0
  242. data/remind-v06.02.10/include/holidays/in/as.rem +13 -0
  243. data/remind-v06.02.10/include/holidays/in/br.rem +14 -0
  244. data/remind-v06.02.10/include/holidays/in/cg.rem +13 -0
  245. data/remind-v06.02.10/include/holidays/in/gj.rem +15 -0
  246. data/remind-v06.02.10/include/holidays/in/hr.rem +14 -0
  247. data/remind-v06.02.10/include/holidays/in/ka.rem +13 -0
  248. data/remind-v06.02.10/include/holidays/in/kl.rem +14 -0
  249. data/remind-v06.02.10/include/holidays/in/mh.rem +15 -0
  250. data/remind-v06.02.10/include/holidays/in/mp.rem +13 -0
  251. data/remind-v06.02.10/include/holidays/in/od.rem +15 -0
  252. data/remind-v06.02.10/include/holidays/in/rj.rem +14 -0
  253. data/remind-v06.02.10/include/holidays/in/sk.rem +13 -0
  254. data/remind-v06.02.10/include/holidays/in/tn.rem +15 -0
  255. data/remind-v06.02.10/include/holidays/in/ts.rem +14 -0
  256. data/remind-v06.02.10/include/holidays/in/uk.rem +13 -0
  257. data/remind-v06.02.10/include/holidays/in/up.rem +13 -0
  258. data/remind-v06.02.10/include/holidays/in/wb.rem +16 -0
  259. data/remind-v06.02.10/include/holidays/in.rem +24 -0
  260. data/remind-v06.02.10/include/holidays/is.rem +23 -0
  261. data/remind-v06.02.10/include/holidays/it/ag.rem +13 -0
  262. data/remind-v06.02.10/include/holidays/it/al.rem +13 -0
  263. data/remind-v06.02.10/include/holidays/it/an.rem +13 -0
  264. data/remind-v06.02.10/include/holidays/it/andria.rem +13 -0
  265. data/remind-v06.02.10/include/holidays/it/ao.rem +13 -0
  266. data/remind-v06.02.10/include/holidays/it/ap.rem +13 -0
  267. data/remind-v06.02.10/include/holidays/it/aq.rem +13 -0
  268. data/remind-v06.02.10/include/holidays/it/ar.rem +13 -0
  269. data/remind-v06.02.10/include/holidays/it/at.rem +13 -0
  270. data/remind-v06.02.10/include/holidays/it/av.rem +13 -0
  271. data/remind-v06.02.10/include/holidays/it/ba.rem +13 -0
  272. data/remind-v06.02.10/include/holidays/it/barletta.rem +13 -0
  273. data/remind-v06.02.10/include/holidays/it/bg.rem +13 -0
  274. data/remind-v06.02.10/include/holidays/it/bl.rem +13 -0
  275. data/remind-v06.02.10/include/holidays/it/bn.rem +13 -0
  276. data/remind-v06.02.10/include/holidays/it/bo.rem +13 -0
  277. data/remind-v06.02.10/include/holidays/it/br.rem +13 -0
  278. data/remind-v06.02.10/include/holidays/it/bs.rem +13 -0
  279. data/remind-v06.02.10/include/holidays/it/bt.rem +15 -0
  280. data/remind-v06.02.10/include/holidays/it/bz.rem +14 -0
  281. data/remind-v06.02.10/include/holidays/it/ca.rem +13 -0
  282. data/remind-v06.02.10/include/holidays/it/cb.rem +13 -0
  283. data/remind-v06.02.10/include/holidays/it/ce.rem +13 -0
  284. data/remind-v06.02.10/include/holidays/it/cesena.rem +13 -0
  285. data/remind-v06.02.10/include/holidays/it/ch.rem +13 -0
  286. data/remind-v06.02.10/include/holidays/it/cl.rem +13 -0
  287. data/remind-v06.02.10/include/holidays/it/cn.rem +13 -0
  288. data/remind-v06.02.10/include/holidays/it/co.rem +13 -0
  289. data/remind-v06.02.10/include/holidays/it/cr.rem +13 -0
  290. data/remind-v06.02.10/include/holidays/it/cs.rem +13 -0
  291. data/remind-v06.02.10/include/holidays/it/ct.rem +13 -0
  292. data/remind-v06.02.10/include/holidays/it/cz.rem +13 -0
  293. data/remind-v06.02.10/include/holidays/it/en.rem +13 -0
  294. data/remind-v06.02.10/include/holidays/it/fc.rem +14 -0
  295. data/remind-v06.02.10/include/holidays/it/fe.rem +13 -0
  296. data/remind-v06.02.10/include/holidays/it/fg.rem +13 -0
  297. data/remind-v06.02.10/include/holidays/it/fi.rem +13 -0
  298. data/remind-v06.02.10/include/holidays/it/fm.rem +14 -0
  299. data/remind-v06.02.10/include/holidays/it/forli.rem +13 -0
  300. data/remind-v06.02.10/include/holidays/it/fr.rem +13 -0
  301. data/remind-v06.02.10/include/holidays/it/ge.rem +13 -0
  302. data/remind-v06.02.10/include/holidays/it/go.rem +13 -0
  303. data/remind-v06.02.10/include/holidays/it/gr.rem +13 -0
  304. data/remind-v06.02.10/include/holidays/it/im.rem +13 -0
  305. data/remind-v06.02.10/include/holidays/it/is.rem +13 -0
  306. data/remind-v06.02.10/include/holidays/it/kr.rem +13 -0
  307. data/remind-v06.02.10/include/holidays/it/lc.rem +13 -0
  308. data/remind-v06.02.10/include/holidays/it/le.rem +13 -0
  309. data/remind-v06.02.10/include/holidays/it/li.rem +13 -0
  310. data/remind-v06.02.10/include/holidays/it/lo.rem +13 -0
  311. data/remind-v06.02.10/include/holidays/it/lt.rem +14 -0
  312. data/remind-v06.02.10/include/holidays/it/lu.rem +13 -0
  313. data/remind-v06.02.10/include/holidays/it/mb.rem +13 -0
  314. data/remind-v06.02.10/include/holidays/it/mc.rem +13 -0
  315. data/remind-v06.02.10/include/holidays/it/me.rem +13 -0
  316. data/remind-v06.02.10/include/holidays/it/mi.rem +13 -0
  317. data/remind-v06.02.10/include/holidays/it/mn.rem +13 -0
  318. data/remind-v06.02.10/include/holidays/it/mo.rem +13 -0
  319. data/remind-v06.02.10/include/holidays/it/ms.rem +13 -0
  320. data/remind-v06.02.10/include/holidays/it/mt.rem +13 -0
  321. data/remind-v06.02.10/include/holidays/it/na.rem +13 -0
  322. data/remind-v06.02.10/include/holidays/it/no.rem +13 -0
  323. data/remind-v06.02.10/include/holidays/it/nu.rem +13 -0
  324. data/remind-v06.02.10/include/holidays/it/or.rem +13 -0
  325. data/remind-v06.02.10/include/holidays/it/pa.rem +13 -0
  326. data/remind-v06.02.10/include/holidays/it/pc.rem +13 -0
  327. data/remind-v06.02.10/include/holidays/it/pd.rem +13 -0
  328. data/remind-v06.02.10/include/holidays/it/pe.rem +13 -0
  329. data/remind-v06.02.10/include/holidays/it/pesaro.rem +13 -0
  330. data/remind-v06.02.10/include/holidays/it/pg.rem +14 -0
  331. data/remind-v06.02.10/include/holidays/it/pi.rem +13 -0
  332. data/remind-v06.02.10/include/holidays/it/pn.rem +14 -0
  333. data/remind-v06.02.10/include/holidays/it/pr.rem +13 -0
  334. data/remind-v06.02.10/include/holidays/it/pt.rem +13 -0
  335. data/remind-v06.02.10/include/holidays/it/pu.rem +14 -0
  336. data/remind-v06.02.10/include/holidays/it/pv.rem +13 -0
  337. data/remind-v06.02.10/include/holidays/it/pz.rem +13 -0
  338. data/remind-v06.02.10/include/holidays/it/ra.rem +13 -0
  339. data/remind-v06.02.10/include/holidays/it/rc.rem +13 -0
  340. data/remind-v06.02.10/include/holidays/it/re.rem +13 -0
  341. data/remind-v06.02.10/include/holidays/it/rg.rem +14 -0
  342. data/remind-v06.02.10/include/holidays/it/ri.rem +13 -0
  343. data/remind-v06.02.10/include/holidays/it/rm.rem +13 -0
  344. data/remind-v06.02.10/include/holidays/it/rn.rem +13 -0
  345. data/remind-v06.02.10/include/holidays/it/ro.rem +13 -0
  346. data/remind-v06.02.10/include/holidays/it/sa.rem +13 -0
  347. data/remind-v06.02.10/include/holidays/it/si.rem +13 -0
  348. data/remind-v06.02.10/include/holidays/it/so.rem +13 -0
  349. data/remind-v06.02.10/include/holidays/it/sp.rem +13 -0
  350. data/remind-v06.02.10/include/holidays/it/sr.rem +13 -0
  351. data/remind-v06.02.10/include/holidays/it/ss.rem +13 -0
  352. data/remind-v06.02.10/include/holidays/it/su.rem +13 -0
  353. data/remind-v06.02.10/include/holidays/it/sv.rem +13 -0
  354. data/remind-v06.02.10/include/holidays/it/ta.rem +13 -0
  355. data/remind-v06.02.10/include/holidays/it/te.rem +13 -0
  356. data/remind-v06.02.10/include/holidays/it/tn.rem +13 -0
  357. data/remind-v06.02.10/include/holidays/it/to.rem +13 -0
  358. data/remind-v06.02.10/include/holidays/it/tp.rem +13 -0
  359. data/remind-v06.02.10/include/holidays/it/tr.rem +13 -0
  360. data/remind-v06.02.10/include/holidays/it/trani.rem +13 -0
  361. data/remind-v06.02.10/include/holidays/it/ts.rem +13 -0
  362. data/remind-v06.02.10/include/holidays/it/tv.rem +13 -0
  363. data/remind-v06.02.10/include/holidays/it/ud.rem +13 -0
  364. data/remind-v06.02.10/include/holidays/it/urbino.rem +13 -0
  365. data/remind-v06.02.10/include/holidays/it/va.rem +13 -0
  366. data/remind-v06.02.10/include/holidays/it/vb.rem +13 -0
  367. data/remind-v06.02.10/include/holidays/it/vc.rem +13 -0
  368. data/remind-v06.02.10/include/holidays/it/ve.rem +14 -0
  369. data/remind-v06.02.10/include/holidays/it/vi.rem +13 -0
  370. data/remind-v06.02.10/include/holidays/it/vr.rem +13 -0
  371. data/remind-v06.02.10/include/holidays/it/vt.rem +13 -0
  372. data/remind-v06.02.10/include/holidays/it/vv.rem +13 -0
  373. data/remind-v06.02.10/include/holidays/it.rem +26 -0
  374. data/remind-v06.02.10/include/holidays/je.rem +19 -0
  375. data/remind-v06.02.10/include/holidays/jewish.rem +135 -0
  376. data/remind-v06.02.10/include/holidays/jm.rem +24 -0
  377. data/remind-v06.02.10/include/holidays/jo.rem +11 -0
  378. data/remind-v06.02.10/include/holidays/jp.rem +27 -0
  379. data/remind-v06.02.10/include/holidays/ke.rem +25 -0
  380. data/remind-v06.02.10/include/holidays/kg.rem +20 -0
  381. data/remind-v06.02.10/include/holidays/kh.rem +22 -0
  382. data/remind-v06.02.10/include/holidays/kn.rem +28 -0
  383. data/remind-v06.02.10/include/holidays/kr.rem +19 -0
  384. data/remind-v06.02.10/include/holidays/kw.rem +10 -0
  385. data/remind-v06.02.10/include/holidays/kz.rem +34 -0
  386. data/remind-v06.02.10/include/holidays/la.rem +47 -0
  387. data/remind-v06.02.10/include/holidays/lgbtq/au.rem +8 -0
  388. data/remind-v06.02.10/include/holidays/lgbtq/br.rem +10 -0
  389. data/remind-v06.02.10/include/holidays/lgbtq/ca.rem +7 -0
  390. data/remind-v06.02.10/include/holidays/lgbtq/cl.rem +7 -0
  391. data/remind-v06.02.10/include/holidays/lgbtq/ie.rem +7 -0
  392. data/remind-v06.02.10/include/holidays/lgbtq/in.rem +7 -0
  393. data/remind-v06.02.10/include/holidays/lgbtq/nl.rem +7 -0
  394. data/remind-v06.02.10/include/holidays/lgbtq/ua.rem +7 -0
  395. data/remind-v06.02.10/include/holidays/lgbtq/uk.rem +8 -0
  396. data/remind-v06.02.10/include/holidays/lgbtq/us.rem +16 -0
  397. data/remind-v06.02.10/include/holidays/lgbtq.rem +34 -0
  398. data/remind-v06.02.10/include/holidays/li.rem +31 -0
  399. data/remind-v06.02.10/include/holidays/ls.rem +18 -0
  400. data/remind-v06.02.10/include/holidays/lt.rem +23 -0
  401. data/remind-v06.02.10/include/holidays/lu.rem +18 -0
  402. data/remind-v06.02.10/include/holidays/lv.rem +25 -0
  403. data/remind-v06.02.10/include/holidays/ma.rem +17 -0
  404. data/remind-v06.02.10/include/holidays/mc.rem +26 -0
  405. data/remind-v06.02.10/include/holidays/md.rem +21 -0
  406. data/remind-v06.02.10/include/holidays/me.rem +28 -0
  407. data/remind-v06.02.10/include/holidays/mg.rem +24 -0
  408. data/remind-v06.02.10/include/holidays/mh.rem +22 -0
  409. data/remind-v06.02.10/include/holidays/misc.rem +9 -0
  410. data/remind-v06.02.10/include/holidays/mk.rem +17 -0
  411. data/remind-v06.02.10/include/holidays/mp.rem +44 -0
  412. data/remind-v06.02.10/include/holidays/mr.rem +11 -0
  413. data/remind-v06.02.10/include/holidays/mt.rem +21 -0
  414. data/remind-v06.02.10/include/holidays/mv.rem +12 -0
  415. data/remind-v06.02.10/include/holidays/mw.rem +36 -0
  416. data/remind-v06.02.10/include/holidays/mx.rem +15 -0
  417. data/remind-v06.02.10/include/holidays/my/01.rem +13 -0
  418. data/remind-v06.02.10/include/holidays/my/02.rem +13 -0
  419. data/remind-v06.02.10/include/holidays/my/03.rem +14 -0
  420. data/remind-v06.02.10/include/holidays/my/04.rem +18 -0
  421. data/remind-v06.02.10/include/holidays/my/05.rem +16 -0
  422. data/remind-v06.02.10/include/holidays/my/06.rem +17 -0
  423. data/remind-v06.02.10/include/holidays/my/07.rem +17 -0
  424. data/remind-v06.02.10/include/holidays/my/08.rem +15 -0
  425. data/remind-v06.02.10/include/holidays/my/09.rem +14 -0
  426. data/remind-v06.02.10/include/holidays/my/10.rem +16 -0
  427. data/remind-v06.02.10/include/holidays/my/11.rem +16 -0
  428. data/remind-v06.02.10/include/holidays/my/12.rem +19 -0
  429. data/remind-v06.02.10/include/holidays/my/13.rem +22 -0
  430. data/remind-v06.02.10/include/holidays/my/14.rem +16 -0
  431. data/remind-v06.02.10/include/holidays/my/15.rem +18 -0
  432. data/remind-v06.02.10/include/holidays/my/16.rem +16 -0
  433. data/remind-v06.02.10/include/holidays/my.rem +23 -0
  434. data/remind-v06.02.10/include/holidays/mz.rem +25 -0
  435. data/remind-v06.02.10/include/holidays/na.rem +27 -0
  436. data/remind-v06.02.10/include/holidays/ng.rem +21 -0
  437. data/remind-v06.02.10/include/holidays/ni/mn.rem +14 -0
  438. data/remind-v06.02.10/include/holidays/ni.rem +24 -0
  439. data/remind-v06.02.10/include/holidays/nl.rem +26 -0
  440. data/remind-v06.02.10/include/holidays/no.rem +19 -0
  441. data/remind-v06.02.10/include/holidays/nz/auk.rem +13 -0
  442. data/remind-v06.02.10/include/holidays/nz/can.rem +13 -0
  443. data/remind-v06.02.10/include/holidays/nz/cit.rem +13 -0
  444. data/remind-v06.02.10/include/holidays/nz/hkb.rem +13 -0
  445. data/remind-v06.02.10/include/holidays/nz/mbh.rem +13 -0
  446. data/remind-v06.02.10/include/holidays/nz/nsn.rem +13 -0
  447. data/remind-v06.02.10/include/holidays/nz/ntl.rem +13 -0
  448. data/remind-v06.02.10/include/holidays/nz/ota.rem +14 -0
  449. data/remind-v06.02.10/include/holidays/nz/south_canterbury.rem +13 -0
  450. data/remind-v06.02.10/include/holidays/nz/stl.rem +13 -0
  451. data/remind-v06.02.10/include/holidays/nz/tki.rem +13 -0
  452. data/remind-v06.02.10/include/holidays/nz/wgn.rem +13 -0
  453. data/remind-v06.02.10/include/holidays/nz/wtc.rem +13 -0
  454. data/remind-v06.02.10/include/holidays/nz.rem +69 -0
  455. data/remind-v06.02.10/include/holidays/pa.rem +27 -0
  456. data/remind-v06.02.10/include/holidays/pagan.rem +65 -0
  457. data/remind-v06.02.10/include/holidays/pe.rem +22 -0
  458. data/remind-v06.02.10/include/holidays/pg.rem +24 -0
  459. data/remind-v06.02.10/include/holidays/ph.rem +26 -0
  460. data/remind-v06.02.10/include/holidays/pk.rem +13 -0
  461. data/remind-v06.02.10/include/holidays/pl.rem +20 -0
  462. data/remind-v06.02.10/include/holidays/pr.rem +40 -0
  463. data/remind-v06.02.10/include/holidays/pt/01.rem +13 -0
  464. data/remind-v06.02.10/include/holidays/pt/02.rem +13 -0
  465. data/remind-v06.02.10/include/holidays/pt/03.rem +13 -0
  466. data/remind-v06.02.10/include/holidays/pt/04.rem +13 -0
  467. data/remind-v06.02.10/include/holidays/pt/05.rem +13 -0
  468. data/remind-v06.02.10/include/holidays/pt/06.rem +13 -0
  469. data/remind-v06.02.10/include/holidays/pt/07.rem +13 -0
  470. data/remind-v06.02.10/include/holidays/pt/08.rem +13 -0
  471. data/remind-v06.02.10/include/holidays/pt/09.rem +13 -0
  472. data/remind-v06.02.10/include/holidays/pt/10.rem +13 -0
  473. data/remind-v06.02.10/include/holidays/pt/12.rem +13 -0
  474. data/remind-v06.02.10/include/holidays/pt/13.rem +13 -0
  475. data/remind-v06.02.10/include/holidays/pt/14.rem +13 -0
  476. data/remind-v06.02.10/include/holidays/pt/15.rem +13 -0
  477. data/remind-v06.02.10/include/holidays/pt/16.rem +13 -0
  478. data/remind-v06.02.10/include/holidays/pt/18.rem +13 -0
  479. data/remind-v06.02.10/include/holidays/pt/20.rem +13 -0
  480. data/remind-v06.02.10/include/holidays/pt/30.rem +14 -0
  481. data/remind-v06.02.10/include/holidays/pt.rem +17 -0
  482. data/remind-v06.02.10/include/holidays/pw.rem +34 -0
  483. data/remind-v06.02.10/include/holidays/py.rem +20 -0
  484. data/remind-v06.02.10/include/holidays/ro.rem +24 -0
  485. data/remind-v06.02.10/include/holidays/rs.rem +26 -0
  486. data/remind-v06.02.10/include/holidays/ru.rem +21 -0
  487. data/remind-v06.02.10/include/holidays/sa.rem +13 -0
  488. data/remind-v06.02.10/include/holidays/sc.rem +28 -0
  489. data/remind-v06.02.10/include/holidays/se.rem +23 -0
  490. data/remind-v06.02.10/include/holidays/sg.rem +16 -0
  491. data/remind-v06.02.10/include/holidays/si.rem +20 -0
  492. data/remind-v06.02.10/include/holidays/sk.rem +25 -0
  493. data/remind-v06.02.10/include/holidays/sm.rem +25 -0
  494. data/remind-v06.02.10/include/holidays/sv/ss.rem +14 -0
  495. data/remind-v06.02.10/include/holidays/sv.rem +25 -0
  496. data/remind-v06.02.10/include/holidays/sz.rem +26 -0
  497. data/remind-v06.02.10/include/holidays/td.rem +22 -0
  498. data/remind-v06.02.10/include/holidays/th.rem +72 -0
  499. data/remind-v06.02.10/include/holidays/tl.rem +31 -0
  500. data/remind-v06.02.10/include/holidays/tn.rem +15 -0
  501. data/remind-v06.02.10/include/holidays/to.rem +38 -0
  502. data/remind-v06.02.10/include/holidays/tr.rem +17 -0
  503. data/remind-v06.02.10/include/holidays/tw.rem +26 -0
  504. data/remind-v06.02.10/include/holidays/tz.rem +23 -0
  505. data/remind-v06.02.10/include/holidays/ua.rem +20 -0
  506. data/remind-v06.02.10/include/holidays/uk.rem +27 -0
  507. data/remind-v06.02.10/include/holidays/um.rem +32 -0
  508. data/remind-v06.02.10/include/holidays/us/ak.rem +17 -0
  509. data/remind-v06.02.10/include/holidays/us/al.rem +17 -0
  510. data/remind-v06.02.10/include/holidays/us/ar.rem +13 -0
  511. data/remind-v06.02.10/include/holidays/us/as.rem +20 -0
  512. data/remind-v06.02.10/include/holidays/us/az.rem +14 -0
  513. data/remind-v06.02.10/include/holidays/us/ca.rem +16 -0
  514. data/remind-v06.02.10/include/holidays/us/co.rem +14 -0
  515. data/remind-v06.02.10/include/holidays/us/ct.rem +17 -0
  516. data/remind-v06.02.10/include/holidays/us/dc.rem +16 -0
  517. data/remind-v06.02.10/include/holidays/us/de.rem +14 -0
  518. data/remind-v06.02.10/include/holidays/us/fl.rem +14 -0
  519. data/remind-v06.02.10/include/holidays/us/ga.rem +18 -0
  520. data/remind-v06.02.10/include/holidays/us/gu.rem +17 -0
  521. data/remind-v06.02.10/include/holidays/us/hi.rem +19 -0
  522. data/remind-v06.02.10/include/holidays/us/ia.rem +15 -0
  523. data/remind-v06.02.10/include/holidays/us/id.rem +14 -0
  524. data/remind-v06.02.10/include/holidays/us/il.rem +17 -0
  525. data/remind-v06.02.10/include/holidays/us/in.rem +19 -0
  526. data/remind-v06.02.10/include/holidays/us/ks.rem +16 -0
  527. data/remind-v06.02.10/include/holidays/us/ky.rem +16 -0
  528. data/remind-v06.02.10/include/holidays/us/la.rem +14 -0
  529. data/remind-v06.02.10/include/holidays/us/ma.rem +17 -0
  530. data/remind-v06.02.10/include/holidays/us/md-extra.rem +19 -0
  531. data/remind-v06.02.10/include/holidays/us/md.rem +14 -0
  532. data/remind-v06.02.10/include/holidays/us/me.rem +14 -0
  533. data/remind-v06.02.10/include/holidays/us/mi.rem +19 -0
  534. data/remind-v06.02.10/include/holidays/us/mo.rem +16 -0
  535. data/remind-v06.02.10/include/holidays/us/mp.rem +23 -0
  536. data/remind-v06.02.10/include/holidays/us/ms.rem +14 -0
  537. data/remind-v06.02.10/include/holidays/us/mt.rem +13 -0
  538. data/remind-v06.02.10/include/holidays/us/nc.rem +22 -0
  539. data/remind-v06.02.10/include/holidays/us/ne.rem +14 -0
  540. data/remind-v06.02.10/include/holidays/us/nh.rem +14 -0
  541. data/remind-v06.02.10/include/holidays/us/nj.rem +17 -0
  542. data/remind-v06.02.10/include/holidays/us/nm.rem +14 -0
  543. data/remind-v06.02.10/include/holidays/us/nv.rem +16 -0
  544. data/remind-v06.02.10/include/holidays/us/ny.rem +17 -0
  545. data/remind-v06.02.10/include/holidays/us/oh.rem +13 -0
  546. data/remind-v06.02.10/include/holidays/us/ok.rem +13 -0
  547. data/remind-v06.02.10/include/holidays/us/pa.rem +14 -0
  548. data/remind-v06.02.10/include/holidays/us/pr.rem +21 -0
  549. data/remind-v06.02.10/include/holidays/us/ri.rem +14 -0
  550. data/remind-v06.02.10/include/holidays/us/sc.rem +13 -0
  551. data/remind-v06.02.10/include/holidays/us/sd.rem +13 -0
  552. data/remind-v06.02.10/include/holidays/us/tn.rem +13 -0
  553. data/remind-v06.02.10/include/holidays/us/tx.rem +25 -0
  554. data/remind-v06.02.10/include/holidays/us/ut.rem +16 -0
  555. data/remind-v06.02.10/include/holidays/us/va.rem +13 -0
  556. data/remind-v06.02.10/include/holidays/us/vi.rem +22 -0
  557. data/remind-v06.02.10/include/holidays/us/vt.rem +16 -0
  558. data/remind-v06.02.10/include/holidays/us/wi.rem +20 -0
  559. data/remind-v06.02.10/include/holidays/us/wv.rem +17 -0
  560. data/remind-v06.02.10/include/holidays/us.rem +41 -0
  561. data/remind-v06.02.10/include/holidays/uy.rem +39 -0
  562. data/remind-v06.02.10/include/holidays/uz.rem +21 -0
  563. data/remind-v06.02.10/include/holidays/va.rem +23 -0
  564. data/remind-v06.02.10/include/holidays/ve.rem +21 -0
  565. data/remind-v06.02.10/include/holidays/vi.rem +41 -0
  566. data/remind-v06.02.10/include/holidays/vn.rem +17 -0
  567. data/remind-v06.02.10/include/holidays/vu.rem +32 -0
  568. data/remind-v06.02.10/include/holidays/ws.rem +18 -0
  569. data/remind-v06.02.10/include/holidays/za.rem +28 -0
  570. data/remind-v06.02.10/include/holidays/zm.rem +31 -0
  571. data/remind-v06.02.10/include/lang/auto.rem +32 -0
  572. data/remind-v06.02.10/include/lang/ca.rem +60 -0
  573. data/remind-v06.02.10/include/lang/da.rem +77 -0
  574. data/remind-v06.02.10/include/lang/de.rem +80 -0
  575. data/remind-v06.02.10/include/lang/en.rem +4 -0
  576. data/remind-v06.02.10/include/lang/es.rem +55 -0
  577. data/remind-v06.02.10/include/lang/fi.rem +202 -0
  578. data/remind-v06.02.10/include/lang/fr.rem +172 -0
  579. data/remind-v06.02.10/include/lang/gr.rem +74 -0
  580. data/remind-v06.02.10/include/lang/is.rem +58 -0
  581. data/remind-v06.02.10/include/lang/it.rem +76 -0
  582. data/remind-v06.02.10/include/lang/nl.rem +71 -0
  583. data/remind-v06.02.10/include/lang/no.rem +66 -0
  584. data/remind-v06.02.10/include/lang/pl.rem +177 -0
  585. data/remind-v06.02.10/include/lang/pt.rem +176 -0
  586. data/remind-v06.02.10/include/lang/ro.rem +74 -0
  587. data/remind-v06.02.10/include/lunar-eclipses.rem +149 -0
  588. data/remind-v06.02.10/include/moonphases.rem +19 -0
  589. data/remind-v06.02.10/include/seasons.rem +21 -0
  590. data/remind-v06.02.10/include/solar-eclipses.rem +238 -0
  591. data/remind-v06.02.10/include/sun.rem +12 -0
  592. data/remind-v06.02.10/include/translations/de/holidays/chinese-new-year.rem +13 -0
  593. data/remind-v06.02.10/include/translations/de/moonphases.rem +4 -0
  594. data/remind-v06.02.10/include/translations/de/seasons.rem +4 -0
  595. data/remind-v06.02.10/include/translations/de/sun.rem +2 -0
  596. data/remind-v06.02.10/include/translations/nl/holidays/chinese-new-year.rem +13 -0
  597. data/remind-v06.02.10/include/translations/nl/moonphases.rem +4 -0
  598. data/remind-v06.02.10/include/translations/nl/seasons.rem +4 -0
  599. data/remind-v06.02.10/include/translations/nl/sun.rem +2 -0
  600. data/remind-v06.02.10/include/utils/add-html-anchors.rem +5 -0
  601. data/remind-v06.02.10/install-sh +238 -0
  602. data/remind-v06.02.10/man/rem.1.in +21 -0
  603. data/remind-v06.02.10/man/rem2ps.1.in +816 -0
  604. data/remind-v06.02.10/man/remind.1.in +7658 -0
  605. data/remind-v06.02.10/man/tkremind.1.in +612 -0
  606. data/remind-v06.02.10/rem2html/Makefile.in +30 -0
  607. data/remind-v06.02.10/rem2html/rem2html.in +1299 -0
  608. data/remind-v06.02.10/rem2pdf/Makefile.PL.in +25 -0
  609. data/remind-v06.02.10/rem2pdf/Makefile.top.in +50 -0
  610. data/remind-v06.02.10/rem2pdf/bin/rem2pdf.in +761 -0
  611. data/remind-v06.02.10/scripts/tkremind.in +5794 -0
  612. data/remind-v06.02.10/src/Makefile.in +133 -0
  613. data/remind-v06.02.10/src/calendar.c +3069 -0
  614. data/remind-v06.02.10/src/config.h +117 -0
  615. data/remind-v06.02.10/src/config.h.in +116 -0
  616. data/remind-v06.02.10/src/custom.h +167 -0
  617. data/remind-v06.02.10/src/custom.h.in +167 -0
  618. data/remind-v06.02.10/src/dedupe.c +179 -0
  619. data/remind-v06.02.10/src/dorem.c +2389 -0
  620. data/remind-v06.02.10/src/dosubst.c +910 -0
  621. data/remind-v06.02.10/src/dynbuf.c +198 -0
  622. data/remind-v06.02.10/src/dynbuf.h +41 -0
  623. data/remind-v06.02.10/src/err.h +294 -0
  624. data/remind-v06.02.10/src/expr.c +3408 -0
  625. data/remind-v06.02.10/src/files.c +1437 -0
  626. data/remind-v06.02.10/src/funcs.c +5230 -0
  627. data/remind-v06.02.10/src/globals.c +23 -0
  628. data/remind-v06.02.10/src/globals.h +277 -0
  629. data/remind-v06.02.10/src/hashtab.c +428 -0
  630. data/remind-v06.02.10/src/hashtab.h +88 -0
  631. data/remind-v06.02.10/src/hashtab_stats.c +101 -0
  632. data/remind-v06.02.10/src/hbcal.c +579 -0
  633. data/remind-v06.02.10/src/ifelse.c +236 -0
  634. data/remind-v06.02.10/src/init.c +1494 -0
  635. data/remind-v06.02.10/src/json.c +1048 -0
  636. data/remind-v06.02.10/src/json.h +276 -0
  637. data/remind-v06.02.10/src/main.c +2310 -0
  638. data/remind-v06.02.10/src/md5.c +250 -0
  639. data/remind-v06.02.10/src/md5.h +33 -0
  640. data/remind-v06.02.10/src/moon.c +957 -0
  641. data/remind-v06.02.10/src/omit.c +560 -0
  642. data/remind-v06.02.10/src/protos.h +284 -0
  643. data/remind-v06.02.10/src/queue.c +1118 -0
  644. data/remind-v06.02.10/src/rem2ps.c +1383 -0
  645. data/remind-v06.02.10/src/rem2ps.h +229 -0
  646. data/remind-v06.02.10/src/sort.c +257 -0
  647. data/remind-v06.02.10/src/token.c +494 -0
  648. data/remind-v06.02.10/src/trans.c +544 -0
  649. data/remind-v06.02.10/src/trigger.c +871 -0
  650. data/remind-v06.02.10/src/types.h +341 -0
  651. data/remind-v06.02.10/src/userfns.c +810 -0
  652. data/remind-v06.02.10/src/utils.c +374 -0
  653. data/remind-v06.02.10/src/var.c +1762 -0
  654. data/remind-v06.02.10/src/version.h +1 -0
  655. data/remind-v06.02.10/src/version.h.in +1 -0
  656. data/remind-v06.02.10/src/xlat.c +100 -0
  657. data/remind-v06.02.10/www/Makefile.in +91 -0
  658. metadata +764 -0
data/ext/remind/shim.c ADDED
@@ -0,0 +1,379 @@
1
+ /***************************************************************/
2
+ /* */
3
+ /* SHIM.C */
4
+ /* */
5
+ /* The one piece of C in remind-rb. */
6
+ /* */
7
+ /* Remind's C interface is not hostile to a binding, but two */
8
+ /* parts of it cannot be reached from Fiddle alone: */
9
+ /* */
10
+ /* 1. Struct layout. Trigger has thirty-odd fields, and */
11
+ /* reading them from Ruby would mean hard-coding byte */
12
+ /* offsets that the next release, the next compiler or the */
13
+ /* next platform is free to move. The accessors below are */
14
+ /* compiled against the same headers as the rest of the */
15
+ /* library, so the offsets are the compiler's problem */
16
+ /* rather than the binding's. */
17
+ /* */
18
+ /* 2. The sequence in DoRem. Parsing a REM line means */
19
+ /* CreateParser, ParseRem, ComputeTrigger, ParseToken, */
20
+ /* FindToken and DoSubst in that order, with cleanup on */
21
+ /* every early exit. Driving that from Ruby would mean */
22
+ /* six FFI calls per line and a Parser struct allocated by */
23
+ /* size; here it is one call that either works or does */
24
+ /* not. */
25
+ /* */
26
+ /* Everything else -- dates, the moon, the Hebrew calendar, */
27
+ /* expression evaluation -- is called directly from Ruby, and */
28
+ /* deliberately not wrapped here. */
29
+ /* */
30
+ /* This file is part of remind-rb, and is distributed under */
31
+ /* the same terms as Remind itself. */
32
+ /* SPDX-License-Identifier: GPL-2.0-only */
33
+ /* */
34
+ /***************************************************************/
35
+
36
+ #include "config.h"
37
+
38
+ #include <stddef.h>
39
+ #include <string.h>
40
+
41
+ #include "types.h"
42
+ #include "protos.h"
43
+ #include "globals.h"
44
+ #include "err.h"
45
+
46
+ /* How big the caller has to make the blocks it hands back in. */
47
+ size_t remrb_sizeof_trigger(void) { return sizeof(Trigger); }
48
+ size_t remrb_sizeof_timetrig(void) { return sizeof(TimeTrig); }
49
+
50
+ /* The sentinels Remind uses for "the reminder did not say". */
51
+ int remrb_no_day(void) { return NO_DAY; }
52
+ int remrb_no_month(void) { return NO_MON; }
53
+ int remrb_no_year(void) { return NO_YR; }
54
+ int remrb_no_weekday(void) { return NO_WD; }
55
+ int remrb_no_until(void) { return NO_UNTIL; }
56
+ int remrb_no_time(void) { return NO_TIME; }
57
+
58
+ /* The marker DoSubst leaves around the part of a message that %" marked as
59
+ the calendar entry's title. */
60
+ int remrb_quote_marker(void) { return QUOTE_MARKER; }
61
+
62
+ /* The two ways DoSubst renders a message. */
63
+ int remrb_normal_mode(void) { return NORMAL_MODE; }
64
+ int remrb_cal_mode(void) { return CAL_MODE; }
65
+
66
+ /* The body types, so Ruby can tell a MSG from a RUN without repeating the
67
+ numbers. */
68
+ int remrb_msg_type(void) { return MSG_TYPE; }
69
+ int remrb_msf_type(void) { return MSF_TYPE; }
70
+ int remrb_run_type(void) { return RUN_TYPE; }
71
+ int remrb_cal_type(void) { return CAL_TYPE; }
72
+ int remrb_sat_type(void) { return SAT_TYPE; }
73
+ int remrb_passthru_type(void) { return PASSTHRU_TYPE; }
74
+
75
+ /* Trigger accessors. One line each, and each one is the compiler's opinion
76
+ of where the field is rather than the binding's. */
77
+ #define TRIGGER_READER(field) \
78
+ int remrb_trigger_##field(Trigger const *t) { return t->field; }
79
+
80
+ TRIGGER_READER(wd) /* bit set: 1 << 0 is Monday, as Remind counts */
81
+ TRIGGER_READER(d) /* day of month, or NO_DAY */
82
+ TRIGGER_READER(m) /* month, 0-based, or NO_MON */
83
+ TRIGGER_READER(y) /* year, or NO_YR */
84
+ TRIGGER_READER(back) /* the count on a --n / -n delta */
85
+ TRIGGER_READER(delta) /* advance warning, in days */
86
+ TRIGGER_READER(rep) /* *n repeat interval, in days */
87
+ TRIGGER_READER(localomit) /* bit set of weekdays this reminder OMITs */
88
+ TRIGGER_READER(skip) /* SKIP / BEFORE / AFTER */
89
+ TRIGGER_READER(until) /* UNTIL / THROUGH date, or NO_UNTIL */
90
+ TRIGGER_READER(typ) /* MSG_TYPE, RUN_TYPE, ... */
91
+ TRIGGER_READER(once) /* ONCE */
92
+ TRIGGER_READER(scanfrom) /* SCANFROM / FROM date */
93
+ TRIGGER_READER(from)
94
+ TRIGGER_READER(priority) /* PRIORITY */
95
+ TRIGGER_READER(duration_days)
96
+ TRIGGER_READER(eventduration) /* DURATION, in minutes */
97
+ TRIGGER_READER(eventstart) /* start as a Remind datetime */
98
+ TRIGGER_READER(is_todo)
99
+ TRIGGER_READER(addomit)
100
+ TRIGGER_READER(need_wkday)
101
+
102
+ char const *remrb_trigger_tags(Trigger *t)
103
+ {
104
+ return DBufValue(&t->tags);
105
+ }
106
+
107
+ char const *remrb_trigger_timezone(Trigger const *t)
108
+ {
109
+ return t->tz;
110
+ }
111
+
112
+ /* TimeTrig accessors. */
113
+ int remrb_timetrig_time(TimeTrig const *tt) { return tt->ttime; }
114
+ int remrb_timetrig_delta(TimeTrig const *tt) { return tt->delta; }
115
+ int remrb_timetrig_repeat(TimeTrig const *tt) { return tt->rep; }
116
+ int remrb_timetrig_duration(TimeTrig const *tt) { return tt->duration; }
117
+
118
+ /* The tokens main.c dispatches to something other than DoRem. Everything
119
+ else -- a number, a month name, a word Remind does not know -- opens a
120
+ reminder, which is Remind's `default:` case. T_RemType is on the reminder
121
+ side: a line that opens with a bare MSG is a reminder with an empty
122
+ trigger. T_Omit is not: OMIT can carry a reminder, but the command itself
123
+ is a calendar-wide exclusion rather than an event. */
124
+ static int
125
+ is_command(enum TokTypes type)
126
+ {
127
+ switch (type) {
128
+ case T_Banner: case T_Clr: case T_Comment: case T_Debug:
129
+ case T_Dumpvars:case T_Else: case T_Empty: case T_EndIf:
130
+ case T_ErrMsg: case T_Exit: case T_Expr: case T_Flush:
131
+ case T_Frename: case T_Fset: case T_Funset: case T_If:
132
+ case T_IfTrig: case T_Include: case T_IncludeCmd:
133
+ case T_IncludeR:case T_IncludeSys: case T_Omit: case T_Pop:
134
+ case T_PopFuncs:case T_PopVars: case T_Preserve: case T_Push:
135
+ case T_PushFuncs: case T_PushVars: case T_Return: case T_Set:
136
+ case T_Translate: case T_UnSet:
137
+ return 1;
138
+ default:
139
+ return 0;
140
+ }
141
+ }
142
+
143
+ /* The expanded message from the last successful parse. One buffer, reused:
144
+ the caller copies the string into Ruby before the next call, and the Ruby
145
+ side serialises calls anyway because Remind's state is process-wide. */
146
+ static DynamicBuffer body;
147
+ static int body_ready = 0;
148
+
149
+ static void
150
+ reset_body(void)
151
+ {
152
+ if (!body_ready) {
153
+ DBufInit(&body);
154
+ body_ready = 1;
155
+ } else {
156
+ DBufFree(&body);
157
+ }
158
+ }
159
+
160
+ /***************************************************************/
161
+ /* */
162
+ /* remrb_parse_reminder */
163
+ /* */
164
+ /* Parse one REM line the way DoRem does, minus the parts a */
165
+ /* calendar has no use for: no queueing, no SATISFY, no purge */
166
+ /* mode, no output. */
167
+ /* */
168
+ /* Fills in the caller's Trigger and TimeTrig, writes the */
169
+ /* first date the reminder triggers on to *dse, and points */
170
+ /* *msg at the message with its %-substitutions expanded for */
171
+ /* that date. Answers OK, or the error code Remind raised; */
172
+ /* the caller frees the Trigger either way. */
173
+ /* */
174
+ /***************************************************************/
175
+ int
176
+ remrb_parse_reminder(char const *line, Trigger *trig, TimeTrig *tim,
177
+ int *dse, char const **msg, int mode)
178
+ {
179
+ Parser p;
180
+ DynamicBuffer token_buf;
181
+ Token tok;
182
+ int r;
183
+
184
+ reset_body();
185
+ DBufInit(&token_buf);
186
+ *dse = -1;
187
+ *msg = NULL;
188
+
189
+ CreateParser(line, &p);
190
+
191
+ /* Mirror how main.c decides what a line is. It reads the first token and
192
+ dispatches on it: T_Rem is a reminder, T_RemType (a bare MSG or CAL) is
193
+ a reminder, an unrecognised word is a reminder by default -- and
194
+ anything else is one of Remind's other commands, which is not an event
195
+ and must not be parsed as though it were.
196
+
197
+ ParseRem starts at the date specification, after the keyword, which is
198
+ why REM is consumed and everything else is pushed back. */
199
+ r = ParseToken(&p, &token_buf);
200
+ if (r != OK) {
201
+ DestroyParser(&p);
202
+ return r;
203
+ }
204
+ FindToken(DBufValue(&token_buf), &tok);
205
+
206
+ if (tok.type != T_Rem) {
207
+ if (is_command(tok.type)) {
208
+ DBufFree(&token_buf);
209
+ DestroyParser(&p);
210
+ return E_PARSE_ERR;
211
+ }
212
+ r = PushToken(DBufValue(&token_buf), &p);
213
+ if (r != OK) {
214
+ DBufFree(&token_buf);
215
+ DestroyParser(&p);
216
+ return r;
217
+ }
218
+ }
219
+ DBufFree(&token_buf);
220
+
221
+ r = ParseRem(&p, trig, tim);
222
+ if (r != OK) {
223
+ DestroyParser(&p);
224
+ return r;
225
+ }
226
+
227
+ /* SATISFY is a control construct, not a calendar entry, and the rest of
228
+ DoRem's handling of it is about the reminder queue. */
229
+ if (trig->typ == SAT_TYPE) {
230
+ DestroyParser(&p);
231
+ return E_PARSE_ERR;
232
+ }
233
+
234
+ *dse = ComputeTrigger(get_scanfrom(trig), trig, tim, &r, 1);
235
+ if (r != OK) {
236
+ DestroyParser(&p);
237
+ return r;
238
+ }
239
+ *dse = AdjustTriggerForTimeZone(trig, *dse, tim, 0);
240
+
241
+ /* ParseRem has already read the keyword that opens the body -- MSG, MSF,
242
+ RUN, CAL, SPECIAL -- and left trig->typ set to it, which is why DoRem
243
+ goes straight from here to rendering. A line with no body at all leaves
244
+ it at NO_TYPE. */
245
+ if (trig->typ == NO_TYPE) {
246
+ DestroyParser(&p);
247
+ return E_EOLN;
248
+ }
249
+
250
+ /* NORMAL_MODE renders the message the way `remind` prints it; CAL_MODE
251
+ renders it the way a calendar entry wants it, which is where a %"..%"
252
+ title is honoured. The caller picks, because a calendar entry needs
253
+ both: one for the summary and one for the description. */
254
+ r = DoSubst(&p, &body, trig, tim, *dse, mode);
255
+ DestroyParser(&p);
256
+
257
+ if (r != OK) {
258
+ return r;
259
+ }
260
+
261
+ *msg = DBufValue(&body);
262
+ return OK;
263
+ }
264
+
265
+ /***************************************************************/
266
+ /* */
267
+ /* remrb_next_trigger */
268
+ /* */
269
+ /* The next date this reminder triggers on, at or after */
270
+ /* `from`. This is the same call DoRem makes to find the */
271
+ /* first one, run again from further along, which is how */
272
+ /* Remind itself walks a reminder across a date range. */
273
+ /* */
274
+ /* It exists because a calendar has to decide whether an */
275
+ /* RRULE says what the reminder says, and the only authority */
276
+ /* on that is the reminder: generate a rule, expand it, and */
277
+ /* compare it against these dates. save_in_globals is 0 -- */
278
+ /* walking a reminder must not move Remind's idea of the last */
279
+ /* trigger. */
280
+ /* */
281
+ /* Answers -1 and sets *err when the reminder has no further */
282
+ /* trigger date, which is how a run-out or expired reminder */
283
+ /* ends a walk. */
284
+ /* */
285
+ /***************************************************************/
286
+ int
287
+ remrb_next_trigger(Trigger *trig, TimeTrig *tim, int from, int *err)
288
+ {
289
+ int dse;
290
+
291
+ *err = OK;
292
+ dse = ComputeTrigger(from, trig, tim, err, 0);
293
+ if (*err != OK) {
294
+ return -1;
295
+ }
296
+ return dse;
297
+ }
298
+
299
+ /***************************************************************/
300
+ /* */
301
+ /* remrb_open_file / remrb_read_line */
302
+ /* */
303
+ /* Remind's own file reader. A reminder file is not a list of */
304
+ /* lines: a backslash continues one, INCLUDE pulls another */
305
+ /* file into the middle of it, and both are handled here */
306
+ /* rather than in the caller. ReadLine leaves the logical */
307
+ /* line in the CurLine global and pops back out of an included */
308
+ /* file when it ends. */
309
+ /* */
310
+ /* remrb_read_line answers OK, or E_EOF when there is nothing */
311
+ /* left in any open file. */
312
+ /* */
313
+ /***************************************************************/
314
+ int
315
+ remrb_open_file(char const *path)
316
+ {
317
+ return IncludeFile(path);
318
+ }
319
+
320
+ /* INCLUDE is a command, not part of the reader: ReadLine pops back out of an
321
+ included file when it ends, but something has to push one on in the first
322
+ place, and in `remind` that something is DoCommand. This is that, for the
323
+ three forms that name a file.
324
+
325
+ INCLUDECMD is deliberately not among them. It runs a shell command and
326
+ reads its output as reminders, and a program that converts somebody else's
327
+ reminder file should not execute what is in it. */
328
+ static int
329
+ follow_include(char const *line)
330
+ {
331
+ Parser p;
332
+ DynamicBuffer buf;
333
+ Token tok;
334
+ int handled = 0;
335
+
336
+ CreateParser(line, &p);
337
+ DBufInit(&buf);
338
+
339
+ if (ParseToken(&p, &buf) == OK) {
340
+ FindToken(DBufValue(&buf), &tok);
341
+ if (tok.type == T_Include ||
342
+ tok.type == T_IncludeR ||
343
+ tok.type == T_IncludeSys) {
344
+ (void) DoInclude(&p, tok.type);
345
+ handled = 1;
346
+ }
347
+ }
348
+
349
+ DBufFree(&buf);
350
+ DestroyParser(&p);
351
+ return handled;
352
+ }
353
+
354
+ int
355
+ remrb_read_line(char const **text)
356
+ {
357
+ int r;
358
+
359
+ while (1) {
360
+ r = ReadLine();
361
+ if (r != OK) {
362
+ *text = NULL;
363
+ return r;
364
+ }
365
+ if (!follow_include(CurLine)) {
366
+ *text = CurLine;
367
+ return r;
368
+ }
369
+ }
370
+ }
371
+
372
+ int remrb_eof(void) { return E_EOF; }
373
+
374
+ /* ParseRem allocates: the tag buffer, the time zone, the INFO headers. */
375
+ void
376
+ remrb_free_trigger(Trigger *t)
377
+ {
378
+ FreeTrig(t);
379
+ }
@@ -0,0 +1,252 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "fileutils"
4
+
5
+ require_relative "library"
6
+
7
+ module Remind
8
+ # Builds Remind's sources, plus this gem's shim, into a shared library.
9
+ #
10
+ # Remind's own Makefile links two programs and no library, so this is the
11
+ # one step that has to be invented rather than reused. It is deliberately
12
+ # thin: `./configure` still decides the compiler, the flags, the feature
13
+ # macros and the libraries to link, and this class reads those decisions
14
+ # back out of the generated `src/Makefile` rather than making its own. What
15
+ # it adds is `-fPIC -shared`, one output file, and `ext/shim.c`.
16
+ #
17
+ # The output goes where `Remind::Library` looks -- lib/remind/ -- because
18
+ # that is where a precompiled gem carries it, and a checkout that puts it
19
+ # somewhere else is a checkout that tests a different arrangement than the
20
+ # one users get.
21
+ #
22
+ # `rem2ps.c` is left out: the PostScript formatter is a second program with
23
+ # a second `main`, and nothing in it is worth binding. `main.c` stays in --
24
+ # a `main` symbol in a shared library is harmless, and leaving it out would
25
+ # strand every symbol defined beside it.
26
+ class Builder
27
+ EXCLUDED_SOURCES = ["rem2ps.c"].freeze
28
+
29
+ SHARED_FLAGS = ["-fPIC", "-shared"].freeze
30
+
31
+ # Remind resolves `INCLUDE` against this at runtime; pointing it at the
32
+ # vendored tree means a reminder can include the holiday files that ship
33
+ # with the release the bindings bind.
34
+ SYSDIR_TEMPLATE = "-DSYSDIR=%s"
35
+
36
+ # Extra arguments for `./configure`.
37
+ #
38
+ # There is one job that needs them: building a library to put inside a
39
+ # precompiled gem. Remind's configure links readline when it finds it, and
40
+ # a gem whose library needs a readline the installing machine may not have
41
+ # is a gem that fails to load there. CI therefore builds with
42
+ #
43
+ # REMIND_RB_CONFIGURE_ARGS="ac_cv_lib_readline_readline=no
44
+ # ac_cv_header_readline_readline_h=no"
45
+ #
46
+ # which tells configure's own cache the probe already failed. Nothing in
47
+ # the bindings uses readline -- it is there for `remind`'s interactive
48
+ # prompt, and there is no prompt in a library.
49
+ CONFIGURE_ARGS = "REMIND_RB_CONFIGURE_ARGS"
50
+
51
+ attr_reader :source_root, :output, :io
52
+
53
+ def initialize(source_root: Library.source_root, output: Library.default_path, io: $stderr)
54
+ @source_root = source_root
55
+ @output = output
56
+ @io = io
57
+ end
58
+
59
+ # Answers the path it built.
60
+ def call
61
+ configure
62
+ generate_translatables
63
+ compile
64
+
65
+ output
66
+ end
67
+
68
+ private
69
+
70
+ def source_directory
71
+ File.join(source_root, "src")
72
+ end
73
+
74
+ def makefile
75
+ File.join(source_directory, "Makefile")
76
+ end
77
+
78
+ # `configure` writes src/Makefile, src/config.h and src/version.h. It is
79
+ # slow and idempotent, so it runs once and not again unless its output
80
+ # has gone.
81
+ def configure
82
+ if File.exist?(makefile)
83
+ io.puts("configure: already done")
84
+ else
85
+ run(configure_command, chdir: source_root, what: "configure")
86
+ end
87
+ end
88
+
89
+ def configure_command
90
+ ["./configure", ENV.fetch(CONFIGURE_ARGS, nil)].compact.join(" ")
91
+ end
92
+
93
+ # xlat.c is generated by a Makefile rule that greps every `tr()` string
94
+ # out of the sources. Nothing else defines `translatables`, so a library
95
+ # built without it fails to load rather than failing to build.
96
+ def generate_translatables
97
+ run("make xlat.c", chdir: source_directory, what: "make xlat.c")
98
+ end
99
+
100
+ def compile
101
+ FileUtils.mkdir_p(File.dirname(output))
102
+ run(compile_command, chdir: source_directory, what: "compile")
103
+ end
104
+
105
+ def compile_command
106
+ [
107
+ compiler,
108
+ *compile_flags,
109
+ *SHARED_FLAGS,
110
+ format(SYSDIR_TEMPLATE, File.join(source_root, "include")),
111
+ "-o",
112
+ output,
113
+ *sources,
114
+ *link_libraries,
115
+ ].join(" ")
116
+ end
117
+
118
+ # The shim is compiled from where it lives rather than copied in beside
119
+ # the Remind sources, so a build leaves nothing behind in the vendored
120
+ # tree.
121
+ def sources
122
+ remind_sources + [Library.shim]
123
+ end
124
+
125
+ def remind_sources
126
+ Dir.children(source_directory)
127
+ .select { |name| name.end_with?(".c") }
128
+ .reject { |name| EXCLUDED_SOURCES.include?(name) }
129
+ .sort
130
+ end
131
+
132
+ # --- what configure decided ------------------------------------------
133
+
134
+ def makefile_text
135
+ File.read(makefile)
136
+ end
137
+
138
+ # The recipe under the `.c.o` suffix rule: the exact command configure
139
+ # chose for compiling one source file.
140
+ def compile_recipe
141
+ recipe(/^\.c\.o:\n\t(.*)$/)
142
+ end
143
+
144
+ # The recipe that links the program, which is where the libraries are.
145
+ def link_recipe
146
+ recipe(/^remind: [^\n]*\n\t(.*)$/)
147
+ end
148
+
149
+ def recipe(pattern)
150
+ match = makefile_text.match(pattern)
151
+
152
+ if match
153
+ match[1].split
154
+ else
155
+ raise BuildError, "#{makefile} has no recipe matching #{pattern.inspect}"
156
+ end
157
+ end
158
+
159
+ def compiler
160
+ compile_recipe.first
161
+ end
162
+
163
+ # Everything the compile recipe passes except the parts that are about
164
+ # compiling one file into one object: `-c`, the source, and the make
165
+ # variables, which have no values outside make.
166
+ def compile_flags
167
+ compile_recipe.drop(1).reject { |flag| skip_flag?(flag) }
168
+ end
169
+
170
+ def skip_flag?(flag)
171
+ flag == "-c" || flag.include?("$") || flag.start_with?("-DSYSDIR")
172
+ end
173
+
174
+ def link_libraries
175
+ link_recipe.select { |flag| flag.start_with?("-l") }
176
+ end
177
+
178
+ def run(command, chdir:, what:)
179
+ io.puts("#{what}: #{command}")
180
+
181
+ if system(command, chdir: chdir)
182
+ command
183
+ else
184
+ raise BuildError, "#{what} failed in #{chdir}: #{command}"
185
+ end
186
+ end
187
+ end
188
+ end
189
+
190
+ __END__
191
+
192
+ require "stringio"
193
+
194
+ describe "Remind::Builder" do
195
+ # The build itself is what `rake library` does, and what every other spec
196
+ # here depends on having run. What is worth pinning is that the build takes
197
+ # its decisions from configure's output rather than inventing them.
198
+ builder = proc { Remind::Builder.new(io: StringIO.new) }
199
+
200
+ it "builds from the vendored sources" do
201
+ builder.().send(:source_directory).should == Remind::Library.source_directory
202
+ end
203
+
204
+ it "leaves the PostScript formatter out, and keeps main.c in" do
205
+ Remind::Builder::EXCLUDED_SOURCES.should.include "rem2ps.c"
206
+ Remind::Builder::EXCLUDED_SOURCES.should.not.include "main.c"
207
+ end
208
+
209
+ it "compiles the shim alongside them" do
210
+ builder.().send(:sources).last.should == Remind::Library.shim
211
+ end
212
+
213
+ it "takes the compiler from the generated Makefile" do
214
+ builder.().send(:compiler).should.not.be.empty
215
+ end
216
+
217
+ it "drops the flags that only make sense one file at a time" do
218
+ flags = builder.().send(:compile_flags)
219
+
220
+ flags.should.not.include "-c"
221
+ flags.any? { |flag| flag.include?("$") }.should.be.false
222
+ end
223
+
224
+ it "keeps the feature macros configure defined" do
225
+ builder.().send(:compile_flags).should.include "-DHAVE_CONFIG_H"
226
+ end
227
+
228
+ it "links what the program links" do
229
+ builder.().send(:link_libraries).all? { |flag| flag.start_with?("-l") }.should.be.true
230
+ end
231
+
232
+ it "passes on the configure arguments packaging needs" do
233
+ ENV[Remind::Builder::CONFIGURE_ARGS] = "ac_cv_lib_readline_readline=no"
234
+
235
+ builder.().send(:configure_command).should == "./configure ac_cv_lib_readline_readline=no"
236
+ ensure
237
+ ENV.delete(Remind::Builder::CONFIGURE_ARGS)
238
+ end
239
+
240
+ it "configures with nothing extra by default" do
241
+ builder.().send(:configure_command).should == "./configure"
242
+ end
243
+
244
+ it "builds one shared library out of all of it" do
245
+ command = builder.().send(:compile_command)
246
+
247
+ command.should.include "-fPIC"
248
+ command.should.include "-shared"
249
+ command.should.include "expr.c"
250
+ command.should.not.include "rem2ps.c"
251
+ end
252
+ end