Blame local/minimalist/remove-unneeded-modules

Packit fcad23
#!/bin/perl
Packit fcad23
Packit fcad23
# steps:
Packit fcad23
# 1) run configure
Packit fcad23
# 2) perl local/minimalist/remove-unneeded-modules
Packit fcad23
# 3) make depend
Packit fcad23
# 4) make
Packit fcad23
Packit fcad23
use File::Find;
Packit fcad23
use Data::Dumper;
Packit fcad23
use strict;
Packit fcad23
Packit fcad23
my %exceptions = qw(
Packit fcad23
   agent/mibgroup/mibdefs.h              	              1
Packit fcad23
   agent/mibgroup/struct.h               	              1
Packit fcad23
   agent/mibgroup/agentx/protocol.h      	              1
Packit fcad23
   agent/mibgroup/agentx/agentx_config.h 	              1
Packit fcad23
   agent/mibgroup/agentx/subagent.h      	              1
Packit fcad23
   agent/mibgroup/mib_module_includes.h  	              1
Packit fcad23
   agent/mibgroup/mib_module_inits.h     	              1
Packit fcad23
   agent/mibgroup/mib_module_dot_conf.h  	              1
Packit fcad23
   agent/mibgroup/mib_module_shutdown.h  	              1
Packit fcad23
   agent/mibgroup/agent_module_includes.h	              1
Packit fcad23
   agent/mibgroup/agent_module_inits.h   	              1
Packit fcad23
   agent/mibgroup/agent_module_dot_conf.h	              1
Packit fcad23
   agent/mibgroup/agent_module_shutdown.h	              1
Packit fcad23
   agent/mibgroup/mibII/vacm_conf.c      	              1
Packit fcad23
   agent/mibgroup/snmpv3/usmConf.c       	              1
Packit fcad23
   agent/mibgroup/utilities/iquery.c     	              1
Packit fcad23
   agent/mibgroup/mibII/vacm_conf.h      	              1
Packit fcad23
   agent/mibgroup/snmpv3/usmConf.h       	              1
Packit fcad23
   agent/mibgroup/utilities/iquery.h     	              1
Packit fcad23
   agent/mibgroup/util_funcs/MIB_STATS_CACHE_TIMEOUT.h        1
Packit fcad23
   agent/mibgroup/host_res.h                                  1
Packit fcad23
   agent/mibgroup/hr_filesys.h                                1
Packit fcad23
   agent/mibgroup/if-mib/ifTable/ifTable_defs.h               1
Packit fcad23
   agent/mibgroup/ifTable_defs.h                              1
Packit fcad23
   agent/mibgroup/mibII/mibII_common.h                        1
Packit fcad23
   agent/mibgroup/mnttypes.h                                  1
Packit fcad23
   agent/mibgroup/utilities/execute.h                         1
Packit fcad23
);
Packit fcad23
Packit fcad23
my %opts;
Packit fcad23
Packit fcad23
LocalGetOptions(\%opts,
Packit fcad23
		['n|dry-run',      "Dry-run, just say what you would do"],
Packit fcad23
		['v|verbose',      "Show what files are being left too"],
Packit fcad23
    );
Packit fcad23
Packit fcad23
my $inputMakefile = $ARGV[0] || "agent/mibgroup/Makefile";
Packit fcad23
my $inputDir = $ARGV[1] || "agent/mibgroup";
Packit fcad23
Packit fcad23
my $collecting = 0;
Packit fcad23
my (%files, @files);
Packit fcad23
Packit fcad23
open(I, $inputMakefile);
Packit fcad23
while() {
Packit fcad23
    if (/mib_module_list_c=/) {
Packit fcad23
	$collecting = 1;
Packit fcad23
    } elsif ($collecting) {
Packit fcad23
	if (! /\\\s*$/) {
Packit fcad23
	    $collecting = 0;
Packit fcad23
	}
Packit fcad23
	chomp();
Packit fcad23
	s/\\//;
Packit fcad23
	s/\s*//g;
Packit fcad23
	s/\.c//;
Packit fcad23
	push @files, "agent/mibgroup/$_";
Packit fcad23
	$files{"agent/mibgroup/$_.c"} = 1;
Packit fcad23
	$files{"agent/mibgroup/$_.h"} = 1;
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
find(\&remove_files, $inputDir);
Packit fcad23
Packit fcad23
sub remove_files {
Packit fcad23
    return if (!/\.[ch]$/);
Packit fcad23
    return if (/\.h$/); # XXX: we need to delete headers eventually too
Packit fcad23
    return if (/_constants.h/);
Packit fcad23
    return if (exists($exceptions{$File::Find::name}));
Packit fcad23
Packit fcad23
    if (!exists($files{$File::Find::name})) {
Packit fcad23
	Unlink($_, $File::Find::name);
Packit fcad23
    } elsif ($opts{'v'}) {
Packit fcad23
	print "Leaving $File::Find::name\n";
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
sub Unlink {
Packit fcad23
    my ($file, $fullfile) = @_;
Packit fcad23
    print "Removing $fullfile\n";
Packit fcad23
    if (!$opts{'n'}) {
Packit fcad23
	unlink($file);
Packit fcad23
	if (-f "$file") {
Packit fcad23
	    print "*** FAILED to remove $file\n"; 
Packit fcad23
	}
Packit fcad23
    }
Packit fcad23
}
Packit fcad23
Packit fcad23
Packit fcad23
sub LocalGetOptions {
Packit fcad23
    if (eval {require Getopt::GUI::Long;}) {
Packit fcad23
        import Getopt::GUI::Long;
Packit fcad23
        # optional configure call
Packit fcad23
	my @gopts = qw(no_ignore_case no_gui allow_zero);
Packit fcad23
	if ($Getopt::GUI::Long::VERSION > 0.2) {
Packit fcad23
	    push @gopts, qw(display_help capture_output);
Packit fcad23
	}
Packit fcad23
        Getopt::GUI::Long::Configure(@gopts);
Packit fcad23
        return GetOptions(@_);
Packit fcad23
    }
Packit fcad23
    require Getopt::Long;
Packit fcad23
    import Getopt::Long;
Packit fcad23
    # optional configure call
Packit fcad23
    Getopt::Long::Configure(qw(display_help no_ignore_case capture_output));
Packit fcad23
    GetOptions(LocalOptionsMap(@_));
Packit fcad23
}
Packit fcad23
Packit fcad23
sub LocalOptionsMap {
Packit fcad23
    my ($st, $cb, @opts) = ((ref($_[0]) eq 'HASH') 
Packit fcad23
                            ? (1, 1, $_[0]) : (0, 2));
Packit fcad23
    for (my $i = $st; $i <= $#_; $i += $cb) {
Packit fcad23
        if ($_[$i]) {
Packit fcad23
            next if (ref($_[$i]) eq 'ARRAY' && $_[$i][0] =~ /^GUI:/);
Packit fcad23
            push @opts, ((ref($_[$i]) eq 'ARRAY') ? $_[$i][0] : $_[$i]);
Packit fcad23
            push @opts, $_[$i+1] if ($cb == 2);
Packit fcad23
        }
Packit fcad23
    }
Packit fcad23
    return @opts;
Packit fcad23
}