wheybags / wcp

Experimental file copy tool using io_uring
MIT License
198 stars 7 forks source link

Fails to build on Alpine Linux (musl libc) #1

Closed jirutka closed 3 years ago

jirutka commented 3 years ago

Environment:

Log:

-- The C compiler identification is GNU 10.2.1
-- The CXX compiler identification is GNU 10.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/gcc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE  
-- Configuring done
-- Generating done
CMake Warning:
  Manually-specified variables were not used by the project:

    CMAKE_INSTALL_LIBDIR

-- Build files have been written to: wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build
/usr/bin/cmake -Swcp-45ab7b81f2bc11f5f577978a974bb99838726d67 -Bwcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build/CMakeFiles wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build//CMakeFiles/progress.marks
/usr/bin/make  -f CMakeFiles/Makefile2 all
make[1]: Entering directory 'wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build'
/usr/bin/make  -f CMakeFiles/wcp_lib.dir/build.make CMakeFiles/wcp_lib.dir/depend
make[2]: Entering directory 'wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build'
cd wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" wcp-45ab7b81f2bc11f5f577978a974bb99838726d67 wcp-45ab7b81f2bc11f5f577978a974bb99838726d67 wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build/CMakeFiles/wcp_lib.dir/DependInfo.cmake --color=
Dependee "wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build/CMakeFiles/wcp_lib.dir/DependInfo.cmake" is newer than depender "wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build/CMakeFiles/wcp_lib.dir/depend.internal".
Dependee "wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build/CMakeFiles/wcp_lib.dir/depend.internal".
Scanning dependencies of target wcp_lib
make[2]: Leaving directory 'wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build'
/usr/bin/make  -f CMakeFiles/wcp_lib.dir/build.make CMakeFiles/wcp_lib.dir/build
make[2]: Entering directory 'wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build'
[  7%] Building CXX object CMakeFiles/wcp_lib.dir/src/CopyRunner.cpp.o
[ 14%] Building CXX object CMakeFiles/wcp_lib.dir/src/Heap.cpp.o
[ 21%] Building CXX object CMakeFiles/wcp_lib.dir/src/CopyQueue.cpp.o
/usr/bin/g++   -Os -fomit-frame-pointer -O3 -DNDEBUG -Wall -pedantic -Wextra -std=gnu++17 -o CMakeFiles/wcp_lib.dir/src/CopyRunner.cpp.o -c wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp
/usr/bin/g++   -Os -fomit-frame-pointer -O3 -DNDEBUG -Wall -pedantic -Wextra -std=gnu++17 -o CMakeFiles/wcp_lib.dir/src/CopyQueue.cpp.o -c wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp
/usr/bin/g++   -Os -fomit-frame-pointer -O3 -DNDEBUG -Wall -pedantic -Wextra -std=gnu++17 -o CMakeFiles/wcp_lib.dir/src/Heap.cpp.o -c wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Heap.cpp
[ 28%] Building CXX object CMakeFiles/wcp_lib.dir/src/Util.cpp.o
/usr/bin/g++   -Os -fomit-frame-pointer -O3 -DNDEBUG -Wall -pedantic -Wextra -std=gnu++17 -o CMakeFiles/wcp_lib.dir/src/Util.cpp.o -c wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.cpp
[ 35%] Building CXX object CMakeFiles/wcp_lib.dir/src/Config.cpp.o
/usr/bin/g++   -Os -fomit-frame-pointer -O3 -DNDEBUG -Wall -pedantic -Wextra -std=gnu++17 -o CMakeFiles/wcp_lib.dir/src/Config.cpp.o -c wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Config.cpp
[ 42%] Building CXX object CMakeFiles/wcp_lib.dir/src/QueueFileDescriptor.cpp.o
/usr/bin/g++   -Os -fomit-frame-pointer -O3 -DNDEBUG -Wall -pedantic -Wextra -std=gnu++17 -o CMakeFiles/wcp_lib.dir/src/QueueFileDescriptor.cpp.o -c wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.cpp
[ 50%] Building CXX object CMakeFiles/wcp_lib.dir/src/ScopedFileDescriptor.cpp.o
/usr/bin/g++   -Os -fomit-frame-pointer -O3 -DNDEBUG -Wall -pedantic -Wextra -std=gnu++17 -o CMakeFiles/wcp_lib.dir/src/ScopedFileDescriptor.cpp.o -c wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.cpp
[ 57%] Building CXX object CMakeFiles/wcp_lib.dir/src/wcpMain.cpp.o
/usr/bin/g++   -Os -fomit-frame-pointer -O3 -DNDEBUG -Wall -pedantic -Wextra -std=gnu++17 -o CMakeFiles/wcp_lib.dir/src/wcpMain.cpp.o -c wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp
[ 64%] Building CXX object CMakeFiles/wcp_lib.dir/src/ETACalculator.cpp.o
/usr/bin/g++   -Os -fomit-frame-pointer -O3 -DNDEBUG -Wall -pedantic -Wextra -std=gnu++17 -o CMakeFiles/wcp_lib.dir/src/ETACalculator.cpp.o -c wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ETACalculator.cpp
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:22:36: error: 'nullptr_t' was not declared in this scope; did you mean 'std::nullptr_t'?
   22 | using Result = std::variant<Error, nullptr_t>;
      |                                    ^~~~~~~~~
      |                                    std::nullptr_t
