[Rubygems-developers] [ rubygems-Bugs-29077 ] [PATCH] executable wrapper should set $0

noreply at rubyforge.org noreply at rubyforge.org
Mon Mar 14 17:30:26 EDT 2011


Bugs item #29077, was opened at 2011-03-11 12:07
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=575&aid=29077&group_id=126

Category: `gem install` command
Group: v1.6.x
Status: Open
Resolution: None
Priority: 3
Submitted By: Suraj Kurapati (snk)
Assigned to: Eric Hodel (drbrain)
Summary: [PATCH] executable wrapper should set $0

Initial Comment:
Hello,

The wrapper executable that RubyGems generates should set $0 to the actual executable file before loading it.  This allows us to use the "if __FILE__ == $0" idiom (which is an indispensable feature for essentially single-file executables that we just want to release as ruby gems) in our executables.

Thanks for your consideration.

----------------------------------------------------------------------

>Comment By: Suraj Kurapati (snk)
Date: 2011-03-14 14:30

Message:
Although it is a single-file executable, it still uses data 
structures / logic factored into separate classes & modules.  
The "if __FILE__ == $0" idiom allows me to try out these 
data structures in IRB without "running" the executable.  
That idiom also allows me to embed a unit test inside the 
executable (via an additional "if $DEBUG") if I want.

I don't understand your comment about RubyGems not putting 
'bin' on the $LOAD_PATH.  Why does that matter?  Doesn't 
RubyGems install wrapper executables that rely on 
Gem.bin_path() instead of $LOAD_PATH?

IMHO, the wrapper executables RubyGems installs should be 
completely transparent to the underlying "real" executable 
being invoked.

Thanks for your consideration.

----------------------------------------------------------------------

Comment By: Eric Hodel (drbrain)
Date: 2011-03-14 13:45

Message:
If this is only a single-file executable why would you need the `if __FILE__ == $0` check?  RubyGems no longer places 'bin' on the load path.

----------------------------------------------------------------------

Comment By: Suraj Kurapati (snk)
Date: 2011-03-11 12:27

Message:
Here is a handy little command to fix existing wrappers:

sed -i '$s/^load G/load $0 = G/' \
$(gem env | sed -n 's/^.*EXECUTABLE DIRECTORY: *//p')/*

Cheers.

----------------------------------------------------------------------

Comment By: Suraj Kurapati (snk)
Date: 2011-03-11 12:15

Message:
Whoops, sorry for filing this patch request under the bug 
tracker (I started out writing a bug report but decided to 
submit a patch midway).  Please move it under the patch 
tracker if possible.  Thanks!

----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=575&aid=29077&group_id=126


More information about the Rubygems-developers mailing list