On Tue, 14 Feb 2006, Jim Weirich wrote:

> unknown wrote:
>> i have this
>>
>>      jib:~/eg/ruby/rubyforge/rubyforge-0.1.1 > file bin//rubyforge
>>      bin//rubyforge: a ruby script text executable
>>
>>
>>      jib:~/eg/ruby/rubyforge/rubyforge-0.1.1 > cat ./gemspec.rb
>>      lib, version =
>> File::basename(File::dirname(File::expand_path(__FILE__))).split %r/-/,
>> 2
>>
>>      require 'rubygems'
>>
>>      spec = Gem::Specification.new do |s|
>>        s.name = lib
>>        s.version = version
>>        s.platform = Gem::Platform::RUBY
>>        s.summary = lib
>>
>>        s.files = Dir["lib/*"] + Dir["bin/*"]
> +        s.bindir = "bin"
> +        s.executables = ["rubyforge"]
>>
>>        s.require_path = "lib"
>>        s.autorequire = lib
>>
>>        s.has_rdoc = File::exist? "doc"
>>        s.test_suite_file = "test/#{ lib }.rb" if File::directory? "test"
>>
>>        s.author = "Ara T. Howard"
>>        s.email = "ara.t.howard / noaa.gov"
>>        s.homepage = "http://codeforpeople.com/lib/ruby/#{ lib }/"
>>      end
>>
>>
>> and this gem, apparently, does not install a 'rubyforge' script into the
>> system
>> bin dir.  why not?
>
> Try adding ...'
>
>         s.bindir = "bin"
>         s.executables = ["rubyforge"]


thanks.


any reason why

   s.executables

would not a default value of

   Dir::glob(File::join("#{ bindir }", "*")) if File::exist?(bindir)

??


i actually did try that btw.  the reason it didn't work is because the bindir
installed to is not in my path.  i have something like this setup

   /usr/local/bin/ruby -> /usr/local/ruby-1.8.4/bin/ruby

   /usr/local/ruby-1.8.4/*
   /usr/local/ruby-1.8.3/*
   /usr/local/ruby-1.8.2/*
   /usr/local/ruby-1.8.1/*

etc.

so here a

   gem install rubyforge-0.0.0.gem


installs into

   /usr/local/bin/ruby-1.8.4/bin/rubyforge

which is not in my path.


a while back i posted this tiny patch the the top-level gem script


    #
    # munge rbconfig from any command line or environment kv pair
    #
     kvs = []
     re = %r/^ \s* ([^=\s]+) \s* = \s* ([^\s]+) \s* $/x
     args.delete_if{|arg| (m = re.match(arg)) and (kvs << m.to_a.last(2))}
     ENV::each{|k,v| (k =~ %r/^GEM_/) and (kvs << [k.delete('GEM_'), v])}
     unless kvs.empty?
       require 'rbconfig'
       kvs.each{|k,v| Config::CONFIG[k] = v}
     end


which allows setting of __any__ rbconfig value on the command line.  this
allows one to do this:


   gem install rubyforge-0.0.0.gem bindir=/usr/local/bin/


and other fine grained controls of any gem install.  any objection to adding
such a patch to gems?  as it stands now i cannot use the gem command to manage
anything but libs on my systems - commands simply disappear into non PATH
directories.

regards.


-a

-- 
judge your success by what you had to give up in order to get it.
- h.h. the 14th dali lama