class FPM::Package::P5P

Public Instance Methods

architecture() click to toggle source
# File lib/fpm/package/p5p.rb, line 38
def architecture
  case @architecture
  when nil, "native"
    @architecture = %x{uname -p}.chomp
  when "all"
    @architecture = 'i386 value=sparc'
  end

  return @architecture
end
output(output_path) click to toggle source
# File lib/fpm/package/p5p.rb, line 49
def output(output_path)
  
  # Fixup the category to an acceptable solaris category
  case @category
  when nil, "default"
    @category = 'Applications/System Utilities'
  end

  # Manifest Filename
  manifest_fn = build_path("#{name}.p5m")

  # Generate a package manifest.
  pkg_generate = safesystemout("pkgsend", "generate", "#{staging_path}")
  File.write(build_path("#{name}.p5m.1"), pkg_generate)

  # Add necessary metadata to the generated manifest.
  metadata_template = template("p5p_metadata.erb").result(binding)
  File.write(build_path("#{name}.mog"), metadata_template)

  # Combine template and filelist; allow user to edit before proceeding
  File.open(manifest_fn, "w") do |manifest|
    manifest.write metadata_template
    manifest.write pkg_generate
  end
  edit_file(manifest_fn) if attributes[:edit?]

  # Execute the transmogrification on the manifest
  pkg_mogrify = safesystemout("pkgmogrify", manifest_fn)
  File.write(build_path("#{name}.p5m.2"), pkg_mogrify)
  safesystem("cp", build_path("#{name}.p5m.2"), manifest_fn)

  # Evaluate dependencies.
  if !attributes[:no_auto_depends?]
          pkgdepend_gen = safesystemout("pkgdepend", "generate",  "-md", "#{staging_path}",  manifest_fn)
    File.write(build_path("#{name}.p5m.3"), pkgdepend_gen)

    # Allow user to review added dependencies
    edit_file(build_path("#{name}.p5m.3")) if attributes[:edit?]

          safesystem("pkgdepend", "resolve",  "-m", build_path("#{name}.p5m.3"))
    safesystem("cp", build_path("#{name}.p5m.3.res"), manifest_fn)
  end

  # Final format of manifest
  safesystem("pkgfmt", manifest_fn)

  # Final edit for lint check and packaging
  edit_file(manifest_fn) if attributes[:edit?]

  # Add any facets or actuators that are needed.
  # TODO(jcraig): add manpage actuator to enable install wo/ man pages

  # Verify the package.
  if attributes[:p5p_lint] then
    safesystem("pkglint", manifest_fn)
  end

  # Publish the package.
  repo_path = build_path("#{name}_repo")
  safesystem("pkgrepo", "create", repo_path)
  safesystem("pkgrepo", "set", "-s", repo_path, "publisher/prefix=#{attributes[:p5p_publisher]}")
  safesystem("pkgsend", "-s", repo_path,
    "publish", "-d", "#{staging_path}", "#{build_path}/#{name}.p5m")
  safesystem("pkgrecv", "-s", repo_path, "-a",
    "-d", build_path("#{name}.p5p"), name)

  # Test the package
  if attributes[:p5p_validate] then
    safesystem("pkg", "install",  "-nvg", build_path("#{name}.p5p"), name)
  end

  # Cleanup
  safesystem("mv", build_path("#{name}.p5p"), output_path)

end