https://bugs.kde.org/show_bug.cgi?id=435155

            Bug ID: 435155
           Summary: Heaptrack 1.2.0 fails to build with libunwind 1.5.0
           Product: Heaptrack
           Version: 1.2.0
          Platform: Compiled Sources
                OS: Linux
            Status: REPORTED
          Severity: normal
          Priority: NOR
         Component: general
          Assignee: m...@milianw.de
          Reporter: kun.gerg...@kgservermanagement.com
  Target Milestone: ---

SUMMARY
Heaptrack 1.2.0 fails to build when using a static version of libunwind 1.5.0

STEPS TO REPRODUCE
1. A clean source build of libunwind 1.5.0 prefixed to /heaptrack/build (with
the configure options of "--disable-shared --enable-static --disable-coredump
--disable-documentation --prefix=/heaptrack/build")
2. curl -L -O https://github.com/KDE/heaptrack/archive/v1.2.0.tar.gz && tar
-xzf v1.2.0.tar.gz && cd heaptrack-1.2.0 &&   mkdir build && cd build
3.  PKG_CONFIG_PATH="/heaptrack/build/lib/pkgconfig" cmake
-DCMAKE_BUILD_TYPE=Release -DHEAPTRACK_BUILD_PRINT=OFF -DHEAPTRACK_BUILD_GUI=ON
-DCMAKE_INSTALL_PREFIX=/heaptrack/build ..
4. make && make install


OBSERVED RESULT
Cmake fails with the cryptic "libunwind is missing" error:

-- The following REQUIRED packages have not been found:

 * Libunwind

CMake Error at /usr/share/cmake/Modules/FeatureSummary.cmake:430 (message):
  feature_summary() Error: REQUIRED package(s) are missing, aborting CMake
  run.
Call Stack (most recent call first):
  CMakeLists.txt:151 (feature_summary)

The following errors appears in the config output:
...
-- Performing Test LIBUNWIND_HAS_UNW_GETCONTEXT
-- Performing Test LIBUNWIND_HAS_UNW_GETCONTEXT - Success
-- Performing Test LIBUNWIND_HAS_UNW_INIT_LOCAL
-- Performing Test LIBUNWIND_HAS_UNW_INIT_LOCAL - Failed
-- Performing Test LIBUNWIND_HAS_UNW_BACKTRACE
-- Performing Test LIBUNWIND_HAS_UNW_BACKTRACE - Failed
-- Performing Test LIBUNWIND_HAS_UNW_BACKTRACE_SKIP
-- Performing Test LIBUNWIND_HAS_UNW_BACKTRACE_SKIP - Failed
-- Performing Test LIBUNWIND_HAS_UNW_SET_CACHE_SIZE
-- Performing Test LIBUNWIND_HAS_UNW_SET_CACHE_SIZE - Failed
-- Could NOT find LibUnwind (missing:  LIBUNWIND_HAS_UNW_BACKTRACE) (found
version "1.5")
...


CMakeError.log shows the following errors (among others):
...
Performing C SOURCE FILE Test LIBUNWIND_HAS_UNW_BACKTRACE failed with the
following output:
Change Dir: /heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp

Run Build Command:/usr/bin/gmake "cmTryCompileExec3966086559/fast"
/usr/bin/gmake -f CMakeFiles/cmTryCompileExec3966086559.dir/build.make
CMakeFiles/cmTryCompileExec3966086559.dir/build
gmake[1]: Entering directory
`/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp'
/usr/bin/cmake -E cmake_progress_report
/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp/CMakeFiles 1
Building C object CMakeFiles/cmTryCompileExec3966086559.dir/src.c.o
/usr/bin/cc   -DLIBUNWIND_HAS_UNW_BACKTRACE -I/heaptrack/build/include    -o
CMakeFiles/cmTryCompileExec3966086559.dir/src.c.o   -c
/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp/src.c
/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp/src.c: In function
'main':
/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp/src.c:3:1: warning:
passing argument 1 of 'unw_backtrace' from incompatible pointer type [enabled
by default]
 int main() { void* buf[10]; unw_backtrace(&buf, 10); return 0; }
 ^
In file included from /heaptrack/build/include/libunwind-x86_64.h:129:0,
                 from /heaptrack/build/include/libunwind.h:25,
                 from
/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp/src.c:2:
/heaptrack/build/include/libunwind-common.h:290:12: note: expected 'void **'
but argument is of type 'void * (*)[10]'
 extern int unw_backtrace (void **, int);
            ^
Linking C executable cmTryCompileExec3966086559
/usr/bin/cmake -E cmake_link_script
CMakeFiles/cmTryCompileExec3966086559.dir/link.txt --verbose=1
/usr/bin/cc   -DLIBUNWIND_HAS_UNW_BACKTRACE   
CMakeFiles/cmTryCompileExec3966086559.dir/src.c.o  -o
cmTryCompileExec3966086559 -rdynamic /heaptrack/build/lib/libunwind.a
/heaptrack/build/lib/libunwind.a(elf64.o): In function `xz_uncompressed_size':
elf64.c:(.text+0x608): undefined reference to `lzma_stream_footer_decode'
elf64.c:(.text+0x66d): undefined reference to `lzma_index_buffer_decode'
elf64.c:(.text+0x684): undefined reference to `lzma_index_size'
elf64.c:(.text+0x699): undefined reference to `lzma_index_uncompressed_size'
elf64.c:(.text+0x6ae): undefined reference to `lzma_index_end'
/heaptrack/build/lib/libunwind.a(elf64.o): In function
`_Uelf64_extract_minidebuginfo':
elf64.c:(.text+0x7f3): undefined reference to `lzma_stream_buffer_decode'
collect2: error: ld returned 1 exit status
gmake[1]: *** [cmTryCompileExec3966086559] Error 1
gmake[1]: Leaving directory
`/heaptrack/src/heaptrack-1.2.0/build/CMakeFiles/CMakeTmp'
gmake: *** [cmTryCompileExec3966086559/fast] Error 2

Source file was:
#define UNW_LOCAL_ONLY 1
#include <libunwind.h>
int main() { void* buf[10]; unw_backtrace(&buf, 10); return 0; }
...


EXPECTED RESULT
A successful heaptrack build


SOFTWARE/OS VERSIONS
Linux/KDE Plasma: CentOS 7.9 on an x86_64 system via Docker


ADDITIONAL INFORMATION
Apparently the cmake module FindLibunwind fails to find liblzma on its own,
which is all the more puzzling given the fact that pkg-config finds it without
any problems whatsoever:
[root@1fb759bd1336 build]# pkg-config --libs liblzma
-llzma
[root@1fb759bd1336 build]#

My solution to the problem was to simply "substitute in" the name of the
library into the flags for the CHECK_C_SOURCE_COMPILES macro via sed:
sed -i "s/CMAKE_REQUIRED_LIBRARIES
\${LIBUNWIND_LIBRARY}/CMAKE_REQUIRED_LIBRARIES \${LIBUNWIND_LIBRARY} lzma/"
cmake/FindLibunwind.cmake

After that the compilation went through fine without any problems whatsoever

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to