File: framework-package-install

package info (click to toggle)
cli-common 0.9+nmu1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd, stretch
  • size: 280 kB
  • sloc: perl: 1,208; sh: 103; makefile: 42
file content (115 lines) | stat: -rwxr-xr-x 2,374 bytes parent folder | download | duplicates (2)
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/usr/bin/perl

#
# Setup
#

# Directives
use strict;
use warnings;

# Modules
use File::Basename;

# This script gets the name of the package as the first parameter.  It
# parses the file given, then installs them as appropriate.
# If there is a second parameter, this is the only CLR installed.

#
# Handle the input file
#

# Get the package
my $pkg = $ARGV[0];
my $use_clr = $ARGV[1];
my $full = "/usr/share/cli-common/packages.d/$pkg";

# Make sure it exists
if ( ! -f "$full.installcliframework" )
{
    print STDERR "! $full.installcliframework doesn't exist!\n";
    exit 1;
}

# Parse the file
unless (open INPUT, "<$full.installcliframework")
{
    print STDERR "! Cannot open $full.installcliframework ($!)\n";
    exit 2;
}

my @files = ();

while (<INPUT>)
{
    # Clean up the line and ignore blanks and comments
    chomp;
    s/^\s+//;
    s/\s+$//;
    next if /^\#/;
    next if /^\s*$/;

    # Split on the space
    my @p = split(/\s+/);

    # Framework version is first...
    my $framework = shift @p;
    # ...then the file to install
    my $file = shift @p;

    if (! -f $file)
    {
	print STDERR "! Assembly $file does not exist\n";
	exit 3;
    }

    push @files, $framework;
    push @files, $file;
}

# Go through the installation targets
foreach my $clr (glob("/usr/share/cli-common/runtimes.d/*"))
{
    # Ignore temporary files
    next if $clr =~ /~$/;
    next if $clr =~ /^\./;

    # Get the "name"
    my $name = basename($clr);

    # Get the formal name
    my $formal = `$clr name`;
    $formal = $name if !defined $formal || $formal =~ /^\s*$/;
    chomp($formal);

    # Only use the one CLR if given
    next if (defined $use_clr && $name ne $use_clr);

    if (! check_framework_install_supported($clr))
    {
	print STDOUT "* Skipping $formal; no support for framework install\n";
	next;
    }

    # Install them
    my $t = (scalar(@files) / 2) . " assemblies";
    $t = "1 assembly" if (@files == 2);

    print STDOUT "* Installing $t from $pkg into $formal framework paths\n";
    system($clr, "install-framework", $pkg, @files) == 0 or die "E: Installation of $pkg with $clr failed\n";
}

sub check_framework_install_supported
{
    my $clr = shift;

    open PIPE, "$clr 2>&1 |" or die "E: Cannot query $clr capabilities";
    while (<PIPE>)
    {
	if (/install-framework/)
	{
	    return 1;
	}
    }
    return 0;
}