1415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner/*
2415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner * Copyright (C) 2010 The Android Open Source Project
3415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner *
4415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner * Licensed under the Apache License, Version 2.0 (the "License");
5415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner * you may not use this file except in compliance with the License.
6415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner * You may obtain a copy of the License at
7415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner *
8415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner *      http://www.apache.org/licenses/LICENSE-2.0
9415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner *
10415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner * Unless required by applicable law or agreed to in writing, software
11415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner * distributed under the License is distributed on an "AS IS" BASIS,
12415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner * See the License for the specific language governing permissions and
14415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner * limitations under the License.
15415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner */
16415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner/* this file is used to test that we can use libesd with lazy dynamic linking */
17415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner
18415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner#include <esd.h>
19415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner#include <dlfcn.h>
20415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner#include <stdio.h>
21415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner
22415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner#define  D(...)  fprintf(stderr,__VA_ARGS__)
23415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner#define  STRINGIFY(x)  _STRINGIFY(x)
24415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner#define _STRINGIFY(x)  #x
25415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner
26415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner#define  PULSEAUDIO_SYMBOLS \
27415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    PULSEAUDIO_SYMBOLS(pa_simple*,pa_simple_new,(const char* server,const char* name, pa_stream_direction_t dir, const char* dev, const char* stream_name, const pa_sample_spec* ss, const pa_channel_map* map, const pa_buffer_attr *attr, int *error)) \
28415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    PULSEAUDIO_SYMBOLS(void,pa+simple_free,(pa_simple* s))\
29415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    PULSEAUDIO_SYMBOLS(int,pa_simple_write,(pa_simple* s, const void* data, size_t bytes, int* error))\
30415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    PULSEAUDIO_SYMBOLS(int,pa_simple_read,(pa_simple* s,void* data, size_t bytes, int* error))\
31415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    PULSEAUDIO_SYMBOLS(const char*,pa_strerror,(int error))
32415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner
33415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner/* define pointers to library functions we're going to use */
34415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner#define  PULSEAUDIO_FUNCTION(ret,name,sig)   \
35415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    static ret  (*func_ ## name)sig;
36415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner
37415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' TurnerPULSEAUDIO_SYMBOLS
38415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner
39415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner#undef  PULSEAUDIO_FUNCTION
40415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turnerstatic void*    pa_lib;
41415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner
42c005246ed03de874fdc432073ba8e5e8ebfed922David 'Digit' Turnerint main( void )
43415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner{
44415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    int  fd;
45415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner
46415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    pa_lib = dlopen( "libpulse-simple.so", RTLD_NOW );
47415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    if (pa_lib == NULL)
48415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner        pa_lib = dlopen( "libpulse-simple.so.0", RTLD_NOW );
49415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner
50415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    if (pa_lib == NULL) {
51415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner        D("could not find libpulse on this system");
52415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner        return 1;
53415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    }
54415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner
55415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner#undef  PULSEAUDIO_FUNCTION
56415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner#define PULSEAUDIO_FUNCTION(ret,name,sig)                                               \
57415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    do {                                                                         \
58415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner        (func_ ##name) = dlsym( pa_lib, STRINGIFY(name) );                      \
59415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner        if ((func_##name) == NULL) {                                             \
60415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner            D("could not find %s in libpulse\n", STRINGIFY(name));   \
61415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner            return 1;                                               \
62415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner        }                                                                        \
63415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    } while (0);
64415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner
65415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    PULSEAUDIO_SYMBOLS
66415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner
67415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner    return 0;
68415a4b1f54f896bf28abe1beb2d8005a3d98f531David 'Digit' Turner}
69