Skip to content

-DROARING_USE_CPM=false causes roaring-config.cmake to have cmake_minimum_required(VERSION 2.8) #793

@SkohTV

Description

@SkohTV

Describe the bug

NixOS/nixpkgs#501403
When building CRoaring from source with -DROARING_USE_CPM=false, it causes roaring-config.cmake to have cmake_minimum_required(VERSION 2.8)
Which CMake 4.0 doesn't support anymore:

Compatibility with CMake < 3.5 has been removed from CMake.

To Reproduce

Ran in docker -it ubuntu /bin/bash

mkdir -p build
cd build
cmake .. -DROARING_USE_CPM=false
cmake --build .

And if we check the generated files:

$ rg 'cmake_minimum_required'
roaring-config.cmake
45:cmake_minimum_required(VERSION 2.8)

lib/cmake/roaring/roaring-config.cmake
45:cmake_minimum_required(VERSION 2.8)  

If we were to build with -DROARING_USE_CPM=true:

$ rg 'cmake_minimum_required'
cmake/CPM_0.42.0.cmake
29:cmake_minimum_required(VERSION 3.14 FATAL_ERROR)

roaring-config.cmake
45:cmake_minimum_required(VERSION 3.14)

_deps/cmocka-src/CMakeLists.txt
2:cmake_minimum_required(VERSION 3.10.0)

lib/cmake/roaring/roaring-config.cmake
45:cmake_minimum_required(VERSION 3.14)

_deps/cmocka-subbuild/CMakeLists.txt
4:cmake_minimum_required(VERSION 3.28.3)

_deps/cmocka-subbuild/cmocka-populate-prefix/tmp/cmocka-populate-mkdirs.cmake
4:cmake_minimum_required(VERSION 3.5)

_deps/cmocka-subbuild/cmocka-populate-prefix/tmp/cmocka-populate-gitupdate.cmake
4:cmake_minimum_required(VERSION 3.5)

_deps/cmocka-subbuild/cmocka-populate-prefix/tmp/cmocka-populate-gitclone.cmake
4:cmake_minimum_required(VERSION 3.5) 

CRoaring release

master

Configuration

Built from scratch following https://github.com/RoaringBitmap/CRoaring#building-with-cmake-linux-and-macos-visual-studio-or-openharmony-users-should-see-below in a docker
CMake from Docker is 3.28.3, but it's 4.1.2 on Nix unstable (where we discovered the issue)

Indicate whether you are willing or able to provide a bug fix as a pull request

Definitely not a CMake expert

From my understanding the 2.8 comes from

cmake_minimum_required(VERSION 2.8...3.15)

From the documentation, write_basic_package_version_file should support version ranges with SameMajorVersion, but it doesn't seem like it ?

write_basic_package_version_file(
"${build_location}/roaring-config-version.cmake"
VERSION ${ROARING_LIB_VERSION}
COMPATIBILITY SameMajorVersion)

Maybe this is relevant: https://discourse.cmake.org/t/write-basic-package-version-file-and-version-range/10021

FWIW:

- cmake_minimum_required(VERSION 2.8...3.15)
+ cmake_minimum_required(VERSION 3.15)

Fixes the problem, but may not be the ideal solution

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions