/usr/sbin/update-default-ispell is in dictionaries-common 1.20.5.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
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 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 | #!/usr/bin/perl -w
use strict;
use Debian::DictionariesCommon q(:all);
use Debconf::Client::ConfModule q(:all);
dico_checkroot ();
my $triggered;
my $skip_symlinks_setting;
my $class = "ispell";
# Parse options
foreach my $option ( @ARGV ){
if ( $option eq "--skip-symlinks" ){
# Do not try to set symlinks at $linkdir.
$skip_symlinks_setting++;
} elsif ( $option eq "--rebuild" ){
# info is always rebuilt, so this option is not needed.
# It is preserved as a no-op for old maintainer scripts.
} elsif ( $option eq "--triggered" ){
# Do not try to enable update-default-$class} trigger but run the script.
$triggered++;
} else {
die "update-default-$class: Bad option \"$option\". Aborting..."
}
}
version ('2.0');
# Enable trigger if needed
unless ( $triggered ){
exit if dico_activate_trigger("update-default-$class");
}
my $manual;
my $question = "dictionaries-common/default-$class";
my $iquestion = "dictionaries-common/invalid_debconf_value";
my $program = "update-default-$class";
my $debug = 1 if defined $ENV{'DICT_COMMON_DEBUG'};
my $newflag = "/var/cache/dictionaries-common/flag-$class-new";
# This flag is intended for remove-default-$class. If we are here we do not
# need it any longer, so we reset for future apt runs by cleaning it.
if ( -f $newflag ){
print STDERR "$program: Removing $newflag\n" if $debug;
unlink $newflag
or print STDERR " $program: Warning: could not remove $newflag\n";
}
updatedb ($class);
my $dictionaries = loaddb ($class);
my ($ret, $value) = get ($question);
if ( $ret == 0 && $value ){
# Question has a value
if ( $value =~ m/^Manual.*/i ){
# Question is set to manual mode
print STDERR "$program: Manual mode for \"$class\"\n" if $debug;
$manual++;
} elsif ( not %$dictionaries ) {
# Question has a value, but no manual mode and no class elements available. Unset value.
print STDERR "$program: No Manual mode and no $class elements. $question unset.\n" if $debug;
$value = "";
set($question,$value);
$manual++;
} else {
# Normal case, question has a value and is set to one of the installed class elements.
print STDERR "$program: Default is set to \"$value\" for \"$class\"\n" if $debug;
}
} elsif ( not %$dictionaries ) {
# Question is empty. No default nor class elements available. Proceed as for manual.
print STDERR "$program: No \"$class\" elements left.\n" if $debug;
$manual++;
} else {
# Question is empty, but $class elements are installed. Two possibilities.
if ( -x "/usr/bin/apt-extracttemplates" ){
# apt-utils is installed. Other possibility is debconf database corruption.
my $shared_question = "shared/packages-$class";
print STDERR "$program: Question empty but elements installed for class \"$class\"\n";
print STDERR " $question: return code: \"$ret\", value: \"$value\"\n";
print STDERR " Choices: " . metaget ($question, "choices") . "\n";
my ($shared_ret,$shared_owners) = metaget ($shared_question, "owners");
print STDERR " $shared_question: return code: \"$shared_ret\" owners/error: \"$shared_owners\"\n";
print STDERR " Installed elements: " . join(', ',sort keys %{$dictionaries}) . "\n\n";
print STDERR " Please see \"/usr/share/doc/dictionaries-common/README.problems\", section\n";
print STDERR " \"Debconf database corruption\" for recovery info.\n\n";
} else {
# apt-utils is not installed, so $class templates may not have been parsed at preconfigure stage.
# Delay settings until ispell dictionaries/wordlists are configured and their debconf templates parsed.
print STDERR "$program: apt-utils is not installed. Delay settings until $class elements are configured.\n";
$manual++;
}
}
unless ( $manual ){
# Handle invalid debconf values
if ( not exists $dictionaries->{$value} ){
my @available_keys = ();
foreach ( split (/\s*,\s*/, metaget ($question, "choices")) ){
# strip leading/trailing whitespace and create a list of available keys
s/^\s+//;
s/\s+$//;
push (@available_keys,$_) if ( defined $dictionaries->{$_} );
}
my $choices = join (', ', sort {lc $a cmp lc $b} @available_keys);
my $forced_key = $available_keys[0] ||
die "$program: Selected ispell dictionary" .
" \"$value\" \n" .
"does not correspond to any installed package in the system\n" .
"and no alternative ispell dictionary could be selected.\n";
subst($iquestion,"value",$value);
fset ($iquestion,"seen","false");
input("high",$iquestion); # Warn about what happened
subst ($question, "choices", $choices); # Put sane values in debconf choices field
subst ($question, "echoices", $choices); # Put sane values in debconf echoices field
set ($question, $forced_key); # Set debconf value to a sane one
fset ($question,"seen","false");
input ("critical", $question);
title ("dictionaries-common: ispell dictionaries");
go ();
($ret, $value) = get ($question);
die "\n Could not get a valid value for debconf question:\n" .
"$question\n"
if ( $ret != 0 ); # This should never be reached
# Set manual flag if needed to avoid later symlinking
$manual++ if ( $value =~ m/^Manual.*/i )
}
}
# This here is only for ispell, not wordlist
my $emacsen_default = "nil";
my $cache_dir = "/var/cache/dictionaries-common";
my $emacsen_default_file = "$cache_dir/emacsen-ispell-default.el";
my $ispell_dicts_list = "$cache_dir/ispell-dicts-list.txt";
if ( $manual ){
dico_setsysdefault ($class,"");
} else {
dico_setsysdefault ($class,$value);
# Get ispell default dict for emacsen
if ( exists $dictionaries->{$value}{"emacs-display"}
and lc($dictionaries->{$value}{"emacs-display"}) eq "no" ){
$emacsen_default = "nil";
} elsif ( exists $dictionaries->{$value}{"emacsen-name"} ){
$emacsen_default = "\"" . $dictionaries->{$value}{"emacsen-name"} . "\"";
} elsif( exists $dictionaries->{$value}{"hash-name"} ){
$emacsen_default = "\"" . $dictionaries->{$value}{"hash-name"} . "\"";
}
}
# Printing a plain list with installed ispell dictionaries,
open (IDICTS,"> $ispell_dicts_list") ||
die "Could not open $ispell_dicts_list for writing\n";
print IDICTS ""; # Make sure this is void if no dictionaries available.
foreach ( sort keys %{$dictionaries} ){
print IDICTS "$_\n";
}
close (IDICTS);
# Printing the default ispell dictionary under emacs
open (EMISDEFAULT,"> $emacsen_default_file");
print EMISDEFAULT ";; File automatically generated by update-default-ispell
;;
;; Do not manually edit!! Use select-default-ispell script instead
(set-variable \'debian-ispell-dictionary $emacsen_default)\n";
close EMISDEFAULT;
# Autobuild hashes and emacsen/jed/squirrelmail stuff where appropriate.
print STDERR "update-default-$class: Calling ispell-autobuildhash\n" if $debug;
system ("ispell-autobuildhash --triggered") == 0
or die "$program: Error running ispell-autobuildhash\n";
build_emacsen_support ();
build_jed_support ();
build_squirrelmail_support ();
# -- End of specific ispell support
# Set default symlink(s) and complain if not possible.
# For ispell dictionaries using auto-buildhash this should not be done
# from dictionaries-common postinst, but from ispell dictionaries postinst.
# Otherwise this is called before hashes are autobuild and will fail.
# d-c.postinst will call update-default-ispell with --skip-symlinks option.
unless ( $skip_symlinks_setting or $manual ) {
dico_set_default_symlink($class,$value);
}
# Local Variables:
# perl-indent-level: 2
# End:
__END__
=head1 NAME
update-default-ispell - update default ispell dictionary
=head1 SYNOPSIS
update-default-ispell [--skip-symlinks] [--triggered]
=head1 DESCRIPTION
WARNING: Not to be used from the command line unless you know very well what you are doing.
This program is intended to be called from ispell dictionary package postinst,
from B<select-default-ispell> or
from dictionaries-common postinst.
When called under dpkg control with the B<--trigger> option the
script is run normally, otherwise the dictionaries-common
B<update-default-ispell> trigger is enabled
for later run.
With the B<--skip-symlinks> option the symlinks setting is skipped.
This is needed for B<update-default-ispell> when called from
dictionaries-common postinst, since autobuilt hashes may not yet
be available.
When run normally (from the command line or with B<--trigger>)
this script rebuilds the info at
F</var/cache/dictionaries-common/ispell.db>
after files under F</var/lib/dictionaries-common/ispell>,
reads the system default from the debconf database and
unless disabled, set default symlinks in F</etc/dictionaries-common>
pointing to the appropriate files in
F</usr/lib/ispell/>.
For ispell this script also updates the system-wide setting
F</etc/dictionaries-common/ispell-default> and the emacsen,
jed, and SquirrelMail support after known info.
=head1 OPTIONS
--skip-symlinks Do not try to set symlinks at /etc/dictionaries-common dir.
--triggered Run all the code instead of trying to enable
update-default-ispell trigger
=head1 SEE ALSO
The dictionaries-common policy document
=head1 AUTHORS
Rafael Laboissiere,
Agustin Martin Domingo
=cut
|