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