#!/bin/bash ## NOTE: ## I know this is not a clean way to check for some stuff ## and edit the Makefile, but hey, it does work! # Configure script for eAthena # Copyright (C) 2005 dontBR # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Default variables status_mmx="No" status_sse="No" status_sse2="No" status_sse3="No" status_pcre="No" prefix='/opt/eathena/' # Functions function check_sed { echo -n "Checking for sed... " if [ -f $(which sed) ]; then echo "yes" else echo "Error: sed not found in $PATH" exit 1 fi } function check_gcc { echo -n "Checking for gcc... " if [ -f $(which gcc) ]; then echo "yes" else echo "Error: GCC not found in $PATH" exit 1 fi } function check_make { echo -n "Checking for (g)make... " if [ -f $(which make) ]; then maker=make echo "yes" else if [ -f $(which gmake) ]; then maker=gmake echo "yes" else echo "Error: (g)make not found in $PATH" exit 1 fi fi } function check_sockets { echo -n "Checking for sockets... " echo "#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> int main(){ }" > test_sockets.c if $(gcc test_sockets.c -o test_sockets); then echo "yes" rm -f test_sockets.c test_sockets else echo "Error: Unix sockets not found/working." exit 1 rm -f test_sockets.c fi } function check_mysql_headers { echo -n "Checking for MySQL headers... " if [ -d /usr/local/lib/mysql ]; then # Default echo "yes" mysql_headers_path='/usr/local/lib/mysql' else if [ -d /usr/include/mysql ]; then # Gentoo/Debian/? echo "yes" mysql_headers_path='/usr/include/mysql' else echo "Error: MySQL headers not found." mysql_headers_path='Not found.' fi fi } function optimize { case $@ in mmx ) status_mmx="Yes" ;; sse ) status_sse="Yes" ;; sse2 ) status_sse2="Yes" ;; sse3 ) status_sse3="Yes" ;; all ) status_mmx="Yes" status_sse="Yes" status_sse2="Yes" status_sse3="Yes" ;; esac } function make_changes { if [ "$maker" != "make" ]; then sed -e 's,MAKE = make,MAKE = '$maker',g' Makefile -i fi if [ "$status_mmx" = "Yes" ]; then sed -e 's,# OPT += -mmmx,OPT += -mmmx,g' Makefile -i fi if [ "$status_sse" = "Yes" ]; then sed -e 's,# OPT += -msse,OPT += -msse,g' Makefile -i fi if [ "$status_sse2" = "Yes" ]; then sed -e 's,# OPT += -msse2,OPT += -msse2,g' Makefile -i fi if [ "$status_sse3" = "Yes" ]; then sed -e 's,# OPT += -msse3,OPT += -msse3,g' Makefile -i fi if [ "$status_pcre" = "Yes" ]; then sed -e 's,# OPT += -DPCRE_SUPPORT,OPT += -DPCRE_SUPPORT,g' Makefile -i fi if [ "$mysql_headers_path" != "/usr/local/lib/mysql" ] && [ "$mysql_headers_path" != "Not found." ]; then sed -e 's,LIBS += -L/usr/local/lib/mysql -lmysqlclient,LIBS += -L'$mysql_headers_path' -lmysqlclient,g' Makefile -i fi } function opt_check_pcre { echo -n "Checking for PCRE... " if [ -f /usr/local/lib/pcre.h ]; then echo "yes" status_pcre="Yes" else echo "Error: PCRE not found." status_pcre="No" fi } function make_report { echo "Configuration report:" echo eAthena echo echo Enable PCRE support..... : $status_pcre echo echo Enable MMX optimization. : $status_mmx echo Enable SSE optimization. : $status_sse echo Enable SSE2 optimization : $status_sse2 echo Enable SSE3 optimization : $status_sse3 echo echo MySQL headers path...... : $mysql_headers_path echo echo eAthena will be installed in $prefix echo Please type \'make txt\' or \'make sql\' now to compile eAthena. } function helptext { echo "eAthena Configure Script version 0.1" echo echo "Options:" echo echo " -h Display this help message and exit." echo " -d Enter debug mode." echo " -o Turn on optimization flags." echo " Supported:" echo " mmx" echo " sse" echo " sse2" echo " sse3" echo " all" echo " -e Enable PCRE support." echo " -p Root directory where eA is going to be installed." echo " DON'T FORGET THE LAST SLASH!" echo " For example:" echo " ./configure -p /usr/local/" echo " This will create /usr/local/bin/login-server," echo " /usr/local/etc/eathena/save/account.txt, etc" echo " Default is /opt/eathena/" echo echo "Report bugs (about the configure script) to dontBR at the eAthena Support Board." } function make_installable { echo -e '' >> Makefile echo -e 'install: conf/%.conf conf/%.txt' >> Makefile echo -e ' $(shell mkdir -p '$prefix'bin/)' >> Makefile echo -e ' $(shell mkdir -p '$prefix'etc/eathena/)' >> Makefile echo -e ' $(shell mkdir -p '$prefix'var/log/eathena/)' >> Makefile echo -e ' $(shell mv save '$prefix'etc/eathena/save)' >> Makefile echo -e ' $(shell mv db '$prefix'etc/eathena/db)' >> Makefile echo -e ' $(shell mv conf '$prefix'etc/eathena/conf)' >> Makefile echo -e ' $(shell mv npc '$prefix'etc/eathena/npc)' >> Makefile echo -e ' $(shell mv log/* '$prefix'var/log/eathena/)' >> Makefile echo -e ' $(shell cp *-server* '$prefix'bin/)' >> Makefile echo -e ' $(shell cp ladmin '$prefix'bin/)' >> Makefile echo -e ' $(shell ln -s '$prefix'etc/eathena/save/ '$prefix'bin/)' >> Makefile echo -e ' $(shell ln -s '$prefix'etc/eathena/db/ '$prefix'bin/)' >> Makefile echo -e ' $(shell ln -s '$prefix'etc/eathena/conf/ '$prefix'bin/)' >> Makefile echo -e ' $(shell ln -s '$prefix'etc/eathena/npc/ '$prefix'bin/)' >> Makefile echo -e ' $(shell ln -s '$prefix'var/log/eathena/ '$prefix'bin/log)' >> Makefile echo '' >> Makefile echo -e 'bin-clean:' >> Makefile echo -e ' $(shell rm '$prefix'bin/login-server*)' >> Makefile echo -e ' $(shell rm '$prefix'bin/char-server*)' >> Makefile echo -e ' $(shell rm '$prefix'bin/map-server*)' >> Makefile echo -e ' $(shell rm '$prefix'bin/ladmin)' >> Makefile echo '' >> Makefile echo -e 'uninstall:' >> Makefile echo -e ' bin-clean' >> Makefile echo -e ' $(shell rm '$prefix'bin/save)' >> Makefile echo -e ' $(shell rm '$prefix'bin/db)' >> Makefile echo -e ' $(shell rm '$prefix'bin/conf)' >> Makefile echo -e ' $(shell rm '$prefix'bin/npc)' >> Makefile echo -e ' $(shell rm '$prefix'bin/log)' >> Makefile echo -e ' $(shell rm -rf '$prefix'etc/eathena)' >> Makefile echo -e ' $(shell rm -rf '$prefix'var/log/eathena)' >> Makefile } # Arguments while getopts ":hdo:ep:" opt; do case $opt in h ) helptext ; exit ;; d ) set -x ;; o ) optimize ${OPTARG} ;; e ) opt_check_pcre ;; p ) prefix=${OPTARG} ; [ -d ${OPTARG} ] || echo "The directory $prefix does not exist. Creating...";; esac done # Execution echo "eAthena configure script" echo "Note: This is ALPHA software! Do NOT use it on a production server!" echo echo "Checking for dependencies.." check_sed check_gcc check_make check_sockets check_mysql_headers make_changes make_installable echo make_report exit