Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions .github/workflows/ci-cpp-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,16 @@ jobs:
if: ${{ matrix.compiler.name == 'Latest Clang' }}
uses: MorganCaron/latest-clang-action@master

- name: Compile
- name: Update xmake repository
run: xmake repo --update

- name: Configure & Install dependencies
run: |
xmake f ${{ matrix.compiler.xmake-toolchain }} --runtimes="c++_shared" --enable_tests=y -v --yes

- name: Build
run: |
xmake f ${{ matrix.compiler.xmake-toolchain }} --runtimes="c++_shared" --enable_tests=y --yes
xmake build -vD
xmake build -v

- name: Run tests
run: |
Expand Down
21 changes: 12 additions & 9 deletions .github/workflows/ci-cpp-macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,25 @@ jobs:
}
steps:
- uses: actions/checkout@v4

- uses: tecolicom/actions-use-homebrew-tools@v1
with:
tools: llvm ninja cmake

- uses: xmake-io/github-action-setup-xmake@v1
with:
xmake-version: branch@master

- name: Install LLVM
if: ${{ matrix.compiler.name == 'Clang' }}
- name: Update xmake repository
run: xmake repo --update

- name: Configure & Install dependencies
run: |
brew install llvm
xmake f --toolchain=llvm --sdk="$(brew --prefix)/opt/llvm/" --runtimes="c++_shared" --enable_tests=y -v --yes

- name: Compile
env:
CC: ${{ matrix.compiler.cc }}
CXX: ${{ matrix.compiler.cxx }}
- name: Build
run: |
xmake f --enable_tests=y --yes
xmake build -vD
xmake build -v

- name: Run tests
run: |
Expand Down
3 changes: 2 additions & 1 deletion modules/FileSystem/Watcher.mpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ module;
# include <sys/inotify.h>
#elif defined(OS_MACOS)
# include <sys/event.h>
# include <CoreServices/CoreServices.h>
#endif

export module CppUtils.FileSystem.Watcher;
Expand Down Expand Up @@ -259,7 +260,7 @@ export namespace CppUtils::FileSystem
Container::BidirectionalMap<std::filesystem::path, WatchDescriptor> m_watchDescriptors;
std::vector<std::pair<Event, SubscribeFunction>> m_subscribedFunctions;
#elif defined(OS_MACOS)
FSEventStreamRef m_filesystemEventStream;
[[maybe_unused]] FSEventStreamRef m_filesystemEventStream;
#endif
};
}
2 changes: 1 addition & 1 deletion modules/Network/Client.mpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module;

#if defined(OS_WINDOWS)
# include <winsock2.h>
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
# include <sys/socket.h>
#endif

Expand Down
2 changes: 1 addition & 1 deletion modules/Network/Server.mpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module;
#if defined(OS_WINDOWS)
# include <winsock2.h>
# pragma comment(lib, "ws2_32.lib")
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
# include <sys/socket.h>
# include <cerrno>
#endif
Expand Down
46 changes: 23 additions & 23 deletions modules/Network/Socket.mpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ module;
#if defined(OS_WINDOWS)
# include <winsock2.h>
# include <ws2tcpip.h> // for socklen_t
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
# include <sys/socket.h>
# include <netinet/in.h>
# include <arpa/inet.h>
Expand Down Expand Up @@ -63,7 +63,7 @@ export namespace CppUtils::Network

#if defined(OS_WINDOWS)
inline constexpr auto throwErrno = std::addressof(WindowsSocketApi::throwErrno);
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
inline constexpr auto throwErrno = std::addressof(System::throwErrno);
#endif

Expand All @@ -72,15 +72,15 @@ export namespace CppUtils::Network
public:
#if defined(OS_WINDOWS)
using NativeSocket = SOCKET;
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
using NativeSocket = int;
#endif

