#!/usr/bin/env bash # # ToscoConf 0.05 # Copyright (c) 2003-2009 Leandro Pereira # 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) # # --------------------------------------------------------------------------- function usage { echo "Usage: [-l libdir] [-r release] [-h]" echo " -l libdir Specify the library dir [default=autodetect]" echo " -r release Build a (release,debug) version [default=autodetect]" echo " -h This help" } ARGS=`getopt l:p:r:h $*` if test $? != 0; then usage exit 1 fi set -- $ARGS FORCE_LIBDIR="" FORCE_RELEASE="" for arg; do case "$arg" in -l) shift; FORCE_LIBDIR=$1; shift ;; -h) usage; exit 0 ;; -r) shift; case "$1" in release|debug) FORCE_RELEASE=$1 ;; *) echo "Invalid build type; use either release or debug" exit 1 ;; esac shift;; esac done # --------------------------------------------------------------------------- PACKAGE=`basename ${PWD} | cut -d"-" -f1`; VERSION=`basename ${PWD} | cut -d"-" -f2`; if [ "$PACKAGE" == "$VERSION" ]; then VERSION=$(date +"%F.%H:%M:%S") RELEASE=0 else RELEASE=1 fi echo "ToscoConf (version 0.05) for $PACKAGE version $VERSION" # --------------------------------------------------------------------------- case "$FORCE_RELEASE" in debug) RELEASE=0;; release) RELEASE=1;; esac # --------------------------------------------------------------------------- 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 "Building $PACKAGE for $OS $PROC ($ARCH)." echo "" # --------------------------------------------------------------------------- if [ "x$FORCE_LIBDIR" != "x" ]; then echo "Forcing libdir to be $FORCE_LIBDIR" LIBDIR=$FORCE_LIBDIR 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.4" echo -n "Checking for libsoup version >= ${MIN_VERSION}... " for i in `which pkg-config`; do $i --errors-to-stdout libsoup-2.4 \ --atleast-version=$MIN_VERSION > /dev/null case $? in 0) SOUP_FLAGS=`pkg-config libsoup-2.4 --cflags --static` SOUP_LIBS=`pkg-config libsoup-2.4 --libs --static` echo "found `pkg-config libsoup-2.4 --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..." cat << EOF > config.h #ifndef __CONFIG_H__ #define __CONFIG_H__ #define VERSION "$VERSION" #define $ARCH #define ARCH "$ARCH" #define PLATFORM "`uname`" #define KERNEL "`uname -r`" #define HOSTNAME "`hostname`" #define PREFIX "/usr/share/hardinfo" #define LIBPREFIX "$LIBDIR/hardinfo" EOF 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 cat << EOF >> config.h #define ENABLE_BINRELOC 1 #define RELEASE $RELEASE #endif /* __CONFIG_H__ */ EOF echo "Writing Makefile..." cat << EOF > Makefile GTK_LIBS = -lpthread -lgthread-2.0 -lrt ${GTK_LIBS} GTK_CFLAGS = ${GTK_FLAGS} SOUP_LIBS = ${SOUP_LIBS} SOUP_CFLAGS = ${SOUP_FLAGS} PACKAGE = `basename ${PWD}` ARCHOPTS = LIBDIR = $LIBDIR EOF 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 or send patches to: * * http://bugs.hardinfo.org * ******************************************************************** 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 use the bug tracker at . EOF fi