In file included from /usr/include/c++/10.2.1/string:38,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.cpp:1:
/usr/include/c++/10.2.1/x86_64-alpine-linux-musl/bits/c++config.h:268:29: note: 'std::nullptr_t' declared here
  268 |   typedef decltype(nullptr) nullptr_t;
      |                             ^~~~~~~~~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:22:45: error: template argument 2 is invalid
   22 | using Result = std::variant<Error, nullptr_t>;
      |                                             ^
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:23:18: error: 'nullptr_t' does not name a type
   23 | static constexpr nullptr_t Success() { return nullptr; }
      |                  ^~~~~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:6:1: note: 'nullptr_t' is defined in header '<cstddef>'; did you forget to '#include <cstddef>'?
    5 | #include <functional>
  +++ |+#include <cstddef>
    6 | 
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:26:55: error: 'mode_t' has not been declared
   26 | OpenResult myOpen(const std::string& path, int oflag, mode_t mode);
      |                                                       ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:27:1: error: 'Result' does not name a type; did you mean 'OpenResult'?
   27 | Result myClose(int fd);
      | ^~~~~~
      | OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:48:5: error: 'ino64_t' does not name a type
   48 |     ino64_t             d_ino;    /* 64-bit inode number */
      |     ^~~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:48:5: note: the macro 'ino64_t' had not yet been defined
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.cpp:7:
/usr/include/dirent.h:67: note: it was later defined here
   67 | #define ino64_t ino_t
      | 
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:58:15: error: 'Result' does not name a type; did you mean 'OpenResult'?
   58 | [[nodiscard]] Result myStatx(int fd, const std::string& path, int flags, unsigned int mask, struct statx& buf);
      |               ^~~~~~
      |               OpenResult
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.cpp:2:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:22:36: error: 'nullptr_t' was not declared in this scope; did you mean 'std::nullptr_t'?
   22 | using Result = std::variant<Error, nullptr_t>;
      |                                    ^~~~~~~~~
      |                                    std::nullptr_t
