Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3.5.0-rc1 fails to build on 32bit architectures (error: ‘numeric_limits’ is not a member of ‘std’) #5694

Closed
sebastic opened this issue May 8, 2022 · 2 comments

Comments

@sebastic
Copy link
Contributor

sebastic commented May 8, 2022

Expected behavior and actual behavior.

The Debian package for GDAL 3.5.0-rc1 (using CMake) fails to build on 32bit architectures:

https://buildd.debian.org/status/package.php?p=gdal&suite=experimental

[  1%] Building C object frmts/pcraster/libcsf/CMakeFiles/csf.dir/gdattype.c.o
cd "/<<PKGBUILDDIR>>/build-py3.9/frmts/pcraster/libcsf" && /usr/bin/cc -DDONT_DEPRECATE_SPRINTF -DGDAL_CMAKE_BUILD -DGDAL_COMPILATION -DUSE_IN_GDAL -I"/<<PKGBUILDDIR>>/port" -I"/<<PKGBUILDDIR>>/build-py3.9/port" -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fvisibility=hidden -fPIC -Wall -Wextra -Winit-self -Wunused-parameter -Wmissing-prototypes -Wmissing-declarations -Wlogical-op -Wshadow -Wmissing-include-dirs -Wformat -Werror=format-security -Wno-format-nonliteral -Werror=vla -Wno-clobbered -Wdate-time -Wnull-dereference -Wfloat-conversion -std=gnu99 -MD -MT frmts/pcraster/libcsf/CMakeFiles/csf.dir/gdattype.c.o -MF CMakeFiles/csf.dir/gdattype.c.o.d -o CMakeFiles/csf.dir/gdattype.c.o -c "/<<PKGBUILDDIR>>/frmts/pcraster/libcsf/gdattype.c"
/<<PKGBUILDDIR>>/frmts/pcidsk/sdk/blockdir/asciitiledir.cpp: In static member function ‘static size_t PCIDSK::AsciiTileDir::GetOptimizedDirSize(PCIDSK::BlockFile*)’:
/<<PKGBUILDDIR>>/frmts/pcidsk/sdk/blockdir/asciitiledir.cpp:154:25: error: ‘numeric_limits’ is not a member of ‘std’
  154 |     if (nDirSize > std::numeric_limits<size_t>::max())
      |                         ^~~~~~~~~~~~~~
/<<PKGBUILDDIR>>/frmts/pcidsk/sdk/blockdir/asciitiledir.cpp:154:46: error: expected primary-expression before ‘>’ token
  154 |     if (nDirSize > std::numeric_limits<size_t>::max())
      |                                              ^
/<<PKGBUILDDIR>>/frmts/pcidsk/sdk/blockdir/asciitiledir.cpp:154:49: error: ‘::max’ has not been declared; did you mean ‘std::max’?
  154 |     if (nDirSize > std::numeric_limits<size_t>::max())
      |                                                 ^~~
      |                                                 std::max

Full buildlogs: i386, armhf, armel, mipsel, powerpc

Steps to reproduce the problem.

Build GDAL in a i386 environment (e.g. chroot/VM/container).

Operating system

Debian unstable/experimental

GDAL version and provenance

gdal (3.5.0~rc1+dfsg-1~exp1) from Debian experimental

@sebastic
Copy link
Contributor Author

sebastic commented May 9, 2022

The changes from 145aa36 have been added as a patch to the Debian package, but it still fails to build on the 32 bit architectures:

https://buildd.debian.org/status/package.php?p=gdal&suite=experimental

cd "/<<PKGBUILDDIR>>/build-py3.9/frmts/pcidsk/sdk" && /usr/bin/c++ -DDONT_DEPRECATE_SPRINTF -DGDAL_CMAKE_BUILD -DGDAL_COMPILATION -DHAVE_LIBJPEG -I"/<<PKGBUILDDIR>>/frmts/pcidsk/sdk" -I"/<<PKGBUILDDIR>>/port" -I"/<<PKGBUILDDIR>>/build-py3.9/port" -g -O2 -ffile-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fvisibility=hidden -fPIC -std=gnu++11 -MD -MT frmts/pcidsk/sdk/CMakeFiles/pcidsk_sdk.dir/blockdir/binarytiledir.cpp.o -MF CMakeFiles/pcidsk_sdk.dir/blockdir/binarytiledir.cpp.o.d -o CMakeFiles/pcidsk_sdk.dir/blockdir/binarytiledir.cpp.o -c "/<<PKGBUILDDIR>>/frmts/pcidsk/sdk/blockdir/binarytiledir.cpp"
/<<PKGBUILDDIR>>/frmts/pcidsk/sdk/blockdir/asciitilelayer.cpp: In member function ‘virtual void PCIDSK::AsciiTileLayer::ReadTileList()’:
/<<PKGBUILDDIR>>/frmts/pcidsk/sdk/blockdir/asciitilelayer.cpp:187:22: error: ‘numeric_limits’ is not a member of ‘std’
  187 |     if (nSize > std::numeric_limits<size_t>::max())
      |                      ^~~~~~~~~~~~~~
/<<PKGBUILDDIR>>/frmts/pcidsk/sdk/blockdir/asciitilelayer.cpp:187:43: error: expected primary-expression before ‘>’ token
  187 |     if (nSize > std::numeric_limits<size_t>::max())
      |                                           ^
/<<PKGBUILDDIR>>/frmts/pcidsk/sdk/blockdir/asciitilelayer.cpp:187:46: error: ‘::max’ has not been declared; did you mean ‘std::max’?
  187 |     if (nSize > std::numeric_limits<size_t>::max())
      |                                              ^~~
      |                                              std::max

@sebastic
Copy link
Contributor Author

sebastic commented May 9, 2022

grepping through the sources reveals more files that need to be patched:

Description: Include limits to fix FTBFS.
 error: ‘numeric_limits’ is not a member of ‘std’
Author: Bas Couwenberg <sebastic@debian.org>
Bug: https://github.com/OSGeo/gdal/issues/5694

--- a/frmts/pcidsk/sdk/blockdir/asciitilelayer.cpp
+++ b/frmts/pcidsk/sdk/blockdir/asciitilelayer.cpp
@@ -34,6 +34,7 @@
 #include <cstring>
 #include <cstdio>
 #include <algorithm>
+#include <limits>
 
 using namespace PCIDSK;
 
--- a/frmts/pcidsk/sdk/blockdir/binarytiledir.cpp
+++ b/frmts/pcidsk/sdk/blockdir/binarytiledir.cpp
@@ -36,6 +36,7 @@
 #include <cstring>
 #include <cstdio>
 #include <algorithm>
+#include <limits>
 
 using namespace PCIDSK;
 
--- a/frmts/pcidsk/sdk/blockdir/binarytilelayer.cpp
+++ b/frmts/pcidsk/sdk/blockdir/binarytilelayer.cpp
@@ -30,6 +30,7 @@
 #include "core/pcidsk_utils.h"
 #include "pcidsk_exception.h"
 #include <algorithm>
+#include <limits>
 
 using namespace PCIDSK;
 

I see that this was fixed in the mean time: d778082

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant