Forum: Ruby gem help

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
unknown (Guest)
on 2006-02-14 03:53
(Received via mailing list)
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 = "removed_email_address@domain.invalid"
       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
Alex F. (Guest)
on 2006-02-14 04:03
(Received via mailing list)
removed_email_address@domain.invalid wrote:

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

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
Jim W. (Guest)
on 2006-02-14 04:13
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 = "removed_email_address@domain.invalid"
>        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 W.
unknown (Guest)
on 2006-02-14 05:19
(Received via mailing list)
On Tue, 14 Feb 2006, Jim W. wrote:

>> 2
> +        s.bindir = "bin"
>>        s.homepage = "http://codeforpeople.com/lib/ruby/#{ lib }/"
>         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
unknown (Guest)
on 2006-02-14 05:23
(Received via mailing list)
On Tue, 14 Feb 2006, Jim W. wrote:


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

   #
   # 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
This topic is locked and can not be replied to.