actually..since it's broken anyway at present, I might as well just commit,
but tests still definitely wanted if anyone uses chan_pjsip!


On 2017/08/05 01:16, Stuart Henderson wrote:
> Asterisk wants either GCC nested functions, or working -fblocks in clang
> which uses libBlocksRuntime. We haven't been successful in getting the latter
> to work correctly with dlopen()d libs so this diff switches to ports GCC to
> unbreak build.
> 
> Because this would result in a c++ library conflict with a clang/libc++
> build of telephony/pjsua, it switches to an embedded pjsua/pjsip build
> instead (which is generally preferable anyway, it avoids several
> unnecessary deps and has a few patches wanted by asterisk).
> 
> So tests in general would be welcome, and if there's someone reading who
> already has a working chan_pjsip Asterisk configuration on OpenBSD,
> testing that this doesn't break things would be very appreciated.
> 
> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/telephony/asterisk/Makefile,v
> retrieving revision 1.258
> diff -u -p -r1.258 Makefile
> --- Makefile  16 Jul 2017 19:19:02 -0000      1.258
> +++ Makefile  5 Aug 2017 00:05:54 -0000
> @@ -1,31 +1,22 @@
>  # $OpenBSD: Makefile,v 1.258 2017/07/16 19:19:02 espie Exp $
>  
> -# XXX uses -fblocks on clang, or nested functions on gcc.
> -#
> -# on clang/ld.bfd arches, the configure test fails to link. test looks like 
> this:
> -#
> -#    echo 'int main(){return ^{return 42;}();}' | \
> -#         clang -o /tmp/blockstest -fblocks -x c -L/usr/local/lib 
> -lBlocksRuntime -
> -#
> -# -> undefined reference to `_NSConcreteGlobalBlock'
> -#
> -# on clang/ld.lld arches, it builds ok but runtime fails: dlopen()ing the 
> .so modules
> -# at runtime fails with undefined symbols from the BlocksRuntime lib.
> -#
> -BROKEN-aarch64=              linker problems with BlocksRuntime that only 
> show up at runtime
> +BROKEN-aarch64=      linker problems with BlocksRuntime that only show up at 
> runtime
>  
> -COMMENT-main=                open source multi-protocol PBX and telephony 
> toolkit
> +COMMENT-main=        open source multi-protocol PBX and telephony toolkit
>  
> -VER=                 13.17.0
> -PORTROACH=           limitw:0,odd
> -DISTNAME=            asterisk-${VER:S/beta/-beta/:S/rc/-rc/}
> -PKGNAME-main=                asterisk-${VER}
> +VER=         13.17.0
> +PJ_V=                2.6
> +PORTROACH=   limitw:0,odd
> +DISTNAME=    asterisk-${VER:S/beta/-beta/:S/rc/-rc/}
> +DISTFILES=   ${DISTNAME}${EXTRACT_SUFX} pjproject-${PJ_V}.tar.bz2:0
> +PKGNAME-main=        asterisk-${VER}
> +REVISION=    0
>  
> -CATEGORIES=          telephony
> +CATEGORIES=  telephony
>  
> -HOMEPAGE=            http://www.asterisk.org/
> +HOMEPAGE=    http://www.asterisk.org/
>  
> -MAINTAINER=          Stuart Henderson <st...@openbsd.org>
> +MAINTAINER=  Stuart Henderson <st...@openbsd.org>
>  
>  # Mostly GPL v2 (only). "Specific permission is also granted to link
>  # Asterisk with OpenSSL and OpenH323 and distribute the resulting binary
> @@ -34,21 +25,35 @@ MAINTAINER=               Stuart Henderson <sthen@ope
>  PERMIT_PACKAGE_CDROM=        patent licensing clauses
>  PERMIT_PACKAGE_FTP=  Yes
>  
> -WANTLIB-main += c crypto curl execinfo g7221codec gsm iconv iksemel
> -WANTLIB-main += ilbccodec jansson lzma m nghttp2 ogg opencore-amrnb
> -WANTLIB-main += opencore-amrwb pj pjlib-util pjmedia pjmedia-audiodev
> -WANTLIB-main += pjmedia-codec pjmedia-videodev pjnath pjsip pjsip-simple
> -WANTLIB-main += pjsip-ua pjsua pjsua2 portaudio pthread resample spandsp
> -WANTLIB-main += speex speexdsp sqlite3 ssl ${COMPILER_LIBCXX} termcap tiff 
> uriparser
> -WANTLIB-main += uuid vorbis vorbisenc vorbisfile xml2 xslt z
> +WANTLIB-main += ${MODGCC4_CPPWANTLIB}
> +WANTLIB-main += c crypto curl execinfo gsm iconv iksemel jansson lzma
> +WANTLIB-main += m nghttp2 ogg portaudio pthread spandsp sqlite3 ssl
> +WANTLIB-main += termcap tiff uriparser uuid vorbis vorbisenc vorbisfile
> +WANTLIB-main += xml2 xslt z
> +
> +# XXX Requires either nested functions (gcc only), or -fblocks (clang).
> +#
> +# With clang -fblocks, configure test fails on ld.bfd arches:
> +#
> +#    echo 'int main(){return ^{return 42;}();}' | \
> +#         clang -o /tmp/blockstest -fblocks -x c -L/usr/local/lib 
> -lBlocksRuntime -
> +#
> +# -> undefined reference to `_NSConcreteGlobalBlock'
> +#
> +# Runtime fails on ld.lld arches: dlopen()ing the .so modules results in
> +# undefined symbols from the BlocksRuntime lib.
> +#
> +COMPILER =           gcc-only
>  
> -SHARED_LIBS=         asteriskssl 0.0         # 1
> +SHARED_LIBS+=                asteriskssl 0.0         # 1
> +SHARED_LIBS+=                asteriskpj 0.0          # 2
>  
>  MULTI_PACKAGES=              -main -calendar -http_post -ldap -odbc \
>                       -pgsql -snmp -speex -tds
>  PSEUDO_FLAVORS=              ${MULTI_PACKAGES:N-main:C/-/no_/g}
>  
> -LIB_DEPENDS-main=    audio/gsm \
> +LIB_DEPENDS-main=    ${MODGCC4_CPPLIBDEP} \
> +                     audio/gsm \
>                       audio/libogg \
>                       audio/libvorbis \
>                       audio/portaudio-svn \
> @@ -59,7 +64,6 @@ LIB_DEPENDS-main=   audio/gsm \
>                       graphics/tiff \
>                       net/curl \
>                       sysutils/e2fsprogs \
> -                     telephony/pjsua,-main \
>                       telephony/spandsp \
>                       textproc/iksemel \
>                       textproc/libxml \
> @@ -71,19 +75,7 @@ BUILD_DEPENDS=             security/libsrtp>=1.4.4 
>  
>  MASTER_SITES=        
> http://downloads.asterisk.org/pub/telephony/asterisk/releases/ \
>               
> http://downloads.asterisk.org/pub/telephony/asterisk/old-releases/
> -
> -# if using bundled pjproject:
> -#
> -#CONFIGURE_ARGS+= --with-pjproject-bundled
> -#PJ_V=               2.5.5
> -#MASTER_SITES0=      http://www.pjsip.org/release/${PJ_V}/
> -#EXTRACT_ONLY=       ${DISTNAME}${EXTRACT_SUFX}
> -#DISTFILES=  ${DISTNAME}${EXTRACT_SUFX} pjproject-${PJ_V}.tar.bz2:0
> -#
> -#    @cd ${WRKSRC}/third-party/; \
> -#        grep 'PJPROJECT_VERSION = ${PJ_V}$$' versions.mak > /dev/null || \
> -#        (echo "PJ_V != PJPROJECT_VERSION; update in port"; \
> -#         grep 'PJPROJECT_VERSION' versions.mak; exit 1)
> +MASTER_SITES0=       http://www.pjsip.org/release/${PJ_V}/
>  
>  USE_GMAKE=           Yes
>  
> @@ -105,11 +97,13 @@ CONFIGURE_ENV+=          CPPFLAGS="${CPPFLAGS}" 
>  MAKE_FLAGS+=         ASTCFLAGS="${CFLAGS}" \
>                       ASTLDFLAGS="${LDFLAGS}" \
>                       ASTSSL_SO_VERSION="${LIBasteriskssl_VERSION}" \
> +                     ASTPJ_SO_VERSION="${LIBasteriskpj_VERSION}" \
>                       NOISY_BUILD="Yes" \
>                       OPTIMIZE=
>  
>  CONFIGURE_ARGS+=     --localstatedir=/var \
> -                     --with-externals-cache=${FULLDISTDIR}
> +                     --with-externals-cache=${FULLDISTDIR} \
> +                     --with-pjproject-bundled
>  
>  CONFIGURE_ARGS+=     --with-asound=no \
>                       --with-cap=no \
> @@ -249,6 +243,20 @@ RUN_DEPENDS$i += asterisk-${VER}:telepho
>  .if ${PROPERTIES:Mclang}
>  BUILD_DEPENDS+=              devel/blocksruntime
>  .endif
> +
> +# otherwise asterisk patchset for pjsua gets in the way
> +PATCHORIG=           .orig.port
> +
> +# some of the patches have MS-DOS line endings which patch doesn't like
> +post-extract:
> +     @cd ${WRKSRC}/third-party/; \
> +         grep 'PJPROJECT_VERSION = ${PJ_V}$$' versions.mak > /dev/null || \
> +         (echo "PJ_V != PJPROJECT_VERSION; update in port"; \
> +          grep 'PJPROJECT_VERSION' versions.mak; exit 1)
> +     @perl -i -pe 's/\r$$//' ${WRKSRC}/third-party/pjproject/patches/*patch
> +     mv ${WRKDIR}/pjproject-${PJ_V} ${WRKSRC}/third-party/pjproject/source
> +     cd ${WRKSRC}/third-party/pjproject; ./apply_patches patches source
> +     touch ${WRKSRC}/third-party/pjproject/source/.unpacked
>  
>  post-patch:
>  .if ${PROPERTIES:Mclang}
> Index: distinfo
> ===================================================================
> RCS file: /cvs/ports/telephony/asterisk/distinfo,v
> retrieving revision 1.155
> diff -u -p -r1.155 distinfo
> --- distinfo  12 Jul 2017 19:55:29 -0000      1.155
> +++ distinfo  5 Aug 2017 00:05:54 -0000
> @@ -1,2 +1,4 @@
>  SHA256 (asterisk-13.17.0.tar.gz) = 
> xKiThtfbWFIDkfy9MgKQJYS0Q0KJCUyi5Ka42toekKQ=
> +SHA256 (pjproject-2.6.tar.bz2) = L1odocF02EWHHHWL2A+7WA/Kd5nTz6oNPE4IK1Fhx7Q=
>  SIZE (asterisk-13.17.0.tar.gz) = 32908945
> +SIZE (pjproject-2.6.tar.bz2) = 4933273
> Index: patches/patch-third-party_pjproject_source_pjlib_src_pj_ssl_sock_ossl_c
> ===================================================================
> RCS file: 
> patches/patch-third-party_pjproject_source_pjlib_src_pj_ssl_sock_ossl_c
> diff -N 
> patches/patch-third-party_pjproject_source_pjlib_src_pj_ssl_sock_ossl_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-third-party_pjproject_source_pjlib_src_pj_ssl_sock_ossl_c   
> 5 Aug 2017 00:05:54 -0000
> @@ -0,0 +1,52 @@
> +$OpenBSD$
> +
> +excise openssl-1.0.2 EC and various openssl-1.1.0 pieces
> +
> +Index: third-party/pjproject/source/pjlib/src/pj/ssl_sock_ossl.c
> +--- third-party/pjproject/source/pjlib/src/pj/ssl_sock_ossl.c.orig
> ++++ third-party/pjproject/source/pjlib/src/pj/ssl_sock_ossl.c
> +@@ -54,7 +54,7 @@
> + #include <openssl/engine.h>
> + #include <openssl/opensslconf.h>
> + 
> +-#if !defined(OPENSSL_NO_EC) && OPENSSL_VERSION_NUMBER >= 0x1000200fL
> ++#if !defined(LIBRESSL_VERSION_NUMBER) && !defined(OPENSSL_NO_EC) && 
> OPENSSL_VERSION_NUMBER >= 0x1000200fL
> + 
> + #   include <openssl/obj_mac.h>
> + 
> +@@ -112,7 +112,7 @@ static unsigned get_nid_from_cid(unsigned cid)
> + #endif
> + 
> + 
> +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L
> ++#if !defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 
> 0x10100000L
> + #  define OPENSSL_NO_SSL2       /* seems to be removed in 1.1.0 */
> + #  define M_ASN1_STRING_data(x)         ASN1_STRING_get0_data(x)
> + #  define M_ASN1_STRING_length(x)   ASN1_STRING_length(x)
> +@@ -453,7 +453,7 @@ static pj_status_t init_openssl(void)
> + 
> +     SSL_set_session(ssl, SSL_SESSION_new());
> + 
> +-#if !defined(OPENSSL_NO_EC) && OPENSSL_VERSION_NUMBER >= 0x1000200fL
> ++#if !defined(LIBRESSL_VERSION_NUMBER) && !defined(OPENSSL_NO_EC) && 
> OPENSSL_VERSION_NUMBER >= 0x1000200fL
> +     openssl_curves_num = SSL_get_shared_curve(ssl,-1);
> +     if (openssl_curves_num > PJ_ARRAY_SIZE(openssl_curves))
> +         openssl_curves_num = PJ_ARRAY_SIZE(openssl_curves);
> +@@ -1070,7 +1070,7 @@ static pj_status_t set_cipher_list(pj_ssl_sock_t *ssoc
> + 
> + static pj_status_t set_curves_list(pj_ssl_sock_t *ssock)
> + {
> +-#if !defined(OPENSSL_NO_EC) && OPENSSL_VERSION_NUMBER >= 0x1000200fL
> ++#if !defined(LIBRESSL_VERSION_NUMBER) && !defined(OPENSSL_NO_EC) && 
> OPENSSL_VERSION_NUMBER >= 0x1000200fL
> +     int ret;
> +     int curves[PJ_SSL_SOCK_MAX_CURVES];
> +     unsigned cnt;
> +@@ -1101,7 +1101,7 @@ static pj_status_t set_curves_list(pj_ssl_sock_t *ssoc
> + 
> + static pj_status_t set_sigalgs(pj_ssl_sock_t *ssock)
> + {
> +-#if OPENSSL_VERSION_NUMBER >= 0x1000200fL
> ++#if !defined(LIBRESSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 
> 0x1000200fL
> +     int ret;
> + 
> +     if (ssock->param.sigalgs.ptr && ssock->param.sigalgs.slen) {
> Index: pkg/PLIST-main
> ===================================================================
> RCS file: /cvs/ports/telephony/asterisk/pkg/PLIST-main,v
> retrieving revision 1.68
> diff -u -p -r1.68 PLIST-main
> --- pkg/PLIST-main    12 Jul 2017 19:55:29 -0000      1.68
> +++ pkg/PLIST-main    5 Aug 2017 00:05:54 -0000
> @@ -517,6 +517,8 @@ lib/asterisk/modules/res_stun_monitor.so
>  @comment lib/asterisk/modules/res_timing_kqueue.so
>  lib/asterisk/modules/res_timing_pthread.so
>  lib/asterisk/modules/res_xmpp.so
> +@comment lib/libasteriskpj.so
> +@lib lib/libasteriskpj.so.${LIBasteriskpj_VERSION}
>  @comment lib/libasteriskssl.so
>  @lib lib/libasteriskssl.so.${LIBasteriskssl_VERSION}
>  lib/pkgconfig/asterisk.pc
> @@ -581,6 +583,7 @@ share/asterisk/static-http/core-en_US.xm
>  share/asterisk/static-http/mantest.html
>  share/asterisk/static-http/prototype.js
>  share/asterisk/third-party/
> +share/asterisk/third-party/pjproject/
>  share/doc/asterisk/
>  share/doc/asterisk/Asterisk-13-Reference.pdf
>  share/doc/asterisk/Asterisk-Admin-Guide.pdf
> 

Reply via email to