Hi all, An update on the "infamous" cmake segfault:
---8<--- Core was generated by `cmake'. Program terminated with signal 11, Segmentation fault. #0 0x0000032f500b0484 in strlen (str=0x32ec339fff8 "????????" <Address 0x32ec33a0000 out of bounds>) at /usr/src/lib/libc/string/strlen.c:39 39 for (s = str; *s; ++s) (gdb) bt #0 0x0000032f500b0484 in strlen (str=0x32ec339fff8 "????????" <Address 0x32ec33a0000 out of bounds>) at /usr/src/lib/libc/string/strlen.c:39 #1 0x0000032e6d7c1920 in basic_string (this=0x7f7fffff6768, __s=0x32ec339fff8 "????????" <Address 0x32ec33a0000 out of bounds>, __a=@0x7f7fffff6777) at char_traits.h:258 #2 0x0000032c600e8a23 in cmTarget::GetLinkClosure (this=0x32f5500e028, config=0x32ec339fff8 "????????" <Address 0x32ec33a0000 out of bounds>, head=0x32f5500e028) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmTarget.cxx:2972 #3 0x0000032c601e91ba in cmComputeLinkInformation::GetRPath (this=0x32e9b3e4800, runtimeDirs=@0x7f7fffff6ab0, for_install=false) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmComputeLinkInformation.cxx:1982 #4 0x0000032c60063e47 in cmLocalGenerator::OutputLinkLibraries (this=0x32eef94c000, linkLibraries=@0x32ef9052a28, frameworkPath=@0x7f7fffff7398, linkPath=@0x7f7fffff7390, tgt=@0x32e7da6f600, relink=false) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmLocalGenerator.cxx:1879 #5 0x0000032c6006130e in cmLocalGenerator::GetTargetFlags (this=0x32eef94c000, linkLibs=@0x32ef9052a28, flags=@0x32f044e6128, linkFlags=@0x32f08c61c68, frameworkPath=@0x7f7fffff7398, linkPath=@0x7f7fffff7390, target=0x32e7da6f600) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmLocalGenerator.cxx:1697 #6 0x0000032c60148610 in cmNinjaNormalTargetGenerator::WriteLinkStatement (this=0x32e69a52600) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmNinjaNormalTargetGenerator.cxx:468 #7 0x0000032c6014cf01 in cmNinjaNormalTargetGenerator::Generate (this=0x32e69a52600) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmNinjaNormalTargetGenerator.cxx:96 #8 0x0000032c6013d78f in cmLocalNinjaGenerator::Generate (this=0x32eef94c000) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmLocalNinjaGenerator.cxx:81 #9 0x0000032c60253c8a in cmGlobalGenerator::Generate (this=0x32f2f2e9000) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmGlobalGenerator.cxx:1243 #10 0x0000032c601375d3 in cmGlobalNinjaGenerator::Generate (this=0x32f2f2e9000) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmGlobalNinjaGenerator.cxx:515 #11 0x0000032c60117983 in cmake::Generate (this=0x7f7fffff7950) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmake.cxx:1715 #12 0x0000032c60120f4e in cmake::Run (this=0x7f7fffff7950, args=@0x7f7fffff7e10, noconfigure=false) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmake.cxx:1695 #13 0x0000032c600258e1 in do_cmake (ac=29, av=0x32f15b51100) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmakemain.cxx:317 #14 0x0000032c600261a9 in main (ac=29, av=0x32f15b51100) at /usr/ports/pobj/cmake-3.0.2/cmake-3.0.2/Source/cmakemain.cxx:183 ---8<--- Good news first: this bug has already been fixed upstream. Bad news: the fix is not trivial. They went through a major overhaul[1] of the string api. Backporting this work using local patches would be a PITA. [1] http://www.cmake.org/gitweb?p=cmake.git&a=search&h=HEAD&st=commit&s=stringapi Here're some additional infos with the help of my silly std::cout debugging... "config" should contain the value of CMAKE_BUILD_TYPE, i.e. it can be empty or "Debug", "Release", "RelWithDebInfo", "MinSizeRel". With cmake-3.0.x, you can see it's filled with all sort of garbage: $ grep ^DEBUGGING *.log | grep -vi \=\=\release | grep -v config\ \=\=\$ kdelibs-4.13.3.log:DEBUGGING config ==: kdelibs-4.13.3.log:DEBUGGING config ==: kdelibs-4.13.3.log:DEBUGGING config ==: kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==: kdelibs-4.13.3.log:DEBUGGING config ==: kdelibs-4.13.3.log:DEBUGGING config ==: kdelibs-4.13.3.log:DEBUGGING config ==: kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==/lib kdelibs-4.13.3.log:DEBUGGING config ==/lib kdelibs-4.13.3.log:DEBUGGING config ==/lib kdelibs-4.13.3.log:DEBUGGING config ==/lib kdelibs-4.13.3.log:DEBUGGING config ==/lib kdelibs-4.13.3.log:DEBUGGING config ==/lib kdelibs-4.13.3.log:DEBUGGING config ==/lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==???????? kdelibs-4.13.3.log:DEBUGGING config ==???????? kdelibs-4.13.3.log:DEBUGGING config ==???????? kdelibs-4.13.3.log:DEBUGGING config ==???????? kdelibs-4.13.3.log:DEBUGGING config ==???????? kdelibs-4.13.3.log:DEBUGGING config ==???????? kdelibs-4.13.3.log:DEBUGGING config ==???????? kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==.a kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==lib kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==CXX kdelibs-4.13.3.log:DEBUGGING config ==-l kdelibs-4.13.3.log:DEBUGGING config ==-l kdelibs-4.13.3.log:DEBUGGING config ==-l kdelibs-4.13.3.log:DEBUGGING config ==-l kdelibs-4.13.3.log:DEBUGGING config ==-l kdelibs-4.13.3.log:DEBUGGING config ==-l kdelibs-4.13.3.log:DEBUGGING config ==-l kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==estdc++ kdelibs-4.13.3.log:DEBUGGING config ==estdc++ kdelibs-4.13.3.log:DEBUGGING config ==estdc++ kdelibs-4.13.3.log:DEBUGGING config ==/lib32 kdelibs-4.13.3.log:DEBUGGING config ==/lib32 kdelibs-4.13.3.log:DEBUGGING config ==/lib32 kdelibs-4.13.3.log:DEBUGGING config ==c kdelibs-4.13.3.log:DEBUGGING config ==c kdelibs-4.13.3.log:DEBUGGING config ==c kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so kdelibs-4.13.3.log:DEBUGGING config ==.so Newer CMake does it right: $ grep ^DEBUGGING *.log | grep -vi \=\=\release | grep -v config\ \=\=\$ $ And, indeed, it survived w/o segfaults to: $ for i in `jot 200` ; do make clean configure 2>&1 | /usr/ports/infrastructure/bin/portslogger /usr/ports/x11/kde4/libs/log${i} ; done CMake 3.1 (the one with the improved string handling) is scheduled for release on 2014-11-01. Are you ok with just waiting? Or should I ask upstream for possible workarounds that can be easily applied to cmake-3.0.x? Btw, I think I'm going to write a report on CMake's MantisBT, to let them know... Cheers! David