Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ruby/TK on Mac OS X Tiger?

19 views
Skip to first unread message

Tom Nakamura

unread,
May 17, 2005, 4:08:18 AM5/17/05
to
Can anyone do a quick test to see if "require 'tk'" work by default on
Tiger?
Tom


Mark Hubbart

unread,
May 17, 2005, 4:16:44 AM5/17/05
to
Hi,

On 5/17/05, Tom Nakamura <imif...@imap.cc> wrote:
> Can anyone do a quick test to see if "require 'tk'" work by default on
> Tiger?

Yes! Imagine my surprise :)

cheers,
Mark


Philipp Kern

unread,
May 17, 2005, 5:52:42 PM5/17/05
to

And it looks really nice (apart from the window background colour, but
I'm sure that one could fix this) as the OS X Tk uses native controls
where possible. I think I had the same surprised look on my eyes like
you, Mark. (=

Kind regards,
Philipp Kern

Mark Hubbart

unread,
May 17, 2005, 9:31:20 PM5/17/05
to
Hi --

Yeah :) I guess they used the TclTkAqua framework. It sure seems to be
the same thing, anyway, and I don't think there was any other
distribution that used native widgets. Also, the tcl/tk extension
compiles right out of the box, so that's great for the project I'm
working on. Now I just have to start learning to use it; I never
bothered before.

cheers,
Mark


Dave Baldwin

unread,
May 18, 2005, 3:37:02 AM5/18/05
to

I tried this simple program from Pickaxe
require 'tk'
TkLabel.new { text 'Hello, World!'; pack }
Tk.mainloop

and got:

dyld: NSLinkModule() error
dyld: Library not loaded: /usr/X11R6/lib/libX11.6.dylib
Referenced from: /usr/lib/ruby/1.8/powerpc-darwin8.0/tcltklib.bundle
Reason: image not found
Trace/BPT trap

so it looks like it relies on X11 being installed. I did a standard
Tiger install with xcode but not x11.

Dave.


Mark Hubbart

unread,
May 18, 2005, 12:03:24 PM5/18/05
to

It works fine here, with X11. If you are doing any unix stuff, you
really should have X11 installed anyway. The only thing that bothers
me is that this means a Ruby/Tk app will only run on a computer that
has the X11 lib.

Since Tk uses Aqua, not X11, as a display (you get an icon in the dock
and everything here), I'm guessing that it links to X11 for some other
dependencies. But it *is* a bit annoying... I wonder if that
dependency could be eliminated?

cheers,
Mark


Mark Hubbart

unread,
May 18, 2005, 12:10:50 PM5/18/05
to

I forgot to specify that the requirement is in the *Ruby* Tk
extension, not in the Tk framework itself. Tk apps run fine without
X11, RubyTk apps don't.

cheers,
Mark


Hidetoshi NAGAI

unread,
May 18, 2005, 11:55:11 PM5/18/05
to
From: Mark Hubbart <discor...@gmail.com>
Subject: Re: Ruby/TK on Mac OS X Tiger?
Date: Thu, 19 May 2005 01:10:50 +0900
Message-ID: <de63abca05051...@mail.gmail.com>

> I forgot to specify that the requirement is in the *Ruby* Tk
> extension, not in the Tk framework itself. Tk apps run fine without
> X11, RubyTk apps don't.

Hmmm...
I think, when do configure with "--enable-mac-tcltk-framework"
option, Ruby/Tk (tcltklib) doesn't need to link the X11 library.
Am I wrong?
Could anyone try to compile with "--enable-mac-tcltk-framework" ?

# I have no MacOSX machines. So, I cannot test it.
--
Hidetoshi NAGAI (na...@ai.kyutech.ac.jp)


Mark Hubbart

unread,
May 19, 2005, 3:43:12 AM5/19/05
to
On 5/18/05, Hidetoshi NAGAI <na...@ai.kyutech.ac.jp> wrote:
> From: Mark Hubbart <discor...@gmail.com>
> Subject: Re: Ruby/TK on Mac OS X Tiger?
> Date: Thu, 19 May 2005 01:10:50 +0900
> Message-ID: <de63abca05051...@mail.gmail.com>
> > I forgot to specify that the requirement is in the *Ruby* Tk
> > extension, not in the Tk framework itself. Tk apps run fine without
> > X11, RubyTk apps don't.
>
> Hmmm...
> I think, when do configure with "--enable-mac-tcltk-framework"
> option, Ruby/Tk (tcltklib) doesn't need to link the X11 library.
> Am I wrong?
> Could anyone try to compile with "--enable-mac-tcltk-framework" ?

I'll try it out. I suspect Apple used it when compiling, though, since
they linked it against the framework.

configure --prefix=/foo/local --enable-mac-tcltk-framework --enable-pthread

..

configured, compiled, installed, moved the X11 library out of the way.
it fails while trying to load libx11.

Tried removing X11 and compiling the tcltklib extension. It wouldn't compile.

Here's the extconf output from a successful configuration:

mark@eMac% ruby extconf.rb
checking for t_open() in -lnsl... no
checking for socket() in -lsocket... no
checking for dlopen() in -ldl... yes
checking for log() in -lm... no
checking for tcl.h... yes
checking for tk.h... yes
checking for XOpenDisplay() in -lX11... yes
checking for Tcl_FindExecutable() in -ltcl... yes
checking for Tk_Init() in -ltk... yes
creating Makefile

Also, since my recent Tiger (OSX 10.4) upgrade, the average c file in
the ruby source gives a good 20-30 warnings about pointers differing
in signedness. Yay, megabytes of text in my scrollback buffer. :)

