Hi ports! Here is a fix [1] for libaudiofile that allows building [2] with ports-gcc-6.4 on macppc.
I can't do better than quoting the patch commit message: libaudiofile: fix the second undefined behaviour in the same line of code, cstatic which isn't actually a cstatic. switch to just defining it in the accessor. GCC optimized this undefined behaviour away leading to an undefined reference in the builds. Testing: - 'make test' passes (see [2]) - i've built audio/normalize without issues, the runtime [3] is as expected. Same thing using ports-gcc-4.9. - it doesn't break the amd64 build and audio/normalize runtime is fine there as well. I'm joining a diff. Charlène. [1] http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/audio/libaudiofile/patches/patch-libaudiofile_modules_SimpleModule.h?rev=1.3&content-type=text/x-cvsweb-markup&only_with_tag=MAIN [2] http://ix.io/1v1W [3] It requires a patch for audio/mpg321 if you need to normalize mp3 files, not yet commited as i'm writing this Index: Makefile =================================================================== RCS file: /cvs/ports/devel/libaudiofile/Makefile,v retrieving revision 1.58 diff -u -p -r1.58 Makefile --- Makefile 22 Nov 2018 20:28:25 -0000 1.58 +++ Makefile 4 Dec 2018 14:03:15 -0000 @@ -10,7 +10,7 @@ SUBST_VARS= V DISTNAME= audiofile-${V} PKGNAME= lib${DISTNAME} -REVISION= 5 +REVISION= 6 SHARED_LIBS += audiofile 1.0 # 1.0 Index: patches/patch-libaudiofile_modules_SimpleModule_h =================================================================== RCS file: /cvs/ports/devel/libaudiofile/patches/patch-libaudiofile_modules_SimpleModule_h,v retrieving revision 1.1 diff -u -p -r1.1 patch-libaudiofile_modules_SimpleModule_h --- patches/patch-libaudiofile_modules_SimpleModule_h 22 Nov 2018 20:28:25 -0000 1.1 +++ patches/patch-libaudiofile_modules_SimpleModule_h 4 Dec 2018 14:03:15 -0000 @@ -1,18 +1,38 @@ $OpenBSD: patch-libaudiofile_modules_SimpleModule_h,v 1.1 2018/11/22 20:28:25 naddy Exp $ Fix undefined behavior in sign conversion. -https://github.com/mpruett/audiofile/commit/b62c902dd258125cac86cd2df21fc898035a43d3 +From http://cvsweb.netbsd.org/bsdweb.cgi/pkgsrc/audio/libaudiofile/patches/patch-libaudiofile_modules_SimpleModule.h?rev=1.3&content-type=text/x-cvsweb-markup&only_with_tag=MAIN Index: libaudiofile/modules/SimpleModule.h --- libaudiofile/modules/SimpleModule.h.orig +++ libaudiofile/modules/SimpleModule.h -@@ -123,7 +123,8 @@ struct signConverter +@@ -122,17 +122,24 @@ struct signConverter + typedef typename IntTypes<Format>::SignedType SignedType; typedef typename IntTypes<Format>::UnsignedType UnsignedType; - static const int kScaleBits = (Format + 1) * CHAR_BIT - 1; +- static const int kScaleBits = (Format + 1) * CHAR_BIT - 1; - static const int kMinSignedValue = -1 << kScaleBits; -+ static const int kMaxSignedValue = (((1 << (kScaleBits - 1)) - 1) << 1) + 1; -+ static const int kMinSignedValue = -kMaxSignedValue - 1; - +- struct signedToUnsigned : public std::unary_function<SignedType, UnsignedType> { +- UnsignedType operator()(SignedType x) { return x - kMinSignedValue; } ++ UnsignedType operator()(SignedType x) { ++ int kScaleBits = (Format + 1) * CHAR_BIT - 1; ++ int kMaxSignedValue = (((1 << (kScaleBits - 1)) - 1) << 1) + 1; ++ int kMinSignedValue = -kMaxSignedValue - 1; ++ return x - kMinSignedValue; ++ } + }; + + struct unsignedToSigned : public std::unary_function<SignedType, UnsignedType> + { +- SignedType operator()(UnsignedType x) { return x + kMinSignedValue; } ++ SignedType operator()(UnsignedType x) { ++ int kScaleBits = (Format + 1) * CHAR_BIT - 1; ++ int kMaxSignedValue = (((1 << (kScaleBits - 1)) - 1) << 1) + 1; ++ int kMinSignedValue = -kMaxSignedValue - 1; ++ return x + kMinSignedValue; ++ } + }; + }; +