In file included from /usr/include/c++/10.2.1/string:38,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.cpp:2:
/usr/include/c++/10.2.1/x86_64-alpine-linux-musl/bits/c++config.h:268:29: note: 'std::nullptr_t' declared here
  268 |   typedef decltype(nullptr) nullptr_t;
      |                             ^~~~~~~~~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.cpp:2:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:22:45: error: template argument 2 is invalid
   22 | using Result = std::variant<Error, nullptr_t>;
      |                                             ^
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:23:18: error: 'nullptr_t' does not name a type
   23 | static constexpr nullptr_t Success() { return nullptr; }
      |                  ^~~~~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:6:1: note: 'nullptr_t' is defined in header '<cstddef>'; did you forget to '#include <cstddef>'?
    5 | #include <functional>
  +++ |+#include <cstddef>
    6 | 
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:26:55: error: 'mode_t' has not been declared
   26 | OpenResult myOpen(const std::string& path, int oflag, mode_t mode);
      |                                                       ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:27:1: error: 'Result' does not name a type; did you mean 'OpenResult'?
   27 | Result myClose(int fd);
      | ^~~~~~
      | OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:48:5: error: 'ino64_t' does not name a type; did you mean 'int64_t'?
   48 |     ino64_t             d_ino;    /* 64-bit inode number */
      |     ^~~~~~~
      |     int64_t
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.cpp:2:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:58:15: error: 'Result' does not name a type; did you mean 'OpenResult'?
   58 | [[nodiscard]] Result myStatx(int fd, const std::string& path, int flags, unsigned int mask, struct statx& buf);
      |               ^~~~~~
      |               OpenResult
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.cpp:2:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.hpp:10:5: error: 'Result' does not name a type; did you mean 'OpenResult'?
   10 |     Result open(const std::string& path, int oflag, mode_t mode);
      |     ^~~~~~
      |     OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.cpp:11:1: error: 'Result' does not name a type; did you mean 'OpenResult'?
   11 | Result ScopedFileDescriptor::open(const std::string& path, int oflag, mode_t mode)
      | ^~~~~~
      | OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.cpp:67:1: error: 'Result' does not name a type
   67 | Result myClose(int fd)
      | ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.cpp:83:1: error: 'Result' does not name a type
   83 | Result myStatx(int fd, const std::string& path, int flags, unsigned int mask, struct statx& buf)
      | ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.cpp: In lambda function:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.cpp:101:34: error: invalid conversion from 'void*' to 'dirent*' [-fpermissive]
  101 |         retval = getdents64(dfd, buffer, bufferSize);
      |                                  ^~~~~~
      |                                  |
      |                                  void*
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.cpp:7:
/usr/include/dirent.h:52:19: note:   initializing argument 2 of 'int getdents(int, dirent*, size_t)'
   52 | int getdents(int, struct dirent *, size_t);
      |                   ^~~~~~~~~~~~~~~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:5,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:22:36: error: 'nullptr_t' was not declared in this scope; did you mean 'std::nullptr_t'?
   22 | using Result = std::variant<Error, nullptr_t>;
      |                                    ^~~~~~~~~
      |                                    std::nullptr_t
In file included from /usr/include/c++/10.2.1/string:38,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.cpp:1:
/usr/include/c++/10.2.1/x86_64-alpine-linux-musl/bits/c++config.h:268:29: note: 'std::nullptr_t' declared here
  268 |   typedef decltype(nullptr) nullptr_t;
      |                             ^~~~~~~~~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:5,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:22:45: error: template argument 2 is invalid
   22 | using Result = std::variant<Error, nullptr_t>;
      |                                             ^
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:23:18: error: 'nullptr_t' does not name a type
   23 | static constexpr nullptr_t Success() { return nullptr; }
      |                  ^~~~~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:6:1: note: 'nullptr_t' is defined in header '<cstddef>'; did you forget to '#include <cstddef>'?
    5 | #include <functional>
  +++ |+#include <cstddef>
    6 | 
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:27:1: error: 'Result' does not name a type; did you mean 'OpenResult'?
   27 | Result myClose(int fd);
      | ^~~~~~
      | OpenResult
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:5,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:58:15: error: 'Result' does not name a type; did you mean 'OpenResult'?
   58 | [[nodiscard]] Result myStatx(int fd, const std::string& path, int flags, unsigned int mask, struct statx& buf);
      |               ^~~~~~
      |               OpenResult
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:19:19: error: 'Result' does not name a type; did you mean 'OpenResult'?
   19 |     [[nodiscard]] Result ensureOpened();
      |                   ^~~~~~
      |                   OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:31:5: error: 'Result' does not name a type; did you mean 'OpenResult'?
   31 |     Result doOpen();
      |     ^~~~~~
      |     OpenResult
