Fix musl build (#96)

a) Fix build if limits.h provides definition for PAGE_SIZE, as musl does w/musl per XSI[1] although it's apparently optional [2].
   This value is only provided when it's known to be a constant, to avoid the need to discover the value dynamically.
b) If not using system-provided (kernel headers, or libc headers, or something) use the POSIX approach of querying the value
   dynamically using sysconf(_SC_PAGE_SIZE) instead of hardcoded value that hopefully is correct.
[1] http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html
[2] http://www.openwall.com/lists/musl/2015/09/11/8

This patch originate from:

  https://raw.githubusercontent.com/voidlinux/void-packages/a0ece13ad7ab2aae760e09e41e0459bd999a3695/srcpkgs/thin-provisioning-tools/patches/musl.patch

and was also applied in NixOS:

  https://github.com/NixOS/nixpkgs/pull/40559/

cc @dtzWill
This commit is contained in:
Jörg Thalheim 2018-05-22 14:02:49 +01:00 committed by Joe Thornber
parent 5d3197b8ab
commit 6a7351da0d
2 changed files with 9 additions and 2 deletions

View File

@ -10,13 +10,17 @@
#include <libaio.h> #include <libaio.h>
#include <vector> #include <vector>
#include <limits.h>
#ifndef PAGE_SIZE
#define PAGE_SIZE sysconf(_SC_PAGE_SIZE)
#endif
//---------------------------------------------------------------- //----------------------------------------------------------------
namespace bcache { namespace bcache {
using sector_t = uint64_t; using sector_t = uint64_t;
unsigned const SECTOR_SHIFT = 9; unsigned const SECTOR_SHIFT = 9;
unsigned const PAGE_SIZE = 4096;
// Virtual base class to aid unit testing // Virtual base class to aid unit testing
class io_engine { class io_engine {

View File

@ -23,6 +23,10 @@
#include <fcntl.h> #include <fcntl.h>
#include <limits.h>
#ifndef PAGE_SIZE
#define PAGE_SIZE sysconf(_SC_PAGE_SIZE)
#endif
using namespace boost; using namespace boost;
using namespace std; using namespace std;
@ -33,7 +37,6 @@ using namespace testing;
namespace { namespace {
unsigned const MAX_IO = 64; unsigned const MAX_IO = 64;
unsigned const PAGE_SIZE = 4096;
class IOEngineTests : public Test { class IOEngineTests : public Test {
public: public: