From 19e14ba4c18dc5918ea2d5d06ed9557138dbf509 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Fri, 17 May 2024 10:01:12 +0200 Subject: [PATCH] canokey-qemu: fix build on x86_64-darwin --- .../qemu/canokey-qemu-memcpy.patch | 41 +++++++++++++++++++ .../virtualization/qemu/canokey-qemu.nix | 4 ++ 2 files changed, 45 insertions(+) create mode 100644 pkgs/applications/virtualization/qemu/canokey-qemu-memcpy.patch diff --git a/pkgs/applications/virtualization/qemu/canokey-qemu-memcpy.patch b/pkgs/applications/virtualization/qemu/canokey-qemu-memcpy.patch new file mode 100644 index 000000000000..578c687f54cf --- /dev/null +++ b/pkgs/applications/virtualization/qemu/canokey-qemu-memcpy.patch @@ -0,0 +1,41 @@ +From 9e59480d941c40b868ebafa5138bbc71ca87f08e Mon Sep 17 00:00:00 2001 +From: Alyssa Ross +Date: Sat, 18 May 2024 09:55:17 +0200 +Subject: [PATCH] Fix build where memcpy is a macro + +I got the following compiler error with Clang 16 building for +x86_64-apple-darwin: + + /tmp/nix-build-canokey-qemu-0-unstable-2023-06-06.drv-0/source/canokey-core/applets/oath/oath.c:44:50: error: too many arguments provided to function-like macro invocation + memcpy(RDATA, (uint8_t[]){OATH_TAG_VERSION, 3, 0x05, 0x05, 0x05, OATH_TAG_NAME, HANDLE_LEN}, 7); + ^ + /nix/store/vw8y07yai2pjv02s1piw3r5cyhmjbddf-Libsystem-1238.60.2/include/secure/_string.h:64:9: note: macro 'memcpy' defined here + #define memcpy(dest, src, len) \ + ^ + /tmp/nix-build-canokey-qemu-0-unstable-2023-06-06.drv-0/source/canokey-core/applets/oath/oath.c:44:3: note: parentheses are required around macro argument containing braced initializer list + memcpy(RDATA, (uint8_t[]){OATH_TAG_VERSION, 3, 0x05, 0x05, 0x05, OATH_TAG_NAME, HANDLE_LEN}, 7); + ^ + ( ) + 1 error generated. + +Link: https://github.com/canokeys/canokey-core/pull/85 +--- + canokey-core/applets/oath/oath.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/canokey-core/applets/oath/oath.c b/canokey-core/applets/oath/oath.c +index bd8361a..2d2c0ef 100644 +--- a/canokey-core/applets/oath/oath.c ++++ b/canokey-core/applets/oath/oath.c +@@ -41,7 +41,7 @@ int oath_install(uint8_t reset) { + static int oath_select(const CAPDU *capdu, RAPDU *rapdu) { + if (P2 != 0x00) EXCEPT(SW_WRONG_P1P2); + +- memcpy(RDATA, (uint8_t[]){OATH_TAG_VERSION, 3, 0x05, 0x05, 0x05, OATH_TAG_NAME, HANDLE_LEN}, 7); ++ memcpy(RDATA, ((uint8_t[]){OATH_TAG_VERSION, 3, 0x05, 0x05, 0x05, OATH_TAG_NAME, HANDLE_LEN}), 7); + if (read_attr(OATH_FILE, ATTR_HANDLE, RDATA + 7, HANDLE_LEN) < 0) return -1; + LL = 7 + HANDLE_LEN; + +-- +2.44.0 + diff --git a/pkgs/applications/virtualization/qemu/canokey-qemu.nix b/pkgs/applications/virtualization/qemu/canokey-qemu.nix index e98415b188f3..b94ba0c1adbe 100644 --- a/pkgs/applications/virtualization/qemu/canokey-qemu.nix +++ b/pkgs/applications/virtualization/qemu/canokey-qemu.nix @@ -18,6 +18,10 @@ stdenv.mkDerivation rec { hash = "sha256-4V/2UOgGWgL+tFJO/k90bCDjWSVyIpxw3nYi9NU/OxA="; }; + patches = [ + ./canokey-qemu-memcpy.patch + ]; + postPatch = '' substituteInPlace canokey-core/CMakeLists.txt \ --replace "COMMAND git describe --always --tags --long --abbrev=8 --dirty >>" "COMMAND echo '$rev' >>"