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