On Mon, Nov 30, 2020 at 06:07:50PM +0100, Charlene Wendling wrote:
> Hi,
> 
> > http://build-failures.rhaalovely.net/powerpc/2020-11-11/archivers/innoextract.log
> 
> The problem actually lies here:
> 
> > -- Checking C++11 feature: std::unique_ptr - unsupported
>   Run Build Command(s):/usr/local/bin/ninja cmTC_057
>   [...]
>   : && /usr/ports/pobj/innoextract-1.9/bin/c++ -O2 -pipe
>   -fmerge-all-constants -ffast-math -std=c++17 -fuse-linker-plugin
>   -Wl,--no-undefined -Wl,--as-needed
>   CMakeFiles/cmTC_057e6.dir/cxx11-std-unique_ptr.cpp.o -o cmTC_057e6
>   -Wl,-rpath-link,/usr/X11R6/lib:/usr/local/lib && :
>   /usr/bin/../lib/libc++abi.so.3.0: undefined reference to
>   `pthread_rwlock_rdlock'
>   [... more undefined references to pthread symbols ...]
>   c++: error: linker command failed with exit code 1 
> 
> Innoextract then falls back to using std::auto_ptr, which is disabled
> by C++17. It shows up now, because -D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR
> has been ... removed by a recent commit.
> 
> The problem can be fixed by removing '-Wl,--as-needed', as often seen
> on ld.bfd archs. We can't supply LDFLAGS to fix this, they're removed
> during the test.
> 
> I thought it was better to point out the real issue instead of enabling 
> std::auto_ptr. 
> 
> The below diff does that and it builds and runs fine on macppc (tested
> with the Return to Castle Wolfenstein GOG installer).
> 
> That REVISION never built there, so i have not bumped it. sparc64
> builds it fine ootb, and mips64 has no boost due to libexecinfo not
> being built, so no other ld.bfd archs are impacted. As such, adding a
> NO_AS_NEEDED cmake option looks like an overkill to me.
> 
> Feedback and alternatives are welcome.
> 
> Charlène.

Sorry for the wait. Had this on my list to check for a while. The diff
looks good to me, doesn't affect !powerpc, and as it fixes powerpc, I'd
say go for it.

ok thfr@
> 
> 
> Index: patches/patch-cmake_BuildType_cmake
> ===================================================================
> RCS file: patches/patch-cmake_BuildType_cmake
> diff -N patches/patch-cmake_BuildType_cmake
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-cmake_BuildType_cmake       30 Nov 2020 16:46:37 -0000
> @@ -0,0 +1,21 @@
> +$OpenBSD$
> +
> +Index: cmake/BuildType.cmake
> +--- cmake/BuildType.cmake.orig
> ++++ cmake/BuildType.cmake
> +@@ -301,6 +301,15 @@ else(MSVC)
> +             if(MACOS)
> +                     # TODO For some reason this check succeeds on macOS, 
> but then
> +                     # flag causes the actual build to fail :(
> ++            elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD"
> ++                   AND CMAKE_SYSTEM_PROCESSOR STREQUAL "powerpc")
> ++                    # XXX Need a review once lld is the default linker on 
> powerpc
> ++                    # -Wl,--as-needed causes the std::unique_ptr test to
> ++                    # fail due to undefined reference errors, and user
> ++                    # supplied linker flags are removed during the test. A
> ++                    # fallback exists, using std::auto_ptr, but it has been
> ++                    # disabled by C++17. Use the same code as other archs
> ++                    # instead of reenabling std::auto_ptr.
> +             else()
> +                     # Link as few libraries as possible
> +                     # This is much easier than trying to decide which 
> libraries are needed for each
> 
> 

Reply via email to