-sub disable_extras (@)
-{
- opendir my $dd, "src/modules/extra/";
- my @files = readdir($dd);
- closedir $dd;
- my (@extras) = @_;
-EXTRA: for my $extra (@extras) {
- $extra = "m_$extra" unless $extra =~ /^m_/;
- $extra = "$extra.cpp" unless $extra =~ /\.cpp$/;
- my $extrapath = "src/modules/extra/$extra";
- my $source = "src/modules/$extra";
- if (!-e $extrapath) {
- print STDERR "Cannot disable \e[32;1m$extra\e[0m : Is not an extra\n";
- next;
- }
- if ((! -l $source) || readlink($source) ne "extra/$extra") {
- print STDERR "Cannot disable \e[32;1m$extra\e[0m : Source is not a link or doesn't refer to the right file. Remove manually if this is in error.\n";
- next;
- }
- # Check if anything needs this.
- for my $file (@files) {
- my @deps = split /\s+/, get_directive("src/modules/extra/$file", 'ModDep', '');
- # File depends on this extra...
- if (scalar(grep { $_ eq $extra } @deps) > 0) {
- # And is both enabled and not about to be disabled.
- if (-e "src/modules/$file" && scalar(grep { $_ eq $file } @extras) < 1) {
- print STDERR "Cannot disable \e[32;1m$extra\e[0m : is needed by \e[32;1m$file\e[0m\n";
- next EXTRA;
- }
- }
+sub disable_extras(@) {
+ my $moduledir = catdir $RealDir, 'src', 'modules';
+ my $extradir = catdir $moduledir, 'extra';
+
+ for my $extra (@_) {
+ my $shortname = module_shrink $extra;
+ my $extrafile = module_expand $extra;
+
+ my $modulepath = catfile $moduledir, $extrafile;
+ my $extrapath = catfile $extradir, $extrafile;
+ if (!-e $modulepath && !-e $extrapath) {
+ print_error "the <|GREEN $shortname|> module does not exist!";
+ } elsif (!-e $modulepath && -e $extrapath) {
+ print_error "the <|GREEN $shortname|> module is not currently enabled!";
+ } elsif ((-e $modulepath && !-e $extrapath) || !-l $modulepath) {
+ print_error "the <|GREEN $shortname|> module is not an extra module!";
+ } else {
+ print_format "Disabling the <|GREEN $shortname|> module ...\n";
+ unlink $modulepath or print_error "unable to unlink <|GREEN $extrapath|>: $!";