#!/usr/bin/env bash
#
# ToscoConf 0.04
# Copyright (c) 2003-2004 Leandro Pereira <leandro@hardinfo.org>
# All rights reserved.
#
# This script is in the Tosco Public License. It may be copied and/or
# modified, in whole or in part, provided that all copies must retain the
# above copyright notice, this condition and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
#
# (yes, I did a copy&paste from the BSD license, eat me)
#
# ---------------------------------------------------------------------------

PACKAGE=`basename ${PWD} | cut -d"-" -f1`;
VERSION=`basename ${PWD} | cut -d"-" -f2`;

if [ "$PACKAGE" == "$VERSION" ]; then
	VERSION=$(printf "SVN_%d" $(LC_ALL=C svn -R info|grep Revision|cut -d: -f2|sort -n|tail -n1))
	RELEASE=0
else
	RELEASE=1
fi

echo "ToscoConf (version 0.04) for $PACKAGE version $VERSION"

# ---------------------------------------------------------------------------

echo "Determining system architecture."
OS=`uname`
case $OS in		
	Linux)
		;;
	*)
		echo "$OS (not supported, yet!)"
		exit ;;
esac	

PROC=`uname -m`
LIBDIR='/usr/lib'
case $PROC in
	i?86)
		ln -sf linux/x86 arch/this
		ARCH="ARCH_i386" ;;
	ppc*)
		ln -sf linux/ppc arch/this
		ARCH="ARCH_PPC" ;;
	x86_64)
		ln -sf linux/x86_64 arch/this
		ARCH="ARCH_x86_64"
		LIBDIR="/usr/lib64" ;;
	mips*)
		ln -sf linux/mips arch/this
		ARCH="ARCH_MIPS" ;;
	parisc*)
		ln -sf linux/parisc arch/this
		ARCH="ARCH_PARISC" ;;
	sparc*)
		ln -sf linux/sparc arch/this
		ARCH="ARCH_SPARC" ;;
	armv*)
		ln -sf linux/armv4l arch/this
		ARCH="ARCH_ARMV4L" ;;
        ia64)
                ln -sf linux/ia64  arch/this
                ARCH="ARCH_IA64" ;;
        alpha)
                ln -sf linux/alpha  arch/this
                ARCH="ARCH_ALPHA" ;;
        s390*)
                ln -sf linux/s390  arch/this
                ARCH="ARCH_S390" ;;
	m68k)
		ln -sf linux/m68k arch/this
		ARCH="ARCH_m68k" ;;
	sh*)
		ln -sf linux/sh arch/this
		ARCH="ARCH_sh" ;;

esac

if [ "x$ARCH" == "x" ]; then
	echo "Your architecture is not supported yet. Please send the"
	echo "output of the following commands to leandro@hardinfo.org:"
	echo ""
	echo "  $ cat /proc/cpuinfo"
	echo "  $ uname -a"
	echo "  $ uname -m"
	exit 1
fi

# ---------------------------------------------------------------------------

echo "Compiling $PACKAGE for $OS $PROC ($ARCH)."
echo ""

# ---------------------------------------------------------------------------

echo -n "Checking for lspci... "
LSPCIPATH="/sbin/lspci /usr/sbin/lspci /bin/lspci /usr/bin/lspci `which lspci 2>/dev/null`"
for i in $LSPCIPATH; do
	if [ -x "$i" ]; then
		LSPCI=$i
		break
	fi
done

if [ -e "$LSPCI" ]; then
	echo $LSPCI
else
	echo "lspci cannot be found"
	exit
fi

# ---------------------------------------------------------------------------

GTK2=-1
MIN_VERSION="2.6.0"
echo -n "Checking for GTK version >= ${MIN_VERSION}... "
for i in `which pkg-config`; do
	$i --errors-to-stdout gtk+-2.0 \
		--atleast-version=$MIN_VERSION > /dev/null
	case $? in
		0)
			GTK_FLAGS=`pkg-config gtk+-2.0 --cflags`
			GTK_LIBS=`pkg-config gtk+-2.0 --libs`
			echo "found `pkg-config gtk+-2.0 --modversion`"
			GTK2=1
			break ;;
		*)
			echo "not found." ;;
	esac
done

# --------------------------------------------------------------------------