enum class Domain : int
{
IPV4 = AF_INET,
IPV6 = AF_INET6,
#if defined(OS_LINUX)
#if defined(OS_LINUX) or defined(OS_MACOS)
Local = AF_UNIX
#endif
};
Expand All @@ -101,7 +101,7 @@ export namespace CppUtils::Network
m_socket = ::socket(static_cast<int>(domain), static_cast<int>(type), 0);
if (m_socket == INVALID_SOCKET)
throw std::runtime_error{"Socket creation failed"};
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
m_socket = ::socket(static_cast<int>(domain), static_cast<int>(type), 0);
if (m_socket < 0)
throw std::runtime_error{"Socket creation failed"};
Expand All @@ -112,7 +112,7 @@ export namespace CppUtils::Network
explicit inline Socket(SOCKET socket) noexcept:
m_socket{socket}
{}
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
explicit inline Socket(int socket) noexcept:
m_socket{socket}
{}
Expand All @@ -127,7 +127,7 @@ export namespace CppUtils::Network
{
#if defined(OS_WINDOWS)
other.m_socket = INVALID_SOCKET;
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
other.m_socket = -1;
#endif
}
Expand All @@ -141,7 +141,7 @@ export namespace CppUtils::Network
#if defined(OS_WINDOWS)
if (m_socket != INVALID_SOCKET)
::closesocket(m_socket);
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
if (m_socket != -1)
::close(m_socket);
#endif
Expand All @@ -150,7 +150,7 @@ export namespace CppUtils::Network
m_socket = other.m_socket;
#if defined(OS_WINDOWS)
other.m_socket = INVALID_SOCKET;
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
other.m_socket = -1;
#endif
}
Expand All @@ -162,7 +162,7 @@ export namespace CppUtils::Network
#if defined(OS_WINDOWS)
if (m_socket != INVALID_SOCKET)
::closesocket(m_socket);
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
if (m_socket != -1)
::close(m_socket);
#endif
Expand Down Expand Up @@ -195,7 +195,7 @@ export namespace CppUtils::Network
auto mode = enable ? u_long{0} : u_long{1};
if (::ioctlsocket(m_socket, static_cast<long>(FIONBIO), std::addressof(mode)) != 0)
throw std::runtime_error{"CppUtils::Network::Socket::setBlocking: Failed to set blocking mode"};
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
auto flags = ::fcntl(m_socket, F_GETFL);
if (flags == -1)
throw std::runtime_error{"CppUtils::Network::Socket::setBlocking: Failed to get socket flags"};
Expand All @@ -214,7 +214,7 @@ export namespace CppUtils::Network
auto mode = u_long{};
::ioctlsocket(m_socket, static_cast<long>(FIONBIO), std::addressof(mode));
return mode == 0;
#elif defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
int flags = ::fcntl(m_socket, F_GETFL, 0);
if (flags == -1)
throw std::runtime_error{"CppUtils::Network::Socket::isBlocking: Failed to get socket flags"};
Expand All @@ -237,7 +237,7 @@ export namespace CppUtils::Network
// TODO make implementation for windows
// @see https://stackoverflow.com/questions/72759272/how-to-deal-with-socket-in-select-method
auto result = -1;
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
auto result = select(m_socket + 1, std::addressof(readSet), nullptr, nullptr, std::addressof(timeValue));
#endif
if (result < 0)
Expand All @@ -250,7 +250,7 @@ export namespace CppUtils::Network
{
#if defined(OS_WINDOWS)
return not ::setsockopt(socket, level, option, reinterpret_cast<const char*>(value), static_cast<int>(valueSize));
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
return not ::setsockopt(socket, level, option, value, static_cast<socklen_t>(valueSize));
#endif
}
Expand Down Expand Up @@ -306,7 +306,7 @@ export namespace CppUtils::Network
{
#ifdef OS_WINDOWS
if (::send(m_socket, std::bit_cast<const char*>(std::addressof(data)), sizeof(decltype(data)), 0) < 0)
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
if (::send(m_socket, std::bit_cast<const void*>(std::addressof(data)), sizeof(decltype(data)), 0) < 0)
#endif
throw std::runtime_error{"CppUtils::Network::Socket::send: Send failed"};
Expand All @@ -317,14 +317,14 @@ export namespace CppUtils::Network
for (auto totalSent = 0uz; totalSent < std::size(data);)
#ifdef OS_WINDOWS
if (auto bytesSent = ::send(m_socket, std::bit_cast<const char*>(std::data(data)) + totalSent, static_cast<int>(std::size(data) - totalSent), 0);
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
if (auto bytesSent = ::send(m_socket, std::data(data) + totalSent, std::size(data) - totalSent, 0);
#endif
bytesSent < 0)
{
#if defined(OS_WINDOWS)
if (::WSAGetLastError() == WSAEWOULDBLOCK)
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
if (errno == EAGAIN or errno == EWOULDBLOCK)
#endif
continue;
Expand All @@ -338,7 +338,7 @@ export namespace CppUtils::Network
{
#if defined(OS_WINDOWS)
if (::send(m_socket, std::data(string), static_cast<int>(std::size(string)), 0) < 0)
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
if (::send(m_socket, std::data(string), std::size(string), 0) < 0)
#endif

Expand All @@ -350,7 +350,7 @@ export namespace CppUtils::Network
{
#if defined(OS_WINDOWS)
if (::WSAGetLastError() == WSAEWOULDBLOCK)
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
if (errno == EWOULDBLOCK)
#endif
return std::runtime_error{"Socket is non-blocking and no data is available"};
Expand All @@ -367,15 +367,15 @@ export namespace CppUtils::Network
{
#if defined(OS_WINDOWS)
const auto size = static_cast<int>(sizeof(T) - totalBytesReceived);
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
const auto size = sizeof(T) - totalBytesReceived;
#endif
auto bytesReceived = ::recv(m_socket, reinterpret_cast<char*>(std::addressof(data)) + totalBytesReceived, size, 0);
if (bytesReceived < 0)
{
#if defined(OS_WINDOWS)
if (WSAGetLastError() == WSAEWOULDBLOCK)
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
if (errno == EAGAIN)
continue;
if (errno == EWOULDBLOCK)
Expand All @@ -399,14 +399,14 @@ export namespace CppUtils::Network
{
#if defined(OS_WINDOWS)
auto bytesReceived = ::recv(m_socket, std::bit_cast<char*>(std::data(buffer)) + totalBytesReceived, static_cast<int>(bufferSize - totalBytesReceived), 0);
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
auto bytesReceived = ::recv(m_socket, std::data(buffer) + totalBytesReceived, bufferSize - totalBytesReceived, 0);
#endif
if (bytesReceived < 0)
{
#if defined(OS_WINDOWS)
if (WSAGetLastError() == WSAEWOULDBLOCK)
#else
#elif defined(OS_LINUX) or defined(OS_MACOS)
if (errno == EAGAIN or errno == EWOULDBLOCK)
#endif
continue;
Expand Down
4 changes: 2 additions & 2 deletions modules/Terminal/Cursor.mpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export namespace CppUtils::Terminal
consoleScreenBufferInfo.srWindow.Left,
consoleScreenBufferInfo.srWindow.Top};
}
#elif defined(OS_MAC) or defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
[[nodiscard]] inline auto getCursorPosition() -> std::expected<Container::Size2, std::string_view>
{
using namespace std::literals;
Expand All @@ -43,7 +43,7 @@ export namespace CppUtils::Terminal
{
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), COORD{static_cast<SHORT>(position.x()), static_cast<SHORT>(position.y())});
}
#elif defined(OS_MAC) or defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
inline auto setCursorPosition([[maybe_unused]] Container::Size2 position) -> void
{
std::print("\x1b[{};{}H", position.y() + 1, position.x() + 1);
Expand Down
4 changes: 2 additions & 2 deletions modules/Terminal/RawTerminal.mpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module;

#include <CppUtils/System/Windows.hpp>

#if defined(OS_MAC) or defined(OS_LINUX)
#if defined(OS_LINUX) or defined(OS_MACOS)
# include <unistd.h>
# include <termios.h>
#endif
Expand All @@ -13,7 +13,7 @@ import std;

export namespace CppUtils::Terminal
{
#if defined(OS_MAC) or defined(OS_LINUX)
#if defined(OS_LINUX) or defined(OS_MACOS)
class RawTerminal final
{
public:
Expand Down
12 changes: 6 additions & 6 deletions modules/Terminal/Size.mpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module;

#include <CppUtils/System/Windows.hpp>

#if defined(OS_MAC) or defined(OS_LINUX)
#if defined(OS_LINUX) or defined(OS_MACOS)
# include <sys/ioctl.h>
# include <unistd.h>
#endif
Expand All @@ -18,19 +18,19 @@ export namespace CppUtils::Terminal
[[nodiscard]] inline auto getTerminalSize() -> Container::Size2
{
auto consoleScreenBufferInfo = CONSOLE_SCREEN_BUFFER_INFO{};
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &consoleScreenBufferInfo);
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), std::addressof(consoleScreenBufferInfo));
return Container::Size2{
static_cast<std::size_t>(consoleScreenBufferInfo.srWindow.Right - consoleScreenBufferInfo.srWindow.Left + 1),
static_cast<std::size_t>(consoleScreenBufferInfo.srWindow.Bottom - consoleScreenBufferInfo.srWindow.Top + 1)};
}
#elif defined(OS_MAC) or defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
[[nodiscard]] inline auto getTerminalSize() -> Container::Size2
{
auto windowsSize = winsize{};
ioctl(STDOUT_FILENO, TIOCGWINSZ, &windowsSize);
ioctl(STDOUT_FILENO, TIOCGWINSZ, std::addressof(windowsSize));
return Container::Size2{
windowsSize.ws_col,
windowsSize.ws_row};
static_cast<std::size_t>(windowsSize.ws_col),
static_cast<std::size_t>(windowsSize.ws_row)};
}
#endif
}
4 changes: 2 additions & 2 deletions modules/Terminal/Title.mpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export namespace CppUtils::Terminal
title.resize(size);
::GetConsoleTitleW(std::data(title), size);
return title;
#elif defined(OS_MAC) or defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
/*
using namespace std::literals;

Expand All @@ -41,7 +41,7 @@ export namespace CppUtils::Terminal
{
#if defined(OS_WINDOWS)
::SetConsoleTitleW(std::data(title));
#elif defined(OS_MAC) or defined(OS_LINUX)
#elif defined(OS_LINUX) or defined(OS_MACOS)
std::print("\x1B]0;{}\a", title);
std::fflush(stdout);
#endif
Expand Down
Loading
Loading