UNIXworkcode

1 #!/bin/sh 2 3 HOST=`uname -n` 4 PREFIX=`pwd`/work 5 INSTALL_DIR=$PREFIX 6 7 EPREFIX=$PREFIX 8 9 BINDIR= 10 SBINDIR= 11 LIBDIR= 12 LIBEXECDIR= 13 DATADIR= 14 SYSCONFDIR= 15 SHAREDSTATEDIR= 16 LOCALSTATEDIR= 17 INCLUDEDIR= 18 INFODIR= 19 MANDIR= 20 21 OS=`uname -s` 22 OS_VERSION=`uname -r` 23 24 TEMP_DIR=".tmp-`uname -n`" 25 mkdir -p $TEMP_DIR 26 if [ $? -ne 0 ]; then 27 echo "Cannot create tmp dir" 28 echo "Abort" 29 fi 30 touch $TEMP_DIR/options 31 touch $TEMP_DIR/features 32 33 # features 34 35 # help text 36 printhelp() 37 { 38 echo "Usage: $0 [OPTIONS]..." 39 cat << __EOF__ 40 Installation directories: 41 --prefix=PREFIX path prefix for architecture-independent files 42 [/usr] 43 --exec-prefix=EPREFIX path prefix for architecture-dependent files 44 [PREFIX] 45 46 --bindir=DIR user executables [EPREFIX/bin] 47 --sbindir=DIR system admin executables [EPREFIX/sbin] 48 --libexecdir=DIR program executables [EPREFIX/libexec] 49 --sysconfdir=DIR system configuration files [PREFIX/etc] 50 --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] 51 --localstatedir=DIR modifiable single-machine data [PREFIX/var] 52 --libdir=DIR object code libraries [EPREFIX/lib] 53 --includedir=DIR C header files [PREFIX/include] 54 --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] 55 --datadir=DIR read-only architecture-independent data [DATAROOTDIR] 56 --infodir=DIR info documentation [DATAROOTDIR/info] 57 --mandir=DIR man documentation [DATAROOTDIR/man] 58 59 Optional Features: 60 --enable-pg 61 62 __EOF__ 63 } 64 65 # 66 # parse arguments 67 # 68 for ARG in $@ 69 do 70 if [[ $ARG == --prefix=* ]]; then 71 PREFIX=${ARG:9} 72 elif [[ $ARG = --exec-prefix=* ]]; then 73 EPREFIX=${ARG:14} 74 elif [[ $ARG = --bindir=* ]]; then 75 BINDIR=${ARG:9} 76 elif [[ $ARG = --sbindir=* ]]; then 77 SBINDIR=${ARG:10} 78 elif [[ $ARG = --libdir=* ]]; then 79 LIBDIR=${ARG:9} 80 elif [[ $ARG = --libexecdir=* ]]; then 81 LIBEXECDIR=${ARG:13} 82 elif [[ $ARG = --datadir=* ]]; then 83 DATADIR=${ARG:10} 84 elif [[ $ARG = --sysconfdir=* ]]; then 85 SYSCONFDIR=${ARG:13} 86 elif [[ $ARG = --sharedstatedir=* ]]; then 87 SHAREDSTATEDIR=${ARG:17} 88 elif [[ $ARG = --localstatedir=* ]]; then 89 LOCALSTATEDIR=${ARG:16} 90 elif [[ $ARG = --includedir=* ]]; then 91 INCLUDEDIR=${ARG:12} 92 elif [[ $ARG = --infodir=* ]]; then 93 INFODIR=${ARG:10} 94 elif [[ $ARG = --mandir=* ]]; then 95 MANDIR=${ARG:9} 96 elif [ $ARG = "--help" ]; then 97 printhelp 98 exit 0 99 elif [[ $ARG == --enable-pg ]]; then 100 FEATURE_PG=on 101 elif [[ $ARG == --disable-pg ]]; then 102 unset FEATURE_PG 103 fi 104 done 105 106 # set dir variables 107 if [ -z "$BINDIR" ]; then 108 BINDIR=$EPREFIX/bin 109 fi 110 if [ -z "$SBINDIR" ]; then 111 SBINDIR=$EPREFIX/sbin 112 fi 113 if [ -z "$LIBDIR" ]; then 114 LIBDIR=$EPREFIX/lib 115 fi 116 if [ -z "$LIBEXEC" ]; then 117 LIBEXECDIR=$EPREFIX/libexec 118 fi 119 if [ -z "$DATADIR" ]; then 120 DATADIR=$PREFIX/share 121 fi 122 if [ -z "$SYSCONFDIR" ]; then 123 SYSCONFDIR=$PREFIX/etc 124 fi 125 if [ -z "$SHAREDSTATEDIR" ]; then 126 SHAREDSTATEDIR=$PREFIX/com 127 fi 128 if [ -z "$LOCALSTATEDIR" ]; then 129 LOCALSTATEDIR=$PREFIX/var 130 fi 131 if [ -z "$INCLUDEDIR" ]; then 132 INCLUDEDIR=$PREFIX/include 133 fi 134 if [ -z "$INFODIR" ]; then 135 INFODIR=$PREFIX/info 136 fi 137 if [ -z "$MANDIR" ]; then 138 MANDIR=$PREFIX/man 139 fi 140 141 which pkg-config > /dev/null 142 if [ $? -eq 0 ]; then 143 PKG_CONFIG=pkg-config 144 else 145 PKG_CONFIG=false 146 fi 147 148 # Simple uname based platform detection 149 # $PLATFORM is used for platform dependent dependency selection 150 printf "detect platform... " 151 if [ $OS = SunOS ]; then 152 PLATFORM="solaris sunos unix svr4" 153 fi 154 if [ $OS = Linux ]; then 155 PLATFORM="linux unix" 156 fi 157 if [ $OS = FreeBSD ]; then 158 PLATFORM="freebsd bsd unix" 159 fi 160 if [ $OS = Darwin ]; then 161 PLATFORM="macos osx bsd unix" 162 fi 163 echo $OS | grep "MINGW" > /dev/null 164 if [ $? -eq 0 ]; then 165 PLATFORM="windows mingw" 166 fi 167 168 if [ -z "$PLATFORM" ]; then 169 PLATFORM="unix" 170 fi 171 172 for p in $PLATFORM 173 do 174 PLATFORM_NAME=$p 175 break 176 done 177 echo $PLATFORM_NAME 178 179 isplatform() 180 { 181 for p in $PLATFORM 182 do 183 if [ $p = $1 ]; then 184 return 0 185 fi 186 done 187 return 1 188 } 189 isnotplatform() 190 { 191 for p in $PLATFORM 192 do 193 if [ $p = $1 ]; then 194 return 1 195 fi 196 done 197 return 0 198 } 199 200 # generate config.mk and config.h 201 cat > $TEMP_DIR/config.mk << __EOF__ 202 # 203 # config.mk generated by configure 204 # 205 206 # general vars 207 HOST=$HOST 208 PREFIX=$PREFIX 209 INSTALL_DIR=$INSTALL_DIR 210 211 EPREFIX=$EPREFIX 212 213 BINDIR=$BINDIR 214 SBINDIR=$SBINDIR 215 LIBDIR=$LIBDIR 216 LIBEXECDIR=$LIBEXECDIR 217 DATADIR=$DATADIR 218 SYSCONFDIR=$SYSCONFDIR 219 SHAREDSTATEDIR=$SHAREDSTATEDIR 220 LOCALSTATEDIR=$LOCALSTATEDIR 221 INCLUDEDIR=$INCLUDEDIR 222 INFODIR=$INFODIR 223 MANDIR=$MANDIR 224 225 __EOF__ 226 227 echo > $TEMP_DIR/make.mk 228 229 ENV_CFLAGS=$CFLAGS 230 ENV_LDFLAGS=$LDFLAGS 231 ENV_CXXFLAGS=$CXXFLAGS 232 233 # Toolchain detection 234 # this will insert make vars to config.mk 235 . make/toolchain.sh 236 237 # add user specified flags to config.mk 238 echo >> $TEMP_DIR/config.mk 239 if [ ! -z "${ENV_CFLAGS}" ]; then 240 echo "CFLAGS += $ENV_CFLAGS" >> $TEMP_DIR/config.mk 241 fi 242 if [ ! -z "${ENV_CXXFLAGS}" ]; then 243 echo "CXXFLAGS += $ENV_CXXFLAGS" >> $TEMP_DIR/config.mk 244 fi 245 if [ ! -z "${ENV_LDFLAGS}" ]; then 246 echo "LDFLAGS += $ENV_LDFLAGS" >> $TEMP_DIR/config.mk 247 fi 248 249 # 250 # DEPENDENCIES 251 # 252 253 dependency_libpq() 254 { 255 printf "checking for libpq... " 256 # dependency libpq 257 while true 258 do 259 if [ -z "$PKG_CONFIG" ]; then 260 break 261 fi 262 $PKG_CONFIG libpq 263 if [ $? -ne 0 ] ; then 264 break 265 fi 266 CFLAGS="$CFLAGS `$PKG_CONFIG --cflags libpq`" 267 LDFLAGS="$LDFLAGS `$PKG_CONFIG --libs libpq`" 268 echo yes 269 return 0 270 done 271 272 echo no 273 return 1 274 } 275 dependency_openssl() 276 { 277 printf "checking for openssl... " 278 # dependency openssl 279 while true 280 do 281 if [ -z "$PKG_CONFIG" ]; then 282 break 283 fi 284 $PKG_CONFIG openssl 285 if [ $? -ne 0 ] ; then 286 break 287 fi 288 CFLAGS="$CFLAGS `$PKG_CONFIG --cflags openssl`" 289 LDFLAGS="$LDFLAGS `$PKG_CONFIG --libs openssl`" 290 echo yes 291 return 0 292 done 293 294 echo no 295 return 1 296 } 297 dependency_libxml2() 298 { 299 printf "checking for libxml2... " 300 # dependency libxml2 301 while true 302 do 303 if [ -z "$PKG_CONFIG" ]; then 304 break 305 fi 306 $PKG_CONFIG libxml-2.0 307 if [ $? -ne 0 ] ; then 308 break 309 fi 310 CFLAGS="$CFLAGS `$PKG_CONFIG --cflags libxml-2.0`" 311 LDFLAGS="$LDFLAGS `$PKG_CONFIG --libs libxml-2.0`" 312 echo yes 313 return 0 314 done 315 316 echo no 317 return 1 318 } 319 320 DEPENDENCIES_FAILED= 321 ERROR=0 322 # general dependencies 323 CFLAGS= 324 LDFLAGS= 325 while true 326 do 327 if isnotplatform "linux"; then 328 break 329 fi 330 while true 331 do 332 333 CFLAGS="$CFLAGS -DLINUX" 334 LDFLAGS="$LDFLAGS -lpthread -ldl -lm -lldap" 335 cat >> $TEMP_DIR/make.mk << __EOF__ 336 # platform dependend source files 337 PLATFORM_DAEMONOBJ = event_linux.o 338 339 # platform dependend vars 340 OBJ_EXT = .o 341 LIB_EXT = .so 342 APP_EXT = 343 344 __EOF__ 345 346 break 347 done 348 349 break 350 done 351 while true 352 do 353 if isnotplatform "bsd"; then 354 break 355 fi 356 if isplatform "macos"; then 357 break 358 fi 359 while true 360 do 361 362 CFLAGS="$CFLAGS -DBSD" 363 LDFLAGS="$LDFLAGS -lpthread -lm -lldap" 364 cat >> $TEMP_DIR/make.mk << __EOF__ 365 # platform dependend source files 366 PLATFORM_DAEMONOBJ = event_bsd.o 367 368 # platform dependend vars 369 OBJ_EXT = .o 370 LIB_EXT = .so 371 APP_EXT = 372 373 __EOF__ 374 375 break 376 done 377 378 break 379 done 380 while true 381 do 382 if isnotplatform "macos"; then 383 break 384 fi 385 while true 386 do 387 388 CFLAGS="$CFLAGS -DBSD -DOSX" 389 LDFLAGS="$LDFLAGS -lpthread -ldl -lm -lldap" 390 cat >> $TEMP_DIR/make.mk << __EOF__ 391 # platform dependend source files 392 PLATFORM_DAEMONOBJ = event_bsd.o 393 394 # platform dependend vars 395 OBJ_EXT = .o 396 LIB_EXT = .dylib 397 APP_EXT = 398 399 __EOF__ 400 401 break 402 done 403 404 break 405 done 406 while true 407 do 408 if isnotplatform "solaris"; then 409 break 410 fi 411 while true 412 do 413 414 CFLAGS="$CFLAGS -DSOLARIS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS" 415 LDFLAGS="$LDFLAGS -lsocket -lnsl -lsendfile -lposix4 -lpthread -ldl -lm -lmd -lldap" 416 cat >> $TEMP_DIR/make.mk << __EOF__ 417 # platform dependend source files 418 PLATFORM_DAEMONOBJ = event_solaris.o 419 420 # platform dependend vars 421 OBJ_EXT = .o 422 LIB_EXT = .so 423 APP_EXT = 424 425 __EOF__ 426 427 break 428 done 429 430 break 431 done 432 433 # add general dependency flags to config.mk 434 echo >> $TEMP_DIR/config.mk 435 if [ ! -z "${CFLAGS}" ]; then 436 echo "CFLAGS += $CFLAGS" >> $TEMP_DIR/config.mk 437 fi 438 if [ ! -z "${CXXFLAGS}" ]; then 439 echo "CXXFLAGS += $CXXFLAGS" >> $TEMP_DIR/config.mk 440 fi 441 if [ ! -z "${LDFLAGS}" ]; then 442 echo "LDFLAGS += $LDFLAGS" >> $TEMP_DIR/config.mk 443 fi 444 445 # 446 # OPTION VALUES 447 # 448 449 # 450 # TARGETS 451 # 452 CFLAGS= 453 CXXFLAGS= 454 LDFLAGS= 455 456 # Target 457 CFLAGS= 458 LDFLAGS= 459 CXXFLAGS= 460 461 dependency_libxml2 462 if [ $? -ne 0 ]; then 463 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED libxml2 " 464 ERROR=1 465 fi 466 dependency_openssl 467 if [ $? -ne 0 ]; then 468 DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED openssl " 469 ERROR=1 470 fi 471 472 473 echo >> $TEMP_DIR/config.mk 474 if [ ! -z "${CFLAGS}" ]; then 475 echo "CFLAGS += $CFLAGS" >> $TEMP_DIR/config.mk 476 fi 477 if [ ! -z "${CXXFLAGS}" ]; then 478 echo "CXXFLAGS += $CXXFLAGS" >> $TEMP_DIR/config.mk 479 fi 480 if [ ! -z "${LDFLAGS}" ]; then 481 echo "LDFLAGS += $LDFLAGS" >> $TEMP_DIR/config.mk 482 fi 483 484 if [ $ERROR -ne 0 ]; then 485 echo 486 echo "Error: Unresolved dependencies" 487 echo $DEPENCIES_FAILED 488 rm -Rf $TEMP_DIR 489 exit 1 490 fi 491 492 echo "configure finished" 493 echo 494 echo "Build Config:" 495 echo " PREFIX: $PREFIX" 496 echo " TOOLCHAIN: $TOOLCHAIN_NAME" 497 echo 498 cat $TEMP_DIR/config.mk $TEMP_DIR/make.mk > config.mk 499 rm -Rf $TEMP_DIR 500 501 502