#include "config.h"
-#if HAVE_STDLIB_H
+#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
-#if HAVE_STDIO_H
+#ifdef HAVE_STDIO_H
#include <stdio.h>
#endif
#include <limits.h> // for CHAR_BIT, in C99 standard
#endif
+#ifdef HAVE_STDARG_H
+#include <stdarg.h>
+#endif
+
#ifdef HAVE_ACCELERATE
#define HAVE_ATLAS 1
#include <Accelerate/Accelerate.h>
#ifdef HAVE_ACCELERATE
#include <Accelerate/Accelerate.h>
-#if !HAVE_AUBIO_DOUBLE
+#ifndef HAVE_AUBIO_DOUBLE
#define aubio_vDSP_mmov vDSP_mmov
#define aubio_vDSP_vmul vDSP_vmul
#define aubio_vDSP_vfill vDSP_vfill
#endif /* HAVE_ACCELERATE */
#ifdef HAVE_ATLAS
-#if !HAVE_AUBIO_DOUBLE
+#ifndef HAVE_AUBIO_DOUBLE
#define aubio_catlas_set catlas_sset
#define aubio_cblas_copy cblas_scopy
#define aubio_cblas_swap cblas_sswap
AUBIO_FAIL = 1
} aubio_status;
+/* Logging */
+
+#include "utils/log.h"
+
+/** internal logging function, defined in utils/log.c */
+uint_t aubio_log(sint_t level, const char_t *fmt, ...);
+
#ifdef HAVE_C99_VARARGS_MACROS
-#define AUBIO_ERR(...) fprintf(stderr, "AUBIO ERROR: " __VA_ARGS__)
-#define AUBIO_MSG(...) fprintf(stdout, __VA_ARGS__)
-#define AUBIO_DBG(...) fprintf(stderr, __VA_ARGS__)
-#define AUBIO_WRN(...) fprintf(stderr, "AUBIO WARNING: " __VA_ARGS__)
+#define AUBIO_ERR(...) aubio_log(AUBIO_LOG_ERR, "AUBIO ERROR: " __VA_ARGS__)
+#define AUBIO_MSG(...) aubio_log(AUBIO_LOG_MSG, __VA_ARGS__)
+#define AUBIO_DBG(...) aubio_log(AUBIO_LOG_DBG, __VA_ARGS__)
+#define AUBIO_WRN(...) aubio_log(AUBIO_LOG_WRN, "AUBIO WARNING: " __VA_ARGS__)
#else
-#define AUBIO_ERR(format, args...) fprintf(stderr, "AUBIO ERROR: " format , ##args)
-#define AUBIO_MSG(format, args...) fprintf(stdout, format , ##args)
-#define AUBIO_DBG(format, args...) fprintf(stderr, format , ##args)
-#define AUBIO_WRN(format, args...) fprintf(stderr, "AUBIO WARNING: " format, ##args)
+#define AUBIO_ERR(format, args...) aubio_log(stderr, "AUBIO ERROR: " format , ##args)
+#define AUBIO_MSG(format, args...) aubio_log(stdout, format , ##args)
+#define AUBIO_DBG(format, args...) aubio_log(stderr, format , ##args)
+#define AUBIO_WRN(format, args...) aubio_log(stderr, "AUBIO WARNING: " format, ##args)
#endif
#define AUBIO_ERROR AUBIO_ERR
#define AUBIO_QUIT(_s) exit(_s)
#define AUBIO_SPRINTF sprintf
+#define AUBIO_MAX_SAMPLERATE (192000*8)
+#define AUBIO_MAX_CHANNELS 1024
+
/* pi and 2*pi */
#ifndef M_PI
#define PI (3.14159265358979323846)
#endif
#define TWO_PI (PI*2.)
+#ifndef PATH_MAX
+#define PATH_MAX 1024
+#endif
+
/* aliases to math.h functions */
#if !HAVE_AUBIO_DOUBLE
#define EXP expf
#define LOG logf
#define FLOOR floorf
#define CEIL ceilf
+#define ATAN atanf
#define ATAN2 atan2f
#else
#define EXP exp
#define LOG log
#define FLOOR floor
#define CEIL ceil
+#define ATAN atan
#define ATAN2 atan2
#endif
#define ROUND(x) FLOOR(x+.5)
#define IMAG cimagf
#endif
+/* avoid unresolved symbol with msvc 9 */
+#if defined(_MSC_VER) && (_MSC_VER < 1900)
+#define isnan _isnan
+#endif
+
/* handy shortcuts */
#define DB2LIN(g) (POW(10.0,(g)*0.05f))
#define LIN2DB(v) (20.0*LOG10(v))
#define UNUSED
#endif
+/* are we using gcc -std=c99 ? */
+#if defined(__STRICT_ANSI__)
+#define strnlen(a,b) MIN(strlen(a),b)
+#if !HAVE_AUBIO_DOUBLE
+#define floorf floor
+#endif
+#endif /* __STRICT_ANSI__ */
+
#endif /* AUBIO_PRIV_H */