root/nicotine-app/trunk/nicotine/makepkg @ 33

Revision 33, 2.7 KB (checked in by vasi, 4 years ago)

new module

  • Property svn:executable set to *
RevLine 
[33]1#!/usr/bin/perl
2use warnings;
3use strict;
4
5use File::Basename qw(dirname basename);
6use File::Spec::Functions;
7use File::Find;
8
9my $DEBUG = 1;
10my $parent = "Resources";
11my $prefix = "/sw";
12my $dir = File::Spec->rel2abs(dirname($0));
13
14# Functions
15sub do_cmd {
16        my $cmd = shift;
17        print "$cmd\n" if $DEBUG;
18        system($cmd) == 0 or die "Command failed: $cmd\nError: $!\n";
19}
20
21sub install {
22        do_cmd("sudo apt-get -y install " . join(' ', @_));
23}
24
25sub reparent {
26        do_cmd("rm -rf \Q$parent");
27        do_cmd('./reparent ' . join (' ', @_));
28}
29
30sub data {
31        my %d = @_;
32        while (my ($k, $v) = each %d) {
33                my $newd = catfile($parent, $prefix, $v);
34                do_cmd("mkdir -p \Q$newd\E");
35                do_cmd("cp " . quotemeta(catfile('data', $k))
36                        . " \Q$newd\E");
37        }
38}
39
40sub sedfiles {
41        my %d = @_;
42        (my $newp = $prefix) =~ s/^/./;
43        while (my ($k, $v) = each %d) {
44                my $sourcef = catfile($prefix, $k);
45                my $newf = catfile($parent, $prefix, $v);
46                do_cmd("mkdir -p " . quotemeta(dirname($newf)));
47                do_cmd("sed -e 's,$prefix,$newp,g' \Q$sourcef\E > \Q$newf\E");
48        }
49}
50
51sub remove {
52        for my $set (@_) {
53                my ($adir, @exclude) = @$set;
54                my $rdir = catfile($parent, $prefix, $adir);
55               
56                my @rm;
57                if (! -d $rdir or !@exclude) {
58                        @rm = ($rdir);
59                } else {
60                        opendir DIR, $rdir;
61                        my @c = grep { ! /^\.\.?$/ } readdir DIR;
62                        closedir DIR;
63                       
64                        @rm = @c;
65                        for my $exc (@exclude) {
66                                @rm = grep { ! /$exc/ } @rm;
67                        }
68                        if (scalar(@rm) == scalar(@c)) {
69                                @rm = ($rdir);
70                        } else {
71                                @rm = map { catfile($rdir, $_) } @rm;
72                        }
73                }
74               
75                do_cmd("rm -rf " . join(' ', @rm));
76        }
77}
78
79sub remove_subs {
80        my @s = @_;
81        find(sub {
82                foreach my $s (@s) {
83                        if (&$s()) {
84                                do_cmd("rm -rf $_");
85                                last;
86                        }
87                }
88        }, $parent);
89}
90
91sub template {
92        my $app = glob('template/*.app');
93        my $appn = basename($app);
94        do_cmd("rm -rf \Q$appn");
95        do_cmd("cp -R \Q$app\E \Q$appn\E");
96        do_cmd("cp data/script \Q" . catfile($appn, 'Contents/Resources'));
97        do_cmd("cp data/Info.plist \Q" . catfile($appn, 'Contents'));
98        do_cmd("mv $parent/* \Q" . catfile($appn, 'Contents/Resources'));
99        do_cmd("rm -rf $parent");
100}
101
102# Config
103install(qw(nicotine gtk+2 gtk2-engines));
104reparent(qw(atk1-shlibs glib2-shlibs gtk2-engines gtk+2-shlibs
105        libgettext3-shlibs libiconv nicotine pango1-xft2-shlibs pygtk2-py23));
106remove(
107        [ 'share/doc' ],
108        [ 'share/info' ],
109        [ 'share/themes', 'Clearlooks' ],
110        [ 'lib/gtk-2.0/2.4.0/engines' ],
111        [ 'lib/gtk-2.0/2.4.0/immodules' ],
112        [ 'lib/gtk-2.0/2.4.0/loaders', 'png', 'gif' ],
113        [ 'lib/pango/1.4.0/modules', 'basic' ],
114);
115remove_subs(sub { /\.py[co]$/ });
116data('pangorc' => 'etc', 'gtkrc-2.0' => 'etc', 'getdisplay.sh' => 'bin');
117sedfiles(
118        "etc/gtk-2.0/gdk-pixbuf.loaders" => "etc/gdk-pixbuf.loaders",
119        "etc/pango/pango.modules" => "etc/pango/pango.modules",
120);
121template();
Note: See TracBrowser for help on using the browser.