tk 0.1.0

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 (1060) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +6 -0
  4. data/BSDL +22 -0
  5. data/ChangeLog.tkextlib +949 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +56 -0
  8. data/MANUAL_tcltklib.eng +467 -0
  9. data/MANUAL_tcltklib.ja +578 -0
  10. data/README.1st +19 -0
  11. data/README.ActiveTcl +62 -0
  12. data/README.fork +34 -0
  13. data/README.macosx-aqua +67 -0
  14. data/README.md +33 -0
  15. data/README.tcltklib +152 -0
  16. data/Rakefile +16 -0
  17. data/bin/console +14 -0
  18. data/bin/setup +8 -0
  19. data/ext/tk/config_list.in +41 -0
  20. data/ext/tk/extconf.rb +2098 -0
  21. data/ext/tk/old-extconf.rb +441 -0
  22. data/ext/tk/stubs.c +592 -0
  23. data/ext/tk/stubs.h +33 -0
  24. data/ext/tk/tcltklib.c +11066 -0
  25. data/ext/tk/tkutil/extconf.rb +14 -0
  26. data/ext/tk/tkutil/tkutil.c +1900 -0
  27. data/lib/README +30 -0
  28. data/lib/multi-tk.rb +3743 -0
  29. data/lib/remote-tk.rb +527 -0
  30. data/lib/tcltk.rb +369 -0
  31. data/lib/tk.rb +5758 -0
  32. data/lib/tk/after.rb +7 -0
  33. data/lib/tk/autoload.rb +763 -0
  34. data/lib/tk/bgerror.rb +30 -0
  35. data/lib/tk/bindtag.rb +139 -0
  36. data/lib/tk/busy.rb +119 -0
  37. data/lib/tk/button.rb +32 -0
  38. data/lib/tk/canvas.rb +847 -0
  39. data/lib/tk/canvastag.rb +460 -0
  40. data/lib/tk/checkbutton.rb +33 -0
  41. data/lib/tk/clipboard.rb +76 -0
  42. data/lib/tk/clock.rb +72 -0
  43. data/lib/tk/composite.rb +485 -0
  44. data/lib/tk/console.rb +53 -0
  45. data/lib/tk/dialog.rb +327 -0
  46. data/lib/tk/encodedstr.rb +188 -0
  47. data/lib/tk/entry.rb +121 -0
  48. data/lib/tk/event.rb +563 -0
  49. data/lib/tk/font.rb +2352 -0
  50. data/lib/tk/fontchooser.rb +181 -0
  51. data/lib/tk/frame.rb +133 -0
  52. data/lib/tk/grid.rb +280 -0
  53. data/lib/tk/image.rb +396 -0
  54. data/lib/tk/itemconfig.rb +1222 -0
  55. data/lib/tk/itemfont.rb +328 -0
  56. data/lib/tk/kinput.rb +72 -0
  57. data/lib/tk/label.rb +23 -0
  58. data/lib/tk/labelframe.rb +32 -0
  59. data/lib/tk/listbox.rb +285 -0
  60. data/lib/tk/macpkg.rb +81 -0
  61. data/lib/tk/menu.rb +719 -0
  62. data/lib/tk/menubar.rb +138 -0
  63. data/lib/tk/menuspec.rb +457 -0
  64. data/lib/tk/message.rb +25 -0
  65. data/lib/tk/mngfocus.rb +34 -0
  66. data/lib/tk/msgcat.rb +300 -0
  67. data/lib/tk/namespace.rb +547 -0
  68. data/lib/tk/optiondb.rb +372 -0
  69. data/lib/tk/optionobj.rb +213 -0
  70. data/lib/tk/pack.rb +108 -0
  71. data/lib/tk/package.rb +144 -0
  72. data/lib/tk/palette.rb +56 -0
  73. data/lib/tk/panedwindow.rb +261 -0
  74. data/lib/tk/place.rb +129 -0
  75. data/lib/tk/radiobutton.rb +74 -0
  76. data/lib/tk/root.rb +96 -0
  77. data/lib/tk/scale.rb +113 -0
  78. data/lib/tk/scrollable.rb +83 -0
  79. data/lib/tk/scrollbar.rb +184 -0
  80. data/lib/tk/scrollbox.rb +40 -0
  81. data/lib/tk/selection.rb +87 -0
  82. data/lib/tk/spinbox.rb +145 -0
  83. data/lib/tk/tagfont.rb +44 -0
  84. data/lib/tk/text.rb +1605 -0
  85. data/lib/tk/textimage.rb +89 -0
  86. data/lib/tk/textmark.rb +205 -0
  87. data/lib/tk/texttag.rb +322 -0
  88. data/lib/tk/textwindow.rb +155 -0
  89. data/lib/tk/timer.rb +666 -0
  90. data/lib/tk/tk_mac.rb +159 -0
  91. data/lib/tk/toplevel.rb +265 -0
  92. data/lib/tk/ttk_selector.rb +99 -0
  93. data/lib/tk/txtwin_abst.rb +40 -0
  94. data/lib/tk/validation.rb +398 -0
  95. data/lib/tk/variable.rb +1797 -0
  96. data/lib/tk/virtevent.rb +140 -0
  97. data/lib/tk/winfo.rb +393 -0
  98. data/lib/tk/winpkg.rb +157 -0
  99. data/lib/tk/wm.rb +553 -0
  100. data/lib/tk/xim.rb +123 -0
  101. data/lib/tkafter.rb +5 -0
  102. data/lib/tkbgerror.rb +5 -0
  103. data/lib/tkcanvas.rb +5 -0
  104. data/lib/tkclass.rb +48 -0
  105. data/lib/tkconsole.rb +5 -0
  106. data/lib/tkdialog.rb +5 -0
  107. data/lib/tkentry.rb +5 -0
  108. data/lib/tkextlib/ICONS.rb +14 -0
  109. data/lib/tkextlib/ICONS/icons.rb +130 -0
  110. data/lib/tkextlib/ICONS/setup.rb +9 -0
  111. data/lib/tkextlib/SUPPORT_STATUS +193 -0
  112. data/lib/tkextlib/blt.rb +190 -0
  113. data/lib/tkextlib/blt/barchart.rb +80 -0
  114. data/lib/tkextlib/blt/bitmap.rb +113 -0
  115. data/lib/tkextlib/blt/busy.rb +84 -0
  116. data/lib/tkextlib/blt/component.rb +2219 -0
  117. data/lib/tkextlib/blt/container.rb +29 -0
  118. data/lib/tkextlib/blt/cutbuffer.rb +24 -0
  119. data/lib/tkextlib/blt/dragdrop.rb +270 -0
  120. data/lib/tkextlib/blt/eps.rb +33 -0
  121. data/lib/tkextlib/blt/graph.rb +68 -0
  122. data/lib/tkextlib/blt/htext.rb +113 -0
  123. data/lib/tkextlib/blt/setup.rb +9 -0
  124. data/lib/tkextlib/blt/spline.rb +24 -0
  125. data/lib/tkextlib/blt/stripchart.rb +75 -0
  126. data/lib/tkextlib/blt/table.rb +413 -0
  127. data/lib/tkextlib/blt/tabnotebook.rb +111 -0
  128. data/lib/tkextlib/blt/tabset.rb +505 -0
  129. data/lib/tkextlib/blt/ted.rb +69 -0
  130. data/lib/tkextlib/blt/tile.rb +26 -0
  131. data/lib/tkextlib/blt/tile/button.rb +17 -0
  132. data/lib/tkextlib/blt/tile/checkbutton.rb +18 -0
  133. data/lib/tkextlib/blt/tile/frame.rb +17 -0
  134. data/lib/tkextlib/blt/tile/label.rb +17 -0
  135. data/lib/tkextlib/blt/tile/radiobutton.rb +18 -0
  136. data/lib/tkextlib/blt/tile/scrollbar.rb +17 -0
  137. data/lib/tkextlib/blt/tile/toplevel.rb +17 -0
  138. data/lib/tkextlib/blt/tree.rb +1059 -0
  139. data/lib/tkextlib/blt/treeview.rb +1288 -0
  140. data/lib/tkextlib/blt/unix_dnd.rb +142 -0
  141. data/lib/tkextlib/blt/vector.rb +257 -0
  142. data/lib/tkextlib/blt/watch.rb +176 -0
  143. data/lib/tkextlib/blt/win_printer.rb +62 -0
  144. data/lib/tkextlib/blt/winop.rb +108 -0
  145. data/lib/tkextlib/bwidget.rb +154 -0
  146. data/lib/tkextlib/bwidget/arrowbutton.rb +22 -0
  147. data/lib/tkextlib/bwidget/bitmap.rb +22 -0
  148. data/lib/tkextlib/bwidget/button.rb +32 -0
  149. data/lib/tkextlib/bwidget/buttonbox.rb +91 -0
  150. data/lib/tkextlib/bwidget/combobox.rb +63 -0
  151. data/lib/tkextlib/bwidget/dialog.rb +195 -0
  152. data/lib/tkextlib/bwidget/dragsite.rb +32 -0
  153. data/lib/tkextlib/bwidget/dropsite.rb +40 -0
  154. data/lib/tkextlib/bwidget/dynamichelp.rb +64 -0
  155. data/lib/tkextlib/bwidget/entry.rb +44 -0
  156. data/lib/tkextlib/bwidget/label.rb +42 -0
  157. data/lib/tkextlib/bwidget/labelentry.rb +81 -0
  158. data/lib/tkextlib/bwidget/labelframe.rb +53 -0
  159. data/lib/tkextlib/bwidget/listbox.rb +362 -0
  160. data/lib/tkextlib/bwidget/mainframe.rb +133 -0
  161. data/lib/tkextlib/bwidget/messagedlg.rb +193 -0
  162. data/lib/tkextlib/bwidget/notebook.rb +167 -0
  163. data/lib/tkextlib/bwidget/pagesmanager.rb +74 -0
  164. data/lib/tkextlib/bwidget/panedwindow.rb +43 -0
  165. data/lib/tkextlib/bwidget/panelframe.rb +68 -0
  166. data/lib/tkextlib/bwidget/passwddlg.rb +45 -0
  167. data/lib/tkextlib/bwidget/progressbar.rb +21 -0
  168. data/lib/tkextlib/bwidget/progressdlg.rb +59 -0
  169. data/lib/tkextlib/bwidget/scrollableframe.rb +41 -0
  170. data/lib/tkextlib/bwidget/scrolledwindow.rb +49 -0
  171. data/lib/tkextlib/bwidget/scrollview.rb +26 -0
  172. data/lib/tkextlib/bwidget/selectcolor.rb +74 -0
  173. data/lib/tkextlib/bwidget/selectfont.rb +92 -0
  174. data/lib/tkextlib/bwidget/separator.rb +21 -0
  175. data/lib/tkextlib/bwidget/setup.rb +9 -0
  176. data/lib/tkextlib/bwidget/spinbox.rb +99 -0
  177. data/lib/tkextlib/bwidget/statusbar.rb +63 -0
  178. data/lib/tkextlib/bwidget/titleframe.rb +34 -0
  179. data/lib/tkextlib/bwidget/tree.rb +501 -0
  180. data/lib/tkextlib/bwidget/widget.rb +130 -0
  181. data/lib/tkextlib/itcl.rb +14 -0
  182. data/lib/tkextlib/itcl/incr_tcl.rb +179 -0
  183. data/lib/tkextlib/itcl/setup.rb +14 -0
  184. data/lib/tkextlib/itk.rb +14 -0
  185. data/lib/tkextlib/itk/incr_tk.rb +447 -0
  186. data/lib/tkextlib/itk/setup.rb +14 -0
  187. data/lib/tkextlib/iwidgets.rb +95 -0
  188. data/lib/tkextlib/iwidgets/buttonbox.rb +122 -0
  189. data/lib/tkextlib/iwidgets/calendar.rb +126 -0
  190. data/lib/tkextlib/iwidgets/canvasprintbox.rb +54 -0
  191. data/lib/tkextlib/iwidgets/canvasprintdialog.rb +39 -0
  192. data/lib/tkextlib/iwidgets/checkbox.rb +131 -0
  193. data/lib/tkextlib/iwidgets/combobox.rb +105 -0
  194. data/lib/tkextlib/iwidgets/dateentry.rb +21 -0
  195. data/lib/tkextlib/iwidgets/datefield.rb +59 -0
  196. data/lib/tkextlib/iwidgets/dialog.rb +21 -0
  197. data/lib/tkextlib/iwidgets/dialogshell.rb +122 -0
  198. data/lib/tkextlib/iwidgets/disjointlistbox.rb +51 -0
  199. data/lib/tkextlib/iwidgets/entryfield.rb +186 -0
  200. data/lib/tkextlib/iwidgets/extbutton.rb +41 -0
  201. data/lib/tkextlib/iwidgets/extfileselectionbox.rb +47 -0
  202. data/lib/tkextlib/iwidgets/extfileselectiondialog.rb +34 -0
  203. data/lib/tkextlib/iwidgets/feedback.rb +36 -0
  204. data/lib/tkextlib/iwidgets/fileselectionbox.rb +47 -0
  205. data/lib/tkextlib/iwidgets/fileselectiondialog.rb +34 -0
  206. data/lib/tkextlib/iwidgets/finddialog.rb +43 -0
  207. data/lib/tkextlib/iwidgets/hierarchy.rb +366 -0
  208. data/lib/tkextlib/iwidgets/hyperhelp.rb +51 -0
  209. data/lib/tkextlib/iwidgets/labeledframe.rb +40 -0
  210. data/lib/tkextlib/iwidgets/labeledwidget.rb +46 -0
  211. data/lib/tkextlib/iwidgets/mainwindow.rb +68 -0
  212. data/lib/tkextlib/iwidgets/menubar.rb +213 -0
  213. data/lib/tkextlib/iwidgets/messagebox.rb +94 -0
  214. data/lib/tkextlib/iwidgets/messagedialog.rb +21 -0
  215. data/lib/tkextlib/iwidgets/notebook.rb +176 -0
  216. data/lib/tkextlib/iwidgets/optionmenu.rb +93 -0
  217. data/lib/tkextlib/iwidgets/panedwindow.rb +135 -0
  218. data/lib/tkextlib/iwidgets/promptdialog.rb +132 -0
  219. data/lib/tkextlib/iwidgets/pushbutton.rb +36 -0
  220. data/lib/tkextlib/iwidgets/radiobox.rb +122 -0
  221. data/lib/tkextlib/iwidgets/scopedobject.rb +25 -0
  222. data/lib/tkextlib/iwidgets/scrolledcanvas.rb +354 -0
  223. data/lib/tkextlib/iwidgets/scrolledframe.rb +60 -0
  224. data/lib/tkextlib/iwidgets/scrolledhtml.rb +59 -0
  225. data/lib/tkextlib/iwidgets/scrolledlistbox.rb +208 -0
  226. data/lib/tkextlib/iwidgets/scrolledtext.rb +569 -0
  227. data/lib/tkextlib/iwidgets/scrolledwidget.rb +21 -0
  228. data/lib/tkextlib/iwidgets/selectionbox.rb +103 -0
  229. data/lib/tkextlib/iwidgets/selectiondialog.rb +93 -0
  230. data/lib/tkextlib/iwidgets/setup.rb +9 -0
  231. data/lib/tkextlib/iwidgets/shell.rb +39 -0
  232. data/lib/tkextlib/iwidgets/spindate.rb +49 -0
  233. data/lib/tkextlib/iwidgets/spinint.rb +31 -0
  234. data/lib/tkextlib/iwidgets/spinner.rb +170 -0
  235. data/lib/tkextlib/iwidgets/spintime.rb +49 -0
  236. data/lib/tkextlib/iwidgets/tabnotebook.rb +182 -0
  237. data/lib/tkextlib/iwidgets/tabset.rb +146 -0
  238. data/lib/tkextlib/iwidgets/timeentry.rb +26 -0
  239. data/lib/tkextlib/iwidgets/timefield.rb +59 -0
  240. data/lib/tkextlib/iwidgets/toolbar.rb +113 -0
  241. data/lib/tkextlib/iwidgets/watch.rb +57 -0
  242. data/lib/tkextlib/pkg_checker.rb +185 -0
  243. data/lib/tkextlib/setup.rb +9 -0
  244. data/lib/tkextlib/tcllib.rb +106 -0
  245. data/lib/tkextlib/tcllib/README +135 -0
  246. data/lib/tkextlib/tcllib/autoscroll.rb +159 -0
  247. data/lib/tkextlib/tcllib/calendar.rb +56 -0
  248. data/lib/tkextlib/tcllib/canvas_sqmap.rb +37 -0
  249. data/lib/tkextlib/tcllib/canvas_zoom.rb +22 -0
  250. data/lib/tkextlib/tcllib/chatwidget.rb +152 -0
  251. data/lib/tkextlib/tcllib/crosshair.rb +118 -0
  252. data/lib/tkextlib/tcllib/ctext.rb +161 -0
  253. data/lib/tkextlib/tcllib/cursor.rb +98 -0
  254. data/lib/tkextlib/tcllib/dateentry.rb +63 -0
  255. data/lib/tkextlib/tcllib/datefield.rb +58 -0
  256. data/lib/tkextlib/tcllib/diagrams.rb +225 -0
  257. data/lib/tkextlib/tcllib/dialog.rb +85 -0
  258. data/lib/tkextlib/tcllib/getstring.rb +135 -0
  259. data/lib/tkextlib/tcllib/history.rb +74 -0
  260. data/lib/tkextlib/tcllib/ico.rb +147 -0
  261. data/lib/tkextlib/tcllib/ip_entry.rb +76 -0
  262. data/lib/tkextlib/tcllib/khim.rb +69 -0
  263. data/lib/tkextlib/tcllib/menuentry.rb +48 -0
  264. data/lib/tkextlib/tcllib/ntext.rb +147 -0
  265. data/lib/tkextlib/tcllib/panelframe.rb +79 -0
  266. data/lib/tkextlib/tcllib/plotchart.rb +1405 -0
  267. data/lib/tkextlib/tcllib/ruler.rb +66 -0
  268. data/lib/tkextlib/tcllib/screenruler.rb +69 -0
  269. data/lib/tkextlib/tcllib/scrolledwindow.rb +58 -0
  270. data/lib/tkextlib/tcllib/scrollwin.rb +62 -0
  271. data/lib/tkextlib/tcllib/setup.rb +9 -0
  272. data/lib/tkextlib/tcllib/statusbar.rb +80 -0
  273. data/lib/tkextlib/tcllib/style.rb +62 -0
  274. data/lib/tkextlib/tcllib/superframe.rb +52 -0
  275. data/lib/tkextlib/tcllib/swaplist.rb +151 -0
  276. data/lib/tkextlib/tcllib/tablelist.rb +29 -0
  277. data/lib/tkextlib/tcllib/tablelist_core.rb +1073 -0
  278. data/lib/tkextlib/tcllib/tablelist_tile.rb +44 -0
  279. data/lib/tkextlib/tcllib/tkpiechart.rb +315 -0
  280. data/lib/tkextlib/tcllib/toolbar.rb +176 -0
  281. data/lib/tkextlib/tcllib/tooltip.rb +105 -0
  282. data/lib/tkextlib/tcllib/validator.rb +66 -0
  283. data/lib/tkextlib/tcllib/widget.rb +83 -0
  284. data/lib/tkextlib/tclx.rb +14 -0
  285. data/lib/tkextlib/tclx/setup.rb +9 -0
  286. data/lib/tkextlib/tclx/tclx.rb +75 -0
  287. data/lib/tkextlib/tile.rb +450 -0
  288. data/lib/tkextlib/tile/dialog.rb +103 -0
  289. data/lib/tkextlib/tile/setup.rb +9 -0
  290. data/lib/tkextlib/tile/sizegrip.rb +33 -0
  291. data/lib/tkextlib/tile/style.rb +337 -0
  292. data/lib/tkextlib/tile/tbutton.rb +35 -0
  293. data/lib/tkextlib/tile/tcheckbutton.rb +39 -0
  294. data/lib/tkextlib/tile/tcombobox.rb +56 -0
  295. data/lib/tkextlib/tile/tentry.rb +50 -0
  296. data/lib/tkextlib/tile/tframe.rb +35 -0
  297. data/lib/tkextlib/tile/tlabel.rb +35 -0
  298. data/lib/tkextlib/tile/tlabelframe.rb +39 -0
  299. data/lib/tkextlib/tile/tmenubutton.rb +39 -0
  300. data/lib/tkextlib/tile/tnotebook.rb +148 -0
  301. data/lib/tkextlib/tile/tpaned.rb +246 -0
  302. data/lib/tkextlib/tile/tprogressbar.rb +58 -0
  303. data/lib/tkextlib/tile/tradiobutton.rb +39 -0
  304. data/lib/tkextlib/tile/treeview.rb +1337 -0
  305. data/lib/tkextlib/tile/tscale.rb +57 -0
  306. data/lib/tkextlib/tile/tscrollbar.rb +64 -0
  307. data/lib/tkextlib/tile/tseparator.rb +35 -0
  308. data/lib/tkextlib/tile/tspinbox.rb +108 -0
  309. data/lib/tkextlib/tile/tsquare.rb +31 -0
  310. data/lib/tkextlib/tkDND.rb +19 -0
  311. data/lib/tkextlib/tkDND/setup.rb +9 -0
  312. data/lib/tkextlib/tkDND/shape.rb +126 -0
  313. data/lib/tkextlib/tkDND/tkdnd.rb +183 -0
  314. data/lib/tkextlib/tkHTML.rb +14 -0
  315. data/lib/tkextlib/tkHTML/htmlwidget.rb +454 -0
  316. data/lib/tkextlib/tkHTML/setup.rb +9 -0
  317. data/lib/tkextlib/tkimg.rb +37 -0
  318. data/lib/tkextlib/tkimg/README +26 -0
  319. data/lib/tkextlib/tkimg/bmp.rb +34 -0
  320. data/lib/tkextlib/tkimg/dted.rb +34 -0
  321. data/lib/tkextlib/tkimg/gif.rb +34 -0
  322. data/lib/tkextlib/tkimg/ico.rb +34 -0
  323. data/lib/tkextlib/tkimg/jpeg.rb +34 -0
  324. data/lib/tkextlib/tkimg/pcx.rb +34 -0
  325. data/lib/tkextlib/tkimg/pixmap.rb +45 -0
  326. data/lib/tkextlib/tkimg/png.rb +34 -0
  327. data/lib/tkextlib/tkimg/ppm.rb +34 -0
  328. data/lib/tkextlib/tkimg/ps.rb +34 -0
  329. data/lib/tkextlib/tkimg/raw.rb +34 -0
  330. data/lib/tkextlib/tkimg/setup.rb +9 -0
  331. data/lib/tkextlib/tkimg/sgi.rb +34 -0
  332. data/lib/tkextlib/tkimg/sun.rb +34 -0
  333. data/lib/tkextlib/tkimg/tga.rb +34 -0
  334. data/lib/tkextlib/tkimg/tiff.rb +34 -0
  335. data/lib/tkextlib/tkimg/window.rb +34 -0
  336. data/lib/tkextlib/tkimg/xbm.rb +34 -0
  337. data/lib/tkextlib/tkimg/xpm.rb +34 -0
  338. data/lib/tkextlib/tktable.rb +15 -0
  339. data/lib/tkextlib/tktable/setup.rb +9 -0
  340. data/lib/tkextlib/tktable/tktable.rb +967 -0
  341. data/lib/tkextlib/tktrans.rb +15 -0
  342. data/lib/tkextlib/tktrans/setup.rb +9 -0
  343. data/lib/tkextlib/tktrans/tktrans.rb +65 -0
  344. data/lib/tkextlib/treectrl.rb +14 -0
  345. data/lib/tkextlib/treectrl/setup.rb +9 -0
  346. data/lib/tkextlib/treectrl/tktreectrl.rb +2523 -0
  347. data/lib/tkextlib/trofs.rb +14 -0
  348. data/lib/tkextlib/trofs/setup.rb +9 -0
  349. data/lib/tkextlib/trofs/trofs.rb +52 -0
  350. data/lib/tkextlib/version.rb +7 -0
  351. data/lib/tkextlib/vu.rb +49 -0
  352. data/lib/tkextlib/vu/bargraph.rb +62 -0
  353. data/lib/tkextlib/vu/charts.rb +54 -0
  354. data/lib/tkextlib/vu/dial.rb +103 -0
  355. data/lib/tkextlib/vu/pie.rb +287 -0
  356. data/lib/tkextlib/vu/setup.rb +9 -0
  357. data/lib/tkextlib/vu/spinbox.rb +23 -0
  358. data/lib/tkextlib/winico.rb +15 -0
  359. data/lib/tkextlib/winico/setup.rb +9 -0
  360. data/lib/tkextlib/winico/winico.rb +225 -0
  361. data/lib/tkfont.rb +5 -0
  362. data/lib/tkmacpkg.rb +5 -0
  363. data/lib/tkmenubar.rb +5 -0
  364. data/lib/tkmngfocus.rb +5 -0
  365. data/lib/tkpalette.rb +5 -0
  366. data/lib/tkscrollbox.rb +5 -0
  367. data/lib/tktext.rb +5 -0
  368. data/lib/tkvirtevent.rb +5 -0
  369. data/lib/tkwinpkg.rb +5 -0
  370. data/old-README.tcltklib.ja +159 -0
  371. data/sample/24hr_clock.rb +287 -0
  372. data/sample/binding_sample.rb +88 -0
  373. data/sample/bindtag_sample.rb +128 -0
  374. data/sample/binstr_usage.rb +46 -0
  375. data/sample/btn_with_frame.rb +21 -0
  376. data/sample/cd_timer.rb +82 -0
  377. data/sample/cmd_res_test.rb +18 -0
  378. data/sample/cmd_resource +5 -0
  379. data/sample/demos-en/ChangeLog +64 -0
  380. data/sample/demos-en/ChangeLog.prev +9 -0
  381. data/sample/demos-en/README +138 -0
  382. data/sample/demos-en/README.1st +18 -0
  383. data/sample/demos-en/README.tkencoding +29 -0
  384. data/sample/demos-en/anilabel.rb +175 -0
  385. data/sample/demos-en/aniwave.rb +119 -0
  386. data/sample/demos-en/arrow.rb +250 -0
  387. data/sample/demos-en/bind.rb +128 -0
  388. data/sample/demos-en/bitmap.rb +76 -0
  389. data/sample/demos-en/browse1 +63 -0
  390. data/sample/demos-en/browse2 +82 -0
  391. data/sample/demos-en/button.rb +85 -0
  392. data/sample/demos-en/check.rb +73 -0
  393. data/sample/demos-en/check2.rb +110 -0
  394. data/sample/demos-en/clrpick.rb +88 -0
  395. data/sample/demos-en/colors.rb +159 -0
  396. data/sample/demos-en/combo.rb +97 -0
  397. data/sample/demos-en/cscroll.rb +137 -0
  398. data/sample/demos-en/ctext.rb +208 -0
  399. data/sample/demos-en/dialog1.rb +39 -0
  400. data/sample/demos-en/dialog2.rb +42 -0
  401. data/sample/demos-en/doc.org/README +7 -0
  402. data/sample/demos-en/doc.org/README.JP +14 -0
  403. data/sample/demos-en/doc.org/README.tk80 +46 -0
  404. data/sample/demos-en/doc.org/license.terms +39 -0
  405. data/sample/demos-en/doc.org/license.terms.tk80 +39 -0
  406. data/sample/demos-en/entry1.rb +59 -0
  407. data/sample/demos-en/entry2.rb +94 -0
  408. data/sample/demos-en/entry3.rb +221 -0
  409. data/sample/demos-en/filebox.rb +103 -0
  410. data/sample/demos-en/floor.rb +1724 -0
  411. data/sample/demos-en/floor2.rb +1723 -0
  412. data/sample/demos-en/form.rb +65 -0
  413. data/sample/demos-en/goldberg.rb +2007 -0
  414. data/sample/demos-en/hello +14 -0
  415. data/sample/demos-en/hscale.rb +76 -0
  416. data/sample/demos-en/icon.rb +106 -0
  417. data/sample/demos-en/image1.rb +66 -0
  418. data/sample/demos-en/image2.rb +108 -0
  419. data/sample/demos-en/image3.rb +126 -0
  420. data/sample/demos-en/items.rb +382 -0
  421. data/sample/demos-en/ixset +333 -0
  422. data/sample/demos-en/ixset2 +367 -0
  423. data/sample/demos-en/knightstour.rb +272 -0
  424. data/sample/demos-en/label.rb +73 -0
  425. data/sample/demos-en/labelframe.rb +96 -0
  426. data/sample/demos-en/mclist.rb +118 -0
  427. data/sample/demos-en/menu.rb +197 -0
  428. data/sample/demos-en/menu84.rb +216 -0
  429. data/sample/demos-en/menubu.rb +238 -0
  430. data/sample/demos-en/msgbox.rb +91 -0
  431. data/sample/demos-en/msgbox2.rb +92 -0
  432. data/sample/demos-en/paned1.rb +48 -0
  433. data/sample/demos-en/paned2.rb +95 -0
  434. data/sample/demos-en/pendulum.rb +241 -0
  435. data/sample/demos-en/plot.rb +125 -0
  436. data/sample/demos-en/puzzle.rb +135 -0
  437. data/sample/demos-en/radio.rb +87 -0
  438. data/sample/demos-en/radio2.rb +110 -0
  439. data/sample/demos-en/radio3.rb +118 -0
  440. data/sample/demos-en/rmt +268 -0
  441. data/sample/demos-en/rolodex +320 -0
  442. data/sample/demos-en/ruler.rb +206 -0
  443. data/sample/demos-en/sayings.rb +107 -0
  444. data/sample/demos-en/search.rb +188 -0
  445. data/sample/demos-en/spin.rb +66 -0
  446. data/sample/demos-en/square +81 -0
  447. data/sample/demos-en/states.rb +81 -0
  448. data/sample/demos-en/style.rb +232 -0
  449. data/sample/demos-en/tcolor +526 -0
  450. data/sample/demos-en/text.rb +129 -0
  451. data/sample/demos-en/textpeer.rb +77 -0
  452. data/sample/demos-en/timer +136 -0
  453. data/sample/demos-en/tkencoding.rb +43 -0
  454. data/sample/demos-en/toolbar.rb +131 -0
  455. data/sample/demos-en/tree.rb +120 -0
  456. data/sample/demos-en/ttkbut.rb +140 -0
  457. data/sample/demos-en/ttkmenu.rb +86 -0
  458. data/sample/demos-en/ttknote.rb +90 -0
  459. data/sample/demos-en/ttkpane.rb +214 -0
  460. data/sample/demos-en/ttkprogress.rb +67 -0
  461. data/sample/demos-en/twind.rb +292 -0
  462. data/sample/demos-en/twind2.rb +385 -0
  463. data/sample/demos-en/unicodeout.rb +115 -0
  464. data/sample/demos-en/vscale.rb +80 -0
  465. data/sample/demos-en/widget +1087 -0
  466. data/sample/demos-jp/README +54 -0
  467. data/sample/demos-jp/README.1st +20 -0
  468. data/sample/demos-jp/anilabel.rb +178 -0
  469. data/sample/demos-jp/aniwave.rb +121 -0
  470. data/sample/demos-jp/arrow.rb +248 -0
  471. data/sample/demos-jp/bind.rb +126 -0
  472. data/sample/demos-jp/bitmap.rb +75 -0
  473. data/sample/demos-jp/browse1 +63 -0
  474. data/sample/demos-jp/browse2 +82 -0
  475. data/sample/demos-jp/button.rb +84 -0
  476. data/sample/demos-jp/check.rb +71 -0
  477. data/sample/demos-jp/check2.rb +111 -0
  478. data/sample/demos-jp/clrpick.rb +85 -0
  479. data/sample/demos-jp/colors.rb +156 -0
  480. data/sample/demos-jp/combo.rb +99 -0
  481. data/sample/demos-jp/cscroll.rb +135 -0
  482. data/sample/demos-jp/ctext.rb +205 -0
  483. data/sample/demos-jp/dialog1.rb +40 -0
  484. data/sample/demos-jp/dialog2.rb +44 -0
  485. data/sample/demos-jp/doc.org/README +7 -0
  486. data/sample/demos-jp/doc.org/README.JP +14 -0
  487. data/sample/demos-jp/doc.org/README.tk80 +46 -0
  488. data/sample/demos-jp/doc.org/license.terms +39 -0
  489. data/sample/demos-jp/doc.org/license.terms.tk80 +39 -0
  490. data/sample/demos-jp/entry1.rb +61 -0
  491. data/sample/demos-jp/entry2.rb +92 -0
  492. data/sample/demos-jp/entry3.rb +226 -0
  493. data/sample/demos-jp/filebox.rb +103 -0
  494. data/sample/demos-jp/floor.rb +1722 -0
  495. data/sample/demos-jp/floor2.rb +1720 -0
  496. data/sample/demos-jp/form.rb +67 -0
  497. data/sample/demos-jp/goldberg.rb +2012 -0
  498. data/sample/demos-jp/hello +10 -0
  499. data/sample/demos-jp/hscale.rb +79 -0
  500. data/sample/demos-jp/icon.rb +104 -0
  501. data/sample/demos-jp/image1.rb +65 -0
  502. data/sample/demos-jp/image2.rb +107 -0
  503. data/sample/demos-jp/image3.rb +128 -0
  504. data/sample/demos-jp/items.rb +380 -0
  505. data/sample/demos-jp/ixset +333 -0
  506. data/sample/demos-jp/ixset2 +369 -0
  507. data/sample/demos-jp/knightstour.rb +274 -0
  508. data/sample/demos-jp/label.rb +70 -0
  509. data/sample/demos-jp/labelframe.rb +103 -0
  510. data/sample/demos-jp/mclist.rb +122 -0
  511. data/sample/demos-jp/menu.rb +202 -0
  512. data/sample/demos-jp/menu84.rb +214 -0
  513. data/sample/demos-jp/menu8x.rb +234 -0
  514. data/sample/demos-jp/menubu.rb +239 -0
  515. data/sample/demos-jp/msgbox.rb +90 -0
  516. data/sample/demos-jp/msgbox2.rb +91 -0
  517. data/sample/demos-jp/paned1.rb +53 -0
  518. data/sample/demos-jp/paned2.rb +101 -0
  519. data/sample/demos-jp/pendulum.rb +243 -0
  520. data/sample/demos-jp/plot.rb +127 -0
  521. data/sample/demos-jp/puzzle.rb +132 -0
  522. data/sample/demos-jp/radio.rb +85 -0
  523. data/sample/demos-jp/radio2.rb +113 -0
  524. data/sample/demos-jp/radio3.rb +120 -0
  525. data/sample/demos-jp/rmt +268 -0
  526. data/sample/demos-jp/rolodex +320 -0
  527. data/sample/demos-jp/rolodex-j +300 -0
  528. data/sample/demos-jp/ruler.rb +204 -0
  529. data/sample/demos-jp/sayings.rb +104 -0
  530. data/sample/demos-jp/search.rb +185 -0
  531. data/sample/demos-jp/spin.rb +72 -0
  532. data/sample/demos-jp/square +81 -0
  533. data/sample/demos-jp/states.rb +75 -0
  534. data/sample/demos-jp/style.rb +271 -0
  535. data/sample/demos-jp/tcolor +534 -0
  536. data/sample/demos-jp/text.rb +121 -0
  537. data/sample/demos-jp/textpeer.rb +83 -0
  538. data/sample/demos-jp/timer +136 -0
  539. data/sample/demos-jp/toolbar.rb +137 -0
  540. data/sample/demos-jp/tree.rb +121 -0
  541. data/sample/demos-jp/ttkbut.rb +146 -0
  542. data/sample/demos-jp/ttkmenu.rb +92 -0
  543. data/sample/demos-jp/ttknote.rb +98 -0
  544. data/sample/demos-jp/ttkpane.rb +217 -0
  545. data/sample/demos-jp/ttkprogress.rb +72 -0
  546. data/sample/demos-jp/twind.rb +293 -0
  547. data/sample/demos-jp/twind2.rb +385 -0
  548. data/sample/demos-jp/unicodeout.rb +120 -0
  549. data/sample/demos-jp/vscale.rb +81 -0
  550. data/sample/demos-jp/widget +1122 -0
  551. data/sample/editable_listbox.rb +149 -0
  552. data/sample/encstr_usage.rb +31 -0
  553. data/sample/figmemo_sample.rb +457 -0
  554. data/sample/images/earth.gif +0 -0
  555. data/sample/images/earthris.gif +0 -0
  556. data/sample/images/face.xbm +173 -0
  557. data/sample/images/flagdown.xbm +27 -0
  558. data/sample/images/flagup.xbm +27 -0
  559. data/sample/images/gray25.xbm +6 -0
  560. data/sample/images/grey.25 +6 -0
  561. data/sample/images/grey.5 +6 -0
  562. data/sample/images/letters.xbm +27 -0
  563. data/sample/images/noletter.xbm +27 -0
  564. data/sample/images/pattern.xbm +6 -0
  565. data/sample/images/tcllogo.gif +0 -0
  566. data/sample/images/teapot.ppm +31 -0
  567. data/sample/irbtk.rb +31 -0
  568. data/sample/irbtkw.rbw +156 -0
  569. data/sample/iso2022-kr.txt +2 -0
  570. data/sample/menubar1.rb +52 -0
  571. data/sample/menubar2.rb +57 -0
  572. data/sample/menubar3.rb +73 -0
  573. data/sample/msgs_rb/README +3 -0
  574. data/sample/msgs_rb/cs.msg +84 -0
  575. data/sample/msgs_rb/de.msg +88 -0
  576. data/sample/msgs_rb/el.msg +98 -0
  577. data/sample/msgs_rb/en.msg +83 -0
  578. data/sample/msgs_rb/en_gb.msg +7 -0
  579. data/sample/msgs_rb/eo.msg +87 -0
  580. data/sample/msgs_rb/es.msg +84 -0
  581. data/sample/msgs_rb/fr.msg +84 -0
  582. data/sample/msgs_rb/it.msg +84 -0
  583. data/sample/msgs_rb/ja.msg +13 -0
  584. data/sample/msgs_rb/nl.msg +123 -0
  585. data/sample/msgs_rb/pl.msg +87 -0
  586. data/sample/msgs_rb/ru.msg +87 -0
  587. data/sample/msgs_rb2/README +5 -0
  588. data/sample/msgs_rb2/de.msg +88 -0
  589. data/sample/msgs_rb2/ja.msg +85 -0
  590. data/sample/msgs_tk/README +4 -0
  591. data/sample/msgs_tk/cs.msg +84 -0
  592. data/sample/msgs_tk/de.msg +88 -0
  593. data/sample/msgs_tk/el.msg +103 -0
  594. data/sample/msgs_tk/en.msg +83 -0
  595. data/sample/msgs_tk/en_gb.msg +7 -0
  596. data/sample/msgs_tk/eo.msg +87 -0
  597. data/sample/msgs_tk/es.msg +84 -0
  598. data/sample/msgs_tk/fr.msg +84 -0
  599. data/sample/msgs_tk/it.msg +84 -0
  600. data/sample/msgs_tk/ja.msg +13 -0
  601. data/sample/msgs_tk/license.terms +39 -0
  602. data/sample/msgs_tk/nl.msg +123 -0
  603. data/sample/msgs_tk/pl.msg +87 -0
  604. data/sample/msgs_tk/ru.msg +87 -0
  605. data/sample/multi-ip_sample.rb +104 -0
  606. data/sample/multi-ip_sample2.rb +30 -0
  607. data/sample/optobj_sample.rb +68 -0
  608. data/sample/propagate.rb +31 -0
  609. data/sample/remote-ip_sample.rb +34 -0
  610. data/sample/remote-ip_sample2.rb +57 -0
  611. data/sample/resource.en +13 -0
  612. data/sample/resource.ja +13 -0
  613. data/sample/safe-tk.rb +132 -0
  614. data/sample/scrollframe.rb +250 -0
  615. data/sample/tcltklib/batsu.gif +0 -0
  616. data/sample/tcltklib/lines0.tcl +42 -0
  617. data/sample/tcltklib/lines1.rb +51 -0
  618. data/sample/tcltklib/lines2.rb +55 -0
  619. data/sample/tcltklib/lines3.rb +55 -0
  620. data/sample/tcltklib/lines4.rb +55 -0
  621. data/sample/tcltklib/maru.gif +0 -0
  622. data/sample/tcltklib/safeTk.rb +23 -0
  623. data/sample/tcltklib/sample0.rb +40 -0
  624. data/sample/tcltklib/sample1.rb +635 -0
  625. data/sample/tcltklib/sample2.rb +452 -0
  626. data/sample/tkalignbox.rb +236 -0
  627. data/sample/tkballoonhelp.rb +221 -0
  628. data/sample/tkbiff.rb +156 -0
  629. data/sample/tkbrowse.rb +80 -0
  630. data/sample/tkcombobox.rb +498 -0
  631. data/sample/tkdialog.rb +62 -0
  632. data/sample/tkextlib/ICONS/Orig_LICENSE.txt +61 -0
  633. data/sample/tkextlib/ICONS/tkIcons +195 -0
  634. data/sample/tkextlib/ICONS/tkIcons-sample.kde +658 -0
  635. data/sample/tkextlib/ICONS/tkIcons.kde +195 -0
  636. data/sample/tkextlib/ICONS/viewIcons.rb +330 -0
  637. data/sample/tkextlib/blt/barchart5.rb +102 -0
  638. data/sample/tkextlib/blt/calendar.rb +118 -0
  639. data/sample/tkextlib/blt/graph6.rb +2223 -0
  640. data/sample/tkextlib/blt/graph7.rb +41 -0
  641. data/sample/tkextlib/blt/graph7a.rb +64 -0
  642. data/sample/tkextlib/blt/graph7b.rb +42 -0
  643. data/sample/tkextlib/blt/graph7c.rb +46 -0
  644. data/sample/tkextlib/blt/images/buckskin.gif +0 -0
  645. data/sample/tkextlib/blt/images/chalk.gif +0 -0
  646. data/sample/tkextlib/blt/images/qv100.t.gif +0 -0
  647. data/sample/tkextlib/blt/images/rain.gif +0 -0
  648. data/sample/tkextlib/blt/images/sample.gif +0 -0
  649. data/sample/tkextlib/blt/pareto.rb +91 -0
  650. data/sample/tkextlib/blt/plot1.rb +10 -0
  651. data/sample/tkextlib/blt/plot1b.rb +11 -0
  652. data/sample/tkextlib/blt/readme.txt +2 -0
  653. data/sample/tkextlib/blt/scripts/stipples.rb +157 -0
  654. data/sample/tkextlib/blt/winop1.rb +41 -0
  655. data/sample/tkextlib/blt/winop2.rb +29 -0
  656. data/sample/tkextlib/bwidget/Orig_LICENSE.txt +53 -0
  657. data/sample/tkextlib/bwidget/basic.rb +199 -0
  658. data/sample/tkextlib/bwidget/bwidget.xbm +46 -0
  659. data/sample/tkextlib/bwidget/demo.rb +244 -0
  660. data/sample/tkextlib/bwidget/dnd.rb +47 -0
  661. data/sample/tkextlib/bwidget/manager.rb +151 -0
  662. data/sample/tkextlib/bwidget/select.rb +83 -0
  663. data/sample/tkextlib/bwidget/tmpldlg.rb +222 -0
  664. data/sample/tkextlib/bwidget/tree.rb +290 -0
  665. data/sample/tkextlib/bwidget/x1.xbm +2258 -0
  666. data/sample/tkextlib/iwidgets/catalog_demo/Orig_LICENSE.txt +42 -0
  667. data/sample/tkextlib/iwidgets/catalog_demo/images/box.xbm +14 -0
  668. data/sample/tkextlib/iwidgets/catalog_demo/images/clear.gif +0 -0
  669. data/sample/tkextlib/iwidgets/catalog_demo/images/close.gif +0 -0
  670. data/sample/tkextlib/iwidgets/catalog_demo/images/copy.gif +0 -0
  671. data/sample/tkextlib/iwidgets/catalog_demo/images/cut.gif +0 -0
  672. data/sample/tkextlib/iwidgets/catalog_demo/images/exit.gif +0 -0
  673. data/sample/tkextlib/iwidgets/catalog_demo/images/find.gif +0 -0
  674. data/sample/tkextlib/iwidgets/catalog_demo/images/help.gif +0 -0
  675. data/sample/tkextlib/iwidgets/catalog_demo/images/line.xbm +14 -0
  676. data/sample/tkextlib/iwidgets/catalog_demo/images/mag.gif +0 -0
  677. data/sample/tkextlib/iwidgets/catalog_demo/images/new.gif +0 -0
  678. data/sample/tkextlib/iwidgets/catalog_demo/images/open.gif +0 -0
  679. data/sample/tkextlib/iwidgets/catalog_demo/images/oval.xbm +14 -0
  680. data/sample/tkextlib/iwidgets/catalog_demo/images/paste.gif +0 -0
  681. data/sample/tkextlib/iwidgets/catalog_demo/images/points.xbm +14 -0
  682. data/sample/tkextlib/iwidgets/catalog_demo/images/poly.gif +0 -0
  683. data/sample/tkextlib/iwidgets/catalog_demo/images/print.gif +0 -0
  684. data/sample/tkextlib/iwidgets/catalog_demo/images/ruler.gif +0 -0
  685. data/sample/tkextlib/iwidgets/catalog_demo/images/save.gif +0 -0
  686. data/sample/tkextlib/iwidgets/catalog_demo/images/select.gif +0 -0
  687. data/sample/tkextlib/iwidgets/catalog_demo/images/text.xbm +14 -0
  688. data/sample/tkextlib/iwidgets/sample/buttonbox.rb +23 -0
  689. data/sample/tkextlib/iwidgets/sample/calendar.rb +11 -0
  690. data/sample/tkextlib/iwidgets/sample/canvasprintbox.rb +9 -0
  691. data/sample/tkextlib/iwidgets/sample/canvasprintdialog.rb +9 -0
  692. data/sample/tkextlib/iwidgets/sample/checkbox.rb +13 -0
  693. data/sample/tkextlib/iwidgets/sample/combobox.rb +33 -0
  694. data/sample/tkextlib/iwidgets/sample/dateentry.rb +8 -0
  695. data/sample/tkextlib/iwidgets/sample/datefield.rb +9 -0
  696. data/sample/tkextlib/iwidgets/sample/dialog.rb +21 -0
  697. data/sample/tkextlib/iwidgets/sample/dialogshell.rb +15 -0
  698. data/sample/tkextlib/iwidgets/sample/disjointlistbox.rb +17 -0
  699. data/sample/tkextlib/iwidgets/sample/entryfield-1.rb +40 -0
  700. data/sample/tkextlib/iwidgets/sample/entryfield-2.rb +45 -0
  701. data/sample/tkextlib/iwidgets/sample/entryfield-3.rb +41 -0
  702. data/sample/tkextlib/iwidgets/sample/extbutton.rb +21 -0
  703. data/sample/tkextlib/iwidgets/sample/extfileselectionbox.rb +9 -0
  704. data/sample/tkextlib/iwidgets/sample/extfileselectiondialog.rb +30 -0
  705. data/sample/tkextlib/iwidgets/sample/feedback.rb +11 -0
  706. data/sample/tkextlib/iwidgets/sample/fileselectionbox.rb +9 -0
  707. data/sample/tkextlib/iwidgets/sample/fileselectiondialog.rb +29 -0
  708. data/sample/tkextlib/iwidgets/sample/finddialog.rb +16 -0
  709. data/sample/tkextlib/iwidgets/sample/hierarchy.rb +26 -0
  710. data/sample/tkextlib/iwidgets/sample/hyperhelp.rb +15 -0
  711. data/sample/tkextlib/iwidgets/sample/labeledframe.rb +15 -0
  712. data/sample/tkextlib/iwidgets/sample/labeledwidget.rb +14 -0
  713. data/sample/tkextlib/iwidgets/sample/mainwindow.rb +65 -0
  714. data/sample/tkextlib/iwidgets/sample/menubar.rb +125 -0
  715. data/sample/tkextlib/iwidgets/sample/menubar2.rb +45 -0
  716. data/sample/tkextlib/iwidgets/sample/messagebox1.rb +20 -0
  717. data/sample/tkextlib/iwidgets/sample/messagebox2.rb +20 -0
  718. data/sample/tkextlib/iwidgets/sample/messagedialog.rb +45 -0
  719. data/sample/tkextlib/iwidgets/sample/notebook.rb +31 -0
  720. data/sample/tkextlib/iwidgets/sample/notebook2.rb +31 -0
  721. data/sample/tkextlib/iwidgets/sample/optionmenu.rb +15 -0
  722. data/sample/tkextlib/iwidgets/sample/panedwindow.rb +23 -0
  723. data/sample/tkextlib/iwidgets/sample/panedwindow2.rb +23 -0
  724. data/sample/tkextlib/iwidgets/sample/promptdialog.rb +18 -0
  725. data/sample/tkextlib/iwidgets/sample/pushbutton.rb +10 -0
  726. data/sample/tkextlib/iwidgets/sample/radiobox.rb +14 -0
  727. data/sample/tkextlib/iwidgets/sample/scrolledcanvas.rb +14 -0
  728. data/sample/tkextlib/iwidgets/sample/scrolledframe.rb +19 -0
  729. data/sample/tkextlib/iwidgets/sample/scrolledhtml.rb +16 -0
  730. data/sample/tkextlib/iwidgets/sample/scrolledlistbox.rb +23 -0
  731. data/sample/tkextlib/iwidgets/sample/scrolledtext.rb +12 -0
  732. data/sample/tkextlib/iwidgets/sample/selectionbox.rb +20 -0
  733. data/sample/tkextlib/iwidgets/sample/selectiondialog.rb +13 -0
  734. data/sample/tkextlib/iwidgets/sample/shell.rb +18 -0
  735. data/sample/tkextlib/iwidgets/sample/spindate.rb +8 -0
  736. data/sample/tkextlib/iwidgets/sample/spinint.rb +11 -0
  737. data/sample/tkextlib/iwidgets/sample/spinner.rb +34 -0
  738. data/sample/tkextlib/iwidgets/sample/spintime.rb +8 -0
  739. data/sample/tkextlib/iwidgets/sample/tabnotebook.rb +27 -0
  740. data/sample/tkextlib/iwidgets/sample/tabnotebook2.rb +31 -0
  741. data/sample/tkextlib/iwidgets/sample/tabset.rb +35 -0
  742. data/sample/tkextlib/iwidgets/sample/timeentry.rb +8 -0
  743. data/sample/tkextlib/iwidgets/sample/timefield.rb +9 -0
  744. data/sample/tkextlib/iwidgets/sample/toolbar.rb +153 -0
  745. data/sample/tkextlib/iwidgets/sample/watch.rb +19 -0
  746. data/sample/tkextlib/tcllib/Orig_LICENSE.txt +46 -0
  747. data/sample/tkextlib/tcllib/datefield.rb +30 -0
  748. data/sample/tkextlib/tcllib/plotdemos1.rb +159 -0
  749. data/sample/tkextlib/tcllib/plotdemos2.rb +72 -0
  750. data/sample/tkextlib/tcllib/plotdemos3.rb +84 -0
  751. data/sample/tkextlib/tcllib/xyplot.rb +18 -0
  752. data/sample/tkextlib/tile/Orig_LICENSE.txt +30 -0
  753. data/sample/tkextlib/tile/demo.rb +984 -0
  754. data/sample/tkextlib/tile/iconlib.tcl +110 -0
  755. data/sample/tkextlib/tile/readme.txt +2 -0
  756. data/sample/tkextlib/tile/repeater.tcl +117 -0
  757. data/sample/tkextlib/tile/themes/blue/blue.tcl +149 -0
  758. data/sample/tkextlib/tile/themes/blue/blue/arrowdown-h.gif +0 -0
  759. data/sample/tkextlib/tile/themes/blue/blue/arrowdown-p.gif +0 -0
  760. data/sample/tkextlib/tile/themes/blue/blue/arrowdown.gif +0 -0
  761. data/sample/tkextlib/tile/themes/blue/blue/arrowleft-h.gif +0 -0
  762. data/sample/tkextlib/tile/themes/blue/blue/arrowleft-p.gif +0 -0
  763. data/sample/tkextlib/tile/themes/blue/blue/arrowleft.gif +0 -0
  764. data/sample/tkextlib/tile/themes/blue/blue/arrowright-h.gif +0 -0
  765. data/sample/tkextlib/tile/themes/blue/blue/arrowright-p.gif +0 -0
  766. data/sample/tkextlib/tile/themes/blue/blue/arrowright.gif +0 -0
  767. data/sample/tkextlib/tile/themes/blue/blue/arrowup-h.gif +0 -0
  768. data/sample/tkextlib/tile/themes/blue/blue/arrowup-p.gif +0 -0
  769. data/sample/tkextlib/tile/themes/blue/blue/arrowup.gif +0 -0
  770. data/sample/tkextlib/tile/themes/blue/blue/button-h.gif +0 -0
  771. data/sample/tkextlib/tile/themes/blue/blue/button-n.gif +0 -0
  772. data/sample/tkextlib/tile/themes/blue/blue/button-n.xcf +0 -0
  773. data/sample/tkextlib/tile/themes/blue/blue/button-p.gif +0 -0
  774. data/sample/tkextlib/tile/themes/blue/blue/check-hc.gif +0 -0
  775. data/sample/tkextlib/tile/themes/blue/blue/check-hu.gif +0 -0
  776. data/sample/tkextlib/tile/themes/blue/blue/check-nc.gif +0 -0
  777. data/sample/tkextlib/tile/themes/blue/blue/check-nu.gif +0 -0
  778. data/sample/tkextlib/tile/themes/blue/blue/radio-hc.gif +0 -0
  779. data/sample/tkextlib/tile/themes/blue/blue/radio-hu.gif +0 -0
  780. data/sample/tkextlib/tile/themes/blue/blue/radio-nc.gif +0 -0
  781. data/sample/tkextlib/tile/themes/blue/blue/radio-nu.gif +0 -0
  782. data/sample/tkextlib/tile/themes/blue/blue/sb-thumb-p.gif +0 -0
  783. data/sample/tkextlib/tile/themes/blue/blue/sb-thumb.gif +0 -0
  784. data/sample/tkextlib/tile/themes/blue/blue/sb-vthumb-p.gif +0 -0
  785. data/sample/tkextlib/tile/themes/blue/blue/sb-vthumb.gif +0 -0
  786. data/sample/tkextlib/tile/themes/blue/blue/slider-p.gif +0 -0
  787. data/sample/tkextlib/tile/themes/blue/blue/slider.gif +0 -0
  788. data/sample/tkextlib/tile/themes/blue/blue/vslider-p.gif +0 -0
  789. data/sample/tkextlib/tile/themes/blue/blue/vslider.gif +0 -0
  790. data/sample/tkextlib/tile/themes/blue/pkgIndex.tcl +6 -0
  791. data/sample/tkextlib/tile/themes/keramik/keramik.tcl +194 -0
  792. data/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-n.gif +0 -0
  793. data/sample/tkextlib/tile/themes/keramik/keramik/arrowdown-p.gif +0 -0
  794. data/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-n.gif +0 -0
  795. data/sample/tkextlib/tile/themes/keramik/keramik/arrowleft-p.gif +0 -0
  796. data/sample/tkextlib/tile/themes/keramik/keramik/arrowright-n.gif +0 -0
  797. data/sample/tkextlib/tile/themes/keramik/keramik/arrowright-p.gif +0 -0
  798. data/sample/tkextlib/tile/themes/keramik/keramik/arrowup-n.gif +0 -0
  799. data/sample/tkextlib/tile/themes/keramik/keramik/arrowup-p.gif +0 -0
  800. data/sample/tkextlib/tile/themes/keramik/keramik/button-d.gif +0 -0
  801. data/sample/tkextlib/tile/themes/keramik/keramik/button-h.gif +0 -0
  802. data/sample/tkextlib/tile/themes/keramik/keramik/button-n.gif +0 -0
  803. data/sample/tkextlib/tile/themes/keramik/keramik/button-p.gif +0 -0
  804. data/sample/tkextlib/tile/themes/keramik/keramik/button-s.gif +0 -0
  805. data/sample/tkextlib/tile/themes/keramik/keramik/check-c.gif +0 -0
  806. data/sample/tkextlib/tile/themes/keramik/keramik/check-u.gif +0 -0
  807. data/sample/tkextlib/tile/themes/keramik/keramik/hsb-n.gif +0 -0
  808. data/sample/tkextlib/tile/themes/keramik/keramik/hsb-p.gif +0 -0
  809. data/sample/tkextlib/tile/themes/keramik/keramik/hslider-n.gif +0 -0
  810. data/sample/tkextlib/tile/themes/keramik/keramik/mbut-a.gif +0 -0
  811. data/sample/tkextlib/tile/themes/keramik/keramik/mbut-arrow-n.gif +0 -0
  812. data/sample/tkextlib/tile/themes/keramik/keramik/mbut-d.gif +0 -0
  813. data/sample/tkextlib/tile/themes/keramik/keramik/mbut-n.gif +0 -0
  814. data/sample/tkextlib/tile/themes/keramik/keramik/radio-c.gif +0 -0
  815. data/sample/tkextlib/tile/themes/keramik/keramik/radio-u.gif +0 -0
  816. data/sample/tkextlib/tile/themes/keramik/keramik/tab-n.gif +0 -0
  817. data/sample/tkextlib/tile/themes/keramik/keramik/tab-p.gif +0 -0
  818. data/sample/tkextlib/tile/themes/keramik/keramik/tbar-a.gif +0 -0
  819. data/sample/tkextlib/tile/themes/keramik/keramik/tbar-n.gif +0 -0
  820. data/sample/tkextlib/tile/themes/keramik/keramik/tbar-p.gif +0 -0
  821. data/sample/tkextlib/tile/themes/keramik/keramik/vsb-n.gif +0 -0
  822. data/sample/tkextlib/tile/themes/keramik/keramik/vsb-p.gif +0 -0
  823. data/sample/tkextlib/tile/themes/keramik/keramik/vslider-n.gif +0 -0
  824. data/sample/tkextlib/tile/themes/keramik/pkgIndex.tcl +15 -0
  825. data/sample/tkextlib/tile/themes/kroc.rb +227 -0
  826. data/sample/tkextlib/tile/themes/kroc/kroc.tcl +163 -0
  827. data/sample/tkextlib/tile/themes/kroc/kroc/button-h.gif +0 -0
  828. data/sample/tkextlib/tile/themes/kroc/kroc/button-n.gif +0 -0
  829. data/sample/tkextlib/tile/themes/kroc/kroc/button-p.gif +0 -0
  830. data/sample/tkextlib/tile/themes/kroc/kroc/check-hc.gif +0 -0
  831. data/sample/tkextlib/tile/themes/kroc/kroc/check-hu.gif +0 -0
  832. data/sample/tkextlib/tile/themes/kroc/kroc/check-nc.gif +0 -0
  833. data/sample/tkextlib/tile/themes/kroc/kroc/check-nu.gif +0 -0
  834. data/sample/tkextlib/tile/themes/kroc/kroc/radio-hc.gif +0 -0
  835. data/sample/tkextlib/tile/themes/kroc/kroc/radio-hu.gif +0 -0
  836. data/sample/tkextlib/tile/themes/kroc/kroc/radio-nc.gif +0 -0
  837. data/sample/tkextlib/tile/themes/kroc/kroc/radio-nu.gif +0 -0
  838. data/sample/tkextlib/tile/themes/kroc/pkgIndex.tcl +15 -0
  839. data/sample/tkextlib/tile/themes/plastik/pkgIndex.tcl +16 -0
  840. data/sample/tkextlib/tile/themes/plastik/plastik.tcl +125 -0
  841. data/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-n.gif +0 -0
  842. data/sample/tkextlib/tile/themes/plastik/plastik/arrowdown-p.gif +0 -0
  843. data/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-n.gif +0 -0
  844. data/sample/tkextlib/tile/themes/plastik/plastik/arrowleft-p.gif +0 -0
  845. data/sample/tkextlib/tile/themes/plastik/plastik/arrowright-n.gif +0 -0
  846. data/sample/tkextlib/tile/themes/plastik/plastik/arrowright-p.gif +0 -0
  847. data/sample/tkextlib/tile/themes/plastik/plastik/arrowup-n.gif +0 -0
  848. data/sample/tkextlib/tile/themes/plastik/plastik/arrowup-p.gif +0 -0
  849. data/sample/tkextlib/tile/themes/plastik/plastik/button-h.gif +0 -0
  850. data/sample/tkextlib/tile/themes/plastik/plastik/button-n.gif +0 -0
  851. data/sample/tkextlib/tile/themes/plastik/plastik/button-p.gif +0 -0
  852. data/sample/tkextlib/tile/themes/plastik/plastik/check-hc.gif +0 -0
  853. data/sample/tkextlib/tile/themes/plastik/plastik/check-hu.gif +0 -0
  854. data/sample/tkextlib/tile/themes/plastik/plastik/check-nc.gif +0 -0
  855. data/sample/tkextlib/tile/themes/plastik/plastik/check-nu.gif +0 -0
  856. data/sample/tkextlib/tile/themes/plastik/plastik/check-pc.gif +0 -0
  857. data/sample/tkextlib/tile/themes/plastik/plastik/hsb-n.gif +0 -0
  858. data/sample/tkextlib/tile/themes/plastik/plastik/hslider-n.gif +0 -0
  859. data/sample/tkextlib/tile/themes/plastik/plastik/radio-hc.gif +0 -0
  860. data/sample/tkextlib/tile/themes/plastik/plastik/radio-hu.gif +0 -0
  861. data/sample/tkextlib/tile/themes/plastik/plastik/radio-nc.gif +0 -0
  862. data/sample/tkextlib/tile/themes/plastik/plastik/radio-nu.gif +0 -0
  863. data/sample/tkextlib/tile/themes/plastik/plastik/radio-pc.gif +0 -0
  864. data/sample/tkextlib/tile/themes/plastik/plastik/vsb-n.gif +0 -0
  865. data/sample/tkextlib/tile/themes/plastik/plastik/vslider-n.gif +0 -0
  866. data/sample/tkextlib/tile/toolbutton.tcl +152 -0
  867. data/sample/tkextlib/tkHTML/Orig_COPYRIGHT.txt +12 -0
  868. data/sample/tkextlib/tkHTML/README +12 -0
  869. data/sample/tkextlib/tkHTML/hv.rb +314 -0
  870. data/sample/tkextlib/tkHTML/page1/image1 +0 -0
  871. data/sample/tkextlib/tkHTML/page1/image10 +0 -0
  872. data/sample/tkextlib/tkHTML/page1/image11 +0 -0
  873. data/sample/tkextlib/tkHTML/page1/image12 +0 -0
  874. data/sample/tkextlib/tkHTML/page1/image13 +0 -0
  875. data/sample/tkextlib/tkHTML/page1/image14 +0 -0
  876. data/sample/tkextlib/tkHTML/page1/image2 +0 -0
  877. data/sample/tkextlib/tkHTML/page1/image3 +0 -0
  878. data/sample/tkextlib/tkHTML/page1/image4 +0 -0
  879. data/sample/tkextlib/tkHTML/page1/image5 +0 -0
  880. data/sample/tkextlib/tkHTML/page1/image6 +0 -0
  881. data/sample/tkextlib/tkHTML/page1/image7 +0 -0
  882. data/sample/tkextlib/tkHTML/page1/image8 +0 -0
  883. data/sample/tkextlib/tkHTML/page1/image9 +0 -0
  884. data/sample/tkextlib/tkHTML/page1/index.html +115 -0
  885. data/sample/tkextlib/tkHTML/page2/image1 +0 -0
  886. data/sample/tkextlib/tkHTML/page2/image10 +0 -0
  887. data/sample/tkextlib/tkHTML/page2/image11 +0 -0
  888. data/sample/tkextlib/tkHTML/page2/image12 +0 -0
  889. data/sample/tkextlib/tkHTML/page2/image13 +0 -0
  890. data/sample/tkextlib/tkHTML/page2/image14 +0 -0
  891. data/sample/tkextlib/tkHTML/page2/image15 +0 -0
  892. data/sample/tkextlib/tkHTML/page2/image16 +0 -0
  893. data/sample/tkextlib/tkHTML/page2/image17 +0 -0
  894. data/sample/tkextlib/tkHTML/page2/image18 +0 -0
  895. data/sample/tkextlib/tkHTML/page2/image19 +0 -0
  896. data/sample/tkextlib/tkHTML/page2/image2 +0 -0
  897. data/sample/tkextlib/tkHTML/page2/image20 +0 -0
  898. data/sample/tkextlib/tkHTML/page2/image21 +0 -0
  899. data/sample/tkextlib/tkHTML/page2/image22 +0 -0
  900. data/sample/tkextlib/tkHTML/page2/image23 +0 -0
  901. data/sample/tkextlib/tkHTML/page2/image24 +0 -0
  902. data/sample/tkextlib/tkHTML/page2/image25 +0 -0
  903. data/sample/tkextlib/tkHTML/page2/image26 +0 -0
  904. data/sample/tkextlib/tkHTML/page2/image27 +0 -0
  905. data/sample/tkextlib/tkHTML/page2/image28 +0 -0
  906. data/sample/tkextlib/tkHTML/page2/image29 +0 -0
  907. data/sample/tkextlib/tkHTML/page2/image3 +0 -0
  908. data/sample/tkextlib/tkHTML/page2/image30 +0 -0
  909. data/sample/tkextlib/tkHTML/page2/image31 +0 -0
  910. data/sample/tkextlib/tkHTML/page2/image32 +0 -0
  911. data/sample/tkextlib/tkHTML/page2/image33 +0 -0
  912. data/sample/tkextlib/tkHTML/page2/image34 +0 -0
  913. data/sample/tkextlib/tkHTML/page2/image35 +0 -0
  914. data/sample/tkextlib/tkHTML/page2/image36 +0 -0
  915. data/sample/tkextlib/tkHTML/page2/image37 +0 -0
  916. data/sample/tkextlib/tkHTML/page2/image38 +0 -0
  917. data/sample/tkextlib/tkHTML/page2/image39 +0 -0
  918. data/sample/tkextlib/tkHTML/page2/image4 +0 -0
  919. data/sample/tkextlib/tkHTML/page2/image5 +0 -0
  920. data/sample/tkextlib/tkHTML/page2/image6 +0 -0
  921. data/sample/tkextlib/tkHTML/page2/image7 +0 -0
  922. data/sample/tkextlib/tkHTML/page2/image8 +0 -0
  923. data/sample/tkextlib/tkHTML/page2/image9 +0 -0
  924. data/sample/tkextlib/tkHTML/page2/index.html +433 -0
  925. data/sample/tkextlib/tkHTML/page3/image1 +0 -0
  926. data/sample/tkextlib/tkHTML/page3/image10 +0 -0
  927. data/sample/tkextlib/tkHTML/page3/image11 +0 -0
  928. data/sample/tkextlib/tkHTML/page3/image12 +0 -0
  929. data/sample/tkextlib/tkHTML/page3/image13 +0 -0
  930. data/sample/tkextlib/tkHTML/page3/image14 +0 -0
  931. data/sample/tkextlib/tkHTML/page3/image2 +0 -0
  932. data/sample/tkextlib/tkHTML/page3/image3 +0 -0
  933. data/sample/tkextlib/tkHTML/page3/image4 +0 -0
  934. data/sample/tkextlib/tkHTML/page3/image5 +0 -0
  935. data/sample/tkextlib/tkHTML/page3/image6 +0 -0
  936. data/sample/tkextlib/tkHTML/page3/image7 +0 -0
  937. data/sample/tkextlib/tkHTML/page3/image8 +0 -0
  938. data/sample/tkextlib/tkHTML/page3/image9 +0 -0
  939. data/sample/tkextlib/tkHTML/page3/index.html +2787 -0
  940. data/sample/tkextlib/tkHTML/page4/image1 +0 -0
  941. data/sample/tkextlib/tkHTML/page4/image2 +0 -0
  942. data/sample/tkextlib/tkHTML/page4/image3 +0 -0
  943. data/sample/tkextlib/tkHTML/page4/image4 +0 -0
  944. data/sample/tkextlib/tkHTML/page4/image5 +0 -0
  945. data/sample/tkextlib/tkHTML/page4/image6 +0 -0
  946. data/sample/tkextlib/tkHTML/page4/image7 +0 -0
  947. data/sample/tkextlib/tkHTML/page4/image8 +0 -0
  948. data/sample/tkextlib/tkHTML/page4/image9 +0 -0
  949. data/sample/tkextlib/tkHTML/page4/index.html +768 -0
  950. data/sample/tkextlib/tkHTML/ss.rb +437 -0
  951. data/sample/tkextlib/tkimg/demo.rb +1479 -0
  952. data/sample/tkextlib/tkimg/license_terms_of_Img_extension +41 -0
  953. data/sample/tkextlib/tkimg/readme.txt +3 -0
  954. data/sample/tkextlib/tktable/Orig_LICENSE.txt +52 -0
  955. data/sample/tkextlib/tktable/basic.rb +61 -0
  956. data/sample/tkextlib/tktable/buttons.rb +77 -0
  957. data/sample/tkextlib/tktable/command.rb +90 -0
  958. data/sample/tkextlib/tktable/debug.rb +102 -0
  959. data/sample/tkextlib/tktable/dynarows.rb +100 -0
  960. data/sample/tkextlib/tktable/maxsize.rb +68 -0
  961. data/sample/tkextlib/tktable/spreadsheet.rb +138 -0
  962. data/sample/tkextlib/tktable/tcllogo.gif +0 -0
  963. data/sample/tkextlib/tktable/valid.rb +89 -0
  964. data/sample/tkextlib/treectrl/bitmaps.rb +77 -0
  965. data/sample/tkextlib/treectrl/demo.rb +1306 -0
  966. data/sample/tkextlib/treectrl/explorer.rb +431 -0
  967. data/sample/tkextlib/treectrl/help.rb +405 -0
  968. data/sample/tkextlib/treectrl/imovie.rb +131 -0
  969. data/sample/tkextlib/treectrl/layout.rb +160 -0
  970. data/sample/tkextlib/treectrl/mailwasher.rb +270 -0
  971. data/sample/tkextlib/treectrl/outlook-folders.rb +125 -0
  972. data/sample/tkextlib/treectrl/outlook-newgroup.rb +449 -0
  973. data/sample/tkextlib/treectrl/pics/big-dll.gif +0 -0
  974. data/sample/tkextlib/treectrl/pics/big-exe.gif +0 -0
  975. data/sample/tkextlib/treectrl/pics/big-file.gif +0 -0
  976. data/sample/tkextlib/treectrl/pics/big-folder.gif +0 -0
  977. data/sample/tkextlib/treectrl/pics/big-txt.gif +0 -0
  978. data/sample/tkextlib/treectrl/pics/checked.gif +0 -0
  979. data/sample/tkextlib/treectrl/pics/file.gif +0 -0
  980. data/sample/tkextlib/treectrl/pics/folder-closed.gif +0 -0
  981. data/sample/tkextlib/treectrl/pics/folder-open.gif +0 -0
  982. data/sample/tkextlib/treectrl/pics/help-book-closed.gif +0 -0
  983. data/sample/tkextlib/treectrl/pics/help-book-open.gif +0 -0
  984. data/sample/tkextlib/treectrl/pics/help-page.gif +0 -0
  985. data/sample/tkextlib/treectrl/pics/imovie-01.gif +0 -0
  986. data/sample/tkextlib/treectrl/pics/imovie-02.gif +0 -0
  987. data/sample/tkextlib/treectrl/pics/imovie-03.gif +0 -0
  988. data/sample/tkextlib/treectrl/pics/imovie-04.gif +0 -0
  989. data/sample/tkextlib/treectrl/pics/imovie-05.gif +0 -0
  990. data/sample/tkextlib/treectrl/pics/imovie-06.gif +0 -0
  991. data/sample/tkextlib/treectrl/pics/imovie-07.gif +0 -0
  992. data/sample/tkextlib/treectrl/pics/internet-check-off.gif +0 -0
  993. data/sample/tkextlib/treectrl/pics/internet-check-on.gif +0 -0
  994. data/sample/tkextlib/treectrl/pics/internet-print.gif +0 -0
  995. data/sample/tkextlib/treectrl/pics/internet-radio-off.gif +0 -0
  996. data/sample/tkextlib/treectrl/pics/internet-radio-on.gif +0 -0
  997. data/sample/tkextlib/treectrl/pics/internet-search.gif +0 -0
  998. data/sample/tkextlib/treectrl/pics/internet-security.gif +0 -0
  999. data/sample/tkextlib/treectrl/pics/mac-collapse.gif +0 -0
  1000. data/sample/tkextlib/treectrl/pics/mac-expand.gif +0 -0
  1001. data/sample/tkextlib/treectrl/pics/outlook-arrow.gif +0 -0
  1002. data/sample/tkextlib/treectrl/pics/outlook-clip.gif +0 -0
  1003. data/sample/tkextlib/treectrl/pics/outlook-deleted.gif +0 -0
  1004. data/sample/tkextlib/treectrl/pics/outlook-draft.gif +0 -0
  1005. data/sample/tkextlib/treectrl/pics/outlook-folder.gif +0 -0
  1006. data/sample/tkextlib/treectrl/pics/outlook-group.gif +0 -0
  1007. data/sample/tkextlib/treectrl/pics/outlook-inbox.gif +0 -0
  1008. data/sample/tkextlib/treectrl/pics/outlook-local.gif +0 -0
  1009. data/sample/tkextlib/treectrl/pics/outlook-main.gif +0 -0
  1010. data/sample/tkextlib/treectrl/pics/outlook-outbox.gif +0 -0
  1011. data/sample/tkextlib/treectrl/pics/outlook-read-2.gif +0 -0
  1012. data/sample/tkextlib/treectrl/pics/outlook-read.gif +0 -0
  1013. data/sample/tkextlib/treectrl/pics/outlook-sent.gif +0 -0
  1014. data/sample/tkextlib/treectrl/pics/outlook-server.gif +0 -0
  1015. data/sample/tkextlib/treectrl/pics/outlook-unread.gif +0 -0
  1016. data/sample/tkextlib/treectrl/pics/outlook-watch.gif +0 -0
  1017. data/sample/tkextlib/treectrl/pics/sky.gif +0 -0
  1018. data/sample/tkextlib/treectrl/pics/small-dll.gif +0 -0
  1019. data/sample/tkextlib/treectrl/pics/small-exe.gif +0 -0
  1020. data/sample/tkextlib/treectrl/pics/small-file.gif +0 -0
  1021. data/sample/tkextlib/treectrl/pics/small-folder.gif +0 -0
  1022. data/sample/tkextlib/treectrl/pics/small-txt.gif +0 -0
  1023. data/sample/tkextlib/treectrl/pics/unchecked.gif +0 -0
  1024. data/sample/tkextlib/treectrl/random.rb +509 -0
  1025. data/sample/tkextlib/treectrl/readme.txt +2 -0
  1026. data/sample/tkextlib/treectrl/www-options.rb +304 -0
  1027. data/sample/tkextlib/vu/Orig_LICENSE.txt +51 -0
  1028. data/sample/tkextlib/vu/README.txt +50 -0
  1029. data/sample/tkextlib/vu/canvItems.rb +91 -0
  1030. data/sample/tkextlib/vu/canvSticker.rb +83 -0
  1031. data/sample/tkextlib/vu/canvSticker2.rb +102 -0
  1032. data/sample/tkextlib/vu/dial_demo.rb +114 -0
  1033. data/sample/tkextlib/vu/m128_000.xbm +174 -0
  1034. data/sample/tkextlib/vu/oscilloscope.rb +69 -0
  1035. data/sample/tkextlib/vu/pie.rb +57 -0
  1036. data/sample/tkextlib/vu/vu_demo.rb +68 -0
  1037. data/sample/tkfrom.rb +133 -0
  1038. data/sample/tkhello.rb +11 -0
  1039. data/sample/tkline.rb +48 -0
  1040. data/sample/tkmenubutton.rb +136 -0
  1041. data/sample/tkmsgcat-load_rb.rb +103 -0
  1042. data/sample/tkmsgcat-load_rb2.rb +103 -0
  1043. data/sample/tkmsgcat-load_tk.rb +119 -0
  1044. data/sample/tkmulticolumnlist.rb +744 -0
  1045. data/sample/tkmultilistbox.rb +655 -0
  1046. data/sample/tkmultilistframe.rb +941 -0
  1047. data/sample/tkoptdb-safeTk.rb +74 -0
  1048. data/sample/tkoptdb.rb +107 -0
  1049. data/sample/tkrttimer.rb +78 -0
  1050. data/sample/tksleep_sample.rb +30 -0
  1051. data/sample/tktextframe.rb +282 -0
  1052. data/sample/tktextio.rb +1061 -0
  1053. data/sample/tktimer.rb +51 -0
  1054. data/sample/tktimer2.rb +48 -0
  1055. data/sample/tktimer3.rb +60 -0
  1056. data/sample/tktree.rb +104 -0
  1057. data/sample/tktree.tcl +305 -0
  1058. data/sample/ttk_wrapper.rb +155 -0
  1059. data/tk.gemspec +24 -0
  1060. metadata +1144 -0
