File: emacs-remove

package info (click to toggle)
emacsen-common 3.0.8
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 152 kB
  • sloc: perl: 425; sh: 87; lisp: 72; makefile: 26
file content (82 lines) | stat: -rwxr-xr-x 1,931 bytes parent folder | download
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
#!/usr/bin/perl -w

use Errno;
use strict;

$ENV{'EMACS_INHIBIT_AUTOMATIC_NATIVE_COMPILATION'} = 't';

my $lib_dir = "/usr/lib/emacsen-common";
my $invoked_by_old_pkg;
my $flavor;

require $lib_dir . "/lib.pl";

umask 0022 or die "emacs-remove: can't set umask, aborting.";

sub usage
{
  my($file_handle) = @_;
  if($invoked_by_old_pkg)
  {
    print $file_handle "Usage: emacs-remove FLAVOR\n";
  }
  else
  {
    print $file_handle "Usage: emacs-remove --prerm FLAVOR\n";
  }
}

if(scalar(@ARGV) == 1)
{
  $invoked_by_old_pkg = 1;
  $flavor = $ARGV[0];
}
elsif(scalar(@ARGV) == 2 && $ARGV[0] eq '--prerm')
{
  $flavor = $ARGV[1];
}
else
{
  usage(*STDERR{IO});
  exit(2);
}

my @ordered_pkg_list =
    reverse
    generate_add_on_install_list(get_installed_add_on_packages());

my @installed_flavors = get_installed_flavors();

foreach my $pkg (@ordered_pkg_list)
{
  print "Remove $pkg for $flavor\n";
  my $script = $lib_dir . "/packages/remove/$pkg";
  my $failed;
  if(-e "$lib_dir/packages/compat/$pkg") # New-style package.
  {
    $failed = -e $script && (system($script, $flavor) != 0);
  }
  else # Old-style package.
  {
    # We've completely ignored
    # /var/lib/emacsen-common/state/flavor/pending/ here (whether it's
    # relevant or not) because old style packages should be irrelevant
    # now.
    $failed = -e $script && (system($script, $flavor, @installed_flavors) != 0);
  }
  if($failed)
  {
    print STDERR "ERROR: remove script from $pkg package failed\n";
    exit(2);
  }
}

my $pending_flavor = "/var/lib/emacsen-common/state/flavor/pending/$flavor";
die "ERROR: cannot unlink $pending_flavor: $!, "
    unless (unlink($pending_flavor) or $!{ENOENT});

# Silence "single use" warning.
$::installed_flavor_state_dir = $::installed_flavor_state_dir;

die "ERROR: cannot unlink $::installed_flavor_state_dir/$flavor: $!, "
    unless (unlink("$::installed_flavor_state_dir/$flavor") or $!{ENOENT});