]> mj.ucw.cz Git - libucw.git/blob - ucw/perl/UCW/Configure/LibUCW.pm
19fcb0384e07b8c5ee6271825bc9653791d3a931
[libucw.git] / ucw / perl / UCW / Configure / LibUCW.pm
1 # UCW Library configuration system: parameters of the library
2 # (c) 2005--2008 Martin Mares <mj@ucw.cz>
3 # (c) 2006 Robert Spalek <robert@ucw.cz>
4 # (c) 2008 Michal Vaner <vorner@ucw.cz>
5
6 package UCW::Configure::LibUCW;
7 use UCW::Configure;
8
9 use strict;
10 use warnings;
11
12 # Determine page size
13 Test("CPU_PAGE_SIZE", "Determining page size", sub {
14         my $p;
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";
21         }
22         chomp $p;
23         return $p;
24 });
25
26 if (IsSet("CONFIG_LARGE_FILES") && IsSet("CONFIG_LINUX")) {
27         # Use 64-bit versions of file functions
28         Set("CONFIG_LFS");
29 }
30
31 # Decide how will ucw/partmap.c work
32 Set("CONFIG_UCW_PARTMAP_IS_MMAP") if IsSet("CPU_64BIT_POINTERS");
33
34 # Option for ucw/mempool.c
35 Set("CONFIG_UCW_POOL_IS_MMAP");
36
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);
41 } else {
42         # Use this on modern CPU's
43         Set("CONFIG_UCW_RADIX_SORTER_BITS" => 12);
44 }
45
46 # fb_direct needs threads
47 if (!IsSet("CONFIG_UCW_THREADS")) {
48         if (IsGiven("CONFIG_DIRECT") && IsSet("CONFIG_DIRECT")) {
49                 if (!IsGiven("CONFIG_UCW_THREADS")) {
50                         Set("CONFIG_UCW_THREADS");
51                 } else {
52                         Fail("CONFIG_DIRECT needs CONFIG_UCW_THREADS");
53                 }
54         } else {
55                 UnSet("CONFIG_DIRECT");
56         }
57 }
58
59 PostConfig {
60         AtWrite {
61                 UCW::Configure::C::ConfigHeader("ucw/autoconf.h", [
62                         # Excluded symbols (danger of collision)
63                         '^CONFIG_DEBUG$' => 0,
64
65                         # Included symbols
66                         '^CONFIG_' => 1,
67                         '^CPU_' => 1,
68                         '^(SHERLOCK|UCW)_VERSION(_|$)' => 1,
69
70                 ]);
71         } if Get("CONFIG_INSTALL_API");
72 };
73
74 # We succeeded
75 1;