Cross package maker. DEB/RPM generation or conversion. Derived from jordansissel/fpm.

⌈⌋ branch:  cross package maker


Check-in [d4a2f64d49]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
SHA1:d4a2f64d49a02e67ee9d6b86ee341af507573ed2
Date: 2014-12-17 22:06:20
User: mario
Comment:IPK generator using Listallers lipkgen, very basic; doesn't take care with relocatability or proper file separation yet.
Tags And Properties
  • bgcolor=#ecebfd inherited from [4e43f73a18]
  • branch=trunk inherited from [5980cef12a]
  • sym-trunk inherited from [5980cef12a]
Context
2014-12-18
16:36
[ebb4cb9a0a] Umask 644/755 (mostly redundant for rpm/deb targets though; already contain permission concrete logic) (user: mario, tags: trunk)
2014-12-17
22:06
[d4a2f64d49] IPK generator using Listallers lipkgen, very basic; doesn't take care with relocatability or proper file separation yet. (user: mario, tags: trunk)
22:05
[128bbd605a] Add -u update filter to create inject .desktop files. (user: mario, tags: trunk)
Changes

Added lib/fpm/package/ipk.rb.



































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# encoding: utf-8
# api: fpm
# title: Listaller IPK
# description: generates Listaller packages using lipkgen
# type: package
# category: target
# version: 0.0
# doc: http://listaller.tenstral.net/docs/chap-Listaller-Packaging.html
# depends: bin:lipkgen, erb
#
# Listaller uses .IPK files for cross-distro installations. It's well
# integrated with Freedesktop schemes and distro application managers.
# 
# This module just chains to the generation tool currently, and builds
# static / unrelocatable packages. (Proper support would require using
# Listallers relaytool + ligcc when building the app binaries.)
#

require "fpm/package"
require "fpm/util"
require "fileutils"
require "erb"
require "time"

# Build Listaller package
class FPM::Package::IPK < FPM::Package

  include ERB::Util

  option "--relocatable", :bool, "Assume application was built relocatable."

  # Create doap, files list, then package up
  def output(output_path)
    output_check(output_path)

    # pre-generate files list
    files = []
    ::Dir.chdir(staging_path) do
      files = ::Dir["**/*"]
    end
    
    # set up build path
    ipk = "#{staging_path}/ipkinstall"
    p ipk
    ::Dir.mkdir(ipk)
    # options file
    File.open("#{ipk}/pkoptions", "w") do |f|
      f.write template("listaller/pkoptions.erb").result(binding)
    end
    # write DOAP
    File.open("#{ipk}/#{name}.doap", "w") do |f|
      f.write template("listaller/doap.erb").result(binding)
    end
    # file list
    File.open("#{ipk}/files-all.list", "w") do |f|
      f.write template("listaller/files.erb").result(binding)
    end
    # stubs
    File.open("#{ipk}/build.rules", "w") do |f|
    end
    File.open("#{ipk}/dependencies.list", "w") do |f|
    end
    
    # let the packaging be done
    sign = attributes[:deb_sign] ? ["--sign"] : []
    ::Dir.chdir(staging_path) do
      system(
        "lipkgen",
        "-b",
        *sign,
        "--verbose",
        "--sourcedir=.",
        "--outdir=#{build_path}"
      )
    end
    
    # move file
    File.rename(::Dir["#{build_path}/*.ipk"].first, output_path)
  end # output

end

Added templates/listaller/doap.erb.



















































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="UTF-8"?>
<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns="http://usefulinc.com/ns/doap#">
  <name><%=h @name %></name>
  <homepage rdf:resource="<%=h @url %>" />
  <created><%= Time.now.strftime("%Y-%m-%d") %></created>
  <shortdesc xml:lang="en">
    <%=h (description.split("\n") or ["no description"]).first %>
  </shortdesc>
  <description xml:lang="en">
    <%=h (description.split("\n") or ["", "no details available"])[1,50].join("\n    ") %>
  </description>
  <maintainer>
          <foaf:Person>
                  <foaf:name><%=h @maintainer %></foaf:name>
          </foaf:Person>
  </maintainer>
  <release>
          <Version>
                  <name>stable</name>
                  <created><%=h Time.now.strftime("%Y-%m-%d") %></created>
                  <revision><%=h @version %></revision>
          </Version>
  </release>
  <license rdf:resource="data:,<%=h @license %>" />
</Project>

Added templates/listaller/files.erb.







































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# IPK file list for <%= name %>
# very crude, does not separate data files yet

:: %APP%
<%= files.grep(/\.desktop$/).join("\n") %>

:: %INST%
<% files.each do |fn| %><%= fn %>
<% end %>

:: %ICON-16%
# none
:: %ICON-32%
# none
:: %ICON-64%
# none
:: %ICON-128%
# none
# could probably just .grep() for icons here too..?

Added templates/listaller/pkoptions.erb.









>
>
>
>
1
2
3
4
Version: 1.1

AutoFindDeps: <%= attributes[:ipk_relocatable] ? "true" : "false" %>