From 6c633e1a1f1f905f489bf054ab0a329beddd73bb Mon Sep 17 00:00:00 2001 From: freesource Date: Thu, 4 Oct 2001 02:38:21 +0000 Subject: [PATCH] The Stripper lablel has been replaced with the Libraries check box, and the Modules check box is at the end. The logic is in place, now just have to compute amount of directories and size of dep file. May use mkpath or home_builder. --- gbootroot | 106 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 88 insertions(+), 18 deletions(-) diff --git a/gbootroot b/gbootroot index 452c42b..f595eaf 100755 --- a/gbootroot +++ b/gbootroot @@ -241,6 +241,7 @@ use constant OBJCOPY_BOOL => 8 ; use constant ABS_DEVICE => 9 ; use constant ABS_OPT_DEVICE => 10 ; use constant ABS_APPEND => 11 ; +use constant MOD_STRIP => 12 ; my @original_container; my $file_dialog; my ($kernel,$root_image,$device,$size); @@ -262,7 +263,7 @@ my $button_count = 0; my $button_count_root = 0; my $obj_count = 0; my $obj_count_root = 0; -my ($lib_strip_check,$bin_strip_check); +my ($lib_strip_check,$bin_strip_check,$mod_strip_check); my ($bz2_toggle,$gz_toggle); my ($bz2_toggle_root,$gz_toggle_root,$compression_off); #my ($main::combo); made this totally global @@ -272,7 +273,6 @@ my ($root_device,$root_filename,$method,$template,$filesystem_size, $root_device_size); my $ars = {}; # anonymous hash - # My own creation - the roots touch the ground if three lines are added. my @xpm_data = ( "32 45 3 1", @@ -820,8 +820,7 @@ sub advanced_boot_section { #_______________________________________ # lib_strip_check - label_advanced("Stripping:",0,1,0,1,$table_advanced); - + #label_advanced("Stripping:",0,1,0,1,$table_advanced); !defined $lib_strip_check ? ($boolean = 1) : ($boolean = $lib_strip_check->get_active()); $lib_strip_check = Gtk::CheckButton->new("Libraries"); @@ -833,7 +832,7 @@ sub advanced_boot_section { " right mouse button to change from" . " [objcopy --strip-debug] to" . " [objcopy --strip-all].", "" ); - $table_advanced->attach($lib_strip_check,1,2,0,1, + $table_advanced->attach($lib_strip_check,0,1,0,1, ['expand'],['fill','shrink'],0,0); show $lib_strip_check; @@ -845,10 +844,24 @@ sub advanced_boot_section { $tooltips->set_tip( $bin_strip_check, "This is generally a good idea." . " [objcopy --strip-all]", "" ); - $table_advanced->attach($bin_strip_check,2,3,0,1, + $table_advanced->attach($bin_strip_check,1,2,0,1, ['expand'],['fill','shrink'],0,0); show $bin_strip_check; + + # mod_strip_check + !defined $mod_strip_check ? ($boolean = 1) + : ($boolean = $mod_strip_check->get_active()); + $mod_strip_check = Gtk::CheckButton->new("Modules"); + $mod_strip_check->set_active($boolean); + $tooltips->set_tip( $mod_strip_check, + "This is generally a good idea." . + " [objcopy --strip-debug]", "" ); + $table_advanced->attach($mod_strip_check,2,3,0,1, + ['expand'],['fill','shrink'],0,0); + show $mod_strip_check; + + #_______________________________________ # Development Drive label_advanced("Devel Device:",0,1,1,2,$table_advanced); @@ -886,7 +899,7 @@ sub advanced_boot_section { " /lib/modules/kernel-version which are" . " necessary for the Boot Method to work" . " properly. Kmod inserts the modules," . - " and kmod needs to be built-in to the" . + " and kmod needs to be built into the" . " kernel along with initrd and ramdisk." , ""); $ea3->set_text($entry_advanced[11]) if defined $entry_advanced[11]; @@ -2218,13 +2231,21 @@ elsif (defined $container[METHOD] && defined $container[KERNEL] && : ($container[LIB_STRIP] = $lib_strip_check->get_active()); !$container[LIB_STRIP] ? ($container[LIB_STRIP] = 2) : ($container[LIB_STRIP] = 1); + !defined $bin_strip_check ? ($container[BIN_STRIP] = 3) : ($container[BIN_STRIP] = $bin_strip_check->get_active()); !$container[BIN_STRIP] ? ($container[BIN_STRIP] = 4) : ($container[BIN_STRIP] = 3); - - if ($container[LIB_STRIP] == 1) { + + !defined $mod_strip_check ? ($container[MOD_STRIP] = 7) + : ($container[MOD_STRIP] = + $mod_strip_check->get_active()); + !$container[MOD_STRIP] ? ($container[MOD_STRIP] = 8) + : ($container[MOD_STRIP] = 7); + + + if ($container[LIB_STRIP] == 1) { $obj_count == 0 ? ($container[OBJCOPY_BOOL] = 5) : ($container[OBJCOPY_BOOL] = 6); } @@ -2321,7 +2342,7 @@ elsif (defined $container[METHOD] && defined $container[KERNEL] && my @diff = grep(!$diff{$_},@original_container); if ($#diff >= 0) { - # unlink initrd_image.gz, do initrd() + # unlink initrd_image.gz, do initrd_size() $ok = 1; $initrd = "initrd_image"; } @@ -2339,8 +2360,10 @@ elsif (defined $container[METHOD] && defined $container[KERNEL] && $root_image, $device, $size, - $compress,$container[LIB_STRIP], + $compress, + $container[LIB_STRIP], $container[BIN_STRIP], + $container[MOD_STRIP], $container[OBJCOPY_BOOL], $container[ABS_DEVICE], $container[ABS_OPT_DEVICE], @@ -2535,28 +2558,41 @@ sub device2 { # full file path and strip result. Right now this is specific to initrd. sub stripper { - # stripper (program,bin|lib); - if ((!defined $lib_strip_check && !defined $bin_strip_check) or - ($lib_strip_check->active || $bin_strip_check->active)) { - my $not_stripped = `file $_[0] >/dev/null 2>&1`; + # stripper (program,bin|lib|mod); + if ((!defined $lib_strip_check && !defined $bin_strip_check + && !defined $mod_strip_check) or + ($lib_strip_check->active || $bin_strip_check->active + || $mod_strip_check->active)) { + + # DON'T DO THIS >/dev/null 2>&1`; + my $not_stripped = `file $_[0] 2> /dev/null`; my $filename = basename($_[0]); - + if ($not_stripped =~ m,not stripped,) { if (($_[1] eq "lib" && !defined $lib_strip_check) or ($_[1] eq "lib" && $lib_strip_check->active)) { # --strip-all works for initrd if ($obj_count == 0) { sys("objcopy --strip-debug $_[0] $tmp/$filename"); + info(1,"--strip-debug $filename\n"); return ( "$tmp/$filename", 1 ); } elsif ($obj_count == 1) { sys("objcopy --strip-all $_[0] $tmp/$filename"); + info(1,"--strip-all $filename\n"); return ( "$tmp/$filename", 1 ); } } elsif (($_[1] eq "bin" && !defined $bin_strip_check) or ($_[1] eq "bin" && $bin_strip_check->active)) { sys("objcopy --strip-all $_[0] $tmp/$filename"); + info(1,"--strip-all $filename\n"); + return ( "$tmp/$filename", 1 ); + } + elsif (($_[1] eq "mod" && !defined $mod_strip_check) or + ($_[1] eq "mod" && $mod_strip_check->active)) { + sys("objcopy --strip-debug $_[0] $tmp/$filename"); + info(1,"--strip-debug $filename\n"); return ( "$tmp/$filename", 1 ); } } @@ -2651,9 +2687,24 @@ sub initrd_size { my $dir_size = 9 + 1; my $initrd_size = $dir_size + $linuxrc_size; + + # modules + my @modules = kernel_modules(); + foreach (@modules) { + ($path,$value) = stripper($_,"mod"); + $initrd_size = $initrd_size + ((stat($path))[12]/2); + unlink($path) if $value == 1; + } + # This and libs should be user accessible # add other executables here - my @initrd_stuff = qw(ash gzip mount umount); + my @initrd_stuff = qw(ash gzip mount umount modprobe); + if (@modules) { + @initrd_stuff = qw(ash gzip mount umount modprobe); + } + else { + @initrd_stuff = qw(ash gzip mount umount); + } foreach (@initrd_stuff) { ($path,$value) = stripper(find_file_in_path($_),"bin"); @@ -2794,8 +2845,27 @@ sub initrd { pb($I,7); # This and libs should be user accessible + info(0, ".. the modules\n"); + my @modules = kernel_modules(); + + foreach my $stuff (@modules) { + ($path,$value) = stripper($stuff,"bin"); + $value == 0 ? ($tool = "cp -a") : ($tool = "mv"); + if (!$path) { + info(1,"gBootRoot Error: Couldn't find $stuff\n"); + } + info(0,"HEREIAM $tmp/initrd_mnt$stuff\n"); + return if errcp(sys("$tool $path $tmp/initrd_mnt")) == 2; + } + info(0, ".. the bins\n"); - my @initrd_stuff = qw(ash gzip mount umount); + my @initrd_stuff; + if (@modules) { + @initrd_stuff = qw(ash gzip mount umount modprobe); + } + else { + @initrd_stuff = qw(ash gzip mount umount); + } foreach (@initrd_stuff) { ($path,$value) = stripper(find_file_in_path($_),"bin");