dnl $Id$
dnl $URL$


dnl LCD4Linux Plugins conf part
dnl
dnl Copyright (C) 1999, 2000, 2001, 2002, 2003 Michael Reinelt <michael@reinelt.co.at>
dnl Copyright (C) 2004, 2005, 2006, 2007 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
dnl
dnl This file is part of LCD4Linux.
dnl
dnl LCD4Linux is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 2, or (at your option)
dnl any later version.
dnl
dnl LCD4Linux is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program; if not, write to the Free Software
dnl Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

AC_MSG_CHECKING([which plugins to compile])
AC_ARG_WITH(
  plugins, 
  [  --with-plugins=<list>   choose which plugins to compile.]
  [                        type --with-plugins=list for a list]	
  [                        of avaible plugins]
  [                        plugins may be excluded with 'all,!<plugin>',]	
  [                        (try 'all,\!<plugin>' if your shell complains...)],
  plugins=$withval, 
  plugins=all
)

plugins=`echo $plugins|sed 's/,/ /g'`

for plugin in $plugins; do

   case $plugin in 
      !*) 
         val="no"
         plugin=`echo $plugin|cut -c 2-`
         ;;
       *) 
         val="yes"
         ;;
   esac
	
   case "$plugin" in
      list)
         AC_MSG_RESULT(
            [available plugins:]
            [ apm,cpuinfo,diskstats,dvb,exec,file,gps,i2c_sensors,iconv,imon,isdn,kvv,]
            [ loadavg,meminfo,mpd,mysql,netdev,netinfo,pop3,ppp,proc_stat,sample,seti,]
            [ statfs,uname,uptime,wireless,xmms])
         AC_MSG_ERROR([run ./configure --with-plugins=...])
         ;;
      all)
         PLUGIN_APM="yes"
	 PLUGIN_ASTERISK="yes"
	 PLUGIN_BUTTON_EXEC="yes"
         PLUGIN_CPUINFO="yes"
         PLUGIN_DISKSTATS="yes"
         PLUGIN_DVB="yes"
         PLUGIN_EXEC="yes"
         PLUGIN_FIFO="yes"
         PLUGIN_FILE="yes"
         PLUGIN_GPS="yes"
         PLUGIN_HDDTEMP="yes"
         PLUGIN_I2C_SENSORS="yes"
         PLUGIN_ICONV="yes"
         PLUGIN_IMON="yes"
         PLUGIN_ISDN="yes"
         PLUGIN_KVV="yes"
         PLUGIN_LOADAVG="yes"
         PLUGIN_MEMINFO="yes"
         PLUGIN_MPD="yes"
         PLUGIN_MYSQL="yes"
         PLUGIN_NETDEV="yes"
         PLUGIN_NETINFO="yes"
         PLUGIN_POP3="yes"
         PLUGIN_PPP="yes"
         PLUGIN_PROC_STAT="yes"
         PLUGIN_PYTHON=$with_python
         PLUGIN_SAMPLE="yes"
         PLUGIN_SETI="yes"
         PLUGIN_STATFS="yes"
         PLUGIN_UNAME="yes"
         PLUGIN_UPTIME="yes"
         PLUGIN_W1RETAP="yes"    	 
         PLUGIN_WIRELESS="yes"
         PLUGIN_XMMS="yes"   
         ;;
      apm)
         PLUGIN_APM=$val
         ;;
      button_exec)
	 PLUGIN_BUTTON_EXEC=$val
	 ;;
      asterisk)
         PLUGIN_ASTERISK=$val
         ;;
      cpuinfo)
         PLUGIN_CPUINFO=$val
         ;;
      diskstats)
         PLUGIN_DISKSTATS=$val
         ;;
      dvb)
         PLUGIN_DVB=$val
         ;;
      exec)
         PLUGIN_EXEC=$val
         ;;
      fifo)
         PLUGIN_FIFO=$val
         ;;
      file)
         PLUGIN_FILE=$val
         ;;
      gps)
         PLUGIN_GPS=$val
         ;;
      hddtemp)
         PLUGIN_HDDTEMP=$val
         ;;
      i2c_sensors)
         PLUGIN_I2C_SENSORS=$val
	 ;;
      iconv)
      	PLUGIN_ICONV=$val
      	;;
      imon)
         PLUGIN_IMON=$val
         ;;
      isdn)
         PLUGIN_ISDN=$val
         ;;
      kvv)
         PLUGIN_KVV=$val
         ;;
      loadavg)
         PLUGIN_LOADAVG=$val
         ;;
      meminfo)
         PLUGIN_MEMINFO=$val
         ;;
      mpd)
         PLUGIN_MPD=$val
	 ;;
      mysql)
         PLUGIN_MYSQL=$val
         ;;
      netdev)
         PLUGIN_NETDEV=$val
         ;;
      netinfo)
         PLUGIN_NETINFO=$val
         ;;
      pop3)
         PLUGIN_POP3=$val
         ;;
      ppp)
         PLUGIN_PPP=$val
         ;;
      proc_stat)
         PLUGIN_PROC_STAT=$val
         ;;
      python)
         PLUGIN_PYTHON=$val
         ;;
      sample)
         PLUGIN_SAMPLE=$val
         ;;
      seti)
         PLUGIN_SETI=$val
         ;;
      statfs)
         PLUGIN_STATFS=$val
         ;;
      uname)
         PLUGIN_UNAME=$val
         ;;
      uptime)
         PLUGIN_UPTIME=$val
         ;;
      w1retap)
         PLUGIN_W1RETAP=$val
         ;;
      wireless)
         PLUGIN_WIRELESS=$val
         ;;
      xmms)
         PLUGIN_XMMS=$val
         ;;         
      *) 	
         AC_MSG_ERROR([Unknown plugin '$plugin'])
         ;;
   esac
