Ruby 1.8.0 and Mac OS X and Tcl/Tk 8.4 Aqua (not!)

Ask a Question related to Ruby, Design and Development.

  1. #1

    Default Ruby 1.8.0 and Mac OS X and Tcl/Tk 8.4 Aqua (not!)


    My trials with Ruby and Tcl/Tk on Mac OS X

    Ruby is 1.8.0 preview 7
    Tcl/Tk 8.4 is the recent TclTk-Aqua build for that native OSX Aqua look
    Mac OS X is 10.2.3

    (1) 'configure' wasn't finding Tcl/Tk, so I hacked up an OSX-only version
    of ext/tcltklib/extconf.rb with hard-coded parameters
    (which might be OK because of the frameworks)

    =========
    # extconf.rb for tcltklib
    # HACKED for Mac OS X !!!

    require 'mkmf'

    if RUBY_PLATFORM !~ /mswin32|mingw|cygwin|bccwin32/
    have_library("nsl", "t_open")
    have_library("socket", "socket")
    have_library("dl", "dlopen")
    have_library("m", "log")
    end

    # these are left-over; they mean nothing
    dir_config("tk")
    dir_config("tcl")
    dir_config("X11")

    tklib = with_config("tklib")
    tcllib = with_config("tcllib")
    stubs = enable_config("tcltk_stubs") || with_config("tcltk_stubs")

    stubs = true # force it

    $CPPFLAGS += ' -DUSE_TCL_STUBS -DUSE_TK_STUBS' if stubs
    $CPPFLAGS += ' -D_WIN32' if /cygwin/ =~ RUBY_PLATFORM

    # these two are needed because #include <tcl.h> isn't "framework" friendly
    $CPPFLAGS += ' -I/Library/Frameworks/Tcl.framework/Headers'
    $CPPFLAGS += ' -I/Library/Frameworks/Tk.framework/Headers'

    # tell the compiler where the libraries are
    $CPPFLAGS += ' -framework Tcl -framework Tk'

    # let the linker know where the libraries are
    $LDFLAGS += ' -framework Tcl -framework Tk'

    create_makefile("tcltklib")
    =========

    You should be thoroughly disgusted with that. However, I was getting
    tired of running the following, and didn't know how to get the top-level
    'make' to add all those options when it configured the extension.
    Would those options really get carried from the top-level "./configure"
    all the way down to the extension?

    ruby extconf.rb \
    --with-tcl-include=/Library/Frameworks/Tcl.framework/Headers \
    --with-tk-include=/Library/Frameworks/Tk.framework/Headers \
    --with-tcl-lib=/Library/Frameworks/Tcl.framework/Tcl \
    --with-tk-lib=/Library/Frameworks/Tk.framework/Tk \
    --enable-tcltk_stubs --enable-tk_stubs

    (2) Now, the extension gets configured and compiles OK.
    Run-time is something else.

    /usr/lib/ruby/1.6/tk.rb:7:in `require': tcltklib: tcltk_stubs init error(-1) (LoadError)

    Debug printfs revealed that the stubs interface was looking for
    a library of 'libtcl8.4.bundle'. That's no-good for several reasons:
    - the Tcl and Tk libraries do not have a 'bundle' extension (DLEXT)
    - their names are much different than that

    I worked around this mismatch by defining two environment variables,
    thanks to the clear foresight of the author of 'stubs.c'!

    export RUBY_TCL_DLL=/Library/Frameworks/Tcl.framework/Tcl
    export RUBY_TK_DLL=/Library/Frameworks/Tk.framework/Tk

    (3) Now, when loading the 'tcltklib' extension, there was a new error:

    /usr/lib/ruby/1.6/tk.rb:7:in `require': tcltklib: tcltk_stubs init error(-2) (LoadError)

    The code showed that it couldn't find 'Tcl_CreateInterp'.
    After digging around 'dln.c' and the 'dl' library, I noticed a
    routine called 'dlsym_auto_underscore'. In the '#define' for DLSYM
    I used it instead of 'dlsym'. It seems to work, since the extension
    now loads without complaint.

    (4) So, I run 'demo/lines1.rb', and a big window comes up, with the
    translucent blue button in the Aqua style that says 'Draw'. Looks good,
    but there are a few problems:

    - every click in the window gives: "SetFrontProcess failed, -606"
    - the window cannot be dragged
    - the window cannot be closed, neither from the title bar,
    nor with a ^ or ^\ from the shell (a 'kill' from another window
    works OK, though)

    (5) According to some Apple documents, the correct macros to detect
    Mac OS X are both __DARWIN__ and __APPLE__. In some places (dln.c)
    I see NeXT and __APPLE__, or else it assumes OPENSTEP. I doubt that's
    a problem, but it had me looking cross-eyed at it for a long time! :-)

    FWIW, the top-level 'configure' generates: HAVE_LIBDL, HAVE_DLOPEN,
    and a DLEXT of ".bundle"

    So, I hope all this rambling will help someone else figure out what's going on.



    Mike Hall Guest

  2. Similar Questions and Discussions

    1. Aqua/Gel Button - Does Anyone Need This?
      I was just playing around Illustrator the other night & came up with a replica of the popular "aqua/gel" button that's been flying all over the Web...
    2. [Aqua Blue desktop image] Add more colour to you DP!
      I have reworked the Aqua blue desktop .jpg. Tell me if you like the 9 versions, get them before it's too late! Ciao from Italy! ...
    3. [ANN] ruby-freedb, ruby-serialport, ruby-mp3info moved to Rubyforge
      http://ruby-freedb.rubyforge.org/ http://ruby-serialport.rubyforge.org/ http://ruby-mp3info.rubyforge.org/ bye! --...
    4. LyX binary (MacOSX Aqua) -- fixed!
      The LyX binary for MacOSX Aqua has now been fixed. (The installation permissions on the original version were incorrect -- my apologies for any...
    5. LyX-1.3.2 on Aqua (MacOSX native w/o X11)
      I've just released a beta version of LyX-1.3.2 for MacOSX using the Aqua interface. This version does not require X11, and has the look & feel of...
  3. #2

    Default Re: Ruby 1.8.0 and Mac OS X and Tcl/Tk 8.4 Aqua (not!)


    On Saturday, August 2, 2003, at 03:21 PM, Mike Hall wrote:
    >
    > My trials with Ruby and Tcl/Tk on Mac OS X
    > [snip]
    Only once was I able to get tcltk working on Mac OS X and,
    unfortunately, I did not document how I did it and have never been able
    to repeat it (I have learned from that mistake :-( . I do hope that
    someone, somewhere, can figure this out, document what they did and
    share it with others.

    Regards,

    Mark


    Mark Wilson Guest

  4. #3

    Default Re: Ruby 1.8.0 and Mac OS X and Tcl/Tk 8.4 Aqua (not!)

    Hi,

    From: Mike Hall <mghall@enteract.com>
    Subject: Ruby 1.8.0 and Mac OS X and Tcl/Tk 8.4 Aqua (not!)
    Date: Sun, 3 Aug 2003 04:21:58 +0900
    Message-ID: <bgh2ev$h8m$2@bob.news.rcn.net>
    > My trials with Ruby and Tcl/Tk on Mac OS X
    (snip)
    > (4) So, I run 'demo/lines1.rb', and a big window comes up, with the
    > translucent blue button in the Aqua style that says 'Draw'. Looks good,
    > but there are a few problems:
    >
    > - every click in the window gives: "SetFrontProcess failed, -606"
    > - the window cannot be dragged
    > - the window cannot be closed, neither from the title bar,
    > nor with a ^ or ^\ from the shell (a 'kill' from another window
    > works OK, though)
    I read sources for MacOS X on Tcl/Tk8.4.4. But I couldn't understand
    the reason of the trouble. Although I thought that the trouble is based
    on the fail to treat events properly, I couldn't find the code which is
    the reason of the trouble.
    I have no chance to use MacOS X. So I cannot test to find the reason.
    I have not enough time to fix the trouble before Ruby 1.8.0 release.
    I'm sorry but I'll not modify sources on Ruby1.8.0-release.
    --
    Hidetoshi NAGAI (nagai@ai.kyutech.ac.jp)

    Hidetoshi NAGAI Guest

  5. #4

    Default Re: Ruby 1.8.0 and Mac OS X and Tcl/Tk 8.4 Aqua (not!)

    > I read sources for MacOS X on Tcl/Tk8.4.4. But I couldn't understand
    > the reason of the trouble. Although I thought that the trouble is based
    > on the fail to treat events properly, I couldn't find the code which is
    > the reason of the trouble.
    Probably because you don't have access to that code. :) I went down
    this path with RubyCocoa a while back. If I recall correctly, if you
    want to handle UI events in Mac OS X, the executable must reside within
    an application package/bundle. I filed a bug with Apple at the time,
    but I don't know the current status (ie, whether or not this has
    changed in Panther).

    Chris

    On Saturday, August 2, 2003, at 7:52 PM, Hidetoshi NAGAI wrote:
    > Hi,
    >
    > From: Mike Hall <mghall@enteract.com>
    > Subject: Ruby 1.8.0 and Mac OS X and Tcl/Tk 8.4 Aqua (not!)
    > Date: Sun, 3 Aug 2003 04:21:58 +0900
    > Message-ID: <bgh2ev$h8m$2@bob.news.rcn.net>
    >> My trials with Ruby and Tcl/Tk on Mac OS X
    > (snip)
    >> (4) So, I run 'demo/lines1.rb', and a big window comes up, with the
    >> translucent blue button in the Aqua style that says 'Draw'.
    >> Looks good,
    >> but there are a few problems:
    >>
    >> - every click in the window gives: "SetFrontProcess failed,
    >> -606"
    >> - the window cannot be dragged
    >> - the window cannot be closed, neither from the title bar,
    >> nor with a ^ or ^\ from the shell (a 'kill' from another
    >> window
    >> works OK, though)
    >
    > I read sources for MacOS X on Tcl/Tk8.4.4. But I couldn't understand
    > the reason of the trouble. Although I thought that the trouble is based
    > on the fail to treat events properly, I couldn't find the code which is
    > the reason of the trouble.
    > I have no chance to use MacOS X. So I cannot test to find the reason.
    > I have not enough time to fix the trouble before Ruby 1.8.0 release.
    > I'm sorry but I'll not modify sources on Ruby1.8.0-release.
    > --
    > Hidetoshi NAGAI
    > (nagai@ai.kyutech.ac.jp)
    >

    Chris Thomas Guest

  6. #5

    Default Re: Ruby 1.8.0 and Mac OS X and Tcl/Tk 8.4 Aqua (not!)


    On Saturday, August 2, 2003, at 10:52 PM, Hidetoshi NAGAI wrote:
    > [snip]
    > I'm sorry but I'll not modify sources on Ruby1.8.0-release.
    I think that once the problem is solved, it can be released as a shim
    prior to the release of 1.8.1. For your information, here is a link to
    a page describing how Python gets Tkinter to work on Mac OS X:

    [url]http://tony.lownds.com/macosx/tkinter.html[/url]

    I would be happy to help with this effort. My abilities are very
    limited in this area, but I can test possible solutions and report the
    results.

    Regards,

    Mark


    Mark Wilson Guest

Posting Permissions

  • You may not post new threads
  • You may post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139