From fa620ffc956953b39bb683abb2679bbbfc364915 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Fri, 29 Nov 2013 09:01:14 +0100 Subject: build: reimplement the OSS checks using a more declarative approach The OSS checks were a big mess and quite buggy. This reimplementes them using a declarative approach and clearly distinguishing between the various OSS implementations. The code should now almost be auto-documenting. We currently support the following implementations of OSS: * platform-specific (with `sys/soundcard.h`) * SunAudio (default on NetBSD and useable on OpenBSD even if we have sndio support there). * 4Front (default on FreeBSD) Since now each OSS check also checks for the appropriate soundcard header, remove the old soundcard check. Many thanks to @bugmen0t for in depth info about all the BSDs. Check #380 and #359 for more info on this commit. --- waftools/checks/custom.py | 59 ++++++++------------------------- waftools/fragments/oss_audio.c | 6 ---- waftools/fragments/oss_audio_header.c | 13 -------- waftools/fragments/oss_audio_sunaudio.c | 6 ++++ 4 files changed, 20 insertions(+), 64 deletions(-) delete mode 100644 waftools/fragments/oss_audio_header.c create mode 100644 waftools/fragments/oss_audio_sunaudio.c (limited to 'waftools') diff --git a/waftools/checks/custom.py b/waftools/checks/custom.py index 6247d00353..fee56134b4 100644 --- a/waftools/checks/custom.py +++ b/waftools/checks/custom.py @@ -1,6 +1,8 @@ from waftools.checks.generic import * +from waflib import Utils +import os -__all__ = ["check_pthreads", "check_iconv", "check_lua", "check_oss"] +__all__ = ["check_pthreads", "check_iconv", "check_lua", "check_oss_4front"] pthreads_program = load_fragment('pthreads.c') @@ -72,56 +74,23 @@ def check_lua(ctx, dependency_identifier): return True return False -# from here on there is the OSS check.. just stop reading here unless you want -# to die inside a little -def __fail_oss_check__(ctx): - ctx.define('PATH_DEV_DSP', '') - ctx.define('PATH_DEV_MIXER', '') - return False - -def __get_osslibdir__(): - from waflib import Utils +def __get_osslibdir(): cmd = ['sh', '-c', '. /etc/oss.conf && echo $OSSLIBDIR'] p = Utils.subprocess.Popen(cmd, stdin=Utils.subprocess.PIPE, stdout=Utils.subprocess.PIPE, stderr=Utils.subprocess.PIPE) return p.communicate()[0].decode().rstrip() -def __get_osscflags__(): - import os - osscflags = '' - osslibdir = __get_osslibdir__() - if osslibdir: - ossincdir = os.path.join(osslibdir, 'include') - soundcard_h = os.path.join(ossincdir, 'sys', 'soundcard.h') - if os.path.exists(soundcard_h): - osscflags = '-I{0}'.format(ossincdir) - return osscflags - -def __check_oss_headers__(ctx, dependency_identifier): - fn = check_cc(fragment=load_fragment('oss_audio_header.c'), - use='soundcard', cflags=__get_osscflags__()) - fn(ctx, dependency_identifier) - return True - -def __check_oss_bsd__(ctxdependency_identifier): - # add the oss audio library through a check - ctx.define('PATH_DEV_DSP', '/dev/sound') - if check_cc(lib='ossaudio')(ctx, dependency_identifier): - return True - else: - return __fail_oss_check__(ctx) +def check_oss_4front(ctx, dependency_identifier): + oss_libdir = __get_osslibdir() -def check_oss(ctx, dependency_identifier): - func = check_cc(fragment=load_fragment('oss_audio.c'), use='soundcard', - cflags=__get_osscflags__()) - if func(ctx, dependency_identifier): - ctx.define('PATH_DEV_DSP', '/dev/dsp') - ctx.define('PATH_DEV_MIXER', '/dev/mixer') + soundcard_h = os.path.join(oss_libdir, "include/sys/soundcard.h") + include_dir = os.path.join(oss_libdir, "include") - if ctx.env.DEST_OS in ['openbsd', 'netbsd']: - return __check_oss_bsd_library__(ctx, dependency_identifier) - else: - return __check_oss_headers__(ctx, dependency_identifier) + fn = check_cc(header_name=soundcard_h, + defines=['PATH_DEV_DSP="/dev/dsp"', + 'PATH_DEV_MIXER="/dev/mixer"'], + cflags='-I{0}'.format(include_dir), + fragment=load_fragment('oss_audio.c')) - return __fail_oss_check__(ctx) + return fn(ctx, dependency_identifier) diff --git a/waftools/fragments/oss_audio.c b/waftools/fragments/oss_audio.c index e23979da97..c1a5488f97 100644 --- a/waftools/fragments/oss_audio.c +++ b/waftools/fragments/oss_audio.c @@ -1,10 +1,4 @@ -#if HAVE_SOUNDCARD_H -#include -#endif - -#if HAVE_SYS_SOUNDCARD_H #include -#endif int main(int argc, char **argv) { return SNDCTL_DSP_SETFRAGMENT; diff --git a/waftools/fragments/oss_audio_header.c b/waftools/fragments/oss_audio_header.c deleted file mode 100644 index 980eb69215..0000000000 --- a/waftools/fragments/oss_audio_header.c +++ /dev/null @@ -1,13 +0,0 @@ -#if HAVE_SOUNDCARD_H -#include -#endif - -#if HAVE_SYS_SOUNDCARD_H -#include -#endif - -#ifdef OPEN_SOUND_SYSTEM -int main(void) {{ return 0; }} -#else -#error Not the real thing -#endif diff --git a/waftools/fragments/oss_audio_sunaudio.c b/waftools/fragments/oss_audio_sunaudio.c new file mode 100644 index 0000000000..d5208f558c --- /dev/null +++ b/waftools/fragments/oss_audio_sunaudio.c @@ -0,0 +1,6 @@ +#include + +int main(int argc, char **argv) { + return SNDCTL_DSP_SETFRAGMENT; +} + -- cgit v1.2.3