done

AC_MSG_RESULT([done])

# Advanced Power Management
if test "$PLUGIN_APM" = "yes"; then
   AC_CHECK_HEADERS(asm/types.h, [has_asm_types="true"], [has_asm_types="false"])
   if test "$has_asm_types" = "true"; then
      PLUGINS="$PLUGINS plugin_apm.o"
      AC_DEFINE(PLUGIN_APM,1,[apm plugin])
   else
      AC_MSG_WARN(asm/types.h header not found: apm plugin disabled)
   fi
fi

if test "$PLUGIN_BUTTON_EXEC" = "yes"; then
   PLUGINS="$PLUGINS plugin_button_exec.o"
   AC_DEFINE(PLUGIN_BUTTON_EXEC,1,[button_exec plugin])
fi

if test "$PLUGIN_ASTERISK" = "yes"; then
   PLUGINS="$PLUGINS plugin_asterisk.o"
   AC_DEFINE(PLUGIN_ASTERISK,1,[asterisk plugin])
fi

# /proc/cpuinfo
if test "$PLUGIN_CPUINFO" = "yes"; then
   PLUGINS="$PLUGINS plugin_cpuinfo.o"
   AC_DEFINE(PLUGIN_CPUINFO,1,[cpuinfo plugin])
fi

# /proc/diskstat
if test "$PLUGIN_DISKSTATS" = "yes"; then
   PLUGINS="$PLUGINS plugin_diskstats.o"
   AC_DEFINE(PLUGIN_DISKSTATS,1,[diskstats plugin])
fi

# Digital Video Broadcasting
if test "$PLUGIN_DVB" = "yes"; then
   AC_CHECK_HEADERS(asm/types.h, [has_asm_types="true"], [has_asm_types="false"])
   if test "$has_asm_types" = "true"; then
       AC_CHECK_HEADERS(linux/dvb/frontend.h, [has_dvb_header="true"], [has_dvb_header="false"])
       if test "$has_dvb_header" = "true"; then
          PLUGINS="$PLUGINS plugin_dvb.o"
          AC_DEFINE(PLUGIN_DVB,1,[dvb plugin])
       else
          PLUGINS="$PLUGINS plugin_dvb.o"
          AC_MSG_WARN(linux/dvb/frontend.h header not found: using ioctl)
       fi
   else
       AC_MSG_WARN(asm/types.h header not found: dvb plugin disabled)
   fi
fi

# start external commands (exec)
if test "$PLUGIN_EXEC" = "yes"; then
   PLUGINS="$PLUGINS plugin_exec.o"
   AC_DEFINE(PLUGIN_EXEC,1,[exec plugin])
fi

# file
if test "$PLUGIN_FILE" = "yes"; then
   PLUGINS="$PLUGINS plugin_file.o"
   AC_DEFINE(PLUGIN_FILE,1,[file plugin])
fi

# FIFO
if test "$PLUGIN_FIFO" = "yes"; then
   PLUGINS="$PLUGINS plugin_fifo.o"
   AC_DEFINE(PLUGIN_FIFO,1,[fifo plugin])
fi

# GPS
if test "$PLUGIN_GPS" = "yes"; then
   AC_CHECK_HEADERS(nmeap.h, [has_nmeap_header="true"], [has_nmeap_header="false"])
   if test "$has_nmeap_header" = "true"; then	
      AC_CHECK_LIB(nmeap, nmeap_init, [has_libnmeap_lib="true"], [has_libnmeap_lib="false"])
      if test "$has_libnmeap_lib" = "true"; then
        PLUGINS="$PLUGINS plugin_gps.o"
        PLUGINLIBS="$PLUGINLIBS -lnmeap"
        AC_DEFINE(PLUGIN_GPS,1,[gps plugin])
      else
        AC_MSG_WARN(libnmeap lib not found: gps plugin disabled)
      fi
   else
      AC_MSG_WARN(nmeap.h header not found: gps plugin disabled)
   fi 
