Module: Purple::PackageActions

Defined in:
lib/purple/pkg_actions.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#cabinetObject

Returns the value of attribute cabinet.



5
6
7
# File 'lib/purple/pkg_actions.rb', line 5

def cabinet
  @cabinet
end

Class Method Details

.package_method(name) ⇒ Object



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
# File 'lib/purple/pkg_actions.rb', line 7

def self.package_method name
    prg = <<-EOS
        def #{name}
            if defined? @method_#{name}_package and @method_#{name}_package
                return @method_#{name}_package.call(self)
            else
                m = self.method "default_#{name}"
                return(m.call) if m
            end
        end
        def #{name}= prc
            case prc
            when Proc
                @method_#{name}_package = prc
            when String
                @method_#{name}_package = proc { |pkg|
                    prc = eval("%(\#{prc})") if prc =~ /\\\#\\\{/
                    puts "DEBUG: prc==\#{prc}" if $DEBUG
                    pkg.cabinet.sys #{name.to_s.inspect}, prc
                }
            when Array
                self.#{name} = prc.join '; '
            end
        end
    EOS
    puts "DEBUG PackageActions##package_method: prg=\n#{prg}" if $DEBUG
    module_eval prg
end

Instance Method Details

#default_buildObject



89
90
91
# File 'lib/purple/pkg_actions.rb', line 89

def default_build
   throw :stop unless cabinet.sys 'build', "make -C '#{srcdir}'"
end

#default_configObject



85
86
87
# File 'lib/purple/pkg_actions.rb', line 85

def default_config
   throw :stop unless cabinet.sys 'config', "cd #{srcdir}; ./configure --prefix=/usr"
end

#default_prepareObject



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/purple/pkg_actions.rb', line 64

def default_prepare
    puts "DEBUG PackageActions#default_prepare" if $DEBUG
    files.each do |f|
        unpack = case f
            when /(gz|bz2)$/
                compress_arg = case $1
                    when 'gz'; '-z'
                    when 'bz2'; '-j'
                    else ''
                end
                proc { |filename| "tar xv #{compress_arg} -C '#{cabinet.srcdir}' -f #{cabinet.filesdir}/#{filename}" }
            when /zip$/
                proc { |filename| "cd '#{cabinet.srcdir}'; unzip -o '#{cabinet.filesdir}/#{filename}'" }
            else
                throw :stop
        end
        throw :stop unless cabinet.sys 'prepare', unpack.call(f)
    end

end

#default_setupObject



61
62
# File 'lib/purple/pkg_actions.rb', line 61

def default_setup
end

#default_stageObject



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/purple/pkg_actions.rb', line 93

def default_stage
    system "rm -fr '#{stage_root}/*'"

    require 'purple/makefile'

    puts "DEBUG PackageActions#default_stage: srcdir=#{srcdir}" if $DEBUG
    mkm = MakefileMaven.new srcdir
    if mkm.uses_prefix?
        if mkm.uses_destdir?
            make_args = "DESTDIR='#{stage_root}'"
        else
            make_args = "prefix='#{stage_root}/usr'"
        end
    else
        if mkm.uses_destdir?
            make_args = "DESTDIR='#{stage_root}'"
        else
            raise 'Unable to find a way to stage! Package neither defines prefix or DESTDIR'
        end
    end
       
    throw :stop if not cabinet.sys 'stage', "make -C '#{srcdir}' #{make_args} install"
end

#srcdirObject



36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/purple/pkg_actions.rb', line 36

def srcdir
    return @srcdir if defined? @srcdir
    dirs = Dir.new(cabinet.srcdir).reject { |s| s =~ /^\.{1,2}$/ }
    if 1 == dirs.size
        s = dirs[0]
    else
        s = Dir.new(cabinet.srcdir).find { |s| s =~ Regexp.new('^' + Regexp.escape(name)) }
    end
    @srcdir = File.join(cabinet.srcdir, s)
    throw :stop, "Unable to determine source directory for package #{name}" if not @srcdir
    puts "Choosing #{@srcdir} as source code folder"
    @srcdir
end

#stage_rootObject



50
51
52
# File 'lib/purple/pkg_actions.rb', line 50

def stage_root
    File.join cabinet.stage_root, long_name
end