Project

General

Profile

Bug #48078

Updated by Brad Hubbard over 3 years ago

This is seen when using './make-srpm.sh' on Fedora 32 and running a subsequent 
 'rpmbuild -ba' on the source rpm produced. 

 <pre> 
 -- Performing Test HAVE_UNALIGNED_ACCESS - Failed 
 CMake Error at cmake/modules/CephChecks.cmake:140 (message): 
   Unaligned access is required 
 Call Stack (most recent call first): 
   CMakeLists.txt:95 (include) 
 </pre> 

 The actual fatal error reported in CMakeError.log is the following. 

 <pre> 
 Compiler executable checksum: 61a79f744777569dee61fe7e7cf9806a 
 In file included from /usr/include/c++/10/ext/string_conversions.h:41, 
                  from /usr/include/c++/10/bits/basic_string.h:6535, 
                  from /usr/include/c++/10/string:55, 
                  from /usr/include/c++/10/bits/locale_classes.h:40, 
                  from /usr/include/c++/10/bits/ios_base.h:41, 
                  from /usr/include/c++/10/streambuf:41, 
                  from /usr/include/c++/10/bits/streambuf_iterator.h:35, 
                  from /usr/include/c++/10/iterator:66, 
                  from /home/brad/working/rpmbuild/BUILD/ceph-15.0.0-19450-ga0e82efeea6/build/CMakeFiles/CMakeTmp/src.cxx:3: 
 /usr/include/c++/10/cstdlib:75:15: fatal error: stdlib.h: No such file or directory 
    75 | #include_next <stdlib.h> 
       |                 ^~~~~~~~~~ 
 compilation terminated. 
 </pre> 

 I could not reproduce this on the same machine doing a build 'in tree' even with 
 identical arguments to cmake, g++, etc. 

 After some head scratching I added the following patch and started a new build. 

 <pre> 
 diff --git a/cmake/modules/CephChecks.cmake b/cmake/modules/CephChecks.cmake 
 index ca86dcbc73d..a5487520991 100644 
 --- a/cmake/modules/CephChecks.cmake 
 +++ b/cmake/modules/CephChecks.cmake 
 @@ -96,7 +96,7 @@ CHECK_STRUCT_HAS_MEMBER("struct stat" st_mtimespec.tv_nsec sys/stat.h 
  if(NOT CMAKE_CROSSCOMPILING) 
    include(CheckCXXSourceRuns) 
    cmake_push_check_state() 
 -    set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++17") 
 +    set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -v -std=c++17") 
    if(WIN32) 
      set(CMAKE_REQUIRED_LIBRARIES ws2_32) 
    endif() 
 </pre> 

 This shows the issue is related to 
 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129 I believe. 

 Failed build extract from CMakeError.log done under 'rpmbuild'. 

 <pre> 
 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 
 Versions of loaded plugins:  
  annobin: Version ANNOBIN_VERSION 
 ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/10/include-fixed" 
 ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/10/../../../../x86_64-redhat-linux/include" 
 ignoring duplicate directory "/usr/include" 
 ignoring duplicate directory "/usr/include" 
   as it is a non-system directory that duplicates a system directory 
 #include "..." search starts here: 
 #include <...> search starts here: 
  /usr/include 
  /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10 
  /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/x86_64-redhat-linux 
  /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/backward 
  /usr/lib/gcc/x86_64-redhat-linux/10/include 
  /usr/local/include 
 End of search list. 
 </pre> 

 Output from a successful build. 

 <pre> 
 GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 
 ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/10/include-fixed" 
 ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/10/../../../../x86_64-redhat-linux/include" 
 #include "..." search starts here: 
 #include <...> search starts here: 
  /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10 
  /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/x86_64-redhat-linux 
  /usr/lib/gcc/x86_64-redhat-linux/10/../../../../include/c++/10/backward 
  /usr/lib/gcc/x86_64-redhat-linux/10/include 
  /usr/local/include 
  /usr/include 
 End of search list. 
 </pre> 

 Note the differences in the search list with '/usr/include' at the end in the 
 successful build and the beginning for the failed build and the references to 
 'ignoring duplicate directory "/usr/include"' in the failed case. 

Back