[23741] users
source_changes at macosforge.org
source_changes at macosforge.org
Sat Apr 7 20:26:31 PDT 2007
Revision: 23741
http://trac.macosforge.org/projects/macports/changeset/23741
Author: pguyot at kallisys.net
Date: 2007-04-07 20:26:31 -0700 (Sat, 07 Apr 2007)
Log Message:
-----------
Initial commit of gems_to_portfile.rb to my users/ space.
Added Paths:
-----------
users/pguyot/
users/pguyot/gems_to_portfile.rb
Added: users/pguyot/gems_to_portfile.rb
===================================================================
--- users/pguyot/gems_to_portfile.rb (rev 0)
+++ users/pguyot/gems_to_portfile.rb 2007-04-08 03:26:31 UTC (rev 23741)
@@ -0,0 +1,134 @@
+#!/opt/local/bin/ruby
+
+# File: gems_to_portfile.rb
+# Written by: Paul Guyot (pguyot at kallisys.net)
+# History:
+# Version: 1.2 (2007/04/08)
+# - Updated to new gems internal APIs.
+# - Console UI (Silent UI no longer asks for versions)
+# Version: 1.1 (2006/11/08)
+# - Silent UI (avoids breaks)
+# - Handle empty long description.
+# - Download files to /tmp/ and clean them afterwards (yay!)
+# - Don't download the file if it already exists in /tmp/ (like if an error
+# occurred)
+# - Downcase the name for the directory.
+# Version: 1.0 (2006/11/06)
+
+require "rubygems"
+require "rubygems/format"
+require "rubygems/remote_installer"
+require "digest/sha1"
+require "digest/md5"
+
+class Portfile
+ def initialize gem_file
+ format = Gem::Format.from_file_by_path gem_file
+ @spec = format.spec
+ @name = @spec.name.downcase
+ @version = @spec.version.to_s
+ # Escape brackets, as Tcl interpret them.
+ @description = @spec.summary.gsub(/\[/, '\\[').gsub(/\]/, '\\]')
+ long_description = @spec.description || @description
+ @long_description = long_description.
+ gsub(/\[/, '\\[').gsub(/\]/, '\\]')
+ data = IO.read gem_file
+ @checksum_sha1 = Digest::SHA1.hexdigest data
+ @checksum_md5 = Digest::MD5.hexdigest data
+ @checksum_rmd160 = `openssl rmd160 #{gem_file}`.gsub!(/.*= /, "").chop!
+ @homepage = @spec.homepage
+ end
+
+ def to_s
+ output = "# $Id$\n"
+ output += "\n"
+ output += "PortSystem 1.0\n"
+ output += "PortGroup ruby 1.0\n"
+ output += "ruby.setup #{@spec.name} #{@version} gem {} rubyforge_gem\n"
+ output += "maintainers nomaintainer at macports.org\n"
+ output += "description "
+ output += break_lines(@description, 57, " ")
+ output += "long_description "
+ output += break_lines(@long_description, 57, " ")
+ output += "checksums md5 #{@checksum_md5} \\\n"
+ output += " sha1 #{@checksum_sha1} \\\n"
+ output += " rmd160 #{@checksum_rmd160}\n"
+ output += "homepage #{@homepage}\n" if @homepage
+ output += "\n"
+ # put dependencies now.
+ dependencies = @spec.dependencies
+ output += "depends_lib-append" unless dependencies.empty?
+ @spec.dependencies.each do |dep_gem|
+ output += " \\\n port:rb-#{dep_gem.name.downcase}"
+ end
+ output += "\n" unless dependencies.empty?
+ output
+ end
+
+ def name
+ "rb-#{@name}"
+ end
+
+private
+ # Break a text into separate lines.
+ # Typically used for descriptions.
+ def break_lines(text, maxwidth, padding)
+ if text.size <= maxwidth then
+ text + "\n"
+ else
+ # break text in words, up to maxwidth - 1.
+ space_index = text.rindex(' ', maxwidth - 1) || maxwidth - 1
+ this_line = text[0..space_index] + "\\\n"
+ remaining = text[space_index + 1..-1]
+ this_line + padding + break_lines(remaining, maxwidth, padding)
+ end
+ end
+end
+
+class GemsToPortfile
+ def self.main args
+ Gem::DefaultUserInteraction.ui = Gem::ConsoleUI.new
+ case args.size
+ when 0
+ puts "Gems to Portfile translation script"
+ syntax
+ when 1
+ self.new args[0]
+ else
+ puts "Syntax error"
+ syntax
+ end
+ end
+
+ def self.syntax
+ puts "Syntax: #{$0} (path_to_file.gem|gem_name)"
+ end
+
+ def initialize arg
+ # if the file exists, consider the argument was a file.
+ clean_file = true
+ if File.exists? arg
+ file_path = arg
+ clean_file = false
+ else
+ # otherwise, consider it was the name of a gem.
+ remote_installer = Gem::RemoteInstaller.new
+ spec, source = remote_installer.find_gem_to_install(arg, ANY_VERSION)
+ file_path = "/tmp/#{spec.full_name}.gem"
+ remote_installer.download_gem(
+ file_path, source, spec) unless File.exists? file_path
+ end
+
+ portfile = Portfile.new file_path
+ port_name = portfile.name
+ FileUtils.mkdir_p port_name
+ portfile_file = File.new("#{port_name}/Portfile", "w")
+ portfile_file << portfile
+ portfile_file.close
+ end
+
+ ANY_VERSION = Gem::Version::Requirement.new "> 0.0.0"
+end
+
+
+GemsToPortfile.main $*
Property changes on: users/pguyot/gems_to_portfile.rb
___________________________________________________________________
Name: svn:executable
+ *
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/macports-changes/attachments/20070407/4b36567b/attachment.html
More information about the macports-changes
mailing list