X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=ucw%2Fperl%2FUCW%2FConfigure%2FLibUCW.pm;h=7feef1e29dbc2c0faeb3f96d113868c058d56123;hb=643dc4c0697865fbe124d814e736d64a456a5da2;hp=81c9459815cee200a796e43c06de599f3fd5f564;hpb=56869e3e1a7502ea8d18146ef1d4de39f2433138;p=libucw.git diff --git a/ucw/perl/UCW/Configure/LibUCW.pm b/ucw/perl/UCW/Configure/LibUCW.pm index 81c94598..7feef1e2 100644 --- a/ucw/perl/UCW/Configure/LibUCW.pm +++ b/ucw/perl/UCW/Configure/LibUCW.pm @@ -1,5 +1,5 @@ # UCW Library configuration system: parameters of the library -# (c) 2005--2010 Martin Mares +# (c) 2005--2012 Martin Mares # (c) 2006 Robert Spalek # (c) 2008 Michal Vaner @@ -35,13 +35,15 @@ Set("CONFIG_UCW_PARTMAP_IS_MMAP") if IsSet("CPU_64BIT_POINTERS"); Set("CONFIG_UCW_POOL_IS_MMAP"); # Guess optimal bit width of the radix-sorter -if (Get("CPU_ARCH") eq "default" || Get("CPU_ARCH") =~ /^i[345]86$/) { - # This should be safe everywhere - Set("CONFIG_UCW_RADIX_SORTER_BITS" => 10); -} else { - # Use this on modern CPU's - Set("CONFIG_UCW_RADIX_SORTER_BITS" => 12); -} +Test("CONFIG_UCW_RADIX_SORTER_BITS", "Determining radix sorter bucket width", sub { + if (Get("CPU_AMD64")) { + # All amd64 CPUs have large enough L1 cache + return 12; + } else { + # This should be safe everywhere + return 10; + } +}); # Detect if thread-local storage is supported if (Get("CONFIG_UCW_THREADS")) { @@ -66,14 +68,34 @@ int main(void) FINIS }); +# Check if we want to use monotonic clock +TestBool("CONFIG_UCW_MONOTONIC_CLOCK", "Checking for monotonic clock", sub { + return Get("CONFIG_LINUX"); +}); + +if (IsSet("CONFIG_DARWIN")) { + # Darwin does not support BSD regexes, fix up + if (!IsSet("CONFIG_UCW_POSIX_REGEX") && !IsSet("CONFIG_UCW_PCRE")) { + Set("CONFIG_UCW_POSIX_REGEX" => 1); + Warn "BSD regex library on Darwin isn't compatible, using POSIX regex.\n"; + } + + # 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_UCW_DIRECT_IO") && IsSet("CONFIG_UCW_DIRECT_IO")) { + Fail("Direct I/O is not available on darwin"); + } else { + UnSet("CONFIG_UCW_DIRECT_IO"); + } +} + PostConfig { AtWrite { UCW::Configure::C::ConfigHeader("ucw/autoconf.h", [ # Included symbols '^CONFIG_UCW_' => 1, '^CPU_' => 1, - '^(SHERLOCK|UCW)_VERSION(_|$)' => 1, - + '^UCW_VERSION(_|$)' => 1, ]); } if Get("CONFIG_INSTALL_API");