#!/usr/bin/env bash
#
# ToscoConf 0.02
# Copyright (c) 2003 Leandro Pereira <leandro@linuxmag.com.br>
# 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)
#
# ---------------------------------------------------------------------------
# Some defaults

IGNORE_GTK2=0
DISABLE_NLS=0

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

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

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

# ---------------------------------------------------------------------------
# Damn-cool command line argument parsing. Yay.

while [ "$1" != "" ]; do
	case $1 in
		--with-gtk1)
			echo "Building with GTK+ 1.2"
			IGNORE_GTK2=1;;
		--with-gtk2)
			echo "Building with GTK+ 2.0"
			IGNORE_GTK2=0;;
		--disable-nls)
			echo "NLS disabled."
			DISABLE_NLS=1 ;;
		--help)
			echo " --disable-nls		Don't use i18n."
			echo "Interface (default is auto-test):"
			echo " --with-gtk1		Build with GTK1.2 interface."
			echo " --with-gtk2		Build with GTK2.0 interface."
			echo " --help			This help screen."

			exit 1;;
		*)
			echo "Please use the --help switch."
			exit 1;;
	esac
	shift
done


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

echo -n "Running: "
OS=`uname`
echo -n $OS
case $OS in		
	Linux)
		echo -n " (OK) " ;;
	*)
		echo " (not supported, yet!)"
		exit ;;
esac	

PROC=`uname -m`
case $PROC in
	i?86)
		ARCH="ARCH_i386" ;;
	ppc)
		ARCH="ARCH_PPC" ;;
	*)
		echo "Architeture \"$ARCH\" not supported." 
		exit ;;
esac

echo "$PROC ($ARCH)"

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

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

if [ -e "$LSPCI" ]; then
	echo $LSPCI
else
	if [ -e "/proc/pci" ]; then
		echo "not found, will parse /proc/pci"
	else
		echo "no lspci, no /proc/pci..."
		echo "Are you sure you're running Linux?"
		exit
	fi
fi

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


GTK2=-1
if [ "$IGNORE_GTK2" == "0" ]; then
	MIN_VERSION="2.0.0"
	echo -n "Checking for GTK ${MIN_VERSION}... "
	for i in `which pkg-config`; do
		pkg-config --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 "seems ok, will not test though."
				GTK2=1 ;;
			*)
				echo "not found." ;;
		esac
	done
fi

# If the user doesn't have GTK2, try to compile with GTK1.2 :)

GTK1=-1
if [ "$GTK2" -ne 1 ]; then
	min_major=1
	min_minor=2
	min_rev=6
	echo -n "Checking for GTK $min_major.$min_minor.$min_rev... "
	for i in `which gtk-config`; do
		VER=`gtk-config --version`

		# RegExp stolen from AutoConf.
		major=`echo $VER | sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'`
		minor=`echo $VER | sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'`
		rev=`echo $VER | sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'`
		
		if [ $major -lt $min_major ]; then
			break;			
		fi

		if [ $minor -lt $min_minor ]; then
			break;			
		fi

		if [ $rev -lt $min_rev ]; then
			break;			
		fi

		GTK_FLAGS=`gtk-config --cflags`
		GTK_LIBS=`gtk-config --libs`
		echo "seems ok, will not test though."
		GTK1=1 
	done
fi

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

if [ `expr $GTK1 + $GTK2` -eq -2 ]; 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\tapt-get install libgtk2.0-dev\n"
	echo "Will do the trick."
	exit
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

if [ "$LSPCI" ]; then
	echo "#define USE_LSPCI" >> config.h
	echo "#define LSPCI \"$LSPCI -v\"" >> config.h
fi

if [ "$GTK2" -ne -1 ]; then
	echo "#define GTK2" >> config.h
else
	echo "#define GTK1" >> config.h
fi

if [ "$DISABLE_NLS" != "1" ]; then
	echo "#define ENABLE_NLS" >> config.h
fi

echo "#define $ARCH" >> config.h

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

echo "Writing Makefile..."
rm -f Makefile
if [ "$GTK2" -ne -1 ]; then
	echo "TARGET = GTK2" > Makefile
else
	echo "TARGET = GTK1" > Makefile
fi

echo "GTK_LIBS = ${GTK_LIBS}" >> Makefile
echo "GTK_CFLAGS = ${GTK_FLAGS}" >> Makefile
echo "PACKAGE = `basename ${PWD}`" >> Makefile

cat Makefile.in >> Makefile

echo -e "\nDone. Type \"make\" to compile the program.\n"
echo "If you get errors, probably you don't have the right libraries,"
echo "includes or utilities. However, if you're sure this is a bug in my"
echo -e "code, please send a patch (use \"diff -u\") to <leandro@linuxmag.com.br>.\n"

