1 --- esound-0.2.22.orig/configure.in
2 +++ esound-0.2.22/configure.in
4 AC_CHECK_LIB(rt,nanosleep,,[AC_CHECK_LIB(posix4,nanosleep)])])
6 AC_CHECK_FUNC(inet_aton,,[AC_CHECK_LIB(resolv,inet_aton)])
7 +AC_CHECK_FUNCS(strtok_r)
9 case $ac_cv_func_nanosleep/$ac_cv_lib_rt_nanosleep/$ac_cv_lib_posix4_nanosleep in
11 --- esound-0.2.22.orig/esddsp.in
12 +++ esound-0.2.22/esddsp.in
14 exec_prefix=@exec_prefix@
17 -export LD_PRELOAD_PATH=${libdir}
18 -export LD_PRELOAD='libesddsp.so libesd.so'
19 +# Don't try to connect to esd if it isn't running
20 +#if [ ! "x`pidof esd`" = "x" ]; then
21 + export LD_PRELOAD="${libdir}/libesddsp.so.0:${libdir}/libesd.so.0"
24 # invoke the program with the args given
26 --- esound-0.2.22.orig/esddsp.c
27 +++ esound-0.2.22/esddsp.c
30 if (!strcmp (pathname, "/dev/dsp"))
32 +/* We shouldn't need this with Unix domain sockets, plus there
33 + * is a better test in esdlib.c - for more info see:
34 + * http://www.debian.org/Bugs/db/53/53602.html
35 + * commented out by bma@debian.org 1999-12-29 */
37 if (!getenv ("ESPEAKER"))
41 if ((ret = (*func) (pathname, flags, mode)) >= 0)
46 DPRINTF ("hijacking /dev/dsp open, and taking it to esd...\n");
48 --- esound-0.2.22.orig/esdlib.c
49 +++ esound-0.2.22/esdlib.c
51 /* ebm - I think this is an Inherently Bad Idea, but will leave it
52 alone until I can get a good look at it */
53 if(! (host && *host)) {
54 - int childpid, mypid;
55 + pid_t childpid, mypid;
56 struct sigaction sa, sa_orig;
57 struct sigaction sa_alarm, sa_orig_alarm;
63 - cmd = malloc(sizeof("esd ") + esd_spawn_options?strlen(esd_spawn_options):0);
66 - sprintf(cmd, "esd %s -spawnpid %d", esd_spawn_options?esd_spawn_options:"", mypid);
67 + cmd = malloc(sizeof("esd -spawnpid ") + esd_spawn_options?strlen(esd_spawn_options):0 + 10);
68 + sprintf(cmd, "esd %s -spawnpid %u", esd_spawn_options?esd_spawn_options:"", mypid);
70 execl("/bin/sh", "/bin/sh", "-c", cmd, NULL);
72 --- esound-0.2.22.orig/esd_config.c
73 +++ esound-0.2.22/esd_config.c
77 #define LINEBUF_SIZE 1024
80 +#define DO_STRTOK(S,DELIM) strtok_r(S,DELIM,&strtok_state)
81 +char strtok_state[LINEBUF_SIZE];
83 +#define DO_STRTOK(S,DELIM) strtok(S,DELIM)
86 int esd_no_spawn=1; /* If we can't find even the system config file,
87 things are screwed up - don't try to make things
93 - key = strtok(aline, "=");
94 + key = DO_STRTOK(aline, "=");
96 - value = strtok(NULL, "=");
97 + value = DO_STRTOK(NULL, "=");
98 if(!value) value = "";
100 if(!strcasecmp(key, "auto_spawn"))
101 --- esound-0.2.22.orig/audio.c
102 +++ esound-0.2.22/audio.c
105 #include <sys/ioctl.h>
109 /*******************************************************************/
112 /* dump a buffer to the sound device */
113 int esd_audio_write( void *buffer, int buf_size )
115 - return write( esd_audio_fd, buffer, buf_size );
116 + ssize_t nwrite=0, pos=0;
119 + while (counter < 100 && (nwrite = write( esd_audio_fd, buffer+pos, buf_size-pos )) != buf_size-pos ) {
120 + if ( nwrite > 0 ) {
122 + } else if ( nwrite == -1 ) {
123 + if ( errno == EAGAIN ) {
135 --- esound-0.2.22.orig/audio_alsa.c
136 +++ esound-0.2.22/audio_alsa.c
138 static snd_pcm_format_t alsa_format;
139 static snd_pcm_channel_info_t alsa_pinfo;
140 static int alsa_direction = SND_PCM_OPEN_PLAYBACK;
141 -static int alsa_mode = SND_PCM_MODE_BLOCK;
142 +static int alsa_mode = SND_PCM_MODE_STREAM;
143 static int alsa_channel = SND_PCM_CHANNEL_PLAYBACK;
149 struct snd_ctl_hw_info hw_info;
150 - static int frag_size = 4*1024;
153 - static int frag_count = 0;
155 - static int frag_count = 2;
159 snd_pcm_channel_params_t params;
162 snd_ctl_t *ctl_handle;
164 + if ( esd_audio_device ) {
165 + card = atoi( esd_audio_device );
169 fprintf( stderr, "Using ALSA %s\n", SND_LIB_VERSION_STR );
172 fprintf( stderr, "esd: Found %d card(s)\n", nbr_cards );
175 - for ( card=0; ( card < nbr_cards ) && (alsa_sound_handle == NULL); card++ ) {
176 + for ( ; ( card < nbr_cards ) && (alsa_sound_handle == NULL); card++ ) {
178 fprintf( stderr, "esd: trying alsa card %d\n", card );
183 memset(¶ms, 0, sizeof(params));
184 - params.buf.block.frag_size = frag_size;
185 - params.buf.block.frags_max = frag_count;
186 - params.buf.block.frags_min = 1;
187 + params.buf.stream.queue_size = ESD_BUF_SIZE;
188 + params.buf.stream.fill = SND_PCM_FILL_NONE;
189 params.channel = alsa_channel;
190 params.mode = alsa_mode;
191 params.start_mode = SND_PCM_START_FULL;
192 @@ -343,43 +339,44 @@
193 #define ARCH_esd_audio_write
194 int esd_audio_write( void *buffer, int buf_size )
197 + ssize_t nwrite=0, pos=0;
201 snd_pcm_channel_status_t status;
205 - i = snd_pcm_write( alsa_sound_handle, buffer, buf_size);
208 - fprintf( stderr, "error: %s: in snd_pcm_write\n", snd_strerror(i) );
212 + while (counter < 100 && (nwrite = snd_pcm_write( alsa_sound_handle, buffer+pos, buf_size-pos )) != buf_size-pos ) {
213 + if ( nwrite > 0 ) {
215 + } else if ( nwrite < 0 ) {
216 + if ( errno == EAGAIN ) {
221 - status.channel = SND_PCM_CHANNEL_PLAYBACK;
222 - ret = snd_pcm_channel_status( alsa_sound_handle, &status );
224 - if( driver_trace ) fprintf( stderr, "error: %s: in snd_pcm_channel_status\n", snd_strerror(ret) );
227 - if( status.underrun ) {
228 - snd_pcm_channel_flush( alsa_sound_handle, alsa_channel );
229 - snd_pcm_playback_prepare( alsa_sound_handle );
230 - snd_pcm_write( alsa_sound_handle, buffer, buf_size );
231 - if (snd_pcm_channel_status( alsa_sound_handle, &status ) < 0 && driver_trace) {
232 - fprintf(stderr, "ALSA: could not get channel status. giving up\n");
235 - if (status.underrun) {
236 - if( driver_trace ) fprintf(stderr, "ALSA: write error. giving up\n");
240 + status.channel = alsa_channel;
241 + ret = snd_pcm_channel_status( alsa_sound_handle, &status );
243 + if( driver_trace ) fprintf( stderr, "error: %s: in snd_pcm_channel_status\n", snd_strerror(ret) );
246 + if( status.status == SND_PCM_STATUS_UNDERRUN ) {
248 + snd_pcm_channel_flush( alsa_sound_handle, alsa_channel );
249 + snd_pcm_playback_prepare( alsa_sound_handle );
256 #endif /* ALSA_5_API */
265 #define ARCH_esd_audio_flush
266 --- esound-0.2.22.orig/esd.c
267 +++ esound-0.2.22/esd.c
270 /* set the connect information */
271 socket_unix.sun_family = AF_UNIX;
272 - strncpy(socket_unix.sun_path, ESD_UNIX_SOCKET_NAME, sizeof(socket_unix.sun_path));
273 + strncpy(socket_unix.sun_path, ESD_UNIX_SOCKET_NAME, sizeof(socket_unix.sun_path)-1);
274 if ( connect( socket_out,
275 (struct sockaddr *) &socket_unix, SUN_LEN(&socket_unix) ) < 0 )
280 /* block while waiting for more clients and new data */
281 - wait_for_clients_and_data( listen_socket );
283 - /* accept new connections */
284 - get_new_clients( listen_socket );
286 + if ( wait_for_clients_and_data( listen_socket ) ||
287 + esd_playing_samples || esd_recorder_list ) {
289 if ((esd_clients_list == NULL) && (!first) && (esd_terminate)) {
290 /* fprintf(stderr, "No clients!\n");*/
292 /* awaken if on autostandby and doing anything */
293 if ( esd_on_autostandby && length && !esd_forced_standby ) {
294 ESDBG_TRACE( printf( "stuff to play, waking up.\n" ); );
295 - esd_server_resume();
296 + if ( !esd_server_resume()) {
301 /* we handle this even when length == 0 because a filter could have
303 restrain.tv_usec *= 1000L; /* convert to microseconds */
304 select( 0, 0, 0, 0, &restrain );
310 --- esound-0.2.22.orig/clients.c
311 +++ esound-0.2.22/clients.c
314 /*******************************************************************/
316 +extern int esd_use_tcpip;
318 /* the list of the currently connected clients */
319 esd_client_t *esd_clients_list;
320 @@ -129,17 +130,20 @@
322 fd = accept( listen, (struct sockaddr*) &incoming, &size_in );
324 - port = ntohs( incoming.sin_port );
325 - addr = ntohl( incoming.sin_addr.s_addr );
328 + if (esd_use_tcpip) {
329 + port = ntohs( incoming.sin_port );
330 + addr = ntohl( incoming.sin_addr.s_addr );
332 printf( "(%02d) new client from: %03u.%03u.%03u.%03u:%05d\n",
333 fd, (unsigned int) addr >> 24,
334 (unsigned int) (addr >> 16) % 256,
335 (unsigned int) (addr >> 8) % 256,
336 - (unsigned int) addr % 256, port ); );
337 + (unsigned int) addr % 256, port );
343 struct request_info req;
344 struct servent *serv;
346 "paused=%d, samples=%d, auto=%d, standby=%d, record=%d, ready=%d\n",
347 is_paused_here, esd_playing_samples,
348 esd_autostandby_secs, esd_on_standby,
349 - (esd_recorder != 0), ready ); );
350 + (esd_recorder_list != 0), ready ); );
352 /* TODO: return ready, and do this in esd.c */
360 + if ( FD_ISSET(listen, &rd_fds ) ) {
361 + get_new_clients( listen );
365 --- esound-0.2.22.orig/mix.c
366 +++ esound-0.2.22/mix.c
368 rd_dat = wr_dat * player->rate / esd_audio_rate;
369 rd_dat /= 2; /* adjust for mono */
371 - sample = source_data_uc[ rd_dat++ ];
372 + sample = source_data_uc[ rd_dat ];
373 sample -= 127; sample *= 256;
375 mixed_buffer[ wr_dat++ ] += sample;
378 rd_dat = wr_dat * player->rate / esd_audio_rate;
380 - sample = source_data_uc[ rd_dat++ ];
381 + sample = source_data_uc[ rd_dat ];
382 sample -= 127; sample *= 256;
384 mixed_buffer[ wr_dat++ ] += sample;
386 rd_dat = wr_dat * player->rate / esd_audio_rate;
387 rd_dat /= 2; /* adjust for mono */
389 - sample = source_data_ss[ rd_dat++ ];
390 + sample = source_data_ss[ rd_dat ];
392 mixed_buffer[ wr_dat++ ] += sample;
393 mixed_buffer[ wr_dat++ ] += sample;
395 while ( wr_dat < length/sizeof(signed short) )
397 rd_dat = wr_dat * player->rate / esd_audio_rate;
398 - sample = source_data_ss[ rd_dat++ ];
399 + sample = source_data_ss[ rd_dat ];
400 mixed_buffer[ wr_dat++ ] += sample;
404 rd_dat = wr_dat * player->rate / esd_audio_rate;
405 rd_dat /= 2; /* adjust for mono */
407 - sample = source_data_uc[ rd_dat++ ];
408 + sample = source_data_uc[ rd_dat ];
409 sample -= 127; sample *= 256;
411 sample = sample * player->left_vol_scale / ESD_VOLUME_BASE;
413 sample = sample * player->left_vol_scale / ESD_VOLUME_BASE;
414 mixed_buffer[ wr_dat++ ] += sample;
416 - sample = source_data_uc[ rd_dat++ ];
417 + sample = source_data_uc[ rd_dat ];
418 sample -= 127; sample *= 256;
419 sample = sample * player->right_vol_scale / ESD_VOLUME_BASE;
420 mixed_buffer[ wr_dat++ ] += sample;
422 rd_dat = wr_dat * player->rate / esd_audio_rate;
423 rd_dat /= 2; /* adjust for mono */
425 - sample = source_data_ss[ rd_dat++ ];
426 + sample = source_data_ss[ rd_dat ];
428 mixed_buffer[ wr_dat++ ]
429 += sample * player->left_vol_scale / ESD_VOLUME_BASE;
431 sample = sample * player->left_vol_scale / ESD_VOLUME_BASE;
432 mixed_buffer[ wr_dat++ ] += sample;
434 - sample = source_data_ss[ rd_dat++ ];
435 + sample = source_data_ss[ rd_dat ];
436 sample = sample * player->right_vol_scale / ESD_VOLUME_BASE;
437 mixed_buffer[ wr_dat++ ] += sample;
439 @@ -875,14 +875,14 @@
440 /* takes all input players, and mixes them to the mixed_buffer */
441 int mix_players( void *output, int length )
443 - int actual = 0, max = 0;
444 + int actual = 0, min = 0, max = 0, translated = 0, iBps, used;
445 esd_player_t *player = NULL;
446 esd_player_t *erase = NULL;
448 ESDBG_MIXER( printf( "++++++++++++++++++++++++++++++++++++++++++\n" ); );
450 /* zero the sum buffer */
451 - memset( mixed_buffer, 0, esd_buf_size_samples * sizeof(int) );
452 + memset( mixed_buffer, 0, ESD_BUF_SIZE * sizeof(signed int) );
454 /* as long as there's a player out there */
455 player = esd_players_list;
456 @@ -890,21 +890,45 @@
458 /* read the client sound data */
459 actual = read_player( player );
461 - /* read_player(): >0 = data, ==0 = no data, <0 = erase it */
462 - if ( actual > 0 ) {
463 - /* printf( "received: %d bytes from %d\n",
464 - actual, player->source_id ); */
465 - /* actual = mix_to_stereo_32s( player, length ); */
466 - actual = player->mix_func( player, length );
467 - if ( actual > max ) max = actual;
469 - } else if ( actual == 0 ) {
470 - ESDBG_TRACE( printf( "(%02d) no data available from player [%p]\n",
472 + if ( actual == 0 ) {
473 + ESDBG_TRACE( printf( "(%02d) no new data available from player [%p]\n",
474 player->source_id, player ); );
476 + if ( player->actual_length == 0 ) {
477 + player = player->next;
482 + if ( actual < 0 ) {
483 /* actual < 0 means erase the player */
486 + /* actual >= 0 means data might be there to mix */
487 + iBps = sizeof(signed short) * 2;
489 + if ( (player->format & ESD_MASK_BITS) == ESD_BITS8 )
490 + iBps /= sizeof(signed short);
491 + if ( (player->format & ESD_MASK_CHAN) == ESD_MONO )
494 + /* how much data is really there? */
495 + translated = ((player->actual_length / iBps) * esd_audio_rate + player->rate - 1) / player->rate;
496 + translated *= sizeof(signed short) * 2;
498 + if ( translated > length ) {
499 + ESDBG_TRACE( printf( "(%02d) player translated length doesn't fit [%p]\n",
500 + player->source_id, player ); );
501 + translated = length;
507 + if ( min > translated ) {
513 /* check out the next item in the list */
514 @@ -917,13 +941,54 @@
519 + player = esd_players_list;
520 + while( player != NULL )
522 + if ( player->actual_length > 0 ) {
523 + /* read_player(): >0 = data, ==0 = no data, <0 = erase it */
524 + iBps = sizeof(signed short) * 2;
526 + if ( (player->format & ESD_MASK_BITS) == ESD_BITS8 )
527 + iBps /= sizeof(signed short);
528 + if ( (player->format & ESD_MASK_CHAN) == ESD_MONO )
531 + actual = player->mix_func( player, min );
533 + /* but how much data did we use? */
534 + used = (actual / (sizeof(signed short) * 2)) * player->rate / esd_audio_rate;
536 + if ( (player->format & ESD_MASK_BITS) != ESD_BITS8 )
537 + used *= sizeof(signed short);
538 + if ( (player->format & ESD_MASK_CHAN) != ESD_MONO )
541 + if ( player->actual_length - used > 0 ) {
542 + memmove( player->data_buffer, player->data_buffer + used, player->actual_length - used );
543 + player->actual_length -= used;
545 + /* kill it, it's probably all used anyways */
546 + player->actual_length = 0;
549 + if ( actual > max ) {
554 + /* check out the next item in the list */
555 + player = player->next;
558 /* ESDBG_COMMS( printf( "maximum stream length = %d bytes\n", max ); ); */
560 - if ( (esd_audio_format & ESD_MASK_BITS) == ESD_BITS16 )
561 - clip_mix_to_output_16s( output, max );
563 - clip_mix_to_output_8u( output, max );
564 - max /= 2; /* half as many samples as you'd think */
565 + if ( (esd_audio_format & ESD_MASK_BITS) == ESD_BITS16 )
566 + clip_mix_to_output_16s( output, max );
568 + clip_mix_to_output_8u( output, max );
569 + max /= 2; /* half as many samples as you'd think */
574 --- esound-0.2.22.orig/players.c
575 +++ esound-0.2.22/players.c
576 @@ -287,27 +287,28 @@
577 FD_SET( player->source_id, &rd_fds );
579 /* if the data is ready, read a block */
580 - can_read = select( player->source_id + 1,
581 - &rd_fds, NULL, NULL, &timeout ) ;
582 + can_read = (( player->actual_length < player->buffer_length ) &&
583 + select( player->source_id + 1, &rd_fds, NULL, NULL, &timeout ));
587 - ESD_READ_BIN( player->source_id, player->data_buffer,
588 - player->buffer_length, actual, "str rd" );
589 + ESD_READ_BIN( player->source_id, player->data_buffer+player->actual_length,
590 + player->buffer_length-player->actual_length, actual, "str rd" );
592 /* check for end of stream */
594 || ( actual < 0 && errno != EAGAIN && errno != EINTR ) )
597 - /* more data, save how much we got */
598 - player->actual_length = actual;
600 /* endian swap multi-byte data if we need to */
601 client = (esd_client_t *) (player->parent);
602 if ( client->swap_byte_order
603 && ( (player->format & ESD_MASK_BITS) == ESD_BITS16 ) )
605 - buffer = (unsigned short*) player->data_buffer;
606 + /* this will break if a read doesn't get us 16bit aligned
609 + buffer = (unsigned short*) player->data_buffer+player->actual_length;
611 ; pos < buffer + actual / sizeof(short)
617 + /* more data, save how much we got */
618 + player->actual_length += actual;
620 } else if ( can_read < 0 ) {
621 sprintf( message, "error reading client (%d)\n",
625 /* printf( "player [%p], pos = %d, format = 0x%08x\n",
626 player, player->last_pos, player->format ); */
627 + player->actual_length = 0;
629 /* only keep going if we didn't want to stop looping */
630 if ( ( player->last_pos ) == 0 &&
632 player->last_pos += actual;
633 if ( ( player->format & ESD_MASK_FUNC ) != ESD_LOOP ) {
634 /* we're done for this iteration */
635 + player->actual_length = actual;
640 /* something horrible has happened to the sample */
643 + player->actual_length = actual;
645 /* sample data is swapped as it's cached, no swap needed here */
648 if ( (player->format & ESD_MASK_CHAN) == ESD_MONO )
649 player->buffer_length /= 2;
651 - /* force to an even multiple of 4 */
652 - player->buffer_length += ( 4 - (player->buffer_length % 4) ) % 4;
653 + /* force to an even multiple of 4 bytes (lower) */
654 + player->buffer_length -= (player->buffer_length % 4);
657 = (void *) malloc( player->buffer_length );
662 + player->actual_length = 0;
663 /* everything's ok, set the easy stuff */
664 player->left_vol_scale = player->right_vol_scale = ESD_VOLUME_BASE;
665 player->mix_func = get_mix_func( player );
667 player->buffer_length /= 2;
669 /* force to an even multiple of 4 */
670 - player->buffer_length += ( 4 - (player->buffer_length % 4) ) % 4;
671 + player->buffer_length -= ( player->buffer_length % 4 );
674 = (void *) malloc( player->buffer_length );
676 /* update housekeeping values */
677 esd_playing_samples++;
678 player->last_pos = 0;
679 + player->actual_length = 0;
681 player->mix_func = get_mix_func( player );
682 player->translate_func = NULL; /* no translating, just mixing */
683 --- esound-0.2.22.orig/proto.c
684 +++ esound-0.2.22/proto.c
685 @@ -336,14 +336,13 @@
686 /* let the device know we want to record */
687 ESDBG_TRACE( printf( "closing audio for a sec...\n" ); );
690 esd_audio_format |= ESD_RECORD;
691 ESDBG_TRACE( printf( "reopening audio to record...\n" ); );
692 if (esd_audio_open() < 0) {
693 /* Failed to record */
694 free_player( recorder );
695 esd_audio_format &= ~ESD_RECORD;
698 /* If we fail here, we have a oops */
701 --- esound-0.2.22.orig/esdcat.c
702 +++ esound-0.2.22/esdcat.c
706 format = bits | channels | mode | func;
707 - printf( "opening socket, format = 0x%08x at %d Hz\n",
708 + fprintf( stderr, "opening socket, format = 0x%08x at %d Hz\n",
711 /* sock = esd_play_stream( format, rate ); */
712 --- esound-0.2.22.orig/esd-server.h
713 +++ esound-0.2.22/esd-server.h
715 #include <sys/ioctl.h>
716 #include <netinet/in.h>
717 #include <sys/socket.h>
720 #include <sys/time.h>
721 #include <sys/types.h>
722 --- esound-0.2.22.orig/esdmon.c
723 +++ esound-0.2.22/esdmon.c
727 format = bits | channels | mode | func;
728 - printf( "opening socket, format = 0x%08x at %d Hz\n",
729 + fprintf( stderr, "opening socket, format = 0x%08x at %d Hz\n",
732 sock = esd_monitor_stream( format, rate, host, argv[0] );
733 --- esound-0.2.22.orig/esdrec.c
734 +++ esound-0.2.22/esdrec.c
738 format = bits | channels | mode | func;
739 - printf( "opening socket, format = 0x%08x at %d Hz\n",
740 + fprintf( stderr, "opening socket, format = 0x%08x at %d Hz\n",
743 /* sock = esd_record_stream( format, rate ); */
744 --- esound-0.2.22.orig/esdsample.c
745 +++ esound-0.2.22/esdsample.c
749 format = bits | channels | mode | func;
750 - printf( "opening socket, format = 0x%08x at %d Hz\n",
751 + fprintf( stderr, "opening socket, format = 0x%08x at %d Hz\n",
754 stat( name, &source_stats );
755 --- esound-0.2.22.orig/esdloop.c
756 +++ esound-0.2.22/esdloop.c
760 format = bits | channels | mode | func;
761 - printf( "opening socket, format = 0x%08x at %d Hz\n",
762 + fprintf( stderr, "opening socket, format = 0x%08x at %d Hz\n",
765 sock = esd_open_sound( host );
766 --- esound-0.2.22.orig/esd.m4
767 +++ esound-0.2.22/esd.m4
769 if test "$ESD_CONFIG" = "no" ; then
774 ESD_CFLAGS=`$ESD_CONFIG $esdconf_args --cflags`
775 ESD_LIBS=`$ESD_CONFIG $esdconf_args --libs`
778 ],, no_esd=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
779 CFLAGS="$ac_save_CFLAGS"
784 if test "x$no_esd" = x ; then
786 echo "*** Could not run ESD test program, checking why..."
787 CFLAGS="$CFLAGS $ESD_CFLAGS"
788 LIBS="$LIBS $ESD_LIBS"
795 echo "*** may want to edit the esd-config script: $ESD_CONFIG" ])
796 CFLAGS="$ac_save_CFLAGS"