Index: branches/2019Q4/Mk/bsd.gecko.mk =================================================================== --- branches/2019Q4/Mk/bsd.gecko.mk (revision 518859) +++ branches/2019Q4/Mk/bsd.gecko.mk (revision 518860) @@ -1,398 +1,396 @@ #-*- tab-width: 4; -*- # ex:ts=4 # # Date created: 12 Nov 2005 # Whom: Michael Johnson # # $FreeBSD$ # # 4 column tabs prevent hair loss and tooth decay! # bsd.gecko.mk abstracts the selection of gecko-based backends. It allows users # and porters to support any available gecko backend without needing to build # many conditional tests. ${USE_GECKO} is the list of backends that your port # can handle, and ${GECKO} is set by bsd.gecko.mk to be the chosen backend. # Users set ${WITH_GECKO} to the list of gecko backends they want on their # system. .if defined(USE_GECKO) .if !defined(_POSTMKINCLUDED) && !defined(Gecko_Pre_Include) Gecko_Pre_Include= bsd.gecko.mk # This file contains some reusable components for mozilla ports. It's of # use primarily to apps from the mozilla project itself (such as Firefox, # Thunderbird, etc.), and probably won't be of use for gecko-based ports # like epiphany, galeon, etc. # # You need to make sure to add USE_GECKO=gecko to for your port can uses # one of these options below. # # Ports can use the following: # # USE_MOZILLA By default, it enables every system dependency # listed in '_ALL_DEPENDS'. If your port doesn't # need one of those then you can use '-' like # 'USE_MOZILLA= -png -vpx' to subtract the # dependencies. Experimental deps use '+' like # 'USE_MOZILLA= +speex +theora'. # # MOZILLA_PLIST_DIRS List of directories to descend into when installing # and creating the plist # # MOZ_OPTIONS configure arguments (added to .mozconfig). If # NOMOZCONFIG is defined, you probably want to set # CONFIGURE_ARGS+=${MOZ_OPTIONS} # # MOZ_MK_OPTIONS The make(1) arguments (added to .mozconfig). If # NOMOZCONFIG is defined, you probably want to set # MAKE_ARGS+=${MOZ_MK_OPTIONS} # # MOZ_EXPORT Environment variables for the build process (added # to .mozconfig). If NOMOZCONFIG is defined, you # probably want to set MAKE_ENV+=${MOZ_EXPORT} # # NOMOZCONFIG Don't drop a customized .mozconfig into the build # directory. Options will have to be specified in # CONFIGURE_ARGS instead # MAINTAINER?= gecko@FreeBSD.org MOZILLA?= ${PORTNAME} MOZILLA_VER?= ${PORTVERSION} MOZILLA_BIN?= ${PORTNAME}-bin MOZILLA_EXEC_NAME?=${MOZILLA} USES+= compiler:c++17-lang cpe gl gmake gnome iconv localbase perl5 pkgconfig \ python:2.7,build desktop-file-utils CPE_VENDOR?=mozilla USE_GL= gl USE_GNOME= cairo gdkpixbuf2 gtk20 gtk30 USE_PERL5= build USE_XORG= x11 xcb xcomposite xdamage xext xfixes xrender xt HAS_CONFIGURE= yes CONFIGURE_OUTSOURCE= yes LDFLAGS+= -Wl,--as-needed BUNDLE_LIBS= yes BUILD_DEPENDS+= llvm${LLVM_DEFAULT}>0:devel/llvm${LLVM_DEFAULT} \ rust-cbindgen>=0.8.7:devel/rust-cbindgen \ ${RUST_DEFAULT}>=1.35:lang/${RUST_DEFAULT} \ ${LOCALBASE}/bin/python${PYTHON3_DEFAULT}:lang/python${PYTHON3_DEFAULT:S/.//g} \ node:www/node MOZ_EXPORT+= ${CONFIGURE_ENV} \ LLVM_CONFIG=llvm-config${LLVM_DEFAULT} \ PERL="${PERL}" \ PYTHON3="${LOCALBASE}/bin/python${PYTHON3_DEFAULT}" \ RUSTFLAGS="${RUSTFLAGS}" MOZ_OPTIONS+= --prefix="${PREFIX}" MOZ_MK_OPTIONS+=MOZ_OBJDIR="${BUILD_WRKSRC}" # Require newer Clang than what's in base system unless user opted out . if ${CC} == cc && ${CXX} == c++ && exists(/usr/lib/libc++.so) .if ${LLVM_DEFAULT:S,-devel,990,} >= 90 && ${ARCH} == i386 LLVM_DEFAULT= 80 .endif BUILD_DEPENDS+= ${LOCALBASE}/bin/clang${LLVM_DEFAULT}:devel/llvm${LLVM_DEFAULT} CPP= ${LOCALBASE}/bin/clang-cpp${LLVM_DEFAULT} CC= ${LOCALBASE}/bin/clang${LLVM_DEFAULT} CXX= ${LOCALBASE}/bin/clang++${LLVM_DEFAULT} USES:= ${USES:Ncompiler\:*} # XXX avoid warnings . endif MOZSRC?= ${WRKSRC} PLISTF?= ${WRKDIR}/plist_files MOZCONFIG?= ${WRKSRC}/.mozconfig MOZILLA_PLIST_DIRS?= bin lib share/pixmaps share/applications # Adjust -C target-cpu if -march/-mcpu is set by bsd.cpu.mk .if ${ARCH} == amd64 || ${ARCH} == i386 RUSTFLAGS+= ${CFLAGS:M-march=*:S/-march=/-C target-cpu=/} .else RUSTFLAGS+= ${CFLAGS:M-mcpu=*:S/-mcpu=/-C target-cpu=/} .endif # Standard depends _ALL_DEPENDS= av1 event ffi graphite harfbuzz hunspell icu jpeg nspr nss png pixman sqlite vpx webp .if exists(${FILESDIR}/patch-bug1559213) av1_LIB_DEPENDS= libaom.so:multimedia/aom libdav1d.so:multimedia/dav1d av1_MOZ_OPTIONS= --with-system-av1 .endif event_LIB_DEPENDS= libevent.so:devel/libevent event_MOZ_OPTIONS= --with-system-libevent ffi_LIB_DEPENDS= libffi.so:devel/libffi ffi_MOZ_OPTIONS= --enable-system-ffi .if exists(${FILESDIR}/patch-bug847568) graphite_LIB_DEPENDS= libgraphite2.so:graphics/graphite2 graphite_MOZ_OPTIONS= --with-system-graphite2 harfbuzz_LIB_DEPENDS= libharfbuzz.so:print/harfbuzz harfbuzz_MOZ_OPTIONS= --with-system-harfbuzz .endif hunspell_LIB_DEPENDS= libhunspell-1.7.so:textproc/hunspell hunspell_MOZ_OPTIONS= --enable-system-hunspell icu_LIB_DEPENDS= libicui18n.so:devel/icu icu_MOZ_OPTIONS= --with-system-icu --with-intl-api -jpeg_BUILD_DEPENDS=yasm:devel/yasm jpeg_USES= jpeg jpeg_MOZ_OPTIONS= --with-system-jpeg=${LOCALBASE} nspr_LIB_DEPENDS= libnspr4.so:devel/nspr nspr_MOZ_OPTIONS= --with-system-nspr nss_LIB_DEPENDS= libnss3.so:security/nss nss_MOZ_OPTIONS= --with-system-nss pixman_LIB_DEPENDS= libpixman-1.so:x11/pixman pixman_MOZ_OPTIONS= --enable-system-pixman png_LIB_DEPENDS= libpng.so:graphics/png png_MOZ_OPTIONS= --with-system-png=${LOCALBASE} sqlite_LIB_DEPENDS= libsqlite3.so:databases/sqlite3 sqlite_MOZ_OPTIONS= --enable-system-sqlite -vpx_BUILD_DEPENDS= yasm:devel/yasm vpx_LIB_DEPENDS= libvpx.so:multimedia/libvpx vpx_MOZ_OPTIONS= --with-system-libvpx webp_LIB_DEPENDS= libwebp.so:graphics/webp webp_MOZ_OPTIONS= --with-system-webp .for use in ${USE_MOZILLA} ${use:S/-/_WITHOUT_/}= ${TRUE} .endfor LIB_DEPENDS+= libfontconfig.so:x11-fonts/fontconfig \ libfreetype.so:print/freetype2 .for dep in ${_ALL_DEPENDS} ${USE_MOZILLA:M+*:S/+//} .if !defined(_WITHOUT_${dep}) BUILD_DEPENDS+= ${${dep}_BUILD_DEPENDS} LIB_DEPENDS+= ${${dep}_LIB_DEPENDS} RUN_DEPENDS+= ${${dep}_RUN_DEPENDS} USES+= ${${dep}_USES} MOZ_OPTIONS+= ${${dep}_MOZ_OPTIONS} .else BUILD_DEPENDS+= ${-${dep}_BUILD_DEPENDS} .endif .endfor # Standard options MOZ_OPTIONS+= \ --enable-update-channel=${PKGNAMESUFFIX:Urelease:S/^-//} \ --disable-updater \ --with-system-zlib \ --with-system-bz2 # API keys from www/chromium # http://www.chromium.org/developers/how-tos/api-keys # Note: these are for FreeBSD use ONLY. For your own distribution, # please get your own set of keys. MOZ_EXPORT+= MOZ_GOOGLE_LOCATION_SERVICE_API_KEY=AIzaSyBsp9n41JLW8jCokwn7vhoaMejDFRd1mp8 MOZ_EXPORT+= MOZ_GOOGLE_SAFEBROWSING_API_KEY=AIzaSyBsp9n41JLW8jCokwn7vhoaMejDFRd1mp8 .if ${PORT_OPTIONS:MOPTIMIZED_CFLAGS} CFLAGS+= -O3 MOZ_EXPORT+= MOZ_OPTIMIZE_FLAGS="${CFLAGS:M-O*}" MOZ_OPTIONS+= --enable-optimize .else MOZ_OPTIONS+= --disable-optimize . if ${/usr/bin/ld:L:tA} != /usr/bin/ld.lld # ld 2.17 barfs on Stylo built with -C opt-level=0 USE_BINUTILS= yes LDFLAGS+= -B${LOCALBASE}/bin . endif .endif .if ${PORT_OPTIONS:MCANBERRA} RUN_DEPENDS+= libcanberra>0:audio/libcanberra .endif .if ${PORT_OPTIONS:MDBUS} BUILD_DEPENDS+= libnotify>0:devel/libnotify LIB_DEPENDS+= libdbus-1.so:devel/dbus \ libdbus-glib-1.so:devel/dbus-glib \ libstartup-notification-1.so:x11/startup-notification MOZ_OPTIONS+= --enable-startup-notification .else MOZ_OPTIONS+= --disable-dbus .endif .if ${PORT_OPTIONS:MFFMPEG} # dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp RUN_DEPENDS+= ffmpeg>=0.8,1:multimedia/ffmpeg .endif .if ${PORT_OPTIONS:MGCONF} # XXX USE_GNOME+=gconf2:build is not supported BUILD_DEPENDS+= ${LOCALBASE}/lib/libgconf-2.so:devel/gconf2 MOZ_OPTIONS+= --enable-gconf .else MOZ_OPTIONS+= --disable-gconf .endif .if ${PORT_OPTIONS:MLIBPROXY} LIB_DEPENDS+= libproxy.so:net/libproxy MOZ_OPTIONS+= --enable-libproxy .else MOZ_OPTIONS+= --disable-libproxy .endif .if ${PORT_OPTIONS:MALSA} BUILD_DEPENDS+= ${LOCALBASE}/include/alsa/asoundlib.h:audio/alsa-lib RUN_DEPENDS+= ${LOCALBASE}/lib/alsa-lib/libasound_module_pcm_oss.so:audio/alsa-plugins RUN_DEPENDS+= alsa-lib>=1.1.1_1:audio/alsa-lib MOZ_OPTIONS+= --enable-alsa .endif .if ${PORT_OPTIONS:MJACK} BUILD_DEPENDS+= ${LOCALBASE}/include/jack/jack.h:audio/jack MOZ_OPTIONS+= --enable-jack .endif .if ${PORT_OPTIONS:MPULSEAUDIO} BUILD_DEPENDS+= ${LOCALBASE}/include/pulse/pulseaudio.h:audio/pulseaudio MOZ_OPTIONS+= --enable-pulseaudio .else MOZ_OPTIONS+= --disable-pulseaudio .endif .if ${PORT_OPTIONS:MSNDIO} BUILD_DEPENDS+= ${LOCALBASE}/include/sndio.h:audio/sndio post-patch-SNDIO-on: @${REINPLACE_CMD} -e 's|OpenBSD|${OPSYS}|g' \ - ${MOZSRC}/media/libcubeb/src/moz.build \ - ${MOZSRC}/toolkit/library/moz.build - @${REINPLACE_CMD} -e 's|OpenBSD|${OPSYS}|g' \ - ${MOZSRC}/media/libcubeb/gtest/moz.build + -e '/DISABLE_LIBSNDIO_DLOPEN/d' \ + ${MOZSRC}/media/libcubeb/src/moz.build .endif .if ${PORT_OPTIONS:MDEBUG} MOZ_OPTIONS+= --enable-debug --disable-release STRIP= # ports/184285 .else MOZ_OPTIONS+= --disable-debug --disable-debug-symbols --enable-release . if ${ARCH:Maarch64} || ${MACHINE_CPU:Msse2} MOZ_OPTIONS+= --enable-rust-simd . endif .endif .if ${PORT_OPTIONS:MPROFILE} MOZ_OPTIONS+= --enable-profiling STRIP= .else MOZ_OPTIONS+= --disable-profiling .endif .if ${PORT_OPTIONS:MTEST} USE_XORG+= xscrnsaver MOZ_OPTIONS+= --enable-tests .else MOZ_OPTIONS+= --disable-tests .endif .if !defined(STRIP) || ${STRIP} == "" MOZ_OPTIONS+= --disable-strip --disable-install-strip .else MOZ_OPTIONS+= --enable-strip --enable-install-strip .endif # _MAKE_JOBS is only available after bsd.port.post.mk, thus cannot be # used in .mozconfig. And client.mk automatically uses -jN where N # is what multiprocessing.cpu_count() returns. .if defined(DISABLE_MAKE_JOBS) || defined(MAKE_JOBS_UNSAFE) MAKE_JOBS_NUMBER= 1 .endif .if defined(MAKE_JOBS_NUMBER) MOZ_MAKE_FLAGS+=-j${MAKE_JOBS_NUMBER} .endif .if defined(MOZ_MAKE_FLAGS) MOZ_MK_OPTIONS+=MOZ_MAKE_FLAGS="${MOZ_MAKE_FLAGS}" .endif .if ${ARCH} == amd64 . if ${USE_MOZILLA:M-nss} USE_BINUTILS= # intel-gcm.s CFLAGS+= -B${LOCALBASE}/bin LDFLAGS+= -B${LOCALBASE}/bin . endif .elif ${ARCH:Mpowerpc*} . if ${ARCH} == "powerpc64" MOZ_EXPORT+= UNAME_m="${ARCH}" CFLAGS+= -mminimal-toc . endif .elif ${ARCH} == "sparc64" # Work around miscompilation/mislinkage of the sCanonicalVTable hacks. MOZ_OPTIONS+= --disable-v1-string-abi .endif .else # bsd.port.post.mk post-patch: gecko-post-patch gecko-post-patch: @${RM} ${MOZCONFIG} .if !defined(NOMOZCONFIG) .for arg in ${MOZ_OPTIONS} @${ECHO_CMD} ac_add_options ${arg:Q} >> ${MOZCONFIG} .endfor .for arg in ${MOZ_MK_OPTIONS} @${ECHO_CMD} mk_add_options ${arg:Q} >> ${MOZCONFIG} .endfor .for var in ${MOZ_EXPORT} @${ECHO_CMD} export ${var:Q} >> ${MOZCONFIG} .endfor .endif # .if !defined(NOMOZCONFIG) .if ${USE_MOZILLA:M-nspr} @${ECHO_MSG} "===> Applying NSPR patches" @for i in ${.CURDIR}/../../devel/nspr/files/patch-*; do \ ${PATCH} ${PATCH_ARGS} -d ${MOZSRC}/nsprpub < $$i; \ done .endif .if ${USE_MOZILLA:M-nss} @${ECHO_MSG} "===> Applying NSS patches" @for i in ${.CURDIR}/../../security/nss/files/patch-*; do \ ${PATCH} ${PATCH_ARGS} -d ${MOZSRC}/security/nss < $$i; \ done .endif @if [ -f ${WRKSRC}/config/baseconfig.mk ] ; then \ ${REINPLACE_CMD} -e 's|%%MOZILLA%%|${MOZILLA}|g' \ ${WRKSRC}/config/baseconfig.mk; \ fi @${REINPLACE_CMD} -e 's|%%MOZILLA%%|${MOZILLA}|g' \ ${MOZSRC}/config/baseconfig.mk @${REINPLACE_CMD} -e 's|/usr/local/netscape|${LOCALBASE}|g ; \ s|/usr/local/lib/netscape|${LOCALBASE}/lib|g' \ ${MOZSRC}/xpcom/io/SpecialSystemDirectory.cpp @${REINPLACE_CMD} -e 's|/etc|${PREFIX}&|g' \ ${MOZSRC}/xpcom/build/nsXPCOMPrivate.h @${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g' \ -e 's|mozilla/plugins|browser_plugins|g' \ -e 's|share/mozilla/extensions|lib/xpi|g' \ ${MOZSRC}/xpcom/io/nsAppFileLocationProvider.cpp \ ${MOZSRC}/toolkit/xre/nsXREDirProvider.cpp post-install-script: gecko-create-plist gecko-create-plist: # Create the plist ${RM} ${PLISTF} .for dir in ${MOZILLA_PLIST_DIRS} @cd ${STAGEDIR}${PREFIX}/${dir} && ${FIND} -H -s * ! -type d | \ ${SED} -e 's|^|${dir}/|' >> ${PLISTF} .endfor ${CAT} ${PLISTF} | ${SORT} >> ${TMPPLIST} .endif .endif # HERE THERE BE TACOS -- adamw Index: branches/2019Q4/www/firefox/Makefile =================================================================== --- branches/2019Q4/www/firefox/Makefile (revision 518859) +++ branches/2019Q4/www/firefox/Makefile (revision 518860) @@ -1,60 +1,61 @@ # Created by: Alan Eldridge # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 70.0.1 +DISTVERSION= 71.0 +PORTREVISION= 2 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build5/source DISTFILES= ${DISTNAME}.source${EXTRACT_SUFX} MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla BUILD_DEPENDS= nspr>=4.21:devel/nspr \ - nss>=3.46.1:security/nss \ + nss>=3.47:security/nss \ icu>=64.1,1:devel/icu \ libevent>=2.1.8:devel/libevent \ - harfbuzz>=2.6.1:print/harfbuzz \ + harfbuzz>=2.6.2:print/harfbuzz \ graphite2>=1.3.13:graphics/graphite2 \ png>=1.6.35:graphics/png \ libvpx>=1.5.0:multimedia/libvpx \ sqlite3>=3.29.0:databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \ v4l_compat>0:multimedia/v4l_compat \ autoconf-2.13:devel/autoconf213 \ nasm:devel/nasm \ zip:archivers/zip USE_GECKO= gecko CONFLICTS_INSTALL= firefox-esr USE_MOZILLA= -hunspell -vpx USES= tar:xz FIREFOX_ICON= ${MOZILLA}.png FIREFOX_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png FIREFOX_DESKTOP= ${MOZSRC}/taskcluster/docker/${MOZILLA}-snap/${MOZILLA}.desktop MOZ_OPTIONS= --enable-application=browser \ --enable-official-branding .include "${.CURDIR}/../../www/firefox/Makefile.options" post-patch: @${REINPLACE_CMD} -e 's/%u/%U/' -e '/X-MultipleArgs/d' \ -e '/^Icon/s/=.*/=${FIREFOX_ICON:R}/' \ ${FIREFOX_DESKTOP} @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \ ${WRKSRC}/browser/app/nsBrowserApp.cpp pre-configure: (cd ${WRKSRC} && ${LOCALBASE}/bin/autoconf-2.13) (cd ${WRKSRC}/js/src/ && ${LOCALBASE}/bin/autoconf-2.13) post-install: ${INSTALL_DATA} ${FIREFOX_DESKTOP} ${STAGEDIR}${PREFIX}/share/applications/ ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps ${LN} -sf ${FIREFOX_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${FIREFOX_ICON} .include Index: branches/2019Q4/www/firefox/distinfo =================================================================== --- branches/2019Q4/www/firefox/distinfo (revision 518859) +++ branches/2019Q4/www/firefox/distinfo (revision 518860) @@ -1,3 +1,3 @@ -TIMESTAMP = 1572457039 -SHA256 (firefox-70.0.1.source.tar.xz) = f2e9bb26af7682b31e82fdfc3a4b3e04fd1caa8b004469ea608185d33e35691b -SIZE (firefox-70.0.1.source.tar.xz) = 326335800 +TIMESTAMP = 1575289476 +SHA256 (firefox-71.0.source.tar.xz) = 78304cd58229e7103b56b34718aad051c9a4db30c266512a64f501ba58da7fbe +SIZE (firefox-71.0.source.tar.xz) = 312341460 Index: branches/2019Q4/www/firefox/files/patch-cubeb-dlopen =================================================================== --- branches/2019Q4/www/firefox/files/patch-cubeb-dlopen (revision 518859) +++ branches/2019Q4/www/firefox/files/patch-cubeb-dlopen (nonexistent) @@ -1,793 +0,0 @@ -https://github.com/kinetiknz/cubeb/pull/539 - -diff --git media/libcubeb/gtest/moz.build media/libcubeb/gtest/moz.build -index 1ff0c02545251..ca364d1ef7845 100644 ---- media/libcubeb/gtest/moz.build -+++ media/libcubeb/gtest/moz.build -@@ -67,13 +67,6 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'uikit': - '-framework CoreFoundation', - '-framework AudioToolbox', - ] --elif CONFIG['OS_TARGET'] == 'OpenBSD': -- OS_LIBS += [ -- 'sndio', -- ] --else: -- OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] -- OS_LIBS += CONFIG['MOZ_PULSEAUDIO_LIBS'] - - if CONFIG['CC_TYPE'] in ('clang', 'gcc'): - CXXFLAGS += ['-Wno-error=shadow'] -diff --git media/libcubeb/src/cubeb.c media/libcubeb/src/cubeb.c -index 422f7c6..caac869 100644 ---- media/libcubeb/src/cubeb.c -+++ media/libcubeb/src/cubeb.c -@@ -194,6 +194,9 @@ cubeb_init(cubeb ** context, char const * context_name, char const * backend_nam - #if defined(USE_JACK) - jack_init, - #endif -+#if defined(USE_SNDIO) -+ sndio_init, -+#endif - #if defined(USE_ALSA) - alsa_init, - #endif -@@ -209,9 +212,6 @@ cubeb_init(cubeb ** context, char const * context_name, char const * backend_nam - #if defined(USE_WINMM) - winmm_init, - #endif --#if defined(USE_SNDIO) -- sndio_init, --#endif - #if defined(USE_SUN) - sun_init, - #endif -diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c -index bfd4d8f..a29eed0 100644 ---- media/libcubeb/src/cubeb_alsa.c -+++ media/libcubeb/src/cubeb_alsa.c -@@ -14,10 +14,58 @@ - #include - #include - #include -+#include - #include - #include "cubeb/cubeb.h" - #include "cubeb-internal.h" - -+#ifdef DISABLE_LIBASOUND_DLOPEN -+#define WRAP(x) x -+#else -+#define WRAP(x) cubeb_##x -+#define LIBASOUND_API_VISIT(X) \ -+ X(snd_config) \ -+ X(snd_config_add) \ -+ X(snd_config_copy) \ -+ X(snd_config_delete) \ -+ X(snd_config_get_id) \ -+ X(snd_config_get_string) \ -+ X(snd_config_imake_integer) \ -+ X(snd_config_search) \ -+ X(snd_config_search_definition) \ -+ X(snd_lib_error_set_handler) \ -+ X(snd_pcm_avail_update) \ -+ X(snd_pcm_close) \ -+ X(snd_pcm_delay) \ -+ X(snd_pcm_drain) \ -+ X(snd_pcm_frames_to_bytes) \ -+ X(snd_pcm_get_params) \ -+ X(snd_pcm_hw_params_any) \ -+ X(snd_pcm_hw_params_get_channels_max) \ -+ X(snd_pcm_hw_params_get_rate) \ -+ X(snd_pcm_hw_params_set_rate_near) \ -+ X(snd_pcm_hw_params_sizeof) \ -+ X(snd_pcm_nonblock) \ -+ X(snd_pcm_open) \ -+ X(snd_pcm_open_lconf) \ -+ X(snd_pcm_pause) \ -+ X(snd_pcm_poll_descriptors) \ -+ X(snd_pcm_poll_descriptors_count) \ -+ X(snd_pcm_poll_descriptors_revents) \ -+ X(snd_pcm_readi) \ -+ X(snd_pcm_recover) \ -+ X(snd_pcm_set_params) \ -+ X(snd_pcm_start) \ -+ X(snd_pcm_state) \ -+ X(snd_pcm_writei) \ -+ -+#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x; -+LIBASOUND_API_VISIT(MAKE_TYPEDEF); -+#undef MAKE_TYPEDEF -+/* snd_pcm_hw_params_alloca is actually a macro */ -+#define snd_pcm_hw_params_sizeof cubeb_snd_pcm_hw_params_sizeof -+#endif -+ - #define CUBEB_STREAM_MAX 16 - #define CUBEB_WATCHDOG_MS 10000 - -@@ -36,6 +84,7 @@ static struct cubeb_ops const alsa_ops; - - struct cubeb { - struct cubeb_ops const * ops; -+ void * libasound; - - pthread_t thread; - -@@ -245,8 +294,8 @@ set_timeout(struct timeval * timeout, unsigned int ms) - static void - stream_buffer_decrement(cubeb_stream * stm, long count) - { -- char * bufremains = stm->buffer + snd_pcm_frames_to_bytes(stm->pcm, count); -- memmove(stm->buffer, bufremains, snd_pcm_frames_to_bytes(stm->pcm, stm->bufframes - count)); -+ char * bufremains = stm->buffer + WRAP(snd_pcm_frames_to_bytes)(stm->pcm, count); -+ memmove(stm->buffer, bufremains, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, stm->bufframes - count)); - stm->bufframes -= count; - } - -@@ -278,9 +327,9 @@ alsa_process_stream(cubeb_stream * stm) - /* Call _poll_descriptors_revents() even if we don't use it - to let underlying plugins clear null events. Otherwise poll() - may wake up again and again, producing unnecessary CPU usage. */ -- snd_pcm_poll_descriptors_revents(stm->pcm, stm->fds, stm->nfds, &revents); -+ WRAP(snd_pcm_poll_descriptors_revents)(stm->pcm, stm->fds, stm->nfds, &revents); - -- avail = snd_pcm_avail_update(stm->pcm); -+ avail = WRAP(snd_pcm_avail_update)(stm->pcm); - - /* Got null event? Bail and wait for another wakeup. */ - if (avail == 0) { -@@ -303,7 +352,7 @@ alsa_process_stream(cubeb_stream * stm) - // TODO: should it be marked as DRAINING? - } - -- got = snd_pcm_readi(stm->pcm, stm->buffer+stm->bufframes, avail); -+ got = WRAP(snd_pcm_readi)(stm->pcm, stm->buffer+stm->bufframes, avail); - - if (got < 0) { - avail = got; // the error handler below will recover us -@@ -347,7 +396,7 @@ alsa_process_stream(cubeb_stream * stm) - (!stm->other_stream || stm->other_stream->bufframes > 0)) { - long got = avail - stm->bufframes; - void * other_buffer = stm->other_stream ? stm->other_stream->buffer : NULL; -- char * buftail = stm->buffer + snd_pcm_frames_to_bytes(stm->pcm, stm->bufframes); -+ char * buftail = stm->buffer + WRAP(snd_pcm_frames_to_bytes)(stm->pcm, stm->bufframes); - - /* Correct read size to the other stream available frames */ - if (stm->other_stream && got > (snd_pcm_sframes_t) stm->other_stream->bufframes) { -@@ -374,8 +423,8 @@ alsa_process_stream(cubeb_stream * stm) - long drain_frames = avail - stm->bufframes; - double drain_time = (double) drain_frames / stm->params.rate; - -- char * buftail = stm->buffer + snd_pcm_frames_to_bytes(stm->pcm, stm->bufframes); -- memset(buftail, 0, snd_pcm_frames_to_bytes(stm->pcm, drain_frames)); -+ char * buftail = stm->buffer + WRAP(snd_pcm_frames_to_bytes)(stm->pcm, stm->bufframes); -+ memset(buftail, 0, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, drain_frames)); - stm->bufframes = avail; - - /* Mark as draining, unless we're waiting for capture */ -@@ -402,7 +451,7 @@ alsa_process_stream(cubeb_stream * stm) - } - } - -- wrote = snd_pcm_writei(stm->pcm, stm->buffer, avail); -+ wrote = WRAP(snd_pcm_writei)(stm->pcm, stm->buffer, avail); - if (wrote < 0) { - avail = wrote; // the error handler below will recover us - } else { -@@ -415,13 +464,13 @@ alsa_process_stream(cubeb_stream * stm) - - /* Got some error? Let's try to recover the stream. */ - if (avail < 0) { -- avail = snd_pcm_recover(stm->pcm, avail, 0); -+ avail = WRAP(snd_pcm_recover)(stm->pcm, avail, 0); - - /* Capture pcm must be started after initial setup/recover */ - if (avail >= 0 && - stm->stream_type == SND_PCM_STREAM_CAPTURE && -- snd_pcm_state(stm->pcm) == SND_PCM_STATE_PREPARED) { -- avail = snd_pcm_start(stm->pcm); -+ WRAP(snd_pcm_state)(stm->pcm) == SND_PCM_STATE_PREPARED) { -+ avail = WRAP(snd_pcm_start)(stm->pcm); - } - } - -@@ -537,26 +586,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) - - slave_def = NULL; - -- r = snd_config_search(root_pcm, "slave", &slave_pcm); -+ r = WRAP(snd_config_search)(root_pcm, "slave", &slave_pcm); - if (r < 0) { - return NULL; - } - -- r = snd_config_get_string(slave_pcm, &string); -+ r = WRAP(snd_config_get_string)(slave_pcm, &string); - if (r >= 0) { -- r = snd_config_search_definition(lconf, "pcm_slave", string, &slave_def); -+ r = WRAP(snd_config_search_definition)(lconf, "pcm_slave", string, &slave_def); - if (r < 0) { - return NULL; - } - } - - do { -- r = snd_config_search(slave_def ? slave_def : slave_pcm, "pcm", &pcm); -+ r = WRAP(snd_config_search)(slave_def ? slave_def : slave_pcm, "pcm", &pcm); - if (r < 0) { - break; - } - -- r = snd_config_get_string(slave_def ? slave_def : slave_pcm, &string); -+ r = WRAP(snd_config_get_string)(slave_def ? slave_def : slave_pcm, &string); - if (r < 0) { - break; - } -@@ -565,7 +614,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) - if (r < 0 || r > (int) sizeof(node_name)) { - break; - } -- r = snd_config_search(lconf, node_name, &pcm); -+ r = WRAP(snd_config_search)(lconf, node_name, &pcm); - if (r < 0) { - break; - } -@@ -574,7 +623,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) - } while (0); - - if (slave_def) { -- snd_config_delete(slave_def); -+ WRAP(snd_config_delete)(slave_def); - } - - return NULL; -@@ -597,22 +646,22 @@ init_local_config_with_workaround(char const * pcm_name) - - lconf = NULL; - -- if (snd_config == NULL) { -+ if (*WRAP(snd_config) == NULL) { - return NULL; - } - -- r = snd_config_copy(&lconf, snd_config); -+ r = WRAP(snd_config_copy)(&lconf, *WRAP(snd_config)); - if (r < 0) { - return NULL; - } - - do { -- r = snd_config_search_definition(lconf, "pcm", pcm_name, &pcm_node); -+ r = WRAP(snd_config_search_definition)(lconf, "pcm", pcm_name, &pcm_node); - if (r < 0) { - break; - } - -- r = snd_config_get_id(pcm_node, &string); -+ r = WRAP(snd_config_get_id)(pcm_node, &string); - if (r < 0) { - break; - } -@@ -621,7 +670,7 @@ init_local_config_with_workaround(char const * pcm_name) - if (r < 0 || r > (int) sizeof(node_name)) { - break; - } -- r = snd_config_search(lconf, node_name, &pcm_node); -+ r = WRAP(snd_config_search)(lconf, node_name, &pcm_node); - if (r < 0) { - break; - } -@@ -632,12 +681,12 @@ init_local_config_with_workaround(char const * pcm_name) - } - - /* Fetch the PCM node's type, and bail out if it's not the PulseAudio plugin. */ -- r = snd_config_search(pcm_node, "type", &node); -+ r = WRAP(snd_config_search)(pcm_node, "type", &node); - if (r < 0) { - break; - } - -- r = snd_config_get_string(node, &string); -+ r = WRAP(snd_config_get_string)(node, &string); - if (r < 0) { - break; - } -@@ -648,18 +697,18 @@ init_local_config_with_workaround(char const * pcm_name) - - /* Don't clobber an explicit existing handle_underrun value, set it only - if it doesn't already exist. */ -- r = snd_config_search(pcm_node, "handle_underrun", &node); -+ r = WRAP(snd_config_search)(pcm_node, "handle_underrun", &node); - if (r != -ENOENT) { - break; - } - - /* Disable pcm_pulse's asynchronous underrun handling. */ -- r = snd_config_imake_integer(&node, "handle_underrun", 0); -+ r = WRAP(snd_config_imake_integer)(&node, "handle_underrun", 0); - if (r < 0) { - break; - } - -- r = snd_config_add(pcm_node, node); -+ r = WRAP(snd_config_add)(pcm_node, node); - if (r < 0) { - break; - } -@@ -667,7 +716,7 @@ init_local_config_with_workaround(char const * pcm_name) - return lconf; - } while (0); - -- snd_config_delete(lconf); -+ WRAP(snd_config_delete)(lconf); - - return NULL; - } -@@ -679,9 +728,9 @@ alsa_locked_pcm_open(snd_pcm_t ** pcm, char const * pcm_name, snd_pcm_stream_t s - - pthread_mutex_lock(&cubeb_alsa_mutex); - if (local_config) { -- r = snd_pcm_open_lconf(pcm, pcm_name, stream, SND_PCM_NONBLOCK, local_config); -+ r = WRAP(snd_pcm_open_lconf)(pcm, pcm_name, stream, SND_PCM_NONBLOCK, local_config); - } else { -- r = snd_pcm_open(pcm, pcm_name, stream, SND_PCM_NONBLOCK); -+ r = WRAP(snd_pcm_open)(pcm, pcm_name, stream, SND_PCM_NONBLOCK); - } - pthread_mutex_unlock(&cubeb_alsa_mutex); - -@@ -694,7 +743,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm) - int r; - - pthread_mutex_lock(&cubeb_alsa_mutex); -- r = snd_pcm_close(pcm); -+ r = WRAP(snd_pcm_close)(pcm); - pthread_mutex_unlock(&cubeb_alsa_mutex); - - return r; -@@ -750,6 +799,7 @@ silent_error_handler(char const * file, int line, char const * function, - alsa_init(cubeb ** context, char const * context_name) - { - (void)context_name; -+ void * libasound = NULL; - cubeb * ctx; - int r; - int i; -@@ -760,9 +810,27 @@ alsa_init(cubeb ** context, char const * context_name) - assert(context); - *context = NULL; - -+#ifndef DISABLE_LIBASOUND_DLOPEN -+ libasound = dlopen("libasound.so", RTLD_LAZY); -+ if (!libasound) { -+ return CUBEB_ERROR; -+ } -+ -+#define LOAD(x) { \ -+ cubeb_##x = dlsym(libasound, #x); \ -+ if (!cubeb_##x) { \ -+ dlclose(libasound); \ -+ return CUBEB_ERROR; \ -+ } \ -+ } -+ -+ LIBASOUND_API_VISIT(LOAD); -+#undef LOAD -+#endif -+ - pthread_mutex_lock(&cubeb_alsa_mutex); - if (!cubeb_alsa_error_handler_set) { -- snd_lib_error_set_handler(silent_error_handler); -+ WRAP(snd_lib_error_set_handler)(silent_error_handler); - cubeb_alsa_error_handler_set = 1; - } - pthread_mutex_unlock(&cubeb_alsa_mutex); -@@ -771,6 +839,7 @@ alsa_init(cubeb ** context, char const * context_name) - assert(ctx); - - ctx->ops = &alsa_ops; -+ ctx->libasound = libasound; - - r = pthread_mutex_init(&ctx->mutex, NULL); - assert(r == 0); -@@ -819,7 +888,7 @@ alsa_init(cubeb ** context, char const * context_name) - config fails with EINVAL, the PA PCM is too old for this workaround. */ - if (r == -EINVAL) { - pthread_mutex_lock(&cubeb_alsa_mutex); -- snd_config_delete(ctx->local_config); -+ WRAP(snd_config_delete)(ctx->local_config); - pthread_mutex_unlock(&cubeb_alsa_mutex); - ctx->local_config = NULL; - } else if (r >= 0) { -@@ -861,10 +930,14 @@ alsa_destroy(cubeb * ctx) - - if (ctx->local_config) { - pthread_mutex_lock(&cubeb_alsa_mutex); -- snd_config_delete(ctx->local_config); -+ WRAP(snd_config_delete)(ctx->local_config); - pthread_mutex_unlock(&cubeb_alsa_mutex); - } - -+ if (ctx->libasound) { -+ dlclose(ctx->libasound); -+ } -+ - free(ctx); - } - -@@ -948,7 +1021,7 @@ alsa_stream_init_single(cubeb * ctx, cubeb_stream ** stream, char const * stream - return CUBEB_ERROR; - } - -- r = snd_pcm_nonblock(stm->pcm, 1); -+ r = WRAP(snd_pcm_nonblock)(stm->pcm, 1); - assert(r == 0); - - latency_us = latency_frames * 1e6 / stm->params.rate; -@@ -961,7 +1034,7 @@ alsa_stream_init_single(cubeb * ctx, cubeb_stream ** stream, char const * stream - latency_us = latency_us < min_latency ? min_latency: latency_us; - } - -- r = snd_pcm_set_params(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, -+ r = WRAP(snd_pcm_set_params)(stm->pcm, format, SND_PCM_ACCESS_RW_INTERLEAVED, - stm->params.channels, stm->params.rate, 1, - latency_us); - if (r < 0) { -@@ -969,20 +1042,20 @@ alsa_stream_init_single(cubeb * ctx, cubeb_stream ** stream, char const * stream - return CUBEB_ERROR_INVALID_FORMAT; - } - -- r = snd_pcm_get_params(stm->pcm, &stm->buffer_size, &period_size); -+ r = WRAP(snd_pcm_get_params)(stm->pcm, &stm->buffer_size, &period_size); - assert(r == 0); - - /* Double internal buffer size to have enough space when waiting for the other side of duplex connection */ - stm->buffer_size *= 2; -- stm->buffer = calloc(1, snd_pcm_frames_to_bytes(stm->pcm, stm->buffer_size)); -+ stm->buffer = calloc(1, WRAP(snd_pcm_frames_to_bytes)(stm->pcm, stm->buffer_size)); - assert(stm->buffer); - -- stm->nfds = snd_pcm_poll_descriptors_count(stm->pcm); -+ stm->nfds = WRAP(snd_pcm_poll_descriptors_count)(stm->pcm); - assert(stm->nfds > 0); - - stm->saved_fds = calloc(stm->nfds, sizeof(struct pollfd)); - assert(stm->saved_fds); -- r = snd_pcm_poll_descriptors(stm->pcm, stm->saved_fds, stm->nfds); -+ r = WRAP(snd_pcm_poll_descriptors)(stm->pcm, stm->saved_fds, stm->nfds); - assert((nfds_t) r == stm->nfds); - - if (alsa_register_stream(ctx, stm) != 0) { -@@ -1054,7 +1127,7 @@ alsa_stream_destroy(cubeb_stream * stm) - pthread_mutex_lock(&stm->mutex); - if (stm->pcm) { - if (stm->state == DRAINING) { -- snd_pcm_drain(stm->pcm); -+ WRAP(snd_pcm_drain)(stm->pcm); - } - alsa_locked_pcm_close(stm->pcm); - stm->pcm = NULL; -@@ -1100,12 +1173,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) - - assert(stm); - -- r = snd_pcm_hw_params_any(stm->pcm, hw_params); -+ r = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params); - if (r < 0) { - return CUBEB_ERROR; - } - -- r = snd_pcm_hw_params_get_channels_max(hw_params, max_channels); -+ r = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels); - if (r < 0) { - return CUBEB_ERROR; - } -@@ -1126,34 +1199,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { - - /* get a pcm, disabling resampling, so we get a rate the - * hardware/dmix/pulse/etc. supports. */ -- r = snd_pcm_open(&pcm, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK, SND_PCM_NO_AUTO_RESAMPLE); -+ r = WRAP(snd_pcm_open)(&pcm, CUBEB_ALSA_PCM_NAME, SND_PCM_STREAM_PLAYBACK, SND_PCM_NO_AUTO_RESAMPLE); - if (r < 0) { - return CUBEB_ERROR; - } - -- r = snd_pcm_hw_params_any(pcm, hw_params); -+ r = WRAP(snd_pcm_hw_params_any)(pcm, hw_params); - if (r < 0) { -- snd_pcm_close(pcm); -+ WRAP(snd_pcm_close)(pcm); - return CUBEB_ERROR; - } - -- r = snd_pcm_hw_params_get_rate(hw_params, rate, &dir); -+ r = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir); - if (r >= 0) { - /* There is a default rate: use it. */ -- snd_pcm_close(pcm); -+ WRAP(snd_pcm_close)(pcm); - return CUBEB_OK; - } - - /* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */ - *rate = 44100; - -- r = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL); -+ r = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL); - if (r < 0) { -- snd_pcm_close(pcm); -+ WRAP(snd_pcm_close)(pcm); - return CUBEB_ERROR; - } - -- snd_pcm_close(pcm); -+ WRAP(snd_pcm_close)(pcm); - - return CUBEB_OK; - } -@@ -1186,10 +1259,10 @@ alsa_stream_start(cubeb_stream * stm) - pthread_mutex_lock(&stm->mutex); - /* Capture pcm must be started after initial setup/recover */ - if (stm->stream_type == SND_PCM_STREAM_CAPTURE && -- snd_pcm_state(stm->pcm) == SND_PCM_STATE_PREPARED) { -- snd_pcm_start(stm->pcm); -+ WRAP(snd_pcm_state)(stm->pcm) == SND_PCM_STATE_PREPARED) { -+ WRAP(snd_pcm_start)(stm->pcm); - } -- snd_pcm_pause(stm->pcm, 0); -+ WRAP(snd_pcm_pause)(stm->pcm, 0); - gettimeofday(&stm->last_activity, NULL); - pthread_mutex_unlock(&stm->mutex); - -@@ -1229,7 +1302,7 @@ alsa_stream_stop(cubeb_stream * stm) - pthread_mutex_unlock(&ctx->mutex); - - pthread_mutex_lock(&stm->mutex); -- snd_pcm_pause(stm->pcm, 1); -+ WRAP(snd_pcm_pause)(stm->pcm, 1); - pthread_mutex_unlock(&stm->mutex); - - return CUBEB_OK; -@@ -1245,8 +1318,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) - pthread_mutex_lock(&stm->mutex); - - delay = -1; -- if (snd_pcm_state(stm->pcm) != SND_PCM_STATE_RUNNING || -- snd_pcm_delay(stm->pcm, &delay) != 0) { -+ if (WRAP(snd_pcm_state)(stm->pcm) != SND_PCM_STATE_RUNNING || -+ WRAP(snd_pcm_delay)(stm->pcm, &delay) != 0) { - *position = stm->last_position; - pthread_mutex_unlock(&stm->mutex); - return CUBEB_OK; -@@ -1271,7 +1344,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) - snd_pcm_sframes_t delay; - /* This function returns the delay in frames until a frame written using - snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */ -- if (snd_pcm_delay(stm->pcm, &delay)) { -+ if (WRAP(snd_pcm_delay)(stm->pcm, &delay)) { - return CUBEB_ERROR; - } - -diff --git media/libcubeb/src/cubeb_sndio.c media/libcubeb/src/cubeb_sndio.c -index 9e99b2c..0559af4 100644 ---- media/libcubeb/src/cubeb_sndio.c -+++ media/libcubeb/src/cubeb_sndio.c -@@ -12,6 +12,7 @@ - #include - #include - #include -+#include - #include - #include "cubeb/cubeb.h" - #include "cubeb-internal.h" -@@ -22,10 +23,35 @@ - #define DPR(...) do {} while(0) - #endif - -+#ifdef DISABLE_LIBSNDIO_DLOPEN -+#define WRAP(x) x -+#else -+#define WRAP(x) cubeb_##x -+#define LIBSNDIO_API_VISIT(X) \ -+ X(sio_close) \ -+ X(sio_eof) \ -+ X(sio_getpar) \ -+ X(sio_initpar) \ -+ X(sio_onmove) \ -+ X(sio_open) \ -+ X(sio_pollfd) \ -+ X(sio_read) \ -+ X(sio_revents) \ -+ X(sio_setpar) \ -+ X(sio_start) \ -+ X(sio_stop) \ -+ X(sio_write) \ -+ -+#define MAKE_TYPEDEF(x) static typeof(x) * cubeb_##x; -+LIBSNDIO_API_VISIT(MAKE_TYPEDEF); -+#undef MAKE_TYPEDEF -+#endif -+ - static struct cubeb_ops const sndio_ops; - - struct cubeb { - struct cubeb_ops const * ops; -+ void * libsndio; - }; - - struct cubeb_stream { -@@ -119,7 +145,7 @@ sndio_mainloop(void *arg) - DPR("sndio_mainloop()\n"); - s->state_cb(s, s->arg, CUBEB_STATE_STARTED); - pthread_mutex_lock(&s->mtx); -- if (!sio_start(s->hdl)) { -+ if (!WRAP(sio_start)(s->hdl)) { - pthread_mutex_unlock(&s->mtx); - return NULL; - } -@@ -203,7 +229,7 @@ sndio_mainloop(void *arg) - events |= POLLIN; - if ((s->mode & SIO_PLAY) && pstart < pend) - events |= POLLOUT; -- nfds = sio_pollfd(s->hdl, pfds, events); -+ nfds = WRAP(sio_pollfd)(s->hdl, pfds, events); - - if (nfds > 0) { - pthread_mutex_unlock(&s->mtx); -@@ -213,7 +239,7 @@ sndio_mainloop(void *arg) - continue; - } - -- revents = sio_revents(s->hdl, pfds); -+ revents = WRAP(sio_revents)(s->hdl, pfds); - - if (revents & POLLHUP) { - state = CUBEB_STATE_ERROR; -@@ -221,8 +247,8 @@ sndio_mainloop(void *arg) - } - - if (revents & POLLOUT) { -- n = sio_write(s->hdl, s->pbuf + pstart, pend - pstart); -- if (n == 0 && sio_eof(s->hdl)) { -+ n = WRAP(sio_write)(s->hdl, s->pbuf + pstart, pend - pstart); -+ if (n == 0 && WRAP(sio_eof)(s->hdl)) { - DPR("sndio_mainloop() werr\n"); - state = CUBEB_STATE_ERROR; - break; -@@ -231,8 +257,8 @@ sndio_mainloop(void *arg) - } - - if (revents & POLLIN) { -- n = sio_read(s->hdl, s->rbuf + rstart, rend - rstart); -- if (n == 0 && sio_eof(s->hdl)) { -+ n = WRAP(sio_read)(s->hdl, s->rbuf + rstart, rend - rstart); -+ if (n == 0 && WRAP(sio_eof)(s->hdl)) { - DPR("sndio_mainloop() rerr\n"); - state = CUBEB_STATE_ERROR; - break; -@@ -244,7 +270,7 @@ sndio_mainloop(void *arg) - if (prime > 0 && (s->mode & SIO_REC)) - rstart = rend; - } -- sio_stop(s->hdl); -+ WRAP(sio_stop)(s->hdl); - s->hwpos = s->swpos; - pthread_mutex_unlock(&s->mtx); - s->state_cb(s, s->arg, state); -@@ -254,8 +280,31 @@ sndio_mainloop(void *arg) - /*static*/ int - sndio_init(cubeb **context, char const *context_name) - { -+ void * libsndio = NULL; -+ -+#ifndef DISABLE_LIBSNDIO_DLOPEN -+ libsndio = dlopen("libsndio.so", RTLD_LAZY); -+ if (!libsndio) { -+ DPR("sndio_init(%s) failed dlopen(libsndio.so)\n", context_name); -+ return CUBEB_ERROR; -+ } -+ -+#define LOAD(x) { \ -+ cubeb_##x = dlsym(libsndio, #x); \ -+ if (!cubeb_##x) { \ -+ DPR("sndio_init(%s) failed dlsym(%s)\n", context_name, #x); \ -+ dlclose(libsndio); \ -+ return CUBEB_ERROR; \ -+ } \ -+ } -+ -+ LIBSNDIO_API_VISIT(LOAD); -+#undef LOAD -+#endif -+ - DPR("sndio_init(%s)\n", context_name); - *context = malloc(sizeof(*context)); -+ (*context)->libsndio = libsndio; - (*context)->ops = &sndio_ops; - (void)context_name; - return CUBEB_OK; -@@ -271,6 +320,8 @@ static void - sndio_destroy(cubeb *context) - { - DPR("sndio_destroy()\n"); -+ if (context->libsndio) -+ dlclose(context->libsndio); - free(context); - } - -@@ -323,12 +374,12 @@ sndio_stream_init(cubeb * context, - goto err; - } - s->context = context; -- s->hdl = sio_open(NULL, s->mode, 1); -+ s->hdl = WRAP(sio_open)(NULL, s->mode, 1); - if (s->hdl == NULL) { - DPR("sndio_stream_init(), sio_open() failed\n"); - goto err; - } -- sio_initpar(&wpar); -+ WRAP(sio_initpar)(&wpar); - wpar.sig = 1; - wpar.bits = 16; - switch (format) { -@@ -351,7 +402,7 @@ sndio_stream_init(cubeb * context, - if (s->mode & SIO_PLAY) - wpar.pchan = output_stream_params->channels; - wpar.appbufsz = latency_frames; -- if (!sio_setpar(s->hdl, &wpar) || !sio_getpar(s->hdl, &rpar)) { -+ if (!WRAP(sio_setpar)(s->hdl, &wpar) || !WRAP(sio_getpar)(s->hdl, &rpar)) { - DPR("sndio_stream_init(), sio_setpar() failed\n"); - goto err; - } -@@ -362,7 +413,7 @@ sndio_stream_init(cubeb * context, - DPR("sndio_stream_init() unsupported params\n"); - goto err; - } -- sio_onmove(s->hdl, sndio_onmove, s); -+ WRAP(sio_onmove)(s->hdl, sndio_onmove, s); - s->active = 0; - s->nfr = rpar.round; - s->rbpf = rpar.bps * rpar.rchan; -@@ -400,7 +451,7 @@ sndio_stream_init(cubeb * context, - return CUBEB_OK; - err: - if (s->hdl) -- sio_close(s->hdl); -+ WRAP(sio_close)(s->hdl); - if (s->pbuf) - free(s->pbuf); - if (s->rbuf) -@@ -446,7 +497,7 @@ static void - sndio_stream_destroy(cubeb_stream *s) - { - DPR("sndio_stream_destroy()\n"); -- sio_close(s->hdl); -+ WRAP(sio_close)(s->hdl); - if (s->mode & SIO_PLAY) - free(s->pbuf); - if (s->mode & SIO_REC) -diff --git toolkit/library/moz.build toolkit/library/moz.build -index 8ce595ff96bff..c318e96a1fdfc 100644 ---- toolkit/library/moz.build -+++ toolkit/library/moz.build -@@ -231,9 +231,6 @@ if CONFIG['MOZ_SYSTEM_LIBVPX']: - if not CONFIG['MOZ_TREE_PIXMAN']: - OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS'] - --if CONFIG['MOZ_ALSA']: -- OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] -- - if CONFIG['HAVE_CLOCK_MONOTONIC']: - OS_LIBS += CONFIG['REALTIME_LIBS'] - -@@ -242,11 +239,6 @@ OS_LIBS += CONFIG['ICONV_LIBS'] - if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('cocoa', 'uikit'): - OS_LIBS += CONFIG['TK_LIBS'] - --if CONFIG['OS_ARCH'] == 'OpenBSD': -- OS_LIBS += [ -- 'sndio', -- ] -- - if CONFIG['MOZ_ENABLE_DBUS']: - OS_LIBS += CONFIG['MOZ_DBUS_GLIB_LIBS'] - Property changes on: branches/2019Q4/www/firefox/files/patch-cubeb-dlopen ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: branches/2019Q4/www/firefox/files/patch-Makefile.in =================================================================== --- branches/2019Q4/www/firefox/files/patch-Makefile.in (nonexistent) +++ branches/2019Q4/www/firefox/files/patch-Makefile.in (revision 518860) @@ -0,0 +1,22 @@ +Don't force mach after https://bugzilla.mozilla.org/show_bug.cgi?id=1496746 + +diff --git Makefile.in Makefile.in +index 407e373573fb..16b8bb162d39 100644 +--- Makefile.in ++++ Makefile.in +@@ -55,15 +55,8 @@ $(RUNNABLE_TIERS) binaries:: CLOBBER $(BUILD_BACKEND_FILES) + endif + endif + +-ifdef JS_STANDALONE + .PHONY: CLOBBER + CLOBBER: +-else +-CLOBBER: $(topsrcdir)/CLOBBER +- @echo 'STOP! The CLOBBER file has changed.' +- @echo 'Please run the build through "mach build".' +- @exit 1 +-endif + + install_manifests := \ + $(addprefix dist/,branding include public private xpi-stage) \ Property changes on: branches/2019Q4/www/firefox/files/patch-Makefile.in ___________________________________________________________________ Added: fbsd:nokeywords ## -0,0 +1 ## +yes \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Index: branches/2019Q4/www/firefox/files/patch-bug847568 =================================================================== --- branches/2019Q4/www/firefox/files/patch-bug847568 (revision 518859) +++ branches/2019Q4/www/firefox/files/patch-bug847568 (revision 518860) @@ -1,257 +1,258 @@ # Allow building against system-wide graphite2/harfbuzz. diff --git config/system-headers.mozbuild config/system-headers.mozbuild index 7620b4d00623..09d3db5ca8c0 100644 --- config/system-headers.mozbuild +++ config/system-headers.mozbuild -@@ -1295,6 +1295,19 @@ if CONFIG['MOZ_ENABLE_LIBPROXY']: +@@ -1299,6 +1299,19 @@ if CONFIG['MOZ_ENABLE_LIBPROXY']: 'proxy.h', ] +if CONFIG['MOZ_SYSTEM_GRAPHITE2']: + system_headers += [ + 'graphite2/Font.h', + 'graphite2/Segment.h', + ] + +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + system_headers += [ + 'harfbuzz/hb-glib.h', + 'harfbuzz/hb-ot.h', + 'harfbuzz/hb.h', + ] + if CONFIG['MOZ_SYSTEM_LIBVPX']: system_headers += [ 'vpx_mem/vpx_mem.h', diff --git dom/base/moz.build dom/base/moz.build index 8e19020315ae..2fcdbb6f7b42 100644 --- dom/base/moz.build +++ dom/base/moz.build -@@ -539,6 +539,9 @@ if CONFIG['MOZ_BUILD_APP'] in ['browser', 'mobile/andr +@@ -543,6 +543,9 @@ if CONFIG['MOZ_BUILD_APP'] in ['browser', 'mobile/android', 'xulrunner']: if CONFIG['MOZ_X11']: CXXFLAGS += CONFIG['TK_CFLAGS'] +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + - GENERATED_FILES += [ - 'PropertyUseCounterMap.inc', - 'UseCounterList.h', + GeneratedFile('UseCounterList.h', script='gen-usecounters.py', + entry_point='use_counter_list', inputs=['UseCounters.conf']) + diff --git gfx/graphite2/moz-gr-update.sh gfx/graphite2/moz-gr-update.sh index faaab1b17971..04eff5f09882 100644 --- gfx/graphite2/moz-gr-update.sh +++ gfx/graphite2/moz-gr-update.sh @@ -1,6 +1,7 @@ #!/bin/bash # Script used to update the Graphite2 library in the mozilla source tree +# and bump version for --with-system-graphite2 # This script lives in gfx/graphite2, along with the library source, # but must be run from the top level of the mozilla-central tree. @@ -37,12 +38,16 @@ echo "See" $0 "for update procedure." >> gfx/graphite2/README.mozilla #find gfx/graphite2/ -name "*.cpp" -exec perl -p -i -e "s///;s/Windows.h/windows.h/;" {} \; #find gfx/graphite2/ -name "*.h" -exec perl -p -i -e "s///;s/Windows.h/windows.h/;" {} \; +# chase version for --with-system-graphite2 +perl -p -i -e "s/[0-9]+\,[0-9]+\,[0-9]+/$RELEASE/ and tr/./,/ \ + if /GR2_VERSION_REQUIRE/" old-configure.in + # summarize what's been touched echo Updated to $RELEASE. echo Here is what changed in the gfx/graphite2 directory: echo -hg stat gfx/graphite2 +hg stat old-configure.in gfx/graphite2 echo echo If gfx/graphite2/src/files.mk has changed, please make corresponding diff --git gfx/harfbuzz/README-mozilla gfx/harfbuzz/README-mozilla index 22c76a7df020..a01490bd49ee 100644 --- gfx/harfbuzz/README-mozilla +++ gfx/harfbuzz/README-mozilla @@ -15,3 +15,8 @@ from within the gfx/harfbuzz directory. If the collection of source files changes, manual updates to moz.build may be needed as we don't use the upstream makefiles. + +The in-tree copy may be omitted during build by --with-system-harfbuzz. +Make sure to keep pkg-config version check within toolkit/moz.configure in sync +with checkout version or increment latest tag by one if it's not based +on upstream release. diff --git gfx/moz.build gfx/moz.build index 771f652e837a..3b358d84e384 100644 --- gfx/moz.build +++ gfx/moz.build @@ -13,6 +13,12 @@ with Files('wr/**'): if CONFIG['MOZ_TREE_CAIRO']: DIRS += ['cairo'] +if not CONFIG['MOZ_SYSTEM_GRAPHITE2']: + DIRS += ['graphite2/src' ] + +if not CONFIG['MOZ_SYSTEM_HARFBUZZ']: + DIRS += ['harfbuzz/src'] + DIRS += [ '2d', 'ycbcr', @@ -21,8 +27,6 @@ DIRS += [ 'qcms', 'gl', 'layers', - 'graphite2/src', - 'harfbuzz/src', 'ots/src', 'thebes', 'ipc', diff --git gfx/skia/generate_mozbuild.py gfx/skia/generate_mozbuild.py index e06ae3457a47..93faa61594a3 100755 --- gfx/skia/generate_mozbuild.py +++ gfx/skia/generate_mozbuild.py @@ -117,6 +117,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'clang-cl'): '-Wno-unused-private-field', ] +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk', 'android'): CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] diff --git gfx/skia/moz.build gfx/skia/moz.build index 2118677ca3a8..e4978b413784 100644 --- gfx/skia/moz.build +++ gfx/skia/moz.build @@ -493,6 +493,9 @@ if CONFIG['CC_TYPE'] in ('clang', 'clang-cl'): '-Wno-unused-private-field', ] +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk', 'android'): CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS'] CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS'] diff --git gfx/thebes/moz.build gfx/thebes/moz.build index 56f1b9fe3f4b..0ac1100b0df3 100644 --- gfx/thebes/moz.build +++ gfx/thebes/moz.build @@ -284,7 +284,13 @@ if CONFIG['MOZ_WAYLAND']: LOCAL_INCLUDES += CONFIG['SKIA_INCLUDES'] -DEFINES['GRAPHITE2_STATIC'] = True +if CONFIG['MOZ_SYSTEM_GRAPHITE2']: + CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS'] +else: + DEFINES['GRAPHITE2_STATIC'] = True + +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] if CONFIG['CC_TYPE'] == 'clang': # Suppress warnings from Skia header files. diff --git intl/unicharutil/util/moz.build intl/unicharutil/util/moz.build index cb1233c56d7e..06fb1f9f174b 100644 --- intl/unicharutil/util/moz.build +++ intl/unicharutil/util/moz.build @@ -25,4 +25,7 @@ UNIFIED_SOURCES += [ 'nsUnicodeProperties.cpp', ] +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] + FINAL_LIBRARY = 'xul' diff --git netwerk/dns/moz.build netwerk/dns/moz.build index 79c26e3e7001..c4d93bc5f7dc 100644 --- netwerk/dns/moz.build +++ netwerk/dns/moz.build -@@ -90,3 +90,6 @@ USE_LIBS += ['icu'] +@@ -86,3 +86,6 @@ USE_LIBS += ['icu'] if CONFIG['CC_TYPE'] in ('clang', 'gcc'): CXXFLAGS += ['-Wno-error=shadow'] + +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS'] diff --git old-configure.in old-configure.in index 95a58b634593..b614eef85c89 100644 --- old-configure.in +++ old-configure.in -@@ -2665,5 +2665,26 @@ dnl ================================================== +@@ -2639,6 +2639,27 @@ dnl ======================================================== + AC_SUBST(MOZ_LINUX_32_SSE2_STARTUP_ERROR) - dnl ======================================================== ++dnl ======================================================== +dnl Check for graphite2 +dnl ======================================================== +if test -n "$MOZ_SYSTEM_GRAPHITE2"; then + dnl graphite2.pc has bogus version, check manually + _SAVE_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS $MOZ_GRAPHITE2_CFLAGS" + AC_TRY_COMPILE([ #include + #define GR2_VERSION_REQUIRE(major,minor,bugfix) \ + ( GR2_VERSION_MAJOR * 10000 + GR2_VERSION_MINOR \ + * 100 + GR2_VERSION_BUGFIX >= \ + (major) * 10000 + (minor) * 100 + (bugfix) ) + ], [ + #if !GR2_VERSION_REQUIRE(1,3,12) + #error "Insufficient graphite2 version." + #endif + ], [], + [AC_MSG_ERROR([--with-system-graphite2 requested but no working libgraphite2 found])]) + CFLAGS=$_SAVE_CFLAGS +fi + -+dnl ======================================================== + dnl ======================================================== dnl Check for pixman and cairo dnl ======================================================== diff --git toolkit/library/moz.build toolkit/library/moz.build index 24f940e1ed7e..079a575adec3 100644 --- toolkit/library/moz.build +++ toolkit/library/moz.build -@@ -254,6 +254,12 @@ if CONFIG['MOZ_SYSTEM_PNG']: +@@ -248,6 +248,12 @@ if CONFIG['MOZ_SYSTEM_PNG']: if CONFIG['MOZ_SYSTEM_WEBP']: OS_LIBS += CONFIG['MOZ_WEBP_LIBS'] +if CONFIG['MOZ_SYSTEM_GRAPHITE2']: + OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS'] + +if CONFIG['MOZ_SYSTEM_HARFBUZZ']: + OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS'] + if CONFIG['MOZ_SYSTEM_LIBEVENT']: OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS'] diff --git toolkit/moz.configure toolkit/moz.configure index 9297e4d6f501..d8e273887e4b 100644 --- toolkit/moz.configure +++ toolkit/moz.configure -@@ -927,6 +927,25 @@ add_old_configure_assignment('FT2_LIBS', +@@ -937,6 +937,25 @@ add_old_configure_assignment('FT2_LIBS', add_old_configure_assignment('FT2_CFLAGS', ft2_info.cflags) +# Graphite2 +# ============================================================== +option('--with-system-graphite2', + help="Use system graphite2 (located with pkgconfig)") + +system_graphite2 = pkg_check_modules('MOZ_GRAPHITE2', 'graphite2', + when='--with-system-graphite2') + +set_config('MOZ_SYSTEM_GRAPHITE2', depends_if(system_graphite2)(lambda _: True)) + +# HarfBuzz +# ============================================================== +option('--with-system-harfbuzz', + help="Use system harfbuzz (located with pkgconfig)") + -+system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 2.6.1', ++system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 2.6.2', + when='--with-system-harfbuzz') + +set_config('MOZ_SYSTEM_HARFBUZZ', depends_if(system_harfbuzz)(lambda _: True)) # Remote agent (part of CDP based remote protocol) # ============================================================== Index: branches/2019Q4 =================================================================== --- branches/2019Q4 (revision 518859) +++ branches/2019Q4 (revision 518860) Property changes on: branches/2019Q4 ___________________________________________________________________ Modified: svn:mergeinfo ## -0,0 +0,1 ## Merged /head:r518439,518660,518854