tk_as_gem 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (345) hide show
  1. data/README +22 -0
  2. data/Rakefile +11 -0
  3. data/VERSION +1 -0
  4. data/ext/ChangeLog.tkextlib +935 -0
  5. data/ext/MANUAL_tcltklib.eng +469 -0
  6. data/ext/MANUAL_tcltklib.eucj +579 -0
  7. data/ext/README.1st +19 -0
  8. data/ext/README.ActiveTcl +49 -0
  9. data/ext/README.fork +34 -0
  10. data/ext/README.macosx-aqua +67 -0
  11. data/ext/README.tcltklib +85 -0
  12. data/ext/depend +2 -0
  13. data/ext/extconf.rb +451 -0
  14. data/ext/lib/README +30 -0
  15. data/ext/lib/multi-tk.rb +3491 -0
  16. data/ext/lib/remote-tk.rb +530 -0
  17. data/ext/lib/tcltk.rb +367 -0
  18. data/ext/lib/tk.rb +5584 -0
  19. data/ext/lib/tk/after.rb +6 -0
  20. data/ext/lib/tk/autoload.rb +414 -0
  21. data/ext/lib/tk/bgerror.rb +29 -0
  22. data/ext/lib/tk/bindtag.rb +138 -0
  23. data/ext/lib/tk/button.rb +30 -0
  24. data/ext/lib/tk/canvas.rb +789 -0
  25. data/ext/lib/tk/canvastag.rb +434 -0
  26. data/ext/lib/tk/checkbutton.rb +30 -0
  27. data/ext/lib/tk/clipboard.rb +75 -0
  28. data/ext/lib/tk/clock.rb +71 -0
  29. data/ext/lib/tk/composite.rb +458 -0
  30. data/ext/lib/tk/console.rb +52 -0
  31. data/ext/lib/tk/dialog.rb +326 -0
  32. data/ext/lib/tk/encodedstr.rb +187 -0
  33. data/ext/lib/tk/entry.rb +119 -0
  34. data/ext/lib/tk/event.rb +542 -0
  35. data/ext/lib/tk/font.rb +2344 -0
  36. data/ext/lib/tk/frame.rb +131 -0
  37. data/ext/lib/tk/grid.rb +279 -0
  38. data/ext/lib/tk/image.rb +275 -0
  39. data/ext/lib/tk/itemconfig.rb +1215 -0
  40. data/ext/lib/tk/itemfont.rb +327 -0
  41. data/ext/lib/tk/kinput.rb +71 -0
  42. data/ext/lib/tk/label.rb +21 -0
  43. data/ext/lib/tk/labelframe.rb +29 -0
  44. data/ext/lib/tk/listbox.rb +282 -0
  45. data/ext/lib/tk/macpkg.rb +78 -0
  46. data/ext/lib/tk/menu.rb +681 -0
  47. data/ext/lib/tk/menubar.rb +131 -0
  48. data/ext/lib/tk/menuspec.rb +275 -0
  49. data/ext/lib/tk/message.rb +22 -0
  50. data/ext/lib/tk/mngfocus.rb +33 -0
  51. data/ext/lib/tk/msgcat.rb +296 -0
  52. data/ext/lib/tk/namespace.rb +551 -0
  53. data/ext/lib/tk/optiondb.rb +377 -0
  54. data/ext/lib/tk/optionobj.rb +212 -0
  55. data/ext/lib/tk/pack.rb +107 -0
  56. data/ext/lib/tk/package.rb +143 -0
  57. data/ext/lib/tk/palette.rb +55 -0
  58. data/ext/lib/tk/panedwindow.rb +258 -0
  59. data/ext/lib/tk/place.rb +128 -0
  60. data/ext/lib/tk/radiobutton.rb +71 -0
  61. data/ext/lib/tk/root.rb +95 -0
  62. data/ext/lib/tk/scale.rb +111 -0
  63. data/ext/lib/tk/scrollable.rb +82 -0
  64. data/ext/lib/tk/scrollbar.rb +177 -0
  65. data/ext/lib/tk/scrollbox.rb +39 -0
  66. data/ext/lib/tk/selection.rb +86 -0
  67. data/ext/lib/tk/spinbox.rb +119 -0
  68. data/ext/lib/tk/tagfont.rb +43 -0
  69. data/ext/lib/tk/text.rb +1596 -0
  70. data/ext/lib/tk/textimage.rb +88 -0
  71. data/ext/lib/tk/textmark.rb +204 -0
  72. data/ext/lib/tk/texttag.rb +318 -0
  73. data/ext/lib/tk/textwindow.rb +154 -0
  74. data/ext/lib/tk/timer.rb +669 -0
  75. data/ext/lib/tk/toplevel.rb +262 -0
  76. data/ext/lib/tk/ttk_selector.rb +76 -0
  77. data/ext/lib/tk/txtwin_abst.rb +39 -0
  78. data/ext/lib/tk/validation.rb +397 -0
  79. data/ext/lib/tk/variable.rb +1765 -0
  80. data/ext/lib/tk/virtevent.rb +139 -0
  81. data/ext/lib/tk/winfo.rb +392 -0
  82. data/ext/lib/tk/winpkg.rb +153 -0
  83. data/ext/lib/tk/wm.rb +552 -0
  84. data/ext/lib/tk/xim.rb +122 -0
  85. data/ext/lib/tkafter.rb +4 -0
  86. data/ext/lib/tkbgerror.rb +4 -0
  87. data/ext/lib/tkcanvas.rb +4 -0
  88. data/ext/lib/tkclass.rb +47 -0
  89. data/ext/lib/tkconsole.rb +4 -0
  90. data/ext/lib/tkdialog.rb +4 -0
  91. data/ext/lib/tkentry.rb +4 -0
  92. data/ext/lib/tkextlib/ICONS.rb +13 -0
  93. data/ext/lib/tkextlib/ICONS/icons.rb +129 -0
  94. data/ext/lib/tkextlib/ICONS/setup.rb +8 -0
  95. data/ext/lib/tkextlib/SUPPORT_STATUS +196 -0
  96. data/ext/lib/tkextlib/blt.rb +187 -0
  97. data/ext/lib/tkextlib/blt/barchart.rb +79 -0
  98. data/ext/lib/tkextlib/blt/bitmap.rb +112 -0
  99. data/ext/lib/tkextlib/blt/busy.rb +82 -0
  100. data/ext/lib/tkextlib/blt/component.rb +2145 -0
  101. data/ext/lib/tkextlib/blt/container.rb +28 -0
  102. data/ext/lib/tkextlib/blt/cutbuffer.rb +23 -0
  103. data/ext/lib/tkextlib/blt/dragdrop.rb +268 -0
  104. data/ext/lib/tkextlib/blt/eps.rb +32 -0
  105. data/ext/lib/tkextlib/blt/graph.rb +67 -0
  106. data/ext/lib/tkextlib/blt/htext.rb +111 -0
  107. data/ext/lib/tkextlib/blt/setup.rb +8 -0
  108. data/ext/lib/tkextlib/blt/spline.rb +23 -0
  109. data/ext/lib/tkextlib/blt/stripchart.rb +74 -0
  110. data/ext/lib/tkextlib/blt/table.rb +399 -0
  111. data/ext/lib/tkextlib/blt/tabnotebook.rb +110 -0
  112. data/ext/lib/tkextlib/blt/tabset.rb +500 -0
  113. data/ext/lib/tkextlib/blt/ted.rb +65 -0
  114. data/ext/lib/tkextlib/blt/tile.rb +21 -0
  115. data/ext/lib/tkextlib/blt/tile/button.rb +16 -0
  116. data/ext/lib/tkextlib/blt/tile/checkbutton.rb +17 -0
  117. data/ext/lib/tkextlib/blt/tile/frame.rb +16 -0
  118. data/ext/lib/tkextlib/blt/tile/label.rb +16 -0
  119. data/ext/lib/tkextlib/blt/tile/radiobutton.rb +17 -0
  120. data/ext/lib/tkextlib/blt/tile/scrollbar.rb +16 -0
  121. data/ext/lib/tkextlib/blt/tile/toplevel.rb +16 -0
  122. data/ext/lib/tkextlib/blt/tree.rb +1058 -0
  123. data/ext/lib/tkextlib/blt/treeview.rb +1272 -0
  124. data/ext/lib/tkextlib/blt/unix_dnd.rb +135 -0
  125. data/ext/lib/tkextlib/blt/vector.rb +256 -0
  126. data/ext/lib/tkextlib/blt/watch.rb +175 -0
  127. data/ext/lib/tkextlib/blt/win_printer.rb +61 -0
  128. data/ext/lib/tkextlib/blt/winop.rb +107 -0
  129. data/ext/lib/tkextlib/bwidget.rb +151 -0
  130. data/ext/lib/tkextlib/bwidget/arrowbutton.rb +21 -0
  131. data/ext/lib/tkextlib/bwidget/bitmap.rb +21 -0
  132. data/ext/lib/tkextlib/bwidget/button.rb +31 -0
  133. data/ext/lib/tkextlib/bwidget/buttonbox.rb +90 -0
  134. data/ext/lib/tkextlib/bwidget/combobox.rb +51 -0
  135. data/ext/lib/tkextlib/bwidget/dialog.rb +182 -0
  136. data/ext/lib/tkextlib/bwidget/dragsite.rb +31 -0
  137. data/ext/lib/tkextlib/bwidget/dropsite.rb +39 -0
  138. data/ext/lib/tkextlib/bwidget/dynamichelp.rb +63 -0
  139. data/ext/lib/tkextlib/bwidget/entry.rb +43 -0
  140. data/ext/lib/tkextlib/bwidget/label.rb +41 -0
  141. data/ext/lib/tkextlib/bwidget/labelentry.rb +80 -0
  142. data/ext/lib/tkextlib/bwidget/labelframe.rb +52 -0
  143. data/ext/lib/tkextlib/bwidget/listbox.rb +358 -0
  144. data/ext/lib/tkextlib/bwidget/mainframe.rb +128 -0
  145. data/ext/lib/tkextlib/bwidget/messagedlg.rb +192 -0
  146. data/ext/lib/tkextlib/bwidget/notebook.rb +166 -0
  147. data/ext/lib/tkextlib/bwidget/pagesmanager.rb +73 -0
  148. data/ext/lib/tkextlib/bwidget/panedwindow.rb +37 -0
  149. data/ext/lib/tkextlib/bwidget/panelframe.rb +57 -0
  150. data/ext/lib/tkextlib/bwidget/passwddlg.rb +44 -0
  151. data/ext/lib/tkextlib/bwidget/progressbar.rb +20 -0
  152. data/ext/lib/tkextlib/bwidget/progressdlg.rb +58 -0
  153. data/ext/lib/tkextlib/bwidget/scrollableframe.rb +40 -0
  154. data/ext/lib/tkextlib/bwidget/scrolledwindow.rb +38 -0
  155. data/ext/lib/tkextlib/bwidget/scrollview.rb +25 -0
  156. data/ext/lib/tkextlib/bwidget/selectcolor.rb +73 -0
  157. data/ext/lib/tkextlib/bwidget/selectfont.rb +86 -0
  158. data/ext/lib/tkextlib/bwidget/separator.rb +20 -0
  159. data/ext/lib/tkextlib/bwidget/setup.rb +8 -0
  160. data/ext/lib/tkextlib/bwidget/spinbox.rb +98 -0
  161. data/ext/lib/tkextlib/bwidget/statusbar.rb +52 -0
  162. data/ext/lib/tkextlib/bwidget/titleframe.rb +33 -0
  163. data/ext/lib/tkextlib/bwidget/tree.rb +453 -0
  164. data/ext/lib/tkextlib/bwidget/widget.rb +129 -0
  165. data/ext/lib/tkextlib/itcl.rb +13 -0
  166. data/ext/lib/tkextlib/itcl/incr_tcl.rb +178 -0
  167. data/ext/lib/tkextlib/itcl/setup.rb +13 -0
  168. data/ext/lib/tkextlib/itk.rb +13 -0
  169. data/ext/lib/tkextlib/itk/incr_tk.rb +446 -0
  170. data/ext/lib/tkextlib/itk/setup.rb +13 -0
  171. data/ext/lib/tkextlib/iwidgets.rb +94 -0
  172. data/ext/lib/tkextlib/iwidgets/buttonbox.rb +120 -0
  173. data/ext/lib/tkextlib/iwidgets/calendar.rb +125 -0
  174. data/ext/lib/tkextlib/iwidgets/canvasprintbox.rb +53 -0
  175. data/ext/lib/tkextlib/iwidgets/canvasprintdialog.rb +38 -0
  176. data/ext/lib/tkextlib/iwidgets/checkbox.rb +129 -0
  177. data/ext/lib/tkextlib/iwidgets/combobox.rb +104 -0
  178. data/ext/lib/tkextlib/iwidgets/dateentry.rb +20 -0
  179. data/ext/lib/tkextlib/iwidgets/datefield.rb +58 -0
  180. data/ext/lib/tkextlib/iwidgets/dialog.rb +20 -0
  181. data/ext/lib/tkextlib/iwidgets/dialogshell.rb +120 -0
  182. data/ext/lib/tkextlib/iwidgets/disjointlistbox.rb +50 -0
  183. data/ext/lib/tkextlib/iwidgets/entryfield.rb +185 -0
  184. data/ext/lib/tkextlib/iwidgets/extbutton.rb +40 -0
  185. data/ext/lib/tkextlib/iwidgets/extfileselectionbox.rb +46 -0
  186. data/ext/lib/tkextlib/iwidgets/extfileselectiondialog.rb +33 -0
  187. data/ext/lib/tkextlib/iwidgets/feedback.rb +35 -0
  188. data/ext/lib/tkextlib/iwidgets/fileselectionbox.rb +46 -0
  189. data/ext/lib/tkextlib/iwidgets/fileselectiondialog.rb +33 -0
  190. data/ext/lib/tkextlib/iwidgets/finddialog.rb +42 -0
  191. data/ext/lib/tkextlib/iwidgets/hierarchy.rb +365 -0
  192. data/ext/lib/tkextlib/iwidgets/hyperhelp.rb +50 -0
  193. data/ext/lib/tkextlib/iwidgets/labeledframe.rb +39 -0
  194. data/ext/lib/tkextlib/iwidgets/labeledwidget.rb +45 -0
  195. data/ext/lib/tkextlib/iwidgets/mainwindow.rb +67 -0
  196. data/ext/lib/tkextlib/iwidgets/menubar.rb +211 -0
  197. data/ext/lib/tkextlib/iwidgets/messagebox.rb +92 -0
  198. data/ext/lib/tkextlib/iwidgets/messagedialog.rb +20 -0
  199. data/ext/lib/tkextlib/iwidgets/notebook.rb +174 -0
  200. data/ext/lib/tkextlib/iwidgets/optionmenu.rb +92 -0
  201. data/ext/lib/tkextlib/iwidgets/panedwindow.rb +133 -0
  202. data/ext/lib/tkextlib/iwidgets/promptdialog.rb +131 -0
  203. data/ext/lib/tkextlib/iwidgets/pushbutton.rb +35 -0
  204. data/ext/lib/tkextlib/iwidgets/radiobox.rb +120 -0
  205. data/ext/lib/tkextlib/iwidgets/scopedobject.rb +24 -0
  206. data/ext/lib/tkextlib/iwidgets/scrolledcanvas.rb +353 -0
  207. data/ext/lib/tkextlib/iwidgets/scrolledframe.rb +59 -0
  208. data/ext/lib/tkextlib/iwidgets/scrolledhtml.rb +58 -0
  209. data/ext/lib/tkextlib/iwidgets/scrolledlistbox.rb +207 -0
  210. data/ext/lib/tkextlib/iwidgets/scrolledtext.rb +564 -0
  211. data/ext/lib/tkextlib/iwidgets/scrolledwidget.rb +20 -0
  212. data/ext/lib/tkextlib/iwidgets/selectionbox.rb +102 -0
  213. data/ext/lib/tkextlib/iwidgets/selectiondialog.rb +92 -0
  214. data/ext/lib/tkextlib/iwidgets/setup.rb +8 -0
  215. data/ext/lib/tkextlib/iwidgets/shell.rb +38 -0
  216. data/ext/lib/tkextlib/iwidgets/spindate.rb +48 -0
  217. data/ext/lib/tkextlib/iwidgets/spinint.rb +30 -0
  218. data/ext/lib/tkextlib/iwidgets/spinner.rb +169 -0
  219. data/ext/lib/tkextlib/iwidgets/spintime.rb +48 -0
  220. data/ext/lib/tkextlib/iwidgets/tabnotebook.rb +180 -0
  221. data/ext/lib/tkextlib/iwidgets/tabset.rb +144 -0
  222. data/ext/lib/tkextlib/iwidgets/timeentry.rb +25 -0
  223. data/ext/lib/tkextlib/iwidgets/timefield.rb +58 -0
  224. data/ext/lib/tkextlib/iwidgets/toolbar.rb +112 -0
  225. data/ext/lib/tkextlib/iwidgets/watch.rb +56 -0
  226. data/ext/lib/tkextlib/pkg_checker.rb +184 -0
  227. data/ext/lib/tkextlib/setup.rb +8 -0
  228. data/ext/lib/tkextlib/tcllib.rb +90 -0
  229. data/ext/lib/tkextlib/tcllib/README +135 -0
  230. data/ext/lib/tkextlib/tcllib/autoscroll.rb +158 -0
  231. data/ext/lib/tkextlib/tcllib/ctext.rb +160 -0
  232. data/ext/lib/tkextlib/tcllib/cursor.rb +97 -0
  233. data/ext/lib/tkextlib/tcllib/datefield.rb +57 -0
  234. data/ext/lib/tkextlib/tcllib/dialog.rb +84 -0
  235. data/ext/lib/tkextlib/tcllib/getstring.rb +134 -0
  236. data/ext/lib/tkextlib/tcllib/history.rb +73 -0
  237. data/ext/lib/tkextlib/tcllib/ico.rb +116 -0
  238. data/ext/lib/tkextlib/tcllib/ip_entry.rb +66 -0
  239. data/ext/lib/tkextlib/tcllib/panelframe.rb +72 -0
  240. data/ext/lib/tkextlib/tcllib/plotchart.rb +886 -0
  241. data/ext/lib/tkextlib/tcllib/ruler.rb +65 -0
  242. data/ext/lib/tkextlib/tcllib/screenruler.rb +68 -0
  243. data/ext/lib/tkextlib/tcllib/scrollwin.rb +61 -0
  244. data/ext/lib/tkextlib/tcllib/setup.rb +8 -0
  245. data/ext/lib/tkextlib/tcllib/style.rb +61 -0
  246. data/ext/lib/tkextlib/tcllib/superframe.rb +51 -0
  247. data/ext/lib/tkextlib/tcllib/swaplist.rb +150 -0
  248. data/ext/lib/tkextlib/tcllib/tablelist.rb +27 -0
  249. data/ext/lib/tkextlib/tcllib/tablelist_core.rb +782 -0
  250. data/ext/lib/tkextlib/tcllib/tablelist_tile.rb +25 -0
  251. data/ext/lib/tkextlib/tcllib/tkpiechart.rb +314 -0
  252. data/ext/lib/tkextlib/tcllib/tooltip.rb +95 -0
  253. data/ext/lib/tkextlib/tcllib/widget.rb +48 -0
  254. data/ext/lib/tkextlib/tclx.rb +13 -0
  255. data/ext/lib/tkextlib/tclx/setup.rb +8 -0
  256. data/ext/lib/tkextlib/tclx/tclx.rb +74 -0
  257. data/ext/lib/tkextlib/tile.rb +419 -0
  258. data/ext/lib/tkextlib/tile/dialog.rb +96 -0
  259. data/ext/lib/tkextlib/tile/setup.rb +8 -0
  260. data/ext/lib/tkextlib/tile/sizegrip.rb +29 -0
  261. data/ext/lib/tkextlib/tile/style.rb +316 -0
  262. data/ext/lib/tkextlib/tile/tbutton.rb +33 -0
  263. data/ext/lib/tkextlib/tile/tcheckbutton.rb +36 -0
  264. data/ext/lib/tkextlib/tile/tcombobox.rb +54 -0
  265. data/ext/lib/tkextlib/tile/tentry.rb +48 -0
  266. data/ext/lib/tkextlib/tile/tframe.rb +33 -0
  267. data/ext/lib/tkextlib/tile/tlabel.rb +33 -0
  268. data/ext/lib/tkextlib/tile/tlabelframe.rb +36 -0
  269. data/ext/lib/tkextlib/tile/tmenubutton.rb +36 -0
  270. data/ext/lib/tkextlib/tile/tnotebook.rb +139 -0
  271. data/ext/lib/tkextlib/tile/tpaned.rb +231 -0
  272. data/ext/lib/tkextlib/tile/tprogressbar.rb +56 -0
  273. data/ext/lib/tkextlib/tile/tradiobutton.rb +36 -0
  274. data/ext/lib/tkextlib/tile/treeview.rb +1239 -0
  275. data/ext/lib/tkextlib/tile/tscale.rb +53 -0
  276. data/ext/lib/tkextlib/tile/tscrollbar.rb +54 -0
  277. data/ext/lib/tkextlib/tile/tseparator.rb +33 -0
  278. data/ext/lib/tkextlib/tile/tsquare.rb +30 -0
  279. data/ext/lib/tkextlib/tkDND.rb +18 -0
  280. data/ext/lib/tkextlib/tkDND/setup.rb +8 -0
  281. data/ext/lib/tkextlib/tkDND/shape.rb +125 -0
  282. data/ext/lib/tkextlib/tkDND/tkdnd.rb +182 -0
  283. data/ext/lib/tkextlib/tkHTML.rb +13 -0
  284. data/ext/lib/tkextlib/tkHTML/htmlwidget.rb +453 -0
  285. data/ext/lib/tkextlib/tkHTML/setup.rb +8 -0
  286. data/ext/lib/tkextlib/tkimg.rb +36 -0
  287. data/ext/lib/tkextlib/tkimg/README +26 -0
  288. data/ext/lib/tkextlib/tkimg/bmp.rb +33 -0
  289. data/ext/lib/tkextlib/tkimg/gif.rb +33 -0
  290. data/ext/lib/tkextlib/tkimg/ico.rb +33 -0
  291. data/ext/lib/tkextlib/tkimg/jpeg.rb +33 -0
  292. data/ext/lib/tkextlib/tkimg/pcx.rb +33 -0
  293. data/ext/lib/tkextlib/tkimg/pixmap.rb +44 -0
  294. data/ext/lib/tkextlib/tkimg/png.rb +33 -0
  295. data/ext/lib/tkextlib/tkimg/ppm.rb +33 -0
  296. data/ext/lib/tkextlib/tkimg/ps.rb +33 -0
  297. data/ext/lib/tkextlib/tkimg/setup.rb +8 -0
  298. data/ext/lib/tkextlib/tkimg/sgi.rb +33 -0
  299. data/ext/lib/tkextlib/tkimg/sun.rb +33 -0
  300. data/ext/lib/tkextlib/tkimg/tga.rb +33 -0
  301. data/ext/lib/tkextlib/tkimg/tiff.rb +33 -0
  302. data/ext/lib/tkextlib/tkimg/window.rb +33 -0
  303. data/ext/lib/tkextlib/tkimg/xbm.rb +33 -0
  304. data/ext/lib/tkextlib/tkimg/xpm.rb +33 -0
  305. data/ext/lib/tkextlib/tktable.rb +14 -0
  306. data/ext/lib/tkextlib/tktable/setup.rb +8 -0
  307. data/ext/lib/tkextlib/tktable/tktable.rb +957 -0
  308. data/ext/lib/tkextlib/tktrans.rb +14 -0
  309. data/ext/lib/tkextlib/tktrans/setup.rb +8 -0
  310. data/ext/lib/tkextlib/tktrans/tktrans.rb +64 -0
  311. data/ext/lib/tkextlib/treectrl.rb +13 -0
  312. data/ext/lib/tkextlib/treectrl/setup.rb +8 -0
  313. data/ext/lib/tkextlib/treectrl/tktreectrl.rb +2461 -0
  314. data/ext/lib/tkextlib/trofs.rb +13 -0
  315. data/ext/lib/tkextlib/trofs/setup.rb +8 -0
  316. data/ext/lib/tkextlib/trofs/trofs.rb +51 -0
  317. data/ext/lib/tkextlib/version.rb +6 -0
  318. data/ext/lib/tkextlib/vu.rb +48 -0
  319. data/ext/lib/tkextlib/vu/bargraph.rb +61 -0
  320. data/ext/lib/tkextlib/vu/charts.rb +53 -0
  321. data/ext/lib/tkextlib/vu/dial.rb +102 -0
  322. data/ext/lib/tkextlib/vu/pie.rb +282 -0
  323. data/ext/lib/tkextlib/vu/setup.rb +8 -0
  324. data/ext/lib/tkextlib/vu/spinbox.rb +22 -0
  325. data/ext/lib/tkextlib/winico.rb +14 -0
  326. data/ext/lib/tkextlib/winico/setup.rb +8 -0
  327. data/ext/lib/tkextlib/winico/winico.rb +224 -0
  328. data/ext/lib/tkfont.rb +4 -0
  329. data/ext/lib/tkmacpkg.rb +4 -0
  330. data/ext/lib/tkmenubar.rb +4 -0
  331. data/ext/lib/tkmngfocus.rb +4 -0
  332. data/ext/lib/tkpalette.rb +4 -0
  333. data/ext/lib/tkscrollbox.rb +4 -0
  334. data/ext/lib/tktext.rb +4 -0
  335. data/ext/lib/tkvirtevent.rb +4 -0
  336. data/ext/lib/tkwinpkg.rb +4 -0
  337. data/ext/old-README.tcltklib.eucj +159 -0
  338. data/ext/stubs.c +531 -0
  339. data/ext/stubs.h +33 -0
  340. data/ext/tcltklib.c +10155 -0
  341. data/ext/tkutil/.cvsignore +3 -0
  342. data/ext/tkutil/depend +1 -0
  343. data/ext/tkutil/extconf.rb +14 -0
  344. data/ext/tkutil/tkutil.c +1789 -0
  345. metadata +418 -0
