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.


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