1#!/bin/sh 2 3# Based on FFMPEG's configure (http://ffmpeg.sourceforge.net/) 4 5PREFIX=${PREFIX:=/usr/local} 6CC=${CC:=gcc} 7COMPILER_PREFIX= 8FLAGS="" 9CFLAGS="${CFLAGS}" 10LDFLAGS="" 11LANGUAGE="english" 12CONFIG_USER_CHAN_LIST="-DUSER_LIST_CHAN" 13CONFIG_KEEPALIVE="-DKEEPALIVE" 14CONFIG_REALIDLETIME="" 15CONFIG_EXT="" 16EXTRA_MODULES="" 17NAKENPASSWD="" 18 19targetos=`uname -s` 20case $targetos in 21MINGW*) 22PREFIX="/c/Program Files/Naken Chat" 23FLAGS="${FLAGS} -DWINDOWS -mwindows -DNOCRYPT" 24CONFIG_EXT=".exe" 25;; 26esac 27 28show_help() 29{ 30 echo 31 echo "Usage: ./configure [options]" 32 echo 33 echo " --help list options" 34 echo " --cflags=CFLAGS extra compiler flags" 35 echo " --prefix=PATH path to install to" 36 echo " --compiler-prefix=PREFIX for cross-compilers" 37 echo " --disable-keepalive disable socket keepalive option" 38 echo " --disable-userchanlist disable userlist based on channel" 39 echo " --enable-debug compile in debug code" 40 echo " --enable-hidden-caves enable hidden caves feature" 41 echo " --enable-dotQ compile in .Q option" 42 echo " --enable-low-mem-gags Save memory with 'gags' but use more CPU" 43 echo " --enable-whofile compile support to save current userlist to a file" 44 echo " --enable-sqlite enable user registration with sqlite" 45 echo " --enable-passwd enable user registration with text files" 46 echo " --enable-elite enable the 31i73 filter" 47 echo " --enable-plugins enable plugin support" 48 echo " --enable-log-timestamps enable put timestamp in log file" 49 echo " --enable-language=LANG Set the server's language" 50 echo " --enable-ssl Enable OpenSSL encryption" 51 52 for a in src/language/* 53 do 54 b=`basename ${a}` 55 c="${c} ${b%.*}" 56 done 57 echo " LANG =${c}" 58 echo 59 60 exit 61} 62 63test_compiler() 64{ 65 cat >config.c <<EOF 66 main() { } 67EOF 68 69 ${1} -o config config.c >>config.log 2>&1 70} 71 72test_lib() 73{ 74 cat >config.c <<EOF 75main() { } 76EOF 77 78 ${COMPILER_PREFIX}${CC} -o config config.c $1 >>config.log $2 2>&1 79} 80 81test_include() 82{ 83 cat >config.c <<EOF 84#include <${1}> 85main() { } 86EOF 87 88 ${COMPILER_PREFIX}${CC} -o config config.c >>config.log $2 2>&1 89} 90 91test_strcasestr() 92{ 93 cat >config.c <<EOF 94#include <string.h> 95main() { printf("%s",strcasestr("om du var har","var")); } 96EOF 97 98 ${COMPILER_PREFIX}${CC} -o config config.c >>config.log 2>&1 99} 100 101toupper() 102{ 103 echo "$@" | tr '[a-z]' '[A-Z]' 104} 105 106instr() 107{ 108 for s in $2; do 109 case "${s}" in 110 *${1}*) return 0 111 ;; 112 esac 113 done 114 115 return 1 116} 117 118check_language() 119{ 120 if [ -e "src/language/${1}.h" ] 121 then 122 LANGUAGE="${1}" 123 else 124 echo "Language '${1}' not supported. Supported languages are:" 125 echo 126 a=`ls src/language` 127 for lang in $a 128 do 129 echo " ${lang%.h}" 130 done 131 132 echo 133 echo "If you'd like to add your native language to the list, follow the" 134 echo "instructions at http://nakenchat.naken.cc/international.php" 135 echo 136 exit 137 fi 138} 139 140cleanup() 141{ 142 if [ -e config.c ]; then rm config.c; fi 143 if [ -e config.exe ]; then rm config.exe; fi 144 if [ -e config ]; then rm config; fi 145 if [ -e config.log ]; then rm config.log; fi 146} 147 148for option in $@; do 149 150 optval="${option#*=}" 151 152 case "$option" in 153 --help) show_help 154 ;; 155 --cflags=*) CFLAGS="$optval" 156 ;; 157 --compiler-prefix=*) COMPILER_PREFIX="$optval" 158 ;; 159 --prefix=*) PREFIX="$optval" 160 ;; 161 --enable-debug) FLAGS="${FLAGS} -DDEBUG"; CFLAGS="${CFLAGS} -g" 162 ;; 163 --enable-dotQ) FLAGS="${FLAGS} -DQQUIT" 164 ;; 165 --enable-low-mem-gags) FLAGS="${FLAGS} -DLOW_MEM_GAGS" 166 ;; 167 --enable-whofile) FLAGS="${FLAGS} -DWHOFILE" 168 ;; 169 --enable-elite) FLAGS="${FLAGS} -DLEET" 170 ;; 171 --enable-hidden-caves) FLAGS="${FLAGS} -DHIDDEN_CAVES" 172 ;; 173 --enable-log-timestamps) FLAGS="${FLAGS} -DLOG_TIMESTAMPS" 174 ;; 175 --enable-language=*) check_language "$optval" 176 ;; 177 --disable-keepalive) CONFIG_KEEPALIVE="" 178 ;; 179 --enable-realidletime) CONFIG_REALIDLETIME="-DREALIDLETIME" 180 ;; 181 --enable-plugins) 182 FLAGS="${FLAGS} -DPLUGINS" 183 if test_lib "-ldl"; then LDFLAGS="${LDFLAGS} -ldl"; fi 184 ;; 185 --disable-userchanlist) CONFIG_USER_CHAN_LIST="" 186 ;; 187 --enable-sqlite) 188 EXTRA_MODULES="passwd_sqlite.o" 189 FLAGS="${FLAGS} -DPASSWD -DCHECKNAME" 190 LDFLAGS="${LDFLAGS} -lsqlite3" 191 if ! test_lib "-lsqlite3" 192 then 193 if test_lib "-lsqlite3" "-L/usr/local/lib" 194 then 195 LDFLAGS="${LDFLAGS} -L/usr/local/lib" 196 else 197 echo "Couldn't find libsqlite3.so... maybe you need to install it?" 198 fi 199 fi 200 if ! test_include "sqlite3.h" 201 then 202 if test_include "sqlite3.h" "-I/usr/local/include" 203 then 204 CFLAGS="${CFLAGS} -I/usr/local/include" 205 else 206 echo "Couldn't find sqlite3.h... maybe you need to install it?" 207 fi 208 fi 209 ;; 210 --enable-ssl) 211 FLAGS="${FLAGS} -DENABLE_SSL" 212 LDFLAGS="${LDFLAGS} -lssl -lcrypto" 213 214 if ! test_lib "-lssl -lcrypto" 215 then 216 echo "Couldn't find libssl.so/crypto.so... maybe you need to install it?" 217 exit 1 218 fi 219 220 if ! test_include "openssl/ssl.h" 221 then 222 echo "Couldn't find openssl/ssl.h maybe you need to install it?" 223 exit 1 224 fi 225 226 if ! test_include "openssl/err.h" 227 then 228 echo "Couldn't find openssl/err.h maybe you need to install it?" 229 exit 1 230 fi 231 ;; 232 --enable-passwd) 233 EXTRA_MODULES="passwd_text.o" 234 FLAGS="${FLAGS} -DPASSWD -DCHECKNAME" 235 LDFLAGS="${LDFLAGS} -lsqlite3" 236 if test_lib "-lcrypt"; then LDFLAGS="${LDFLAGS} -lcrypt"; fi 237 if ! test_include "crypt.h"; then FLAGS="${FLAGS} -DNO_CRYPT_DOT_H"; fi 238 NAKENPASSWD="nakenpasswd" 239 ;; 240 esac 241 242done 243 244if ! test_compiler $CC 245then 246 CC="gcc" 247fi 248 249if test_lib "-lpthread"; then LDFLAGS="${LDFLAGS} -lpthread"; fi 250if test_lib "-lc_r"; then LDFLAGS="${LDFLAGS} -lc_r"; fi 251if test_lib "-lsocket"; then LDFLAGS="${LDFLAGS} -lsocket"; fi 252if test_lib "-lnsl"; then LDFLAGS="${LDFLAGS} -lnsl"; fi 253if test_lib "-lws2_32"; then LDFLAGS="${LDFLAGS} -lws2_32"; fi 254if ! test_strcasestr; then FLAGS="${FLAGS} -DNOCASESTR"; fi 255 256CONFIG_LANG=`toupper "${LANGUAGE}"` 257FLAGS="${FLAGS} -DLANGUAGE_${CONFIG_LANG} ${CONFIG_USER_CHAN_LIST} ${CONFIG_KEEPALIVE} ${CONFIG_REALIDLETIME}" 258 259if ! instr "-O" "${CFLAGS}"; then CFLAGS="${CFLAGS} -O2"; fi 260if ! instr "-DDEBUG" "${FLAGS}"; then CFLAGS="${CFLAGS} -s"; fi 261 262if ! instr "WINDOWS" "${FLAGS}" 263then 264 a=`${COMPILER_PREFIX}${CC} --version` 265 266 if instr "mingw" "${a}" 267 then 268 #PREFIX="/c/Program Files/Naken Chat" 269 FLAGS="${FLAGS} -DWINDOWS -mwindows -DNOCRYPT" 270 CONFIG_EXT=".exe" 271 fi 272fi 273 274cleanup 275 276echo "# Generated include file" > config.mak 277echo >> config.mak 278echo "# ./configure $@" > config.mak 279echo >> config.mak 280echo "PREFIX=${PREFIX}" >> config.mak 281echo "CC=${CC}" >> config.mak 282echo "COMPILER_PREFIX=${COMPILER_PREFIX}" >> config.mak 283echo "OPTIONS=${FLAGS}" >> config.mak 284echo "LDFLAGS=${LDFLAGS}" >> config.mak 285echo "CFLAGS=${CFLAGS} \$(OPTIONS)" >> config.mak 286echo "CONFIG_EXT=${CONFIG_EXT}" >> config.mak 287echo "EXTRA_MODULES=${EXTRA_MODULES}" >> config.mak 288echo "NAKENPASSWD=${NAKENPASSWD}" >> config.mak 289echo >> config.mak 290 291echo 292echo "Configuration:" 293echo " Programs: nakenchat ${NAKENPASSWD}" 294echo " Install to: ${PREFIX}" 295echo " Compiler: ${COMPILER_PREFIX}${CC}" 296echo " Options: ${FLAGS}" 297echo " LDFLAGS: ${LDFLAGS}" 298echo " CFLAGS: ${CFLAGS}" 299echo " Language: ${LANGUAGE}" 300echo 301echo "Now type: make" 302echo 303 304 305