#!/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 () { # 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 () { if (/install-framework/) { return 1; } } return 0; }