1#! /bin/sh
2# $Id: genconfig.sh,v 1.17 2010/07/17 00:47:48 jmaggard Exp $
3# MiniDLNA project
4# http://sourceforge.net/projects/minidlna/
5# (c) 2008-2009 Justin Maggard
6# This software is subject to the conditions detailed in the
7# LICENCE file provided within the distribution
8
9RM="rm -f"
10CONFIGFILE="config.h"
11CONFIGMACRO="__CONFIG_H__"
12
13# Database path
14DB_PATH="/tmp/minidlna"
15
16# detecting the OS name and version
17OS_NAME=`uname -s`
18OS_VERSION=`uname -r`
19TIVO="/*#define TIVO_SUPPORT*/"
20NETGEAR="/*#define NETGEAR*/"
21READYNAS="/*#define READYNAS*/"
22
23${RM} ${CONFIGFILE}
24
25# Detect if there are missing headers
26# NOTE: This check only works with a normal distro
27[ ! -e "/usr/include/sqlite3.h" ] && MISSING="libsqlite3 $MISSING"
28[ ! -e "/usr/include/jpeglib.h" ] && MISSING="libjpeg $MISSING"
29[ ! -e "/usr/include/libexif/exif-loader.h" ] && MISSING="libexif $MISSING"
30[ ! -e "/usr/include/id3tag.h" ] && MISSING="libid3tag $MISSING"
31[ ! -e "/usr/include/ogg/ogg.h" ] && MISSING="libogg $MISSING"
32[ ! -e "/usr/include/vorbis/codec.h" ] && MISSING="libvorbis $MISSING"
33[ ! -e "/usr/include/FLAC/metadata.h" ] && MISSING="libflac $MISSING"
34[ ! -e "/usr/include/ffmpeg/avutil.h" -a \
35  ! -e "/usr/include/libavutil/avutil.h" -a \
36  ! -e "/usr/include/ffmpeg/libavutil/avutil.h" ] && MISSING="libavutil $MISSING"
37[ ! -e "/usr/include/ffmpeg/avformat.h" -a \
38  ! -e "/usr/include/libavformat/avformat.h" -a \
39  ! -e "/usr/include/ffmpeg/libavformat/avformat.h" ] && MISSING="libavformat $MISSING"
40[ ! -e "/usr/include/ffmpeg/avcodec.h" -a \
41  ! -e "/usr/include/libavcodec/avcodec.h" -a \
42  ! -e "/usr/include/ffmpeg/libavcodec/avcodec.h" ] && MISSING="libavcodec $MISSING"
43if [ -n "$MISSING" ]; then
44	echo -e "\nERROR!  Cannot continue."
45	echo -e "The following required libraries are either missing, or are missing development headers:\n"
46	echo -e "$MISSING\n"
47	exit 1
48fi
49
50echo "/* MiniDLNA Project" >> ${CONFIGFILE}
51echo " * http://sourceforge.net/projects/minidlna/" >> ${CONFIGFILE}
52echo " * (c) 2008-2009 Justin Maggard" >> ${CONFIGFILE}
53echo " * generated by $0 on `date` */" >> ${CONFIGFILE}
54echo "#ifndef $CONFIGMACRO" >> ${CONFIGFILE}
55echo "#define $CONFIGMACRO" >> ${CONFIGFILE}
56echo "" >> ${CONFIGFILE}
57
58# OS Specific stuff
59case $OS_NAME in
60	OpenBSD)
61		MAJORVER=`echo $OS_VERSION | cut -d. -f1`
62		MINORVER=`echo $OS_VERSION | cut -d. -f2`
63		#echo "OpenBSD majorversion=$MAJORVER minorversion=$MINORVER"
64		# rtableid was introduced in OpenBSD 4.0
65		if [ $MAJORVER -ge 4 ]; then
66			echo "#define PFRULE_HAS_RTABLEID" >> ${CONFIGFILE}
67		fi
68		# from the 3.8 version, packets and bytes counters are double : in/out
69		if [ \( $MAJORVER -ge 4 \) -o \( $MAJORVER -eq 3 -a $MINORVER -ge 8 \) ]; then
70			echo "#define PFRULE_INOUT_COUNTS" >> ${CONFIGFILE}
71		fi
72		OS_URL=http://www.openbsd.org/
73		;;
74	FreeBSD)
75		VER=`grep '#define __FreeBSD_version' /usr/include/sys/param.h | awk '{print $3}'`
76		if [ $VER -ge 700049 ]; then
77			echo "#define PFRULE_INOUT_COUNTS" >> ${CONFIGFILE}
78		fi
79		OS_URL=http://www.freebsd.org/
80		;;
81	pfSense)
82		# we need to detect if PFRULE_INOUT_COUNTS macro is needed
83		OS_URL=http://www.pfsense.com/
84		;;
85	NetBSD)
86		OS_URL=http://www.netbsd.org/
87		;;
88	SunOS)
89		echo "#define USE_IPF 1" >> ${CONFIGFILE}
90		echo "#define LOG_PERROR 0" >> ${CONFIGFILE}
91		echo "#define SOLARIS_KSTATS 1" >> ${CONFIGFILE}
92		echo "typedef uint64_t u_int64_t;" >> ${CONFIGFILE}
93		echo "typedef uint32_t u_int32_t;" >> ${CONFIGFILE}
94		echo "typedef uint16_t u_int16_t;" >> ${CONFIGFILE}
95		echo "typedef uint8_t u_int8_t;" >> ${CONFIGFILE}
96		OS_URL=http://www.sun.com/solaris/
97		;;
98	Linux)
99		OS_URL=http://www.kernel.org/
100		KERNVERA=`echo $OS_VERSION | awk -F. '{print $1}'`
101		KERNVERB=`echo $OS_VERSION | awk -F. '{print $2}'`
102		KERNVERC=`echo $OS_VERSION | awk -F. '{print $3}'`
103		KERNVERD=`echo $OS_VERSION | awk -F. '{print $4}'`
104		#echo "$KERNVERA.$KERNVERB.$KERNVERC.$KERNVERD"
105		# NETGEAR ReadyNAS special case
106		if [ -f /etc/raidiator_version ]; then
107			OS_NAME=$(awk -F'!!|=' '{ print $1 }' /etc/raidiator_version)
108			OS_VERSION=$(awk -F'!!|[=,.]' '{ print $3"."$4 }' /etc/raidiator_version)
109			OS_URL="http://www.readynas.com/"
110			DB_PATH="/var/cache/minidlna"
111			TIVO="#define TIVO_SUPPORT"
112			NETGEAR="#define NETGEAR"
113			READYNAS="#define READYNAS"
114		# Debian GNU/Linux special case
115		elif [ -f /etc/debian_version ]; then
116			OS_NAME=Debian
117			OS_VERSION=`cat /etc/debian_version`
118			OS_URL=http://www.debian.org/
119			# use lsb_release (Linux Standard Base) when available
120			LSB_RELEASE=`which lsb_release 2>/dev/null`
121			if [ 0 -eq $? ]; then
122				OS_NAME=`${LSB_RELEASE} -i -s`
123				OS_VERSION=`${LSB_RELEASE} -r -s`
124			fi
125		else
126			# use lsb_release (Linux Standard Base) when available
127			LSB_RELEASE=`which lsb_release 2>/dev/null`
128			if [ 0 -eq $? ]; then
129				OS_NAME=`${LSB_RELEASE} -i -s`
130				OS_VERSION=`${LSB_RELEASE} -r -s`
131			fi
132		fi
133		;;
134	*)
135		echo "Unknown OS : $OS_NAME"
136		exit 1
137		;;
138esac
139
140echo "#define OS_NAME		\"$OS_NAME\"" >> ${CONFIGFILE}
141echo "#define OS_VERSION	\"$OS_NAME/$OS_VERSION\"" >> ${CONFIGFILE}
142echo "#define OS_URL		\"${OS_URL}\"" >> ${CONFIGFILE}
143echo "" >> ${CONFIGFILE}
144
145echo "/* full path of the file database */" >> ${CONFIGFILE}
146echo "#define DEFAULT_DB_PATH	\"${DB_PATH}\"" >> ${CONFIGFILE}
147echo "" >> ${CONFIGFILE}
148
149echo "/* Comment the following line to use home made daemonize() func instead" >> ${CONFIGFILE}
150echo " * of BSD daemon() */" >> ${CONFIGFILE}
151echo "#define USE_DAEMON" >> ${CONFIGFILE}
152echo "" >> ${CONFIGFILE}
153
154echo "/* Enable if the system inotify.h exists.  Otherwise our own inotify.h will be used. */" >> ${CONFIGFILE}
155if [ -f /usr/include/sys/inotify.h ]; then
156echo "#define HAVE_INOTIFY_H" >> ${CONFIGFILE}
157else
158echo "/*#define HAVE_INOTIFY_H*/" >> ${CONFIGFILE}
159fi
160echo "" >> ${CONFIGFILE}
161
162echo "/* Enable if the system iconv.h exists.  ID3 tag reading in various character sets will not work properly otherwise. */" >> ${CONFIGFILE}
163if [ -f /usr/include/iconv.h ]; then
164echo "#define HAVE_ICONV_H" >> ${CONFIGFILE}
165else
166echo -e "\nWARNING!!  Iconv support not found.  ID3 tag reading may not work."
167echo "/*#define HAVE_ICONV_H*/" >> ${CONFIGFILE}
168fi
169echo "" >> ${CONFIGFILE}
170
171echo "/* Enable if the system libintl.h exists for NLS support. */" >> ${CONFIGFILE}
172if [ -f /usr/include/libintl.h ]; then
173echo "#define ENABLE_NLS" >> ${CONFIGFILE}
174else
175echo "/*#define ENABLE_NLS*/" >> ${CONFIGFILE}
176fi
177echo "" >> ${CONFIGFILE}
178
179echo "/* Enable NETGEAR-specific tweaks. */" >> ${CONFIGFILE}
180echo "${NETGEAR}" >> ${CONFIGFILE}
181echo "/* Enable ReadyNAS-specific tweaks. */" >> ${CONFIGFILE}
182echo "${READYNAS}" >> ${CONFIGFILE}
183echo "/* Compile in TiVo support. */" >> ${CONFIGFILE}
184echo "${TIVO}" >> ${CONFIGFILE}
185echo "" >> ${CONFIGFILE}
186
187echo "#endif" >> ${CONFIGFILE}
188
189exit 0
190