Bug#850243: forge: FTBFS on multiple architectures

Ghislain Vaillant ghisvail at gmail.com
Thu Jan 5 12:26:56 UTC 2017


CC'd  the Debian CMake Team, who might be able to help.

On 05/01/17 10:48, Ghislain Vaillant wrote:
> CC'd to the src:glm maintainer,
>
> On Thu, 05 Jan 2017 10:37:06 +0000 Ghislain Antony Vaillant
> <ghisvail at gmail.com> wrote:
>> Source: forge
>> Version: 0.9.2-2
>> Severity: serious
>> Justification: fails to build from source (but built successfully in
>> the past)
>>
>> Dear Maintainer,
>>
>> Since the latest update of the packaging, src:forge fails to build due
>> to configuration error whilst looking for glm. Multiple architectures
>> are affected, including major ones such as i386 or armhf / armel [1].
>>
>> [1] https://buildd.debian.org/status/logs.php?pkg=forge&ver=0.9.2-2
>>
>> Ghis
>>
>>
>> -- System Information:
>> Debian Release: stretch/sid
>>   APT prefers testing
>>   APT policy: (500, 'testing')
>> Architecture: amd64 (x86_64)
>>
>> Kernel: Linux 4.8.0-2-amd64 (SMP w/4 CPU cores)
>> Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
>> Shell: /bin/sh linked to /bin/dash
>> Init: systemd (via /run/systemd/system)
>
> Hi Guus, could you have a look at this please?
>
> It looks like it is due to a regression in glm introduced in 0.9.8.3
> compared to 0.9.8.1. The CMake detection works correctly for amd64 but
> not i386.
>
> The bug only shows up now because src:forge used to silently download a
> copy of glm if a system version were not found. I have corrected this
> behaviour and pushed a new version of the packaging, which now triggers
> the CMake detection problem.
>
> Ghis

Alright, this one is a bit tricky. Looking at the diff between 0.9.8.1 
and 0.9.8.3:

```
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b7df09f..253eee5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -164,7 +164,7 @@ set(GLM_INSTALL_CONFIGDIR 
"${CMAKE_INSTALL_LIBDIR}/cmake/glm")
  install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

  write_basic_package_version_file(
-    "${CMAKE_CURRENT_BINARY_DIR}/glmVersion.cmake"
+    "${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake"
      VERSION ${GLM_VERSION}
      COMPATIBILITY AnyNewerVersion
  )
@@ -188,7 +188,7 @@ configure_package_config_file(
  install(
      FILES
 
"${CMAKE_CURRENT_BINARY_DIR}/${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake"
-        "${CMAKE_CURRENT_BINARY_DIR}/glmVersion.cmake"
+        "${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake"
      DESTINATION ${GLM_INSTALL_CONFIGDIR}
  )
```

It looks like the glm version lookup did not work before (because the 
version file was wrongly named) and has been fixed in the most recent 
release.

Now if we inspect the content of glmConfigVersion.cmake, we find the 
following code, which I believe to be our culprit:

```
# check that the installed version has the same 32/64bit-ness as the one 
which is currently searching:
if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "8")
    math(EXPR installedBits "8 * 8")
    set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)")
    set(PACKAGE_VERSION_UNSUITABLE TRUE)
endif()
```

Hence the following outcome during the build in src:forge for any 32-bit 
architecture:

```
CMake Error at src/backend/opengl/CMakeLists.txt:17 (FIND_PACKAGE):
   Could not find a configuration file for package "glm" that is compatible
   with requested version "".

   The following configuration files were considered but not accepted:

     /usr/lib/cmake/glm/glmConfig.cmake, version: 0.9.8 (64bit)
```

So the question is how to instruct CMake to produce a ConfigVersion file 
without the above bit-ness check?

Ghis



More information about the debian-science-maintainers mailing list