HTH,
Mark


Hidetoshi NAGAI

unread,
May 19, 2005, 5:59:32 AM5/19/05
to
From: Mark Hubbart <discor...@gmail.com>
Subject: Re: Ruby/TK on Mac OS X Tiger?
Date: Thu, 19 May 2005 16:43:12 +0900
Message-ID: <de63abca05051...@mail.gmail.com>

> I'll try it out. I suspect Apple used it when compiling, though, since
> they linked it against the framework.
>
> configure --prefix=/foo/local --enable-mac-tcltk-framework --enable-pthread
(snip)

> Here's the extconf output from a successful configuration:
>
> mark@eMac% ruby extconf.rb
> checking for t_open() in -lnsl... no
> checking for socket() in -lsocket... no
> checking for dlopen() in -ldl... yes
> checking for log() in -lm... no
> checking for tcl.h... yes
> checking for tk.h... yes
> checking for XOpenDisplay() in -lX11... yes
> checking for Tcl_FindExecutable() in -ltcl... yes
> checking for Tk_Init() in -ltk... yes
> creating Makefile

Thank you for your report.
Possibly, at least one of the following tests returns fail.
------------------------------------------------------------------
is_macosx = (/darwin/ =~ RUBY_PLATFORM)

mac_need_framework =
is_macosx &&
enable_config("mac-tcltk-framework", false) &&
FileTest.directory?("/Library/Frameworks/Tcl.framework/") &&
FileTest.directory?("/Library/Frameworks/Tk.framework/")
------------------------------------------------------------------
Could you tell me about which test does make "mac_need_framework"
value false?

# Or could you recommend better test for MacOS X Framework?
--
Hidetoshi NAGAI (na...@ai.kyutech.ac.jp)


Goran Stankovic

unread,
May 19, 2005, 1:04:29 PM5/19/05
to

That is correct. I used:

$ ./configure --enable-mac-tcltk-framework

and I don't need X11 library to run RubyTk.

Goran

Hidetoshi NAGAI

unread,
May 19, 2005, 9:38:27 PM5/19/05
to
From: Goran Stankovic <gor...@swbell.net>

Subject: Re: Ruby/TK on Mac OS X Tiger?
Date: Fri, 20 May 2005 02:04:29 +0900
Message-ID: <2005051917042...@web81410.mail.yahoo.com>

