1#!/bin/sh 2# Copyright 2003-2005 Wang, Chun-Pin All rights reserved. 3CurDir=`pwd` 4ConfigH=${CurDir}/include/config.h 5ConfigHIn=${CurDir}/include/config.h.in 6Makefile=${CurDir}/Makefile.inc 7MakefileIn=${CurDir}/Makefile.inc.in 8 9if [ -z "$CC" ]; then 10 CC=gcc 11fi 12if [ -z "$AR" ]; then 13 AR=ar 14fi 15if [ -z "$RANLIB" ]; then 16 RANLIB=ranlib 17fi 18EXTRACFLAGS="$CFLAGS" 19EXTRALDFLAGS="$LDFLAGS" 20 21perl -v > /dev/null 2>&1 22if [ $? != 0 ]; then 23 echo "I am sorry that you need perl to run configure" 24 exit 1 25fi 26 27PrintHelp() 28{ 29 echo "Optional Features:" 30 echo " --with-mysql[=DIR] Users database is a MySQL database (default=no)" 31 echo " --with-pgsql[=DIR] Users database is a PostgreSQL database (default=no)" 32 echo " --with-ssl[=DIR] Enable SSL/TLS support (default=no)" 33 echo " --with-iconv=[DIR] Enable codepage to unicode conversion for UTF-8 FTP (default=no)" 34 echo " --prefix=PREFIX Install architecture-independent files in PREFIX [/usr/local]" 35 echo "" 36 echo "Some influential environment variables:" 37 echo " CC C compiler command" 38 echo " AR ar command" 39 echo " RANLIB ranlib command" 40 echo " CFLAGS C compiler flags, e.g. -I<include dir> if your header file" 41 echo " is in a nonstandard directory <include dir>" 42 echo " LDFLAGS Linker flags, e.g. -L<lib dir> if you have libraries in a" 43 echo " nonstandard directory <lib dir>" 44 echo "" 45 46} 47 48EnableOpt() 49{ 50 perl -pi -e "s/#undef $1$/#define $1/" $ConfigH 51} 52 53GetOptionDir() 54{ 55 for i in $@; 56 do 57 opt=`echo $i | cut -d= -f 1` 58 arg=`echo $i | cut -d= -f 2` 59 if [ "$opt" = "$arg" ]; then 60 arg="" 61 fi 62 case "$opt" in 63 "--with-mysql") 64 WITH_MYSQL=y 65 MYSQL_DIR=$arg 66 ;; 67 "--with-pgsql") 68 WITH_PGSQL=y 69 PGSQL_DIR=$arg 70 ;; 71 "--with-ssl") 72 WITH_SSL=y 73 SSL_DIR=$arg 74 ;; 75 "--with-iconv") 76 WITH_ICONV=y 77 ICONV_DIR=$arg 78 ;; 79 "--prefix") 80 PREFIX=$arg 81 ;; 82 *) 83 ;; 84 esac 85 done 86} 87 88GetOptionDir $@ 89 90if [ -z "$PREFIX" ]; then 91 PREFIX="/usr/local" 92fi 93HostOS=`uname` 94case $HostOS in 95 *[Ll][Ii][Nn][Uu][Xx]*) 96 EXTRACFLAGS="$EXTRACFLAGS -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE"; 97 ;; 98 *[Ff][Rr][Ee][Ee][Bb][Ss][Dd]*) 99 # Nothing for now. 100 ;; 101esac 102 103if [ "$1" = "--help" ]; then 104 PrintHelp 105 exit 0; 106fi 107 108cp $ConfigHIn $ConfigH 109cp $MakefileIn $Makefile 110 111##################################################### 112# Test HAVE_EXLOCK 113##################################################### 114echo -n "O_EXLOCK.............. " 115cat > conftest.c << _ACEOF 116#include <stdio.h> 117#include <sys/types.h> 118#include <fcntl.h> 119int main() 120{ 121 int flag=O_EXLOCK; 122} 123 124_ACEOF 125 126${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS}> /dev/null 2>&1 127if [ $? = 0 ]; then 128 echo "[YES]" 129 EnableOpt HAVE_EXLOCK 130else 131 echo "[NO]" 132fi 133 134##################################################### 135# Test HAVE_FDCOPY 136##################################################### 137echo -n "FD_COPY............... " 138cat > conftest.c << _ACEOF 139#include <stdio.h> 140#include <sys/types.h> 141 142int main() 143{ 144 int a, b; 145 FD_COPY(&a, &b); 146} 147_ACEOF 148 149${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 150if [ $? = 0 ]; then 151 echo "[YES]" 152 EnableOpt HAVE_FDCOPY 153else 154 echo "[NO]" 155fi 156 157 158##################################################### 159# Test HAVE_TCPWRAPPER 160##################################################### 161echo -n "TCP Wrapper........... " 162cat > conftest.c << _ACEOF 163#include <stdio.h> 164#include <tcpd.h> 165int deny_severity; 166int allow_severity; 167 168int main() 169{ 170 struct request_info req; 171 hosts_access(&req); 172} 173_ACEOF 174 175${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} -lwrap > /dev/null 2>&1 176if [ $? = 0 ]; then 177 echo "[YES]" 178 EnableOpt HAVE_TCPWRAPPER 179 EXTRALDFLAGS="$EXTRALDFLAGS -lwrap" 180else 181 ${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} -lwrap -lnsl > /dev/null 2>&1 182 if [ $? = 0 ]; then 183 echo "[YES]" 184 EnableOpt HAVE_TCPWRAPPER 185 EXTRALDFLAGS="$EXTRALDFLAGS -lwrap -lnsl" 186 else 187 echo "[NO]" 188 fi 189fi 190 191##################################################### 192# Test HAVE_PRINTFLIKE 193##################################################### 194echo -n "Have printflike....... " 195cat > conftest.c << _ACEOF 196#include <stdio.h> 197void func(int, const char *, ...) __printflike(2, 3); 198 199int main() {} 200_ACEOF 201 202${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 203if [ $? = 0 ]; then 204 echo "[YES]" 205 EnableOpt HAVE_PRINTFLIKE 206else 207 echo "[NO]" 208fi 209 210##################################################### 211# Test HAVE_PWEXPIRE 212##################################################### 213echo -n "pw_expire............. " 214cat > conftest.c << _ACEOF 215#include <stdio.h> 216#include <sys/types.h> 217#include <pwd.h> 218 219int main() 220{ 221 struct passwd pw; 222 time_t t=pw.pw_expire; 223} 224_ACEOF 225 226${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 227if [ $? = 0 ]; then 228 echo "[YES]" 229 EnableOpt HAVE_PWEXPIRE 230else 231 echo "[NO]" 232fi 233 234##################################################### 235# Test HAVE_BSDGLOB 236##################################################### 237echo -n "bsd glob.............. " 238cat > conftest.c << _ACEOF 239#include <stdio.h> 240#include <sys/types.h> 241#include <glob.h> 242 243int main() 244{ 245 glob_t glob; 246 int a=glob.gl_matchc|GLOB_LIMIT; 247} 248_ACEOF 249 250${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 251if [ $? = 0 ]; then 252 echo "[YES]" 253 EnableOpt HAVE_BSDGLOB 254else 255 echo "[NO]" 256fi 257 258##################################################### 259# Test HAVE_MD5FILE 260##################################################### 261echo -n "MD5File............... " 262cat > conftest.c << _ACEOF 263#include <stdio.h> 264#include <sys/types.h> 265#include <md5.h> 266 267int main() 268{ 269 char *szBuf; 270 MD5File("a", szBuf); 271} 272_ACEOF 273 274${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 275if [ $? = 0 ]; then 276 echo "[YES]" 277 EnableOpt HAVE_MD5FILE 278else 279 ${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} -lmd > /dev/null 2>&1 280 if [ $? = 0 ]; then 281 echo "[YES]" 282 EnableOpt HAVE_MD5FILE 283 EXTRALDFLAGS="$EXTRALDFLAGS -lmd" 284 else 285 echo "[NO]" 286 fi 287fi 288 289##################################################### 290# Test HAVE_PWCACHE 291##################################################### 292echo -n "user_from_uid......... " 293cat > conftest.c << _ACEOF 294#include <stdio.h> 295#include <sys/types.h> 296#include <pwd.h> 297#include <grp.h> 298int main() 299{ 300 user_from_uid(1, 2); 301 group_from_gid(1, 2); 302} 303_ACEOF 304 305${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 306if [ $? = 0 ]; then 307 echo "[YES]" 308 EnableOpt HAVE_PWCACHE 309else 310 echo "[NO]" 311fi 312 313##################################################### 314# Test HAVE_SHADOW_H 315##################################################### 316echo -n "Shadow passowd........ " 317cat > conftest.c << _ACEOF 318#include <stdio.h> 319#include <sys/types.h> 320#include <shadow.h> 321int main() 322{ 323 324} 325_ACEOF 326 327${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 328if [ $? = 0 ]; then 329 echo "[YES]" 330 EnableOpt HAVE_SHADOW_H 331else 332 echo "[NO]" 333fi 334 335##################################################### 336# Test HAVE_SENDFILE 337##################################################### 338echo -n "Linux sendfile........ " 339cat > conftest.c << _ACEOF 340#include <stdio.h> 341#include <sys/types.h> 342#include <sys/sendfile.h> 343#include <unistd.h> 344int main() 345{ 346 int i; 347 off_t o; 348 size_t c; 349 (void)sendfile(i,i,&o,c); 350 351 return 0; 352} 353_ACEOF 354 355${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 356if [ $? = 0 ]; then 357 echo "[YES]" 358 EnableOpt HAVE_SENDFILE 359 EnableOpt HAVE_LINUX_SENDFILE 360else 361 echo "[NO]" 362 ##################################################### 363 # Test BSD SENDFILE 364 ##################################################### 365 echo -n "FreeBSD sendfile...... " 366 cat > conftest.c << _ACEOF 367#include <stdio.h> 368#include <sys/types.h> 369#include <sys/socket.h> 370#include <sys/uio.h> 371int main() 372{ 373 int i; 374 off_t o; 375 size_t n; 376 struct sf_hdtr h; 377 (void)sendfile(i,i,o,n,&h,&o,i); 378 379 return 0; 380} 381 382_ACEOF 383 384 ${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 385 if [ $? = 0 ]; then 386 echo "[YES]" 387 EnableOpt HAVE_SENDFILE 388 else 389 echo "[NO]" 390 fi 391fi 392 393 394##################################################### 395# Test USE_PAM 396##################################################### 397echo -n "Use PAM............... " 398cat > conftest.c << _ACEOF 399#include <stdio.h> 400#include <sys/types.h> 401#include <security/pam_appl.h> 402int main() 403{ 404 pam_handle_t *pamh = NULL; 405} 406 407_ACEOF 408 409${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} -lpam > /dev/null 2>&1 410if [ $? = 0 ]; then 411 echo "[YES]" 412 EnableOpt USE_PAM 413 EXTRALDFLAGS="$EXTRALDFLAGS -lpam" 414else 415 echo "[NO]" 416fi 417 418##################################################### 419# Test HAVR_SETPROCTITLE 420##################################################### 421echo -n "Check setproctitle.... " 422cat > conftest.c << _ACEOF 423#include <stdio.h> 424#include <sys/types.h> 425#include <unistd.h> 426 427int main() 428{ 429 setproctitle("%s", "alex"); 430} 431 432_ACEOF 433 434${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 435if [ $? = 0 ]; then 436 echo "[YES]" 437 EnableOpt HAVR_SETPROCTITLE 438else 439 echo "[NO]" 440fi 441 442##################################################### 443# Test HAVE_SI_LEN 444##################################################### 445echo -n "Check sin_len......... " 446cat > conftest.c << _ACEOF 447#include <stdio.h> 448#include <sys/types.h> 449#include <netinet/in.h> 450 451int main() 452{ 453 struct sockaddr_in su_sin; 454 printf("%d\n", su_sin.sin_len); 455} 456 457_ACEOF 458 459${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 460if [ $? = 0 ]; then 461 echo "[YES]" 462 EnableOpt HAVE_SI_LEN 463else 464 echo "[NO]" 465fi 466 467##################################################### 468# Test INET6 469##################################################### 470echo -n "Check IPv6 support.... " 471cat > conftest.c << _ACEOF 472#include <stdio.h> 473#include <sys/types.h> 474#include <netinet/in.h> 475int main() 476{ 477 struct sockaddr_in6 su_sin6; 478 int s; 479 printf("%d\n", su_sin6.sin6_port); 480} 481 482 483_ACEOF 484 485${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 486if [ $? = 0 ]; then 487 echo "[YES]" 488 EnableOpt INET6 489else 490 echo "[NO]" 491fi 492 493##################################################### 494# Test WITH_MYSQL 495##################################################### 496if [ "$WITH_MYSQL" = "y" ]; then 497 echo -n "MySQL................. " 498 499 for i in $MYSQL_DIR /usr/local /usr; 500 do 501 if [ -z "${MYSQL_INC_DIR}" -a -r $i/include/mysql/mysql.h ]; then 502 MYSQL_INC_DIR="-I$i/include/mysql" 503 elif [ -z "${MYSQL_INC_DIR}" -a -r $i/include/mysql.h ]; then 504 MYSQL_INC_DIR="-I$i/include" 505 fi 506 if [ -z "${MYSQL_LIB_DIR}" -a `ls $i/lib/mysql/libmysqlclient.so* >/dev/null 2>&1; echo $?` = 0 ]; then 507 MYSQL_LIB_DIR="-L$i/lib/mysql -Wl,-rpath,'$i/lib/mysql'" 508 elif [ -z "${MYSQL_LIB_DIR}" -a `ls $i/lib/libmysqlclient.so* >/dev/null 2>&1; echo $?` = 0 ]; then 509 MYSQL_LIB_DIR="-L$i/lib -Wl,-rpath,'$i/lib'" 510 fi 511 done 512 513cat > conftest.c << _ACEOF 514 #include <string.h> 515 #include <mysql.h> 516 int main() 517 { 518 MYSQL *connection = NULL; 519 connection = mysql_init(NULL); 520 } 521 522_ACEOF 523 524 525 ${CC} ${EXTRACFLAGS} $MYSQL_INC_DIR conftest.c -o conftest ${EXTRALDFLAGS} $MYSQL_LIB_DIR -lmysqlclient > /dev/null 2>&1 526 if [ $? = 0 ]; then 527 echo "[YES]" 528 EXTRACFLAGS="$EXTRACFLAGS $MYSQL_INC_DIR" 529 EXTRALDFLAGS="$EXTRALDFLAGS $MYSQL_LIB_DIR -lmysqlclient" 530 EnableOpt WITH_MYSQL 531 else 532 echo "[NO]" 533 fi 534fi 535 536##################################################### 537# Test WITH_PGSQL 538##################################################### 539if [ "$WITH_PGSQL" = "y" ]; then 540 echo -n "PostgreSQL............ " 541 542 for i in $PGSQL_DIR /usr/local /usr/local/pgsql /usr; 543 do 544 if [ -z "${PGSQL_INC_DIR}" -a -r $i/include/libpq-fe.h ]; then 545 PGSQL_INC_DIR="-I$i/include" 546 elif [ -z "${PGSQL_INC_DIR}" -a -r $i/include/pgsql/libpq-fe.h ]; then 547 PGSQL_INC_DIR="-I$i/include/pgsql" 548 fi 549 if [ -z "${PGSQL_LIB_DIR}" -a `ls $i/lib/libpq.so* > /dev/null 2>&1; echo $?` = 0 ]; then 550 PGSQL_LIB_DIR="-L$i/lib -Wl,-rpath,'$i/lib'" 551 elif [ -z "${PGSQL_LIB_DIR}" -a `ls $i/lib/pgsql/libpq.so* >/dev/null 2>&1; echo $?` = 0 ]; then 552 PGSQL_LIB_DIR="-L$i/lib/pgsql -Wl,-rpath,'$i/lib/pgsql'" 553 fi 554 done 555 556cat > conftest.c << _ACEOF 557 #include <libpq-fe.h> 558 int main() 559 { 560 PGconn *connection; 561 connection = PQsetdbLogin(NULL, NULL, NULL, NULL, NULL, NULL, NULL); 562 } 563 564_ACEOF 565 566 ${CC} ${EXTRACFLAGS} $PGSQL_INC_DIR conftest.c -o conftest ${EXTRALDFLAGS} $PGSQL_LIB_DIR -lpq > /dev/null 2>&1 567 if [ $? = 0 ]; then 568 echo "[YES]" 569 EXTRACFLAGS="$EXTRACFLAGS $PGSQL_INC_DIR" 570 EXTRALDFLAGS="$EXTRALDFLAGS $PGSQL_LIB_DIR -lpq" 571 EnableOpt WITH_PGSQL 572 else 573 echo "[NO]" 574 fi 575fi 576 577##################################################### 578# Test SSL Support 579##################################################### 580if [ "$WITH_SSL" = "y" ]; then 581 echo -n "Check SSL support..... " 582 583cat > conftest.c << _ACEOF 584 #include <stdio.h> 585 #include <sys/types.h> 586 #include <openssl/crypto.h> 587 #include <openssl/bio.h> 588 #include <openssl/buffer.h> 589 #include <openssl/x509.h> 590 #include <openssl/ssl.h> 591 #include <openssl/err.h> 592 int main() 593 { 594 SSL_load_error_strings(); 595 SSLeay_add_ssl_algorithms(); 596 } 597 598 599_ACEOF 600 601 ${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} -lssl -lcrypto > /dev/null 2>&1 602 if [ $? = 0 ]; then 603 echo "[YES]" 604 EXTRALDFLAGS="$EXTRALDFLAGS -lssl -lcrypto" 605 EnableOpt WITH_SSL 606 else 607 608 for i in $SSL_DIR /usr/local /usr; 609 do 610 if [ -z "$SSL_INC_DIR" -a -r $i/include/openssl/crypto.h ]; then 611 SSL_INC_DIR="-I$i/include" 612 fi 613 if [ -z "${SSL_LIB_DIR}" -a -r $i/lib/libcrypto.so ]; then 614 SSL_LIB_DIR="-L$i/lib" 615 fi 616 done 617 618 ${CC} ${EXTRACFLAGS} ${SSL_INC_DIR} conftest.c -o conftest ${EXTRALDFLAGS} ${SSL_LIB_DIR} -lssl -lcrypto > /dev/null 2>&1 619 if [ $? = 0 ]; then 620 echo "[YES]" 621 EXTRACFLAGS="$EXTRACFLAGS ${SSL_INC_DIR}" 622 EXTRALDFLAGS="$EXTRALDFLAGS ${SSL_LIB_DIR} -lssl -lcrypto" 623 EnableOpt WITH_SSL 624 else 625 echo "[NO]" 626 fi 627 fi 628fi 629 630##################################################### 631# Test WITH_ICONV 632##################################################### 633if [ "$WITH_ICONV" = "y" ]; then 634 echo -n "Check iconv support .. " 635 636cat > conftest.c << _ACEOF 637 #include <iconv.h> 638 int main() 639 { 640 iconv_t cd = (iconv_t)-1; 641 cd = iconv_open("UTF-8", "Big-5"); 642 return 0; 643 } 644 645_ACEOF 646 647 for i in $ICONV_DIR /usr/local /usr; 648 do 649 if [ -z "${ICONV_INC_DIR}" -a -r $i/include/iconv.h ]; then 650 ICONV_INC_DIR="-I$i/include" 651 fi 652 if [ -z "${ICONV_LIB_DIR}" -a -r $i/lib/libiconv.so ]; then 653 ICONV_LIB_DIR="-L$i/lib" 654 fi 655 done 656 657 ${CC} ${EXTRACFLAGS} $ICONV_INC_DIR conftest.c -o conftest ${EXTRALDFLAGS} $ICONV_LIB_DIR -liconv > /dev/null 2>&1 658 if [ $? = 0 ]; then 659 echo "[YES]" 660 EXTRACFLAGS="$EXTRACFLAGS $ICONV_INC_DIR" 661 EXTRALDFLAGS="$EXTRALDFLAGS $ICONV_LIB_DIR -liconv" 662 EnableOpt WITH_ICONV 663 else 664 ${CC} ${EXTRACFLAGS} conftest.c -o conftest ${EXTRALDFLAGS} > /dev/null 2>&1 665 if [ $? = 0 ]; then 666 echo "[YES]" 667 EnableOpt WITH_ICONV 668 else 669 echo "[NO]" 670 fi 671 fi 672fi 673 674rm -rf conftest.c conftest 675 676PREFIX=`echo $PREFIX | perl -pi -e "s/\//\\\\\\\\\//g"` 677CC=`echo $CC | perl -pi -e "s/\//\\\\\\\\\//g"` 678AR=`echo $AR | perl -pi -e "s/\//\\\\\\\\\//g"` 679RANLIB=`echo $RANLIB | perl -pi -e "s/\//\\\\\\\\\//g"` 680EXTRACFLAGS=`echo $EXTRACFLAGS | perl -pi -e "s/\//\\\\\\\\\//g"` 681EXTRALDFLAGS=`echo $EXTRALDFLAGS | perl -pi -e "s/\//\\\\\\\\\//g"` 682 683cp $CurDir/os/FreeBSD/smbftpd.sh.in $CurDir/os/FreeBSD/smbftpd.sh 684perl -pi -e "s/\@PREFIX\@/$PREFIX/" $Makefile $CurDir/os/FreeBSD/smbftpd.sh $ConfigH 685perl -pi -e "s/\@CC\@/$CC/" $Makefile 686perl -pi -e "s/\@AR\@/$AR/" $Makefile 687perl -pi -e "s/\@RANLIB\@/$RANLIB/" $Makefile 688perl -pi -e "s/\@EXTRACFLAGS\@/$EXTRACFLAGS/" $Makefile 689perl -pi -e "s/\@EXTRALDFLAGS\@/$EXTRALDFLAGS/" $Makefile 690 691echo "" 692echo "Finished configure." 693echo "" 694