1 # UCW Library configuration system: parameters of the library
2 # (c) 2005--2010 Martin Mares <mj@ucw.cz>
3 # (c) 2006 Robert Spalek <robert@ucw.cz>
4 # (c) 2008 Michal Vaner <vorner@ucw.cz>
6 package UCW::Configure::LibUCW;
13 Test("CPU_PAGE_SIZE", "Determining page size", sub {
15 if (IsSet("CONFIG_DARWIN")) {
16 $p = `sysctl -n hw.pagesize`;
17 defined $p or Fail "sysctl hw.pagesize failed";
18 } elsif (IsSet("CONFIG_LINUX")) {
19 $p = `getconf PAGE_SIZE`;
20 defined $p or Fail "getconf PAGE_SIZE failed";
26 if (IsSet("CONFIG_LARGE_FILES") && IsSet("CONFIG_LINUX")) {
27 # Use 64-bit versions of file functions
31 # Decide how will ucw/partmap.c work
32 Set("CONFIG_UCW_PARTMAP_IS_MMAP") if IsSet("CPU_64BIT_POINTERS");
34 # Option for ucw/mempool.c
35 Set("CONFIG_UCW_POOL_IS_MMAP");
37 # Guess optimal bit width of the radix-sorter
38 if (Get("CPU_ARCH") eq "default" || Get("CPU_ARCH") =~ /^i[345]86$/) {
39 # This should be safe everywhere
40 Set("CONFIG_UCW_RADIX_SORTER_BITS" => 10);
42 # Use this on modern CPU's
43 Set("CONFIG_UCW_RADIX_SORTER_BITS" => 12);
46 # Detect if thread-local storage is supported
47 if (Get("CONFIG_UCW_THREADS")) {
48 TestBool("CONFIG_UCW_TLS", "Checking if GCC supports thread-local storage", sub {
49 if (UCW::Configure::C::TestCompile("__thread", "__thread int i;\nint main(void) { return 0; }\n")) {
57 # Detect if we have the epoll() syscall
58 TestBool("CONFIG_UCW_EPOLL", "Checking for epoll", sub {
59 return UCW::Configure::C::TestCompile("epoll", <<'FINIS' ) ? 1 : 0;
60 #include <sys/epoll.h>
71 UCW::Configure::C::ConfigHeader("ucw/autoconf.h", [
72 # Excluded symbols (danger of collision)
73 '^CONFIG_DEBUG$' => 0,
78 '^(SHERLOCK|UCW)_VERSION(_|$)' => 1,
79 '^MAX_WORD_(BYTES|CHARS)$' => 1,
82 } if Get("CONFIG_INSTALL_API");
85 if (!IsSet("CONFIG_UCW_THREADS") || !IsSet("CONFIG_DIRECT_IO")) {
86 if (IsGiven("CONFIG_UCW_FB_DIRECT") && IsSet("CONFIG_UCW_FB_DIRECT")) {
87 if (!IsSet("CONFIG_UCW_THREADS")) {
88 Fail("CONFIG_UCW_FB_DIRECT needs CONFIG_UCW_THREADS");
90 Fail("CONFIG_UCW_FB_DIRECT needs CONFIG_DIRECT_IO");
93 UnSet("CONFIG_UCW_FB_DIRECT");