make[2]: *** [CMakeFiles/wcp_lib.dir/build.make:176: CMakeFiles/wcp_lib.dir/src/ScopedFileDescriptor.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [CMakeFiles/wcp_lib.dir/build.make:137: CMakeFiles/wcp_lib.dir/src/Util.cpp.o] Error 1
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:5,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:9,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:9:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:22:36: error: 'nullptr_t' was not declared in this scope; did you mean 'std::nullptr_t'?
   22 | using Result = std::variant<Error, nullptr_t>;
      |                                    ^~~~~~~~~
      |                                    std::nullptr_t
In file included from /usr/include/c++/10.2.1/cstring:41,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:5:
/usr/include/c++/10.2.1/x86_64-alpine-linux-musl/bits/c++config.h:268:29: note: 'std::nullptr_t' declared here
  268 |   typedef decltype(nullptr) nullptr_t;
      |                             ^~~~~~~~~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:5,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:9,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:9:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:22:45: error: template argument 2 is invalid
   22 | using Result = std::variant<Error, nullptr_t>;
      |                                             ^
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:23:18: error: 'nullptr_t' does not name a type
   23 | static constexpr nullptr_t Success() { return nullptr; }
      |                  ^~~~~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:6:1: note: 'nullptr_t' is defined in header '<cstddef>'; did you forget to '#include <cstddef>'?
    5 | #include <functional>
  +++ |+#include <cstddef>
    6 | 
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:27:1: error: 'Result' does not name a type; did you mean 'OpenResult'?
   27 | Result myClose(int fd);
      | ^~~~~~
      | OpenResult
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:5,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:9,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:9:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:58:15: error: 'Result' does not name a type; did you mean 'OpenResult'?
   58 | [[nodiscard]] Result myStatx(int fd, const std::string& path, int flags, unsigned int mask, struct statx& buf);
      |               ^~~~~~
      |               OpenResult
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:9,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:9:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:19:19: error: 'Result' does not name a type; did you mean 'OpenResult'?
   19 |     [[nodiscard]] Result ensureOpened();
      |                   ^~~~~~
      |                   OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:31:5: error: 'Result' does not name a type; did you mean 'OpenResult'?
   31 |     Result doOpen();
      |     ^~~~~~
      |     OpenResult
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:9:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:68:47: error: 'PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP' was not declared in this scope; did you mean 'PTHREAD_MUTEX_INITIALIZER'?
   68 |     pthread_mutex_t copiesPendingStartMutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
      |                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                               PTHREAD_MUTEX_INITIALIZER
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:5,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:9,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.hpp:6,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:22:36: error: 'nullptr_t' was not declared in this scope; did you mean 'std::nullptr_t'?
   22 | using Result = std::variant<Error, nullptr_t>;
      |                                    ^~~~~~~~~
      |                                    std::nullptr_t
In file included from /usr/include/c++/10.2.1/cstdint:38,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp:1:
/usr/include/c++/10.2.1/x86_64-alpine-linux-musl/bits/c++config.h:268:29: note: 'std::nullptr_t' declared here
  268 |   typedef decltype(nullptr) nullptr_t;
      |                             ^~~~~~~~~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:5,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:9,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.hpp:6,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:22:45: error: template argument 2 is invalid
   22 | using Result = std::variant<Error, nullptr_t>;
      |                                             ^
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:23:18: error: 'nullptr_t' does not name a type
   23 | static constexpr nullptr_t Success() { return nullptr; }
      |                  ^~~~~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:5:1: note: 'nullptr_t' is defined in header '<cstddef>'; did you forget to '#include <cstddef>'?
    4 | #include <variant>
  +++ |+#include <cstddef>
    5 | #include <functional>
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:27:1: error: 'Result' does not name a type; did you mean 'OpenResult'?
   27 | Result myClose(int fd);
      | ^~~~~~
      | OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:82:42: error: 'PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP' was not declared in this scope; did you mean 'PTHREAD_MUTEX_INITIALIZER'?
   82 |     pthread_mutex_t errorMessagesMutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
      |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                          PTHREAD_MUTEX_INITIALIZER
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:5,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:9,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.hpp:6,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:58:15: error: 'Result' does not name a type; did you mean 'OpenResult'?
   58 | [[nodiscard]] Result myStatx(int fd, const std::string& path, int flags, unsigned int mask, struct statx& buf);
      |               ^~~~~~
      |               OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp: In function 'int wcpMain(int, char**)':
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:36:18: error: variable 'statx srcStat' has initializer but incomplete type
   36 |     struct statx srcStat = {};
      |                  ^~~~~~~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:9,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.hpp:6,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:19:19: error: 'Result' does not name a type; did you mean 'OpenResult'?
   19 |     [[nodiscard]] Result ensureOpened();
      |                   ^~~~~~
      |                   OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:38:9: error: 'Result' was not declared in this scope
   38 |         Result result = myStatx(AT_FDCWD, src, 0, STATX_BASIC_STATS, srcStat);
      |         ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:31:5: error: 'Result' does not name a type; did you mean 'OpenResult'?
   31 |     Result doOpen();
      |     ^~~~~~
      |     OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:39:43: error: 'result' was not declared in this scope
   39 |         if (std::holds_alternative<Error>(result))
      |                                           ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:46:18: error: variable 'statx destStat' has initializer but incomplete type
   46 |     struct statx destStat = {};
      |                  ^~~~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp: In lambda function:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:51:46: error: 'STATX_BASIC_STATS' was not declared in this scope
   51 |             statx(AT_FDCWD, dest.c_str(), 0, STATX_BASIC_STATS, &destStat);
      |                                              ^~~~~~~~~~~~~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:51:74: error: invalid use of incomplete type 'struct statx'
   51 |             statx(AT_FDCWD, dest.c_str(), 0, STATX_BASIC_STATS, &destStat);
      |                                                                          ^
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/wcpMain.cpp:9:
/usr/include/liburing.h:370:8: note: forward declaration of 'struct statx'
  370 | struct statx;
      |        ^~~~~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.hpp:6,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:68:47: error: 'PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP' was not declared in this scope; did you mean 'PTHREAD_MUTEX_INITIALIZER'?
   68 |     pthread_mutex_t copiesPendingStartMutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
      |                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                               PTHREAD_MUTEX_INITIALIZER
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:82:42: error: 'PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP' was not declared in this scope; did you mean 'PTHREAD_MUTEX_INITIALIZER'?
   82 |     pthread_mutex_t errorMessagesMutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
      |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                          PTHREAD_MUTEX_INITIALIZER
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp:1:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.hpp:45:19: error: 'Result' does not name a type; did you mean 'OpenResult'?
   45 |     [[nodiscard]] Result addToBatch();
      |                   ^~~~~~
      |                   OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.hpp:46:5: error: 'Result' does not name a type; did you mean 'OpenResult'?
   46 |     Result handleFileClose();
      |     ^~~~~~
      |     OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.hpp:59:5: error: 'Result' does not name a type; did you mean 'OpenResult'?
   59 |     Result submitReadWriteCommands();
      |     ^~~~~~
      |     OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp: In member function 'void CopyRunner::cleanupOnError()':
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp:79:11: error: 'class CopyRunner' has no member named 'handleFileClose'
   79 |     this->handleFileClose();
      |           ^~~~~~~~~~~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp: At global scope:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp:91:1: error: 'Result' does not name a type; did you mean 'OpenResult'?
   91 | Result CopyRunner::submitReadWriteCommands()
      | ^~~~~~
      | OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp:199:1: error: 'Result' does not name a type; did you mean 'OpenResult'?
  199 | Result CopyRunner::addToBatch()
      | ^~~~~~
      | OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.cpp:210:1: error: 'Result' does not name a type; did you mean 'OpenResult'?
  210 | Result CopyRunner::handleFileClose()
      | ^~~~~~
      | OpenResult
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.cpp:4:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:68:47: error: 'PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP' was not declared in this scope; did you mean 'PTHREAD_MUTEX_INITIALIZER'?
   68 |     pthread_mutex_t copiesPendingStartMutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
      |                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                               PTHREAD_MUTEX_INITIALIZER
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:82:42: error: 'PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP' was not declared in this scope; did you mean 'PTHREAD_MUTEX_INITIALIZER'?
   82 |     pthread_mutex_t errorMessagesMutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
      |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                          PTHREAD_MUTEX_INITIALIZER
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.cpp: In constructor 'QueueFileDescriptor::QueueFileDescriptor(CopyQueue&, std::string, int, mode_t)':
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.cpp:14:15: error: 'class QueueFileDescriptor' has no member named 'doOpen'; did you mean 'isOpen'?
   14 |         this->doOpen(); // ignore errors here, it will be seen when the user calls ensureOpened()
      |               ^~~~~~
      |               isOpen
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.cpp: At global scope:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.cpp:22:1: error: 'Result' does not name a type
   22 | Result QueueFileDescriptor::ensureOpened()
      | ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.cpp:65:1: error: 'Result' does not name a type
   65 | Result QueueFileDescriptor::doOpen()
      | ^~~~~~
make[2]: *** [CMakeFiles/wcp_lib.dir/build.make:150: CMakeFiles/wcp_lib.dir/src/wcpMain.cpp.o] Error 1
make[2]: *** [CMakeFiles/wcp_lib.dir/build.make:163: CMakeFiles/wcp_lib.dir/src/QueueFileDescriptor.cpp.o] Error 1
make[2]: *** [CMakeFiles/wcp_lib.dir/build.make:85: CMakeFiles/wcp_lib.dir/src/CopyRunner.cpp.o] Error 1
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:5,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:9,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:22:36: error: 'nullptr_t' was not declared in this scope; did you mean 'std::nullptr_t'?
   22 | using Result = std::variant<Error, nullptr_t>;
      |                                    ^~~~~~~~~
      |                                    std::nullptr_t
In file included from /usr/include/c++/10.2.1/iomanip:38,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:1:
/usr/include/c++/10.2.1/x86_64-alpine-linux-musl/bits/c++config.h:268:29: note: 'std::nullptr_t' declared here
  268 |   typedef decltype(nullptr) nullptr_t;
      |                             ^~~~~~~~~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:5,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:9,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:22:45: error: template argument 2 is invalid
   22 | using Result = std::variant<Error, nullptr_t>;
      |                                             ^
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:23:18: error: 'nullptr_t' does not name a type
   23 | static constexpr nullptr_t Success() { return nullptr; }
      |                  ^~~~~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:6:1: note: 'nullptr_t' is defined in header '<cstddef>'; did you forget to '#include <cstddef>'?
    5 | #include <functional>
  +++ |+#include <cstddef>
    6 | 
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:27:1: error: 'Result' does not name a type; did you mean 'OpenResult'?
   27 | Result myClose(int fd);
      | ^~~~~~
      | OpenResult
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:5,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:9,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/Util.hpp:58:15: error: 'Result' does not name a type; did you mean 'OpenResult'?
   58 | [[nodiscard]] Result myStatx(int fd, const std::string& path, int flags, unsigned int mask, struct statx& buf);
      |               ^~~~~~
      |               OpenResult
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:9,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:19:19: error: 'Result' does not name a type; did you mean 'OpenResult'?
   19 |     [[nodiscard]] Result ensureOpened();
      |                   ^~~~~~
      |                   OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/QueueFileDescriptor.hpp:31:5: error: 'Result' does not name a type; did you mean 'OpenResult'?
   31 |     Result doOpen();
      |     ^~~~~~
      |     OpenResult
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:68:47: error: 'PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP' was not declared in this scope; did you mean 'PTHREAD_MUTEX_INITIALIZER'?
   68 |     pthread_mutex_t copiesPendingStartMutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
      |                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                               PTHREAD_MUTEX_INITIALIZER
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:82:42: error: 'PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP' was not declared in this scope; did you mean 'PTHREAD_MUTEX_INITIALIZER'?
   82 |     pthread_mutex_t errorMessagesMutex = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
      |                                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                          PTHREAD_MUTEX_INITIALIZER
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:10:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.hpp:45:19: error: 'Result' does not name a type; did you mean 'OpenResult'?
   45 |     [[nodiscard]] Result addToBatch();
      |                   ^~~~~~
      |                   OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.hpp:46:5: error: 'Result' does not name a type; did you mean 'OpenResult'?
   46 |     Result handleFileClose();
      |     ^~~~~~
      |     OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyRunner.hpp:59:5: error: 'Result' does not name a type; did you mean 'OpenResult'?
   59 |     Result submitReadWriteCommands();
      |     ^~~~~~
      |     OpenResult
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:13:
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/ScopedFileDescriptor.hpp:10:5: error: 'Result' does not name a type; did you mean 'OpenResult'?
   10 |     Result open(const std::string& path, int oflag, mode_t mode);
      |     ^~~~~~
      |     OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp: In member function 'void CopyQueue::submitLoop()':
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:77:13: error: 'pthread_yield' was not declared in this scope; did you mean 'pthread_kill'?
   77 |             pthread_yield();
      |             ^~~~~~~~~~~~~
      |             pthread_kill
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:137:21: error: 'Result' was not declared in this scope; did you mean 'OpenResult'?
  137 |                     Result result = toAdd->destFd->ensureOpened();
      |                     ^~~~~~
      |                     OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:138:56: error: 'result' was not declared in this scope
  138 |                     if (!std::holds_alternative<Error>(result))
      |                                                        ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:139:41: error: 'class CopyRunner' has no member named 'handleFileClose'
  139 |                         result = toAdd->handleFileClose();
      |                                         ^~~~~~~~~~~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:141:55: error: 'result' was not declared in this scope
  141 |                     if (std::holds_alternative<Error>(result))
      |                                                       ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:149:21: error: 'Result' was not declared in this scope; did you mean 'OpenResult'?
  149 |                     Result result = toAdd->addToBatch();
      |                     ^~~~~~
      |                     OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:151:55: error: 'result' was not declared in this scope
  151 |                     if (std::holds_alternative<Error>(result))
      |                                                       ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:191:17: error: 'Result' was not declared in this scope; did you mean 'OpenResult'?
  191 |                 Result closeResult = eventData->copyData->handleFileClose();
      |                 ^~~~~~
      |                 OpenResult
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:192:51: error: 'closeResult' was not declared in this scope
  192 |                 if (std::holds_alternative<Error>(closeResult))
      |                                                   ^~~~~~~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp: In member function 'void CopyQueue::addRecursiveCopy(std::string, std::string)':
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:604:13: error: 'Result' was not declared in this scope
  604 |             Result result = currentFd.open(current, O_RDONLY | O_DIRECTORY | O_CLOEXEC, 0);
      |             ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:605:47: error: 'result' was not declared in this scope
  605 |             if (std::holds_alternative<Error>(result))
      |                                               ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:636:30: error: variable 'statx sb' has initializer but incomplete type
  636 |                 struct statx sb = {};
      |                              ^~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:642:25: error: 'Result' was not declared in this scope
  642 |                         Result result = myStatx(AT_FDCWD, fullPath, 0, STATX_BASIC_STATS, sb);
      |                         ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:643:59: error: 'result' was not declared in this scope
  643 |                         if (std::holds_alternative<Error>(result))
      |                                                           ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:680:25: error: 'Result' was not declared in this scope
  680 |                         Result result = myStatx(AT_FDCWD, fullPath, 0, STATX_BASIC_STATS, sb);
      |                         ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:681:59: error: 'result' was not declared in this scope
  681 |                         if (std::holds_alternative<Error>(result))
      |                                                           ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp: In member function 'void CopyQueue::addFileCopy(const string&, const string&, const statx*)':
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:708:9: error: 'Result' was not declared in this scope
  708 |         Result result = myStatx(AT_FDCWD, from, 0, STATX_BASIC_STATS, *tmp);
      |         ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:709:43: error: 'result' was not declared in this scope
  709 |         if (std::holds_alternative<Error>(result))
      |                                           ^~~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp: In member function 'void CopyQueue::addCopyJob(const string&, const string&, const statx&)':
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:722:99: error: invalid use of incomplete type 'const struct statx'
  722 |     auto* destFd = new QueueFileDescriptor(*this, dest, O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, st.stx_mode);
      |                                                                                                   ^~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
/usr/include/liburing.h:370:8: note: forward declaration of 'struct statx'
  370 | struct statx;
      |        ^~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:724:9: error: invalid use of incomplete type 'const struct statx'
  724 |     if (st.stx_size == 0)
      |         ^~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
/usr/include/liburing.h:370:8: note: forward declaration of 'struct statx'
  370 | struct statx;
      |        ^~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:738:32: error: invalid use of incomplete type 'const struct statx'
  738 |     size_t requiredAlignment = st.stx_blksize;
      |                                ^~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
/usr/include/liburing.h:370:8: note: forward declaration of 'struct statx'
  370 | struct statx;
      |        ^~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:752:26: error: invalid use of incomplete type 'const struct statx'
  752 |     int32_t chunkCount = st.stx_size / chunkSize;
      |                          ^~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
/usr/include/liburing.h:370:8: note: forward declaration of 'struct statx'
  370 | struct statx;
      |        ^~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:753:9: error: invalid use of incomplete type 'const struct statx'
  753 |     if (st.stx_size % chunkSize != 0)
      |         ^~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
/usr/include/liburing.h:370:8: note: forward declaration of 'struct statx'
  370 | struct statx;
      |        ^~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:760:22: error: invalid use of incomplete type 'const struct statx'
  760 |     while (offset != st.stx_size)
      |                      ^~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
/usr/include/liburing.h:370:8: note: forward declaration of 'struct statx'
  370 | struct statx;
      |        ^~~~~
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:762:52: error: invalid use of incomplete type 'const struct statx'
  762 |         size_t count = std::min<size_t>(chunkSize, st.stx_size - offset);
      |                                                    ^~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
/usr/include/liburing.h:370:8: note: forward declaration of 'struct statx'
  370 | struct statx;
      |        ^~~~~
In file included from /usr/include/c++/10.2.1/bits/locale_conv.h:41,
                 from /usr/include/c++/10.2.1/locale:43,
                 from /usr/include/c++/10.2.1/iomanip:43,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:1:
/usr/include/c++/10.2.1/bits/unique_ptr.h: In instantiation of 'typename std::_MakeUniq<_Tp>::__single_object std::make_unique(_Args&& ...) [with _Tp = statx; _Args = {}; typename std::_MakeUniq<_Tp>::__single_object = std::unique_ptr<statx>]':
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:706:46:   required from here
/usr/include/c++/10.2.1/bits/unique_ptr.h:962:30: error: invalid use of incomplete type 'struct statx'
  962 |     { return unique_ptr<_Tp>(new _Tp(std::forward<_Args>(__args)...)); }
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.hpp:2,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:8:
/usr/include/liburing.h:370:8: note: forward declaration of 'struct statx'
  370 | struct statx;
      |        ^~~~~
In file included from /usr/include/c++/10.2.1/bits/locale_conv.h:41,
                 from /usr/include/c++/10.2.1/locale:43,
                 from /usr/include/c++/10.2.1/iomanip:43,
                 from wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:1:
/usr/include/c++/10.2.1/bits/unique_ptr.h: In instantiation of 'void std::default_delete<_Tp>::operator()(_Tp*) const [with _Tp = statx]':
/usr/include/c++/10.2.1/bits/unique_ptr.h:361:17:   required from 'std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = statx; _Dp = std::default_delete<statx>]'
wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/src/CopyQueue.cpp:703:35:   required from here
/usr/include/c++/10.2.1/bits/unique_ptr.h:83:16: error: invalid application of 'sizeof' to incomplete type 'statx'
   83 |  static_assert(sizeof(_Tp)>0,
      |                ^~~~~~~~~~~
make[2]: *** [CMakeFiles/wcp_lib.dir/build.make:98: CMakeFiles/wcp_lib.dir/src/CopyQueue.cpp.o] Error 1
make[2]: Leaving directory 'wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build'
make[1]: *** [CMakeFiles/Makefile2:156: CMakeFiles/wcp_lib.dir/all] Error 2
make[1]: Leaving directory 'wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build'
make: *** [Makefile:106: all] Error 2
wheybags commented 3 years ago

So, I don't have much experience with musl, but my understanding is that libstdc++ has a hard dependency on glibc. It seems there are patched versions out there to make it work, and I guess that is what alpine is using? However, I don't have a patched version to hand. I would guess that the only problem is some missing includes. Is there any chance you'd be interested in trying to figure out which includes are needed and dropping a PR?

jirutka commented 3 years ago

No, libstdc++ does not have a hard dependency on glibc.

I’ve managed to hack it in the way it builds (quick & dirty patch), but it segfaults in ETACalculator::getEta().

(gdb) run src foo
Starting program: wcp-45ab7b81f2bc11f5f577978a974bb99838726d67/build/wcp src foo
[New LWP 27555]
[New LWP 27556]

[LWP 27555 exited]                                                                                                                       0.00 B / ???                                                                                                          8388608.00 TiB/s   ETA: ??? 
                                                                                                                                Calculating, found: 0.00 B                                                                                                                                 
Thread 3 "wcp" received signal SIGSEGV, Segmentation fault.
[Switching to LWP 27556]
0x000055555556b91e in ETACalculator::getEta()::{lambda(unsigned long)#1}::operator()(unsigned long) const ()
(gdb) backtrace
#0  0x000055555556b91e in ETACalculator::getEta()::{lambda(unsigned long)#1}::operator()(unsigned long) const ()
#1  0x000055555556baf6 in ETACalculator::getEta() ()
#2  0x000055555555d6e9 in CopyQueue::showProgressLoop()::{lambda()#7}::operator()() const ()
#3  0x000055555555e0ab in CopyQueue::showProgressLoop() ()
#4  0x000055555556145a in CopyQueue::staticCallShowProgressLoop(void*) ()
#5  0x00007ffff7fba160 in ?? () from /lib/ld-musl-x86_64.so.1
#6  0x0000000000000000 in ?? ()

When I comment out the invocation of this method, it copies the files and exits successfully. However, I’m not sure if the cause is really in this method or just a coincidence.

You can trivially run Alpine Linux using e.g. https://github.com/alpinelinux/alpine-chroot-install.

wheybags commented 3 years ago

Ah, thanks for all the effort you've put in! I belive the segfault should be fixed now as of https://github.com/wheybags/wcp/commit/fbc63458fc3a9f7dd122429b97072b3863624bde

jirutka commented 3 years ago

Do I understand correctly that the segfault had actually nothing to do with musl or my hackery to get it work? o.O

wheybags commented 3 years ago

Yup!

jirutka commented 3 years ago

Uh, so you haven’t tested copying an empty directory before? It seems that I had a wrong expectation about the quality/maturity of this project. :(

wheybags commented 3 years ago

I had, but with the configuration I had in my IDE when running tests, it didn't error. Also, from the readme:

It's probably not robust enough for daily use just yet.