Gem help

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.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?

regards.

-a

···

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

Try adding some additional spec items to your gemspec.

The following works for me:

  s.bindir = "." # yours looks to be bin
  s.executables = [ "weft-qda.rb" ] # or whatever your main script is called
  s.default_executable = "weft-qda.rb"

hth
alex

···

ara.t.howard@noaa.gov wrote:

and this gem, apparently, does not install a 'rubyforge' script into the system
bin dir. why not?

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"]

Also, I recommend dropping the autorequire as well.

-- Jim Weirich

···

--
Posted via http://www.ruby-forum.com/\.

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

···

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"]

    #
    # 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

i should have included to complete patched 'gem' script:

   #!/usr/bin/env ruby

     require 'rubygems'
     Gem.manage_gems

     required_version = Gem::Version::Requirement.new(">= 1.8.0")
     unless required_version.satisfied_by?(Gem::Version.new(RUBY_VERSION))
       puts "Expected Ruby Version #{required_version}, was #{RUBY_VERSION}"
       exit(1)
     end

   # We need to preserve the original ARGV to use for passing gem options
   # to source gems. If there is a -- in the line, strip all options after
   # it...its for the source building process.
     args = !ARGV.include?("--") ? ARGV.clone : ARGV[0...ARGV.index("--")]

···

On Tue, 14 Feb 2006, Jim Weirich wrote:

   #
   # 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

     Gem::GemRunner.new.run(args)

not that env settings affect the install as well. so one can do

   GEM_BINDIR=/usr/local/bin gem install somelib.gem

regards.

-a

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