> That is correct. I used:
>
> $ ./configure --enable-mac-tcltk-framework
>
> and I don't need X11 library to run RubyTk.

Thank you for your report.
However, I got a report that frameworks directory is changed
on MacOS X Tiger.
If you don't mind, please test the following patch of
ext/tcltklib/extconf.rb whether it has no trouble on your
environment.

Index: extconf.rb
===================================================================
RCS file: /var/cvs/src/ruby/ext/tcltklib/Attic/extconf.rb,v
retrieving revision 1.15.2.9
diff -u -r1.15.2.9 extconf.rb
--- extconf.rb 25 Jan 2005 05:08:21 -0000 1.15.2.9
+++ extconf.rb 20 May 2005 01:33:34 -0000
@@ -5,11 +5,23 @@
is_win32 = (/mswin32|mingw|cygwin|bccwin32/ =~ RUBY_PLATFORM)


is_macosx = (/darwin/ =~ RUBY_PLATFORM)

-mac_need_framework =
- is_macosx &&
- enable_config("mac-tcltk-framework", false) &&
- FileTest.directory?("/Library/Frameworks/Tcl.framework/") &&
- FileTest.directory?("/Library/Frameworks/Tk.framework/")
+def find_mac_framework
+ if macosx_frameworks = with_config("mac-tcltk-framework")
+ paths = [macosx_frameworks]
+ else
+ return false unless enable_config("mac-tcltk-framework", false)
+ paths = ["/Library/Frameworks", "/System/Library/Frameworks"]
+ end
+
+ paths.find{|dir|
+ dir.strip!
+ dir.chomp!('/')
+ FileTest.directory?(dir + "/Tcl.framework/") &&
+ FileTest.directory?(dir + "/Tk.framework/")
+ }
+end
+
+mac_need_framework = is_macosx && find_mac_framework()

unless is_win32
have_library("nsl", "t_open")
@@ -259,7 +271,8 @@
$CPPFLAGS += ' -D_WIN32' if /cygwin/ =~ RUBY_PLATFORM

if mac_need_framework
- $CPPFLAGS += ' -I/Library/Frameworks/Tcl.framework/headers -I/Library/Frameworks/Tk.framework/Headers'
+ $CPPFLAGS += " -I#{mac_need_framework}/Tcl.framework/headers"
+ $CPPFLAGS += " -I#{mac_need_framework}/Tk.framework/Headers"
$LDFLAGS += ' -framework Tk -framework Tcl'
end

--
Hidetoshi NAGAI (na...@ai.kyutech.ac.jp)


Hidetoshi NAGAI

unread,
May 20, 2005, 1:52:33 PM5/20/05
to
From: Hidetoshi NAGAI <na...@ai.kyutech.ac.jp>

Subject: Re: Ruby/TK on Mac OS X Tiger?
Date: Fri, 20 May 2005 10:38:27 +0900
Message-ID: <20050520.103824...@ai.kyutech.ac.jp>

> If you don't mind, please test the following patch of
> ext/tcltklib/extconf.rb whether it has no trouble on your
> environment.

Is the following better?

Index: README.1st
===================================================================
RCS file: /var/cvs/src/ruby/ext/tcltklib/Attic/README.1st,v
retrieving revision 1.4.2.3
diff -u -r1.4.2.3 README.1st
--- README.1st 2 Sep 2004 17:16:59 -0000 1.4.2.3
+++ README.1st 20 May 2005 17:47:57 -0000
@@ -22,7 +22,24 @@
--with-tcl-lib=<dir> the directry containts 'libtcl<version>.so'
--with-tk-lib=<dir> the directry containts 'libtk<version>.so'