@@ -0,0 +1,2098 @@
1
+ # frozen_string_literal: false
2
+ ##############################################################
3
+ # extconf.rb for tcltklib
4
+ # release date: 2010-07-30
5
+ ##############################################################
6
+ require 'mkmf'
7
+
8
+ TkLib_Config = {}
9
+ TkLib_Config['search_versions'] =
10
+ # %w[8.9 8.8 8.7 8.6 8.5 8.4 8.3 8.2 8.1 8.0 7.6 4.2]
11
+ # %w[8.7 8.6 8.5 8.4 8.3 8.2 8.1 8.0]
12
+ # %w[8.7 8.6 8.5 8.4 8.0] # to shorten search steps
13
+ %w[8.6 8.5 8.4]
14
+
15
+ TkLib_Config['unsupported_versions'] =
16
+ %w[8.8 8.7]
17
+
18
+ TkLib_Config['major_nums'] = '87'
19
+
20
+
21
+ ##############################################################
22
+
23
+ TkLib_Config['enable-shared'] = enable_config("shared")
24
+
25
+
26
+ ##############################################################
27
+ # use old extconf.rb ?
28
+ ##############################################################
29
+ if with_config('tk-old-extconf')
30
+ require File.join(File.dirname(__FILE__), 'old-extconf.rb')
31
+ exit
32
+ end
33
+
34
+
35
+ ##############################################################
36
+ # check configs
37
+ ##############################################################
38
+ ($cleanfiles ||= "") << 'config_list'
39
+ config_list_file = 'config_list'
40
+ config_list_file_source = File.join(File.dirname(__FILE__),'config_list.in')
41
+ if !File.exist?(config_list_file) ||
42
+ File.ctime(config_list_file_source) > File.ctime(config_list_file)
43
+ old_config_list_file = config_list_file_source
44
+ else
45
+ old_config_list_file = config_list_file
46
+ end
47
+
48
+ current_configs = {'with'=>{}, 'enable'=>{}}
49
+
50
+ # setup keys by config_list.in
51
+ IO.foreach(config_list_file_source){|line|
52
+ line.chomp!
53
+ line.lstrip!
54
+ next if line.empty? || line =~ /^\#/ #
55
+ mode, key, value = line.split(/\s+/, 3)
56
+ value ||= ""
57
+ current_configs[mode][key] = value rescue nil
58
+ }
59
+
60
+ # define current value of keys
61
+ IO.foreach(old_config_list_file){|line|
62
+ line.chomp!
63
+ line.lstrip!
64
+ next if line.empty? || line =~ /^\#/ #
65
+ mode, key, value = line.split(/\s+/, 3)
66
+ value ||= ""
67
+ if current_configs[mode] && current_configs[mode].has_key?(key)
68
+ current_configs[mode][key] = value
69
+ end
70
+ }
71
+
72
+ update_flag = false
73
+ current_configs['with'].each_key{|key|
74
+ if (value = with_config(key).to_s) != current_configs['with'][key]
75
+ update_flag = true
76
+ current_configs['with'][key] = value
77
+ end
78
+ }
79
+ current_configs['enable'].each_key{|key|
80
+ if (value = enable_config(key).to_s) != current_configs['enable'][key]
81
+ update_flag = true
82
+ current_configs['enable'][key] = value
83
+ end
84
+ }
85
+
86
+ # update current_configs
87
+ if update_flag || !File.exist?(config_list_file)
88
+ open(config_list_file, 'w'){|fobj|
89
+ fobj.print("# values of current configure options (generated by extconf.rb)\n");
90
+ ['with', 'enable'].each{|mode|
91
+ current_configs[mode].each_key{|key|
92
+ fobj.print("#{mode} #{key} #{current_configs[mode][key]}\n")
93
+ }
94
+ }
95
+ }
96
+ end
97
+
98
+ if update_flag
99
+ puts "Configure options for Ruby/Tk may be updated."
100
+ puts "So, delete files which depend on old configs."
101
+ File.delete(*Dir.glob("*.#{CONFIG['DLEXT']}", File::FNM_CASEFOLD))
102
+ File.delete(*Dir.glob("*.#{$OBJEXT}", File::FNM_CASEFOLD))
103
+ File.delete('Makefile') rescue nil
104
+
105
+ else
106
+ makefile = 'Makefile'
107
+ if File.exist?(makefile) &&
108
+ File.ctime(config_list_file) > File.ctime(makefile)
109
+ # no need to update Makefile
110
+ exit
111
+ end
112
+ end
113
+
114
+
115
+ ##############################################################
116
+ # functions
117
+ ##############################################################
118
+ def is_win32?
119
+ /mswin|mingw|cygwin|bccwin/ =~ RUBY_PLATFORM
120
+ end
121
+
122
+ def is_macosx?
123
+ /darwin/ =~ RUBY_PLATFORM
124
+ end
125
+
126
+ def maybe_64bit?
127
+ /64|universal|s390x/ =~ RUBY_PLATFORM
128
+ end
129
+
130
+ if defined?(Logging.quiet) and Logging.quiet and /--jobserver-fds=/ !~ ENV["MAKEFLAGS"]
131
+ def progress(s)
132
+ print(s)
133
+ end
134
+ def newline
135
+ end
136
+ else
137
+ def progress(s)
138
+ end
139
+ def newline
140
+ puts
141
+ end
142
+ end
143
+
144
+ def check_tcltk_version(version)
145
+ return [nil, nil] unless version.kind_of? String
146
+
147
+ tclver, tkver = version.split(',')
148
+ tclver = tclver.strip
149
+ return [tclver, tkver.strip] if tkver
150
+
151
+ dot = major = minor_dot = minor = plvl_dot = plvl = ext = nil
152
+ if tclver =~ /^(\d)(\.?)(\d)(\.?)(\d*)(.*)$/
153
+ major = $1; minor_dot = $2; minor = $3; plvl_dot = $4; plvl = $5; ext = $6
154
+ dot = ! minor_dot.empty?
155
+ if plvl_dot.empty? && ! plvl.empty?
156
+ minor << plvl
157
+ end
158
+ elsif tclver =~ /^(\d)(\.?)(\d?)(.*)$/
159
+ major = $1; minor_dot = $2; minor = $3; ext = $4
160
+ dot = ! minor_dot.empty?
161
+ else # unknown -> believe user
162
+ return [tclver, tkver]
163
+ end
164
+
165
+ # check Tcl7.6 / Tk4.2 ?
166
+ if major == "7" # Tcl7.6 ( not support Tclversion < 7.6 )
167
+ # Tk4.2
168
+ tkver = "4" + ((dot)? ".": "") + ((minor.empty)? "": "2") + ext
169
+ elsif major == "4" # Tk4.2 ( not support Tkversion < 4.2 )
170
+ # Tcl7.6
171
+ tkver = tclver
172
+ tclver = "7" + ((dot)? ".": "") + ((minor.empty)? "": "6") + ext
173
+ end
174
+
175
+ tkver = tclver unless tkver
176
+
177
+ [tclver, tkver]
178
+ end
179
+
180
+ def get_shlib_versions(major = 8, minor_max = 9, minor_min = 0, ext = "")
181
+ if tclcfg = TkLib_Config["tclConfig_info"]
182
+ major = tclcfg['TCL_MAJOR_VERSION'].to_i
183
+ minor_min = tclcfg['TCL_MINOR_VERSION'].to_i
184
+
185
+ elsif TkLib_Config["tcltkversion"]
186
+ tclver, tkver = TkLib_Config["tcltkversion"]
187
+ if tclver =~ /8\.?(\d)(.*)/
188
+ minor_min = $1.to_i
189
+ ext = $2
190
+ else
191
+ # unsupported version
192
+ return [""]
193
+ end
194
+ end
195
+
196
+ # if disable-stubs, version is fixed.
197
+ minor_max = minor_min unless TkLib_Config["tcltk-stubs"]
198
+
199
+ vers = []
200
+ minor_max.downto(minor_min){|minor|
201
+ vers << "#{major}.#{minor}#{ext}" unless ext.empty?
202
+ vers << "#{major}.#{minor}"
203
+ }
204
+
205
+ vers << ""
206
+ end
207
+
208
+ def get_shlib_path_head
209
+ path_head = []
210
+ path_dirs = []
211
+
212
+ if TkLib_Config["ActiveTcl"].kind_of?(String) # glob path
213
+ # path_head << TkLib_Config["ActiveTcl"]
214
+ path_head.concat Dir.glob(TkLib_Config["ActiveTcl"], File::FNM_CASEFOLD).sort.reverse
215
+ # path_dirs.concat Dir.glob(File.join(TkLib_Config["ActiveTcl"], 'lib'), File::FNM_CASEFOLD).sort.reverse
216
+ end
217
+
218
+ if CROSS_COMPILING
219
+ elsif is_win32?
220
+ if TkLib_Config["ActiveTcl"]
221
+ path_head.concat ["c:/ActiveTcl", "c:/Program Files/ActiveTcl",
222
+ "c:/Program Files (x86)/ActiveTcl"]
223
+ end
224
+ path_head.concat [
225
+ "c:/Tcl", "c:/Program Files/Tcl", "c:/Program Files (x86)/Tcl",
226
+ "/Tcl", "/Program Files/Tcl", "/Program Files (x86)/Tcl"
227
+ ]
228
+ path_head.uniq!
229
+ #path_head.each{|dir| path_dirs << dir.dup if File.directory? dir}
230
+ path_head.each{|dir| path_dirs << File.expand_path(dir) if File.directory? dir}
231
+
232
+ # for MinGW
233
+ ["/usr/local/lib64", "/usr/lib64", "/usr/local/lib", "/usr/lib"].each{|dir|
234
+ #path_dirs << dir if File.directory? dir
235
+ path_dirs << File.expand_path(dir) if File.directory? dir
236
+ }
237
+ path_dirs |= ENV['LIBRARY_PATH'].split(';').find_all{|dir| File.directory? dir}.map{|dir| File.expand_path(dir)} if ENV['LIBRARY_PATH']
238
+ path_dirs |= ENV['PATH'].split(';').find_all{|dir| File.directory? dir}.map{|dir| File.expand_path(dir)} if ENV['PATH']
239
+
240
+ else
241
+ [
242
+ '/opt', '/pkg', '/share',
243
+ '/usr/local/opt', '/usr/local/pkg', '/usr/local/share', '/usr/local',
244
+ '/usr/opt', '/usr/pkg', '/usr/share', '/usr/contrib', '/usr'
245
+ ].each{|dir|
246
+ next unless File.directory?(dir)
247
+
248
+ path_dirs << "#{dir}/lib64" if maybe_64bit?
249
+ path_dirs << "#{dir}/lib"
250
+ path_dirs << "#{dir}" unless Dir.glob("#{dir}/lib*.*", File::FNM_CASEFOLD).empty?
251
+
252
+ dirnames = []
253
+ if TkLib_Config["ActiveTcl"]
254
+ dirnames.concat ["ActiveTcl"]
255
+ end
256
+ dirnames.concat ["TclTk","Tcl_Tk","Tcl-Tk"]
257
+
258
+ dirnames.each{|name|
259
+ path_dirs << "#{dir}/#{name}" if File.directory?("#{dir}/#{name}")
260
+ path_head << "#{dir}/#{name}" unless Dir.glob("#{dir}/#{name}[-89_]*", File::FNM_CASEFOLD).empty?
261
+ }
262
+ }
263
+ end
264
+
265
+ unless TkLib_Config["space-on-tk-libpath"]
266
+ path_head.delete_if{|path| path =~ / /}
267
+ path_dirs.delete_if{|path| path =~ / /}
268
+ end
269
+
270
+ [path_head, path_dirs]
271
+ end
272
+
273
+ def find_macosx_framework
274
+ use_framework = is_macosx? && TkLib_Config["ActiveTcl"]
275
+
276
+ use_framework ||= (tcl_hdr = with_config("tcl-framework-header"))
277
+ use_framework ||= (tk_hdr = with_config("tk-framework-header"))
278
+ tcl_hdr = nil unless tcl_hdr.kind_of? String
279
+ tk_hdr = nil unless tk_hdr.kind_of? String
280
+ TkLib_Config["tcl-framework-header"] = tcl_hdr
281
+ TkLib_Config["tk-framework-header"] = tk_hdr
282
+
283
+ use_framework ||= (tcl_dir = with_config("tcl-framework-dir"))
284
+ tcl_dir = nil unless tcl_dir.kind_of? String
285
+ if !tcl_dir && tcl_hdr
286
+ # e.g. /Library/Frameworks/Tcl.framework/Headers
287
+ # ==> /Library/Frameworks/Tcl.framework
288
+ tcl_dir = File.dirname(tcl_hdr.strip.chomp('/'))
289
+ end
290
+ TkLib_Config["tcl-framework-dir"] = tcl_dir
291
+
292
+ use_framework ||= (tk_dir = with_config("tk-framework-dir"))
293
+ tk_dir = nil unless tk_dir.kind_of? String
294
+ if !tk_dir && tk_hdr
295
+ # e.g. /Library/Frameworks/Tk.framework/Headers
296
+ # ==> /Library/Frameworks/Tk.framework
297
+ tk_dir = File.dirname(tk_hdr.strip.chomp('/'))
298
+ end
299
+ TkLib_Config["tk-framework-dir"] = tk_dir
300
+
301
+ if tcl_dir && !tk_dir
302
+ tk_dir = File.join(File.dirname(tcl_dir), 'Tk.framework')
303
+ TkLib_Config["tk-framework-dir"] = tk_dir
304
+ elsif !tcl_dir && tk_dir
305
+ tcl_dir = File.join(File.dirname(tk_dir), 'Tcl.framework')
306
+ TkLib_Config["tcl-framework-dir"] = tcl_dir
307
+ end
308
+ if tcl_dir && tk_dir
309
+ TkLib_Config["tcltk-framework"] = File.dirname(tcl_dir) unless TkLib_Config["tcltk-framework"]
310
+ return [tcl_dir, tk_dir]
311
+ end
312
+
313
+ # framework is disabled?
314
+ if with_config("tcltk-framework") == false ||
315
+ enable_config("tcltk-framework") == false
316
+ return false
317
+ end
318
+
319
+ use_framework ||= (framework_dir = with_config("tcltk-framework"))
320
+ if framework_dir.kind_of? String
321
+ TkLib_Config["tcltk-framework"] = framework_dir.strip.chomp('/')
322
+ return [File.join(TkLib_Config["tcltk-framework"], 'Tcl.framework'),
323
+ File.join(TkLib_Config["tcltk-framework"], 'Tk.framework')]
324
+ end
325
+
326
+ unless enable_config("tcltk-framework", use_framework) ||
327
+ enable_config("mac-tcltk-framework", use_framework)
328
+ TkLib_Config["tcltk-framework"] = false
329
+ return false
330
+ end
331
+
332
+ paths = [
333
+ #"~/Library/Frameworks",
334
+ "/Library/Frameworks",
335
+ "/Network/Library/Frameworks", "/System/Library/Frameworks"
336
+ ]
337
+ paths.reverse! unless TkLib_Config["ActiveTcl"] # system has higher priority
338
+
339
+ paths.map{|dir| dir.strip.chomp('/')}.each{|dir|
340
+ next unless File.exist?(File.join(dir, "Tcl.framework", "Headers"))
341
+ next unless File.directory?(tcldir = File.join(dir, "Tcl.framework"))
342
+ next unless File.exist?(File.join(dir, "Tk.framework", "Headers"))
343
+ next unless File.directory?(tkdir = File.join(dir, "Tk.framework"))
344
+ TkLib_Config["tcltk-framework"] = dir
345
+ return [tcldir, tkdir]
346
+ }
347
+
348
+ nil
349
+ end
350
+
351
+ def collect_tcltk_defs(tcl_defs_str, tk_defs_str)
352
+ conflicts = [
353
+ 'PACKAGE_NAME', 'PACKAGE_TARNAME', 'PACKAGE_VERSION',
354
+ 'PACKAGE_STRING', 'PACKAGE_BUGREPORT'
355
+ ]
356
+
357
+ begin
358
+ # Ruby 1.9.x or later
359
+ arch_config_h = RbConfig.expand($arch_hdrdir + "/ruby/config.h")
360
+ if File.exist?(arch_config_h)
361
+ keys = []
362
+ IO.foreach(arch_config_h){|line|
363
+ if line =~ /^#define +([^ ]+)/
364
+ keys << $1
365
+ end
366
+ }
367
+ conflicts = keys
368
+ end
369
+ rescue
370
+ # ignore, use default
371
+ end
372
+
373
+ if tcl_defs_str
374
+ tcl_defs = tcl_defs_str.split(/(?:\A|\s)\s*-D/).map{|s|
375
+ s =~ /^([^=]+)(.*)$/
376
+ [$1, $2]
377
+ }
378
+ else
379
+ tcl_defs = []
380
+ end
381
+
382
+ if tk_defs_str
383
+ tk_defs = tk_defs_str.split(/(?:\A|\s)\s*-D/).map{|s|
384
+ s =~ /^([^=]+)(.*)$/
385
+ [$1, $2]
386
+ }
387
+ else
388
+ tk_defs = []
389
+ end
390
+
391
+ defs = tcl_defs | tk_defs
392
+
393
+ defs.delete_if{|name,value|
394
+ conflicts.include?(name) ||
395
+ ( (vtcl = tcl_defs.assoc(name)) && (vtk = tk_defs.assoc(name)) &&
396
+ vtcl != vtk )
397
+ }
398
+
399
+ defs.map{|ary| /\S/ =~ (s = ary.join('')) and "-D" << s.strip}.compact
400
+ end
401
+
402
+ def parse_tclConfig(file)
403
+ # check tclConfig.sh/tkConfig.sh
404
+ tbl = Hash.new{|h,k| h[k] = ""}
405
+ return tbl unless file
406
+ IO.foreach(file){|line|
407
+ line.strip!
408
+ next if line !~ /^([^\#=][^=]*)=(['"]|)(.*)\2$/
409
+ key, val = $1, $3
410
+ tbl[key] = val.gsub(/\$\{([^}]+)\}/){|s|
411
+ subst = $1
412
+ (tbl[subst])? tbl[subst]: s
413
+ } rescue nil
414
+ }
415
+ tbl
416
+ end
417
+
418
+ def get_libpath(lib_flag, lib_spec)
419
+ # get libpath from {TCL,Tk}_LIB_FLAG and {TCL,Tk}_LIB_SPEC
420
+ lib_spec.gsub(/(#{lib_flag}|-L)/, "").strip
421
+ end
422
+
423
+ def get_tclConfig_dirs
424
+ config_dir = []
425
+
426
+ if CROSS_COMPILING
427
+ elsif is_win32?
428
+ if TkLib_Config["ActiveTcl"]
429
+ dirs = []
430
+ if TkLib_Config["ActiveTcl"].kind_of?(String)
431
+ dirs << File.join(TkLib_Config["ActiveTcl"], 'lib')
432
+ end
433
+ dirs.concat [
434
+ "c:/ActiveTcl*/lib", "c:/Tcl*/lib",
435
+ "c:/Program Files*/ActiveTcl*/lib", "c:/Program Files*/Tcl*/lib",
436
+ "/ActiveTcl*/lib", "/Tcl*/lib",
437
+ "/Program Files*/ActiveTcl*/lib", "/Program Files*/Tcl*/lib"
438
+ ]
439
+ else
440
+ dirs = [
441
+ "c:/Tcl*/lib", "c:/Program Files*/Tcl*/lib",
442
+ "/Tcl*/lib", "/Program Files*/Tcl*/lib"
443
+ ]
444
+ end
445
+ dirs = dirs.collect{|d| Dir.glob(d, File::FNM_CASEFOLD)}.flatten.uniq
446
+
447
+ dirs |= ENV['LIBRARY_PATH'].split(';') if ENV['LIBRARY_PATH']
448
+ dirs |= ENV['PATH'].split(';') if ENV['PATH']
449
+
450
+ exeext = RbConfig::CONFIG['EXEEXT']
451
+ ENV['PATH'].split(File::PATH_SEPARATOR).each{|dir|
452
+ dir.tr!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
453
+ next if Dir.glob(File.join(dir, "{tclsh,wish}*#{exeext}"), File::FNM_CASEFOLD).empty?
454
+ dirs << File.expand_path(File.join(dir, '..', 'lib'))
455
+ dirs << dir
456
+ # dirs << File.expand_path(File.join(dir, '..'))
457
+ }
458
+
459
+ unless TkLib_Config["space-on-tk-libpath"]
460
+ dirs.delete_if{|path| path =~ / /}
461
+ end
462
+
463
+ config_dir.concat(dirs.zip(dirs))
464
+
465
+ else
466
+ if framework = find_macosx_framework()
467
+ config_dir.unshift(framework)
468
+ end
469
+
470
+ if activeTcl = TkLib_Config['ActiveTcl']
471
+ # check latest version at first
472
+ if is_macosx?
473
+ base = File.expand_path(activeTcl)
474
+ config_dir << [
475
+ File.join(base, 'Tcl.framework'), File.join(base, 'Tk.framework')
476
+ ]
477
+
478
+ config_dir << [
479
+ File.join(base, 'Tcl.framework', 'Versions', 'Current'),
480
+ File.join(base, 'Tk.framework', 'Versions', 'Current')
481
+ ]
482
+
483
+ Dir.glob(File.join(base, 'Tcl.framework',
484
+ 'Versions', '*')).sort.reverse.each{|dir|
485
+ next if dir =~ /Current/
486
+ config_dir << [dir, dir.gsub(/Tcl/, 'Tk')]
487
+ }
488
+ else
489
+ config_dir.concat(Dir.glob(File.join(activeTcl, 'lib'), File::FNM_CASEFOLD).sort.reverse)
490
+ end
491
+ end
492
+
493
+ config_dir << RbConfig::CONFIG['libdir']
494
+
495
+ ((maybe_64bit?)? ['lib64', 'lib']: ['lib']).each{|dir|
496
+ config_dir.concat [
497
+ File.join(RbConfig::CONFIG['exec_prefix'], dir),
498
+ File.join(RbConfig::CONFIG['prefix'], dir),
499
+ "/usr/local/opt/#{dir}", "/usr/local/pkg/#{dir}",
500
+ "/usr/local/share/#{dir}", "/usr/local/#{dir}",
501
+ "/usr/opt/#{dir}", "/usr/pkg/#{dir}", "/usr/share/#{dir}",
502
+ "/usr/contrib/#{dir}", "/usr/#{dir}"
503
+ ]
504
+ }
505
+
506
+ config_dir.concat [
507
+ '/opt', '/pkg', '/share',
508
+ '/usr/local/opt', '/usr/local/pkg', '/usr/local/share', '/usr/local',
509
+ '/usr/opt', '/usr/pkg', '/usr/share', '/usr/contrib', '/usr'
510
+ ].map{|dir|
511
+ Dir.glob(dir + "/{tcltk,tcl,tk}[#{TkLib_Config['major_nums']}*/lib",
512
+ File::FNM_CASEFOLD)
513
+ Dir.glob(dir + "/{tcltk,tcl,tk}[#{TkLib_Config['major_nums']}*",
514
+ File::FNM_CASEFOLD)
515
+ Dir.glob(dir + '/{tcltk,tcl,tk}/lib', File::FNM_CASEFOLD)
516
+ Dir.glob(dir + '/{tcltk,tcl,tk}', File::FNM_CASEFOLD)
517
+ }.flatten!
518
+
519
+ exeext = RbConfig::CONFIG['EXEEXT']
520
+ ENV['PATH'].split(File::PATH_SEPARATOR).each{|dir|
521
+ dir.tr!(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
522
+ next if Dir.glob(File.join(dir, "{tclsh,wish}*#{exeext}"), File::FNM_CASEFOLD).empty?
523
+ config_dir << File.expand_path(File.join(dir, '..', 'lib'))
524
+ }
525
+
526
+ # for MacOS X
527
+ paths = [
528
+ #"~/Library/Tcl",
529
+ "/Library/Tcl", "/Network/Library/Tcl", "/System/Library/Tcl"
530
+ ]
531
+ paths.reverse! unless TkLib_Config["ActiveTcl"]
532
+
533
+ paths.each{|path|
534
+ config_dir << path
535
+ config_dir.concat(Dir.glob(File.join(path, '{tcl,tk}*'), File::FNM_CASEFOLD).sort.reverse.find_all{|d| File.directory?(d)})
536
+ }
537
+
538
+ paths = [
539
+ #"~/Library/Frameworks",
540
+ "/Library/Frameworks",
541
+ "/Network/Library/Frameworks", "/System/Library/Frameworks"
542
+ ]
543
+ paths.reverse! unless TkLib_Config["ActiveTcl"]
544
+
545
+ paths.each{|frmwk|
546
+ base = File.expand_path(frmwk)
547
+ config_dir << [
548
+ File.join(base, 'Tcl.framework'), File.join(base, 'Tk.framework')
549
+ ]
550
+
551
+ config_dir << [
552
+ File.join(base, 'Tcl.framework', 'Versions', 'Current'),
553
+ File.join(base, 'Tk.framework', 'Versions', 'Current')
554
+ ]
555
+
556
+ Dir.glob(File.join(base, 'Tcl.framework',
557
+ 'Versions', '*')).sort.reverse.each{|dir|
558
+ next if dir =~ /Current/
559
+ config_dir << [dir, dir.gsub(/Tcl/, 'Tk')]
560
+ }
561
+ }
562
+ end
563
+
564
+ config_dir
565
+ end
566
+
567
+ def get_ext_list()
568
+ exts = [CONFIG['DLEXT']]
569
+ exts.concat %w(dll) if is_win32?
570
+ exts.concat %w(bundle dylib) if is_macosx?
571
+
572
+ if TkLib_Config["tcltk-stubs"] || TkLib_Config['enable-shared'] == false
573
+ exts.unshift "lib" if is_win32?
574
+ exts.unshift "a"
575
+ exts.unshift CONFIG['LIBEXT']
576
+ end
577
+
578
+ if is_win32?
579
+ exts.map!{|ext| [ext.downcase, ext.upcase]}.flatten!
580
+ end
581
+
582
+ exts
583
+ end
584
+
585
+ def libcheck_for_tclConfig(tcldir, tkdir, tclconf, tkconf)
586
+ tcllib_ok = tklib_ok = false
587
+
588
+ if TkLib_Config["tcltk-stubs"]
589
+ stub = "stub"
590
+ tclfunc = "Tcl_InitStubs"
591
+ tkfunc = "Tk_InitStubs"
592
+ else
593
+ stub = ""
594
+ tclfunc = "Tcl_FindExecutable"
595
+ tkfunc = "Tk_Init"
596
+ end
597
+
598
+ incflags = ($INCFLAGS ||= "").dup
599
+ libpath = ($LIBPATH ||= []).dup
600
+ libs_param = ($libs ||= "").dup
601
+ tcllibs = nil
602
+ mkmf_param = nil
603
+
604
+ tclver, tkver = TkLib_Config["tcltkversion"]
605
+ exts = "(" + get_ext_list.join('|') + ")"
606
+
607
+ if tclver
608
+ tcl_glob = "*tcl#{stub}#{tclver}.*"
609
+ tcl_regexp = /^.*(tcl#{stub}#{tclver}.*)\.(#{exts}).*$/
610
+ elsif tclconf
611
+ tcl_glob = "*tcl#{stub}#{tclconf['TCL_MAJOR_VERSION']}{.,}#{tclconf['TCL_MINOR_VERSION']}*.*"
612
+ tcl_regexp = /^.*(tcl#{stub}#{tclconf['TCL_MAJOR_VERSION']}(?:\.|)#{tclconf['TCL_MINOR_VERSION']}.*)\.(#{exts}).*$/
613
+ end
614
+ if tkver
615
+ tk_glob = "*tk#{stub}#{tkver}.*"
616
+ tk_regexp = /^.*(tk#{stub}#{tkver}.*)\.(#{exts}).*$/
617
+ elsif tkconf
618
+ tk_glob = "*tk#{stub}#{tkconf['TK_MAJOR_VERSION']}{.,}#{tkconf['TK_MINOR_VERSION']}*.*"
619
+ tk_regexp = /^.*(tk#{stub}#{tkconf['TK_MAJOR_VERSION']}(?:\.|)#{tkconf['TK_MINOR_VERSION']}.*)\.#{exts}.*$/
620
+ end
621
+
622
+ tcllib_ok ||= !tclconf || Dir.glob(File.join(tcldir, tcl_glob), File::FNM_CASEFOLD).find{|file|
623
+ if file =~ tcl_regexp
624
+ libname = $1
625
+ ext = $2.downcase
626
+ begin
627
+ $INCFLAGS = incflags.dup << " " << tclconf["TCL_INCLUDE_SPEC"]
628
+ #puts "check #{file} #{$1} #{tclfunc} #{tcldir}"
629
+ #find_library($1, tclfunc, tcldir)
630
+ if (tclconf && tclconf["TCL_SHARED_BUILD"] == "0") ||
631
+ (ext != CONFIG['DLEXT'] && ext == CONFIG['LIBEXT']) || ext == "a"
632
+ # static link
633
+ tcllibs = $libs + " -DSTATIC_BUILD " + file.quote
634
+
635
+ # FIX ME: avoid pathname trouble (fail to find) on MinGW.
636
+ # e.g. TCL_INCLUDE_SPEC describes "-I/usr/local/include",
637
+ # but compiler can find "-IC:/msys/1.0/local/include" only.
638
+ $INCFLAGS << " -I" << File.join(File.dirname(File.dirname(file)),"include") if is_win32?
639
+ else
640
+ tcllibs = append_library($libs, libname)
641
+ tcllibs = "#{libpathflag([tcldir])} #{tcllibs}"
642
+
643
+ # FIX ME: avoid pathname trouble (fail to find) on MinGW.
644
+ $INCFLAGS << " -I" << File.join(File.dirname(tcldir),"include") if is_win32?
645
+ end
646
+
647
+ $LIBPATH = libpath | [tcldir]
648
+ try_func(tclfunc, tcllibs, ["tcl.h"]) ||
649
+ ( try_func(tclfunc, tcllibs << " " << tclconf['TCL_LIBS'], ["tcl.h"]) if tclconf['TCL_LIBS'] )
650
+
651
+ ensure
652
+ mkmf_param = {
653
+ 'PATH' => file,
654
+ 'LIBNAME' => libname,
655
+ 'libs' => tcllibs.dup,
656
+ 'INCFLAGS' => $INCFLAGS.dup,
657
+ 'LIBPATH' => $LIBPATH.dup,
658
+ }
659
+ $LIBPATH = libpath.dup
660
+ $libs = libs_param.dup
661
+ end
662
+ end
663
+ }
664
+ tclconf['MKMF_PARAMS'] = mkmf_param if tclconf && tcllib_ok
665
+
666
+ tklib_ok ||= !tkconf || Dir.glob(File.join(tkdir, tk_glob), File::FNM_CASEFOLD).find{|file|
667
+ if file =~ tk_regexp
668
+ libname = $1
669
+ ext = $2.downcase
670
+ begin
671
+ #puts "check #{file} #{$1} #{tkfunc} #{tkdir}"
672
+ # find_library($1, tkfunc, tkdir)
673
+ if (tkconf && tkconf["TCL_SHARED_BUILD"] == "0") ||
674
+ (ext != CONFIG['DLEXT'] && ext == CONFIG['LIBEXT']) || ext == "a"
675
+ # static link
676
+ tklibs = " -DSTATIC_BUILD " + file.quote
677
+
678
+ # FIX ME: avoid pathname trouble (fail to find) on MinGW.
679
+ $INCFLAGS << " -I" << File.join(File.dirname(File.dirname(file)),"include") if is_win32?
680
+ else
681
+ tklibs = append_library("", libname)
682
+ #tklibs = append_library("", $1)
683
+ tklibs = "#{libpathflag([tkdir])} #{tklibs}"
684
+
685
+ # FIX ME: avoid pathname trouble (fail to find) on MinGW.
686
+ $INCFLAGS << " -I" << File.join(File.dirname(tcldir),"include") if is_win32?
687
+ end
688
+
689
+ tklibs << " " << tcllibs if tcllibs
690
+ tmp_tklibs = tklibs.dup
691
+ $LIBPATH = libpath | [tkdir]
692
+ try_func(tkfunc, tklibs, ["tcl.h", "tk.h"]) ||
693
+ ( try_func(tkfunc, tklibs << " " << tkconf['TK_LIBS'], ["tcl.h", "tk.h"]) if tkconf['TK_LIBS'] ) ||
694
+ ( try_func(tkfunc, (tklibs = tmp_tklibs.dup) << " " << tkconf['TK_XLIBSW'], ["tcl.h", "tk.h"]) if tkconf['TK_XLIBSW'] ) ||
695
+ ( try_func(tkfunc, tklibs << " " << tkconf['TK_LIBS'], ["tcl.h", "tk.h"]) if tkconf['TK_LIBS'] )
696
+
697
+ ensure
698
+ mkmf_param = {
699
+ 'PATH' => file,
700
+ 'LIBNAME' => libname,
701
+ 'libs' => tklibs.dup,
702
+ 'INCFLAGS' => $INCFLAGS.dup,
703
+ 'LIBPATH' => $LIBPATH.dup,
704
+ }
705
+ $LIBPATH = libpath.dup
706
+ $libs = libs_param.dup
707
+ end
708
+ end
709
+ }
710
+
711
+ $INCFLAGS = incflags.dup
712
+ tkconf['MKMF_PARAMS'] = mkmf_param if tkconf && tklib_ok
713
+
714
+ [tcllib_ok, tklib_ok]
715
+ end
716
+
717
+ def search_tclConfig(*paths) # libdir list or [tcl-libdir|file, tk-libdir|file]
718
+ TkLib_Config["tclConfig_paths"] = []
719
+
720
+ paths.compact!
721
+ if paths.empty?
722
+ config_dir = get_tclConfig_dirs
723
+ elsif paths.length == 1 && !paths[0][0] && !paths[0][1]
724
+ config_dir = get_tclConfig_dirs.map{|dir|
725
+ if dir.kind_of? Array
726
+ [ (paths[0][0] == false)? nil: dir[0],
727
+ (paths[0][1] == false)? nil: dir[1] ]
728
+ else
729
+ [ (paths[0][0] == false)? nil: dir,
730
+ (paths[0][1] == false)? nil: dir ]
731
+ end
732
+ }
733
+ else
734
+ # fixed tclConfig
735
+ config_dir = []
736
+ paths.each{|path|
737
+ if path.kind_of?(Array)
738
+ config_dir << path
739
+ else
740
+ dirs = Dir.glob(path, File::FNM_CASEFOLD)
741
+ config_dir.concat(dirs.zip(dirs))
742
+ end
743
+ }
744
+ end
745
+
746
+ tclver, tkver = TkLib_Config['tcltkversion']
747
+ if tclver && tclver =~ /^\D*(\d)\.?(\d)?/ # ignore PATCH_LEVEL
748
+ tclver_major = $1
749
+ tclver_minor = $2
750
+ else
751
+ tclver_major = nil
752
+ tclver_minor = nil
753
+ end
754
+ if tkver && tkver =~ /^\D*(\d)\.?(\d)?/ # ignore PATCH_LEVEL
755
+ tkver_major = $1
756
+ tkver_minor = $2
757
+ else
758
+ tkver_major = nil
759
+ tkver_minor = nil
760
+ end
761
+
762
+ conf = nil
763
+ progress_flag = false
764
+
765
+ config_dir.uniq!
766
+ config_dir.map{|dir|
767
+ if dir.kind_of? Array
768
+ [ (dir[0])? dir[0].strip.chomp('/'): nil,
769
+ (dir[1])? dir[1].strip.chomp('/'): nil ]
770
+ else
771
+ dir.strip.chomp('/')
772
+ end
773
+ }.each{|dir|
774
+ progress("."); progress_flag = true
775
+ # print("check #{dir} ==>");
776
+ if dir.kind_of? Array
777
+ tcldir, tkdir = dir
778
+ else
779
+ tcldir = tkdir = dir
780
+ end
781
+
782
+ tails = ['Config-shared.sh', 'config-shared.sh', 'Config.sh', 'config.sh']
783
+
784
+ if tcldir
785
+ if File.file?(tcldir)
786
+ tclcfg_files = [tcldir] * tails.length
787
+ else
788
+ tclcfg_files = tails.map{|f| File.join(tcldir, 'tcl' << f)}
789
+ end
790
+ else
791
+ tclcfg_files = [nil] * tails.length
792
+ end
793
+
794
+ if tkdir
795
+ if File.file?(tkdir)
796
+ tkcfg_files = [tkdir] * tails.length
797
+ else
798
+ tkcfg_files = tails.map{|f| File.join(tkdir, 'tk' << f)}
799
+ end
800
+ else
801
+ tkcfg_files = [nil] * tails.length
802
+ end
803
+
804
+ tclcfg_files.zip(tkcfg_files).map{|tclpath, tkpath|
805
+ [ (tclpath && File.exist?(tclpath))? File.expand_path(tclpath): tclpath,
806
+ (tkpath && File.exist?(tkpath))? File.expand_path(tkpath): tkpath ]
807
+ }.uniq.each{|tclpath, tkpath|
808
+ next if tclpath && !File.exist?(tclpath)
809
+ next if tkpath && !File.exist?(tkpath)
810
+
811
+ # parse tclConfig.sh/tkConfig.sh
812
+ tclconf = (tclpath)? parse_tclConfig(tclpath): nil
813
+ if tclconf
814
+ if tclver && ((tclver_major && tclver_major != tclconf['TCL_MAJOR_VERSION']) || (tclver_minor && tclver_minor != tclconf['TCL_MINOR_VERSION']))
815
+ print("\n") if progress_flag
816
+ puts "Ignore \"#{tclpath}\" (unmatch with configured version)."
817
+ progress_flag = false
818
+ next
819
+ end
820
+ if TkLib_Config['unsupported_versions'].find{|ver| ver == "#{tclconf['TCL_MAJOR_VERSION']}.#{tclconf['TCL_MINOR_VERSION']}"}
821
+ print("\n") if progress_flag
822
+ puts "Ignore \"#{tclpath}\" (unsupported version of Tcl/Tk)."
823
+ progress_flag = false
824
+ next
825
+ end
826
+ end
827
+
828
+ tkconf = (tkpath)? parse_tclConfig(tkpath): nil
829
+ if tkconf
830
+ if tkver && ((tkver_major && tkver_major != tkconf['TK_MAJOR_VERSION']) || (tkver_minor && tkver_minor != tkconf['TK_MINOR_VERSION']))
831
+ print("\n") if progress_flag
832
+ puts "Ignore \"#{tkpath}\" (unmatch with configured version)."
833
+ progress_flag = false
834
+ next
835
+ end
836
+ if TkLib_Config['unsupported_versions'].find{|ver| ver == "#{tkconf['TK_MAJOR_VERSION']}.#{tkconf['TK_MINOR_VERSION']}"}
837
+ print("\n") if progress_flag
838
+ puts "Ignore \"#{tkpath}\" (unsupported version of Tcl/Tk)."
839
+ progress_flag = false
840
+ next
841
+ end
842
+ end
843
+
844
+ # nativethread check
845
+ if !TkLib_Config["ruby_with_thread"]
846
+ if tclconf
847
+ if tclconf['TCL_THREADS'] == '1'
848
+ puts "\nWARNING: found #{tclpath.inspect}, but it WITH nativethread-support under ruby WITHOUT nativethread-support. So, ignore it."
849
+ TkLib_Config["tcl-NG-path"] << File.dirname(tclpath)
850
+ next
851
+ end
852
+ else
853
+ puts "\nWARNING: When not refer tclConfig.sh, cannot check native-thread support on Tcl/Tk libraries. Ruby, which is used now, does NOT support native-thread. So, if Tcl/Tk libraries support native-thread, it will NOT work properly."
854
+ end
855
+ end
856
+
857
+ # find tclConfig.sh & tkConfig.sh
858
+ conf = [tclconf, tkconf] unless conf
859
+
860
+ # check Tcl library
861
+ if is_macosx? && TkLib_Config["tcltk-framework"]
862
+ # if use framework, not check (believe it is installed properly)
863
+ tcllib_ok = tklib_ok = true
864
+ else
865
+ tcllib_ok, tklib_ok =
866
+ libcheck_for_tclConfig((tclpath)? File.dirname(tclpath): nil,
867
+ (tkpath)? File.dirname(tkpath): nil,
868
+ tclconf, tkconf)
869
+ end
870
+
871
+ unless tcllib_ok && tklib_ok
872
+ unless tcllib_ok
873
+ puts "\nWARNING: found #{tclpath.inspect}, but cannot find valid Tcl library for the tclConfig.sh. So, ignore it."
874
+ TkLib_Config["tcl-NG-path"] << File.dirname(tclpath)
875
+ end
876
+ unless tklib_ok
877
+ puts "\nWARNING: found #{tkpath.inspect}, but cannot find valid Tk library for the tkConfig.sh. So, ignore it."
878
+ TkLib_Config["tk-NG-path"] << File.dirname(tkpath)
879
+ end
880
+ next
881
+ end
882
+
883
+ #return [tclpath, tkpath]
884
+ # print(" #{[tclpath, tkpath].inspect}");
885
+ TkLib_Config["tclConfig_paths"] << [tclpath, tkpath]
886
+ }
887
+
888
+ # print("\n");
889
+ }
890
+
891
+ if is_macosx? && TkLib_Config["tcltk-stubs"]
892
+ CONFIG['LDSHARED'] << " -Xlinker -bind_at_load"
893
+ if config_string('LDSHAREDXX')
894
+ config_string('LDSHAREDXX') << " -Xlinker -bind_at_load"
895
+ end
896
+ end
897
+
898
+ if TkLib_Config["tclConfig_paths"].empty?
899
+ [nil, nil]
900
+ else
901
+ # find tclConfig.sh and tkConfig.sh
902
+ TkLib_Config["tclConfig_info"], TkLib_Config["tkConfig_info"] = conf
903
+ TkLib_Config["tclConfig_paths"][0]
904
+ end
905
+ end
906
+
907
+ def get_tclConfig(tclConfig_file, tkConfig_file, tclConfig_dir, tkConfig_dir)
908
+ use_tclConfig = tclConfig_file != false && tclConfig_dir != false
909
+ use_tkConfig = tkConfig_file != false && tkConfig_dir != false
910
+
911
+ unless use_tclConfig || use_tkConfig
912
+ puts("Don't use [tclConfig.sh, tkConfig.sh]")
913
+ return [nil, nil]
914
+ end
915
+
916
+ tclConfig_file = nil unless tclConfig_file.kind_of? String
917
+ tkConfig_file = nil unless tkConfig_file.kind_of? String
918
+ tclConfig_dir = nil unless tclConfig_dir.kind_of? String
919
+ tkConfig_dir = nil unless tkConfig_dir.kind_of? String
920
+
921
+ if use_tclConfig && !tclConfig_dir
922
+ if tclConfig_file
923
+ tclConfig_dir = File.dirname(tclConfig_file)
924
+ elsif tkConfig_dir
925
+ tclConfig_dir = tkConfig_dir
926
+ end
927
+ end
928
+ if use_tkConfig && !tkConfig_dir
929
+ if tkConfig_file
930
+ tkConfig_dir = File.dirname(tkConfig_file)
931
+ elsif tclConfig_dir
932
+ tkConfig_dir = tclConfig_dir
933
+ end
934
+ end
935
+ tkConfig_dir ||= tclConfig_dir
936
+
937
+ if use_tclConfig
938
+ TkLib_Config["tclConfig-file"] = tclConfig_file
939
+ TkLib_Config["tclConfig-dir"] = tclConfig_dir
940
+ else
941
+ tclConfig_file = false
942
+ tclConfig_dir = false
943
+ end
944
+ if use_tkConfig
945
+ TkLib_Config["tkConfig-file"] = tkConfig_file
946
+ TkLib_Config["tkConfig-dir"] = tkConfig_dir
947
+ else
948
+ tkConfig_file = false
949
+ tkConfig_dir = false
950
+ end
951
+
952
+ print ("Don't use tclConfig.sh (specified by configure option).\n") unless use_tclConfig
953
+ print ("Don't use tkConfig.sh (specified by configure option).\n") unless use_tkConfig
954
+ print("Search ")
955
+ print("tclConfig.sh", (tclConfig_dir)? " (in #{tclConfig_dir})": "") if use_tclConfig
956
+ print((use_tclConfig)? " and ": "", "tkConfig.sh", (tkConfig_dir)? " (in #{tkConfig_dir})": "") if use_tkConfig
957
+ print(".")
958
+
959
+ if tclConfig_dir || tkConfig_dir || !use_tclConfig || !use_tkConfig
960
+ tclConfig, tkConfig =
961
+ search_tclConfig([ ((tclConfig_file)? tclConfig_file: tclConfig_dir),
962
+ ((tkConfig_file)? tkConfig_file: tkConfig_dir) ])
963
+ else
964
+ tclConfig, tkConfig = search_tclConfig()
965
+ end
966
+ print("\n")
967
+ # TclConfig_Info = TkLib_Config["tclConfig_info"]
968
+ # TkConfig_Info = TkLib_Config["tkConfig_info"]
969
+
970
+ if tclConfig || tkConfig
971
+ dirs = TkLib_Config["tclConfig_paths"].map{|tclpath, tkpath|
972
+ [ (tclpath)? File.dirname(tclpath): nil,
973
+ (tkpath)? File.dirname(tkpath): nil ]
974
+ }
975
+ dirs |= dirs
976
+ puts("Valid [tclConfig.sh, tkConfig.sh] are found in #{dirs.inspect}")
977
+ puts("Use [tclConfig.sh, tkConfig.sh] == #{[tclConfig, tkConfig].inspect}")
978
+ $LIBPATH ||= []
979
+ $LIBPATH |= [File.dirname(tclConfig)] if tclConfig
980
+ $LIBPATH |= [File.dirname(tkConfig)] if tkConfig
981
+ #TkLib_Config["tclConfig_paths"].each{|tclcfg, tkcfg|
982
+ # $LIBPATH |= [File.dirname(tclcfg)] | [File.dirname(tkcfg)]
983
+ #}
984
+ else
985
+ puts("Fail to find [tclConfig.sh, tkConfig.sh]")
986
+ end
987
+
988
+ [tclConfig, tkConfig]
989
+ end
990
+
991
+ def check_tcl_NG_path(path_list)
992
+ path_list.find_all{|path| not TkLib_Config["tcl-NG-path"].include?(path) }
993
+ end
994
+
995
+ def check_tk_NG_path(path_list)
996
+ path_list.find_all{|path| not TkLib_Config["tk-NG-path"].include?(path) }
997
+ end
998
+
999
+ def check_NG_path(path_list)
1000
+ path_list.find_all{|path|
1001
+ not (TkLib_Config["tcl-NG-path"].include?(path) &&
1002
+ TkLib_Config["tk-NG-path"].include?(path))
1003
+ }
1004
+ end
1005
+
1006
+ def check_shlib_search_path(paths)
1007
+ if !paths || paths.empty?
1008
+ path_list = []
1009
+
1010
+ #if TkLib_Config["ActiveTcl"]
1011
+ # path_list.concat Dir.glob(TkLib_Config["ActiveTcl"], File::FNM_CASEFOLD).sort.reverse
1012
+ #end
1013
+ if TkLib_Config["ActiveTcl"].kind_of?(String) # glob path
1014
+ path_list.concat Dir.glob(TkLib_Config["ActiveTcl"], File::FNM_CASEFOLD).sort.reverse
1015
+ end
1016
+
1017
+ vers = get_shlib_versions
1018
+ path_head, path_dirs = get_shlib_path_head
1019
+
1020
+ path_list.concat vers.map{|ver|
1021
+ path_head.map{|head|
1022
+ if ver.empty?
1023
+ head + "/lib"
1024
+ else
1025
+ dirs = []
1026
+
1027
+ if Dir.glob(head, File::FNM_CASEFOLD).find{|dir| dir == head}
1028
+ dirs << head + "/lib"
1029
+ end
1030
+
1031
+ if !Dir.glob(head + "-*", File::FNM_CASEFOLD).empty?
1032
+ dirs << head + "-#{ver}/lib" if !Dir.glob(head + "-[89].*", File::FNM_CASEFOLD).empty?
1033
+ dirs << head + "-#{ver.delete('.')}/lib" if !Dir.glob(head + "-[89][0-9]*", File::FNM_CASEFOLD).empty?
1034
+ end
1035
+
1036
+ if !Dir.glob(head + "[_-]*", File::FNM_CASEFOLD).empty?
1037
+ dirs << head + "_#{ver}/lib" if !Dir.glob(head + "_[89].*", File::FNM_CASEFOLD).empty?
1038
+ dirs << head + "-#{ver}/lib" if !Dir.glob(head + "-[89].*", File::FNM_CASEFOLD).empty?
1039
+ dirs << head + "_#{ver.delete('.')}/lib" if !Dir.glob(head + "_[89][0-9]*", File::FNM_CASEFOLD).empty?
1040
+ dirs << head + "-#{ver.delete('.')}/lib" if !Dir.glob(head + "-[89][0-9]*", File::FNM_CASEFOLD).empty?
1041
+ end
1042
+
1043
+ dirs
1044
+ end
1045
+ }
1046
+ }.flatten!
1047
+
1048
+ path_list.concat path_dirs
1049
+
1050
+ else
1051
+ # paths is a string with PATH environment style
1052
+ path_list = paths.split((is_win32?)? ';': ':')
1053
+ end
1054
+
1055
+ path_list = check_NG_path(path_list)
1056
+ path_list.map!{|path| path.strip}
1057
+
1058
+ if !CROSS_COMPILING and (is_win32? || is_macosx?)
1059
+ # exist-dir only
1060
+ path_list.delete_if{|path| Dir.glob(File.join(path, "*.{a,so,dll,lib}")).empty?}
1061
+ end
1062
+
1063
+ # keep paths for searching dynamic libs
1064
+ #$LIBPATH |= path_list
1065
+ path_list.uniq
1066
+ end
1067
+
1068
+ def search_vers_on_path(vers, path, *heads)
1069
+ exts = get_ext_list.join(',')
1070
+ files = Dir.glob(File.join(path, "*{#{heads.join(',')}}*.{#{exts}}"), File::FNM_CASEFOLD)
1071
+ vers.find_all{|ver| files.find{|f| f =~ /(#{ver}|#{ver.delete('.')})/} }
1072
+ end
1073
+
1074
+ def find_tcl(tcllib, stubs, version, *opt_paths)
1075
+ if TclConfig_Info['MKMF_PARAMS']
1076
+ # already checked existence of tcl library based on tclConfig.sh
1077
+ ($INCFLAGS ||= "") << " " << TclConfig_Info['MKMF_PARAMS']['INCFLAGS']
1078
+ $LIBPATH ||= []; $LIBPATH |= TclConfig_Info['MKMF_PARAMS']['LIBPATH']
1079
+ ($libs ||= "") << " " << TclConfig_Info['MKMF_PARAMS']['libs']
1080
+ return [true, nil, nil, nil]
1081
+ end
1082
+ # else, no available tclConfig.sh on the system
1083
+
1084
+ print "Search Tcl library"
1085
+
1086
+ if stubs
1087
+ func = "Tcl_InitStubs"
1088
+ lib = "tclstub"
1089
+ else
1090
+ func = "Tcl_FindExecutable"
1091
+ lib = "tcl"
1092
+ end
1093
+
1094
+ if version && ! version.empty?
1095
+ versions = [version]
1096
+ else
1097
+ versions = TkLib_Config['search_versions']
1098
+ end
1099
+
1100
+ default_paths = []
1101
+
1102
+ default_paths.concat [
1103
+ RbConfig::CONFIG['libdir'],
1104
+ File.join(RbConfig::CONFIG['exec_prefix'], 'lib'),
1105
+ File.join(RbConfig::CONFIG['prefix'], 'lib'),
1106
+ "/usr/local/lib", "/usr/pkg/lib", "/usr/contrib/lib", "/usr/lib"
1107
+ ].find_all{|dir| File.directory?(dir)} unless CROSS_COMPILING
1108
+
1109
+ if TkLib_Config["ActiveTcl"].kind_of?(String) # glob path
1110
+ default_paths.concat Dir.glob(TkLib_Config["ActiveTcl"]).sort.reverse.map{|d| d << "/lib"}
1111
+ end
1112
+
1113
+ if !CROSS_COMPILING and is_win32?
1114
+ default_paths.concat [
1115
+ "c:/Tcl/lib","c:/Program Files/Tcl/lib","c:/Program Files (x86)/Tcl/lib",
1116
+ "/Tcl/lib","/Program Files/Tcl/lib","/Program Files (x86)/Tcl/lib"
1117
+ ].find_all{|dir| File.directory?(dir)}.map{|dir| File.expand_path(dir)}
1118
+
1119
+ # for MinGW
1120
+ ["/usr/local/lib64", "/usr/lib64", "/usr/local/lib", "/usr/lib"].each{|dir|
1121
+ default_paths << File.expand_path(dir) if File.directory? dir
1122
+ }
1123
+
1124
+ default_paths |= ENV['LIBRARY_PATH'].split(';').find_all{|dir| File.directory? dir}.map{|dir| File.expand_path(dir)} if ENV['LIBRARY_PATH']
1125
+ default_paths |= ENV['PATH'].split(';').find_all{|dir| File.directory? dir}.map{|dir| File.expand_path(dir)} if ENV['PATH']
1126
+ end
1127
+
1128
+ default_paths |= TkLib_Config["checked_shlib_dirs"]
1129
+
1130
+ unless TkLib_Config["space-on-tk-libpath"]
1131
+ default_paths.delete_if{|path| path =~ / /}
1132
+ end
1133
+
1134
+ if (paths = opt_paths.compact).empty?
1135
+ paths = check_tcl_NG_path(default_paths)
1136
+ end
1137
+
1138
+ incflags = ($INCFLAGS ||= "").dup
1139
+ libpath = ($LIBPATH ||= []).dup
1140
+ libs_param = ($libs ||= "").dup
1141
+ tcllibs = nil
1142
+
1143
+ exts = "(" + get_ext_list.join('|') + ")"
1144
+
1145
+ paths.map{|path|
1146
+ lib_w_sufx = lib
1147
+ begin
1148
+ $LIBPATH |= [path]
1149
+ inc = [File.join(File.dirname(path),"include"), File.dirname(path)]
1150
+ inc.each{|f| $INCFLAGS << " -I" << f }
1151
+
1152
+ if tcllib
1153
+ print(".")
1154
+ if have_library(tcllib, func, ["tcl.h"])
1155
+ return [true, path, tcllib, nil, *inc]
1156
+ end
1157
+ else
1158
+ sufx_list = ['', 't', 'g', 's', 'x']
1159
+ search_vers_on_path(versions, path, lib, 'tcl').find{|ver|
1160
+ dir_enum = Dir.foreach(path)
1161
+ no_dot_ver = ver.delete('.')
1162
+ libnames = ["#{lib}#{ver}", "#{lib}#{no_dot_ver}"]
1163
+ libnames << "tcl#{ver}" << "tcl#{no_dot_ver}" if lib != "tcl"
1164
+ libnames.find{|libname|
1165
+ sufx_list.find{|sufx|
1166
+ print(".")
1167
+ dir_enum.map{|fname|
1168
+ if fname =~ /^.*(#{libname}.*#{sufx})\.(#{exts}).*$/
1169
+ [fname, $1, $2]
1170
+ end
1171
+ }.compact.find{|fname, lib_w_sufx, ext|
1172
+ ext.downcase!
1173
+ if (ext != CONFIG['DLEXT'] && ext == CONFIG['LIBEXT']) ||
1174
+ ext == "a"
1175
+ # static link
1176
+ tcllibs = libs_param + " -DSTATIC_BUILD " + fname.quote
1177
+ else
1178
+ tcllibs = append_library($libs, lib_w_sufx)
1179
+ tcllibs = "#{libpathflag([path])} #{tcllibs}"
1180
+ end
1181
+ if try_func(func, tcllibs, ["tcl.h"])
1182
+ return [true, path, nil, tcllibs, *inc]
1183
+ end
1184
+ }
1185
+ }
1186
+ }
1187
+ }
1188
+ if (!version && (print(".");try_func(func, libs_param, ["tcl.h"])))
1189
+ return [true, path, lib_w_sufx, nil, *inc]
1190
+ end
1191
+ end
1192
+ ensure
1193
+ $LIBPATH = libpath.dup
1194
+ $libs = libs_param.dup
1195
+ $INCFLAGS = incflags.dup
1196
+ end
1197
+ }
1198
+
1199
+ progress("\n")
1200
+ [false, nil, nil, nil]
1201
+ end
1202
+
1203
+ def parse_TK_LIBS(tklibs)
1204
+ sfx = "lib|shlib|dll|so"
1205
+ re = /(("|')[^"']+\.(#{sfx})\2|[^"' ]+\.(#{sfx})|-l("|')[^"']+\5|-l[^" ]+)/#'
1206
+
1207
+ tklibs.scan(re).map{|lib,|
1208
+ if lib =~ /^("|')([^"]+)\.(#{sfx})\1/
1209
+ "\"-l#{$2}\""
1210
+ elsif lib =~ /([^" ]+)\.(#{sfx})/
1211
+ "-l#{$1}"
1212
+ else
1213
+ lib
1214
+ end
1215
+ }.join(' ')
1216
+ end
1217
+
1218
+ def find_tk(tklib, stubs, version, *opt_paths)
1219
+ if TkConfig_Info['MKMF_PARAMS']
1220
+ # already checked existence of tcl library based on tkConfig.sh
1221
+ ($INCFLAGS ||= "") << " " << TkConfig_Info['MKMF_PARAMS']['INCFLAGS']
1222
+ $LIBPATH ||= []; $LIBPATH |= TkConfig_Info['MKMF_PARAMS']['LIBPATH']
1223
+ ($libs ||= "") << " " << TkConfig_Info['MKMF_PARAMS']['libs']
1224
+ return [true, nil, nil, nil]
1225
+ end
1226
+ # else, no available tkConfig.sh on the system
1227
+
1228
+ print "Search Tk library"
1229
+
1230
+ if stubs
1231
+ func = "Tk_InitStubs"
1232
+ lib = "tkstub"
1233
+ else
1234
+ func = "Tk_Init"
1235
+ lib = "tk"
1236
+ end
1237
+
1238
+ if version && ! version.empty?
1239
+ versions = [version]
1240
+ else
1241
+ versions = TkLib_Config['search_versions']
1242
+ end
1243
+
1244
+ default_paths = []
1245
+
1246
+ default_paths.concat [
1247
+ RbConfig::CONFIG['libdir'],
1248
+ File.join(RbConfig::CONFIG['exec_prefix'], 'lib'),
1249
+ File.join(RbConfig::CONFIG['prefix'], 'lib'),
1250
+ "/usr/local/lib", "/usr/pkg/lib", "/usr/contrib/lib", "/usr/lib"
1251
+ ].find_all{|dir| File.directory?(dir)} unless CROSS_COMPILING
1252
+
1253
+ if !CROSS_COMPILING and is_win32?
1254
+ default_paths.concat [
1255
+ "c:/Tcl/lib","c:/Program Files/Tcl/lib","c:/Program Files (x86)/Tcl/lib",
1256
+ "/Tcl/lib","/Program Files/Tcl/lib","/Program Files (x86)/Tcl/lib"
1257
+ ].find_all{|dir| File.directory?(dir)}
1258
+
1259
+ # for MinGW
1260
+ ["/usr/local/lib64", "/usr/lib64", "/usr/local/lib", "/usr/lib"].each{|dir|
1261
+ default_paths << File.expand_path(dir) if File.directory? dir
1262
+ }
1263
+
1264
+ default_paths |= ENV['LIBRARY_PATH'].split(';').find_all{|dir| File.directory? dir}.map{|dir| File.expand_path(dir)} if ENV['LIBRARY_PATH']
1265
+ default_paths |= ENV['PATH'].split(';').find_all{|dir| File.directory? dir}.map{|dir| File.expand_path(dir)} if ENV['PATH']
1266
+ end
1267
+
1268
+ default_paths |= TkLib_Config["checked_shlib_dirs"]
1269
+
1270
+ unless TkLib_Config["space-on-tk-libpath"]
1271
+ default_paths.delete_if{|path| path =~ / /}
1272
+ end
1273
+
1274
+ if (paths = opt_paths.compact).empty?
1275
+ paths = check_tk_NG_path(default_paths)
1276
+ end
1277
+
1278
+ incflags = ($INCFLAGS ||= "").dup
1279
+ libpath = ($LIBPATH ||= []).dup
1280
+ libs_param = ($libs ||= "").dup
1281
+ tcllibs = nil
1282
+
1283
+ exts = "(" + get_ext_list.join('|') + ")"
1284
+
1285
+ paths.map{|path|
1286
+ lib_w_sufx = lib
1287
+ begin
1288
+ $LIBPATH |= [path]
1289
+ inc = [File.join(File.dirname(path),"include"), File.dirname(path)]
1290
+ inc.each{|f| $INCFLAGS << " -I" << f }
1291
+
1292
+ if tklib
1293
+ print(".")
1294
+ if have_library(tklib, func, ["tcl.h", "tk.h"])
1295
+ return [true, path, tklib, nil, *inc]
1296
+ end
1297
+ else
1298
+ sufx_list = ['', 't', 'g', 's', 'x']
1299
+ search_vers_on_path(versions, path, lib, 'tk').find{|ver|
1300
+ dir_enum = Dir.foreach(path)
1301
+ no_dot_ver = ver.delete('.')
1302
+ libnames = ["#{lib}#{ver}", "#{lib}#{no_dot_ver}"]
1303
+ libnames << "tk#{ver}" << "tk#{no_dot_ver}" if lib != "tk"
1304
+ libnames.find{|libname|
1305
+ sufx_list.find{|sufx|
1306
+ print(".")
1307
+ dir_enum.map{|fname|
1308
+ if fname =~ /^.*(#{libname}.*#{sufx})\.(#{exts}).*$/
1309
+ [fname, $1, $2]
1310
+ end
1311
+ }.compact.find{|fname, lib_w_sufx, ext|
1312
+ if (ext != CONFIG['DLEXT'] && ext == CONFIG['LIBEXT']) ||
1313
+ ext == "a"
1314
+ # static link
1315
+ tklibs = libs_param + " -DSTATIC_BUILD " + fname.quote
1316
+ else
1317
+ tklibs = append_library($libs, lib_w_sufx)
1318
+ tklibs = "#{libpathflag([path])} #{tklibs}"
1319
+ end
1320
+ if try_func(func, tklibs, ["tcl.h", "tk.h"])
1321
+ return [true, path, nil, tklibs, *inc]
1322
+ end
1323
+ }
1324
+ }
1325
+ }
1326
+ }
1327
+ if (!version && (print(".");try_func(func, libs_param, ["tcl.h", "tk.h"])))
1328
+ return [true, path, lib_w_sufx, nil, *inc]
1329
+ end
1330
+ end
1331
+ ensure
1332
+ $LIBPATH = libpath
1333
+ $libs = libs_param
1334
+ $INCFLAGS = incflags.dup
1335
+ end
1336
+ }
1337
+
1338
+ progress("\n")
1339
+ [false, nil, nil, nil]
1340
+ end
1341
+
1342
+ def find_tcltk_library(tcllib, tklib, stubs, tclversion, tkversion,
1343
+ tcl_opt_paths, tk_opt_paths)
1344
+ st,path,lib,libs,*inc = find_tcl(tcllib, stubs, tclversion, *tcl_opt_paths)
1345
+ if !st && TkLib_Config['enable-shared'] == nil
1346
+ TkLib_Config['enable-shared'] = false
1347
+ st,path,lib,libs,*inc = find_tcl(tcllib, stubs, tclversion, *tcl_opt_paths)
1348
+ end
1349
+ unless st
1350
+ puts("\n""Warning:: cannot find Tcl library. tcltklib will not be compiled (tcltklib is disabled on your Ruby. That is, Ruby/Tk will not work). Please check configure options.")
1351
+ return false
1352
+ else
1353
+ ($LIBPATH ||= []; $LIBPATH |= [path]) if path
1354
+ $libs = append_library($libs, lib) if lib
1355
+ ($libs ||= "") << " " << libs if libs
1356
+ $INCFLAGS ||= ""
1357
+ inc.each{|f| $INCFLAGS << " -I" << f}
1358
+ end
1359
+
1360
+ st,path,lib,libs,*inc = find_tk(tklib, stubs, tkversion, *tk_opt_paths)
1361
+ if !st && TkLib_Config['enable-shared'] == nil
1362
+ TkLib_Config['enable-shared'] = false
1363
+ st,path,lib,libs,*inc = find_tk(tklib, stubs, tkversion, *tk_opt_paths)
1364
+ end
1365
+ unless st
1366
+ puts("\n""Warning:: cannot find Tk library. tcltklib will not be compiled (tcltklib is disabled on your Ruby. That is, Ruby/Tk will not work). Please check configure options.")
1367
+ return false
1368
+ else
1369
+ ($LIBPATH ||= []; $LIBPATH |= [path]) if path
1370
+ $libs = append_library($libs, lib) if lib && !lib.empty?
1371
+ ($libs ||= "") << " " << libs if libs
1372
+ $INCFLAGS ||= ""
1373
+ inc.each{|f| $INCFLAGS << " -I" << f}
1374
+ end
1375
+
1376
+ true
1377
+ end
1378
+
1379
+ def find_tcltk_header(tclver, tkver)
1380
+ base_dir = []
1381
+
1382
+ base_dir.concat [
1383
+ File.join(RbConfig::CONFIG['prefix'], 'include'),
1384
+ "/usr/local/include", "/usr/pkg/include", "/usr/contrib/include",
1385
+ "/usr/include"
1386
+ ].find_all{|dir| File.directory?(dir)}.map{|dir| File.expand_path(dir)}
1387
+
1388
+ if !CROSS_COMPILING && is_win32?
1389
+ base_dir.concat [
1390
+ "c:/Tcl/include","c:/Program Files/Tcl/include",
1391
+ "c:/Program Files (x86)/Tcl/include",
1392
+ "/Tcl/include","/Program Files/Tcl/include",
1393
+ "/Program Files (x86)/Tcl/include"
1394
+ ].find_all{|dir| File.directory?(dir)}.map{|dir| File.expand_path(dir)}
1395
+
1396
+ if ENV['CPATH']
1397
+ base_dir |= ENV['CPATH'].split(';').find_all{|dir| File.directory?(dir)}.map{|dir| File.expand_path(dir)}
1398
+ end
1399
+ end
1400
+
1401
+ base_dir |= TkLib_Config["checked_shlib_dirs"]
1402
+
1403
+ unless TkLib_Config["space-on-tk-libpath"]
1404
+ base_dir.delete_if{|path| path =~ / /}
1405
+ end
1406
+
1407
+ # tcl.h
1408
+ if TclConfig_Info['MKMF_PARAMS']
1409
+ # already checked existence of tcl headers based on tclConfig.sh
1410
+ have_tcl_h = true
1411
+ else
1412
+ print "Search tcl.h"
1413
+ newline
1414
+ if enable_config("tcl-h-ver-check", true) &&
1415
+ tclver && tclver =~ /^\D*(\d)\.?(\d)/
1416
+ major = $1; minor = $2
1417
+ else
1418
+ major = minor = nil
1419
+ end
1420
+ progress(".")
1421
+ if major && minor
1422
+ # version check on tcl.h
1423
+ version_check = proc {|code|
1424
+ code << ("#if TCL_MAJOR_VERSION != #{major} || TCL_MINOR_VERSION != #{minor}\n" \
1425
+ "#error VERSION does not match\n" \
1426
+ "#endif")
1427
+ }
1428
+ else
1429
+ version_check = nil
1430
+ end
1431
+ have_tcl_h = have_header('tcl.h', &version_check)
1432
+ unless have_tcl_h
1433
+ if tclver && ! tclver.empty?
1434
+ versions = [tclver]
1435
+ else
1436
+ versions = TkLib_Config['search_versions']
1437
+ end
1438
+ paths = base_dir.dup
1439
+ (versions + [""]).each{|ver|
1440
+ paths.concat(base_dir.map{|dir|
1441
+ [
1442
+ dir + '/tcl' + ver,
1443
+ dir + '/tcl' + ver + '/include',
1444
+ dir + '/tcl' + ver.delete('.'),
1445
+ dir + '/tcl' + ver.delete('.') + '/include'
1446
+ ]
1447
+ }.flatten)
1448
+ }
1449
+ paths = paths.map{|dir|
1450
+ (File.directory?(dir))? File.expand_path(dir): nil
1451
+ }.compact.uniq
1452
+
1453
+ if major || minor
1454
+ version_check = proc {|code|
1455
+ code << "#if TCL_MAJOR_VERSION != #{major}\n#error MAJOR_VERSION does not match\n#endif\n" if major
1456
+ code << "#if TCL_MINOR_VERSION != #{minor}\n#error MINOR_VERSION does not match\n#endif\n" if minor
1457
+ code
1458
+ }
1459
+ else
1460
+ version_check = nil
1461
+ end
1462
+ have_tcl_h = paths.find{|path|
1463
+ progress(".")
1464
+ inc_opt = " -I#{path.quote}"
1465
+ if try_header("tcl", inc_opt, &version_check)
1466
+ ($INCFLAGS ||= "") << inc_opt
1467
+ true
1468
+ else
1469
+ false
1470
+ end
1471
+ }
1472
+ end
1473
+ progress("\n")
1474
+ end
1475
+
1476
+ # tk.h
1477
+ if TkConfig_Info['MKMF_PARAMS']
1478
+ # already checked existence of tk headers based on tkConfig.sh
1479
+ have_tk_h = true
1480
+ else
1481
+ print "Search tk.h"
1482
+ newline
1483
+ if enable_config("tk-h-ver-check", true) &&
1484
+ tkver && tkver =~ /^\D*(\d)\.?(\d)/
1485
+ major = $1; minor = $2
1486
+ else
1487
+ major = minor = nil
1488
+ end
1489
+ progress(".")
1490
+ if major && minor
1491
+ # version check on tk.h
1492
+ version_check = proc {|code|
1493
+ code << ("#if TK_MAJOR_VERSION != #{major} || TK_MINOR_VERSION != #{minor}\n" \
1494
+ "#error VERSION does not match\n" \
1495
+ "#endif")
1496
+ }
1497
+ else
1498
+ version_check = nil
1499
+ end
1500
+ have_tk_h = have_header('tk.h')
1501
+ unless have_tk_h
1502
+ if tkver && ! tkver.empty?
1503
+ versions = [tkver]
1504
+ else
1505
+ versions = TkLib_Config['search_versions']
1506
+ end
1507
+ paths = base_dir.dup
1508
+ (versions + [""]).each{|ver|
1509
+ paths.concat(base_dir.map{|dir|
1510
+ [
1511
+ dir + '/tk' + ver,
1512
+ dir + '/tk' + ver + '/include',
1513
+ dir + '/tk' + ver.delete('.'),
1514
+ dir + '/tk' + ver.delete('.') + '/include'
1515
+ ]
1516
+ }.flatten)
1517
+ }
1518
+ paths = paths.map{|dir|
1519
+ (File.directory?(dir))? File.expand_path(dir): nil
1520
+ }.compact.uniq
1521
+
1522
+ if major || minor
1523
+ version_check = proc {|code|
1524
+ code << "#if TK_MAJOR_VERSION != #{major}\n#error MAJOR_VERSION does not match\n#endif\n" if major
1525
+ code << "#if TK_MINOR_VERSION != #{minor}\n#error MINOR_VERSION does not match\n#endif\n" if minor
1526
+ code
1527
+ }
1528
+ else
1529
+ version_check = nil
1530
+ end
1531
+ have_tk_h = paths.find{|path|
1532
+ progress(".")
1533
+ inc_opt = " -I#{path.quote}"
1534
+ if try_header(%w'tcl.h tk.h', inc_opt, &version_check)
1535
+ ($INCFLAGS ||= "") << inc_opt
1536
+ true
1537
+ else
1538
+ false
1539
+ end
1540
+ }
1541
+ end
1542
+ progress("\n")
1543
+ end
1544
+
1545
+ puts "Can't find \"tcl.h\"." unless have_tcl_h
1546
+ puts "Can't find \"tk.h\"." unless have_tk_h
1547
+ have_tcl_h && have_tk_h
1548
+ end
1549
+
1550
+ def setup_for_macosx_framework(tclver, tkver)
1551
+ # use framework, but no tclConfig.sh
1552
+ unless $LIBS && $LIBS.include?('-framework')
1553
+ ($LIBS ||= "") << ' -framework Tk -framework Tcl'
1554
+ end
1555
+
1556
+ if TkLib_Config["tcl-framework-header"]
1557
+ TclConfig_Info['TCL_INCLUDE_SPEC'][0,0] =
1558
+ " -I#{TkLib_Config["tcl-framework-header"].quote} "
1559
+ else
1560
+ tcl_base = File.join(TkLib_Config["tcltk-framework"], 'Tcl.framework')
1561
+ if tclver
1562
+ TclConfig_Info['TCL_INCLUDE_SPEC'] <<
1563
+ " -I#{File.join(tcl_base, 'Versions', tclver, 'Headers').quote} "
1564
+ end
1565
+
1566
+ TclConfig_Info['TCL_INCLUDE_SPEC'] << File.join(tcl_base, 'Headers')
1567
+
1568
+ unless tclver
1569
+ dir = Dir.glob(File.join(tcl_base, 'Versions', '*', 'Headers'),
1570
+ File::FNM_CASEFOLD).sort.reverse[0]
1571
+ TclConfig_Info['TCL_INCLUDE_SPEC'] << "-I#{dir.quote} " if dir
1572
+ end
1573
+ end
1574
+
1575
+ if TkLib_Config["tk-framework-header"]
1576
+ TkConfig_Info['TK_INCLUDE_SPEC'][0,0] =
1577
+ " -I#{TkLib_Config["tk-framework-header"].quote} "
1578
+ else
1579
+ tk_base = File.join(TkLib_Config["tcltk-framework"], 'Tk.framework')
1580
+ if tkver
1581
+ TkConfig_Info['TK_INCLUDE_SPEC'] <<
1582
+ " -I#{File.join(tk_base, 'Versions', tkver, 'Headers').quote} "
1583
+ end
1584
+
1585
+ TkConfig_Info['TK_INCLUDE_SPEC'] << File.join(tk_base, 'Headers')
1586
+
1587
+ unless tkver
1588
+ dir = Dir.glob(File.join(tk_base, 'Versions', '*', 'Headers'),
1589
+ File::FNM_CASEFOLD).sort.reverse[0]
1590
+ TkConfig_Info['TK_INCLUDE_SPEC'] << "-I#{dir.quote} " if dir
1591
+ end
1592
+ end
1593
+ end
1594
+
1595
+ def find_X11(*opt_paths)
1596
+ defaults =
1597
+ [ "/usr/X11*/lib", "/usr/lib/X11*", "/usr/local/X11*", "/usr/openwin/lib" ]
1598
+ paths = []
1599
+ opt_paths.compact.each{|path| paths.concat(Dir.glob(path.strip.chomp('/'), File::FNM_CASEFOLD))}
1600
+ defaults.compact.each{|path| paths.concat(Dir.glob(path.strip.chomp('/'), File::FNM_CASEFOLD))}
1601
+ st = find_library("X11", "XOpenDisplay", *paths)
1602
+ unless st
1603
+ puts("\n""Warning:: cannot find X11 library. tcltklib will not be compiled (tcltklib is disabled on your Ruby. That is, Ruby/Tk will not work). Please check configure options. If your Tcl/Tk don't require X11, please try --without-X11.")
1604
+ end
1605
+ st
1606
+ end
1607
+
1608
+ def search_X_libraries
1609
+ use_tkConfig = false
1610
+ if TkConfig_Info['config_file_path']
1611
+ # use definitions on tkConfig.sh
1612
+ if (/\S/ =~ TkConfig_Info['TK_XINCLUDES'] ||
1613
+ /\S/ =~ TkConfig_Info['TK_XLIBSW'])
1614
+ use_tkConfig = true
1615
+ #use_X = true && with_config("X11", ! is_win32?)
1616
+ use_X = with_config("X11", true)
1617
+ else
1618
+ #use_X = false || with_config("X11", false)
1619
+ use_X = with_config("X11", false)
1620
+ end
1621
+ else
1622
+ # depend on configure options
1623
+ use_X = with_config("X11", !(is_win32? || TkLib_Config["tcltk-framework"]))
1624
+ end
1625
+
1626
+ if /\S/ =~ TkConfig_Info['TK_XINCLUDES']
1627
+ ($INCFLAGS ||= "") << " " << TkConfig_Info['TK_XINCLUDES'].strip
1628
+ end
1629
+
1630
+ if use_X
1631
+ puts("Use X11 libraries (or use TK_XINCLUDES/TK_XLIBSW information on tkConfig.sh).")
1632
+ x11_idir, x11_ldir = dir_config("X11")
1633
+ x11_ldir2 = with_config("X11-lib")
1634
+ unless find_X11(x11_ldir2, x11_ldir)
1635
+ puts("Can't find X11 libraries. ")
1636
+ if use_tkConfig &&
1637
+ /\S/ =~ TkConfig_Info['TK_XLIBSW']
1638
+ puts("But, try to use TK_XLIBSW information (believe tkConfig.sh).")
1639
+ ($libs ||= "") << " " << TkConfig_Info['TK_XLIBSW'] << " "
1640
+ else
1641
+ puts("So, can't make tcltklib.so which is required by Ruby/Tk.")
1642
+ exit
1643
+ end
1644
+ end
1645
+ end
1646
+
1647
+ use_X
1648
+ end
1649
+
1650
+ def pthread_check()
1651
+ tcl_major_ver = nil
1652
+ tcl_minor_ver = nil
1653
+
1654
+ # Is tcl-thread given by user ?
1655
+ case enable_config("tcl-thread")
1656
+ when true
1657
+ tcl_enable_thread = true
1658
+ when false
1659
+ tcl_enable_thread = false
1660
+ else
1661
+ tcl_enable_thread = nil
1662
+ end
1663
+
1664
+ if TclConfig_Info['config_file_path']
1665
+ if tcl_enable_thread == true
1666
+ puts("\n""Warning: definition of tclConfig.sh is ignored, because --enable-tcl-thread option is given.")
1667
+ elsif tcl_enable_thread == false
1668
+ puts("\n""Warning: definition of tclConfig.sh is ignored, because --disable-tcl-thread option is given.")
1669
+ else
1670
+ # tcl-thread is unknown and tclConfig.sh is given
1671
+ if TclConfig_Info['TCL_THREADS']
1672
+ tcl_enable_thread = (TclConfig_Info['TCL_THREADS'] == "1")
1673
+ else
1674
+ tcl_major_ver = TclConfig_Info['TCL_MAJOR_VERSION'].to_i
1675
+ tcl_minor_ver = TclConfig_Info['TCL_MINOR_VERSION'].to_i
1676
+ if tcl_major_ver < 8 || (tcl_major_ver == 8 && tcl_minor_ver == 0)
1677
+ tcl_enable_thread = false
1678
+ end
1679
+ end
1680
+
1681
+ if tcl_enable_thread == nil
1682
+ # cannot find definition
1683
+ if tcl_major_ver
1684
+ puts("\n""Warning: '#{TclConfig_Info['config_file_path']}' doesn't include TCL_THREADS definition.")
1685
+ else
1686
+ puts("\n""Warning: '#{TclConfig_Info['config_file_path']}' may not be a tclConfig file.")
1687
+ end
1688
+ #tclConfig = false
1689
+ end
1690
+ end
1691
+ end
1692
+
1693
+ if tcl_enable_thread == nil && !TclConfig_Info['config_file_path']
1694
+ # tcl-thread is unknown and tclConfig is unavailable
1695
+ begin
1696
+ try_run("int main() { exit(0); }")
1697
+ rescue Exception
1698
+ # cannot try_run. Is CROSS-COMPILE environment?
1699
+ puts(%Q'\
1700
+ *****************************************************************************
1701
+ **
1702
+ ** NATIVETHREAD SUPPORT CHECK WARNING:
1703
+ **
1704
+ ** We cannot check the consistency of nativethread support between
1705
+ ** Ruby and the Tcl/Tk library in your environment (are you perhaps
1706
+ ** cross-compiling?). If nativethread support for these 2 packages
1707
+ ** is inconsistent you may find you get errors when running Ruby/Tk
1708
+ ** (e.g. hangs or segmentation faults). We strongly recommend
1709
+ ** you to check the consistency manually.
1710
+ **
1711
+ *****************************************************************************
1712
+ ')
1713
+ return true
1714
+ end
1715
+ end
1716
+
1717
+ if tcl_enable_thread == nil
1718
+ # tcl-thread is unknown
1719
+ if try_run(<<EOF)
1720
+ #include <tcl.h>
1721
+ int main() {
1722
+ Tcl_Interp *ip;
1723
+ ip = Tcl_CreateInterp();
1724
+ exit((Tcl_Eval(ip, "set tcl_platform(threaded)") == TCL_OK)? 0: 1);
1725
+ }
1726
+ EOF
1727
+ tcl_enable_thread = true
1728
+ elsif try_run(<<EOF)
1729
+ #include <tcl.h>
1730
+ static Tcl_ThreadDataKey dataKey;
1731
+ int main() { exit((Tcl_GetThreadData(&dataKey, 1) == dataKey)? 1: 0); }
1732
+ EOF
1733
+ tcl_enable_thread = true
1734
+ else
1735
+ tcl_enable_thread = false
1736
+ end
1737
+ end
1738
+
1739
+ # check pthread mode
1740
+ if (TkLib_Config["ruby_with_thread"])
1741
+ $CPPFLAGS ||= ""
1742
+
1743
+ # ruby -> enable
1744
+ unless tcl_enable_thread
1745
+ # ruby -> enable && tcl -> disable
1746
+ puts(%Q'\
1747
+ *****************************************************************************
1748
+ **
1749
+ ** NATIVETHREAD SUPPORT MODE WARNING:
1750
+ **
1751
+ ** Ruby is compiled with --enable-pthread, but your Tcl/Tk library
1752
+ ** seems to be compiled without nativethread support. Although you can
1753
+ ** create the tcltklib library, this combination may cause errors (e.g.
1754
+ ** hangs or segmentation faults). If you have no reason to keep the
1755
+ ** current nativethread support status, we recommend you reconfigure and
1756
+ ** recompile the libraries so that both or neither support nativethreads.
1757
+ **
1758
+ ** If you want change the status of nativethread support, please recompile
1759
+ ** Ruby without "--enable-pthread" configure option (If you use Ruby 1.9.x
1760
+ ** or later, you cannot remove this option, because it requires native-
1761
+ ** thread support.) or recompile Tcl/Tk with "--enable-threads" configure
1762
+ ** option (if your Tcl/Tk is later than or equal to Tcl/Tk 8.1).
1763
+ **
1764
+ *****************************************************************************
1765
+ ')
1766
+ end
1767
+
1768
+ # ruby -> enable && tcl -> enable/disable
1769
+ if tcl_enable_thread
1770
+ $CPPFLAGS += ' -DWITH_TCL_ENABLE_THREAD=1'
1771
+ else
1772
+ $CPPFLAGS += ' -DWITH_TCL_ENABLE_THREAD=0'
1773
+ end
1774
+
1775
+ return true
1776
+
1777
+ else
1778
+ # ruby -> disable
1779
+ if tcl_enable_thread
1780
+ # ruby -> disable && tcl -> enable
1781
+ puts(%Q'\
1782
+ *****************************************************************************
1783
+ **
1784
+ ** NATIVETHREAD SUPPORT MODE ERROR:
1785
+ **
1786
+ ** Ruby is not compiled with --enable-pthread, but your Tcl/Tk
1787
+ ** library seems to be compiled with nativethread support. This
1788
+ ** combination may cause frequent hang or segmentation fault
1789
+ ** errors when Ruby/Tk is working. We recommend that you NEVER
1790
+ ** create the library with such a combination of nativethread support.
1791
+ **
1792
+ ** Please recompile Ruby with the "--enable-pthread" configure option
1793
+ ** or recompile Tcl/Tk with the "--disable-threads" configure option.
1794
+ **
1795
+ *****************************************************************************
1796
+ ')
1797
+ $CPPFLAGS += ' -DWITH_TCL_ENABLE_THREAD=1'
1798
+ return false
1799
+ else
1800
+ # ruby -> disable && tcl -> disable
1801
+ $CPPFLAGS += ' -DWITH_TCL_ENABLE_THREAD=0'
1802
+ return true
1803
+ end
1804
+ end
1805
+ end
1806
+
1807
+ ##############################################################
1808
+ # main
1809
+ ##############################################################
1810
+ # check header file
1811
+ print("check functions.")
1812
+
1813
+ %w"ruby_native_thread_p rb_errinfo rb_safe_level rb_hash_lookup
1814
+ rb_proc_new rb_obj_untrust rb_obj_taint rb_set_safe_level_force
1815
+ rb_sourcefile rb_thread_alive_p rb_thread_check_trap_pending
1816
+ ruby_enc_find_basename
1817
+ ".each do |func|
1818
+ have_func(func, "ruby.h")
1819
+ progress(".")
1820
+ end
1821
+ progress("\n")
1822
+
1823
+ # check libraries
1824
+ unless is_win32?
1825
+ print("check libraries.")
1826
+ have_library("nsl", "t_open")
1827
+ progress(".")
1828
+ have_library("socket", "socket")
1829
+ progress(".")
1830
+ have_library("dl", "dlopen")
1831
+ progress(".")
1832
+ have_library("m", "log", "math.h")
1833
+ progress("\n")
1834
+ end
1835
+ $CPPFLAGS ||= ""
1836
+ $CPPFLAGS += ' -D_WIN32' if /cygwin/ =~ RUBY_PLATFORM
1837
+
1838
+ # Does ruby have nativethread ?
1839
+ TkLib_Config["ruby_with_thread"] =
1840
+ macro_defined?('HAVE_NATIVETHREAD', '#include "ruby.h"')
1841
+
1842
+
1843
+ #---------------------------------------------------
1844
+ TclConfig_Info = {}
1845
+ TkConfig_Info = {}
1846
+
1847
+ # use Tcl/Tk build dir? (has highest priority)
1848
+ TkLib_Config["tcl-build-dir"] = with_config("tcl-build-dir")
1849
+ TkLib_Config["tk-build-dir"] = with_config("tk-build-dir")
1850
+ if TkLib_Config["tcl-build-dir"]
1851
+ puts("use Tcl build (pre-install) dir \"#{TkLib_Config["tcl-build-dir"]}\"")
1852
+ TkLib_Config["tcl-build-dir"] = File.expand_path(TkLib_Config["tcl-build-dir"])
1853
+ base = File.dirname(TkLib_Config["tcl-build-dir"])
1854
+ ($INCFLAGS ||= "") << " -I#{File.join(base, "generic").quote} -I#{TkLib_Config["tcl-build-dir"].quote}"
1855
+ $LIBPATH ||= []; $LIBPATH |= [TkLib_Config["tcl-build-dir"]]
1856
+ end
1857
+ if TkLib_Config["tk-build-dir"]
1858
+ puts("use Tk build (pre-install) dir \"#{TkLib_Config["tk-build-dir"]}\"")
1859
+ TkLib_Config["tk-build-dir"] = File.expand_path(TkLib_Config["tk-build-dir"])
1860
+ base = File.dirname(TkLib_Config["tk-build-dir"])
1861
+ ($INCFLAGS ||= "") << " -I#{File.join(base, "generic").quote} -I#{TkLib_Config["tk-build-dir"].quote}"
1862
+ $LIBPATH ||= []; $LIBPATH |= [TkLib_Config["tk-build-dir"]]
1863
+ end
1864
+
1865
+ # check requirement of Tcl/tk version
1866
+ tcltk_version = with_config("tcltkversion")
1867
+ TkLib_Config["tcltkversion"] = check_tcltk_version(tcltk_version)
1868
+
1869
+ if TkLib_Config["tcl-build-dir"]
1870
+ if (cfgfile = with_config("tclConfig-file", Dir.glob(File.join(TkLib_Config["tcl-build-dir"], "tclConfig*.sh"), File::FNM_CASEFOLD)[0]))
1871
+ TclConfig_Info['config_file_path'] = cfgfile
1872
+ TkLib_Config["tclConfig_info"] = cfginfo = parse_tclConfig(cfgfile)
1873
+ if tclver = TkLib_Config["tcltkversion"][0]
1874
+ TkLib_Config["tcltkversion"][0].sub!(/\d(\.?)\d/, "#{cfginfo['TCL_MAJOR_VERSION']}\\1#{cfginfo['TCL_MINOR_VERSION']}")
1875
+ else
1876
+ TkLib_Config["tcltkversion"][0] = "#{cfginfo['TCL_MAJOR_VERSION']}.#{cfginfo['TCL_MINOR_VERSION']}"
1877
+ end
1878
+ end
1879
+ end
1880
+ if TkLib_Config["tk-build-dir"]
1881
+ if (cfgfile = with_config("tkConfig-file", Dir.glob(File.join(TkLib_Config["tk-build-dir"], "tkConfig*.sh"), File::FNM_CASEFOLD)[0]))
1882
+ TkConfig_Info['config_file_path'] = cfgfile
1883
+ TkLib_Config["tkConfig_info"] = cfginfo = parse_tclConfig(cfgfile)
1884
+ if TkLib_Config["tcltkversion"][1]
1885
+ TkLib_Config["tcltkversion"][1].sub!(/\d(\.?)\d/, "#{cfginfo['TK_MAJOR_VERSION']}\\1#{cfginfo['TK_MINOR_VERSION']}")
1886
+ else
1887
+ TkLib_Config["tcltkversion"][1] = "#{cfginfo['TK_MAJOR_VERSION']}.#{cfginfo['TK_MINOR_VERSION']}"
1888
+ end
1889
+ end
1890
+ end
1891
+
1892
+ tclver, tkver = TkLib_Config["tcltkversion"]
1893
+ puts("Specified Tcl/Tk version is #{[tclver, tkver].inspect}") if tclver||tkver
1894
+
1895
+ # use ActiveTcl ?
1896
+ #if activeTcl = with_config("ActiveTcl")
1897
+ #if activeTcl = with_config("ActiveTcl", true)
1898
+ if activeTcl = with_config("ActiveTcl", !(TkLib_Config["tcl-build-dir"] && TkLib_Config["tk-build-dir"]))
1899
+ puts("Use ActiveTcl libraries (if available).")
1900
+ unless activeTcl.kind_of? String
1901
+ # set default ActiveTcl path
1902
+ if CROSS_COMPILING
1903
+ elsif is_win32?
1904
+ activeTcl = 'c:/Tcl*'
1905
+ elsif is_macosx?
1906
+ activeTcl = '/Library/Frameworks'
1907
+ else
1908
+ activeTcl = '/opt/ActiveTcl*'
1909
+ end
1910
+ end
1911
+ end
1912
+ TkLib_Config["ActiveTcl"] = activeTcl
1913
+
1914
+ # allow space chars on a libpath
1915
+ TkLib_Config["space-on-tk-libpath"] =
1916
+ enable_config("space-on-tk-libpath", ! is_win32?)
1917
+
1918
+ # enable Tcl/Tk stubs?
1919
+ =begin
1920
+ if /\S/ =~ TclConfig_Info['TCL_STUB_LIB_SPEC'] &&
1921
+ /\S/ =~ TkConfig_Info['TK_STUB_LIB_SPEC']
1922
+ stubs = true
1923
+ unless (st = enable_config("tcltk-stubs")).nil?
1924
+ stubs &&= st
1925
+ end
1926
+ unless (st = with_config("tcltk-stubs")).nil?
1927
+ stubs &&= st
1928
+ end
1929
+ else
1930
+ stubs = enable_config("tcltk-stubs") || with_config("tcltk-stubs")
1931
+ end
1932
+ =end
1933
+ stubs = enable_config("tcltk-stubs") || with_config("tcltk-stubs")
1934
+ if (TkLib_Config["tcltk-stubs"] = stubs)
1935
+ puts("Compile with Tcl/Tk stubs.")
1936
+ $CPPFLAGS ||= ""; $CPPFLAGS += ' -DUSE_TCL_STUBS -DUSE_TK_STUBS'
1937
+ end
1938
+
1939
+ # directory configuration of Tcl/Tk libraries
1940
+ if TkLib_Config["tcl-build-dir"]
1941
+ tcl_idir = File.join(File.dirname(TkLib_Config["tcl-build-dir"]),"generic")
1942
+ tcl_ldir = TkLib_Config["tcl-build-dir"]
1943
+ else
1944
+ tcl_idir, tcl_ldir = dir_config("tcl")
1945
+ end
1946
+ if TkLib_Config["tk-build-dir"]
1947
+ tk_idir = File.join(File.dirname(TkLib_Config["tk-build-dir"]),"generic")
1948
+ tk_ldir = TkLib_Config["tk-build-dir"]
1949
+ else
1950
+ tk_idir, tk_ldir = dir_config("tk")
1951
+ end
1952
+
1953
+ tcl_idir = tk_idir unless tcl_idir
1954
+ tcl_ldir = tk_ldir unless tcl_ldir
1955
+ tk_idir = tcl_idir unless tk_idir
1956
+ tk_ldir = tcl_ldir unless tk_ldir
1957
+
1958
+ TclConfig_Info['TCL_INCLUDE_SPEC'] ||= ""
1959
+ TkConfig_Info['TK_INCLUDE_SPEC'] ||= ""
1960
+ TclConfig_Info['TCL_INCLUDE_SPEC'][0,0] = "-I#{tcl_idir.quote} " if tcl_idir
1961
+ TkConfig_Info['TK_INCLUDE_SPEC'][0,0] = "-I#{tk_idir.quote} " if tk_idir
1962
+
1963
+ # get tclConfig.sh/tkConfig.sh
1964
+ TkLib_Config["tcl-NG-path"] = []
1965
+ TkLib_Config["tk-NG-path"] = []
1966
+ tclcfg, tkcfg =
1967
+ get_tclConfig(
1968
+ TclConfig_Info['config_file_path'] || with_config("tclConfig-file", true),
1969
+ TkConfig_Info['config_file_path'] || with_config("tkConfig-file", true),
1970
+ (TclConfig_Info['config_file_path'])?
1971
+ File.dirname(TclConfig_Info['config_file_path']) :
1972
+ with_config("tclConfig-dir", tcl_ldir || true),
1973
+ (TkConfig_Info['config_file_path'])?
1974
+ File.dirname(TkConfig_Info['config_file_path']) :
1975
+ with_config("tkConfig-dir", tk_ldir || true)
1976
+ )
1977
+ TclConfig_Info.merge!(TkLib_Config["tclConfig_info"]) if TkLib_Config["tclConfig_info"]
1978
+ TkConfig_Info.merge!(TkLib_Config["tkConfig_info"]) if TkLib_Config["tkConfig_info"]
1979
+ TclConfig_Info['config_file_path'] ||= tclcfg
1980
+ TkConfig_Info['config_file_path'] ||= tkcfg
1981
+
1982
+ tk_cfg_dir = File.dirname(TkConfig_Info['config_file_path']) rescue nil
1983
+ tcl_cfg_dir = File.dirname(TclConfig_Info['config_file_path']) rescue nil
1984
+
1985
+ tk_ldir_list = [tk_ldir, tk_cfg_dir].uniq
1986
+ tcl_ldir_list = [tcl_ldir, tcl_cfg_dir].uniq
1987
+
1988
+ if TkConfig_Info['config_file_path']
1989
+ if TkLib_Config["tk-build-dir"]
1990
+ spec_dir = get_libpath(TkConfig_Info['TK_LIB_FLAG'], TkConfig_Info['TK_BUILD_LIB_SPEC'])
1991
+ else
1992
+ spec_dir = get_libpath(TkConfig_Info['TK_LIB_FLAG'], TkConfig_Info['TK_LIB_SPEC'])
1993
+ end
1994
+ tk_ldir_list << spec_dir if File.directory?(spec_dir)
1995
+ end
1996
+ if TclConfig_Info['config_file_path']
1997
+ if TkLib_Config["tcl-build-dir"]
1998
+ spec_dir = get_libpath(TclConfig_Info['TCL_LIB_FLAG'], TclConfig_Info['TCL_BUILD_LIB_SPEC'])
1999
+ else
2000
+ spec_dir = get_libpath(TclConfig_Info['TCL_LIB_FLAG'], TclConfig_Info['TCL_LIB_SPEC'])
2001
+ end
2002
+ tcl_ldir_list << spec_dir if File.directory?(spec_dir)
2003
+ end
2004
+
2005
+ # check tk_shlib_search_path
2006
+ TkLib_Config["checked_shlib_dirs"] =
2007
+ check_shlib_search_path(with_config('tk-shlib-search-path'))
2008
+
2009
+ # set TCL_DEFS and TK_DEFS
2010
+ $CPPFLAGS ||= ""
2011
+ # $CPPFLAGS += " #{TclConfig_Info['TCL_DEFS']}"
2012
+ # $CPPFLAGS += " #{TkConfig_Info['TK_DEFS']}"
2013
+ $defs += collect_tcltk_defs(TclConfig_Info['TCL_DEFS'], TkConfig_Info['TK_DEFS'])
2014
+
2015
+ # MacOS X Frameworks?
2016
+ if TkLib_Config["tcltk-framework"]
2017
+ puts("Use MacOS X Frameworks.")
2018
+ ($LDFLAGS ||= "") << " " << libpathflag([TkLib_Config["tcl-build-dir"]]) if TkLib_Config["tcl-build-dir"]
2019
+
2020
+ libs = ''
2021
+ if tcl_cfg_dir
2022
+ TclConfig_Info['TCL_LIBS'] ||= ""
2023
+ ($INCFLAGS ||= "") << ' ' << TclConfig_Info['TCL_INCLUDE_SPEC']
2024
+ libs << ' ' << TclConfig_Info['TCL_LIBS']
2025
+ if stubs
2026
+ if TkLib_Config["tcl-build-dir"] &&
2027
+ /\S/ =~ TclConfig_Info['TCL_BUILD_STUB_LIB_SPEC']
2028
+ libs << ' ' << TclConfig_Info['TCL_BUILD_STUB_LIB_SPEC']
2029
+ else
2030
+ libs << ' ' << TclConfig_Info['TCL_STUB_LIB_SPEC']
2031
+ end
2032
+ else
2033
+ if TkLib_Config["tcl-build-dir"] &&
2034
+ /\S/ =~ TclConfig_Info['TCL_BUILD_LIB_SPEC']
2035
+ libs << ' ' << TclConfig_Info['TCL_BUILD_LIB_SPEC']
2036
+ else
2037
+ libs << ' ' << TclConfig_Info['TCL_LIB_SPEC']
2038
+ end
2039
+ end
2040
+ end
2041
+
2042
+ libs << " " << libpathflag([TkLib_Config["tk-build-dir"]]) if TkLib_Config["tk-build-dir"]
2043
+
2044
+ if tk_cfg_dir
2045
+ TkConfig_Info['TK_LIBS'] ||= ""
2046
+ ($INCFLAGS ||= "") << ' ' << TkConfig_Info['TK_INCLUDE_SPEC']
2047
+ libs << ' ' << TkConfig_Info['TK_LIBS']
2048
+ if stubs
2049
+ if TkLib_Config["tk-build-dir"] &&
2050
+ /\S/ =~ TclConfig_Info['TK_BUILD_STUB_LIB_SPEC']
2051
+ libs << ' ' << TkConfig_Info['TK_BUILD_STUB_LIB_SPEC']
2052
+ else
2053
+ libs << ' ' << TkConfig_Info['TK_STUB_LIB_SPEC']
2054
+ end
2055
+ else
2056
+ if TkLib_Config["tk-build-dir"] &&
2057
+ /\S/ =~ TclConfig_Info['TK_BUILD_LIB_SPEC']
2058
+ libs << ' ' << TkConfig_Info['TK_BUILD_LIB_SPEC']
2059
+ else
2060
+ libs << ' ' << TkConfig_Info['TK_LIB_SPEC']
2061
+ end
2062
+ end
2063
+ end
2064
+ $LDFLAGS << ' ' << libs
2065
+ setup_for_macosx_framework(tclver, tkver) if tcl_cfg_dir && tk_cfg_dir
2066
+ end
2067
+
2068
+ # name of Tcl/Tk libraries
2069
+ tklib = with_config("tklib")
2070
+ tcllib = with_config("tcllib")
2071
+
2072
+ # search X libraries
2073
+ use_X = search_X_libraries
2074
+
2075
+
2076
+ #---------------------------------------------------
2077
+ if (TkLib_Config["tcltk-framework"] ||
2078
+ ( find_tcltk_header(tclver, tkver) &&
2079
+ find_tcltk_library(tcllib, tklib, stubs, tclver, tkver,
2080
+ tcl_ldir_list, tk_ldir_list) ) ) &&
2081
+ (stubs || pthread_check())
2082
+ # create Makefile
2083
+
2084
+ # for SUPPORT_STATUS
2085
+ $INSTALLFILES ||= []
2086
+ $INSTALLFILES << ["lib/tkextlib/SUPPORT_STATUS", "$(RUBYLIBDIR)", "lib"]
2087
+
2088
+ # remove harmful definitions.
2089
+ $defs.delete_if{|x|/^-Du?intptr_t=/ =~ x}
2090
+
2091
+ create_makefile("tcltklib")
2092
+
2093
+ puts "\nFind Tcl/Tk libraries. Make tcltklib.so which is required by Ruby/Tk."
2094
+ else
2095
+ puts "\nCan't find proper Tcl/Tk libraries. So, can't make tcltklib.so which is required by Ruby/Tk."
2096
+ puts "If you have Tcl/Tk libraries on your environment, you may be able to use them with configure options (see ext/tk/README.tcltklib)."
2097
+ puts "At present, Tcl/Tk8.6 is not supported. Although you can try to use Tcl/Tk8.6 with configure options, it will not work correctly. I recommend you to use Tcl/Tk8.5 or 8.4."
2098
+ end