boostorg / boostorg/boost_install

CMake: Misleading error message in C only projects trying to find Boost

Open
#76 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
C
Stars
11
Forks
37
PR merge metrics
No merged PRs in 30d

Description

I have multiple CMake library projects here, one of them using Boost threads. One library project ("A") exports its own config together with a `find_dependency(Boost COMPONENTS thread)` call.

Another library project ("B") uses `find_package(A)` and this way the find_dependency is executed which calls `find_package(Boost COMPONENTS thread)` internally. That is then used by a third library ("C"), so you a have a chain of dependencies here.

Problem: library C currently has its LANGUAGES set to `C` in the `project()` call. Linking libB in libC is possible, but since the switch from CMake FindBoost module to cmake package config coming with Boost I get a build error, which I could track down to Boost.

Minimal example requires a short *CMakeLists.txt* only:

```cmake
cmake_minimum_required(VERSION 3.5)
project(bt
VERSION 0.1
LANGUAGES C
)

find_package(Boost REQUIRED CONFIG
COMPONENTS
thread
)
```

The error message is like this:

```
CMake Error at /usr/lib/x86_64-linux-gnu/cmake/BoostDetectToolset-1.74.0.cmake:5 (string):
string sub-command REGEX, mode MATCHALL needs at least 5 arguments total to
command.
Call Stack (most recent call first):
/usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.74.0/boost_thread-config.cmake:27 (include)
/usr/lib/x86_64-linux-gnu/cmake/Boost-1.74.0/BoostConfig.cmake:141 (find_package)
/usr/lib/x86_64-linux-gnu/cmake/Boost-1.74.0/BoostConfig.cmake:258 (boost_find_component)
CMakeLists.txt:7 (find_package)

Boost toolset is unknown (compiler )
CMake Error at /usr/lib/x86_64-linux-gnu/cmake/BoostDetectToolset-1.74.0.cmake:5 (string):
string sub-command REGEX, mode MATCHALL needs at least 5 arguments total to
command.
Call Stack (most recent call first):
/usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.74.0/boost_atomic-config.cmake:27 (include)
/usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.74.0/boost_thread-config.cmake:100 (find_package)
/usr/lib/x86_64-linux-gnu/cmake/Boost-1.74.0/BoostConfig.cmake:141 (find_package)
/usr/lib/x86_64-linux-gnu/cmake/Boost-1.74.0/BoostConfig.cmake:258 (boost_find_component)
CMakeLists.txt:7 (find_package)

Boost toolset is unknown (compiler )
Performing Test CMAKE_HAVE_LIBC_PTHREAD
Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
Found Threads: TRUE
Configuring incomplete, errors occurred!
See also "/home/adahl/build/tmp/bt/CMakeFiles/CMakeOutput.log".
```

*Note:* this still happens with most recent Boost, it was just easier to reproduce on my host machine like this.

*Note:* this only happens if COMPONENTS are involved.

Analysis: the problem is in *tools/boost_install/BoostDetectToolset.cmake* right in the first line:

```cmake
string(REGEX MATCHALL "[0-9]+" _BOOST_COMPILER_VERSION ${CMAKE_CXX_COMPILER_VERSION})
```

In my case `${CMAKE_CXX_COMPILER_VERSION}` is empty here (C only project), leading to that error message. I would propose to check for that variable before using it and bailout with a meaningful error message if it is found to be empty.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.