- --enable-mac-tcltk-framework (Mac OSX only) use Tcl/Tk framework
+ --enable-mac-tcltk-framework (MacOS X) use Tcl/Tk framework
+ (Obsolete. Please use '--enable-tcltk-framework'.)
+
+ --enable-tcltk-framework use Tcl/Tk framework
+
+ --with-tcltk-framework=<dir> the directory containts Tcl/Tk framework;
+ "<dir>/Tcl.framework" and "<dir>/Tk.framework".
+ When this option is given, it is assumed that
+ --enable-tcltk-framework option is given also.
+
+ --with-tcl-framework-header=<dir>
+ Tcl framework headers directory
+ (e.g. "/Library/Frameworks/Tcl.framework/Headers")
+
+ --with-tk-framework-header=<dir>
+ Tk framework headers directory
+ (e.g. "/Library/Frameworks/Tk.framework/Headers")
+

If you forgot to give the options when do 'configure' on toplevel
directry of Ruby sources, please try something like as the followings.


Index: extconf.rb
===================================================================
RCS file: /var/cvs/src/ruby/ext/tcltklib/Attic/extconf.rb,v
retrieving revision 1.15.2.9
diff -u -r1.15.2.9 extconf.rb
--- extconf.rb 25 Jan 2005 05:08:21 -0000 1.15.2.9

+++ extconf.rb 20 May 2005 17:47:58 -0000
@@ -3,13 +3,34 @@
require 'mkmf'



is_win32 = (/mswin32|mingw|cygwin|bccwin32/ =~ RUBY_PLATFORM)

-is_macosx = (/darwin/ =~ RUBY_PLATFORM)
+#is_macosx = (/darwin/ =~ RUBY_PLATFORM)



-mac_need_framework =
- is_macosx &&
- enable_config("mac-tcltk-framework", false) &&
- FileTest.directory?("/Library/Frameworks/Tcl.framework/") &&
- FileTest.directory?("/Library/Frameworks/Tk.framework/")

+def find_framework(tcl_hdr, tk_hdr)
+ if framework_dir = with_config("tcltk-framework")
+ paths = [framework_dir]
+ else
+ unless tcl_hdr || tk_hdr ||
+ enable_config("tcltk-framework", false) ||
+ enable_config("mac-tcltk-framework", false)
+ return false
+ end


+ paths = ["/Library/Frameworks", "/System/Library/Frameworks"]
+ end
+

+ checking_for('Tcl/Tk Framework') {


+ paths.find{|dir|
+ dir.strip!
+ dir.chomp!('/')

+ (tcl_hdr || FileTest.directory?(dir + "/Tcl.framework/") ) &&
+ (tk_hdr || FileTest.directory?(dir + "/Tk.framework/") )
+ }
+ }
+end
+
+tcl_framework_header = with_config("tcl-framework-header")
+tk_framework_header = with_config("tk-framework-header")
+
+tcltk_framework = find_framework(tcl_framework_header, tk_framework_header)



unless is_win32
have_library("nsl", "t_open")

@@ -249,7 +270,7 @@
end
end

-if mac_need_framework ||
+if tcltk_framework ||
(have_header("tcl.h") && have_header("tk.h") &&
(is_win32 || find_library("X11", "XOpenDisplay",
"/usr/X11/lib", "/usr/lib/X11", "/usr/X11R6/lib", "/usr/openwin/lib")) &&
@@ -258,8 +279,19 @@
$CPPFLAGS += ' -DUSE_TCL_STUBS -DUSE_TK_STUBS' if stubs


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

- if mac_need_framework


- $CPPFLAGS += ' -I/Library/Frameworks/Tcl.framework/headers -I/Library/Frameworks/Tk.framework/Headers'

+ if tcltk_framework
+ if tcl_framework_header
+ $CPPFLAGS += " -I#{tcl_framework_header}"
+ else
+ $CPPFLAGS += " -I#{tcltk_framework}/Tcl.framework/Headers"
+ end
+
+ if tk_framework_header
+ $CPPFLAGS += " -I#{tk_framework_header}"
+ else
+ $CPPFLAGS += " -I#{tcltk_framework}/Tk.framework/Headers"
+ end
+

0 new messages