fi

# hddtemp
if test "$PLUGIN_HDDTEMP" = "yes"; then
   PLUGINS="$PLUGINS plugin_hddtemp.o"
   AC_DEFINE(PLUGIN_HDDTEMP,1,[hddtemp plugin])
fi

# I2C
if test "$PLUGIN_I2C_SENSORS" = "yes"; then
   PLUGINS="$PLUGINS plugin_i2c_sensors.o"
   AC_DEFINE(PLUGIN_I2C_SENSORS,1,[i2c sensors plugin])
fi

# IConv
if test "$PLUGIN_ICONV" = "yes"; then
   AM_ICONV
   if test "$am_cv_func_iconv" = "yes"; then 
      PLUGINS="$PLUGINS plugin_iconv.o"
      PLUGINLIBS="$PLUGINLIBS $LIBICONV"
      AC_DEFINE(PLUGIN_ICONV,1,[iconv charset converter plugin])
   else
      AC_MSG_WARN(iconv not found: iconv plugin disabled)
   fi
fi

# ISDN monitor
if test "$PLUGIN_IMON" = "yes"; then
   AC_CHECK_HEADERS(linux/errno.h, [has_linux_errno="true"], [has_linux_errno="false"])
   if test "$has_linux_errno" = "true"; then
       PLUGINS="$PLUGINS plugin_imon.o"
       AC_DEFINE(PLUGIN_IMON,1,[imon plugin])
   else
       AC_MSG_WARN(linux/errno.h header not found: imon plugin disabled)
   fi
fi

# ISDN
if test "$PLUGIN_ISDN" = "yes"; then
   AC_CHECK_HEADERS(linux/isdn.h, [has_isdn_header="true"], [has_isdn_header="false"])
   if test "$has_dvb_header" = "false"; then
      AC_MSG_WARN(linux/isdn.h header not found: isdn plugin CPS disabled)
   fi   
   PLUGINS="$PLUGINS plugin_isdn.o"
   AC_DEFINE(PLUGIN_ISDN,1,[ISDN plugin])
fi

# Karlsruher Verkehrsverbund
if test "$PLUGIN_KVV" = "yes"; then
   PLUGINS="$PLUGINS plugin_kvv.o"
   AC_DEFINE(PLUGIN_KVV,1,[kvv plugin])
fi

# load average
if test "$PLUGIN_LOADAVG" = "yes"; then
   PLUGINS="$PLUGINS plugin_loadavg.o"
   AC_DEFINE(PLUGIN_LOADAVG,1,[loadavg plugin])
fi

# meminfo
if test "$PLUGIN_MEMINFO" = "yes"; then
   PLUGINS="$PLUGINS plugin_meminfo.o"
   AC_DEFINE(PLUGIN_MEMINFO,1,[meminfo plugin])
fi

