1#!/bin/sh 2######################################################################### 3# 4# $Id: configure,v 1.5.2.2 2004/01/07 00:09:05 richard Exp $ 5# 6# ======================================================================= 7# 8# tdl - A console program for managing to-do lists 9# 10# Copyright (C) Richard P. Curnow 2003-2004 11# 12# This program is free software; you can redistribute it and/or modify 13# it under the terms of version 2 of the GNU General Public License as 14# published by the Free Software Foundation. 15# 16# This program is distributed in the hope that it will be useful, but 17# WITHOUT ANY WARRANTY; without even the implied warranty of 18# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19# General Public License for more details. 20# 21# You should have received a copy of the GNU General Public License along 22# with this program; if not, write to the Free Software Foundation, Inc., 23# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 24# 25# ======================================================================= 26 27if [ -f config.log ]; then rm -f config.log ; fi 28exec 5>config.log 29 30if [ "x${CC}" = "x" ]; then 31 MYCC="gcc" 32else 33 MYCC="${CC}" 34fi 35 36if [ "x${CFLAGS}" = "x" ]; then 37 MYCFLAGS="-O2 -Wall" 38else 39 MYCFLAGS="${CFLAGS}" 40fi 41 42# ======================================================================= 43# Functions 44 45#{{{ cleanup 46cleanup () { 47 if [ -f docheck.c ]; then rm -f docheck.c ; fi 48 if [ -f docheck.o ]; then rm -f docheck.o ; fi 49 if [ -f docheck ]; then rm -f docheck ; fi 50 rm -rf docheck.c docheck.o docheck 51} 52#}}} 53 54#{{{ test_cc : basic compiler sanity check 55test_cc () { 56 printf "Testing whether your compiler \"$MYCC $MYCFLAGS\" works : " 57 cat >docheck.c <<EOF; 58#include <stdio.h> 59int main (int argc, char **argv) 60{ 61 return 0; 62} 63EOF 64 ${MYCC} ${MYCFLAGS} -o docheck docheck.c 1>&5 2>&5 65 if [ $? -eq 0 ] 66 then 67 printf "it works\n" 68 else 69 printf "it doesn't work\n" 70 printf "Failed program was\n" 1>&5 71 cat docheck.c 1>&5 72 rm -f docheck.c docheck 73 exit 1 74 fi 75 cleanup 76} 77#}}} 78#{{{ test_readline_include 79test_readline_include () { 80 # Objective : test whether we can compile and link a program using 81 # readline, and if so how. 82 83 # As for includes, is it <readline.h> or <readline/readline.h> 84 85 # As for linking, do we need -ltermcap, -lncurses etc 86 87 printf "Testing what to include for readline : " 88 cat >docheck.c <<EOF; 89#include <stdio.h> 90#include <readline.h> 91int main (int argc, char **argv) { 92 printf("%s\n", rl_library_version); 93 return 0; 94} 95EOF 96 ${MYCC} ${MYCFLAGS} ${readline_inc_arg} -c -o docheck.o docheck.c 1>&5 2>&5 97 if [ $? -eq 0 ]; then 98 printf "<readline.h>\n" 99 READLINE_DEFINE="-DBARE_READLINE_H=1" 100 else 101 rm -f docheck.c 102 cat >docheck.c <<EOF; 103#include <stdio.h> 104#include <readline/readline.h> 105int main (int argc, char **argv) { 106 printf("%s\n", rl_library_version); 107 return 0; 108} 109EOF 110 ${MYCC} ${MYCFLAGS} ${readline_inc_arg} -c -o docheck.o docheck.c 1>&5 2>&5 111 if [ $? -eq 0 ]; then 112 printf "<readline/readline.h>\n" 113 READLINE_DEFINE="-DBARE_READLINE_H=0" 114 else 115 printf "FAILED\n" 116 printf "Can't include readline.h, giving up on readline" 117 use_readline="no" 118 fi 119 fi 120 121 cleanup 122 return 123} 124 125#}}} 126#{{{ test_readline_lib 127test_readline_lib () { 128 129 printf "Testing extra libraries to link with readline : " 130 cat >docheck.c <<EOF; 131#include <stdio.h> 132#if BARE_READLINE_H 133#include <readline.h> 134#else 135#include <readline/readline.h> 136#endif 137 138int main (int argc, char **argv) { 139 printf("%s\n", rl_library_version); 140 return 0; 141} 142EOF 143 ${MYCC} ${MYCFLAGS} ${readline_inc_arg} ${READLINE_DEFINE} -c -o docheck.o docheck.c 1>&5 2>&5 144 if [ $? -ne 0 ]; then 145 printf "unexpected compile failure, giving up on readline\n" 146 use_readline="no" 147 cleanup 148 return 149 fi 150 151 # Now try to link it 152 ${MYCC} ${MYCFLAGS} -o docheck docheck.o ${readline_lib_arg} -lreadline 1>&5 2>&5 153 if [ $? -eq 0 ]; then 154 extra_readline_libs="" 155 printf "(none)\n" 156 cleanup 157 return 158 fi 159 160 ${MYCC} ${MYCFLAGS} -o docheck docheck.o ${readline_lib_arg} -lreadline -ltermcap 1>&5 2>&5 161 if [ $? -eq 0 ]; then 162 extra_readline_libs="-ltermcap" 163 printf -- "-ltermcap\n" 164 cleanup 165 return 166 fi 167 168 ${MYCC} ${MYCFLAGS} -o docheck docheck.o ${readline_lib_arg} -lreadline -lncurses 1>&5 2>&5 169 if [ $? -eq 0 ]; then 170 extra_readline_libs="-lncurses" 171 printf -- "-lncurses\n" 172 cleanup 173 return 174 fi 175 176 printf "can't link a readline program\n" 177 use_readline="no" 178 return 179 180} 181#}}} 182#{{{ test_completion_matches 183test_completion_matches () { 184 # See if the readline library has completion_matches() 185 186 printf "Testing for completion_matches in readline : " 187 cat >docheck.c <<EOF; 188#include <stdio.h> 189#if BARE_READLINE_H 190#include <readline.h> 191#else 192#include <readline/readline.h> 193#endif 194 195int main (int argc, char **argv) { 196 void *x = &completion_matches; 197 printf("%p\n", x); 198 return 0; 199} 200EOF 201 ${MYCC} ${MYCFLAGS} ${readline_inc_arg} ${READLINE_DEFINE} -c -o docheck.o docheck.c 1>&5 2>&5 202 if [ $? -ne 0 ]; then 203 printf "no\n"; 204 has_completion_matches=no 205 cleanup 206 return 207 fi 208 209 ${MYCC} ${MYCFLAGS} -o docheck docheck.o ${readline_lib_arg} -lreadline ${extra_readline_libs} 1>&5 2>&5 210 if [ $? -eq 0 ]; then 211 printf "yes\n" 212 has_completion_matches=yes 213 else 214 printf "no\n" 215 has_completion_matches=no 216 fi 217 cleanup 218} 219#}}} 220#{{{ test_rl_completion_matches 221test_rl_completion_matches () { 222 # See if the readline library has completion_matches() 223 224 printf "Testing for rl_completion_matches in readline : " 225 cat >docheck.c <<EOF; 226#include <stdio.h> 227#if BARE_READLINE_H 228#include <readline.h> 229#else 230#include <readline/readline.h> 231#endif 232 233int main (int argc, char **argv) { 234 void *x = &rl_completion_matches; 235 printf("%p\n", x); 236 return 0; 237} 238EOF 239 ${MYCC} ${MYCFLAGS} ${readline_inc_arg} ${READLINE_DEFINE} -c -o docheck.o docheck.c 1>&5 2>&5 240 if [ $? -ne 0 ]; then 241 printf "no\n" 242 has_rl_completion_matches=no 243 cleanup 244 return 245 fi 246 247 ${MYCC} ${MYCFLAGS} -o docheck docheck.o ${readline_lib_arg} -lreadline ${extra_readline_libs} 1>&5 2>&5 248 if [ $? -eq 0 ]; then 249 printf "yes\n" 250 has_rl_completion_matches=yes 251 else 252 printf "no\n" 253 has_rl_completion_matches=no 254 fi 255 cleanup 256} 257#}}} 258 259#{{{ usage 260usage () { 261 cat <<EOF; 262\`configure' configures tdl to adapt to many kinds of systems. 263 264Usage: ./configure [OPTION]... 265 266Defaults for the options are specified in brackets. 267 268Configuration: 269 -h, --help display this help and exit 270 271Installation directories: 272 --prefix=PREFIX install architecture-independent files in PREFIX 273 [/usr/local] 274 275By default, \`make install' will install all the files in 276\`/usr/local/bin', \`/usr/local/lib' etc. You can specify 277an installation prefix other than \`/usr/local' using \`--prefix', 278for instance \`--prefix=$HOME'. 279 280For better control, use the options below. 281 --without-readline Don't try to use GNU readline 282 --readline-dir=DIR Specify parent of readline include and lib directories 283 --readline-inc-dir=DIR Specify where readline include directory is 284 --readline-lib-dir=DIR Specify where readline lib directory is 285 286Fine tuning of the installation directories: 287 --bindir=DIR user executables [EPREFIX/bin] 288 --infodir=DIR info documentation [PREFIX/info] 289 --mandir=DIR man documentation [PREFIX/man] 290 291Some influential environment variables: 292 CC C compiler command 293 CFLAGS C compiler flags 294 LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a 295 nonstandard directory <lib dir> 296 297Use these variables to override the choices made by \`configure' or to help 298it to find libraries and programs with nonstandard names/locations. 299 300Report bugs to <rc@rc0.org.uk>. 301EOF 302} 303#}}} 304# ======================================================================= 305 306# Defaults for variables 307PREFIX=/usr/local 308 309use_readline=yes 310bad_options=no 311use_dotlock=yes 312 313# Parse options to configure 314for option 315do 316 case "$option" in 317 318 --prefix=* | --install-prefix=* ) 319 PREFIX=`echo $option | sed -e 's/[^=]*=//;'` 320 ;; 321 --bindir=* ) 322 BINDIR=`echo $option | sed -e 's/[^=]*=//;'` 323 ;; 324 --mandir=* ) 325 MANDIR=`echo $option | sed -e 's/[^=]*=//;'` 326 ;; 327 --infodir=* ) 328 INFODIR=`echo $option | sed -e 's/[^=]*=//;'` 329 ;; 330 --without-readline ) 331 use_readline=no 332 ;; 333 --readline-dir=* ) 334 readline_dir=`echo $option | sed -e 's/[^=]*=//;'` 335 ;; 336 --readline-inc-dir=* ) 337 readline_inc_dir=`echo $option | sed -e 's/[^=]*=//;'` 338 ;; 339 --readline-lib-dir=* ) 340 readline_lib_dir=`echo $option | sed -e 's/[^=]*=//;'` 341 ;; 342 --disable-dotlock ) 343 use_dotlock=no 344 ;; 345 -h | --help ) 346 usage 347 exit 1 348 ;; 349 * ) 350 printf "Unrecognized option : $option\n" 351 bad_options=yes 352 ;; 353 esac 354done 355 356if [ ${bad_options} = yes ]; then 357 exit 1 358fi 359 360#{{{ process readline-related arguments 361if [ "$use_readline" = "yes" ]; then 362 if [ "x$readline_dir" != "x" ]; then 363 if [ "x$readline_inc_dir" = "x" ]; then 364 readline_inc_dir="${readline_dir}/include" 365 fi 366 if [ "x$readline_lib_dir" = "x" ]; then 367 readline_lib_dir="${readline_dir}/lib" 368 fi 369 fi 370 371 if [ "x$readline_inc_dir" != "x" ]; then 372 readline_inc_arg="-I${readline_inc_dir}" 373 else 374 readline_inc_arg="" 375 fi 376 377 if [ "x$readline_lib_dir" != "x" ]; then 378 readline_lib_arg="-L${readline_lib_dir} -Wl,-rpath,${readline_lib_dir}" 379 else 380 readline_lib_arg="" 381 fi 382fi 383#}}} 384 385test_cc 386if [ "${use_readline}" = "yes" ]; then test_readline_include ; fi 387if [ "${use_readline}" = "yes" ]; then test_readline_lib ; fi 388if [ "${use_readline}" = "yes" ]; then test_completion_matches ; fi 389if [ "${use_readline}" = "yes" ]; then test_rl_completion_matches ; fi 390 391case "${use_readline}-${has_rl_completion_matches}-${has_completion_matches}" in 392 yes-yes-* ) 393 READLINE_DEFINE="-DUSE_READLINE=1 ${READLINE_DEFINE} -DUSE_RL_COMPLETION_MATCHES=1" 394 ;; 395 yes-*-yes ) 396 READLINE_DEFINE="-DUSE_READLINE=1 ${READLINE_DEFINE} -DUSE_RL_COMPLETION_MATCHES=0" 397 ;; 398 yes-* ) 399 printf "Can't find a completion function in readline\n" 400 exit 1 401 ;; 402 no-* ) 403 READLINE_DEFINE="-DUSE_READLINE=0" 404 printf "Not using readline\n"; 405esac 406 407case "${use_dotlock}" in 408 yes ) 409 DOTLOCK_DEFINE="-DUSE_DOTLOCK=1" 410 ;; 411 no ) 412 DOTLOCK_DEFINE="" 413 ;; 414esac 415 416DEFINES=${DOTLOCK_DEFINE} 417 418if [ "x" = "x${BINDIR}" ]; then BINDIR=${PREFIX}/bin ; fi 419if [ "x" = "x${MANDIR}" ]; then MANDIR=${PREFIX}/man ; fi 420if [ "x" = "x${INFODIR}" ]; then INFODIR=${PREFIX}/info ; fi 421 422lib_readline="${readline_lib_arg} -lreadline ${extra_readline_libs}" 423 424echo "Generating Makefile" 425 426rm -f Makefile 427sed -e "s%@cc@%${MYCC}%; \ 428 s%@cflags@%${MYCFLAGS}%; \ 429 s%@prefix@%${PREFIX}%; \ 430 s%@bindir@%${BINDIR}%; \ 431 s%@mandir@%${MANDIR}%; \ 432 s%@infodir@%${INFODIR}%; \ 433 s%@readline_define@%${READLINE_DEFINE}%; \ 434 s%@defines@%${DEFINES}%; \ 435 s%@inc_readline@%${readline_inc_arg}%; \ 436 s%@lib_readline@%${lib_readline}%; \ 437 " < Makefile.in > Makefile 438 439# ======================================================================= 440# vim:et:sw=2:ht=2:sts=2:fdm=marker:cms=#%s 441 442