Annotation of libwww/configure.in, revision 1.53
1.1 frystyk 1: dnl Process this file with Autoconf to create configure
2: dnl (c) COPYRIGHT MIT 1995.
3: dnl Please first read the full copyright statement in the file COPYRIGH.
1.53 ! frystyk 4: dnl @(#) $Id: configure.in,v 1.52 1998/03/25 15:09:50 frystyk Exp $
1.1 frystyk 5:
1.53 ! frystyk 6: AC_REVISION([$Id: configure.in,v 1.52 1998/03/25 15:09:50 frystyk Exp $])
1.1 frystyk 7: AC_PREREQ(2.2)
8: AC_INIT(Library)
1.41 frystyk 9:
1.5 frystyk 10: AC_CONFIG_AUX_DIR(config)
1.1 frystyk 11:
1.43 frystyk 12: AC_CANONICAL_SYSTEM
13: AC_ARG_PROGRAM
14:
1.41 frystyk 15: dnl Initialize Automake.
1.3 frystyk 16: PACKAGE=w3c-libwww
1.1 frystyk 17: AC_SUBST(PACKAGE)
1.28 frystyk 18: AC_DEFINE_UNQUOTED(W3C_PACKAGE, "$PACKAGE")
1.41 frystyk 19:
1.53 ! frystyk 20: VERSION=5.1m
1.1 frystyk 21: AC_SUBST(VERSION)
22: AC_DEFINE_UNQUOTED(W3C_VERSION, "$VERSION")
23:
1.51 frystyk 24: #dnl for CVS to be able to make a release diff
1.53 ! frystyk 25: PREVIOUS_VERSION=5.1l
1.51 frystyk 26: AC_SUBST(PREVIOUS_VERSION)
27:
1.41 frystyk 28: AM_INIT_AUTOMAKE($PACKAGE, $VERSION)
1.51 frystyk 29:
1.53 ! frystyk 30: AM_CONFIG_HEADER(wwwconf.h)
1.41 frystyk 31:
32: dnl Regular configure...
1.1 frystyk 33: AC_PROG_CC
34: AC_PROG_RANLIB
1.41 frystyk 35: AC_PROG_MAKE_SET
36:
1.1 frystyk 37: dnl Remove next line and you get an error -- autoconf
38: dnl should deal with this automatically.
39: AC_ISC_POSIX
40: AC_PATH_X
1.7 frystyk 41: dnl AC_PATH_XTRA Causes problems...
1.1 frystyk 42:
1.28 frystyk 43: dnl Default location of icons
1.51 frystyk 44: icondir=$datadir/$PACKAGE
1.28 frystyk 45: AC_SUBST(icondir)
46:
1.34 frystyk 47: dnl Location for purify cache
48: PURIFY_CACHE=/tmp/purify.cache
49: AC_SUBST(PURIFY_CACHE)
50:
1.1 frystyk 51: dnl Various compiler directives
1.28 frystyk 52: AC_MSG_CHECKING(whether to define additional compiler specific flags)
1.5 frystyk 53: case "$target" in
54: alpha-dec*)
55: if test "$CC" = "cc"; then
56: CFLAGS="$CFLAGS -std1"
1.28 frystyk 57: AC_MSG_RESULT(Digital Unix's cc)
1.14 frystyk 58: fi
59: ;;
60: hp*)
61: if test "$CC" = "cc"; then
62: CFLAGS="$CFLAGS -Aa -D_HPUX_SOURCE"
1.28 frystyk 63: AC_MSG_RESULT(HT-UX's cc)
1.5 frystyk 64: fi
65: ;;
1.28 frystyk 66: *)
67: AC_MSG_RESULT(no)
68: ;;
1.5 frystyk 69: esac
1.1 frystyk 70:
1.53 ! frystyk 71: dnl Checks for programs.
! 72: AC_PROG_INSTALL
! 73: AC_PROG_RANLIB
! 74: AC_CHECK_PROGS(have_telnet, telnet)
! 75: if test -n "$have_telnet" ; then
! 76: AC_DEFINE_UNQUOTED(TELNET_PROGRAM, "$have_telnet")
! 77: fi
! 78: AC_CHECK_PROGS(have_rlogin, rlogin)
! 79: if test -n "$have_rlogin" ; then
! 80: AC_DEFINE_UNQUOTED(RLOGIN_PROGRAM, "$have_rlogin")
! 81: fi
! 82: AC_CHECK_PROGS(have_tn3270, tn3270 x3270)
! 83: if test -n "$have_tn3270" ; then
! 84: AC_DEFINE_UNQUOTED(TN3270_PROGRAM, "$have_tn3270")
! 85: fi
! 86: AC_PATH_PROG(RM, rm, rm)
! 87: AC_PATH_PROG(AR, ar, ar)
! 88: AC_PATH_PROG(MKDIR, mkdir, mkdir)
! 89: AC_PATH_PROG(CHMOD, chmod, chmod)
! 90: AC_PATH_PROG(CP, cp, cp)
! 91: AC_PATH_PROG(TAR, tar, tar)
! 92: AC_PATH_PROG(CVS, cvs, cvs)
! 93: AC_PATH_PROG(SED, sed, sed)
! 94: AC_PATH_PROGS(COMPRESS, gzip compress, compress)
! 95: AC_PROG_LN_S
! 96:
! 97: dnl Checks for misc files
! 98: dnl Resolv.conf
! 99: AC_PATH_PROG(have_resolv_conf, resolv.conf, , /etc, /usr/etc)
! 100: if test -n "$have_resolv_conf" ; then
! 101: AC_DEFINE_UNQUOTED(RESOLV_CONF, "$have_resolv_conf")
! 102: fi
! 103:
! 104: dnl This is the standard UNIX value
! 105: AC_DEFINE(CACHE_FILE_PREFIX, "/usr/wsrc/")
! 106:
! 107: dnl Checks for libraries:
! 108: AC_CHECK_LIB(ICE, IceConnectionNumber)
! 109: AC_CHECK_LIB(socket, socket)
! 110: AC_CHECK_LIB(inet, connect)
! 111: AC_CHECK_LIB(nsl, t_accept)
! 112: AC_CHECK_LIB(dl, dlopen)
! 113:
! 114: dnl Checks for header files:
! 115: AC_CHECK_HEADERS(stdio.h)
! 116: AC_CHECK_HEADERS(sys/fcntl.h fcntl.h)
! 117: AC_CHECK_HEADERS(sys/file.h)
! 118: AC_CHECK_HEADERS(sys/ioctl.h)
! 119: AC_CHECK_HEADERS(sys/ipc.h)
! 120: AC_CHECK_HEADERS(sys/limits.h limits.h)
! 121: AC_CHECK_HEADERS(sys/resource.h resource.h)
! 122: AC_CHECK_HEADERS(sys/select.h select.h)
! 123: AC_CHECK_HEADERS(sys/socket.h socket.h)
! 124: AC_CHECK_HEADERS(sys/stat.h stat.h)
! 125: AC_CHECK_HEADERS(sys/systeminfo.h)
! 126: AC_CHECK_HEADERS(sys/time.h time.h)
! 127: AC_CHECK_HEADERS(sys/types.h types.h)
! 128: AC_CHECK_HEADERS(sys/unistd.h unistd.h)
! 129: AC_CHECK_HEADERS(string.h strings.h)
! 130: AC_CHECK_HEADERS(syslog.h)
! 131: AC_CHECK_HEADERS(appkit/appkit.h appkit.h)
! 132: AC_CHECK_HEADERS(net/errno.h sys/errno.h errno.h)
! 133: AC_CHECK_HEADERS(netinet/tcp.h tcp.h)
! 134: AC_CHECK_HEADERS(netinet/in.h in.h)
! 135: AC_CHECK_HEADERS(dn.h)
! 136: AC_CHECK_HEADERS(termios.h)
! 137: AC_CHECK_HEADERS(pwd.h)
! 138: AC_CHECK_HEADERS(grp.h)
! 139: AC_CHECK_HEADERS(arpa/inet.h inet.h)
! 140: AC_CHECK_HEADERS(netdb.h)
! 141: AC_CHECK_HEADERS(manifest.h)
! 142: AC_CHECK_HEADERS(bsdtypes.h)
! 143: AC_CHECK_HEADERS(stdefs.h)
! 144: AC_CHECK_HEADERS(bsdtime.h)
! 145: AC_CHECK_HEADERS(dnetdb.h)
! 146: AC_CHECK_HEADERS(libc.h)
! 147: AC_CHECK_HEADERS(stdlib.h)
! 148: AC_CHECK_HEADERS(malloc.h)
! 149: AC_CHECK_HEADERS(memory.h)
! 150: AC_CHECK_HEADERS(unixlib.h)
! 151: AC_CHECK_HEADERS(ctype.h)
! 152: AC_CHECK_HEADERS(cursesX.h curses.h)
! 153: AC_CHECK_HEADERS(rxposix.h regex.h)
! 154: AC_CHECK_HEADERS(wais/wais.h wais.h)
! 155: AC_HEADER_DIRENT
! 156: AC_CHECK_HEADERS(dir.h direct.h) dnl AC_HEADER_DIRENT only checks for some..
! 157: AC_HEADER_STDC
! 158: AC_HEADER_SYS_WAIT
! 159: AC_HEADER_TIME
! 160: AC_HEADER_STAT
! 161:
! 162: dnl Checks for typedefs, structures, and compiler characteristics:
! 163: AC_TYPE_UID_T
! 164: AC_TYPE_PID_T
! 165: AC_TYPE_GETGROUPS
! 166: AC_TYPE_MODE_T
! 167: AC_TYPE_SIZE_T
! 168: AC_TYPE_SIGNAL
! 169:
! 170: AC_CHECK_TYPE(BOOLEAN, char)
! 171: AC_CHECK_TYPE(u_char, unsigned char)
! 172: AC_CHECK_TYPE(u_short, unsigned short)
! 173: AC_CHECK_TYPE(u_long, unsigned long)
! 174:
! 175: AC_CHECK_SIZEOF(char)
! 176: AC_CHECK_SIZEOF(char *)
! 177: AC_CHECK_SIZEOF(int)
! 178: AC_CHECK_SIZEOF(long)
! 179: AC_CHECK_SIZEOF_TIME_T
! 180: AC_CHECK_SIZEOF_SIZE_T
! 181:
! 182: AC_C_CONST
! 183: AC_C_BIGENDIAN
! 184: AC_C_CHAR_UNSIGNED
! 185: AC_C_LONG_DOUBLE
! 186:
! 187: AC_STRUCT_TM
! 188: AC_STRUCT_GMTOFF
! 189: AC_STRUCT_TIMEZONE
! 190: AC_STRUCT_WINSIZE
! 191:
! 192: dnl Checks for library functions:
! 193: AC_FUNC_VPRINTF
! 194: AC_FUNC_STRFTIME
! 195: AC_CHECK_FUNCS(getcwd gethostname getdomainname getwd \
! 196: select socket strerror strtol opendir getpid strchr memcpy \
! 197: getlogin getpass fcntl readdir sysinfo ioctl chdir tempnam \
! 198: getsockopt setsockopt \
! 199: gettimeofday mktime timegm)
! 200: AC_CHECK_FUNC(unlink, , AC_CHECK_FUNC(remove, AC_DEFINE(unlink, remove)))
! 201:
! 202: dnl THINGS TO CONSIDER
! 203: dnl ******************
! 204: AC_DEFINE(TTY_IS_SELECTABLE)
! 205:
1.31 frystyk 206: dnl Checks for configuration arguments
1.50 frystyk 207: AC_MSG_CHECKING(whether to support direct WAIS access.)
1.31 frystyk 208: AC_ARG_WITH(wais,
209: [ --with-wais[=PATH] Compile with support for direct WAIS access.],
210: [ case "$withval" in
211: no)
212: AC_MSG_RESULT(no)
213: HTWAIS=""
214: ;;
215: *)
216: AC_MSG_RESULT(yes)
217: if test "x$withval" = "xyes"; then
1.50 frystyk 218: withval="/usr/local/lib/wais/wais.a /usr/local/lib/wais/client.a"
1.31 frystyk 219: fi
1.50 frystyk 220: LIBS="$withval -lm $LIBS"
1.52 frystyk 221: AC_DEFINE(HT_DIRECT_WAIS)
1.31 frystyk 222: AC_TRY_LINK([],
1.50 frystyk 223: [ makeDocID(); ],
1.31 frystyk 224: [],
1.50 frystyk 225: [ AC_MSG_ERROR(Could not find one or more of the $withval libraries. You must first install WAIS.) ])
1.31 frystyk 226: HTWAIS="HTWAIS.o"
227: ;;
228: esac ],
229: AC_MSG_RESULT(no)
1.18 frystyk 230: HTWAIS=""
1.31 frystyk 231: )
1.1 frystyk 232: AC_SUBST(HTWAIS)
233:
1.53 ! frystyk 234: AC_MSG_CHECKING(whether to support mysql access.)
! 235: AC_ARG_WITH(mysql,
! 236: [ --with-mysql[=PATH] Compile with support for mysql access.],
! 237: [ case "$withval" in
! 238: no)
! 239: AC_MSG_RESULT(no)
! 240: HTSQL=""
! 241: ;;
! 242: *)
! 243: AC_MSG_RESULT(yes)
! 244: if test "x$withval" = "xyes"; then
! 245: withval="-L/usr/local/mysql/lib/ -lmysqlclient"
! 246: fi
! 247: LIBS="$withval $LIBS"
! 248: AC_DEFINE(HT_MYSQL)
! 249: HTSQL="HTSQLLog.o"
! 250: ;;
! 251: esac ],
! 252: AC_MSG_RESULT(no)
! 253: HTSQL=""
! 254: )
! 255: AC_SUBST(HTSQL)
! 256:
1.31 frystyk 257: AC_MSG_CHECKING(whether to support zlib compress/decompress)
258: AC_ARG_WITH(zlib,
259: [ --with-zlib[=PATH] Compile with zlib compress/decompress support.],
260: [ case "$withval" in
261: no)
262: AC_MSG_RESULT(no)
1.33 eric 263: HTZLIB=""
1.31 frystyk 264: ;;
265: *)
266: AC_MSG_RESULT(yes)
267: if test "x$withval" = "xyes"; then
268: withval="-lz"
269: fi
270: LIBS="$withval $LIBS"
1.35 frystyk 271: AC_DEFINE(HT_ZLIB)
1.31 frystyk 272: AC_TRY_LINK([],
273: [ zlibVersion(); ],
274: [],
275: [ AC_MSG_ERROR(Could not find the $withval library. You must first install zlib.) ])
1.33 eric 276: HTZLIB="HTZip.o"
1.31 frystyk 277: ;;
278: esac ],
279: AC_MSG_RESULT(no)
1.33 eric 280: HTZLIB=""
1.31 frystyk 281: )
1.33 eric 282: AC_SUBST(HTZLIB)
1.43 frystyk 283:
284: AC_MSG_CHECKING(whether to support POSIX regex)
285: AC_ARG_WITH(regex,
286: [ --with-regex[=PATH] Compile with POSIC regex library support.],
287: [ case "$withval" in
288: no)
289: AC_MSG_RESULT(no)
290: ;;
291: *)
292: AC_MSG_RESULT(yes)
1.46 frystyk 293: AC_DEFINE(HT_POSIX_REGEX)
1.43 frystyk 294: if test "x$withval" = "xyes"; then
1.46 frystyk 295: AC_CHECK_LIB(rx, regexec,
296: [ LIBS="-lrx $LIBS" ],
297: [ AC_CHECK_LIB(c, regexec,
298: [],
299: [ AC_MSG_ERROR(Could not find a POSIX regex library. You must first install regex.) ] ) ] )
300: else
301: LIBS="$withval $LIBS"
302: AC_TRY_LINK([],
303: [ regexec(); ],
304: [],
305: [ AC_MSG_ERROR(Could not find the $withval library. You must first install regex.) ] )
1.43 frystyk 306: fi
307: ;;
308: esac ],
309: AC_MSG_RESULT(no)
310: )
1.31 frystyk 311:
1.26 frystyk 312: # borrowed from SSH - thanks!
313: AC_MSG_CHECKING(whether to support SOCKS)
314: AC_ARG_WITH(socks,
315: [ --with-socks Compile with SOCKS firewall traversal support.],
316: [ case "$withval" in
317: no)
318: AC_MSG_RESULT(no)
319: ;;
320: yes)
321: AC_MSG_RESULT(yes)
322: AC_CHECK_LIB(socks5, SOCKSconnect, [
323: socks=5
324: LIBS="-lsocks5 $LIBS"], [
325: AC_CHECK_LIB(socks, Rconnect, [
326: socks=4
327: LIBS="-lsocks $LIBS"], [
328: AC_MSG_ERROR(Could not find socks library. You must first install socks.) ] ) ] )
329: ;;
330: esac ],
331: AC_MSG_RESULT(no)
1.1 frystyk 332: )
333:
1.26 frystyk 334: if test "x$socks" = "x"; then
335: AC_MSG_CHECKING(whether to support SOCKS5)
336: AC_ARG_WITH(socks5,
337: [ --with-socks5[=PATH] Compile with SOCKS5 firewall traversal support.],
338: [ case "$withval" in
339: no)
340: AC_MSG_RESULT(no)
341: ;;
342: *)
343: AC_MSG_RESULT(yes)
344: socks=5
345: if test "x$withval" = "xyes"; then
346: withval="-lsocks5"
347: fi
348: LIBS="$withval $LIBS"
349: AC_TRY_LINK([],
350: [ SOCKSconnect(); ],
351: [],
352: [ AC_MSG_ERROR(Could not find the $withval library. You must first install socks5.) ])
353: ;;
354: esac ],
355: AC_MSG_RESULT(no)
356: )
357: fi
358:
359: if test "x$socks" = "x"; then
360: AC_MSG_CHECKING(whether to support SOCKS4)
361: AC_ARG_WITH(socks4,
362: [ --with-socks4[=PATH] Compile with SOCKS4 firewall traversal support.],
363: [ case "$withval" in
364: no)
365: AC_MSG_RESULT(no)
366: ;;
367: *)
368: AC_MSG_RESULT(yes)
369: socks=4
370: if test "x$withval" = "xyes"; then
371: withval="-lsocks"
372: fi
373: LIBS="$withval $LIBS"
374: AC_TRY_LINK([],
375: [ Rconnect(); ],
376: [],
377: [ AC_MSG_ERROR(Could not find the $withval library. You must first install socks.) ])
378: ;;
379: esac ],
380: AC_MSG_RESULT(no)
381: )
382: fi
383:
384: if test "x$socks" = "x4"; then
385: AC_DEFINE(SOCKS)
386: AC_DEFINE(SOCKS4)
387: fi
388:
389: if test "x$socks" = "x5"; then
390: AC_DEFINE(SOCKS)
391: AC_DEFINE(SOCKS5)
392: fi
393:
1.28 frystyk 394: AC_MSG_CHECKING(whether to use internal signal handlers)
395: AC_ARG_ENABLE(signals, [ --enable-signals use internal libwww signal handler.],
396: [ case "${enableval}" in
397: no)
398: AC_MSG_RESULT(no)
399: ;;
400: *)
401: AC_MSG_RESULT(yes)
402: AC_DEFINE(WWWLIB_SIG)
403: ;;
404: esac ],
405: AC_MSG_RESULT(no)
406: )
1.26 frystyk 407:
1.28 frystyk 408: AC_MSG_CHECKING(whether to disable Nagle's algorithm)
409: AC_ARG_ENABLE(nagle,
1.30 frystyk 410: [ --disable-nagle Turning off Nagle's algorithm.],
1.28 frystyk 411: [ case "${enableval}" in
412: no)
413: AC_MSG_RESULT(yes)
414: AC_DEFINE(HT_NO_NAGLE)
415: ;;
416: *)
417: AC_MSG_RESULT(no)
418: ;;
419: esac ],
1.29 frystyk 420: AC_MSG_RESULT(yes)
421: AC_DEFINE(HT_NO_NAGLE)
1.28 frystyk 422: )
423:
1.40 frystyk 424: AC_MSG_CHECKING(whether to accept new rule files without asking an end user.)
425: AC_ARG_ENABLE(autorules,
426: [ --enable-autorules Enabling acceptance of rule files without user interaction.],
427: [ case "${enableval}" in
428: yes)
429: AC_MSG_RESULT(yes)
430: AC_DEFINE(HT_AUTOMATIC_RULES)
431: ;;
432: *)
433: AC_MSG_RESULT(no)
434: ;;
435: esac ],
436: AC_MSG_RESULT(no)
437: )
438:
1.30 frystyk 439: AC_MSG_CHECKING(whether to disable HTTP/1.1 pipelining)
440: AC_ARG_ENABLE(pipelining,
441: [ --disable-pipelining Turning off HTTP/1.1 Pipelining.],
442: [ case "${enableval}" in
443: no)
444: AC_MSG_RESULT(yes)
445: AC_DEFINE(HT_NO_PIPELINING)
1.41 frystyk 446: ;;
447: *)
448: AC_MSG_RESULT(no)
449: ;;
450: esac ],
451: AC_MSG_RESULT(no)
452: )
453:
454:
455: AC_MSG_CHECKING(whether to use MUX as transport for HTTP.)
456: AC_ARG_ENABLE(mux,
457: [ --enable-mux Enabling MUX as transport for HTTP.],
458: [ case "${enableval}" in
459: yes)
460: AC_MSG_RESULT(yes)
461: AC_DEFINE(HT_MUX)
1.30 frystyk 462: ;;
463: *)
464: AC_MSG_RESULT(no)
465: ;;
466: esac ],
467: AC_MSG_RESULT(no)
468: )
469:
1.28 frystyk 470: AC_MSG_CHECKING(whether to define _REENTRANT)
1.26 frystyk 471: AC_ARG_ENABLE(reentrant, [ --enable-reentrant define _REENTRANT to enable reentrant system calls],
1.28 frystyk 472: [ case "${enableval}" in
473: no)
474: AC_MSG_RESULT(no)
475: ;;
476: *)
477: AC_MSG_RESULT(yes)
478: AC_DEFINE(HT_REENTRANT) [CFLAGS="$CFLAGS -D_REENTRANT"]
479: ;;
480: esac ],
481: AC_MSG_RESULT(no)
482: )
1.1 frystyk 483:
1.28 frystyk 484: AC_MSG_CHECKING(whether to define _POSIX_SOURCE)
1.4 frystyk 485: AC_ARG_ENABLE(posix, [ --enable-posix define _POSIX_SOURCE],
1.28 frystyk 486: [ case "${enableval}" in
487: no)
488: AC_MSG_RESULT(no)
489: ;;
490: *)
491: AC_MSG_RESULT(yes)
492: AC_DEFINE(_POSIX_SOURCE) [CFLAGS="$CFLAGS -D_POSIX_SOURCE"]
493: ;;
494: esac ],
495: AC_MSG_RESULT(no)
496: )
1.4 frystyk 497:
1.26 frystyk 498: AC_ARG_ENABLE(cyrillic, [ --enable-cyrillic include support for Cyrillic in line mode browser],
499: AC_DEFINE(CYRILLIC)
500: A_STDIO="a_stdio.o", A_STDIO="")
501: AC_SUBST(A_STDIO)
1.1 frystyk 502:
503: dnl Create output files
504: AC_OUTPUT([Makefile
1.11 frystyk 505: config/Makefile
1.3 frystyk 506: Library/Makefile Library/User/Makefile Library/User/Patch/Makefile
507: Library/User/Architecture/Makefile Library/User/Using/Makefile Library/User/Guide/Makefile
1.12 frystyk 508: Library/User/Style/Makefile Library/User/Platform/Makefile
1.17 neon 509: Library/Test/Makefile Library/Test/User/Makefile Library/Test/src/Makefile
1.3 frystyk 510: Library/src/Makefile Library/src/windows/Makefile Library/src/vms/Makefile
1.11 frystyk 511: Library/Examples/Makefile
1.37 frystyk 512: Library/External/Makefile
1.9 frystyk 513: PICS-client/Makefile PICS-client/User/Makefile PICS-client/src/Makefile PICS-client/src/windows/Makefile
1.3 frystyk 514: LineMode/Makefile LineMode/User/Makefile
515: LineMode/src/Makefile LineMode/src/windows/Makefile LineMode/src/vms/Makefile
1.13 frystyk 516: Robot/Makefile Robot/User/Makefile Robot/src/Makefile Robot/src/windows/Makefile
1.39 frystyk 517: ComLine/Makefile ComLine/User/Makefile ComLine/src/Makefile ComLine/src/windows/Makefile
1.34 frystyk 518: MiniServ/Makefile MiniServ/User/Makefile MiniServ/src/Makefile
1.3 frystyk 519: Listen/Makefile Listen/User/Makefile Listen/src/Makefile
1.13 frystyk 520: Icons/Makefile Icons/WWW/Makefile Icons/32x32/Makefile Icons/internal/Makefile
1.1 frystyk 521: ], date>stamp-h)
Webmaster