class Cany::Dpkg::Creator

Attributes

spec[R]

Public Class Methods

new(spec) click to toggle source
# File lib/cany/dpkg/creator.rb, line 7
def initialize(spec)
  @spec = spec
  @options = {}
end

Public Instance Methods

create_changelog() click to toggle source
# File lib/cany/dpkg/creator.rb, line 131
def create_changelog
  File.open debian('changelog'), 'w' do |f|
    f.write "#{spec.name} (#{spec.version}-1) unstable; urgency=low\n"
    f.write "\n"
    f.write "  * Build with cany\n"
    f.write "\n"
    f.write " -- #{spec.maintainer_name} <#{spec.maintainer_email}>  #{Time.now.strftime "%a, %d %b %Y %H:%M:%S %z" }"
  end
end
create_compact() click to toggle source
# File lib/cany/dpkg/creator.rb, line 71
def create_compact
  File.open debian('compat'), 'w' do |f|
    f.write '8'
  end
end
create_rules() click to toggle source
# File lib/cany/dpkg/creator.rb, line 108
      def create_rules
        File.open debian('rules'), 'w' do |f|
          unless @spec.cany_version_constraint
            gem_version = ''
          else
            gem_version = " --version \"#{@spec.cany_version_constraint}\""
            gem_version += ' --prerelease' if @spec.cany_version_constraint.match /[a-zA-Z]/
          end

          f.write <<EOM.gsub /^            /, ''
            #!/usr/bin/make -f
            export PATH := debian/bin:${PATH}
            export GEM_PATH := debian/gems:${GEM_PATH}
            %:
            \t#{ruby_exe} -cS cany >/dev/null || #{ruby_exe} -S gem install --no-ri --no-rdoc --install-dir debian/gems --bindir debian/bin $${CANY_GEM:-cany}#{gem_version}
            \t#{ruby_exe} -S cany dpkg-builder $@\n
            override_dh_prep:
EOM

          f.chmod(0755)
        end
      end
create_source_control() click to toggle source
# File lib/cany/dpkg/creator.rb, line 77
def create_source_control
  File.open debian('control'), 'w' do |f|
    # write source package fields:
    f.write("Source: #{spec.name}\n")
    f.write("Section: ruby\n")
    f.write("Priority: optional\n")
    f.write("Maintainer: #{spec.maintainer_name} <#{spec.maintainer_email}>\n")
    f.write("Standards-Version: 3.9.2\n")
    f.write("Homepage: #{spec.website}\n")
    f.write("Build-Depends: #{resolve_dependencies(@spec.build_dependencies)}\n")

    # write binary package fields:
    f.write("\n")
    f.write("Package: #{spec.name}\n")
    f.write("Architecture: any\n")
    f.write("Depends: #{resolve_dependencies(@spec.runtime_dependencies)}\n")
    f.write("Description: #{spec.description}\n")
  end
end
create_source_format() click to toggle source
# File lib/cany/dpkg/creator.rb, line 66
def create_source_format
  Dir.mkdir debian 'source'
  File.open(debian('source', 'format'), 'w') { |f| f.write '3.0 (native)' }
end
debian(*args) click to toggle source
# File lib/cany/dpkg/creator.rb, line 12
def debian(*args)
  File.join spec.base_dir, 'debian', *args
end
parse_opts(*args) click to toggle source
# File lib/cany/dpkg/creator.rb, line 24
def parse_opts(*args)
  @options = {}

  OptionParser.new do|opts|
    opts.on('--ruby-exe RUBY_EXE', 'Choose the ruby interpreter name (default is ruby)') do |exe|
      @options[:ruby_exe] = exe
    end

    opts.on('--ruby-deb RUBY_DEB', 'Choose the ruby package name (default is ruby)') do |deb|
      @options[:ruby_deb] = deb
    end

    opts.on('-r', '--ruby RUBY_EXE_DEB', 'Set ruby interpreter and package name') do |name|
      @options[:ruby_exe] = name
      @options[:ruby_deb] = name
    end

    opts.on('-h', '--help', 'Display this screen') do
      puts opts
      exit
    end
  end.parse *args
end
ruby_deb() click to toggle source
# File lib/cany/dpkg/creator.rb, line 20
def ruby_deb
  @options[:ruby_deb] || 'ruby'
end
ruby_exe() click to toggle source
# File lib/cany/dpkg/creator.rb, line 16
def ruby_exe
  @options[:ruby_exe] || 'ruby'
end
run(*args) click to toggle source
# File lib/cany/dpkg/creator.rb, line 48
def run(*args)
  parse_opts *args

  # let recipes influence package creating
  @spec.system_recipe = DebHelperRecipe.new(spec)
  @spec.recipes.each do |recipe|
    recipe.create(self)
  end

  Dir.mkdir debian
  create_compact
  create_source_format
  create_source_control
  create_copyright
  create_rules
  create_changelog
end

Private Instance Methods

resolve_dependencies(dependencies) click to toggle source