Bump version to 3.0.20 UNRELEASED
| 1 | dnl Process this file with autoconf to produce a configure script. |
| 2 | dnl |
| 3 | dnl $Id: configure.in,v 1.167 2011/12/31 14:43:40 fabiankeil Exp $ |
| 4 | dnl |
| 5 | dnl Written by and Copyright (C) 2001-2010 the |
| 6 | dnl Privoxy team. http://www.privoxy.org/ |
| 7 | dnl |
| 8 | dnl Based on the Internet Junkbuster originally written |
| 9 | dnl by and Copyright (C) 1997 Anonymous Coders and |
| 10 | dnl Junkbusters Corporation. http://www.junkbusters.com |
| 11 | dnl |
| 12 | dnl This program is free software; you can redistribute it |
| 13 | dnl and/or modify it under the terms of the GNU General |
| 14 | dnl Public License as published by the Free Software |
| 15 | dnl Foundation; either version 2 of the License, or (at |
| 16 | dnl your option) any later version. |
| 17 | dnl |
| 18 | dnl This program is distributed in the hope that it will |
| 19 | dnl be useful, but WITHOUT ANY WARRANTY; without even the |
| 20 | dnl implied warranty of MERCHANTABILITY or FITNESS FOR A |
| 21 | dnl PARTICULAR PURPOSE. See the GNU General Public |
| 22 | dnl License for more details. |
| 23 | dnl |
| 24 | dnl The GNU General Public License should be included with |
| 25 | dnl this file. If not, you can view it at |
| 26 | dnl http://www.gnu.org/copyleft/gpl.html |
| 27 | dnl or write to the Free Software Foundation, Inc., 59 |
| 28 | dnl Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
| 29 | dnl |
| 30 | |
| 31 | dnl ================================================================= |
| 32 | dnl AutoConf Initialization |
| 33 | dnl ================================================================= |
| 34 | |
| 35 | AC_REVISION($Revision: 1.167 $) |
| 36 | AC_INIT(jcc.c) |
| 37 | |
| 38 | if test ! -f config.h.in; then |
| 39 | echo "You need to run autoheader first. " |
| 40 | echo -n "Shall I do this for you now? (y/n) " |
| 41 | read answer |
| 42 | if test "$answer" != "y"; then |
| 43 | exit 1 |
| 44 | else |
| 45 | autoheader |
| 46 | fi |
| 47 | fi |
| 48 | |
| 49 | AC_CONFIG_HEADER([config.h]) |
| 50 | AC_CANONICAL_HOST |
| 51 | |
| 52 | dodk=auto |
| 53 | DKPREFIX=none |
| 54 | AC_ARG_WITH(docbook, dnl |
| 55 | --with-docbook=[[yes|no|directory]] |
| 56 | Enable docbook documentation creation |
| 57 | (default = yes, for gnu and linux),[dnl |
| 58 | case "$with_docbook" in |
| 59 | yes) dodk=yes;; |
| 60 | no) dodk=no;; |
| 61 | *) |
| 62 | dodk=yes |
| 63 | DKPREFIX=$withval |
| 64 | ;; |
| 65 | esac |
| 66 | ]) |
| 67 | DB2HTML=false |
| 68 | AC_ARG_WITH(db2html, dnl |
| 69 | --with-db2html=<path/executable> |
| 70 | Set the location of the docbook to html converter |
| 71 | (default = search),[dnl |
| 72 | DB2HTML=$withval |
| 73 | ]) |
| 74 | |
| 75 | dnl ================================================================= |
| 76 | dnl Application version number |
| 77 | dnl ================================================================= |
| 78 | |
| 79 | VERSION_MAJOR=3 |
| 80 | VERSION_MINOR=0 |
| 81 | VERSION_POINT=20 |
| 82 | CODE_STATUS="UNRELEASED" |
| 83 | |
| 84 | dnl CODE_STATUS can be "alpha", "beta", "stable" or "UNRELEASED", |
| 85 | dnl and will be used for CGI output. Increment version number and |
| 86 | dnl set status to "UNRELEASED" whenever CVS differs from the last |
| 87 | dnl release and no new release is near. |
| 88 | |
| 89 | dnl ================================================================= |
| 90 | dnl Substitute the version numbers |
| 91 | dnl ================================================================= |
| 92 | |
| 93 | AC_SUBST(VERSION_MAJOR) |
| 94 | AC_SUBST(VERSION_MINOR) |
| 95 | AC_SUBST(VERSION_POINT) |
| 96 | AC_SUBST(CODE_STATUS) |
| 97 | |
| 98 | dnl |
| 99 | AC_DEFINE_UNQUOTED(VERSION_MAJOR,${VERSION_MAJOR}) |
| 100 | AC_DEFINE_UNQUOTED(VERSION_MINOR,${VERSION_MINOR}) |
| 101 | AC_DEFINE_UNQUOTED(VERSION_POINT,${VERSION_POINT}) |
| 102 | AC_DEFINE_UNQUOTED(VERSION,"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_POINT}") |
| 103 | AC_DEFINE_UNQUOTED(CODE_STATUS,"${CODE_STATUS}") |
| 104 | |
| 105 | dnl ================================================================= |
| 106 | dnl Checks for programs needed to build. |
| 107 | dnl ================================================================= |
| 108 | |
| 109 | dnl Keep AC_PROG_CC from setting its own defaults: |
| 110 | if test "X$CFLAGS" = "X"; then |
| 111 | CFLAGS=" " |
| 112 | fi |
| 113 | |
| 114 | AC_PROG_CC |
| 115 | AC_PROG_CPP |
| 116 | AC_PROG_INSTALL |
| 117 | AC_PROG_LN_S |
| 118 | AC_PROG_MAKE_SET |
| 119 | AC_PROG_AWK |
| 120 | |
| 121 | AC_CHECK_PROG(GDB,gdb,yes,no) |
| 122 | AC_PATH_PROG(BGROUPS,groups,no,$PATH:/bin:/usr/bin:/usr/local/bin) |
| 123 | AC_PATH_PROG(ID,id,no,$PATH:/bin:/usr/bin:/usr/local/bin) |
| 124 | AC_SUBST(ID) |
| 125 | AC_SUBST(BGROUPS) |
| 126 | |
| 127 | dnl ================================================================= |
| 128 | dnl debug, gcc and gdb support |
| 129 | dnl ================================================================= |
| 130 | |
| 131 | AC_ARG_WITH(debug, |
| 132 | [ --with-debug Enable debug mode], |
| 133 | [ |
| 134 | if test "x$withval" != "xno" ; then |
| 135 | if test $ac_cv_prog_cc_g = yes; then |
| 136 | if test "$GCC" = yes; then |
| 137 | if test "$GDB"; then |
| 138 | CFLAGS="$CFLAGS -ggdb" |
| 139 | else |
| 140 | CFLAGS="$CFLAGS -g" |
| 141 | fi |
| 142 | CFLAGS="$CFLAGS -Wshadow -Wconversion" |
| 143 | else |
| 144 | CFLAGS="$CFLAGS -g" |
| 145 | fi |
| 146 | fi |
| 147 | fi |
| 148 | ], |
| 149 | [ |
| 150 | if test "X$CFLAGS" = "X "; then # if CFLAGS were unset (see above) |
| 151 | if test "$GCC" = yes; then |
| 152 | CFLAGS="-O2" |
| 153 | fi |
| 154 | fi |
| 155 | ] |
| 156 | ) |
| 157 | |
| 158 | dnl ================================================================= |
| 159 | dnl Check for user and group validity |
| 160 | dnl ================================================================= |
| 161 | |
| 162 | |
| 163 | if test "$EMXOS2" = yes; then |
| 164 | echo "Skipping user and group validity stuff."; |
| 165 | |
| 166 | else |
| 167 | |
| 168 | $ID privoxy >/dev/null 2>/dev/null |
| 169 | if test $? -ne 0 ; then |
| 170 | AC_MSG_WARN(There is no user 'privoxy' on this system) |
| 171 | fi |
| 172 | AC_MSG_CHECKING([for user]) |
| 173 | AC_ARG_WITH(user, |
| 174 | [ --with-user=privoxy Set user under which privoxy will run], |
| 175 | [ |
| 176 | if test "x$withval" != "xyes"; then |
| 177 | if test $ID = no ; then |
| 178 | AC_MSG_ERROR(There is no 'id' program on this system) |
| 179 | else |
| 180 | AC_MSG_RESULT($with_user) |
| 181 | $ID $with_user 2>/dev/null >/dev/null |
| 182 | if test $? -eq 0 ; then |
| 183 | USER=$with_user; |
| 184 | else |
| 185 | AC_MSG_ERROR(There is no user '$with_user' on this system) |
| 186 | fi |
| 187 | fi |
| 188 | else |
| 189 | AC_MSG_ERROR(We need a user if you give me this parameter) |
| 190 | fi |
| 191 | ], |
| 192 | [ |
| 193 | if test $ID = no ; then |
| 194 | AC_MSG_ERROR(There is no 'id' programm on this system) |
| 195 | else |
| 196 | AC_MSG_RESULT(none specified) |
| 197 | USER=$with_user |
| 198 | fi |
| 199 | ] |
| 200 | ) |
| 201 | AC_SUBST(USER) |
| 202 | |
| 203 | AC_MSG_CHECKING([for group]) |
| 204 | AC_ARG_WITH(group, |
| 205 | [ --with-group=privoxy Set group for privoxy], |
| 206 | [ |
| 207 | if test "x$withval" != "xyes"; then |
| 208 | if test $BGROUPS = no ; then |
| 209 | AC_MSG_ERROR(There is no 'groups' program on this system) |
| 210 | else |
| 211 | AC_MSG_RESULT($with_group) |
| 212 | $BGROUPS $USER >/dev/null |
| 213 | if test $? -eq 0 ; then |
| 214 | # FIXME: this fails if valid group, but not first group |
| 215 | # listed. |
| 216 | if test "$with_group" != "`$BGROUPS $USER | sed 's/.*: //' 2>/dev/null |$AWK '{print $1}'`" ; then |
| 217 | AC_MSG_ERROR(The given value '$withval' does not match group entry) |
| 218 | else |
| 219 | GROUP=$with_group; |
| 220 | fi |
| 221 | else |
| 222 | AC_MSG_ERROR(There is no group entry for user '$USER') |
| 223 | fi |
| 224 | fi |
| 225 | else |
| 226 | AC_MSG_ERROR(We need a group if you give me this parameter) |
| 227 | fi |
| 228 | ], |
| 229 | [ |
| 230 | if test $BGROUPS = no ; then |
| 231 | AC_MSG_ERROR(There is no 'groups' programm on this system) |
| 232 | else |
| 233 | AC_MSG_RESULT(none specified) |
| 234 | GROUP=$with_group; |
| 235 | fi |
| 236 | ] |
| 237 | ) |
| 238 | AC_SUBST(GROUP) |
| 239 | |
| 240 | fi |
| 241 | |
| 242 | dnl ================================================================= |
| 243 | dnl additional gcc flags |
| 244 | dnl ================================================================= |
| 245 | dnl |
| 246 | if test "$GCC"; then |
| 247 | if test "$host" != "powerpc-unknown-amigaos"; then |
| 248 | CFLAGS="-pipe $CFLAGS" |
| 249 | fi |
| 250 | fi |
| 251 | |
| 252 | |
| 253 | dnl ================================================================= |
| 254 | dnl Build type |
| 255 | dnl ================================================================= |
| 256 | dnl |
| 257 | dnl Must do this first. |
| 258 | dnl |
| 259 | dnl Reason: This sets CFLAGS in order to switch the Cygwin compiler |
| 260 | dnl into Cygwin or MinGW32 modes. Depending on the mode selected, |
| 261 | dnl the compiler will use completely different sets of library |
| 262 | dnl and include files. |
| 263 | dnl |
| 264 | dnl ================================================================= |
| 265 | |
| 266 | AC_MINGW32 |
| 267 | AC_CYGWIN |
| 268 | |
| 269 | if test "$MINGW32" = "yes"; then |
| 270 | target_type=mingw |
| 271 | else |
| 272 | if test "$CYGWIN" = "yes"; then |
| 273 | target_type=cygwin |
| 274 | else |
| 275 | target_type=unix |
| 276 | fi |
| 277 | fi |
| 278 | |
| 279 | if test $dodk = auto; then |
| 280 | dodk=no |
| 281 | if test $target_type = unix; then |
| 282 | case "$host_os" in |
| 283 | linux* | gnu*) |
| 284 | dodk=yes |
| 285 | ;; |
| 286 | esac |
| 287 | fi |
| 288 | fi |
| 289 | |
| 290 | dnl Decide what to do based on target_type |
| 291 | dnl Note: PTHREAD_LIB is always set, even if pthread is disabled. |
| 292 | dnl This is because we don't know yet whether pthread is enabled. |
| 293 | |
| 294 | AC_ARG_ENABLE(mingw32, |
| 295 | [ --enable-mingw32 Use mingw32 for a Windows GUI], |
| 296 | [if test $enableval = yes; then |
| 297 | target_type=mingw |
| 298 | fi]) |
| 299 | |
| 300 | if test $target_type = mingw; then |
| 301 | WIN_ONLY= |
| 302 | CFLAGS="$CFLAGS -DWINVER=0x501" |
| 303 | SPECIAL_CFLAGS="-mwindows -mno-cygwin" |
| 304 | PTHREAD_LIB=-lpthreadGC |
| 305 | echo "Using mingw32 (Win32 GUI)" |
| 306 | else |
| 307 | WIN_ONLY=# |
| 308 | if test $target_type = cygwin; then |
| 309 | SPECIAL_CFLAGS="-mno-win32" |
| 310 | PTHREAD_LIB= |
| 311 | echo "Using Cygnus (Win32 command line)" |
| 312 | else |
| 313 | SPECIAL_CFLAGS= |
| 314 | PTHREAD_LIB=-lpthread |
| 315 | fi |
| 316 | fi |
| 317 | AC_SUBST(WIN_ONLY) |
| 318 | |
| 319 | dnl Checking which text html browser we have available |
| 320 | if test $dodk != no; then |
| 321 | AC_CHECK_PROGS(WDUMP,w3m lynx links,false) |
| 322 | if test "$WDUMP" = false; then |
| 323 | AC_MSG_WARN(You need some kind of text browser to build documentation \(w3m, lynx and links are supported\)) |
| 324 | fi |
| 325 | if test $DB2HTML = false; then |
| 326 | dnl We need to clean the variable, otherwise AC_CHECK_PROGS |
| 327 | dnl will fail |
| 328 | DB2HTML="" |
| 329 | AC_CHECK_PROGS(DB2HTML,db2html docbook2html,false) |
| 330 | fi |
| 331 | fi |
| 332 | AC_SUBST(WDUMP) |
| 333 | AC_SUBST(DB2HTML) |
| 334 | |
| 335 | dnl If we use rpm, we need to check where %_topdir is |
| 336 | AC_CHECK_PROGS(RPMBIN,rpm,false) |
| 337 | if test $RPMBIN != false; then |
| 338 | RPM_BASE=`rpm --eval "%{_topdir}"` |
| 339 | if test "$RPM_BASE" = ""; then |
| 340 | RPM_BASE=/usr/src/redhat |
| 341 | fi |
| 342 | fi |
| 343 | AC_SUBST(RPM_BASE) |
| 344 | |
| 345 | dnl Check for jade, so we can build the documentation |
| 346 | AC_CHECK_PROGS(JADEBIN,jade openjade,false) |
| 347 | AC_SUBST(JADEBIN) |
| 348 | |
| 349 | dnl Check for man2html for docs. |
| 350 | AC_CHECK_PROGS(MAN2HTML,man2html,false) |
| 351 | AC_SUBST(MAN2HTML) |
| 352 | |
| 353 | dnl Set doc status flag for conditional content inclusions |
| 354 | DOC_STATUS=p-not-stable |
| 355 | if test $CODE_STATUS = stable; then |
| 356 | DOC_STATUS="p-stable" |
| 357 | fi |
| 358 | AC_SUBST(DOC_STATUS) |
| 359 | |
| 360 | dnl Checking for the docbook.dsl stylesheet file |
| 361 | dnl It is still not portable (directory slash) |
| 362 | JADECAT="" |
| 363 | if test $dodk = yes; then |
| 364 | if test $DKPREFIX = none; then |
| 365 | for i in /usr/share/sgml/docbook/dsssl-stylesheets \ |
| 366 | /usr/share/sgml/docbkdsl /usr/share/sgml/docbook-dsssl \ |
| 367 | /usr/local/share/sgml/docbook/dsssl/modular \ |
| 368 | /usr/share/sgml/docbook/stylesheet/dsssl/modular/ \ |
| 369 | ; do |
| 370 | dnl echo -n does not fly with /bin/sh. |
| 371 | dnl echo -n "checking for $i/html/docbook.dsl..." |
| 372 | AC_MSG_CHECKING([for $i]) |
| 373 | if test -f $i/html/docbook.dsl; then |
| 374 | echo "yes" |
| 375 | DKPREFIX=$i |
| 376 | break |
| 377 | else |
| 378 | echo "no" |
| 379 | fi |
| 380 | done |
| 381 | # where are the catalogs? |
| 382 | for i in /usr/share/sgml/CATALOG.docbk30 \ |
| 383 | /usr/share/sgml/CATALOG.docbk31 \ |
| 384 | /usr/share/sgml/CATALOG.docbk31 \ |
| 385 | /usr/local/share/sgml/docbook/3.0/docbook.cat \ |
| 386 | /usr/local/share/sgml/docbook/3.1/docbook.cat \ |
| 387 | /usr/share/sgml/docbook/dtd/3.1/docbook.cat \ |
| 388 | ; do |
| 389 | dnl echo -n "checking for $i..." |
| 390 | AC_MSG_CHECKING([for $i]) |
| 391 | if test -f $i; then |
| 392 | echo "yes" |
| 393 | JADECAT="$JADECAT -c $i" |
| 394 | else |
| 395 | echo "no" |
| 396 | fi |
| 397 | done |
| 398 | fi |
| 399 | fi |
| 400 | AC_SUBST(JADECAT) |
| 401 | AC_SUBST(DKPREFIX) |
| 402 | |
| 403 | AC_ARG_ENABLE(large-file-support, |
| 404 | [ --enable-large-file-support Define _LARGE_FILES and friends. |
| 405 | Required by some systems to support files larger then 2GB.], |
| 406 | [if test $enableval = yes; then |
| 407 | CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D_LARGEFILE_SOURCE=1" |
| 408 | fi]) |
| 409 | |
| 410 | dnl Save old CFLAGS so we can restore them later, then add SPECIAL_CFLAGS |
| 411 | old_CFLAGS_nospecial=$CFLAGS |
| 412 | CFLAGS="$CFLAGS $SPECIAL_CFLAGS" |
| 413 | |
| 414 | # Hack to force AutoConf to use the CFLAGS we just set |
| 415 | dnl Warning: This may break with a future version of Autoconf |
| 416 | dnl Tested with autoconf 2.13 |
| 417 | ac_cpp='$CPP $CPPFLAGS $SPECIAL_CFLAGS' |
| 418 | ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' |
| 419 | ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' |
| 420 | |
| 421 | |
| 422 | dnl ================================================================= |
| 423 | dnl Thread support |
| 424 | dnl ================================================================= |
| 425 | |
| 426 | AC_CHECK_HEADER(pthread.h, [have_pthread=yes], [have_pthread=no]) |
| 427 | |
| 428 | AC_ARG_ENABLE(pthread, |
| 429 | [ --disable-pthread Don't use POSIX threads (pthreads)], |
| 430 | [if test $enableval = no; then |
| 431 | # Disable pthreads |
| 432 | if test $have_pthread = yes; then |
| 433 | AC_MSG_WARN([pthreads seem to be available but you are using --disable-pthread.]) |
| 434 | AC_MSG_WARN([This is almost always a mistake and can render Privoxy unacceptable slow.]) |
| 435 | fi |
| 436 | have_pthread=no |
| 437 | fi]) |
| 438 | |
| 439 | if test $have_pthread = yes; then |
| 440 | PTHREAD_ONLY= |
| 441 | AC_DEFINE(FEATURE_PTHREAD) |
| 442 | echo Using POSIX threads |
| 443 | if test "$GCC" = "yes"; then |
| 444 | # Set a GCC specific switch: |
| 445 | if test "$target_type" = "unix"; then |
| 446 | ac_jgf_save_CFLAGS=$CFLAGS |
| 447 | CFLAGS="$CFLAGS -pthread" |
| 448 | AC_TRY_LINK([#include <pthread.h>], |
| 449 | [void *p = pthread_create;], |
| 450 | [ |
| 451 | # This compiler switch makes GCC on Linux thread-safe |
| 452 | # However, it's not supported on most other OS. |
| 453 | PTHREAD_LIB= |
| 454 | SPECIAL_CFLAGS="-pthread" |
| 455 | ]) |
| 456 | CFLAGS=$ac_jgf_save_CFLAGS |
| 457 | fi |
| 458 | fi |
| 459 | else |
| 460 | PTHREAD_ONLY=# |
| 461 | echo Using native threads |
| 462 | fi |
| 463 | |
| 464 | AC_SUBST(PTHREAD_ONLY) |
| 465 | |
| 466 | dnl ================================================================= |
| 467 | dnl Support for thread-safe versions of gethostbyaddr, gethostbyname, |
| 468 | dnl gmtime and localtime |
| 469 | dnl ================================================================= |
| 470 | |
| 471 | dnl Next line needed to find the gethost*_r functions on Solaris |
| 472 | AC_CHECK_LIB(nsl, gethostbyname) |
| 473 | |
| 474 | AC_CHECK_FUNC(gethostbyaddr_r, [ |
| 475 | AC_MSG_CHECKING([signature of gethostbyaddr_r]) |
| 476 | AC_TRY_COMPILE([ |
| 477 | # include <netdb.h> |
| 478 | ], [ |
| 479 | struct hostent *h, *hp; |
| 480 | char *a, *b; |
| 481 | int l, bl, t, e; |
| 482 | (void) gethostbyaddr_r(a, l, t, h, b, bl, &hp, &e) |
| 483 | ], [ |
| 484 | AC_DEFINE(HAVE_GETHOSTBYADDR_R_8_ARGS) |
| 485 | AC_MSG_RESULT([8 args]) |
| 486 | ], [ |
| 487 | AC_TRY_COMPILE([ |
| 488 | # include <netdb.h> |
| 489 | ], [ |
| 490 | struct hostent *h; |
| 491 | char *a, *b; |
| 492 | int l, bl, t, e; |
| 493 | (void) gethostbyaddr_r(a, l, t, h, b, bl, &e) |
| 494 | ], [ |
| 495 | AC_DEFINE(HAVE_GETHOSTBYADDR_R_7_ARGS) |
| 496 | AC_MSG_RESULT([7 args]) |
| 497 | ], [ |
| 498 | AC_TRY_COMPILE([ |
| 499 | # include <netdb.h> |
| 500 | ], [ |
| 501 | struct hostent_data *d; |
| 502 | struct hostent *h; |
| 503 | char a, |
| 504 | int l, t; |
| 505 | (void) gethostbyaddr_r(a, l, t, h, d) |
| 506 | ], [ |
| 507 | AC_DEFINE(HAVE_GETHOSTBYADDR_R_5_ARGS) |
| 508 | AC_MSG_RESULT([5 args]) |
| 509 | ], [ |
| 510 | AC_MSG_RESULT(unrecognised) |
| 511 | ]) |
| 512 | ]) |
| 513 | ]) |
| 514 | ], [ |
| 515 | AC_MSG_RESULT(no) |
| 516 | ]) |
| 517 | |
| 518 | AC_CHECK_FUNC(gethostbyname_r, [ |
| 519 | AC_MSG_CHECKING([signature of gethostbyname_r]) |
| 520 | AC_TRY_COMPILE([ |
| 521 | # include <netdb.h> |
| 522 | ], [ |
| 523 | struct hostent *h, *r; |
| 524 | char *n, *b; |
| 525 | int bl, e; |
| 526 | (void) gethostbyname_r(n, h, b, bl, &r, &e) |
| 527 | ], [ |
| 528 | AC_DEFINE(HAVE_GETHOSTBYNAME_R_6_ARGS) |
| 529 | AC_MSG_RESULT([6 args]) |
| 530 | ], [ |
| 531 | AC_TRY_COMPILE([ |
| 532 | # include <netdb.h> |
| 533 | ], [ |
| 534 | struct hostent *h; |
| 535 | char *n, *b; |
| 536 | int bl, e; |
| 537 | (void) gethostbyname_r(n, h, b, bl, &e) |
| 538 | ], [ |
| 539 | AC_DEFINE(HAVE_GETHOSTBYNAME_R_5_ARGS) |
| 540 | AC_MSG_RESULT([5 args]) |
| 541 | ], [ |
| 542 | AC_TRY_COMPILE([ |
| 543 | # include <netdb.h> |
| 544 | ], [ |
| 545 | struct hostent_data *d; |
| 546 | struct hostent *h; |
| 547 | char *n, |
| 548 | (void) gethostbyname_r(n, h, d) |
| 549 | ], [ |
| 550 | AC_DEFINE(HAVE_GETHOSTBYNAME_R_3_ARGS) |
| 551 | AC_MSG_RESULT([3 args]) |
| 552 | ], [ |
| 553 | AC_MSG_RESULT(unrecognised) |
| 554 | ]) |
| 555 | ]) |
| 556 | ]) |
| 557 | ], [ |
| 558 | AC_MSG_RESULT(no) |
| 559 | ]) |
| 560 | |
| 561 | AC_CHECK_FUNC(gmtime_r, [ |
| 562 | AC_MSG_CHECKING([signature of gmtime_r]) |
| 563 | AC_TRY_COMPILE([ |
| 564 | # include <time.h> |
| 565 | ], [ |
| 566 | struct time *t; |
| 567 | struct tm *tm; |
| 568 | (void) gmtime_r(t, tm) |
| 569 | ], [ |
| 570 | AC_MSG_RESULT(ok) |
| 571 | AC_DEFINE(HAVE_GMTIME_R) |
| 572 | ], [ |
| 573 | AC_MSG_RESULT(unrecognised) |
| 574 | ]) |
| 575 | ], [ |
| 576 | AC_MSG_RESULT(no) |
| 577 | ]) |
| 578 | |
| 579 | AC_CHECK_FUNC(localtime_r, [ |
| 580 | AC_MSG_CHECKING([signature of localtime_r]) |
| 581 | AC_TRY_COMPILE([ |
| 582 | # include <time.h> |
| 583 | ], [ |
| 584 | struct time *t; |
| 585 | struct tm *tm; |
| 586 | (void) localtime_r(t, tm) |
| 587 | ], [ |
| 588 | AC_MSG_RESULT(ok) |
| 589 | AC_DEFINE(HAVE_LOCALTIME_R) |
| 590 | ], [ |
| 591 | AC_MSG_RESULT(unrecognised) |
| 592 | ]) |
| 593 | ], [ |
| 594 | AC_MSG_RESULT(no) |
| 595 | ]) |
| 596 | |
| 597 | dnl ================================================================= |
| 598 | dnl Solaris specific |
| 599 | dnl FIXME: Not tested on Solaris yet... |
| 600 | dnl ISFIXED: Have tested it on Solaris, but there are other ways to |
| 601 | dnl make these checks generic, e.g.: |
| 602 | dnl AC_CHECK_FUNC(getsockopt, , AC_CHECK_LIB(socket, getsockopt)) |
| 603 | dnl (Moritz Barsnick <moritz@barsnick.net>) |
| 604 | dnl ================================================================= |
| 605 | |
| 606 | |
| 607 | SOCKET_LIB= |
| 608 | |
| 609 | case "$host" in |
| 610 | *-solaris*) SOCKET_LIB="-lsocket -lnsl" |
| 611 | AC_DEFINE(__EXTENSIONS__) |
| 612 | if test "$GCC" = "yes"; then |
| 613 | # Set a GCC specific switch: |
| 614 | # This compiler switch makes Solaris thread-safe |
| 615 | PTHREAD_LIB= |
| 616 | SPECIAL_CFLAGS="-pthreads" |
| 617 | else |
| 618 | # What do we do without GCC? Guess this: |
| 619 | SPECIAL_CFLAGS="-D_REENTRANT" |
| 620 | fi |
| 621 | ;; |
| 622 | esac |
| 623 | |
| 624 | AC_SUBST(SOCKET_LIB) |
| 625 | |
| 626 | dnl ================================================================= |
| 627 | dnl Solaris problem, and others perhaps (socklen_t is undefined) |
| 628 | dnl ================================================================= |
| 629 | |
| 630 | AC_MSG_CHECKING([for socklen_t]) |
| 631 | AC_EGREP_HEADER(socklen_t, sys/socket.h, AC_MSG_RESULT([yes]), |
| 632 | AC_MSG_RESULT([no]) |
| 633 | AC_DEFINE(socklen_t,int, |
| 634 | [ Define to 'int' if <sys/socket.h> doesn't have it. ])) |
| 635 | |
| 636 | |
| 637 | dnl ================================================================= |
| 638 | dnl OS/2 specific |
| 639 | dnl ================================================================= |
| 640 | |
| 641 | case "$host" in |
| 642 | *-os2-emx*) SOCKET_LIB=-lsocket |
| 643 | ;; |
| 644 | esac |
| 645 | |
| 646 | AC_SUBST(SOCKET_LIB) |
| 647 | |
| 648 | dnl ================================================================= |
| 649 | dnl Mac OSX specific |
| 650 | dnl ================================================================= |
| 651 | |
| 652 | case "$host" in |
| 653 | *-apple-darwin*) SPECIAL_CFLAGS="-Dunix" |
| 654 | ;; |
| 655 | esac |
| 656 | |
| 657 | dnl ================================================================= |
| 658 | dnl OpenBSD specific |
| 659 | dnl ================================================================= |
| 660 | |
| 661 | case "$host" in |
| 662 | *-openbsd*) SPECIAL_CFLAGS="$SPECIAL_CFLAGS -Dunix" |
| 663 | ;; |
| 664 | esac |
| 665 | |
| 666 | dnl ================================================================= |
| 667 | dnl AmigaOS specific |
| 668 | dnl ================================================================= |
| 669 | |
| 670 | AMIGAOS_ONLY=# |
| 671 | |
| 672 | case "$host" in |
| 673 | *-amigaos) AMIGAOS_ONLY= |
| 674 | ;; |
| 675 | esac |
| 676 | |
| 677 | AC_SUBST(AMIGAOS_ONLY) |
| 678 | |
| 679 | dnl ================================================================= |
| 680 | dnl Check for standard compiler stuff |
| 681 | dnl ================================================================= |
| 682 | |
| 683 | AC_EXEEXT |
| 684 | AC_OBJEXT |
| 685 | AC_HEADER_STDC |
| 686 | AC_HEADER_DIRENT |
| 687 | AC_C_CONST |
| 688 | AC_TYPE_SIZE_T |
| 689 | AC_TYPE_PID_T |
| 690 | AC_HEADER_TIME |
| 691 | AC_STRUCT_TM |
| 692 | AC_CHECK_SIZEOF(int, 4) |
| 693 | AC_CHECK_SIZEOF(char *, 4) |
| 694 | AC_CHECK_SIZEOF(long, 4) |
| 695 | AC_CHECK_SIZEOF(long long, 8) |
| 696 | AC_CHECK_SIZEOF(size_t, 4) |
| 697 | |
| 698 | dnl Checks for header files. |
| 699 | dnl AC_HEADER_SYS_WAIT |
| 700 | dnl AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/time.h unistd.h) |
| 701 | AC_CHECK_HEADERS([OS.h arpa/inet.h errno.h fcntl.h limits.h locale.h netdb.h netinet/in.h stddef.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h sys/timeb.h sys/wait.h unistd.h]) |
| 702 | |
| 703 | dnl Checks for library functions. |
| 704 | dnl bcopy is for PCRE |
| 705 | AC_CHECK_FUNCS([bcopy]) |
| 706 | AC_PROG_GCC_TRADITIONAL |
| 707 | AC_TYPE_SIGNAL |
| 708 | AC_CHECK_FUNCS([access atexit getcwd gethostbyaddr gethostbyaddr_r gethostbyname gethostbyname_r gettimeofday inet_ntoa localtime_r memchr memmove memset poll putenv random regcomp select setlocale snprintf socket strchr strdup strerror strftime strlcat strlcpy strptime strstr strtoul timegm tzset]) |
| 709 | |
| 710 | dnl Checks for RFC 2553 resolver and socket functions |
| 711 | AC_ARG_ENABLE(ipv6-support, |
| 712 | [ --disable-ipv6-support Disable IPv6 support and other RFC-2554-related improvements], |
| 713 | [if test $enableval = yes; then |
| 714 | enable_ipv6_support=yes |
| 715 | fi], enable_ipv6_support=yes) |
| 716 | |
| 717 | if test $enable_ipv6_support != yes; then |
| 718 | AC_MSG_WARN([Skipping checks for IPv6 support and other RFC-2554-related improvements. |
| 719 | Due to lock contention, this may result in slower DNS resolution for IPv4 setups, too.]) |
| 720 | elif test $target_type = mingw; then |
| 721 | AC_CHECK_LIB(ws2_32, main) |
| 722 | |
| 723 | AC_MSG_CHECKING(getaddrinfo in ws2_32) |
| 724 | AC_TRY_LINK( |
| 725 | [ |
| 726 | #include<windows.h> |
| 727 | #include<ws2tcpip.h> |
| 728 | ], |
| 729 | [getaddrinfo(0,0,0,0)], |
| 730 | have_ws2_32_getaddrinfo=yes |
| 731 | ) |
| 732 | AC_MSG_RESULT($have_ws2_32_getaddrinfo) |
| 733 | |
| 734 | AC_MSG_CHECKING(getnameinfo in ws2_32) |
| 735 | AC_TRY_LINK( |
| 736 | [ |
| 737 | #include<windows.h> |
| 738 | #include<ws2tcpip.h> |
| 739 | ], |
| 740 | [getnameinfo(0,0,0,0,0,0,0)], |
| 741 | have_ws2_32_getnameinfo=yes |
| 742 | ) |
| 743 | AC_MSG_RESULT($have_ws2_32_getnameinfo) |
| 744 | |
| 745 | if test $have_ws2_32_getaddrinfo ; then |
| 746 | if test $have_ws2_32_getnameinfo ; then |
| 747 | AC_DEFINE([HAVE_RFC2553], [1], |
| 748 | [Define if RFC 2553 resolver functions like getaddrinfo(3) and |
| 749 | getnameinfo(3) present]) |
| 750 | fi |
| 751 | fi |
| 752 | else |
| 753 | AC_CHECK_FUNC([getaddrinfo], |
| 754 | [AC_CHECK_FUNC([getnameinfo], |
| 755 | [AC_DEFINE([HAVE_RFC2553], [1], |
| 756 | [Define if RFC 2553 resolver functions like getaddrinfo(3) and |
| 757 | getnameinfo(3) present]) |
| 758 | ]) |
| 759 | ]) |
| 760 | fi |
| 761 | |
| 762 | dnl ================================================================= |
| 763 | dnl Checks for libraries. |
| 764 | dnl ================================================================= |
| 765 | dnl Note: Some systems may have the library but not the system header |
| 766 | dnl file, so we must check for both. |
| 767 | dnl Also check for correct version |
| 768 | AC_CHECK_LIB(pcre, pcre_compile, [ |
| 769 | AC_CHECK_HEADER(pcre.h, [ |
| 770 | AC_EGREP_HEADER(pcre_fullinfo, pcre.h, [have_pcre=yes], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no]) |
| 771 | ], [ |
| 772 | AC_CHECK_HEADER(pcre/pcre.h, [ |
| 773 | AC_EGREP_HEADER(pcre_fullinfo, pcre/pcre.h, [have_pcre=yes]; [AC_DEFINE(PCRE_H_IN_SUBDIR)], [AC_MSG_WARN([[pcre old version installed]]); have_pcre=no]) |
| 774 | ], [have_pcre=no]) |
| 775 | ]) |
| 776 | ], [have_pcre=no]) |
| 777 | |
| 778 | AC_CHECK_LIB(pcreposix, regcomp, [ |
| 779 | AC_CHECK_HEADER(pcreposix.h, [ |
| 780 | AC_EGREP_HEADER(pcreposix_regerror, pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes]) |
| 781 | ], [ |
| 782 | AC_CHECK_HEADER(pcre/pcreposix.h, [ |
| 783 | AC_EGREP_HEADER(pcreposix_regerror, pcre/pcreposix.h, [AC_MSG_WARN([[pcreposix old version installed]]); have_pcreposix=no], [have_pcreposix=yes]; [AC_DEFINE(PCREPOSIX_H_IN_SUBDIR)]) |
| 784 | ], [have_pcreposix=no]) |
| 785 | ]) |
| 786 | ], [have_pcreposix=no], -lpcre) |
| 787 | |
| 788 | dnl ================================================================ |
| 789 | dnl libpcrs is temporarily disabled. |
| 790 | dnl |
| 791 | dnl Privoxy's own pcrs version fixes some problems that |
| 792 | dnl are present in libpcrs 0.3, the last pcrs release we |
| 793 | dnl know of, and as libpcrs seems to be currently unmaintained |
| 794 | dnl we can't send these fixes upstream. |
| 795 | dnl ================================================================ |
| 796 | dnl |
| 797 | dnl AC_CHECK_LIB(pcrs, pcrs_compile, [AC_CHECK_HEADER(pcrs.h, [have_pcrs=yes], [have_pcrs=no])], [have_pcrs=no], -lpcre) |
| 798 | |
| 799 | dnl ================================================================= |
| 800 | dnl Always defined |
| 801 | dnl ================================================================= |
| 802 | |
| 803 | AC_DEFINE(__MT__) |
| 804 | |
| 805 | dnl ================================================================= |
| 806 | dnl Features |
| 807 | dnl ================================================================= |
| 808 | |
| 809 | AC_ARG_ENABLE(toggle, |
| 810 | [ --disable-toggle Don't support temporary disable], |
| 811 | [if test $enableval = yes; then |
| 812 | AC_DEFINE(FEATURE_TOGGLE) |
| 813 | fi],AC_DEFINE(FEATURE_TOGGLE)) |
| 814 | |
| 815 | AC_ARG_ENABLE(force, |
| 816 | [ --disable-force Don't allow single-page disable], |
| 817 | [if test $enableval = yes; then |
| 818 | AC_DEFINE(FEATURE_FORCE_LOAD) |
| 819 | fi],AC_DEFINE(FEATURE_FORCE_LOAD)) |
| 820 | |
| 821 | AC_ARG_ENABLE(fast-redirects, |
| 822 | [ --disable-fast-redirects Don't support fast redirects], |
| 823 | [if test $enableval = yes; then |
| 824 | AC_DEFINE(FEATURE_FAST_REDIRECTS) |
| 825 | fi], AC_DEFINE(FEATURE_FAST_REDIRECTS)) |
| 826 | |
| 827 | AC_ARG_ENABLE(stats, |
| 828 | [ --disable-stats Don't keep statistics], |
| 829 | [if test $enableval = yes; then |
| 830 | AC_DEFINE(FEATURE_STATISTICS) |
| 831 | fi],AC_DEFINE(FEATURE_STATISTICS)) |
| 832 | |
| 833 | AC_ARG_ENABLE(ie-images, |
| 834 | [ --enable-ie-images Enable a quick but not always reliable auto-detect whether requests from |
| 835 | MS Internet Explorer are for an image or not.], |
| 836 | [if test $enableval = yes; then |
| 837 | AC_DEFINE(FEATURE_IMAGE_DETECT_MSIE) |
| 838 | fi],) |
| 839 | |
| 840 | AC_ARG_ENABLE(image-blocking, |
| 841 | [ --disable-image-blocking Don't try to figure out whether a request is |
| 842 | for an image or HTML - assume HTML.], |
| 843 | [if test $enableval = yes; then |
| 844 | AC_DEFINE(FEATURE_IMAGE_BLOCKING) |
| 845 | fi], |
| 846 | AC_DEFINE(FEATURE_IMAGE_BLOCKING)) |
| 847 | |
| 848 | AC_ARG_ENABLE(acl-support, |
| 849 | [ --disable-acl-support Prevents the use of ACLs to control access to |
| 850 | Privoxy by IP address.], |
| 851 | [if test $enableval = yes; then |
| 852 | AC_DEFINE(FEATURE_ACL) |
| 853 | fi], |
| 854 | AC_DEFINE(FEATURE_ACL)) |
| 855 | |
| 856 | AC_ARG_ENABLE(trust-files, |
| 857 | [ --disable-trust-files Prevents the use of trust files.], |
| 858 | [if test $enableval = yes; then |
| 859 | AC_DEFINE(FEATURE_TRUST) |
| 860 | fi], |
| 861 | AC_DEFINE(FEATURE_TRUST)) |
| 862 | |
| 863 | AC_ARG_ENABLE(editor, |
| 864 | [ --disable-editor Prevents the use of the web-based actions file |
| 865 | editor and web-based temporary disable setting.], |
| 866 | [if test $enableval = yes; then |
| 867 | AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS) |
| 868 | fi], |
| 869 | AC_DEFINE(FEATURE_CGI_EDIT_ACTIONS)) |
| 870 | |
| 871 | AC_ARG_ENABLE(no-gifs, |
| 872 | [ --enable-no-gifs Use politically correct PNG format instead of GIF |
| 873 | for built-in images. May not work with all browsers.], |
| 874 | [if test $enableval = yes; then |
| 875 | AC_DEFINE(FEATURE_NO_GIFS) |
| 876 | fi]) |
| 877 | |
| 878 | AC_ARG_ENABLE(graceful-termination, |
| 879 | [ --enable-graceful-termination Allow to shutdown Privoxy through the webinterface.], |
| 880 | [if test $enableval = yes; then |
| 881 | AC_DEFINE(FEATURE_GRACEFUL_TERMINATION) |
| 882 | fi]) |
| 883 | |
| 884 | AC_ARG_ENABLE(extended-host-patterns, |
| 885 | [ --enable-extended-host-patterns Enable and require PCRE syntax in host patterns. This feature hasn't |
| 886 | been announced yet and it's not clear if it's a good idea. It's expected |
| 887 | to work, but undocumented. You should only enable it if you know what |
| 888 | PCRE is and are sure that you need it for your host patterns. You can |
| 889 | use tools/url-pattern-translator.pl to convert existing action files to |
| 890 | use PCRE host patterns. Please don't enable this option when creating |
| 891 | packages for others that may not be expecting it.], |
| 892 | [if test $enableval = yes; then |
| 893 | AC_DEFINE(FEATURE_EXTENDED_HOST_PATTERNS) |
| 894 | fi]) |
| 895 | |
| 896 | AC_ARG_ENABLE(accept-filter, |
| 897 | [ --enable-accept-filter Try to use accf_http(9) if supported.], |
| 898 | [if test $enableval = yes; then |
| 899 | AC_DEFINE(FEATURE_ACCEPT_FILTER) |
| 900 | fi]) |
| 901 | |
| 902 | dnl pcre/pcrs is needed for CGI anyway, so |
| 903 | dnl the choice is only between static and |
| 904 | dnl dynamic: |
| 905 | |
| 906 | AC_ARG_ENABLE(dynamic-pcre, |
| 907 | [ --disable-dynamic-pcre Use the built-in, static pcre, even if libpcre is available], |
| 908 | [ if test $enableval = "no"; then have_pcre=no; fi ]) |
| 909 | |
| 910 | dnl ================================================= |
| 911 | dnl libpcrs is temporarily disabled, |
| 912 | dnl see comment above for the reason. |
| 913 | dnl ================================================= |
| 914 | dnl AC_ARG_ENABLE(dynamic-pcrs, |
| 915 | dnl [ --disable-dynamic-pcrs Use the built-in, static pcrs, even if libpcrs is available], |
| 916 | dnl [ if test $enableval = "no"; then have_pcrs=no; fi ]) |
| 917 | |
| 918 | |
| 919 | dnl ==================================================== |
| 920 | dnl This check is incomplete. For mingw32 zlib is found |
| 921 | dnl by configure, but not necessarily by the compiler. |
| 922 | dnl ==================================================== |
| 923 | AC_ARG_ENABLE(zlib, |
| 924 | [ --disable-zlib Don't use zlib to decompress data before filtering.], |
| 925 | [enableval2=$enableval], |
| 926 | [enableval2=yes]) |
| 927 | if test $enableval2 = yes; then |
| 928 | AC_CHECK_LIB(z, zlibVersion, [have_zlib="yes"], [have_zlib="no"]) |
| 929 | if test $have_zlib = "yes"; then |
| 930 | LIBS="$LIBS -lz" |
| 931 | AC_DEFINE(FEATURE_ZLIB,1,[Define to 1 to use zlib to decompress data before filtering.]) |
| 932 | else |
| 933 | AC_MSG_WARN([No zlib found. |
| 934 | Privoxy will not be able to filter compressed content. |
| 935 | This may become a fatal error in the future.]) |
| 936 | fi |
| 937 | fi |
| 938 | |
| 939 | AC_ARG_ENABLE(compression, |
| 940 | [ --enable-compression Allow Privoxy to compress buffered content if the client supports it. Requires zlib support.], |
| 941 | [enableval2=$enableval], |
| 942 | [enableval2=no]) |
| 943 | if test $enableval2 = yes; then |
| 944 | if test $have_zlib = "yes"; then |
| 945 | echo Enabling compression support. |
| 946 | AC_DEFINE(FEATURE_COMPRESSION,1,[Define to 1 to use compression through the zlib library.]) |
| 947 | else |
| 948 | AC_MSG_WARN([No zlib found. Privoxy will not be able to (re-)compressed buffered content.]) |
| 949 | fi |
| 950 | fi |
| 951 | |
| 952 | |
| 953 | # If we have libpcre and either we also have pcreposix or |
| 954 | # we don't need pcreposix, then link pcre dynamically; else |
| 955 | # build it and link statically |
| 956 | # |
| 957 | if test $have_pcre = "yes"; then |
| 958 | echo "using libpcre" |
| 959 | pcre_dyn=yes |
| 960 | STATIC_PCRE_ONLY=# |
| 961 | LIBS="$LIBS -lpcre -lpcreposix" |
| 962 | else |
| 963 | AC_MSG_WARN([You are using the static PCRE code which is out of date and scheduled for removal, for details see: |
| 964 | http://sourceforge.net/mailarchive/forum.php?thread_name=20080511195555.2dc6cfdc%40fabiankeil.de&forum_name=ijbswa-developers]) |
| 965 | pcre_dyn=no |
| 966 | AC_DEFINE(STATIC_PCRE) |
| 967 | STATIC_PCRE_ONLY= |
| 968 | fi |
| 969 | |
| 970 | AC_DEFINE(FEATURE_CONNECTION_KEEP_ALIVE) |
| 971 | |
| 972 | if test $have_pthread = "yes" -o $target_type = "mingw"; then |
| 973 | echo Enabling connection-sharing support. |
| 974 | AC_DEFINE(FEATURE_CONNECTION_SHARING) |
| 975 | fi |
| 976 | |
| 977 | dnl ================================================= |
| 978 | dnl libpcrs is temporarily disabled, |
| 979 | dnl see comment above for the reason. |
| 980 | dnl ================================================= |
| 981 | dnl # If we have libpcrs and pcre is linked dynamically |
| 982 | dnl # then also link pcrs dynamically, else build and link |
| 983 | dnl # pcrs statically |
| 984 | dnl |
| 985 | dnl if test $have_pcrs = "yes" -a $pcre_dyn = "yes"; then |
| 986 | dnl echo "using libpcrs" |
| 987 | dnl STATIC_PCRS_ONLY=# |
| 988 | dnl LIBS="$LIBS -lpcrs" |
| 989 | dnl else |
| 990 | dnl echo "using built-in static pcrs" |
| 991 | AC_DEFINE(STATIC_PCRS) |
| 992 | STATIC_PCRS_ONLY= |
| 993 | dnl fi |
| 994 | |
| 995 | AC_SUBST(STATIC_PCRE_ONLY) |
| 996 | AC_SUBST(STATIC_PCRS_ONLY) |
| 997 | |
| 998 | dnl ================================================================= |
| 999 | dnl Final cleanup and output |
| 1000 | dnl ================================================================= |
| 1001 | |
| 1002 | dnl Remove the SPECIAL_CFLAGS stuff from CFLAGS, and add it separately |
| 1003 | dnl in the Makefile |
| 1004 | CFLAGS=$old_CFLAGS_nospecial |
| 1005 | AC_SUBST(SPECIAL_CFLAGS) |
| 1006 | |
| 1007 | AC_SUBST(PTHREAD_LIB) |
| 1008 | |
| 1009 | AC_OUTPUT(GNUmakefile doc/source/ldp.dsl) |
Copyright © 2010 Geeknet, Inc. All rights reserved. Terms of Use