1 ## lirc.m4 (Macros for autoconf)
3 ## (C) 1999 Christoph Bartelmus (lirc@bartelmus.de)
6 #######################################################################
10 #######################################################################
12 dnl AC_PATH_LIRC([MINIMUM-VERSION])
13 dnl Check for LIRC and define LIRCD
15 AC_DEFUN([AC_PATH_LIRC],
17 min_lirc_version=ifelse([$1], ,0.5.5,$1)
18 AC_MSG_CHECKING(for LIRC>=$min_lirc_version)
20 AC_CACHE_VAL(ac_cv_have_lirc,[
23 lirc_cross_compiling=no
25 if test ! -S /dev/lircd; then
32 ac_save_cflags="${CFLAGS}"
33 CFLAGS="$CFLAGS -DLIRCD=\"$LIRCD\""
42 #include <sys/socket.h>
43 #include <sys/types.h>
50 #define PACKET_SIZE 256
61 const char *read_string(int fd)
63 static char buffer[PACKET_SIZE+1]="";
70 memmove(buffer,buffer+ptr,strlen(buffer+ptr)+1);
72 end=strchr(buffer,'\n');
86 ret=read(fd,buffer+ptr,PACKET_SIZE-ptr);
99 end=strchr(buffer,'\n');
104 ptr=strlen(buffer)+1;
119 char *get_version(int fd,const char *packet)
122 const char *string,*data;
124 enum packet_state state;
126 unsigned long data_n;
127 unsigned int major,minor,micro;
128 static char version[100];
134 done=write(fd,(void *) data,todo);
149 string=read_string(fd);
150 if(string==NULL) return(NULL);
154 if(strcasecmp(string,"BEGIN")!=0)
161 if(strncasecmp(string,packet,strlen(string))!=0 ||
162 strlen(string)+1!=strlen(packet))
170 if(strcasecmp(string,"SUCCESS")==0)
174 else if(strcasecmp(string,"END")==0)
179 else if(strcasecmp(string,"ERROR")==0)
190 if(strcasecmp(string,"END")==0)
194 else if(strcasecmp(string,"DATA")==0)
202 data_n=strtoul(string,&endptr,0);
203 if(!*string || *endptr)
217 if(data_n==1 && status==0)
219 if(sscanf(string,"%u.%u.%u",
220 &major,&minor,µ)==3)
222 sprintf(version,"%u.%u.%u",
231 if(n==data_n) state=P_END;
234 if(strcasecmp(string,"END")==0)
246 int main(int argc,char **argv)
248 char *version,*min_version;
249 unsigned int major,minor,micro,min_major,min_minor,min_micro;
250 struct sockaddr_un addr;
253 struct sigaction act;
255 result=fopen("conf.lirc","w");
256 if(result==NULL) exit(EXIT_FAILURE);
258 act.sa_handler=sigalrm;
259 sigemptyset(&act.sa_mask);
260 act.sa_flags=0; /* we need EINTR */
261 sigaction(SIGALRM,&act,NULL);
263 addr.sun_family=AF_UNIX;
264 strcpy(addr.sun_path,LIRCD);
265 fd=socket(AF_UNIX,SOCK_STREAM,0);
268 fprintf(result,"unknown");
273 if(connect(fd,(struct sockaddr *)&addr,sizeof(addr))==-1)
275 fprintf(result,"unknown");
281 version=get_version(fd,"VERSION\n");
284 fprintf(result,"<0.5.5");
289 fprintf(result,"%s",version);
293 /* HP/UX 9 (%@#!) writes to sscanf strings */
295 min_version=strdup("$min_lirc_version");
296 if(min_version==NULL) exit(EXIT_FAILURE);
298 if(sscanf(version,"%u.%u.%u",&major,&minor,µ)!=3 ||
299 sscanf(min_version,"%u.%u.%u",&min_major,&min_minor,&min_micro)!=3)
303 if(major<min_major ||
304 (major==min_major && minor<min_minor) ||
305 (major==min_major && minor==min_minor && micro<min_micro))
313 if test -f conf.lirc; then
314 lirc_version=`cat conf.lirc`
316 ## lirc_major_version=`cat lirc.conf | \
317 ## sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
318 ## lirc_minor_version=`cat lirc.conf | \
319 ## sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
320 ## lirc_micro_version=`cat lirc.conf | \
321 ## sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
326 if test -f conf.lirc; then
327 lirc_version=`cat conf.lirc`
331 ,lirc_cross_compiling=yes
335 CFLAGS="$ac_save_CFLAGS"
337 ac_cv_have_lirc="no_lirc=${no_lirc} lirc_version=\"${lirc_version}\" \
338 lirc_cross_compiling=${lirc_cross_compiling} \
343 eval "$ac_cv_have_lirc"
345 if test x${no_lirc} = xyes; then
346 if test x${lirc_version} = xunknown; then
347 AC_MSG_RESULT([missing (lircd not running ?)])
348 elif test x${lirc_version} != xnone; then
349 AC_MSG_RESULT([missing (found lirc-${lirc_version})])
351 AC_MSG_RESULT(missing)
354 if test x${lirc_cross_compiling} = xyes; then
357 AC_MSG_RESULT([found lirc-${lirc_version}])
361 AC_DEFINE_UNQUOTED(LIRCD,"${LIRCD}")