X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=inline;f=ucw%2Fperl%2FUCW%2FConfigure%2FC.pm;h=e3a7fdf859440f8b9d0187e3df3675b282f6241b;hb=8c416794bc7282bfc03fcc0500898aa2483c338a;hp=ec39630d34b6cdcd5944948511837ebd3aa7fcb1;hpb=ad920945145a18895ef391511c92ef42e0e4c3d7;p=libucw.git diff --git a/ucw/perl/UCW/Configure/C.pm b/ucw/perl/UCW/Configure/C.pm index ec39630d..e3a7fdf8 100644 --- a/ucw/perl/UCW/Configure/C.pm +++ b/ucw/perl/UCW/Configure/C.pm @@ -46,15 +46,27 @@ $gccver >= 3000 or Fail "GCC older than 3.0 doesn't support C99 well enough."; ### CPU ### Test("ARCH", "Checking for machine architecture", sub { - my $mach = `uname -m`; + # + # We have to ask GCC for the target architecture, because it may + # differ from what uname tells us. This can happen even if we are + # not cross-compiling, for example on Linux with amd64 kernel, but + # i386 userspace. + # + my $gcc = Get("CC"); + my $mach = `$gcc -dumpmachine 2>/dev/null`; + if (!$? && $mach ne "") { + $mach =~ s/-.*//; + } else { + $mach = `uname -m`; + Fail "Unable to determine machine type" if $? || $mach eq ""; + } chomp $mach; - Fail "Unable to determine machine type" if $? || $mach eq ""; if ($mach =~ /^i[0-9]86$/) { return "i386"; } elsif ($mach =~ /^(x86[_-]|amd)64$/) { return "amd64"; } else { - return "unknown"; + return "unknown ($mach)"; } }); @@ -118,7 +130,8 @@ Test("CPU_ARCH", "Checking for CPU architecture", sub { elsif ($model >= 3) { $arch = "prescott"; } else { $arch = "pentium4"; } } elsif ($family == 6 && $gccver >= 3003) { - if ($model == 15) { $arch = "prescott"; } + if ($model == 23) { $arch = "nocona"; } + elsif ($model == 15) { $arch = "prescott"; } elsif (($model == 9 || $model == 13) && $gccver >= 3004) { $arch = "pentium-m"; } elsif ($model >= 7) { $arch = "pentium3"; } elsif ($model >= 3) { $arch = "pentium2"; } @@ -243,6 +256,15 @@ if (IsSet("CONFIG_DARWIN")) { Append("COPT" => "-I/sw/include"); # Fill in some constants not found in the system header files Set("SOL_TCP" => 6); # missing in /usr/include/netinet/tcp.h + if (IsGiven("CONFIG_DIRECT_IO") && IsSet("CONFIG_DIRECT_IO")) { + Fail("Direct I/O is not available on darwin"); + } else { + UnSet("CONFIG_DIRECT_IO"); + } + if (!IsSet("CONFIG_POSIX_REGEX") && !IsSet("CONFIG_PCRE")) { + Set("CONFIG_POSIX_REGEX" => 1); + Warn "BSD regex library on Darwin isn't compatible, using POSIX regex.\n"; + } } ### Writing C headers with configuration ###