From: David R. M. <dm...@us...> - 2004-12-19 04:57:36
|
Update of /cvsroot/fink/fink/perlmod/Fink In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22850 Modified Files: Tag: branch_0_23 Bootstrap.pm ChangeLog PkgVersion.pm Services.pm Log Message: create new function &enforce_gcc to verify that the correct version of gcc is being used Index: Services.pm =================================================================== RCS file: /cvsroot/fink/fink/perlmod/Fink/Services.pm,v retrieving revision 1.120.2.1 retrieving revision 1.120.2.2 diff -u -d -r1.120.2.1 -r1.120.2.2 --- Services.pm 22 Oct 2004 17:18:18 -0000 1.120.2.1 +++ Services.pm 19 Dec 2004 04:57:24 -0000 1.120.2.2 @@ -44,7 +44,7 @@ &parse_fullversion &collapse_space &pkglist2lol &lol2pkglist - &file_MD5_checksum &get_arch &get_sw_vers + &file_MD5_checksum &get_arch &get_sw_vers &enforce_gcc &get_system_perl_version &get_path &eval_conditional &count_files); } @@ -933,6 +933,86 @@ return $arch; } +=item enforce_gcc + + my $gcc = enforce_gcc($message); + my $gcc = enforce_gcc($message, $gcc_abi); + +Check to see if the gcc version optionally supplied in $gcc_abi is the +same as the default GCC ABI for the installed version of Mac OS X or Darwin. +If it is not, we return the value for the deafult GCC ABI. + +If it is, or if $gcc_abi is not supplied, then we check to see if the +gcc version obtained from /usr/sbin/gcc_select agrees with the expected +(default) gcc version corresponding to the installed version of +Mac OS X or Darwin. If the versions agree, the common value is returned. +If they do not agree, we print $message and exit fink. + +The strings CURRENT_SYSTEM, INSTALLED_GCC, EXPECTED_GCC, and +GCC_SELECT_COMMAND within $message are converted to appropriate values. + +Sample message: + +This package must be compiled with GCC EXPECTED_GCC, but you currently have +GCC INSTALLED_GCC selected. To correct this problem, run the command: + + sudo gcc_select GCC_SELECT_COMMAND + +(You may need to install a more recent version of the Developer Tools to be +able to do so.) + +=cut + +sub enforce_gcc { + my $message = shift; + my $gcc_abi = shift; + my ($gcc, $gcc_select, $gcc_command, $current_system); + my ($dummy, $darwin_version); + +# Note: we no longer support 10.1 or 10.2-gcc3.1 in fink, we don't +# specify default values for these. + + my %osx_default = ('10.2' => '3.3', '10.3' => '3.3', '10.4' => '4.0.0'); + my %darwin_default = ('6' => '3.3', '7' => '3.3', '8' => '4.0.0'); + my %gcc_name = ('2.95.2' => '2', '2.95' => '2', '3.1' => '3', '3.3' => '3.3', '4.0.0' => '4.0'); + my %gcc_abi_default = ('2.95' => '2.95', '3.1' => '3.1', '3.3' => '3.3', '4.0.0' => '3.3'); + + my $sw_vers = get_sw_vers(); + if ($sw_vers ne 0) { + $current_system = "Mac OS X $sw_vers"; + $sw_vers =~ s/^(\d*\.\d*).*/${1}/; + $gcc = $osx_default{$sw_vers}; + } else { + ($dummy,$dummy,$darwin_version) = POSIX::uname(); + $current_system = "Darwin $darwin_version"; + $darwin_version =~ s/^(\d*).*/${1}/; + $gcc = $darwin_default{$darwin_version}; + } + + if (defined $gcc_abi) { + if ($gcc_abi_default{$gcc} !~ /^$gcc_abi/) { + return $gcc_abi_default{$gcc};; + } + } + + chomp($gcc_select = `gcc_select`); + if (not $gcc_select =~ s/^.*gcc version (\S+)\s+.*$/$1/gs) { + $gcc_select = 'an unknown version'; + } + + $gcc_command = $gcc_name{$gcc}; + + $message =~ s/CURRENT_SYSTEM/$current_system/g; + $message =~ s/INSTALLED_GCC/$gcc_select/g; + $message =~ s/EXPECTED_GCC/$gcc/g; + $message =~ s/GCC_SELECT_COMMAND/$gcc_command/g; + + ($gcc_select =~ /^$gcc/) or die($message); + + return $gcc; + +} + =item get_sw_vers my $os_x_version = get_sw_vers; Index: PkgVersion.pm =================================================================== RCS file: /cvsroot/fink/fink/perlmod/Fink/PkgVersion.pm,v retrieving revision 1.311.2.1 retrieving revision 1.311.2.2 diff -u -d -r1.311.2.1 -r1.311.2.2 --- PkgVersion.pm 7 Dec 2004 01:48:18 -0000 1.311.2.1 +++ PkgVersion.pm 19 Dec 2004 04:57:23 -0000 1.311.2.2 @@ -29,7 +29,7 @@ &pkglist2lol &lol2pkglist &file_MD5_checksum &version_cmp &get_arch &get_system_perl_version - &get_path &eval_conditional); + &get_path &eval_conditional &enforce_gcc); use Fink::CLI qw(&print_breaking &prompt_boolean &prompt_selection_new); use Fink::Config qw($config $basepath $libpath $debarch $buildpath binary_requested); use Fink::NetAccess qw(&fetch_url_to_file); @@ -1648,31 +1648,13 @@ return; } - my ($gcc); - my %gcchash = ('2.95.2' => '2', '2.95' => '2', '3.1' => '3', '3.3' => '3.3'); - if ($self->has_param("GCC")) { - $gcc = $self->param("GCC"); - chomp(my $gcc_select = `gcc_select`); - if (not $gcc_select =~ s/^.*gcc version (\S+)\s+.*$/$1/gs) { - $gcc_select = 'an unknown version'; - } - if (not exists $gcchash{$gcc}) { - $gcchash{$gcc} = $gcc; - } - if ($gcc_select !~ /^$gcc/) { - die <<END; - -This package must be compiled with GCC $gcc, but you currently have $gcc_select selected. -To correct this problem, run the command: - - sudo gcc_select $gcchash{$gcc} - -You may need to install a more recent version of the Developer Tools to be able -to do so. - -END - } + my $gcc_abi = $self->param("GCC"); +Fink::Services::enforce_gcc("This package must be compiled with GCC EXPECTED_GCC, but you currently have\n" . +"GCC INSTALLED_GCC selected. To correct this problem, run the command:\n\n" . +" sudo gcc_select GCC_SELECT_COMMAND\n\n" . +"(You may need to install a more recent version of the Developer Tools to be\n" . + "able to do so.)\n", $gcc_abi); } $bdir = $self->get_fullname(); Index: Bootstrap.pm =================================================================== RCS file: /cvsroot/fink/fink/perlmod/Fink/Bootstrap.pm,v retrieving revision 1.65.4.3 retrieving revision 1.65.4.4 diff -u -d -r1.65.4.3 -r1.65.4.4 --- Bootstrap.pm 9 Dec 2004 12:19:56 -0000 1.65.4.3 +++ Bootstrap.pm 19 Dec 2004 04:57:23 -0000 1.65.4.4 @@ -24,7 +24,7 @@ package Fink::Bootstrap; use Fink::Config qw($config $basepath); -use Fink::Services qw(&execute &file_MD5_checksum); +use Fink::Services qw(&execute &file_MD5_checksum &enforce_gcc); use Fink::CLI qw(&print_breaking &prompt_boolean); use Fink::Package; use Fink::PkgVersion; @@ -159,13 +159,12 @@ my $host = shift @_; my ($distribution, $gcc, $build); - # We check to see if gcc 3.3 is installed, and if it is the correct version. - # If so, we set $gcc so that 10.2 users will get the 10.2-gcc3.3 tree. - # + # We test for an obsolete version of gcc3.3, and refuse to proceed if + # it is present. + # # (Note: the June 2003 Developer Tools had build 1435, the August 2003 ones # had build 1493.) - $gcc = ""; if (-x '/usr/bin/gcc-3.3') { foreach(`/usr/bin/gcc-3.3 --version`) { if (/build (\d+)\)/) { @@ -179,30 +178,22 @@ August 2003 Developer Tools update, or to Xcode, and try again. END - chomp(my $gcc_select = `gcc_select`); - if (not $gcc_select =~ s/^.*gcc version (\S+)\s+.*$/$1/gs) { - $gcc_select = 'an unknown version'; - } - if (($gcc_select !~ /^3.3/) and ($gcc_select !~ /^4.0/)) { - die <<END; - -Since you have gcc 3.3 installed, fink must be bootstrapped or updated using -that compiler. However, you currently have gcc $gcc_select selected. To correct -this problem, run the command: - - sudo gcc_select 3.3 - -END - } - $gcc = "-gcc3.3"; - } +} -# 10.2 users who do not have gcc at all are installing binary only, so they get -# to move to 10.2-gcc3.3 also + # We check to see if gcc is installed, and if it is the correct version. + # If so, we set $gcc so that 10.2 users will get the 10.2-gcc3.3 tree. - if (not -x '/usr/bin/gcc') { - $gcc = "-gcc3.3"; - } + if (-x '/usr/bin/gcc') { +$gcc = Fink::Services::enforce_gcc("Under CURRENT_SYSTEM, Fink must be bootstrapped or updated using\n" . +"gcc EXPECTED_GCC. However, you currently have gcc INSTALLED_GCC selected.\n" . +"To correct this problem, run the command:\n\n" . + " sudo gcc_select GCC_SELECT_COMMAND\n\n"); + $gcc = "-" . $gcc; +} else { +## 10.2 users who do not have gcc at all are installing binary only, so they get +## to move to 10.2-gcc3.3 also + $gcc = "-gcc3.3"; +} if ($host =~ /^powerpc-apple-darwin1\.[34]/) { &print_breaking("\nThis system is no longer supported " . Index: ChangeLog =================================================================== RCS file: /cvsroot/fink/fink/perlmod/Fink/ChangeLog,v retrieving revision 1.723.2.6 retrieving revision 1.723.2.7 diff -u -d -r1.723.2.6 -r1.723.2.7 --- ChangeLog 9 Dec 2004 12:19:56 -0000 1.723.2.6 +++ ChangeLog 19 Dec 2004 04:57:23 -0000 1.723.2.7 @@ -1,3 +1,10 @@ +2004-12-18 Dave Morrison <dm...@us...> + + * Bootstrap.pm, PkgVersion.pm, Services.pm: Move the code which + verifies that the gcc version is correct to a new &enforce_gcc + function in Services.pm. Make sure that this function does what + we want it to do for future versions of OS X. + 2004-12-09 Dave Morrison <dm...@us...> * Bootstrap.pm: Allow bootstrap under gcc 4.0 |