data/ext/README.1st ADDED
@@ -0,0 +1,19 @@
1
+ If you want to use Ruby/Tk (tk.rb and so on), you must have tcltklib.so
2
+ which is working correctly. When you have some troubles on compiling,
3
+ please read README.tcltklib and README.ActiveTcl.
4
+ Even if there is a tcltklib.so on your Ruby library directry, it will not
5
+ work without Tcl/Tk libraries (e.g. libtcl8.4.so) on your environment.
6
+ You must also check that your Tcl/Tk is installed properly.
7
+
8
+ --------------------------------------------
9
+ ( the following is written in EUC-JP )
10
+
11
+ Ruby/Tk (tk.rb �ʤ�) ��Ȥ��������ˤϡ�tcltklib.so ��������ư���Ƥ���
12
+ ����Фʤ�ޤ��󡥥���ѥ�����˲������꤬���������ϡ�README.tcltklib
13
+ �� README.ActiveTcl �򸫤Ƥ���������
14
+ ���Ȥ� Ruby �Υ饤�֥��ǥ��쥯�ȥ�� tcltklib.so ��¸�ߤ��Ƥ����Ȥ���
15
+ �⡤�¹ԴĶ��� Tcl/Tk �饤�֥�� (libtcl8.4.so �ʤ�) ���ʤ���е�ǽ����
16
+ ����Tcl/Tk �����������󥹥ȡ��뤵��Ƥ��뤫������å����Ƥ���������
17
+
18
+ ==========================================================
19
+ Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
@@ -0,0 +1,49 @@
1
+ ActiveTcl is ActiveState's quality-assured distribution of Tcl.
2
+
3
+ # see <http://www.activestate.com/Products/ActiveTcl/>
4
+ # <http://www.tcl.tk/>
5
+
6
+ If you want to use ActiveTcl binary package as the Tcl/Tk libraries,
7
+ please use the following configure options.
8
+
9
+ --with-tcl-dir=<ActiveTcl_root>
10
+ --with-tk-dir=<ActiveTcl_root>
11
+
12
+ And use the followings if you need.
13
+
14
+ --with-tcllib=<libname>
15
+ --with-tklib=<libname>
16
+ --enable-tcltk-stubs
17
+
18
+ For example, when you install ActiveTcl-8.4.x to '/usr/local/ActiveTcl',
19
+
20
+ configure --with-tcl-dir=/usr/local/ActiveTcl/ \
21
+ --with-tk-dir=/usr/local/ActiveTcl/ \
22
+ --with-tcllib=tclstub8.4 \
23
+ --with-tklib=tkstub8.4 \
24
+ --enable-tcltk-stubs
25
+
26
+ It depends on your environment that you have to add the directory of
27
+ ActiveTcl's libraries to your library path when execute Ruby/Tk.
28
+ One of the way is to add entries to TCLLIBPATH environment variable,
29
+ and one of the others add to LD_LIBRARY_PATH environment variable
30
+
31
+ Probably, using TCLLIBPATH is better. The value is appended at the
32
+ head of Tcl's 'auto_path' variable. You can see the value of the
33
+ variable by using 'Tk::AUTO_PATH.value' or 'Tk::AUTO_PATH.list'.
34
+
35
+ For example, on Linux, one of the ways is to use LD_LIBRARY_PATH
36
+ environment variable.
37
+ -------------------------------------------------------------------------
38
+ [bash]$ LD_LIBRARY_PATH=/usr/local/ActiveTcl/lib:$LD_LIBRARY_PATH \
39
+ ruby your-Ruby/Tk-script
40
+
41
+ [bash]$ LD_LIBRARY_PATH=/usr/local/ActiveTcl/lib:$LD_LIBRARY_PATH irb
42
+ -------------------------------------------------------------------------
43
+ Based on it, the Tcl interpreter changes auto_path variable's value.
44
+
45
+ Then, you'll be able to use Tcl/Tk extension libraries included in the
46
+ ActiveTcl package (e.g. call TkPackage.require('BWidget'), and then,
47
+ use functions/widgets of BWidget extention).
48
+
49
+ Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
data/ext/README.fork ADDED
@@ -0,0 +1,34 @@
1
+ Ruby/Tk does NOT support forking the process on which Tk interpreter
2
+ is running (unless NEVER control Tk interpreter under the forked child
3
+ process). In the library 'tk.rb', a Tk interpreter is initialized.
4
+ Therefore, if you want running Tk under a child process, please call
5
+ "require 'tk'" in the child process.
6
+
7
+ # If do fork and exec(<new Ruby/Tk>) on the child process, you can
8
+ # control Ruby/Tk interpreter on the child process by 'send' command
9
+ # of Tcl/Tk. About this, please see Tk.appsend and Tk.rb_appsend, or
10
+ # 'remote-tk.rb' and the sample 'sample/remote-ip_sample.rb'.
11
+
12
+ For example, the following sample1 will NOT work, and sample2 will
13
+ work properly.
14
+
15
+ ---<sample1: NOT work>---------------------------------------
16
+ require 'tk' ## init Tk interpreter under parent process
17
+
18
+ exit! if fork ## exit parent process
19
+
20
+ ## child process
21
+ TkButton.new(:text=>'QUIT', :command=>proc{exit}).pack
22
+ Tk.mainloop
23
+ -------------------------------------------------------------
24
+
25
+ ---<sample2: will work>--------------------------------------
26
+ exit! if fork ## exit main process
27
+
28
+ ## child process
29
+ require 'tk' ## init Tk interpreter under child process
30
+ TkButton.new(:text=>'QUIT', :command=>proc{exit}).pack
31
+ Tk.mainloop
32
+ -------------------------------------------------------------
33
+
34
+ 2004/05/22 Hidetoshi NAGAI
@@ -0,0 +1,67 @@
1
+
2
+ *** for MacOS X Aqua (Tcl/Tk Aqua) users ***
3
+
4
+ First of all, please read README.tcltklib to use Tcl/Tk Aqua Framework.
5
+
6
+ With Tcl/Tk Aqua libraries, current tcltklib somtimes freezes when
7
+ using Aqua specific dialogs (e.g. Tk.messageBox).
8
+ This is a known bug of Ruby-1.8.4 release.
9
+
10
+ When you meet the trouble on your GUI, you'll be able to avoid the trouble
11
+ by Tcl/Tk's traditional dialogs.
12
+ If you want to do that, please call some of the following bits of script
13
+ after "reqruie 'tk'".
14
+
15
+ =================================================================
16
+ # use a traditional dialog for Tk.chooseColor()
17
+ Tk.ip_eval(<<'EOS')
18
+ proc ::tk_chooseColor {args} {
19
+ return [eval tk::dialog::color:: $args]
20
+ }
21
+ EOS
22
+
23
+ # use a traditional dialog for Tk.getOpenFile() and Tk.getMultipleOpenFile()
24
+ Tk.ip_eval(<<'EOS')
25
+ proc ::tk_getOpenFile {args} {
26
+ if {$::tk_strictMotif} {
27
+ return [eval tk::MotifFDialog open $args]
28
+ } else {
29
+ return [eval ::tk::dialog::file:: open $args]
30
+ }
31
+ }
32
+ EOS
33
+
34
+ # use a traditional dialog for Tk.getSaveFile() and Tk.getMultipleSaveFile()
35
+ Tk.ip_eval(<<'EOS')
36
+ proc ::tk_getSaveFile {args} {
37
+ if {$::tk_strictMotif} {
38
+ return [eval tk::MotifFDialog save $args]
39
+ } else {
40
+ return [eval ::tk::dialog::file:: save $args]
41
+ }
42
+ }
43
+ EOS
44
+
45
+ # use a traditional dialog for Tk.messageBox()
46
+ Tk.ip_eval(<<'EOS')
47
+ proc ::tk_messageBox {args} {
48
+ return [eval tk::MessageBox $args]
49
+ }
50
+ EOS
51
+
52
+ # use a traditional dialog for Tk.chooseDirectory()
53
+ Tk.ip_eval(<<'EOS')
54
+ proc ::tk_chooseDirectory {args} {
55
+ return [eval ::tk::dialog::file::chooseDir:: $args]
56
+ }
57
+ EOS
58
+ =================================================================
59
+
60
+ Each of them replaces the platform specific dialog command to the
61
+ traditional one.
62
+
63
+ If you use some MultiTkIp objects, probably, you'll have to call the
64
+ bits of script for each MultiTkIp object.
65
+
66
+ --
67
+ Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
@@ -0,0 +1,85 @@
1
+ To compile 'tcltklib', you must have Tcl/Tk libraries on your environment.
2
+ Although 'extconf.rb' script searches Tcl/Tk libraries and header files,
3
+ sometimes fails to find them. And then, 'tcltklib' cannot be compiled. If
4
+ Tcl/Tk libraries or header files are installed but are not found, you can
5
+ give the information by arguments of the 'configure' script. Please give
6
+ some or all of the following options.
7
+
8
+ --with-tcltkversion=<version>
9
+ force version of Tcl/Tk libaray
10
+ (e.g. libtcl8.4g.so ==> --with-tcltkversion=8.4g)
11
+
12
+ --with-tcllib=<libname> (e.g. libtcl8.4.so ==> --with-tcllib=tcl8.4)
13
+ --with-tklib=<libname> (e.g. libtk8.4.so ==> --with-tklib=tk8.4)
14
+
15
+ --enable-tcltk-stubs (if you force to enable stubs)
16
+
17
+ --with-tcl-dir=<path>
18
+ equal to "--with-tcl-include=<path>/include --with-tcl-lib=<path>/lib"
19
+
20
+ --with-tk-dir=<path>
21
+ equal to "--with-tk-include=<path>/include --with-tk-lib=<path>/lib"
22
+
23
+ --with-tcl-include=<dir> the directry contains 'tcl.h'
24
+ --with-tk-include=<dir> the directry contains 'tk.h'
25
+
26
+ --with-tcl-lib=<dir> the directry contains 'libtcl<version>.so'
27
+ --with-tk-lib=<dir> the directry contains 'libtk<version>.so'
28
+
29
+ --enable-mac-tcltk-framework (MacOS X) use Tcl/Tk framework
30
+ (Obsolete. Please use '--enable-tcltk-framework'.)
31
+
32
+ --enable-tcltk-framework use Tcl/Tk framework
33
+
34
+ --with-tcltk-framework=<dir> the directory contains Tcl/Tk framework;
35
+ "<dir>/Tcl.framework" and "<dir>/Tk.framework".
36
+ When this option is given, it is assumed that
37
+ --enable-tcltk-framework option is given also.
38
+
39
+ --with-tcl-framework-header=<dir>
40
+ Tcl framework headers directory
41
+ (e.g. "/Library/Frameworks/Tcl.framework/Headers")
42
+
43
+ --with-tk-framework-header=<dir>
44
+ Tk framework headers directory
45
+ (e.g. "/Library/Frameworks/Tk.framework/Headers")
46
+
47
+
48
+ --with-X11 / --without-X11 use / not use the X Window System
49
+
50
+ --with-X11-dir=<path>
51
+ equal to "--with-X11-include=<path>/include --with-X11-lib=<path>/lib"
52
+
53
+ --with-X11-include=<dir> the directry contais X11 header files
54
+ --with-X11-lib=<dir> the directry contais X11 libraries
55
+
56
+
57
+ If you forgot to give the options when do 'configure' on toplevel
58
+ directry of Ruby sources, please try something like as the followings.
59
+
60
+ $ cd ext/tcltklib
61
+ $ rm Makefile
62
+ $ CONFIGURE_ARGS='--with-tcl-include=/usr/local/include/tcl8.4/ --with-tcllib=tcl8.4 --with-tklib=tk8.4' ruby extconf.rb
63
+
64
+
65
+ *** ATTENTION ***
66
+ When your Tcl/Tk libraries are compiled with "pthread support",
67
+ Ruby/Tk may cause "Hang-up" or "Segmentation Fault" frequently.
68
+ If you have such a trouble, please try to use the '--enable-pthread'
69
+ option of the 'configure' command and re-compile Ruby sources.
70
+ It may help you to avoid this trouble. The following configure
71
+ options may be useful.
72
+
73
+ --enable-tcl-thread/--disable-tcl-thread
74
+ --with-tclConfig-file=<path of 'tclConfig.sh'>
75
+
76
+ It is not need that 'tclConfig.sh' is a normal Tcl/Tk's tclConfig.sh.
77
+ But the file is expected to include the line "TCL_THREADS=0" or "...=1".
78
+ When no "TCL_THREADS=?" line, if Tcl version is 7.x or 8.0 which is
79
+ given by "TCL_MAJOR_VERSION=?" line and "TCL_MINOR_VERSION=?" line,
80
+ then --disable-tcl-thread is expected. Else, ignore the 'tclConfig.sh'.
81
+ If --enable-tcl-thread or --disable-tcl-thread option is given, then
82
+ --with-tclConfig-file option is ignored.
83
+
84
+ ==========================================================
85
+ Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)
data/ext/depend ADDED
@@ -0,0 +1,2 @@
1
+ tcltklib.o: tcltklib.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h stubs.h
2
+ stubs.o: stubs.c $(hdrdir)/ruby.h $(topdir)/config.h $(hdrdir)/defines.h stubs.h
data/ext/extconf.rb ADDED
@@ -0,0 +1,451 @@
1
+ # extconf.rb for tcltklib
2
+
3
+ require 'mkmf'
4
+
5
+ is_win32 = (/mswin|mingw|cygwin|bccwin/ =~ RUBY_PLATFORM)
6
+ #is_macosx = (/darwin/ =~ RUBY_PLATFORM)
7
+
8
+ have_func("ruby_native_thread_p", "ruby.h")
9
+ have_func("rb_errinfo", "ruby.h")
10
+ have_func("rb_safe_level", "ruby.h")
11
+ have_struct_member("struct RArray", "ptr", "ruby.h")
12
+ have_struct_member("struct RArray", "len", "ruby.h")
13
+
14
+ def find_framework(tcl_hdr, tk_hdr)
15
+ if framework_dir = with_config("tcltk-framework")
16
+ paths = [framework_dir]
17
+ else
18
+ unless tcl_hdr || tk_hdr ||
19
+ enable_config("tcltk-framework", false) ||
20
+ enable_config("mac-tcltk-framework", false)
21
+ return false
22
+ end
23
+ paths = ["/Library/Frameworks", "/System/Library/Frameworks"]
24
+ end
25
+
26
+ checking_for('Tcl/Tk Framework') {
27
+ paths.find{|dir|
28
+ dir.strip!
29
+ dir.chomp!('/')
30
+ (tcl_hdr || FileTest.directory?(dir + "/Tcl.framework/") ) &&
31
+ (tk_hdr || FileTest.directory?(dir + "/Tk.framework/") )
32
+ }
33
+ }
34
+ end
35
+
36
+ tcl_framework_header = with_config("tcl-framework-header")
37
+ tk_framework_header = with_config("tk-framework-header")
38
+
39
+ tcltk_framework = find_framework(tcl_framework_header, tk_framework_header)
40
+
41
+ unless is_win32
42
+ have_library("nsl", "t_open")
43
+ have_library("socket", "socket")
44
+ have_library("dl", "dlopen")
45
+ have_library("m", "log")
46
+ end
47
+
48
+ tk_idir, tk_ldir = dir_config("tk")
49
+ tcl_idir, tcl_ldir = dir_config("tcl")
50
+ x11_idir, x11_ldir = dir_config("X11")
51
+
52
+ tk_ldir2 = with_config("tk-lib")
53
+ tcl_ldir2 = with_config("tcl-lib")
54
+ x11_ldir2 = with_config("X11-lib")
55
+
56
+ tk_ldir_list = [tk_ldir2, tk_ldir]
57
+ tcl_ldir_list = [tcl_ldir2, tcl_ldir]
58
+
59
+ tklib = with_config("tklib")
60
+ tcllib = with_config("tcllib")
61
+ stubs = enable_config("tcltk_stubs") || with_config("tcltk_stubs")
62
+
63
+ tcltk_version = with_config("tcltkversion")
64
+
65
+ use_X = with_config("X11", (! is_win32))
66
+
67
+ def parse_tclConfig(file)
68
+ # check tclConfig.sh/tkConfig.sh
69
+ tbl = {}
70
+ IO.foreach(file){|line|
71
+ line.strip!
72
+ next if line !~ /^([^\#=][^=]*)=(['"]|)(.*)\2$/
73
+ key, val = $1, $3
74
+ tbl[key] = val.gsub(/\$\{([^}]+)\}/){|s| tbl[$1]} rescue nil
75
+ }
76
+ tbl
77
+ end
78
+
79
+ def check_tcltk_version(version)
80
+ return [nil, nil] unless version
81
+
82
+ version = version.strip
83
+
84
+ tclver = version.dup
85
+ tkver = version.dup
86
+
87
+ major = dot = minor = dot = plvl = ext = nil
88
+
89
+ if version =~ /^(\d)(\.?)(\d)(\.?)(\d*)(.*)$/
90
+ major = $1; minor_dot = $2; minor = $3; plvl_dot = $4; plvl = $5; ext = $6
91
+ dot = ! minor_dot.empty?
92
+ if plvl_dot.empty? && ! plvl.empty?
93
+ minor << plvl
94
+ end
95
+ elsif version =~ /^(\d)(\.?)(\d?)(.*)$/
96
+ major = $1; minor_dot = $2; minor = $3; ext = $4
97
+ dot = ! minor_dot.empty?
98
+ else # unknown -> believe user
99
+ return [tclver, tkver]
100
+ end
101
+
102
+ # check Tcl7.6 / Tk4.2 ?
103
+ if major == "7" # Tcl7.6 ( not support Tclversion < 7.6 )
104
+ # Tk4.2
105
+ tkver = "4" + ((dot)? ".": "") + ((minor.empty)? "": "2") + ext
106
+ elsif major == "4" # Tk4.2 ( not support Tkversion < 4.2 )
107
+ # Tcl7.6
108
+ tclver = "7" + ((dot)? ".": "") + ((minor.empty)? "": "6") + ext
109
+ end
110
+
111
+ [tclver, tkver]
112
+ end
113
+
114
+ def find_tcl(tcllib, stubs, version, *opt_paths)
115
+ default_paths = ["/usr/local/lib", "/usr/pkg/lib", "/usr/lib"]
116
+ default_paths << "/Tcl/lib" # default for ActiveTcl
117
+
118
+ if (paths = opt_paths.compact).empty?
119
+ paths = default_paths
120
+ end
121
+
122
+ if stubs
123
+ func = "Tcl_InitStubs"
124
+ lib = "tclstub"
125
+ else
126
+ func = "Tcl_FindExecutable"
127
+ lib = "tcl"
128
+ end
129
+
130
+ if version && ! version.empty?
131
+ versions = [version]
132
+ else
133
+ versions = %w[8.4 8.7 8.6 8.5 8.3 8.2 8.1 8.0 7.6]
134
+ end
135
+
136
+ if tcllib
137
+ st = find_library(tcllib, func, *paths)
138
+ else
139
+ st = versions.find { |ver|
140
+ find_library("#{lib}#{ver}", func, *paths) or
141
+ find_library("#{lib}#{ver.delete('.')}", func, *paths) or
142
+ find_library("#{lib}#{ver}g", func, *paths) or
143
+ find_library("#{lib}#{ver.delete('.')}g", func, *paths) or
144
+ find_library("tcl#{ver}", func, *paths) or
145
+ find_library("tcl#{ver.delete('.')}", func, *paths) or
146
+ find_library("tcl#{ver}g", func, *paths) or
147
+ find_library("tcl#{ver.delete('.')}g", func, *paths)
148
+ } || (!version && find_library(lib, func, *paths))
149
+ end
150
+
151
+ unless st
152
+ puts("Warning:: cannot find Tcl library. tcltklib will not be compiled (tcltklib is disabled on your Ruby == Ruby/Tk will not work). Please check configure options.")
153
+ end
154
+ require 'display'
155
+ display st
156
+ st
157
+ end
158
+
159
+ def find_tk(tklib, stubs, version, *opt_paths)
160
+ default_paths = ["/usr/local/lib", "/usr/pkg/lib", "/usr/lib"]
161
+ default_paths << "/Tcl/lib" # default for ActiveTcl
162
+
163
+ if (paths = opt_paths.compact).empty?
164
+ paths = default_paths
165
+ end
166
+
167
+ if stubs
168
+ func = "Tk_InitStubs"
169
+ lib = "tkstub"
170
+ else
171
+ func = "Tk_Init"
172
+ lib = "tk"
173
+ end
174
+
175
+ if version && ! version.empty?
176
+ versions = [version]
177
+ else
178
+ versions = %w[8.4 8.7 8.6 8.5 8.4 8.3 8.2 8.1 8.0 4.2]
179
+ end
180
+
181
+ if tklib
182
+ st = find_library(tklib, func, *paths)
183
+ else
184
+ st = versions.find { |ver|
185
+ find_library("#{lib}#{ver}", func, *paths) or
186
+ find_library("#{lib}#{ver.delete('.')}", func, *paths) or
187
+ find_library("#{lib}#{ver}g", func, *paths) or
188
+ find_library("#{lib}#{ver.delete('.')}g", func, *paths) or
189
+ find_library("tk#{ver}", func, *paths) or
190
+ find_library("tk#{ver.delete('.')}", func, *paths) or
191
+ find_library("tk#{ver}g", func, *paths) or
192
+ find_library("tk#{ver.delete('.')}g", func, *paths)
193
+ } || (!version && find_library(lib, func, *paths))
194
+ end
195
+
196
+ unless st
197
+ puts("Warning:: cannot find Tk library. tcltklib will not be compiled (tcltklib is disabled on your Ruby == Ruby/Tk will not work). Please check configure options.")
198
+ end
199
+ st
200
+ end
201
+
202
+ def find_tcltk_header(tclver, tkver)
203
+ base_dir = ['/usr/local/include', '/usr/pkg/include', '/usr/include']
204
+ base_dir << '/Tcl/include' # default for ActiveTcl
205
+
206
+ unless have_tcl_h = have_header('tcl.h')
207
+ if tclver && ! tclver.empty?
208
+ versions = [tclver]
209
+ else
210
+ versions = %w[8.4 8.7 8.6 8.5 8.3 8.2 8.1 8.0 7.6]
211
+ end
212
+ paths = base_dir.dup
213
+ versions.each{|ver| paths.concat(base_dir.map{|dir| dir + '/tcl' + ver})}
214
+ have_tcl_h = find_header('tcl.h', *paths)
215
+ end
216
+
217
+ unless have_tk_h = have_header("tk.h")
218
+ if tkver && ! tkver.empty?
219
+ versions = [tkver]
220
+ else
221
+ versions = %w[8.4 8.7 8.6 8.5 8.4 8.3 8.2 8.1 8.0 4.2]
222
+ end
223
+ paths = base_dir.dup
224
+ versions.each{|ver| paths.concat(base_dir.map{|dir| dir + '/tk' + ver})}
225
+ have_tk_h = find_header('tk.h', *paths)
226
+ end
227
+
228
+ have_tcl_h && have_tk_h
229
+ end
230
+
231
+ def find_X11(*opt_paths)
232
+ default_paths =
233
+ [ "/usr/X11/lib", "/usr/lib/X11", "/usr/X11R6/lib", "/usr/openwin/lib" ]
234
+ paths = opt_paths.compact.concat(default_paths)
235
+ st = find_library("X11", "XOpenDisplay", *paths)
236
+ unless st
237
+ puts("Warning:: cannot find X11 library. tcltklib will not be compiled (tcltklib is disabled on your Ruby == Ruby/Tk will not work). Please check configure options. If your Tcl/Tk don't require X11, please try --without-X11.")
238
+ end
239
+ st
240
+ end
241
+
242
+ def pthread_check()
243
+ tcl_major_ver = nil
244
+ tcl_minor_ver = nil
245
+
246
+ # Is tcl-thread given by user ?
247
+ case enable_config("tcl-thread")
248
+ when true
249
+ tcl_enable_thread = true
250
+ when false
251
+ tcl_enable_thread = false
252
+ else
253
+ tcl_enable_thread = nil
254
+ end
255
+
256
+ if (tclConfig = with_config("tclConfig-file"))
257
+ if tcl_enable_thread == true
258
+ puts("Warning: --with-tclConfig-file option is ignored, because --enable-tcl-thread option is given.")
259
+ elsif tcl_enable_thread == false
260
+ puts("Warning: --with-tclConfig-file option is ignored, because --disable-tcl-thread option is given.")
261
+ else
262
+ # tcl-thread is unknown and tclConfig.sh is given
263
+ begin
264
+ tbl = parse_tclConfig(tclConfig)
265
+ if tbl['TCL_THREADS']
266
+ tcl_enable_thread = (tbl['TCL_THREADS'] == "1")
267
+ else
268
+ tcl_major_ver = tbl['TCL_MAJOR_VERSION'].to_i
269
+ tcl_minor_ver = tbl['TCL_MINOR_VERSION'].to_i
270
+ if tcl_major_ver < 8 || (tcl_major_ver == 8 && tcl_minor_ver == 0)
271
+ tcl_enable_thread = false
272
+ end
273
+ end
274
+
275
+ if tcl_enable_thread == nil
276
+ # cannot find definition
277
+ if tcl_major_ver
278
+ puts("Warning: '#{tclConfig}' doesn't include TCL_THREADS definition.")
279
+ else
280
+ puts("Warning: '#{tclConfig}' may not be a tclConfig file.")
281
+ end
282
+ tclConfig = false
283
+ end
284
+ rescue Exception
285
+ puts("Warning: fail to read '#{tclConfig}'!! --> ignore the file")
286
+ tclConfig = false
287
+ end
288
+ end
289
+ end
290
+
291
+ if tcl_enable_thread == nil && !tclConfig
292
+ # tcl-thread is unknown and tclConfig is unavailable
293
+ begin
294
+ try_run_available = try_run("int main() { exit(0); }")
295
+ rescue Exception
296
+ # cannot try_run. Is CROSS-COMPILE environment?
297
+ puts(%Q'\
298
+ *****************************************************************************
299
+ **
300
+ ** PTHREAD SUPPORT CHECK WARNING:
301
+ **
302
+ ** We cannot check the consistency of pthread support between Ruby
303
+ ** and the Tcl/Tk library in your environment (are you perhaps
304
+ ** cross-compiling?). If pthread support for these 2 packages is
305
+ ** inconsistent you may find you get errors when running Ruby/Tk
306
+ ** (e.g. hangs or segmentation faults). We strongly recommend
307
+ ** you to check the consistency manually.
308
+ **
309
+ *****************************************************************************
310
+ ')
311
+ return true
312
+ end
313
+ end
314
+
315
+ if tcl_enable_thread == nil
316
+ # tcl-thread is unknown
317
+ if try_run(<<EOF)
318
+ #include <tcl.h>
319
+ int main() {
320
+ Tcl_Interp *ip;
321
+ ip = Tcl_CreateInterp();
322
+ exit((Tcl_Eval(ip, "set tcl_platform(threaded)") == TCL_OK)? 0: 1);
323
+ }
324
+ EOF
325
+ tcl_enable_thread = true
326
+ elsif try_run(<<EOF)
327
+ #include <tcl.h>
328
+ static Tcl_ThreadDataKey dataKey;
329
+ int main() { exit((Tcl_GetThreadData(&dataKey, 1) == dataKey)? 1: 0); }
330
+ EOF
331
+ tcl_enable_thread = true
332
+ else
333
+ tcl_enable_thread = false
334
+ end
335
+ end
336
+
337
+ # check pthread mode
338
+ if (macro_defined?('HAVE_NATIVETHREAD', '#include "ruby.h"'))
339
+ # ruby -> enable
340
+ unless tcl_enable_thread
341
+ # ruby -> enable && tcl -> disable
342
+ puts(%Q'\
343
+ *****************************************************************************
344
+ **
345
+ ** PTHREAD SUPPORT MODE WARNING:
346
+ **
347
+ ** Ruby is compiled with --enable-pthread, but your Tcl/Tk library
348
+ ** seems to be compiled without pthread support. Although you can
349
+ ** create the tcltklib library, this combination may cause errors
350
+ ** (e.g. hangs or segmentation faults). If you have no reason to
351
+ ** keep the current pthread support status, we recommend you reconfigure
352
+ ** and recompile the libraries so that both or neither support pthreads.
353
+ **
354
+ ** If you want change the status of pthread support, please recompile
355
+ ** Ruby without "--enable-pthread" configure option or recompile Tcl/Tk
356
+ ** with "--enable-threads" configure option (if your Tcl/Tk is later
357
+ ** than or equal to Tcl/Tk 8.1).
358
+ **
359
+ *****************************************************************************
360
+ ')
361
+ end
362
+
363
+ # ruby -> enable && tcl -> enable/disable
364
+ if tcl_enable_thread
365
+ $CPPFLAGS += ' -DWITH_TCL_ENABLE_THREAD=1'
366
+ else
367
+ $CPPFLAGS += ' -DWITH_TCL_ENABLE_THREAD=0'
368
+ end
369
+
370
+ return true
371
+
372
+ else
373
+ # ruby -> disable
374
+ if tcl_enable_thread
375
+ # ruby -> disable && tcl -> enable
376
+ puts(%Q'\
377
+ *****************************************************************************
378
+ **
379
+ ** PTHREAD SUPPORT MODE ERROR:
380
+ **
381
+ ** Ruby is not compiled with --enable-pthread, but your Tcl/Tk
382
+ ** library seems to be compiled with pthread support. This
383
+ ** combination may cause frequent hang or segmentation fault
384
+ ** errors when Ruby/Tk is working. We recommend that you NEVER
385
+ ** create the library with such a combination of pthread support.
386
+ **
387
+ ** Please recompile Ruby with the "--enable-pthread" configure option
388
+ ** or recompile Tcl/Tk with the "--disable-threads" configure option.
389
+ **
390
+ *****************************************************************************
391
+ ')
392
+ $CPPFLAGS += ' -DWITH_TCL_ENABLE_THREAD=1'
393
+ return false
394
+ else
395
+ # ruby -> disable && tcl -> disable
396
+ $CPPFLAGS += ' -DWITH_TCL_ENABLE_THREAD=0'
397
+ return true
398
+ end
399
+ end
400
+ end
401
+
402
+ tclver, tkver = check_tcltk_version(tcltk_version)
403
+
404
+ if ( tcltk_framework ||
405
+ ( find_tcltk_header(tclver, tkver) &&
406
+ ( !use_X || find_X11(x11_ldir2, x11_ldir) ) &&
407
+ find_tcl(tcllib, stubs, tclver, *tcl_ldir_list) &&
408
+ find_tk(tklib, stubs, tkver, *tk_ldir_list) ) )
409
+ $CPPFLAGS += ' -DUSE_TCL_STUBS -DUSE_TK_STUBS' if stubs
410
+ $CPPFLAGS += ' -D_WIN32' if /cygwin/ =~ RUBY_PLATFORM
411
+
412
+ if tcltk_framework
413
+ if tcl_framework_header
414
+ $CPPFLAGS += " -I#{tcl_framework_header}"
415
+ else
416
+ $CPPFLAGS += " -I#{tcltk_framework}/Tcl.framework/Headers"
417
+ end
418
+
419
+ if tk_framework_header
420
+ $CPPFLAGS += " -I#{tk_framework_header}"
421
+ else
422
+ $CPPFLAGS += " -I#{tcltk_framework}/Tk.framework/Headers"
423
+ end
424
+
425
+ $LDFLAGS += ' -framework Tk -framework Tcl'
426
+ end
427
+
428
+ if stubs or pthread_check
429
+ # create Makefile
430
+
431
+ # for SUPPORT_STATUS
432
+ $INSTALLFILES ||= []
433
+ $INSTALLFILES << ["lib/tkextlib/SUPPORT_STATUS", "$(RUBYLIBDIR)", "lib"]
434
+
435
+ have_func("rb_hash_lookup", "ruby.h")
436
+
437
+ # create
438
+ $defs << %[-DRUBY_VERSION=\\"#{RUBY_VERSION}\\"]
439
+ $defs << %[-DRUBY_RELEASE_DATE=\\"#{RUBY_RELEASE_DATE}\\"]
440
+ create_makefile("tcltklib")
441
+
442
+ # ughly.
443
+ if RUBY_PLATFORM =~ /mingw/
444
+ old = File.read('Makefile')
445
+ old.gsub!('/Tcl', File.expand_path('/Tcl'))
446
+ File.open('Makefile', 'w') do |f| f.write old; end
447
+ end
448
+
449
+ end
450
+
451
+ end