CMP0129 policy: some problems with enable_language and NEW
I have tried to detect versions of lfortran and lcc.
I tested it with lcc 1.26.12 and cmake 3.23.2.
$ lcc --version
lcc:1.26.12:Jun--5-2022:e2k-v4-linux
gcc (GCC) 9.3.0 compatible
$ l++ --version
lcc:1.26.12:Jun--5-2022:e2k-v4-linux
g++ (GCC) 9.3.0 compatible
$ lfortran --version
lcc:1.26.12:Jun--5-2022:e2k-v4-linux
GNU Fortran 95 (GCC) 5.5.0 compatible
$ lcc -v
lcc:1.26.12:Jun--5-2022:e2k-v4-linux
Thread model: posix
gcc version 9.3.0 compatible.
$ l++ -v
lcc:1.26.12:Jun--5-2022:e2k-v4-linux
Thread model: posix
gcc version 9.3.0 compatible.
$ lfortran -v
lcc:1.26.12:Jun--5-2022:e2k-v4-linux
Thread model: posix
gcc version 9.3.0 compatible.
$ cmake --version
cmake version 3.23.2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
Policy is not specified (both declarations are commented):
cmake_minumal_required | how to enable languages | C ID | C++ ID | Fortran ID | C version | C++ version | Fortran version |
---|---|---|---|---|---|---|---|
not specified | not specified | GNU | GNU | NA | 9.3.0 | 9.3.0 | NA |
not specified | Project(CMP0129_bug LANGUAGES C CXX Fortran) |
NA[&] | NA[&] | NA[&] | NA[&] | NA[&] | NA[&] |
3.3 | Project(CMP0129_bug LANGUAGES C CXX Fortran) |
NA[&] | NA[&] | NA[&] | NA[&] | NA[&] | NA[&] |
3.4 | Project(CMP0129_bug LANGUAGES C CXX Fortran) |
GNU | GNU | GNU | 9.3.0 | 9.3.0 | 5.5.0 |
3.22 | Project(CMP0129_bug LANGUAGES C CXX Fortran) |
GNU | GNU | GNU | 9.3.0 | 9.3.0 | 5.5.0 |
3.23 | Project(CMP0129_bug LANGUAGES C CXX Fortran) |
LCC | LCC | LCC | 1.26.12 | 1.26.12 | 1.26.12 |
not specified | enable_language(C CXX Fortran) |
NA[&] | NA[&] | NA[&] | NA[&] | NA[&] | NA[&] |
3.3 | enable_language(C CXX Fortran) |
NA[&] | NA[&] | NA[&] | NA[&] | NA[&] | NA[&] |
3.4 | enable_language(C CXX Fortran) |
GNU | GNU | GNU | 9.3.0 | 9.3.0 | 5.5.0 |
3.22 | enable_language(C CXX Fortran) |
GNU | GNU | GNU | 9.3.0 | 9.3.0 | 5.5.0 |
3.23 | enable_language(C CXX Fortran) |
GNU | GNU | LCC | 9.3.0 | 9.3.0 | 1.16.12[&2] |
[&]: /usr/bin/ld: could not find -llfortran
[&2]: Variable CMAKE_Fortran_SIMULATE_ID
is set to GNU
, others are not defined.
For this table, the last line looks incorrect: CMAKE_Fortran_COMPILER_ID
should be GNU
, not LCC
.
Then, I did some tests with Project(CMP0129_bug LANGUAGES C CXX Fortran)
that look working correctly. Tests with enable_language(C CXX Fortran)
are presented in the following table:
CMP0129 | cmake_minumal_required | C ID | C++ ID | Fortran ID | C version | C++ version | Fortran version |
---|---|---|---|---|---|---|---|
OLD | 3.22 | GNU | GNU | GNU | 9.3.0 | 9.3.0 | 5.5.0 |
OLD | 3.23 | GNU | GNU | GNU | 9.3.0 | 9.3.0 | 5.5.0 |
NEW | 3.22 | GNU | GNU | LCC | 9.3.0 | 9.3.0 | 1.16.12[&2] |
NEW | 3.23 | GNU | GNU | LCC | 9.3.0 | 9.3.0 | 1.16.12[&2] |
For this table, the last two lines look incorrect: CMAKE_C_COMPILER_ID
and CMAKE_CXX_COMPILER_ID
should be LCC
, not GNU
. Also, CMAKE_C_SIMULATE_ID
and CMAKE_CXX_SIMULATE_ID
should be set to GNU
.
The CMakeLists.txt, which I used for testing:
#cmake_minimum_required(VERSION 3.1)
#cmake_minimum_required(VERSION 3.2)
#cmake_minimum_required(VERSION 3.3)
#cmake_minimum_required(VERSION 3.4)
#cmake_minimum_required(VERSION 3.5)
#cmake_minimum_required(VERSION 3.20)
#cmake_minimum_required(VERSION 3.21)
#cmake_minimum_required(VERSION 3.22)
#cmake_minimum_required(VERSION 3.23)
#cmake_policy(SET CMP0129 OLD)
#cmake_policy(SET CMP0129 NEW)
#Project(CMP0129_bug LANGUAGES C CXX Fortran)
#enable_language(C CXX Fortran)
message(STATUS "CMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}")
message(STATUS "CMAKE_CXX_COMPILER_ID=${CMAKE_CXX_COMPILER_ID}")
message(STATUS "CMAKE_Fortran_COMPILER_ID=${CMAKE_Fortran_COMPILER_ID}")
message(STATUS "CMAKE_C_COMPILER_VERSION=${CMAKE_C_COMPILER_VERSION}")
message(STATUS "CMAKE_CXX_COMPILER_VERSION=${CMAKE_CXX_COMPILER_VERSION}")
message(STATUS "CMAKE_Fortran_COMPILER_VERSION=${CMAKE_Fortran_COMPILER_VERSION}")
message(STATUS "CMAKE_C_SIMULATE_ID=${CMAKE_C_SIMULATE_ID}")
message(STATUS "CMAKE_CXX_SIMULATE_ID=${CMAKE_CXX_SIMULATE_ID}")
message(STATUS "CMAKE_Fortran_SIMULATE_ID=${CMAKE_Fortran_SIMULATE_ID}")