# MPD
if test "$PLUGIN_MPD" = "yes"; then   
   if test -f "libmpdclient.h"
   then      
	PLUGINS="$PLUGINS plugin_mpd.o libmpdclient.o"
	AC_DEFINE(PLUGIN_MPD,1,[mpd plugin])      
   else
      AC_MSG_WARN(libmpdclient.h header not found: mpd plugin disabled)
      AC_MSG_WARN(get libmpdclient.h from http://www.musicpd.org/libmpdclient.shtml)
      AC_MSG_WARN(and copy those 2 files in the lcd4linux directory.)
   fi
fi

# MySQL
if test "$PLUGIN_MYSQL" = "yes"; then
   AC_CHECK_HEADERS(mysql/mysql.h, [has_mysql_header="true"], [has_mysql_header="false"])
   if test "$has_mysql_header" = "true"; then	
      AC_CHECK_LIB(mysqlclient, mysql_init, [has_mysql_lib="true"], [has_mysql_lib="false"])
      if test "$has_mysql_lib" = "true"; then
        PLUGINS="$PLUGINS plugin_mysql.o"
        PLUGINLIBS="$PLUGINLIBS -lmysqlclient"
        AC_DEFINE(PLUGIN_MYSQL,1,[mysql plugin])
      else
        AC_MSG_WARN(mysqlclient lib not found: mysql plugin disabled)
      fi
   else
      AC_MSG_WARN(mysql/mysql.h header not found: mysql plugin disabled)
   fi 
fi

# /proc/net/dev
if test "$PLUGIN_NETDEV" = "yes"; then
   PLUGINS="$PLUGINS plugin_netdev.o"
   AC_DEFINE(PLUGIN_NETDEV,1,[netdev plugin])
fi

# configuration of network devices
if test "$PLUGIN_NETINFO" = "yes"; then
   PLUGINS="$PLUGINS plugin_netinfo.o"
   AC_DEFINE(PLUGIN_NETINFO,1,[netinfo plugin])
fi

# POP3
if test "$PLUGIN_POP3" = "yes"; then
   PLUGINS="$PLUGINS plugin_pop3.o"
   AC_DEFINE(PLUGIN_POP3,1,[POP3 plugin])
fi

# PPP
if test "$PLUGIN_PPP" = "yes"; then
   AC_CHECK_HEADERS(net/if_ppp.h, [has_ppp_header="true"], [has_ppp_header="false"])
   if test "$has_ppp_header" = "true"; then
      PLUGINS="$PLUGINS plugin_ppp.o"
      AC_DEFINE(PLUGIN_PPP,1,[ppp plugin])
   else
      AC_MSG_WARN(net/if_ppp.h header not found: ppp plugin disabled)
   fi 
fi

# /proc/stat
if test "$PLUGIN_PROC_STAT" = "yes"; then
   PLUGINS="$PLUGINS plugin_proc_stat.o"
   AC_DEFINE(PLUGIN_PROC_STAT,1,[proc_stat plugin])
fi

# python
if test "$PLUGIN_PYTHON" = "yes"; then
   if test "$with_python" != "yes"; then
      AC_MSG_WARN(python support not enabled: python plugin disabled (use --with-python to enable))
   else
      if test -z "$python_path"; then
         AC_MSG_WARN(python headers not found: python plugin disabled)
      else
         PLUGINS="$PLUGINS plugin_python.o"
         CPPFLAGS="$CPPFLAGS $PYTHON_CPPFLAGS"
         PLUGINLIBS="$PLUGINLIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LIBS"
         AC_DEFINE(PLUGIN_PYTHON,1,[python plugin])
      fi 
   fi 
fi

# sample
if test "$PLUGIN_SAMPLE" = "yes"; then
   PLUGINS="$PLUGINS plugin_sample.o"
   AC_DEFINE(PLUGIN_SAMPLE,1,[sample plugin])
fi

# SETI
if test "$PLUGIN_SETI" = "yes"; then
   PLUGINS="$PLUGINS plugin_seti.o"
   AC_DEFINE(PLUGIN_SETI,1,[seti plugin])
fi

# statfs()
if test "$PLUGIN_STATFS" = "yes"; then
   AC_CHECK_HEADERS(sys/vfs.h, [has_vfs_header="true"], [has_vfs_header="false"])
   if test "$has_vfs_header" = "true"; then
       PLUGINS="$PLUGINS plugin_statfs.o"
       AC_DEFINE(PLUGIN_STATFS,1,[statfs plugin])
   else
      AC_MSG_WARN(sys/vfs.h header not found: statfs plugin disabled)
   fi 
fi

# uname
if test "$PLUGIN_UNAME" = "yes"; then
   PLUGINS="$PLUGINS plugin_uname.o"
   AC_DEFINE(PLUGIN_UNAME,1,[uname plugin])
fi

# uptime
if test "$PLUGIN_UPTIME" = "yes"; then
   PLUGINS="$PLUGINS plugin_uptime.o"
   AC_DEFINE(PLUGIN_UPTIME,1,[uptime plugin])
fi

if test "$PLUGIN_W1RETAP" = "yes"; then
   PLUGINS="$PLUGINS plugin_w1retap.o"
   AC_DEFINE(PLUGIN_W1RETAP,1,[w1retap plugin])
fi

# WLAN
if test "$PLUGIN_WIRELESS" = "yes"; then
   AC_CHECK_HEADERS(linux/wireless.h, [has_wireless_header="true"], [has_wireless_header="false"])
   if test "$has_wireless_header" = "true"; then
       PLUGINS="$PLUGINS plugin_wireless.o"
       AC_DEFINE(PLUGIN_WIRELESS,1,[wireless plugin])
   else
      AC_MSG_WARN(linux/wireless.h header not found: wireless plugin disabled)
   fi 
fi

# XMMS
if test "$PLUGIN_XMMS" = "yes"; then
   PLUGINS="$PLUGINS plugin_xmms.o"
   AC_DEFINE(PLUGIN_XMMS,1,[xmms plugin])
fi

if test "$PLUGINS" = ""; then
   AC_MSG_ERROR([You should include at least one plugin...])
fi
   
AC_SUBST(PLUGINS)
AC_SUBST(PLUGINLIBS)