if [ $GTK2 -eq -1 ]; then
	echo -e "\nYou need the GTK libraries, including the development stuff."
	echo "If you're using Debian, running the command as root:"
	echo -e "\n\taptitude install libgtk2.0-dev\n"
	echo "Will do the trick."
	exit 1
fi

# ---------------------------------------------------------------------------

SOUP=-1
MIN_VERSION="2.2.7"
echo -n "Checking for libsoup version >= ${MIN_VERSION}... "
for i in `which pkg-config`; do
	$i --errors-to-stdout libsoup-2.2 \
		--atleast-version=$MIN_VERSION > /dev/null
	case $? in
		0)
			SOUP_FLAGS=`pkg-config libsoup-2.2 --cflags --static`
			SOUP_LIBS=`pkg-config libsoup-2.2 --libs --static`
			echo "found `pkg-config libsoup-2.2 --modversion`"
			SOUP=1
			break ;;
		*)
			echo "not found." ;;
	esac
done

# --------------------------------------------------------------------------

if [ $SOUP -eq -1 ]; then
	echo "Disabling libsoup support. (Network Updater won't be available.)"
fi

# --------------------------------------------------------------------------

echo -n "Checking for Linux Wireless Extensions (CONFIG_NET_RADIO)... "
if [ -e /proc/net/wireless ]; then
	echo "found."
	LINUX_WE=1
else
	echo "not found."
	LINUX_WE=-1
fi

# --------------------------------------------------------------------------

if [ $LINUX_WE -eq -1 ]; then
	echo "Disabling Linux Wireless Extensions support."
fi

# --------------------------------------------------------------------------

echo -e "\nWriting config.h..."
rm -f config.h
echo -e "#ifndef __CONFIG_H__\n#define __CONFIG_H__\n" > config.h

echo "#define VERSION \"$VERSION\"" >> config.h

echo "#define LSPCI \"$LSPCI -v\"" >> config.h
echo "#define $ARCH" >> config.h
echo "#define ARCH     \"$ARCH\"" >> config.h

echo "#define PLATFORM \"`uname`\"" >> config.h
echo "#define KERNEL   \"`uname -r`\"" >> config.h
echo "#define HOSTNAME \"`hostname`\"" >> config.h

echo "#define PREFIX \"/usr/share/hardinfo/\"" >> config.h
echo "#define LIBPREFIX \"/usr/lib/hardinfo/\"" >> config.h

if [ "$SOUP" == "1" ]; then
	echo "#define HAS_LIBSOUP" >> config.h
fi

if [ "$LINUX_WE" == "1" ]; then
	echo "#define HAS_LINUX_WE" >> config.h
fi

if [ "$RELEASE" == "1" ]; then
	echo "#define DEBUG(...)" >> config.h
else
	echo '#define DEBUG(msg,...) fprintf(stderr, "*** %s:%d (%s) *** " msg "\n", \'  >> config.h
        echo '                               __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__)' >> config.h
fi

echo "#define ENABLE_BINRELOC 1" >> config.h
echo "#define RELEASE $RELEASE" >> config.h

echo -e "\n#endif	/* __CONFIG_H__ */" >> config.h

echo "Writing Makefile..."
rm -f Makefile

echo "GTK_LIBS = ${GTK_LIBS}" > Makefile
echo "GTK_CFLAGS = ${GTK_FLAGS}" >> Makefile
echo "SOUP_LIBS = ${SOUP_LIBS}" >> Makefile
echo "SOUP_CFLAGS = ${SOUP_FLAGS}" >> Makefile
echo "PACKAGE = `basename ${PWD}`" >> Makefile
echo "ARCHOPTS = " >> Makefile
echo "LIBDIR = $LIBDIR" >> Makefile

cat Makefile.in >> Makefile

echo -e "\nDone. Type \"make\" to compile the program.\n"


if [ "$RELEASE" == 0 ]; then
	cat << EOF
*********************************************************
* This is work in progress! Please report bugs at:      *
*      http://developer.berlios.de/bugs/?group_id=5897  *
* Or send patches to:                                   *
*      http://developer.berlios.de/patch/?group_id=5897 *
*********************************************************
EOF
else
	cat << EOF
If you get errors, probably you don't have the right libraries,
includes or utilities. However, if you're sure this is a bug in my
code, please send a patch (use "diff -u") to <leandro@hardinfo.org>.
EOF
fi