-
Notifications
You must be signed in to change notification settings - Fork 102
Description
yubico-piv-tool fails to build on a current openSUSE Tumbleweed (cmake version 3.28.1).
Symptom
Input:
git checkout yubico-piv-tool-2.5.1
mkdir build/ && cd build/
cmake -DVERBOSE_CMAKE=1 ..
make VERBOSE=1
Output:
cd /home/wfrisch/src/yubico-piv-tool.git/build/lib && /usr/bin/cc -DOPENSSL_API_COMPAT=0x10000000L -DUSE_CERT_COMPRESS=\"1\" -I/home/wfrisch/src/yubico-piv-tool.git/lib -I/home/wfrisch/src/yubico-piv-tool.git/common -Wall -Werror -Wno-missing-braces -Wformat -Wformat-security -Wshadow -Wpointer-arith -Wmissing-prototypes -Wbad-function-cast -fstack-protector-all -Wno-pointer-sign -Wno-unused-result -DOPENSSL_LOAD_CONF;-I/usr/include -I/usr/include/PCSC -pthread -g -g2 -fno-omit-frame-pointer -std=gnu11 -fPIC -DSTATIC -MD -MT lib/CMakeFiles/ykpiv.dir/ykpiv.c.o -MF CMakeFiles/ykpiv.dir/ykpiv.c.o.d -o CMakeFiles/ykpiv.dir/ykpiv.c.o -c /home/wfrisch/src/yubico-piv-tool.git/lib/ykpiv.c
cc: fatal error: no input files
compilation terminated.
/bin/sh: line 1: -I/usr/include: No such file or directory
This semicolon breaks the build: -DOPENSSL_LOAD_CONF;-I/usr/include
.
Cause
As far as I can see, the root cause lies in the supplied custom modules pcscd.cmake
and openssl.cmake
. Both are using FindPkgConfig to retrieve the required CFLAGS and LDFLAGS. However FindPkgConfig returns lists, which are stored as semicolon-separated strings in CMake.
All but _FOUND may be a ;-list if the associated variable returned from pkg-config has multiple values.
Example:
include(FindPkgConfig)
pkg_check_modules(PCSC REQUIRED libpcsclite)
message("PCSC_LDFLAGS: ${PCSC_LDFLAGS}")
Output:
PCSC_LDFLAGS: -L/usr/lib64;-lpcsclite
I assume the developer of these custom modules was using a system where PCSC_CFLAGS and friends only contain one value and thus no semicolons.
Fix
The proper way to convert lists to strings in modern CMake is list(JOIN ...).
New in version 3.12.
Returns a string joining all list's elements using the glue string.
I will submit a PR shortly to address this bug in cmake/pcscd.cmake
and cmake/openssl.cmake
.