From 82706139bf534d3f44cdec1452f029df6c818a63 Mon Sep 17 00:00:00 2001 From: ncpfs archive import Date: Tue, 28 Apr 2026 20:39:59 +0200 Subject: [PATCH] Import ncpfs 2.2.1 --- .downloads/ncpfs-2.2.1.tar.gz | Bin 0 -> 1464800 bytes ABOUT-NLS | 435 + BUGS | 21 +- Changes | 694 +- Changes.old | 553 + ConfigFile | 67 + FAQ | 9 + INSTALL | 196 + Make.rules.in | 60 + Makefile | 81 - Makefile.in | 98 + Makeinit | 79 - Performance.txt | 41 + README | 36 +- acinclude.m4 | 587 + aclocal.m4 | 1930 +++ conf | 17 + config.guess | 1409 ++ config.rpath | 513 + config.sub | 1473 ++ configure | 12371 ++++++++++++++++ configure.ac | 1153 ++ contrib/libtrace/Makefile | 25 + contrib/libtrace/README | 96 + contrib/libtrace/demo.pl | 24 + contrib/libtrace/demo.trc | 35 + contrib/libtrace/tracencp.c | 139 + contrib/nss64/Makefile | 27 + contrib/nss64/ncphook.c | 663 + contrib/nss64/ncphook.def | 22 + contrib/nss64/ncphook.h | 223 + contrib/nss64/prelude.c | 49 + contrib/pam-snapin/INSTALL | 48 + contrib/pam-snapin/dummyDS8/README | 77 + contrib/pam-snapin/dummyDS8/pamncp.dll | Bin 0 -> 90674 bytes contrib/pam-snapin/pamncp.c | 2357 +++ contrib/pam-snapin/pamncp.def | 12 + contrib/pam-snapin/pamncp.dsw | Bin 0 -> 3626 bytes contrib/pam-snapin/pamncp.h | 102 + contrib/pam-snapin/pamncp.ide | Bin 0 -> 35268 bytes contrib/pam-snapin/pamncp.lib | Bin 0 -> 1024 bytes contrib/pam-snapin/pamncp.mak | 147 + contrib/pam-snapin/pamncp.obj | Bin 0 -> 114460 bytes contrib/pam-snapin/pamncp.obr | Bin 0 -> 129 bytes contrib/pam-snapin/pamncp.rc | 128 + contrib/pam-snapin/pamncp.res | Bin 0 -> 4458 bytes contrib/pam-snapin/pamncp.rws | Bin 0 -> 81340 bytes contrib/pam-snapin/realDS8/README | 54 + contrib/pam-snapin/realDS8/pamncp.dll | Bin 0 -> 90674 bytes contrib/pam/COPYING | 339 + contrib/pam/Makefile.in | 62 + contrib/pam/Makefile.pam | 108 + contrib/pam/README | 122 + contrib/pam/install-to-PAM | 57 + contrib/pam/pam_ncp_auth.c | 4923 ++++++ contrib/pam/support.c | 270 + contrib/pam/support.h | 18 + contrib/php/Makefile.in.in | 6 + contrib/php/acinclude.m4 | 1279 ++ contrib/php/aclocal.m4 | 4927 ++++++ contrib/php/build/dynlib.mk | 24 + contrib/php/build/fastgen.sh | 80 + contrib/php/build/library.mk | 23 + contrib/php/build/ltlib.mk | 24 + contrib/php/build/mkdep.awk | 75 + contrib/php/build/program.mk | 23 + contrib/php/build/rules.mk | 77 + contrib/php/build/rules_common.mk | 77 + contrib/php/build/shtool | 716 + contrib/php/config.guess | 1409 ++ contrib/php/config.h.in | 11 + contrib/php/config.m4 | 6 + contrib/php/config.sub | 1473 ++ contrib/php/configure | 6033 ++++++++ contrib/php/configure.in | 90 + contrib/php/dynlib.m4 | 88 + contrib/php/install-sh | 0 contrib/php/libtool | 5396 +++++++ contrib/php/ltmain.sh | 5107 +++++++ contrib/php/missing | 0 contrib/php/mkinstalldirs | 0 contrib/php/php_auth_nds.c | 710 + contrib/php/site/config.inc.php3 | 12 + contrib/php/site/footer.inc.php3 | 8 + contrib/php/site/header.inc.php3 | 61 + contrib/php/site/images/bkg.gif | Bin 0 -> 236 bytes contrib/php/site/images/linuxlog.gif | Bin 0 -> 5736 bytes contrib/php/site/images/netware.gif | Bin 0 -> 9002 bytes contrib/php/site/index.phtml | 108 + contrib/php/site/lib.inc.php3 | 140 + contrib/php/site/linuxinfos.phtml | 42 + contrib/php/site/menu.phtml | 44 + contrib/php/site/nds.php | 72 + contrib/php/site/nocache.txt | 6 + contrib/php/site/nwinfos.phtml | 149 + contrib/scripts/config.ipx | 19 + contrib/scripts/rc.ipxnet.in | 68 + contrib/suseinit/LIESMICH | 1 + contrib/suseinit/README | 1 + contrib/suseinit/etc/rc.config.app | 4 + contrib/suseinit/sbin/init.d/ipx | 52 + contrib/suseinit/sbin/init.d/rc2.d/K25ipx | 1 + contrib/suseinit/sbin/init.d/rc2.d/S25ipx | 1 + contrib/suseinit/sbin/init.d/rc3.d/K25ipx | 1 + contrib/suseinit/sbin/init.d/rc3.d/S25ipx | 1 + contrib/swig/Makefile.PL | 23 + contrib/swig/README | 25 + contrib/swig/ncpfs.i | 3175 ++++ contrib/swig/test.pl | 2937 ++++ contrib/tcl-utils/Makefile.in | 82 + contrib/tcl-utils/chgpwd.c | 346 + contrib/tcl-utils/ncplist.c | 428 + contrib/tcl-utils/ncplisttrees.c | 307 + contrib/tcl-utils/ncpreadprop.c | 531 + contrib/tcl-utils/ncpreadprops.c | 568 + contrib/tcl-utils/ncpvrest.c | 226 + contrib/tcl-utils/ncpwho | 4 + contrib/tcl-utils/ncpwhoami.c | 1110 ++ contrib/tcl-utils/ndsexporter.pl | 90 + contrib/tcl-utils/slist2.c | 98 + contrib/tcl-utils/vlist.c | 147 + contrib/tcl/ABOUT | 43 + contrib/tcl/COPYING | 483 + contrib/tcl/about.tcl | 183 + contrib/tcl/contexts.tcl | 258 + contrib/tcl/img/.xvpics/nw.gif | Bin 0 -> 1017 bytes contrib/tcl/img/.xvpics/refresh.gif | 6 + contrib/tcl/img/.xvpics/server.gif | Bin 0 -> 1017 bytes contrib/tcl/img/.xvpics/servericon.gif | Bin 0 -> 541 bytes contrib/tcl/img/.xvpics/umount.gif | Bin 0 -> 793 bytes contrib/tcl/img/nw.gif | Bin 0 -> 8958 bytes contrib/tcl/img/organiz.gif | Bin 0 -> 259 bytes contrib/tcl/img/out/nw_org.gif | Bin 0 -> 11359 bytes contrib/tcl/img/out/server.gif | Bin 0 -> 11437 bytes contrib/tcl/img/out/servericon.gif | Bin 0 -> 463 bytes contrib/tcl/img/refresh.gif | Bin 0 -> 193 bytes contrib/tcl/img/tree32.gif | Bin 0 -> 1162 bytes contrib/tcl/img/umount.gif | Bin 0 -> 268 bytes contrib/tcl/license.tcl | 140 + contrib/tcl/ncpmount.tcl | 451 + contrib/tcl/ndsclient.conf | 18 + contrib/tcl/ndshome.tcl | 91 + contrib/tcl/ndslogin.tcl | 365 + contrib/tcl/ndslogout.tcl | 313 + contrib/tcl/ndsmount.tcl | 491 + contrib/tcl/ndspasswd.tcl | 425 + contrib/tcl/ndsspace.tcl | 304 + contrib/tcl/ndsstrings.tcl | 93 + contrib/tcl/ndsstrings.tcl.eng | 88 + contrib/tcl/ndsstrings.tcl.fr | 88 + contrib/tcl/ndsutils.tcl | 309 + contrib/tcl/ndswhoami.tcl | 293 + contrib/tcl/trees.tcl | 215 + contrib/testing/Makefile.in | 58 + contrib/testing/abbrev.c | 138 + contrib/testing/add.c | 2 + contrib/testing/canon.c | 139 + contrib/testing/chgpwd.c | 255 + contrib/testing/cmpattr.c | 263 + contrib/testing/copyauth.c | 136 + contrib/testing/dirlimit.c | 178 + contrib/testing/dirlist.c | 268 + contrib/testing/dirlist2.c | 151 + contrib/testing/dssearch.c | 657 + contrib/testing/dsstream.c | 291 + contrib/testing/dumpslp | 12 + contrib/testing/eaops.c | 560 + contrib/testing/effright.c | 232 + contrib/testing/error.c | 252 + contrib/testing/error.h | 77 + contrib/testing/fileinfo.c | 336 + contrib/testing/forwarder.c | 362 + contrib/testing/forwarder.c.old | 142 + contrib/testing/gconv_int.h | 175 + contrib/testing/iconv_prog.c | 569 + contrib/testing/large.c | 309 + contrib/testing/lic.c | 22 + contrib/testing/listuser.c | 340 + contrib/testing/mkattr.c | 258 + contrib/testing/mkclass.c | 275 + contrib/testing/mkfile.c | 243 + contrib/testing/mkobj.c | 259 + contrib/testing/modclass.c | 248 + contrib/testing/modobj.c | 343 + contrib/testing/mvobj.c | 237 + contrib/testing/ncpcode.h | 41 + contrib/testing/nfssetinfo.c | 232 + contrib/testing/nsfileinfo.c | 198 + contrib/testing/nwbcast.c | 135 + contrib/testing/nwdsgethost.c | 483 + contrib/testing/nwdsgetstat.c | 235 + contrib/testing/nwdsgetvi.c | 129 + contrib/testing/nwdslist.c | 323 + contrib/testing/nwdspartjoin.c | 225 + contrib/testing/nwdspartlist.c | 386 + contrib/testing/nwdspartrm.c | 219 + contrib/testing/nwdspartsplit.c | 225 + contrib/testing/nwdsresetstat.c | 223 + contrib/testing/nwdssend | 12 + contrib/testing/nwgettime.c | 257 + contrib/testing/partroot.c | 225 + contrib/testing/physlock.c | 174 + contrib/testing/pp/Makefile.in | 47 + contrib/testing/pp/bcastmd.c | 299 + contrib/testing/pp/compile.bat | 19 + contrib/testing/pp/getconn_addr.c | 175 + contrib/testing/pp/getopt.c | 160 + contrib/testing/pp/getopt.h | 24 + contrib/testing/pp/getsynt.c | 273 + contrib/testing/pp/nwc_next_object.c | 306 + contrib/testing/pp/nwgetconnlist.c | 407 + contrib/testing/pp/nwwhoami.c | 398 + contrib/testing/pp/open_conn_by_name.c | 465 + contrib/testing/pp/readsdef.c | 303 + contrib/testing/pp/readsynt.c | 528 + contrib/testing/pp/return_block_of_tree.c | 306 + contrib/testing/pp/scantree.c | 275 + contrib/testing/pp/scanvolr.c | 345 + contrib/testing/pp/semaphor.c | 303 + contrib/testing/pp/treelist.c | 179 + contrib/testing/pp/vlist.c | 96 + contrib/testing/pp/volres.c | 343 + contrib/testing/readaddr.c | 255 + contrib/testing/readadef.c | 330 + contrib/testing/readattr.c | 566 + contrib/testing/readcc.c | 276 + contrib/testing/readcls.c | 382 + contrib/testing/readsynt.c | 266 + contrib/testing/reloadds.c | 122 + contrib/testing/renobj.c | 237 + contrib/testing/replops.c | 297 + contrib/testing/resint.c | 371 + contrib/testing/resolve.c | 204 + contrib/testing/rmattr.c | 224 + contrib/testing/rmclass.c | 224 + contrib/testing/rmobj.c | 227 + contrib/testing/rsynt.c | 74 + contrib/testing/rsynt.h | 47 + contrib/testing/schsync.c | 229 + contrib/testing/semaphore.c | 146 + contrib/testing/setkeys.c | 227 + contrib/testing/testalias | 24 + contrib/testing/time.c | 32 + contrib/testing/timegv.c | 161 + contrib/testing/timeinfo.c | 314 + contrib/testing/verpwd.c | 249 + contrib/testing/version.h | 4 + contrib/testing/verunix.c | 148 + contrib/testing/vollist.c | 118 + contrib/testing/wcsmbs-tst1.c | 59 + contrib/tests/Makefile.in | 27 + contrib/tests/dsfilter.c | 148 + contrib/tests/putfilte.c | 188 + contrib/tknwmsg/Makefile.in | 79 + contrib/tknwmsg/nwmsg.c | 170 +- contrib/tknwmsg/tknwmsg | 16 +- ids/Makefile | 4 + ids/ncpfs-2.4.4.diff | 168 + ids/ncpfs-nwuid-test.c | 64 + ids/ncpfs-set-users.sh | 6 + include/com_err.h | 40 - include/config.h.in | 330 + include/glibstub.h | 22 - include/ipxlib.h | 98 - include/kernel/fs.h | 11 - include/kernel/if.h | 11 - include/kernel/ipx.h | 15 - include/kernel/ncp.h | 213 - include/kernel/ncp_fs.h | 110 - include/kernel/route.h | 12 - include/kernel/types.h | 40 - include/ncp.h | 122 - include/ncp/eas.h | 148 + include/ncp/ext/socket.h.in | 10 + include/ncp/ext/stdint.h.in | 33 + include/ncp/ipxlib.h | 142 + include/ncp/kernel/fs.h.in | 7 + include/ncp/kernel/if.h.in | 6 + include/ncp/kernel/ipx.h.in | 25 + include/ncp/kernel/ncp.h | 296 + include/ncp/kernel/ncp_fs.h | 199 + include/ncp/kernel/route.h.in | 7 + include/ncp/kernel/types.h.in | 55 + include/ncp/ncp.h | 235 + include/ncp/ncplib.h | 1639 ++ include/ncp/ndslib.h | 101 + include/ncp/nwcalls.h | 653 + include/ncp/nwclient.h | 197 + include/ncp/nwfse.h | 122 + include/ncp/nwnet.h.in | 954 ++ include/ncp/obsolete/o_ncplib.h | 40 + include/{ndslib.h => ncp/obsolete/o_ndslib.h} | 29 +- include/ncplib.h | 823 - include/ncpsign.h | 18 - include/private/asm-alpha/atomic.h | 127 + include/private/asm-generic/atomic.h | 54 + include/private/asm-i386/atomic.h | 202 + include/private/asm-m68k/atomic.h | 62 + include/private/asm-mips/atomic.h | 212 + include/private/asm-mips64/atomic.h | 193 + include/private/asm-none/atomic.h | 16 + include/private/asm-ppc/atomic.h | 143 + include/private/libintl.h | 83 + include/private/libncp-atomic.h | 6 + include/private/libncp-atomic.h.in | 6 + include/private/libncp-lock.h | 314 + include/private/list.h | 97 + include/private/ncp-new.h | 39 + include/private/ncp_fs.h | 23 + install-sh | 251 + intl/COPYING.LIB-2.0 | 482 + intl/COPYING.LIB-2.1 | 515 + intl/ChangeLog | 4 + intl/Makefile.in | 337 + intl/VERSION | 1 + intl/bindtextdom.c | 369 + intl/config.charset | 466 + intl/dcgettext.c | 59 + intl/dcigettext.c | 1206 ++ intl/dcngettext.c | 61 + intl/dgettext.c | 59 + intl/dngettext.c | 61 + intl/eval-plural.h | 114 + intl/explodename.c | 192 + intl/finddomain.c | 198 + intl/gettext.c | 64 + intl/gettext.h | 101 + intl/gettextP.h | 242 + intl/gmo.h | 148 + intl/hash-string.h | 59 + intl/intl-compat.c | 131 + intl/l10nflist.c | 453 + intl/libgettext.h | 48 + intl/libgnuintl.h | 296 + intl/loadinfo.h | 156 + intl/loadmsgcat.c | 1316 ++ intl/localcharset.c | 369 + intl/locale.alias | 78 + intl/localealias.c | 419 + intl/localename.c | 772 + intl/ngettext.c | 68 + intl/os2compat.c | 98 + intl/os2compat.h | 46 + intl/osdep.c | 24 + intl/plural-exp.c | 156 + intl/plural-exp.h | 126 + intl/plural.c | 1322 ++ intl/plural.y | 409 + intl/ref-add.sin | 31 + intl/ref-del.sin | 26 + intl/textdomain.c | 142 + ipx-1.0/Makefile | 23 - ipx-1.0/Makefile.in | 64 + ipx-1.0/Samples/Makefile.in | 35 + ipx-1.0/Samples/ipxrcv.c | 11 +- ipx-1.0/Samples/ipxsend.c | 11 +- ipx-1.0/Samples/rip.c | 23 +- ipx-1.0/Samples/samples.h | 6 + ipx-1.0/Samples/sap.c | 26 +- ipx-1.0/ipx_cmd.8 | 45 + ipx-1.0/ipx_cmd.c | 423 + ipx-1.0/ipx_configure.c | 77 +- ipx-1.0/ipx_interface.8 | 7 +- ipx-1.0/ipx_interface.c | 238 +- ipx-1.0/ipx_internal_net.c | 167 +- ipx-1.0/ipx_route.c | 203 +- ipx-1.0/ipxutil.c | 93 + ipx-1.0/ipxutil.h | 19 + ipx-1.0/netlink.h | 89 + ipxdump/Makefile | 35 - ipxdump/Makefile.in | 63 + ipxdump/ipxdump.c | 131 +- ipxdump/ipxparse.c | 224 +- ipxdump/ipxutil.c | 11 +- ipxdump/ipxutil.h | 12 +- lib-shared/Makefile | 28 - lib-static-su/Makefile | 17 - lib-static/Makefile | 17 - lib/Makefile | 25 - lib/Makefile.in | 137 + lib/Makelib | 61 - lib/avl.c | 407 + lib/cfgfile.c | 250 + lib/cfgfile.h | 36 + lib/com_err/ChangeLog | 49 - lib/com_err/Makefile | 27 - lib/com_err/com_err.3 | 96 - lib/com_err/com_err.c | 124 - lib/com_err/com_err.h | 40 - lib/com_err/com_err.texinfo | 554 - lib/com_err/compile_et | 11 - lib/com_err/compile_et.1 | 79 - lib/com_err/error_message.c | 90 - lib/com_err/error_table.h | 37 - lib/com_err/et_c.awk | 185 - lib/com_err/et_h.awk | 157 - lib/com_err/et_name.c | 38 - lib/com_err/init_et.c | 61 - lib/com_err/internal.h | 22 - lib/com_err/mit-sipb-copyright.h | 18 - lib/ds/bindctx.c | 105 + lib/ds/classes.c | 821 + lib/ds/dsgetstat.c | 319 + lib/ds/dslist.c | 329 + lib/ds/dsread.c | 268 + lib/ds/dsstream.c | 103 + lib/ds/effright.c | 88 + lib/ds/filter.c | 482 + lib/ds/iterhandle.c | 210 + lib/ds/partops.c | 867 ++ lib/ds/request.c | 91 + lib/ds/search.c | 536 + lib/ds/setkeys.c | 555 + lib/ds/syntaxes.c | 346 + lib/filemgmt.c | 4384 ++++++ lib/fs/eas.c | 343 + lib/fs/filelock.c | 164 + lib/ipx_sap_types | 3 + lib/iterhandle.h | 72 + lib/libncp.vers | 615 + lib/ltrace/ipxlib.conf | 13 + lib/ltrace/ncplib.conf | 129 + lib/ltrace/nwcalls.conf | 55 + lib/ltrace/nwnet.conf | 68 + lib/mpilib.c | 235 +- lib/mpilib.h | 60 +- lib/ncpcode.h | 41 + lib/ncpext.c | 114 + lib/ncpi.h | 47 + lib/ncplib.c | 5647 ++++--- lib/ncplib_err.et | 57 - lib/ncplib_i.h | 332 + lib/ncpsign.c | 95 +- lib/ncpsign.h | 60 + lib/ndscrypt.c | 10 +- lib/ndscrypt.h | 6 - lib/ndslib.c | 2633 ++-- lib/ndslib_i.h | 54 + lib/nwcalls.c | 1889 +++ lib/nwclient.c | 1839 +++ lib/nwcrypt.c | 3 - lib/nwnet.c | 6640 +++++++++ lib/nwnet_i.h | 582 + lib/nwtime.c | 108 + lib/o_ndslib.c | 272 + lib/platform.h | 34 +- lib/queue.c | 303 + lib/rdn.c | 687 + lib/resolve.c | 899 ++ lib/stats.c | 159 + lib/strops.c | 490 + lib/tmsn001.txt | 246 + lib/usuals.h | 2 +- lib/wcs.c | 182 + man/Makefile | 22 - man/Makefile.in | 60 + man/NWCallsInit.3ncp | 22 + man/NWClearConnectionNumber.3ncp | 38 + man/NWGetConnListFromObject.3ncp | 63 + man/NWGetObjectConnectionNumbers.3ncp | 65 + man/ncopy.1 | 117 +- man/ncpmount.8 | 326 +- man/nprint.1 | 185 +- man/nsend.1 | 133 +- man/nwauth.1 | 45 +- man/nwbpadd.8 | 4 +- man/nwbpvalues.1 | 9 +- man/nwclient.5 | 11 +- man/nwdir.1 | 67 + man/nwerrors.3ncp | 338 + man/nwfsctrl.8 | 160 + man/nwfsinfo.1 | 25 +- man/nwgrant.8 | 51 +- man/nwrevoke.8 | 75 +- man/nwtrustee.1 | 10 +- man/nwuserlist.1 | 79 +- man/pqrm.1 | 35 +- man/slist.1 | 4 + mkinstalldirs | 40 + myconf | 2 + ncpfs-2.2.0.lsm | 19 - ncpfs.lsm | 18 + patches/README | 14 - patches/lockup-2.0.30.diff | 12 - po/LINGUAS | 1 + po/Makefile.in.in | 317 + po/Makevars | 25 + po/POTFILES.in | 60 + po/cat-id-tbl.c | 1264 ++ po/cs.gmo | Bin 0 -> 88396 bytes po/cs.po | 4875 ++++++ po/de.gmo | Bin 0 -> 86150 bytes po/de.po | 4897 ++++++ po/ncpfs.pot | 4278 ++++++ po/remove-potcdate.sed | 11 + po/remove-potcdate.sin | 19 + po/stamp-cat-id | 1 + sutil/Makefile | 50 - sutil/Makefile.in | 106 + sutil/mount_login.c | 276 + sutil/mount_login.h | 9 + sutil/ncplogin.c | 1033 ++ sutil/ncpm_common.c | 1786 +++ sutil/ncpm_common.h | 121 + sutil/ncpmount.c | 1524 +- sutil/ncpmount.h | 38 +- sutil/ncpumount.c | 611 +- sutil/nwsfind.c | 117 +- util/Makefile | 72 - util/Makefile.in | 114 + util/dsqueue.c | 89 + util/dsqueue.h | 34 + util/ipx_probe.c | 119 +- util/ncopy.c | 1415 +- util/ncptest.c | 247 +- util/nprint.c | 229 +- util/nsend.c | 351 +- util/nwauth.c | 157 +- util/nwbocreate.c | 67 +- util/nwbols.c | 135 +- util/nwboprops.c | 52 +- util/nwborm.c | 56 +- util/nwbpadd.c | 108 +- util/nwbpcreate.c | 77 +- util/nwbprm.c | 61 +- util/nwbpset.c | 96 +- util/nwbpvalues.c | 256 +- util/nwdir.c | 1009 ++ util/nwdpvalues.c | 222 + util/nwfsctrl.c | 504 + util/nwfsinfo.c | 202 +- util/nwfstime.c | 105 +- util/nwgrant.c | 189 +- util/nwmsg.c | 139 +- util/nwpasswd.c | 100 +- util/nwpurge.c | 105 +- util/nwrevoke.c | 166 +- util/nwrights.c | 100 +- util/nwtrustee.c | 64 +- util/nwtrustee2.c | 207 + util/nwuserlist.c | 441 +- util/nwvolinfo.c | 97 +- util/pqlist.c | 255 +- util/pqrm.c | 94 +- util/pqstat.c | 129 +- util/pserver.c | 475 +- util/slist.c | 50 +- 547 files changed, 176953 insertions(+), 12604 deletions(-) create mode 100644 .downloads/ncpfs-2.2.1.tar.gz create mode 100644 ABOUT-NLS create mode 100644 Changes.old create mode 100644 ConfigFile create mode 100644 INSTALL create mode 100644 Make.rules.in delete mode 100644 Makefile create mode 100644 Makefile.in delete mode 100644 Makeinit create mode 100644 Performance.txt create mode 100644 acinclude.m4 create mode 100644 aclocal.m4 create mode 100755 conf create mode 100755 config.guess create mode 100755 config.rpath create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.ac create mode 100644 contrib/libtrace/Makefile create mode 100644 contrib/libtrace/README create mode 100755 contrib/libtrace/demo.pl create mode 100644 contrib/libtrace/demo.trc create mode 100644 contrib/libtrace/tracencp.c create mode 100644 contrib/nss64/Makefile create mode 100644 contrib/nss64/ncphook.c create mode 100644 contrib/nss64/ncphook.def create mode 100644 contrib/nss64/ncphook.h create mode 100644 contrib/nss64/prelude.c create mode 100644 contrib/pam-snapin/INSTALL create mode 100644 contrib/pam-snapin/dummyDS8/README create mode 100644 contrib/pam-snapin/dummyDS8/pamncp.dll create mode 100644 contrib/pam-snapin/pamncp.c create mode 100644 contrib/pam-snapin/pamncp.def create mode 100644 contrib/pam-snapin/pamncp.dsw create mode 100644 contrib/pam-snapin/pamncp.h create mode 100644 contrib/pam-snapin/pamncp.ide create mode 100644 contrib/pam-snapin/pamncp.lib create mode 100644 contrib/pam-snapin/pamncp.mak create mode 100644 contrib/pam-snapin/pamncp.obj create mode 100644 contrib/pam-snapin/pamncp.obr create mode 100644 contrib/pam-snapin/pamncp.rc create mode 100644 contrib/pam-snapin/pamncp.res create mode 100644 contrib/pam-snapin/pamncp.rws create mode 100644 contrib/pam-snapin/realDS8/README create mode 100644 contrib/pam-snapin/realDS8/pamncp.dll create mode 100644 contrib/pam/COPYING create mode 100644 contrib/pam/Makefile.in create mode 100644 contrib/pam/Makefile.pam create mode 100644 contrib/pam/README create mode 100755 contrib/pam/install-to-PAM create mode 100644 contrib/pam/pam_ncp_auth.c create mode 100644 contrib/pam/support.c create mode 100644 contrib/pam/support.h create mode 100644 contrib/php/Makefile.in.in create mode 100644 contrib/php/acinclude.m4 create mode 100644 contrib/php/aclocal.m4 create mode 100644 contrib/php/build/dynlib.mk create mode 100755 contrib/php/build/fastgen.sh create mode 100644 contrib/php/build/library.mk create mode 100644 contrib/php/build/ltlib.mk create mode 100644 contrib/php/build/mkdep.awk create mode 100644 contrib/php/build/program.mk create mode 100644 contrib/php/build/rules.mk create mode 100644 contrib/php/build/rules_common.mk create mode 100755 contrib/php/build/shtool create mode 100755 contrib/php/config.guess create mode 100644 contrib/php/config.h.in create mode 100644 contrib/php/config.m4 create mode 100755 contrib/php/config.sub create mode 100755 contrib/php/configure create mode 100644 contrib/php/configure.in create mode 100644 contrib/php/dynlib.m4 create mode 100644 contrib/php/install-sh create mode 100755 contrib/php/libtool create mode 100644 contrib/php/ltmain.sh create mode 100644 contrib/php/missing create mode 100644 contrib/php/mkinstalldirs create mode 100644 contrib/php/php_auth_nds.c create mode 100644 contrib/php/site/config.inc.php3 create mode 100644 contrib/php/site/footer.inc.php3 create mode 100644 contrib/php/site/header.inc.php3 create mode 100644 contrib/php/site/images/bkg.gif create mode 100644 contrib/php/site/images/linuxlog.gif create mode 100644 contrib/php/site/images/netware.gif create mode 100644 contrib/php/site/index.phtml create mode 100644 contrib/php/site/lib.inc.php3 create mode 100644 contrib/php/site/linuxinfos.phtml create mode 100644 contrib/php/site/menu.phtml create mode 100644 contrib/php/site/nds.php create mode 100644 contrib/php/site/nocache.txt create mode 100644 contrib/php/site/nwinfos.phtml create mode 100644 contrib/scripts/config.ipx create mode 100644 contrib/scripts/rc.ipxnet.in create mode 100644 contrib/suseinit/LIESMICH create mode 100644 contrib/suseinit/README create mode 100644 contrib/suseinit/etc/rc.config.app create mode 100755 contrib/suseinit/sbin/init.d/ipx create mode 120000 contrib/suseinit/sbin/init.d/rc2.d/K25ipx create mode 120000 contrib/suseinit/sbin/init.d/rc2.d/S25ipx create mode 120000 contrib/suseinit/sbin/init.d/rc3.d/K25ipx create mode 120000 contrib/suseinit/sbin/init.d/rc3.d/S25ipx create mode 100644 contrib/swig/Makefile.PL create mode 100644 contrib/swig/README create mode 100644 contrib/swig/ncpfs.i create mode 100755 contrib/swig/test.pl create mode 100644 contrib/tcl-utils/Makefile.in create mode 100644 contrib/tcl-utils/chgpwd.c create mode 100644 contrib/tcl-utils/ncplist.c create mode 100644 contrib/tcl-utils/ncplisttrees.c create mode 100644 contrib/tcl-utils/ncpreadprop.c create mode 100644 contrib/tcl-utils/ncpreadprops.c create mode 100644 contrib/tcl-utils/ncpvrest.c create mode 100755 contrib/tcl-utils/ncpwho create mode 100644 contrib/tcl-utils/ncpwhoami.c create mode 100755 contrib/tcl-utils/ndsexporter.pl create mode 100644 contrib/tcl-utils/slist2.c create mode 100644 contrib/tcl-utils/vlist.c create mode 100644 contrib/tcl/ABOUT create mode 100644 contrib/tcl/COPYING create mode 100755 contrib/tcl/about.tcl create mode 100755 contrib/tcl/contexts.tcl create mode 100644 contrib/tcl/img/.xvpics/nw.gif create mode 100644 contrib/tcl/img/.xvpics/refresh.gif create mode 100644 contrib/tcl/img/.xvpics/server.gif create mode 100644 contrib/tcl/img/.xvpics/servericon.gif create mode 100644 contrib/tcl/img/.xvpics/umount.gif create mode 100644 contrib/tcl/img/nw.gif create mode 100644 contrib/tcl/img/organiz.gif create mode 100644 contrib/tcl/img/out/nw_org.gif create mode 100644 contrib/tcl/img/out/server.gif create mode 100644 contrib/tcl/img/out/servericon.gif create mode 100644 contrib/tcl/img/refresh.gif create mode 100644 contrib/tcl/img/tree32.gif create mode 100644 contrib/tcl/img/umount.gif create mode 100755 contrib/tcl/license.tcl create mode 100755 contrib/tcl/ncpmount.tcl create mode 100644 contrib/tcl/ndsclient.conf create mode 100755 contrib/tcl/ndshome.tcl create mode 100755 contrib/tcl/ndslogin.tcl create mode 100755 contrib/tcl/ndslogout.tcl create mode 100755 contrib/tcl/ndsmount.tcl create mode 100755 contrib/tcl/ndspasswd.tcl create mode 100755 contrib/tcl/ndsspace.tcl create mode 100755 contrib/tcl/ndsstrings.tcl create mode 100644 contrib/tcl/ndsstrings.tcl.eng create mode 100644 contrib/tcl/ndsstrings.tcl.fr create mode 100755 contrib/tcl/ndsutils.tcl create mode 100755 contrib/tcl/ndswhoami.tcl create mode 100755 contrib/tcl/trees.tcl create mode 100644 contrib/testing/Makefile.in create mode 100644 contrib/testing/abbrev.c create mode 100644 contrib/testing/add.c create mode 100644 contrib/testing/canon.c create mode 100644 contrib/testing/chgpwd.c create mode 100644 contrib/testing/cmpattr.c create mode 100644 contrib/testing/copyauth.c create mode 100644 contrib/testing/dirlimit.c create mode 100644 contrib/testing/dirlist.c create mode 100644 contrib/testing/dirlist2.c create mode 100644 contrib/testing/dssearch.c create mode 100644 contrib/testing/dsstream.c create mode 100755 contrib/testing/dumpslp create mode 100644 contrib/testing/eaops.c create mode 100644 contrib/testing/effright.c create mode 100644 contrib/testing/error.c create mode 100644 contrib/testing/error.h create mode 100644 contrib/testing/fileinfo.c create mode 100644 contrib/testing/forwarder.c create mode 100644 contrib/testing/forwarder.c.old create mode 100644 contrib/testing/gconv_int.h create mode 100644 contrib/testing/iconv_prog.c create mode 100644 contrib/testing/large.c create mode 100644 contrib/testing/lic.c create mode 100644 contrib/testing/listuser.c create mode 100644 contrib/testing/mkattr.c create mode 100644 contrib/testing/mkclass.c create mode 100644 contrib/testing/mkfile.c create mode 100644 contrib/testing/mkobj.c create mode 100644 contrib/testing/modclass.c create mode 100644 contrib/testing/modobj.c create mode 100644 contrib/testing/mvobj.c create mode 100644 contrib/testing/ncpcode.h create mode 100644 contrib/testing/nfssetinfo.c create mode 100644 contrib/testing/nsfileinfo.c create mode 100644 contrib/testing/nwbcast.c create mode 100644 contrib/testing/nwdsgethost.c create mode 100644 contrib/testing/nwdsgetstat.c create mode 100644 contrib/testing/nwdsgetvi.c create mode 100644 contrib/testing/nwdslist.c create mode 100644 contrib/testing/nwdspartjoin.c create mode 100644 contrib/testing/nwdspartlist.c create mode 100644 contrib/testing/nwdspartrm.c create mode 100644 contrib/testing/nwdspartsplit.c create mode 100644 contrib/testing/nwdsresetstat.c create mode 100755 contrib/testing/nwdssend create mode 100644 contrib/testing/nwgettime.c create mode 100644 contrib/testing/partroot.c create mode 100644 contrib/testing/physlock.c create mode 100644 contrib/testing/pp/Makefile.in create mode 100644 contrib/testing/pp/bcastmd.c create mode 100644 contrib/testing/pp/compile.bat create mode 100644 contrib/testing/pp/getconn_addr.c create mode 100644 contrib/testing/pp/getopt.c create mode 100644 contrib/testing/pp/getopt.h create mode 100644 contrib/testing/pp/getsynt.c create mode 100644 contrib/testing/pp/nwc_next_object.c create mode 100644 contrib/testing/pp/nwgetconnlist.c create mode 100644 contrib/testing/pp/nwwhoami.c create mode 100644 contrib/testing/pp/open_conn_by_name.c create mode 100644 contrib/testing/pp/readsdef.c create mode 100644 contrib/testing/pp/readsynt.c create mode 100644 contrib/testing/pp/return_block_of_tree.c create mode 100644 contrib/testing/pp/scantree.c create mode 100644 contrib/testing/pp/scanvolr.c create mode 100644 contrib/testing/pp/semaphor.c create mode 100644 contrib/testing/pp/treelist.c create mode 100644 contrib/testing/pp/vlist.c create mode 100644 contrib/testing/pp/volres.c create mode 100644 contrib/testing/readaddr.c create mode 100644 contrib/testing/readadef.c create mode 100644 contrib/testing/readattr.c create mode 100644 contrib/testing/readcc.c create mode 100644 contrib/testing/readcls.c create mode 100644 contrib/testing/readsynt.c create mode 100644 contrib/testing/reloadds.c create mode 100644 contrib/testing/renobj.c create mode 100644 contrib/testing/replops.c create mode 100644 contrib/testing/resint.c create mode 100644 contrib/testing/resolve.c create mode 100644 contrib/testing/rmattr.c create mode 100644 contrib/testing/rmclass.c create mode 100644 contrib/testing/rmobj.c create mode 100644 contrib/testing/rsynt.c create mode 100644 contrib/testing/rsynt.h create mode 100644 contrib/testing/schsync.c create mode 100644 contrib/testing/semaphore.c create mode 100644 contrib/testing/setkeys.c create mode 100755 contrib/testing/testalias create mode 100644 contrib/testing/time.c create mode 100644 contrib/testing/timegv.c create mode 100644 contrib/testing/timeinfo.c create mode 100644 contrib/testing/verpwd.c create mode 100644 contrib/testing/version.h create mode 100644 contrib/testing/verunix.c create mode 100644 contrib/testing/vollist.c create mode 100644 contrib/testing/wcsmbs-tst1.c create mode 100644 contrib/tests/Makefile.in create mode 100644 contrib/tests/dsfilter.c create mode 100644 contrib/tests/putfilte.c create mode 100644 contrib/tknwmsg/Makefile.in create mode 100644 ids/Makefile create mode 100644 ids/ncpfs-2.4.4.diff create mode 100644 ids/ncpfs-nwuid-test.c create mode 100755 ids/ncpfs-set-users.sh delete mode 100644 include/com_err.h create mode 100644 include/config.h.in delete mode 100644 include/glibstub.h delete mode 100644 include/ipxlib.h delete mode 100644 include/kernel/fs.h delete mode 100644 include/kernel/if.h delete mode 100644 include/kernel/ipx.h delete mode 100644 include/kernel/ncp.h delete mode 100644 include/kernel/ncp_fs.h delete mode 100644 include/kernel/route.h delete mode 100644 include/kernel/types.h delete mode 100644 include/ncp.h create mode 100644 include/ncp/eas.h create mode 100644 include/ncp/ext/socket.h.in create mode 100644 include/ncp/ext/stdint.h.in create mode 100644 include/ncp/ipxlib.h create mode 100644 include/ncp/kernel/fs.h.in create mode 100644 include/ncp/kernel/if.h.in create mode 100644 include/ncp/kernel/ipx.h.in create mode 100644 include/ncp/kernel/ncp.h create mode 100644 include/ncp/kernel/ncp_fs.h create mode 100644 include/ncp/kernel/route.h.in create mode 100644 include/ncp/kernel/types.h.in create mode 100644 include/ncp/ncp.h create mode 100644 include/ncp/ncplib.h create mode 100644 include/ncp/ndslib.h create mode 100644 include/ncp/nwcalls.h create mode 100644 include/ncp/nwclient.h create mode 100644 include/ncp/nwfse.h create mode 100644 include/ncp/nwnet.h.in create mode 100644 include/ncp/obsolete/o_ncplib.h rename include/{ndslib.h => ncp/obsolete/o_ndslib.h} (55%) delete mode 100644 include/ncplib.h delete mode 100644 include/ncpsign.h create mode 100644 include/private/asm-alpha/atomic.h create mode 100644 include/private/asm-generic/atomic.h create mode 100644 include/private/asm-i386/atomic.h create mode 100644 include/private/asm-m68k/atomic.h create mode 100644 include/private/asm-mips/atomic.h create mode 100644 include/private/asm-mips64/atomic.h create mode 100644 include/private/asm-none/atomic.h create mode 100644 include/private/asm-ppc/atomic.h create mode 100644 include/private/libintl.h create mode 100644 include/private/libncp-atomic.h create mode 100644 include/private/libncp-atomic.h.in create mode 100644 include/private/libncp-lock.h create mode 100644 include/private/list.h create mode 100644 include/private/ncp-new.h create mode 100644 include/private/ncp_fs.h create mode 100755 install-sh create mode 100644 intl/COPYING.LIB-2.0 create mode 100644 intl/COPYING.LIB-2.1 create mode 100644 intl/ChangeLog create mode 100644 intl/Makefile.in create mode 100644 intl/VERSION create mode 100644 intl/bindtextdom.c create mode 100755 intl/config.charset create mode 100644 intl/dcgettext.c create mode 100644 intl/dcigettext.c create mode 100644 intl/dcngettext.c create mode 100644 intl/dgettext.c create mode 100644 intl/dngettext.c create mode 100644 intl/eval-plural.h create mode 100644 intl/explodename.c create mode 100644 intl/finddomain.c create mode 100644 intl/gettext.c create mode 100644 intl/gettext.h create mode 100644 intl/gettextP.h create mode 100644 intl/gmo.h create mode 100644 intl/hash-string.h create mode 100644 intl/intl-compat.c create mode 100644 intl/l10nflist.c create mode 100644 intl/libgettext.h create mode 100644 intl/libgnuintl.h create mode 100644 intl/loadinfo.h create mode 100644 intl/loadmsgcat.c create mode 100644 intl/localcharset.c create mode 100644 intl/locale.alias create mode 100644 intl/localealias.c create mode 100644 intl/localename.c create mode 100644 intl/ngettext.c create mode 100644 intl/os2compat.c create mode 100644 intl/os2compat.h create mode 100644 intl/osdep.c create mode 100644 intl/plural-exp.c create mode 100644 intl/plural-exp.h create mode 100644 intl/plural.c create mode 100644 intl/plural.y create mode 100644 intl/ref-add.sin create mode 100644 intl/ref-del.sin create mode 100644 intl/textdomain.c delete mode 100644 ipx-1.0/Makefile create mode 100644 ipx-1.0/Makefile.in create mode 100644 ipx-1.0/Samples/Makefile.in create mode 100644 ipx-1.0/Samples/samples.h create mode 100644 ipx-1.0/ipx_cmd.8 create mode 100644 ipx-1.0/ipx_cmd.c create mode 100644 ipx-1.0/ipxutil.c create mode 100644 ipx-1.0/ipxutil.h create mode 100644 ipx-1.0/netlink.h delete mode 100644 ipxdump/Makefile create mode 100644 ipxdump/Makefile.in delete mode 100644 lib-shared/Makefile delete mode 100644 lib-static-su/Makefile delete mode 100644 lib-static/Makefile delete mode 100644 lib/Makefile create mode 100644 lib/Makefile.in delete mode 100644 lib/Makelib create mode 100644 lib/avl.c create mode 100644 lib/cfgfile.c create mode 100644 lib/cfgfile.h delete mode 100644 lib/com_err/ChangeLog delete mode 100644 lib/com_err/Makefile delete mode 100644 lib/com_err/com_err.3 delete mode 100644 lib/com_err/com_err.c delete mode 100644 lib/com_err/com_err.h delete mode 100644 lib/com_err/com_err.texinfo delete mode 100755 lib/com_err/compile_et delete mode 100644 lib/com_err/compile_et.1 delete mode 100644 lib/com_err/error_message.c delete mode 100644 lib/com_err/error_table.h delete mode 100644 lib/com_err/et_c.awk delete mode 100644 lib/com_err/et_h.awk delete mode 100644 lib/com_err/et_name.c delete mode 100644 lib/com_err/init_et.c delete mode 100644 lib/com_err/internal.h delete mode 100644 lib/com_err/mit-sipb-copyright.h create mode 100644 lib/ds/bindctx.c create mode 100644 lib/ds/classes.c create mode 100644 lib/ds/dsgetstat.c create mode 100644 lib/ds/dslist.c create mode 100644 lib/ds/dsread.c create mode 100644 lib/ds/dsstream.c create mode 100644 lib/ds/effright.c create mode 100644 lib/ds/filter.c create mode 100644 lib/ds/iterhandle.c create mode 100644 lib/ds/partops.c create mode 100644 lib/ds/request.c create mode 100644 lib/ds/search.c create mode 100644 lib/ds/setkeys.c create mode 100644 lib/ds/syntaxes.c create mode 100644 lib/filemgmt.c create mode 100644 lib/fs/eas.c create mode 100644 lib/fs/filelock.c create mode 100644 lib/iterhandle.h create mode 100644 lib/libncp.vers create mode 100644 lib/ltrace/ipxlib.conf create mode 100644 lib/ltrace/ncplib.conf create mode 100644 lib/ltrace/nwcalls.conf create mode 100644 lib/ltrace/nwnet.conf create mode 100644 lib/ncpcode.h create mode 100644 lib/ncpext.c create mode 100644 lib/ncpi.h delete mode 100644 lib/ncplib_err.et create mode 100644 lib/ncplib_i.h create mode 100644 lib/ncpsign.h create mode 100644 lib/ndslib_i.h create mode 100644 lib/nwcalls.c create mode 100644 lib/nwclient.c create mode 100644 lib/nwnet.c create mode 100644 lib/nwnet_i.h create mode 100644 lib/nwtime.c create mode 100644 lib/o_ndslib.c create mode 100644 lib/queue.c create mode 100644 lib/rdn.c create mode 100644 lib/resolve.c create mode 100644 lib/stats.c create mode 100644 lib/strops.c create mode 100644 lib/tmsn001.txt create mode 100644 lib/wcs.c delete mode 100644 man/Makefile create mode 100644 man/Makefile.in create mode 100644 man/NWCallsInit.3ncp create mode 100644 man/NWClearConnectionNumber.3ncp create mode 100644 man/NWGetConnListFromObject.3ncp create mode 100644 man/NWGetObjectConnectionNumbers.3ncp create mode 100644 man/nwdir.1 create mode 100644 man/nwerrors.3ncp create mode 100644 man/nwfsctrl.8 create mode 100755 mkinstalldirs create mode 100755 myconf delete mode 100644 ncpfs-2.2.0.lsm create mode 100644 ncpfs.lsm delete mode 100644 patches/README delete mode 100644 patches/lockup-2.0.30.diff create mode 100644 po/LINGUAS create mode 100644 po/Makefile.in.in create mode 100644 po/Makevars create mode 100644 po/POTFILES.in create mode 100644 po/cat-id-tbl.c create mode 100644 po/cs.gmo create mode 100644 po/cs.po create mode 100644 po/de.gmo create mode 100644 po/de.po create mode 100644 po/ncpfs.pot create mode 100644 po/remove-potcdate.sed create mode 100644 po/remove-potcdate.sin create mode 100644 po/stamp-cat-id delete mode 100644 sutil/Makefile create mode 100644 sutil/Makefile.in create mode 100644 sutil/mount_login.c create mode 100644 sutil/mount_login.h create mode 100644 sutil/ncplogin.c create mode 100644 sutil/ncpm_common.c create mode 100644 sutil/ncpm_common.h delete mode 100644 util/Makefile create mode 100644 util/Makefile.in create mode 100644 util/dsqueue.c create mode 100644 util/dsqueue.h create mode 100644 util/nwdir.c create mode 100644 util/nwdpvalues.c create mode 100644 util/nwfsctrl.c create mode 100644 util/nwtrustee2.c diff --git a/.downloads/ncpfs-2.2.1.tar.gz b/.downloads/ncpfs-2.2.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..6e4583328d099abf4dbb8fa9d38cddcbecddf2aa GIT binary patch literal 1464800 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

qQM9`w#x5G(0d}dx-<5QF{ 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 z⪙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

DM{a@?( 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�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Ⓢ|bxKBZzENZjxX`B(wbIlU%_zUk-A| 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%0ASVETD_9+I{7F!eR3JshWhI8`q*7u`Z;>V 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
mbu)DjAAnmzE)ugIZ>c(TWxV+q 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

F3vZ)VX>emhs%>H>||tLn}IQx)bh-|C@- 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

}E=rW0}RhWvD(w!1tH^B+X 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 @&qP{5halF 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

WhL-}&Xu>>ehm$`oz=tn;Yj5m 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�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�URwM2 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 literal 0 HcmV?d00001 diff --git a/ABOUT-NLS b/ABOUT-NLS new file mode 100644 index 0000000..d528f9c --- /dev/null +++ b/ABOUT-NLS @@ -0,0 +1,435 @@ +Notes on the Free Translation Project +************************************* + + Free software is going international! The Free Translation Project +is a way to get maintainers of free software, translators, and users all +together, so that will gradually become able to speak many languages. +A few packages already provide translations for their messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work at translations should contact the appropriate team. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +Quick configuration advice +========================== + + If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias, message inheritance, automatic +charset conversion or plural form handling) as the implementation here. +It is also not possible to offer this additional functionality on top +of a `catgets' implementation. Future versions of GNU `gettext' will +very likely convey even more functionality. So it might be a good idea +to change to GNU `gettext' as soon as possible. + + So you need _not_ provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +INSTALL Matters +=============== + + Some packages are "localizable" when properly installed; the +programs they contain can be made to speak your own native language. +Most such packages use GNU `gettext'. Other packages have their own +ways to internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU `gettext' functions. If not, the GNU `gettext' own +library will be used. This library is wholly contained within this +package, usually in the `intl/' subdirectory, so prior installation of +the GNU `gettext' package is _not_ required. Installers may use +special options at configuration time for changing the default +behaviour. The commands: + + ./configure --with-included-gettext + ./configure --disable-nls + +will respectively bypass any pre-existing `gettext' to use the +internationalizing routines provided within this package, or else, +_totally_ disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl.a' file and +will decide to use this. This might be not what is desirable. You +should use the more recent version of the GNU `gettext' library. I.e. +if the file `intl/VERSION' shows that the library which comes with this +package is more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + The configuration process will not test for the `catgets' function +and therefore it will not be used. The reason is that even an +emulation of `gettext' on top of `catgets' could not provide all the +extensions of the GNU `gettext' library. + + Internationalized packages have usually many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +Using This Package +================== + + As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, +and `CC' is an ISO 3166 two-letter country code. For example, let's +suppose that you speak German and live in Germany. At the shell +prompt, merely execute `setenv LANG de_DE' (in `csh'), +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). +This can be done from your `.login' or `.profile' file, once and for +all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of `LL_CC', with `LL' denoting the +language and `CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are +used, such as `LL' or `LL_CC.ENCODING'. You can get the list of +locales supported by your system for your country by running the command +`locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' +for the purpose of message handling, but you still need to have `LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather +read translations in German than English for when Swedish is not +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. + + In the `LANGUAGE' environment variable, but not in the `LANG' +environment variable, `LL_CC' combinations can be abbreviated as `LL' +to denote the language's main dialect. For example, `de' is equivalent +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' +(Portuguese as spoken in Portugal) in this context. + +Translating Teams +================= + + For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" +area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +_actively_ in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `translation@iro.umontreal.ca' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skill are praised more than +programming skill, here. + +Available Packages +================== + + Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of August +2002. The matrix shows, in regard of each package, for which languages +PO files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files be bg ca cs da de el en eo es et fi fr + +----------------------------------------+ + a2ps | [] [] [] [] | + ap-utils | | + bash | [] [] [] [] | + bfd | [] [] | + binutils | [] [] | + bison | [] [] [] [] | + clisp | | + clisp | [] [] [] [] | + clisplow | | + cpio | [] [] [] [] | + darkstat | () | + diffutils | [] [] [] [] [] [] | + enscript | [] [] | + error | [] [] [] | + fetchmail | [] () [] [] [] () | + fileutils | [] [] [] [] [] | + findutils | [] [] [] [] [] [] | + flex | [] [] [] [] [] | + gas | [] [] | + gawk | [] [] [] | + gcal | [] [] | + gcc | [] [] | + gettext | [] [] [] [] [] | + gnupg | [] [] [] [] [] [] [] | + gprof | [] [] | + gpsdrive | () () () () () | + grep | [] [] [] [] [] [] [] [] | + gretl | [] | + gthumb | () () () | + hello | [] [] [] [] [] [] [] [] [] | + id-utils | [] [] [] | + indent | [] [] [] [] [] | + jpilot | () [] [] [] | + jwhois | [] [] | + kbd | [] [] [] | + ld | [] [] | + libc | [] [] [] [] [] [] [] [] | + libiconv | [] [] [] [] | + lifelines | () () | + lilypond | [] [] | + lingoteach | [] [] | + lingoteach_lessons| () () | + lynx | [] [] [] [] [] | + m4 | [] [] [] [] [] | + make | [] [] [] [] | + man-db | [] () () [] () () | + mysecretdiary | [] [] [] | + nano | [] () [] [] [] [] | + nano_1_0 | [] () [] [] [] [] | + opcodes | [] [] [] | + parted | [] [] [] [] [] | + ptx | [] [] [] [] [] [] [] | + python | | + recode | [] [] [] [] [] [] | + sed | [] [] [] [] [] [] [] [] [] [] | + sh-utils | [] [] [] [] | + sharutils | [] [] [] [] [] [] [] | + sketch | () [] () | + soundtracker | [] [] [] | + sp | [] | + tar | [] [] [] [] [] [] | + texinfo | [] [] [] [] [] | + textutils | [] [] [] [] [] | + util-linux | [] [] [] [] [] [] | + vorbis-tools | [] | + wastesedge | | + wdiff | [] [] [] [] [] [] | + wget | [] [] [] [] [] [] [] [] [] [] | + +----------------------------------------+ + be bg ca cs da de el en eo es et fi fr + 0 2 19 10 30 44 9 1 12 44 17 6 53 + + gl he hr hu id it ja ko lv nb nl nn + +-------------------------------------+ + a2ps | () () [] | + ap-utils | | + bash | [] | + bfd | [] | + binutils | [] | + bison | [] [] [] [] | + clisp | | + clisp | [] | + clisplow | | + cpio | [] [] [] [] | + darkstat | | + diffutils | [] [] [] [] [] | + enscript | [] [] | + error | [] | + fetchmail | [] | + fileutils | [] [] [] | + findutils | [] [] [] [] [] [] [] [] | + flex | [] | + gas | | + gawk | [] | + gcal | | + gcc | [] | + gettext | [] [] | + gnupg | [] [] [] [] | + gprof | [] | + gpsdrive | [] () () | + grep | [] [] [] [] [] [] [] | + gretl | | + gthumb | () () | + hello | [] [] [] [] [] [] [] [] [] [] [] [] | + id-utils | [] [] | + indent | [] [] [] [] | + jpilot | () () | + jwhois | [] [] | + kbd | | + ld | | + libc | [] [] [] [] | + libiconv | [] [] [] | + lifelines | | + lilypond | [] | + lingoteach | [] | + lingoteach_lessons| | + lynx | [] [] [] [] | + m4 | [] [] [] [] | + make | [] [] [] [] [] [] | + man-db | () () | + mysecretdiary | [] | + nano | [] [] [] [] | + nano_1_0 | [] [] [] [] [] | + opcodes | [] [] | + parted | [] [] [] | + ptx | [] [] [] [] [] | + python | | + recode | [] [] [] | + sed | [] [] [] [] [] [] [] [] | + sh-utils | [] [] [] | + sharutils | [] [] [] | + sketch | () | + soundtracker | [] [] | + sp | | + tar | [] [] [] [] [] [] | + texinfo | [] [] [] | + textutils | [] [] [] [] | + util-linux | () [] | + vorbis-tools | [] | + wastesedge | | + wdiff | [] [] [] | + wget | [] [] [] [] [] [] | + +-------------------------------------+ + gl he hr hu id it ja ko lv nb nl nn + 23 9 12 19 16 13 26 9 1 7 19 3 + + no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW + +----------------------------------------------+ + a2ps | () () () [] [] [] [] [] | 10 + ap-utils | () | 0 + bash | [] | 6 + bfd | [] [] | 5 + binutils | [] [] | 5 + bison | [] [] [] [] | 12 + clisp | | 0 + clisp | | 5 + clisplow | | 0 + cpio | [] [] [] [] | 12 + darkstat | [] [] () () | 2 + diffutils | [] [] [] [] [] [] | 17 + enscript | [] [] [] [] | 8 + error | [] [] [] | 7 + fetchmail | () () [] | 6 + fileutils | [] [] [] [] [] [] | 14 + findutils | [] [] [] [] [] [] [] | 21 + flex | [] [] [] | 9 + gas | [] | 3 + gawk | [] [] | 6 + gcal | [] [] | 4 + gcc | [] | 4 + gettext | [] [] [] [] [] [] | 13 + gnupg | [] [] [] | 14 + gprof | [] [] | 5 + gpsdrive | [] [] | 3 + grep | [] [] [] [] [] | 20 + gretl | | 1 + gthumb | () () [] | 1 + hello | [] [] [] [] [] [] [] | 28 + id-utils | [] [] [] [] | 9 + indent | [] [] [] [] [] | 14 + jpilot | () () [] [] | 5 + jwhois | [] () () [] [] | 7 + kbd | [] [] | 5 + ld | [] [] | 4 + libc | [] [] [] [] [] [] | 18 + libiconv | [] [] [] [] [] | 12 + lifelines | [] | 1 + lilypond | [] | 4 + lingoteach | [] [] | 5 + lingoteach_lessons| () | 0 + lynx | [] [] [] [] | 13 + m4 | [] [] [] [] | 13 + make | [] [] [] [] [] | 15 + man-db | | 3 + mysecretdiary | [] [] [] | 7 + nano | [] [] [] [] | 13 + nano_1_0 | [] [] [] [] | 14 + opcodes | [] [] [] | 8 + parted | [] [] [] [] | 12 + ptx | [] [] [] [] [] [] [] | 19 + python | | 0 + recode | [] [] [] [] [] [] | 15 + sed | [] [] [] [] [] [] | 24 + sh-utils | [] [] | 9 + sharutils | [] [] [] [] | 14 + sketch | [] () [] | 4 + soundtracker | [] | 6 + sp | | 1 + tar | [] [] [] [] [] [] [] | 19 + texinfo | [] [] | 10 + textutils | [] [] [] [] [] | 14 + util-linux | [] [] [] | 10 + vorbis-tools | [] | 3 + wastesedge | | 0 + wdiff | [] [] [] [] [] | 14 + wget | [] [] [] [] [] [] [] [] | 24 + +----------------------------------------------+ + 37 teams no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW + 68 domains 4 15 2 28 28 12 10 49 43 4 1 9 609 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If August 2002 seems to be old, you may fetch a more recent copy of +this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date +matrix with full percentage details can be found at +`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. + +Using `gettext' in new packages +=============================== + + If you are writing a freely available program and want to +internationalize it you are welcome to use GNU `gettext' in your +package. Of course you have to respect the GNU Library General Public +License which covers the use of the GNU `gettext' library. This means +in particular that even non-free programs can use `libintl' as a shared +library, whereas only free software can use `libintl' as a static +library or use modified versions of `libintl'. + + Once the sources are changed appropriately and the setup can handle +to use of `gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +`translation@iro.umontreal.ca' to make the `.pot' files available to +the translation teams. + diff --git a/BUGS b/BUGS index 662fc84..96855fb 100644 --- a/BUGS +++ b/BUGS @@ -3,6 +3,9 @@ them to be bugs. But there are really problems that might be fixed in the future. +If you find some problem unlisted in this file, contact me at +"Petr Vandrovec" . + ------------------------------------------------------------------------------- You might experience lockups of ncpfs volumes. It happens especially @@ -38,12 +41,22 @@ These are a bit annoying, but completely harmless. Known bugs: -- It returns error 255 during bindery login on one site... I do not know why. - If GetNearsetServer returns invalid (nonexistant, downed) server, all utilities gives up. VLM/Client32 in this situation tries randomly choosen server after 30 secs timeout. You have to fix your routers at this time. Sorry. -- NFS namespace does not work on Netware Storage Services volume... Sorry, - it is not my fault and I did not found any workaround (maybe that I have - workaround for NSS from NW5Beta3) +- nwdplist does nothing good. This tool will be finished after nwnet.c... +- manpages names for 3ncp section are too long... Is there a way to + define page header or ... +------------------------------------------------------------------------------- + +Known incompatibilities: + +PROBLEM: ncpfs is not compatible with NSS volumes of beta releases of NW5 +SOLUTION: Upgrade your NW5 to production NW5 version. + +PROBLEM: ncpfs cannot access LinWare server +SOLUTION: LinWare does not support namespace calls used by ncpfs. Because of + LinWare is currently not maintained, you should fix it yourself or + move your server to MarsNWE or Caldera's NetWare for Linux. diff --git a/Changes b/Changes index 8acb1fb..5e33431 100644 --- a/Changes +++ b/Changes @@ -1,329 +1,491 @@ -I only began this file with ncpfs-0.12. If you're interested in older -versions, you can find them on ftp.gwdg.de:/pub/linux/misc/ncpfs/old. +ChangeSet@1.229, 2003-02-08 11:06:50+01:00 + Ignore editor backup files *~ -[Versions ncpfs-2.0.12.x are available at ftp://platan.vc.cvut.cz/pub/linux/ncpfs] +ChangeSet@1.228, 2003-02-08 11:06:15+01:00 + Fix problems in ncpfs-nwuid area. -ncpfs-2.0.12.10 -> ncpfs-2.2.0 -- VANA: minor cleanup +ChangeSet@1.227, 2003-02-08 10:56:50+01:00 + Add proper version to new library symbols. -ncpfs-2.0.12.9 -> ncpfs-2.0.12.10 -- VANA: you can now access NDS server without replica of its conteiner - (TODO: access to server if server has R/W replica of your account but - does not have replica of itself) -- VANA: Alpha still no go :-( +ChangeSet@1.226, 2003-02-08 10:32:45+01:00 + Sanitize ncp_open_2 calling convention... -ncpfs-2.0.12.8 -> ncpfs-2.0.12.9 -- Eloy A. Paris: Fixes in library code +ChangeSet@1.225, 2003-02-08 10:24:39+01:00 + Pass API errors through in ncp_login_conn, instead of always + returning EACCES. + Make password optional for nwfsinfo. -ncpfs-2.0.12.7 -> ncpfs-2.0.12.8 -- VANA: bugfix, now it works again without ipxripd -- VANA: still cleaning up, ncp_open() and NDS byte ordering +ChangeSet@1.224, 2003-02-08 09:52:31+01:00 + Update PHP's autoconf and libtool environment. -ncpfs-2.0.12.6 -> ncpfs-2.0.12.7 -- VANA: bugfixes, nwpurge +ChangeSet@1.223, 2003-02-08 09:28:27+01:00 + Debian's lintian prefers relative symlinks over absolute... -ncpfs-2.0.12.5 -> ncpfs-2.0.12.6 -- VANA: ncpmount supports NCP over IP (no incoming broadcast at this time) +ChangeSet@1.222, 2003-02-08 09:27:27+01:00 + Debian's lintian complains that manpages are not gzip -9 ed... -ncpfs-2.0.12.4 -> ncpfs-2.0.12.5 -- Eloy A. Paris: Makefile bugfix +ChangeSet@1.221, 2003-02-08 09:26:42+01:00 + Add ncp_find_conn_spec3: ncp_find_conn_spec2 with sane calling convention. + Change ncp_find_conn_spec* users to use ncp_find_conn_spec3. + Change calling convention for ncp_fopen_nwc. + Fix ncp_find_conn_spec* error reporting when stdin/stdout are not + terminal. Spotted by Andre Holzhey. -ncpfs-2.0.12.3 -> ncpfs-2.0.12.4 -- VANA: Bugfixes -- VANA: Alpha stage of native NCP over IP support (no kernel at this time) +ChangeSet@1.220, 2003-01-27 09:45:09+01:00 + Add NDS support to nwdir. -ncpfs-2.0.12.2 -> ncpfs-2.0.12.3 -- VANA: Major makefile changes, compile warning cleanup +ChangeSet@1.219, 2003-01-27 09:20:19+01:00 + Add basic NWDSSearch demo to contrib/testing. -ncpfs-2.0.12.1 -> ncpfs-2.0.12.2 -- Eloy A. Paris : Makefile cleanup -- VANA: More merging sutil/ncplib.c and lib/ncplib.c, not fully functional yet +ChangeSet@1.218, 2003-01-27 09:18:46+01:00 + Regenerate autoconf system. -ncpfs-2.0.12 -> ncpfs-2.0.12.1 -- Dave, VANA: Bindery logins for all utilities (-b) -- VANA: Specify signature level for ncpmount (-i number) -- VANA: Start of merging sutil/*lib* with lib/*lib* +ChangeSet@1.217, 2003-01-27 09:15:36+01:00 + Update configure.ac for autoconf2.57. -ncpfs-2.0.11.19 -> ncpfs-2.0.12 -- Polished for release 2.0.12 -- Dave: pserver fixes, including addition of %d flag. +ChangeSet@1.216, 2003-01-27 08:49:01+01:00 + Make PHP module compilable even if ncpfs is not installed. Found by + jukka.huhta@helsinki.fi. -ncpfs-2.0.11.18 -> ncpfs-2.0.11.19 -- Dave, VANA: new userspace utilities - pqstat and pqrm +ChangeSet@1.215, 2003-01-11 21:45:09+01:00 + Fix wcsrev() to do string reverse instead of core dump. -ncpfs-2.0.11.17 -> ncpfs-2.0.11.18 (no userspace change) -- Dave: getwd() did not work on 2.1.x -- VANA: Volumes are now always listed lowercased on 2.1.x +ChangeSet@1.214, 2003-01-11 21:43:53+01:00 + Print correct number of leaked connections. Spotted by Patrick Pollet. -ncpfs-2.0.11.16 -> ncpfs-2.0.11.17 -- David Woodhouse : Patch to pserver, - ncp_get_broadcast_message -- VANA & Dave: Cleanup for glibc, I hope that complete (xcpt. few warnings - about long int vs. u_int32_t) +ChangeSet@1.213, 2003-01-11 21:41:59+01:00 + Simplify DS iteration handle library. + Do not leak connection in NWDSSearch. Found and tracked down by Patrick Pollet. -ncpfs-2.0.11.15 -> ncpfs-2.0.11.16 -- VANA: Removed symlink latest from archive :-) -- VANA: Added ncp_send_broadcast2 +ChangeSet@1.212, 2003-01-11 17:53:37+01:00 + Enable ncp-debug in "sample" configuration. -ncpfs-2.0.11.14 -> ncpfs-2.0.11.15 -- VANA: Fixed bug: wrong completion code returned when login to server without - r/w replica of logged-in user -- VANA: It is possible to disable NFS and/or OS2 namespace support in mount +ChangeSet@1.211, 2003-01-11 17:52:42+01:00 + Add NWGetNLMLoadedList function and use it in nwfsinfo. -ncpfs-2.0.11.13 -> ncpfs-2.0.11.14 -- VANA: One source for 2.0 and 2.1 kernels -- Chirstian Groessler : Added strong mounts +ChangeSet@1.210, 2002-11-25 23:39:53+01:00 + Make pqlist/pqstat/pqrm/nprint really working with NDS queues. It did not + work correctly if queue was on different server than one you specified with + -S option. -ncpfs-2.0.11.12 -> ncpfs-2.0.11.13 -- Arne: Signatures added to ncpfs-nds-0.06 -- VANA: Synchronized sources with Arne +ChangeSet@1.209, 2002-11-25 19:35:42+01:00 + Use "Unknown user" instead of "Unknown server". Pointed out by Radovan Garabik. + Fixes Debian bug #170694. -ncpfs-2.0.11.11 -> ncpfs-2.0.11.12 -- VANA: Fixed compilation error if compiled against kernel without signatures - even if SIGNATURES = 0 set +ChangeSet@1.208, 2002-11-19 22:59:52+01:00 + Add -o pass-fd=X option to ncpmount and ncplogin. It is + simplest way how to pass password to these commands. -ncpfs-2.0.11.10 -> ncpfs-2.0.11.11 -- VANA: Fixed segfault on invalid user name in NDS mode -- VANA: Added locking features (through ncpfs-specific ioctl(2)) +ChangeSet@1.207, 2002-11-19 18:11:39+01:00 + Install nwmsg always as sbin/nwmsg, even if sbin does not exist. -ncpfs-2.0.11.9 -> ncpfs-2.0.11.10 -- VANA: Synchronized with nds-patches-0.05 from Arne de Bruijn +ChangeSet@1.206, 2002-11-18 23:22:05+01:00 + Remove unneeded includes from ncplogin/ncpmount. -ncpfs-2.0.11.8 -> ncpfs-2.0.11.9 -- VANA: Added call to lock connection (dropped in 2.0.11.7, sorry) +ChangeSet@1.205, 2002-11-18 23:15:21+01:00 + More merging of ncplogin and ncpmount. -ncpfs-2.0.11.7 -> ncpfs-2.0.11.8 -- VANA: Can be correctly compiled without signatures support in kernel (I hope) -- VANA: Fix in kernel in setting task number +ChangeSet@1.204, 2002-11-18 22:50:20+01:00 + Move common code from ncplogin.c and ncpmount.c to mount_login.c. + Reindent ncplogin.c. -ncpfs-2.0.11.6 -> ncpfs-2.0.11.7 -- VANA: Codebase synchronized with Arne de Bruijn -- ARNE: Gracelogins on NDS -- VANA: Removed some (one) compilation warnings +ChangeSet@1.203, 2002-11-18 21:15:48+01:00 + 2.5.x kernels have /proc/net/ipx/interface instead of /proc/net/ipx_interface. -ncpfs-2.0.11.5 -> ncpfs-2.0.11.6 -- VANA: Support for NDS login accross servers +ChangeSet@1.202, 2002-10-19 01:28:20+02:00 + pam_ncp_auth: Fix doublefree when using bindery authentication and user's home directory + is found. -ncpfs-2.0.11.4 -> ncpfs-2.0.11.5 -- VANA: Cleanup in ndscrypt -- VANA: Bugfix: empty password for NDS login is now allowed & works +ChangeSet@1.201, 2002-10-19 01:13:39+02:00 + pam_ncp_auth: Reindent. -ncpfs-2.0.11.3 -> ncpfs-2.0.11.4 -- Enabled some buffer cleaning -- Added parameter "-b" to ncpmount for bindery login to NDS server +ChangeSet@1.200, 2002-10-19 00:00:15+02:00 + pam_ncp_auth: Close connection to server immediately after opening session or + changing password. Currently there is no need to keep connection open. + + Originally by Patrick Pollet. -ncpfs-2.0.11.2 -> ncpfs-2.0.11.3 -- Added NDS support by Arne de Bruijn ; small fixes in code; - moved sections to do same things as DOS login does. +ChangeSet@1.199, 2002-10-18 23:42:26+02:00 + pam_ncp_auth: Do not return errors from close session... -ncpfs-2.0.11.1 -> ncpfs-2.0.11.2 -- VANA: Fixed that some error conditions in LOGIN should start packet signatures +ChangeSet@1.198, 2002-10-18 23:16:53+02:00 + pam_ncp_auth: Return correct error code when code detects buffer overflow attack. -ncpfs-2.0.11 -> ncpfs-2.0.11.1 -- VANA: Added packet signatures by Arne de Bruijn - -ncpfs-2.0.10 -> ncpfs-2.0.11 -- Added Martin's patch to Linux 2.0.30 to get rid of the lockups. - MANY thanks to Martin Stover! +ChangeSet@1.197, 2002-10-18 23:07:39+02:00 + pam_ncp_auth: Consume whole option string passed to -z/-Z. -ncpfs-2.0.9 -> ncpfs-2.0.10 -- Made nwtrustee hopefully work ;-) -- Made the manpages a little bit prettier +ChangeSet@1.196, 2002-10-18 22:58:56+02:00 + Fix typo in pam_ncp_auth.c. By Patrick Pollet. -ncpfs-2.0.8 -> ncpfs-2.0.9 -- Added patches directory -- Added nwvolinfo and nwtrustee. Thanks to Jacek Stepniewski -- nwpasswd can change other's passwords. Thanks to Martin Stover. +ChangeSet@1.195, 2002-10-18 22:19:23+02:00 + Emit value separators also between NWDSRead, not only between + values read by NWDSRead in ncpreadprops tcl helper. By Patrick Pollet. -ncpfs-2.0.7 -> ncpfs-2.0.8 -- Fixed util/Makefile for easier optimization handling. Thanks to Rik - Faith for this one -- added nwfstime. You can now set the file server date and time from Linux. -- added the contrib directory. Feel free to add more! +ChangeSet@1.194, 2002-10-06 02:29:50+02:00 + Include missing stdarg.h in ncpm_common.h. + By Roy Bixler. -ncpfs-2.0.6 -> ncpfs-2.0.7 -- Hopefully removed one security problem in ncpumount. -- Added command line flag to pserver.c -- Heavily reconstructed ncpfs utils. Created the lib/ dir. -- Separated the uid utils in sutil -- Add nwsfind to enable users to use ncpfs safely without setting - the utils setuid root. +ChangeSet@1.193, 2002-09-19 22:37:15+02:00 + Oops, use NCP_DIRSTYLE_DIRBASE and not NCP_DIRSTYLE_NOHANDLE in nwpurge tool and + in dirlist2 demo program. -ncpfs-2.0.5 -> ncpfs-2.0.6 -- Added a short description of a problem that I need help with to the - file BUGS. If you know a bit of the linux networking code, please - take a look at it. Thanks a lot. -- Added canonic output format to nwpbvalues and the command nwbpset. I - would like to invite you to help building capable bindery management - utilities. For little examples, look at the manual page of nwbpset. -- Added some values to ipxparse. Those interested in NDS should take a - look at it. It's really not much, but maybe it's a beginning. +ChangeSet@1.192, 2002-09-19 22:36:29+02:00 + NCP search for file set always returns filename, even if we did not asked for one. + Let's always ask for name, so there is no surprise with some other/future server + implementations. -ncpfs-2.0.4 -> ncpfs-2.0.5 -- Removed another bug in nwbpvalues. -- Cleaned up man/Makefile -- Some manpage typos fixed. Thanks to Jim Van Zandt - -- added nwrights +ChangeSet@1.191, 2002-09-15 00:27:15+02:00 + Fix big-endian problems by using nw_info_struct2 instead of nw_info_struct. + + API always returned nw_info_struct in "NCP" (little-endian) byte order, but when structure + was passed to API, it expected volume and directory entry numbers to be in native byte order. + + In addition to the problem above, nobody except nwdir get byte order completely right - some + forgot to byteswap volume number, and some both. -ncpfs-2.0.3 -> ncpfs-2.0.4 -- Changed name of npasswd to nwpasswd, as npasswd collides with - RedHat. Thanks to Mike Slater for pointing me - at this one. -- Put '\r\n' into nwmsg, because sometimes it did not print - correctly. Thanks to Petr Vandrovec Ing. VTEI - for this one. -- Improved the ELF Makefile for ELF support. Thanks to Uwe Bonnes - . -- Removed a very embarassing bug in nwpvalues :-(. -- Added a some routines to nwbpvalues. +ChangeSet@1.190, 2002-09-15 00:18:14+02:00 + Allow for passing "human readable" paths to ncp_ns_* API. -ncpfs-2.0.2 -> ncpfs-2.0.3 -- Removed the kernel-2.0 directory. Linus took the patch into 2.0.8. - So, if you want to use long file name support, upgrade to Linux - kernel version 2.0.8. -- Applied the lfn patch to the kernel-1.2 module with some light - testing. If you experience problems, tell it to me, and use the - ncpfs-2.0.2 kernel module, or upgrade to Linux 2.0.8. -- Added unencrypted login when no crypt key is returned. -- Hopefully improved error messages a bit -- Added some values to ipxparse -- For ELF systems, moved ncplib to /lib/libncp.so.1.x. This saves - about 1MB of disk space. As ncpfs grows, the saving will - increase. Please look at the Makefile to enable this. -- Enhanced nwfsinfo a bit. (Even with a manpage!) -- Added nwuserlist. +ChangeSet@1.189, 2002-09-09 22:01:03+02:00 + More bigendian fixes. From Roy Bixler... -ncpfs-2.0.1 -> ncpfs-2.0.2 -- Added some values to ipxparse. -- Added a patch against 2.0.7 for long file names support. I did not - apply this change to the 1.2-module. Please upgrade to 2.0.7 if you - want to use long file names. -- nwbpvalues can print ITEM properties +ChangeSet@1.188, 2002-09-09 21:48:50+02:00 + Few big-endian fixes. Found by Roy Bixler. -ncpfs-2.0.0 -> ncpfs-2.0.1 -- Added some values to ipxparse. -- Added the little bindery utilities. Maybe someone has the time to - write a shellscript named 'nwadduser' ? -- Fixed a bug that made the __255 message reappear. Many thanks to - Guntram Blom for his detailed bug report. -- Fixed a bug that made ncpfs incompatible with W95's server - capabilities. Thanks to Tomasz Babczynski - for this one. +ChangeSet@1.187, 2002-09-09 21:30:08+02:00 + Upgrade for (patched) SWIG 1.3.14 -ncpfs-0.24 -> ncpfs-2.0.0 -- Changed the numbering scheme :-). -- Added npasswd. Many thanks to Guntram Blom for his work! -- Hopefully improved error messages a bit -- Hopefully made slist a bit more robust +ChangeSet@1.186, 2002-08-31 15:16:44+02:00 + Use aTHX_ instead of aTHX when needed. Discovered by perl 5.8. -ncpfs-0.23 -> ncpfs-0.24 -- Fixed a bug that made it impossible to umount a filesystem after you - tried 'mkdir .' or 'mkdir ..'. -- Fixed a bad race condition when opening files. -- Made the default timeout values more robust. +ChangeSet@1.185, 2002-08-31 13:40:29+02:00 + Really add support for NCP_DEBUG=all. -ncpfs-0.22 -> ncpfs-0.23 -- Fixed a memory allocation problem in nwmsg.c. Thanks to - Andrew Ross -- slist hopefully does not ask for a password anymore. -- cleaned up error messages a bit. -- ncpmount now calls modprobe instead of insmod. +ChangeSet@1.184, 2002-08-30 21:48:10+02:00 + Fix few compile warnings introduced in last changeset. -ncpfs-0.21 -> ncpfs-0.22 -- removed a bad race condition in kernel-1.2/src/dir.c. -- handle 0x9999-responses from the ncp server correctly. -- Bindery functions in ncplib.c by Brian G. Reid (breid@tim.com) -- set blocksize to 512 to satisfy 'du -k' +ChangeSet@1.183, 2002-08-30 21:44:23+02:00 + Add code which prints connections not closed on library shutdown. Build ncpfs with + --enable-ncp-debug, and then set environment variable NCP_DEBUG to cleanup. -ncpfs-0.20 -> ncpfs-0.21 -- Included two bugfixes in ncplib.c found by Jeff Buhrt - . -- Included a bugfix in kernel code that could only show for servers - that do not support namespace calls. I should have tried ncpfs - against lwared... Thanks to Neil Turton for - this fix. +ChangeSet@1.182, 2002-08-30 21:29:22+02:00 + There is no install-dev in Makefile generated in contrib/php. -ncpfs-0.19 -> ncpfs-0.20 -- Changed the home site for ncpfs from linux01.gwdg.de:/pub/ncpfs - to ftp.gwdg.de:/pub/linux/misc/ncpfs. linux01 will remain available, - but we would like to reduce the load on that machine. Sites - mirroring linux01 please redirect your mirror software to - ftp.gwdg.de. Thanks. -- Removed a bug in ncplib.c that made slist require a full - login. Thanks to Neil Turton for the hint. -- The first real user contribution: ncopy by Brian G. Reid - (breid@tim.com) and Tom C. Henderson (thenderson@tim.com). Many - thanks to you! If you find bugs in ncopy, tell them, not me ;-) -- Handle expired passwords. Thanks to "Mathew Lim" - for the hint. +ChangeSet@1.181, 2002-08-30 21:19:35+02:00 + Regenerate .gmo files. -ncpfs-0.18 -> ncpfs-0.19 +ChangeSet@1.180, 2002-08-30 21:19:08+02:00 + Fix complaints in german translation: %s do not match in one pair of c-format strings. -- hacked around in ncplib.[ch] quite heavily. -- SAP handling in ipxparse.c. Thanks to Jeff Buhrt -- Changed error handling to use the com_err library. This should - eventually provide better error messages, because it's now much - easier to define nice messages. -- If no server is active, report this correctly -- added nsend +ChangeSet@1.179, 2002-08-30 21:17:52+02:00 + Update Czech translation. -ncpfs-0.17 -> ncpfs-0.18 +ChangeSet@1.178, 2002-08-30 21:17:04+02:00 + Update gettext to 0.11.5 + regenerate autoconf. -- Another attempt at solving the problem that -n is not working. -- Forgot nprint in 0.17 util/Makefile. -- nprint left connections open when it fails -- added options -r and -t to ncpmount to tune ncpfs connections. +ChangeSet@1.177, 2002-08-30 14:42:33+02:00 + Fix builds on hosts without locale.h/libintl.h, when using --disable-nls. -ncpfs-0.16 -> ncpfs-0.17 +ChangeSet@1.176, 2002-08-23 00:12:28+02:00 + Update ncpmount/ncplogin/ncpmap for mount version 5. Main change is that + we now handle Netware messages in IP environment - of course only if you + have appropriate kernel... -- Changed the name of fsinfo to nwfsinfo, to avoid a name clash with - the X windows utility. Thanks to Henning Brockfeld - for this hint. (still - waiting for your scripts.. :-)) -- made nwmsg available. This enables you to receive NetWare user - broadcast messages. Please note that you need at least kernel 1.3.68 - for this feature. -- pserver now prints debugging output via syslog(). -- Included ipxdump, a nice little utility, that has helped some - people. +ChangeSet@1.175, 2002-08-23 00:01:59+02:00 + Add NWCancelWait - NCP 112. -- And now the big one: you can re-export ncpfs-mounted directories - with nfsd! You have to mount single volumes by specifying -V volume - to ncpmount, and call nfsd and mountd with the option --re-export. - See the manual page of ncpmount for more information. Please note - that I will send Linus the required patch on 1. March 1996, so you - will have to use kernel 1.2.13 or wait at least for 1.3.70. +ChangeSet@1.174, 2002-08-22 17:14:53+02:00 + Simplify mount protocol version handling. -ncpfs-0.15 -> ncpfs-0.16 +ChangeSet@1.173, 2002-08-22 16:16:15+02:00 + Add new, text based, mount option format. -- Included ipx-1.0, made available by Greg Page , - Caldera -- Made -n work for password-less accounts. Thanks to Alexander Jolk - . -- Fixed the kerneld support. -- Fixed the NetWare 4.1 problem. Many thanks to - Chatchai JANTARAPRIM and - hitesh.soneji@industry.net for their patience. +ChangeSet@1.172, 2002-08-21 21:55:02+02:00 + Kill now unused variable in nwsfind. -ncpfs-0.14 -> ncpfs-0.15 +ChangeSet@1.171, 2002-08-21 21:48:15+02:00 + Kill libncpsu. Only difference between libncp and libncpsu was ipx_make_reachable. Now + library contains both suid and non-suid versions, and appropriate one is selected at + runtime. + Modify nwsfind to always call suid version, even if nwsfind is not installed suid. -- A bug fixed that made normal mounting impossible. It was too late - yesterday. Sorry -- Manpage for pserver.c +ChangeSet@1.170, 2002-08-21 19:52:15+02:00 + Split reply buffer from request buffer. Since we verify signatures on replies we must be + able to retry requests after we receive reply (with wrong signature), and so we cannot + receive reply into request's buffer. + Create NCP request header in the do_ncp_call, and not in its callers, so callers do not have + to touch sequence numbers, connection numbers, and so on. -ncpfs-0.13 -> ncpfs-0.14 +ChangeSet@1.169, 2002-08-21 19:42:29+02:00 + Change x_recv/x_recvfrom to return err and pass length through additional parameter, + instead of returning length and passing err indirectly. -- Improvements of manual pages by B. Galliart and - Terry Dawson -- fsinfo -- pserver.c. Please see this as ALPHA software. There is no - documentation, and it is not tested enough. But it might be useful for - you. +ChangeSet@1.168, 2002-08-20 23:39:58+02:00 + NCP/UDP signs replies differently than NCP/IPX, it does not sign error code + and connection status. Oops. -ncpfs-0.12 -> ncpfs-0.13 +ChangeSet@1.167, 2002-08-20 21:40:17+02:00 + Verify packet signatures on replies received from server. -- support for automatic loading of ncpfs.o by kerneld. - Thanks to Steven N. Hirsch . -- A subtle problem in the read routines has been removed by Uwe Bonnes - . Thanks a lot. +ChangeSet@1.166, 2002-08-20 19:21:09+02:00 + Kill few warnings here and there: + Add missing prototypes. + Remove < 0 compares on unsigned values. + Explicitly cast int to size_t in comparsions. + +ChangeSet@1.165, 2002-08-20 18:50:13+02:00 + Packet signatures for NCP/TCP. Length in the signed data is in big-endian format, + while NCP/UDP and NCP/IPX use little-endian and I oversight this difference... + +ChangeSet@1.164, 2002-08-19 01:42:44+02:00 + Fix ncp signatures negotiation code. NCP/TCP signatures still do not work. + +ChangeSet@1.163, 2002-08-19 01:40:06+02:00 + Use NCP_OBSOLETE for obsolete APIs. + +ChangeSet@1.162, 2002-08-06 20:15:37+02:00 + Exit from pserver when broken connection is detected. + Helps a lot if you are running pserver with -d from inittab as a respawn task. + +ChangeSet@1.161, 2002-08-06 18:48:44+02:00 + Make sure that we round all keys up to the unitsize boundary. Otherwise modmult endlessly loops. + +ChangeSet@1.160, 2002-07-28 02:16:29+02:00 + Ignore user and nouser mount options. + +ChangeSet@1.159, 2002-07-28 00:54:55+02:00 + Add NWGetUserInfo function. + Extend nwuserlist to print information obtained by NWGetUserInfo. + +ChangeSet@1.158, 2002-07-12 23:48:25+02:00 + Allow setting of file offset in large filesize demo. BTW, abend + when writting to large files is fixed internally at Novell. + +ChangeSet@1.157, 2002-07-06 18:28:31+02:00 + Update czech translation. + Regenerate i18n files. + +ChangeSet@1.156, 2002-07-06 18:26:32+02:00 + Mark "yes" and "no" strings in nwfsinfo eligible for i18n. + +ChangeSet@1.155, 2002-07-06 18:25:05+02:00 + stuil/ncpm_common.c contains i18n strings too. + +ChangeSet@1.154, 2002-07-06 18:05:33+02:00 + Fix coredump in nwmsg when mountpoint is not listed in /etc/mtab. + Clean up nwmsg code. + Refresh tknwmsg. + +ChangeSet@1.153, 2002-07-06 16:33:34+02:00 + Exclusive locking is NCP_PHYSREC_EX... (in physlock.c demo) + +ChangeSet@1.152, 2002-07-06 16:32:11+02:00 + Added demo for NW*Semaphore API. + +ChangeSet@1.151, 2002-07-05 00:30:26+02:00 + Ignore generated contrib/testing/physlock. + +ChangeSet@1.150, 2002-07-05 00:25:44+02:00 + Add physical records locking API. + Add test program for physical records locks. + Tests for locking above 4GB fails on my beta NW6SP2 test server. I believe it is server bug, because of same API suceeds with offsets < 4GB... + +ChangeSet@1.149, 2002-07-03 23:37:44+02:00 + Welcome, 64bit NCPs... Tested with nw6nss1c. Test it only in test environment, + read+get file length works fine, but write abends server when UDP or TCP transport is used. + Only IPX works correctly... + +ChangeSet@1.148, 2002-07-03 01:36:29+02:00 + Update config.guess and config.sub from autotools-dev 20020621.1 + +ChangeSet@1.147, 2002-07-03 01:34:57+02:00 + Add ncp_get_file_server_information_2 API. + Extend nwfsinfo to print NW5+ information. + +ChangeSet@1.146, 2002-06-25 23:19:12+02:00 + pam_ncp_auth: Strip leading dot from generated context when doing contextless login. + +ChangeSet@1.145, 2002-06-25 15:17:22+02:00 + pam_ncp_auth: Fix buffer overflow I created in last changeset. We store string plus comma, so we have to count comma too. + +ChangeSet@1.144, 2002-06-24 01:17:36+02:00 + Bind and SAP resolver are case insensitive. + +ChangeSet@1.143, 2002-06-23 21:36:44+02:00 + Clean all files generated in contrib/php. + +ChangeSet@1.142, 2002-06-23 00:58:05+02:00 + pam_ncp_auth: Fix couple of warnings and make contextless code faster. + +ChangeSet@1.141, 2002-06-23 00:42:21+02:00 + pam_ncp_auth: By Patrick Pollet. + Extended -Z option to allow some zenflags to be turned OFF on that workstation: + with -Z all zenflags are off, but with -ZABCD, only flags ABCD are off. + +ChangeSet@1.140, 2002-06-23 00:23:22+02:00 + pam_ncp_auth: Contextless login and IP support. By Jean-François Burdet. + +ChangeSet@1.139, 2002-06-23 00:18:43+02:00 + Make parameter "value" to NWDSAddFilterToken() constant. + +ChangeSet@1.138, 2002-06-22 23:51:37+02:00 + pam_ncp_auth: By Patrick Pollet + Add create homedir/do not create homedir option. + Add mount Netware in homedir or somewhere else option. + +ChangeSet@1.137, 2002-06-22 23:23:21+02:00 + pam_ncp_auth fixes. By Patrick Pollet. + Fixed possible buffer overflow in mount_nwhome in verbose mode. + Fixed remote access granting table for samba >= 2.07 (pam_tty=samba and + pam_rhost=hostname, was null, null in samba 2.06). + +ChangeSet@1.136, 2002-06-22 23:13:29+02:00 + tcl: Parse /etc/ndsclient.conf in all programs, pass -l to ncpmap when requested. + +ChangeSet@1.135, 2002-06-22 22:55:11+02:00 + Allow ncpmap mountpoint relocation by -l option. By Patrick Pollet. + +ChangeSet@1.134, 2002-06-22 21:24:57+02:00 + Use all supported namespaces when parsing ncpmount/ncpmap -V option. + +ChangeSet@1.133, 2002-06-22 18:51:08+02:00 + Pass username from ndsspace.tcl to ncpvrest explicitly. By Patrick Pollet. + +ChangeSet@1.132, 2002-06-22 18:48:10+02:00 + Bug in reading password expiration date. Fixed context problem. By Patrick Pollet. + +ChangeSet@1.131, 2002-06-22 18:39:57+02:00 + Added ndsexporter.pl into tcl-utils. By Patrick Pollet. + +ChangeSet@1.130, 2002-06-22 18:38:53+02:00 + Fix nwwhoami's -fc/-fD behavior. By Patrick Pollet. + +ChangeSet@1.129, 2002-06-22 18:26:41+02:00 + Emit value separator between multiple values. By Patrick Pollet. + +ChangeSet@1.128, 2002-06-22 03:59:24+02:00 + Fix "make distclean" failure in contrib/php. + +ChangeSet@1.127, 2002-06-21 23:46:07+02:00 + Fix ncpmount -o tcp brokeness. + +ChangeSet@1.126, 2002-06-20 22:34:04+02:00 + Check for php-config correctly + +ChangeSet@1.125, 2002-06-18 19:46:49+02:00 + Fix bug that all commands without -A option worked on + nearest server instead of on one specified by -S. + +ChangeSet@1.124, 2002-06-18 19:44:46+02:00 + tracencp requires -ldl + +ChangeSet@1.123, 2002-06-16 00:25:12+02:00 + Put code common to ncpmount/ncplogin/ncpmap into ncpm_common. + Add ncp_find_server_addr. + +ChangeSet@1.122, 2002-06-05 22:51:51+02:00 + Give descriptive names to _StartNLM arguments. + +ChangeSet@1.121, 2002-05-28 22:00:35+02:00 + Add autodetection to PHP module configuration + +ChangeSet@1.120, 2002-05-28 20:09:04+02:00 + contrib/php/Makefile.in is now autogenerated. + contrib/php/config_vars.mk and contrib/php/libs.mk are autogenerated, I commited them by mistake. + +ChangeSet@1.119, 2002-05-28 19:33:02+02:00 + Fix char*/const char* in ipxdump + +ChangeSet@1.118, 2002-05-28 19:31:56+02:00 + Use NCPFS_PACKAGE instead of PACKAGE + Remove config.h where not needed + Build PHP module through phpize + +ChangeSet@1.117, 2002-05-09 02:42:38+02:00 + Create unified name resolving functions and use them. + +ChangeSet@1.116, 2002-05-09 02:32:06+02:00 + NWScanObject and NWReadPropertyValue added. + +ChangeSet@1.115, 2002-05-09 02:29:03+02:00 + Use poll() instead of select(). + Specify timeout in miliseconds and not in microseconds. + +ChangeSet@1.114, 2002-05-09 02:22:33+02:00 + Ignore all *.o and *.do object files. + +ChangeSet@1.113, 2002-05-09 02:21:13+02:00 + Use u_int64_t instead of long long. + +ChangeSet@1.112, 2002-04-26 18:28:04+02:00 + NDS print queue names can be very long... (from Jean-Francois.Burdet@adm.unige.ch) + +ChangeSet@1.111, 2002-04-26 17:56:18+02:00 + Updated german translation (from Wolfram Pienkoss ) + +ChangeSet@1.110, 2002-04-25 19:22:30+02:00 + Enable logging, we are going multiuser... + +ChangeSet@1.109, 2002-04-21 00:07:02+02:00 + Use gcc to create proper dependencies + +ChangeSet@1.108, 2002-04-20 00:39:21+02:00 + Update PHP module for post sep-2001 API. + +ChangeSet@1.107, 2002-04-19 12:37:10+02:00 + Fix iconv_wchar_t_to_external issues. + Add -A option to the ncpmount and ncplogin help text. + +ChangeSet@1.106, 2002-02-27 19:11:44+01:00 + Erase password from command line. Better process name change code. + +ChangeSet@1.105, 2002-02-27 19:05:36+01:00 + Fix core dump when no username is specified to ncplogin. + +ChangeSet@1.104, 2002-02-27 17:36:20+01:00 + Update configure stuff with 2002-02-25 updates + +ChangeSet@1.103, 2002-02-22 00:01:49+01:00 + Ignore files built by make process + +ChangeSet@1.102, 2002-02-17 03:07:49+01:00 + nwdir.c: + Do not dump core on files without locks, change date/id format. + +ChangeSet@1.101, 2002-02-17 03:04:33+01:00 + Fix volume number handling. + +ChangeSet@1.100, 2002-02-17 02:57:44+01:00 + PAM update - possible buffer overflows. + +ChangeSet@1.99, 2002-02-16 04:16:09+01:00 + Update version numbers. + TAG: ncpfs-2.2.0.19.1 + +ChangeSet@1.98, 2002-02-16 04:11:36+01:00 + PAM and DS stream updates from Patrick Pollet. + +ChangeSet@1.97, 2002-02-16 04:07:55+01:00 + Show LastAccess time on directories, NSS supports that. + +ChangeSet@1.96, 2002-02-16 04:06:48+01:00 + Do not allow attribute names longer than MAX_SCHEMA_NAME_BYTES. + +ChangeSet@1.95, 2002-02-16 04:05:17+01:00 + Inline x_recv. + +ChangeSet@1.94, 2002-02-16 04:04:03+01:00 + Handle connection abort from ncpd gracefully + +ChangeSet@1.93, 2002-02-16 04:02:08+01:00 + Require writeable replica for DS streams + +ChangeSet@1.92, 2002-02-16 04:00:38+01:00 + Clean make error message + +ChangeSet@1.91, 2002-02-16 03:48:15+01:00 + Many files: + Import patch ncpfs-2.2.0.18-to-2.2.0.19 + TAG: ncpfs-2.2.0.19 + +For older entries please see Changes.old diff --git a/Changes.old b/Changes.old new file mode 100644 index 0000000..1c70074 --- /dev/null +++ b/Changes.old @@ -0,0 +1,553 @@ +I only began this file with ncpfs-0.12. If you're interested in older +versions, you can find them on ftp.gwdg.de:/pub/linux/misc/ncpfs/old. + +[Versions ncpfs-2.2.0.x are available at ftp://platan.vc.cvut.cz/pub/linux/ncpfs] + +ncpfs-2.2.0.18 -> ncpfs-2.2.0.19 +- VANA: Added -r, recursive, option to ncopy. +- VANA: Started NCP/TCP implementation. +- VANA: Dereference aliases during authentication. +- VANA: Configuration is read from /etc/ncpfs.conf file. +- VANA: Local codepage is read from /etc/ncpfs.conf file. +- VANA: Added INSTALL document. +- Wolfram Pienkoss : New de.po translations, changed email address. +- Wolfram Pienkoss: SuSE startup/shutdown scripts. +- Karl M. Hegbloom : tags/TAGS make target + added. +- VANA: Added handling of DS names to nwgrant and nwrevoke. +- VANA: Updated nwdir to print sizes of MAC resource forks. +- VANA: Added handling of replicaless servers. +- Bruno Browning : Fixed nprint. +- VANA: Enhandced NCP pam module. +- VANA: PHP NCP authentication module. +- Patrick Pollet: Enterprise PAM module. +- Patrick Pollet: GTK wrappers around some utilities. +- Patrick Pollet: Enhandcements in PHP module. +- Patrick Pollet: Wrappers around some NDS and NCP calls. +- VANA (+swig): Perl interface to most of NCP functions. +- Hans Grobler: Contributed ncp_ns_delete_entry, pointed out problem in NWDSFilter* + API. +- VANA, Patrick, others: See individual changelog entries in each file. + +ncpfs-2.2.0.17 -> ncpfs-2.2.0.18 +- VANA: Do not forget to do "make install-dev" if you want compile 3rd party + programs for ncpfs. +- VANA: Added GPL license and revision history to all files. If you are not + mentioned in some file, contact me. +- RYP: Couple of bugfixes, new options to ncptest. +- VANA: Fixed daemonizing of printserver. +- VANA: Fixed signal handling for temporary connections. +- VANA: Enhandcements to pam module (NDS groups). +- VANA: ncp_get_file_size added. +- VANA: ncopy copies MAC resource forks too. +- Wolfram Pienkoss: New de.po translations. +- VANA: I hope that all names returned from nwnet functions fit into + array of MAX_DN_BYTES bytes (or error is returned). +- VANA: Added NDS print queues support into nprint and pqlist. Needs more + polishing. +- VANA: Support for 32-bit uids in kernels after 2.3.40. +- VANA: NWDSAbortPartitionOperation, NWDSAddObject, NWDSAddReplica, + NWDSAuthenticateConn, NWDSChangeObjectPassword, NWDSChangeReplicaType, + NWDSCloseIteration, NWDSCompare, NWDSDuplicateContextHandle, + NWDSExtSyncList, NWDSExtSyncRead, NWDSExtSyncSearch, + NWDSGenerateObjectKeyPair, NWDSGenerateObjectKeyPair2, + NWDSGetAttrCount, NWDSGetAttrName, NWDSGetAttrVal, NWDSGetAttrValFlags, + NWDSGetAttrValModTime, NWDSGetBinderyContext, + NWDSGetCountByClassAndName, NWDSGetDSIInfo, NWDSGetDSVerInfo, + NWDSGetEffectiveRigths, NWDSGetObjectCount, NWDSGetObjectName, + NWDSGetObjectNameAndInfo, NWDSGetNDSStatistics, + NWDSGetPartitionExtInfo, NWDSGetPartitionExtInfoPtr, + NWDSGetPartitionInfo, NWDSGetPartitionRoot, NWDSGetServerName, + NWDSInitBuf, NWDSJoinPartitions, NWDSList, + NWDSListAttrsEffectiveRights, NWDSListByClassAndName, + NWDSListContainers, NWDSListPartitions, NWDSListPartitionsExtInfo, + NWDSModifyDN, NWDSModifyObject, NWDSModifyRDN, NWDSMoveObject, + NWDSPartitionReceiveAllUpdates, NWDSPartitionSendAllUpdates, + NWDSPutAttrName, NWDSPutAttrNameAndVal, NWDSPutAttrVal, NWDSPutChange, + NWDSPutChangeAndVal, NWDSRead, NWDSReadObjectDSIInfo, + NWDSReadObjectInfo, NWDSReloadDS, NWDSRemoveObject, + NWDSRemovePartition, NWDSRemoveReplica, NWDSRepairTimeStamps, + NWDSResetNDSStatistics, NWDSSearch, NWDSSplitPartition, + NWDSSyncPartition, NWDSVerifyObjectPassword added. + You must enable 'NDS authentication support' in kernel if you + want to fully utilize them. +- VANA: NWGetFileServerUTCTime added. +- Bruce Richardson : ncp_perms_to_str and ncp_str_to_perms + added. Modified nwgrant to use these. +- VANA: Modified nwrights to use ncp_perms_to_str. +- VANA: Changed pam module so that it works with bindery only if you specifically + asks. +- VANA: Added chauttok method to pam module. Use with care. +- VANA: All tools except ncpmount: If server specified by '-S' is not found + through IPX, name is retried as DNS name. + +ncpfs-2.2.0.16 -> ncpfs-2.2.0.17 +- VANA: Add nwtrustee2; it lists also NDS trustees +- RYP: Change in library code for correct using of 'dir_style'. +- RYP: change options on nwtrustee '-o' to '-O' and '-O' to '-o', + to use options like other utils. +- RYP: improved perfomance. +- RYP: fix bug in gettext macros. +- Paul Rensing : Fixed ncpmount signal handling +- VANA: ncpmount now calls /sbin/nwmsg, as did 2.0.x kernel code +- VANA: Fixes in directory scanning code +- Philip R. Wilson : Added DCK_CONFIDENCE flag. +- VANA: Some internal library changes +- VANA: new ncp_ns_* function group +- VANA: better ncopy, nwgrant, nwrevoke; NDS support next time +- VANA: threading support for operations working on single connection; that + is, NWDS* group of function cannot be used in multithreaded environment + yet (unless you'll have separate connections for each thread). +- VANA: versioned symbols +- VANA: pam_ncp_auth enhandced with code & ideas I found in pam_nw_auth 1.0.0 + created by Brian Hammond (multiple server=, + -d=debug, -v=verbose, -q=quiet (you really want -q if you have + multiple server= options, but I left verbose as default for backward + compatibility)) + +ncpfs-2.2.0.15 -> ncpfs-2.2.0.16 +- VANA: NWVerifyObjectPassword, NWDSCanonicalizeName, NWDSAbbreviateName, + NWDSRemoveAllTypes, NWCCOpenConnByAddr added +- VANA: ported to AIX (4.3.2). You have to use GNU make and GNU cc. There are + some warnings due to 64 bit environment, but it works (over UDP). + It caused couple of fixes and enhandcements (--disable-ipx now really + does not use any IPX header, --disable-kernel now really does not use + any linux-specific header) +- VANA: added install-dev, this moves headers to /usr/include/ncp and installs + libncp.a and libncp.so symlink + +ncpfs-2.2.0.14 -> ncpfs-2.2.0.15 +- VANA: (reported by couple of peoples): fixed 'slist' when there are no + connections +- VANA: fixed packet signatures on big-endian machines (stupid kernel bug, + fortunately userspace workaround available, so I do not have to bother + Linus) +- VANA: ipx_cmd added. You must have 'my' ipx in kernel or last, 2.2.8 kernel. + In older kernels ethertap is unusable for IPX (Rx is OK, but Tx does + not work). Do not forget to 'set Reply To Get Nearest Server = on' + on SCMD server... Otherwise you'll get 'No server' error :-( +- VANA: nwdpvalues now does something reasonable (not too much, but does) + +ncpfs-2.2.0.13 -> ncpfs-2.2.0.14 +- Philippe Anderson : nsend to groups, + 'From ....' appended to message +- VANA: when I was editing nsend, I did also: + handles connections > 255 (thus some new nwcalls stuff added) + sends to connection specified by number or object ID + handles wildcards in object name (see manpage) +- VANA: nwauth accepts '-P' password option (per user request) +- VANA: added some *.3ncp pages, installed by 'make install-dev'. I'm not + sure whether I write some formatted documentation in future, probably + only short paragraphs about each function will be enough? I wrote + code, so I do not know, what is unclear and so on... +- VANA: libncp completely localized. If you are using libncp for + programms outside ncpfs package, you must link your code with `-lintl' + from now (make install installs it) if gettext is not in libc. + Sorry. You can build ncpfs package with `--disable-nls', of course. + Shared version of libintl is not available. +- VANA: kernel symlinks stuff splitted to two options: + symlink do symlinks + extras do shared files (world readable) + +ncpfs-2.2.0.12 -> ncpfs-2.2.0.13 +- VANA: moved to 'configure' script +- VANA: completely fixed for glibc2.1; I tested one libc5(linux-2.0.33) and + one glibc2(linux-2.1.125) systems and it looks like that configure + does its job well, but... +- VANA: warning, library interface changed: com_err removed, ncp_request (and + others) now always return error code: + 0..1023 : UNIX errno + 0x8700-0x87FF : ncplib specific error + 0x8800-0x88FF : local errors + 0x8900-0x89FF : server errors + -256..-800 : NDS / UNICODE errors + -1..-255 : if occurs, it is bug, they should be mapped + to range 0x8900-0x89FF + NCP library version number bumped from 2/2.2.0 to 2.3/2.3.0 + because of incompatible changes in function return values +- VANA: added pam_ncp_auth into package (configure --enable-pam) +- VANA: fixed NWParsePath and NWGetNSEntryInfo + +ncpfs-2.2.0.11 -> ncpfs-2.2.0.12 +- VANA: fixed debian bugreport #29006 - exit code for nprint +- VANA: fixed debian bugreport #30293 - man pages update +- VANA: fixed some bugreport about popen("nwsfind") +- VANA: added nwfsctrl tool +- VANA: fixed debian bugreport #33214 - missing NR_OPEN for glibc2.1 + +ncpfs-2.2.0.10 -> ncpfs-2.2.0.11 +- VANA: mount.ncp, new option -o in ncpmount, updated manpage ncpmount(8) +- VANA: manpages moved to /usr/man, compressed; it should fix problems + on standard distributions + +ncpfs-2.2.0.9 -> ncpfs-2.2.0.10 +- Wolfram Pienkoss : NLS support + +ncpfs-2.2.0.8 -> ncpfs-2.2.0.9 +- Eloy A. Paris: reordered ncpmount initialization to suppress unneeded + ask for password + +ncpfs-2.2.0.7 -> ncpfs-2.2.0.8 +- VANA: nwfsctrl - down file server and/or open/close bindery + +ncpfs-2.2.0.6 -> ncpfs-2.2.0.7 +- VANA: Get connection from current directory if -S not specified on commandline. + +ncpfs-2.2.0.5 -> ncpfs-2.2.0.6 +- VANA: Bugfix. Username was limited to 48 chars. It is not true for NDS. + TODO: Review bindery code and limit outgoing usernames to + 48 chars. + +ncpfs-2.2.0.4 -> ncpfs-2.2.0.5 +- VANA: it now compiles on libc5 again (undefined socklen_t in ncplib.h) +- VANA: it works (with patched Makefiles*, added missing linux/* headers and + without kernel support (i.e. only native IP and without ncpmount, + ncpumount, nwdir and nwpurge) on SGI IRIX (IRIX64 sgi 6.2 03131016 + IP25). So I hope that it now works on Linux-SGI and Linux-Sparc too. + Please test and report success/failure... NDS code and NCP signatures + should work, nwpurge and nwdir probably should not... But I cannot test + kernel code because of that machine is not mine and its owner is happy + with IRIX. So I'm sorry. + * happy owner has not GNU Make on that machine... He has, fortunately, + gcc... It is impossible to compile ncpfs with IRIX's CC... + +ncpfs-2.2.0.3 -> ncpfs-2.2.0.4 +- VANA: more Alpha changes (sizeof(size_t) != sizeof(u_int32_t) :-( ) + Many thanks go to David Woodhouse and his Alpha CPU... +- VANA: IPX support can be commented out + +ncpfs-2.2.0.2 -> ncpfs-2.2.0.3 +- VANA: now it works on Alpha +- VANA: changes in DS encryption code (getting rid of error -669) + +ncpfs-2.2.0.1 -> ncpfs-2.2.0.2 +- Milan Vandrovec : nwdir tool + +ncpfs-2.2.0 -> ncpfs-2.2.0.1 +- Dave & VANA: new shared library numbering +- Dave & VANA: workarounds for RedHat's glibc-2.0.7 + +ncpfs-2.0.12.10 -> ncpfs-2.2.0 +- VANA: minor cleanup + +ncpfs-2.0.12.9 -> ncpfs-2.0.12.10 +- VANA: you can now access NDS server without replica of its conteiner + (TODO: access to server if server has R/W replica of your account but + does not have replica of itself) +- VANA: Alpha still no go :-( + +ncpfs-2.0.12.8 -> ncpfs-2.0.12.9 +- Eloy A. Paris: Fixes in library code + +ncpfs-2.0.12.7 -> ncpfs-2.0.12.8 +- VANA: bugfix, now it works again without ipxripd +- VANA: still cleaning up, ncp_open() and NDS byte ordering + +ncpfs-2.0.12.6 -> ncpfs-2.0.12.7 +- VANA: bugfixes, nwpurge + +ncpfs-2.0.12.5 -> ncpfs-2.0.12.6 +- VANA: ncpmount supports NCP over IP (no incoming broadcast at this time) + +ncpfs-2.0.12.4 -> ncpfs-2.0.12.5 +- Eloy A. Paris: Makefile bugfix + +ncpfs-2.0.12.3 -> ncpfs-2.0.12.4 +- VANA: Bugfixes +- VANA: Alpha stage of native NCP over IP support (no kernel at this time) + +ncpfs-2.0.12.2 -> ncpfs-2.0.12.3 +- VANA: Major makefile changes, compile warning cleanup + +ncpfs-2.0.12.1 -> ncpfs-2.0.12.2 +- Eloy A. Paris : Makefile cleanup +- VANA: More merging sutil/ncplib.c and lib/ncplib.c, not fully functional yet + +ncpfs-2.0.12 -> ncpfs-2.0.12.1 +- Dave, VANA: Bindery logins for all utilities (-b) +- VANA: Specify signature level for ncpmount (-i number) +- VANA: Start of merging sutil/*lib* with lib/*lib* + +ncpfs-2.0.11.19 -> ncpfs-2.0.12 +- Polished for release 2.0.12 +- Dave: pserver fixes, including addition of %d flag. + +ncpfs-2.0.11.18 -> ncpfs-2.0.11.19 +- Dave, VANA: new userspace utilities - pqstat and pqrm + +ncpfs-2.0.11.17 -> ncpfs-2.0.11.18 (no userspace change) +- Dave: getwd() did not work on 2.1.x +- VANA: Volumes are now always listed lowercased on 2.1.x + +ncpfs-2.0.11.16 -> ncpfs-2.0.11.17 +- David Woodhouse : Patch to pserver, + ncp_get_broadcast_message +- VANA & Dave: Cleanup for glibc, I hope that complete (xcpt. few warnings + about long int vs. u_int32_t) + +ncpfs-2.0.11.15 -> ncpfs-2.0.11.16 +- VANA: Removed symlink latest from archive :-) +- VANA: Added ncp_send_broadcast2 + +ncpfs-2.0.11.14 -> ncpfs-2.0.11.15 +- VANA: Fixed bug: wrong completion code returned when login to server without + r/w replica of logged-in user +- VANA: It is possible to disable NFS and/or OS2 namespace support in mount + +ncpfs-2.0.11.13 -> ncpfs-2.0.11.14 +- VANA: One source for 2.0 and 2.1 kernels +- Christian Groessler : Added strong mounts + +ncpfs-2.0.11.12 -> ncpfs-2.0.11.13 +- Arne: Signatures added to ncpfs-nds-0.06 +- VANA: Synchronized sources with Arne + +ncpfs-2.0.11.11 -> ncpfs-2.0.11.12 +- VANA: Fixed compilation error if compiled against kernel without signatures + even if SIGNATURES = 0 set + +ncpfs-2.0.11.10 -> ncpfs-2.0.11.11 +- VANA: Fixed segfault on invalid user name in NDS mode +- VANA: Added locking features (through ncpfs-specific ioctl(2)) + +ncpfs-2.0.11.9 -> ncpfs-2.0.11.10 +- VANA: Synchronized with nds-patches-0.05 from Arne de Bruijn + +ncpfs-2.0.11.8 -> ncpfs-2.0.11.9 +- VANA: Added call to lock connection (dropped in 2.0.11.7, sorry) + +ncpfs-2.0.11.7 -> ncpfs-2.0.11.8 +- VANA: Can be correctly compiled without signatures support in kernel (I hope) +- VANA: Fix in kernel in setting task number + +ncpfs-2.0.11.6 -> ncpfs-2.0.11.7 +- VANA: Codebase synchronized with Arne de Bruijn +- ARNE: Gracelogins on NDS +- VANA: Removed some (one) compilation warnings + +ncpfs-2.0.11.5 -> ncpfs-2.0.11.6 +- VANA: Support for NDS login accross servers + +ncpfs-2.0.11.4 -> ncpfs-2.0.11.5 +- VANA: Cleanup in ndscrypt +- VANA: Bugfix: empty password for NDS login is now allowed & works + +ncpfs-2.0.11.3 -> ncpfs-2.0.11.4 +- Enabled some buffer cleaning +- Added parameter "-b" to ncpmount for bindery login to NDS server + +ncpfs-2.0.11.2 -> ncpfs-2.0.11.3 +- Added NDS support by Arne de Bruijn ; small fixes in code; + moved sections to do same things as DOS login does. + +ncpfs-2.0.11.1 -> ncpfs-2.0.11.2 +- VANA: Fixed that some error conditions in LOGIN should start packet signatures + +ncpfs-2.0.11 -> ncpfs-2.0.11.1 +- VANA: Added packet signatures by Arne de Bruijn + +ncpfs-2.0.10 -> ncpfs-2.0.11 +- Added Martin's patch to Linux 2.0.30 to get rid of the lockups. + MANY thanks to Martin Stover! + +ncpfs-2.0.9 -> ncpfs-2.0.10 +- Made nwtrustee hopefully work ;-) +- Made the manpages a little bit prettier + +ncpfs-2.0.8 -> ncpfs-2.0.9 +- Added patches directory +- Added nwvolinfo and nwtrustee. Thanks to Jacek Stepniewski +- nwpasswd can change other's passwords. Thanks to Martin Stover. + +ncpfs-2.0.7 -> ncpfs-2.0.8 +- Fixed util/Makefile for easier optimization handling. Thanks to Rik + Faith for this one +- added nwfstime. You can now set the file server date and time from Linux. +- added the contrib directory. Feel free to add more! + +ncpfs-2.0.6 -> ncpfs-2.0.7 +- Hopefully removed one security problem in ncpumount. +- Added command line flag to pserver.c +- Heavily reconstructed ncpfs utils. Created the lib/ dir. +- Separated the uid utils in sutil +- Add nwsfind to enable users to use ncpfs safely without setting + the utils setuid root. + +ncpfs-2.0.5 -> ncpfs-2.0.6 +- Added a short description of a problem that I need help with to the + file BUGS. If you know a bit of the linux networking code, please + take a look at it. Thanks a lot. +- Added canonic output format to nwpbvalues and the command nwbpset. I + would like to invite you to help building capable bindery management + utilities. For little examples, look at the manual page of nwbpset. +- Added some values to ipxparse. Those interested in NDS should take a + look at it. It's really not much, but maybe it's a beginning. + +ncpfs-2.0.4 -> ncpfs-2.0.5 +- Removed another bug in nwbpvalues. +- Cleaned up man/Makefile +- Some manpage typos fixed. Thanks to Jim Van Zandt + +- added nwrights + +ncpfs-2.0.3 -> ncpfs-2.0.4 +- Changed name of npasswd to nwpasswd, as npasswd collides with + RedHat. Thanks to Mike Slater for pointing me + at this one. +- Put '\r\n' into nwmsg, because sometimes it did not print + correctly. Thanks to Petr Vandrovec Ing. VTEI + for this one. +- Improved the ELF Makefile for ELF support. Thanks to Uwe Bonnes + . +- Removed a very embarassing bug in nwpvalues :-(. +- Added a some routines to nwbpvalues. + +ncpfs-2.0.2 -> ncpfs-2.0.3 +- Removed the kernel-2.0 directory. Linus took the patch into 2.0.8. + So, if you want to use long file name support, upgrade to Linux + kernel version 2.0.8. +- Applied the lfn patch to the kernel-1.2 module with some light + testing. If you experience problems, tell it to me, and use the + ncpfs-2.0.2 kernel module, or upgrade to Linux 2.0.8. +- Added unencrypted login when no crypt key is returned. +- Hopefully improved error messages a bit +- Added some values to ipxparse +- For ELF systems, moved ncplib to /lib/libncp.so.1.x. This saves + about 1MB of disk space. As ncpfs grows, the saving will + increase. Please look at the Makefile to enable this. +- Enhanced nwfsinfo a bit. (Even with a manpage!) +- Added nwuserlist. + +ncpfs-2.0.1 -> ncpfs-2.0.2 +- Added some values to ipxparse. +- Added a patch against 2.0.7 for long file names support. I did not + apply this change to the 1.2-module. Please upgrade to 2.0.7 if you + want to use long file names. +- nwbpvalues can print ITEM properties + +ncpfs-2.0.0 -> ncpfs-2.0.1 +- Added some values to ipxparse. +- Added the little bindery utilities. Maybe someone has the time to + write a shellscript named 'nwadduser' ? +- Fixed a bug that made the __255 message reappear. Many thanks to + Guntram Blom for his detailed bug report. +- Fixed a bug that made ncpfs incompatible with W95's server + capabilities. Thanks to Tomasz Babczynski + for this one. + +ncpfs-0.24 -> ncpfs-2.0.0 +- Changed the numbering scheme :-). +- Added npasswd. Many thanks to Guntram Blom for his work! +- Hopefully improved error messages a bit +- Hopefully made slist a bit more robust + +ncpfs-0.23 -> ncpfs-0.24 +- Fixed a bug that made it impossible to umount a filesystem after you + tried 'mkdir .' or 'mkdir ..'. +- Fixed a bad race condition when opening files. +- Made the default timeout values more robust. + +ncpfs-0.22 -> ncpfs-0.23 +- Fixed a memory allocation problem in nwmsg.c. Thanks to + Andrew Ross +- slist hopefully does not ask for a password anymore. +- cleaned up error messages a bit. +- ncpmount now calls modprobe instead of insmod. + +ncpfs-0.21 -> ncpfs-0.22 +- removed a bad race condition in kernel-1.2/src/dir.c. +- handle 0x9999-responses from the ncp server correctly. +- Bindery functions in ncplib.c by Brian G. Reid (breid@tim.com) +- set blocksize to 512 to satisfy 'du -k' + +ncpfs-0.20 -> ncpfs-0.21 +- Included two bugfixes in ncplib.c found by Jeff Buhrt + . +- Included a bugfix in kernel code that could only show for servers + that do not support namespace calls. I should have tried ncpfs + against lwared... Thanks to Neil Turton for + this fix. + +ncpfs-0.19 -> ncpfs-0.20 +- Changed the home site for ncpfs from linux01.gwdg.de:/pub/ncpfs + to ftp.gwdg.de:/pub/linux/misc/ncpfs. linux01 will remain available, + but we would like to reduce the load on that machine. Sites + mirroring linux01 please redirect your mirror software to + ftp.gwdg.de. Thanks. +- Removed a bug in ncplib.c that made slist require a full + login. Thanks to Neil Turton for the hint. +- The first real user contribution: ncopy by Brian G. Reid + (breid@tim.com) and Tom C. Henderson (thenderson@tim.com). Many + thanks to you! If you find bugs in ncopy, tell them, not me ;-) +- Handle expired passwords. Thanks to "Mathew Lim" + for the hint. + +ncpfs-0.18 -> ncpfs-0.19 + +- hacked around in ncplib.[ch] quite heavily. +- SAP handling in ipxparse.c. Thanks to Jeff Buhrt +- Changed error handling to use the com_err library. This should + eventually provide better error messages, because it's now much + easier to define nice messages. +- If no server is active, report this correctly +- added nsend + +ncpfs-0.17 -> ncpfs-0.18 + +- Another attempt at solving the problem that -n is not working. +- Forgot nprint in 0.17 util/Makefile. +- nprint left connections open when it fails +- added options -r and -t to ncpmount to tune ncpfs connections. + +ncpfs-0.16 -> ncpfs-0.17 + +- Changed the name of fsinfo to nwfsinfo, to avoid a name clash with + the X windows utility. Thanks to Henning Brockfeld + for this hint. (still + waiting for your scripts.. :-)) +- made nwmsg available. This enables you to receive NetWare user + broadcast messages. Please note that you need at least kernel 1.3.68 + for this feature. +- pserver now prints debugging output via syslog(). +- Included ipxdump, a nice little utility, that has helped some + people. + +- And now the big one: you can re-export ncpfs-mounted directories + with nfsd! You have to mount single volumes by specifying -V volume + to ncpmount, and call nfsd and mountd with the option --re-export. + See the manual page of ncpmount for more information. Please note + that I will send Linus the required patch on 1. March 1996, so you + will have to use kernel 1.2.13 or wait at least for 1.3.70. + +ncpfs-0.15 -> ncpfs-0.16 + +- Included ipx-1.0, made available by Greg Page , + Caldera +- Made -n work for password-less accounts. Thanks to Alexander Jolk + . +- Fixed the kerneld support. +- Fixed the NetWare 4.1 problem. Many thanks to + Chatchai JANTARAPRIM and + hitesh.soneji@industry.net for their patience. + +ncpfs-0.14 -> ncpfs-0.15 + +- A bug fixed that made normal mounting impossible. It was too late + yesterday. Sorry +- Manpage for pserver.c + +ncpfs-0.13 -> ncpfs-0.14 + +- Improvements of manual pages by B. Galliart and + Terry Dawson +- fsinfo +- pserver.c. Please see this as ALPHA software. There is no + documentation, and it is not tested enough. But it might be useful for + you. + +ncpfs-0.12 -> ncpfs-0.13 + +- support for automatic loading of ncpfs.o by kerneld. + Thanks to Steven N. Hirsch . +- A subtle problem in the read routines has been removed by Uwe Bonnes + . Thanks a lot. diff --git a/ConfigFile b/ConfigFile new file mode 100644 index 0000000..532bd85 --- /dev/null +++ b/ConfigFile @@ -0,0 +1,67 @@ +Configuration files for ncpfs +============================= + +There are two configuration files for ncpfs, local and global. Local +configuration file lives in ${HOME}/.nwclient, global one lives in +/etc/ncpfs.conf. File is in UTF8 encoding. + +Local configuration file is split into two parts - non-sectioned and sectioned. +Non-sectioned contains old contents of .nwclient file - "server/user password" +triplets (eventually with user or password ommited). + +Sectioned part (and whole /etc/ncpfs.conf file) contains couple of sections. +Each section is started with "[Section Name]" line, lines in section are in +format "Key Name = value". If value contains spaces, you must either prefix +spaces with backslash "\" or enclose value into quotes (') or double quotes +("). If value contains backslash "\", you must prefix it with backslash. If +value in quotes contains quote, you must prefix it with backslash. Code knows +two special values, "\n" for LF and "\r" for CR - although currently there is +no reason for embed them into values. + +Everything after closing bracket on "[Section Name]" line is ignored. +Everything after value on "Key Name = value" line is ignored too. + +Following three examples mean same thing: +Strange Value = Strange\ Value\ "1 +Strange Value = "Strange Value \"1" +Strange Value = 'Strange Value "1' + +Currently known configuration options: + +[Requester] + +Local Charset = + Charset name is in internal system form, for glibc 2.1 + it is codepage name with two trailing slashes ("//"). + On non-iconv systems (such as libc5/libc6.0) you can + use only "WCHAR_T//", "ISO-8859-1//" and "UTF-8//" + charsets. + On glibc2.1 systems, you must add line + "alias WCHAR_T// INTERNAL" at the end of + "/usr/lib/gconv/gconv-modules" file. Without this, + iconv will not work on little-endian machines, such + as ix86. + On glibc2.2 systems you can use any encoding reported + by "iconv -l". + If you'll use encoding which can contain zero bytes + in the middle of string (such as UTF-16, UCS2 or + UCS4), supplied utilities may not work correctly. + Also, output of utilities is based on localization + files and not on selected codepage. + Default: "ISO-8859-1//" + +Default Tree Name = + Tree name is specified without trailing underscores. + Default: no default, system will complain when trying to use + default tree name + +Default Name Context = + Default name context is specified relative to [Root]. + Default: "[Root]" + +[Tree ] + +Default Name Context = + Default name context is specified relative to [Root]. + Default: value specified for Default Name Context in + [Requester] section. diff --git a/FAQ b/FAQ index f08ec41..2fc3faf 100644 --- a/FAQ +++ b/FAQ @@ -37,6 +37,8 @@ packet signatures on the 4.1 server, as ncpfs does not support them. Note: ncpfs, as of 2.0.12, and kernel 2.1.89, does now support packet signatures. +Note2: My test environment currently consist of couple of NW4.11/NW5 servers. +I have no 3.x servers around anymore. ------------------------------------------------------------------------------- @@ -64,3 +66,10 @@ A: You are probably connecting into Netware 4.x or IntraNetware. If you want a temporary workaround, add the option "-b" to the ncpmount commandline. For the future you should determine your Directory Services user name and use that instead of your bindery name. + +------------------------------------------------------------------------------- + +Q: I found bug. What I should do? + +A: Report it to "Petr Vandrovec" . + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..a95f591 --- /dev/null +++ b/INSTALL @@ -0,0 +1,196 @@ +Compiling and installing ncpfs +============================== + + +0. Quick start +-------------- + +Run "./configure", then "make install install-dev" and wait for successfull +completion. You can omit "install-dev" if you do not plan to compile other +libncp based programs, such as apache NDS authorization module. + + + +1. Configuration +---------------- + +Except usual configuration options, you can add some of these options to +configure commandline: + + --enable-warnings Enable very verbose build warnings. Please do not + report these warnings as a bugs. They are all + intentionaly left in sources. Disabled by default. + + --enable-pam Build PAM NCP authentication module. You must have + installed PAM headers in your standard include + directories. By default PAM directory is + automatically determined (in /lib/security, + /usr/lib/security, or /usr/local/lib/security) from + place of already installed modules. You can override + this with adding path after enable-pam. For example: + --enable-pam=/lib/pam/modules + + --disable-ipx-tools Disables building of ipx tools. By default tools are + enabled. Use this only if you are using some else + ipx-tools package or if your system does not support + IPX. + + --disable-udp Disable NCP/UDP and NCP/TCP. By default they are + enabled. Use this only for systems which do not + have IP at all. Otherwise you'll get very crippled + version of ncpfs - with full version you can access + servers anywhere on the Internet if there is no + firewall on port 524... + + --disable-ipx Disable NCP/IPX. By default IPX is enabled. Do not + disable IPX unless your system does not support + IPX at all. + + --disable-signatures Disable packet signing code. By default signatures + are enabled. Do not disable this, connecting without + signatures is very dangerous. + + --disable-nds Disable NDS support. By default NDS is enabled. + Disable it only if you are not sure that you can + use RSA for authorization purposes. Library produced + with this option is very limited in functionality + and 3rd party programs may not work with your + library. + + --disable-mount-v2 Disable support for Linux 2.0. Support is enabled + by default and you should not disable it. + + --disable-mount-v3 Disable support for Linux 2.2 and Linux 2.4. Support + is enabled by default and you should not disable it. + + --disable-kernel Do not use kernel interface. Use this only if there + is no ncpfs for your kernel (such as on AIX or IRIX). + + --disable-reentrant Do not compile threading support into library. By + default it is autodetected - if library compiled + with pthreads can run without them, support is enabled. + Disable this only if you are 100% sure that you'll not + use libncp in any multithreaded application, or if + your system does not support pthreads at all. + + --disable-versions Do not use version symbols in library. By default + enabled if your system supports it. If you'll disable + it, you may have troubles with binary compatibility + when upgrading to newer versions. + + --disable-function-sections Do not use -ffunction-sections and + -fdata-sections for static libraries. Enabled whenever + binutils can do this. If you disable this, all + statically linked programs are larger than they + really need. + + --enable-trace Enable trace of ncp calls. Do not enable it unless + you are debugging ncpfs. Each libncp call then spews + tons of data to stdout/stderr. + + --disable-nls Do not use Native Language Support. See ABOUT-NLS for + details. + + --with-included-gettext Use the GNU gettext library included here. See + ABOUT-NLS for details. + + --with-catgets Use catgets functions if available. See ABOUT-NLS for + details. + + + +2. Compilation +-------------- + +Just type "make" in top of directory structure. You need GNU make and GNU gcc. + + + +3. Installation +--------------- + +As root, type "make install" to install shared library and utilities. If you +plan to compile other programs for ncpfs, also run "make install-dev". This +installs ncpfs headers and static library. + + + +4. Runtime +---------- + +4.1. Configuration +------------------ + +You can configure system behavior with global configuration file, +/etc/ncpfs.conf, and local configuration files, ~/.nwclient. See ConfigFile +for details about contents of these files. + + +4.2. Limitations +---------------- + +4.2.1. Available transports +-------------------------- + +Temporary connections always support all available transports you +compiled. + +Persistent (ncpmount) connection capabilities are constrained by your +kernel. 2.0.x kernels support only NCP over IPX, 2.[123].x kernels support +NCP over IPX or UDP, and 2.4.x kernels support NCP over any of IPX, UDP or +TCP. + + +4.2.2. NDS support +------------------ + +For full NDS support (background authentication) you must enable 'NDS +authentication support' in kernel configuration. This option is available +only in 2.[34].x kernels. In 2.2.x kernels you can make option available +by simple uncommenting this option in linux/fs/ncpfs/Config.in (option is +commented out because of at the time 2.2.0 was released there was no +userspace support). If you have older kernel, you should upgrade if you +need such support. + + +4.2.3. Internationalization support +----------------------------------- + +Currently only available localizations are English, Germany and Czech. + + +4.2.4. Codepages support +------------------------ + +Codepage converting support is limited by underlying iconv implementation. +If no usable iconv is found, built in support for ISO-8859-1 and UTF-8 +is used. +NOTE: glibc2.1 implementation is treated as unusable on little endian +machines, unless you add "alias WCHAR_T// INTERNAL" at the end of +"/usr/lib/gconv/gconv-modules" file. Without this alias wchar_t format +used by wc* function group is unavailable to iconv. Clueless programmers. +glibc2.2 provides WCHAR_T encoding, so you should upgrade if you need codepage +not listed above. + + + +5. Something went wrong +----------------------- + +If things do not work as expected, make sure that you installed ncpfs +correctly. By default, ncp tools are installed into /usr/local, while +distributions put them into /usr. So you can end up with new tool using +old shared library. And it does not work... + +Also, look into BUGS, FAQ, README and README.NDS. If you'll not find +answer here, try asking on linware@sh.cvut.cz list (listserv@sh.cvut.cz). + +If you are sure that problem is in ncpfs implementation, send me bugreport +or patch (unified diff preferred). + + + + +-- +Trhovy Stepanov, March 10th, 2001 +Petr Vandrovec diff --git a/Make.rules.in b/Make.rules.in new file mode 100644 index 0000000..014cb08 --- /dev/null +++ b/Make.rules.in @@ -0,0 +1,60 @@ +# ######################################################## +INSTALL := @INSTALL@ +INSTALL_DATA := @INSTALL_DATA@ +CC := @CC@ + +prefix := @prefix@ +exec_prefix := @exec_prefix@ +bindir := @bindir@ +sbindir := @sbindir@ +libsodir := @libdir@ +#libsodir := /lib +libadir := @libdir@ +mandir := @mandir@ +srcdir := @srcdir@ +includedir := @includedir@ +sysconfdir := @sysconfdir@ +localedir := @localedir@ +VPATH = @srcdir@ + +NDS_SUPPORT := @NDS_SUPPORT@ +SIGNATURES := @SIGNATURES@ + +PACKAGE := @PACKAGE_NAME@ +VERSION := @PACKAGE_VERSION@ + +CC_WARNINGS := @CC_WARNINGS@ + +ifeq ($(CC_WARNINGS),yes) +#CWARN := -Wall -Wstrict-prototypes -Wpointer-arith -Wcast-qual -Waggregate-return -Wnested-externs -Winline -Wbad-function-cast -W #-Werror #-Wwrite-strings -Wtraditional -Wshadow +#CWARN := -Wall -Wstrict-prototypes -Wcast-qual -Waggregate-return -Wnested-externs -Winline -Wbad-function-cast -W #-Wpointer-arith #-Werror #-Wwrite-strings -Wtraditional -Wshadow +CWARN := -Wall -Wundef -Wshadow -Wpointer-arith -Wcast-align -Wwrite-strings -Wmissing-prototypes -Wmissing-noreturn -Wredundant-decls -Wstrict-prototypes -Wcast-qual -Waggregate-return -Wnested-externs -Winline -Wbad-function-cast -W #-Wpointer-arith #-Werror #-Wwrite-strings -Wtraditional -Wshadow +else +CWARN := +endif + +# ######################################################## + +INCLUDES := -I$(top_srcdir)/include -I$(top_srcdir)/intl -I$(top_builddir)/include + +CFLAGS_OPTIONS += @CFLAGS@ +CFLAGS_OPTIONS += $(CWARN) +CFLAGS_DEFINES := -DN_PLAT_LINUX -DLOCALEDIR=\"${localedir}\" -DNCPFS_VERSION=\"${VERSION}\" -DNCPFS_PACKAGE=\"${PACKAGE}\" + +CCFLAGS := $(CFLAGS_DEFINES) $(CFLAGS_OPTIONS) $(INCLUDES) + +# If your system is ELF, either also do a 'make install', or append the util/ +# directory where the dynamic library resides to the environment +# variable LD_LIBRARY_PATH +HAVE_ELF := @ELF_TARGET@ + +VERSION_SOLIB := 2.3.0 +VERSION_SONAME := 2.3 + +NEED_DEP := yes +ifneq ($(MAKECMDGOALS),) +ifeq ($(filter-out clean distclean mrproper, $(MAKECMDGOALS)),) +NEED_DEP := no +endif +endif + diff --git a/Makefile b/Makefile deleted file mode 100644 index 38410a0..0000000 --- a/Makefile +++ /dev/null @@ -1,81 +0,0 @@ -# -# Makefile for the linux ncp-filesystem routines. -# - -# If your system is ELF, either also do a 'make install', or append the util/ -# directory where the dynamic library resides to the environment -# variable LD_LIBRARY_PATH -HAVE_ELF=$(shell file `whereis gcc|cut -d ' ' -f 2`| \ - grep ELF >/dev/null && echo -n yes ) - -TOPDIR = $(shell pwd) -include ./Makeinit - -EXECSUBDIRS = lib-static-su sutil util ipx-1.0 -SUBDIRS := $(EXECSUBDIRS) lib-shared lib-static man -INSTALL_SUBDIRS := util sutil man ipx-1.0 -ifeq ($(HAVE_ELF),yes) -EXECSUBDIRS := lib-shared $(EXECSUBDIRS) -INSTALL_SUBDIRS := lib-shared $(INSTALL_SUBDIRS) -else -EXECSUBDIRS := lib-static $(EXECSUBDIRS) -INSTALL_SUBDIRS := lib-static $(INSTALL_SUBDIRS) -endif - -export INCLUDES VERSION HAVE_ELF CFLAGS - -all: - set -e; for i in $(EXECSUBDIRS); do make -C $$i all; done - @if [ "$(HAVE_ELF)" = yes ] ;\ - then \ - echo ; echo ; echo ;\ - echo Please add \'`pwd`/lib\' to the environment ; \ - echo variable LD_LIBRARY_PATH by executing ; \ - echo ;\ - echo export LD_LIBRARY_PATH=\"\$$LD_LIBRARY_PATH:`pwd`/lib\" ; \ - echo ;\ - echo or do a \'make install\'. ;\ - echo ;\ - fi - -dep: - for i in $(SUBDIRS); do make -C $$i dep; done - -install: - for i in $(INSTALL_SUBDIRS); do make -C $$i install; done - -clean_me: - rm -f `find -name '*.out'` - rm -f `find -name '*~'` - rm -f *.tgz - -clean: clean_me - for i in $(SUBDIRS); do make -C $$i clean; done - -mrproper: clean_me - for i in $(SUBDIRS) ipxdump; do make -C $$i mrproper; done - -modules: ncpfs.o - -SRCPATH=$(shell pwd) -SRCDIR=$(shell basename $(SRCPATH)) -DISTFILE=$(SRCDIR).tgz - -dist: tgz - make dep - make all - -tgz: - indent -kr -i8 `find . -name '*.[ch]'` - make mrproper - (cd ..; \ - tar cvf - $(SRCDIR) | \ - gzip -9 > $(DISTFILE); \ - mv $(DISTFILE) $(SRCDIR)) - -# -# include a dependency file if one exists -# -ifeq (.depend,$(wildcard .depend)) -include .depend -endif diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..b056b91 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,98 @@ +# +# Makefile for the linux ncp-filesystem routines. +# + +top_srcdir = @top_srcdir@ +top_builddir = . + +include ${top_builddir}/Make.rules + +.PHONY : all dep install install-dev clean mrproper distclean +.PHONY : tags TAGS clean_me dist tgz + +BASE_SUBDIRS := lib sutil util man @ADDON_SUBDIRS@ +EXECSUBDIRS = intl @POSUB@ $(BASE_SUBDIRS) +SUBDIRS := $(EXECSUBDIRS) +INSTALL_SUBDIRS := $(SUBDIRS) +INSTALL_DEV_SUBDIRS := lib sutil util man @ADDON_DEV_SUBDIRS@ +CLEAN_SUBDIRS := lib sutil util man intl @POSUB@ ipxdump ipx-1.0 ipx-1.0/Samples contrib/testing \ + contrib/testing/pp contrib/tests contrib/libtrace contrib/nss64 \ + contrib/tcl-utils contrib/php contrib/pam + +export INCLUDES VERSION HAVE_ELF CFLAGS + +all: + set -e; for i in $(EXECSUBDIRS); do make -C $$i all; done + @if [ "$(HAVE_ELF)" = yes ] ;\ + then \ + echo ; echo ; echo ;\ + echo Please add \'`pwd`/lib\' to the environment ; \ + echo variable LD_LIBRARY_PATH by executing ; \ + echo ;\ + echo export LD_LIBRARY_PATH=\"\$$LD_LIBRARY_PATH:`pwd`/lib\" ; \ + echo ;\ + echo or do a \'make install\'. ;\ + echo ;\ + fi + +dep: + for i in $(SUBDIRS); do make -C $$i dep; done + +tags: TAGS +TAGS: + etags --lang=c $$(find include lib sutil util ipx-1.0 ipxdump '*.[ch]') + +install: + for i in $(INSTALL_SUBDIRS); do make -C $$i install; done + +install-dev: + for i in $(INSTALL_DEV_SUBDIRS); do make -C $$i install-dev; done + +clean_me: + rm -f `find -name '*.out'` + rm -f `find -name '*~'` + rm -f *.tgz + +clean: clean_me + for i in $(CLEAN_SUBDIRS); do make -C $$i clean; done + +mrproper: clean_me + for i in $(CLEAN_SUBDIRS); do make -C $$i mrproper; done + +distclean: + for i in $(CLEAN_SUBDIRS); do [ -f $$i/Makefile ] && make -C $$i distclean; done + rm -f contrib/pam/Makefile contrib/tknwmsg/Makefile + rm -f contrib/testing/pp/Makefile contrib/testing/Makefile + rm -f contrib/tcl-utils/Makefile contrib/tests/Makefile + rm -f contrib/php/.deps contrib/php/Makefile.in contrib/php/libs.mk contrib/php/config.nice contrib/php/conftest* + rm -rf contrib/php/modules + rm -f ipx-1.0/Samples/Makefile ipx-1.0/Makefile + rm -f ipxdump/Makefile + rm -f intl/Makefile po/Makefile po/Makefile.in + rm -f lib/Makefile man/Makefile sutil/Makefile util/Makefile + rm -f include/config.h + rm -f include/ncp/ext/socket.h include/ncp/ext/stdint.h + rm -f include/ncp/kernel/fs.h + rm -f include/ncp/kernel/if.h include/ncp/kernel/route.h include/ncp/kernel/types.h + rm -f include/ncp/kernel/ipx.h + rm -f include/ncp/nwnet.h + rm -f config.cache config.log config.status + rm -f Make.rules + rm -f Makefile + +SRCPATH=$(shell pwd) +SRCDIR=$(shell basename $(SRCPATH)) +DISTFILE=$(SRCDIR).tgz + +dist: tgz + make dep + make all + +tgz: + indent -kr -i8 `find . -name '*.[ch]'` + make mrproper + (cd ..; \ + tar cvf - $(SRCDIR) | \ + gzip -9 > $(DISTFILE); \ + mv $(DISTFILE) $(SRCDIR)) + diff --git a/Makeinit b/Makeinit deleted file mode 100644 index 3f80e10..0000000 --- a/Makeinit +++ /dev/null @@ -1,79 +0,0 @@ -VERSION = 2.2.0 - -# If you want to include NDS support for ncpmount uncomment this: -# WARNING! NDS support is very beta, uncomment only if you are testing -# because anything can happen (like crashing the linux box or nw server). -NDS_SUPPORT = 1 - -# If you want to include packet signature support uncomment this: -# WARNING! packet signature support is in beta stage, uncomment only when you -# know what you are doing, anything can happen (like crashing the linux box or -# netware server). -# When enabling, make sure you have applied the kernel patches too, -# otherwise the packet signatures won't work. -SIGNATURES = 1 - -# If you want to eat only one NDS connection. Does not work at this time. -# (waiting for Novell...) -NDS_PRIVATEKEY = 1 - -# If you want native IP support, uncomment CONFIG_NATIVEIP -# Do not forget that it is VERY ALPHA code, with almost no support -# Enable only if you are interested in NCP over IP and you want help -# me. -A ip.address is your friend. At this time you have to silently -# ignore Login to server XXXX as YYYY - think that XXXX is ip.address and -# not one taken from .nwclient. Also, if you have not .nwclient, you have -# to add -S DUMMY on commandline. -CONFIG_NATIVE_IP = 1 - -# Include code for Linux2.0.x -MOUNT2 = 1 -# Include code for Linux2.1.x -MOUNT3 = 1 - -# ######################################################## -BINDIR = /usr/bin -SBINDIR = /sbin -LIBSODIR = /lib -LIBADIR = /usr/lib -MANDIR = /usr/local/man - -CC = gcc - -COPT = -O2 -CWARN = -Wall -# CWARN = -Wall -Wstrict-prototypes -Wpointer-arith -Wcast-qual -Waggregate-return -Wnested-externs -Winline -Wbad-function-cast -W #-Werror #-Wwrite-strings -Wtraditional -Wshadow -# ######################################################## - -ifdef SIGNATURES -CFLAGS_DEFINES += -DSIGNATURES -endif -ifdef NDS_SUPPORT -CFLAGS_DEFINES += -DNDS_SUPPORT -endif -ifdef CONFIG_NATIVE_IP -CFLAGS_DEFINES += -DCONFIG_NATIVE_IP -endif -ifdef MOUNT2 -CFLAGS_DEFINES += -DMOUNT2 -endif -ifdef MOUNT3 -CFLAGS_DEFINES += -DMOUNT3 -endif -CFLAGS_DEFINES += -DNCPFS_VERSION=\"$(VERSION)\" -CFLAGS_OPTIONS += $(COPT) -CFLAGS_OPTIONS += $(CWARN) - -CCFLAGS = $(CFLAGS_DEFINES) $(CFLAGS_OPTIONS) -I../include - -# If your system is ELF, either also do a 'make install', or append the util/ -# directory where the dynamic library resides to the environment -# variable LD_LIBRARY_PATH -HAVE_ELF=$(shell file `whereis gcc|cut -d ' ' -f 2`| \ - grep ELF >/dev/null && echo -n yes ) -#HAVE_ELF=yes - -TOPDIR = $(shell pwd) - -INCLUDES=-I$(TOPDIR)/include - diff --git a/Performance.txt b/Performance.txt new file mode 100644 index 0000000..25b014a --- /dev/null +++ b/Performance.txt @@ -0,0 +1,41 @@ +Author: Roumen Petrov (RYP) 7 jul 1999 + +A. I change old "PACKAL" like style for put data into packet to "C" style. + + +I added only for test purposes this function: + +/* ------------------------------------ */ +test (struct ncp_conn *_conn, + __u8 _dir_handle, const char *_name, + __u32 _object_id, __u16 _rights, __u16 _rights_mask) +{ + long result; + + ncp_init_request_s(_conn, 12); + ncp_add_byte(_conn, 0); /*??? name space */ + ncp_add_byte(_conn, 0); /*??? */ + ncp_add_word_lh(_conn, 0x8000); /*??? search attribs */ + ncp_add_word_lh(_conn, _rights_mask); /* lh or hl ? */ + ncp_add_byte(_conn, 1); /*??? */ + ncp_add_byte(_conn, 0); /*??? */ + ncp_add_byte(_conn, _dir_handle); + ncp_add_dword_lh(_conn, 0x00000000); /* lh or hl ? */ + ncp_add_pstring2(_conn, _name, 299); + ncp_add_dword_hl(_conn, _object_id); + ncp_add_word_lh(_conn, _rights); + +/* result = ncp_request(_conn, 87); */ + ncp_unlock_conn(_conn); + return result; +} + +/* ------------------------------------ */ + +into ../lib/ncplib.c in version 2.2.0. Then in a loop of +1000 * 10000 times I call this function and result is 221 [sec] to +154 [sec] over i486(120 Mhz). +In new version time for fill of packet is only 69.68% of time of old version. + +B. I renamed old function ncp_add_XXX to assert_ncp_add_XXX and +make new ncp_add_XXX without call to assert_conn_locked(....). diff --git a/README b/README index 54d0cbf..127f1d7 100644 --- a/README +++ b/README @@ -15,12 +15,6 @@ probably it's more clever to use nfs between two Linux machines. The user-space utilities such as nprint and the bindery utils should work with all versions of NetWare. -ncpfs does NOT support access to the NDS, so if you want to mount -volumes exported by a NetWare 4.x server, you will have to install the -bindery emulation on that server. If you need access to the NDS, ask -Caldera for their CND. See http://www.caldera.com for more -information. - INSTALLATION @@ -29,20 +23,20 @@ support compiled in. When 'make config' asks you for The IPX protocol (CONFIG_IPX) [N/y/m/?] -simply answer 'y'. Probably you do not need the full internal net that -you are asked for next. +simply answer 'y' or 'm'. Probably you do not need the full internal net +that you are asked for next. -If you are not using 2.0.x kernels, you can comment out MOUNT2=1 line -in the Makeinit. -If you are not using 2.1.x kernels, you can comment out MOUNT3=1 line -in the Makeinit. +Run 'configure', 'make' and, as root, 'make install'. That's all. -If you are not using NDS access, you can comment out NDS_SUPPORT=1 in -the Makeinit. -If you are not using packet signatures, you can comment out SIGNATURES=1 -in the Makeinit. - -After you adapted your Makeinit, type 'make' and, as root, 'make install'. +Before installing new version of ncpfs, you should stop all users of +old version, to release libncp.so from memory. Run as root: + umount -v -a -tncpfs +Command above unmounts all your ncpfs mounted volumes. Of course, +it is not necessary if you agree that disk space occupied by old +libncp.so will be released after reboot and that currently mounted +shares will continue using old libncp.so until unmount. + +See shell script file "contrib/scripts/rc.ipxnet" for other details. HELP @@ -106,7 +100,7 @@ ncpfs. The most enthusiastic user and tester is certainly Uwe Bonnes . So far he's the only one -who has contributed something, namely manpages and corretions to +who has contributed something, namely manpages and corrections to existing manpages. Ales Dyrak has written lwared, which was the initial start for ncpfs. @@ -126,5 +120,5 @@ directory. Have fun with ncpfs! -Volker -lendecke@namu01.gwdg.de +Volker, lendecke@namu01.gwdg.de (original author) +Petr Vandrovec, vandrove@vc.cvut.cz (current maintainer) diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..d5290f6 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,587 @@ +# gettext.m4 serial 17 (gettext-0.11.5) +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2002. + +dnl Macro to add for using GNU gettext. + +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The +dnl default (if it is not specified or empty) is 'no-libtool'. +dnl INTLSYMBOL should be 'external' for packages with no intl directory, +dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl If INTLSYMBOL is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. If NEEDSYMBOL is specified and is +dnl 'need-formatstring-macros', then GNU gettext implementations that don't +dnl support the ISO C 99 formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries. If empty, +dnl the value `$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ + dnl Argument checking. + ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , + [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])])]) + ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) + define(gt_included_intl, ifelse([$1], [external], [no], [yes])) + define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], [])) + + AC_REQUIRE([AM_PO_SUBDIRS])dnl + ifelse(gt_included_intl, yes, [ + AC_REQUIRE([AM_INTL_SUBDIR])dnl + ]) + + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Sometimes libintl requires libiconv, so first search for libiconv. + dnl Ideally we would do this search only after the + dnl if test "$USE_NLS" = "yes"; then + dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then + dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT + dnl the configure script would need to contain the same shell code + dnl again, outside any 'if'. There are two solutions: + dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. + dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. + dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not + dnl documented, we avoid it. + ifelse(gt_included_intl, yes, , [ + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + ]) + + AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE(nls, + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT($USE_NLS) + AC_SUBST(USE_NLS) + + ifelse(gt_included_intl, yes, [ + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + ]) + LIBINTL= + LTLIBINTL= + POSUB= + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + ifelse(gt_included_intl, yes, [ + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH(included-gettext, + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + ]) + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + + dnl Add a version number to the cache macros. + define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1))) + define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) + define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) + + AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, + [AC_TRY_LINK([#include +]ifelse([$2], [need-formatstring-macros], +[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +], [])[extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings;], + [bindtextdomain ("", ""); +return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], + gt_cv_func_gnugettext_libc=yes, + gt_cv_func_gnugettext_libc=no)]) + + if test "$gt_cv_func_gnugettext_libc" != "yes"; then + dnl Sometimes libintl requires libiconv, so first search for libiconv. + ifelse(gt_included_intl, yes, , [ + AM_ICONV_LINK + ]) + dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL + dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) + dnl because that would add "-liconv" to LIBINTL and LTLIBINTL + dnl even if libiconv doesn't exist. + AC_LIB_LINKFLAGS_BODY([intl]) + AC_CACHE_CHECK([for GNU gettext in libintl], + gt_cv_func_gnugettext_libintl, + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + dnl Now see whether libintl exists and does not depend on libiconv. + AC_TRY_LINK([#include +]ifelse([$2], [need-formatstring-macros], +[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +], [])[extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias ();], + [bindtextdomain ("", ""); +return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], + gt_cv_func_gnugettext_libintl=yes, + gt_cv_func_gnugettext_libintl=no) + dnl Now see whether libintl exists and depends on libiconv. + if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +]ifelse([$2], [need-formatstring-macros], +[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +], [])[extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias ();], + [bindtextdomain ("", ""); +return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + gt_cv_func_gnugettext_libintl=yes + ]) + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if test "$gt_cv_func_gnugettext_libc" = "yes" \ + || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ + && test "$PACKAGE" != gettext; }; then + gt_use_preinstalled_gnugettext=yes + else + dnl Reset the values set by searching for libintl. + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + ifelse(gt_included_intl, yes, [ + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on included GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + INTLOBJS="\$(GETTOBJS)" + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV" + LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions to use GNU gettext tools. + CATOBJEXT=.gmo + fi + ]) + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_DEFINE(ENABLE_NLS, 1, + [Define to 1 if translation of program messages to the user's native language + is requested.]) + else + USE_NLS=no + fi + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if test "$gt_cv_func_gnugettext_libintl" = "yes"; then + AC_MSG_CHECKING([how to link with libintl]) + AC_MSG_RESULT([$LIBINTL]) + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) + fi + + dnl For backward compatibility. Some packages may be using this. + AC_DEFINE(HAVE_GETTEXT, 1, + [Define if the GNU gettext() function is already present or preinstalled.]) + AC_DEFINE(HAVE_DCGETTEXT, 1, + [Define if the GNU dcgettext() function is already present or preinstalled.]) + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + + ifelse(gt_included_intl, yes, [ + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl Make all variables we use known to autoconf. + AC_SUBST(BUILD_INCLUDED_LIBINTL) + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATOBJEXT) + AC_SUBST(INTLOBJS) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST(DATADIRNAME) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST(INSTOBJEXT) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST(GENCAT) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix + AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) + ]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLLIBS="$LIBINTL" + AC_SUBST(INTLLIBS) + + dnl Make all documented variables known to autoconf. + AC_SUBST(LIBINTL) + AC_SUBST(LTLIBINTL) + AC_SUBST(POSUB) +]) + + +dnl Checks for all prerequisites of the po subdirectory, +dnl except for USE_NLS. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AM_MKINSTALLDIRS])dnl + + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. + + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + dnl Search for GNU xgettext 0.11 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :) + + dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU msgfmt. + if test "$GMSGFMT" != ":"; then + dnl If it is no GNU msgfmt we define it as : so that the + dnl Makefiles still can work. + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && + (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + : ; + else + GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` + AC_MSG_RESULT( + [found $GMSGFMT program is not GNU msgfmt; ignore it]) + GMSGFMT=":" + fi + fi + + dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is no GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && + (if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + fi + + AC_CONFIG_COMMANDS([[gettext]],[[ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + fi + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + GMOFILES= + UPDATEPOFILES= + DUMMYPOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done]], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it + # from automake. + eval 'ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) +]) + + +dnl Checks for all prerequisites of the intl subdirectory, +dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, +dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. +AC_DEFUN([AM_INTL_SUBDIR], +[ + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AM_MKINSTALLDIRS])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([AC_ISC_POSIX])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_C_CONST])dnl + AC_REQUIRE([AC_C_INLINE])dnl + AC_REQUIRE([AC_TYPE_OFF_T])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + AC_REQUIRE([jm_GLIBC21])dnl + AC_REQUIRE([gt_INTDIV0])dnl + AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl + AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl + AC_REQUIRE([gt_INTTYPES_PRI])dnl + + AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ +stdlib.h string.h unistd.h sys/param.h]) + AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \ +geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \ +strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next]) + + AM_ICONV + AM_LANGINFO_CODESET + if test $ac_cv_header_locale_h = yes; then + AM_LC_MESSAGES + fi + + dnl intl/plural.c is generated from intl/plural.y. It requires bison, + dnl because plural.y uses bison specific features. It requires at least + dnl bison-1.26 because earlier versions generate a plural.c that doesn't + dnl compile. + dnl bison is only needed for the maintainer (who touches plural.y). But in + dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put + dnl the rule in general Makefile. Now, some people carelessly touch the + dnl files or have a broken "make" program, hence the plural.c rule will + dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not + dnl present or too old. + AC_CHECK_PROGS([INTLBISON], [bison]) + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + dnl Found it, now check the version. + AC_MSG_CHECKING([version of bison]) +changequote(<<,>>)dnl + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) +changequote([,])dnl + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + AC_MSG_RESULT([$ac_prog_version]) + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi +]) + + +AC_DEFUN([AM_MKINSTALLDIRS], +[ + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but $(top_srcdir). + dnl Try to locate is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) +]) + + +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..ff6b2e7 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,1930 @@ +# aclocal.m4 generated automatically by aclocal 1.5 + +# Copyright 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# gettext.m4 serial 17 (gettext-0.11.5) +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2002. + +dnl Macro to add for using GNU gettext. + +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The +dnl default (if it is not specified or empty) is 'no-libtool'. +dnl INTLSYMBOL should be 'external' for packages with no intl directory, +dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl If INTLSYMBOL is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. If NEEDSYMBOL is specified and is +dnl 'need-formatstring-macros', then GNU gettext implementations that don't +dnl support the ISO C 99 formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries. If empty, +dnl the value `$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ + dnl Argument checking. + ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , + [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])])]) + ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) + define(gt_included_intl, ifelse([$1], [external], [no], [yes])) + define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], [])) + + AC_REQUIRE([AM_PO_SUBDIRS])dnl + ifelse(gt_included_intl, yes, [ + AC_REQUIRE([AM_INTL_SUBDIR])dnl + ]) + + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Sometimes libintl requires libiconv, so first search for libiconv. + dnl Ideally we would do this search only after the + dnl if test "$USE_NLS" = "yes"; then + dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then + dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT + dnl the configure script would need to contain the same shell code + dnl again, outside any 'if'. There are two solutions: + dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. + dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. + dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not + dnl documented, we avoid it. + ifelse(gt_included_intl, yes, , [ + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + ]) + + AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE(nls, + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT($USE_NLS) + AC_SUBST(USE_NLS) + + ifelse(gt_included_intl, yes, [ + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + ]) + LIBINTL= + LTLIBINTL= + POSUB= + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + ifelse(gt_included_intl, yes, [ + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH(included-gettext, + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + ]) + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + + dnl Add a version number to the cache macros. + define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1))) + define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) + define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) + + AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, + [AC_TRY_LINK([#include +]ifelse([$2], [need-formatstring-macros], +[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +], [])[extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings;], + [bindtextdomain ("", ""); +return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], + gt_cv_func_gnugettext_libc=yes, + gt_cv_func_gnugettext_libc=no)]) + + if test "$gt_cv_func_gnugettext_libc" != "yes"; then + dnl Sometimes libintl requires libiconv, so first search for libiconv. + ifelse(gt_included_intl, yes, , [ + AM_ICONV_LINK + ]) + dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL + dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) + dnl because that would add "-liconv" to LIBINTL and LTLIBINTL + dnl even if libiconv doesn't exist. + AC_LIB_LINKFLAGS_BODY([intl]) + AC_CACHE_CHECK([for GNU gettext in libintl], + gt_cv_func_gnugettext_libintl, + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + dnl Now see whether libintl exists and does not depend on libiconv. + AC_TRY_LINK([#include +]ifelse([$2], [need-formatstring-macros], +[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +], [])[extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias ();], + [bindtextdomain ("", ""); +return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], + gt_cv_func_gnugettext_libintl=yes, + gt_cv_func_gnugettext_libintl=no) + dnl Now see whether libintl exists and depends on libiconv. + if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +]ifelse([$2], [need-formatstring-macros], +[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +], [])[extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias ();], + [bindtextdomain ("", ""); +return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + gt_cv_func_gnugettext_libintl=yes + ]) + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if test "$gt_cv_func_gnugettext_libc" = "yes" \ + || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ + && test "$PACKAGE" != gettext; }; then + gt_use_preinstalled_gnugettext=yes + else + dnl Reset the values set by searching for libintl. + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + ifelse(gt_included_intl, yes, [ + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on included GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + INTLOBJS="\$(GETTOBJS)" + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV" + LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions to use GNU gettext tools. + CATOBJEXT=.gmo + fi + ]) + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_DEFINE(ENABLE_NLS, 1, + [Define to 1 if translation of program messages to the user's native language + is requested.]) + else + USE_NLS=no + fi + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if test "$gt_cv_func_gnugettext_libintl" = "yes"; then + AC_MSG_CHECKING([how to link with libintl]) + AC_MSG_RESULT([$LIBINTL]) + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) + fi + + dnl For backward compatibility. Some packages may be using this. + AC_DEFINE(HAVE_GETTEXT, 1, + [Define if the GNU gettext() function is already present or preinstalled.]) + AC_DEFINE(HAVE_DCGETTEXT, 1, + [Define if the GNU dcgettext() function is already present or preinstalled.]) + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + + ifelse(gt_included_intl, yes, [ + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl Make all variables we use known to autoconf. + AC_SUBST(BUILD_INCLUDED_LIBINTL) + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATOBJEXT) + AC_SUBST(INTLOBJS) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST(DATADIRNAME) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST(INSTOBJEXT) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST(GENCAT) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix + AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) + ]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLLIBS="$LIBINTL" + AC_SUBST(INTLLIBS) + + dnl Make all documented variables known to autoconf. + AC_SUBST(LIBINTL) + AC_SUBST(LTLIBINTL) + AC_SUBST(POSUB) +]) + + +dnl Checks for all prerequisites of the po subdirectory, +dnl except for USE_NLS. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AM_MKINSTALLDIRS])dnl + + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. + + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + dnl Search for GNU xgettext 0.11 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :) + + dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU msgfmt. + if test "$GMSGFMT" != ":"; then + dnl If it is no GNU msgfmt we define it as : so that the + dnl Makefiles still can work. + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && + (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + : ; + else + GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` + AC_MSG_RESULT( + [found $GMSGFMT program is not GNU msgfmt; ignore it]) + GMSGFMT=":" + fi + fi + + dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is no GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && + (if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + fi + + AC_CONFIG_COMMANDS([[gettext]],[[ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + fi + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + GMOFILES= + UPDATEPOFILES= + DUMMYPOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done]], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it + # from automake. + eval 'ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) +]) + + +dnl Checks for all prerequisites of the intl subdirectory, +dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, +dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. +AC_DEFUN([AM_INTL_SUBDIR], +[ + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AM_MKINSTALLDIRS])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([AC_ISC_POSIX])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_C_CONST])dnl + AC_REQUIRE([AC_C_INLINE])dnl + AC_REQUIRE([AC_TYPE_OFF_T])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + AC_REQUIRE([jm_GLIBC21])dnl + AC_REQUIRE([gt_INTDIV0])dnl + AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl + AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl + AC_REQUIRE([gt_INTTYPES_PRI])dnl + + AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ +stdlib.h string.h unistd.h sys/param.h]) + AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \ +geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \ +strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next]) + + AM_ICONV + AM_LANGINFO_CODESET + if test $ac_cv_header_locale_h = yes; then + AM_LC_MESSAGES + fi + + dnl intl/plural.c is generated from intl/plural.y. It requires bison, + dnl because plural.y uses bison specific features. It requires at least + dnl bison-1.26 because earlier versions generate a plural.c that doesn't + dnl compile. + dnl bison is only needed for the maintainer (who touches plural.y). But in + dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put + dnl the rule in general Makefile. Now, some people carelessly touch the + dnl files or have a broken "make" program, hence the plural.c rule will + dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not + dnl present or too old. + AC_CHECK_PROGS([INTLBISON], [bison]) + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + dnl Found it, now check the version. + AC_MSG_CHECKING([version of bison]) +changequote(<<,>>)dnl + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) +changequote([,])dnl + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + AC_MSG_RESULT([$ac_prog_version]) + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi +]) + + +AC_DEFUN([AM_MKINSTALLDIRS], +[ + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but $(top_srcdir). + dnl Try to locate is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) +]) + + +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) + +# lib-prefix.m4 serial 1 (gettext-0.11) +dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Bruno Haible. + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +# lib-link.m4 serial 3 (gettext-0.11.3) +dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Bruno Haible. + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + undefine([Name]) + undefine([NAME]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. If found, it +dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and +dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIB[]NAME" + AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + undefine([Name]) + undefine([NAME]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, +dnl hardcode_direct, hardcode_minus_L, +dnl sys_lib_search_path_spec, sys_lib_dlsearch_path_spec. +AC_DEFUN([AC_LIB_RPATH], +[ + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + sys_lib_search_path_spec="$acl_cv_sys_lib_search_path_spec" + sys_lib_dlsearch_path_spec="$acl_cv_sys_lib_dlsearch_path_spec" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE(rpath, + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_ARG_WITH([lib$1-prefix], +[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib + --without-lib$1-prefix don't search for lib$1 in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +# lib-ld.m4 serial 1 (gettext-0.11) +dnl Copyright (C) 1996-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl Subroutines of libtool.m4, +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + acl_cv_prog_gnu_ld=yes +else + acl_cv_prog_gnu_ld=no +fi]) +with_gnu_ld=$acl_cv_prog_gnu_ld +]) + +dnl From libtool-1.4. Sets the variable LD. +AC_DEFUN([AC_LIB_PROG_LD], +[AC_ARG_WITH(gnu-ld, +[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(acl_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_LIB_PROG_LD_GNU +]) + +# iconv.m4 serial AM4 (gettext-0.11.3) +dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Bruno Haible. + +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([iconv]) +]) + +AC_DEFUN([AM_ICONV_LINK], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + + dnl Add $INCICONV to CPPFLAGS before performing the following checks, + dnl because if the user has installed libiconv and not disabled its use + dnl via --without-libiconv-prefix, he wants to use it. The first + dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. + am_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) + + AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_func_iconv=yes) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_lib_iconv=yes + am_cv_func_iconv=yes) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) + fi + if test "$am_cv_lib_iconv" = yes; then + AC_MSG_CHECKING([how to link with libiconv]) + AC_MSG_RESULT([$LIBICONV]) + else + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV + dnl either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + AC_SUBST(LIBICONV) + AC_SUBST(LTLIBICONV) +]) + +AC_DEFUN([AM_ICONV], +[ + AM_ICONV_LINK + if test "$am_cv_func_iconv" = yes; then + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL(am_cv_proto_iconv, [ + AC_TRY_COMPILE([ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif +], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([$]{ac_t:- + }[$]am_cv_proto_iconv) + AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, + [Define as const if the declaration of iconv() needs const.]) + fi +]) + +# progtest.m4 serial 2 (gettext-0.10.40) +dnl Copyright (C) 1996-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1996. + +# Search path for a program which passes the given test. + +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST], +[# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + /*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) + +# isc-posix.m4 serial 2 (gettext-0.11.2) +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +# This file is not needed with autoconf-2.53 and newer. Remove it in 2005. + +# This test replaces the one in autoconf. +# Currently this macro should have the same name as the autoconf macro +# because gettext's gettext.m4 (distributed in the automake package) +# still uses it. Otherwise, the use in gettext.m4 makes autoheader +# give these diagnostics: +# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX +# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX + +undefine([AC_ISC_POSIX]) + +AC_DEFUN([AC_ISC_POSIX], + [ + dnl This test replaces the obsolescent AC_ISC_POSIX kludge. + AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) + ] +) + +# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40) +dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +# Test for the GNU C Library, version 2.1 or newer. +# From Bruno Haible. + +AC_DEFUN([jm_GLIBC21], + [ + AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, + ac_cv_gnu_library_2_1, + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + ], + ac_cv_gnu_library_2_1=yes, + ac_cv_gnu_library_2_1=no) + ] + ) + AC_SUBST(GLIBC21) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) + +# intdiv0.m4 serial 1 (gettext-0.11.3) +dnl Copyright (C) 2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Bruno Haible. + +AC_DEFUN([gt_INTDIV0], +[ + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + + AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], + gt_cv_int_divbyzero_sigfpe, + [ + AC_TRY_RUN([ +#include +#include + +static void +#ifdef __cplusplus +sigfpe_handler (int sig) +#else +sigfpe_handler (sig) int sig; +#endif +{ + /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ + exit (sig != SIGFPE); +} + +int x = 1; +int y = 0; +int z; +int nan; + +int main () +{ + signal (SIGFPE, sigfpe_handler); +/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ +#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) + signal (SIGTRAP, sigfpe_handler); +#endif +/* Linux/SPARC yields signal SIGILL. */ +#if defined (__sparc__) && defined (__linux__) + signal (SIGILL, sigfpe_handler); +#endif + + z = x / y; + nan = y / y; + exit (1); +} +], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, + [ + # Guess based on the CPU. + case "$host_cpu" in + alpha* | i[34567]86 | m68k | s390*) + gt_cv_int_divbyzero_sigfpe="guessing yes";; + *) + gt_cv_int_divbyzero_sigfpe="guessing no";; + esac + ]) + ]) + case "$gt_cv_int_divbyzero_sigfpe" in + *yes) value=1;; + *) value=0;; + esac + AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, + [Define if integer division by zero raises signal SIGFPE.]) +]) + +# uintmax_t.m4 serial 6 (gettext-0.11) +dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Paul Eggert. + +AC_PREREQ(2.13) + +# Define uintmax_t to `unsigned long' or `unsigned long long' +# if does not exist. + +AC_DEFUN([jm_AC_TYPE_UINTMAX_T], +[ + AC_REQUIRE([jm_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([jm_AC_HEADER_STDINT_H]) + if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then + AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG]) + test $ac_cv_type_unsigned_long_long = yes \ + && ac_type='unsigned long long' \ + || ac_type='unsigned long' + AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, + [Define to unsigned long or unsigned long long + if and don't define.]) + fi +]) + +# inttypes_h.m4 serial 4 (gettext-0.11.4) +dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Paul Eggert. + +# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([jm_AC_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h, + [AC_TRY_COMPILE( + [#include +#include ], + [uintmax_t i = (uintmax_t) -1;], + jm_ac_cv_header_inttypes_h=yes, + jm_ac_cv_header_inttypes_h=no)]) + if test $jm_ac_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, +[Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) + +# stdint_h.m4 serial 2 (gettext-0.11.4) +dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Paul Eggert. + +# Define HAVE_STDINT_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([jm_AC_HEADER_STDINT_H], +[ + AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h, + [AC_TRY_COMPILE( + [#include +#include ], + [uintmax_t i = (uintmax_t) -1;], + jm_ac_cv_header_stdint_h=yes, + jm_ac_cv_header_stdint_h=no)]) + if test $jm_ac_cv_header_stdint_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, +[Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) + +# ulonglong.m4 serial 2 (fileutils-4.0.32, gettext-0.10.40) +dnl Copyright (C) 1999-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Paul Eggert. + +AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG], +[ + AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, + [AC_TRY_LINK([unsigned long long ull = 1; int i = 63;], + [unsigned long long ullmax = (unsigned long long) -1; + return ull << i | ull >> i | ullmax / ull | ullmax % ull;], + ac_cv_type_unsigned_long_long=yes, + ac_cv_type_unsigned_long_long=no)]) + if test $ac_cv_type_unsigned_long_long = yes; then + AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, + [Define if you have the unsigned long long type.]) + fi +]) + +# inttypes.m4 serial 1 (gettext-0.11.4) +dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Paul Eggert. + +# Define HAVE_INTTYPES_H if exists and doesn't clash with +# . + +AC_DEFUN([gt_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, + [ + AC_TRY_COMPILE( + [#include +#include ], + [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) + ]) + if test $gt_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, + [Define if exists and doesn't clash with .]) + fi +]) + +# inttypes-pri.m4 serial 1 (gettext-0.11.4) +dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Bruno Haible. + +# Define PRI_MACROS_BROKEN if exists and defines the PRI* +# macros to non-string values. This is the case on AIX 4.3.3. + +AC_DEFUN([gt_INTTYPES_PRI], +[ + AC_REQUIRE([gt_HEADER_INTTYPES_H]) + if test $gt_cv_header_inttypes_h = yes; then + AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], + gt_cv_inttypes_pri_broken, + [ + AC_TRY_COMPILE([#include +#ifdef PRId32 +char *p = PRId32; +#endif +], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) + ]) + fi + if test "$gt_cv_inttypes_pri_broken" = yes; then + AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, + [Define if exists and defines unusable PRI* macros.]) + fi +]) + +# codeset.m4 serial AM1 (gettext-0.10.40) +dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Bruno Haible. + +AC_DEFUN([AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(CODESET);], + am_cv_langinfo_codeset=yes, + am_cv_langinfo_codeset=no) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE(HAVE_LANGINFO_CODESET, 1, + [Define if you have and nl_langinfo(CODESET).]) + fi +]) + +# lcmessage.m4 serial 3 (gettext-0.11.3) +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995. + +# Check whether LC_MESSAGES is available in . + +AC_DEFUN([AM_LC_MESSAGES], +[ + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your file defines LC_MESSAGES.]) + fi +]) + diff --git a/conf b/conf new file mode 100755 index 0000000..82b2af2 --- /dev/null +++ b/conf @@ -0,0 +1,17 @@ +#!/bin/sh + +AUTOTOOLS_DIR=/usr/share/misc +if [ -f "${AUTOTOOLS_DIR}/config.guess" ]; then + cp -p "${AUTOTOOLS_DIR}/config.guess" config.guess +fi +if [ -f "${AUTOTOOLS_DIR}/config.sub" ]; then + cp -p "${AUTOTOOLS_DIR}/config.sub" config.sub +fi +aclocal + +# Do not use space between -W and all, otherwise Debian's auto*-wrapper +# brokes... +autoconf -Wall +autoheader -Wall + +rm -f config.cache config.status config.log diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..78f6b92 --- /dev/null +++ b/config.guess @@ -0,0 +1,1409 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2003-01-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:MicroBSD:*:*) + echo ${UNAME_MACHINE}-unknown-microbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + eval $set_cc_for_build + cat <$dummy.s + .data +\$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text + .globl main + .align 4 + .ent main +main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + $CC_FOR_BUILD -o $dummy $dummy.s 2>/dev/null + if test "$?" = 0 ; then + case `$dummy` in + 0-0) + UNAME_MACHINE="alpha" + ;; + 1-0) + UNAME_MACHINE="alphaev5" + ;; + 1-1) + UNAME_MACHINE="alphaev56" + ;; + 1-101) + UNAME_MACHINE="alphapca56" + ;; + 2-303) + UNAME_MACHINE="alphaev6" + ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + 2-1307) + UNAME_MACHINE="alphaev68" + ;; + 3-1307) + UNAME_MACHINE="alphaev7" + ;; + esac + fi + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && exit 0 + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + # avoid double evaluation of $set_cc_for_build + test -n "$CC_FOR_BUILD" || eval $set_cc_for_build + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + *:UNICOS/mp:*:*) + echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + # Determine whether the default compiler uses glibc. + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #if __GLIBC__ >= 2 + LIBC=gnu + #else + LIBC= + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:3*) + echo i586-pc-interix3 + exit 0 ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + case `uname -p` in + *86) UNAME_PROCESSOR=i686 ;; + powerpc) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.rpath b/config.rpath new file mode 100755 index 0000000..5ead758 --- /dev/null +++ b/config.rpath @@ -0,0 +1,513 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2002 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +shlibext= + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix3* | aix4* | aix5*) + wl='-Wl,' + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6*) + wl='-Wl,' + ;; + linux*) + echo '__INTEL_COMPILER' > conftest.$ac_ext + if $CC -E conftest.$ac_ext >/dev/null | grep __INTEL_COMPILER >/dev/null + then + : + else + # Intel icc + wl='-Qoption,ld,' + fi + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + solaris*) + wl='-Wl,' + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + if test "x$host_vendor" = xsni; then + wl='-LD' + else + wl='-Wl,' + fi + ;; + esac +fi + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + case "$host_os" in + aix3* | aix4* | aix5*) + # On AIX, the GNU linker is very broken + ld_shlibs=no + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can use + # them. + ld_shlibs=no + ;; + beos*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + ;; + solaris* | sysv5*) + if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + esac + fi + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib' + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' + fi + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=yes + ;; + freebsd1*) + ld_shlibs=no + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9* | hpux10* | hpux11*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_minus_L=yes # Not in the search PATH, but as the default + # location of the library. + ;; + irix5* | irix6*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + openbsd*) + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + sco3.2v5*) + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + if test "x$host_vendor" = xsno; then + hardcode_direct=yes # is this really true??? + else + hardcode_direct=no # Motorola manual says yes, but my tests say they lie + fi + ;; + sysv4.3*) + ;; + sysv5*) + hardcode_libdir_flag_spec= + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4.2uw2*) + hardcode_direct=yes + hardcode_minus_L=no + ;; + sysv5uw7* | unixware7*) + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +libname_spec='lib$name' +sys_lib_dlsearch_path_spec="/lib /usr/lib" +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +case "$host_os" in + aix3*) + shlibext=so + ;; + aix4* | aix5*) + shlibext=so + ;; + amigaos*) + shlibext=ixlibrary + ;; + beos*) + shlibext=so + ;; + bsdi4*) + shlibext=so + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + ;; + cygwin* | mingw* | pw32*) + case $GCC,$host_os in + yes,cygwin*) + shlibext=dll.a + ;; + yes,mingw*) + shlibext=dll + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"` + ;; + yes,pw32*) + shlibext=dll + ;; + *) + shlibext=dll + ;; + esac + ;; + darwin* | rhapsody*) + shlibext=dylib + ;; + freebsd1*) + ;; + freebsd*) + shlibext=so + ;; + gnu*) + shlibext=so + ;; + hpux9* | hpux10* | hpux11*) + shlibext=sl + ;; + irix5* | irix6*) + shlibext=so + case "$host_os" in + irix5*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 ") libsuff= shlibsuff= ;; + *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + ;; + linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + ;; + linux-gnu*) + shlibext=so + ;; + netbsd*) + shlibext=so + ;; + newsos6) + shlibext=so + ;; + openbsd*) + shlibext=so + ;; + os2*) + libname_spec='$name' + shlibext=dll + ;; + osf3* | osf4* | osf5*) + shlibext=so + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + sco3.2v5*) + shlibext=so + ;; + solaris*) + shlibext=so + ;; + sunos4*) + shlibext=so + ;; + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + shlibext=so + case "$host_vendor" in + motorola) + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + uts4*) + shlibext=so + ;; + dgux*) + shlibext=so + ;; + sysv4*MP*) + if test -d /usr/nec; then + shlibext=so + fi + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_sys_lib_search_path_spec=`echo "X$sys_lib_search_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_sys_lib_dlsearch_path_spec=`echo "X$sys_lib_dlsearch_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | msp430 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \ + | clipper-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* \ + | m32r-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | msp430-* \ + | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nv1) + basic_machine=nv1-cray + os=-unicosmp + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i686-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic4x | c4x*) + basic_machine=tic4x-unknown + os=-coff + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -microbsd*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..67d4ae3 --- /dev/null +++ b/configure @@ -0,0 +1,12371 @@ +#! /bin/sh +# From configure.ac 2.2.1. +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.57 for ncpfs 2.2.1. +# +# Report bugs to . +# +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME='ncpfs' +PACKAGE_TARNAME='-ncpfs-' +PACKAGE_VERSION='2.2.1' +PACKAGE_STRING='ncpfs 2.2.1' +PACKAGE_BUGREPORT='vandrove@vc.cvut.cz' + +ac_unique_file="lib/ncplib.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +ac_subdirs_all="$ac_subdirs_all contrib/php" +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC_WARNINGS build build_cpu build_vendor build_os host host_cpu host_vendor host_os SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S PACKAGE VERSION MKINSTALLDIRS MSGFMT GMSGFMT XGETTEXT MSGMERGE RANLIB ac_ct_RANLIB CPP EGREP ALLOCA GLIBC21 LIBICONV LTLIBICONV INTLBISON USE_NLS BUILD_INCLUDED_LIBINTL USE_INCLUDED_LIBINTL CATOBJEXT INTLOBJS DATADIRNAME INSTOBJEXT GENCAT INTL_LIBTOOL_SUFFIX_PREFIX INTLLIBS LIBINTL LTLIBINTL POSUB localedir ncp_ipx_headers_1 ncp_ipx_headers_2 ncp_ipx_defsiocprotoprivate ncp_ipx_defsiocaipx ncp_sys_mount_h ncp_linux_fs_h ncp_net_if_h ncp_net_route_h ncp_if_ether_support ncp_sys_select_h stdint_types socklen_t wchar_h LIB_PAM_SECURITY php_found REENTRANT_CFLAGS ncphost ELF_TARGET VERSIONED_LINK ncp_in_support ncp_ipx_support NDS_SUPPORT SIGNATURES MOUNT2 MOUNT3 USE_KERNEL ADDON_SUBDIRS ADDON_DEV_SUBDIRS FFUNCTION_SECTIONS GC_SECTIONS subdirs LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures ncpfs 2.2.1 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of ncpfs 2.2.1:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-warnings enable verbose build warnings + --enable-pam build PAM NCP authentication module + --enable-php build PHP NCP authentication module + --disable-ipx-tools disables building of ipx tools + --disable-udp disable NCP/UDP + --disable-ipx disable NCP/IPX + --disable-signatures disable packet signing code + --disable-nds disable NDS support + --disable-mount-v2 disable support for Linux 2.0 + --disable-mount-v3 disable support for Linux 2.2 + --disable-kernel do not use kernel interface + --disable-reentrant do not compile threading support into library + --disable-versions do not use version symbols in library + --disable-function-sections do not use -ffunction-sections for static libraries + --enable-trace enable trace of ncp calls + --enable-ncp-debug enable builtin debugging support + --disable-rpath do not hardcode runtime library paths + --disable-nls do not use Native Language Support + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-php-config=PATH build PHP NCP authentication module + --with-gnu-ld assume the C compiler uses GNU ld default=no + --with-libiconv-prefix=DIR search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir + --with-included-gettext use the GNU gettext library included here + --with-libintl-prefix=DIR search for libintl in DIR/include and DIR/lib + --without-libintl-prefix don't search for libintl in includedir and libdir + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF +ncpfs configure 2.2.1 +generated by GNU Autoconf 2.57 + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 +Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by ncpfs $as_me 2.2.1, which was +generated by GNU Autoconf 2.57. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core core.* *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ac_config_headers="$ac_config_headers include/config.h" + + + +# Check whether --enable-warnings or --disable-warnings was given. +if test "${enable_warnings+set}" = set; then + enableval="$enable_warnings" + +fi; + +# Check whether --enable-pam or --disable-pam was given. +if test "${enable_pam+set}" = set; then + enableval="$enable_pam" + +fi; + +# Check whether --enable-php or --disable-php was given. +if test "${enable_php+set}" = set; then + enableval="$enable_php" + +fi; + + +# Check whether --with-php-config or --without-php-config was given. +if test "${with_php_config+set}" = set; then + withval="$with_php_config" + +fi; + +# Check whether --enable-ipx-tools or --disable-ipx-tools was given. +if test "${enable_ipx_tools+set}" = set; then + enableval="$enable_ipx_tools" + +fi; + +# Check whether --enable-udp or --disable-udp was given. +if test "${enable_udp+set}" = set; then + enableval="$enable_udp" + +fi; + +# Check whether --enable-ipx or --disable-ipx was given. +if test "${enable_ipx+set}" = set; then + enableval="$enable_ipx" + +fi; + +# Check whether --enable-signatures or --disable-signatures was given. +if test "${enable_signatures+set}" = set; then + enableval="$enable_signatures" + +fi; + +# Check whether --enable-nds or --disable-nds was given. +if test "${enable_nds+set}" = set; then + enableval="$enable_nds" + +fi; + +# Check whether --enable-mount-v2 or --disable-mount-v2 was given. +if test "${enable_mount_v2+set}" = set; then + enableval="$enable_mount_v2" + +fi; + +# Check whether --enable-mount-v3 or --disable-mount-v3 was given. +if test "${enable_mount_v3+set}" = set; then + enableval="$enable_mount_v3" + +fi; + +# Check whether --enable-kernel or --disable-kernel was given. +if test "${enable_kernel+set}" = set; then + enableval="$enable_kernel" + +fi; + +# Check whether --enable-reentrant or --disable-reentrant was given. +if test "${enable_reentrant+set}" = set; then + enableval="$enable_reentrant" + +fi; + +# Check whether --enable-versions or --disable-versions was given. +if test "${enable_versions+set}" = set; then + enableval="$enable_versions" + +fi; + +# Check whether --enable-function_sections or --disable-function_sections was given. +if test "${enable_function_sections+set}" = set; then + enableval="$enable_function_sections" + +fi; + +# Check whether --enable-trace or --disable-trace was given. +if test "${enable_trace+set}" = set; then + enableval="$enable_trace" + +fi; + +# Check whether --enable-ncp_debug or --disable-ncp_debug was given. +if test "${enable_ncp_debug+set}" = set; then + enableval="$enable_ncp_debug" + +fi; + +if test "$enable_udp" = "no" +then + PROTOCOL_IP=0 +else + +cat >>confdefs.h <<\_ACEOF +#define CONFIG_NATIVE_IP 1 +_ACEOF + + PROTOCOL_IP=1 +fi + +if test "$enable_signatures" = "no" +then : ; else + +cat >>confdefs.h <<\_ACEOF +#define SIGNATURES 1 +_ACEOF + + SIGNATURES=1 +fi + +if test "$enable_nds" = "no" +then : ; else + +cat >>confdefs.h <<\_ACEOF +#define NDS_SUPPORT 1 +_ACEOF + + NDS_SUPPORT=1 +fi + +if test "$enable_kernel" = "no" +then + USE_KERNEL=0 + enable_mount_v2=no + enable_mount_v3=no +else + USE_KERNEL=1 +fi + +if test "$enable_mount_v2" = "no" +then + MOUNT2=0 +else + MOUNT2=1 +fi + +if test "$enable_mount_v3" = "no" +then + MOUNT3=0 +else + MOUNT3=1 +fi + +if test "$enable_warnings" = "yes" +then + CC_WARNINGS=yes +else + CC_WARNINGS=no +fi + + +if test "$enable_ncp_debug" = "yes" +then + NCP_DEBUG_ENABLE=yes + +cat >>confdefs.h <<\_ACEOF +#define NCP_DEBUG 1 +_ACEOF + +else + NCP_DEBUG_ENABLE=no +fi + +pam_forced=no +pam_path_forced= +if test "$enable_pam" = "" +then + PAM=1 +else + pam_forced=yes + case "$enable_pam" in + no) PAM=0; pam_path_forced="no";; + yes) PAM=1;; + /*) PAM=1; pam_path_forced="$enable_pam";; + *) { { echo "$as_me:$LINENO: error: Bad parameter for --enable-pam" >&5 +echo "$as_me: error: Bad parameter for --enable-pam" >&2;} + { (exit 1); exit 1; }; };; + esac +fi + +php_forced=no +php_path_forced= +PHP=yes +if test "$enable_php" != "" +then + case "$enable_php" in + no) PHP=no; php_path_forced="no";; + yes) PHP=yes; php_path_forced=;; + *) { { echo "$as_me:$LINENO: error: Bad parameter for --enable-php. Use --with-php-config for specifying PHP directory" >&5 +echo "$as_me: error: Bad parameter for --enable-php. Use --with-php-config for specifying PHP directory" >&2;} + { (exit 1); exit 1; }; };; + esac + php_forced=yes +fi +if test "$with_php_config" != "" +then + case "$with_php_config" in + no) PHP2=no; php_path_forced="no";; + yes) PHP2=yes; php_path_forced=;; + *) PHP2=yes; php_path_forced="$with_php_config";; + esac + if test "$php_forced" = "yes" + then + if test "$PHP" != "$PHP2" + then + p1="--enable-php" + if test "$PHP" = "no" + then + p1="--disable-php" + fi + case "$php_path_forced" in + no) p2="--without-php-config";; + yes) p2="--with-php-config";; + *) p2="--with-php-config=$php_path_forced";; + esac + { { echo "$as_me:$LINENO: error: $p1 conflicts with $p2" >&5 +echo "$as_me: error: $p1 conflicts with $p2" >&2;} + { (exit 1); exit 1; }; }; + fi + fi + PHP="${PHP2}" + php_forced=yes +fi + +reentrant_forced=no +REENTRANT=1 +if test "$enable_reentrant" != "" +then + reentrant_forced=yes + if test "$enable_reentrant" = "no" + then + REENTRANT=0 + fi +fi + +versions_forced=no +VERSIONED_LINK=yes +if test "$enable_versions" != "" +then + versions_forced=yes + if test "$enable_versions" = "no" + then + VERSIONED_LINK=no + fi +fi + +function_sections_forced=no +function_sections=yes +if test "$enable_function_sections" != "" +then + function_sections_forced=yes + if test "$enable_function_sections" = "no" + then + function_sections=no + fi +fi + +if test "$enable_trace" = "yes" +then + +cat >>confdefs.h <<\_ACEOF +#define NCP_TRACE_ENABLE 1 +_ACEOF + + NCP_TRACE_ENABLE=1 +fi + +PROTOCOL_IPX=0 +BUILD_IPX_TOOLS=0 + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,./+-,__p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output" >&5 +echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + ''\ + '#include ' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6 +fi + + +PACKAGE="$PACKAGE_NAME" + +VERSION="$PACKAGE_VERSION" + + + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + + + + + + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$MSGFMT" in + /*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if $ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_MSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + echo "$as_me:$LINENO: result: $MSGFMT" >&5 +echo "${ECHO_T}$MSGFMT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT + +if test -n "$GMSGFMT"; then + echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +echo "${ECHO_T}$GMSGFMT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +echo "${ECHO_T}$XGETTEXT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + rm -f messages.po + + # Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_MSGMERGE+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$MSGMERGE" in + /*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac +fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + echo "$as_me:$LINENO: result: $MSGMERGE" >&5 +echo "${ECHO_T}$MSGMERGE" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + + if test "$GMSGFMT" != ":"; then + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && + (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + : ; + else + GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` + echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5 +echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6 + GMSGFMT=":" + fi + fi + + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 && + (if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + : ; + else + echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5 +echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6 + XGETTEXT=":" + fi + rm -f messages.po + fi + + ac_config_commands="$ac_config_commands gettext" + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + RANLIB=$ac_ct_RANLIB +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + + + echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5 +echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6 +if test "${ac_cv_lib_cposix_strerror+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcposix $LIBS" +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char strerror (); +int +main () +{ +strerror (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_cposix_strerror=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_cposix_strerror=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5 +echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6 +if test $ac_cv_lib_cposix_strerror = yes; then + LIBS="$LIBS -lcposix" +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 +if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset x; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *ccp; + char **p; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + ccp = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++ccp; + p = (char**) ccp; + ccp = (char const *const *) p; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + } +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_const=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_c_const=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6 +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +#define const +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for inline" >&5 +echo $ECHO_N "checking for inline... $ECHO_C" >&6 +if test "${ac_cv_c_inline+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_inline=$ac_kw; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 +echo "${ECHO_T}$ac_cv_c_inline" >&6 +case $ac_cv_c_inline in + inline | yes) ;; + no) +cat >>confdefs.h <<\_ACEOF +#define inline +_ACEOF + ;; + *) cat >>confdefs.h <<_ACEOF +#define inline $ac_cv_c_inline +_ACEOF + ;; +esac + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +echo "$as_me:$LINENO: checking for off_t" >&5 +echo $ECHO_N "checking for off_t... $ECHO_C" >&6 +if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((off_t *) 0) + return 0; +if (sizeof (off_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_off_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_off_t=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 +echo "${ECHO_T}$ac_cv_type_off_t" >&6 +if test $ac_cv_type_off_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define off_t long +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for size_t" >&5 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6 +if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((size_t *) 0) + return 0; +if (sizeof (size_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_size_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_size_t=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +echo "${ECHO_T}$ac_cv_type_size_t" >&6 +if test $ac_cv_type_size_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned +_ACEOF + +fi + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +echo "$as_me:$LINENO: checking for working alloca.h" >&5 +echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6 +if test "${ac_cv_working_alloca_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_working_alloca_h=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_working_alloca_h=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 +echo "${ECHO_T}$ac_cv_working_alloca_h" >&6 +if test $ac_cv_working_alloca_h = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ALLOCA_H 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for alloca" >&5 +echo $ECHO_N "checking for alloca... $ECHO_C" >&6 +if test "${ac_cv_func_alloca_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include +# define alloca _alloca +# else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif + +int +main () +{ +char *p = (char *) alloca (1); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_alloca_works=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func_alloca_works=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 +echo "${ECHO_T}$ac_cv_func_alloca_works" >&6 + +if test $ac_cv_func_alloca_works = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ALLOCA 1 +_ACEOF + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + +ALLOCA=alloca.$ac_objext + +cat >>confdefs.h <<\_ACEOF +#define C_ALLOCA 1 +_ACEOF + + +echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 +echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6 +if test "${ac_cv_os_cray+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#if defined(CRAY) && ! defined(CRAY2) +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 +echo "${ECHO_T}$ac_cv_os_cray" >&6 +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ +#ifdef __STDC__ +# include +#else +# include +#endif +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 +echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6 +if test "${ac_cv_c_stack_direction+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_c_stack_direction=0 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +int +find_stack_direction () +{ + static char *addr = 0; + auto char dummy; + if (addr == 0) + { + addr = &dummy; + return find_stack_direction (); + } + else + return (&dummy > addr) ? 1 : -1; +} + +int +main () +{ + exit (find_stack_direction () < 0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_stack_direction=1 +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_c_stack_direction=-1 +fi +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 +echo "${ECHO_T}$ac_cv_c_stack_direction" >&6 + +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + + + +for ac_header in stdlib.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_func in getpagesize +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ +#ifdef __STDC__ +# include +#else +# include +#endif +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +echo "$as_me:$LINENO: checking for working mmap" >&5 +echo $ECHO_N "checking for working mmap... $ECHO_C" >&6 +if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_mmap_fixed_mapped=no +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +/* malloc might have been renamed as rpl_malloc. */ +#undef malloc + +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the file system buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propagated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ + +#include +#include + +#if !STDC_HEADERS && !HAVE_STDLIB_H +char *malloc (); +#endif + +/* This mess was copied from the GNU getpagesize.h. */ +#if !HAVE_GETPAGESIZE +/* Assume that all systems that can run configure have sys/param.h. */ +# if !HAVE_SYS_PARAM_H +# define HAVE_SYS_PARAM_H 1 +# endif + +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# if HAVE_SYS_PARAM_H +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +int +main () +{ + char *data, *data2, *data3; + int i, pagesize; + int fd; + + pagesize = getpagesize (); + + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) + exit (1); + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) + exit (1); + if (write (fd, data, pagesize) != pagesize) + exit (1); + close (fd); + + /* Next, try to mmap the file at a fixed address which already has + something else allocated at it. If we can, also make sure that + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) + exit (1); + data2 = (char *) malloc (2 * pagesize); + if (!data2) + exit (1); + data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + exit (1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + exit (1); + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on + some variants of i386 svr4.0.) */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) + exit (1); + if (read (fd, data3, pagesize) != pagesize) + exit (1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + exit (1); + close (fd); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_mmap_fixed_mapped=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_mmap_fixed_mapped=no +fi +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5 +echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6 +if test $ac_cv_func_mmap_fixed_mapped = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_MMAP 1 +_ACEOF + +fi +rm -f conftest.mmap + + + echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5 +echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6 +if test "${ac_cv_gnu_library_2_1+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky GNU user" >/dev/null 2>&1; then + ac_cv_gnu_library_2_1=yes +else + ac_cv_gnu_library_2_1=no +fi +rm -f conftest* + + + +fi +echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2_1" >&5 +echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6 + + GLIBC21="$ac_cv_gnu_library_2_1" + + + + + echo "$as_me:$LINENO: checking whether integer division by zero raises SIGFPE" >&5 +echo $ECHO_N "checking whether integer division by zero raises SIGFPE... $ECHO_C" >&6 +if test "${gt_cv_int_divbyzero_sigfpe+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + if test "$cross_compiling" = yes; then + + # Guess based on the CPU. + case "$host_cpu" in + alpha* | i3456786 | m68k | s390*) + gt_cv_int_divbyzero_sigfpe="guessing yes";; + *) + gt_cv_int_divbyzero_sigfpe="guessing no";; + esac + +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include + +static void +#ifdef __cplusplus +sigfpe_handler (int sig) +#else +sigfpe_handler (sig) int sig; +#endif +{ + /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ + exit (sig != SIGFPE); +} + +int x = 1; +int y = 0; +int z; +int nan; + +int main () +{ + signal (SIGFPE, sigfpe_handler); +/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ +#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) + signal (SIGTRAP, sigfpe_handler); +#endif +/* Linux/SPARC yields signal SIGILL. */ +#if defined (__sparc__) && defined (__linux__) + signal (SIGILL, sigfpe_handler); +#endif + + z = x / y; + nan = y / y; + exit (1); +} + +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_int_divbyzero_sigfpe=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +gt_cv_int_divbyzero_sigfpe=no +fi +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + +fi +echo "$as_me:$LINENO: result: $gt_cv_int_divbyzero_sigfpe" >&5 +echo "${ECHO_T}$gt_cv_int_divbyzero_sigfpe" >&6 + case "$gt_cv_int_divbyzero_sigfpe" in + *yes) value=1;; + *) value=0;; + esac + +cat >>confdefs.h <<_ACEOF +#define INTDIV0_RAISES_SIGFPE $value +_ACEOF + + + + echo "$as_me:$LINENO: checking for inttypes.h" >&5 +echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6 +if test "${jm_ac_cv_header_inttypes_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +uintmax_t i = (uintmax_t) -1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + jm_ac_cv_header_inttypes_h=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +jm_ac_cv_header_inttypes_h=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $jm_ac_cv_header_inttypes_h" >&5 +echo "${ECHO_T}$jm_ac_cv_header_inttypes_h" >&6 + if test $jm_ac_cv_header_inttypes_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_INTTYPES_H_WITH_UINTMAX 1 +_ACEOF + + fi + + + echo "$as_me:$LINENO: checking for stdint.h" >&5 +echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6 +if test "${jm_ac_cv_header_stdint_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +uintmax_t i = (uintmax_t) -1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + jm_ac_cv_header_stdint_h=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +jm_ac_cv_header_stdint_h=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $jm_ac_cv_header_stdint_h" >&5 +echo "${ECHO_T}$jm_ac_cv_header_stdint_h" >&6 + if test $jm_ac_cv_header_stdint_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H_WITH_UINTMAX 1 +_ACEOF + + fi + + + echo "$as_me:$LINENO: checking for unsigned long long" >&5 +echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6 +if test "${ac_cv_type_unsigned_long_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +unsigned long long ull = 1; int i = 63; +int +main () +{ +unsigned long long ullmax = (unsigned long long) -1; + return ull << i | ull >> i | ullmax / ull | ullmax % ull; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_unsigned_long_long=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_unsigned_long_long=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long" >&5 +echo "${ECHO_T}$ac_cv_type_unsigned_long_long" >&6 + if test $ac_cv_type_unsigned_long_long = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_UNSIGNED_LONG_LONG 1 +_ACEOF + + fi + + + + + if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then + + test $ac_cv_type_unsigned_long_long = yes \ + && ac_type='unsigned long long' \ + || ac_type='unsigned long' + +cat >>confdefs.h <<_ACEOF +#define uintmax_t $ac_type +_ACEOF + + fi + + + echo "$as_me:$LINENO: checking for inttypes.h" >&5 +echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6 +if test "${gt_cv_header_inttypes_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_header_inttypes_h=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gt_cv_header_inttypes_h=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $gt_cv_header_inttypes_h" >&5 +echo "${ECHO_T}$gt_cv_header_inttypes_h" >&6 + if test $gt_cv_header_inttypes_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_INTTYPES_H 1 +_ACEOF + + fi + + + + if test $gt_cv_header_inttypes_h = yes; then + echo "$as_me:$LINENO: checking whether the inttypes.h PRIxNN macros are broken" >&5 +echo $ECHO_N "checking whether the inttypes.h PRIxNN macros are broken... $ECHO_C" >&6 +if test "${gt_cv_inttypes_pri_broken+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#ifdef PRId32 +char *p = PRId32; +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_inttypes_pri_broken=no +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gt_cv_inttypes_pri_broken=yes +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $gt_cv_inttypes_pri_broken" >&5 +echo "${ECHO_T}$gt_cv_inttypes_pri_broken" >&6 + fi + if test "$gt_cv_inttypes_pri_broken" = yes; then + +cat >>confdefs.h <<_ACEOF +#define PRI_MACROS_BROKEN 1 +_ACEOF + + fi + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by GCC" >&5 +echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${acl_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$acl_cv_path_LD" +if test -n "$LD"; then + echo "$as_me:$LINENO: result: $LD" >&5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${acl_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + acl_cv_prog_gnu_ld=yes +else + acl_cv_prog_gnu_ld=no +fi +fi +echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5 +echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6 +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + echo "$as_me:$LINENO: checking for shared library run path origin" >&5 +echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6 +if test "${acl_cv_rpath+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5 +echo "${ECHO_T}$acl_cv_rpath" >&6 + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + sys_lib_search_path_spec="$acl_cv_sys_lib_search_path_spec" + sys_lib_dlsearch_path_spec="$acl_cv_sys_lib_dlsearch_path_spec" + # Check whether --enable-rpath or --disable-rpath was given. +if test "${enable_rpath+set}" = set; then + enableval="$enable_rpath" + : +else + enable_rpath=yes +fi; + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix or --without-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then + withval="$with_libiconv_prefix" + + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi + +fi; + LIBICONV= + LTLIBICONV= + INCICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + + + + + + + +for ac_header in argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ +stdlib.h string.h unistd.h sys/param.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + + + + + + + + + + + + + + + + +for ac_func in feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \ +geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \ +strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ +#ifdef __STDC__ +# include +#else +# include +#endif +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + echo "$as_me:$LINENO: checking for iconv" >&5 +echo $ECHO_N "checking for iconv... $ECHO_C" >&6 +if test "${am_cv_func_iconv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_func_iconv=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5 +echo "${ECHO_T}$am_cv_func_iconv" >&6 + if test "$am_cv_func_iconv" = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ICONV 1 +_ACEOF + + fi + if test "$am_cv_lib_iconv" = yes; then + echo "$as_me:$LINENO: checking how to link with libiconv" >&5 +echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: $LIBICONV" >&5 +echo "${ECHO_T}$LIBICONV" >&6 + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + if test "$am_cv_func_iconv" = yes; then + echo "$as_me:$LINENO: checking for iconv declaration" >&5 +echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6 + if test "${am_cv_proto_iconv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_proto_iconv_arg1="" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +am_cv_proto_iconv_arg1="const" +fi +rm -f conftest.$ac_objext conftest.$ac_ext + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" +fi + + am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + echo "$as_me:$LINENO: result: ${ac_t:- + }$am_cv_proto_iconv" >&5 +echo "${ECHO_T}${ac_t:- + }$am_cv_proto_iconv" >&6 + +cat >>confdefs.h <<_ACEOF +#define ICONV_CONST $am_cv_proto_iconv_arg1 +_ACEOF + + fi + + + echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5 +echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6 +if test "${am_cv_langinfo_codeset+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +char* cs = nl_langinfo(CODESET); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_langinfo_codeset=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +am_cv_langinfo_codeset=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5 +echo "${ECHO_T}$am_cv_langinfo_codeset" >&6 + if test $am_cv_langinfo_codeset = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LANGINFO_CODESET 1 +_ACEOF + + fi + + if test $ac_cv_header_locale_h = yes; then + + echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5 +echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6 +if test "${am_cv_val_LC_MESSAGES+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +return LC_MESSAGES + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_val_LC_MESSAGES=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +am_cv_val_LC_MESSAGES=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $am_cv_val_LC_MESSAGES" >&5 +echo "${ECHO_T}$am_cv_val_LC_MESSAGES" >&6 + if test $am_cv_val_LC_MESSAGES = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LC_MESSAGES 1 +_ACEOF + + fi + + fi + + for ac_prog in bison +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_INTLBISON+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$INTLBISON"; then + ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_INTLBISON="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +INTLBISON=$ac_cv_prog_INTLBISON +if test -n "$INTLBISON"; then + echo "$as_me:$LINENO: result: $INTLBISON" >&5 +echo "${ECHO_T}$INTLBISON" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$INTLBISON" && break +done + + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + echo "$as_me:$LINENO: checking version of bison" >&5 +echo $ECHO_N "checking version of bison... $ECHO_C" >&6 + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + echo "$as_me:$LINENO: result: $ac_prog_version" >&5 +echo "${ECHO_T}$ac_prog_version" >&6 + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi + + + + + + + + + + + + + + + + echo "$as_me:$LINENO: checking whether NLS is requested" >&5 +echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 + # Check whether --enable-nls or --disable-nls was given. +if test "${enable_nls+set}" = set; then + enableval="$enable_nls" + USE_NLS=$enableval +else + USE_NLS=yes +fi; + echo "$as_me:$LINENO: result: $USE_NLS" >&5 +echo "${ECHO_T}$USE_NLS" >&6 + + + + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + + LIBINTL= + LTLIBINTL= + POSUB= + + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + + echo "$as_me:$LINENO: checking whether included gettext is requested" >&5 +echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6 + +# Check whether --with-included-gettext or --without-included-gettext was given. +if test "${with_included_gettext+set}" = set; then + withval="$with_included_gettext" + nls_cv_force_use_gnu_gettext=$withval +else + nls_cv_force_use_gnu_gettext=no +fi; + echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5 +echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6 + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + + + + + + + echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5 +echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6 +if test "${gt_cv_func_gnugettext1_libc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; +int +main () +{ +bindtextdomain ("", ""); +return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_func_gnugettext1_libc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gt_cv_func_gnugettext1_libc=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libc" >&5 +echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6 + + if test "$gt_cv_func_gnugettext1_libc" != "yes"; then + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libintl-prefix or --without-libintl-prefix was given. +if test "${with_libintl_prefix+set}" = set; then + withval="$with_libintl_prefix" + + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi + +fi; + LIBINTL= + LTLIBINTL= + INCINTL= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='intl ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" + ;; + esac + done + fi + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" + done + fi + + echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5 +echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6 +if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (); +int +main () +{ +bindtextdomain ("", ""); +return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_func_gnugettext1_libintl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gt_cv_func_gnugettext1_libintl=no +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (); +int +main () +{ +bindtextdomain ("", ""); +return (int) gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias (0) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + gt_cv_func_gnugettext1_libintl=yes + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" +fi +echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5 +echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6 + fi + + if test "$gt_cv_func_gnugettext1_libc" = "yes" \ + || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \ + && test "$PACKAGE" != gettext; }; then + gt_use_preinstalled_gnugettext=yes + else + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + INTLOBJS="\$(GETTOBJS)" + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV" + LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + CATOBJEXT=.gmo + fi + + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + +cat >>confdefs.h <<\_ACEOF +#define ENABLE_NLS 1 +_ACEOF + + else + USE_NLS=no + fi + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then + echo "$as_me:$LINENO: checking how to link with libintl" >&5 +echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: $LIBINTL" >&5 +echo "${ECHO_T}$LIBINTL" >&6 + + for element in $INCINTL; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + fi + + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETTEXT 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define HAVE_DCGETTEXT 1 +_ACEOF + + fi + + POSUB=po + fi + + + if test "$PACKAGE" = gettext; then + BUILD_INCLUDED_LIBINTL=yes + fi + + + + + + + nls_cv_header_intl= + nls_cv_header_libgt= + + DATADIRNAME=share + + + INSTOBJEXT=.mo + + + GENCAT=gencat + + + INTL_LIBTOOL_SUFFIX_PREFIX= + + + + INTLLIBS="$LIBINTL" + + + + + + +localedir="\${prefix}/$DATADIRNAME/locale" + + +echo "$as_me:$LINENO: checking for GNU style IPX support" >&5 +echo $ECHO_N "checking for GNU style IPX support... $ECHO_C" >&6 +if test "${ncp_cv_c_ipx_netipx+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +int +main () +{ +((struct sockaddr_ipx*)0)->sipx_family == AF_IPX + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_c_ipx_netipx="yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ncp_cv_c_ipx_netipx="no" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ncp_cv_c_ipx_netipx" >&5 +echo "${ECHO_T}$ncp_cv_c_ipx_netipx" >&6 +ncp_ipx_headers_1="/* not required */" +ncp_ipx_headers_2="/* <.../ipx.h> not found */" +if test "$ncp_cv_c_ipx_netipx" = "no" +then + echo "$as_me:$LINENO: checking for Linux style IPX support" >&5 +echo $ECHO_N "checking for Linux style IPX support... $ECHO_C" >&6 +if test "${ncp_cv_c_ipx_linux+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +int +main () +{ +((struct sockaddr_ipx*)0)->sipx_family == AF_IPX + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_c_ipx_linux="yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ncp_cv_c_ipx_linux="no" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ncp_cv_c_ipx_linux" >&5 +echo "${ECHO_T}$ncp_cv_c_ipx_linux" >&6 + if test "$ncp_cv_c_ipx_linux" = "no" + then + enable_ipx="no" + else + +cat >>confdefs.h <<\_ACEOF +#define HAVE_LINUX_IPX_H 1 +_ACEOF + + ncp_ipx_headers_1="#include " + ncp_ipx_headers_2="#include " + fi +else + +cat >>confdefs.h <<\_ACEOF +#define HAVE_NETIPX_IPX_H 1 +_ACEOF + + ncp_ipx_headers_1="#include " + ncp_ipx_headers_2="#include " +fi + + + +ncp_ipx_defsiocprotoprivate="#if 0 /* #define SIOCPROTOPRIVATE not needed */" +ncp_ipx_defsiocaipx="#if 0/* #define SIOCAIPX* not needed */" +if test "$enable_ipx" = "no" +then : ; else + +cat >>confdefs.h <<\_ACEOF +#define CONFIG_NATIVE_IPX 1 +_ACEOF + + PROTOCOL_IPX=1 + if test "$enable_ipx_tools" != "no" + then + ADDON_DEV_SUBDIRS="$ADDON_DEV_SUBDIRS ipx-1.0" + BUILD_IPX_TOOLS=1 + fi + + echo "$as_me:$LINENO: checking for working IPX ioctl values" >&5 +echo $ECHO_N "checking for working IPX ioctl values... $ECHO_C" >&6 +if test "${ncp_cv_c_ipx_ioctl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ncp_ipx_headers_1 +$ncp_ipx_headers_2 +int +main () +{ +SIOCAIPXITFCRT, SIOCAIPXPRISLT, SIOCIPXCFGDATA + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_c_ipx_ioctl="yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ncp_cv_c_ipx_ioctl="no" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ncp_cv_c_ipx_ioctl" >&5 +echo "${ECHO_T}$ncp_cv_c_ipx_ioctl" >&6 + if test "$ncp_cv_c_ipx_ioctl" = "no" + then + echo "$as_me:$LINENO: checking for defined SIOCPROTOPRIVATE" >&5 +echo $ECHO_N "checking for defined SIOCPROTOPRIVATE... $ECHO_C" >&6 +if test "${ncp_cv_c_siocprotoprivate+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ncp_ipx_headers_1 +$ncp_ipx_headers_2 +int +main () +{ +SIOCPROTOPRIVATE + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_c_siocprotoprivate="yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ncp_cv_c_siocprotoprivate="no" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ncp_cv_c_siocprotoprivate" >&5 +echo "${ECHO_T}$ncp_cv_c_siocprotoprivate" >&6 + if test "$ncp_cv_c_siocprotoprivate" = "no" + then + ncp_ipx_defsiocprotoprivate="#if 1 /* SIOCPROTOPRIVATE was not found */" + echo "$as_me:$LINENO: checking for working IPX ioctl values after defining SIOCPROTOPRIVATE" >&5 +echo $ECHO_N "checking for working IPX ioctl values after defining SIOCPROTOPRIVATE... $ECHO_C" >&6 +if test "${ncp_cv_c_ipx_sioc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ncp_ipx_headers_1 +$ncp_ipx_headers_2 +#define SIOCPROTOPRIVATE 0x89E0 +int +main () +{ +SIOCAIPXITFCRT, SIOCAIPXPRISLT, SIOCIPXCFGDATA + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_c_ipx_sioc="yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ncp_cv_c_ipx_sioc="no" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ncp_cv_c_ipx_sioc" >&5 +echo "${ECHO_T}$ncp_cv_c_ipx_sioc" >&6 + else + ncp_cv_c_ipx_sioc="no" + fi + if test "$ncp_cv_c_ipx_sioc" = "no" + then + ncp_ipx_defsiocaipx="#if 1 /* SIOCAIPX* values were not defined */" + fi + fi +fi + + + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for sys/wait.h that is POSIX.1 compatible" >&5 +echo $ECHO_N "checking for sys/wait.h that is POSIX.1 compatible... $ECHO_C" >&6 +if test "${ac_cv_header_sys_wait_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#ifndef WEXITSTATUS +# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) +#endif +#ifndef WIFEXITED +# define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif + +int +main () +{ + int s; + wait (&s); + s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_sys_wait_h=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_sys_wait_h=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_header_sys_wait_h" >&5 +echo "${ECHO_T}$ac_cv_header_sys_wait_h" >&6 +if test $ac_cv_header_sys_wait_h = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_SYS_WAIT_H 1 +_ACEOF + +fi + + +if test "${ac_cv_header_sys_mount_h+set}" = set; then + echo "$as_me:$LINENO: checking for sys/mount.h" >&5 +echo $ECHO_N "checking for sys/mount.h... $ECHO_C" >&6 +if test "${ac_cv_header_sys_mount_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_sys_mount_h" >&5 +echo "${ECHO_T}$ac_cv_header_sys_mount_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking sys/mount.h usability" >&5 +echo $ECHO_N "checking sys/mount.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking sys/mount.h presence" >&5 +echo $ECHO_N "checking sys/mount.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: sys/mount.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: sys/mount.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/mount.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: sys/mount.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: sys/mount.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: sys/mount.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/mount.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: sys/mount.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/mount.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: sys/mount.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for sys/mount.h" >&5 +echo $ECHO_N "checking for sys/mount.h... $ECHO_C" >&6 +if test "${ac_cv_header_sys_mount_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_sys_mount_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_sys_mount_h" >&5 +echo "${ECHO_T}$ac_cv_header_sys_mount_h" >&6 + +fi + + +if test "$ac_cv_header_sys_mount_h" = "no" +then + if test "$USE_KERNEL" = "1" + then + { echo "$as_me:$LINENO: WARNING: Cannot build kernel support because of no sys/mount.h file" >&5 +echo "$as_me: WARNING: Cannot build kernel support because of no sys/mount.h file" >&2;} + USE_KERNEL=0 + fi + ncp_sys_mount_h="/* sys/mount.h does not exist */" + ncp_linux_fs_h="/* linux/fs.h is not needed */" +else + ncp_sys_mount_h="#include " + echo "$as_me:$LINENO: checking for mount constants in sys/mount.h" >&5 +echo $ECHO_N "checking for mount constants in sys/mount.h... $ECHO_C" >&6 +if test "${ncp_cv_linux_fs_needed+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +mount(0,0,0,MS_RDONLY,0); umount(0) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_linux_fs_needed="yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ncp_cv_linux_fs_needed="no" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ncp_cv_linux_fs_needed" >&5 +echo "${ECHO_T}$ncp_cv_linux_fs_needed" >&6 + if test "$ncp_cv_linux_fs_needed" = "yes"; then + ncp_linux_fs_h="/* linux/fs.h not needed */" + else + ncp_linux_fs_h="#include " + fi +fi + + + +if test "${ac_cv_header_net_if_h+set}" = set; then + echo "$as_me:$LINENO: checking for net/if.h" >&5 +echo $ECHO_N "checking for net/if.h... $ECHO_C" >&6 +if test "${ac_cv_header_net_if_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_net_if_h" >&5 +echo "${ECHO_T}$ac_cv_header_net_if_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking net/if.h usability" >&5 +echo $ECHO_N "checking net/if.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking net/if.h presence" >&5 +echo $ECHO_N "checking net/if.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: net/if.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: net/if.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: net/if.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: net/if.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: net/if.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: net/if.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: net/if.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: net/if.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: net/if.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: net/if.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for net/if.h" >&5 +echo $ECHO_N "checking for net/if.h... $ECHO_C" >&6 +if test "${ac_cv_header_net_if_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_net_if_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_net_if_h" >&5 +echo "${ECHO_T}$ac_cv_header_net_if_h" >&6 + +fi +if test $ac_cv_header_net_if_h = yes; then + ncp_net_if_h="#include " +else + if test "${ac_cv_header_linux_if_h+set}" = set; then + echo "$as_me:$LINENO: checking for linux/if.h" >&5 +echo $ECHO_N "checking for linux/if.h... $ECHO_C" >&6 +if test "${ac_cv_header_linux_if_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_linux_if_h" >&5 +echo "${ECHO_T}$ac_cv_header_linux_if_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking linux/if.h usability" >&5 +echo $ECHO_N "checking linux/if.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking linux/if.h presence" >&5 +echo $ECHO_N "checking linux/if.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: linux/if.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: linux/if.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/if.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: linux/if.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: linux/if.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: linux/if.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/if.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: linux/if.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/if.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: linux/if.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for linux/if.h" >&5 +echo $ECHO_N "checking for linux/if.h... $ECHO_C" >&6 +if test "${ac_cv_header_linux_if_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_linux_if_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_linux_if_h" >&5 +echo "${ECHO_T}$ac_cv_header_linux_if_h" >&6 + +fi +if test $ac_cv_header_linux_if_h = yes; then + ncp_net_if_h="#include " +else + ncp_net_if_h="/* No interfaces support... */" + +cat >>confdefs.h <<\_ACEOF +#define NO_NET_IF_SUPPORT 1 +_ACEOF + + { echo "$as_me:$LINENO: WARNING: Neither nor does exist" >&5 +echo "$as_me: WARNING: Neither nor does exist" >&2;} + +fi + + + +fi + + + + +if test "${ac_cv_header_net_route_h+set}" = set; then + echo "$as_me:$LINENO: checking for net/route.h" >&5 +echo $ECHO_N "checking for net/route.h... $ECHO_C" >&6 +if test "${ac_cv_header_net_route_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_net_route_h" >&5 +echo "${ECHO_T}$ac_cv_header_net_route_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking net/route.h usability" >&5 +echo $ECHO_N "checking net/route.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking net/route.h presence" >&5 +echo $ECHO_N "checking net/route.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: net/route.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: net/route.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: net/route.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: net/route.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: net/route.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: net/route.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: net/route.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: net/route.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: net/route.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: net/route.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for net/route.h" >&5 +echo $ECHO_N "checking for net/route.h... $ECHO_C" >&6 +if test "${ac_cv_header_net_route_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_net_route_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_net_route_h" >&5 +echo "${ECHO_T}$ac_cv_header_net_route_h" >&6 + +fi +if test $ac_cv_header_net_route_h = yes; then + ncp_net_route_h="#include " +else + if test "${ac_cv_header_linux_route_h+set}" = set; then + echo "$as_me:$LINENO: checking for linux/route.h" >&5 +echo $ECHO_N "checking for linux/route.h... $ECHO_C" >&6 +if test "${ac_cv_header_linux_route_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_linux_route_h" >&5 +echo "${ECHO_T}$ac_cv_header_linux_route_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking linux/route.h usability" >&5 +echo $ECHO_N "checking linux/route.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking linux/route.h presence" >&5 +echo $ECHO_N "checking linux/route.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: linux/route.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: linux/route.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/route.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: linux/route.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: linux/route.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: linux/route.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/route.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: linux/route.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/route.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: linux/route.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for linux/route.h" >&5 +echo $ECHO_N "checking for linux/route.h... $ECHO_C" >&6 +if test "${ac_cv_header_linux_route_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_linux_route_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_linux_route_h" >&5 +echo "${ECHO_T}$ac_cv_header_linux_route_h" >&6 + +fi +if test $ac_cv_header_linux_route_h = yes; then + ncp_net_route_h="#include " +else + ncp_net_route_h="/* No route support... */" + +cat >>confdefs.h <<\_ACEOF +#define NO_NET_ROUTE_SUPPORT 1 +_ACEOF + + { { echo "$as_me:$LINENO: error: Neither nor does exist" >&5 +echo "$as_me: error: Neither nor does exist" >&2;} + { (exit 1); exit 1; }; } + +fi + + + +fi + + + + +ncp_if_ether_support="yes" +if test "${ac_cv_header_netinet_if_ether_h+set}" = set; then + echo "$as_me:$LINENO: checking for netinet/if_ether.h" >&5 +echo $ECHO_N "checking for netinet/if_ether.h... $ECHO_C" >&6 +if test "${ac_cv_header_netinet_if_ether_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_netinet_if_ether_h" >&5 +echo "${ECHO_T}$ac_cv_header_netinet_if_ether_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking netinet/if_ether.h usability" >&5 +echo $ECHO_N "checking netinet/if_ether.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking netinet/if_ether.h presence" >&5 +echo $ECHO_N "checking netinet/if_ether.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: netinet/if_ether.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: netinet/if_ether.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: netinet/if_ether.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: netinet/if_ether.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: netinet/if_ether.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: netinet/if_ether.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: netinet/if_ether.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: netinet/if_ether.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: netinet/if_ether.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: netinet/if_ether.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for netinet/if_ether.h" >&5 +echo $ECHO_N "checking for netinet/if_ether.h... $ECHO_C" >&6 +if test "${ac_cv_header_netinet_if_ether_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_netinet_if_ether_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_netinet_if_ether_h" >&5 +echo "${ECHO_T}$ac_cv_header_netinet_if_ether_h" >&6 + +fi + + +if test "$ac_cv_header_netinet_if_ether_h" = "no" +then + if test "${ac_cv_header_linux_if_ether_h+set}" = set; then + echo "$as_me:$LINENO: checking for linux/if_ether.h" >&5 +echo $ECHO_N "checking for linux/if_ether.h... $ECHO_C" >&6 +if test "${ac_cv_header_linux_if_ether_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_linux_if_ether_h" >&5 +echo "${ECHO_T}$ac_cv_header_linux_if_ether_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking linux/if_ether.h usability" >&5 +echo $ECHO_N "checking linux/if_ether.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking linux/if_ether.h presence" >&5 +echo $ECHO_N "checking linux/if_ether.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: linux/if_ether.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: linux/if_ether.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/if_ether.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: linux/if_ether.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: linux/if_ether.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: linux/if_ether.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/if_ether.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: linux/if_ether.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: linux/if_ether.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: linux/if_ether.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for linux/if_ether.h" >&5 +echo $ECHO_N "checking for linux/if_ether.h... $ECHO_C" >&6 +if test "${ac_cv_header_linux_if_ether_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_linux_if_ether_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_linux_if_ether_h" >&5 +echo "${ECHO_T}$ac_cv_header_linux_if_ether_h" >&6 + +fi + + + if test "$ac_cv_header_linux_if_ether_h" = "no" + then + ncp_if_ether_support="no" + fi +fi + + +if test "${ac_cv_header_sys_select_h+set}" = set; then + echo "$as_me:$LINENO: checking for sys/select.h" >&5 +echo $ECHO_N "checking for sys/select.h... $ECHO_C" >&6 +if test "${ac_cv_header_sys_select_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_sys_select_h" >&5 +echo "${ECHO_T}$ac_cv_header_sys_select_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking sys/select.h usability" >&5 +echo $ECHO_N "checking sys/select.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking sys/select.h presence" >&5 +echo $ECHO_N "checking sys/select.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: sys/select.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: sys/select.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/select.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: sys/select.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: sys/select.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: sys/select.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/select.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: sys/select.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: sys/select.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: sys/select.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for sys/select.h" >&5 +echo $ECHO_N "checking for sys/select.h... $ECHO_C" >&6 +if test "${ac_cv_header_sys_select_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_sys_select_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_sys_select_h" >&5 +echo "${ECHO_T}$ac_cv_header_sys_select_h" >&6 + +fi +if test $ac_cv_header_sys_select_h = yes; then + ncp_sys_select_h="#include " +else + ncp_sys_select_h="#include " + +fi + + + + +echo "$as_me:$LINENO: checking for C9X integer types" >&5 +echo $ECHO_N "checking for C9X integer types... $ECHO_C" >&6 +if test "${ncp_cv_c9x_stdint+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +int_least16_t sl16; +int_least32_t sl32; +uint_least16_t ul16; +uint_least32_t ul32; +int_fast16_t sf16; +int_fast32_t sf32; +uint_fast16_t uf16; +uint_fast32_t uf32 + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_c9x_stdint="yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ncp_cv_c9x_stdint="no" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ncp_cv_c9x_stdint" >&5 +echo "${ECHO_T}$ncp_cv_c9x_stdint" >&6 +if test "$ncp_cv_c9x_stdint" = "yes" +then + stdint_types="1" +else + stdint_types="0" +fi + + +if test "$USE_KERNEL" = "1" +then + if test "$ncp_sys_select_h" = "#include " + then + echo "$as_me:$LINENO: checking whether sys/select.h and linux/posix_types.h may both be included" >&5 +echo $ECHO_N "checking whether sys/select.h and linux/posix_types.h may both be included... $ECHO_C" >&6 +if test "${ncp_cv_posix_and_select+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +fd_set a; +select(0, &a, &a, &a, 0) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_posix_and_select="yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ncp_cv_posix_and_select="no" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ncp_cv_posix_and_select" >&5 +echo "${ECHO_T}$ncp_cv_posix_and_select" >&6 + else + ncp_cv_posix_and_select="yes" + fi + if test "$ncp_cv_posix_and_select" = "no" + then + { echo "$as_me:$LINENO: WARNING: sys/select.h and linux/posix_types.h cannot be included together, will not build kernel support" >&5 +echo "$as_me: WARNING: sys/select.h and linux/posix_types.h cannot be included together, will not build kernel support" >&2;} + USE_KERNEL=0 + fi +fi + +echo "$as_me:$LINENO: checking for third parameter to accept" >&5 +echo $ECHO_N "checking for third parameter to accept... $ECHO_C" >&6 +if test "${ncp_cv_socklen_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +socklen_t a; + accept(0, NULL, &a) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_socklen_t="socklen_t" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +int a; + accept(0, NULL, &a) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_socklen_t="int" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ncp_cv_socklen_t="unsigned int" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ncp_cv_socklen_t" >&5 +echo "${ECHO_T}$ncp_cv_socklen_t" >&6 +if test "$ncp_cv_socklen_t" = "socklen_t" +then + socklen_t="/* socklen_t is defined by libc */" +else + socklen_t="typedef $ncp_cv_socklen_t socklen_t;" +fi + + +echo "$as_me:$LINENO: checking for wchar_t" >&5 +echo $ECHO_N "checking for wchar_t... $ECHO_C" >&6 +if test "${ac_cv_type_wchar_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((wchar_t *) 0) + return 0; +if (sizeof (wchar_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_wchar_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_wchar_t=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_wchar_t" >&5 +echo "${ECHO_T}$ac_cv_type_wchar_t" >&6 +if test $ac_cv_type_wchar_t = yes; then + : +else + +cat >>confdefs.h <<\_ACEOF +#define wchar_t unsigned int +_ACEOF + +fi + + + +for ac_header in wchar.h iconv.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +if test "$ac_cv_header_wchar_h" = "yes" +then + wchar_h="#include " +else + wchar_h="/* no wchar_h header... */" +fi + + +if test "$ac_cv_header_iconv_h" = "yes" +then + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + echo "$as_me:$LINENO: checking for iconv" >&5 +echo $ECHO_N "checking for iconv... $ECHO_C" >&6 +if test "${am_cv_func_iconv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_func_iconv=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5 +echo "${ECHO_T}$am_cv_func_iconv" >&6 + if test "$am_cv_func_iconv" = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ICONV 1 +_ACEOF + + fi + if test "$am_cv_lib_iconv" = yes; then + echo "$as_me:$LINENO: checking how to link with libiconv" >&5 +echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: $LIBICONV" >&5 +echo "${ECHO_T}$LIBICONV" >&6 + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + if test "$am_cv_func_iconv" = yes; then + echo "$as_me:$LINENO: checking for iconv declaration" >&5 +echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6 + if test "${am_cv_proto_iconv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_proto_iconv_arg1="" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +am_cv_proto_iconv_arg1="const" +fi +rm -f conftest.$ac_objext conftest.$ac_ext + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" +fi + + am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + echo "$as_me:$LINENO: result: ${ac_t:- + }$am_cv_proto_iconv" >&5 +echo "${ECHO_T}${ac_t:- + }$am_cv_proto_iconv" >&6 + +cat >>confdefs.h <<_ACEOF +#define ICONV_CONST $am_cv_proto_iconv_arg1 +_ACEOF + + fi + +fi + + +echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 +if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset x; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *ccp; + char **p; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + ccp = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++ccp; + p = (char**) ccp; + ccp = (char const *const *) p; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + } +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_const=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_c_const=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6 +if test $ac_cv_c_const = no; then + +cat >>confdefs.h <<\_ACEOF +#define const +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for uid_t in sys/types.h" >&5 +echo $ECHO_N "checking for uid_t in sys/types.h... $ECHO_C" >&6 +if test "${ac_cv_type_uid_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "uid_t" >/dev/null 2>&1; then + ac_cv_type_uid_t=yes +else + ac_cv_type_uid_t=no +fi +rm -f conftest* + +fi +echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5 +echo "${ECHO_T}$ac_cv_type_uid_t" >&6 +if test $ac_cv_type_uid_t = no; then + +cat >>confdefs.h <<\_ACEOF +#define uid_t int +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define gid_t int +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for inline" >&5 +echo $ECHO_N "checking for inline... $ECHO_C" >&6 +if test "${ac_cv_c_inline+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_c_inline=$ac_kw; break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 +echo "${ECHO_T}$ac_cv_c_inline" >&6 +case $ac_cv_c_inline in + inline | yes) ;; + no) +cat >>confdefs.h <<\_ACEOF +#define inline +_ACEOF + ;; + *) cat >>confdefs.h <<_ACEOF +#define inline $ac_cv_c_inline +_ACEOF + ;; +esac + +echo "$as_me:$LINENO: checking for mode_t" >&5 +echo $ECHO_N "checking for mode_t... $ECHO_C" >&6 +if test "${ac_cv_type_mode_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((mode_t *) 0) + return 0; +if (sizeof (mode_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_mode_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_mode_t=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_mode_t" >&5 +echo "${ECHO_T}$ac_cv_type_mode_t" >&6 +if test $ac_cv_type_mode_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define mode_t int +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for off_t" >&5 +echo $ECHO_N "checking for off_t... $ECHO_C" >&6 +if test "${ac_cv_type_off_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((off_t *) 0) + return 0; +if (sizeof (off_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_off_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_off_t=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 +echo "${ECHO_T}$ac_cv_type_off_t" >&6 +if test $ac_cv_type_off_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define off_t long +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for pid_t" >&5 +echo $ECHO_N "checking for pid_t... $ECHO_C" >&6 +if test "${ac_cv_type_pid_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((pid_t *) 0) + return 0; +if (sizeof (pid_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_pid_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_pid_t=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5 +echo "${ECHO_T}$ac_cv_type_pid_t" >&6 +if test $ac_cv_type_pid_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF + +fi + +echo "$as_me:$LINENO: checking for size_t" >&5 +echo $ECHO_N "checking for size_t... $ECHO_C" >&6 +if test "${ac_cv_type_size_t+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +if ((size_t *) 0) + return 0; +if (sizeof (size_t)) + return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_type_size_t=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_type_size_t=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 +echo "${ECHO_T}$ac_cv_type_size_t" >&6 +if test $ac_cv_type_size_t = yes; then + : +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned +_ACEOF + +fi + +echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 +echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 +if test "${ac_cv_header_time+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include + +int +main () +{ +if ((struct tm *) 0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_time=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_time=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 +echo "${ECHO_T}$ac_cv_header_time" >&6 +if test $ac_cv_header_time = yes; then + +cat >>confdefs.h <<\_ACEOF +#define TIME_WITH_SYS_TIME 1 +_ACEOF + +fi + +echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 +echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6 +if test "${ac_cv_struct_tm+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include + +int +main () +{ +struct tm *tp; tp->tm_sec; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_struct_tm=time.h +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_struct_tm=sys/time.h +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 +echo "${ECHO_T}$ac_cv_struct_tm" >&6 +if test $ac_cv_struct_tm = sys/time.h; then + +cat >>confdefs.h <<\_ACEOF +#define TM_IN_SYS_TIME 1 +_ACEOF + +fi + + +if test $ac_cv_c_compiler_gnu = yes; then + echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5 +echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6 +if test "${ac_cv_prog_gcc_traditional+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_pattern="Autoconf.*'x'" + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +Autoconf TIOCGETP +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "$ac_pattern" >/dev/null 2>&1; then + ac_cv_prog_gcc_traditional=yes +else + ac_cv_prog_gcc_traditional=no +fi +rm -f conftest* + + + if test $ac_cv_prog_gcc_traditional = no; then + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +Autoconf TCGETA +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "$ac_pattern" >/dev/null 2>&1; then + ac_cv_prog_gcc_traditional=yes +fi +rm -f conftest* + + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5 +echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6 + if test $ac_cv_prog_gcc_traditional = yes; then + CC="$CC -traditional" + fi +fi + + + + + + + + + +for ac_func in wcslen wcscpy wcsdup wcscmp wcsncmp wcscasecmp wcsncasecmp wcsrev +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ +#ifdef __STDC__ +# include +#else +# include +#endif +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +if test "$PAM" = "1" +then + if test "${ac_cv_header_security_pam_appl_h+set}" = set; then + echo "$as_me:$LINENO: checking for security/pam_appl.h" >&5 +echo $ECHO_N "checking for security/pam_appl.h... $ECHO_C" >&6 +if test "${ac_cv_header_security_pam_appl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: $ac_cv_header_security_pam_appl_h" >&5 +echo "${ECHO_T}$ac_cv_header_security_pam_appl_h" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking security/pam_appl.h usability" >&5 +echo $ECHO_N "checking security/pam_appl.h usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking security/pam_appl.h presence" >&5 +echo $ECHO_N "checking security/pam_appl.h presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc in + yes:no ) + { echo "$as_me:$LINENO: WARNING: security/pam_appl.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: security/pam_appl.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: security/pam_appl.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: security/pam_appl.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; + no:yes ) + { echo "$as_me:$LINENO: WARNING: security/pam_appl.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: security/pam_appl.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: security/pam_appl.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: security/pam_appl.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: security/pam_appl.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: security/pam_appl.h: proceeding with the preprocessor's result" >&2;} + ( + cat <<\_ASBOX +## ------------------------------------ ## +## Report this to bug-autoconf@gnu.org. ## +## ------------------------------------ ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for security/pam_appl.h" >&5 +echo $ECHO_N "checking for security/pam_appl.h... $ECHO_C" >&6 +if test "${ac_cv_header_security_pam_appl_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_security_pam_appl_h=$ac_header_preproc +fi +echo "$as_me:$LINENO: result: $ac_cv_header_security_pam_appl_h" >&5 +echo "${ECHO_T}$ac_cv_header_security_pam_appl_h" >&6 + +fi + + + if test "$ac_cv_header_security_pam_appl_h" = "yes" ; then + if test "$pam_path_forced" = ""; then + echo "$as_me:$LINENO: checking for pam modules directory" >&5 +echo $ECHO_N "checking for pam modules directory... $ECHO_C" >&6 +if test "${ncp_cv_pam_directory+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -d /lib/security ; then + ncp_cv_pam_directory=/lib/security + else if test -d /usr/lib/security ; then + ncp_cv_pam_directory=/usr/lib/security + else if test -d /usr/local/lib/security ; then + ncp_cv_pam_directory=/usr/local/lib/security + else + ncp_cv_pam_directory=/lib/security + fi; fi; fi + +fi +echo "$as_me:$LINENO: result: $ncp_cv_pam_directory" >&5 +echo "${ECHO_T}$ncp_cv_pam_directory" >&6 + else + ncp_cv_pam_directory="$pam_path_forced" + fi + LIB_PAM_SECURITY=$ncp_cv_pam_directory + + + ADDON_DEV_SUBDIRS="$ADDON_DEV_SUBDIRS contrib/pam" + else + if test "$pam_forced" = "yes" + then + { { echo "$as_me:$LINENO: error: Cannot build PAM module because of PAM headers are not installed" >&5 +echo "$as_me: error: Cannot build PAM module because of PAM headers are not installed" >&2;} + { (exit 1); exit 1; }; } + fi + PAM=0 + fi +fi + +if test "$PHP" = "yes" +then + php_path_config="$php_path_forced" + if test "$php_path_config" = "" + then + php_path_config=php-config + fi + case "$php_path_config" in + /*) echo "$as_me:$LINENO: checking for $php_path_config" >&5 +echo $ECHO_N "checking for $php_path_config... $ECHO_C" >&6 + if test -r "$php_path_config" + then + php_found=yes + else + php_found=no + fi + echo "$as_me:$LINENO: result: $php_found" >&5 +echo "${ECHO_T}$php_found" >&6 + ;; + *) # Extract the first word of "$php_path_config", so it can be a program name with args. +set dummy $php_path_config; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_php_found+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$php_found"; then + ac_cv_prog_php_found="$php_found" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_php_found="yes" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_php_found" && ac_cv_prog_php_found="no" +fi +fi +php_found=$ac_cv_prog_php_found +if test -n "$php_found"; then + echo "$as_me:$LINENO: result: $php_found" >&5 +echo "${ECHO_T}$php_found" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + ;; + esac + if test "$php_found" = "yes" + then + ADDON_SUBDIRS="$ADDON_SUBDIRS contrib/php" + else + if test "$php_forced" = "yes" + then + { { echo "$as_me:$LINENO: error: Cannot build PHP module because of $php_path_config is not available" >&5 +echo "$as_me: error: Cannot build PHP module because of $php_path_config is not available" >&2;} + { (exit 1); exit 1; }; } + fi + php_path_config="" + fi +fi + +if test "$NDS_SUPPORT" = "1" +then + echo "$as_me:$LINENO: checking for mpilib word size" >&5 +echo $ECHO_N "checking for mpilib word size... $ECHO_C" >&6 +if test "${ncp_cv_mpilib_unit+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$host_cpu" in + i?86|ia32) ncp_cv_mpilib_unit="32";; + *) ncp_cv_mpilib_unit="8"; + esac + +fi +echo "$as_me:$LINENO: result: $ncp_cv_mpilib_unit" >&5 +echo "${ECHO_T}$ncp_cv_mpilib_unit" >&6 + +cat >>confdefs.h <<_ACEOF +#define UNITSIZE $ncp_cv_mpilib_unit +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define MULTUNITSIZE $ncp_cv_mpilib_unit +_ACEOF + +fi + +if test "$REENTRANT" != "0" +then + echo "$as_me:$LINENO: checking for working pthread support" >&5 +echo $ECHO_N "checking for working pthread support... $ECHO_C" >&6 +if test "${ncp_cv_pthread+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +pthread_mutex_t a; + pthread_once_t b; + pthread_mutex_init(&a, NULL); + pthread_mutex_lock(&a); + pthread_mutex_unlock(&a); + pthread_mutex_destroy(&a) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_pthread="yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ncp_cv_pthread="no" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + if test "$ncp_cv_pthread" = "no" + then + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#define _MIT_POSIX_THREADS 1 +#include +#include +int +main () +{ +pthread_mutex_t a; + pthread_once_t b; + pthread_mutex_init(&a, NULL); + pthread_mutex_lock(&a); + pthread_mutex_unlock(&a); + pthread_mutex_destroy(&a) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_pthread="MIT Posix threads needed" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ncp_cv_pthread="no" + +fi +rm -f conftest.$ac_objext conftest.$ac_ext + fi + +fi +echo "$as_me:$LINENO: result: $ncp_cv_pthread" >&5 +echo "${ECHO_T}$ncp_cv_pthread" >&6 + case "$ncp_cv_pthread" in +no) if test "$reentrant_forced" = "yes" + then + { { echo "$as_me:$LINENO: error: Cannot build threading libraries without working pthread support" >&5 +echo "$as_me: error: Cannot build threading libraries without working pthread support" >&2;} + { (exit 1); exit 1; }; } + fi + REENTRANT=0 + ;; +MIT*) +cat >>confdefs.h <<\_ACEOF +#define _MIT_POSIX_THREADS 1 +_ACEOF + + ;; + esac +fi +if test "$REENTRANT" != "0" +then + echo "$as_me:$LINENO: checking for working weak symbols" >&5 +echo $ECHO_N "checking for working weak symbols... $ECHO_C" >&6 +if test "${ncp_cv_weak_symbols+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#pragma weak pthread_mutex_lock +int +main () +{ +pthread_mutex_t a; + pthread_mutex_lock(&a) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_weak_symbols="yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ncp_cv_weak_symbols="no" + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + +fi +echo "$as_me:$LINENO: result: $ncp_cv_weak_symbols" >&5 +echo "${ECHO_T}$ncp_cv_weak_symbols" >&6 + if test "$ncp_cv_weak_symbols" = "no" + then + if test "$reentrant_forced" = "yes" + then + { { echo "$as_me:$LINENO: error: Cannot build threading libraries without working weak imports" >&5 +echo "$as_me: error: Cannot build threading libraries without working weak imports" >&2;} + { (exit 1); exit 1; }; } + fi + REENTRANT=0 + fi +fi +if test "$REENTRANT" = "0" +then + REENTRANT_CFLAGS="" + + ncphost=none + ncphosttested=yes +else + REENTRANT_CFLAGS="-D_REENTRANT" + + ncphost=generic + ncphosttested=yes + case "$host" in +1750a-*) ;; +580-*) ;; +cjt90-*) ;; +a29k-*) ;; +alpha-*) ncphost=alpha; ncphosttested=no ;; +alphaev56-*) ncphost=alpha; ncphosttested=no ;; +alphaev678-*) ncphost=alpha; ncphosttested=no ;; +alphaev4-8-*) ncphost=alpha; ncphosttested=no ;; +alphapca567-*) ncphost=alpha; ncphosttested=no ;; +arc-*) ;; +arm-*) ;; +armbe-*) ;; +armle-*) ;; +armv*-*) ;; +avr-*) ;; +bs2000-*) ;; +c30-*) ;; +c4x-*) ;; +c54x-*) ;; +c123*) ;; +clipper-*) ;; +cray2-*) ;; +cris-*) ;; +cydra-*) ;; +d10v-*) ;; +d30v-*) ;; +dsp16xx-*) ;; +elxsi-*) ;; +f3001-*) ;; +f700-*) ;; +fr30-*) ;; +fx80-*) ;; +h8300-*) ;; +h8500-*) ;; +hppa-*) ;; +hppa1.0-*) ;; +hppa1.1-*) ;; +hppa2.0-*) ;; +hppa2.0n-*) ;; +hppa2.0w-*) ;; +hppa64-*) ;; +i*86-*) ncphost=i386; ncphosttested=yes ;; +i370-*) ;; +i860-*) ;; +i960-*) ;; +ia64-*) ;; +m32r-*) ;; +m5200-*) ;; +m6800123460-*) ncphost=m68k; ncphosttested=no ;; +m68112-*) ;; +m68360-*) ;; +m683?2-*) ;; +m68hc112-*) ;; +m68k-*) ncphost=m68k; ncphosttested=no ;; +m88110-*) ;; +m88k-*) ;; +mcore-*) ;; +mips-*) ncphost=mips; ncphosttested=no ;; +mips16-*) ;; +mips64*-*) ncphost=mips64; ncphosttested=no ;; +mipsbe-*) ncphost=mips; ncphosttested=no ;; +mipsel-*) ncphost=mips; ncphosttested=no ;; +mipsle-*) ncphost=mips; ncphosttested=no ;; +mipstx39-*) ;; +mipstx39el-*) ;; +mmix-*) ;; +mn102300-*) ;; +none-*) ;; +np1-*) ;; +ns16k-*) ;; +ns32k-*) ;; +nsr-*) ;; +openrisc-*) ;; +orion-*) ;; +pdp10-*) ;; +pdp11-*) ;; +pj-*) ;; +pjl-*) ;; +pn-*) ;; +power-*) ;; +powerpc-*) ncphost=ppc; ncphosttested=no ;; +powerpcle-*) ncphost=ppc; ncphosttested=no ;; +ppcbe-*) ;; +pyramid-*) ;; +romp-*) ;; +rs6000-*) ;; +s390-*) ;; +s390x-*) ;; +sh-*) ;; +sh34-*) ;; +sh34eb-*) ;; +shbe-*) ;; +shle-*) ;; +sparc-*) ;; +sparc64-*) ;; +sparc86x-*) ;; +sparclet-*) ;; +sparclite-*) ;; +sparcv9-*) ;; +sparcv9b-*) ;; +spur-*) ;; +strongarm-*) ;; +sv1-*) ;; +t3e-*) ;; +tahoe-*) ;; +thumb-*) ;; +tic30-*) ;; +tic54x-*) ;; +tic80-*) ;; +tron-*) ;; +v70-*) ;; +v810-*) ;; +v850-*) ;; +vax-*) ;; +w65-*) ;; +we32k-*) ;; +x86-*) ncphost=i386; ncphosttested=yes ;; +x86_64-*) ;; +xmp-*) ;; +xps100-*) ;; +xscale-*) ;; +ymp-*) ;; +z8k-*) ;; +esac + echo "$as_me:$LINENO: checking for working atomic operations" >&5 +echo $ECHO_N "checking for working atomic operations... $ECHO_C" >&6 +if test "${ncp_cv_asm_atomic_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test "$ncp_cv_asm_atomic_h" = "generic" + then + ncp_cv_asm_atomic_h="pthread based" + else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include "include/private/asm-$ncphost/atomic.h" +int +main () +{ +ncpt_atomic_t a; + ncpt_atomic_set(&a,2); + ncpt_atomic_dec(&a); + if (ncpt_atomic_read(&a)) { + if (!ncpt_atomic_dec_and_test(&a)) { + ncpt_atomic_inc(&a); + } + } + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ncp_cv_asm_atomic_h="optimized" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ncp_cv_asm_atomic_h="falling back to pthread based" + ncphost=generic + ncphosttested=yes + + +fi +rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext + fi + +fi +echo "$as_me:$LINENO: result: $ncp_cv_asm_atomic_h" >&5 +echo "${ECHO_T}$ncp_cv_asm_atomic_h" >&6 + if test "$ncp_cv_asm_atomic_h" = "falling back to pthread based" + then + ncphost=generic + ncphosttested=yes + fi +fi + + + +echo "$as_me:$LINENO: checking for ELF target" >&5 +echo $ECHO_N "checking for ELF target... $ECHO_C" >&6 +if test "${ncp_cv_elf_target+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ncp_cv_elf_target=no + cat >conftest.c </dev/null 2>&1 + then + (file conftest | grep ELF >/dev/null 2>&1) && ncp_cv_elf_target=yes + fi + rm -f conftest* + + +fi +echo "$as_me:$LINENO: result: $ncp_cv_elf_target" >&5 +echo "${ECHO_T}$ncp_cv_elf_target" >&6 +ELF_TARGET="$ncp_cv_elf_target" + + +FFUNCTION_SECTIONS="" +GC_SECTIONS="" +if test "$function_sections" = "yes" +then + echo "$as_me:$LINENO: checking for function sections" >&5 +echo $ECHO_N "checking for function sections... $ECHO_C" >&6 +if test "${ncp_cv_function_sections+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ncp_cv_function_sections=no + cat >conftest.c </dev/null 2>&1 + then + ncp_cv_function_sections=yes + fi + rm -f conftest* + + +fi +echo "$as_me:$LINENO: result: $ncp_cv_function_sections" >&5 +echo "${ECHO_T}$ncp_cv_function_sections" >&6 + if test "$ncp_cv_function_sections" = "no" + then + if test "$function_sections_forced" = "yes" + then + { { echo "$as_me:$LINENO: error: Your compiler does not support -ffunction-sections or -fdata-sections or your linker does not support --gc-sections. Please reconfigure without --enable-function-sections." >&5 +echo "$as_me: error: Your compiler does not support -ffunction-sections or -fdata-sections or your linker does not support --gc-sections. Please reconfigure without --enable-function-sections." >&2;} + { (exit 1); exit 1; }; } + fi + fi + function_sections="$ncp_cv_function_sections" +fi +if test "$function_sections" = "yes" +then + FFUNCTION_SECTIONS="-ffunction-sections -fdata-sections " + GC_SECTIONS="-Wl,--gc-sections " +fi + +if test "$VERSIONED_LINK" = "yes" +then + echo "$as_me:$LINENO: checking for working versioned link" >&5 +echo $ECHO_N "checking for working versioned link... $ECHO_C" >&6 +if test "${ncp_cv_versioned_link+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ncp_cv_versioned_link=no + cat >conftest.vers <conftest.c </dev/null 2>&1 + then + ncp_cv_versioned_link=yes + fi + +fi +echo "$as_me:$LINENO: result: $ncp_cv_versioned_link" >&5 +echo "${ECHO_T}$ncp_cv_versioned_link" >&6 + rm -f conftest.c conftest.vers conftest.so + if test "$ncp_cv_versioned_link" = "no" + then + if test "$versions_forced" = "yes" + then + { { echo "$as_me:$LINENO: error: Cannot use versioned symbols in your environment" >&5 +echo "$as_me: error: Cannot use versioned symbols in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + VERSIONED_LINK=no + fi +fi + + +if test "$USE_KERNEL" = "0" +then + MOUNT2=0 + MOUNT3=0 +else + +cat >>confdefs.h <<\_ACEOF +#define USE_KERNEL 1 +_ACEOF + +fi +if test "$MOUNT2" = "1" +then + +cat >>confdefs.h <<\_ACEOF +#define MOUNT2 1 +_ACEOF + +fi +if test "$MOUNT3" = "1" +then + +cat >>confdefs.h <<\_ACEOF +#define MOUNT3 1 +_ACEOF + +fi +if test "$PROTOCOL_IP" = "0" +then + ncp_in_support="#undef NCP_IN_SUPPORT" +else + ncp_in_support="#define NCP_IN_SUPPORT" +fi +if test "$PROTOCOL_IPX" = "0" +then + ncp_ipx_support="#undef NCP_IPX_SUPPORT" +else + ncp_ipx_support="#define NCP_IPX_SUPPORT" +fi + + + +ADDON_SUBDIRS="$ADDON_SUBDIRS $ADDON_DEV_SUBDIRS" + + + + + + + + + + + + ac_config_files="$ac_config_files Make.rules Makefile lib/Makefile man/Makefile util/Makefile sutil/Makefile ipx-1.0/Makefile ipx-1.0/Samples/Makefile ipxdump/Makefile contrib/tknwmsg/Makefile contrib/testing/Makefile contrib/testing/pp/Makefile contrib/tcl-utils/Makefile contrib/tests/Makefile intl/Makefile po/Makefile.in contrib/pam/Makefile contrib/php/Makefile.in" + + ac_config_files="$ac_config_files include/private/libncp-atomic.h.tmp:include/private/libncp-atomic.h.in include/ncp/nwnet.h.tmp:include/ncp/nwnet.h.in include/ncp/ext/stdint.h.tmp:include/ncp/ext/stdint.h.in include/ncp/ext/socket.h.tmp:include/ncp/ext/socket.h.in include/ncp/kernel/fs.h.tmp:include/ncp/kernel/fs.h.in include/ncp/kernel/if.h.tmp:include/ncp/kernel/if.h.in include/ncp/kernel/ipx.h.tmp:include/ncp/kernel/ipx.h.in include/ncp/kernel/route.h.tmp:include/ncp/kernel/route.h.in include/ncp/kernel/types.h.tmp:include/ncp/kernel/types.h.in" + +if test "$php_path_config" != "" +then + if test "$with_php_config" = "yes" + then + { { echo "$as_me:$LINENO: error: Current PHP configure does not handle --with-php-config correctly. Use --with-php-config=php-config instead." >&5 +echo "$as_me: error: Current PHP configure does not handle --with-php-config correctly. Use --with-php-config=php-config instead." >&2;} + { (exit 1); exit 1; }; } + fi + + +subdirs="$subdirs contrib/php" + +fi +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by ncpfs $as_me 2.2.1, which was +generated by GNU Autoconf 2.57. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +ncpfs config.status 2.2.1 +configured by $0, generated by GNU Autoconf 2.57, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS section. +# + +# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it + # from automake. + eval 'ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + + +_ACEOF + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Make.rules" ) CONFIG_FILES="$CONFIG_FILES Make.rules" ;; + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; + "man/Makefile" ) CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; + "util/Makefile" ) CONFIG_FILES="$CONFIG_FILES util/Makefile" ;; + "sutil/Makefile" ) CONFIG_FILES="$CONFIG_FILES sutil/Makefile" ;; + "ipx-1.0/Makefile" ) CONFIG_FILES="$CONFIG_FILES ipx-1.0/Makefile" ;; + "ipx-1.0/Samples/Makefile" ) CONFIG_FILES="$CONFIG_FILES ipx-1.0/Samples/Makefile" ;; + "ipxdump/Makefile" ) CONFIG_FILES="$CONFIG_FILES ipxdump/Makefile" ;; + "contrib/tknwmsg/Makefile" ) CONFIG_FILES="$CONFIG_FILES contrib/tknwmsg/Makefile" ;; + "contrib/testing/Makefile" ) CONFIG_FILES="$CONFIG_FILES contrib/testing/Makefile" ;; + "contrib/testing/pp/Makefile" ) CONFIG_FILES="$CONFIG_FILES contrib/testing/pp/Makefile" ;; + "contrib/tcl-utils/Makefile" ) CONFIG_FILES="$CONFIG_FILES contrib/tcl-utils/Makefile" ;; + "contrib/tests/Makefile" ) CONFIG_FILES="$CONFIG_FILES contrib/tests/Makefile" ;; + "intl/Makefile" ) CONFIG_FILES="$CONFIG_FILES intl/Makefile" ;; + "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "contrib/pam/Makefile" ) CONFIG_FILES="$CONFIG_FILES contrib/pam/Makefile" ;; + "contrib/php/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES contrib/php/Makefile.in" ;; + "include/private/libncp-atomic.h.tmp" ) CONFIG_FILES="$CONFIG_FILES include/private/libncp-atomic.h.tmp:include/private/libncp-atomic.h.in" ;; + "include/ncp/nwnet.h.tmp" ) CONFIG_FILES="$CONFIG_FILES include/ncp/nwnet.h.tmp:include/ncp/nwnet.h.in" ;; + "include/ncp/ext/stdint.h.tmp" ) CONFIG_FILES="$CONFIG_FILES include/ncp/ext/stdint.h.tmp:include/ncp/ext/stdint.h.in" ;; + "include/ncp/ext/socket.h.tmp" ) CONFIG_FILES="$CONFIG_FILES include/ncp/ext/socket.h.tmp:include/ncp/ext/socket.h.in" ;; + "include/ncp/kernel/fs.h.tmp" ) CONFIG_FILES="$CONFIG_FILES include/ncp/kernel/fs.h.tmp:include/ncp/kernel/fs.h.in" ;; + "include/ncp/kernel/if.h.tmp" ) CONFIG_FILES="$CONFIG_FILES include/ncp/kernel/if.h.tmp:include/ncp/kernel/if.h.in" ;; + "include/ncp/kernel/ipx.h.tmp" ) CONFIG_FILES="$CONFIG_FILES include/ncp/kernel/ipx.h.tmp:include/ncp/kernel/ipx.h.in" ;; + "include/ncp/kernel/route.h.tmp" ) CONFIG_FILES="$CONFIG_FILES include/ncp/kernel/route.h.tmp:include/ncp/kernel/route.h.in" ;; + "include/ncp/kernel/types.h.tmp" ) CONFIG_FILES="$CONFIG_FILES include/ncp/kernel/types.h.tmp:include/ncp/kernel/types.h.in" ;; + "gettext" ) CONFIG_COMMANDS="$CONFIG_COMMANDS gettext" ;; + "include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@CC_WARNINGS@,$CC_WARNINGS,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@LN_S@,$LN_S,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t +s,@MSGFMT@,$MSGFMT,;t t +s,@GMSGFMT@,$GMSGFMT,;t t +s,@XGETTEXT@,$XGETTEXT,;t t +s,@MSGMERGE@,$MSGMERGE,;t t +s,@RANLIB@,$RANLIB,;t t +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t +s,@CPP@,$CPP,;t t +s,@EGREP@,$EGREP,;t t +s,@ALLOCA@,$ALLOCA,;t t +s,@GLIBC21@,$GLIBC21,;t t +s,@LIBICONV@,$LIBICONV,;t t +s,@LTLIBICONV@,$LTLIBICONV,;t t +s,@INTLBISON@,$INTLBISON,;t t +s,@USE_NLS@,$USE_NLS,;t t +s,@BUILD_INCLUDED_LIBINTL@,$BUILD_INCLUDED_LIBINTL,;t t +s,@USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t +s,@CATOBJEXT@,$CATOBJEXT,;t t +s,@INTLOBJS@,$INTLOBJS,;t t +s,@DATADIRNAME@,$DATADIRNAME,;t t +s,@INSTOBJEXT@,$INSTOBJEXT,;t t +s,@GENCAT@,$GENCAT,;t t +s,@INTL_LIBTOOL_SUFFIX_PREFIX@,$INTL_LIBTOOL_SUFFIX_PREFIX,;t t +s,@INTLLIBS@,$INTLLIBS,;t t +s,@LIBINTL@,$LIBINTL,;t t +s,@LTLIBINTL@,$LTLIBINTL,;t t +s,@POSUB@,$POSUB,;t t +s,@localedir@,$localedir,;t t +s,@ncp_ipx_headers_1@,$ncp_ipx_headers_1,;t t +s,@ncp_ipx_headers_2@,$ncp_ipx_headers_2,;t t +s,@ncp_ipx_defsiocprotoprivate@,$ncp_ipx_defsiocprotoprivate,;t t +s,@ncp_ipx_defsiocaipx@,$ncp_ipx_defsiocaipx,;t t +s,@ncp_sys_mount_h@,$ncp_sys_mount_h,;t t +s,@ncp_linux_fs_h@,$ncp_linux_fs_h,;t t +s,@ncp_net_if_h@,$ncp_net_if_h,;t t +s,@ncp_net_route_h@,$ncp_net_route_h,;t t +s,@ncp_if_ether_support@,$ncp_if_ether_support,;t t +s,@ncp_sys_select_h@,$ncp_sys_select_h,;t t +s,@stdint_types@,$stdint_types,;t t +s,@socklen_t@,$socklen_t,;t t +s,@wchar_h@,$wchar_h,;t t +s,@LIB_PAM_SECURITY@,$LIB_PAM_SECURITY,;t t +s,@php_found@,$php_found,;t t +s,@REENTRANT_CFLAGS@,$REENTRANT_CFLAGS,;t t +s,@ncphost@,$ncphost,;t t +s,@ELF_TARGET@,$ELF_TARGET,;t t +s,@VERSIONED_LINK@,$VERSIONED_LINK,;t t +s,@ncp_in_support@,$ncp_in_support,;t t +s,@ncp_ipx_support@,$ncp_ipx_support,;t t +s,@NDS_SUPPORT@,$NDS_SUPPORT,;t t +s,@SIGNATURES@,$SIGNATURES,;t t +s,@MOUNT2@,$MOUNT2,;t t +s,@MOUNT3@,$MOUNT3,;t t +s,@USE_KERNEL@,$USE_KERNEL,;t t +s,@ADDON_SUBDIRS@,$ADDON_SUBDIRS,;t t +s,@ADDON_DEV_SUBDIRS@,$ADDON_DEV_SUBDIRS,;t t +s,@FFUNCTION_SECTIONS@,$FFUNCTION_SECTIONS,;t t +s,@GC_SECTIONS@,$GC_SECTIONS,;t t +s,@subdirs@,$subdirs,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + + # Run the commands associated with the file. + case $ac_file in + include/private/libncp-atomic.h.tmp ) +my_file=`echo "$ac_file" | sed 's,\.tmp$,,'` +if cmp -s "$my_file" "$ac_file" +then +echo "$as_me: $my_file is unchanged" +rm -f "$ac_file" +else +mv "$ac_file" "$my_file" +fi + ;; + include/ncp/nwnet.h.tmp ) +my_file=`echo "$ac_file" | sed 's,\.tmp$,,'` +if cmp -s "$my_file" "$ac_file" +then +echo "$as_me: $my_file is unchanged" +rm -f "$ac_file" +else +mv "$ac_file" "$my_file" +fi + ;; + include/ncp/ext/stdint.h.tmp ) +my_file=`echo "$ac_file" | sed 's,\.tmp$,,'` +if cmp -s "$my_file" "$ac_file" +then +echo "$as_me: $my_file is unchanged" +rm -f "$ac_file" +else +mv "$ac_file" "$my_file" +fi + ;; + include/ncp/ext/socket.h.tmp ) +my_file=`echo "$ac_file" | sed 's,\.tmp$,,'` +if cmp -s "$my_file" "$ac_file" +then +echo "$as_me: $my_file is unchanged" +rm -f "$ac_file" +else +mv "$ac_file" "$my_file" +fi + ;; + include/ncp/kernel/fs.h.tmp ) +my_file=`echo "$ac_file" | sed 's,\.tmp$,,'` +if cmp -s "$my_file" "$ac_file" +then +echo "$as_me: $my_file is unchanged" +rm -f "$ac_file" +else +mv "$ac_file" "$my_file" +fi + ;; + include/ncp/kernel/if.h.tmp ) +my_file=`echo "$ac_file" | sed 's,\.tmp$,,'` +if cmp -s "$my_file" "$ac_file" +then +echo "$as_me: $my_file is unchanged" +rm -f "$ac_file" +else +mv "$ac_file" "$my_file" +fi + ;; + include/ncp/kernel/ipx.h.tmp ) +my_file=`echo "$ac_file" | sed 's,\.tmp$,,'` +if cmp -s "$my_file" "$ac_file" +then +echo "$as_me: $my_file is unchanged" +rm -f "$ac_file" +else +mv "$ac_file" "$my_file" +fi + ;; + include/ncp/kernel/route.h.tmp ) +my_file=`echo "$ac_file" | sed 's,\.tmp$,,'` +if cmp -s "$my_file" "$ac_file" +then +echo "$as_me: $my_file is unchanged" +rm -f "$ac_file" +else +mv "$ac_file" "$my_file" +fi + ;; + include/ncp/kernel/types.h.tmp ) +my_file=`echo "$ac_file" | sed 's,\.tmp$,,'` +if cmp -s "$my_file" "$ac_file" +then +echo "$as_me: $my_file is unchanged" +rm -f "$ac_file" +else +mv "$ac_file" "$my_file" +fi + ;; + esac +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_dir=`(dirname "$ac_dest") 2>/dev/null || +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_dest" : 'X\(//\)[^/]' \| \ + X"$ac_dest" : 'X\(//\)$' \| \ + X"$ac_dest" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_dest" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +echo "$as_me: executing $ac_dest commands" >&6;} + case $ac_dest in + gettext ) + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + fi + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + GMOFILES= + UPDATEPOFILES= + DUMMYPOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done ;; + esac +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + +# +# CONFIG_SUBDIRS section. +# +if test "$no_recursion" != yes; then + + # Remove --cache-file and --srcdir arguments so they do not pile up. + ac_sub_configure_args= + ac_prev= + for ac_arg in $ac_configure_args; do + if test -n "$ac_prev"; then + ac_prev= + continue + fi + case $ac_arg in + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ + | --c=*) + ;; + --config-cache | -C) + ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + ;; + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + ;; + *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;; + esac + done + + # Always prepend --prefix to ensure using the same prefix + # in subdir configurations. + ac_sub_configure_args="--prefix=$prefix $ac_sub_configure_args" + + ac_popdir=`pwd` + for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue + + # Do not complain, so a configure script can configure whichever + # parts of a large source tree are present. + test -d $srcdir/$ac_dir || continue + + { echo "$as_me:$LINENO: configuring in $ac_dir" >&5 +echo "$as_me: configuring in $ac_dir" >&6;} + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + + cd $ac_dir + + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + ac_sub_configure="$SHELL '$ac_srcdir/configure.gnu'" + elif test -f $ac_srcdir/configure; then + ac_sub_configure="$SHELL '$ac_srcdir/configure'" + elif test -f $ac_srcdir/configure.in; then + ac_sub_configure=$ac_configure + else + { echo "$as_me:$LINENO: WARNING: no configuration information is in $ac_dir" >&5 +echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} + ac_sub_configure= + fi + + # The recursion is here. + if test -n "$ac_sub_configure"; then + # Make the cache file name correct relative to the subdirectory. + case $cache_file in + [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; + *) # Relative path. + ac_sub_cache_file=$ac_top_builddir$cache_file ;; + esac + + { echo "$as_me:$LINENO: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 +echo "$as_me: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} + # The eval makes quoting arguments work. + eval $ac_sub_configure $ac_sub_configure_args \ + --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir || + { { echo "$as_me:$LINENO: error: $ac_sub_configure failed for $ac_dir" >&5 +echo "$as_me: error: $ac_sub_configure failed for $ac_dir" >&2;} + { (exit 1); exit 1; }; } + fi + + cd $ac_popdir + done +fi + + +echo +tmp="" +if test "$BUILD_IPX_TOOLS" = "1" +then + tmp=" and ipx-1.0" +fi +echo "Building ${PACKAGE_NAME}-${PACKAGE_VERSION}${tmp} with following configuration options:" +if test "$USE_KERNEL" = "1" +then + tmp="yes" +else + tmp="no" +fi +echo "kernel support: ${tmp}" +if test "$tmp" = "yes" +then + case "${MOUNT3}${MOUNT2}" in + "00") tmp="none";; + "01") tmp="linux-2.0";; + "10") tmp="linux-2.2, linux-2.4";; + *) tmp="linux-2.0, linux-2.2, linux-2.4";; + esac + echo "ncpmount support: ${tmp}" +fi +case "${PROTOCOL_IPX}${PROTOCOL_IP}" in +"00") tmp="none";; +"01") tmp="UDP, TCP";; +"10") tmp="IPX";; +*) tmp="IPX, UDP, TCP";; +esac +echo "NCP supported: ${tmp}" +if test "$NDS_SUPPORT" = "1" +then + tmp="yes" +else + tmp="no" +fi +echo "NDS support: ${tmp}" + +if test "$LIB_PAM_SECURITY" = "" +then + tmp="no" +else + tmp="$LIB_PAM_SECURITY" +fi +if test "$pam_forced" = "yes" +then + if test "$pam_path_forced" = "" + then + tmp="${tmp} (forced, path autodetected)" + else + tmp="${tmp} (forced)" + fi +else + tmp="${tmp} (autodetected)" +fi +echo "PAM support: ${tmp}" + +if test "$php_path_config" = "" +then + tmp="no" +else + tmp="$php_path_config" +fi +if test "$php_forced" = "yes" +then + if test "$php_path_forced" = "" + then + tmp="${tmp} (forced, path autodetected)" + else + tmp="${tmp} (forced)" + fi +else + tmp="${tmp} (autodetected)" +fi +echo "PHP support: ${tmp}" + +if test "$REENTRANT" = "0" +then + tmp="disabled" +else + tmp="enabled" +fi +if test "$reentrant_forced" = "yes" +then + tmp="${tmp} (forced)" +else + tmp="${tmp} (autodetected)" +fi +echo "Threading support: ${tmp}" + +case "$ncphost" in +none) tmp="not needed" ;; +generic) tmp="available (pthread based)" ;; +*) if test "$ncphosttested" = "yes" + then + tmp="" + else + tmp=", untested" + fi + tmp="available (optimized ${ncphost}${tmp})" + ;; +esac +echo "Atomic operations: ${tmp}" + +tmp="$VERSIONED_LINK" +if test "$versions_forced" = "yes" +then + tmp="${tmp} (forced)" +else + tmp="${tmp} (autodetected)" +fi +echo "Versioned symbols: ${tmp}" + +tmp="$function_sections" +if test "$function_sections_forced" = "yes" +then + tmp="${tmp} (forced)" +else + tmp="${tmp} (autodetected)" +fi +echo "Function sections: ${tmp}" + +echo "Compile-time warnings: ${CC_WARNINGS}" +if test "$NCP_TRACE_ENABLE" = "1" +then + tmp="yes" +else + tmp="no" +fi +echo "NCP trace: ${tmp}" +echo "NCP debug: ${NCP_DEBUG_ENABLE}" +echo diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..37d867e --- /dev/null +++ b/configure.ac @@ -0,0 +1,1153 @@ +dnl Process this file with autoconf to produce a configure script. +AC_PREREQ(2.50) +AC_INIT([[ncpfs]],[[2.2.1]],[[vandrove@vc.cvut.cz]]) +AC_CONFIG_SRCDIR([[lib/ncplib.c]]) +AC_REVISION([[2.2.1]]) +AC_CONFIG_HEADER(include/config.h) + + +AC_ARG_ENABLE(warnings, +[ --enable-warnings enable verbose build warnings]) + +AC_ARG_ENABLE(pam, +[ --enable-pam build PAM NCP authentication module]) + +AC_ARG_ENABLE(php, +[ --enable-php build PHP NCP authentication module]) + +AC_ARG_WITH(php-config, +[ --with-php-config=PATH build PHP NCP authentication module]) + +AC_ARG_ENABLE(ipx-tools, +[ --disable-ipx-tools disables building of ipx tools]) + +AC_ARG_ENABLE(udp, +[ --disable-udp disable NCP/UDP]) + +AC_ARG_ENABLE(ipx, +[ --disable-ipx disable NCP/IPX]) + +AC_ARG_ENABLE(signatures, +[ --disable-signatures disable packet signing code]) + +AC_ARG_ENABLE(nds, +[ --disable-nds disable NDS support]) + +AC_ARG_ENABLE(mount-v2, +[ --disable-mount-v2 disable support for Linux 2.0]) + +AC_ARG_ENABLE(mount-v3, +[ --disable-mount-v3 disable support for Linux 2.2]) + +AC_ARG_ENABLE(kernel, +[ --disable-kernel do not use kernel interface]) + +AC_ARG_ENABLE(reentrant, +[ --disable-reentrant do not compile threading support into library]) + +AC_ARG_ENABLE(versions, +[ --disable-versions do not use version symbols in library]) + +AC_ARG_ENABLE(function_sections, +[ --disable-function-sections do not use -ffunction-sections for static libraries]) + +AC_ARG_ENABLE(trace, +[ --enable-trace enable trace of ncp calls]) + +AC_ARG_ENABLE(ncp_debug, +[ --enable-ncp-debug enable builtin debugging support]) + +if test "$enable_udp" = "no" +then + PROTOCOL_IP=0 +else + AC_DEFINE(CONFIG_NATIVE_IP, 1, +[If you want native IP support, uncomment CONFIG_NATIVE_IP +Do not forget that it is VERY ALPHA code, with almost no support +Enable only if you are interested in NCP over IP and you want help +me. -A ip.address is your friend. At this time you have to silently +ignore Login to server XXXX as YYYY - think that XXXX is ip.address and +not one taken from .nwclient. Also, if you have not .nwclient, you have +to add -S DUMMY on commandline.]) + PROTOCOL_IP=1 +fi + +if test "$enable_signatures" = "no" +then : ; else + AC_DEFINE(SIGNATURES, 1, +[If you want to include packet signature support uncomment this. +If you are using 2.0.x Linux kernel, make sure that you also applied +kernel patches. +Change only through 'configure', copies of this value are in makefiles]) + SIGNATURES=1 +fi + +if test "$enable_nds" = "no" +then : ; else + AC_DEFINE(NDS_SUPPORT, 1, +[If you want to include NDS support, define NDS_SUPPORT symbol +Change only through 'configure', copies of this value are in makefiles]) + NDS_SUPPORT=1 +fi + +if test "$enable_kernel" = "no" +then + USE_KERNEL=0 + enable_mount_v2=no + enable_mount_v3=no +else + USE_KERNEL=1 +fi + +if test "$enable_mount_v2" = "no" +then + MOUNT2=0 +else + MOUNT2=1 +fi + +if test "$enable_mount_v3" = "no" +then + MOUNT3=0 +else + MOUNT3=1 +fi + +if test "$enable_warnings" = "yes" +then + CC_WARNINGS=yes +else + CC_WARNINGS=no +fi +AC_SUBST(CC_WARNINGS) + +if test "$enable_ncp_debug" = "yes" +then + NCP_DEBUG_ENABLE=yes + AC_DEFINE(NCP_DEBUG, 1, +[Enable support for NCP_DEBUG environment variable.]) +else + NCP_DEBUG_ENABLE=no +fi + +pam_forced=no +pam_path_forced= +if test "$enable_pam" = "" +then + PAM=1 +else + pam_forced=yes + case "$enable_pam" in + no) PAM=0; pam_path_forced="no";; + yes) PAM=1;; + /*) PAM=1; pam_path_forced="$enable_pam";; + *) AC_MSG_ERROR(Bad parameter for --enable-pam);; + esac +fi + +php_forced=no +php_path_forced= +PHP=yes +if test "$enable_php" != "" +then + case "$enable_php" in + no) PHP=no; php_path_forced="no";; + yes) PHP=yes; php_path_forced=;; + *) AC_MSG_ERROR(Bad parameter for --enable-php. Use --with-php-config for specifying PHP directory);; + esac + php_forced=yes +fi +if test "$with_php_config" != "" +then + case "$with_php_config" in + no) PHP2=no; php_path_forced="no";; + yes) PHP2=yes; php_path_forced=;; + *) PHP2=yes; php_path_forced="$with_php_config";; + esac + if test "$php_forced" = "yes" + then + if test "$PHP" != "$PHP2" + then + p1="--enable-php" + if test "$PHP" = "no" + then + p1="--disable-php" + fi + case "$php_path_forced" in + no) p2="--without-php-config";; + yes) p2="--with-php-config";; + *) p2="--with-php-config=$php_path_forced";; + esac + AC_MSG_ERROR($p1 conflicts with $p2); + fi + fi + PHP="${PHP2}" + php_forced=yes +fi + +reentrant_forced=no +REENTRANT=1 +if test "$enable_reentrant" != "" +then + reentrant_forced=yes + if test "$enable_reentrant" = "no" + then + REENTRANT=0 + fi +fi + +versions_forced=no +VERSIONED_LINK=yes +if test "$enable_versions" != "" +then + versions_forced=yes + if test "$enable_versions" = "no" + then + VERSIONED_LINK=no + fi +fi + +function_sections_forced=no +function_sections=yes +if test "$enable_function_sections" != "" +then + function_sections_forced=yes + if test "$enable_function_sections" = "no" + then + function_sections=no + fi +fi + +if test "$enable_trace" = "yes" +then + AC_DEFINE(NCP_TRACE_ENABLE, 1, [If you want to trace ncp calls uncomment this.]) + NCP_TRACE_ENABLE=1 +fi + +PROTOCOL_IPX=0 +BUILD_IPX_TOOLS=0 + +AC_CANONICAL_HOST + +dnl Checks for programs. +AC_PROG_MAKE_SET +AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_LN_S + +dnl Mandatory gettext items +AC_SUBST(PACKAGE, ["$PACKAGE_NAME"]) +AC_SUBST(VERSION, ["$PACKAGE_VERSION"]) +AM_GNU_GETTEXT +localedir="\${prefix}/$DATADIRNAME/locale" +AC_SUBST(localedir) + +dnl Checks for IPX support style +AC_CACHE_CHECK(for GNU style IPX support, ncp_cv_c_ipx_netipx, + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[[#include +#include +#include ]]], + [[[((struct sockaddr_ipx*)0)->sipx_family == AF_IPX]]])], + [ncp_cv_c_ipx_netipx="yes"], + [ncp_cv_c_ipx_netipx="no"] + ) +) +ncp_ipx_headers_1="/* not required */" +ncp_ipx_headers_2="/* <.../ipx.h> not found */" +if test "$ncp_cv_c_ipx_netipx" = "no" +then + AC_CACHE_CHECK(for Linux style IPX support, ncp_cv_c_ipx_linux, + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[[#include +#include +#include ]]], + [[[((struct sockaddr_ipx*)0)->sipx_family == AF_IPX]]])], + [ncp_cv_c_ipx_linux="yes"], + [ncp_cv_c_ipx_linux="no"] + ) + ) + if test "$ncp_cv_c_ipx_linux" = "no" + then + enable_ipx="no" + else + AC_DEFINE(HAVE_LINUX_IPX_H, 1, [Define if you have IPX header linux/ipx.h]) + ncp_ipx_headers_1="#include " + ncp_ipx_headers_2="#include " + fi +else + AC_DEFINE(HAVE_NETIPX_IPX_H, 1, [Define if you have IPX header netipx/ipx.h]) + ncp_ipx_headers_1="#include " + ncp_ipx_headers_2="#include " +fi +AC_SUBST(ncp_ipx_headers_1) +AC_SUBST(ncp_ipx_headers_2) + +dnl If IPX is selected, check some IPX constants +ncp_ipx_defsiocprotoprivate="#if 0 /* #define SIOCPROTOPRIVATE not needed */" +ncp_ipx_defsiocaipx="#if 0/* #define SIOCAIPX* not needed */" +if test "$enable_ipx" = "no" +then : ; else + AC_DEFINE(CONFIG_NATIVE_IPX, 1, +[If you do not want IPX support, comment CONFIG_NATIVE_IPX out... +I cannot recommend doing it]) + PROTOCOL_IPX=1 + if test "$enable_ipx_tools" != "no" + then + ADDON_DEV_SUBDIRS="$ADDON_DEV_SUBDIRS ipx-1.0" + BUILD_IPX_TOOLS=1 + fi + + dnl glibc-2.0.7 and 2.1.x does not have these defines... + AC_CACHE_CHECK(for working IPX ioctl values, ncp_cv_c_ipx_ioctl, + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[[$ncp_ipx_headers_1 +$ncp_ipx_headers_2]]], + [[[SIOCAIPXITFCRT, SIOCAIPXPRISLT, SIOCIPXCFGDATA]]])], + [ncp_cv_c_ipx_ioctl="yes"], + [ncp_cv_c_ipx_ioctl="no"] + ) + ) + if test "$ncp_cv_c_ipx_ioctl" = "no" + then + AC_CACHE_CHECK(for defined SIOCPROTOPRIVATE, ncp_cv_c_siocprotoprivate, + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[[$ncp_ipx_headers_1 +$ncp_ipx_headers_2]]], + [[[SIOCPROTOPRIVATE]]])], + [ncp_cv_c_siocprotoprivate="yes"], + [ncp_cv_c_siocprotoprivate="no"] + ) + ) + if test "$ncp_cv_c_siocprotoprivate" = "no" + then + ncp_ipx_defsiocprotoprivate="#if 1 /* SIOCPROTOPRIVATE was not found */" + AC_CACHE_CHECK(for working IPX ioctl values after defining SIOCPROTOPRIVATE, ncp_cv_c_ipx_sioc, + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[[$ncp_ipx_headers_1 +$ncp_ipx_headers_2 +#define SIOCPROTOPRIVATE 0x89E0]]], + [[[SIOCAIPXITFCRT, SIOCAIPXPRISLT, SIOCIPXCFGDATA]]])], + [ncp_cv_c_ipx_sioc="yes"], + [ncp_cv_c_ipx_sioc="no"] + ) + ) + else + ncp_cv_c_ipx_sioc="no" + fi + if test "$ncp_cv_c_ipx_sioc" = "no" + then + ncp_ipx_defsiocaipx="#if 1 /* SIOCAIPX* values were not defined */" + fi + fi +fi +AC_SUBST(ncp_ipx_defsiocprotoprivate) +AC_SUBST(ncp_ipx_defsiocaipx) + + +dnl Checks for header files. +AC_HEADER_STDC +AC_HEADER_SYS_WAIT + +dnl sys/mount is required by ncpmount +dnl currently code does not work without sys/mount.h +AC_CHECK_HEADER(sys/mount.h) +if test "$ac_cv_header_sys_mount_h" = "no" +then + if test "$USE_KERNEL" = "1" + then + AC_MSG_WARN(Cannot build kernel support because of no sys/mount.h file) + USE_KERNEL=0 + fi + ncp_sys_mount_h="/* sys/mount.h does not exist */" + ncp_linux_fs_h="/* linux/fs.h is not needed */" +else + ncp_sys_mount_h="#include " + AC_CACHE_CHECK(for mount constants in sys/mount.h, ncp_cv_linux_fs_needed, + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[[#include ]]], + [[[mount(0,0,0,MS_RDONLY,0); umount(0)]]])], + [ncp_cv_linux_fs_needed="yes"], + [ncp_cv_linux_fs_needed="no"] + ) + ) + if test "$ncp_cv_linux_fs_needed" = "yes"; then + ncp_linux_fs_h="/* linux/fs.h not needed */" + else + ncp_linux_fs_h="#include " + fi +fi +AC_SUBST(ncp_sys_mount_h) +AC_SUBST(ncp_linux_fs_h) + +dnl net/if is required by IPX tools +dnl currently code does not work without net/if.h +AC_CHECK_HEADER(net/if.h, + [ncp_net_if_h="#include "], + [AC_CHECK_HEADER(linux/if.h, + [ncp_net_if_h="#include "], + [ncp_net_if_h="/* No interfaces support... */" + AC_DEFINE(NO_NET_IF_SUPPORT, 1, [neither net/if.h nor linux/if.h was found, so ipx_* will not build...]) + AC_MSG_WARN(Neither nor does exist, only partial make configured)] + )] +) +AC_SUBST(ncp_net_if_h) + +dnl net/route is required for now in ncplib +dnl it should not be required for IP-only +AC_CHECK_HEADER(net/route.h, + [ncp_net_route_h="#include "], + [AC_CHECK_HEADER(linux/route.h, + [ncp_net_route_h="#include "], + [ncp_net_route_h="/* No route support... */" + AC_DEFINE(NO_NET_ROUTE_SUPPORT, 1, [neither net/route.h nor linux/route.h was found ...]) + dnl In future, {net|linux}/route.h should be required only by ipx code + AC_MSG_ERROR(Neither nor does exist)] + )] +) +AC_SUBST(ncp_net_route_h) + +dnl netinet/if_ether.h vs. linux/if_ether.h +dnl required only in ipxdump/ipxparse +ncp_if_ether_support="yes" +AC_CHECK_HEADER(netinet/if_ether.h) +if test "$ac_cv_header_netinet_if_ether_h" = "no" +then + AC_CHECK_HEADER(linux/if_ether.h) + if test "$ac_cv_header_linux_if_ether_h" = "no" + then + ncp_if_ether_support="no" + fi +fi +AC_SUBST(ncp_if_ether_support) + +dnl LIBC5 without problems, LIBC6/6.1 are a bit problematic +AC_CHECK_HEADER(sys/select.h, + [ncp_sys_select_h="#include "], + [ncp_sys_select_h="#include "] +) +AC_SUBST(ncp_sys_select_h) + +AC_CACHE_CHECK([for C9X integer types], + ncp_cv_c9x_stdint, + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[[#include ]]], + [[[int_least16_t sl16; +int_least32_t sl32; +uint_least16_t ul16; +uint_least32_t ul32; +int_fast16_t sf16; +int_fast32_t sf32; +uint_fast16_t uf16; +uint_fast32_t uf32]]])], + [ncp_cv_c9x_stdint="yes"], + [ncp_cv_c9x_stdint="no"] + ) +) +if test "$ncp_cv_c9x_stdint" = "yes" +then + stdint_types="1" +else + stdint_types="0" +fi +AC_SUBST(stdint_types) + +if test "$USE_KERNEL" = "1" +then + if test "$ncp_sys_select_h" = "#include " + then + AC_CACHE_CHECK([whether sys/select.h and linux/posix_types.h may both be included], + ncp_cv_posix_and_select, + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[[#include +#include ]]], + [[[fd_set a; +select(0, &a, &a, &a, 0)]]])], + [ncp_cv_posix_and_select="yes"], + [ncp_cv_posix_and_select="no"] + ) + ) + else + ncp_cv_posix_and_select="yes" + fi + if test "$ncp_cv_posix_and_select" = "no" + then + AC_MSG_WARN([sys/select.h and linux/posix_types.h cannot be included together, will not build kernel support]) + USE_KERNEL=0 + fi +fi + +dnl Third parameter to accept is socklen_t or signed int +AC_CACHE_CHECK(for third parameter to accept, + ncp_cv_socklen_t, + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[[#include ]]], + [[[socklen_t a; + accept(0, NULL, &a)]]])], + [ncp_cv_socklen_t="socklen_t"], + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[[#include ]]], + [[[int a; + accept(0, NULL, &a)]]])], + [ncp_cv_socklen_t="int"], + dnl Can you imagine another parameter? Except that sys/socket does not exist... + [ncp_cv_socklen_t="unsigned int"] + ) + ) +) +if test "$ncp_cv_socklen_t" = "socklen_t" +then + socklen_t="/* socklen_t is defined by libc */" +else + socklen_t="typedef $ncp_cv_socklen_t socklen_t;" +fi +AC_SUBST(socklen_t) + +dnl UNICODE +AC_CHECK_TYPE([wchar_t], , [AC_DEFINE([wchar_t], [unsigned int], [Define to 'unsigned int' if wchar_t is not defined.])]) +AC_CHECK_HEADERS(wchar.h iconv.h) +if test "$ac_cv_header_wchar_h" = "yes" +then + wchar_h="#include " +else + wchar_h="/* no wchar_h header... */" +fi +AC_SUBST(wchar_h) + +if test "$ac_cv_header_iconv_h" = "yes" +then + AM_ICONV +fi + +dnl AC_CHECK_HEADERS(fcntl.h malloc.h paths.h strings.h sys/ioctl.h sys/time.h syslog.h unistd.h) + +dnl Checks for typedefs, structures, and compiler characteristics. +dnl do we need them? Abort if not present... +AC_C_CONST +AC_TYPE_UID_T +AC_C_INLINE +AC_TYPE_MODE_T +AC_TYPE_OFF_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_HEADER_TIME +AC_STRUCT_TM + +dnl Checks for library functions. +AC_PROG_GCC_TRADITIONAL +dnl do we need them? Abort if not present... +dnl AC_FUNC_MEMCMP +dnl AC_TYPE_SIGNAL +dnl AC_FUNC_VPRINTF +dnl AC_CHECK_FUNCS(gettimeofday mktime select socket strdup strerror strspn strstr strtol strtoul uname) +AC_CHECK_FUNCS(wcslen wcscpy wcsdup wcscmp wcsncmp wcscasecmp wcsncasecmp wcsrev) + +if test "$PAM" = "1" +then + AC_CHECK_HEADER(security/pam_appl.h) + if test "$ac_cv_header_security_pam_appl_h" = "yes" ; then + if test "$pam_path_forced" = ""; then + AC_CACHE_CHECK(for pam modules directory, + ncp_cv_pam_directory, + if test -d /lib/security ; then + ncp_cv_pam_directory=/lib/security + else if test -d /usr/lib/security ; then + ncp_cv_pam_directory=/usr/lib/security + else if test -d /usr/local/lib/security ; then + ncp_cv_pam_directory=/usr/local/lib/security + else + dnl defaulting to /lib/security by Linux FS standard + ncp_cv_pam_directory=/lib/security + fi; fi; fi + ) + else + ncp_cv_pam_directory="$pam_path_forced" + fi + LIB_PAM_SECURITY=$ncp_cv_pam_directory + + AC_SUBST(LIB_PAM_SECURITY) + ADDON_DEV_SUBDIRS="$ADDON_DEV_SUBDIRS contrib/pam" + else + if test "$pam_forced" = "yes" + then + AC_MSG_ERROR(Cannot build PAM module because of PAM headers are not installed) + fi + PAM=0 + fi +fi + +if test "$PHP" = "yes" +then + php_path_config="$php_path_forced" + if test "$php_path_config" = "" + then + php_path_config=php-config + fi + case "$php_path_config" in + /*) AC_MSG_CHECKING([for $php_path_config]) + if test -r "$php_path_config" + then + php_found=yes + else + php_found=no + fi + AC_MSG_RESULT([$php_found]) + ;; + *) AC_CHECK_PROG(php_found, $php_path_config, yes, no) ;; + esac + if test "$php_found" = "yes" + then + ADDON_SUBDIRS="$ADDON_SUBDIRS contrib/php" + else + if test "$php_forced" = "yes" + then + AC_MSG_ERROR(Cannot build PHP module because of $php_path_config is not available) + fi + php_path_config="" + fi +fi + +if test "$NDS_SUPPORT" = "1" +then + AC_CACHE_CHECK(for mpilib word size, + ncp_cv_mpilib_unit, + [case "$host_cpu" in + i?86|ia32) ncp_cv_mpilib_unit="32";; + *) ncp_cv_mpilib_unit="8"; + esac] + ) + AC_DEFINE_UNQUOTED(UNITSIZE, $ncp_cv_mpilib_unit, [Define to 8 (big-endian) or 16 (32 bit little-endian except i386) or 32 (i386)]) + AC_DEFINE_UNQUOTED(MULTUNITSIZE, $ncp_cv_mpilib_unit, [Define to 8 (big-endian) or 16 (32 bit little-endian except i386) or 32 (i386)]) +fi + +if test "$REENTRANT" != "0" +then + AC_CACHE_CHECK(for working pthread support, + ncp_cv_pthread, + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[[#include +#include ]]], + [[[pthread_mutex_t a; + pthread_once_t b; + pthread_mutex_init(&a, NULL); + pthread_mutex_lock(&a); + pthread_mutex_unlock(&a); + pthread_mutex_destroy(&a)]]])], + [ncp_cv_pthread="yes"], + [ncp_cv_pthread="no"] + ) + if test "$ncp_cv_pthread" = "no" + then + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[[#define _MIT_POSIX_THREADS 1 +#include +#include ]]], + [[[pthread_mutex_t a; + pthread_once_t b; + pthread_mutex_init(&a, NULL); + pthread_mutex_lock(&a); + pthread_mutex_unlock(&a); + pthread_mutex_destroy(&a)]]])], + [ncp_cv_pthread="MIT Posix threads needed"], + [ncp_cv_pthread="no"] + ) + fi + ) + case "$ncp_cv_pthread" in +no) if test "$reentrant_forced" = "yes" + then + AC_MSG_ERROR(Cannot build threading libraries without working pthread support) + fi + REENTRANT=0 + ;; +MIT*) AC_DEFINE(_MIT_POSIX_THREADS, 1, [Define if you need this for correct threading_MIT_POSIX_THREADS ...]) + ;; + esac +fi +if test "$REENTRANT" != "0" +then + AC_CACHE_CHECK(for working weak symbols, + ncp_cv_weak_symbols, + AC_LINK_IFELSE([AC_LANG_PROGRAM([[[#include +#pragma weak pthread_mutex_lock]]], + [[[pthread_mutex_t a; + pthread_mutex_lock(&a)]]])], + [ncp_cv_weak_symbols="yes"], + [ncp_cv_weak_symbols="no"] + ) + ) + if test "$ncp_cv_weak_symbols" = "no" + then + if test "$reentrant_forced" = "yes" + then + AC_MSG_ERROR(Cannot build threading libraries without working weak imports) + fi + REENTRANT=0 + fi +fi +if test "$REENTRANT" = "0" +then + REENTRANT_CFLAGS="" + + ncphost=none + ncphosttested=yes +else + REENTRANT_CFLAGS="-D_REENTRANT" + + ncphost=generic + ncphosttested=yes + case "$host" in +1750a-*) ;; +580-*) ;; +[cjt]90-*) ;; +a29k-*) ;; +alpha-*) ncphost=alpha; ncphosttested=no ;; +alphaev56-*) ncphost=alpha; ncphosttested=no ;; +alphaev6[78]-*) ncphost=alpha; ncphosttested=no ;; +alphaev[4-8]-*) ncphost=alpha; ncphosttested=no ;; +alphapca5[67]-*) ncphost=alpha; ncphosttested=no ;; +arc-*) ;; +arm-*) ;; +armbe-*) ;; +armle-*) ;; +armv*-*) ;; +avr-*) ;; +bs2000-*) ;; +c30-*) ;; +c4x-*) ;; +c54x-*) ;; +c[123]*) ;; +clipper-*) ;; +cray2-*) ;; +cris-*) ;; +cydra-*) ;; +d10v-*) ;; +d30v-*) ;; +dsp16xx-*) ;; +elxsi-*) ;; +f30[01]-*) ;; +f700-*) ;; +fr30-*) ;; +fx80-*) ;; +h8300-*) ;; +h8500-*) ;; +hppa-*) ;; +hppa1.0-*) ;; +hppa1.1-*) ;; +hppa2.0-*) ;; +hppa2.0n-*) ;; +hppa2.0w-*) ;; +hppa64-*) ;; +i*86-*) ncphost=i386; ncphosttested=yes ;; +i370-*) ;; +i860-*) ;; +i960-*) ;; +ia64-*) ;; +m32r-*) ;; +m5200-*) ;; +m680[012346]0-*) ncphost=m68k; ncphosttested=no ;; +m681[12]-*) ;; +m68360-*) ;; +m683?2-*) ;; +m68hc1[12]-*) ;; +m68k-*) ncphost=m68k; ncphosttested=no ;; +m88110-*) ;; +m88k-*) ;; +mcore-*) ;; +mips-*) ncphost=mips; ncphosttested=no ;; +mips16-*) ;; +mips64*-*) ncphost=mips64; ncphosttested=no ;; +mipsbe-*) ncphost=mips; ncphosttested=no ;; +mipsel-*) ncphost=mips; ncphosttested=no ;; +mipsle-*) ncphost=mips; ncphosttested=no ;; +mipstx39-*) ;; +mipstx39el-*) ;; +mmix-*) ;; +mn10[23]00-*) ;; +none-*) ;; +np1-*) ;; +ns16k-*) ;; +ns32k-*) ;; +nsr-*) ;; +openrisc-*) ;; +orion-*) ;; +pdp10-*) ;; +pdp11-*) ;; +pj-*) ;; +pjl-*) ;; +pn-*) ;; +power-*) ;; +powerpc-*) ncphost=ppc; ncphosttested=no ;; +powerpcle-*) ncphost=ppc; ncphosttested=no ;; +ppcbe-*) ;; +pyramid-*) ;; +romp-*) ;; +rs6000-*) ;; +s390-*) ;; +s390x-*) ;; +sh-*) ;; +sh[34]-*) ;; +sh[34]eb-*) ;; +shbe-*) ;; +shle-*) ;; +sparc-*) ;; +sparc64-*) ;; +sparc86x-*) ;; +sparclet-*) ;; +sparclite-*) ;; +sparcv9-*) ;; +sparcv9b-*) ;; +spur-*) ;; +strongarm-*) ;; +sv1-*) ;; +t3e-*) ;; +tahoe-*) ;; +thumb-*) ;; +tic30-*) ;; +tic54x-*) ;; +tic80-*) ;; +tron-*) ;; +v70-*) ;; +v810-*) ;; +v850-*) ;; +vax-*) ;; +w65-*) ;; +we32k-*) ;; +x86-*) ncphost=i386; ncphosttested=yes ;; +x86_64-*) ;; +xmp-*) ;; +xps100-*) ;; +xscale-*) ;; +ymp-*) ;; +z8k-*) ;; +esac + AC_CACHE_CHECK(for working atomic operations, + ncp_cv_asm_atomic_h, + if test "$ncp_cv_asm_atomic_h" = "generic" + then + ncp_cv_asm_atomic_h="pthread based" + else + AC_LINK_IFELSE([AC_LANG_PROGRAM([[[#include "include/private/asm-$ncphost/atomic.h"]]], + [[[ncpt_atomic_t a; + ncpt_atomic_set(&a,2); + ncpt_atomic_dec(&a); + if (ncpt_atomic_read(&a)) { + if (!ncpt_atomic_dec_and_test(&a)) { + ncpt_atomic_inc(&a); + } + }]]])], + [ncp_cv_asm_atomic_h="optimized"], + [ncp_cv_asm_atomic_h="falling back to pthread based" + ncphost=generic + ncphosttested=yes + ] + ) + fi + ) + if test "$ncp_cv_asm_atomic_h" = "falling back to pthread based" + then + ncphost=generic + ncphosttested=yes + fi +fi +AC_SUBST(REENTRANT_CFLAGS) +AC_SUBST(ncphost) + +AC_CACHE_CHECK(for ELF target, + ncp_cv_elf_target, +[ ncp_cv_elf_target=no + cat >conftest.c </dev/null 2>&1 + then + (file conftest | grep ELF >/dev/null 2>&1) && ncp_cv_elf_target=yes + fi + rm -f conftest* + ] +) +ELF_TARGET="$ncp_cv_elf_target" +AC_SUBST(ELF_TARGET) + +FFUNCTION_SECTIONS="" +GC_SECTIONS="" +if test "$function_sections" = "yes" +then + AC_CACHE_CHECK(for function sections, + ncp_cv_function_sections, +[ ncp_cv_function_sections=no + cat >conftest.c </dev/null 2>&1 + then + ncp_cv_function_sections=yes + fi + rm -f conftest* + ] + ) + if test "$ncp_cv_function_sections" = "no" + then + if test "$function_sections_forced" = "yes" + then + AC_MSG_ERROR([Your compiler does not support -ffunction-sections or -fdata-sections or your linker does not support --gc-sections. Please reconfigure without --enable-function-sections.]) + fi + fi + function_sections="$ncp_cv_function_sections" +fi +if test "$function_sections" = "yes" +then + FFUNCTION_SECTIONS="-ffunction-sections -fdata-sections " + GC_SECTIONS="-Wl,--gc-sections " +fi + +if test "$VERSIONED_LINK" = "yes" +then + AC_CACHE_CHECK(for working versioned link, + ncp_cv_versioned_link, +[ ncp_cv_versioned_link=no + cat >conftest.vers <conftest.c </dev/null 2>&1 + then + ncp_cv_versioned_link=yes + fi] + ) + rm -f conftest.c conftest.vers conftest.so + if test "$ncp_cv_versioned_link" = "no" + then + if test "$versions_forced" = "yes" + then + AC_MSG_ERROR(Cannot use versioned symbols in your environment) + fi + VERSIONED_LINK=no + fi +fi +AC_SUBST(VERSIONED_LINK) + +if test "$USE_KERNEL" = "0" +then + MOUNT2=0 + MOUNT3=0 +else + AC_DEFINE(USE_KERNEL, 1, [Define when compiling for Linux kernel]) +fi +if test "$MOUNT2" = "1" +then + AC_DEFINE(MOUNT2, 1, [If defined, support for Linux2.0.x is compiled in]) +fi +if test "$MOUNT3" = "1" +then + AC_DEFINE(MOUNT3, 1, [If defined, support for Linux2.1-3.x is compiled in]) +fi +if test "$PROTOCOL_IP" = "0" +then + ncp_in_support="#undef NCP_IN_SUPPORT" +else + ncp_in_support="#define NCP_IN_SUPPORT" +fi +if test "$PROTOCOL_IPX" = "0" +then + ncp_ipx_support="#undef NCP_IPX_SUPPORT" +else + ncp_ipx_support="#define NCP_IPX_SUPPORT" +fi +AC_SUBST(ncp_in_support) +AC_SUBST(ncp_ipx_support) + +ADDON_SUBDIRS="$ADDON_SUBDIRS $ADDON_DEV_SUBDIRS" + +AC_SUBST(NDS_SUPPORT) +AC_SUBST(SIGNATURES) +AC_SUBST(MOUNT2) +AC_SUBST(MOUNT3) +AC_SUBST(USE_KERNEL) +AC_SUBST(ADDON_SUBDIRS) +AC_SUBST(ADDON_DEV_SUBDIRS) +AC_SUBST(FFUNCTION_SECTIONS) +AC_SUBST(GC_SECTIONS) + +AC_CONFIG_FILES([ +Make.rules +Makefile +lib/Makefile +man/Makefile +util/Makefile +sutil/Makefile +ipx-1.0/Makefile +ipx-1.0/Samples/Makefile +ipxdump/Makefile +contrib/tknwmsg/Makefile +contrib/testing/Makefile +contrib/testing/pp/Makefile +contrib/tcl-utils/Makefile +contrib/tests/Makefile +intl/Makefile +po/Makefile.in +contrib/pam/Makefile +contrib/php/Makefile.in +]) +AC_CONFIG_FILES([ +include/private/libncp-atomic.h.tmp:include/private/libncp-atomic.h.in +include/ncp/nwnet.h.tmp:include/ncp/nwnet.h.in +include/ncp/ext/stdint.h.tmp:include/ncp/ext/stdint.h.in +include/ncp/ext/socket.h.tmp:include/ncp/ext/socket.h.in +include/ncp/kernel/fs.h.tmp:include/ncp/kernel/fs.h.in +include/ncp/kernel/if.h.tmp:include/ncp/kernel/if.h.in +include/ncp/kernel/ipx.h.tmp:include/ncp/kernel/ipx.h.in +include/ncp/kernel/route.h.tmp:include/ncp/kernel/route.h.in +include/ncp/kernel/types.h.tmp:include/ncp/kernel/types.h.in +], [ +my_file=`echo "$ac_file" | sed 's,\.tmp$,,'` +if cmp -s "$my_file" "$ac_file" +then +echo "$as_me: $my_file is unchanged" +rm -f "$ac_file" +else +mv "$ac_file" "$my_file" +fi +]) +if test "$php_path_config" != "" +then + if test "$with_php_config" = "yes" + then + AC_MSG_ERROR(Current PHP configure does not handle --with-php-config correctly. Use --with-php-config=php-config instead.) + fi + AC_CONFIG_SUBDIRS(contrib/php) +fi +AC_OUTPUT + +echo +tmp="" +if test "$BUILD_IPX_TOOLS" = "1" +then + tmp=" and ipx-1.0" +fi +echo "Building ${PACKAGE_NAME}-${PACKAGE_VERSION}${tmp} with following configuration options:" +if test "$USE_KERNEL" = "1" +then + tmp="yes" +else + tmp="no" +fi +echo "kernel support: ${tmp}" +if test "$tmp" = "yes" +then + case "${MOUNT3}${MOUNT2}" in + "00") tmp="none";; + "01") tmp="linux-2.0";; + "10") tmp="linux-2.2, linux-2.4";; + *) tmp="linux-2.0, linux-2.2, linux-2.4";; + esac + echo "ncpmount support: ${tmp}" +fi +case "${PROTOCOL_IPX}${PROTOCOL_IP}" in +"00") tmp="none";; +"01") tmp="UDP, TCP";; +"10") tmp="IPX";; +*) tmp="IPX, UDP, TCP";; +esac +echo "NCP supported: ${tmp}" +if test "$NDS_SUPPORT" = "1" +then + tmp="yes" +else + tmp="no" +fi +echo "NDS support: ${tmp}" + +if test "$LIB_PAM_SECURITY" = "" +then + tmp="no" +else + tmp="$LIB_PAM_SECURITY" +fi +if test "$pam_forced" = "yes" +then + if test "$pam_path_forced" = "" + then + tmp="${tmp} (forced, path autodetected)" + else + tmp="${tmp} (forced)" + fi +else + tmp="${tmp} (autodetected)" +fi +echo "PAM support: ${tmp}" + +if test "$php_path_config" = "" +then + tmp="no" +else + tmp="$php_path_config" +fi +if test "$php_forced" = "yes" +then + if test "$php_path_forced" = "" + then + tmp="${tmp} (forced, path autodetected)" + else + tmp="${tmp} (forced)" + fi +else + tmp="${tmp} (autodetected)" +fi +echo "PHP support: ${tmp}" + +if test "$REENTRANT" = "0" +then + tmp="disabled" +else + tmp="enabled" +fi +if test "$reentrant_forced" = "yes" +then + tmp="${tmp} (forced)" +else + tmp="${tmp} (autodetected)" +fi +echo "Threading support: ${tmp}" + +case "$ncphost" in +none) tmp="not needed" ;; +generic) tmp="available (pthread based)" ;; +*) if test "$ncphosttested" = "yes" + then + tmp="" + else + tmp=", untested" + fi + tmp="available (optimized ${ncphost}${tmp})" + ;; +esac +echo "Atomic operations: ${tmp}" + +tmp="$VERSIONED_LINK" +if test "$versions_forced" = "yes" +then + tmp="${tmp} (forced)" +else + tmp="${tmp} (autodetected)" +fi +echo "Versioned symbols: ${tmp}" + +tmp="$function_sections" +if test "$function_sections_forced" = "yes" +then + tmp="${tmp} (forced)" +else + tmp="${tmp} (autodetected)" +fi +echo "Function sections: ${tmp}" + +echo "Compile-time warnings: ${CC_WARNINGS}" +if test "$NCP_TRACE_ENABLE" = "1" +then + tmp="yes" +else + tmp="no" +fi +echo "NCP trace: ${tmp}" +echo "NCP debug: ${NCP_DEBUG_ENABLE}" +echo diff --git a/contrib/libtrace/Makefile b/contrib/libtrace/Makefile new file mode 100644 index 0000000..8fd08c9 --- /dev/null +++ b/contrib/libtrace/Makefile @@ -0,0 +1,25 @@ +# +# +# +top_srcdir = ../.. +top_builddir = ../.. +this_srcdir = ${top_srcdir}/contrib/libtrace + +include ${top_builddir}/Make.rules + +.PHONY : all clean distclean mrproper + +all: tracencp.so + +tracencp.so: tracencp.c allsyms.c + $(CC) $(CFLAGS) -o tracencp.so -shared tracencp.c -L${top_builddir}/lib -lncp -ldl + +allsyms.c: ${top_builddir}/lib/libncp.so + objdump -T ${top_builddir}/lib/libncp.so | grep 'DF .text' | rev | cut -d" " -f1 | rev | sed 's/^\(.*\)$$/DO_ASM_SYMBOL_EASY(\1)/' > allsyms.c + +clean: + -rm -f allsyms.c tracencp.so + +distclean: clean + +mrproper: clean diff --git a/contrib/libtrace/README b/contrib/libtrace/README new file mode 100644 index 0000000..dba4202 --- /dev/null +++ b/contrib/libtrace/README @@ -0,0 +1,96 @@ +Hello everybody, + +ltrace does not trace calls made to dynamically loaded objects, +and this made my testing of ncpfs Perl wrapper very hard, as +I was not able to confirm what's going inside without adding +debugging prints into either ncpfs or into generated wrapper... + +I found this unacceptable, and so I cooked this code. You can +use it to create wrapper around any library you want, it just +must be dynamic library, not a static one. + +Usage is simple: + +NCP_TRACE_FILE=demo.trc LD_PRELOAD=./tracencp.so demo.pl + +and enjoy demo.trc file. + +I hope that in future I'll be able to persuade SWIG to create +trace_in_* and trace_out_* wrappers for me automatically - but +of course you can do it yourself meanwhile. + +trace_in_XXX function has same arguments as XXX function, with +two parameters added in front of the list - const char* functionName +and void* caller. trace_out_XXX function has also arguments of +wrapped function - with added int returnValue and void* caller. +So for example for NWDSFreeContext() you have: + +NWDSCCODE NWDSFreeContext(NWDSContextHandle ctx); +void trace_in_NWDSFreeContext(const char* name, void* addr, NWDSContextHandle ctx); +void trace_out_NWDSFreeContext(NWDSCCODE err, void* addr, NWDSContextHandle ctx); + +You should not modify arguments passed to you - depending on +optimization level your changes may be visible to function you +are wrapping and/or to caller. And you should use logprintf() +in trace_in_* and resprintf() in trace_out_*. These functions +take a care of automatic indenting and printing address of caller. + +And of course, currently there are several limitations: +- only i386 version exists... Write your own assembly code, and send me it + if you want this on your architecture. +- you cannot create C wrappers around functions which return 64bit + quantities (if you'll cook wrapper in assembly, you'll find upper + 32bits in %edx register). +- on callchain deeper than 256 levels it dies. +- versioned symbols are not properly wrapped with version, they + are wrapped without version information. +- maybe more... Use of weak symbols is intentional feature and not a bug. + +Example (this example also shows that context handle is automatically +destroyed when it is no longer referenced from Perl - this is why +I wrote this tracer...): + +$ NCP_TRACE_FILE=demo.trc LD_PRELOAD=./tracencp.so demo.pl +NWDSCreateContext() = ok, ctx=ncpfs::NWDSContextHandle=SCALAR(0x80f6408) +NWDSDuplicateContext(ctx) = ok, nctx=ncpfs::NWDSContextHandle=SCALAR(0x80f6444) +$ cat demo.trc +402B593D: NWDSCreateContext() = ... +401E3787: NWDSCreateContextHandle() = ... +401E3242: NWDSInitRequester() = ... +401E22B2: my_iconv() = 0 +401E22C0: my_iconv_close() = 0 +(cont'd.) ... = 0 +401E3377: NWDSSetContext() = ... +401E39B3: my_iconv_open() = 135390952 +401E39D6: my_iconv_open() = 135305312 +(cont'd.) ... = 0 +401E33CA: NWDSSetTransport() = 0 +(cont'd.) ... = 0 +(cont'd.) ... = 137280664 +402B5BB0: NWDSDuplicateContext() = ... +401E37BE: NWDSDuplicateContextHandle() = ... +401E3508: NWDSSetContext() = ... +401E39B3: my_iconv_open() = 135292056 +401E39D6: my_iconv_open() = 135291776 +(cont'd.) ... = 0 +401E360E: NWDSSetContext() = ... +401E39B3: my_iconv_open() = 135404088 +401E39D6: my_iconv_open() = 135733664 +401E3A05: my_iconv_close() = 0 +401E3A22: my_iconv_close() = 0 +(cont'd.) ... = 0 +(cont'd.) ... = 0 +(cont'd.) ... = 136991752 +40255E93: NWDSFreeContext() = ... +401E36A1: my_iconv_close() = 0 +401E36B5: my_iconv_close() = 0 +(cont'd.) ... = 0 +40255E93: NWDSFreeContext() = ... +401E36A1: my_iconv_close() = 0 +401E36B5: my_iconv_close() = 0 +(cont'd.) ... = 0 +$ + + Enjoy, + Petr Vandrovec + vandrove@vc.cvut.cz diff --git a/contrib/libtrace/demo.pl b/contrib/libtrace/demo.pl new file mode 100755 index 0000000..cbfff22 --- /dev/null +++ b/contrib/libtrace/demo.pl @@ -0,0 +1,24 @@ +#! /usr/bin/perl -w + +use strict; +use diagnostics; + +use ncpfs; + +my ($err,$ctx); + +print 'NWDSCreateContext() = '; +$ctx = ncpfs::NWDSCreateContext(); +if (not defined($ctx)) { + print "failed\n"; +} else { + my ($nctx); + print "ok, ctx=$ctx\n"; + print 'NWDSDuplicateContext(ctx) = '; + $nctx = ncpfs::NWDSDuplicateContext($ctx); + if (not defined($nctx)) { + print "failed\n"; + } else { + print "ok, nctx=$nctx\n"; + } +} diff --git a/contrib/libtrace/demo.trc b/contrib/libtrace/demo.trc new file mode 100644 index 0000000..b16bf1b --- /dev/null +++ b/contrib/libtrace/demo.trc @@ -0,0 +1,35 @@ +402B593D: NWDSCreateContext() = ... +401E3787: NWDSCreateContextHandle() = ... +401E3242: NWDSInitRequester() = ... +401E22B2: my_iconv() = 0 +401E22C0: my_iconv_close() = 0 +(cont'd.) ... = 0 +401E3377: NWDSSetContext() = ... +401E39B3: my_iconv_open() = 135390952 +401E39D6: my_iconv_open() = 135305312 +(cont'd.) ... = 0 +401E33CA: NWDSSetTransport() = 0 +(cont'd.) ... = 0 +(cont'd.) ... = 137280664 +402B5BB0: NWDSDuplicateContext() = ... +401E37BE: NWDSDuplicateContextHandle() = ... +401E3508: NWDSSetContext() = ... +401E39B3: my_iconv_open() = 135292056 +401E39D6: my_iconv_open() = 135291776 +(cont'd.) ... = 0 +401E360E: NWDSSetContext() = ... +401E39B3: my_iconv_open() = 135404088 +401E39D6: my_iconv_open() = 135733664 +401E3A05: my_iconv_close() = 0 +401E3A22: my_iconv_close() = 0 +(cont'd.) ... = 0 +(cont'd.) ... = 0 +(cont'd.) ... = 136991752 +40255E93: NWDSFreeContext() = ... +401E36A1: my_iconv_close() = 0 +401E36B5: my_iconv_close() = 0 +(cont'd.) ... = 0 +40255E93: NWDSFreeContext() = ... +401E36A1: my_iconv_close() = 0 +401E36B5: my_iconv_close() = 0 +(cont'd.) ... = 0 diff --git a/contrib/libtrace/tracencp.c b/contrib/libtrace/tracencp.c new file mode 100644 index 0000000..5067951 --- /dev/null +++ b/contrib/libtrace/tracencp.c @@ -0,0 +1,139 @@ +#define _GNU_SOURCE +#include +#include +#include +#include +#include + +static void* freestack[256]; +static void** RetAddrPtr = freestack; + +static int infunc = 0; + +static FILE* tracefile = NULL; + +static void linesetup(void) { + int x; + + x = RetAddrPtr - freestack; + while (x--) { + fprintf(tracefile, " "); + } +} + +static void logprintf(void* calladdr, const char * message, ...) { + va_list va; + + if (!tracefile) { + char* x = getenv("NCP_TRACE_FILE"); + + if (x) { + tracefile = fopen(x, "wt"); + } + if (!tracefile) + tracefile = stderr; + } + if (infunc) { + fprintf(tracefile, "...\n"); + } + fprintf(tracefile, "%08lX: ", (unsigned long)calladdr); + linesetup(); + va_start(va, message); + vfprintf(tracefile, message, va); + va_end(va); + infunc = 1; +} + +static void resprintf(const char * message, ...) { + va_list va; + + if (!infunc) { + fprintf(tracefile, "(cont'd.) "); + linesetup(); + fprintf(tracefile, "... = "); + } + va_start(va, message); + vfprintf(tracefile, message, va); + va_end(va); + infunc = 0; +} + +#define DO_ASM_SYMBOL(SYMBOL) \ +asm( \ +".data \n" \ +" .align 4 \n" \ +" .type .L99" #SYMBOL "_wrap,@object \n" \ +" .size .L99" #SYMBOL "_wrap,4 \n" \ +".L99" #SYMBOL "_wrap: \n" \ +" .long 0 \n" \ +".section .rodata \n" \ +".LC0" #SYMBOL ": \n" \ +" .string \"" #SYMBOL "\" \n" \ +".text \n" \ +" .align 4 \n" \ +".globl " #SYMBOL " \n" \ +" .type " #SYMBOL ",@function \n" \ +#SYMBOL ": \n" \ +" movl $trace_in_" #SYMBOL ",%eax \n" \ +" testl %eax,%eax \n" \ +" jne .L8" #SYMBOL " \n" \ +" movl $trace_default_in,%eax \n" \ +".L8" #SYMBOL ": \n" \ +" pushl $.LC0" #SYMBOL " \n" \ +" call *%eax \n" \ +" addl $4,%esp \n" \ +".L3" #SYMBOL ": \n" \ +" cmpl $0,.L99" #SYMBOL "_wrap \n" \ +" jne .L4" #SYMBOL " \n" \ +" pushl $.LC0" #SYMBOL " \n" \ +" pushl $-1 \n" \ +" call dlsym \n" \ +" addl $8,%esp \n" \ +" movl %eax,.L99" #SYMBOL "_wrap \n" \ +" testl %eax,%eax \n" \ +" jne .L4" #SYMBOL " \n" \ +" call __errno_location \n" \ +" movl $-38,(%eax) \n" \ +" movl $-1,%eax \n" \ +" jmp .L6" #SYMBOL " \n" \ +" .p2align 4,,7 \n" \ +".L4" #SYMBOL ": \n" \ +" movl RetAddrPtr,%eax \n" \ +" popl (%eax) \n" \ +" addl $4,RetAddrPtr \n" \ +" pushl $.L99" #SYMBOL "_continue \n" \ +" jmp *.L99" #SYMBOL "_wrap \n" \ +".L99" #SYMBOL "_continue: \n" \ +" addl $-4,RetAddrPtr \n" \ +" movl RetAddrPtr,%ecx \n" \ +" pushl (%ecx) \n" \ +" movl $trace_out_" #SYMBOL ",%ecx \n" \ +" testl %ecx,%ecx \n" \ +" jne .L7" #SYMBOL " \n" \ +" movl $trace_default_out,%ecx \n" \ +".L7" #SYMBOL ": \n" \ +" pushl %eax \n" \ +" call *%ecx \n" \ +" popl %eax \n" \ +".L6" #SYMBOL ": \n" \ +" ret \n" \ +".Lfe1" #SYMBOL ": \n" \ +" .size " #SYMBOL ",.Lfe1" #SYMBOL "-" #SYMBOL "\n"\ +" .weak trace_out_" #SYMBOL " \n" \ +" .weak trace_in_" #SYMBOL " \n"); + +#define DO_ASM_SYMBOL_EASY(SYMBOL) \ +DO_ASM_SYMBOL(SYMBOL) + +void trace_default_in(const char* funcname, void* calladdr) { + logprintf(calladdr, "%s() = ", funcname); +} +void trace_default_out(int result) { + resprintf("%d\n", result); +} + +#include "allsyms.c" + +void trace_out_strnwerror(const char* result) { + resprintf("%s\n", result); +} diff --git a/contrib/nss64/Makefile b/contrib/nss64/Makefile new file mode 100644 index 0000000..f8d73e9 --- /dev/null +++ b/contrib/nss64/Makefile @@ -0,0 +1,27 @@ +NWSDK = /mnt/novell/nwsdk +#NWSDK = /usr/src/ndk +CFLAGS = -DN_PLAT_NLM -nostdinc -fpack-struct -I${NWSDK}/include/nlm -I${NWSDK}/include -W -Wall -Winline -O2 -fomit-frame-pointer -mpreferred-stack-boundary=2 -fverbose-asm +#SERVER = /vana2/sys +SERVER = /nw5/sys + +ncphook.nlm: ncphook.o ncphook.def prelude.o + nlmconv -T ncphook.def -l ld + +prelude.o: prelude.c + $(CC) $(CFLAGS) -c -o prelude.o prelude.c + +ncphook.o: ncphook.s + $(CC) $(CFLAGS) -c ncphook.s + +ncphook.s: ncphook.c ncphook.h + $(CC) $(CFLAGS) -S ncphook.c + +clean: + rm -f *.o *.s *.nlm + +mrproper: clean + +distclean: mrproper + +install: ncphook.nlm + cp ncphook.nlm ${SERVER}/ncphook.nlm diff --git a/contrib/nss64/ncphook.c b/contrib/nss64/ncphook.c new file mode 100644 index 0000000..e59d25f --- /dev/null +++ b/contrib/nss64/ncphook.c @@ -0,0 +1,663 @@ +#include "ncphook.h" +#include +#include +#include +#include +#include +#include + +static unsigned char NSS2NCPErrorTable[5000]; + +static void InitNSS2NCPErrorTable(void) { + memset(NSS2NCPErrorTable, 0xFF, sizeof(NSS2NCPErrorTable)); + + NSS2NCPErrorTable[ 0] = 0x96; + NSS2NCPErrorTable[ 1] = 0xFD; + NSS2NCPErrorTable[ 2] = 0xFD; + NSS2NCPErrorTable[ 4] = 0x77; + NSS2NCPErrorTable[ 7] = 0xFB; + NSS2NCPErrorTable[ 99] = 0xFC; + NSS2NCPErrorTable[ 101] = 0x83; + NSS2NCPErrorTable[ 102] = 0x83; + NSS2NCPErrorTable[ 103] = 0x01; + NSS2NCPErrorTable[ 104] = 0x01; + NSS2NCPErrorTable[ 300] = 0x9C; + NSS2NCPErrorTable[ 400] = 0x9C; + NSS2NCPErrorTable[ 401] = 0x88; + NSS2NCPErrorTable[ 402] = 0x9B; + NSS2NCPErrorTable[ 404] = 0x9E; + NSS2NCPErrorTable[ 405] = 0x9C; + NSS2NCPErrorTable[ 406] = 0x9C; + NSS2NCPErrorTable[ 408] = 0x9C; + NSS2NCPErrorTable[ 409] = 0x9C; + NSS2NCPErrorTable[ 410] = 0x9C; + NSS2NCPErrorTable[ 411] = 0x98; + NSS2NCPErrorTable[ 417] = 0xA0; + NSS2NCPErrorTable[ 421] = 0x01; + NSS2NCPErrorTable[ 438] = 0x82; + NSS2NCPErrorTable[ 439] = 0x9D; + NSS2NCPErrorTable[ 440] = 0x9C; + NSS2NCPErrorTable[ 444] = 0x9C; + NSS2NCPErrorTable[ 445] = 0x2D; + NSS2NCPErrorTable[ 499] = 0x9C; + NSS2NCPErrorTable[ 500] = 0x8E; + NSS2NCPErrorTable[ 501] = 0x8D; + NSS2NCPErrorTable[ 502] = 0x90; + NSS2NCPErrorTable[ 503] = 0x8F; + NSS2NCPErrorTable[ 504] = 0x92; + NSS2NCPErrorTable[ 505] = 0x91; + NSS2NCPErrorTable[ 506] = 0x8B; + NSS2NCPErrorTable[ 507] = 0xA4; + NSS2NCPErrorTable[ 508] = 0x9A; + NSS2NCPErrorTable[ 550] = 0xBE; + NSS2NCPErrorTable[ 601] = 0xCF; + NSS2NCPErrorTable[ 650] = 0x17; + NSS2NCPErrorTable[ 651] = 0x11; + NSS2NCPErrorTable[ 652] = 0x18; + NSS2NCPErrorTable[ 653] = 0x95; + NSS2NCPErrorTable[ 654] = 0x95; + NSS2NCPErrorTable[ 700] = 0xBF; + NSS2NCPErrorTable[ 701] = 0xBF; + NSS2NCPErrorTable[ 702] = 0xBF; + NSS2NCPErrorTable[ 703] = 0xBF; + NSS2NCPErrorTable[ 800] = 0x98; + NSS2NCPErrorTable[ 801] = 0x98; + NSS2NCPErrorTable[ 804] = 0x78; + NSS2NCPErrorTable[ 850] = 0x8C; + NSS2NCPErrorTable[ 851] = 0x84; + NSS2NCPErrorTable[ 856] = 0xFE; + NSS2NCPErrorTable[ 857] = 0x9C; + NSS2NCPErrorTable[ 859] = 0xA8; + NSS2NCPErrorTable[ 860] = 0x94; + NSS2NCPErrorTable[ 861] = 0x93; + NSS2NCPErrorTable[ 862] = 0x8A; + NSS2NCPErrorTable[ 863] = 0x8A; + NSS2NCPErrorTable[ 867] = 0xFC; + NSS2NCPErrorTable[ 868] = 0x8E; + NSS2NCPErrorTable[ 869] = 0x85; + NSS2NCPErrorTable[ 870] = 0x84; + NSS2NCPErrorTable[ 900] = 0xA2; + NSS2NCPErrorTable[ 901] = 0x80; + NSS2NCPErrorTable[ 903] = 0xFE; + NSS2NCPErrorTable[ 905] = 0x80; + NSS2NCPErrorTable[ 906] = 0x80; + NSS2NCPErrorTable[ 907] = 0x80; + NSS2NCPErrorTable[ 908] = 0x80; + NSS2NCPErrorTable[ 1303] = 0x01; + NSS2NCPErrorTable[ 1503] = 0x01; + NSS2NCPErrorTable[ 2000] = 0xA5; +} + +static LONG NSS2NCPError(nuint32 ec) { + if (ec) { + if (ec < 20000 || ec >= 20000 + sizeof(NSS2NCPErrorTable)) { + return 0xFF; + } + return NSS2NCPErrorTable[ec - 20000]; + } + return 0; +} + +static nuint32 nlmHandle; +static nuint32 NCPRTag; +//static nuint32 AllocRTag; +static int ncpHooked = 0; + +static inline void cachePut(struct cacheblk* cacheBlock) { + if (!--cacheBlock->pinCount) { + cacheUnpinned(cacheBlock); + } +} + +static inline void releaseReadReply(struct largeReadControl* lrc) { + struct largeReadControlFrag* lrcf; + unsigned int i; + + lrcf = lrc->frags + 1; + for (i = lrc->fragCount; --i; ) { + struct cacheblk* cacheBlock; + + cacheBlock = lrcf->cacheBlock; + if (cacheBlock) { + cachePut(cacheBlock); + } + lrcf++; + } + return; +} + +static void sendDone(struct ncpSendCacheCB* sendCb) { + struct largeReadControlFrag* lrcf; + struct largeReadControl* lrc; + unsigned int i; + + lrc = (**NW_connectionTable)[sendCb->connNum]->largeReadControl; + lrcf = lrc->frags + 1; + for (i = lrc->fragCount; --i; ) { + mailInterrupt(cachePut, lrcf->cacheBlock); + lrcf++; + } + return; +} + +static inline void __LBL_sSignal(struct semaphore* sem) { + if (!--sem->value && sem->queue) { + LBL_sSignal(sem); + } +} + +static inline void readAsyncCallback(struct LB_async* req) { + struct largeReadControlFrag* lrcf; + + lrcf = req->frag; + if (req->errorCode) { + lrcf->fragAddr = NULL; + lrcf->cacheBlock = NULL; + SetErrno(req->sema->data, req->errorCode); + } else { + struct cacheblk* cacheBlock = req->cacheBlock; + + cacheBlock->pinCount++; + cacheRelease(cacheBlock); + lrcf->fragAddr = cacheBlock->address + (nuint32)lrcf->fragAddr; + lrcf->cacheBlock = cacheBlock; + } + __LBL_sSignal(req->sema); + LB_freeAsyncio(req); +} + +static inline void __LBL_sWait(struct semaphore* sem) { + if (sem->value) { + if (sem->value < 0 || sem->queue) { + LBL_sWait(sem); + } else { + sem->value++; + } + } else { + sem->value = 1; + } +} + +static inline void __LBL_cntSignal(struct semaphore* sem, int val) { + sem->value += val; + if (sem->queue) { + LBL_cntSignal(sem, val); + } +} + +static inline void __LBL_cntWait(struct semaphore* sem, int val) { + if (sem->value < val) { + LBL_cntWait(sem, val); + } else { + sem->value -= val; + } +} + +static inline int __LBL_xIsLocked(struct semaphore* sem) { + return sem->value; +} + +static inline void __LBL_xSignal(struct semaphore* sem) { + sem->value = 0; + if (sem->queue) { + LBL_xSignal(sem); + } +} + +static inline void __LBL_xWait(struct semaphore* sem) { + if (sem->value) { + LBL_xWait(sem); + } else { + sem->value = -1; + } +} + +static nuint32 nssReadEnter; +static nuint32 nssReadExit; +static nuint32 nssGetSizeEnter; +static nuint32 nssGetSizeExit; + +static inline unsigned long long shr(unsigned long long val, unsigned int shift) { + return val >> shift; +} + +void Case72(struct ncpReqInfo* info, struct ncpSend* send, nuint32 unk, nuint32 reqLen, + void* workspace, nuint32 workspaceLen); + +struct fhOffsLen { + nuint16 filehandle_l PACKED; + nuint32 filehandle_h PACKED; + nuint16 rsvd PACKED; + unsigned long long offset PACKED; + unsigned long long length PACKED; + nuint8 data[1]; +}; + +struct fhReq { + nuint16 filehandle_l PACKED; + nuint32 filehandle_h PACKED; + nuint16 rsvd PACKED; +}; + +static void NWSARead(struct ncpReqInfo* info, struct ncpSend* send, struct fhOffsLen* rq, + void* workspace, nuint32 workspaceLen) { + struct fh* nssFD; + nuint32 connNum; + struct zComnFile zFile; + struct zComnInfo zInfo; + + nssReadEnter++; + zFile.fileHandle = rq->filehandle_h; + zFile.nssHandle = 0; + Inst.readRequests++; + connNum = info->conn; + zInfo.errorcode = 0; + zInfo.connection = connNum; + zInfo.conn = NULL; + zInfo.reserved2 = 0; + zInfo.reserved3 = 2; + __LBL_cntWait(&ReserveResource, 32); + if (zFile.nssHandle == NULL) { + nssFD = COMN_DoResolveFileHandle(&zInfo, &zFile); + } else { + nssFD = zFile.nssHandle; + } + if (nssFD) { + if ((nssFD->accessMode & zRR_READ_ACCESS) == 0) { + SetErrno(&zInfo, zERR_NO_READ_PRIVILEGE); + } else { + unsigned long long file_offset; + nuint32 read_length; + unsigned long long file_size; + unsigned long long requestEnd; + unsigned long long pageNumber; + nuint32 firstByte; + struct largeReadControl* lrc; + nuint32 was_read; + struct largeReadControlFrag* lrcf_base; + nuint8 cacheShift; + struct nwconnection* conn; + nuint32 pagesRead; + nuint32 cacheBlockSize; + struct fh2* nssFH2; + struct fh2* nssFH1; + struct semaphore readDoneSema; + struct nxt* fh; + struct largeReadControlFrag* lrcf; + nuint32 readBytes; + + file_offset = rq->offset; + read_length = rq->length > 65536 ? 65536 : rq->length; + + nssFH1 = nssFD->nssFH; + + __LBL_sWait(&nssFH1->sema); + if (((nssFH1->volume->flags & zATTR_COW) == 0) || ((nssFD->x2C & 4) == 0) || ((nssFH2 = nssFH1->altFH) == NULL)) { + nssFH2 = NULL; + file_size = nssFH1->file_size; + } else { + __LBL_sWait(&nssFH2->sema); + file_size = nssFH2->file_size; + } + if (file_size <= file_offset) { + __LBL_cntSignal(&ReserveResource, 32); + if (nssFH2) { + __LBL_sSignal(&nssFH2->sema); + } + __LBL_sSignal(&nssFH1->sema); + *(nuint64*)workspace = 0; + send->ReplyKeep(info, 0, 1, workspace, 8); + goto quit; + } + if (file_size < file_offset + read_length) { + read_length = file_size - file_offset; + } + cacheShift = nssFH1->cacheShift; + cacheBlockSize = 1 << cacheShift; + firstByte = file_offset & (cacheBlockSize - 1); +// asm __volatile__ (" int $3\n"); + pageNumber = shr(file_offset, cacheShift); + readBytes = cacheBlockSize - firstByte; + requestEnd = file_offset + read_length - 1; + requestEnd = shr(requestEnd, cacheShift) - pageNumber; + conn = (**NW_connectionTable)[zInfo.connection]; + if (requestEnd > conn->maxReadCacheBuf) { + read_length = (conn->maxReadCacheBuf - 1) << cacheShift; + } + if (read_length > conn->ncpDataSize - 8) { + read_length = conn->ncpDataSize - 8; + } + fh = &nssFH1->locks; + if (fh->next != fh) { + if (COMN_IsSharedByteRange(&zInfo, nssFH1, file_offset, read_length)) { + SetErrno(&zInfo, zERR_IOLOCK_ERROR); + if (nssFH2) { + __LBL_sSignal(&nssFH2->sema); + } + __LBL_sSignal(&nssFH1->sema); + goto errexit; + } + } + lrc = conn->largeReadControl; + lrc->info = info; + lrc->connNum = connNum; + lrc->send = send; + lrcf_base = lrc->frags; + lrcf_base->cacheBlock = NULL; + lrcf_base->fragLen = 8; + lrcf_base->fragAddr = lrcf_base->buffer; + *(unsigned long long*)(lrcf_base->buffer) = read_length; + was_read = 0; + readDoneSema.queue = 0; + readDoneSema.value = 0; + readDoneSema.data = &zInfo; + pagesRead = 0; + lrcf = lrcf_base + 1; + while (1) { + struct fh2* nssFH; + struct cacheblk* cacheBlock; + + if (readBytes > read_length) { + readBytes = read_length; + } + if (!--PeriodicYieldCount) { + ++Inst.readYieldRequests; + PeriodicYieldCount = 16; + CYieldIfNeeded(); + } + if (nssFH2 && COMN_ReadSnapOrDontCopyToSnap(nssFH1, pageNumber)) { + nssFH = nssFH2; + } else { + nssFH = nssFH1; + } + cacheBlock = fastReadCache(&nssFH->netwareFH, pageNumber); + if (cacheBlock) { + cacheBlock->pinCount++; + cacheRelease(cacheBlock); + lrcf->cacheBlock = cacheBlock; + lrcf->fragAddr = cacheBlock->address + firstByte; + } else { + struct LB_async* req; + + readDoneSema.value++; + req = LB_getAsyncio(); + req->errorCode = 0; + req->netwareFH = &nssFH->netwareFH; + req->cacheBlock = NULL; + req->x50 = 0; + req->x54 = 0; + req->frag = lrcf; + req->sema = &readDoneSema; + req->pageNumber = pageNumber; + lrcf->fragAddr = (void*)firstByte; + asyncReadFileBlk(req, readAsyncCallback); + } + lrcf->fragLen = readBytes; + lrcf++; + was_read += readBytes; + read_length -= readBytes; + if (read_length == 0) { + break; + } + pageNumber++; + pagesRead++; + firstByte = 0; + readBytes = 1 << nssFH1->x94; + } + lrc->fragCount = pagesRead + 2; + ++nssFH1->opsCount; + if (__LBL_xIsLocked(&readDoneSema)) { + __LBL_xWait(&readDoneSema); + __LBL_xSignal(&readDoneSema); + } + __LBL_cntSignal(&ReserveResource, 32); + if (nssFH2) { + __LBL_sSignal(&nssFH2->sema); + } + __LBL_sSignal(&nssFH1->sema); + if (zInfo.errorcode) { + COMN_Release(&nssFH1); + /* __LBL_cntSignal(&ReserveResource, 32); */ + releaseReadReply(lrc); + send->ReplyKeepNoFragments(info, NSS2NCPError(zERR_HARD_READ_ERROR)); + goto quit; + } + Inst.readBytes += was_read; + if (zInfo.conn) { + zInfo.conn->bytesRead += was_read; + } +// asm __volatile__ (" int $3\n"); + send->ReplyReleaseWithFragments(connNum, info, sendDone); + if (pagesRead == pageNumber - nssFD->nextReadAheadPage) { + if (pagesRead) { + nssFD->x2D >>= pagesRead; + nssFD->nextReadAheadPage = pageNumber + 1; + } + if (nssFD->x2D == 0) { + asyncReadAhead(nssFD); + } + } + COMN_Release(&nssFH1); + goto quit; + } + } +errexit:; + __LBL_cntSignal(&ReserveResource, 32); + send->ReplyKeepNoFragments(info, NSS2NCPError(zInfo.errorcode)); +quit:; + COMN_DoReleaseFileHandleIDP(&zInfo, &zFile); + nssReadExit++; + return; +} + +static void NWSAGetSize(struct ncpReqInfo* info, struct ncpSend* send, struct fhReq* rq, + void* workspace, nuint32 workspaceLen) { + struct fh* nssFD; + nuint32 connNum; + struct zComnFile zFile; + struct zComnInfo zInfo; + + nssGetSizeEnter++; + zFile.fileHandle = rq->filehandle_h; + zFile.nssHandle = 0; + connNum = info->conn; + zInfo.errorcode = 0; + zInfo.connection = connNum; + zInfo.conn = NULL; + zInfo.reserved2 = 0; + zInfo.reserved3 = 2; + __LBL_cntWait(&ReserveResource, 32); + if (zFile.nssHandle == NULL) { + nssFD = COMN_DoResolveFileHandle(&zInfo, &zFile); + } else { + nssFD = zFile.nssHandle; + } + if (nssFD) { + struct fh2* nssFH2; + struct fh2* nssFH1; + + nssFH1 = nssFD->nssFH; + + __LBL_sWait(&nssFH1->sema); + if (((nssFH1->volume->flags & zATTR_COW) == 0) || ((nssFD->x2C & 4) == 0) || ((nssFH2 = nssFH1->altFH) == NULL)) { + nssFH2 = NULL; + *(nuint64*)workspace = nssFH1->file_size; + } else { + __LBL_sWait(&nssFH2->sema); + *(nuint64*)workspace = nssFH2->file_size; + } + __LBL_cntSignal(&ReserveResource, 32); + if (nssFH2) { + __LBL_sSignal(&nssFH2->sema); + } + __LBL_sSignal(&nssFH1->sema); + send->ReplyKeep(info, 0, 1, workspace, 8); + } else { + __LBL_cntSignal(&ReserveResource, 32); + send->ReplyKeepNoFragments(info, NSS2NCPError(zInfo.errorcode)); + } + COMN_DoReleaseFileHandleIDP(&zInfo, &zFile); + nssGetSizeExit++; + return; +} + +static void nss64NCP(struct ncpReqInfo* i, struct ncpSend* ncpsend, nuint32 unknown, nuint32 reqLen, + void* workspace, nuint32 workspaceLen) { + nuint32 err; + struct nwconnection* conn; + + conn = (**NW_connectionTable)[i->conn]; + /* Why this happens?! Netware's NCP write suffers from this bug too - you can force it to + write random parts of memory to disk by issuing write command which says that + 60KB of data is going to be written... MTU..60000 bytes will contain random garbage */ + /* We prevent this by truncating request */ + err = 0x7E; +// asm __volatile__ (" int $3\n"); + if (reqLen < offsetof(struct ncpReqInfo, request) + 2) { + goto errquit; + } + reqLen -= offsetof(struct ncpReqInfo, request) - 2; + if (reqLen > conn->ncpDataSize - 8) { + if (i->request[1] == 2) { + reqLen = conn->ncpDataSize - 8; + } else { + goto errquit; + } + } + switch (i->request[1]) { + case 1: + if (reqLen < 8 + 8 + 8) { + break; + } + { + struct fhOffsLen* rq = (struct fhOffsLen*)(i->request + 2); + + err = 0xFF; + if (rq->rsvd != 0) { + break; + } + err = 0x84; + if (((rq->filehandle_l - 1U) & 0xFFFF) != (rq->filehandle_h & 0xFFFF)) { + break; + } + if (!(rq->filehandle_h & 0x80000000U)) { + /* only NSS handles allowed... We have to do some fallback here... */ + break; + } + NWSARead(i, ncpsend, rq, workspace, workspaceLen); + } + return; + case 2: + if (reqLen < 8 + 8 + 8) { + break; + } + reqLen -= 24; + { + struct zComnInfo info; + struct zComnFile file; + struct zComnPosition pos; + struct fhOffsLen* rq = (struct fhOffsLen*)(i->request + 2); + +// asm __volatile__ (" int $3\n"); + + if (rq->length > reqLen) { + rq->length = reqLen; + } + err = 0xFF; + if (rq->rsvd != 0) { + break; + } + err = 0x84; + if (((rq->filehandle_l - 1U) & 0xFFFF) != (rq->filehandle_h & 0xFFFF)) { + break; + } + if (!(rq->filehandle_h & 0x80000000U)) { + /* only NSS handles allowed... We have to do some fallback here... */ + break; + } + Inst.writeRequests++; + info.errorcode = 0; + info.connection = i->conn; + info.conn = NULL; + info.reserved2 = 0; + info.reserved3 = 2; + file.fileHandle = rq->filehandle_h; + file.nssHandle = NULL; + pos.written = 0; + if (rq->length) { + pos.offset = rq->offset; + pos.length = rq->length; + pos.buffer = rq->data; + pos.reserved1 = 0; + COMN_Write(&info, &pos, &file); + Inst.writtenBytes += pos.written; + if (info.conn) { + info.conn->bytesWritten += pos.written; + } + } else { + COMN_SetDataSize(&info, &file, rq->offset, 0); + } + if (info.errorcode) { + ncpsend->ReplyKeepNoFragments(i, NSS2NCPError(info.errorcode)); + } else { + unsigned long long len = pos.written; + ncpsend->ReplyKeep(i, 0, 1, &len, sizeof(len)); + } + COMN_DoReleaseFileHandleIDP(&info, &file); + } + return; + case 3: + if (reqLen < 8) { + break; + } + { + struct fhReq* rq = (struct fhReq*)(i->request + 2); + + err = 0xFF; + if (rq->rsvd != 0) { + break; + } + err = 0x84; + if (((rq->filehandle_l - 1U) & 0xFFFF) != (rq->filehandle_h & 0xFFFF)) { + break; + } + if (!(rq->filehandle_h & 0x80000000U)) { + /* only NSS handles allowed... We have to do some fallback here... */ + break; + } + NWSAGetSize(i, ncpsend, rq, workspace, workspaceLen); + } + return; + default: + break; + } +errquit:; + ncpsend->ReplyKeepNoFragments(i, err); +} + +static void termFn(int dummy) { + if (ncpHooked) { + ncpHooked = 0; + ReleaseNCPVerb(NCPRTag, NCP_NSS64Verb); + } +} + +int main(int argc, char* argv[]) { + int err; + + signal(SIGINT, termFn); + signal(SIGTERM, termFn); + + InitNSS2NCPErrorTable(); + + nlmHandle = GetNLMHandle(); +// AllocRTag = AllocateResourceTag(nlmHandle, "Buffer memory", AllocSignature); + NCPRTag = AllocateResourceTag(nlmHandle, "64-bit Linux NCP calls", NCPVerbRTag); + err = HookNCPVerb(NCPRTag, NCP_NSS64Verb, nss64NCP); + if (err) { + printf("Cannot hook NCP 0x%02X, error = %u!\r\n", NCP_NSS64Verb, err); + return 0; + } + ncpHooked = 1; + ExitThread(TSR_THREAD, 0); +} diff --git a/contrib/nss64/ncphook.def b/contrib/nss64/ncphook.def new file mode 100644 index 0000000..cafc245 --- /dev/null +++ b/contrib/nss64/ncphook.def @@ -0,0 +1,22 @@ +SCREENNAME "none" +VERSION 1 0 1 +COPYRIGHT "(c) 2001 Petr Vandrovec" +DESCRIPTION "NCPs for 64bit file access" +OS_DOMAIN +PSEUDOPREEMPTION +IMPORT memset,printf,signal +IMPORT _SetupArgv,_StartNLM,_TerminateNLM +IMPORT AllocateResourceTag,ExitThread,GetNLMHandle,CYieldIfNeeded +IMPORT HookNCPVerb,ReleaseNCPVerb +IMPORT COMN_Write,COMN_SetDataSize,COMN_DoReleaseFileHandleIDP,COMN_Release +IMPORT COMN_IsSharedByteRange,COMN_DoResolveFileHandle,COMN_ReadSnapOrDontCopyToSnap +IMPORT asyncReadAhead,asyncReadFileBlk,fastReadCache,mailInterrupt +IMPORT cacheUnpinned,cacheRelease +IMPORT LB_getAsyncio,LB_freeAsyncio +IMPORT LBL_sSignal,LBL_sWait,LBL_cntSignal,LBL_cntWait,LBL_xSignal,LBL_xWait +IMPORT SetErrno +IMPORT ReserveResource,NW_connectionTable,PeriodicYieldCount +#MODULE CLIB,MBNWSA +INPUT prelude.o +INPUT ncphook.o +OUTPUT ncphook.nlm diff --git a/contrib/nss64/ncphook.h b/contrib/nss64/ncphook.h new file mode 100644 index 0000000..4e95ad2 --- /dev/null +++ b/contrib/nss64/ncphook.h @@ -0,0 +1,223 @@ +#ifndef __NCP_HOOK_H__ +#define __NCP_HOOK_H__ + +#include +#include + +typedef unsigned long long nuint64; + +LONG AllocateResourceTag(LONG NLMHandle, const unsigned char* description, LONG resourceType); +unsigned int GetNLMHandle(void); +void* Alloc(LONG len, nuint32 rTag); + +#define PACKED __attribute__((packed)) + +#define NCPVerbRTag 0x5650434E + +struct ncpReqInfo { + nuint8 reserved1[33] PACKED; + nuint16 conn PACKED; + nuint8 task PACKED; + nuint8 request[1] PACKED; +}; + +struct ncpConnInfo { + nuint8 reserved1[0x86] PACKED; + nuint32 bytesRead PACKED; + nuint32 bytesWritten PACKED; +}; + +struct ncpSend { + void (*ReplyKeep)(struct ncpReqInfo*, nuint32 error, nuint32 fragCount, void* addr, nuint32 len, ...); + void (*ReplyDisgard)(struct ncpReqInfo*, nuint32 error, nuint32 fragCount, void* addr, nuint32 len, ...); + void (*ReplyKeepNoFragments)(struct ncpReqInfo*, nuint32 error); + void* (*GetReplyKeepBuffer)(struct ncpReqInfo*); + void (*ReplyKeepBufferFilledOut)(struct ncpReqInfo*, nuint32 len); + void (*ReplyKeepNoFragmentsWithStation)(nuint32 conn, nuint32 error); + void (*ReplyUsingAllocBuffer)(struct ncpReqInfo*, nuint32 error, void* base, nuint32 len); + void (*ReplyKeepWithBufferAndFreePtr)(struct ncpReqInfo*, nuint32 error, void* toFree, nuint32 fragCount, void* addr, nuint32 len, ...); + void (*ReplyReleaseWithFragments)(nuint32 conn, struct ncpReqInfo*, void (*fn)()); +}; + +nuint32 HookNCPVerb(nuint32 rTag, nuint32 ncpVerb, void (*ncpFunc)(struct ncpReqInfo*, struct ncpSend*, nuint32, nuint32 reqLen, + void* workspace, nuint32 workspaceLen)); + +nuint32 ReleaseNCPVerb(nuint32 rTag, nuint32 ncpVerb); + +struct cacheblk { + void* address PACKED; + nuint8 y4[0x7B-0x04] PACKED; + nuint8 pinCount PACKED; +}; + +void cacheUnpinned(struct cacheblk*); + +struct ncpSendCacheCB { + nuint8 y0[0x24-0x00] PACKED; + nuint32 connNum PACKED; +}; + +struct largeReadControlFrag { + nuint8 y0[0x04-0x00] PACKED; + void* fragAddr PACKED; + struct cacheblk* cacheBlock PACKED; + nuint32 fragLen PACKED; + nuint8 y10[0x14-0x10] PACKED; + nuint8 buffer[12] PACKED; +}; + +struct largeReadControl { + struct ncpReqInfo* info PACKED; + nuint32 connNum PACKED; + struct ncpSend* send PACKED; + nuint8 y0C[0x14-0x0C] PACKED; + nuint32 fragCount PACKED; + nuint32 y18 PACKED; + struct largeReadControlFrag frags[0] PACKED; +}; + +struct semaphore { + void* queue PACKED; + int value PACKED; + void* data PACKED; +}; + +struct nxt { + struct nxt* next PACKED; +}; + +struct nssVolume { + nuint8 y[0x168-0x00] PACKED; + nuint32 flags PACKED; +}; + +struct fh2 { + nuint8 y0[0x08-0x00] PACKED; + unsigned long long file_size PACKED; + nuint8 y10[0x14-0x10] PACKED; + nuint8 cacheShift PACKED; + nuint8 y15[0x1C-0x15] PACKED; + nuint32 opsCount PACKED; + nuint8 y20[0x38-0x20] PACKED; + struct fh2* altFH PACKED; + nuint8 y3C[0x44-0x3C] PACKED; + struct nssVolume* volume PACKED; + nuint8 y48[0x4C-0x48] PACKED; + nuint32 netwareFH PACKED; + nuint8 y50[0x60-0x50] PACKED; + struct semaphore sema PACKED; + nuint8 y6C[0x94-0x6C] PACKED; + nuint8 x94 PACKED; + nuint8 y95[0xD8-0x95] PACKED; + struct nxt locks PACKED; +}; + +struct fh { + nuint8 y0[0x0C-0x00] PACKED; + struct fh2* nssFH PACKED; + nuint8 y10[0x24-0x10] PACKED; + nuint32 accessMode PACKED; + nuint8 y28[0x2C-0x28] PACKED; + nuint8 x2C PACKED; + nuint8 x2D PACKED; + nuint8 y2E[0x38-0x2E] PACKED; + nuint32 nextReadAheadPage PACKED; +}; + +struct zComnInfo { + nuint32 errorcode PACKED; + nuint32 connection PACKED; + struct ncpConnInfo* conn PACKED; + nuint32 reserved2 PACKED; + nuint32 reserved3 PACKED; +}; + +struct zComnPosition { + unsigned long long offset PACKED; + nuint32 length PACKED; + void* buffer PACKED; + nuint32 reserved1 PACKED; + nuint32 written PACKED; +}; + +struct zComnFile { + nuint32 fileHandle PACKED; + struct fh* nssHandle PACKED; +}; + +struct nwconnection { + nuint8 y0[0x180] PACKED; + nuint32 maxReadCacheBuf PACKED; + struct largeReadControl* largeReadControl PACKED; + nuint32 ncpDataSize PACKED; +}; + +struct LB_async { + nuint8 y0[0x0C-0x00] PACKED; + struct semaphore* sema PACKED; + nuint8 y10[0x3C-0x10] PACKED; + nuint32 errorCode PACKED; + nuint32* netwareFH PACKED; + struct cacheblk* cacheBlock PACKED; + nuint8 y48[0x4C-0x48] PACKED; + nuint32 pageNumber PACKED; + nuint32 x50 PACKED; + nuint8 x54 PACKED; + nuint8 y55[0x6C-0x55] PACKED; + struct largeReadControlFrag* frag PACKED; +}; + +struct { + nuint8 y0[0x54-0x00] PACKED; + nuint32 readYieldRequests PACKED; + nuint8 y58[0x5C-0x58] PACKED; + nuint32 readRequests PACKED; + nuint32 writeRequests PACKED; + nuint32 readBytes PACKED; + nuint32 writtenBytes PACKED; +} Inst; + +extern struct nwconnection* (**NW_connectionTable)[]; +extern struct semaphore ReserveResource; +extern int PeriodicYieldCount; + +extern void LBL_sSignal(struct semaphore*); +extern void LBL_sWait(struct semaphore*); +extern void LBL_cntSignal(struct semaphore*, int); +extern void LBL_cntWait(struct semaphore*, int); +extern void LBL_xSignal(struct semaphore*); +extern void LBL_xWait(struct semaphore*); + +extern void mailInterrupt(void (*)(struct cacheblk*), struct cacheblk*); +extern struct cacheblk* fastReadCache(nuint32*, nuint32 block); +extern void asyncReadFileBlk(struct LB_async*, void (*)(struct LB_async*)); +extern void cacheRelease(struct cacheblk*); +extern void asyncReadAhead(struct fh*); + +extern void SetErrno(struct zComnInfo*, nuint32 nssErrorCode); + +extern void CYieldIfNeeded(void); + +extern void LB_freeAsyncio(struct LB_async*); +extern struct LB_async* LB_getAsyncio(void); + +extern void COMN_Write(struct zComnInfo*, struct zComnPosition*, struct zComnFile*); +extern void COMN_SetDataSize(struct zComnInfo*, struct zComnFile*, unsigned long long offs, nuint32 flags); +extern struct fh* COMN_DoResolveFileHandle(struct zComnInfo*, struct zComnFile*); +extern void COMN_DoReleaseFileHandleIDP(struct zComnInfo*, struct zComnFile*); +extern int COMN_IsSharedByteRange(struct zComnInfo*, struct fh2*, unsigned long long offs, unsigned long long len); +extern int COMN_ReadSnapOrDontCopyToSnap(struct fh2*, unsigned int page); +extern void COMN_Release(struct fh2**); + +#define zRR_READ_ACCESS 0x00000001 + +#define zERR_HARD_READ_ERROR 20101 +#define zERR_NO_READ_PRIVILEGE 20861 +#define zERR_IOLOCK_ERROR 20900 + +#define zATTR_COW 0x00040000 + +#define NCP_NSS64Verb 0xE5 + +#endif /* __NCP_HOOK_H__ */ + diff --git a/contrib/nss64/prelude.c b/contrib/nss64/prelude.c new file mode 100644 index 0000000..8e3a3dc --- /dev/null +++ b/contrib/nss64/prelude.c @@ -0,0 +1,49 @@ +/* + * prelude.c + * Copyright (c) 2001 Petr Vandrovec + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +extern void _TerminateNLM(unsigned int, unsigned int, unsigned int); +extern int _SetupArgv(void*); +extern int _StartNLM(void*, void*, const char*, + const char*, unsigned int, void*, + int (*)(), unsigned int, unsigned int, + unsigned int*, void*); +extern int main(int argc, char* argv[]); + +/* unsigned int _argc = 0; */ +static unsigned int NLMID = 0; + + +static int _cstart_(void) { + return _SetupArgv(main); +} + +void _Stop(void) { + _TerminateNLM(NLMID, 0, 5); +} + +unsigned int _Prelude(void* NLMHandle, void* errorScreen, const char* commandLine, + const char* loadDirectoryPath, + unsigned int uninitializedDataLength, void* NLMFileHandle, + int (*readRoutineP)(), unsigned int customDataOffset, + unsigned int customDataSize) { + return _StartNLM(NLMHandle, errorScreen, commandLine, loadDirectoryPath, + uninitializedDataLength, NLMFileHandle, readRoutineP, customDataOffset, + customDataSize, &NLMID, _cstart_); +} + diff --git a/contrib/pam-snapin/INSTALL b/contrib/pam-snapin/INSTALL new file mode 100644 index 0000000..b89d66b --- /dev/null +++ b/contrib/pam-snapin/INSTALL @@ -0,0 +1,48 @@ + +INSTALLATION: +CONTENT OF THE ZIP: + +Directories: +REALDS8: snapin that recognizes NDS8 Unix attributes see the README inside. + PAMNCP REG Registry entries to add this snapin to current user. + PAMNCP DLL The actual snapin DLL + +DUMMYDS8: snapin for testing on DS7 with dummy attributes (LINUX:*), see the README inside. + PAMNCP REG Registry entries to add this snapin to current user. + PAMNCP DLL The actual snapin DLL +DLLS: modules were compiled with BC++4.5. Make sure that you have CW3215.DLL + if you are going to use precompiled modules. + +Source code are for Borland C 4.5. +I am not sure that the snapin code can be provided under GPL since it +use the copyrighted NDSK API calls and the toolbox to make "snapins". +If you need to recompile , you must have subscribed to developer.novell.com (free) +to be able to download the latest NDK for C. +As far as the snapin toolkit, it can be found at the follwing place: +------------------------------------------------------------------------ +http://developer.novell.com/graveyard/index.htm + +"downloads from this page are provided as a courtesy to our development +community. From this page, you can access utilities, APIs, and some source +code for items"that are no longer in active development at Novell." +------------------------------------------------------------------------- + +Unzip this file to a temporary directory and proceed as follow, depending of your version of NWAdmin. If you run several versions of NWAdmin, repeat the process for each one. +NWADMIN95.EXE: +1. copy the appropriate pamncp.dll in the sys:public/win95 of your servers. +2. Check that snapin32.dll AND cw3220.dll are there. If absent, make sure they are in a directory of your path, or copy these files from a recent Novell distribution. To sys:public/win95. +3. Double-click on the pamncp.reg icon to register the snapin in the Current User part of the local registry. Note that this step should be done for every user running this snapin. My solution is to create a NAL application for NWadmin95 and to import the pamncp.reg file into its registry settings page. +NWADMINNT.EXE +1. copy the pamncp.dll in the sys:public/winnt of your servers. +2. steps 2 and 3 are identical to the NWADMIN95.EXE installation. + +NWADMIN32: +1. copy the pamncp.dll in the sys:public/win32/snapins directory. No registry entries are needed. + + +A more complete documentation is **under progress** at +http://cipcinsa.insa-lyon.fr/ppollet/pamncp/ + +Patrick Pollet +Feb 05/02/2001 + diff --git a/contrib/pam-snapin/dummyDS8/README b/contrib/pam-snapin/dummyDS8/README new file mode 100644 index 0000000..ef8e563 --- /dev/null +++ b/contrib/pam-snapin/dummyDS8/README @@ -0,0 +1,77 @@ +This VERSION of the snapin is for uses on pré-DS8 +shcemas +It *may* uses the following Unix properties +that must be created with Schemax +with the following names and syntaxes +and associated to USER and GROUP classes. + +If you don't like extending the schema, don't create +theses attributes and stuff everything in L ( Location +attribute) visible on the Identification page of NWADmin. + +For USERS: + +"LINUX:UID" SYN_INTEGER +"LINUX:Primary GroupName" SYN_DIST_NAME +"LINUX:Primary GroupID" SYN_INTEGER +"LINUX:GID" SYN_INTEGER +"LINUX:Login Shell" SYN_CE_STRING +"LINUX:Home Directory" SYN_CE_STRING +"LINUX:Comments" SYN_CI_STRING + +for GROUPS: +"LINUX:GID" SYN_INTEGER + + + +// Either way , the snapin will always try to get *missing* data +// from the L attribute +// Of course NDS8 real or dummy attributes have priority, that is +// if both exists "NDS8" attribute will keep their values and the +// L attribute value will be erased when saving back the NDS. +So you can migrate slowly... + + User: + U:nnn Unix UID + G:nnn Unix GID + S:/.../... Unix Shell + H:/.../.... Unix Home + Group: + G:nnn Unix GID + + Currently the following attributes recognized by the PAM module + are NOT modifiable by this snapin. You should modify them + using the "built-in" string editor of NWADmin under the Identification Page + ( Location attribute): + User: + O: Unix or NDS name of other group ( if that group is a NDS name + and has a N:nnnn attribute, this value will be used for + translation to Unix name, otherwise, a "proper Unix name" + will be made from the NDS one ( remove context part, + skip all spaces and illegal chars and prepend a Z if its + starts by a digit ( this is required by useradd/usermod + that misbehave with a group name starting with a digit) + C: Unix comment, added to the Gecos field after the full name + (-comma separator added) + P: Primary group name. So far the snapin works with the numeric + Primary Group ID for user's. It may change in the next release. + + Of course any other L (location) strings is left untouched by the snapin + ( no error message)! + + + + + + + + + + +Patrick Pollet +Feb 05/02/2001 + + + + + diff --git a/contrib/pam-snapin/dummyDS8/pamncp.dll b/contrib/pam-snapin/dummyDS8/pamncp.dll new file mode 100644 index 0000000000000000000000000000000000000000..e5d27df43e85ab323cdc1904966b678bbce4780c GIT binary patch literal 90674 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

)7OQ!U{Lak%f7auVh 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 literal 0 HcmV?d00001 diff --git a/contrib/pam-snapin/pamncp.c b/contrib/pam-snapin/pamncp.c new file mode 100644 index 0000000..c412ea4 --- /dev/null +++ b/contrib/pam-snapin/pamncp.c @@ -0,0 +1,2357 @@ +/*------------------------------------------- +NWADmin snapin for PAM_NCP_AUTH module + +version 1.00a (c) Patrick Pollet + patrick.pollet@insa-lyon.fr +detailled documentation: +at http://cipcinsa.insa-lyon.fr/ppollet/pamncp/ + +I am not sure this program cant be distributed +as "Open source" since it use the Netware SDK for C(c) +and the NetWare API for snapins(c) +--------------------------------------------*/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "pamncp.h" + +// if 1 will use dummy NDS8 attributes (LINUX:*) +// created with ShemaX ( see define below for +// the appropriate names) + +// #define USING_DUMMY_ATTRIBUTES 1 + +// UNDEFINE to USE THE REAL ONES UNIX:* +// Either way , the snapin will always try to get *missing* data +// from the L attribute +// Of course NDS8 real or dummy attributes have priority, that is +// if both exists NDS8 attribut will keep their values and the +// L atribute value will be erased when saving the NDS +/* user + U:nnn Unix UID + G:nnn Unix GID + S:/.../... Unix Shell + H:/.../.... Unix Home + Group + G:nnn Unix GID + + Currently the following attributes recognized by the PAM module + are NOT modifiable by this snapin. You should modify them + using the "built-in" string editor of NWADmin under the Identification Page + ( Location attribute): + User: + O: Unix or NDS name of other group ( if that group is a NDS name + and has a N:nnnn attribute, this value will be used for + translation to Unix name, otherwise, a "proper Unix name" + will be made from the NDS one ( remove context part, + skip all spaces and illegal chars and prepend a Z if its + starts by a digit ( this is required by useradd/usermod + that misbehave with a group name starting with a digit) + C: Unix comment, added to the Gecos field after the full name + (-comma separator added) + P: Primary group name. So far the snapin works with the numeric + Primary Group ID for user's. It may change in the next release. + + Of course any other L (location) strings is left untouched by the snapin + ( no error message)! + */ + +/*------------------------------------------------------------------------*/ +/* Function Prototypes */ +/*------------------------------------------------------------------------*/ +#ifdef __cplusplus +extern "C" +{ +#endif + +NWA_SNAPIN_CALLBACK (NWRCODE) + SnapinPamNcpProcUser (pnstr8 name, nuint16 msg, nparam p1, nparam p2); + +NWA_SNAPIN_CALLBACK (NWRCODE) + SnapinPamNcpProcGroup (pnstr8 name, nuint16 msg, nparam p1, nparam p2); + +// DLG proc: the same for users and groups +BOOL FAR PASCAL PamNcpSnapinUserPageDlg ( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam); + +// DLG proc fror help dialog +BOOL FAR PASCAL PamNcpSnapinHelpDlg ( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam); + +// DLG proc for trace dialog +BOOL FAR PASCAL PamNcpSnapinTraceDlg ( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam); + +NWDSContextHandle GetMeAContext(char * caller); +NWDSCCODE ReadObjectData (NWDSContextHandle cx, char *objectName); +NWDSCCODE ModifyObjectDataDS7 ( NWDSContextHandle cx ,char *objectName); +NWDSCCODE ModifyObjectDataDS8 ( NWDSContextHandle cx ,char *objectName,int page); +NWDSCCODE ReadAttributeDef (NWDSContextHandle cx, char* attrname,Attr_Info_T *attrInfo); +NWDSCCODE ReadUnheritedZenFlags ( char *objectName); + +void ShowAdminPreference (void); +void ReadLinuxProfileLoginScript (NWDSContextHandle cx); +int UpdateLinuxProfileLoginScript ( NWDSContextHandle cx,char* objectName,long nextUID,long nextGID); +void setZenCheckBoxes ( HWND hwnd, char * zenString); +void getZenCheckBoxes ( HWND hwnd, char * zenString); +void setZenCheckBoxesBis ( HWND hwnd, char * zenString) ; +void clearZenCheckBoxesBis ( HWND hwnd) ; +void showHideZenCheckBoxesBis ( HWND hwnd, int show) ; +void mergeZen (char * z1, char *z2); +void trim (char * string); +int doPrompt(int page) ; +void Infos (char *message); +void Debug (char *message); +void Trace (char * fmt,...); +void getNameAndContext (char* sourceDistName ,char* nameBuffer,char* contextBuffer); +long displayError (char* prelude,char* AppRoutineName,char* SysRoutineName,long errVal); +void displayMessage( char* AppRoutineName,char* Message ); + + #ifdef __cplusplus +} +#endif + +/*------------------------------------------------------------------------*/ +/* Defines and structures */ +/*------------------------------------------------------------------------*/ +#define ME "Pam Ncp authentication" +#define VERSION "version 1.00 (c) Patrick Pollet INSA Lyon 2001" +#define VERSION_NUM "v 1.00a" + +/**** translatable strings ******/ +// to translate you must also edit the pamncp.rc file +#define SHOW_UNH "Show unherited" +#define HIDE_UNH "Hide unherited" +#define FROM_DS7 " Basic Unix properties (from Location): " +#define FROM_DS8 " Basic Unix properties (from eDirectory): " +#define UID_INVALID "the Unix user ID must be a number." +#define UID_OUTRANGE "the Unix user ID %d is outside permitted range [%d to %d]." +#define GID_INVALID "the Unix group ID must be a number." +#define GID_OUTRANGE "the Unix group ID %d is outside permitted range [%d to %d]." +#define NO_DEF_LINUX_PROFILE "no default Linux profile" + +// names of NDS attributes used + +#ifndef USING_DUMMY_ATTRIBUTES +// the real ones +#define ATTR_UID "UNIX:UID" +#define ATTR_PGNAME "UNIX:Primary GroupName" +#define ATTR_PGID "UNIX:Primary GroupID" +#define ATTR_GID "UNIX:GID" +#define ATTR_SHELL "UNIX:Login Shell" +#define ATTR_COM "UNIX:Comments" +#define ATTR_HOME "UNIX:Home Directory" +#else +// created with Schemax with the same syntax +// and associated to user class and group class +#define ATTR_UID "LINUX:UID" +#define ATTR_PGNAME "LINUX:Primary GroupName" +#define ATTR_PGID "LINUX:Primary GroupID" +#define ATTR_GID "LINUX:GID" +#define ATTR_SHELL "LINUX:Login Shell" +#define ATTR_COM "LINUX:Comments" +#define ATTR_HOME "LINUX:Home Directory" +#endif + +// the attribute used to test presence of NDS8 +// either real or dummy +#define ATTR_NDS8 ATTR_UID + +// other attributes used +// absent NDS8 attributes are searched in L attribute +// also new properties ( Zenux Flags, Other group...) +#define ATTR_LOCATION "L" + +#define ATTR_LOGIN_SCRIPT "Login Script" +#define ATTR_GRP_MBS "Group Membership" + + +// syntaxes of the used attributes +#define SYN_LOCATION SYN_CI_STRING +#define SYN_LOGIN_SCRIPT SYN_STREAM +#define SYN_UID SYN_INTEGER +#define SYN_PGNAME SYN_DIST_NAME +#define SYN_PGID SYN_INTEGER +#define SYN_GID SYN_INTEGER +#define SYN_SHELL SYN_CE_STRING +#define SYN_COM SYN_CI_STRING +#define SYN_HOME SYN_CE_STRING +#define SYN_GRP_MBS SYN_DIST_NAME + + +// misc +#define MAX_STRINGS 32 +#define EGAL " = " +#define CR_LF "\r\n" // was inverted in v <105d +#define YES "Y" +#define NO "N" + + +// snapin defaults are searched in the login script +// of a Profile object named "Linux Profile" +// search starts in current objet context and , if +// not found, move up contexts up to [ROOT] +// search DOES not go in "brother contexts" at any level. +// the first found get the ticket ( no merging of defaults) +#define LINUX_PROFILE "Linux Profile" + +/*** sample login script (case sensitive for now) +no space at the beginning of any line ! +comment with any caracter (# for readability), but +a simple space will do ! +[common] +debug=0 +prompt=1 +[user] +# range of valid Unix UID +minUID=1000 +maxUID=60000 +# range of valid Unix primary group GID +minGID=100 +maxGID=60000 +# default value for primary GID +defGID=100 +#default shell +shell=/bin/bash +#default home. +#the common name of current user will be appended +#after conversion to lower case +#the ending / is REQUIRED +home=/home/ +#default Zenux Flag for user +#F,T: allow remote access by FTP and Telnet +#M: create a ~/.forward file with the NDS property +#Email Address(obsolete) or Internet Email Address +zen=FMT + +[group] +# range of valid group ID +minGID=101 +maxGID=60000 +#default Zenux Flag for members +#A=automount Netware home directory in ~/nwhome +zen=A + +[current] +#this section MUST stay at the end +#since it will be overwritten by the snapin +#in case you selected "automatic values" +#it keeps in NDS the next values to be used +#thus ensuring unique IDS in that context and all BELOW. +nextUID=2000 +nextGID=550 +****************/ + +#define USER_SECTION "[user]" +#define GRP_SECTION "[group]" +#define CUR_SECTION "[current]" +#define COM_SECTION "[common]" + +#define MYHOME "\nhome" +#define MYSHELL "\nshell" +#define MYZEN "\nzen" +#define MYMINUID "\nminUID" +#define MYMAXUID "\nmaxUID" +#define MYMINGID "\nminGID" +#define MYMAXGID "\nmaxGID" +#define MYDEFGID "\ndefGID" +#define MYNEXTUID "\nnextUID" +#define MYNEXTGID "\nnextGID" +#define MYDEBUG "\ntrace" +#define MYPROMPT "\nprompt" + +// default vlues if Linux Profile not found or incomplete +#define DEF_MINUID 1000 +#define DEF_MAXUID 60000 +#define DEF_MINGID_USR 500 +#define DEF_MAXGID_USR 30000 +#define DEF_GID_USR 100 +#define DEF_MINGID_GRP 500 +#define DEF_MAXGID_GRP 30000 +#define DEF_ZEN_USR "" +#define DEF_ZEN_GRP "" +#define DEF_HOME "/home/" +#define DEF_SHELL "/bin/bash" + + + +// what has been red from NDS ( what may has changed) +// set when reading but not used (yet) +#define HAD_UID8 0x0001 +#define HAD_GID8 0x0002 +#define HAD_GID18 0x0004 +#define HAD_SHELL8 0x0008 +#define HAD_HOME8 0x0010 +#define HAD_PGNAME8 0x0020 +#define HAD_COM8 0x0040 +#define HAD_PGID8 0x0080 +#define HAD_NAME8 0x0100 +#define HAD_ZEN 0x0200 +// important flag. If the user had NO location attribute +// we muste create it before adding strings to it. +#define HAD_LOCATION 0x8000 + +// global variables needed by Snapin API +#define NUM_PAGES_USER 1 +#define NUM_PAGES_GRP 1 +#define PAGE_USER 0 +#define PAGE_GROUP 1 + +HINSTANCE hDLL; +NWAPageStruct userPages[NUM_PAGES_USER]; // pages supplementaires +NWAPageStruct groupPages[NUM_PAGES_GRP]; // pages supplementaires + + +// my global variables. +int currentPage =PAGE_USER; // we are editing User or Group object +long DEBUG=0; +nbool bNDS8Around = N_FALSE; // true if NDS8 installed (with UNIX:* attributes) +char currentObject[MAX_DN_CHARS]; // DN of current user +char linuxProfileObjectUsed[MAX_DN_CHARS]=""; + +// some day I will use this struct ... ;-) +struct uInfo { + char initValues[MAX_DN_CHARS][MAX_STRINGS]; // initial values of Location + int nInitValues; // number of loaction red from NDS + char newValues[MAX_DN_CHARS][MAX_STRINGS]; // final values of Location + int nNewValues; // number of location to write back to NDS + long currentUID; + long currentGID; + char currentSHELL[MAX_DN_CHARS]; + char currentHOME[MAX_DN_CHARS]; + char currentPGNAME[MAX_DN_CHARS]; + char currentZEN[MAX_DN_CHARS]; + char currentCOMMENT[MAX_DN_CHARS]; + char unheritedZEN[MAX_DN_CHARS]; + + long newUID; + long newGID; + char newSHELL[MAX_DN_CHARS]; + char newHOME[MAX_DN_CHARS]; + char newPGNAME[MAX_DN_CHARS]; + + int currentReadFLAG; // what has been red + int bChanged; // has changed ? + int bShouldUpdateCurrent; +}; + +char initValues[MAX_DN_CHARS][MAX_STRINGS]; // initial values of Location +int nInitValues=0; // number of loaction red from NDS +char newValues[MAX_DN_CHARS][MAX_STRINGS]; // final values of Location +int nNewValues=0; // number of location to write back to NDS +long currentUID=-1; +long currentGID=-1; +char currentSHELL[MAX_DN_CHARS]=""; +char currentHOME[MAX_DN_CHARS]=""; +char currentPGNAME[MAX_DN_CHARS]=""; +char currentZEN[MAX_DN_CHARS]=""; +char currentCOMMENT[MAX_DN_CHARS]=""; +char unheritedZEN[MAX_DN_CHARS]=""; + +long newUID=-1; +long newGID=-1; +char newSHELL[MAX_DN_CHARS]=""; +char newHOME[MAX_DN_CHARS]=""; +char newPGNAME[MAX_DN_CHARS]=""; + +int currentReadFLAG =0; // what has been red +int bChanged =0; // has changed ? +int bShouldUpdateCurrent=0; + +// these values are set to contents of Linux Profile +// or reset to default values at every opening +// of a detail page ... +long gMinUID=-1; +long gMaxUID=-1; +long gNextUID=-1; +long gMinGID=-1; +long gMaxGID=-1; +long gNextGID=-1; +long gDefGID=-1; +char gDefHome[MAX_DN_CHARS]=""; +char gDefShell[MAX_DN_CHARS]=""; +char gDefZen[MAX_DN_CHARS]=""; +long gPrompt =0; // ask confirm before "stuffing in" next and default values + +NWDSContextHandle MyContext; + +// must be static to stay !on screen between users !!! +static nbool bTraceWindowVisible=FALSE; +static HWND TraceWindowhwnd; + +// content of the comboBox for possible shells +struct shellElement { + char * name; + char * shell; +}; + +static struct shellElement SHELLS []={ +{"Bourne","/bin/bash"}, +{"C","/bin/tch"}, +{"Korne","/bin/ksh"}, +{"Other",""} +}; +#define NB_SHELLS 4 + +/*****************************************************************************/ +// must be called at every call with NWA_GET_PAGECOUNT +// that is just before opening the user or group details multipage dialog +// name = FQDN of object being edited +/*****************************************************************************/ +int doInitValues (char * name, int page) { + + int retERR=NWA_RET_SUCCESS; + + currentPage=page; // don't forget that ! + currentReadFLAG =0; // what has been red + bChanged=FALSE; + bShouldUpdateCurrent=FALSE; + memset(initValues,0,sizeof(initValues)); + memset(linuxProfileObjectUsed,0,sizeof(linuxProfileObjectUsed)); + nInitValues=0; + nNewValues=0; + memset(currentObject,0,sizeof(currentObject)); + currentUID=-1; + currentGID=-1; + newUID=-1; + newGID=-1; + memset(currentSHELL,0,sizeof(currentSHELL)); + memset(currentHOME,0,sizeof(currentHOME)); + memset(currentPGNAME,0,sizeof(currentPGNAME)); + memset(newSHELL,0,sizeof(newSHELL)); + memset(newHOME,0,sizeof(newHOME)); + memset(newPGNAME,0,sizeof(newPGNAME)); + + memset(currentZEN,0,sizeof(currentZEN)); + memset(currentCOMMENT,0,sizeof(currentCOMMENT)); + memset(unheritedZEN,0,sizeof(unheritedZEN)); + if (name) { // should be ?? + lstrcpy(currentObject,name); + MyContext=GetMeAContext("PamNcp Snapin:doInitValues"); + retERR=NWA_ERR_ERROR; + if (MyContext !=(NWDSContextHandle) ERR_CONTEXT_CREATION) + { + // doit first, the DEBUG flag may be modified there + ReadLinuxProfileLoginScript (MyContext); + if (DEBUG && !bTraceWindowVisible) { + CreateDialog (hDLL,"TRACE_DLG",NULL,PamNcpSnapinTraceDlg); + bTraceWindowVisible=TRUE; + } + bNDS8Around=ReadAttributeDef (MyContext,ATTR_NDS8,NULL)==0; + ShowAdminPreference(); + // what to do if error ? + // if I return NWA_ERR_ERROR it may stop the loading + // of all the user's detail page !!! + if (!ReadObjectData(MyContext,currentObject)) + retERR=NWA_RET_SUCCESS; // OK OK + NWDSFreeContext (MyContext); + } + } + if (bTraceWindowVisible) + if (nInitValues) + Trace ("%d Unix properties found in L. ",nInitValues); + else + Trace ("No Unix properties found in L."); + Trace ("End of process IniSnapin: %s.","doInitValues"); + return retERR; +} + + +int doSaveValues (void ) { +NWDSCCODE err; + Trace ("Begin of process:PamNcp Snapin:doSaveValues:%s"," "); + if (bChanged && currentObject[0]) { // really important ! + MyContext=GetMeAContext("PamNcp Snapin:doSaveValues:"); + if (MyContext !=(NWDSContextHandle) ERR_CONTEXT_CREATION) + { + err=ModifyObjectDataDS7(MyContext,currentObject); + if (!err && bNDS8Around) + err= ModifyObjectDataDS8(MyContext,currentObject,currentPage); + if (!err && bShouldUpdateCurrent) { + Trace (" should update current to NUID=%d NGID%d ",gNextUID,gNextGID); + UpdateLinuxProfileLoginScript (MyContext,linuxProfileObjectUsed,gNextUID,gNextGID); + } + NWDSFreeContext (MyContext); + } + } + // MessageBox (0,"Trouble with Context" ,"",MB_OK); + Trace ("End of process:PamNcp Snapin:doSaveValues:%s"," "); + return 0; +} + +int getNumberAndCheck ( char * buffer, long minV, long maxV, + long * foundV, char * msgInvalid, char* msgOutOfRange){ + + char *v; long n; + char aux[256]; + + trim(buffer); // removes spaces + if (buffer[0]) { + n=strtoul(buffer,&v,10); + if (n) { + if (n>=minV && n<=maxV) { + *foundV=n; + return 0; + } + else { + sprintf (aux,msgOutOfRange,n,minV,maxV); + displayMessage (ME,aux); + } + } + else displayMessage(ME,msgInvalid); + return -1; + } + *foundV =-1; // just says it's empty + return 0; // OK if empty +} + + +int collectValues (HWND hwnd, int page) { +char aux [MAX_DN_CHARS+1]; +// this is the point where I should set bChanged to true or false + nNewValues=0; + getZenCheckBoxes (hwnd, aux); + if (strlen(aux)) // not empty + sprintf(newValues[nNewValues++],"Z:%s",aux); + + if (page==PAGE_GROUP) { + // GetDlgItem() returns the number of caracters copied or 0 if fails ! + // this edit line is hidden in user oject page + if (GetDlgItemText(hwnd,IDC_EDIT_GID1,aux,sizeof(aux))) { + if (getNumberAndCheck(aux,gMinGID,gMaxGID,&newGID,GID_INVALID,GID_OUTRANGE)) + return 1; + if (!bNDS8Around) // goes to a location string + sprintf(newValues[nNewValues++],"G:%s",aux); + }else newGID=-1; // empty + + // this edit line is hidden in user oject page + if (GetDlgItemText(hwnd,IDC_EDIT_GNAME,aux,sizeof(aux))) + sprintf(newValues[nNewValues++],"N:%s",aux); // not a NDS8 attribute + + }else { // unneeded test since the others are "non visible" and empty + + if (GetDlgItemText(hwnd,IDC_EDIT_UID,aux,sizeof(aux))) { + if (getNumberAndCheck(aux,gMinUID,gMaxUID,&newUID,UID_INVALID,UID_OUTRANGE)) + return 1; + if (!bNDS8Around) + sprintf(newValues[nNewValues++],"U:%s",aux); + }else newUID=-1; //empty + + if (GetDlgItemText(hwnd,IDC_EDIT_GID,aux,sizeof(aux))) { + if (getNumberAndCheck(aux,gMinGID,gMaxGID,&newGID,GID_INVALID,GID_OUTRANGE)) + return 1; + if (!bNDS8Around) + sprintf(newValues[nNewValues++],"G:%s",aux); + }else newGID=-1; //empty + + if (GetDlgItemText(hwnd,IDC_EDIT_SHELL,aux,sizeof(aux))) + if (!bNDS8Around) + sprintf(newValues[nNewValues++],"S:%s",aux); + else + sprintf(newSHELL,aux); // for ModifyObjectNDS8 + // newSHELL stays empty otherwise + + if (GetDlgItemText(hwnd,IDC_EDIT_HOME,aux,sizeof(aux))) + if (!bNDS8Around) + sprintf(newValues[nNewValues++],"H:%s",aux); + else + sprintf(newHOME,aux); // for ModifyObjectNDS8 + //newHOME stays empty otherwise + } + return 0; +} + +#define MODEL_MSG_USR "The following values will be used: \n UID= %d \n GID= %d \n Home=%s \n Shell= %s \n Zenux=%s \n" +#define MODEL_MSG_GRP "The following values will be used: \n GID= %d\n Zenux=%s \n" +int doPrompt (int page) { +char message [512]; + if (page==PAGE_USER) + sprintf(message,MODEL_MSG_USR,gNextUID,gDefGID,gDefHome,gDefShell,gDefZen); + else + sprintf(message,MODEL_MSG_GRP,gNextGID,gDefZen); + + return (MessageBox (NULL,message,ME, MB_YESNO+MB_ICONQUESTION)==IDYES); + +} + +/*-------------------------------------------------------------------------*/ +/* Function : DllEntryPoint (32-bit) */ +/* LibMain (16-bit) */ +/* From Snapin API demos */ +/* Description : */ +/* Required for DLL startup */ +/* don't ask me what is does... */ +/*-------------------------------------------------------------------------*/ +#ifdef WIN32 +#ifdef __BORLANDC__ +// the only case I have tested +BOOL WINAPI DllEntryPoint ( + HINSTANCE hinstDLL, + DWORD fdwReason, + LPVOID lpvReserved) +#else +BOOL WINAPI DllMain ( + HINSTANCE hinstDLL, + DWORD fdwReason, + LPVOID lpvReserved) +#endif +{ + (void) lpvReserved; // warnings out ! + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + { + hDLL = hinstDLL; + } + /* fall through to thread attach code */ + case DLL_THREAD_ATTACH: + { + break; + } + case DLL_THREAD_DETACH: + { + break; + } + case DLL_PROCESS_DETACH: + { + break; + } + default: + { + break; + } + } + return 1; +} + +#else +int FAR PASCAL LibMain ( + HINSTANCE hInstance, + WORD wDataSeg, + WORD cbHeapSize, + LPSTR lpCmdLine) +{ + + hDLL = hInstance; + if (cbHeapSize != 0) + { + UnlockData (0); + } + return 1; +}; + +#endif + +/*-------------------------------------------------------------------------*/ +/* Function : InitSnapin */ +/* */ +/* Description : */ +/* Every Snapin DLL must provide this function. In this function, */ +/* snapin menu items (under Tools) are registered. Also, object procs */ +/* are registered. */ +/* */ +/*-------------------------------------------------------------------------*/ +int FAR PASCAL InitSnapin () +{ + NWARegisterObjectProc ( + NWA_DS_OBJECT_TYPE, + C_USER, // we provide a page from class User + VERSION, + hDLL, + SnapinPamNcpProcUser, // call me back here + NWA_SNAPIN_VERSION); + NWARegisterObjectProc ( + NWA_DS_OBJECT_TYPE, + C_GROUP, // we provide a page from class Group + VERSION, + hDLL, + SnapinPamNcpProcGroup, // call me back here + NWA_SNAPIN_VERSION); + return NWA_RET_SUCCESS; +} + + +/*-------------------------------------------------------------------------*/ +/* Description : */ +/* Snapin Class Proc */ +/* must be exported in .DEF */ +/*-------------------------------------------------------------------------*/ +N_GLOBAL_CALLBACK (NWRCODE) +SnapinPamNcpProcUser (pnstr8 name, nuint16 msg, nparam p1, nparam p2){ + + switch (msg) + { + case NWA_MSG_INITSNAPIN: { + /*-------------------------------------------------*/ + /* initialize page(s) */ + /*-------------------------------------------------*/ + userPages[0].dlgProc = (DLGPROC) PamNcpSnapinUserPageDlg; + userPages[0].resName = "PAMNCP_UPAGE"; + userPages[0].pageTitle =ME; + userPages[0].initParam = 0; + return NWA_RET_SUCCESS; + } + case NWA_MSG_GETPAGECOUNT: { + if (!doInitValues(name,PAGE_USER)) + return NUM_PAGES_USER; + else return NWA_ERR_ERROR; + } + case NWA_MSG_REGISTERPAGE: { + NWAPageStruct *pageInfo =(NWAPageStruct *)p2; + pageInfo->dlgProc = userPages[p1].dlgProc; + pageInfo->resName = userPages[p1].resName; + pageInfo->pageTitle = userPages[p1].pageTitle; + pageInfo->hDLL = hDLL; + pageInfo->initParam = userPages[p1].initParam; + return NWA_RET_SUCCESS; + } + case NWA_MSG_MODIFY: { + doSaveValues(); + return NWA_RET_SUCCESS; + } + case NWA_MSG_CLOSESNAPIN: { + if (bTraceWindowVisible) { + DestroyWindow (TraceWindowhwnd); + bTraceWindowVisible=FALSE; + } + return NWA_RET_SUCCESS; + } + default: { + break; + } + } + return NWA_RET_SUCCESS; +} + + +// about the same for group +// we use the same "front end" and hide or show some interface elements +/*-------------------------------------------------------------------------*/ +/* Description : */ +/* Snapin Class Proc */ +/* must be exported in .DEF */ +/*-------------------------------------------------------------------------*/ +N_GLOBAL_CALLBACK (NWRCODE) +SnapinPamNcpProcGroup (pnstr8 name, nuint16 msg, nparam p1, nparam p2){ + + switch (msg) + { + case NWA_MSG_INITSNAPIN: { + /*-------------------------------------------------*/ + /* initialize pages */ + /*-------------------------------------------------*/ + groupPages[0].dlgProc = (DLGPROC) PamNcpSnapinUserPageDlg; + groupPages[0].resName = "PAMNCP_UPAGE"; + groupPages[0].pageTitle =ME; + groupPages[0].initParam = 0; + return NWA_RET_SUCCESS; + } + case NWA_MSG_GETPAGECOUNT: { + if (!doInitValues(name,PAGE_GROUP)) + return NUM_PAGES_GRP; + else return NWA_ERR_ERROR; + } + case NWA_MSG_REGISTERPAGE: { + NWAPageStruct *pageInfo =(NWAPageStruct *)p2; + pageInfo->dlgProc = groupPages[p1].dlgProc; + pageInfo->resName = groupPages[p1].resName; + pageInfo->pageTitle = groupPages[p1].pageTitle; + pageInfo->hDLL = hDLL; + pageInfo->initParam = groupPages[p1].initParam; + return NWA_RET_SUCCESS; + } + case NWA_MSG_MODIFY: { + doSaveValues(); + return NWA_RET_SUCCESS; + } + case NWA_MSG_CLOSESNAPIN: { + // evite une GPF en quittant ??? + if (bTraceWindowVisible) { + DestroyWindow (TraceWindowhwnd); + bTraceWindowVisible=FALSE; + } + return NWA_RET_SUCCESS; + } + default: { + break; + } + } + return NWA_RET_SUCCESS; +} + + +/*-------------------------------------------------------------------------*/ +/* Function : PamNCPSnapinPageDlg */ +/* */ +/* Description : */ +/* Page dialog proc to enhance User's or Group's details Details. */ +/* no need to export it in .def file */ +/*-------------------------------------------------------------------------*/ +BOOL FAR PASCAL PamNcpSnapinUserPageDlg ( + HWND hwnd, + UINT message, + WPARAM wParam, + LPARAM lParam) { + + char auxBuf [33]; + int i,selected; + +(void) lParam; // warnings out ! + switch (message) + { + case WM_INITDIALOG: + {// called if admin press my page button + // setup control + Trace("Begin of process WM_INITDIALOG%s."," "); + SetDlgItemText(hwnd,IDC_VERSION_NUM,VERSION_NUM); + if (bNDS8Around) + SetDlgItemText(hwnd,IDC_BASIC,FROM_DS8); + else + SetDlgItemText(hwnd,IDC_BASIC,FROM_DS7); + setZenCheckBoxes (hwnd,currentZEN); + + ShowWindow (GetDlgItem(hwnd,IDC_EDIT_UID), currentPage==PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_EDIT_GID), currentPage==PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_COMBO_SHELL), currentPage==PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_EDIT_SHELL), currentPage==PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_EDIT_HOME), currentPage==PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_UNHERITED), currentPage==PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_UID_LBL), currentPage==PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_GID_LBL), currentPage==PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_HOME_LBL), currentPage==PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_SHELL_LBL), currentPage==PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_EDIT_GID1), currentPage!=PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_GID1_LBL), currentPage!=PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_EDIT_GNAME), currentPage!=PAGE_USER); + ShowWindow (GetDlgItem(hwnd,IDC_GNAME_LBL), currentPage!=PAGE_USER); + showHideZenCheckBoxesBis (hwnd,currentPage==PAGE_USER); + + // activate or not the "default button" + if (linuxProfileObjectUsed[0]) { + SetDlgItemText(hwnd,IDC_DEFAULT,linuxProfileObjectUsed); + EnableWindow (GetDlgItem(hwnd,IDC_DEFAULT),TRUE); + }else{ + SetDlgItemText(hwnd,IDC_DEFAULT,NO_DEF_LINUX_PROFILE); + EnableWindow (GetDlgItem(hwnd,IDC_DEFAULT),FALSE); + } + if (currentPage==PAGE_USER) { + SetDlgItemText(hwnd,IDC_EDIT_HOME,currentHOME); + SetDlgItemText(hwnd,IDC_EDIT_SHELL,currentSHELL); + + if (currentUID !=-1 && ultoa(currentUID,auxBuf,10)) + SetDlgItemText(hwnd,IDC_EDIT_UID,auxBuf); + else + SetDlgItemText(hwnd,IDC_EDIT_UID,""); + + if (currentGID !=-1 && ultoa(currentGID,auxBuf,10)) + SetDlgItemText(hwnd,IDC_EDIT_GID,auxBuf); + else + SetDlgItemText(hwnd,IDC_EDIT_GID,""); + + selected=0; + for ( i=0; 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 e-ac*2T}zBvjl2CS-i + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/contrib/pam/Makefile.in b/contrib/pam/Makefile.in new file mode 100644 index 0000000..966e7e5 --- /dev/null +++ b/contrib/pam/Makefile.in @@ -0,0 +1,62 @@ +# +# Makefile for the linux ncp-filesystem routines. +# + +top_srcdir = @top_srcdir@ +top_builddir = ../.. + +include $(top_builddir)/Make.rules + +LIBS = @INTLLIBS@ @LIBS@ +LIB_PAM_SECURITY = @LIB_PAM_SECURITY@ + +NCP_LIB = libncp.so +NCPLIB_DIR = ../../lib + +PAM_LIBRARY = pam_ncp_auth.so +PAM_OBJECTS = pam_ncp_auth.do support.do + +CFLAGS_pam_ncp_auth.do := -DNCPMOUNT_PATH=\"$(bindir)/ncpmount\" -DNCPUMOUNT_PATH=\"$(bindir)/ncpumount\" + +.PHONY : all install install-dev dep clean mrproper distclean +.PHONY : default + +default: + make -C ../.. + +all: $(PAM_LIBRARY) + +install: all + ${INSTALL} -m 755 $(PAM_LIBRARY) $(DESTDIR)$(LIB_PAM_SECURITY) + +install-dev: + +$(NCPLIB_DIR)/$(NCP_LIB): + make -C $(NCPLIB_DIR) $(NCP_LIB) + +$(PAM_OBJECTS): %.do: %.c + $(CC) $(CFLAGS) $(CCFLAGS) $(CFLAGS_$@) -fPIC -o $@ -c $< + +%.d: %.c + set -e; $(CC) -M $(CFLAGS) $(CCFLAGS) $(CFLAGS_$(@:.d=.do)) $< \ + | sed 's,\($*\)\.o[ :]*,\1.o \1.do \1.to $@ : ,g' > $@; \ + [ -s $@ ] || rm -f $@ + + +$(PAM_LIBRARY): $(PAM_OBJECTS) + $(CC) $(CFLAGS) -shared -o $@ $(PAM_OBJECTS) -L$(NCPLIB_DIR) -lncp -lpam ${LIBS} + +dep: + +clean: + rm -f $(PAM_OBJECTS) $(PAM_LIBRARY) *~ + +mrproper: clean + rm -f *.d + +distclean: mrproper + +ifeq ($(NEED_DEP),yes) +include $(PAM_OBJECTS:%.do=%.d) +endif + diff --git a/contrib/pam/Makefile.pam b/contrib/pam/Makefile.pam new file mode 100644 index 0000000..c9dee9d --- /dev/null +++ b/contrib/pam/Makefile.pam @@ -0,0 +1,108 @@ +# $Header$ +# +# This Makefile controls a build process of the pam_unix modules +# for Linux-PAM. You should not modify this Makefile. +# +# $Log$ +# +# + +######################################################################## +# some options... uncomment to take effect +######################################################################## + +ifdef DYNAMIC +#LIBSESSSH = pam_ncp_session.so +LIBAUTHSH = pam_ncp_auth.so +#LIBPASSWDSH = pam_ncp_passwd.so +#LIBACCOUNT = pam_ncp_acct.so +endif + +ifdef STATIC +LIBSTATIC = libpam_ncp.o +endif + +LIBAUTHOBJ = pam_ncp_auth.o support.o +LIBAUTHSRC = pam_ncp_auth.c support.c +LIBOBJ = $(LIBAUTHOBJ) +LIBSRC = $(LIBAUTHSRC) + +LIBSHARED = $(LIBAUTHSH) + +LIBOBJD = $(addprefix dynamic/,$(LIBOBJ)) +LIBOBJS = $(addprefix static/,$(LIBOBJ)) + +dynamic/%.o : %.c + $(CC) $(CFLAGS) -Iinclude $(DYNAMIC) $(CPPFLAGS) -c $< -o $@ + +static/%.o: %.c + $(CC) $(CFLAGS) -Iinclude $(STATIC) $(CPPFLAGS) -c $< -o $@ + + +########################### don't edit below ####################### + +dummy: + + @echo "**** This is not a top-level Makefile " + @echo "**** You need to compile this as part of a PAM source tree. " + exit + +info: + @echo + @echo "*** Building pam-unix(alpha) module of the framework..." + @echo + +all: dirs info $(LIBSHARED) $(LIBSTATIC) register + +dirs: +ifdef DYNAMIC + mkdir -p ./dynamic +endif +ifdef STATIC + mkdir -p ./static +endif + +register: +ifdef STATIC + ( cd .. ; \ + ./register_static pam_ncp_auth pam_ncp/$(LIBSTATIC) ; \ + ) +endif + +ifdef DYNAMIC +$(LIBOBJD): $(LIBSRC) + +$(LIBAUTHSH): $(LIBAUTHSRC) $(LIBOBJD) + $(CC) -shared -o $@ $(addprefix dynamic/,$(LIBAUTHOBJ)) -lncp +endif + + +ifdef STATIC +$(LIBOBJS): $(LIBSRC) + +$(LIBSTATIC): $(LIBOBJS) + $(CC) -Wl,-r -o $@ $(LIBOBJS) -lncp -nostdlib + #### Following line gives up on my system (P.V.) + #### It works with -L/usr/lib -lncp, but in that case + #### we have to pass this Makefile through configure magic + #### $(LD) -r -o $@ $(LIBOBJS) -lncp +endif + +install: all + mkdir -p $(FAKEROOT)$(SECUREDIR) +ifdef DYNAMIC + install -m644 $(LIBSHARED) $(FAKEROOT)$(SECUREDIR) +endif + +remove: + cd $(FAKEROOT)$(SECUREDIR) && rm -f $(LIBSHARED) + +clean: + rm -f $(LIBOBJD) $(LIBOBJS) a.out core *~ + +extraclean: clean + rm -f *.a *.out *.o *.so *.bak + +.c.o: + $(CC) -c $(CFLAGS) $< + diff --git a/contrib/pam/README b/contrib/pam/README new file mode 100644 index 0000000..79f1337 --- /dev/null +++ b/contrib/pam/README @@ -0,0 +1,122 @@ + +Why authenticate Linux users against a Netware box? +-------------------------------------------------- + +The pam_ncp_auth module is designed for use in environments where users have +already been given Netware accounts and the requirement to have two separate +passwords would be a barrier to the deployment of Linux. + +A pam_ncp_passwd module allowing users to also change their passwords is also +planned. + + +How come it only took a few hours to put it together from scratch? +----------------------------------------------------------------- + +This module is based on the ncpfs utilities developed by Volker Lendecke, +and is dynamically linked to the library routines contained therein. Therefore, +the ncpfs utilities are a prerequisite for compiling this module. + +The most up-to-date version of the utilities can generally be found at + ftp://platan.vc.cvut.cz/pub/linux/ncpfs/latest + +It is my intention to make this module stand alone, for simplicity and for +licensing reasons. + + +Configuration +------------- + +The pam_ncp_auth module recognises one option, which is required (and may +be repeated): + "server=" or "server=/" +Except that, it recoginzes couple of options: + -d : turn on debugging output + -v : display reasons login failures on terminal (default) + -q : do not display login failures + -s : disallow SUPERVISOR from logging-in + -S : disallow SUPERVISOR equivalent from logging-in (NYI) + -uMIN,MAX,CFLAGS,MFLAGS : parameters for user creation + -gMIN,MAX,CFLAGS : parameters for group creation + +If you are using variant "server=/", +must be fully distinguished name of Group and must have +at least read-only replica of logging-in user (to be fixed...). + +This module is designed to run alongside locally stored passwords. For example, +my /etc/pam.d/login file during testing looked like this: + +auth required /lib/security/pam_securetty.so +auth requisite /lib/security/pam_nologin.so +auth sufficient /lib/security/pam_pwdb.so shadow nullok +auth required /lib/security/pam_ncp_auth.so use_first_pass server=ROB-SERVER + +This has the effect that users are only looked up on the Netware server if the +password they type fails to match the locally stored password. Hence local-only +users (such as root) are supported in this configuration. + +David Woodhouse +4/3/98 + +Users and groups creation +------------------------- + +User creation is enabled by non-empty CFLAGS option in -u parameter. +CFLAGS can consist of one or more following letters: + r : When creating user, it must take uid from UNIX:UID property. If uid + is already used, or object does not have UNIX:UID property, user is + not allowed to login. + p : When creating user, preffer uid from UNIX:UID property. + n : When inventing uid for new user, take one which is one greater than + highest used uid in MIN,MAX range. + f : When inventing uid for new user, take first unused in MIN,MAX range. +If you specify both 'r' and 'p', or both 'n' and 'f', behavior is undefined. + +User modification is enabled by non-empty MFLAGS option in -u parameter. +MFLAGS can consist of one or more following letters: + g : Update user's primary gid according to NDS database. + c : Update user's gecos (comment, full name) according to NDS database. + d : Update user's home directory according to NDS database. + s : Update user's shell according to NDS database. + +NDS background +-------------- + +If -g,,r or -g,,p is specified, group's UNIX:GID attribute is read from +NDS. If attribute does not exist, and 'r' was not used, new gid is invented +according to min, max and n/f values in -g option. + +If -u,,r or -u,,p is specified, user's UNIX:UID attribute is read from +NDS. If attribute does not exist, and 'r' was not used, new uid is invented +according to min, max and n/f values in -g option. + +During user creation, home directory is retrieved from UNIX:Home Directory, +login shell from UNIX:Login Shell. If UNIX:Home Directory does not exist, +/home/$cn is used as home directory for user. If UNIX:Login Shell does not +exist, /bin/bash is used. + +OK, to get it to work on my Debian - potato box, I have to use following +items in /etc/pam.d/login: + +#%PAM-1.0 +#[For version 1.0 syntax, the above header is optional] +# +# The PAM configuration file for the `login' service +# +auth requisite pam_securetty.so +auth required pam_env.so +auth required pam_nologin.so +auth optional pam_group.so +auth sufficient pam_unix.so +auth sufficient pam_ncp_auth.so use_first_pass server=CDROM/VANA.LINUXES.VC.CVUT.CZ +auth required pam_deny.so +account requisite pam_time.so +account required pam_unix.so +session required pam_unix.so +session optional pam_motd.so +session optional pam_mail.so +session optional pam_lastlog.so +password required pam_unix.so + +Petr Vandrovec +9/23/99 diff --git a/contrib/pam/install-to-PAM b/contrib/pam/install-to-PAM new file mode 100755 index 0000000..a61bc0e --- /dev/null +++ b/contrib/pam/install-to-PAM @@ -0,0 +1,57 @@ +#!/bin/sh + +INCLDIR=../../include + +if [ "$1" = "-y" ]; then + REMOVE=/bin/true + shift +else + REMOVE=/bin/false +fi +if [ $# -ne 1 ]; then + echo "usage: install-to-PAM pam-directory" + echo "" + echo "Run this program if you want to place this code into PAM tree" + echo "Usual value for pam-directory is /usr/src/pam-0.66/Linux-PAM/modules" + echo "" + echo "Due to strangeness of static PAM modules do not forget, that static" + echo "module links together with static libncp, resulting in very big" + echo "object file (60KB without debugging info, 500KB with)." + echo "" + echo "Also, do not forget to do 'make install-dev' in ncpfs tree before" + echo "compiling PAM modules." + exit 1 +fi +DEST=$1 +if [ ! -d $DEST/. ]; then + echo "$DEST does not exist or is not directory" + exit 1 +fi +if [ ! -f $DEST/register_static ]; then + echo "$DEST is not module directory of PAM suite" + exit 1 +fi +if [ ! -f pam_ncp_auth.c ]; then + echo "You must run this program from ncp_pam_auth plugin directory" + exit 1 +fi +DESTD=$DEST/pam_ncp_auth +if [ -d $DESTD ]; then + if $REMOVE ; then + echo "Removing old code from $DESTD" + rm -rf $DESTD + else + echo "pam_ncp_auth is already present in $DEST" + echo "" + echo "Remove pam_ncp_auth or run this program with option -y" + exit 1 + fi +fi +mkdir $DESTD +cp Makefile.pam $DESTD/Makefile +cp COPYING README *.c $DESTD +echo "PAM module was copied into $DESTD directory." +echo "" +echo "Please, do not forget to do 'make install-dev' in ncpfs tree before" +echo "attempting to compile this PAM module." + diff --git a/contrib/pam/pam_ncp_auth.c b/contrib/pam/pam_ncp_auth.c new file mode 100644 index 0000000..cf758da --- /dev/null +++ b/contrib/pam/pam_ncp_auth.c @@ -0,0 +1,4923 @@ +/* $Header: /usr/src/redhat/BUILD/Linux-PAM-0.59/modules/pam_ncp/RCS/pam_ncp_auth.c,v 1.3 1998/03/04 02:52:07 dwmw2 Exp $ */ + +/* + * Copyright David Woodhouse, 1998. All rights reserved. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * $Log: pam_ncp_auth.c,v $ + * Revision 1.26 2002/05/24 PP + * Extended -Z option to allow some zenflags to be turned OFF on that workstation. + * With -Z all zenflags are off, but with -ZABCD, only flags ABCD are off. + * + * Some support is given for the case of the same CN in different contexts. In that case, if the + * password is good but some other login errors is reported ( account disabled, too many connexions...) + * we report error and abort. + * But if the password is bad, then we try to find another user with the same CN in another context ( if any). + * TODO: since the original code, expired password error is ignored and user is allowed to login...(?) + * Added the service su to the table of allowed service. + * still problems with impersonnating ( operation not permitted) + * authentication and access is granted but pam still fails ( check /etc/pam.d/su ) + * + * Revision 1.25 2002/05/10 PP + * The modifications required for operations in a pure IP network have been added. + * These modifications were proposed by Jean-François Burdet + * and are described at http://lnxjfb.unige.ch/grpnov/article.php3?id_article=81 + * They include: + * adding a -A that trigger adding -A server option to ncpmount + * adding logic for context searches in case no list has been provided on the command line + * + * Merging of group zenflags is now done before automatic group creation, so if creation fails + * (due to a name too long for example) zenflags are still unherited + * Revision 1.24 2002/05/09 PP + * EXPERIMENTAL CODE + * NEW CODE is marked with #ifdef INPERSONATE + * Provisions have been added for home directories on shared NFS servers + * In that case, new user home directory already exists and will be mounted via autofs + * so + * 1) this module should stop complaining that user's home already exists !!! + * 2) the useradd command should be called with -M option ( DO NOT create HOME) ! + * instead of -m (DO create home) + * 3) actually the module should complains if the home DO NOT EXIST (not created on NFS server + * or NFS server down). + * This is the exact reverse behaviour of the previous versions !!!! + * In order not to break things a flag (-n) has been added to the command line + * When present the module do not attempt to autocreate a local home; it expects the home to be present + * either locally or more likely as a NFS mounted ressource. + * + * This leads to an extra security problem. The PAM module is ran with root privileges and requires + * - read privileges to check existence of nwhome in current user home + * - write privileges to the NFS mounted user's home to create a directory (nwhome) and some files + * (.forward, .nwclient and .nwinfos). + * Thus the NFS directories must be exported with the no_root_squash option which is quite unsafe. + * + * This means that if somebody get root access on a local workstation, he can access any home directory on the NFS server + * with root privileges !!! + * And any student in the campus that is root on his own machine have full rights on the NFS directories ! + * + * PARTIAL FIX: We do not set the no_root_squash option on NFS servers; As soon as this module has determined + * the current user's Unix UID ( either server required or calculated), and + * eventually autocreated it on the local machine, it impersonnates to that UID at every access to his home + * + * MORE SERIOUS: if NFS directory is mounted with no_root_squash, internally called ncpmount fails with "mount point not found" + * since this suid program has no rights in NFS remote directories. + * Same problems with ncplogin, ncpmap that have no rights to "autocreate" the mounting point ~/ncp/SERVER/VOLUME ! + * + * so when the -n parameter is present we mount Netware home in a local /mnt/ncp/$USER directory chmoded to 0700 + * and pass this directory to ncpmount...(this is the new behaviour of ncplogin/ncpmap with the -l option) + * + * Revision 1.23 2002/02/21 pp + * Fixed possible buffer overflow in mount_nwhome in verbose mode + * Fixed remote access granting table for samba >2.07 ( pam_tty=samba and pam_rhost=hostname) + * was null, null in samba 2.06 + * + * Revision 1.22 2002/02/03 vana + * Fix couple of possible and real buffer overflows in the code. + * It still needs review, but buffer overflows exploitable by malicious + * NDS administrators should be fixed now. It is true that if you + * trust them enough to manage logins for your box, they do not have + * need for setting user's home directories to 4KB strings, but + * if they do, it should not crash PAM authentication module. + * I believe that no buffer overflow was exploitable by mere user. + * Reformatted some functions. We use tab size 8, not 4, not 6, not 7.5... + * + * Revision 1.21 2002/01/20 PP + * kscreensaver (from KDE) calls again PAM when tring to unlock the screen. + * currently only the authenticate service is called (not session) But in that case + * current user environnment is used, so it is quite likely that a default context will be red from there. + * ncp_auth_tree has been modified to take this in account. + * furthermore, user's info and zen processing should not be done again . So another flag has been added + * this skip these parts if the PAM service name contains "saver". I hope it does include other + * screensavers + * + * Revision 1.20 2002/01/14 PP + * as suggested by vana, changed code in exechelper() to simplify use of su. rather than calling su -l username .... + * + * + * Revision 1.19 2002/01/10 PP + * automatic ncpmounting is now run by this module as the current user and not as root + * this has two major consequenes: + * 1) nwhome directory now get group permissions for the group users the group root. This is a cosmetic detail + * since permissions are set to 700 + * 2) more important. If ncpmount is done by root, user cannot read back later its private key data for this connection. + * ncp_get_private_data grant access to the private data but returns a length of 0 for the private data (???). + * Note that if root requests these private data (using contrib/testing/pp/nwgetconnlist -a), he get a EACCESS (13) + * error as expected. Private IS private! + * so this initial connection was not flagged as authenticated for this user and cannot be used later by ncpmap to mount + * additionnal netware volumes of the same tree with the same credentials. + * + * changed mount_nwhome to call /bin/su -l unixname -c "/usr/sbin/ncpmount -S sss -V vvvv -U uuu ... /home/user/nwhome" + * changed process zenscripts to do the same : for security reasons zenscripts are now run with current user's permissions + * and not anymore as root. + * + * added a new account flag NDS_IS_NEW_USER in .nwinfos to ease zenscript processing + * is account is new, we can further personnalize config files such as kmailrc, liprefs.js ... + * + * Revision 1.18 2002/01/09 PP + * With redHat 7.2 the RHOST value passed to PAM with X remote access is emty end not NULL + * the kde entry in the zen table has been duplicated + * added -o "symlinks" to options of ncpmount. + * + * Revision 1.17 2001/12/12 PP + * With redHat 7.2 the return value of pam_set-cred and pam_get_cred that was PAM_IGNORE + * is really used, so authentication fails ! + * Changed to PAM_SUCCESS + * + * Revision 1.16 2001/11/01 PP + * added the new entries needed by nwnet.c v >1.17 in ~/.nwclient + * must be after the usual server/user pawwd line since many script use 'read server passwd <~/.nwclient' + * + * Revision 1.15 2001/10/31 pp + * added support for Server AND contextless authentication upon request of Steve Flynn + * --> the server command line now accept a list of context to search ndsserver=SERVER_NAME:Ctx1,Ctx2,...Ctxn/group + * idem for password changing + * + * Revision 1.15 2001/11/01 PP + * added the new entries needed by nwnet.c v >1.17 in ~/.nwclient + * must be after the usual server/user pawwd line since many script use 'read server passwd <~/.nwclient' + * + * Revision 1.14 2001/10/27 PP + * Made the -m "empty" feature more reliable: + * 1) if empty the Netware home directory is mounted as /home/user but we + * still have problem with chown and kde on a mounted netware + * 2) parsemntpoint() did not scan the argument to the end, so with option + * -mnwhome, it was called twice ; once for "nwhome" and once for "me" ! + * result is that the mounting point was ~/e !!! Corrected in pam_sm_athenticate. + * Due to this feature in -m option: + * we moved the creation of the .forward file during the authentication section. + * so: if user is not currently logged in, system will still find the .forward file in local /home/user ( it cannot mount user's netware + * home to find it)... + * We do it twice (before and after automounting) so if user IS logged in system will + * find the .forward file... This second time could be done in a zenscript ... + * + * Revision 1.13 2001/10/24 pp + * added support for Tree & contextless authentication + * --> new command line tree=TREE_NAME:Ctx1,Ctx2,...Ctxn/group + * --> reorganized authentication code for the group verification part to be common + * to auth_server and auth_tree + * --> modified nw_auto_mount_home to pass a FQDN to ncpmount + * idem for password changing + * + * Revision 1.12 2001/10/24 pp + * added support for ssh remote access ( under the same ZEN flag as Telnet access) + * due to current implementation of OpenSSH, user must have an account & home on the local machine + * for authentication by Netware to work. sshd peeks first in user's home to find data files... + * so automagic creation does not work with ssh + * + * Revision 1.11 2001/02/24 pp + * Added some support for reading bindery properties + * IDENTIFICATION --> Gecos field + * HOME_DIRECTORY --> nwhome ( must be on the same server as the "autenticator" + * + * Revision 1.10 2001/02/21 12:34:56 vana + * Cleaned warnings, fixed bindery login. + * + * Revision 1.9 2001/01/26 16:50:00 pp + * Added Zenux Flags concept for tuning user's account on Linux + * for more documentation see http://cipcinsa.insa-lyon.fr/ppollet/pamncp/ + * + * Revision 1.8 2001/01/15 19:30:00 pp + * Added optional automounting of Netware Home directory + * in ~/nwhome, and dismounting upon session ending + * + * Revision 1.7 2001/01/06 10:50:00 pp + * Added support for pré DS8 network using either Location + * attribute or Postal Adress + * + * Revision 1.6 2000/07/06 14:40:00 vana + * Added DCV_DEREF_ALIASES where needed + * + * Revision 1.5 2000/06/02 17:40:00 vana + * Tons of new code - passwd, changed auth code + * + * Revision 1.4 1999/10/31 15:44:44 vana + * Couple of new options, new check for group membership + * + * Revision 1.3 1998/03/04 02:52:07 dwmw2 + * Oops - licensing has to be GPL as it's using the ncpfs libraries and headers. + * + * Revision 1.2 1998/03/04 02:39:12 dwmw2 + * Tidied up (a bit) for initial release. + * + * Revision 1.1 1998/03/04 02:21:07 dwmw2 + * Initial revision + * + * + */ + +#define _GNU_SOURCE +#define _BSD_SOURCE +#define inline __inline__ +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "support.h" + +static const char rcsid[] = "$Id: pam_ncp_auth.c,v 1.9 2001/21/26 16:52:07 PP Exp $ pam_ncp authentication functions. Dave@imladris.demon.co.uk,vandrove@vc.cvut.cz,patrick.pollet@insa-lyon.fr "; + +/* Define function prototypes */ + +static void +nw_cleanup_conn(pam_handle_t * pamh, void *data, int error_status) +{ + ncp_close((struct ncp_conn *) data); +} + +#define QFC_FIRST_UNUSED 0 +#define QFC_NEXT_UNUSED 1 +#define QFC_PREFFER_SERVER 2 +#define QFC_REQUIRE_SERVER 4 + +// caldera open linux does not likes the -G parameter in useradd !!!PP +// so we will have a specific flag for these and use a second call to usermod -G +#define NO_PROCESS_GROUPS 1 + +#define QFMU_GID 0x0001 +#define QFMU_GECOS 0x0002 +#define QFMU_DIR 0x0004 +#define QFMU_SHELL 0x0008 + +/* reactivate if you prefer NDS property Postal Address +rather than Location for pre-DS 8 systems*/ +#if 0 +#define USE_POSTAL_ADDRESS +#endif + +// from the snapin C code +// names of NDS attributes used + +// USE_DUMMY_ATTRibutes must be set in the Makefile + +#ifndef USING_DUMMY_ATTRIBUTES +// the real ones +#define ATTR_UID "UNIX:UID" +#define ATTR_PGNAME "UNIX:Primary GroupName" +#define ATTR_PGID "UNIX:Primary GroupID" +#define ATTR_GID "UNIX:GID" +#define ATTR_SHELL "UNIX:Login Shell" +#define ATTR_COM "UNIX:Comments" +#define ATTR_HOME "UNIX:Home Directory" +#else +// dummy attributes for testing +// created with Schemax with the same syntax +// and associated to user class and group class +#define ATTR_UID "LINUX:UID" +#define ATTR_PGNAME "LINUX:Primary GroupName" +#define ATTR_PGID "LINUX:Primary GroupID" +#define ATTR_GID "LINUX:GID" +#define ATTR_SHELL "LINUX:Login Shell" +#define ATTR_COM "LINUX:Comments" +#define ATTR_HOME "LINUX:Home Directory" +#endif + +// the attribute used to test presence of NDS8 +// either real or dummy (not used yet) +#define ATTR_NDS8 ATTR_UID + +// other attributes used +// absent NDS8 attributes are searched in L attribute +// also new properties ( Zenux Flags, Other group...) +#define ATTR_LOCATION "L" + +#define ATTR_LOGIN_SCRIPT "Login Script" +#define ATTR_GRP_MBS "Group Membership" +#define ATTR_HOST_SERVER "Host Server" +#define ATTR_HOST_RN "Host Resource Name" +#define ATTR_SMTP_EMAIL "Email Address" +#define ATTR_LDAP_EMAIL "Internet Email Address" +#define ATTR_FULL_NAME "Full Name" +#define ATTR_SURNAME "Surname" +#define ATTR_GIVEN_NAME "Given Name" +#define ATTR_POSTAL_ADDRESS "Postal Address" +#define ATTR_HOME_NW "Home Directory" +#define ATTR_MESSAGE_SERVER "Message Server" + +// the proper naming attribute may be customized here (must be a CI_STRING ) +#define ATTR_GECOS ATTR_FULL_NAME + +// syntaxes of the used attributes +#define SYN_LOCATION SYN_CI_STRING +#define SYN_LOGIN_SCRIPT SYN_STREAM +#define SYN_UID SYN_INTEGER +#define SYN_PGNAME SYN_DIST_NAME +#define SYN_PGID SYN_INTEGER +#define SYN_GID SYN_INTEGER +#define SYN_SHELL SYN_CE_STRING +#define SYN_COM SYN_CI_STRING +#define SYN_HOME SYN_CE_STRING +#define SYN_GRP_MBS SYN_DIST_NAME + +/* user account tuning flags red from the NDS (ZenFlag) */ +// zenFlag processing can be turned off by a command line -Z +// it is on by default + +#define NDS_ZF_AUTOMOUNT_NWHOME 'A' +#define NDS_ZF_BROADCAST_ALL 'B' +#define NDS_ZF_BROADCAST_CONSOLE 'C' +#define NDS_ZF_D 'D' +#define NDS_ZF_E 'E' +#define NDS_ZF_ALLOW_FTP_ACCESS 'F' +#define NDS_ZF_G 'G' +#define NDS_ZF_ALLOW_RSH_ACCESS 'H' +#define NDS_ZF_CREATE_NWINFOS 'I' +#define NDS_ZF_J 'J' +#define NDS_ZF_K 'K' +#define NDS_ZF_L 'L' +#define NDS_ZF_FORWARD_MAIL 'M' +#define NDS_ZF_CREATE_NWCLIENT 'N' +#define NDS_ZF_OVERWRITE_NWCLIENT 'O' +#define NDS_ZF_PASSWD_IN_NWCLIENT 'P' +#define NDS_ZF_Q 'Q' +#define NDS_ZF_ALLOW_RLOGIN_ACCESS 'R' +#define NDS_ZF_ALLOW_SAMBA_ACCESS 'S' +#define NDS_ZF_ALLOW_TELNET_ACCESS 'T' +#define NDS_ZF_U 'U' +#define NDS_ZF_VOLATILE_ACCOUNT 'V' +// I reserve this letter, but I still don't know +// how auth_nds_mod of Apache works ( TODO !) +#define NDS_ZF_ALLOW_WEB_ACCESS 'W' +#define NDS_ZF_ALLOW_X_ACCESS 'X' +#define NDS_ZF_Y 'Y' +#define NDS_ZF_Z 'Z' +// three admin defined scripts that can be launched at session opening +// these scripts WILL source the file ~/.nwinfos to get user's data +// if more than one will be executed in this order +#define NDS_ZF_0 '0' +#define NDS_ZF_1 '1' +#define NDS_ZF_2 '2' +// three admin defined scripts that can be launched at session closing +// these scripts WILL source the file ~/.nwinfos to get user's data +// if more than one will be executed in this order +#define NDS_ZF_3 '3' +#define NDS_ZF_4 '4' +#define NDS_ZF_5 '5' + +/*corresponding binary flag*/ + +#define ZF_UNSUPPORTED 0x00000000 + +#define ZF_AUTOMOUNT_NWHOME 0x00000001 +#define ZF_BROADCAST_ALL 0x00000002 +#define ZF_BROADCAST_CONSOLE 0x00000004 +#define ZF_D 0x00000008 +#define ZF_E 0x00000010 +#define ZF_ALLOW_FTP_ACCESS 0x00000020 +#define ZF_G 0x00000040 +#define ZF_ALLOW_RSH_ACCESS 0x00000080 +#define ZF_CREATE_NWINFOS 0x00000100 +#define ZF_J 0x00000200 +#define ZF_K 0x00000400 +#define ZF_L 0x00000800 +#define ZF_FORWARD_MAIL 0x00001000 +#define ZF_CREATE_NWCLIENT 0x00002000 +#define ZF_OVERWRITE_NWCLIENT 0x00004000 +#define ZF_PASSWD_IN_NWCLIENT 0x00008000 +#define ZF_Q 0x00010000 +#define ZF_ALLOW_RLOGIN_ACCESS 0x00020000 +#define ZF_ALLOW_SAMBA_ACCESS 0x00040000 +#define ZF_ALLOW_TELNET_ACCESS 0x00080000 +#define ZF_U 0x00100000 +#define ZF_V 0x00200000 +#define ZF_ALLOW_WEB_ACCESS 0x00400000 +#define ZF_ALLOW_X_ACCESS 0x00800000 +#define ZF_Y 0x01000000 +#define ZF_Z 0x02000000 +#define ZF_0 0x04000000 +#define ZF_1 0x08000000 +#define ZF_2 0x10000000 +#define ZF_3 0x20000000 +#define ZF_4 0x40000000 +#define ZF_5 0x80000000 + +#define ZF_OPENING_SCRIPTS (ZF_0 | ZF_1 | ZF_2) +#define ZF_CLOSING_SCRIPTS (ZF_3 | ZF_4 | ZF_5) + +//maybe overwritten ( not ORED !) by a -z directive on the command line +//note: no passwd in ~/.nwclient by default +#define ZF_DEFAULTS ZF_CREATE_NWCLIENT | ZF_AUTOMOUNT_NWHOME | ZF_CREATE_NWINFOS + +// where must be the scripts +// TODO: let PAM finds them somewhere in its path +// (if it has one ?) +#define ZEN_SCRIPT_0 "/usr/local/bin/zenscript0" +#define ZEN_SCRIPT_1 "/usr/local/bin/zenscript1" +#define ZEN_SCRIPT_2 "/usr/local/bin/zenscript2" +#define ZEN_SCRIPT_3 "/usr/local/bin/zenscript3" +#define ZEN_SCRIPT_4 "/usr/local/bin/zenscript4" +#define ZEN_SCRIPT_5 "/usr/local/bin/zenscript5" + +#define NWINFOS_FILE ".nwinfos" +#define NWCLIENT_FILE ".nwclient" +#define DEF_MNT_PNT "nwhome" + +struct zenElement { + char letter; + long value; +}; +/* only the flag processed in this version are !=ZF_UNSUPPORTED */ +static struct zenElement zenTable[]={ +{ NDS_ZF_AUTOMOUNT_NWHOME, ZF_AUTOMOUNT_NWHOME }, +{ NDS_ZF_BROADCAST_ALL, ZF_BROADCAST_ALL }, +{ NDS_ZF_BROADCAST_CONSOLE, ZF_BROADCAST_CONSOLE }, +{ NDS_ZF_D, ZF_UNSUPPORTED }, +{ NDS_ZF_E, ZF_UNSUPPORTED }, +{ NDS_ZF_ALLOW_FTP_ACCESS, ZF_ALLOW_FTP_ACCESS }, +{ NDS_ZF_G, ZF_UNSUPPORTED }, +{ NDS_ZF_ALLOW_RSH_ACCESS, ZF_ALLOW_RSH_ACCESS }, +{ NDS_ZF_CREATE_NWINFOS, ZF_CREATE_NWINFOS }, +{ NDS_ZF_J, ZF_UNSUPPORTED }, +{ NDS_ZF_K, ZF_UNSUPPORTED }, +{ NDS_ZF_L, ZF_UNSUPPORTED }, +{ NDS_ZF_FORWARD_MAIL, ZF_FORWARD_MAIL }, +{ NDS_ZF_CREATE_NWCLIENT, ZF_CREATE_NWCLIENT }, +{ NDS_ZF_OVERWRITE_NWCLIENT, ZF_OVERWRITE_NWCLIENT }, +{ NDS_ZF_PASSWD_IN_NWCLIENT, ZF_PASSWD_IN_NWCLIENT }, +{ NDS_ZF_Q, ZF_UNSUPPORTED }, +{ NDS_ZF_ALLOW_RLOGIN_ACCESS, ZF_ALLOW_RLOGIN_ACCESS }, +{ NDS_ZF_ALLOW_SAMBA_ACCESS, ZF_ALLOW_SAMBA_ACCESS }, +{ NDS_ZF_ALLOW_TELNET_ACCESS, ZF_ALLOW_TELNET_ACCESS }, +{ NDS_ZF_U, ZF_UNSUPPORTED }, +{ NDS_ZF_VOLATILE_ACCOUNT, ZF_UNSUPPORTED }, +{ NDS_ZF_ALLOW_WEB_ACCESS, ZF_UNSUPPORTED }, +{ NDS_ZF_ALLOW_X_ACCESS, ZF_ALLOW_X_ACCESS }, +{ NDS_ZF_Y, ZF_UNSUPPORTED }, +{ NDS_ZF_Z, ZF_UNSUPPORTED }, +// zen scripts should source ~/.nwinfos file, so make sure +// it is created +{ NDS_ZF_0, ZF_0 | ZF_CREATE_NWINFOS }, +{ NDS_ZF_1, ZF_1 | ZF_CREATE_NWINFOS }, +{ NDS_ZF_2, ZF_2 | ZF_CREATE_NWINFOS }, +{ NDS_ZF_3, ZF_3 | ZF_CREATE_NWINFOS }, +{ NDS_ZF_4, ZF_4 | ZF_CREATE_NWINFOS }, +{ NDS_ZF_5, ZF_5 | ZF_CREATE_NWINFOS }, +{ 0, 0 } +}; + +static long +decodeZenFlag(const char **optp) +{ + long r = 0; + char c; + const char *ZF = *optp; + + while ((c = *ZF++) != 0) { + struct zenElement *z; + + c = toupper(c); + for (z = zenTable; z->letter; z++) { + if (c == z->letter) { + r |= z->value; + break; + } + } + } + *optp = ZF; + return r; +} + +struct pam_ncp_state { + struct { + uid_t min; + uid_t max; + int flags; + int modflags; + } uid; + struct { + gid_t min; + gid_t max; + int flags; + } gid; + +}; + +// PP:moved up here to be used by some of my routines +static int +getnumber(int *val, const char **str) +{ + const char *p = *str; + char *z; + + if (!*p) + return 1; + if (*p == ',') { + *str = p + 1; + return 1; + } + *val = strtoul(p, &z, 0); + if (p == z) + return -1; + if (*z == ',') + z++; + *str = z; + return 0; +} + +// flip Dos antislash to Unix +// converts to uppercase for ncpmount to work with ROOT options ON +static char * +unixifyPathUC(char *dosPath) +{ + size_t i; + + for (i = 0; i < strlen(dosPath); i++) { + if (dosPath[i] == '\\') + dosPath[i] = '/'; + } + str_upper(dosPath); + return dosPath; +} + +// remove all spaces from a NDS name +static void +trim(char *string) +{ + char *aux = string; + char c; + + while ((c = *string++) != 0) { + if (c != ' ') + *aux++ = c; + } + *aux = 0; +} + +#define QF_VERBOSE 0x0001 +#define QF_DEBUG 0x0002 +#define QF_NOSU 0x0004 +#define QF_NOSUEQ 0x0008 +#define QF_AUTOCREATE 0x0010 +#define QF_AUTOMODIFY 0x0020 +#define QF_BINDERY 0x0040 +// version 1.24. automatically create home directory on local machine for new users +// it is on by default +// should be turned of by -n option if homes are on a remote NFS server (automounted) +#define QF_CREATEHOME 0x4000 +#define QF_MOUNTLOCALLY 0x2000 +// rev 1.25 add an extra -A server parameter to ncpmount (with -A option on command line) +#define QF_USE_NETWARE_IP 0x1000 +// test v 1.25 impersonnating to current user when accessing his NFS mounted home +#define IMPERSONNATE 1 + +static int +is_member_of_bindery_group(NWCONN_HANDLE conn, const char *user, const char *group) +{ + int err; + + err = NWIsObjectInSet(conn, user, NCP_BINDERY_USER, "GROUPS_I'M_IN", group, NCP_BINDERY_UGROUP); + if (!err) { + err = NWIsObjectInSet(conn, group, NCP_BINDERY_UGROUP, "GROUP_MEMBERS", user, NCP_BINDERY_USER); + if (!err) { + return 0; + } else { + syslog(LOG_WARNING, "inconsistent bindery database for user %s and group %s: %s\n", user, group, strnwerror(err)); + } + } else { + syslog(LOG_WARNING, "user %s is not member of %s: %s\n", user, group, strnwerror(err)); + } + return -1; +} + +static int +is_member_of_nds_group(NWDSContextHandle ctx, NWCONN_HANDLE conn, NWObjectID oid, const char *group) +{ + int eval = 0; + Buf_T *buf = NULL; + NWDSCCODE dserr; + nbool8 match; + dserr = NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &buf); + if (dserr) { + syslog(LOG_WARNING, "NWDSAllocBuf() failed with %s\n", strnwerror(dserr)); + eval = 120; + goto bailout; + } + dserr = NWDSInitBuf(ctx, DSV_COMPARE, buf); + if (dserr) { + syslog(LOG_WARNING, "NWDSInitBuf() failed with %s\n", strnwerror(dserr)); + eval = 121; + goto bailout; + } + dserr = NWDSPutAttrName(ctx, buf, "Group Membership"); + if (dserr) { + syslog(LOG_WARNING, "NWDSPutAttrName() failed with %s\n", strnwerror(dserr)); + eval = 122; + goto bailout; + } + dserr = NWDSPutAttrVal(ctx, buf, SYN_DIST_NAME, group); + if (dserr) { + syslog(LOG_WARNING, "NWDSPutAttrVal() failed with %s\n", strnwerror(dserr)); + eval = 123; + goto bailout; + } + dserr = __NWDSCompare(ctx, conn, oid, buf, &match); + if (dserr) { + syslog(LOG_WARNING, "__NWDSCompare() failed with %s(oid=%x)\n", strnwerror(dserr), oid); + eval = 124; + goto bailout; + } + if (!match) { + eval = 125; + } +bailout:; + if (buf) + NWDSFreeBuf(buf); + return eval; +} + +static NWCCODE +nw_create_conn_to_server(NWCONN_HANDLE * conn, const char *server, const char *user, const char *pwd, int qflag) +{ + struct ncp_bindery_object uinfo; + unsigned char ncp_key[8]; + NWCONN_HANDLE cn; + char *pwd2; + long err; + + if (qflag & QF_DEBUG) + syslog(LOG_DEBUG, "Trying to contact %s/%s\n", server, user); + + pwd2 = strdup(pwd); + if (!pwd2) { + syslog(LOG_WARNING, "Not enough memory when uppercasing password\n"); + err = PAM_TRY_AGAIN; + goto fail2; + } + str_upper(pwd2); + err = NWCCOpenConnByName(NULL, server, NWCC_NAME_FORMAT_BIND, 0, NWCC_RESERVED, &cn); + if (err) { + syslog(LOG_WARNING, "%s when trying to open connection\n", strnwerror(err)); + err = PAM_TRY_AGAIN; + goto fail2; + } + if (!(qflag & QF_BINDERY) && NWIsDSServer(cn, NULL)) { + err = nds_login_auth(cn, user, pwd2); + } else { + err = ncp_get_encryption_key(cn, ncp_key); + if (err) { + syslog(LOG_WARNING, "%s when trying to get encryption key. Doing unencrypted\n", strnwerror(err)); + err = ncp_login_unencrypted(cn, NCP_BINDERY_USER, user, pwd2); + } else { + err = ncp_get_bindery_object_id(cn, NCP_BINDERY_USER, user, &uinfo); + if (err) { + syslog(LOG_WARNING, "%s when trying to get object ID\n", strnwerror(err)); + err = PAM_USER_UNKNOWN; + goto fail; + } + err = ncp_login_encrypted(cn, &uinfo, ncp_key, pwd2); + } + } + if (err && err != NWE_PASSWORD_EXPIRED) { + syslog(LOG_WARNING, "%s when trying to login\n", strnwerror(err)); + switch (err) { + case ERR_NO_SUCH_ENTRY: + case NWE_SERVER_UNKNOWN: + err = PAM_USER_UNKNOWN; + break; + case NWE_LOGIN_MAX_EXCEEDED: + case NWE_LOGIN_UNAUTHORIZED_TIME: + case NWE_LOGIN_UNAUTHORIZED_STATION: + case NWE_ACCT_DISABLED: + err = PAM_AUTH_ERR; + break; + default: + err = PAM_AUTH_ERR; + break; + } + goto fail; + } +// PP: I don't understand why we do not report this error ??? +#if 0 + if (err) + err = PAM_NEW_AUTHTOK_REQD; +#else + err = 0; +#endif + if (qflag & QF_DEBUG) + syslog(LOG_DEBUG, "User %s/%s was successfully authorized\n", server, user); + *conn = cn; + return err; +fail:; + NWCCCloseConn(cn); +fail2:; + *conn = NULL; + return err; +} + +static int +nw_get_nwid(NWCONN_HANDLE conn, NWObjectID * id, int qflag) +{ + NWCCODE err; + + err = NWCCGetConnInfo(conn, NWCC_INFO_USER_ID, sizeof (*id), id); + if (err) { + syslog(LOG_WARNING, "%s when retrieving object ID\n", strnwerror(err)); + return PAM_SYSTEM_ERR; + } + return PAM_SUCCESS; +} + +/* old server centric code called by server=XXX/group cmd line parameter */ +static int +nw_create_verify_conn_to_server(NWCONN_HANDLE * conn, NWObjectID * id, + const char *server, const char *user, const char *pwd, + int qflag, const char *group) +{ + NWCONN_HANDLE cn; + NWCCODE err; + NWObjectID oid; + + err = nw_create_conn_to_server(&cn, server, user, pwd, qflag); + if (err && err != PAM_NEW_AUTHTOK_REQD) + return err; + err = nw_get_nwid(cn, &oid, qflag); + if (err) { + syslog(LOG_WARNING, "Error %s retrieving user ID for %s\n", strnwerror(err), user); + goto bailout; + } + + if (qflag & QF_NOSU) { + if (oid == 0x00000001) { + err = PAM_AUTH_ERR; + syslog(LOG_WARNING, "Access denied for %s/%s because of it is supervisor\n", server, user); + goto bailout; + } + if (qflag & QF_DEBUG) + syslog(LOG_DEBUG, "User %s/%s passed supervisor check\n", server, user); + } + if (qflag & QF_NOSUEQ) { + nuint8 level; + + err = NWGetBinderyAccessLevel(cn, &level, NULL); + if (err) { + syslog(LOG_WARNING, "Access denied for %s/%s because of I/O error during object rights verification\n", server, user); + err = PAM_AUTH_ERR; + goto bailout; + } + if ((level >= 0x30) || ((level & 0xF) >= 3)) { + syslog(LOG_WARNING, "Access denied for %s/%s because of it is supervisor equivalent\n", server, user); + err = PAM_AUTH_ERR; + goto bailout; + } + } + if (group) { +/*v 1.11 : if we talk to bindery we should not use NDS to test group membership ? */ + if (!(qflag & QF_BINDERY)) { + NWDSContextHandle ctx; + nuint32 c; + + err = NWDSCreateContextHandle(&ctx); + if (err) { + syslog(LOG_WARNING, "NWDSCreateContextHandle() failed with %s\n", strnwerror(err)); + err = PAM_SYSTEM_ERR; + goto bailout; + } + c = DCV_XLATE_STRINGS | DCV_TYPELESS_NAMES | DCV_DEREF_ALIASES; + err = NWDSSetContext(ctx, DCK_FLAGS, &c); + if (err) { + syslog(LOG_WARNING, "NWDSSetContext() failed with %s\n", strnwerror(err)); + err = PAM_SYSTEM_ERR; + NWDSFreeContext(ctx); + goto bailout; + } + err = is_member_of_nds_group(ctx, cn, oid, group); + NWDSFreeContext(ctx); + if (err) { + syslog(LOG_WARNING, "%s is not member of NDS %s\n", user, group); + err = PAM_AUTH_ERR; + goto bailout; + } + } else { /* bindery testing */ + if (is_member_of_bindery_group(cn, user, group)) { + syslog(LOG_WARNING, "%s is not member of BINDERY %s\n", user, group); + err = PAM_AUTH_ERR; + goto bailout; + } + } + } + if (id) + *id = oid; + if (conn) + *conn = cn; + else + NWCCCloseConn(cn); + return PAM_SUCCESS; +bailout:; + /* Close the connection. */ + NWCCCloseConn(cn); + return err; +} + +// this code was contributed by Jean Francois Burdet +// to implement a contextless login if a list of context to search is not provided in the command line +// The parameter ndserver was replaced by a conn since it is now called from nw_create_verify_conn_to_tree +// with an open connection to a tree or a ndsserver +// extra errors checkings and buffer overflow tested +//static void nw_ctx_search(const char * user_cn, const char * nds_server, char * contexts) { +static NWDSCCODE +nw_ctx_search(const char *user_cn, NWCONN_HANDLE conn, char *contexts, size_t maxsize) +{ + NWDSContextHandle context; + NWDSCCODE ccode; + nuint32 iterationHandle; + nint32 countObjectsSearched; + nuint32 objCntr; + nuint32 objCount; + char objectName[MAX_DN_CHARS + 1]; + size_t ctxp; + nuint32 contextFlags; + + // buffers + pBuf_T searchFilter; // search filter + pBuf_T retBuf; // result buffer for NWDSSearch + Filter_Cursor_T *cur; // search expression tree temporary buffer + + if (!contexts || maxsize < MAX_DN_CHARS + 1) + return EINVAL; + + ccode = NWDSCreateContextHandle(&context); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSCreateContextHandle (DCK_FLAGS) failed, returns %d\n", ccode); + goto Exit1; + } + ccode = NWDSSetContext(context, DCK_NAME_CONTEXT, "[Root]"); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSGetContext (DCK_FLAGS) failed, returns %d\n", ccode); + goto Exit2; + } + + ccode = NWDSGetContext(context, DCK_FLAGS, &contextFlags); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSGetContext (DCK_FLAGS) failed, returns %d\n", ccode); + goto Exit2; + } + + contextFlags |= DCV_TYPELESS_NAMES; + + ccode = NWDSSetContext(context, DCK_FLAGS, &contextFlags); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSSetContext (DCK_FLAGS DCV_TYPELESS_NAMES) failed, returns %d\n", ccode); + goto Exit2; + } + + ccode = NWDSAddConnection(context, conn); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSAddConnection failed, returns %d\n", ccode); + goto Exit2; + } + +/******************************************************************* + In order to search, we need: + A Filter Cursor (to build the search expression) + A Filter Buffer (to store the expression; used by NWDSSearch) + A Buffer to store which attributes we need information on + A Result Buffer (to store the search results) + */ + + /******************************************************************* + ** Allocate Filter buffer and Cursor and populate + */ + ccode = NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &searchFilter); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSAllocBuf returned: %d\n", ccode); + goto Exit3; + } + // Initialize the searchFilter buffer + ccode = NWDSInitBuf(context, DSV_SEARCH_FILTER, searchFilter); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSInitBuf returned: %d\n", ccode); + goto Exit6; + } + // Allocate a filter cursor to put the search expression + ccode = NWDSAllocFilter(&cur); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSAllocFilter returned: %d\n", ccode); + goto Exit6; + } + // Build the expression tree in cur, then place into searchFilter + // Object Class = User AND CN = user_cn + ccode = NWDSAddFilterToken(cur, FTOK_ANAME, "Object Class", SYN_CLASS_NAME); + ccode = NWDSAddFilterToken(cur, FTOK_EQ, NULL, 0); + ccode = NWDSAddFilterToken(cur, FTOK_AVAL, "User", SYN_CLASS_NAME); + ccode = NWDSAddFilterToken(cur, FTOK_AND, NULL, 0); + ccode = NWDSAddFilterToken(cur, FTOK_ANAME, "CN", SYN_CI_STRING); + ccode = NWDSAddFilterToken(cur, FTOK_EQ, NULL, 0); + ccode = NWDSAddFilterToken(cur, FTOK_AVAL, user_cn, SYN_CI_STRING); + ccode = NWDSAddFilterToken(cur, FTOK_END, NULL, 0); + + ccode = NWDSPutFilter(context, searchFilter, cur, NULL); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSPutFilter returned: %d\n", ccode); + goto Exit5; + } else + cur = NULL; + + ccode = NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &retBuf); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSAllocBuf returned: %d\n", ccode); + goto Exit5; + } + + ctxp = 0; + iterationHandle = NO_MORE_ITERATIONS; + // while NWDSSearch still can get some objects... + do { + ccode = NWDSSearch(context, "[Root]", DS_SEARCH_SUBTREE, 0, // don't dereference aliases + searchFilter, 0, // we want attributes and values + 0, // only want information in attrNames + NULL, &iterationHandle, 0, // reserved + &countObjectsSearched, retBuf); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSSearch returned: %s\n", strnwerror(ccode)); + goto Exit4; + } + // count the object returned in the buffer + ccode = NWDSGetObjectCount(context, retBuf, &objCount); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSGetObjectCount returned: %d\n", ccode); + goto Exit4; + } + // for the number of objects returned... + + for (objCntr = 0; objCntr < objCount; objCntr++) { + char *p; + size_t ln; + + // get an object name + ccode = NWDSGetObjectName(context, retBuf, objectName, NULL, NULL); + if (ccode) { + syslog(LOG_NOTICE, "nw_ctx_search:NWDSGetObjectName returned: %d\n", ccode); + goto Exit4; + } + // now, we get the user context wich starts at the first . occurence in the string + p = strchr(objectName, '.'); + if (!p) { + break; + } + ln = strlen(p + 1); + if (ctxp + ln >= maxsize) { + break; + } + if (ctxp) { + *contexts++ = ','; + maxsize--; + } + memcpy(contexts, p + 1, ln); + contexts += ln; + maxsize -= ln; + ctxp = 1; + + } // objCntr + } while (iterationHandle != NO_MORE_ITERATIONS); +Exit4:; + if (iterationHandle != NO_MORE_ITERATIONS) { + // let's keep the final dserr as the 'out of memory error' from ptr->getval() + NWDSCloseIteration(context, DSV_SEARCH_FILTER, iterationHandle); + } + //lets remove trailing ':' + if (ctxp) + *contexts = 0; + else + ccode = PAM_USER_UNKNOWN; // not found... + + if (retBuf) + NWDSFreeBuf(retBuf); +Exit5:; + if (cur) + NWDSFreeFilter(cur, NULL); +Exit6:; + if (searchFilter) + NWDSFreeBuf(searchFilter); +Exit3:; +Exit2:; + NWDSFreeContext(context); +Exit1:; + return ccode; +} + +/* new code called by tree=XXX:ctx1,ctx2...,ctxn/group cmd line parameter */ +/* or by ndsserver =XXX:ctx1.../Group */ +static int +nw_create_verify_conn_to_tree(NWCONN_HANDLE * conn, NWObjectID * id, + const char *tree, const char *user, const char *contexts, const char *pwd, + int qflag, const char *group, nuint nameFormat) +{ + NWCONN_HANDLE cn = NULL; + NWCCODE err; + NWObjectID oid; + NWDSContextHandle ctx = NULL; + nuint32 c; + char fqdn[MAX_DN_CHARS + 1]; + const char *ctxStart; + const char *ctxEnd; + char ctxbuf[4096]; // buffer to hold possible matches in a contexless login + + err = NWCCOpenConnByName(NULL, tree, nameFormat, NWCC_OPEN_NEW_CONN, NWCC_RESERVED, &cn); + if (err) { + if (nameFormat == NWCC_NAME_FORMAT_NDS_TREE) + syslog(LOG_WARNING, "%s when trying to open connection to tree %s \n", strnwerror(err), tree); + else + syslog(LOG_WARNING, "%s when trying to open connection to NDS server !%s! \n", strnwerror(err), tree); + return PAM_TRY_AGAIN; + } + + err = PAM_SYSTEM_ERR; + if (NWDSCreateContextHandle(&ctx)) { + syslog(LOG_WARNING, "NWDSCreateContextHandle() failed with %s\n", strnwerror(err)); + goto bailout; + } + if (NWDSGetContext(ctx, DCK_FLAGS, &c)) { + syslog(LOG_WARNING, "NWDSGetContext(DCK_FLAGS) failed with %s\n", strnwerror(err)); + goto bailout; + } + c |= DCV_XLATE_STRINGS | DCV_TYPELESS_NAMES | DCV_DEREF_ALIASES; + c &= ~DCV_CANONICALIZE_NAMES; + + if (NWDSSetContext(ctx, DCK_FLAGS, &c)) { + syslog(LOG_WARNING, "NWDSSetContext(DCK_FLAGS) failed with %s\n", strnwerror(err)); + goto bailout; + } + + if (NWDSAddConnection(ctx, cn)) { + syslog(LOG_WARNING, "NWDSAddConnection failed with %s\n", strnwerror(err)); + goto bailout; + } + /* test 1.21* WITH PAM first login context is [Root] (pam has no $HOME) + but with xscreensaver, context is red by ncpfs from a nwclient file in user's home + and resolution fails ! + same problem with nds_group checking OK with PAM since both value are realtive to [root] + by with xscreensaver , the ctx is set to default, so comparing is done to the wrong group name + if (NWDSGetContext(ctx,DCK_NAME_CONTEXT,fqdn)) + syslog(LOG_WARNING, "NWDSGetContext (DCK_NAME_CONTEXT) failed with %s\n", strnwerror(err)); + else + syslog(LOG_WARNING, "Default context is %s :\n", fqdn); + + */ + +// rev 1.25 , implement contextless login if no contexts are provided in the contexts list + + if (!contexts) { + if (qflag & QF_DEBUG) + syslog(LOG_DEBUG, "Trying contexless login for %s on %s\n", tree, user); + if (nw_ctx_search(user, cn, ctxbuf, sizeof (ctxbuf))) { + err = PAM_AUTH_ERR; + goto bailout; + } + contexts = ctxbuf; + if (qflag & QF_DEBUG) + syslog(LOG_DEBUG, "Found %s for %s\n", ctxbuf, user); + } + + /* scan the search contexts list */ + ctxStart = contexts; + do { + size_t ln; + + err = PAM_AUTH_ERR; + ln = strlen(user); + if (ln >= sizeof (fqdn)) { + syslog(LOG_ERR, "Buffer overflow attack attempted at %s:%u (%s)\n", __FILE__, __LINE__, __FUNCTION__); + goto bailout; + } + memcpy(fqdn, user, ln + 1); + if (ctxStart) { + size_t appln; + + ctxEnd = strchr(ctxStart, ','); + if (ctxEnd) { + appln = ctxEnd - ctxStart; + ctxEnd++; + } else { + appln = strlen(ctxStart); + } + if (ln + 1 + appln >= sizeof (fqdn)) { + syslog(LOG_ERR, "Buffer overflow attack attempted at %s:%u (%s)\n", __FILE__, __LINE__, __FUNCTION__); + goto bailout; + } + fqdn[ln] = '.'; + memcpy(fqdn + ln + 1, ctxStart, appln); + fqdn[ln + 1 + appln] = 0; + + ctxStart = ctxEnd; + } + if (qflag & QF_DEBUG) + syslog(LOG_NOTICE, "nw_create_verify_conn_to_tree: trying to resolve %s\n", fqdn); + /* rev 1.26 : some support for the same CN in different contexts + the password makes the difference */ + err = NWDSMapNameToID(ctx, cn, fqdn, &oid); + if (!err) { + if (qflag & QF_DEBUG) + syslog(LOG_WARNING, "trying to login as %s\n", fqdn); + err = nds_login_auth(cn, fqdn, pwd); + if (err && err != NWE_PASSWORD_EXPIRED) { + syslog(LOG_WARNING, "%s when trying to login\n", strnwerror(err)); + switch (err) { + /* case 1:good password but some other problem, report failure */ + case NWE_LOGIN_MAX_EXCEEDED: + case NWE_LOGIN_UNAUTHORIZED_TIME: + case NWE_LOGIN_UNAUTHORIZED_STATION: + case NWE_ACCT_DISABLED: + err = PAM_AUTH_ERR; + goto bailout; + /* case 2: one day we should really do something about this ? */ + case NWE_PASSWORD_EXPIRED: + err = PAM_NEW_AUTHTOK_REQD; + goto bailout; + /*case 3: wrong password or other errors. let's try in another context */ + case ERR_NO_SUCH_ENTRY: + case NWE_SERVER_UNKNOWN: + err = PAM_USER_UNKNOWN; + break; + default: + err = PAM_AUTH_ERR; + break; + } + //goto bailout; not anymore + } else + break; /* everything is Ok, except maybe password expired */ + } else { + syslog(LOG_WARNING, "NWDSMapNameToID for %s failed with %s\n", fqdn, strnwerror(err)); + } + + } while (ctxStart); + + if (err) { + err = PAM_AUTH_ERR; + goto bailout; + } + /* PP:: not very sure this code is STILL relevant against NDS tree */ + err = nw_get_nwid(cn, &oid, qflag); // needed again ? + if (err) { + syslog(LOG_WARNING, "Error %s retrieving user ID for %s\n", strnwerror(err), user); + goto bailout; + } + if (qflag & QF_NOSU) { + if (oid == 0x00000001) { + err = PAM_AUTH_ERR; + syslog(LOG_WARNING, "Access denied for %s/%s because of it is supervisor\n", tree, user); + goto bailout; + } + if (qflag & QF_DEBUG) + syslog(LOG_DEBUG, "User %s/%s passed supervisor check\n", tree, user); + } + if (qflag & QF_NOSUEQ) { + nuint8 level; + + err = NWGetBinderyAccessLevel(cn, &level, NULL); + if (err) { + syslog(LOG_WARNING, "Access denied for %s/%s because of I/O error during object rights verification\n", tree, user); + err = PAM_AUTH_ERR; + goto bailout; + } + if ((level >= 0x30) || ((level & 0xF) >= 3)) { + syslog(LOG_WARNING, "Access denied for %s/%s because of it is supervisor equivalent\n", tree, user); + err = PAM_AUTH_ERR; + goto bailout; + } + } + if (qflag & QF_DEBUG) { + char aux[512]; + aux[0] = 0; + if (nameFormat == NWCC_NAME_FORMAT_NDS_TREE) { + NWCCGetConnInfo(cn, NWCC_INFO_SERVER_NAME, sizeof (aux), aux); + syslog(LOG_DEBUG, "User %s was successfully authorized on tree %s by server %s \n", fqdn, tree, aux); + } else { + NWCCGetConnInfo(cn, NWCC_INFO_TREE_NAME, sizeof (aux), aux); + syslog(LOG_DEBUG, "User %s was successfully authorized by NDS server %s on tree %s\n", fqdn, tree, aux); + } + } + + if (group) { + /* v 1.21 */ + err = is_member_of_nds_group(ctx, cn, oid, group); + if (err) { + syslog(LOG_WARNING, "%s is not member of NDS %s\n", user, group); + err = PAM_AUTH_ERR; + goto bailout; + } + } + if (id) + *id = oid; + if (conn) + *conn = cn; + else + NWCCCloseConn(cn); + NWDSFreeContext(ctx); + return PAM_SUCCESS; +bailout:; + /* code to be executed upon any error */ + if (ctx) + NWDSFreeContext(ctx); + if (cn) + NWCCCloseConn(cn); + return err; +} + +static int +nw_attempt_auth_server(pam_handle_t * pamh, const char *server, const char *user, const char *pwd, int qflag, const char *group) +{ + int err; + NWCONN_HANDLE conn; + + err = nw_create_verify_conn_to_server(&conn, NULL, server, user, pwd, qflag, group); + if (err) + return err; + pam_set_data(pamh, "pam.ncpfs.passwd.conn", conn, nw_cleanup_conn); + return PAM_SUCCESS; +} + +/* trial code server is a Tree or a NDS server... and contexts is a comma separated list of CTX to search */ +/* rev 1.25: if contexts is NULL, contextless login is attempted */ +static int +nw_attempt_auth_tree(pam_handle_t * pamh, + const char *tree, const char *user, const char *contexts, const char *pwd, + int qflag, const char *group, nuint nameFormat) // either NWCC_NAME_FORMAT_NDS_TREE, NWCC_NAME_FORMAT_BIND +{ + int err; + NWCONN_HANDLE conn; + + err = nw_create_verify_conn_to_tree(&conn, NULL, tree, user, contexts, pwd, qflag, group, nameFormat); + if (err) + return err; + pam_set_data(pamh, "pam.ncpfs.passwd.conn", conn, nw_cleanup_conn); + return PAM_SUCCESS; +} + +/********************************************************* part II NDS properties reading *******************/ +struct nw_group_info { + struct nw_group_info *next; + char *name; + gid_t gid; + long zenFlag; //PP +}; + +// thes infos will be "dumped" in a ~/nwinfos file that can be "sourced" by the 6 "Zen scripts" +// or any future scripts / applications. (see the pam_session_opening part for the used format +// and script variables names +struct nw_user_info { + char *name; + char *gecos; + char *shell; + char *dir; + uid_t uid; + gid_t gid; + struct nw_group_info *groups; + pam_handle_t *pamh; + struct pam_ncp_state state; + int qflag; + char *nwhomeServer; //PP CN of the server extracted from NDS prop Home Directory + char *nwhomeVolume; //PP real name of the volume (SYS...)extracted from NDS prop Home Directory + char *nwhomePath; //PP "unixified" and "uppercased" extracted from NDS prop Home Directory + char *nwhomeMntPnt; //PP defaut =nwhome , can be changed by -m option + char *emailSMTP; //PP NDS property (obsolete but still used) + char *emailLDAP; //PP NDS property + char *messageServer; //PP CN of the NDS property maybe != authenticating server used by PAM + char *defaultTree; //PP the tree of the server that authenticated him + char *defaultNameCtx; //PP from his canonical name + long zenFlag; //PP see above + long zenFlagOFF; //PP rev 1.26 turn off some zenflags on that workstation + int isNewUser; // PP rev 1.19 + int isScreenSaverRelogin; // PP rev 1.21 +}; + +static void +init_nw_user_info(struct nw_user_info *ui) +{ + ui->pamh = NULL; + ui->qflag = 0; + ui->zenFlag = ZF_DEFAULTS; //PP + ui->zenFlagOFF = 0; + ui->name = NULL; + ui->gecos = NULL; + ui->shell = NULL; + ui->dir = NULL; + ui->uid = (uid_t) -1; + ui->gid = (gid_t) -1; + ui->groups = NULL; + ui->nwhomeServer = NULL; //PP + ui->nwhomeVolume = NULL; //PP + ui->nwhomePath = NULL; //PP + ui->nwhomeMntPnt = NULL; //PP + ui->emailSMTP = NULL; //PP + ui->emailLDAP = NULL; //PP + ui->messageServer = NULL; //PP + ui->defaultTree = NULL; //PP + ui->defaultNameCtx = NULL; //PP + ui->isNewUser = 0; //PP +} + +static void +free_nw_user_info(struct nw_user_info *ui) +{ + struct nw_group_info *gi; + struct nw_group_info *bkgi; + +#define FREEFIELD(x) do if (ui->x) { free(ui->x); ui->x = NULL; } while (0) + FREEFIELD(name); + FREEFIELD(gecos); + FREEFIELD(shell); + FREEFIELD(dir); + FREEFIELD(nwhomeServer); + FREEFIELD(nwhomeVolume); + FREEFIELD(nwhomePath); + FREEFIELD(nwhomeMntPnt); + FREEFIELD(emailSMTP); + FREEFIELD(emailLDAP); + FREEFIELD(messageServer); + FREEFIELD(defaultTree); + FREEFIELD(defaultNameCtx); + +#undef FREEFIELD + for (gi = ui->groups; gi; gi = bkgi) { + bkgi = gi->next; + free(gi->name); + free(gi); + } + ui->groups = NULL; +} + +// PP:called by PAM at pam_end +// There is a possible problem storing the user_data in PAM during all the session +// If an admin changes something to that user, the data is out on sync +// so we should use this data ONLY in a "PAM_open_session" call back +// that happens just after the successful login +static void +cleanup_user_info(pam_handle_t * pamh, void *data, int error_status) +{ + free_nw_user_info((struct nw_user_info *) data); +} + +static int +nw_retrieve_bindery_user_info(struct nw_user_info *ui, NWCONN_HANDLE conn, NWObjectID oid) +{ + +/* we have to give some support here since: + 1) writing the .nwclient file in user's home (flags NOP) requires that + either ui.messageServer or ui.nwHomeServer to be not NULL + 2) we need user's home from bindery to mount it (flag H) + warning: the home MUST be on the authenticating server else + the bindery property is likely to be empty + */ + char serverName[128]; + char userName[128]; + char *v; + NWCCODE err; + struct nw_property p; + const char me[] = "nw_retrieve_bindery_user_info"; + + err = NWCCGetConnInfo(conn, NWCC_INFO_USER_NAME, sizeof (userName), userName); + if (err) { + syslog(LOG_WARNING, "%s:unable to get back user name from connection.\n", me); + return err; + } + + err = NWCCGetConnInfo(conn, NWCC_INFO_SERVER_NAME, sizeof (serverName), serverName); + if (err) { + syslog(LOG_WARNING, "%s:unable to get back server name from connection.\n", me); + return err; + } + v = strdup(serverName); + if (!v) { + syslog(LOG_WARNING, "%s:Not enough memory for strdup()\n", me); + return ENOMEM; + } + ui->messageServer = v; + + memset(&p, 0, sizeof (p)); + err = ncp_read_property_value(conn, NCP_BINDERY_USER, userName, 1, "IDENTIFICATION", &p); + if (!err && p.value[0]) { + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "%s:got a full name %s for %s\n ", me, p.value, userName); + + v = strdup(p.value); + if (!v) { + syslog(LOG_WARNING, "%s:Not enough memory for strdup()\n", me); + return ENOMEM; + } + ui->gecos = v; + } + /*do not rely too much on this with NW4 servers: + in my place they do not answer correctly to this call even if + the user DO have his home on that server. + in contrast, one NW5 server, were the user DO NOT has his home on it + DID reply correctly ??? + */ + + memset(&p, 0, sizeof (p)); + err = ncp_read_property_value(conn, NCP_BINDERY_USER, userName, 1, "HOME_DIRECTORY", &p); + if (!err && p.value[0]) { + char *v1; + char *mark = strchr(p.value, ':'); + if (mark && *(mark + 1)) { + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "%s:got a home directory %s for %s\n ", me, p.value, userName); + + *mark = 0; + v = strdup(p.value); + if (!v) { + syslog(LOG_WARNING, "%s:Not enough memory for strdup()\n", me); + return ENOMEM; + } + v1 = strdup(mark + 1); + if (!v1) { + syslog(LOG_WARNING, "%s:Not enough memory for strdup()\n", me); + return ENOMEM; + } + + ui->nwhomeServer = strdup(ui->messageServer); + ui->messageServer = NULL; + ui->nwhomeVolume = v; + ui->nwhomePath = unixifyPathUC(v1); + + } + } + return 0; +} + +/******************************************** NDS_Reading ********************/ +struct attrop { + const NWDSChar *attrname; + NWDSCCODE (*getval)(NWDSContextHandle, const void *val, void *arg); + enum SYNTAX synt; +}; + +static NWDSCCODE +nds_read_attrs(NWDSContextHandle ctx, const NWDSChar * objname, void *arg, const struct attrop *atlist) +{ + Buf_T *attrlist; + Buf_T *info; + NWDSCCODE dserr; + const struct attrop *ptr; + nuint32 iterHandle; + + dserr = NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &attrlist); + if (dserr) { + syslog(LOG_WARNING, "NWDSAllocBuf() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + dserr = NWDSInitBuf(ctx, DSV_READ, attrlist); + if (dserr) { + syslog(LOG_WARNING, "NWDSInitBuf() failed with %s\n", strnwerror(dserr)); + goto bailoutbuf1; + } + for (ptr = atlist; ptr->attrname; ptr++) { + dserr = NWDSPutAttrName(ctx, attrlist, ptr->attrname); + if (dserr) { + syslog(LOG_WARNING, "NWDSPutAttrName(%s) failed with %s\n", ptr->attrname, strnwerror(dserr)); + goto bailoutbuf1; + } + } + dserr = NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &info); + if (dserr) { + syslog(LOG_WARNING, "NWDSAllocBuf() failed with %s\n", strnwerror(dserr)); + goto bailoutbuf1; + } + iterHandle = NO_MORE_ITERATIONS; + do { + NWObjectCount attrs; + + dserr = NWDSRead(ctx, objname, DS_ATTRIBUTE_VALUES, 0, attrlist, &iterHandle, info); + if (dserr) { + if (dserr == ERR_NO_SUCH_ATTRIBUTE) + dserr = 0; + else + syslog(LOG_WARNING, "NWDSRead() failed with %s\n", strnwerror(dserr)); + goto bailoutbuf2; + } + dserr = NWDSGetAttrCount(ctx, info, &attrs); + if (dserr) { + syslog(LOG_WARNING, "NWDSGetAttrCount() failed with %s\n", strnwerror(dserr)); + goto bailoutcloit; + } + while (attrs--) { + NWDSChar attrname[MAX_SCHEMA_NAME_BYTES]; + enum SYNTAX synt; + NWObjectCount vals; + + dserr = NWDSGetAttrName(ctx, info, attrname, &vals, &synt); + if (dserr) { + syslog(LOG_WARNING, "NWDSGetAttrName() failed with %s\n", strnwerror(dserr)); + goto bailoutcloit; + } + while (vals--) { + size_t sz; + void *val; + + dserr = NWDSComputeAttrValSize(ctx, info, synt, &sz); + if (dserr) { + syslog(LOG_WARNING, "NWDSComputeAttrValSize() failed with %s\n", strnwerror(dserr)); + goto bailoutcloit; + } + val = malloc(sz); + if (!val) { + syslog(LOG_WARNING, "malloc() failed with %s\n", strnwerror(ENOMEM)); + goto bailoutcloit; + } + dserr = NWDSGetAttrVal(ctx, info, synt, val); + if (dserr) { + free(val); + syslog(LOG_WARNING, "NWDSGetAttrVal() failed with %s\n", strnwerror(dserr)); + goto bailoutcloit; + } + for (ptr = atlist; ptr->attrname; ptr++) { + if (!strcasecmp(ptr->attrname, attrname)) + break; + } + if (ptr->getval) { + if (ptr->synt != synt) { + syslog(LOG_WARNING, "Incompatible tree schema, %s has syntax %d instead of %d\n", attrname, synt, ptr->synt); + } else { + // ajout PP dserr= !!! en cas de pb mémoire + dserr = ptr->getval(ctx, val, arg); + } + } + free(val); + if (dserr) { + goto bailoutcloit; + } + } + } + } while (iterHandle != NO_MORE_ITERATIONS); +bailoutcloit:; + if (iterHandle != NO_MORE_ITERATIONS) { + // PP let's keep the final dserr as the 'out of memory error' from ptr->getval() + NWDSCCODE dserr2 = NWDSCloseIteration(ctx, DSV_READ, iterHandle); + if (dserr2) { + syslog(LOG_WARNING, "NWDSCloseIteration() failed with %s\n", strnwerror(dserr2)); + } + } +bailoutbuf2:; + NWDSFreeBuf(info); +bailoutbuf1:; + NWDSFreeBuf(attrlist); +bailout:; + return dserr; +} + +/*PP ************************************************* splitting home directory attribute*/ + +struct nw_home_info { + char *hs; + char *hrn; +}; + +static NWDSCCODE +nds_pp_host_server(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_home_info *hi = (struct nw_home_info *) arg; + const char *src = val; + size_t len; + char *dot; + char *v; + + dot = strchr(src, '.'); + if (dot) { + len = dot - src; + } else { + len = strlen(src); + } + v = malloc((len + 1) * sizeof (char)); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + memcpy(v, src, len); + v[len] = 0; + hi->hs = v; + return 0; +} + +static NWDSCCODE +nds_pp_host_resource_name(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_home_info *hi = (struct nw_home_info *) arg; + + char *v = strdup((const char *) val); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + hi->hrn = v; + return 0; +} + +static NWDSCCODE +nds_home_info(NWDSContextHandle ctx, const NWDSChar * objname, struct nw_home_info *hi) +{ + static const struct attrop atlist[] = { + {ATTR_HOST_SERVER, nds_pp_host_server, SYN_DIST_NAME}, + {ATTR_HOST_RN, nds_pp_host_resource_name, SYN_CI_STRING}, + {NULL, NULL, SYN_UNKNOWN} + }; + + return nds_read_attrs(ctx, objname, hi, atlist); +} + +/******************************************************************************/ + +/** gather Unix groups informations */ + +static NWDSCCODE +nds_ga_group_unixgid(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_group_info *gi = (struct nw_group_info *) arg; + + if (gi->gid == (gid_t) -1) { + gi->gid = *(const Integer_T *) val; + } + return 0; +} + +// PP: id no NDS8 is present, collect the group Unix ID from one of the location +// string with the format G:nnn +// This is relevant ONLY if the flag QFC_REQUIRE_SERVER has been set in the command line +// can also used to specify a name of unix group different of the NDS'one +// eg. everyone --> users +// staff --> root +static NWDSCCODE +nds_pp_group_location(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_group_info *gi = (struct nw_group_info *) arg; + const char *pt = (const char *) val; + int n; + + //syslog(LOG_NOTICE, "start of NW group location got %s\n ",pt); + if (strlen(pt) > 2 && pt[1] == ':') { + const char *cur_pt = pt + 2; + switch (*pt) { + case 'g': + case 'G': + if (gi->gid == (gid_t) -1) { + switch (getnumber(&n, &cur_pt)) { + case 0: + gi->gid = n; + break; + default: + syslog(LOG_ERR, "Invalid group GID %s for %s\n", pt, gi->name); + } + } + break; + case 'n': + case 'N': // unix equivalent name + if (!gi->name) { + char *v = strdup(cur_pt); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + gi->name = v; + } + break; + /* interesting feature: since we OR them, a group may have + serveral Z:xxxx strings in the location property */ + case 'z': + case 'Z': + gi->zenFlag |= decodeZenFlag(&cur_pt); + break; + } + } + return 0; +} + +static NWDSCCODE +nds_group_info(NWDSContextHandle ctx, const NWDSChar * objname, struct nw_group_info *gi) +{ + static const struct attrop atlist[] = { + {ATTR_GID, nds_ga_group_unixgid, SYN_INTEGER}, + {ATTR_LOCATION, nds_pp_group_location, SYN_CI_STRING}, + {NULL, NULL, SYN_UNKNOWN} + }; + + gi->gid = (gid_t) -1; + gi->zenFlag = 0; + gi->name = NULL; + return nds_read_attrs(ctx, objname, gi, atlist); +} + +// PP:called only if no "Unix name has been found in NDS for that group +// a string N:nnnnn in L attribute +static NWDSCCODE +nds_group_name(NWDSContextHandle ctx, const NWDSChar * objname, struct nw_group_info *gi) +{ + char *buff; + const char *f; + int c; + + /* Worst case: output is Z, two chars per one in input, and zero terminating byte */ + gi->name = buff = malloc(strlen(objname) * 2 + 2); + if (!buff) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + f = objname; + for (; (c = *((const unsigned char *) f)++) != 0; *buff++ = c) { + if (c >= 'a' && c <= 'z') + continue; + if (c >= 'A' && c <= 'Z') { + c += 'a' - 'A'; + continue; + } + + if (gi->name == buff) + *buff++ = 'Z'; +// PP: why ? a group starting by a digit is not legal? +// 24/01/2001 I know why now !!! grpadd will add user to group 1, 2 ... (bin, daemon !!!) + if (c >= '0' && c <= '9') + continue; + if (c == '_' || c == ' ') { + c = '_'; + continue; + } + if (c == '.') { //stop at first dot + if (1) + break; + c = 'U'; + continue; + } + *buff++ = 'A' + (c >> 4); + c = 'A' + (c & 0xF); + } + *buff = 0; + return 0; +} + +static int nw_update_group_info(struct nw_user_info *ui, struct nw_group_info *gi); + +static int +rqgroup(struct nw_user_info *ui, NWDSContextHandle ctx, const NWDSChar * objname, int primary) +{ + struct nw_group_info gi; + struct group *grp; + struct nw_group_info *i; + int err; + + //syslog(LOG_NOTICE, "call of rggroup for %s\n ",objname); + err = nds_group_info(ctx, objname, &gi); + if (err) + return err; + ui->zenFlag |= gi.zenFlag; // merge group zenFlag to user's (rev 1.25 now, so it is done even if group cannot be autocreated) + if (!gi.name) // no alias sent by NDS + if (nds_group_name(ctx, objname, &gi)) // make a name + return -1; + setgrent(); //PP + grp = getgrnam(gi.name); + endgrent(); //PP + if (grp) { + gi.gid = grp->gr_gid; + + } else { + err = nw_update_group_info(ui, &gi); + if (err) + return err; + } + if (primary) { + ui->gid = gi.gid; + } + // PP no duplicates in group list. may happen with an alias sent by NDS + for (i = ui->groups; i; i = i->next) { + if (!strcmp(gi.name, i->name)) + break; + } + if (!i) { + i = malloc(sizeof (*i)); + if (!i) + return ENOMEM; + i->name = gi.name; + i->gid = gi.gid; + i->next = ui->groups; + i->zenFlag = gi.zenFlag; + ui->groups = i; + } + return 0; +} + +static int +build_groups_list(const struct nw_user_info *ui, char **list) +{ + const struct nw_group_info *gi; + size_t ln; + char *p; + + *list = NULL; + ln = 1; + for (gi = ui->groups; gi; gi = gi->next) + ln += strlen(gi->name) + 1; + if (ln == 1) + return 0; + + p = (char *) malloc(ln); + if (!p) + return ENOMEM; + *list = p; + for (gi = ui->groups; gi; gi = gi->next) { + ln = strlen(gi->name); + memcpy(p, gi->name, ln); + p += ln; + *p++ = ','; + } + *--p = 0; + //syslog(LOG_NOTICE, "end of build group list got %s\n ",*list); + return 0; +} + +/************************************ helper functions to extract some user's properties **/ +static NWDSCCODE +nds_ga_unixuid(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + if (ui->uid == (uid_t) -1) { + ui->uid = *(const Integer_T *) val; + // talk a bit (real NDS8 attribute or dummy ?) + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "got a Unix ID %d from %s\n ", ui->uid, ATTR_UID); + } + return 0; +} + +static NWDSCCODE +nds_ga_unixpgid(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + + if (ui->gid == (gid_t) -1) { + ui->gid = *(const Integer_T *) val; + // talk a bit (real NDS8 attribute or dummy ?) + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "got a Unix PGID %d from %s\n ", ui->gid, ATTR_PGID); + } + return 0; +} + +// PP this is the same founction as below ??? +// does Netware has two synonyms for the same property (UNIX:GID" +// and UNIX:Primary GroupID??? +static NWDSCCODE +nds_ga_unixgid(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + + if (ui->gid == (gid_t) -1) { + ui->gid = *(const Integer_T *) val; + // talk a bit (real NDS8 attribute or dummy ?) + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "got a Unix GID %d from %s\n ", ui->gid, ATTR_GID); + } + return 0; +} + +static NWDSCCODE +nds_ga_unixhome(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + + if (!ui->dir) { + char *v = strdup((const char *) val); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + ui->dir = v; + // talk a bit (real NDS8 attribute or dummy ?) + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "got a Unix Home %s from %s\n ", ui->dir, ATTR_HOME); + } + return 0; +} + +static NWDSCCODE +nds_ga_unixshell(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + + if (!ui->shell) { + char *v = strdup((const char *) val); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + ui->shell = v; + // talk a bit (real NDS8 attribute or dummy ?) + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "got a Unix shell %s from %s\n ", ui->shell, ATTR_SHELL); + } + return 0; +} + +static NWDSCCODE +nds_update_gecos(struct nw_user_info *ui, const char *str) +{ + char *v; + size_t sadd = strlen(str) + 1; + + if (ui->gecos) { // already got the name + size_t sold = strlen(ui->gecos); + + v = realloc(ui->gecos, sold + 1 + sadd); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + v[sold] = ','; + memcpy(v + 1, str, sadd); + } else { + v = malloc(sadd); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + memcpy(v, str, sadd); + } + ui->gecos = v; + return 0; +} + +// PP we append the Comment after the full name, separated by a comma +static NWDSCCODE +nds_ga_unixcomment(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + + // talk a bit (real NDS8 attribute or dummy ?) + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "got a Unix Comment %s from %s\n ", (const char *) val, ATTR_COM); + return nds_update_gecos(ui, (const char *) val); +} + +// PP can be any naming attribute returning a SYN_CI_STRING see define before nds_user_info() +// PP we add the name before any comment that can be there +static NWDSCCODE +nds_ga_gecos(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + NWDSCCODE err; + + if (ui->qflag & QF_DEBUG) { + syslog(LOG_NOTICE, "before full name gecos is %s\n ", ui->gecos ? : "(null)"); + } + err = nds_update_gecos(ui, (const char *) val); + if (err) { + return err; + } + if (ui->qflag & QF_DEBUG) { + syslog(LOG_NOTICE, "after full name gecos is %s\n ", ui->gecos); + } + return 0; +} + +static NWDSCCODE +nds_ga_unixpgname(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + + // talk a bit (real NDS8 attribute or dummy ?) + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "got a Unix PGroup Name %s from %s\n ", (const char *) val, ATTR_PGNAME); + if (ui->gid == (gid_t) -1) { + rqgroup(ui, ctx, val, 1); + } + return 0; +} + +static NWDSCCODE +nds_ga_group_membership(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + + rqgroup(ui, ctx, val, 0); + return 0; +} + +#ifdef USE_POSTAL_ADDRESS +// PP: id no NDS8 is present, collect the user's basic Unix informations from +// 6 fields of the Postal Address attribute +// This is relevant ONLY if the flag QFC_REQUIRE_SERVER has been set in the command line +// and if zenFlag processing is activated. +// some people may prefer the postal address instead of the Location property +// used here by default. +// advantages: can be directty edited.No need to prepend X: +// disadvantages: limited to 30 chars and 6 strings +// The location attribute is more convenient +// ( no limit of number of strings and 128 chars rather than 30). + +static NWDSCCODE +nds_pp_postal_address(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + Postal_Address_T *pa = (Postal_Address_T *) val; + int i, n; + const char *pt; + //rqgroup(ui, ctx, val, 0); + // adress 0 = unix UID leading spaces not significant + // adress 1= unix primary GID leading spaces not significant + // adress 2= unix home dir spaces significant + // adress 3= unix shell spaces significant + // adress 4= other group name spaces turned to _ + // ONLY ONE: do not use a comma separated list group1,group2,..... + // adress 5= Zen flags spaces ignored +/* note that this attribute is not mandatory +so if it does not exists that "call back" is not called */ + + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "start of PO address\n"); + for (i = 0; i < 6; i++) { + pt = (const char *) (*pa)[i]; + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "reading po_ad %d %s ", i, pt); + // caution it may be there but empty (pointing to à 0) !!! + if (pt && strlen(pt)) + switch (i) { + case 0: + if (ui->uid == (uid_t) -1) { // do not overwrite a DS 8 answer + const char *cur_pt = pt; + switch (getnumber(&n, &cur_pt)) { + case 0: + ui->uid = n; + break; + default: + syslog(LOG_ERR, "Invalid user ID %s for users %s\n", *pt, ui->name); + } + } + break; + case 1: + if (ui->gid == (gid_t) -1) { // do not overwrite a DS 8 answer + const char *cur_pt = pt; + switch (getnumber(&n, &cur_pt)) { + case 0: + ui->gid = n; + break; + default: + syslog(LOG_ERR, "Invalid primary user GID %s for user %s\n", *pt, ui->name); + } + } + break; + case 2: + if (!ui->dir) { // do not overwrite a DS 8 answer + char *v = strdup(pt); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + + ui->dir = v; + } + break; + case 3: + if (!ui->shell) { // do not overwrite a DS 8 answer + char *v = strdup(pt); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + ui->shell = v; + } + break; + case 4: // other group name: only one may be specified, unless we + // separe them by comma and parse. but limited to 30 chars + //(one of the reasons why we dropped Postal Address as a substitue for NDS8) + rqgroup(ui, ctx, val, 0); + break; + + case 5: // ZenFlag per user ABCDEFGHIJKLMNOPQRSTUVWXYZ (30 max!!!) + ui->zenFlag |= decodeZenFlag(&pt); + break; + } + } + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "end of PO address\n"); + return 0; +} +#else +// PP: id no NDS8 is present, collect the user's basic Unix informations from the location +// strings with the format X:nnnnnnnn , X = [U,G,H,S,P,O,C,Z] upper of lower case +// This is relevant ONLY if the flag QFC_REQUIRE_SERVER has been set in the command line +// Of course, even if NDS8 IS present, we still look at these, just in case the migration +// is not complete and to look for the user's ZENFLAG + +// feature I: since zenflags are ORED, a user can have SEVERAL z:xxxx strings in his location strings +// better than deleting and recreating it !!! +// feature II: several O:groups strings are possible ( secondary groups defintion) +// DO NOT use o:group1,group2..... +static NWDSCCODE +nds_pp_location(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + const char *pt = (const char *) val; + char *v; + int n; + int err; + + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "start of NW location got %s\n ", pt); + + if (strlen(pt) > 2 && pt[1] == ':') { + const char *cur_pt = pt + 2; + switch (*pt) { + case 'u': //user ID leading spaces not significant + case 'U': + if (ui->uid == (uid_t) -1) { // do not overwrite a DS 8 answer + switch (getnumber(&n, &cur_pt)) { + case 0: + ui->uid = n; + break; + default: + syslog(LOG_ERR, "Invalid user ID %s\n", pt); + } + } + break; + case 'g': // primary group number GID leading spaces not significant + case 'G': + if (ui->gid == (gid_t) -1) { // do not overwrite a DS 8 answer + switch (getnumber(&n, &cur_pt)) { + case 0: + ui->gid = n; + break; + default: + syslog(LOG_ERR, "Invalid primary user GID %s\n", pt); + } + } + break; + case 'p': // primary group name, illegal chars converted by nds_group_name + case 'P': + if (ui->gid == (gid_t) -1) // do not overwrite a DS 8 answer + rqgroup(ui, ctx, cur_pt, 1); + break; + case 'h': // home Unix all spaces significant (must have none ?) + case 'H': + if (!ui->dir) { // do not overwrite a DS 8 answer + v = strdup(cur_pt); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + + ui->dir = v; + } + break; + case 's': //shell Unix all spaces significant (must have none ?) + case 'S': + if (!ui->shell) { // do not overwrite a DS 8 answer + v = strdup(cur_pt); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + ui->shell = v; + } + break; + case 'c': // comment all spaces significant. Will be appended to the gecos naming + case 'C': // attribute with a comma and set by calling chfn -f xxxx -o xxxx + // if comma are present in the string chfn will fails + if (ui->qflag & QF_DEBUG) { + syslog(LOG_NOTICE, "before comment gecos is %s\n ", ui->gecos); + } + err = nds_update_gecos(ui, cur_pt); + if (err) { + return err; + } + if (ui->qflag & QF_DEBUG) { + syslog(LOG_NOTICE, "gecos %s\n ", ui->gecos); + } + break; + case 'o': // other group names + case 'O': // wze can have several entries o:group (but not o:group1,group2...) + rqgroup(ui, ctx, cur_pt, 0); + break; + + case 'z': // ZenFlag per user ABCDEFGHIJKLMNOPQRSTUVWXYZ012345 (32 max) + case 'Z': + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "before decode ZF is %s\n ", cur_pt); + ui->zenFlag |= decodeZenFlag(&cur_pt); + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "after decode ZF is %lx\n ", ui->zenFlag); + break; + } + } + return 0; +} +#endif + +static NWDSCCODE +nds_pp_home_directory(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + const Path_T *pa = (const Path_T *) val; + NWDSCCODE dserr; + struct nw_home_info hi = { NULL, NULL }; + char *v; + + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "start of NW home dir got %s %s \n", pa->volumeName, pa->path); + dserr = nds_home_info(ctx, (char *) pa->volumeName, &hi); + if (dserr) + return dserr; + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "got %s %s ", hi.hs, hi.hrn); + + ui->nwhomeServer = hi.hs; + ui->nwhomeVolume = hi.hrn; + + v = strdup(pa->path); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + ui->nwhomePath = unixifyPathUC(v); + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "end of NW home dir\n"); + return 0; +} + +static NWDSCCODE +nds_pp_smtp_email_address(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + const EMail_Address_T *em = (const EMail_Address_T *) val; + char *v; + + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "start of NW smtp email got %u %s\n", em->type, em->address); + // pick up only the first with type=0 (SMTP) ! + if ((!ui->emailSMTP && em->type == 0) && (!strncmp(em->address, "SMTP:", 5))) { + // skip header SMTP: must be if type is 0 ? + v = strdup(em->address + 5); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + ui->emailSMTP = v; + + } + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "end of NW smtp email GOT %s\n", ui->emailSMTP); + return 0; +} + +static NWDSCCODE +nds_pp_ldap_email_address(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "start of NW ldap email got %s\n", (const char *) val); + + // pick up only the first of a multi-valued attribute ! + if (!ui->emailLDAP) { + char *v = strdup((const char *) val); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + trim(v); // remove the leading space added by other PP utilities + ui->emailLDAP = v; + } + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "end of NW ldap email GOT [%s]\n", ui->emailLDAP); + return 0; +} + +static NWDSCCODE +nds_pp_message_server(NWDSContextHandle ctx, const void *val, void *arg) +{ + struct nw_user_info *ui = (struct nw_user_info *) arg; + + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "start of NW message server got %s\n", (const char *) val); + + if (!ui->messageServer) { + char *v; + const char *dot; + const char *str = val; + size_t ln; + + dot = strchr(str, '.'); + if (dot) { + ln = dot - str; + } else { + ln = strlen(str); + } + v = malloc(ln + 1); + if (!v) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + return ENOMEM; + } + memcpy(v, str, ln); + v[ln] = 0; + ui->messageServer = v; + } + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "end of NW message server GOT [%s]\n", ui->messageServer); + return 0; +} + +/*****************************************************GET ALL USER INFO FROM NDS *************/ + +static int +nds_user_info(NWDSContextHandle ctx, const NWDSChar * objname, struct nw_user_info *ui) +{ + static const struct attrop atlist[] = { + {ATTR_UID, nds_ga_unixuid, SYN_INTEGER}, + {ATTR_PGNAME, nds_ga_unixpgname, SYN_DIST_NAME}, + {ATTR_PGID, nds_ga_unixpgid, SYN_INTEGER}, + {ATTR_GID, nds_ga_unixgid, SYN_INTEGER}, + {ATTR_HOME, nds_ga_unixhome, SYN_CE_STRING}, + {ATTR_SHELL, nds_ga_unixshell, SYN_CE_STRING}, + {ATTR_COM, nds_ga_unixcomment, SYN_CI_STRING}, + {ATTR_GECOS, nds_ga_gecos, SYN_CI_STRING}, + {ATTR_GRP_MBS, nds_ga_group_membership, SYN_DIST_NAME}, + /*PP*/ {ATTR_HOME_NW, nds_pp_home_directory, SYN_PATH}, + /*PP*/ {ATTR_SMTP_EMAIL, nds_pp_smtp_email_address, SYN_EMAIL_ADDRESS}, + /*PP*/ {ATTR_LDAP_EMAIL, nds_pp_ldap_email_address, SYN_CI_STRING}, + /*PP*/ {ATTR_MESSAGE_SERVER, nds_pp_message_server, SYN_DIST_NAME}, + {NULL, NULL, SYN_UNKNOWN} + }; + + static const struct attrop atlist2[] = { +#ifdef USE_POSTAL_ADDRESS + /*PP*/ {ATTR_POSTAL_ADDRESS, nds_pp_postal_address, SYN_PO_ADDRESS}, +#else + /*PP*/ {ATTR_LOCATION, nds_pp_location, SYN_CI_STRING}, +#endif + {NULL, NULL, SYN_UNKNOWN} + }; + + int err; + +// we must do TWO NDS queries since NDS does not return attributes in this order +// studies of /var/log/secure showed that L attribute usually come out before the NDS8 ones ! + err = nds_read_attrs(ctx, objname, ui, atlist); + if (err) + return err; + if (ui->qflag & QF_DEBUG) { +#ifdef USE_POSTAL_ADDRESS + syslog(LOG_NOTICE, "using postal address attribute\n"); +#else + syslog(LOG_NOTICE, "using location attribute\n"); +#endif + } + return nds_read_attrs(ctx, objname, ui, atlist2); +} + +/****************** main NDS reading function ********************************************/ +static int +nw_retrieve_nds_user_info(struct nw_user_info *ui, NWCONN_HANDLE conn, NWObjectID oid) +{ + NWDSContextHandle ctx; + nuint32 c; + NWDSChar username[MAX_DN_BYTES]; + int err; + + err = NWDSCreateContextHandle(&ctx); + if (err) { + syslog(LOG_WARNING, "NWDSCreateContextHandle() failed with %s\n", strnwerror(err)); + err = PAM_SYSTEM_ERR; + goto bailout; + } + c = DCV_XLATE_STRINGS | DCV_TYPELESS_NAMES | DCV_DEREF_ALIASES; + err = NWDSSetContext(ctx, DCK_FLAGS, &c); + if (err) { + syslog(LOG_WARNING, "NWDSSetContext() failed with %s\n", strnwerror(err)); + err = PAM_SYSTEM_ERR; + goto bailoutctx; + } + NWDSAddConnection(ctx, conn); + err = NWDSMapIDToName(ctx, conn, oid, username); + if (err) { + syslog(LOG_WARNING, "NWDSMapIDToName() failed with %s\n", strnwerror(err)); + err = PAM_USER_UNKNOWN; + goto bailoutctx; + } + if (ui->qflag & QF_DEBUG) + syslog(LOG_DEBUG, "User has DN %s\n", username); + err = nds_user_info(ctx, username, ui); + if (err) { + syslog(LOG_NOTICE, "Could not retrieve nds user info: %s\n", strnwerror(err)); + err = PAM_AUTHTOK_ERR; + goto bailoutctx; + } +//PP a good spot to retrieve user's defaultNameCtx and defaultTree + { + char *p = username; + char tn[MAX_TREE_NAME_CHARS + 1]; + + while (*p && (*p != '.')) + p++; //luckily we are in XLATE_STRINGS[TYPELESS_NAMES !!! + if (*p && *(p + 1)) { // skip also the first dot + ui->defaultNameCtx = strdup(p + 1); + if (!ui->defaultNameCtx) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + err = ENOMEM; + } + } + if (!(err = NWCCGetConnInfo(conn, NWCC_INFO_TREE_NAME, sizeof (tn), tn))) { + ui->defaultTree = strdup(tn); + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "NWCCGetConnInfo(NWCC_INFO_TREE_NAME) returned %s\n", tn); + if (!ui->defaultTree) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + err = ENOMEM; + } + } else { + if (ui->qflag & QF_DEBUG) + syslog(LOG_WARNING, "NWCCGetConnInfo(NWCC_INFO_TREE_NAME) returned %x\n", err); + err = 0; // not lethal ! + } + } +//end PP + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "end of retrieve nds user info code: %s\n", strnwerror(err)); +bailoutctx:; + NWDSFreeContext(ctx); +bailout:; + if (!err & (ui->qflag & QF_DEBUG)) + syslog(LOG_NOTICE, "%u %u %s %s %s\n", ui->uid, ui->gid, ui->dir, ui->gecos, ui->shell); + return err; +} + +/******************************************************************************************/ + +static int +nw_retrieve_user_info(struct nw_user_info *ui) +{ + struct ncp_conn *conn; + long err; + NWObjectID oid; + + err = pam_get_data(ui->pamh, "pam.ncpfs.passwd.conn", (const void **) &conn); + if (err) + return err; + + err = nw_get_nwid(conn, &oid, ui->qflag); + if (err) + return err; + + if (ui->qflag & QF_BINDERY) { + return nw_retrieve_bindery_user_info(ui, conn, oid); + } else { + return nw_retrieve_nds_user_info(ui, conn, oid); + } +} + +static int +exechelper(const char *program, const char *argv[], const char *username) +{ // NULL is PAM so root + int i; + int err; + + i = fork(); + if (i < 0) { + err = errno; + syslog(LOG_ERR, "Cannot fork: %s\n", strerror(err)); + return err; + } + if (i) { + int status; + + switch (waitpid(i, &status, 0)) { + case 0: + syslog(LOG_ERR, "waitpid unexpectedly terminated: %s\n", strerror(errno)); + return -1; + case (pid_t) - 1: + syslog(LOG_ERR, "waitpid: Fatal: No child processes\n"); + return -1; + default: + if (!WIFEXITED(status)) { + syslog(LOG_ERR, "%s killed by signal\n", program); + return -1; + } + if (WEXITSTATUS(status)) { + syslog(LOG_ERR, "%s finished with error %d\n", program, WEXITSTATUS(status)); + return -1; + } + } + return 0; + } else { + int fd; + + fd = open("/dev/null", O_RDWR); + if (fd == -1) { + err = errno; + syslog(LOG_ERR, "Cannot open /dev/null: %s\n", strerror(err)); + exit(126); + } + dup2(fd, 0); + dup2(fd, 1); + dup2(fd, 2); + argv[0] = program; + + if (username) { // run child process as username + struct passwd *pwd = getpwnam(username); + //syslog(LOG_ERR, " as user %s ..",username); + if (!pwd) { + syslog(LOG_ERR, "Oops, something wicked happened, user %s does not exist...", username); + exit(111); + } + if (initgroups(username, pwd->pw_gid)) { + syslog(LOG_ERR, "Oops, initgroups failed for user %s: %s\n", username, strerror(errno)); + exit(112); + } + if (setgid(pwd->pw_gid)) { + syslog(LOG_ERR, "Oops, setgid failed for user %s: %s\n", username, strerror(errno)); + exit(113); + } + if (setuid(pwd->pw_uid)) { + syslog(LOG_ERR, "Oops, setuid failed for user %s: %s\n", username, strerror(errno)); + exit(114); + } + } + execv(program, (char *const *) (unsigned long) argv); + err = errno; + syslog(LOG_ERR, "Cannot execute %s: %s\n", program, strerror(err)); + exit(127); + } +} + +static int +groupadd(const char *name, gid_t gid, int verbose) +{ + char gidstr[30]; + const char *argv[10]; + int err; + + sprintf(gidstr, "%u", gid); + + argv[1] = "-g"; + argv[2] = gidstr; + argv[3] = name; + argv[4] = NULL; + +//TODO: it would be nice to have the name of the adding group utility +// in some config file (/etc/pam_ncp.conf) +// so we could give more flexibility to the group creation ( a good shell script) + err = exechelper("/usr/sbin/groupadd", argv, NULL); + if (err) + return err; + if (verbose) + syslog(LOG_NOTICE, "Group %s(%u) created\n", name, gid); + return 0; +} + +static int +do_chfn(const char *uname, const char *gecos, int verbose) +{ + char *gecosbuf; + char *p; + const char *argv[10]; + int err; + int i = 1; + + gecosbuf = strdup(gecos); + if (!gecosbuf) { + syslog(LOG_WARNING, "Not enough memory for gecos buffer\n"); + return ENOMEM; + } + p = strchr(gecosbuf, ','); + if (p) { + *p++ = '\0'; + } else { + (const char *) p = ""; /* Use empty string for deletion */ + } + + argv[i++] = "-f"; + argv[i++] = gecosbuf; + + argv[i++] = "-o"; + argv[i++] = p; + + argv[i++] = uname; + argv[i++] = NULL; + + /******/ + if (verbose) { + int j; + char s[8192]; + char *pos = s; + size_t space = sizeof (s) - 1; + + for (j = 1; j < i; j++) { + size_t ln = strlen(argv[j]); + + if (ln > space) { + ln = space; + } + memcpy(pos, argv[j], ln); + pos += ln; + space -= ln; + if (space) { + *pos++ = ' '; + space--; + } + } + *pos = 0; + syslog(LOG_WARNING, "%s", s); + } +//TODO: it would be nice to have the name of the chfn utility +// in some config file (/etc/pam_ncp.conf) + err = exechelper("/usr/bin/chfn", argv, NULL); + if (verbose) + syslog(LOG_NOTICE, "chfn (%s) for user %s ended with error code %d\n", gecos, uname, err); + + return err; +} + +static int +usermod(const char *uname, gid_t gid, const char *gecos, const char *dir, const char *shell, +/*PP added */ const char *grplist, int verbose) +{ + + char gidstr[30]; + const char *argv[30]; + int err; + int i, j; + int usechfn = 0; + + i = 1; + if (gid != (gid_t) -1) { + sprintf(gidstr, "%u", gid); + argv[i++] = "-g"; + argv[i++] = gidstr; + } + if (gecos) { // donne un erreur 3 !!! + if (!strchr(gecos, ',')) { + argv[i++] = "-c"; + argv[i++] = gecos; + } else { + usechfn = 1; + } + } + if (dir) { + argv[i++] = "-d"; + argv[i++] = dir; + } + if (shell) { + argv[i++] = "-s"; + argv[i++] = shell; + } +/******************** OK with COL 24 usermod !!! ****/ + if (grplist) { + argv[i++] = "-G"; + argv[i++] = grplist; + } + + argv[i++] = uname; + argv[i] = NULL; + // temp debug + if (verbose) { + for (j = 1; j < i; j++) + syslog(LOG_NOTICE, "usermod %u %s", j, argv[j]); + } +//TODO: it would be nice to have the name of the modif user utility +// in some config file (/etc/pam_ncp.conf) +// so we could give more flexibility to the user modification ( a good shell script) + err = exechelper("/usr/sbin/usermod", argv, NULL); + if (err) + return err; + + if (usechfn) { + if (verbose) + syslog(LOG_NOTICE, "User %s has a comma in his gecos %s\n", uname, gecos); + /*err= */ do_chfn(uname, gecos, verbose); + //don't return err, it is not lethal + } + if (verbose) + syslog(LOG_NOTICE, "User %s modified\n", uname); + + return 0; +} + +#define concat2a(one,two) ({ \ + size_t lone = strlen(one); \ + size_t ltwo = strlen(two); \ + char* buf = alloca(lone + ltwo + 1); \ + memcpy(buf, one, lone); \ + memcpy(buf + lone, two, ltwo + 1); \ + buf; }) + +#define concat3a(one,med,two) ({ \ + size_t lone = strlen(one); \ + size_t ltwo = strlen(two); \ + char* buf = alloca(lone + 1+ ltwo + 1); \ + memcpy(buf, one, lone); \ + buf[lone] = med; \ + memcpy(buf + lone + 1, two, ltwo + 1); \ + buf; }) + +static int +useradd(const char *uname, uid_t uid, gid_t gid, const char *gecos, const char *dir, const char *shell, const char *grplist, int process_groups_later, int create_local_home, int verbose) +{ +/* rev PP + -Caldera Open Linux does not like the -G parameter in useradd, but it is OK in usermod ? + - so we call usermod at the end if needed... + -add some defaut if nothing has been retrieved from NDS and we are in SERVER_REQUIRED MODE + Il dir is empty change it to /home/username + if shell is empty change it to /bin/bash + if guid is empty change it to 100 + so only UNIX_UID is REALLY SERVER_REQUIRED ( others get default values) + +*/ + char gidstr[30]; + char uidstr[30]; + const char *argv[30]; + int err; + int i; + int usechfn = 0; + + i = 1; + if (gid == (gid_t) -1) { + gid = 100; + } + sprintf(gidstr, "%u", gid); + argv[i++] = "-g"; + argv[i++] = gidstr; + + //PP + /******************** Not with COL 24 useradd****/ + if (!process_groups_later && grplist) { + argv[i++] = "-G"; + argv[i++] = grplist; + } + //PP + + if (!gecos) { + gecos = uname; + } + // may have a comma in it ( full name,comment...) + if (!strchr(gecos, ',')) { + argv[i++] = "-c"; + argv[i++] = gecos; + } else { + usechfn = 1; + } + + // PP modified for a default value and still testing for no existence + if (!dir) { + dir = concat2a("/home/", uname); + } + { + struct stat statbuf; + argv[i++] = "-d"; + argv[i++] = dir; + if (create_local_home && !lstat(dir, &statbuf)) { // rev 1.24 + syslog(LOG_ERR, "Will not create %s because of home directory %s already exist\n", uname, dir); + return -1; + } + } +/* +Currently if the home is remote and the NFS server is down, the home WILL not be created locally +So console login will not find the home and fall to / directory, and graphical login will fails +*/ + + if (!shell) { + shell = "/bin/bash"; + } + argv[i++] = "-s"; + argv[i++] = shell; + // end PP + sprintf(uidstr, "%u", uid); + argv[i++] = "-u"; + argv[i++] = uidstr; + argv[i++] = create_local_home ? "-m" : "-M"; // rev 1.24 + argv[i++] = uname; + argv[i] = NULL; + if (verbose) { + syslog(LOG_NOTICE, "useradd %s %s %s %s %s %s", argv[1], argv[2], argv[3], argv[4], argv[5], argv[6]); + syslog(LOG_NOTICE, "useradd %s %s %s %s %s %s", argv[7], argv[8], argv[9], argv[10], argv[11], argv[12]); + } +//TODO: it would be nice to have the name of the adding user utility +// in some config file (/etc/pam_ncp.conf) +// so we could give more flexibility to the user autocreation ( a good shell script) + + err = exechelper("/usr/sbin/useradd", argv, NULL); + if (err) + return err; + if (verbose) + syslog(LOG_NOTICE, "User %s(%u) added\n", uname, uid); + + if (usechfn) { + if (verbose) + syslog(LOG_NOTICE, "User %s has a comma in his gecos %s\n", uname, gecos); + /*err= */ do_chfn(uname, gecos, verbose); + // not lethal if it fails + } + // PP: use a call to usermod to process the other groups lists. Needed at least with Caldera OpenLinux + if (process_groups_later && grplist) { + return usermod(uname, (gid_t) -1, NULL, NULL, NULL, grplist, verbose); + } + return 0; +} + +static int +uidcmp(const void *p1, const void *p2) +{ + if (*(const uid_t *) p1 < *(const uid_t *) p2) + return -1; + if (*(const uid_t *) p1 > *(const uid_t *) p2) + return 1; + return 0; +} + +static int +gidcmp(const void *p1, const void *p2) +{ + if (*(const gid_t *) p1 < *(const gid_t *) p2) + return -1; + if (*(const gid_t *) p1 > *(const gid_t *) p2) + return 1; + return 0; +} + +static int +allocategid(const struct pam_ncp_state *state, gid_t *gid) +{ + struct group *grp; + gid_t now; + + now = state->gid.min; + setgrent(); + if (state->gid.flags & QFC_NEXT_UNUSED) { + while ((grp = getgrent()) != NULL) { + if (grp->gr_gid < state->gid.min) + continue; + if (grp->gr_gid >= state->gid.max) + continue; + if (now <= grp->gr_gid) + now = grp->gr_gid + 1; + } + } else { + struct { + gid_t *array; + size_t used; + size_t alloc; + } gids; + gid_t *p; + + gids.array = NULL; + gids.alloc = 0; + gids.used = 0; + while ((grp = getgrent()) != NULL) { + if (grp->gr_gid < state->gid.min) + continue; + if (grp->gr_gid >= state->gid.max) + continue; + if (gids.used >= gids.alloc) { + gid_t *np; + size_t ns; + + if (gids.array) { + ns = gids.alloc * 2; + np = (gid_t *) realloc(gids.array, ns * sizeof (gid_t)); + } else { + ns = 16; + np = (gid_t *) malloc(ns * sizeof (gid_t)); + } + if (!np) { + syslog(LOG_WARNING, "Not enough memory\n"); + if (gids.array) + free(gids.array); + return -1; + } + gids.array = np; + gids.alloc = ns; + } + gids.array[gids.used++] = grp->gr_gid; + } + qsort(gids.array, gids.used, sizeof (*gids.array), gidcmp); + p = gids.array; + while (gids.used-- && (now == *p)) { + now++; + p++; + } + free(gids.array); + } + if (now >= state->gid.max) { + return -1; + } + endgrent(); + *gid = now; + return 0; +} + +static int +allocateuid(const struct pam_ncp_state *state, uid_t *uid) +{ + struct passwd *pwd; + uid_t now; + + now = state->uid.min; + setpwent(); + if (state->uid.flags & QFC_NEXT_UNUSED) { + while ((pwd = getpwent()) != NULL) { + if (pwd->pw_uid < state->uid.min) + continue; + if (pwd->pw_uid >= state->uid.max) + continue; + if (now <= pwd->pw_uid) + now = pwd->pw_uid + 1; + } + } else { + struct { + uid_t *array; + size_t used; + size_t alloc; + } uids; + uid_t *p; + + uids.array = NULL; + uids.alloc = 0; + uids.used = 0; + while ((pwd = getpwent()) != NULL) { + if (pwd->pw_uid < state->uid.min) + continue; + if (pwd->pw_uid >= state->uid.max) + continue; + if (uids.used >= uids.alloc) { + uid_t *np; + size_t ns; + + if (uids.array) { + ns = uids.alloc * 2; + np = (uid_t *) realloc(uids.array, ns * sizeof (uid_t)); + } else { + ns = 16; + np = (uid_t *) malloc(ns * sizeof (uid_t)); + } + if (!np) { + syslog(LOG_WARNING, "Not enough memory\n"); + if (uids.array) + free(uids.array); + return -1; + } + uids.array = np; + uids.alloc = ns; + } + uids.array[uids.used++] = pwd->pw_uid; + } + qsort(uids.array, uids.used, sizeof (*uids.array), uidcmp); + p = uids.array; + while (uids.used-- && (now == *p)) { + now++; + p++; + } + free(uids.array); + } + if (now >= state->uid.max) { + return -1; + } + endpwent(); + *uid = now; + return 0; +} + +/* + -10 : 100% match with server required, but no UNIX:GID or + gid or name already in use + -11 : no more free gids + -12 : group creation failed + */ +static int +nw_update_group_info(struct nw_user_info *ui, struct nw_group_info *gi) +{ + struct group *grp; + +// PP: added endgrent() +// no more return but goto bailout. + int err = PAM_SUCCESS; + + setgrent(); + // check again for grp name, so if an alias has been sent by NDS, + // Location string of a NDS group with N:UnixAlias, we will find it here. + // i.e. everyone -> users or staff -> root + grp = getgrnam(gi->name); + if (!grp) { + while (ui->state.gid.flags & (QFC_PREFFER_SERVER | QFC_REQUIRE_SERVER)) { + if (gi->gid == (gid_t) -1) { + if ((ui->qflag & QF_DEBUG) && (ui->state.gid.flags & QFC_REQUIRE_SERVER)) + syslog(LOG_DEBUG, "Will not create group %s: no UNIX:GID present\n", gi->name); + break; + } + grp = getgrgid(gi->gid); + if (grp) { + if ((ui->qflag & QF_DEBUG) && (ui->state.gid.flags & QFC_REQUIRE_SERVER)) + syslog(LOG_DEBUG, "Will not create group %s: gid %u is already used by %s\n", gi->name, gi->gid, grp->gr_name); + break; + } + if (groupadd(gi->name, gi->gid, ui->qflag & QF_DEBUG)) + break; // trouble + goto bailout; // OK + } + if (ui->state.gid.flags & QFC_REQUIRE_SERVER) { + err = -10; + goto bailout; + //return -10; + } + + if (allocategid(&ui->state, &gi->gid)) { + syslog(LOG_WARNING, "Cannot allocate gid for group %s\n", gi->name); + err = -11; + goto bailout; + //return -11; + } + if (groupadd(gi->name, gi->gid, ui->qflag & QF_DEBUG)) { + syslog(LOG_WARNING, "Could not create group %s\n", gi->name); + err = -12; + goto bailout; + //return -12; + } + } else { + gi->gid = grp->gr_gid; + } +bailout:; + endgrent(); //PP + return err; +} + +static int +nw_update_user_info(struct nw_user_info *ui) +{ + + struct passwd *pwd; + char *glist; + const char *gecos; +// PP: added endpwent() and freeing of malloced glist +// no more return but goto bailout. + int err = PAM_SUCCESS; + + if (!ui->name) { + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "NW_UPDATE_USER:failed user has no name %u\n", ui->uid); + return -1; + } + + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "NW_UPDATE_USER: %u %u %s %s %s\n", ui->uid, ui->gid, ui->dir, ui->gecos, ui->shell); + + if (build_groups_list(ui, &glist)) { + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "NW_UPDATE_USER:failed to build group list for %s\n", ui->name); + return -1; + } + + setpwent(); + pwd = getpwnam(ui->name); + + //PP + gecos = ui->gecos ? : ""; + // end PP + if (!pwd) { + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "NW_UPDATE_USER:creating %u %u %s %s %s\n", ui->uid, ui->gid, ui->dir, ui->gecos, ui->shell); + while (ui->state.uid.flags & (QFC_PREFFER_SERVER | QFC_REQUIRE_SERVER)) { + if (ui->uid == (uid_t) -1) { + if ((ui->qflag & QF_DEBUG) && (ui->state.uid.flags & QFC_REQUIRE_SERVER)) + syslog(LOG_DEBUG, "Will not create user %s: no UNIX:UID present\n", ui->name); + break; + } + pwd = getpwuid(ui->uid); + if (pwd) { + if ((ui->qflag & QF_DEBUG) && (ui->state.uid.flags & QFC_REQUIRE_SERVER)) + syslog(LOG_DEBUG, "Will not create user %s: uid %u is already used by %s\n", ui->name, ui->uid, pwd->pw_name); + break; + } + + err = useradd(ui->name, ui->uid, ui->gid, gecos, ui->dir, ui->shell, glist, NO_PROCESS_GROUPS, ui->qflag & QF_CREATEHOME, ui->qflag & QF_DEBUG); + if (err) + break; + ui->isNewUser = 1; // rev 1.19 + err = PAM_SUCCESS; + goto bailout; + } + if (ui->state.uid.flags & QFC_REQUIRE_SERVER) { + syslog(LOG_WARNING, "Cannot create uid %u required by server for user %s\n", ui->uid, ui->name); + err = -10; + goto bailout; + //return -10; + } + if (allocateuid(&ui->state, &ui->uid)) { + syslog(LOG_WARNING, "Cannot allocate uid for user %s\n", ui->name); + err = -11; + goto bailout; + //return -11; + } + + if (useradd(ui->name, ui->uid, ui->gid, gecos, ui->dir, ui->shell, glist, NO_PROCESS_GROUPS, ui->qflag & QF_CREATEHOME, ui->qflag & QF_DEBUG)) { + syslog(LOG_WARNING, "Cannot create user %s\n", ui->name); + err = -12; + goto bailout; + //return -12; + } + } else { + + int diff; + ui->uid = pwd->pw_uid; + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "NW_UPDATE_USER:updating %u %u %s %s %s\n", ui->uid, ui->gid, ui->dir, ui->gecos, ui->shell); + + diff = 0; + if ((ui->gid != (gid_t) -1) && ui->gid != pwd->pw_gid) + diff |= QFMU_GID; + if (*gecos && (!pwd->pw_gecos || strcmp(gecos, pwd->pw_gecos))) + diff |= QFMU_GECOS; + if (ui->dir && (!pwd->pw_dir || strcmp(ui->dir, pwd->pw_dir))) + diff |= QFMU_DIR; + if (ui->shell && (!pwd->pw_shell || strcmp(ui->shell, pwd->pw_shell))) + diff |= QFMU_SHELL; + diff &= ui->state.uid.modflags; + // FIXME: glist is not processed if it is the only change ! 26/01/2001 + if (diff) { + err = usermod(ui->name, (diff & QFMU_GID) ? ui->gid : (gid_t) -1, (diff & QFMU_GECOS) ? gecos : NULL, //PP + (diff & QFMU_DIR) ? ui->dir : NULL, (diff & QFMU_SHELL) ? ui->shell : NULL, glist, // process groups //PP + ui->qflag & QF_DEBUG); + } + } + +bailout:; + endpwent(); + if (glist) + free(glist); + if (ui->qflag & QF_DEBUG) + syslog(LOG_DEBUG, "return value of update_user_info %d for %s\n", err, ui->name); + + return err; +} + +static int +getcflag(int *val, const char **str) +{ + const char *p = *str; + int valm; + int c; + + *val = 0; + valm = 1; + if (!*p) + return 1; + while ((c = *p++) != 0) { + if (c == ',') + break; + switch (c) { + case 'f': + case 'N': + *val &= ~QFC_NEXT_UNUSED; + break; + case 'n': + case 'F': + *val |= QFC_NEXT_UNUSED; + break; + case 'P': + *val &= ~QFC_PREFFER_SERVER; + break; + case 'p': + *val |= QFC_PREFFER_SERVER; + break; + case 'R': + *val &= ~QFC_REQUIRE_SERVER; + break; + case 'r': + *val |= QFC_REQUIRE_SERVER; + break; + default: + return -1; + } + valm = 0; + } + if (!c) + p--; + *str = p; + return valm; +} + +static int +getmodflag(int *val, const char **str) +{ + const char *p = *str; + int valm; + int c; + + *val = 0; + valm = 1; + if (!*p) + return 1; + while ((c = *p++) != 0) { + if (c == ',') + break; + switch (c) { + case 'G': + *val &= ~QFMU_GID; + break; + case 'g': + *val |= QFMU_GID; + break; + case 'C': + *val &= ~QFMU_GECOS; + break; + case 'c': + *val |= QFMU_GECOS; + break; + case 'D': + *val &= ~QFMU_DIR; + break; + case 'd': + *val |= QFMU_DIR; + break; + case 'S': + *val &= ~QFMU_SHELL; + break; + case 's': + *val |= QFMU_SHELL; + break; + + default: + return -1; + } + valm = 0; + } + if (!c) + p--; + *str = p; + return valm; +} + +static int +parseuid(struct nw_user_info *ui, const char **str) +{ + int val; + + switch (getnumber(&val, str)) { + case 0: + ui->state.uid.min = val; + break; + case 1: + break; + default: + syslog(LOG_ERR, "Unknown min uid value %s\n", *str); + return -1; + } + switch (getnumber(&val, str)) { + case 0: + ui->state.uid.max = val; + break; + case 1: + break; + default: + syslog(LOG_ERR, "Unknown max uid value %s\n", *str); + return -1; + } + switch (getcflag(&val, str)) { + case 0: + ui->state.uid.flags = val; + ui->qflag |= QF_AUTOCREATE; + break; + case 1: + break; + default: + syslog(LOG_ERR, "Unknown uid flags value %s\n", *str); + return -1; + } + switch (getmodflag(&val, str)) { + case 0: + ui->state.uid.modflags = val; + ui->qflag |= QF_AUTOMODIFY; + break; + case 1: + break; + default: + syslog(LOG_ERR, "Unknown uid modflags value %s\n", *str); + return -1; + } + return 0; +} + +static int +parsegid(struct nw_user_info *ui, const char **str) +{ + int val; + + switch (getnumber(&val, str)) { + case 0: + ui->state.gid.min = val; + break; + case 1: + break; + default: + syslog(LOG_ERR, "Unknown min gid value %s\n", *str); + return -1; + } + switch (getnumber(&val, str)) { + case 0: + ui->state.gid.max = val; + break; + case 1: + break; + default: + syslog(LOG_ERR, "Unknown max gid value %s\n", *str); + return -1; + } + switch (getcflag(&val, str)) { + case 0: + ui->state.gid.flags = val; + break; + case 1: + break; + default: + syslog(LOG_ERR, "Unknown gid flags value %s\n", *str); + return -1; + } + return 0; +} + +// ajout PP 2000/12/19 session_on et off +// will mount Netware home directory in ~/nwhome + +static int +parsemntpnt(struct nw_user_info *ui, const char **str) +{ +// found another value that default nwhome in the command line (-mPATH (no space!) +// and cannot have space in it ;-) +// v 1.14: if the argument of -m is empty user's Netware home will be mounted as Unix home + ui->nwhomeMntPnt = strdup(*str); + if (ui->qflag & QF_DEBUG) + syslog(LOG_DEBUG, "new default mounting point is \"%s\"", ui->nwhomeMntPnt); + return 0; +} + +// found a default zenFlag value on this machine +// apply it to user instead of the ZF_DEFAULTS +static int +parsezenflag_on(struct nw_user_info *ui, const char **str) +{ + ui->zenFlag = decodeZenFlag(str); + return 0; +} + +// found a zenFlags not allowed on this machine +// apply it to user +static int +parsezenflag_off(struct nw_user_info *ui, const char **str) +{ + if (**str) + ui->zenFlagOFF = decodeZenFlag(str); + else + ui->zenFlagOFF = ~0UL; // all are off + + return 0; +} + +static void +mergeZenFlags(struct nw_user_info *ui) +{ + ui->zenFlag &= ~ui->zenFlagOFF; + // make sure .nwinfos file is created if any zenscript is required + if (ui->zenFlag & (ZF_OPENING_SCRIPTS | ZF_CLOSING_SCRIPTS)) + ui->zenFlag |= ZF_CREATE_NWINFOS; +} + +// rev 1.19 we now run the following command +// su -l USER -c "ncpmount ..... " +static int +mount_nwhome(const char *unixname, const char *uname, // nw FQDN name + const char *pwd, const char *server, const char *volume, const char *path, const char *mntpoint, int uid, int zenFlag, int useIP, int verbose) +{ + + const char *argv[30]; + int err; + int i = 1, j = 0; + char uidstr[30]; + +/* -B flag not yet supported by ncpmount */ +#ifdef SET_BCAST + int bMode = 0; + char bModeStr[128]; + + switch (zenFlag & (ZF_BROADCAST_ALL | ZF_BROADCAST_CONSOLE)) { + case ZF_BROADCAST_ALL: + bMode = NWCC_BCAST_PERMIT_ALL; + break; + case ZF_BROADCAST_CONSOLE: + bMode = NWCC_BCAST_PERMIT_SYSTEM; + break; + default: + bMode = NWCC_BCAST_PERMIT_NONE; + } + sprintf(bModeStr, "%u", bMode); + argv[i++] = "-B"; + argv[i++] = bModeStr; +#endif + + if (uname) { + argv[i++] = "-U"; + argv[i++] = uname; + } + if (pwd) { + argv[i++] = "-P"; + argv[i++] = pwd; + } + if (server) { + argv[i++] = "-S"; + argv[i++] = server; + // added for JFB + if (useIP) { + argv[i++] = "-A"; + argv[i++] = server; + } + } + if (volume) { +#ifdef NCP_IOC_GETROOT + if (path) { // already in Unix & uppercase + char *fullPathToHome; + + fullPathToHome = concat3a(volume, ':', path); + argv[i++] = "-V"; + argv[i++] = fullPathToHome; + } else +#endif + { + argv[i++] = "-V"; + argv[i++] = volume; + } + } + argv[i++] = "-o"; + argv[i++] = "symlinks,exec"; + + sprintf(uidstr, "%u", uid); // current user is owner + + argv[i++] = "-u"; + argv[i++] = uidstr; + + argv[i++] = "-c"; + argv[i++] = uidstr; + + argv[i++] = "-d"; + argv[i++] = "0700"; // current user is owner and only him + + if (mntpoint) // better be ;-) + argv[i++] = mntpoint; + + argv[i] = NULL; + + if (verbose) { + char s[4096]; /* buf... buf... buffer overflow... */ + + // do not log a clear password in /var/log/secure ! + sprintf(s, "running as %s %s", unixname, NCPMOUNT_PATH); + for (j = 1; j < i; j++) { + if (strlen(s) + strlen(argv[j]) >= sizeof (s) - 2) + break; /* fix the possible buffer overflow */ + if (strcmp(argv[j], "-P")) { + strcat(s, argv[j]); + strcat(s, " "); + } else { + j++; + } + } + strcat(s, "\""); + syslog(LOG_WARNING, "%s", s); + } + + err = exechelper(NCPMOUNT_PATH, argv, unixname); + if (verbose) { + if (err) + syslog(LOG_DEBUG, "user %s had trouble mounting %s/%s on %s", uname, server, volume, mntpoint); + else + syslog(LOG_NOTICE, "User %s has mounted %s/%s as %s\n", uname, server, volume, mntpoint); + } + + return err; +} + +// called by pam_end_session +static int +umount_nwhome(const char *unixname, const char *mntpoint, int verbose) +{ + const char *argv[5]; + int err; + int i; + + i = 1; + if (mntpoint) { // better be ;-) + argv[i++] = mntpoint; + } + argv[i] = NULL; + err = exechelper(NCPUMOUNT_PATH, argv, unixname); // umount as user + if (verbose) { + if (err) + syslog(LOG_DEBUG, "user %s had trouble unmounting %s", unixname, mntpoint); + else + syslog(LOG_NOTICE, "User %s has unmounted %s\n", unixname, mntpoint); + } + + return err; +} + +static int +nw_automount_home(const char *uname, struct nw_user_info *ui, const struct passwd *pwd, const char *pass) +{ + long err; + struct stat stt; + char *mountpnt; + const char *fqdn; + int perm_err; + + if (ui->qflag & QF_DEBUG) + syslog(LOG_DEBUG, "start of nw_auto_mount_home \n"); + + // few sanity checks !!! + if (!ui->nwhomeServer || !ui->nwhomeVolume) + return -1; + // no value red from the command line, use default ~/nwhome + if (!ui->nwhomeMntPnt) + ui->nwhomeMntPnt = strdup(DEF_MNT_PNT); + + if (pwd == NULL) { + syslog(LOG_DEBUG, "/etc/passwd/%s not found !\n", uname); + return PAM_USER_UNKNOWN; + } + + if (ui->qflag & QF_MOUNTLOCALLY) { // rev 1.24 +# define TOP_OF_ALL_MOUNTS "/mnt/ncp" + if (stat(TOP_OF_ALL_MOUNTS, &stt)) + if (mkdir(TOP_OF_ALL_MOUNTS, 0711)) { + syslog(LOG_DEBUG, "Unable to create common mounting point %s \n", TOP_OF_ALL_MOUNTS); + return PAM_USER_UNKNOWN; + } + mountpnt = concat3a(TOP_OF_ALL_MOUNTS, '/', pwd->pw_name); + if (stat(mountpnt, &stt)) { + perm_err = mkdir(mountpnt, 0700) || chown(mountpnt, pwd->pw_uid, pwd->pw_gid); + if (perm_err) { + syslog(LOG_DEBUG, "Unable to create local mounting point %s \n", mountpnt); + return PAM_USER_UNKNOWN; + } + } + mountpnt = concat3a(mountpnt, '/', ui->nwhomeMntPnt); + + } else { + if (stat(pwd->pw_dir, &stt) != 0) { + syslog(LOG_DEBUG, "Unix home %s not found !\n", pwd->pw_dir); + return PAM_USER_UNKNOWN; + } + mountpnt = concat3a(pwd->pw_dir, '/', ui->nwhomeMntPnt); + } + if (stat(mountpnt, &stt) != 0) { + if (ui->qflag & QF_DEBUG) + syslog(LOG_DEBUG, "Netware home mounting point %s not found. Will create it \n", mountpnt); + perm_err = mkdir(mountpnt, 0700) || chown(mountpnt, pwd->pw_uid, pwd->pw_gid); + if (perm_err) { + syslog(LOG_DEBUG, "error creating Netware home mounting point %s :%d (%s)\n", mountpnt, perm_err, strerror(errno)); + return PAM_USER_UNKNOWN; + } + } +//rev 1.24 :remember full path to Netware home instead of simply 'nwhome' +// will be written in $HOME/.nwinfos file and red again at PAM end session + free(ui->nwhomeMntPnt); + ui->nwhomeMntPnt = strdup(mountpnt); + + /* v 1.13 if we allow contextless login, we must pass to ncpmount a FQDN and not a CN ! */ + + if (ui->name && ui->defaultNameCtx) + fqdn = concat3a(ui->name, '.', ui->defaultNameCtx); + else + fqdn = uname; + + err = mount_nwhome(uname, // unix name for su + fqdn, // NW name for ncpmount + pass, ui->nwhomeServer, ui->nwhomeVolume, ui->nwhomePath, mountpnt, pwd->pw_uid, ui->zenFlag, ui->qflag & QF_USE_NETWARE_IP, ui->qflag & QF_DEBUG); + if (!err) + err = PAM_SUCCESS; + + return err; +} + +/* create the 600 .nwclient file in user's home + this file is used by others ncp utilities + it contains the line SERVER/USER password or SERVER/USER + depending of ZF_PASSWD_IN_NWCLIENT */ +static int +nw_create_nwclient(const char *uname, const struct nw_user_info *ui, const struct passwd *pwd, const char *pass) +{ + char *nwclient; + const char *server; + FILE *f; +#ifdef IMPERSONNATE + uid_t currentUID = getuid(); +#endif + int perm_err; + + if (pwd == NULL) { + syslog(LOG_DEBUG, "/etc/passwd/%s not found !\n", uname); + return PAM_USER_UNKNOWN; + } +// I have a problem here. They may be different . If the Netware home is automounted +// the connection to the homeServer (not to the messageServer) will be marked as permanent. + server = (ui->messageServer ? ui->messageServer : ui->nwhomeServer); + if (!server) + return PAM_SUCCESS; + + nwclient = concat3a(pwd->pw_dir, '/', NWCLIENT_FILE); + +#ifdef IMPERSONNATE + // v 1.24 NFS mounted homes are mounted with no_root_squash option , so we must change UID to current user + if (seteuid(pwd->pw_uid)) { + syslog(LOG_DEBUG, "Cannot impersonnate to %s: %s\n", pwd->pw_name, strerror(errno)); + return -1; + } +#endif + if (ui->zenFlag & ZF_OVERWRITE_NWCLIENT) + f = fopen(nwclient, "w"); // erase it every time + else + f = fopen(nwclient, "a"); // I should append ? + + if (f) { + // must have a CR/LF + if (ui->zenFlag & ZF_PASSWD_IN_NWCLIENT) + fprintf(f, "%s/%s %s\n", server, uname, pass); + else + fprintf(f, "%s/%s \n", server, uname); + + /* rev 1.15 */ + + if (ui->defaultTree) { + fprintf(f, "\n[Requester]\n"); + fprintf(f, "Default Tree Name=%s\n", ui->defaultTree); + if (ui->defaultNameCtx) + fprintf(f, "Default Name Context=%s\n", ui->defaultNameCtx); + } + + fclose(f); + // must be 600 and owner by current user, else ncpfs apps disregard it + //perm_err=chmod(nwclient,0600) || chown(nwclient,pwd->pw_uid,pwd->pw_gid); + perm_err = chmod(nwclient, 0600); +#ifdef IMPERSONNATE + seteuid(currentUID); +#endif + if (perm_err) + syslog(LOG_DEBUG, "problem %d (%s)changing permissions of %s (%d %d)\n", perm_err, strerror(errno), nwclient, pwd->pw_uid, pwd->pw_gid); + else { + if (ui->qflag & QF_DEBUG) + syslog(LOG_DEBUG, "DONE writing to %s\n", nwclient); + return PAM_SUCCESS; // OK OK + } + } else { +#ifdef IMPERSONNATE + seteuid(currentUID); +#endif + syslog(LOG_DEBUG, "problem writing to %s\n", nwclient); + } + return -1; // trouble somewhere (should not be lethal) +} + +static int +nw_process_forward_file(const char *uname, const struct nw_user_info *ui, const struct passwd *pwd) +{ +// what we do here it to setup a forward to any email address found in NDS +// we do it during the authentication part so if the Netware home directory is mounted +// as /home/user ( -m with no argument) the .forward file is on the local machine if user is not currently logged in ... +//We do it again in the pam_session part ( if the argument of -m is empty) so if user IS logged in, +// the local /home/user is "masqued off" and system will still find this file in the mounted Netware home ... + FILE *f; + char *p; + char *forward; +#ifdef IMPERSONNATE + uid_t currentUID = getuid(); +#endif + int perm_err; + + if (ui->emailLDAP) { + p = ui->emailLDAP; // priority to the "new format" + } else if (ui->emailSMTP) { + p = ui->emailSMTP; + } else { + return 0; // too bad + } + + forward = concat2a(pwd->pw_dir, "/.forward"); + +#ifdef IMPERSONNATE + // v 1.25 NFS mounted homes are mounted with no_root_squash option , so we must change UID to current user + if (seteuid(pwd->pw_uid)) { + syslog(LOG_DEBUG, "Cannot inpersonnate to %s: %s\n", pwd->pw_name, strerror(errno)); + return -1; + } +#endif + f = fopen(forward, "w"); // erase it every time + if (f) { + // must have a CR/LF ?? + fprintf(f, "%s\n", p); + fclose(f); + // makes no harm to restrict reading to user ? + //perm_err= chmod(forward,0600) || chown(forward,pwd->pw_uid,pwd->pw_gid); + perm_err = chmod(forward, 0600); +#ifdef IMPERSONNATE + seteuid(currentUID); +#endif + if (perm_err) + syslog(LOG_DEBUG, "problem %d (%s)changing permissions of %s\n", perm_err, strerror(errno), forward); + } else { +#ifdef IMPERSONNATE + seteuid(currentUID); +#endif + syslog(LOG_DEBUG, "Cannot open %s: %s\n", forward, strerror(errno)); + } + return 0; +} + +/******************************* check for allowed remote access by zen ***/ + +#if 1 +static void +report(int err, const char *what, const char *info) +{ + + if (err != PAM_SUCCESS) { + syslog(LOG_NOTICE, "error reading pam item %s \n", what); + } else { + if (!info) + syslog(LOG_NOTICE, "pam item %s is missing \n", what); + else if (*info == '\0') + syslog(LOG_NOTICE, "pam item %s is empty \n", what); + else + syslog(LOG_NOTICE, "pam item %s value is %s\n", what, info); + } +} + +static void +test_pam_items(const char *me, pam_handle_t * pamh) +{ + const char *info; + int err; + syslog(LOG_NOTICE, "%s testing for PAM items \n", me); + err = pam_get_item(pamh, PAM_RUSER, (const void **) &info); + report(err, "PAM_RUSER", info); + err = pam_get_item(pamh, PAM_SERVICE, (const void **) &info); + report(err, "PAM_SERVICE", info); + err = pam_get_item(pamh, PAM_RHOST, (const void **) &info); + report(err, "PAM_RHOST", info); + err = pam_get_item(pamh, PAM_TTY, (const void **) &info); + report(err, "PAM_TTY", info); +} +#endif + +struct pam_auth_element { + const char *service; + const char *rhost; + const char *tty; + const char *ruser; + int zenFlag; + int result; + int cutZen; // turn off incompatible flags +}; + +// this table was built on Caldera openLinux 2.4 and Redhat 7.1 +// using the call to test_pam_items() to determine the correct values received by PAM +// for each service... +// you may have to adapt it to your distribution +// use the very same trick to add other remote access +// STRANGE: with samba pam_rhost is missing ( but pam_tty) also +// fixed with samba >=2.07 pam_rhost=hostname pam_tty=samba +// FIXME: with ftp : my ftpd does not call pam session, so mounted nwhome stays mounted +// I am sure I have the line in /etc/pam.d/ftp "session required pam_ncp_auth.so -d" +// SAME with samba +// so my current solution is to turn off automounting !!! +// ssh RHOST=IP TTY=ssh SERVICE=sshd RUSER=missing +// X access RHOST=missing TTY=hostname only SERVICE=kde is tested, others pass through ? +// TESTME: rlogin, rsh (I never used these utilities ;-)) +// TODO LATER: Web authorization + +static struct pam_auth_element pam_auth_table[] = { + { "login", "*", "*", NULL, ZF_ALLOW_TELNET_ACCESS, PAM_SUCCESS, 0}, + { "ftp", "*", NULL, NULL, ZF_ALLOW_FTP_ACCESS, PAM_SUCCESS, ZF_AUTOMOUNT_NWHOME}, + { "samba", "*", "samba", NULL, ZF_ALLOW_SAMBA_ACCESS, PAM_SUCCESS, ZF_AUTOMOUNT_NWHOME}, //samba >2.07 + { "samba", NULL, NULL, NULL, ZF_ALLOW_SAMBA_ACCESS, PAM_SUCCESS, ZF_AUTOMOUNT_NWHOME}, + { "kde", NULL, "*", NULL, ZF_ALLOW_X_ACCESS, PAM_SUCCESS, 0}, // RedHat 7.1 send NULL RHOST + { "kde", "", "*", NULL, ZF_ALLOW_X_ACCESS, PAM_SUCCESS, 0}, // RedHat 7.2 send empty RHOST + { "rlogin", "*", "*", "*", ZF_ALLOW_RLOGIN_ACCESS, PAM_SUCCESS, 0}, + { "rsh", "*", "*", "*", ZF_ALLOW_RSH_ACCESS, PAM_SUCCESS, 0}, + { "sshd", "*", "ssh", NULL, ZF_ALLOW_TELNET_ACCESS, PAM_SUCCESS, 0}, + { "su", NULL, NULL, NULL, ZF_ALLOW_TELNET_ACCESS, PAM_SUCCESS, 0}, + { NULL, NULL, NULL, NULL, 0, PAM_AUTH_ERR, 0} +}; + +static int +process_zenflag_remote(pam_handle_t * pamh, const char *user, struct nw_user_info *ui) +{ + int err; + char *service; + char *rhost; + char *ruser; + char *tty; + +// zenflags restricting remote access are LETHAL +//reactivate to test values of ruser, tty, rhost and service for a new service +// see output in /var/log/secure +#if 0 + test_pam_items(user, pamh); +#endif + err = pam_get_item(pamh, PAM_TTY, (const void **) &tty); + if (err != PAM_SUCCESS) + return PAM_SYSTEM_ERR; +// local access + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "testing remote acces PAM_TTY is %s", tty); + + // PP not really sure this is good enough + // JFB added tty="vc/" for Mandrake 8.2 + if (tty && (!memcmp(tty, "tty", 3) || !memcmp(tty, ":0", 2) || !memcmp(tty, "vc/", 2))) { + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "local acces OK to %s", tty); + return PAM_SUCCESS; + } + + err = pam_get_item(pamh, PAM_RHOST, (const void **) &rhost); + if (err != PAM_SUCCESS) { + syslog(LOG_WARNING, "error getting PAM_RHOST"); + return PAM_SYSTEM_ERR; + } + + err = pam_get_item(pamh, PAM_RUSER, (const void **) &ruser); + if (err != PAM_SUCCESS) { + syslog(LOG_WARNING, "error getting PAM_RUSER"); + return PAM_SYSTEM_ERR; + } + + err = pam_get_item(pamh, PAM_SERVICE, (const void **) &service); + if (err != PAM_SUCCESS) { + syslog(LOG_WARNING, "error getting PAM_SERVICE"); + return PAM_SYSTEM_ERR; + } + + { + struct pam_auth_element *z; + + err = PAM_AUTH_ERR; + + for (z = pam_auth_table; z->service; z++) { + if (!strcmp(z->service, service)) + if ((rhost && z->rhost) || (!rhost && !z->rhost)) + if ((tty && z->tty) || (!tty && !z->tty)) + if ((ruser && z->ruser) || (!ruser && !z->ruser)) { + if (!(z->zenFlag & ui->zenFlag)) { + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "remote acces for service %s rejected by Zen for %s", service, ui->name); + return PAM_AUTH_ERR; + + } else { + // turn OFF incompatible FLAGS ( automounting ?) + ui->zenFlag &= ~z->cutZen; + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "remote acces for service %s granted by Zen for %s", service, ui->name); + err = PAM_SUCCESS; + break; + } + } +#if 0 + else + syslog(LOG_NOTICE, "Mismatching ruser found: %s expecting:%s", ruser, z->ruser); + else + syslog(LOG_NOTICE, "Mismatching tty found: %s expecting:%s", tty, z->tty); + else + syslog(LOG_NOTICE, "Mismatching rhost found: %s expecting:%s", rhost, z->rhost); +#endif + } + + } +#if 0 + syslog(LOG_NOTICE, "final return on remote check %d", err); +#endif + return err; //PAM_SUCCESS; +} + +/***************************************************************************************************/ + +// must be done at this stage since they requires the user's current passwd +static int +process_zenflag_auth(pam_handle_t * pamh, const char *user, struct nw_user_info *ui, const struct passwd *pwd, const char *userpass) +{ + + int err; // ignore errors for now + + /* must be done BEFORE mounting Netware home since local /home/user + can become unavailable if the Netware home directory is mounted as /home/user + using the -m option with NO ARGUMENT */ + if (ui->zenFlag & ZF_FORWARD_MAIL) + err = nw_process_forward_file(user, ui, pwd); + if (ui->zenFlag & ZF_AUTOMOUNT_NWHOME) { + err = nw_automount_home(user, ui, pwd, userpass); + /* do it AGAIN after mounting Netware home, so the .forward file is still available + when user is logged in */ + if (!err && ui->zenFlag & ZF_FORWARD_MAIL) + if (ui->nwhomeMntPnt && ui->nwhomeMntPnt[0] == 0) + err = nw_process_forward_file(user, ui, pwd); + } + if (ui->zenFlag & (ZF_CREATE_NWCLIENT | ZF_OVERWRITE_NWCLIENT)) + nw_create_nwclient(user, ui, pwd, userpass); // ignore errors for now + return PAM_SUCCESS; +} + +/* The code - what there is of it :) */ + +PAM_EXTERN int +pam_sm_authenticate(pam_handle_t * pamh, int flags, int argc, const char **argv) +{ + int retval; + const char *name; + char *p; + int c; + struct nw_user_info inf; + struct passwd *pwd_entry; + + openlog("pam_ncp_auth", LOG_PID, LOG_AUTHPRIV); + + init_nw_user_info(&inf); + inf.pamh = pamh; + inf.qflag = QF_VERBOSE | QF_CREATEHOME; + + inf.state.uid.min = 1000; + inf.state.uid.max = 60000; + inf.state.uid.flags = 0; + inf.state.uid.modflags = 0; + inf.state.gid.min = 1000; + inf.state.gid.max = 60000; + inf.state.gid.flags = QFC_NEXT_UNUSED | QFC_PREFFER_SERVER; + + /* Get options */ + for (c = 0; c < argc; c++) { + const char *chrp = argv[c]; + + if (*chrp++ == '-') { + int chr; + + while ((chr = *chrp++) != 0) { + switch (chr) { + case 'v': + inf.qflag |= QF_VERBOSE; + break; /* verbose */ + case 'q': + inf.qflag &= ~QF_VERBOSE; + break; /* quiet */ + case 'd': + inf.qflag |= QF_DEBUG; + break; /* debug */ + case 's': + inf.qflag |= QF_NOSU; + break; /* no supervisor */ + case 'S': + inf.qflag |= QF_NOSUEQ; + break; /* no supervisor equivalent */ + case 'a': + inf.qflag |= QF_AUTOCREATE; + break; /* create account automagically */ + case 'b': + inf.qflag |= QF_BINDERY; + break; /* use bindery access */ + case 'u': + parseuid(&inf, &chrp); + break; + case 'g': + parsegid(&inf, &chrp); + break; + case 'm': + parsemntpnt(&inf, &chrp); + while ((chr = *chrp++) != 0) ; // bug corrected v 1.14 + break; //PP + case 'z': + parsezenflag_on(&inf, &chrp); + break; //PP + case 'Z': + parsezenflag_off(&inf, &chrp); + break; //PP + case 'n': + inf.qflag &= ~QF_CREATEHOME; + break; // PP v 1.24 (DO NOT create home for new users!) + case 'l': + inf.qflag |= QF_MOUNTLOCALLY; + break; // PP v 1.24 (homes are NFS mounted !) + case 'A': + inf.qflag |= QF_USE_NETWARE_IP; // PP v 1.24 + default:; /* just silently ignore unknown option... */ + } + } + } + } + + //if (inf.qflag &QF_DEBUG) + // test_pam_items ("authenticate",pamh); + /* Get username */ + if ((retval = pam_get_user(pamh, &name, "login: ")) != PAM_SUCCESS) + goto quit; + + /* Get password */ + pam_get_item(pamh, PAM_AUTHTOK, (void *) &p); + + if (!p) { + retval = _set_auth_tok(pamh, flags); + if (retval != PAM_SUCCESS) + goto quit; + } + + pam_get_item(pamh, PAM_AUTHTOK, (void *) &p); + + /* v 1.22 check the service is not a screensaver */ + { + const char *service; + if ((retval = pam_get_item(pamh, PAM_SERVICE, (const void **) &service)) != PAM_SUCCESS) + goto quit; + inf.isScreenSaverRelogin = strstr(service, "saver") != NULL; + // report (retval, "PAM_SERVICE",service); + if (inf.isScreenSaverRelogin && inf.qflag & QF_DEBUG) + syslog(LOG_NOTICE, "relogin of %s from the screen saver %s ", name, service); + + } + /* Find the server name in the configuration. */ + + for (c = 0; c < argc; c++) { + if (!strncmp("server=", argv[c], 7)) { + const char *server; + const char *group; + char sbuf[256]; + + server = argv[c] + 7; + group = strchr(server, '/'); + if (group) { + if ((size_t) (group - server) < sizeof (sbuf) - 1) { + memcpy(sbuf, server, group - server); + sbuf[group - server] = 0; + server = sbuf; + group = group + 1; + } else { + syslog(LOG_ALERT, "Error in configuration file: server name too long!\n"); + continue; + } + } + retval = nw_attempt_auth_server(pamh, server, name, p, inf.qflag, group); + if (retval == PAM_SUCCESS) + goto success; + + } + if (!strncmp("tree=", argv[c], 5)) { + const char *tree; + const char *contexts; + const char *group; + char tbuf[512]; + + tree = argv[c] + 5; + if (strlen(tree) >= sizeof (tbuf)) { + syslog(LOG_ALERT, "Error in configuration file: tree argument too long!\n"); + continue; + } + strcpy(tbuf, tree); + tree = tbuf; + group = strchr(tree, '/'); + if (group) { + tbuf[group - tree] = 0; + group++; + } + contexts = strchr(tree, ':'); + if (contexts) { + tbuf[contexts - tree] = 0; + contexts++; + } + if (inf.qflag & QF_DEBUG) + syslog(LOG_NOTICE, "using tree %s ctxs %s group %s", tree, contexts, group); + + retval = nw_attempt_auth_tree(pamh, tree, name, contexts, p, inf.qflag, group, NWCC_NAME_FORMAT_NDS_TREE); + if (retval == PAM_SUCCESS) + goto success; + + } + if (!strncmp("ndsserver=", argv[c], 10)) { + const char *server; + const char *contexts; + const char *group; + char tbuf[512]; + + server = argv[c] + 10; + if (strlen(server) >= sizeof (tbuf)) { + syslog(LOG_ALERT, "Error in configuration file: ndsserver argument too long!\n"); + continue; + } + strcpy(tbuf, server); + server = tbuf; + group = strchr(server, '/'); + if (group) { + tbuf[group - server] = 0; + group++; + } + contexts = strchr(server, ':'); + if (contexts) { + tbuf[contexts - server] = 0; + contexts++; + } + if (inf.qflag & QF_DEBUG) + syslog(LOG_NOTICE, "using server %s ctxs %s group %s", server, contexts, group); + + retval = nw_attempt_auth_tree(pamh, server, name, contexts, p, inf.qflag, group, NWCC_NAME_FORMAT_BIND); + if (retval == PAM_SUCCESS) + goto success; + } + + } + + retval = PAM_AUTH_ERR; + goto quit; + success:; + if (inf.qflag & QF_DEBUG) + syslog(LOG_DEBUG, "Auth OK\n"); + setpwent(); + pwd_entry = getpwnam(name); + endpwent(); + retval = PAM_SUCCESS; //moved here + if (!inf.isScreenSaverRelogin && inf.qflag & (QF_AUTOCREATE | QF_AUTOMODIFY)) { // v 1.22 + if ((!pwd_entry && (inf.qflag & QF_AUTOCREATE)) || (pwd_entry && (inf.qflag & QF_AUTOMODIFY))) { + int err; + + inf.name = strdup(name); + if (!inf.name) { + syslog(LOG_WARNING, "Not enough memory for strdup()\n"); + err = -10; // added PP + } else { + // NDS error means NO LOGIN + err = nw_retrieve_user_info(&inf); + // remote access denied = NO LOGIN (and no update/creation!) + if (inf.qflag & QF_DEBUG) + syslog(LOG_DEBUG, "FOUND ZF %lx in NDS \n", inf.zenFlag); + if (inf.qflag & QF_DEBUG) + syslog(LOG_DEBUG, "APPLYING ZF %lx OFF \n", inf.zenFlagOFF); + mergeZenFlags(&inf); // rev 1.26 turn off prohibited flags + if (inf.qflag & QF_DEBUG) + syslog(LOG_DEBUG, "USING ZF %lx \n", inf.zenFlag); + if (!err) + err = process_zenflag_remote(pamh, name, &inf); + // in this version creation error is lethal, not update + if (!err) + err = nw_update_user_info(&inf); +#if 0 + err = 0; // testing +#endif + } + retval = err ? PAM_AUTH_ERR : PAM_SUCCESS; // added here PP + } +// feature: if you do not allow autocreation, automodification, NDS is not RED +// so no Zen, no remote access restrictions... + } + + quit:; + //PP keep the nw_user_info into PAM for a later use in sm_open_session + // be Zen, no password saved yet ;-) + + if (retval == PAM_SUCCESS && !inf.isScreenSaverRelogin) { + void *sav; + + //read again pwd_entry ( was NULL if it is a new account !) + setpwent(); + pwd_entry = getpwnam(name); + endpwent(); + mergeZenFlags(&inf); // rev 1.26 turn off prohibited flags + retval = process_zenflag_auth(pamh, name, &inf, pwd_entry, p); + if (retval == PAM_SUCCESS) { // some ZeN_FLAGS may stop the authentification process ! + sav = malloc(sizeof (inf)); + if (sav) { + if (inf.qflag & QF_DEBUG) + syslog(LOG_NOTICE, "saving user_info\n"); + memcpy(sav, &inf, sizeof (inf)); + pam_set_data(pamh, "pam.ncpfs.user_info", sav, cleanup_user_info); + } else { + if (inf.qflag & QF_DEBUG) + syslog(LOG_NOTICE, "Out of memory. NOT saving user_info\n"); + free_nw_user_info(&inf); // forget about it + // I feel bad about the pam-session parts, but they should just quit gracefully + } + } + } + if (inf.qflag & QF_DEBUG) + syslog(LOG_NOTICE, "final PAM retval %u\n", retval); + + //PP: may be a good spot to close and get rid on the still opened connection ??? + closelog(); + return retval; +} + +/* + * Does nothing. for now + */ + +PAM_EXTERN int +pam_sm_setcred(pam_handle_t * pamh, int flags, int argc, const char **argv) +{ + //return PAM_IGNORE; + return PAM_SUCCESS; +} + +/* + * Does nothing. for now + */ + +PAM_EXTERN int +pam_sm_acct_mgmt(pam_handle_t * pamh, int flags, int argc, const char **argv) +{ + //return PAM_IGNORE; + return PAM_SUCCESS; +} + +/* old code used with server=XXX cmd line argument */ +static int +nw_attempt_passwd_prelim_server(pam_handle_t * pamh, + const char *server, const char *user, const char *oldpwd, + int qflag, const char *group, int flags) +{ + struct ncp_conn *conn; + int err; + + err = nw_create_verify_conn_to_server(&conn, NULL, server, user, oldpwd, qflag, group); + if (err) + return err; + pam_set_data(pamh, "pam.ncpfs.passwd.conn", conn, nw_cleanup_conn); + return 0; +} + +/*new code for tree=argument */ +static int +nw_attempt_passwd_prelim_tree(pam_handle_t * pamh, + const char *tree, const char *user, const char *contexts, const char *oldpwd, + int qflag, const char *group, int flags, nuint nameFormat) +{ + struct ncp_conn *conn; + int err; + + err = nw_create_verify_conn_to_tree(&conn, NULL, tree, user, contexts, oldpwd, qflag, group, nameFormat); + if (err) + return err; + pam_set_data(pamh, "pam.ncpfs.passwd.conn", conn, nw_cleanup_conn); + return 0; +} + +static int +nw_attempt_passwd_post(pam_handle_t * pamh, const char *pwd, const char *oldpwd, int qflag, int flags) +{ + struct ncp_conn *conn; + long err; + NWObjectID oid; + char *oldpwdup; + char *pwdup; + + err = PAM_AUTHTOK_ERR; + if (!(flags & PAM_UPDATE_AUTHTOK)) + goto bailout_nf; + err = pam_get_data(pamh, "pam.ncpfs.passwd.conn", (const void **) &conn); + if (err) + goto bailout_nf; + err = nw_get_nwid(conn, &oid, qflag); + if (err) + goto bailout_nf; + + oldpwdup = strdup(oldpwd); + if (!oldpwd) { + err = ENOMEM; + goto bailout_nf; + } + str_upper(oldpwdup); + + pwdup = strdup(pwd); + if (!pwd) { + err = ENOMEM; + goto bailout_nf2; + } + str_upper(pwdup); + + if (qflag & QF_BINDERY) { + struct ncp_bindery_object uinfo; + struct ncp_bindery_object u0; + unsigned char ncp_key[8]; + + err = ncp_get_bindery_object_name(conn, oid, &u0); + if (err) { + syslog(LOG_WARNING, "%s when trying to get object name\n", strnwerror(err)); + err = PAM_USER_UNKNOWN; + goto bailout; + } + err = ncp_get_encryption_key(conn, ncp_key); + if (err) { + syslog(LOG_WARNING, "%s when trying to get encryption key\n", strnwerror(err)); + err = PAM_AUTHTOK_ERR; + goto bailout; + } else { + err = ncp_get_bindery_object_id(conn, u0.object_type, u0.object_name, &uinfo); + if (err) { + syslog(LOG_WARNING, "%s when trying to get object ID\n", strnwerror(err)); + err = PAM_USER_UNKNOWN; + goto bailout; + } + err = ncp_change_login_passwd(conn, &uinfo, ncp_key, oldpwdup, pwdup); + if (err) { + syslog(LOG_WARNING, "%s when trying to change password\n", strnwerror(err)); + err = PAM_AUTHTOK_ERR; + goto bailout; + } + } + } else { + NWDSContextHandle ctx; + nuint32 c; + char username[MAX_DN_BYTES]; + + err = NWDSCreateContextHandle(&ctx); + if (err) { + syslog(LOG_WARNING, "NWDSCreateContextHandle() failed with %s\n", strnwerror(err)); + err = PAM_SYSTEM_ERR; + goto bailout; + } + c = DCV_XLATE_STRINGS | DCV_TYPELESS_NAMES | DCV_DEREF_ALIASES; + err = NWDSSetContext(ctx, DCK_FLAGS, &c); + if (err) { + syslog(LOG_WARNING, "NWDSSetContext() failed with %s\n", strnwerror(err)); + err = PAM_SYSTEM_ERR; + goto bailoutctx; + } + NWDSAddConnection(ctx, conn); + err = NWDSMapIDToName(ctx, conn, oid, username); + if (err) { + syslog(LOG_WARNING, "NWDSMapIDToName() failed with %s\n", strnwerror(err)); + err = PAM_USER_UNKNOWN; + goto bailoutctx; + } + if (qflag & QF_DEBUG) + syslog(LOG_DEBUG, "User has DN %s\n", username); + err = NWDSChangeObjectPassword(ctx, NDS_PASSWORD, username, oldpwdup, pwdup); + if (err) { + syslog(LOG_NOTICE, "NWDSChangeObjectPassword() failed with %s\n", strnwerror(err)); + err = PAM_AUTHTOK_ERR; + goto bailoutctx; + } + if (qflag & QF_DEBUG) + syslog(LOG_DEBUG, "User %s has succesfully changed its NW pasword\n", username); + bailoutctx:; + NWDSFreeContext(ctx); + } +bailout:; + free(pwdup); +bailout_nf2:; + free(oldpwdup); +bailout_nf:; + pam_set_data(pamh, "ncpfs.pam.passwd.conn", NULL, NULL); + return err; +} + +//PP: untested code .. +// one question. +// +PAM_EXTERN int +pam_sm_chauthtok(pam_handle_t * pamh, int flags, int argc, const char **argv) +{ + int retval; + const char *name; + char *p; + char *oldpasswd; + int c; + + int qflag = QF_VERBOSE; + + openlog("pam_ncp_auth", LOG_PID, LOG_AUTHPRIV); + /* Get options */ + for (c = 0; c < argc; c++) { + if (argv[c][0] == '-') { + int i; + + for (i = 1; argv[c][i]; i++) { + switch (argv[c][i]) { + case 'v': + qflag |= QF_VERBOSE; + break; /* verbose */ + case 'q': + qflag &= ~QF_VERBOSE; + break; /* quiet */ + case 'd': + qflag |= QF_DEBUG; + break; /* debug */ + case 's': + qflag |= QF_NOSU; + break; /* no supervisor */ + case 'S': + qflag |= QF_NOSUEQ; + break; /* no supervisor equivalent */ + case 'b': + qflag |= QF_BINDERY; + break; /* use bindery access */ + default:; /* just silently ignore unknown option... */ + } + } + } + } + //if (qflag &QF_DEBUG) + // test_pam_items ("chauthtok",pamh); + + /* Get username */ + if ((retval = pam_get_user(pamh, &name, "passwd: ")) != PAM_SUCCESS) + goto quit; + + pam_get_item(pamh, PAM_OLDAUTHTOK, (void *) &oldpasswd); + if (!oldpasswd) { + retval = _set_oldauth_tok(pamh, flags); + if (retval != PAM_SUCCESS) + goto quit; + pam_get_item(pamh, PAM_OLDAUTHTOK, (void *) &oldpasswd); + } + + if (flags & PAM_PRELIM_CHECK) { + /* Find the server name in the configuration. */ + + for (c = 0; c < argc; c++) { + if (!strncmp("server=", argv[c], 7)) { + const char *server; + const char *group; + char sbuf[256]; + + server = argv[c] + 7; + group = strchr(server, '/'); + if (group) { + if ((size_t) (group - server) < sizeof (sbuf) - 1) { + memcpy(sbuf, server, group - server); + sbuf[group - server] = 0; + server = sbuf; + group = group + 1; + } else { + syslog(LOG_ALERT, "Error in configuration file: server name too long!\n"); + continue; + } + } + retval = nw_attempt_passwd_prelim_server(pamh, server, name, oldpasswd, qflag, group, flags); + if (retval == PAM_SUCCESS) + goto quit; + } + if (!strncmp("tree=", argv[c], 5)) { + const char *tree; + const char *contexts; + const char *group; + char tbuf[512]; + + tree = argv[c] + 5; + if (strlen(tree) >= sizeof (tbuf)) { + syslog(LOG_ALERT, "Error in configuration file: tree argument too long!\n"); + continue; + } + strcpy(tbuf, tree); + tree = tbuf; + group = strchr(tree, '/'); + if (group) { + tbuf[group - tree] = 0; + group++; + } + contexts = strchr(tree, ':'); + if (contexts) { + tbuf[contexts - tree] = 0; + contexts++; + } + if (qflag & QF_DEBUG) + syslog(LOG_NOTICE, "using tree %s ctxs %s group %s", tree, contexts, group); + + retval = nw_attempt_passwd_prelim_tree(pamh, tree, name, contexts, oldpasswd, qflag, group, flags, NWCC_NAME_FORMAT_NDS_TREE); + if (retval == PAM_SUCCESS) + goto quit; + + } + if (!strncmp("ndsserver=", argv[c], 10)) { + const char *tree; + const char *contexts; + const char *group; + char tbuf[512]; + + tree = argv[c] + 10; + if (strlen(tree) >= sizeof (tbuf)) { + syslog(LOG_ALERT, "Error in configuration file: NDS server argument too long!\n"); + continue; + } + strcpy(tbuf, tree); + tree = tbuf; + group = strchr(tree, '/'); + if (group) { + tbuf[group - tree] = 0; + group++; + } + contexts = strchr(tree, ':'); + if (contexts) { + tbuf[contexts - tree] = 0; + contexts++; + } + if (qflag & QF_DEBUG) + syslog(LOG_NOTICE, "using NDS server %s ctxs %s group %s", tree, contexts, group); + + retval = nw_attempt_passwd_prelim_tree(pamh, tree, name, contexts, oldpasswd, qflag, group, flags, NWCC_NAME_FORMAT_BIND); + if (retval == PAM_SUCCESS) + goto quit; + + } + } + retval = PAM_AUTHTOK_ERR; + goto quit; + } + + if (flags & PAM_UPDATE_AUTHTOK) { + /* Get password */ + pam_get_item(pamh, PAM_AUTHTOK, (void *) &p); + + if (!p) { + retval = _read_new_pwd(pamh, flags); + if (retval != PAM_SUCCESS) + return retval; + pam_get_item(pamh, PAM_AUTHTOK, (void *) &p); + } + + retval = nw_attempt_passwd_post(pamh, p, oldpasswd, qflag, flags); + } else { + retval = PAM_SYSTEM_ERR; + } +quit:; + closelog(); + return retval; +} + +// ajout PP 2000/12/19 +// will process session on and session end zenFlag + +static int +nw_process_nwinfos_file(const char *uname, const struct nw_user_info *ui, const struct passwd *pwd) +{ +// create a ~/.nwinfos file that can be "sourced" in future scripts + FILE *f; + char *nwinfos; +#ifdef IMPERSONNATE + uid_t currentUID = getuid(); +#endif + int perm_err; + + nwinfos = concat3a(pwd->pw_dir, '/', NWINFOS_FILE); +#ifdef IMPERSONNATE + // v 1.24 NFS mounted homes are mounted with no_root_squash option , so we must change UID to current user + if (seteuid(pwd->pw_uid)) { + syslog(LOG_DEBUG, "Cannot inpersonnate to %s: %s\n", pwd->pw_name, strerror(errno)); + return 1; + } +#endif + + f = fopen(nwinfos, "w"); + if (f) { + if (ui->qflag & QF_DEBUG) + syslog(LOG_DEBUG, "writing a new %s file\n", nwinfos); + + // either NDS or local values + fprintf(f, "NDS_USER=%s\n", ui->name ? ui->name : pwd->pw_name); + fprintf(f, "NDS_GECOS=\"%s\"\n", ui->gecos ? ui->gecos : pwd->pw_gecos); //may have space in it + fprintf(f, "NDS_SHELL=%s\n", ui->shell ? ui->shell : pwd->pw_shell); + fprintf(f, "NDS_HOME=%s\n", ui->dir ? ui->dir : pwd->pw_dir); + fprintf(f, "NDS_UID=%u\n", (ui->uid != (uid_t) -1) ? ui->uid : pwd->pw_uid); + fprintf(f, "NDS_GID=%u\n", (ui->gid != (gid_t) -1) ? ui->gid : pwd->pw_gid); + // no local alernatives + fprintf(f, "NDS_QFLAG=%x\n", ui->qflag); + if (ui->nwhomeServer) + fprintf(f, "NDS_HOME_SERVER=%s\n", ui->nwhomeServer); + if (ui->nwhomeVolume) + fprintf(f, "NDS_HOME_VOLUME=%s\n", ui->nwhomeVolume); + if (ui->nwhomePath) + fprintf(f, "NDS_HOME_PATH=%s\n", ui->nwhomePath); + if (ui->nwhomeMntPnt) + fprintf(f, "NDS_HOME_MNT_PNT=%s\n", ui->nwhomeMntPnt); + if (ui->emailSMTP) + fprintf(f, "NDS_EMAIL=%s\n", ui->emailSMTP); + if (ui->emailLDAP) + fprintf(f, "NDS_EMAIL=%s\n", ui->emailLDAP); // overwrite it + if (ui->messageServer) + fprintf(f, "NDS_PREFERRED_SERVER=%s\n", ui->messageServer); + if (ui->defaultTree) + fprintf(f, "NDS_PREFERRED_TREE=%s\n", ui->defaultTree); + if (ui->defaultNameCtx) + fprintf(f, "NDS_PREFERRED_NAME_CTX=%s\n", ui->defaultNameCtx); + + // v 1.19 added a new account flag to ease zenscript processing + // is account is new, we can further personnalize config files such as kmailrc, liprefs.js ... + fprintf(f, "NDS_IS_NEW_USER=%s\n", (ui->isNewUser) ? "1" : "0"); + + fprintf(f, "NDS_ZEN_FLAG=0x%lx\n", ui->zenFlag); + switch (ui->zenFlag && (ZF_BROADCAST_ALL + ZF_BROADCAST_CONSOLE)) { + case ZF_BROADCAST_ALL: + fprintf(f, "NDS_BCAST=2\n"); + break; + case ZF_BROADCAST_CONSOLE: + fprintf(f, "NDS_BCAST=1\n"); + break; + default: + fprintf(f, "NDS_BCAST=0\n"); + break; + } + fclose(f); + //perm_err=chmod(nwinfos,0600) || chown(nwinfos,pwd->pw_uid,pwd->pw_gid); + perm_err = chmod(nwinfos, 0600); + seteuid(currentUID); + if (perm_err) + syslog(LOG_DEBUG, "problem %d (%s)changing permissions to %s\n", perm_err, strerror(errno), nwinfos); + if (ui->qflag & QF_DEBUG) + syslog(LOG_DEBUG, "done writing %s \n", nwinfos); + + } else { + seteuid(currentUID); + syslog(LOG_DEBUG, "Cannot open %s: %s\n", nwinfos, strerror(errno)); + } + + return 0; +} + +// starting at rev. 1.19 zencripts are launched via su -l user for security reasons ! + +static int +exechelper2(const char *program, // script name just to test if the command exist + const char *argv[], // extras arguments to -c program + const char *unixname, // user to su to + int verbose) +{ + struct stat stt; + + if (verbose) { + if (unixname) { + syslog(LOG_NOTICE, "launching %s %s %s as %s\n", program, argv[1], argv[2], unixname); + } else { + syslog(LOG_NOTICE, "launching %s %s %s as root\n", program, argv[1], argv[2]); + } + } + if (stat(program, &stt) != 0) { + if (verbose) + syslog(LOG_NOTICE, "%s not found\n", program); + return -1; + } + return exechelper(program, argv, unixname); +} + +static int +process_zenflag_session_opening(const char *user, const struct nw_user_info *ui, const struct passwd *pwd) +{ + + int err; + if (ui->qflag & QF_DEBUG) + syslog(LOG_DEBUG, "APPLYING ZF %lx\n", ui->zenFlag); + + if (ui->zenFlag & ZF_CREATE_NWINFOS) + err = nw_process_nwinfos_file(user, ui, pwd); + if (ui->zenFlag & ZF_OPENING_SCRIPTS) { + const char *argv[5]; + + argv[1] = pwd->pw_dir; // argument 1 = location of nwinfos file to source in + argv[2] = NWINFOS_FILE; // actual file name + argv[3] = NULL; + // argument 1 = location of nwinfos file to source in (=user's home dir) + //argument 2 = actual file name (default=.nwinfos) + + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "running opening scripts.\n"); + if (ui->zenFlag & ZF_0) + err = exechelper2(ZEN_SCRIPT_0, argv, user, ui->qflag & QF_DEBUG); + if (ui->zenFlag & ZF_1) + err = exechelper2(ZEN_SCRIPT_1, argv, user, ui->qflag & QF_DEBUG); + if (ui->zenFlag & ZF_2) + err = exechelper2(ZEN_SCRIPT_2, argv, user, ui->qflag & QF_DEBUG); + } +#if 1 + err = 0; // ignore errors for now +#endif + return err; +} + +PAM_EXTERN int +pam_sm_open_session(pam_handle_t * pamh, int flags, int argc, const char **argv) +{ + /* NO WAY to mount netware home here + passord is lost, we are in the pam_session now. + I could have stored it in nw-user_info struct saved in PAM data + but I am not sure this is really safe !!! + we only process here some ZENFLAGS red from NDS + and stored in the PAM item "pam.ncpfs.user_info" + + */ + struct nw_user_info *ui; + const struct passwd *pwd; + struct stat stt; + const char *user; + int err, c; + + int qflag = QF_VERBOSE; + + openlog("pam_ncp_auth", LOG_PID, LOG_AUTHPRIV); + /* Get options */ + for (c = 0; c < argc; c++) { + if (argv[c][0] == '-') { + int i; + + for (i = 1; argv[c][i]; i++) { + switch (argv[c][i]) { + case 'v': + qflag |= QF_VERBOSE; + break; /* verbose */ + case 'q': + qflag &= ~QF_VERBOSE; + break; /* quiet */ + case 'd': + qflag |= QF_DEBUG; + break; /* debug */ + default:; /* just silently ignore unknown option... */ + } + } + } + } + + /***************************************************** + if (qflag & QF_DEBUG) { + test_pam_items ("session closing",pamh); + } + *****************************************************/ + if (qflag & QF_DEBUG) { + syslog(LOG_NOTICE, "start of session \n"); + } +// just in case user has been removed ??? + err = pam_get_item(pamh, PAM_USER, (const void **) &user); + if (err != PAM_SUCCESS || user == NULL || *user == '\0') + goto doneok; + + setpwent(); + pwd = getpwnam(user); + endpwent(); + if (pwd == NULL) { + syslog(LOG_DEBUG, "%s not found\n", user); + goto doneok; + } + if (stat(pwd->pw_dir, &stt) != 0) { + syslog(LOG_DEBUG, "Unix home of %s not found !\n", user); + goto doneok; + } + // get back user's info stored in PAM by the authentification section + // no password there ! + err = pam_get_data(pamh, "pam.ncpfs.user_info", (const void **) &ui); + if (!err) { + if (qflag & QF_DEBUG) + syslog(LOG_NOTICE, "got user info back %u", ui->uid); + process_zenflag_session_opening(user, ui, pwd); + } else if (qflag & QF_DEBUG) + syslog(LOG_DEBUG, "failure reading back pam.ncpfs.user_info %u\n", err); + // no problem, he is authenticated but "zen failed" +doneok: + pam_set_data(pamh, "pam.ncpfs.passwd.conn", NULL, NULL); + return PAM_SUCCESS; +} + +// starting at rev. 1.19 zencripts are lauched via su -l user for security reasons ! +static int +process_zenflag_session_closing(const char *user, const struct nw_user_info *ui, const struct passwd *pwd) +{ + int err = 0; + +// first zenScripts in case they opeate on the mounted nwhome ! + if (ui->zenFlag & ZF_CLOSING_SCRIPTS) { + const char *argv[5]; + + argv[1] = pwd->pw_dir; // argument 1 = location of nwinfos file to source in + argv[2] = NWINFOS_FILE; // actual file name + argv[3] = NULL; + // argument 1 = location of nwinfos file to source in (=user's home dir) + //argument 2 = actual file name (default=.nwinfos) + + if (ui->qflag & QF_DEBUG) + syslog(LOG_NOTICE, "running closing scripts.\n"); + if (ui->zenFlag & ZF_3) + err = exechelper2(ZEN_SCRIPT_3, argv, user, ui->qflag & QF_DEBUG); + if (ui->zenFlag & ZF_4) + err = exechelper2(ZEN_SCRIPT_4, argv, user, ui->qflag & QF_DEBUG); + if (ui->zenFlag & ZF_5) + err = exechelper2(ZEN_SCRIPT_5, argv, user, ui->qflag & QF_DEBUG); + } + + if (ui->zenFlag & ZF_AUTOMOUNT_NWHOME) { + err = umount_nwhome(user, ui->nwhomeMntPnt, ui->qflag & QF_DEBUG); + } +#if 1 + err = 0; // ignore error +#endif + return err; +} + +static int +pam_do_close_session(const char *user, const struct nw_user_info *ui, const struct passwd *pwd) +{ + + return process_zenflag_session_closing(user, ui, pwd); +} + +PAM_EXTERN int +pam_sm_close_session(pam_handle_t * pamh, int flags, int argc, const char **argv) +// logout fom Netware at session end +// no complains +{ + struct nw_user_info *ui; + long err; + const char *user; + const struct passwd *pwd; + struct stat stt; + + int qflag = QF_VERBOSE; + int c; + openlog("pam_ncp_auth", LOG_PID, LOG_AUTHPRIV); + /* Get options */ + for (c = 0; c < argc; c++) { + if (argv[c][0] == '-') { + int i; + + for (i = 1; argv[c][i]; i++) { + switch (argv[c][i]) { + case 'v': + qflag |= QF_VERBOSE; + break; /* verbose */ + case 'q': + qflag &= ~QF_VERBOSE; + break; /* quiet */ + case 'd': + qflag |= QF_DEBUG; + break; /* debug */ + default:; /* just silently ignore unknown option... */ + } + } + } + } + + /***************************************************** + if (qflag & QF_DEBUG) { + test_pam_items ("session closing",pamh); + } + *****************************************************/ + if (qflag & QF_DEBUG) { + syslog(LOG_NOTICE, "end of session\n"); + } +// just in case user has been removed ??? + err = pam_get_item(pamh, PAM_USER, (const void **) &user); + if (err != PAM_SUCCESS || user == NULL || *user == '\0') + goto doneok; + + setpwent(); + pwd = getpwnam(user); + endpwent(); + + if (pwd == NULL) { + syslog(LOG_NOTICE, "%s not found\n", user); + goto doneok; + } + + if (stat(pwd->pw_dir, &stt) != 0) { + syslog(LOG_NOTICE, "Unix home of %s not found !\n", user); + goto doneok; + } + // read back all user data + err = pam_get_data(pamh, "pam.ncpfs.user_info", (const void **) &ui); + if (!err) { + if (qflag & QF_DEBUG) + syslog(LOG_NOTICE, "got it back %u", ui->uid); + } else { + if (qflag & QF_DEBUG) + syslog(LOG_DEBUG, "failed reading pam.ncpfs.user_info %lu\n", err); + goto doneok; + } + pam_do_close_session(user, ui, pwd); + free_nw_user_info(ui); // forget about it +doneok: + closelog(); + + pam_set_data(pamh, "pam.ncpfs.passwd.conn", NULL, NULL); + return PAM_SUCCESS; +} + +/* static module data */ +#ifdef PAM_STATIC +struct pam_module _pam_ncp_auth_modstruct = { + "pam_ncp_auth", + pam_sm_authenticate, + pam_sm_setcred, + pam_sm_acct_mgmt, + pam_sm_open_session, // session IN was NULL PP + pam_sm_close_session, // session OUT was NULL PP + pam_sm_chauthtok, +}; +#endif diff --git a/contrib/pam/support.c b/contrib/pam/support.c new file mode 100644 index 0000000..08ed769 --- /dev/null +++ b/contrib/pam/support.c @@ -0,0 +1,270 @@ +/* + * $Header: /home/morgan/pam/Linux-PAM-0.53/modules/pam_unix/RCS/support.c,v 1.1 1996/11/09 19:44:35 morgan Exp $ + */ + +/* + * Copyright Andrew Morgan, 1996. All rights reserved. + * Modified by Alexander O. Yuriev + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, and the entire permission notice in its entirety, + * including the disclaimer of warranties. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * ALTERNATIVELY, this product may be distributed under the terms of + * the GNU Public License, in which case the provisions of the GPL are + * required INSTEAD OF the above restrictions. (This clause is + * necessary due to a potential bad interaction between the GPL and + * the restrictions contained in a BSD-style copyright.) + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * $Log: support.c,v $ + * + * Revision 1.2 2000/06/02 17:40:00 vana + * Added support functions for chautok. + * + * Revision 1.1 1996/11/09 19:44:35 morgan + * Initial revision + * + * Revision 1.1 1996/04/17 01:11:08 alex + * Initial revision + * + */ + +#include /* define NULL */ +#include + +#include "support.h" + +#ifndef NDEBUG + +# include + +#endif /* NDEBUG */ + + +/* Implementation */ + +static int converse( pam_handle_t *pamh, + int nargs, + struct pam_message **message, + struct pam_response **response ) + +{ + int retval; + struct pam_conv *conv; + + retval = pam_get_item( pamh, PAM_CONV, (const void **) &conv ) ; + if ( retval == PAM_SUCCESS ) + { + retval = conv->conv( nargs, + ( const struct pam_message ** ) message, + response, + conv->appdata_ptr ); + } + return retval; +} + +/***************************************************************************/ +/* prompt user for a using conversation calls */ +/***************************************************************************/ + +int _set_auth_tok(pam_handle_t *pamh, int flags) { + int retval; + char *p; + + struct pam_message msg[1],*pmsg[1]; + struct pam_response *resp; + + /* set up conversation call */ + + pmsg[0] = &msg[0]; + msg[0].msg_style = PAM_PROMPT_ECHO_OFF; + msg[0].msg = "Password: "; + resp = NULL; + + if ( ( retval = converse( pamh, 1 , pmsg, &resp ) ) != PAM_SUCCESS ) + return retval; + + if ( resp ) + { + if ( ( flags & PAM_DISALLOW_NULL_AUTHTOK ) && + resp[0].resp == NULL ) + { + free( resp ); + return PAM_AUTH_ERR; + } + + p = resp[ 0 ].resp; + + /* This could be a memory leak. If resp[0].resp + is malloc()ed, then it has to be free()ed! + -- alex + */ + + resp[ 0 ].resp = NULL; + + } + else + return PAM_CONV_ERR; + + free( resp ); + pam_set_item( pamh, PAM_AUTHTOK, p ); + return PAM_SUCCESS; +} + +int _read_new_pwd(pam_handle_t *pamh, int flags) +{ + int retval; + char *p; + char *q; + + struct pam_message msg[1],*pmsg[1]; + struct pam_message msg2[1],*pmsg2[1]; + struct pam_response *resp; + + /* set up conversation call */ + + pmsg[0] = &msg[0]; + msg[0].msg_style = PAM_PROMPT_ECHO_OFF; + msg[0].msg = "New Password: "; + resp = NULL; + + if ( ( retval = converse( pamh, 1 , pmsg, &resp ) ) != PAM_SUCCESS ) + return retval; + + if ( resp ) + { + if ( ( flags & PAM_DISALLOW_NULL_AUTHTOK ) && + resp[0].resp == NULL ) + { + free( resp ); + return PAM_AUTH_ERR; + } + + p = resp[ 0 ].resp; + + /* This could be a memory leak. If resp[0].resp + is malloc()ed, then it has to be free()ed! + -- alex + */ + + resp[ 0 ].resp = NULL; + + } + else + return PAM_CONV_ERR; + + free( resp ); + pmsg2[0] = &msg2[0]; + msg2[0].msg_style = PAM_PROMPT_ECHO_OFF; + msg2[0].msg = "Retype New Password: "; + resp = NULL; + + if ( ( retval = converse( pamh, 1 , pmsg2, &resp ) ) != PAM_SUCCESS ) + return retval; + + if ( resp ) + { + if ( ( flags & PAM_DISALLOW_NULL_AUTHTOK ) && + resp[0].resp == NULL ) + { + free( resp ); + return PAM_AUTH_ERR; + } + + q = resp[ 0 ].resp; + + /* This could be a memory leak. If resp[0].resp + is malloc()ed, then it has to be free()ed! + -- alex + */ + + resp[ 0 ].resp = NULL; + + } + else + return PAM_CONV_ERR; + + free( resp ); + + if (strcmp(p, q)) { + pmsg2[0] = &msg2[0]; + msg2[0].msg_style = PAM_ERROR_MSG; + msg2[0].msg = "Passwords do not match!"; + resp = NULL; + + retval = converse( pamh, 1, pmsg2, &resp); + if ((retval != PAM_SUCCESS) && resp) + free(resp); + return PAM_AUTHTOK_ERR; + } + + pam_set_item( pamh, PAM_AUTHTOK, p ); + return PAM_SUCCESS; +} + +int _set_oldauth_tok(pam_handle_t *pamh, int flags) { + int retval; + char *p; + + struct pam_message msg[1],*pmsg[1]; + struct pam_response *resp; + + /* set up conversation call */ + + pmsg[0] = &msg[0]; + msg[0].msg_style = PAM_PROMPT_ECHO_OFF; + msg[0].msg = "(current) NetWare password: "; + resp = NULL; + + if ( ( retval = converse( pamh, 1 , pmsg, &resp ) ) != PAM_SUCCESS ) + return retval; + + if ( resp ) + { + if ( ( flags & PAM_DISALLOW_NULL_AUTHTOK ) && + resp[0].resp == NULL ) + { + free( resp ); + return PAM_AUTH_ERR; + } + + p = resp[ 0 ].resp; + + /* This could be a memory leak. If resp[0].resp + is malloc()ed, then it has to be free()ed! + -- alex + */ + + resp[ 0 ].resp = NULL; + + } + else + return PAM_CONV_ERR; + + free( resp ); + pam_set_item( pamh, PAM_OLDAUTHTOK, p ); + return PAM_SUCCESS; +} diff --git a/contrib/pam/support.h b/contrib/pam/support.h new file mode 100644 index 0000000..052cabc --- /dev/null +++ b/contrib/pam/support.h @@ -0,0 +1,18 @@ +#ifndef __SUPPORT_H__ +#define __SUPPORT_H__ + +#ifndef LINUX + +#include + +#endif /* LINUX */ + +#define _PAM_EXTERN_FUNCTIONS +#include + +int _set_auth_tok(pam_handle_t *pamh, int flags); +int _set_oldauth_tok(pam_handle_t *pamh, int flags); +int _read_new_pwd(pam_handle_t *pamh, int flags); + +#endif /* __SUPPORT_H__ */ + diff --git a/contrib/php/Makefile.in.in b/contrib/php/Makefile.in.in new file mode 100644 index 0000000..1f461c3 --- /dev/null +++ b/contrib/php/Makefile.in.in @@ -0,0 +1,6 @@ +LTLIBRARY_SHARED_NAME = php_auth_nds.la +LTLIBRARY_SOURCES = php_auth_nds.c +LTLIBRARY_LDFLAGS = -L../../lib -lncp +EXTRA_INCLUDES = -I../../include -DNCPFS_VERSION=\"@VERSION@\" + +include $(top_srcdir)/build/dynlib.mk diff --git a/contrib/php/acinclude.m4 b/contrib/php/acinclude.m4 new file mode 100644 index 0000000..d410e01 --- /dev/null +++ b/contrib/php/acinclude.m4 @@ -0,0 +1,1279 @@ +dnl $Id: acinclude.m4,v 1.157.2.8 2002/07/29 02:15:18 sniper Exp $ +dnl +dnl This file contains local autoconf functions. + +sinclude(dynlib.m4) + +dnl +dnl Disable building CLI +dnl +AC_DEFUN(PHP_DISABLE_CLI,[ + disable_cli=1 +]) + +dnl +dnl Separator into the configure --help display. +dnl +AC_DEFUN(PHP_HELP_SEPARATOR,[ +AC_ARG_ENABLE([],[ +$1 +],[]) +]) + +dnl +dnl PHP_TARGET_RDYNAMIC +dnl +dnl Checks whether -rdynamic is supported by the compiler. This +dnl is necessary for some targets to populate the global symbol +dnl table. Otherwise, dynamic modules would not be able to resolve +dnl PHP-related symbols. +dnl +dnl If successful, adds -rdynamic to PHP_LDFLAGS. +dnl +AC_DEFUN(PHP_TARGET_RDYNAMIC,[ + if test -n "$GCC"; then + dnl we should use a PHP-specific macro here + TSRM_CHECK_GCC_ARG(-rdynamic, gcc_rdynamic=yes) + if test "$gcc_rdynamic" = "yes"; then + PHP_LDFLAGS="$PHP_LDFLAGS -rdynamic" + fi + fi +]) + +AC_DEFUN(PHP_REMOVE_USR_LIB,[ + unset ac_new_flags + for i in [$]$1; do + case [$]i in + -L/usr/lib|-L/usr/lib/) ;; + *) ac_new_flags="[$]ac_new_flags [$]i" ;; + esac + done + $1=[$]ac_new_flags +]) + +AC_DEFUN(PHP_SETUP_OPENSSL,[ + if test "$PHP_OPENSSL" = "no"; then + PHP_OPENSSL="/usr/local/ssl /usr/local /usr /usr/local/openssl" + fi + + for i in $PHP_OPENSSL; do + if test -r $i/include/openssl/evp.h; then + OPENSSL_DIR=$i + OPENSSL_INC=$i/include + fi + done + + if test -z "$OPENSSL_DIR"; then + AC_MSG_ERROR([Cannot find OpenSSL's ]) + fi + + old_CPPFLAGS=$CPPFLAGS + CPPFLAGS=-I$OPENSSL_INC + AC_MSG_CHECKING([for OpenSSL version]) + AC_EGREP_CPP(yes,[ + #include + #if OPENSSL_VERSION_NUMBER >= 0x0090500fL + yes + #endif + ],[ + AC_MSG_RESULT([>= 0.9.5]) + ],[ + AC_MSG_ERROR([OpenSSL version 0.9.5 or greater required.]) + ]) + CPPFLAGS=$old_CPPFLAGS + + PHP_ADD_LIBPATH($OPENSSL_DIR/lib) + + AC_CHECK_LIB(crypto, CRYPTO_free, [:],[ + AC_MSG_ERROR([libcrypto not found!]) + ]) + + AC_CHECK_LIB(ssl, SSL_CTX_set_ssl_version, [:],[ + AC_MSG_ERROR([libssl not found!]) + ]) + PHP_ADD_INCLUDE($OPENSSL_INC) +]) + +dnl PHP_EVAL_LIBLINE(LINE, SHARED-LIBADD) +dnl +dnl Use this macro, if you need to add libraries and or library search +dnl paths to the PHP build system which are only given in compiler +dnl notation. +dnl +AC_DEFUN(PHP_EVAL_LIBLINE,[ + for ac_i in $1; do + case $ac_i in + -l*) + ac_ii=`echo $ac_i|cut -c 3-` + PHP_ADD_LIBRARY($ac_ii,1,$2) + ;; + -L*) + ac_ii=`echo $ac_i|cut -c 3-` + PHP_ADD_LIBPATH($ac_ii,$2) + ;; + esac + done +]) + +dnl PHP_EVAL_INCLINE(LINE) +dnl +dnl Use this macro, if you need to add header search paths to the PHP +dnl build system which are only given in compiler notation. +dnl +AC_DEFUN(PHP_EVAL_INCLINE,[ + for ac_i in $1; do + case $ac_i in + -I*) + ac_ii=`echo $ac_i|cut -c 3-` + PHP_ADD_INCLUDE($ac_ii) + ;; + esac + done +]) + +AC_DEFUN(PHP_READDIR_R_TYPE,[ + dnl HAVE_READDIR_R is also defined by libmysql + AC_CHECK_FUNC(readdir_r,ac_cv_func_readdir_r=yes,ac_cv_func_readdir=no) + if test "$ac_cv_func_readdir_r" = "yes"; then + AC_CACHE_CHECK(for type of readdir_r, ac_cv_what_readdir_r,[ + AC_TRY_RUN([ +#define _REENTRANT +#include +#include + +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif + +main() { + DIR *dir; + char entry[sizeof(struct dirent)+PATH_MAX]; + struct dirent *pentry = (struct dirent *) &entry; + + dir = opendir("/"); + if (!dir) + exit(1); + if (readdir_r(dir, (struct dirent *) entry, &pentry) == 0) + exit(0); + exit(1); +} + ],[ + ac_cv_what_readdir_r=POSIX + ],[ + AC_TRY_CPP([ +#define _REENTRANT +#include +#include +int readdir_r(DIR *, struct dirent *); + ],[ + ac_cv_what_readdir_r=old-style + ],[ + ac_cv_what_readdir_r=none + ]) + ],[ + ac_cv_what_readdir_r=none + ]) + ]) + case $ac_cv_what_readdir_r in + POSIX) + AC_DEFINE(HAVE_POSIX_READDIR_R,1,[whether you have POSIX readdir_r]);; + old-style) + AC_DEFINE(HAVE_OLD_READDIR_R,1,[whether you have old-style readdir_r]);; + esac + fi +]) + +AC_DEFUN(PHP_SHLIB_SUFFIX_NAME,[ + PHP_SUBST(SHLIB_SUFFIX_NAME) + SHLIB_SUFFIX_NAME=so + case $host_alias in + *hpux*) + SHLIB_SUFFIX_NAME=sl + ;; + *darwin*) + SHLIB_SUFFIX_NAME=dylib + ;; + esac +]) + +AC_DEFUN(PHP_DEBUG_MACRO,[ + DEBUG_LOG=$1 + cat >$1 <conftest.$ac_ext <>$1 2>&1 + rm -fr conftest* +]) + +AC_DEFUN(PHP_MISSING_PREAD_DECL,[ + AC_CACHE_CHECK(whether pread works without custom declaration,ac_cv_pread,[ + AC_TRY_COMPILE([#include ],[size_t (*func)() = pread],[ + ac_cv_pread=yes + ],[ + echo test > conftest_in + AC_TRY_RUN([ +#include +#include +#include + main() { char buf[3]; return !(pread(open("conftest_in", O_RDONLY), buf, 2, 0) == 2); } + ],[ + ac_cv_pread=yes + ],[ + echo test > conftest_in + AC_TRY_RUN([ +#include +#include +#include +#include + ssize_t pread(int, void *, size_t, off64_t); + main() { char buf[3]; return !(pread(open("conftest_in", O_RDONLY), buf, 2, 0) == 2); } + ],[ + ac_cv_pread=64 + ],[ + ac_cv_pread=no + ]) + ],[ + ac_cv_pread=no + ]) + ]) + ]) + case $ac_cv_pread in + no) ac_cv_func_pread=no;; + 64) AC_DEFINE(PHP_PREAD_64, 1, [whether pread64 is default]);; + esac +]) + +AC_DEFUN(PHP_MISSING_PWRITE_DECL,[ + AC_CACHE_CHECK(whether pwrite works without custom declaration,ac_cv_pwrite,[ + AC_TRY_COMPILE([#include ],[size_t (*func)() = pwrite],[ + ac_cv_pwrite=yes + ],[ + AC_TRY_RUN([ +#include +#include +#include + main() { return !(pwrite(open("conftest_out", O_WRONLY|O_CREAT, 0600), "Ok", 2, 0) == 2); } + ],[ + ac_cv_pwrite=yes + ],[ + AC_TRY_RUN([ +#include +#include +#include +#include + ssize_t pwrite(int, void *, size_t, off64_t); + main() { return !(pwrite(open("conftest_out", O_WRONLY|O_CREAT, 0600), "Ok", 2, 0) == 2); } + ],[ + ac_cv_pwrite=64 + ],[ + ac_cv_pwrite=no + ]) + ],[ + ac_cv_pwrite=no + ]) + ]) + ]) + case $ac_cv_pwrite in + no) ac_cv_func_pwrite=no;; + 64) AC_DEFINE(PHP_PWRITE_64, 1, [whether pwrite64 is default]);; + esac +]) + +AC_DEFUN(PHP_MISSING_TIME_R_DECL,[ + AC_MSG_CHECKING([for missing declarations of reentrant functions]) + AC_TRY_COMPILE([#include ],[struct tm *(*func)() = localtime_r],[ + : + ],[ + AC_DEFINE(MISSING_LOCALTIME_R_DECL,1,[Whether localtime_r is declared]) + ]) + AC_TRY_COMPILE([#include ],[struct tm *(*func)() = gmtime_r],[ + : + ],[ + AC_DEFINE(MISSING_GMTIME_R_DECL,1,[Whether gmtime_r is declared]) + ]) + AC_TRY_COMPILE([#include ],[char *(*func)() = asctime_r],[ + : + ],[ + AC_DEFINE(MISSING_ASCTIME_R_DECL,1,[Whether asctime_r is declared]) + ]) + AC_TRY_COMPILE([#include ],[char *(*func)() = ctime_r],[ + : + ],[ + AC_DEFINE(MISSING_CTIME_R_DECL,1,[Whether ctime_r is declared]) + ]) + AC_TRY_COMPILE([#include ],[char *(*func)() = strtok_r],[ + : + ],[ + AC_DEFINE(MISSING_STRTOK_R_DECL,1,[Whether strtok_r is declared]) + ]) + AC_MSG_RESULT([done]) +]) + +dnl +dnl PHP_LIBGCC_LIBPATH(gcc) +dnl Stores the location of libgcc in libgcc_libpath +dnl +AC_DEFUN(PHP_LIBGCC_LIBPATH,[ + changequote({,}) + libgcc_libpath=`$1 --print-libgcc-file-name|sed 's%/*[^/][^/]*$%%'` + changequote([,]) +]) + +AC_DEFUN(PHP_ARG_ANALYZE,[ +case [$]$1 in +shared,*) + ext_output="yes, shared" + ext_shared=yes + $1=`echo "[$]$1"|sed 's/^shared,//'` + ;; +shared) + ext_output="yes, shared" + ext_shared=yes + $1=yes + ;; +no) + ext_output=no + ext_shared=no + ;; +*) + ext_output=yes + ext_shared=no + ;; +esac + +if test "$php_always_shared" = "yes"; then + ext_output="yes, shared" + ext_shared=yes + test "[$]$1" = "no" && $1=yes +fi + +if test -n "$2"; then + AC_MSG_RESULT([$ext_output]) +fi +]) + +dnl +dnl PHP_ARG_WITH(arg-name, check message, help text[, default-val]) +dnl Sets PHP_ARG_NAME either to the user value or to the default value. +dnl default-val defaults to no. This will also set the variable ext_shared, +dnl and will overwrite any previous variable of that name. +dnl +AC_DEFUN(PHP_ARG_WITH,[ +PHP_REAL_ARG_WITH([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z0-9-,A-Z0-9_)) +]) + +AC_DEFUN(PHP_REAL_ARG_WITH,[ +if test -n "$2"; then + AC_MSG_CHECKING([$2]) +fi +AC_ARG_WITH($1,[$3],$5=[$]withval,$5=ifelse($4,,no,$4)) +PHP_ARG_ANALYZE($5,[$2]) +]) + +dnl +dnl PHP_ARG_ENABLE(arg-name, check message, help text[, default-val]) +dnl Sets PHP_ARG_NAME either to the user value or to the default value. +dnl default-val defaults to no. This will also set the variable ext_shared, +dnl and will overwrite any previous variable of that name. +dnl +AC_DEFUN(PHP_ARG_ENABLE,[ +PHP_REAL_ARG_ENABLE([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z-,A-Z_)) +]) + +AC_DEFUN(PHP_REAL_ARG_ENABLE,[ +if test -n "$2"; then + AC_MSG_CHECKING([$2]) +fi +AC_ARG_ENABLE($1,[$3],$5=[$]enableval,$5=ifelse($4,,no,$4)) +PHP_ARG_ANALYZE($5,[$2]) +]) + +AC_DEFUN(PHP_MODULE_PTR,[ + EXTRA_MODULE_PTRS="$EXTRA_MODULE_PTRS $1," +]) + +AC_DEFUN(PHP_CONFIG_NICE,[ + rm -f $1 + cat >$1<> $1 + fi + done + + for arg in [$]0 "[$]@"; do + echo "'[$]arg' \\" >> $1 + done + echo '"[$]@"' >> $1 + chmod +x $1 +]) + +AC_DEFUN(PHP_TIME_R_TYPE,[ +AC_CACHE_CHECK(for type of reentrant time-related functions, ac_cv_time_r_type,[ +AC_TRY_RUN([ +#include + +main() { +char buf[27]; +struct tm t; +time_t old = 0; +int r, s; + +s = gmtime_r(&old, &t); +r = (int) asctime_r(&t, buf, 26); +if (r == s && s == 0) return (0); +return (1); +} +],[ + ac_cv_time_r_type=hpux +],[ + AC_TRY_RUN([ +#include +main() { + struct tm t, *s; + time_t old = 0; + char buf[27], *p; + + s = gmtime_r(&old, &t); + p = asctime_r(&t, buf, 26); + if (p == buf && s == &t) return (0); + return (1); +} + ],[ + ac_cv_time_r_type=irix + ],[ + ac_cv_time_r_type=POSIX + ]) +],[ + ac_cv_time_r_type=POSIX +]) +]) + case $ac_cv_time_r_type in + hpux) AC_DEFINE(PHP_HPUX_TIME_R,1,[Whether you have HP-UX 10.x]) ;; + irix) AC_DEFINE(PHP_IRIX_TIME_R,1,[Whether you have IRIX-style functions]) ;; + esac +]) + +AC_DEFUN(PHP_SUBST,[ + PHP_VAR_SUBST="$PHP_VAR_SUBST $1" +]) + +AC_DEFUN(PHP_SUBST_OLD,[ + PHP_SUBST($1) + AC_SUBST($1) +]) + +AC_DEFUN(PHP_FAST_OUTPUT,[ + PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES $1" +]) + +AC_DEFUN(PHP_MKDIR_P_CHECK,[ + AC_CACHE_CHECK(for working mkdir -p, ac_cv_mkdir_p,[ + test -d conftestdir && rm -rf conftestdir + mkdir -p conftestdir/somedir >/dev/null 2>&1 +dnl `mkdir -p' must be quiet about creating existing directories + mkdir -p conftestdir/somedir >/dev/null 2>&1 + if test "$?" = "0" && test -d conftestdir/somedir; then + ac_cv_mkdir_p=yes + else + ac_cv_mkdir_p=no + fi + rm -rf conftestdir + ]) +]) + +AC_DEFUN(PHP_GEN_CONFIG_VARS,[ + PHP_MKDIR_P_CHECK + echo creating config_vars.mk + > config_vars.mk + for i in $PHP_VAR_SUBST; do + eval echo "$i = \$$i" | sed 's%#%\\#%g' >> config_vars.mk + done +]) + +AC_DEFUN(PHP_GEN_MAKEFILES,[ + $SHELL $srcdir/build/fastgen.sh $srcdir $ac_cv_mkdir_p $BSD_MAKEFILE $1 +]) + +AC_DEFUN(PHP_TM_GMTOFF,[ +AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff, +[AC_TRY_COMPILE([#include +#include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_gmtoff;], + ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)]) + +if test "$ac_cv_struct_tm_gmtoff" = yes; then + AC_DEFINE(HAVE_TM_GMTOFF,1,[whether you have tm_gmtoff in struct tm]) +fi +]) + +dnl PHP_CONFIGURE_PART(MESSAGE) +dnl Idea borrowed from mm +AC_DEFUN(PHP_CONFIGURE_PART,[ + AC_MSG_RESULT() + AC_MSG_RESULT([${T_MD}$1${T_ME}]) +]) + +AC_DEFUN(PHP_PROG_SENDMAIL,[ +AC_PATH_PROG(PROG_SENDMAIL, sendmail,[], $PATH:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib) +if test -n "$PROG_SENDMAIL"; then + AC_DEFINE(HAVE_SENDMAIL,1,[whether you have sendmail]) +fi +]) + +AC_DEFUN(PHP_RUNPATH_SWITCH,[ +dnl check for -R, etc. switch +AC_MSG_CHECKING([if compiler supports -R]) +AC_CACHE_VAL(php_cv_cc_dashr,[ + SAVE_LIBS=$LIBS + LIBS="-R /usr/lib $LIBS" + AC_TRY_LINK([], [], php_cv_cc_dashr=yes, php_cv_cc_dashr=no) + LIBS=$SAVE_LIBS]) +AC_MSG_RESULT([$php_cv_cc_dashr]) +if test $php_cv_cc_dashr = "yes"; then + ld_runpath_switch=-R +else + AC_MSG_CHECKING([if compiler supports -Wl,-rpath,]) + AC_CACHE_VAL(php_cv_cc_rpath,[ + SAVE_LIBS=$LIBS + LIBS="-Wl,-rpath,/usr/lib $LIBS" + AC_TRY_LINK([], [], php_cv_cc_rpath=yes, php_cv_cc_rpath=no) + LIBS=$SAVE_LIBS]) + AC_MSG_RESULT([$php_cv_cc_rpath]) + if test $php_cv_cc_rpath = "yes"; then + ld_runpath_switch=-Wl,-rpath, + else + dnl something innocuous + ld_runpath_switch=-L + fi +fi +]) + +AC_DEFUN(PHP_STRUCT_FLOCK,[ +AC_CACHE_CHECK(for struct flock,ac_cv_struct_flock, + AC_TRY_COMPILE([ +#include +#include + ], + [struct flock x;], + [ + ac_cv_struct_flock=yes + ],[ + ac_cv_struct_flock=no + ]) +) +if test "$ac_cv_struct_flock" = "yes" ; then + AC_DEFINE(HAVE_STRUCT_FLOCK, 1,[whether you have struct flock]) +fi +]) + +AC_DEFUN(PHP_SOCKLEN_T,[ +AC_CACHE_CHECK(for socklen_t,ac_cv_socklen_t, + AC_TRY_COMPILE([ +#include +#include +],[ +socklen_t x; +],[ + ac_cv_socklen_t=yes +],[ + ac_cv_socklen_t=no +])) +if test "$ac_cv_socklen_t" = "yes"; then + AC_DEFINE(HAVE_SOCKLEN_T, 1, [Whether you have socklen_t]) +fi +]) + +dnl +dnl PHP_SET_SYM_FILE(path) +dnl +dnl set the path of the file which contains the symbol export list +dnl +AC_DEFUN(PHP_SET_SYM_FILE, +[ + PHP_SYM_FILE=$1 +]) + +dnl +dnl PHP_BUILD_THREAD_SAFE +dnl +AC_DEFUN(PHP_BUILD_THREAD_SAFE,[ + enable_experimental_zts=yes + if test "$pthreads_working" != "yes"; then + AC_MSG_ERROR([ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads.]) + fi +]) + +AC_DEFUN(PHP_REQUIRE_CXX,[ + if test -z "$php_cxx_done"; then + AC_PROG_CXX + AC_PROG_CXXCPP + php_cxx_done=yes + fi +]) + +dnl +dnl PHP_BUILD_SHARED +dnl +AC_DEFUN(PHP_BUILD_SHARED,[ + php_build_target=shared +]) + +dnl +dnl PHP_BUILD_STATIC +dnl +AC_DEFUN(PHP_BUILD_STATIC,[ + php_build_target=static +]) + +dnl +dnl PHP_BUILD_PROGRAM +dnl +AC_DEFUN(PHP_BUILD_PROGRAM,[ + php_build_target=program +]) + +dnl +dnl AC_PHP_ONCE(namespace, variable, code) +dnl +dnl execute code, if variable is not set in namespace +dnl +AC_DEFUN(AC_PHP_ONCE,[ + changequote({,}) + unique=`echo $2|sed 's/[^a-zA-Z0-9]/_/g'` + changequote([,]) + cmd="echo $ac_n \"\$$1$unique$ac_c\"" + if test -n "$unique" && test "`eval $cmd`" = "" ; then + eval "$1$unique=set" + $3 + fi +]) + +dnl +dnl PHP_EXPAND_PATH(path, variable) +dnl +dnl expands path to an absolute path and assigns it to variable +dnl +AC_DEFUN(PHP_EXPAND_PATH,[ + if test -z "$1" || echo "$1" | grep '^/' >/dev/null ; then + $2=$1 + else + changequote({,}) + ep_dir="`echo $1|sed 's%/*[^/][^/]*/*$%%'`" + changequote([,]) + ep_realdir="`(cd \"$ep_dir\" && pwd)`" + $2="$ep_realdir/`basename \"$1\"`" + fi +]) + +dnl +dnl PHP_ADD_LIBPATH(path[, shared-libadd]) +dnl +dnl add a library to linkpath/runpath +dnl +AC_DEFUN(PHP_ADD_LIBPATH,[ + if test "$1" != "/usr/lib"; then + PHP_EXPAND_PATH($1, ai_p) + if test "$ext_shared" = "yes" && test -n "$2"; then + $2="-R$1 -L$1 [$]$2" + else + AC_PHP_ONCE(LIBPATH, $ai_p, [ + test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" + LDFLAGS="$LDFLAGS -L$ai_p" + PHP_RPATHS="$PHP_RPATHS $ai_p" + ]) + fi + fi +]) + +dnl +dnl PHP_BUILD_RPATH() +dnl +dnl builds RPATH from PHP_RPATHS +dnl +AC_DEFUN(PHP_BUILD_RPATH,[ + if test "$PHP_RPATH" = "yes" && test -n "$PHP_RPATHS"; then + OLD_RPATHS="$PHP_RPATHS" + unset PHP_RPATHS + for i in $OLD_RPATHS; do + PHP_LDFLAGS="$PHP_LDFLAGS -L$i" + PHP_RPATHS="$PHP_RPATHS -R $i" + NATIVE_RPATHS="$NATIVE_RPATHS $ld_runpath_switch$i" + done + fi +]) + +dnl +dnl PHP_ADD_INCLUDE(path [,before]) +dnl +dnl add an include path. +dnl if before is 1, add in the beginning of INCLUDES. +dnl +AC_DEFUN(PHP_ADD_INCLUDE,[ + if test "$1" != "/usr/include"; then + PHP_EXPAND_PATH($1, ai_p) + AC_PHP_ONCE(INCLUDEPATH, $ai_p, [ + if test "$2"; then + INCLUDES="-I$ai_p $INCLUDES" + else + INCLUDES="$INCLUDES -I$ai_p" + fi + ]) + fi +]) + +AC_DEFUN(PHP_X_ADD_LIBRARY,[ + ifelse($2,,$3="-l$1 [$]$3", $3="[$]$3 -l$1") +]) + +dnl +dnl PHP_ADD_LIBRARY(library[, append[, shared-libadd]]) +dnl +dnl add a library to the link line +dnl +AC_DEFUN(PHP_ADD_LIBRARY,[ + case $1 in + c|c_r|pthread*) ;; + *) +ifelse($3,,[ + PHP_X_ADD_LIBRARY($1,$2,LIBS) +],[ + if test "$ext_shared" = "yes"; then + PHP_X_ADD_LIBRARY($1,$2,$3) + else + PHP_ADD_LIBRARY($1,$2) + fi +]) + ;; + esac +]) + +dnl +dnl PHP_ADD_LIBRARY_DEFER(library[, append[, shared-libadd]]) +dnl +dnl add a library to the link line (deferred) +dnl +AC_DEFUN(PHP_ADD_LIBRARY_DEFER,[ + case $1 in + c|c_r|pthread*) ;; + *) +ifelse($3,,[ + PHP_X_ADD_LIBRARY($1,$2,DLIBS) +],[ + if test "$ext_shared" = "yes"; then + PHP_X_ADD_LIBRARY($1,$2,$3) + else + PHP_ADD_LIBRARY_DEFER($1,$2) + fi +]) + ;; + esac +]) + +dnl +dnl PHP_ADD_LIBRARY_WITH_PATH(library, path[, shared-libadd]) +dnl +dnl add a library to the link line and path to linkpath/runpath. +dnl if shared-libadd is not empty and $ext_shared is yes, +dnl shared-libadd will be assigned the library information +dnl +AC_DEFUN(PHP_ADD_LIBRARY_WITH_PATH,[ +ifelse($3,,[ + if test -n "$2"; then + PHP_ADD_LIBPATH($2) + fi + PHP_ADD_LIBRARY($1) +],[ + if test "$ext_shared" = "yes"; then + $3="-l$1 [$]$3" + if test -n "$2"; then + PHP_ADD_LIBPATH($2,$3) + fi + else + PHP_ADD_LIBRARY_WITH_PATH($1,$2) + fi +]) +]) + +dnl +dnl PHP_ADD_LIBRARY_DEFER_WITH_PATH(library, path) +dnl +dnl add a library to the link line (deferred) +dnl and path to linkpath/runpath (not deferred) +dnl +AC_DEFUN(PHP_ADD_LIBRARY_DEFER_WITH_PATH,[ + PHP_ADD_LIBPATH($2) + PHP_ADD_LIBRARY_DEFER($1) +]) + +dnl +dnl Set libtool variable +dnl +AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[ + LIBTOOL='$(SHELL) $(top_builddir)/libtool $1' +]) + +dnl +dnl Check for cc option +dnl +AC_DEFUN(PHP_CHECK_CC_OPTION,[ + echo "main(){return 0;}" > conftest.$ac_ext + opt=$1 + changequote({,}) + var=`echo $opt|sed 's/[^a-zA-Z0-9]/_/g'` + changequote([,]) + AC_MSG_CHECKING([if compiler supports -$1 really]) + ac_php_compile="${CC-cc} -$opt -o conftest $CFLAGS $CPPFLAGS conftest.$ac_ext 2>&1" + if eval $ac_php_compile 2>&1 | egrep "$opt" > /dev/null 2>&1 ; then + eval php_cc_$var=no + AC_MSG_RESULT([no]) + else + if eval ./conftest 2>/dev/null ; then + eval php_cc_$var=yes + AC_MSG_RESULT([yes]) + else + eval php_cc_$var=no + AC_MSG_RESULT([no]) + fi + fi +]) + +AC_DEFUN(PHP_REGEX,[ + +if test "$REGEX_TYPE" = "php"; then + REGEX_LIB=regex/libregex.la + REGEX_DIR=regex + AC_DEFINE(HSREGEX,1,[ ]) + AC_DEFINE(REGEX,1,[ ]) + PHP_FAST_OUTPUT(regex/Makefile) +elif test "$REGEX_TYPE" = "system"; then + AC_DEFINE(REGEX,0,[ ]) +fi + +AC_MSG_CHECKING([which regex library to use]) +AC_MSG_RESULT([$REGEX_TYPE]) + +PHP_SUBST(REGEX_DIR) +PHP_SUBST(REGEX_LIB) +PHP_SUBST(HSREGEX) +]) + +dnl +dnl See if we have broken header files like SunOS has. +dnl +AC_DEFUN(PHP_MISSING_FCLOSE_DECL,[ + AC_MSG_CHECKING([for fclose declaration]) + AC_TRY_COMPILE([#include ],[int (*func)() = fclose],[ + AC_DEFINE(MISSING_FCLOSE_DECL,0,[ ]) + AC_MSG_RESULT([ok]) + ],[ + AC_DEFINE(MISSING_FCLOSE_DECL,1,[ ]) + AC_MSG_RESULT([missing]) + ]) +]) + +dnl +dnl Check for broken sprintf() +dnl +AC_DEFUN(PHP_AC_BROKEN_SPRINTF,[ + AC_CACHE_CHECK(whether sprintf is broken, ac_cv_broken_sprintf,[ + AC_TRY_RUN([main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }],[ + ac_cv_broken_sprintf=no + ],[ + ac_cv_broken_sprintf=yes + ],[ + ac_cv_broken_sprintf=no + ]) + ]) + if test "$ac_cv_broken_sprintf" = "yes"; then + AC_DEFINE(PHP_BROKEN_SPRINTF, 1, [ ]) + else + AC_DEFINE(PHP_BROKEN_SPRINTF, 0, [ ]) + fi +]) + +dnl +dnl PHP_EXTENSION(extname [, shared [,sapi_class]]) +dnl +dnl Includes an extension in the build. +dnl +dnl "extname" is the name of the ext/ subdir where the extension resides +dnl "shared" can be set to "shared" or "yes" to build the extension as +dnl a dynamically loadable library. Optional parameter "sapi_class" can +dnl be set to "cli" to mark extension build only with CLI or CGI sapi's. +dnl If "nocli" is passed the extension will be built only with a non-cli +dnl sapi. +dnl +AC_DEFUN(PHP_EXTENSION,[ + EXT_SUBDIRS="$EXT_SUBDIRS $1" + + if test -d "$abs_srcdir/ext/$1"; then +dnl ---------------------------------------------- Internal Module + ext_builddir=ext/$1 + ext_srcdir=$abs_srcdir/ext/$1 + else +dnl ---------------------------------------------- External Module + ext_builddir=. + ext_srcdir=$abs_srcdir + fi + + if test "$2" != "shared" && test "$2" != "yes" && test "$3" != "cli"; then +dnl ---------------------------------------------- Static module + LIB_BUILD($ext_builddir) + EXT_LTLIBS="$EXT_LTLIBS $abs_builddir/$ext_builddir/lib$1.la" + EXT_STATIC="$EXT_STATIC $1" + if test "$3" != "nocli"; then + EXT_CLI_LTLIBS="$EXT_CLI_LTLIBS $abs_builddir/$ext_builddir/lib$1.la" + EXT_CLI_STATIC="$EXT_CLI_STATIC $1" + fi + else + if test "$2" = "shared" || test "$2" = "yes"; then +dnl ---------------------------------------------- Shared module + LIB_BUILD($ext_builddir,yes) + AC_DEFINE_UNQUOTED([COMPILE_DL_]translit($1,a-z-,A-Z_), 1, Whether to build $1 as dynamic module) + fi + fi + + if test "$2" != "shared" && test "$2" != "yes" && test "$3" = "cli"; then +dnl ---------------------------------------------- CLI only static module + LIB_BUILD($ext_builddir) + if test "$PHP_SAPI" = "cgi"; then + EXT_LTLIBS="$EXT_LTLIBS $abs_builddir/$ext_builddir/lib$1.la" + EXT_STATIC="$EXT_STATIC $1" + fi + EXT_CLI_LTLIBS="$EXT_CLI_LTLIBS $abs_builddir/$ext_builddir/lib$1.la" + EXT_CLI_STATIC="$EXT_CLI_STATIC $1" + fi + + PHP_FAST_OUTPUT($ext_builddir/Makefile) +]) + +dnl +dnl Solaris requires main code to be position independent in order +dnl to let shared objects find symbols. Weird. Ugly. +dnl +dnl Must be run after all --with-NN options that let the user +dnl choose dynamic extensions, and after the gcc test. +dnl +AC_DEFUN(PHP_SOLARIS_PIC_WEIRDNESS,[ + AC_MSG_CHECKING([whether -fPIC is required]) + if test -n "$EXT_SHARED"; then + os=`uname -sr 2>/dev/null` + case $os in + "SunOS 5.6"|"SunOS 5.7") + case $CC in + gcc*|egcs*) CFLAGS="$CFLAGS -fPIC";; + *) CFLAGS="$CFLAGS -fpic";; + esac + AC_MSG_RESULT([yes]);; + *) + AC_MSG_RESULT([no]);; + esac + else + AC_MSG_RESULT([no]) + fi +]) + +dnl +dnl Checks whether $withval is "shared" or starts with "shared,XXX" +dnl and sets $shared to "yes" or "no", and removes "shared,?" stuff +dnl from $withval. +dnl +AC_DEFUN(PHP_WITH_SHARED,[ + case $withval in + shared) + shared=yes + withval=yes + ;; + shared,*) + shared=yes + withval=`echo $withval | sed -e 's/^shared,//'` + ;; + *) + shared=no + ;; + esac + if test -n "$php_always_shared"; then + shared=yes + fi +]) + +dnl The problem is that the default compilation flags in Solaris 2.6 won't +dnl let programs access large files; you need to tell the compiler that +dnl you actually want your programs to work on large files. For more +dnl details about this brain damage please see: +dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html + +dnl Written by Paul Eggert . + +AC_DEFUN(PHP_SYS_LFS, +[dnl + # If available, prefer support for large files unless the user specified + # one of the CPPFLAGS, LDFLAGS, or LIBS variables. + AC_MSG_CHECKING([whether large file support needs explicit enabling]) + ac_getconfs='' + ac_result=yes + ac_set='' + ac_shellvars='CPPFLAGS LDFLAGS LIBS' + for ac_shellvar in $ac_shellvars; do + case $ac_shellvar in + CPPFLAGS) ac_lfsvar=LFS_CFLAGS ;; + *) ac_lfsvar=LFS_$ac_shellvar ;; + esac + eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar + (getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; } + ac_getconf=`getconf $ac_lfsvar` + ac_getconfs=$ac_getconfs$ac_getconf + eval ac_test_$ac_shellvar=\$ac_getconf + done + case "$ac_result$ac_getconfs" in + yes) ac_result=no ;; + esac + case "$ac_result$ac_set" in + yes?*) ac_result="yes, but $ac_set is already set, so use its settings" + esac + AC_MSG_RESULT([$ac_result]) + case $ac_result in + yes) + for ac_shellvar in $ac_shellvars; do + eval $ac_shellvar=\$ac_test_$ac_shellvar + done ;; + esac +]) + +AC_DEFUN(PHP_SOCKADDR_SA_LEN,[ + AC_CACHE_CHECK([for field sa_len in struct sockaddr],ac_cv_sockaddr_sa_len,[ + AC_TRY_COMPILE([#include +#include ], + [struct sockaddr s; s.sa_len;], + [ac_cv_sockaddr_sa_len=yes + AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[ ])], + [ac_cv_sockaddr_sa_len=no]) + ]) +]) + + +dnl ## PHP_OUTPUT(file) +dnl ## adds "file" to the list of files generated by AC_OUTPUT +dnl ## This macro can be used several times. +AC_DEFUN(PHP_OUTPUT,[ + PHP_OUTPUT_FILES="$PHP_OUTPUT_FILES $1" +]) + +AC_DEFUN(PHP_DECLARED_TIMEZONE,[ + AC_CACHE_CHECK(for declared timezone, ac_cv_declared_timezone,[ + AC_TRY_COMPILE([ +#include +#include +#ifdef HAVE_SYS_TIME_H +#include +#endif +],[ + time_t foo = (time_t) timezone; +],[ + ac_cv_declared_timezone=yes +],[ + ac_cv_declared_timezone=no +])]) + if test "$ac_cv_declared_timezone" = "yes"; then + AC_DEFINE(HAVE_DECLARED_TIMEZONE, 1, [Whether system headers declare timezone]) + fi +]) + +AC_DEFUN(PHP_EBCDIC,[ + AC_CACHE_CHECK([whether system uses EBCDIC],ac_cv_ebcdic,[ + AC_TRY_RUN( [ +int main(void) { + return (unsigned char)'A' != (unsigned char)0xC1; +} +],[ + ac_cv_ebcdic=yes +],[ + ac_cv_ebcdic=no +],[ + ac_cv_ebcdic=no +])]) + if test "$ac_cv_ebcdic" = "yes"; then + AC_DEFINE(CHARSET_EBCDIC,1, [Define if system uses EBCDIC]) + fi +]) + +AC_DEFUN(AC_ADD_LIBPATH, [indir([PHP_ADD_LIBPATH], $@)]) +AC_DEFUN(AC_ADD_LIBRARY, [indir([PHP_ADD_LIBRARY], $@)]) +AC_DEFUN(AC_ADD_LIBRARY_WITH_PATH, [indir([PHP_ADD_LIBRARY_WITH_PATH], $@)]) +AC_DEFUN(AC_ADD_INCLUDE, [indir([PHP_ADD_INCLUDE], $@)]) + +AC_DEFUN(PHP_FOPENCOOKIE,[ + AC_CHECK_FUNC(fopencookie, [ have_glibc_fopencookie=yes ]) + + if test "$have_glibc_fopencookie" = "yes" ; then + dnl this comes in two flavors: + dnl newer glibcs (since 2.1.2 ? ) + dnl have a type called cookie_io_functions_t + AC_TRY_COMPILE([ #define _GNU_SOURCE + #include + ], + [ cookie_io_functions_t cookie; ], + [ have_cookie_io_functions_t=yes ], + [] ) + + if test "$have_cookie_io_functions_t" = "yes" ; then + cookie_io_functions_t=cookie_io_functions_t + have_fopen_cookie=yes + else + dnl older glibc versions (up to 2.1.2 ?) + dnl call it _IO_cookie_io_functions_t + AC_TRY_COMPILE([ #define _GNU_SOURCE + #include + ], + [ _IO_cookie_io_functions_t cookie; ], + [ have_IO_cookie_io_functions_t=yes ], + [] ) + if test "$have_cookie_io_functions_t" = "yes" ; then + cookie_io_functions_t=_IO_cookie_io_functions_t + have_fopen_cookie=yes + fi + fi + + if test "$have_fopen_cookie" = "yes" ; then + AC_DEFINE(HAVE_FOPENCOOKIE, 1, [ ]) + AC_DEFINE_UNQUOTED(COOKIE_IO_FUNCTIONS_T, $cookie_io_functions_t, [ ]) + fi + + fi +]) + + +dnl +dnl PHP_CHECK_LIBRARY(library, function [, action-found [, action-not-found [, extra-libs]]]) +dnl +dnl Wrapper for AC_CHECK_LIB +dnl +AC_DEFUN(PHP_CHECK_LIBRARY, [ + save_old_LDFLAGS=$LDFLAGS + LDFLAGS="$5 $LDFLAGS" + AC_CHECK_LIB([$1],[$2],[ + LDFLAGS=$save_old_LDFLAGS + $3 + ],[ + LDFLAGS=$save_old_LDFLAGS + $4 + ])dnl +]) + + +dnl +dnl PHP_SETUP_ICONV(shared-add [, action-found [, action-not-found]]) +dnl +dnl Common setup macro for iconv +dnl +AC_DEFUN(PHP_SETUP_ICONV, [ + found_iconv=no + unset ICONV_DIR + + dnl + dnl Check libc first if no path is provided in --with-iconv + dnl + if test "$PHP_ICONV" = "yes"; then + AC_CHECK_FUNC(iconv, [ + found_iconv=yes + ],[ + AC_CHECK_FUNC(libiconv,[ + AC_DEFINE(HAVE_LIBICONV, 1, [ ]) + found_iconv=yes + ]) + ]) + fi + + dnl + dnl Check external libs for iconv funcs + dnl + if test "$found_iconv" = "no"; then + + for i in $PHP_ICONV /usr/local /usr; do + if test -r $i/include/giconv.h; then + AC_DEFINE(HAVE_GICONV_H, 1, [ ]) + ICONV_DIR=$i + iconv_lib_name=giconv + break + elif test -r $i/include/iconv.h; then + ICONV_DIR=$i + iconv_lib_name=iconv + break + fi + done + + if test -z "$ICONV_DIR"; then + AC_MSG_ERROR([Please specify the install prefix of iconv with --with-iconv=]) + fi + + if test -f $ICONV_DIR/lib/lib$iconv_lib_name.a || + test -f $ICONV_DIR/lib/lib$iconv_lib_name.$SHLIB_SUFFIX_NAME + then + PHP_CHECK_LIBRARY($iconv_lib_name, libiconv, [ + found_iconv=yes + AC_DEFINE(HAVE_LIBICONV, 1, [ ]) + ], [ + PHP_CHECK_LIBRARY($iconv_lib_name, iconv, [ + found_iconv=yes + ], [], [ + -L$ICONV_DIR/lib + ]) + ], [ + -L$ICONV_DIR/lib + ]) + fi + fi + + if test "$found_iconv" = "yes"; then + AC_DEFINE(HAVE_ICONV, 1, [ ]) + if test -n "$ICONV_DIR"; then + PHP_ADD_LIBRARY_WITH_PATH($iconv_lib_name, $ICONV_DIR/lib, $1) + PHP_ADD_INCLUDE($ICONV_DIR/include) + fi + $2 +ifelse([$3],[],,[else $3]) + fi +]) + + +dnl +dnl PHP_AP_EXTRACT_VERSION(/path/httpd) +dnl This macro is used to get a comparable +dnl version for apache1/2. +dnl +AC_DEFUN(PHP_AP_EXTRACT_VERSION,[ + ac_output=`$1 -v 2>&1` + ac_IFS=$IFS +IFS="- /. +" + set $ac_output + IFS=$ac_IFS + + APACHE_VERSION=`expr [$]4 \* 1000000 + [$]5 \* 1000 + [$]6` +]) diff --git a/contrib/php/aclocal.m4 b/contrib/php/aclocal.m4 new file mode 100644 index 0000000..1a1a829 --- /dev/null +++ b/contrib/php/aclocal.m4 @@ -0,0 +1,4927 @@ +# aclocal.m4 generated automatically by aclocal 1.5 + +# Copyright 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +dnl $Id: acinclude.m4,v 1.157.2.8 2002/07/29 02:15:18 sniper Exp $ +dnl +dnl This file contains local autoconf functions. + +sinclude(dynlib.m4) + +dnl +dnl Disable building CLI +dnl +AC_DEFUN(PHP_DISABLE_CLI,[ + disable_cli=1 +]) + +dnl +dnl Separator into the configure --help display. +dnl +AC_DEFUN(PHP_HELP_SEPARATOR,[ +AC_ARG_ENABLE([],[ +$1 +],[]) +]) + +dnl +dnl PHP_TARGET_RDYNAMIC +dnl +dnl Checks whether -rdynamic is supported by the compiler. This +dnl is necessary for some targets to populate the global symbol +dnl table. Otherwise, dynamic modules would not be able to resolve +dnl PHP-related symbols. +dnl +dnl If successful, adds -rdynamic to PHP_LDFLAGS. +dnl +AC_DEFUN(PHP_TARGET_RDYNAMIC,[ + if test -n "$GCC"; then + dnl we should use a PHP-specific macro here + TSRM_CHECK_GCC_ARG(-rdynamic, gcc_rdynamic=yes) + if test "$gcc_rdynamic" = "yes"; then + PHP_LDFLAGS="$PHP_LDFLAGS -rdynamic" + fi + fi +]) + +AC_DEFUN(PHP_REMOVE_USR_LIB,[ + unset ac_new_flags + for i in [$]$1; do + case [$]i in + -L/usr/lib|-L/usr/lib/) ;; + *) ac_new_flags="[$]ac_new_flags [$]i" ;; + esac + done + $1=[$]ac_new_flags +]) + +AC_DEFUN(PHP_SETUP_OPENSSL,[ + if test "$PHP_OPENSSL" = "no"; then + PHP_OPENSSL="/usr/local/ssl /usr/local /usr /usr/local/openssl" + fi + + for i in $PHP_OPENSSL; do + if test -r $i/include/openssl/evp.h; then + OPENSSL_DIR=$i + OPENSSL_INC=$i/include + fi + done + + if test -z "$OPENSSL_DIR"; then + AC_MSG_ERROR([Cannot find OpenSSL's ]) + fi + + old_CPPFLAGS=$CPPFLAGS + CPPFLAGS=-I$OPENSSL_INC + AC_MSG_CHECKING([for OpenSSL version]) + AC_EGREP_CPP(yes,[ + #include + #if OPENSSL_VERSION_NUMBER >= 0x0090500fL + yes + #endif + ],[ + AC_MSG_RESULT([>= 0.9.5]) + ],[ + AC_MSG_ERROR([OpenSSL version 0.9.5 or greater required.]) + ]) + CPPFLAGS=$old_CPPFLAGS + + PHP_ADD_LIBPATH($OPENSSL_DIR/lib) + + AC_CHECK_LIB(crypto, CRYPTO_free, [:],[ + AC_MSG_ERROR([libcrypto not found!]) + ]) + + AC_CHECK_LIB(ssl, SSL_CTX_set_ssl_version, [:],[ + AC_MSG_ERROR([libssl not found!]) + ]) + PHP_ADD_INCLUDE($OPENSSL_INC) +]) + +dnl PHP_EVAL_LIBLINE(LINE, SHARED-LIBADD) +dnl +dnl Use this macro, if you need to add libraries and or library search +dnl paths to the PHP build system which are only given in compiler +dnl notation. +dnl +AC_DEFUN(PHP_EVAL_LIBLINE,[ + for ac_i in $1; do + case $ac_i in + -l*) + ac_ii=`echo $ac_i|cut -c 3-` + PHP_ADD_LIBRARY($ac_ii,1,$2) + ;; + -L*) + ac_ii=`echo $ac_i|cut -c 3-` + PHP_ADD_LIBPATH($ac_ii,$2) + ;; + esac + done +]) + +dnl PHP_EVAL_INCLINE(LINE) +dnl +dnl Use this macro, if you need to add header search paths to the PHP +dnl build system which are only given in compiler notation. +dnl +AC_DEFUN(PHP_EVAL_INCLINE,[ + for ac_i in $1; do + case $ac_i in + -I*) + ac_ii=`echo $ac_i|cut -c 3-` + PHP_ADD_INCLUDE($ac_ii) + ;; + esac + done +]) + +AC_DEFUN(PHP_READDIR_R_TYPE,[ + dnl HAVE_READDIR_R is also defined by libmysql + AC_CHECK_FUNC(readdir_r,ac_cv_func_readdir_r=yes,ac_cv_func_readdir=no) + if test "$ac_cv_func_readdir_r" = "yes"; then + AC_CACHE_CHECK(for type of readdir_r, ac_cv_what_readdir_r,[ + AC_TRY_RUN([ +#define _REENTRANT +#include +#include + +#ifndef PATH_MAX +#define PATH_MAX 1024 +#endif + +main() { + DIR *dir; + char entry[sizeof(struct dirent)+PATH_MAX]; + struct dirent *pentry = (struct dirent *) &entry; + + dir = opendir("/"); + if (!dir) + exit(1); + if (readdir_r(dir, (struct dirent *) entry, &pentry) == 0) + exit(0); + exit(1); +} + ],[ + ac_cv_what_readdir_r=POSIX + ],[ + AC_TRY_CPP([ +#define _REENTRANT +#include +#include +int readdir_r(DIR *, struct dirent *); + ],[ + ac_cv_what_readdir_r=old-style + ],[ + ac_cv_what_readdir_r=none + ]) + ],[ + ac_cv_what_readdir_r=none + ]) + ]) + case $ac_cv_what_readdir_r in + POSIX) + AC_DEFINE(HAVE_POSIX_READDIR_R,1,[whether you have POSIX readdir_r]);; + old-style) + AC_DEFINE(HAVE_OLD_READDIR_R,1,[whether you have old-style readdir_r]);; + esac + fi +]) + +AC_DEFUN(PHP_SHLIB_SUFFIX_NAME,[ + PHP_SUBST(SHLIB_SUFFIX_NAME) + SHLIB_SUFFIX_NAME=so + case $host_alias in + *hpux*) + SHLIB_SUFFIX_NAME=sl + ;; + *darwin*) + SHLIB_SUFFIX_NAME=dylib + ;; + esac +]) + +AC_DEFUN(PHP_DEBUG_MACRO,[ + DEBUG_LOG=$1 + cat >$1 <conftest.$ac_ext <>$1 2>&1 + rm -fr conftest* +]) + +AC_DEFUN(PHP_MISSING_PREAD_DECL,[ + AC_CACHE_CHECK(whether pread works without custom declaration,ac_cv_pread,[ + AC_TRY_COMPILE([#include ],[size_t (*func)() = pread],[ + ac_cv_pread=yes + ],[ + echo test > conftest_in + AC_TRY_RUN([ +#include +#include +#include + main() { char buf[3]; return !(pread(open("conftest_in", O_RDONLY), buf, 2, 0) == 2); } + ],[ + ac_cv_pread=yes + ],[ + echo test > conftest_in + AC_TRY_RUN([ +#include +#include +#include +#include + ssize_t pread(int, void *, size_t, off64_t); + main() { char buf[3]; return !(pread(open("conftest_in", O_RDONLY), buf, 2, 0) == 2); } + ],[ + ac_cv_pread=64 + ],[ + ac_cv_pread=no + ]) + ],[ + ac_cv_pread=no + ]) + ]) + ]) + case $ac_cv_pread in + no) ac_cv_func_pread=no;; + 64) AC_DEFINE(PHP_PREAD_64, 1, [whether pread64 is default]);; + esac +]) + +AC_DEFUN(PHP_MISSING_PWRITE_DECL,[ + AC_CACHE_CHECK(whether pwrite works without custom declaration,ac_cv_pwrite,[ + AC_TRY_COMPILE([#include ],[size_t (*func)() = pwrite],[ + ac_cv_pwrite=yes + ],[ + AC_TRY_RUN([ +#include +#include +#include + main() { return !(pwrite(open("conftest_out", O_WRONLY|O_CREAT, 0600), "Ok", 2, 0) == 2); } + ],[ + ac_cv_pwrite=yes + ],[ + AC_TRY_RUN([ +#include +#include +#include +#include + ssize_t pwrite(int, void *, size_t, off64_t); + main() { return !(pwrite(open("conftest_out", O_WRONLY|O_CREAT, 0600), "Ok", 2, 0) == 2); } + ],[ + ac_cv_pwrite=64 + ],[ + ac_cv_pwrite=no + ]) + ],[ + ac_cv_pwrite=no + ]) + ]) + ]) + case $ac_cv_pwrite in + no) ac_cv_func_pwrite=no;; + 64) AC_DEFINE(PHP_PWRITE_64, 1, [whether pwrite64 is default]);; + esac +]) + +AC_DEFUN(PHP_MISSING_TIME_R_DECL,[ + AC_MSG_CHECKING([for missing declarations of reentrant functions]) + AC_TRY_COMPILE([#include ],[struct tm *(*func)() = localtime_r],[ + : + ],[ + AC_DEFINE(MISSING_LOCALTIME_R_DECL,1,[Whether localtime_r is declared]) + ]) + AC_TRY_COMPILE([#include ],[struct tm *(*func)() = gmtime_r],[ + : + ],[ + AC_DEFINE(MISSING_GMTIME_R_DECL,1,[Whether gmtime_r is declared]) + ]) + AC_TRY_COMPILE([#include ],[char *(*func)() = asctime_r],[ + : + ],[ + AC_DEFINE(MISSING_ASCTIME_R_DECL,1,[Whether asctime_r is declared]) + ]) + AC_TRY_COMPILE([#include ],[char *(*func)() = ctime_r],[ + : + ],[ + AC_DEFINE(MISSING_CTIME_R_DECL,1,[Whether ctime_r is declared]) + ]) + AC_TRY_COMPILE([#include ],[char *(*func)() = strtok_r],[ + : + ],[ + AC_DEFINE(MISSING_STRTOK_R_DECL,1,[Whether strtok_r is declared]) + ]) + AC_MSG_RESULT([done]) +]) + +dnl +dnl PHP_LIBGCC_LIBPATH(gcc) +dnl Stores the location of libgcc in libgcc_libpath +dnl +AC_DEFUN(PHP_LIBGCC_LIBPATH,[ + changequote({,}) + libgcc_libpath=`$1 --print-libgcc-file-name|sed 's%/*[^/][^/]*$%%'` + changequote([,]) +]) + +AC_DEFUN(PHP_ARG_ANALYZE,[ +case [$]$1 in +shared,*) + ext_output="yes, shared" + ext_shared=yes + $1=`echo "[$]$1"|sed 's/^shared,//'` + ;; +shared) + ext_output="yes, shared" + ext_shared=yes + $1=yes + ;; +no) + ext_output=no + ext_shared=no + ;; +*) + ext_output=yes + ext_shared=no + ;; +esac + +if test "$php_always_shared" = "yes"; then + ext_output="yes, shared" + ext_shared=yes + test "[$]$1" = "no" && $1=yes +fi + +if test -n "$2"; then + AC_MSG_RESULT([$ext_output]) +fi +]) + +dnl +dnl PHP_ARG_WITH(arg-name, check message, help text[, default-val]) +dnl Sets PHP_ARG_NAME either to the user value or to the default value. +dnl default-val defaults to no. This will also set the variable ext_shared, +dnl and will overwrite any previous variable of that name. +dnl +AC_DEFUN(PHP_ARG_WITH,[ +PHP_REAL_ARG_WITH([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z0-9-,A-Z0-9_)) +]) + +AC_DEFUN(PHP_REAL_ARG_WITH,[ +if test -n "$2"; then + AC_MSG_CHECKING([$2]) +fi +AC_ARG_WITH($1,[$3],$5=[$]withval,$5=ifelse($4,,no,$4)) +PHP_ARG_ANALYZE($5,[$2]) +]) + +dnl +dnl PHP_ARG_ENABLE(arg-name, check message, help text[, default-val]) +dnl Sets PHP_ARG_NAME either to the user value or to the default value. +dnl default-val defaults to no. This will also set the variable ext_shared, +dnl and will overwrite any previous variable of that name. +dnl +AC_DEFUN(PHP_ARG_ENABLE,[ +PHP_REAL_ARG_ENABLE([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z-,A-Z_)) +]) + +AC_DEFUN(PHP_REAL_ARG_ENABLE,[ +if test -n "$2"; then + AC_MSG_CHECKING([$2]) +fi +AC_ARG_ENABLE($1,[$3],$5=[$]enableval,$5=ifelse($4,,no,$4)) +PHP_ARG_ANALYZE($5,[$2]) +]) + +AC_DEFUN(PHP_MODULE_PTR,[ + EXTRA_MODULE_PTRS="$EXTRA_MODULE_PTRS $1," +]) + +AC_DEFUN(PHP_CONFIG_NICE,[ + rm -f $1 + cat >$1<> $1 + fi + done + + for arg in [$]0 "[$]@"; do + echo "'[$]arg' \\" >> $1 + done + echo '"[$]@"' >> $1 + chmod +x $1 +]) + +AC_DEFUN(PHP_TIME_R_TYPE,[ +AC_CACHE_CHECK(for type of reentrant time-related functions, ac_cv_time_r_type,[ +AC_TRY_RUN([ +#include + +main() { +char buf[27]; +struct tm t; +time_t old = 0; +int r, s; + +s = gmtime_r(&old, &t); +r = (int) asctime_r(&t, buf, 26); +if (r == s && s == 0) return (0); +return (1); +} +],[ + ac_cv_time_r_type=hpux +],[ + AC_TRY_RUN([ +#include +main() { + struct tm t, *s; + time_t old = 0; + char buf[27], *p; + + s = gmtime_r(&old, &t); + p = asctime_r(&t, buf, 26); + if (p == buf && s == &t) return (0); + return (1); +} + ],[ + ac_cv_time_r_type=irix + ],[ + ac_cv_time_r_type=POSIX + ]) +],[ + ac_cv_time_r_type=POSIX +]) +]) + case $ac_cv_time_r_type in + hpux) AC_DEFINE(PHP_HPUX_TIME_R,1,[Whether you have HP-UX 10.x]) ;; + irix) AC_DEFINE(PHP_IRIX_TIME_R,1,[Whether you have IRIX-style functions]) ;; + esac +]) + +AC_DEFUN(PHP_SUBST,[ + PHP_VAR_SUBST="$PHP_VAR_SUBST $1" +]) + +AC_DEFUN(PHP_SUBST_OLD,[ + PHP_SUBST($1) + AC_SUBST($1) +]) + +AC_DEFUN(PHP_FAST_OUTPUT,[ + PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES $1" +]) + +AC_DEFUN(PHP_MKDIR_P_CHECK,[ + AC_CACHE_CHECK(for working mkdir -p, ac_cv_mkdir_p,[ + test -d conftestdir && rm -rf conftestdir + mkdir -p conftestdir/somedir >/dev/null 2>&1 +dnl `mkdir -p' must be quiet about creating existing directories + mkdir -p conftestdir/somedir >/dev/null 2>&1 + if test "$?" = "0" && test -d conftestdir/somedir; then + ac_cv_mkdir_p=yes + else + ac_cv_mkdir_p=no + fi + rm -rf conftestdir + ]) +]) + +AC_DEFUN(PHP_GEN_CONFIG_VARS,[ + PHP_MKDIR_P_CHECK + echo creating config_vars.mk + > config_vars.mk + for i in $PHP_VAR_SUBST; do + eval echo "$i = \$$i" | sed 's%#%\\#%g' >> config_vars.mk + done +]) + +AC_DEFUN(PHP_GEN_MAKEFILES,[ + $SHELL $srcdir/build/fastgen.sh $srcdir $ac_cv_mkdir_p $BSD_MAKEFILE $1 +]) + +AC_DEFUN(PHP_TM_GMTOFF,[ +AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff, +[AC_TRY_COMPILE([#include +#include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_gmtoff;], + ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)]) + +if test "$ac_cv_struct_tm_gmtoff" = yes; then + AC_DEFINE(HAVE_TM_GMTOFF,1,[whether you have tm_gmtoff in struct tm]) +fi +]) + +dnl PHP_CONFIGURE_PART(MESSAGE) +dnl Idea borrowed from mm +AC_DEFUN(PHP_CONFIGURE_PART,[ + AC_MSG_RESULT() + AC_MSG_RESULT([${T_MD}$1${T_ME}]) +]) + +AC_DEFUN(PHP_PROG_SENDMAIL,[ +AC_PATH_PROG(PROG_SENDMAIL, sendmail,[], $PATH:/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib) +if test -n "$PROG_SENDMAIL"; then + AC_DEFINE(HAVE_SENDMAIL,1,[whether you have sendmail]) +fi +]) + +AC_DEFUN(PHP_RUNPATH_SWITCH,[ +dnl check for -R, etc. switch +AC_MSG_CHECKING([if compiler supports -R]) +AC_CACHE_VAL(php_cv_cc_dashr,[ + SAVE_LIBS=$LIBS + LIBS="-R /usr/lib $LIBS" + AC_TRY_LINK([], [], php_cv_cc_dashr=yes, php_cv_cc_dashr=no) + LIBS=$SAVE_LIBS]) +AC_MSG_RESULT([$php_cv_cc_dashr]) +if test $php_cv_cc_dashr = "yes"; then + ld_runpath_switch=-R +else + AC_MSG_CHECKING([if compiler supports -Wl,-rpath,]) + AC_CACHE_VAL(php_cv_cc_rpath,[ + SAVE_LIBS=$LIBS + LIBS="-Wl,-rpath,/usr/lib $LIBS" + AC_TRY_LINK([], [], php_cv_cc_rpath=yes, php_cv_cc_rpath=no) + LIBS=$SAVE_LIBS]) + AC_MSG_RESULT([$php_cv_cc_rpath]) + if test $php_cv_cc_rpath = "yes"; then + ld_runpath_switch=-Wl,-rpath, + else + dnl something innocuous + ld_runpath_switch=-L + fi +fi +]) + +AC_DEFUN(PHP_STRUCT_FLOCK,[ +AC_CACHE_CHECK(for struct flock,ac_cv_struct_flock, + AC_TRY_COMPILE([ +#include +#include + ], + [struct flock x;], + [ + ac_cv_struct_flock=yes + ],[ + ac_cv_struct_flock=no + ]) +) +if test "$ac_cv_struct_flock" = "yes" ; then + AC_DEFINE(HAVE_STRUCT_FLOCK, 1,[whether you have struct flock]) +fi +]) + +AC_DEFUN(PHP_SOCKLEN_T,[ +AC_CACHE_CHECK(for socklen_t,ac_cv_socklen_t, + AC_TRY_COMPILE([ +#include +#include +],[ +socklen_t x; +],[ + ac_cv_socklen_t=yes +],[ + ac_cv_socklen_t=no +])) +if test "$ac_cv_socklen_t" = "yes"; then + AC_DEFINE(HAVE_SOCKLEN_T, 1, [Whether you have socklen_t]) +fi +]) + +dnl +dnl PHP_SET_SYM_FILE(path) +dnl +dnl set the path of the file which contains the symbol export list +dnl +AC_DEFUN(PHP_SET_SYM_FILE, +[ + PHP_SYM_FILE=$1 +]) + +dnl +dnl PHP_BUILD_THREAD_SAFE +dnl +AC_DEFUN(PHP_BUILD_THREAD_SAFE,[ + enable_experimental_zts=yes + if test "$pthreads_working" != "yes"; then + AC_MSG_ERROR([ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads.]) + fi +]) + +AC_DEFUN(PHP_REQUIRE_CXX,[ + if test -z "$php_cxx_done"; then + AC_PROG_CXX + AC_PROG_CXXCPP + php_cxx_done=yes + fi +]) + +dnl +dnl PHP_BUILD_SHARED +dnl +AC_DEFUN(PHP_BUILD_SHARED,[ + php_build_target=shared +]) + +dnl +dnl PHP_BUILD_STATIC +dnl +AC_DEFUN(PHP_BUILD_STATIC,[ + php_build_target=static +]) + +dnl +dnl PHP_BUILD_PROGRAM +dnl +AC_DEFUN(PHP_BUILD_PROGRAM,[ + php_build_target=program +]) + +dnl +dnl AC_PHP_ONCE(namespace, variable, code) +dnl +dnl execute code, if variable is not set in namespace +dnl +AC_DEFUN(AC_PHP_ONCE,[ + changequote({,}) + unique=`echo $2|sed 's/[^a-zA-Z0-9]/_/g'` + changequote([,]) + cmd="echo $ac_n \"\$$1$unique$ac_c\"" + if test -n "$unique" && test "`eval $cmd`" = "" ; then + eval "$1$unique=set" + $3 + fi +]) + +dnl +dnl PHP_EXPAND_PATH(path, variable) +dnl +dnl expands path to an absolute path and assigns it to variable +dnl +AC_DEFUN(PHP_EXPAND_PATH,[ + if test -z "$1" || echo "$1" | grep '^/' >/dev/null ; then + $2=$1 + else + changequote({,}) + ep_dir="`echo $1|sed 's%/*[^/][^/]*/*$%%'`" + changequote([,]) + ep_realdir="`(cd \"$ep_dir\" && pwd)`" + $2="$ep_realdir/`basename \"$1\"`" + fi +]) + +dnl +dnl PHP_ADD_LIBPATH(path[, shared-libadd]) +dnl +dnl add a library to linkpath/runpath +dnl +AC_DEFUN(PHP_ADD_LIBPATH,[ + if test "$1" != "/usr/lib"; then + PHP_EXPAND_PATH($1, ai_p) + if test "$ext_shared" = "yes" && test -n "$2"; then + $2="-R$1 -L$1 [$]$2" + else + AC_PHP_ONCE(LIBPATH, $ai_p, [ + test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$ai_p" + LDFLAGS="$LDFLAGS -L$ai_p" + PHP_RPATHS="$PHP_RPATHS $ai_p" + ]) + fi + fi +]) + +dnl +dnl PHP_BUILD_RPATH() +dnl +dnl builds RPATH from PHP_RPATHS +dnl +AC_DEFUN(PHP_BUILD_RPATH,[ + if test "$PHP_RPATH" = "yes" && test -n "$PHP_RPATHS"; then + OLD_RPATHS="$PHP_RPATHS" + unset PHP_RPATHS + for i in $OLD_RPATHS; do + PHP_LDFLAGS="$PHP_LDFLAGS -L$i" + PHP_RPATHS="$PHP_RPATHS -R $i" + NATIVE_RPATHS="$NATIVE_RPATHS $ld_runpath_switch$i" + done + fi +]) + +dnl +dnl PHP_ADD_INCLUDE(path [,before]) +dnl +dnl add an include path. +dnl if before is 1, add in the beginning of INCLUDES. +dnl +AC_DEFUN(PHP_ADD_INCLUDE,[ + if test "$1" != "/usr/include"; then + PHP_EXPAND_PATH($1, ai_p) + AC_PHP_ONCE(INCLUDEPATH, $ai_p, [ + if test "$2"; then + INCLUDES="-I$ai_p $INCLUDES" + else + INCLUDES="$INCLUDES -I$ai_p" + fi + ]) + fi +]) + +AC_DEFUN(PHP_X_ADD_LIBRARY,[ + ifelse($2,,$3="-l$1 [$]$3", $3="[$]$3 -l$1") +]) + +dnl +dnl PHP_ADD_LIBRARY(library[, append[, shared-libadd]]) +dnl +dnl add a library to the link line +dnl +AC_DEFUN(PHP_ADD_LIBRARY,[ + case $1 in + c|c_r|pthread*) ;; + *) +ifelse($3,,[ + PHP_X_ADD_LIBRARY($1,$2,LIBS) +],[ + if test "$ext_shared" = "yes"; then + PHP_X_ADD_LIBRARY($1,$2,$3) + else + PHP_ADD_LIBRARY($1,$2) + fi +]) + ;; + esac +]) + +dnl +dnl PHP_ADD_LIBRARY_DEFER(library[, append[, shared-libadd]]) +dnl +dnl add a library to the link line (deferred) +dnl +AC_DEFUN(PHP_ADD_LIBRARY_DEFER,[ + case $1 in + c|c_r|pthread*) ;; + *) +ifelse($3,,[ + PHP_X_ADD_LIBRARY($1,$2,DLIBS) +],[ + if test "$ext_shared" = "yes"; then + PHP_X_ADD_LIBRARY($1,$2,$3) + else + PHP_ADD_LIBRARY_DEFER($1,$2) + fi +]) + ;; + esac +]) + +dnl +dnl PHP_ADD_LIBRARY_WITH_PATH(library, path[, shared-libadd]) +dnl +dnl add a library to the link line and path to linkpath/runpath. +dnl if shared-libadd is not empty and $ext_shared is yes, +dnl shared-libadd will be assigned the library information +dnl +AC_DEFUN(PHP_ADD_LIBRARY_WITH_PATH,[ +ifelse($3,,[ + if test -n "$2"; then + PHP_ADD_LIBPATH($2) + fi + PHP_ADD_LIBRARY($1) +],[ + if test "$ext_shared" = "yes"; then + $3="-l$1 [$]$3" + if test -n "$2"; then + PHP_ADD_LIBPATH($2,$3) + fi + else + PHP_ADD_LIBRARY_WITH_PATH($1,$2) + fi +]) +]) + +dnl +dnl PHP_ADD_LIBRARY_DEFER_WITH_PATH(library, path) +dnl +dnl add a library to the link line (deferred) +dnl and path to linkpath/runpath (not deferred) +dnl +AC_DEFUN(PHP_ADD_LIBRARY_DEFER_WITH_PATH,[ + PHP_ADD_LIBPATH($2) + PHP_ADD_LIBRARY_DEFER($1) +]) + +dnl +dnl Set libtool variable +dnl +AC_DEFUN(AM_SET_LIBTOOL_VARIABLE,[ + LIBTOOL='$(SHELL) $(top_builddir)/libtool $1' +]) + +dnl +dnl Check for cc option +dnl +AC_DEFUN(PHP_CHECK_CC_OPTION,[ + echo "main(){return 0;}" > conftest.$ac_ext + opt=$1 + changequote({,}) + var=`echo $opt|sed 's/[^a-zA-Z0-9]/_/g'` + changequote([,]) + AC_MSG_CHECKING([if compiler supports -$1 really]) + ac_php_compile="${CC-cc} -$opt -o conftest $CFLAGS $CPPFLAGS conftest.$ac_ext 2>&1" + if eval $ac_php_compile 2>&1 | egrep "$opt" > /dev/null 2>&1 ; then + eval php_cc_$var=no + AC_MSG_RESULT([no]) + else + if eval ./conftest 2>/dev/null ; then + eval php_cc_$var=yes + AC_MSG_RESULT([yes]) + else + eval php_cc_$var=no + AC_MSG_RESULT([no]) + fi + fi +]) + +AC_DEFUN(PHP_REGEX,[ + +if test "$REGEX_TYPE" = "php"; then + REGEX_LIB=regex/libregex.la + REGEX_DIR=regex + AC_DEFINE(HSREGEX,1,[ ]) + AC_DEFINE(REGEX,1,[ ]) + PHP_FAST_OUTPUT(regex/Makefile) +elif test "$REGEX_TYPE" = "system"; then + AC_DEFINE(REGEX,0,[ ]) +fi + +AC_MSG_CHECKING([which regex library to use]) +AC_MSG_RESULT([$REGEX_TYPE]) + +PHP_SUBST(REGEX_DIR) +PHP_SUBST(REGEX_LIB) +PHP_SUBST(HSREGEX) +]) + +dnl +dnl See if we have broken header files like SunOS has. +dnl +AC_DEFUN(PHP_MISSING_FCLOSE_DECL,[ + AC_MSG_CHECKING([for fclose declaration]) + AC_TRY_COMPILE([#include ],[int (*func)() = fclose],[ + AC_DEFINE(MISSING_FCLOSE_DECL,0,[ ]) + AC_MSG_RESULT([ok]) + ],[ + AC_DEFINE(MISSING_FCLOSE_DECL,1,[ ]) + AC_MSG_RESULT([missing]) + ]) +]) + +dnl +dnl Check for broken sprintf() +dnl +AC_DEFUN(PHP_AC_BROKEN_SPRINTF,[ + AC_CACHE_CHECK(whether sprintf is broken, ac_cv_broken_sprintf,[ + AC_TRY_RUN([main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }],[ + ac_cv_broken_sprintf=no + ],[ + ac_cv_broken_sprintf=yes + ],[ + ac_cv_broken_sprintf=no + ]) + ]) + if test "$ac_cv_broken_sprintf" = "yes"; then + AC_DEFINE(PHP_BROKEN_SPRINTF, 1, [ ]) + else + AC_DEFINE(PHP_BROKEN_SPRINTF, 0, [ ]) + fi +]) + +dnl +dnl PHP_EXTENSION(extname [, shared [,sapi_class]]) +dnl +dnl Includes an extension in the build. +dnl +dnl "extname" is the name of the ext/ subdir where the extension resides +dnl "shared" can be set to "shared" or "yes" to build the extension as +dnl a dynamically loadable library. Optional parameter "sapi_class" can +dnl be set to "cli" to mark extension build only with CLI or CGI sapi's. +dnl If "nocli" is passed the extension will be built only with a non-cli +dnl sapi. +dnl +AC_DEFUN(PHP_EXTENSION,[ + EXT_SUBDIRS="$EXT_SUBDIRS $1" + + if test -d "$abs_srcdir/ext/$1"; then +dnl ---------------------------------------------- Internal Module + ext_builddir=ext/$1 + ext_srcdir=$abs_srcdir/ext/$1 + else +dnl ---------------------------------------------- External Module + ext_builddir=. + ext_srcdir=$abs_srcdir + fi + + if test "$2" != "shared" && test "$2" != "yes" && test "$3" != "cli"; then +dnl ---------------------------------------------- Static module + LIB_BUILD($ext_builddir) + EXT_LTLIBS="$EXT_LTLIBS $abs_builddir/$ext_builddir/lib$1.la" + EXT_STATIC="$EXT_STATIC $1" + if test "$3" != "nocli"; then + EXT_CLI_LTLIBS="$EXT_CLI_LTLIBS $abs_builddir/$ext_builddir/lib$1.la" + EXT_CLI_STATIC="$EXT_CLI_STATIC $1" + fi + else + if test "$2" = "shared" || test "$2" = "yes"; then +dnl ---------------------------------------------- Shared module + LIB_BUILD($ext_builddir,yes) + AC_DEFINE_UNQUOTED([COMPILE_DL_]translit($1,a-z-,A-Z_), 1, Whether to build $1 as dynamic module) + fi + fi + + if test "$2" != "shared" && test "$2" != "yes" && test "$3" = "cli"; then +dnl ---------------------------------------------- CLI only static module + LIB_BUILD($ext_builddir) + if test "$PHP_SAPI" = "cgi"; then + EXT_LTLIBS="$EXT_LTLIBS $abs_builddir/$ext_builddir/lib$1.la" + EXT_STATIC="$EXT_STATIC $1" + fi + EXT_CLI_LTLIBS="$EXT_CLI_LTLIBS $abs_builddir/$ext_builddir/lib$1.la" + EXT_CLI_STATIC="$EXT_CLI_STATIC $1" + fi + + PHP_FAST_OUTPUT($ext_builddir/Makefile) +]) + +dnl +dnl Solaris requires main code to be position independent in order +dnl to let shared objects find symbols. Weird. Ugly. +dnl +dnl Must be run after all --with-NN options that let the user +dnl choose dynamic extensions, and after the gcc test. +dnl +AC_DEFUN(PHP_SOLARIS_PIC_WEIRDNESS,[ + AC_MSG_CHECKING([whether -fPIC is required]) + if test -n "$EXT_SHARED"; then + os=`uname -sr 2>/dev/null` + case $os in + "SunOS 5.6"|"SunOS 5.7") + case $CC in + gcc*|egcs*) CFLAGS="$CFLAGS -fPIC";; + *) CFLAGS="$CFLAGS -fpic";; + esac + AC_MSG_RESULT([yes]);; + *) + AC_MSG_RESULT([no]);; + esac + else + AC_MSG_RESULT([no]) + fi +]) + +dnl +dnl Checks whether $withval is "shared" or starts with "shared,XXX" +dnl and sets $shared to "yes" or "no", and removes "shared,?" stuff +dnl from $withval. +dnl +AC_DEFUN(PHP_WITH_SHARED,[ + case $withval in + shared) + shared=yes + withval=yes + ;; + shared,*) + shared=yes + withval=`echo $withval | sed -e 's/^shared,//'` + ;; + *) + shared=no + ;; + esac + if test -n "$php_always_shared"; then + shared=yes + fi +]) + +dnl The problem is that the default compilation flags in Solaris 2.6 won't +dnl let programs access large files; you need to tell the compiler that +dnl you actually want your programs to work on large files. For more +dnl details about this brain damage please see: +dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html + +dnl Written by Paul Eggert . + +AC_DEFUN(PHP_SYS_LFS, +[dnl + # If available, prefer support for large files unless the user specified + # one of the CPPFLAGS, LDFLAGS, or LIBS variables. + AC_MSG_CHECKING([whether large file support needs explicit enabling]) + ac_getconfs='' + ac_result=yes + ac_set='' + ac_shellvars='CPPFLAGS LDFLAGS LIBS' + for ac_shellvar in $ac_shellvars; do + case $ac_shellvar in + CPPFLAGS) ac_lfsvar=LFS_CFLAGS ;; + *) ac_lfsvar=LFS_$ac_shellvar ;; + esac + eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar + (getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; } + ac_getconf=`getconf $ac_lfsvar` + ac_getconfs=$ac_getconfs$ac_getconf + eval ac_test_$ac_shellvar=\$ac_getconf + done + case "$ac_result$ac_getconfs" in + yes) ac_result=no ;; + esac + case "$ac_result$ac_set" in + yes?*) ac_result="yes, but $ac_set is already set, so use its settings" + esac + AC_MSG_RESULT([$ac_result]) + case $ac_result in + yes) + for ac_shellvar in $ac_shellvars; do + eval $ac_shellvar=\$ac_test_$ac_shellvar + done ;; + esac +]) + +AC_DEFUN(PHP_SOCKADDR_SA_LEN,[ + AC_CACHE_CHECK([for field sa_len in struct sockaddr],ac_cv_sockaddr_sa_len,[ + AC_TRY_COMPILE([#include +#include ], + [struct sockaddr s; s.sa_len;], + [ac_cv_sockaddr_sa_len=yes + AC_DEFINE(HAVE_SOCKADDR_SA_LEN,1,[ ])], + [ac_cv_sockaddr_sa_len=no]) + ]) +]) + + +dnl ## PHP_OUTPUT(file) +dnl ## adds "file" to the list of files generated by AC_OUTPUT +dnl ## This macro can be used several times. +AC_DEFUN(PHP_OUTPUT,[ + PHP_OUTPUT_FILES="$PHP_OUTPUT_FILES $1" +]) + +AC_DEFUN(PHP_DECLARED_TIMEZONE,[ + AC_CACHE_CHECK(for declared timezone, ac_cv_declared_timezone,[ + AC_TRY_COMPILE([ +#include +#include +#ifdef HAVE_SYS_TIME_H +#include +#endif +],[ + time_t foo = (time_t) timezone; +],[ + ac_cv_declared_timezone=yes +],[ + ac_cv_declared_timezone=no +])]) + if test "$ac_cv_declared_timezone" = "yes"; then + AC_DEFINE(HAVE_DECLARED_TIMEZONE, 1, [Whether system headers declare timezone]) + fi +]) + +AC_DEFUN(PHP_EBCDIC,[ + AC_CACHE_CHECK([whether system uses EBCDIC],ac_cv_ebcdic,[ + AC_TRY_RUN( [ +int main(void) { + return (unsigned char)'A' != (unsigned char)0xC1; +} +],[ + ac_cv_ebcdic=yes +],[ + ac_cv_ebcdic=no +],[ + ac_cv_ebcdic=no +])]) + if test "$ac_cv_ebcdic" = "yes"; then + AC_DEFINE(CHARSET_EBCDIC,1, [Define if system uses EBCDIC]) + fi +]) + +AC_DEFUN(AC_ADD_LIBPATH, [indir([PHP_ADD_LIBPATH], $@)]) +AC_DEFUN(AC_ADD_LIBRARY, [indir([PHP_ADD_LIBRARY], $@)]) +AC_DEFUN(AC_ADD_LIBRARY_WITH_PATH, [indir([PHP_ADD_LIBRARY_WITH_PATH], $@)]) +AC_DEFUN(AC_ADD_INCLUDE, [indir([PHP_ADD_INCLUDE], $@)]) + +AC_DEFUN(PHP_FOPENCOOKIE,[ + AC_CHECK_FUNC(fopencookie, [ have_glibc_fopencookie=yes ]) + + if test "$have_glibc_fopencookie" = "yes" ; then + dnl this comes in two flavors: + dnl newer glibcs (since 2.1.2 ? ) + dnl have a type called cookie_io_functions_t + AC_TRY_COMPILE([ #define _GNU_SOURCE + #include + ], + [ cookie_io_functions_t cookie; ], + [ have_cookie_io_functions_t=yes ], + [] ) + + if test "$have_cookie_io_functions_t" = "yes" ; then + cookie_io_functions_t=cookie_io_functions_t + have_fopen_cookie=yes + else + dnl older glibc versions (up to 2.1.2 ?) + dnl call it _IO_cookie_io_functions_t + AC_TRY_COMPILE([ #define _GNU_SOURCE + #include + ], + [ _IO_cookie_io_functions_t cookie; ], + [ have_IO_cookie_io_functions_t=yes ], + [] ) + if test "$have_cookie_io_functions_t" = "yes" ; then + cookie_io_functions_t=_IO_cookie_io_functions_t + have_fopen_cookie=yes + fi + fi + + if test "$have_fopen_cookie" = "yes" ; then + AC_DEFINE(HAVE_FOPENCOOKIE, 1, [ ]) + AC_DEFINE_UNQUOTED(COOKIE_IO_FUNCTIONS_T, $cookie_io_functions_t, [ ]) + fi + + fi +]) + + +dnl +dnl PHP_CHECK_LIBRARY(library, function [, action-found [, action-not-found [, extra-libs]]]) +dnl +dnl Wrapper for AC_CHECK_LIB +dnl +AC_DEFUN(PHP_CHECK_LIBRARY, [ + save_old_LDFLAGS=$LDFLAGS + LDFLAGS="$5 $LDFLAGS" + AC_CHECK_LIB([$1],[$2],[ + LDFLAGS=$save_old_LDFLAGS + $3 + ],[ + LDFLAGS=$save_old_LDFLAGS + $4 + ])dnl +]) + + +dnl +dnl PHP_SETUP_ICONV(shared-add [, action-found [, action-not-found]]) +dnl +dnl Common setup macro for iconv +dnl +AC_DEFUN(PHP_SETUP_ICONV, [ + found_iconv=no + unset ICONV_DIR + + dnl + dnl Check libc first if no path is provided in --with-iconv + dnl + if test "$PHP_ICONV" = "yes"; then + AC_CHECK_FUNC(iconv, [ + found_iconv=yes + ],[ + AC_CHECK_FUNC(libiconv,[ + AC_DEFINE(HAVE_LIBICONV, 1, [ ]) + found_iconv=yes + ]) + ]) + fi + + dnl + dnl Check external libs for iconv funcs + dnl + if test "$found_iconv" = "no"; then + + for i in $PHP_ICONV /usr/local /usr; do + if test -r $i/include/giconv.h; then + AC_DEFINE(HAVE_GICONV_H, 1, [ ]) + ICONV_DIR=$i + iconv_lib_name=giconv + break + elif test -r $i/include/iconv.h; then + ICONV_DIR=$i + iconv_lib_name=iconv + break + fi + done + + if test -z "$ICONV_DIR"; then + AC_MSG_ERROR([Please specify the install prefix of iconv with --with-iconv=]) + fi + + if test -f $ICONV_DIR/lib/lib$iconv_lib_name.a || + test -f $ICONV_DIR/lib/lib$iconv_lib_name.$SHLIB_SUFFIX_NAME + then + PHP_CHECK_LIBRARY($iconv_lib_name, libiconv, [ + found_iconv=yes + AC_DEFINE(HAVE_LIBICONV, 1, [ ]) + ], [ + PHP_CHECK_LIBRARY($iconv_lib_name, iconv, [ + found_iconv=yes + ], [], [ + -L$ICONV_DIR/lib + ]) + ], [ + -L$ICONV_DIR/lib + ]) + fi + fi + + if test "$found_iconv" = "yes"; then + AC_DEFINE(HAVE_ICONV, 1, [ ]) + if test -n "$ICONV_DIR"; then + PHP_ADD_LIBRARY_WITH_PATH($iconv_lib_name, $ICONV_DIR/lib, $1) + PHP_ADD_INCLUDE($ICONV_DIR/include) + fi + $2 +ifelse([$3],[],,[else $3]) + fi +]) + + +dnl +dnl PHP_AP_EXTRACT_VERSION(/path/httpd) +dnl This macro is used to get a comparable +dnl version for apache1/2. +dnl +AC_DEFUN(PHP_AP_EXTRACT_VERSION,[ + ac_output=`$1 -v 2>&1` + ac_IFS=$IFS +IFS="- /. +" + set $ac_output + IFS=$ac_IFS + + APACHE_VERSION=`expr [$]4 \* 1000000 + [$]5 \* 1000 + [$]6` +]) + +# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*- + +# serial 46 AC_PROG_LIBTOOL + +AC_DEFUN([AC_PROG_LIBTOOL], +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Prevent multiple expansion +define([AC_PROG_LIBTOOL], []) +]) + +AC_DEFUN([AC_LIBTOOL_SETUP], +[AC_PREREQ(2.13)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl +AC_REQUIRE([AC_PROG_NM])dnl +AC_REQUIRE([LT_AC_PROG_SED])dnl + +AC_REQUIRE([AC_PROG_LN_S])dnl +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl +AC_REQUIRE([AC_OBJEXT])dnl +AC_REQUIRE([AC_EXEEXT])dnl +dnl + +_LT_AC_PROG_ECHO_BACKSLASH +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; +esac + +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) + +ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) +ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], +enable_win32_dll=yes, enable_win32_dll=no) + +AC_ARG_ENABLE(libtool-lock, + [ --disable-libtool-lock avoid locking (might break parallel builds)]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_SAVE + AC_LANG_C + AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_RESTORE]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; + +ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + + # recent cygwin and mingw systems supply a stub DllMain which the user + # can override, but on older systems we have to supply one + AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain, + [AC_TRY_LINK([], + [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*); + DllMain (0, 0, 0);], + [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])]) + + case $host/$CC in + *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*) + # old mingw systems require "-dll" to link a DLL, while more recent ones + # require "-mdll" + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -mdll" + AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch, + [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])]) + CFLAGS="$SAVE_CFLAGS" ;; + *-*-cygwin* | *-*-pw32*) + # cygwin systems need to pass --dll to the linker, and not link + # crt.o which will require a WinMain@16 definition. + lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;; + esac + ;; + ]) +esac + +_LT_AC_LTCONFIG_HACK + +]) + +# AC_LIBTOOL_HEADER_ASSERT +# ------------------------ +AC_DEFUN([AC_LIBTOOL_HEADER_ASSERT], +[AC_CACHE_CHECK([whether $CC supports assert without backlinking], + [lt_cv_func_assert_works], + [case $host in + *-*-solaris*) + if test "$GCC" = yes && test "$with_gnu_ld" != yes; then + case `$CC --version 2>/dev/null` in + [[12]].*) lt_cv_func_assert_works=no ;; + *) lt_cv_func_assert_works=yes ;; + esac + fi + ;; + esac]) + +if test "x$lt_cv_func_assert_works" = xyes; then + AC_CHECK_HEADERS(assert.h) +fi +])# AC_LIBTOOL_HEADER_ASSERT + +# _LT_AC_CHECK_DLFCN +# -------------------- +AC_DEFUN([_LT_AC_CHECK_DLFCN], +[AC_CHECK_HEADERS(dlfcn.h) +])# _LT_AC_CHECK_DLFCN + +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE +# --------------------------------- +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], +[AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_NM]) +AC_REQUIRE([AC_OBJEXT]) +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) # Its linker distinguishes data from code symbols + lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris* | sysv5*) + symcode='[[BDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $host_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then + symcode='[[ABCDGISTW]]' +fi + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. +lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + rm -f conftest* + cat > conftest.$ac_ext < $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if egrep ' nm_test_var$' "$nlist" >/dev/null; then + if egrep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[[]] = +{ +EOF + sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$no_builtin_flag" + if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AC_FD_CC + fi + else + echo "cannot find nm_test_var in $nlist" >&AC_FD_CC + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC + fi + else + echo "$progname: failed program was:" >&AC_FD_CC + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +global_symbol_pipe="$lt_cv_sys_global_symbol_pipe" +if test -z "$lt_cv_sys_global_symbol_pipe"; then + global_symbol_to_cdecl= + global_symbol_to_c_name_address= +else + global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl" + global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address" +fi +if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address"; +then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + +# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR +# --------------------------------- +AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR], +[# Find the correct PATH separator. Usually this is `:', but +# DJGPP uses `;' like DOS. +if test "X${PATH_SEPARATOR+set}" != Xset; then + UNAME=${UNAME-`uname 2>/dev/null`} + case X$UNAME in + *-DOS) lt_cv_sys_path_separator=';' ;; + *) lt_cv_sys_path_separator=':' ;; + esac + PATH_SEPARATOR=$lt_cv_sys_path_separator +fi +])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR + +# _LT_AC_PROG_ECHO_BACKSLASH +# -------------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], +[ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +echo=${ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + IFS="${IFS= }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(ECHO) +AC_DIVERT_POP +])# _LT_AC_PROG_ECHO_BACKSLASH + +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ------------------------------------------------------------------ +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], +[if test "$cross_compiling" = yes; then : + [$4] +else + AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +}] +EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_unknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_AC_TRY_DLOPEN_SELF + +# AC_LIBTOOL_DLOPEN_SELF +# ------------------- +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], +[if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + cygwin* | mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +])# AC_LIBTOOL_DLOPEN_SELF + +AC_DEFUN([_LT_AC_LTCONFIG_HACK], +[AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([[\\"\\`$\\\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([[\\"\\`\\\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" +need_locks="$enable_libtool_lock" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +if test x"$host" != x"$build"; then + ac_tool_prefix=${host_alias}- +else + ac_tool_prefix= +fi + +# Transform linux* to *-*-linux-gnu*, to support old configure scripts. +case $host_os in +linux-gnu*) ;; +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="[$]2" + +AC_MSG_CHECKING([for objdir]) +rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + objdir=_libs +fi +rmdir .libs 2>/dev/null +AC_MSG_RESULT($objdir) + + +AC_ARG_WITH(pic, +[ --with-pic try to use only PIC/non-PIC objects [default=use both]], +pic_mode="$withval", pic_mode=default) +test -z "$pic_mode" && pic_mode=default + +# We assume here that the value for lt_cv_prog_cc_pic will not be cached +# in isolation, and that seeing it set (from the cache) indicates that +# the associated values are set (in the cache) correctly too. +AC_MSG_CHECKING([for $compiler option to produce PIC]) +AC_CACHE_VAL(lt_cv_prog_cc_pic, +[ lt_cv_prog_cc_pic= + lt_cv_prog_cc_shlib= + lt_cv_prog_cc_wl= + lt_cv_prog_cc_static= + lt_cv_prog_cc_no_builtin= + lt_cv_prog_cc_can_build_shared=$can_build_shared + + if test "$GCC" = yes; then + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-static' + + case $host_os in + aix*) + # Below there is a dirty hack to force normal static linking with -ldl + # The problem is because libdl dynamically linked with both libc and + # libC (AIX C++ library), which obviously doesn't included in libraries + # list by gcc. This cause undefined symbols with -static flags. + # This hack allows C programs to be linked with "-static -ldl", but + # not sure about C++ programs. + lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC" + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_cv_prog_cc_pic='-fno-common' + ;; + cygwin* | mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_cv_prog_cc_pic='-DDLL_EXPORT' + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_cv_prog_cc_pic=-Kconform_pic + fi + ;; + *) + lt_cv_prog_cc_pic='-fPIC' + ;; + esac + else + # PORTME Check for PIC flags for the system compiler. + case $host_os in + aix3* | aix4* | aix5*) + lt_cv_prog_cc_wl='-Wl,' + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_cv_prog_cc_static='-Bstatic' + else + lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + hpux9* | hpux10* | hpux11*) + # Is there a better lt_cv_prog_cc_static that works with the bundled CC? + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive" + lt_cv_prog_cc_pic='+Z' + ;; + + irix5* | irix6* | nonstopux*) + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-non_shared' + # PIC (with -KPIC) is the default. + ;; + + cygwin* | mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_cv_prog_cc_pic='-DDLL_EXPORT' + ;; + + newsos6) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + ;; + + osf3* | osf4* | osf5*) + # All OSF/1 code is PIC. + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-non_shared' + ;; + + sco3.2v5*) + lt_cv_prog_cc_pic='-Kpic' + lt_cv_prog_cc_static='-dn' + lt_cv_prog_cc_shlib='-belf' + ;; + + solaris*) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Wl,' + ;; + + sunos4*) + lt_cv_prog_cc_pic='-PIC' + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Qoption ld ' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Wl,' + ;; + + uts4*) + lt_cv_prog_cc_pic='-pic' + lt_cv_prog_cc_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_cv_prog_cc_pic='-Kconform_pic' + lt_cv_prog_cc_static='-Bstatic' + fi + ;; + + *) + lt_cv_prog_cc_can_build_shared=no + ;; + esac + fi +]) +if test -z "$lt_cv_prog_cc_pic"; then + AC_MSG_RESULT([none]) +else + AC_MSG_RESULT([$lt_cv_prog_cc_pic]) + + # Check to make sure the pic_flag actually works. + AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works]) + AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC" + AC_TRY_COMPILE([], [], [dnl + case $host_os in + hpux9* | hpux10* | hpux11*) + # On HP-UX, both CC and GCC only warn that PIC is supported... then + # they create non-PIC objects. So, if there were any warnings, we + # assume that PIC is not supported. + if test -s conftest.err; then + lt_cv_prog_cc_pic_works=no + else + lt_cv_prog_cc_pic_works=yes + fi + ;; + *) + lt_cv_prog_cc_pic_works=yes + ;; + esac + ], [dnl + lt_cv_prog_cc_pic_works=no + ]) + CFLAGS="$save_CFLAGS" + ]) + + if test "X$lt_cv_prog_cc_pic_works" = Xno; then + lt_cv_prog_cc_pic= + lt_cv_prog_cc_can_build_shared=no + else + lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic" + fi + + AC_MSG_RESULT([$lt_cv_prog_cc_pic_works]) +fi + +# Check for any special shared library compilation flags. +if test -n "$lt_cv_prog_cc_shlib"; then + AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries]) + if echo "$old_CC $old_CFLAGS " | egrep -e "[[ ]]$lt_cv_prog_cc_shlib[[ ]]" >/dev/null; then : + else + AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure]) + lt_cv_prog_cc_can_build_shared=no + fi +fi + +AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works]) +AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl + lt_cv_prog_cc_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static" + AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes]) + LDFLAGS="$save_LDFLAGS" +]) + +# Belt *and* braces to stop my trousers falling down: +test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static= +AC_MSG_RESULT([$lt_cv_prog_cc_static_works]) + +pic_flag="$lt_cv_prog_cc_pic" +special_shlib_compile_flags="$lt_cv_prog_cc_shlib" +wl="$lt_cv_prog_cc_wl" +link_static_flag="$lt_cv_prog_cc_static" +no_builtin_flag="$lt_cv_prog_cc_no_builtin" +can_build_shared="$lt_cv_prog_cc_can_build_shared" + + +# Check to see if options -o and -c are simultaneously supported by compiler +AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext]) +AC_CACHE_VAL([lt_cv_compiler_c_o], [ +$rm -r conftest 2>/dev/null +mkdir conftest +cd conftest +echo "int some_variable = 0;" > conftest.$ac_ext +mkdir out +# According to Tom Tromey, Ian Lance Taylor reported there are C compilers +# that will create temporary files in the current directory regardless of +# the output directory. Thus, making CWD read-only will cause this test +# to fail, enabling locking or at least warning the user not to do parallel +# builds. +chmod -w . +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" +compiler_c_o=no +if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s out/conftest.err; then + lt_cv_compiler_c_o=no + else + lt_cv_compiler_c_o=yes + fi +else + # Append any errors to the config.log. + cat out/conftest.err 1>&AC_FD_CC + lt_cv_compiler_c_o=no +fi +CFLAGS="$save_CFLAGS" +chmod u+w . +$rm conftest* out/* +rmdir out +cd .. +rmdir conftest +$rm -r conftest 2>/dev/null +]) +compiler_c_o=$lt_cv_compiler_c_o +AC_MSG_RESULT([$compiler_c_o]) + +if test x"$compiler_c_o" = x"yes"; then + # Check to see if we can write to a .lo + AC_MSG_CHECKING([if $compiler supports -c -o file.lo]) + AC_CACHE_VAL([lt_cv_compiler_o_lo], [ + lt_cv_compiler_o_lo=no + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -c -o conftest.lo" + save_objext="$ac_objext" + ac_objext=lo + AC_TRY_COMPILE([], [int some_variable = 0;], [dnl + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + lt_cv_compiler_o_lo=no + else + lt_cv_compiler_o_lo=yes + fi + ]) + ac_objext="$save_objext" + CFLAGS="$save_CFLAGS" + ]) + compiler_o_lo=$lt_cv_compiler_o_lo + AC_MSG_RESULT([$compiler_o_lo]) +else + compiler_o_lo=no +fi + +# Check to see if we can do hard links to lock some files if needed +hard_links="nottested" +if test "$compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi + +if test "$GCC" = yes; then + # Check to see if options -fno-rtti -fno-exceptions are supported by compiler + AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions]) + echo "int some_variable = 0;" > conftest.$ac_ext + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext" + compiler_rtti_exceptions=no + AC_TRY_COMPILE([], [int some_variable = 0;], [dnl + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + compiler_rtti_exceptions=no + else + compiler_rtti_exceptions=yes + fi + ]) + CFLAGS="$save_CFLAGS" + AC_MSG_RESULT([$compiler_rtti_exceptions]) + + if test "$compiler_rtti_exceptions" = "yes"; then + no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' + else + no_builtin_flag=' -fno-builtin' + fi +fi + +# See if the linker supports building shared libraries. +AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries]) + +allow_undefined_flag= +no_undefined_flag= +need_lib_prefix=unknown +need_version=unknown +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +archive_cmds= +archive_expsym_cmds= +old_archive_from_new_cmds= +old_archive_from_expsyms_cmds= +export_dynamic_flag_spec= +whole_archive_flag_spec= +thread_safe_flag_spec= +hardcode_into_libs=no +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_shlibpath_var=unsupported +runpath_var= +link_all_deplibs=unknown +always_export_symbols=no +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' +# include_expsyms should be a list of space-separated symbols to be *always* +# included in the symbol list +include_expsyms= +# exclude_expsyms can be an egrep regular expression of symbols to exclude +# it will be wrapped by ` (' and `)$', so one must not match beginning or +# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', +# as well as any symbol that contains `d'. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_" +# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out +# platforms (ab)use it in PIC code, but their linkers get confused if +# the symbol is explicitly referenced. Since portable code cannot +# rely on this symbol name, it's probably fine to never include it in +# preloaded symbol tables. +extract_expsyms_cmds= + +case $host_os in +cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; +openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX, the GNU linker is very broken + # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available. + ld_shlibs=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=yes + + extract_expsyms_cmds='test -f $output_objdir/impgen.c || \ + sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~ + test -f $output_objdir/impgen.exe || (cd $output_objdir && \ + if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \ + else $CC -o impgen impgen.c ; fi)~ + $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def' + + old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib' + + # cygwin and mingw dlls have different entry points and sets of symbols + # to exclude. + # FIXME: what about values for MSVC? + dll_entry=__cygwin_dll_entry@12 + dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~ + case $host_os in + mingw*) + # mingw values + dll_entry=_DllMainCRTStartup@12 + dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~ + ;; + esac + + # mingw and cygwin differ, and it's simplest to just exclude the union + # of the two symbol sets. + dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12 + + # recent cygwin and mingw systems supply a stub DllMain which the user + # can override, but on older systems we have to supply one (in ltdll.c) + if test "x$lt_cv_need_dllmain" = "xyes"; then + ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext " + ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~ + test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~' + else + ltdll_obj= + ltdll_cmds= + fi + + # Extract the symbol export list from an `--export-all' def file, + # then regenerate the def file from the symbol export list, so that + # the compiled dll only exports the symbol export list. + # Be careful not to strip the DATA tag left be newer dlltools. + export_symbols_cmds="$ltdll_cmds"' + $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~ + sed -e "1,/EXPORTS/d" -e "s/ @ [[0-9]]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols' + + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is. + # If DATA tags from a recent dlltool are present, honour them! + archive_expsym_cmds='if test "x`sed 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname-def; + else + echo EXPORTS > $output_objdir/$soname-def; + _lt_hint=1; + cat $export_symbols | while read symbol; do + set dummy \$symbol; + case \[$]# in + 2) echo " \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;; + 4) echo " \[$]2 \[$]3 \[$]4 ; " >> $output_objdir/$soname-def; _lt_hint=`expr \$_lt_hint - 1`;; + *) echo " \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;; + esac; + _lt_hint=`expr 1 + \$_lt_hint`; + done; + fi~ + '"$ltdll_cmds"' + $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ + $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~ + $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + case $host_os in + cygwin* | mingw* | pw32*) + # dlltool doesn't understand --whole-archive et. al. + whole_archive_flag_spec= + ;; + *) + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + ;; + esac + fi +else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + hardcode_direct=yes + archive_cmds='' + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + esac + + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + shared_flag='${wl}-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall can do strange things, so it is better to + # generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib' + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='${wl}-berok' + # This is a bit strange, but is similar to how AIX traditionally builds + # it's shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + ;; + + darwin* | rhapsody*) + case "$host_os" in + rhapsody* | darwin1.[[012]]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + esac + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. Also zsh mangles + # `"' quotes if we put them in here... so don't! + archive_cmds='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs && $CC $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib ${lib}-master.o $deplibs$linker_flags $(test .$module != .yes && echo -install_name $rpath/$soname $verstring)' + # We need to add '_' to the symbols in $export_symbols first + #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols' + hardcode_direct=yes + hardcode_shlibpath_var=no + whole_archive_flag_spec='-all_load $convenience' + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9* | hpux10* | hpux11*) + case $host_os in + hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;; + *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; + esac + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_minus_L=yes # Not in the search PATH, but as the default + # location of the library. + export_dynamic_flag_spec='${wl}-E' + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + openbsd*) + hardcode_direct=yes + hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case "$host_os" in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + #Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + export_dynamic_flag_spec='${wl}-Bexport' + ;; + + solaris*) + # gcc --version < 3.0 without binutils cannot create self contained + # shared libraries reliably, requiring libgcc.a to resolve some of + # the object symbols generated in some cases. Libraries that use + # assert need libgcc.a to resolve __eprintf, for example. Linking + # a copy of libgcc.a into every shared library to guarantee resolving + # such symbols causes other problems: According to Tim Van Holder + # , C++ libraries end up with a separate + # (to the application) exception stack for one thing. + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + case `$CC --version 2>/dev/null` in + [[12]].*) + cat <&2 + +*** Warning: Releases of GCC earlier than version 3.0 cannot reliably +*** create self contained shared libraries on Solaris systems, without +*** introducing a dependency on libgcc.a. Therefore, libtool is disabling +*** -no-undefined support, which will at least allow you to build shared +*** libraries. However, you may find that when you link such libraries +*** into an application without using GCC, you have to manually add +*** \`gcc --print-libgcc-file-name\` to the link command. We urge you to +*** upgrade to a newer version of GCC. Another option is to rebuild your +*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer. + +EOF + no_undefined_flag= + ;; + esac + fi + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv5*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5uw7* | unixware7*) + no_undefined_flag='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac +fi +AC_MSG_RESULT([$ld_shlibs]) +test "$ld_shlibs" = no && can_build_shared=no + +# Check hardcoding attributes. +AC_MSG_CHECKING([how to hardcode library paths into programs]) +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var"; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$hardcode_shlibpath_var" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +AC_MSG_RESULT([$hardcode_action]) + +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi + +reload_cmds='$LD$reload_flag -o $output$reload_objs' +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +# PORTME Fill in your ld.so characteristics +AC_MSG_CHECKING([dynamic linker characteristics]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}.so$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can + # not hardcode correct soname into executable. Probably we can + # add versioning support to collect2, so additional links can + # be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}.so$major' + fi + shlibpath_var=LIBPATH + fi + hardcode_into_libs=yes + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}.so' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + export_dynamic_flag_spec=-rdynamic + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + need_version=no + need_lib_prefix=no + case $GCC,$host_os in + yes,cygwin*) + library_names_spec='$libname.dll.a' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll' + postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog .libs/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + ;; + yes,mingw*) + library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g" -e "s,=/,/,g"` + ;; + yes,pw32*) + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' + ;; + *) + library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. + library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)' + soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd*-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU/FreeBSD ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + *) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + dynamic_linker="$host_os dld.sl" + version_type=sunos + need_lib_prefix=no + need_version=no + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' + soname_spec='${libname}${release}.sl$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) version_type=irix ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' + soname_spec='${libname}${release}.so$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case "$host_os" in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +os2*) + libname_spec='$name' + need_lib_prefix=no + library_names_spec='$libname.dll $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_version=no + need_lib_prefix=no + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + hardcode_into_libs=yes + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' + soname_spec='$libname.so.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +# Report the final consequences. +AC_MSG_CHECKING([if libtool supports shared libraries]) +AC_MSG_RESULT([$can_build_shared]) + +AC_MSG_CHECKING([whether to build shared libraries]) +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +AC_MSG_RESULT([$enable_shared]) + +AC_MSG_CHECKING([whether to build static libraries]) +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +AC_MSG_RESULT([$enable_static]) + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +AC_LIBTOOL_DLOPEN_SELF + +if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + AC_CACHE_VAL([lt_cv_archive_cmds_need_lc], + [$rm conftest* + echo 'static int dummy;' > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile); then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_cv_prog_cc_wl + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi]) + AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc]) + ;; + esac +fi +need_lc=${lt_cv_archive_cmds_need_lc-yes} + +# The second clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + : +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + test -f Makefile && make "$ltmain" +fi + +if test -f "$ltmain"; then + trap "$rm \"${ofile}T\"; exit 1" 1 2 15 + $rm -f "${ofile}T" + + echo creating $ofile + + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS SED \ + AR AR_FLAGS CC LD LN_S NM SHELL \ + reload_flag reload_cmds wl \ + pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ + thread_safe_flag_spec whole_archive_flag_spec libname_spec \ + library_names_spec soname_spec \ + RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ + old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \ + postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \ + old_striplib striplib file_magic_cmd export_symbols_cmds \ + deplibs_check_method allow_undefined_flag no_undefined_flag \ + finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ + global_symbol_to_c_name_address \ + hardcode_libdir_flag_spec hardcode_libdir_separator \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do + + case $var in + reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ + extract_expsyms_cmds | old_archive_from_expsyms_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + cat <<__EOF__ > "${ofile}T" +#! $SHELL + +# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996-2000 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="${SED} -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$need_lc + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# The default C compiler. +CC=$lt_CC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# The linker used to build libraries. +LD=$lt_LD + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_pic_flag +pic_mode=$pic_mode + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_compiler_c_o + +# Can we write directly to a .lo ? +compiler_o_lo=$lt_compiler_o_lo + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_link_static_flag + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# ### END LIBTOOL CONFIG + +__EOF__ + + case $host_os in + aix3*) + cat <<\EOF >> "${ofile}T" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + case $host_os in + cygwin* | mingw* | pw32* | os2*) + cat <<'EOF' >> "${ofile}T" + # This is a source program that is used to create dlls on Windows + # Don't remove nor modify the starting and closing comments +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ + # This is a source program that is used to create import libraries + # on Windows for dlls which lack them. Don't remove nor modify the + # starting and closing comments +# /* impgen.c starts here */ +# /* Copyright (C) 1999-2000 Free Software Foundation, Inc. +# +# This file is part of GNU libtool. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# */ +# +# #include /* for printf() */ +# #include /* for open(), lseek(), read() */ +# #include /* for O_RDONLY, O_BINARY */ +# #include /* for strdup() */ +# +# /* O_BINARY isn't required (or even defined sometimes) under Unix */ +# #ifndef O_BINARY +# #define O_BINARY 0 +# #endif +# +# static unsigned int +# pe_get16 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[2]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 2); +# return b[0] + (b[1]<<8); +# } +# +# static unsigned int +# pe_get32 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[4]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 4); +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# static unsigned int +# pe_as32 (ptr) +# void *ptr; +# { +# unsigned char *b = ptr; +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# int +# main (argc, argv) +# int argc; +# char *argv[]; +# { +# int dll; +# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; +# unsigned long export_rva, export_size, nsections, secptr, expptr; +# unsigned long name_rvas, nexp; +# unsigned char *expdata, *erva; +# char *filename, *dll_name; +# +# filename = argv[1]; +# +# dll = open(filename, O_RDONLY|O_BINARY); +# if (dll < 1) +# return 1; +# +# dll_name = filename; +# +# for (i=0; filename[i]; i++) +# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') +# dll_name = filename + i +1; +# +# pe_header_offset = pe_get32 (dll, 0x3c); +# opthdr_ofs = pe_header_offset + 4 + 20; +# num_entries = pe_get32 (dll, opthdr_ofs + 92); +# +# if (num_entries < 1) /* no exports */ +# return 1; +# +# export_rva = pe_get32 (dll, opthdr_ofs + 96); +# export_size = pe_get32 (dll, opthdr_ofs + 100); +# nsections = pe_get16 (dll, pe_header_offset + 4 +2); +# secptr = (pe_header_offset + 4 + 20 + +# pe_get16 (dll, pe_header_offset + 4 + 16)); +# +# expptr = 0; +# for (i = 0; i < nsections; i++) +# { +# char sname[8]; +# unsigned long secptr1 = secptr + 40 * i; +# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); +# unsigned long vsize = pe_get32 (dll, secptr1 + 16); +# unsigned long fptr = pe_get32 (dll, secptr1 + 20); +# lseek(dll, secptr1, SEEK_SET); +# read(dll, sname, 8); +# if (vaddr <= export_rva && vaddr+vsize > export_rva) +# { +# expptr = fptr + (export_rva - vaddr); +# if (export_rva + export_size > vaddr + vsize) +# export_size = vsize - (export_rva - vaddr); +# break; +# } +# } +# +# expdata = (unsigned char*)malloc(export_size); +# lseek (dll, expptr, SEEK_SET); +# read (dll, expdata, export_size); +# erva = expdata - export_rva; +# +# nexp = pe_as32 (expdata+24); +# name_rvas = pe_as32 (expdata+32); +# +# printf ("EXPORTS\n"); +# for (i = 0; i> "${ofile}T" || (rm -f "${ofile}T"; exit 1) + + mv -f "${ofile}T" "$ofile" || \ + (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T") + chmod +x "$ofile" +fi + +])# _LT_AC_LTCONFIG_HACK + +# AC_LIBTOOL_DLOPEN - enable checks for dlopen support +AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) + +# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's +AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) + +# AC_ENABLE_SHARED - implement the --enable-shared flag +# Usage: AC_ENABLE_SHARED[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN([AC_ENABLE_SHARED], +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(shared, +changequote(<<, >>)dnl +<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT], +changequote([, ])dnl +[p=${PACKAGE-default} +case $enableval in +yes) enable_shared=yes ;; +no) enable_shared=no ;; +*) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl +]) + +# AC_DISABLE_SHARED - set the default shared flag to --disable-shared +AC_DEFUN([AC_DISABLE_SHARED], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no)]) + +# AC_ENABLE_STATIC - implement the --enable-static flag +# Usage: AC_ENABLE_STATIC[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN([AC_ENABLE_STATIC], +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(static, +changequote(<<, >>)dnl +<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT], +changequote([, ])dnl +[p=${PACKAGE-default} +case $enableval in +yes) enable_static=yes ;; +no) enable_static=no ;; +*) + enable_static=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_static=AC_ENABLE_STATIC_DEFAULT)dnl +]) + +# AC_DISABLE_STATIC - set the default static flag to --disable-static +AC_DEFUN([AC_DISABLE_STATIC], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no)]) + + +# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag +# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN([AC_ENABLE_FAST_INSTALL], +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(fast-install, +changequote(<<, >>)dnl +<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT], +changequote([, ])dnl +[p=${PACKAGE-default} +case $enableval in +yes) enable_fast_install=yes ;; +no) enable_fast_install=no ;; +*) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl +]) + +# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install +AC_DEFUN([AC_DISABLE_FAST_INSTALL], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no)]) + +# AC_LIBTOOL_PICMODE - implement the --with-pic flag +# Usage: AC_LIBTOOL_PICMODE[(MODE)] +# Where MODE is either `yes' or `no'. If omitted, it defaults to +# `both'. +AC_DEFUN([AC_LIBTOOL_PICMODE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +pic_mode=ifelse($#,1,$1,default)]) + + +# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library +AC_DEFUN([AC_PATH_TOOL_PREFIX], +[AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in + /*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; + ?:/*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. + ;; + *) + ac_save_MAGIC_CMD="$MAGIC_CMD" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="ifelse([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + egrep "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$ac_save_ifs" + MAGIC_CMD="$ac_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +]) + + +# AC_PATH_MAGIC - find a file program which can recognise a shared library +AC_DEFUN([AC_PATH_MAGIC], +[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl +AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH) + else + MAGIC_CMD=: + fi +fi +]) + + +# AC_PROG_LD - find the path to the GNU or non-GNU linker +AC_DEFUN([AC_PROG_LD], +[AC_ARG_WITH(gnu-ld, +[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | [[A-Za-z]]:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + lt_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$lt_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_PROG_LD_GNU +]) + +# AC_PROG_LD_GNU - +AC_DEFUN([AC_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + lt_cv_prog_gnu_ld=yes +else + lt_cv_prog_gnu_ld=no +fi]) +with_gnu_ld=$lt_cv_prog_gnu_ld +]) + +# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker +# -- PORTME Some linkers may need a different reload flag. +AC_DEFUN([AC_PROG_LD_RELOAD_FLAG], +[AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag, +[lt_cv_ld_reload_flag='-r']) +reload_flag=$lt_cv_ld_reload_flag +test -n "$reload_flag" && reload_flag=" $reload_flag" +]) + +# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies +# -- PORTME fill in with the dynamic library characteristics +AC_DEFUN([AC_DEPLIBS_CHECK_METHOD], +[AC_CACHE_CHECK([how to recognise dependent libraries], +lt_cv_deplibs_check_method, +[lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given egrep regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix4* | aix5*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi4*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin* | mingw* | pw32*) + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' + lt_cv_file_magic_cmd='/usr/bin/file -L' + case "$host_os" in + rhapsody* | darwin1.[[012]]) + lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` + ;; + *) # Darwin 1.3 on + lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' + ;; + esac + ;; + +freebsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20*|hpux11*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + irix5* | nonstopux*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" + ;; + *) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1" + ;; + esac + lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux-gnu*) + case $host_cpu in + alpha* | hppa* | i*86 | mips | mipsel | powerpc* | sparc* | ia64*) + lt_cv_deplibs_check_method=pass_all ;; + *) + # glibc up to 2.1.1 does not perform some relocations on ARM + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; + esac + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so\.[[0-9]]+\.[[0-9]]+$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' + lt_cv_file_magic_test_file=/shlib/libc.so + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=/lib/libc.so + ;; + +sysv5uw[[78]]* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +]) + + +# AC_PROG_NM - find the path to a BSD-compatible name lister +AC_DEFUN([AC_PROG_NM], +[AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl +AC_MSG_CHECKING([for BSD-compatible nm]) +AC_CACHE_VAL(lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/${ac_tool_prefix}nm + if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then + lt_cv_path_NM="$tmp_nm -B" + break + elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + lt_cv_path_NM="$tmp_nm -p" + break + else + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + fi + fi + done + IFS="$ac_save_ifs" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi]) +NM="$lt_cv_path_NM" +AC_MSG_RESULT([$NM]) +]) + +# AC_CHECK_LIBM - check for math library +AC_DEFUN([AC_CHECK_LIBM], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32*) + # These system don't have libm + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, main, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, main, LIBM="-lm") + ;; +esac +]) + +# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for +# the libltdl convenience library and LTDLINCL to the include flags for +# the libltdl header and adds --enable-ltdl-convenience to the +# configure arguments. Note that LIBLTDL and LTDLINCL are not +# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not +# provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed +# with '${top_builddir}/' and LTDLINCL will be prefixed with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +AC_DEFUN([AC_LIBLTDL_CONVENIENCE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +]) + +# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for +# the libltdl installable library and LTDLINCL to the include flags for +# the libltdl header and adds --enable-ltdl-install to the configure +# arguments. Note that LIBLTDL and LTDLINCL are not AC_SUBSTed, nor is +# AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed +# libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will +# be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed +# with '${top_srcdir}/' (note the single quotes!). If your package is +# not flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN([AC_LIBLTDL_INSTALLABLE], +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, main, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" +]) + +# old names +AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) +AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) +AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + +# This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL]) + +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # +# LT_AC_PROG_SED +# -------------- +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +AC_DEFUN([LT_AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_executable_p="test -f" +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + _sed_list="$_sed_list $as_dir/$ac_prog$ac_exec_ext" + fi + done + done +done + + # Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. +: ${TMPDIR=/tmp} +{ + tmp=`(umask 077 && mktemp -d -q "$TMPDIR/sedXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=$TMPDIR/sed$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in $TMPDIR" >&2 + { (exit 1); exit 1; } +} + _max=0 + _count=0 + # Add /usr/xpg4/bin/sed as it is typically found on Solaris + # along with /bin/sed that truncates output. + for _sed in $_sed_list /usr/xpg4/bin/sed; do + test ! -f ${_sed} && break + cat /dev/null > "$tmp/sed.in" + _count=0 + echo ${ECHO_N-$ac_n} "0123456789${ECHO_C-$ac_c}" >"$tmp/sed.in" + # Check for GNU sed and select it if it is found. + if "${_sed}" --version 2>&1 < /dev/null | egrep '(GNU)' > /dev/null; then + lt_cv_path_SED=${_sed} + break + fi + while true; do + cat "$tmp/sed.in" "$tmp/sed.in" >"$tmp/sed.tmp" + mv "$tmp/sed.tmp" "$tmp/sed.in" + cp "$tmp/sed.in" "$tmp/sed.nl" + echo >>"$tmp/sed.nl" + ${_sed} -e 's/a$//' < "$tmp/sed.nl" >"$tmp/sed.out" || break + cmp -s "$tmp/sed.out" "$tmp/sed.nl" || break + # 40000 chars as input seems more than enough + test $_count -gt 10 && break + _count=`expr $_count + 1` + if test $_count -gt $_max; then + _max=$_count + lt_cv_path_SED=$_sed + fi + done + done + rm -rf "$tmp" +]) +if test "X$SED" != "X"; then + lt_cv_path_SED=$SED +else + SED=$lt_cv_path_SED +fi +AC_MSG_RESULT([$SED]) +]) + diff --git a/contrib/php/build/dynlib.mk b/contrib/php/build/dynlib.mk new file mode 100644 index 0000000..71b41fc --- /dev/null +++ b/contrib/php/build/dynlib.mk @@ -0,0 +1,24 @@ +# +----------------------------------------------------------------------+ +# | PHP Version 4 | +# +----------------------------------------------------------------------+ +# | Copyright (c) 1997-2002 The PHP Group | +# +----------------------------------------------------------------------+ +# | This source file is subject to version 2.02 of the PHP license, | +# | that is bundled with this package in the file LICENSE, and is | +# | available at through the world-wide-web at | +# | http://www.php.net/license/2_02.txt. | +# | If you did not receive a copy of the PHP license and are unable to | +# | obtain it through the world-wide-web, please send a note to | +# | license@php.net so we can mail you a copy immediately. | +# +----------------------------------------------------------------------+ +# | Author: Sascha Schumann | +# +----------------------------------------------------------------------+ +# +# $Id: dynlib.mk,v 1.4 2002/02/28 08:25:30 sebastian Exp $ +# + +all: all-recursive + +include $(builddir)/libs.mk + +include $(top_srcdir)/build/rules.mk diff --git a/contrib/php/build/fastgen.sh b/contrib/php/build/fastgen.sh new file mode 100755 index 0000000..05b85b3 --- /dev/null +++ b/contrib/php/build/fastgen.sh @@ -0,0 +1,80 @@ +#! /bin/sh +# +# +----------------------------------------------------------------------+ +# | PHP Version 4 | +# +----------------------------------------------------------------------+ +# | Copyright (c) 1997-2002 The PHP Group | +# +----------------------------------------------------------------------+ +# | This source file is subject to version 2.02 of the PHP license, | +# | that is bundled with this package in the file LICENSE, and is | +# | available at through the world-wide-web at | +# | http://www.php.net/license/2_02.txt. | +# | If you did not receive a copy of the PHP license and are unable to | +# | obtain it through the world-wide-web, please send a note to | +# | license@php.net so we can mail you a copy immediately. | +# +----------------------------------------------------------------------+ +# | Author: Sascha Schumann | +# +----------------------------------------------------------------------+ +# +# $Id: fastgen.sh,v 1.14 2002/02/28 08:25:33 sebastian Exp $ +# + +if test "$#" = "0"; then + echo "Usage: fastgen.sh " +fi + +srcdir=$1 +shift + +mkdir_p=$1 +shift + +bsd_makefile=$1 +shift + +top_srcdir=`(cd $srcdir; pwd)` +top_builddir=`pwd` + +if test "$mkdir_p" = "yes"; then + mkdir_p="mkdir -p" +else + mkdir_p="$top_srcdir/build/shtool mkdir -p" +fi + +if test "$bsd_makefile" = "yes"; then + (cd $top_srcdir; ./build/bsd_makefile) + + for makefile in $@; do + echo "fastgen.sh: creating $makefile" + dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'` + $mkdir_p "$dir/" + + cat - $top_srcdir/$makefile.in <$makefile +top_srcdir = $top_srcdir +top_builddir = $top_builddir +srcdir = $top_srcdir/$dir +builddir = $top_builddir/$dir +VPATH = $top_srcdir/$dir +EOF + + test -z "$dir" && dir=. + touch $dir/.deps + done +else + for makefile in $@; do + echo "fastgen.sh: creating $makefile" + dir=`echo $makefile|sed 's%/*[^/][^/]*$%%'` + $mkdir_p "$dir/" + + cat - $top_srcdir/$makefile.in <$makefile +top_srcdir = $top_srcdir +top_builddir = $top_builddir +srcdir = $top_srcdir/$dir +builddir = $top_builddir/$dir +VPATH = $top_srcdir/$dir +EOF + + test -z "$dir" && dir=. + touch $dir/.deps + done +fi diff --git a/contrib/php/build/library.mk b/contrib/php/build/library.mk new file mode 100644 index 0000000..e725598 --- /dev/null +++ b/contrib/php/build/library.mk @@ -0,0 +1,23 @@ +# +----------------------------------------------------------------------+ +# | PHP Version 4 | +# +----------------------------------------------------------------------+ +# | Copyright (c) 1997-2002 The PHP Group | +# +----------------------------------------------------------------------+ +# | This source file is subject to version 2.02 of the PHP license, | +# | that is bundled with this package in the file LICENSE, and is | +# | available at through the world-wide-web at | +# | http://www.php.net/license/2_02.txt. | +# | If you did not receive a copy of the PHP license and are unable to | +# | obtain it through the world-wide-web, please send a note to | +# | license@php.net so we can mail you a copy immediately. | +# +----------------------------------------------------------------------+ +# | Author: Sascha Schumann | +# +----------------------------------------------------------------------+ +# +# $Id: library.mk,v 1.12 2002/02/28 08:25:33 sebastian Exp $ +# + +LTLIBRARY_OBJECTS = $(LTLIBRARY_SOURCES:.c=.lo) $(LTLIBRARY_OBJECTS_X) + +$(LTLIBRARY_NAME): $(LTLIBRARY_OBJECTS) $(LTLIBRARY_DEPENDENCIES) + $(LINK) $(LTLIBRARY_LDFLAGS) $(LTLIBRARY_OBJECTS) $(LTLIBRARY_LIBADD) diff --git a/contrib/php/build/ltlib.mk b/contrib/php/build/ltlib.mk new file mode 100644 index 0000000..2580bc0 --- /dev/null +++ b/contrib/php/build/ltlib.mk @@ -0,0 +1,24 @@ +# +----------------------------------------------------------------------+ +# | PHP Version 4 | +# +----------------------------------------------------------------------+ +# | Copyright (c) 1997-2002 The PHP Group | +# +----------------------------------------------------------------------+ +# | This source file is subject to version 2.02 of the PHP license, | +# | that is bundled with this package in the file LICENSE, and is | +# | available at through the world-wide-web at | +# | http://www.php.net/license/2_02.txt. | +# | If you did not receive a copy of the PHP license and are unable to | +# | obtain it through the world-wide-web, please send a note to | +# | license@php.net so we can mail you a copy immediately. | +# +----------------------------------------------------------------------+ +# | Author: Sascha Schumann | +# +----------------------------------------------------------------------+ +# +# $Id: ltlib.mk,v 1.7 2002/02/28 08:25:34 sebastian Exp $ +# + +targets = $(LTLIBRARY_NAME) + +include $(top_srcdir)/build/rules.mk +include $(top_srcdir)/build/library.mk + diff --git a/contrib/php/build/mkdep.awk b/contrib/php/build/mkdep.awk new file mode 100644 index 0000000..8542b1b --- /dev/null +++ b/contrib/php/build/mkdep.awk @@ -0,0 +1,75 @@ +# +----------------------------------------------------------------------+ +# | PHP Version 4 | +# +----------------------------------------------------------------------+ +# | Copyright (c) 2000 The PHP Group | +# +----------------------------------------------------------------------+ +# | This source file is subject to version 2.02 of the PHP license, | +# | that is bundled with this package in the file LICENSE, and is | +# | available at through the world-wide-web at | +# | http://www.php.net/license/2_02.txt. | +# | If you did not receive a copy of the PHP license and are unable to | +# | obtain it through the world-wide-web, please send a note to | +# | license@php.net so we can mail you a copy immediately. | +# +----------------------------------------------------------------------+ +# | Author: Sascha Schumann | +# +----------------------------------------------------------------------+ +# +# $Id: mkdep.awk,v 1.5 2002/02/28 08:25:35 sebastian Exp $ +# +# Usage: +# +# echo top_srcdir top_builddir srcdir CPP [CPP-ARGS] filenames | \ +# awk -f mkdep.awk > dependencies + + +{ + top_srcdir=$1 + top_builddir=$2 + srcdir=$3 + cmd=$4 + + for (i = 5; i <= NF; i++) { + if (match($i, "^-[A-Z]") == 0) + break; + cmd=cmd " " $i + } + + dif=i-1 + + for (; i <= NF; i++) + filenames[i-dif]=$i + + no_files=NF-dif + + for(i = 1; i <= no_files; i++) { + if (system("test -r " filenames[i]) != 0) + continue + + target=filenames[i] + sub(srcdir "/", "", target) + target2=target + sub("\.(c|cpp)$", ".lo", target); + sub("\.(c|cpp)$", ".slo", target2); + + for (e in used) + delete used[e] + + cmdx=cmd " " filenames[i] + done=0 + while ((cmdx | getline) > 0) { + if (match($0, "^# [0-9]* \".*\.h\"") != 0) { + if (sub(top_srcdir, "$(top_srcdir)", $3) == 0) + sub(top_builddir, "$(top_builddir)", $3) + if (substr($3,2,1) != "/" && used[$3] != 1) { + if (done == 0) + printf(target " " target2 ":") + done=1 + printf(" \\\n\t" substr($3,2,length($3)-2)) + used[$3] = 1; + } + } + } + if (done == 1) + print "\n" + } +} diff --git a/contrib/php/build/program.mk b/contrib/php/build/program.mk new file mode 100644 index 0000000..eee15cf --- /dev/null +++ b/contrib/php/build/program.mk @@ -0,0 +1,23 @@ +# +----------------------------------------------------------------------+ +# | PHP Version 4 | +# +----------------------------------------------------------------------+ +# | Copyright (c) 1997-2002 The PHP Group | +# +----------------------------------------------------------------------+ +# | This source file is subject to version 2.02 of the PHP license, | +# | that is bundled with this package in the file LICENSE, and is | +# | available at through the world-wide-web at | +# | http://www.php.net/license/2_02.txt. | +# | If you did not receive a copy of the PHP license and are unable to | +# | obtain it through the world-wide-web, please send a note to | +# | license@php.net so we can mail you a copy immediately. | +# +----------------------------------------------------------------------+ +# | Author: Sascha Schumann | +# +----------------------------------------------------------------------+ +# +# $Id: program.mk,v 1.6 2002/02/28 08:25:35 sebastian Exp $ +# + +PROGRAM_OBJECTS = $(PROGRAM_SOURCES:.c=.lo) + +$(PROGRAM_NAME): $(PROGRAM_DEPENDENCIES) $(PROGRAM_OBJECTS) + $(LINK_CLEAN) $(PROGRAM_LDFLAGS) $(PROGRAM_OBJECTS) $(PROGRAM_LDADD) diff --git a/contrib/php/build/rules.mk b/contrib/php/build/rules.mk new file mode 100644 index 0000000..8e7bce7 --- /dev/null +++ b/contrib/php/build/rules.mk @@ -0,0 +1,77 @@ +# +----------------------------------------------------------------------+ +# | PHP Version 4 | +# +----------------------------------------------------------------------+ +# | Copyright (c) 1997-2002 The PHP Group | +# +----------------------------------------------------------------------+ +# | This source file is subject to version 2.02 of the PHP license, | +# | that is bundled with this package in the file LICENSE, and is | +# | available at through the world-wide-web at | +# | http://www.php.net/license/2_02.txt. | +# | If you did not receive a copy of the PHP license and are unable to | +# | obtain it through the world-wide-web, please send a note to | +# | license@php.net so we can mail you a copy immediately. | +# +----------------------------------------------------------------------+ +# | Author: Sascha Schumann | +# +----------------------------------------------------------------------+ +# +# $Id: rules_pear.mk,v 1.16 2002/02/28 08:25:37 sebastian Exp $ +# + +include $(top_srcdir)/build/rules_common.mk + +install_targets = install-modules + +all: all-recursive +install: install-recursive + +distclean-recursive depend-recursive clean-recursive all-recursive install-recursive: + @otarget=`echo $@|sed s/-recursive//`; \ + list='$(SUBDIRS)'; for i in $$list; do \ + target="$$otarget"; \ + echo "Making $$target in $$i"; \ + if test "$$i" = "."; then \ + ok=yes; \ + target="$$target-p"; \ + fi; \ + (cd $$i && $(MAKE) $$target) || exit 1; \ + done; \ + if test "$$otarget" = "all" && test -z '$(targets)'; then ok=yes; fi; \ + if test "$$ok" != "yes"; then $(MAKE) "$$otarget-p" || exit 1; fi + +all-p: $(targets) +install-p: $(targets) $(install_targets) +distclean-p depend-p clean-p: + +depend: depend-recursive + @echo $(top_srcdir) $(top_builddir) $(srcdir) $(CPP) $(INCLUDES) $(EXTRA_INCLUDES) $(DEFS) $(CPPFLAGS) $(srcdir)/*.c *.c | $(AWK) -f $(top_srcdir)/build/mkdep.awk > $(builddir)/.deps || true + +clean: clean-recursive clean-x + +clean-x: + rm -f $(targets) *.lo *.slo *.la *.o $(CLEANFILES) + rm -rf .libs + +distclean: distclean-recursive clean-x + rm -f config.cache config.log config.status config_vars.mk libtool \ + config.h stamp-h Makefile build-defs.h php4.spec libphp4.module + +cvsclean: + @for i in `find . -name .cvsignore`; do \ + (cd `dirname $$i` 2>/dev/null && rm -rf `cat .cvsignore` *.o *.a || true); \ + done + @rm -f $(SUBDIRS) 2>/dev/null || true + +install-modules: + if [ -d modules ]; then \ + $(mkinstalldirs) $(moduledir) && \ + echo "installing shared modules into $(moduledir)" && \ + rm -f modules/*.la && \ + cp modules/* $(moduledir); \ + fi + +include $(builddir)/.deps + +.PHONY: all-recursive clean-recursive install-recursive \ +$(install_targets) install all clean depend depend-recursive shared \ +distclean-recursive distclean clean-x all-p install-p distclean-p \ +depend-p clean-p diff --git a/contrib/php/build/rules_common.mk b/contrib/php/build/rules_common.mk new file mode 100644 index 0000000..296d9f7 --- /dev/null +++ b/contrib/php/build/rules_common.mk @@ -0,0 +1,77 @@ +# +----------------------------------------------------------------------+ +# | PHP Version 4 | +# +----------------------------------------------------------------------+ +# | Copyright (c) 1997-2002 The PHP Group | +# +----------------------------------------------------------------------+ +# | This source file is subject to version 2.02 of the PHP license, | +# | that is bundled with this package in the file LICENSE, and is | +# | available at through the world-wide-web at | +# | http://www.php.net/license/2_02.txt. | +# | If you did not receive a copy of the PHP license and are unable to | +# | obtain it through the world-wide-web, please send a note to | +# | license@php.net so we can mail you a copy immediately. | +# +----------------------------------------------------------------------+ +# | Author: Sascha Schumann | +# +----------------------------------------------------------------------+ +# +# $Id: rules_common.mk,v 1.11 2002/02/28 08:25:36 sebastian Exp $ +# + +include $(top_builddir)/config_vars.mk + +COMMON_FLAGS = $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) +COMPILE = $(CC) $(COMMON_FLAGS) $(CFLAGS) $(EXTRA_CFLAGS) +CXX_COMPILE = $(CXX) $(COMMON_FLAGS) $(CXXFLAGS) $(EXTRA_CXXFLAGS) + +SHARED_COMPILE = $(SHARED_LIBTOOL) --mode=compile $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) -prefer-pic $(EXTRA_CFLAGS) -c $< && touch $@ +CXX_SHARED_COMPILE = $(SHARED_LIBTOOL) --mode=compile $(CXX) $(COMMON_FLAGS) $(CXXFLAGS_CLEAN) -prefer-pic $(EXTRA_CXXFLAGS) -c $< && touch $@ + +LINK = $(LIBTOOL) --mode=link $(COMPILE) $(LDFLAGS) -o $@ +LINK_CLEAN = $(LIBTOOL) --mode=link $(CC) $(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) -o $@ + +mkinstalldirs = $(top_srcdir)/build/shtool mkdir -p +INSTALL = $(top_srcdir)/build/shtool install -c +INSTALL_DATA = $(INSTALL) -m 644 + +DEFS = -I. -I$(srcdir) -I$(top_builddir)/main -I$(top_srcdir) + +moduledir = $(EXTENSION_DIR) + +CXX_SUFFIX = .cpp + +.SUFFIXES: +.SUFFIXES: .slo .c $(CXX_SUFFIX) .lo .o .s .y .l + +.c.o: + $(COMPILE) -c $< + +$(CXX_SUFFIX).o: + $(CXX_COMPILE) -c $< + +.s.o: + $(COMPILE) -c $< + +.c.lo: + $(PHP_COMPILE) + +$(CXX_SUFFIX).lo: + $(CXX_PHP_COMPILE) + +.s.lo: + $(PHP_COMPILE) + +.c.slo: + $(SHARED_COMPILE) + +$(CXX_SUFFIX).slo: + $(CXX_SHARED_COMPILE) + +.y.c: + $(YACC) $(YFLAGS) $< && mv y.tab.c $*.c + if test -f y.tab.h; then \ + if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \ + else :; fi + +.l.c: + $(LEX) $(LFLAGS) $< && mv $(LEX_OUTPUT_ROOT).c $@ + diff --git a/contrib/php/build/shtool b/contrib/php/build/shtool new file mode 100755 index 0000000..4c1a739 --- /dev/null +++ b/contrib/php/build/shtool @@ -0,0 +1,716 @@ +#!/bin/sh +## +## GNU shtool -- The GNU Portable Shell Tool +## Copyright (c) 1994-2000 Ralf S. Engelschall +## +## See http://www.gnu.org/software/shtool/ for more information. +## See ftp://ftp.gnu.org/gnu/shtool/ for latest version. +## +## Version 1.4.9 (16-Apr-2000) +## Ingredients: 3/17 available modules +## + +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software +## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +## USA, or contact Ralf S. Engelschall . +## +## Notice: Given that you include this file verbatim into your own +## source tree, you are justified in saying that it remains separate +## from your package, and that this way you are simply just using GNU +## shtool. So, in this situation, there is no requirement that your +## package itself is licensed under the GNU General Public License in +## order to take advantage of GNU shtool. +## + +## +## Usage: shtool [] [ [] []] +## +## Available commands: +## echo Print string with optional construct expansion +## install Install a program, script or datafile +## mkdir Make one or more directories +## +## Not available commands (because module was not built-in): +## mdate Pretty-print modification time of a file or dir +## table Pretty-print a field-separated list as a table +## prop Display progress with a running propeller +## move Move files with simultaneous substitution +## mkln Make link with calculation of relative paths +## mkshadow Make a shadow tree through symbolic links +## fixperm Fix file permissions inside a source tree +## tarball Roll distribution tarballs +## guessos Simple operating system guesser +## arx Extended archive command +## slo Separate linker options by library class +## scpp Sharing C Pre-Processor +## version Generate and maintain a version information file +## path Deal with program paths +## + +if [ $# -eq 0 ]; then + echo "$0:Error: invalid command line" 1>&2 + echo "$0:Hint: run \`$0 -h' for usage" 1>&2 + exit 1 +fi +if [ ".$1" = ".-h" -o ".$1" = ".--help" ]; then + echo "This is GNU shtool, version 1.4.9 (16-Apr-2000)" + echo "Copyright (c) 1994-2000 Ralf S. Engelschall " + echo "Report bugs to " + echo '' + echo "Usage: shtool [] [ [] []]" + echo '' + echo 'Available global :' + echo ' -v, --version display shtool version information' + echo ' -h, --help display shtool usage help page (this one)' + echo ' -d, --debug display shell trace information' + echo '' + echo 'Available [] []:' + echo ' echo [-n] [-e] [ ...]' + echo ' install [-v] [-t] [-c] [-C] [-s] [-m] [-o] [-g]' + echo ' [-e] ' + echo ' mkdir [-t] [-f] [-p] [-m] [ ...]' + echo '' + echo 'Not available (because module was not built-in):' + echo ' mdate [-n] [-z] [-s] [-d] [-f] [-o] ' + echo ' table [-F] [-w] [-c] [-s] ...' + echo ' prop [-p]' + echo ' move [-v] [-t] [-e] [-p] ' + echo ' mkln [-t] [-f] [-s] [ ...] ' + echo ' mkshadow [-v] [-t] [-a] ' + echo ' fixperm [-v] [-t] [ ...]' + echo ' tarball [-t] [-v] [-o ] [-c ] [-d ] [-u' + echo ' ] [-g ] [-e ] [ ...]' + echo ' guessos ' + echo ' arx [-t] [-C] [ ...]' + echo ' slo [-p] -- -L -l [-L -l ...]' + echo ' scpp [-v] [-p] [-f] [-o] [-t] [-M]' + echo ' [-D] [-C] [ ...]' + echo ' version [-l] [-n] [-p] [-s] [-i]' + echo ' [-d] ' + echo ' path [-s] [-r] [-d] [-b] [-m] [-p] [ ...]' + echo '' + exit 0 +fi +if [ ".$1" = ".-v" -o ".$1" = ."--version" ]; then + echo "GNU shtool 1.4.9 (16-Apr-2000)" + exit 0 +fi +if [ ".$1" = ".-d" -o ".$1" = ."--debug" ]; then + shift + set -x +fi +name=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'` +case "$name" in + echo|install|mkdir ) + # implicit tool command selection + tool="$name" + ;; + * ) + # explicit tool command selection + tool="$1" + shift + ;; +esac +arg_spec="" +opt_spec="" +gen_tmpfile=no + +## +## DISPATCH INTO SCRIPT PROLOG +## + +case $tool in + echo ) + str_tool="echo" + str_usage="[-n] [-e] [ ...]" + arg_spec="0+" + opt_spec="n.e." + opt_n=no + opt_e=no + ;; + install ) + str_tool="install" + str_usage="[-v] [-t] [-c] [-C] [-s] [-m] [-o] [-g] [-e] " + arg_spec="2=" + opt_spec="v.t.c.C.s.m:o:g:e:" + opt_v=no + opt_t=no + opt_c=no + opt_C=no + opt_s=no + opt_m="" + opt_o="" + opt_g="" + opt_e="" + ;; + mkdir ) + str_tool="mkdir" + str_usage="[-t] [-f] [-p] [-m] [ ...]" + arg_spec="1+" + opt_spec="t.f.p.m:" + opt_t=no + opt_f=no + opt_p=no + opt_m="" + ;; + -* ) + echo "$0:Error: unknown option \`$tool'" 2>&1 + echo "$0:Hint: run \`$0 -h' for usage" 2>&1 + exit 1 + ;; + * ) + echo "$0:Error: unknown command \`$tool'" 2>&1 + echo "$0:Hint: run \`$0 -h' for usage" 2>&1 + exit 1 + ;; +esac + +## +## COMMON UTILITY CODE +## + +# determine name of tool +if [ ".$tool" != . ]; then + # used inside shtool script + toolcmd="$0 $tool" + toolcmdhelp="shtool $tool" + msgprefix="shtool:$tool" +else + # used as standalone script + toolcmd="$0" + toolcmdhelp="sh $0" + msgprefix="$str_tool" +fi + +# parse argument specification string +eval `echo $arg_spec |\ + sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'` + +# parse option specification string +eval `echo h.$opt_spec |\ + sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'` + +# interate over argument line +opt_PREV='' +while [ $# -gt 0 ]; do + # special option stops processing + if [ ".$1" = ".--" ]; then + shift + break + fi + + # determine option and argument + opt_ARG_OK=no + if [ ".$opt_PREV" != . ]; then + # merge previous seen option with argument + opt_OPT="$opt_PREV" + opt_ARG="$1" + opt_ARG_OK=yes + opt_PREV='' + else + # split argument into option and argument + case "$1" in + -[a-zA-Z0-9]*) + eval `echo "x$1" |\ + sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \ + -e 's/";\(.*\)$/"; opt_ARG="\1"/'` + ;; + -[a-zA-Z0-9]) + opt_OPT=`echo "x$1" | cut -c3-` + opt_ARG='' + ;; + *) + break + ;; + esac + fi + + # eat up option + shift + + # determine whether option needs an argument + eval "opt_MODE=\$opt_MODE_${opt_OPT}" + if [ ".$opt_ARG" = . -a ".$opt_ARG_OK" != .yes ]; then + if [ ".$opt_MODE" = ".:" -o ".$opt_MODE" = ".+" ]; then + opt_PREV="$opt_OPT" + continue + fi + fi + + # process option + case $opt_MODE in + '.' ) + # boolean option + eval "opt_${opt_OPT}=yes" + ;; + ':' ) + # option with argument (multiple occurances override) + eval "opt_${opt_OPT}=\"\$opt_ARG\"" + ;; + '+' ) + # option with argument (multiple occurances append) + eval "opt_${opt_OPT}=\"\$opt_${opt_OPT} \$opt_ARG\"" + ;; + * ) + echo "$msgprefix:Error: unknown option: \`-$opt_OPT'" 1>&2 + echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2 + exit 1 + ;; + esac +done +if [ ".$opt_PREV" != . ]; then + echo "$msgprefix:Error: missing argument to option \`-$opt_PREV'" 1>&2 + echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2 + exit 1 +fi + +# process help option +if [ ".$opt_h" = .yes ]; then + echo "Usage: $toolcmdhelp $str_usage" + exit 0 +fi + +# complain about incorrect number of arguments +case $arg_MODE in + '=' ) + if [ $# -ne $arg_NUMS ]; then + echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2 + echo "$msgprefix:Hint: run \`$toolcmd -h' or \`man shtool' for details" 1>&2 + exit 1 + fi + ;; + '+' ) + if [ $# -lt $arg_NUMS ]; then + echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2 + echo "$msgprefix:Hint: run \`$toolcmd -h' or \`man shtool' for details" 1>&2 + exit 1 + fi + ;; +esac + +# establish a temporary file on request +if [ ".$gen_tmpfile" = .yes ]; then + if [ ".$TMPDIR" != . ]; then + tmpdir="$TMPDIR" + elif [ ".$TEMPDIR" != . ]; then + tmpdir="$TEMPDIR" + else + tmpdir="/tmp" + fi + tmpfile="$tmpdir/.shtool.$$" + rm -f $tmpfile >/dev/null 2>&1 + touch $tmpfile +fi + +## +## DISPATCH INTO SCRIPT BODY +## + +case $tool in + +echo ) + ## + ## echo -- Print string with optional construct expansion + ## Copyright (c) 1998-2000 Ralf S. Engelschall + ## Originally written for WML as buildinfo + ## + + text="$*" + + # check for broken escape sequence expansion + seo='' + bytes=`echo '\1' | wc -c | awk '{ printf("%s", $1); }'` + if [ ".$bytes" != .3 ]; then + bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'` + if [ ".$bytes" = .3 ]; then + seo='-E' + fi + fi + + # check for existing -n option (to suppress newline) + minusn='' + bytes=`echo -n 123 2>/dev/null | wc -c | awk '{ printf("%s", $1); }'` + if [ ".$bytes" = .3 ]; then + minusn='-n' + fi + + # determine terminal bold sequence + term_bold='' + term_norm='' + if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[Bb]'`" != . ]; then + case $TERM in + # for the most important terminal types we directly know the sequences + xterm|xterm*|vt220|vt220*) + term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' /dev/null` + term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' /dev/null` + ;; + vt100|vt100*) + term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' /dev/null` + term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' /dev/null` + ;; + # for all others, we try to use a possibly existing `tput' or `tcout' utility + * ) + paths=`echo $PATH | sed -e 's/:/ /g'` + for tool in tput tcout; do + for dir in $paths; do + if [ -r "$dir/$tool" ]; then + for seq in bold md smso; do # 'smso' is last + bold="`$dir/$tool $seq 2>/dev/null`" + if [ ".$bold" != . ]; then + term_bold="$bold" + break + fi + done + if [ ".$term_bold" != . ]; then + for seq in sgr0 me rmso reset; do # 'reset' is last + norm="`$dir/$tool $seq 2>/dev/null`" + if [ ".$norm" != . ]; then + term_norm="$norm" + break + fi + done + fi + break + fi + done + if [ ".$term_bold" != . -a ".$term_norm" != . ]; then + break; + fi + done + ;; + esac + if [ ".$term_bold" = . -o ".$term_norm" = . ]; then + echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2 + fi + fi + + # determine user name + username='' + if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[uU]'`" != . ]; then + username="$LOGNAME" + if [ ".$username" = . ]; then + username="$USER" + if [ ".$username" = . ]; then + username="`(whoami) 2>/dev/null |\ + awk '{ printf("%s", $1); }'`" + if [ ".$username" = . ]; then + username="`(who am i) 2>/dev/null |\ + awk '{ printf("%s", $1); }'`" + if [ ".$username" = . ]; then + username='unknown' + fi + fi + fi + fi + fi + + # determine user id + userid='' + if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%U'`" != . ]; then + userid="`(id -u) 2>/dev/null`" + if [ ".$userid" = . ]; then + str="`(id) 2>/dev/null`" + if [ ".`echo $str | grep '^uid[ ]*=[ ]*[0-9]*('`" != . ]; then + userid=`echo $str | sed -e 's/^uid[ ]*=[ ]*//' -e 's/(.*//'` + fi + if [ ".$userid" = . ]; then + userid=`egrep "^${username}:" /etc/passwd 2>/dev/null | \ + sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'` + if [ ".$userid" = . ]; then + userid=`(ypcat passwd) 2>/dev/null | + egrep "^${username}:" | \ + sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'` + if [ ".$userid" = . ]; then + userid='?' + fi + fi + fi + fi + fi + + # determine host name + hostname='' + if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%h'`" != . ]; then + hostname="`(uname -n) 2>/dev/null |\ + awk '{ printf("%s", $1); }'`" + if [ ".$hostname" = . ]; then + hostname="`(hostname) 2>/dev/null |\ + awk '{ printf("%s", $1); }'`" + if [ ".$hostname" = . ]; then + hostname='unknown' + fi + fi + case $hostname in + *.* ) + domainname=".`echo $hostname | cut -d. -f2-`" + hostname="`echo $hostname | cut -d. -f1`" + ;; + esac + fi + + # determine domain name + domainname='' + if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%d'`" != . ]; then + if [ ".$domainname" = . ]; then + if [ -f /etc/resolv.conf ]; then + domainname="`egrep '^[ ]*domain' /etc/resolv.conf | head -1 |\ + sed -e 's/.*domain//' \ + -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \ + -e 's/^\.//' -e 's/^/./' |\ + awk '{ printf("%s", $1); }'`" + if [ ".$domainname" = . ]; then + domainname="`egrep '^[ ]*search' /etc/resolv.conf | head -1 |\ + sed -e 's/.*search//' \ + -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \ + -e 's/ .*//' -e 's/ .*//' \ + -e 's/^\.//' -e 's/^/./' |\ + awk '{ printf("%s", $1); }'`" + fi + fi + fi + fi + + # determine current time + time_day='' + time_month='' + time_year='' + time_monthname='' + if [ ".$opt_e" = .yes -a ".`echo $text | egrep '%[DMYm]'`" != . ]; then + time_day=`date '+%d'` + time_month=`date '+%m'` + time_year=`date '+%Y' 2>/dev/null` + if [ ".$time_year" = . ]; then + time_year=`date '+%y'` + case $time_year in + [5-9][0-9]) time_year="19$time_year" ;; + [0-4][0-9]) time_year="20$time_year" ;; + esac + fi + case $time_month in + 1|01) time_monthname='Jan' ;; + 2|02) time_monthname='Feb' ;; + 3|03) time_monthname='Mar' ;; + 4|04) time_monthname='Apr' ;; + 5|05) time_monthname='May' ;; + 6|06) time_monthname='Jun' ;; + 7|07) time_monthname='Jul' ;; + 8|08) time_monthname='Aug' ;; + 9|09) time_monthname='Sep' ;; + 10) time_monthname='Oct' ;; + 11) time_monthname='Nov' ;; + 12) time_monthname='Dec' ;; + esac + fi + + # expand special ``%x'' constructs + if [ ".$opt_e" = .yes ]; then + text=`echo $seo "$text" |\ + sed -e "s/%B/${term_bold}/g" \ + -e "s/%b/${term_norm}/g" \ + -e "s/%u/${username}/g" \ + -e "s/%U/${userid}/g" \ + -e "s/%h/${hostname}/g" \ + -e "s/%d/${domainname}/g" \ + -e "s/%D/${time_day}/g" \ + -e "s/%M/${time_month}/g" \ + -e "s/%Y/${time_year}/g" \ + -e "s/%m/${time_monthname}/g" 2>/dev/null` + fi + + # create output + if [ .$opt_n = .no ]; then + echo $seo "$text" + else + # the harder part: echo -n is best, because + # awk may complain about some \xx sequences. + if [ ".$minusn" != . ]; then + echo $seo $minusn "$text" + else + echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text" + fi + fi + ;; + +install ) + ## + ## install -- Install a program, script or datafile + ## Copyright (c) 1997-2000 Ralf S. Engelschall + ## Originally written for shtool + ## + + src="$1" + dst="$2" + + # If destination is a directory, append the input filename + if [ -d $dst ]; then + dst=`echo "$dst" | sed -e 's:/$::'` + dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'` + dst="$dst/$dstfile" + fi + + # Add a possible extension to src and dst + if [ ".$opt_e" != . ]; then + src="$src$opt_e" + dst="$dst$opt_e" + fi + + # Check for correct arguments + if [ ".$src" = ".$dst" ]; then + echo "$msgprefix:Error: source and destination are the same" 1>&2 + exit 1 + fi + + # Make a temp file name in the destination directory + dstdir=`echo $dst | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;'` + dsttmp="$dstdir/#INST@$$#" + + # Verbosity + if [ ".$opt_v" = .yes ]; then + echo "$src -> $dst" 1>&2 + fi + + # Copy or move the file name to the temp name + # (because we might be not allowed to change the source) + if [ ".$opt_C" = .yes ]; then + opt_c=yes + fi + if [ ".$opt_c" = .yes ]; then + if [ ".$opt_t" = .yes ]; then + echo "cp $src $dsttmp" 1>&2 + fi + cp $src $dsttmp || exit $? + else + if [ ".$opt_t" = .yes ]; then + echo "mv $src $dsttmp" 1>&2 + fi + mv $src $dsttmp || exit $? + fi + + # Adjust the target file + # (we do chmod last to preserve setuid bits) + if [ ".$opt_s" = .yes ]; then + if [ ".$opt_t" = .yes ]; then + echo "strip $dsttmp" 1>&2 + fi + strip $dsttmp || exit $? + fi + if [ ".$opt_o" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chown $opt_o $dsttmp" 1>&2 + fi + chown $opt_o $dsttmp || exit $? + fi + if [ ".$opt_g" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chgrp $opt_g $dsttmp" 1>&2 + fi + chgrp $opt_g $dsttmp || exit $? + fi + if [ ".$opt_m" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chmod $opt_m $dsttmp" 1>&2 + fi + chmod $opt_m $dsttmp || exit $? + fi + + # Determine whether to do a quick install + # (has to be done _after_ the strip was already done) + quick=no + if [ ".$opt_C" = .yes ]; then + if [ -r $dst ]; then + if cmp -s $src $dst; then + quick=yes + fi + fi + fi + + # Finally install the file to the real destination + if [ $quick = yes ]; then + if [ ".$opt_t" = .yes ]; then + echo "rm -f $dsttmp" 1>&2 + fi + rm -f $dsttmp + else + if [ ".$opt_t" = .yes ]; then + echo "rm -f $dst && mv $dsttmp $dst" 1>&2 + fi + rm -f $dst && mv $dsttmp $dst + fi + ;; + +mkdir ) + ## + ## mkdir -- Make one or more directories + ## Copyright (c) 1996-2000 Ralf S. Engelschall + ## Originally written for public domain by Noah Friedman + ## Cleaned up and enhanced for shtool + ## + + errstatus=0 + for p in ${1+"$@"}; do + # if the directory already exists... + if [ -d "$p" ]; then + if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then + echo "$msgprefix:Error: directory already exists: $p" 1>&2 + errstatus=1 + break + else + continue + fi + fi + # if the directory has to be created... + if [ ".$opt_p" = .no ]; then + if [ ".$opt_t" = .yes ]; then + echo "mkdir $p" 1>&2 + fi + mkdir $p || errstatus=$? + else + # the smart situation + set fnord `echo ":$p" |\ + sed -e 's/^:\//%/' \ + -e 's/^://' \ + -e 's/\// /g' \ + -e 's/^%/\//'` + shift + pathcomp='' + for d in ${1+"$@"}; do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp="./$pathcomp" ;; + esac + if [ ! -d "$pathcomp" ]; then + if [ ".$opt_t" = .yes ]; then + echo "mkdir $pathcomp" 1>&2 + fi + mkdir $pathcomp || errstatus=$? + if [ ".$opt_m" != . ]; then + if [ ".$opt_t" = .yes ]; then + echo "chmod $opt_m $pathcomp" 1>&2 + fi + chmod $opt_m $pathcomp || errstatus=$? + fi + fi + pathcomp="$pathcomp/" + done + fi + done + exit $errstatus + ;; + +esac + +exit 0 + +##EOF## diff --git a/contrib/php/config.guess b/contrib/php/config.guess new file mode 100755 index 0000000..78f6b92 --- /dev/null +++ b/contrib/php/config.guess @@ -0,0 +1,1409 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2003-01-10' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:MicroBSD:*:*) + echo ${UNAME_MACHINE}-unknown-microbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + eval $set_cc_for_build + cat <$dummy.s + .data +\$Lformat: + .byte 37,100,45,37,120,10,0 # "%d-%x\n" + + .text + .globl main + .align 4 + .ent main +main: + .frame \$30,16,\$26,0 + ldgp \$29,0(\$27) + .prologue 1 + .long 0x47e03d80 # implver \$0 + lda \$2,-1 + .long 0x47e20c21 # amask \$2,\$1 + lda \$16,\$Lformat + mov \$0,\$17 + not \$1,\$18 + jsr \$26,printf + ldgp \$29,0(\$26) + mov 0,\$16 + jsr \$26,exit + .end main +EOF + $CC_FOR_BUILD -o $dummy $dummy.s 2>/dev/null + if test "$?" = 0 ; then + case `$dummy` in + 0-0) + UNAME_MACHINE="alpha" + ;; + 1-0) + UNAME_MACHINE="alphaev5" + ;; + 1-1) + UNAME_MACHINE="alphaev56" + ;; + 1-101) + UNAME_MACHINE="alphapca56" + ;; + 2-303) + UNAME_MACHINE="alphaev6" + ;; + 2-307) + UNAME_MACHINE="alphaev67" + ;; + 2-1307) + UNAME_MACHINE="alphaev68" + ;; + 3-1307) + UNAME_MACHINE="alphaev7" + ;; + esac + fi + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && exit 0 + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo rs6000-ibm-aix3.2.5 + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit 0 ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + # avoid double evaluation of $set_cc_for_build + test -n "$CC_FOR_BUILD" || eval $set_cc_for_build + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + *:UNICOS/mp:*:*) + echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + # Determine whether the default compiler uses glibc. + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #if __GLIBC__ >= 2 + LIBC=gnu + #else + LIBC= + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:3*) + echo i586-pc-interix3 + exit 0 ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0 + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit 0 ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit 0 ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit 0 ;; + i*86:*:5:[78]*) + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit 0 ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4.3${OS_REL} && exit 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + case `uname -p` in + *86) UNAME_PROCESSOR=i686 ;; + powerpc) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0 + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/contrib/php/config.h.in b/contrib/php/config.h.in new file mode 100644 index 0000000..e30b3d8 --- /dev/null +++ b/contrib/php/config.h.in @@ -0,0 +1,11 @@ +/* config.h.in. Generated automatically from configure.in by autoheader 2.13. */ + +/* Define if your C compiler doesn't accept -c and -o together. */ +#undef NO_MINUS_C_MINUS_O + +/* Define if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Whether to build auth-nds as dynamic module */ +#undef COMPILE_DL_AUTH_NDS + diff --git a/contrib/php/config.m4 b/contrib/php/config.m4 new file mode 100644 index 0000000..9c04032 --- /dev/null +++ b/contrib/php/config.m4 @@ -0,0 +1,6 @@ +PHP_ARG_ENABLE(auth-nds,whether to enable NDS authentication, +[ --enable-auth-nds enable NDS authentication]) + +if test "$PHP_AUTH_NDS" != "no"; then + PHP_EXTENSION(auth-nds, $ext_shared) +fi diff --git a/contrib/php/config.sub b/contrib/php/config.sub new file mode 100755 index 0000000..04baf3d --- /dev/null +++ b/contrib/php/config.sub @@ -0,0 +1,1473 @@ +#! /bin/sh +# Configuration validation subroutine script. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + +timestamp='2003-01-03' + +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit 0;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | msp430 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \ + | clipper-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* \ + | m32r-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | msp430-* \ + | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nv1) + basic_machine=nv1-cray + os=-unicosmp + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i686-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic4x | c4x*) + basic_machine=tic4x-unknown + os=-coff + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -microbsd*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/contrib/php/configure b/contrib/php/configure new file mode 100755 index 0000000..b695112 --- /dev/null +++ b/contrib/php/configure @@ -0,0 +1,6033 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --with-php-config=PATH" +ac_default_prefix= +ac_help="$ac_help + --enable-auth-nds enable NDS authentication" +ac_help="$ac_help + --enable-shared[=PKGS] build shared libraries [default=yes]" +ac_help="$ac_help + --enable-static[=PKGS] build static libraries [default=yes]" +ac_help="$ac_help + --enable-fast-install[=PKGS] optimize for fast installation [default=yes]" +ac_help="$ac_help + --with-gnu-ld assume the C compiler uses GNU ld [default=no]" + +# Find the correct PATH separator. Usually this is `:', but +# DJGPP uses `;' like DOS. +if test "X${PATH_SEPARATOR+set}" != Xset; then + UNAME=${UNAME-`uname 2>/dev/null`} + case X$UNAME in + *-DOS) lt_cv_sys_path_separator=';' ;; + *) lt_cv_sys_path_separator=':' ;; + esac + PATH_SEPARATOR=$lt_cv_sys_path_separator +fi + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +echo=${ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : +else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + IFS="${IFS= }"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +ECHO=$echo +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + +ac_help="$ac_help + --disable-libtool-lock avoid locking (might break parallel builds)" +ac_help="$ac_help + --with-pic try to use only PIC/non-PIC objects [default=use both]" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +for ac_option +do + + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + case "$ac_option" in + -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir="$ac_optarg" ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$ac_optarg" ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file="$ac_optarg" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix="$ac_optarg" ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he) + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM + run sed PROGRAM on installed program names +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$ac_optarg" ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir="$ac_optarg" ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir="$ac_optarg" ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir="$ac_optarg" ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir="$ac_optarg" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir="$ac_optarg" ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir="$ac_optarg" ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir="$ac_optarg" ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix="$ac_optarg" ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix="$ac_optarg" ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix="$ac_optarg" ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name="$ac_optarg" ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir="$ac_optarg" ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir="$ac_optarg" ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site="$ac_optarg" ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir="$ac_optarg" ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir="$ac_optarg" ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes="$ac_optarg" ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries="$ac_optarg" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=Makefile.in + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + + + + +abs_srcdir=`(cd $srcdir && pwd)` + +php_always_shared=yes + + + rm -f config.nice + cat >config.nice<> config.nice + fi + done + + for arg in $0 "$@"; do + echo "'$arg' \\" >> config.nice + done + echo '"$@"' >> config.nice + chmod +x config.nice + + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:734: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:764: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_save_ifs" +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:815: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:847: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 858 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:889: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:894: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:922: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi + +if test "x$CC" != xcc; then + echo $ac_n "checking whether $CC and cc understand -c and -o together""... $ac_c" 1>&6 +echo "configure:955: checking whether $CC and cc understand -c and -o together" >&5 +else + echo $ac_n "checking whether cc understands -c and -o together""... $ac_c" 1>&6 +echo "configure:958: checking whether cc understands -c and -o together" >&5 +fi +set dummy $CC; ac_cc="`echo $2 | + sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" +if eval "test \"`echo '$''{'ac_cv_prog_cc_${ac_cc}_c_o'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'foo(){}' > conftest.c +# Make sure it works both with $CC and with simple cc. +# We do the test twice because some compilers refuse to overwrite an +# existing .o file with -o, though they will create one. +ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&5' +if { (eval echo configure:970: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:971: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; +then + eval ac_cv_prog_cc_${ac_cc}_c_o=yes + if test "x$CC" != xcc; then + # Test first that cc exists at all. + if { ac_try='cc -c conftest.c 1>&5'; { (eval echo configure:976: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + ac_try='cc -c conftest.c -o conftest.o 1>&5' + if { (eval echo configure:978: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } && + test -f conftest.o && { (eval echo configure:979: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; + then + # cc works too. + : + else + # cc exists but doesn't like -o. + eval ac_cv_prog_cc_${ac_cc}_c_o=no + fi + fi + fi +else + eval ac_cv_prog_cc_${ac_cc}_c_o=no +fi +rm -f conftest* + +fi +if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 + cat >> confdefs.h <<\EOF +#define NO_MINUS_C_MINUS_O 1 +EOF + +fi + + + + + PHP_VAR_SUBST="$PHP_VAR_SUBST SHLIB_SUFFIX_NAME" + + SHLIB_SUFFIX_NAME=so + case $host_alias in + *hpux*) + SHLIB_SUFFIX_NAME=sl + ;; + *darwin*) + SHLIB_SUFFIX_NAME=dylib + ;; + esac + + + # Check whether --with-php-config or --without-php-config was given. +if test "${with_php_config+set}" = set; then + withval="$with_php_config" + + PHP_CONFIG=$withval + +else + + PHP_CONFIG=php-config + +fi + + + prefix=`$PHP_CONFIG --prefix 2>/dev/null` + INCLUDES=`$PHP_CONFIG --includes 2>/dev/null` + EXTENSION_DIR=`$PHP_CONFIG --extension-dir` + + if test -z "$prefix"; then + { echo "configure: error: Cannot find php-config. Please use --with-php-config=PATH" 1>&2; exit 1; } + fi + echo $ac_n "checking for PHP prefix""... $ac_c" 1>&6 +echo "configure:1042: checking for PHP prefix" >&5 + echo "$ac_t""$prefix" 1>&6 + echo $ac_n "checking for PHP includes""... $ac_c" 1>&6 +echo "configure:1045: checking for PHP includes" >&5 + echo "$ac_t""$INCLUDES" 1>&6 + echo $ac_n "checking for PHP extension directory""... $ac_c" 1>&6 +echo "configure:1048: checking for PHP extension directory" >&5 + echo "$ac_t""$EXTENSION_DIR" 1>&6 + + + + + + +if test -n "whether to enable NDS authentication"; then + echo $ac_n "checking whether to enable NDS authentication""... $ac_c" 1>&6 +echo "configure:1058: checking whether to enable NDS authentication" >&5 +fi +# Check whether --enable-auth-nds or --disable-auth-nds was given. +if test "${enable_auth_nds+set}" = set; then + enableval="$enable_auth_nds" + PHP_AUTH_NDS=$enableval +else + PHP_AUTH_NDS=no +fi + + +case $PHP_AUTH_NDS in +shared,*) + ext_output="yes, shared" + ext_shared=yes + PHP_AUTH_NDS=`echo "$PHP_AUTH_NDS"|sed 's/^shared,//'` + ;; +shared) + ext_output="yes, shared" + ext_shared=yes + PHP_AUTH_NDS=yes + ;; +no) + ext_output=no + ext_shared=no + ;; +*) + ext_output=yes + ext_shared=no + ;; +esac + +if test "$php_always_shared" = "yes"; then + ext_output="yes, shared" + ext_shared=yes + test "$PHP_AUTH_NDS" = "no" && PHP_AUTH_NDS=yes +fi + +if test -n "whether to enable NDS authentication"; then + echo "$ac_t""$ext_output" 1>&6 +fi + + + + +if test "$PHP_AUTH_NDS" != "no"; then + + EXT_SUBDIRS="$EXT_SUBDIRS auth-nds" + + if test -d "$abs_srcdir/ext/auth-nds"; then + ext_builddir=ext/auth-nds + ext_srcdir=$abs_srcdir/ext/auth-nds + else + ext_builddir=. + ext_srcdir=$abs_srcdir + fi + + if test "$ext_shared" != "shared" && test "$ext_shared" != "yes" && test "" != "cli"; then + + lib_makefile="$ext_builddir/libs.mk" + lib_target="" + + $php_shtool mkdir -p $ext_builddir + if test "$BSD_MAKEFILE" = "yes"; then + lib_include_conf=".include \"\$(top_builddir)/config_vars.mk\"" + else + lib_include_conf="include \$(top_builddir)/config_vars.mk" + fi + cat >$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<> confdefs.h <$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<>$lib_makefile<&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + +# Find the correct PATH separator. Usually this is `:', but +# DJGPP uses `;' like DOS. +if test "X${PATH_SEPARATOR+set}" != Xset; then + UNAME=${UNAME-`uname 2>/dev/null`} + case X$UNAME in + *-DOS) lt_cv_sys_path_separator=';' ;; + *) lt_cv_sys_path_separator=':' ;; + esac + PATH_SEPARATOR=$lt_cv_sys_path_separator +fi + +echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 +echo "configure:1346: checking for Cygwin environment" >&5 +if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_cygwin=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_cygwin=no +fi +rm -f conftest* +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_cygwin" 1>&6 +CYGWIN= +test "$ac_cv_cygwin" = yes && CYGWIN=yes +echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 +echo "configure:1379: checking for mingw32 environment" >&5 +if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_mingw32=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_mingw32=no +fi +rm -f conftest* +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_mingw32" 1>&6 +MINGW32= +test "$ac_cv_mingw32" = yes && MINGW32=yes +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:1408: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1429: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1446: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:1463: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + +# Check whether --enable-shared or --disable-shared was given. +if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + p=${PACKAGE-default} +case $enableval in +yes) enable_shared=yes ;; +no) enable_shared=no ;; +*) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_shared=yes +fi + +# Check whether --enable-static or --disable-static was given. +if test "${enable_static+set}" = set; then + enableval="$enable_static" + p=${PACKAGE-default} +case $enableval in +yes) enable_static=yes ;; +no) enable_static=no ;; +*) + enable_static=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_static=yes +fi + +# Check whether --enable-fast-install or --disable-fast-install was given. +if test "${enable_fast_install+set}" = set; then + enableval="$enable_fast_install" + p=${PACKAGE-default} +case $enableval in +yes) enable_fast_install=yes ;; +no) enable_fast_install=no ;; +*) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac +else + enable_fast_install=yes +fi + + +# Make sure we can run config.sub. +if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:1563: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + +echo $ac_n "checking build system type""... $ac_c" 1>&6 +echo "configure:1584: checking build system type" >&5 + +build_alias=$build +case "$build_alias" in +NONE) + case $nonopt in + NONE) build_alias=$host_alias ;; + *) build_alias=$nonopt ;; + esac ;; +esac + +build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` +build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$build" 1>&6 + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 +echo "configure:1613: checking for ld used by GCC" >&5 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 +echo "configure:1643: checking for GNU ld" >&5 +else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 +echo "configure:1646: checking for non-GNU ld" >&5 +fi +if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + lt_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$lt_cv_path_LD" +if test -n "$LD"; then + echo "$ac_t""$LD" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } +echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 +echo "configure:1681: checking if the linker ($LD) is GNU ld" >&5 +if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + lt_cv_prog_gnu_ld=yes +else + lt_cv_prog_gnu_ld=no +fi +fi + +echo "$ac_t""$lt_cv_prog_gnu_ld" 1>&6 +with_gnu_ld=$lt_cv_prog_gnu_ld + + +echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6 +echo "configure:1698: checking for $LD option to reload object files" >&5 +if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + lt_cv_ld_reload_flag='-r' +fi + +echo "$ac_t""$lt_cv_ld_reload_flag" 1>&6 +reload_flag=$lt_cv_ld_reload_flag +test -n "$reload_flag" && reload_flag=" $reload_flag" + +echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 +echo "configure:1710: checking for BSD-compatible nm" >&5 +if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + test -z "$ac_dir" && ac_dir=. + tmp_nm=$ac_dir/${ac_tool_prefix}nm + if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then + lt_cv_path_NM="$tmp_nm -B" + break + elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + lt_cv_path_NM="$tmp_nm -p" + break + else + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + fi + fi + done + IFS="$ac_save_ifs" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm +fi +fi + +NM="$lt_cv_path_NM" +echo "$ac_t""$NM" 1>&6 + +echo $ac_n "checking for a sed that does not truncate output""... $ac_c" 1>&6 +echo "configure:1748: checking for a sed that does not truncate output" >&5 +if eval "test \"`echo '$''{'lt_cv_path_SED'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_executable_p="test -f" +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + _sed_list="$_sed_list $as_dir/$ac_prog$ac_exec_ext" + fi + done + done +done + + # Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. +: ${TMPDIR=/tmp} +{ + tmp=`(umask 077 && mktemp -d -q "$TMPDIR/sedXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=$TMPDIR/sed$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in $TMPDIR" >&2 + { (exit 1); exit 1; } +} + _max=0 + _count=0 + # Add /usr/xpg4/bin/sed as it is typically found on Solaris + # along with /bin/sed that truncates output. + for _sed in $_sed_list /usr/xpg4/bin/sed; do + test ! -f ${_sed} && break + cat /dev/null > "$tmp/sed.in" + _count=0 + echo ${ECHO_N-$ac_n} "0123456789${ECHO_C-$ac_c}" >"$tmp/sed.in" + # Check for GNU sed and select it if it is found. + if "${_sed}" --version 2>&1 < /dev/null | egrep '(GNU)' > /dev/null; then + lt_cv_path_SED=${_sed} + break + fi + while true; do + cat "$tmp/sed.in" "$tmp/sed.in" >"$tmp/sed.tmp" + mv "$tmp/sed.tmp" "$tmp/sed.in" + cp "$tmp/sed.in" "$tmp/sed.nl" + echo >>"$tmp/sed.nl" + ${_sed} -e 's/a$//' < "$tmp/sed.nl" >"$tmp/sed.out" || break + cmp -s "$tmp/sed.out" "$tmp/sed.nl" || break + # 40000 chars as input seems more than enough + test $_count -gt 10 && break + _count=`expr $_count + 1` + if test $_count -gt $_max; then + _max=$_count + lt_cv_path_SED=$_sed + fi + done + done + rm -rf "$tmp" + +fi + +if test "X$SED" != "X"; then + lt_cv_path_SED=$SED +else + SED=$lt_cv_path_SED +fi +echo "$ac_t""$SED" 1>&6 + +echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 +echo "configure:1832: checking whether ln -s works" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + rm -f conftestdata +if ln -s X conftestdata 2>/dev/null +then + rm -f conftestdata + ac_cv_prog_LN_S="ln -s" +else + ac_cv_prog_LN_S=ln +fi +fi +LN_S="$ac_cv_prog_LN_S" +if test "$ac_cv_prog_LN_S" = "ln -s"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +echo $ac_n "checking how to recognise dependent libraries""... $ac_c" 1>&6 +echo "configure:1853: checking how to recognise dependent libraries" >&5 +if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given egrep regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix4* | aix5*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi4*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin* | mingw* | pw32*) + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' + lt_cv_file_magic_cmd='/usr/bin/file -L' + case "$host_os" in + rhapsody* | darwin1.[012]) + lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` + ;; + *) # Darwin 1.3 on + lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' + ;; + esac + ;; + +freebsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20*|hpux11*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + irix5* | nonstopux*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" + ;; + *) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" + ;; + esac + lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux-gnu*) + case $host_cpu in + alpha* | hppa* | i*86 | mips | mipsel | powerpc* | sparc* | ia64*) + lt_cv_deplibs_check_method=pass_all ;; + *) + # glibc up to 2.1.1 does not perform some relocations on ARM + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; + esac + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + +osf3* | osf4* | osf5*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' + lt_cv_file_magic_test_file=/shlib/libc.so + lt_cv_deplibs_check_method=pass_all + ;; + +sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=/lib/libc.so + ;; + +sysv5uw[78]* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; +esac + +fi + +echo "$ac_t""$lt_cv_deplibs_check_method" 1>&6 +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method + +echo $ac_n "checking for object suffix""... $ac_c" 1>&6 +echo "configure:2039: checking for object suffix" >&5 +if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + rm -f conftest* +echo 'int i = 1;' > conftest.$ac_ext +if { (eval echo configure:2045: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + for ac_file in conftest.*; do + case $ac_file in + *.c) ;; + *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;; + esac + done +else + { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; } +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_objext" 1>&6 +OBJEXT=$ac_cv_objext +ac_objext=$ac_cv_objext + + + +echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 +echo "configure:2065: checking for executable suffix" >&5 +if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$CYGWIN" = yes || test "$MINGW32" = yes; then + ac_cv_exeext=.exe +else + rm -f conftest* + echo 'int main () { return 0; }' > conftest.$ac_ext + ac_cv_exeext= + if { (eval echo configure:2075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then + for file in conftest.*; do + case $file in + *.$ac_ext | *.c | *.o | *.obj) ;; + *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; + esac + done + else + { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; } + fi + rm -f conftest* + test x"${ac_cv_exeext}" = x && ac_cv_exeext=no +fi +fi + +EXEEXT="" +test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} +echo "$ac_t""${ac_cv_exeext}" 1>&6 +ac_exeext=$EXEEXT + +if test $host != $build; then + ac_tool_prefix=${host_alias}- +else + ac_tool_prefix= +fi + + + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo $ac_n "checking command to parse $NM output""... $ac_c" 1>&6 +echo "configure:2106: checking command to parse $NM output" >&5 +if eval "test \"`echo '$''{'lt_cv_sys_global_symbol_pipe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris* | sysv5*) + symcode='[BDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# Handle CRLF in mingw tool chain +opt_cr= +case $host_os in +mingw*) + opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then + symcode='[ABCDGISTW]' +fi + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. +lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + rm -f conftest* + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { (eval echo configure:2192: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\") 1>&5; (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if egrep ' nm_test_var$' "$nlist" >/dev/null; then + if egrep ' nm_test_func$' "$nlist" >/dev/null; then + cat < conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext' + + cat <> conftest.$ac_ext +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{ +EOF + sed "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$no_builtin_flag" + if { (eval echo configure:2243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest$ac_exeext; then + pipe_works=yes + fi + LIBS="$save_LIBS" + CFLAGS="$save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -f conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +global_symbol_pipe="$lt_cv_sys_global_symbol_pipe" +if test -z "$lt_cv_sys_global_symbol_pipe"; then + global_symbol_to_cdecl= + global_symbol_to_c_name_address= +else + global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl" + global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address" +fi +if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address"; +then + echo "$ac_t""failed" 1>&6 +else + echo "$ac_t""ok" 1>&6 +fi + +for ac_hdr in dlfcn.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2292: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2302: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + + + + + +# Only perform the check for file, if the check method requires it +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6 +echo "configure:2338: checking for ${ac_tool_prefix}file" >&5 +if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case $MAGIC_CMD in + /*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; + ?:/*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. + ;; + *) + ac_save_MAGIC_CMD="$MAGIC_CMD" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="/usr/bin:$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + egrep "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$ac_save_ifs" + MAGIC_CMD="$ac_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$ac_t""$MAGIC_CMD" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + echo $ac_n "checking for file""... $ac_c" 1>&6 +echo "configure:2400: checking for file" >&5 +if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case $MAGIC_CMD in + /*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; + ?:/*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. + ;; + *) + ac_save_MAGIC_CMD="$MAGIC_CMD" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="/usr/bin:$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + egrep "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac + fi + break + fi + done + IFS="$ac_save_ifs" + MAGIC_CMD="$ac_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + echo "$ac_t""$MAGIC_CMD" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2471: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +if test -z "$ac_cv_prog_RANLIB"; then +if test -n "$ac_tool_prefix"; then + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2503: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +else + RANLIB=":" +fi +fi + +# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2538: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +STRIP="$ac_cv_prog_STRIP" +if test -n "$STRIP"; then + echo "$ac_t""$STRIP" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +if test -z "$ac_cv_prog_STRIP"; then +if test -n "$ac_tool_prefix"; then + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:2570: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_STRIP="strip" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_STRIP" && ac_cv_prog_STRIP=":" +fi +fi +STRIP="$ac_cv_prog_STRIP" +if test -n "$STRIP"; then + echo "$ac_t""$STRIP" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +else + STRIP=":" +fi +fi + + +enable_dlopen=no +enable_win32_dll=no + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + : +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 2619 "configure"' > conftest.$ac_ext + if { (eval echo configure:2620: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 +echo "configure:2641: checking whether the C compiler needs -belf" >&5 +if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + lt_cv_cc_needs_belf=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + lt_cv_cc_needs_belf=no +fi +rm -f conftest* + ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +fi + +echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6 + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; + + +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Constants: +rm="rm -f" + +# Global variables: +default_ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +ltmain="$ac_aux_dir/ltmain.sh" +ofile="$default_ofile" +with_gnu_ld="$lt_cv_prog_gnu_ld" +need_locks="$enable_libtool_lock" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$AS" && AS=as +test -z "$CC" && CC=cc +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$LD" && LD=ld +test -z "$LN_S" && LN_S="ln -s" +test -z "$MAGIC_CMD" && MAGIC_CMD=file +test -z "$NM" && NM=nm +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$RANLIB" && RANLIB=: +test -z "$STRIP" && STRIP=: +test -z "$ac_objext" && ac_objext=o + +if test x"$host" != x"$build"; then + ac_tool_prefix=${host_alias}- +else + ac_tool_prefix= +fi + +# Transform linux* to *-*-linux-gnu*, to support old configure scripts. +case $host_os in +linux-gnu*) ;; +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="$2" + +echo $ac_n "checking for objdir""... $ac_c" 1>&6 +echo "configure:2781: checking for objdir" >&5 +rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + objdir=_libs +fi +rmdir .libs 2>/dev/null +echo "$ac_t""$objdir" 1>&6 + + +# Check whether --with-pic or --without-pic was given. +if test "${with_pic+set}" = set; then + withval="$with_pic" + pic_mode="$withval" +else + pic_mode=default +fi + +test -z "$pic_mode" && pic_mode=default + +# We assume here that the value for lt_cv_prog_cc_pic will not be cached +# in isolation, and that seeing it set (from the cache) indicates that +# the associated values are set (in the cache) correctly too. +echo $ac_n "checking for $compiler option to produce PIC""... $ac_c" 1>&6 +echo "configure:2808: checking for $compiler option to produce PIC" >&5 +if eval "test \"`echo '$''{'lt_cv_prog_cc_pic'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + lt_cv_prog_cc_pic= + lt_cv_prog_cc_shlib= + lt_cv_prog_cc_wl= + lt_cv_prog_cc_static= + lt_cv_prog_cc_no_builtin= + lt_cv_prog_cc_can_build_shared=$can_build_shared + + if test "$GCC" = yes; then + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-static' + + case $host_os in + aix*) + # Below there is a dirty hack to force normal static linking with -ldl + # The problem is because libdl dynamically linked with both libc and + # libC (AIX C++ library), which obviously doesn't included in libraries + # list by gcc. This cause undefined symbols with -static flags. + # This hack allows C programs to be linked with "-static -ldl", but + # not sure about C++ programs. + lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC" + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_cv_prog_cc_pic='-fno-common' + ;; + cygwin* | mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_cv_prog_cc_pic='-DDLL_EXPORT' + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_cv_prog_cc_pic=-Kconform_pic + fi + ;; + *) + lt_cv_prog_cc_pic='-fPIC' + ;; + esac + else + # PORTME Check for PIC flags for the system compiler. + case $host_os in + aix3* | aix4* | aix5*) + lt_cv_prog_cc_wl='-Wl,' + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_cv_prog_cc_static='-Bstatic' + else + lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + hpux9* | hpux10* | hpux11*) + # Is there a better lt_cv_prog_cc_static that works with the bundled CC? + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive" + lt_cv_prog_cc_pic='+Z' + ;; + + irix5* | irix6* | nonstopux*) + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-non_shared' + # PIC (with -KPIC) is the default. + ;; + + cygwin* | mingw* | pw32* | os2*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_cv_prog_cc_pic='-DDLL_EXPORT' + ;; + + newsos6) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + ;; + + osf3* | osf4* | osf5*) + # All OSF/1 code is PIC. + lt_cv_prog_cc_wl='-Wl,' + lt_cv_prog_cc_static='-non_shared' + ;; + + sco3.2v5*) + lt_cv_prog_cc_pic='-Kpic' + lt_cv_prog_cc_static='-dn' + lt_cv_prog_cc_shlib='-belf' + ;; + + solaris*) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Wl,' + ;; + + sunos4*) + lt_cv_prog_cc_pic='-PIC' + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Qoption ld ' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + lt_cv_prog_cc_pic='-KPIC' + lt_cv_prog_cc_static='-Bstatic' + lt_cv_prog_cc_wl='-Wl,' + ;; + + uts4*) + lt_cv_prog_cc_pic='-pic' + lt_cv_prog_cc_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_cv_prog_cc_pic='-Kconform_pic' + lt_cv_prog_cc_static='-Bstatic' + fi + ;; + + *) + lt_cv_prog_cc_can_build_shared=no + ;; + esac + fi + +fi + +if test -z "$lt_cv_prog_cc_pic"; then + echo "$ac_t""none" 1>&6 +else + echo "$ac_t""$lt_cv_prog_cc_pic" 1>&6 + + # Check to make sure the pic_flag actually works. + echo $ac_n "checking if $compiler PIC flag $lt_cv_prog_cc_pic works""... $ac_c" 1>&6 +echo "configure:2956: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5 + if eval "test \"`echo '$''{'lt_cv_prog_cc_pic_works'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC" + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + case $host_os in + hpux9* | hpux10* | hpux11*) + # On HP-UX, both CC and GCC only warn that PIC is supported... then + # they create non-PIC objects. So, if there were any warnings, we + # assume that PIC is not supported. + if test -s conftest.err; then + lt_cv_prog_cc_pic_works=no + else + lt_cv_prog_cc_pic_works=yes + fi + ;; + *) + lt_cv_prog_cc_pic_works=yes + ;; + esac + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + lt_cv_prog_cc_pic_works=no + +fi +rm -f conftest* + CFLAGS="$save_CFLAGS" + +fi + + + if test "X$lt_cv_prog_cc_pic_works" = Xno; then + lt_cv_prog_cc_pic= + lt_cv_prog_cc_can_build_shared=no + else + lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic" + fi + + echo "$ac_t""$lt_cv_prog_cc_pic_works" 1>&6 +fi + +# Check for any special shared library compilation flags. +if test -n "$lt_cv_prog_cc_shlib"; then + echo "configure: warning: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" 1>&2 + if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$lt_cv_prog_cc_shlib[ ]" >/dev/null; then : + else + echo "configure: warning: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" 1>&2 + lt_cv_prog_cc_can_build_shared=no + fi +fi + +echo $ac_n "checking if $compiler static flag $lt_cv_prog_cc_static works""... $ac_c" 1>&6 +echo "configure:3022: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5 +if eval "test \"`echo '$''{'lt_cv_prog_cc_static_works'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + lt_cv_prog_cc_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static" + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + lt_cv_prog_cc_static_works=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* + LDFLAGS="$save_LDFLAGS" + +fi + + +# Belt *and* braces to stop my trousers falling down: +test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static= +echo "$ac_t""$lt_cv_prog_cc_static_works" 1>&6 + +pic_flag="$lt_cv_prog_cc_pic" +special_shlib_compile_flags="$lt_cv_prog_cc_shlib" +wl="$lt_cv_prog_cc_wl" +link_static_flag="$lt_cv_prog_cc_static" +no_builtin_flag="$lt_cv_prog_cc_no_builtin" +can_build_shared="$lt_cv_prog_cc_can_build_shared" + + +# Check to see if options -o and -c are simultaneously supported by compiler +echo $ac_n "checking if $compiler supports -c -o file.$ac_objext""... $ac_c" 1>&6 +echo "configure:3064: checking if $compiler supports -c -o file.$ac_objext" >&5 +if eval "test \"`echo '$''{'lt_cv_compiler_c_o'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + +$rm -r conftest 2>/dev/null +mkdir conftest +cd conftest +echo "int some_variable = 0;" > conftest.$ac_ext +mkdir out +# According to Tom Tromey, Ian Lance Taylor reported there are C compilers +# that will create temporary files in the current directory regardless of +# the output directory. Thus, making CWD read-only will cause this test +# to fail, enabling locking or at least warning the user not to do parallel +# builds. +chmod -w . +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -o out/conftest2.$ac_objext" +compiler_c_o=no +if { (eval echo configure:3083: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s out/conftest.err; then + lt_cv_compiler_c_o=no + else + lt_cv_compiler_c_o=yes + fi +else + # Append any errors to the config.log. + cat out/conftest.err 1>&5 + lt_cv_compiler_c_o=no +fi +CFLAGS="$save_CFLAGS" +chmod u+w . +$rm conftest* out/* +rmdir out +cd .. +rmdir conftest +$rm -r conftest 2>/dev/null + +fi + +compiler_c_o=$lt_cv_compiler_c_o +echo "$ac_t""$compiler_c_o" 1>&6 + +if test x"$compiler_c_o" = x"yes"; then + # Check to see if we can write to a .lo + echo $ac_n "checking if $compiler supports -c -o file.lo""... $ac_c" 1>&6 +echo "configure:3112: checking if $compiler supports -c -o file.lo" >&5 + if eval "test \"`echo '$''{'lt_cv_compiler_o_lo'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + lt_cv_compiler_o_lo=no + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -c -o conftest.lo" + save_objext="$ac_objext" + ac_objext=lo + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + lt_cv_compiler_o_lo=no + else + lt_cv_compiler_o_lo=yes + fi + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* + ac_objext="$save_objext" + CFLAGS="$save_CFLAGS" + +fi + + compiler_o_lo=$lt_cv_compiler_o_lo + echo "$ac_t""$compiler_o_lo" 1>&6 +else + compiler_o_lo=no +fi + +# Check to see if we can do hard links to lock some files if needed +hard_links="nottested" +if test "$compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo $ac_n "checking if we can lock with hard links""... $ac_c" 1>&6 +echo "configure:3161: checking if we can lock with hard links" >&5 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$ac_t""$hard_links" 1>&6 + if test "$hard_links" = no; then + echo "configure: warning: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" 1>&2 + need_locks=warn + fi +else + need_locks=no +fi + +if test "$GCC" = yes; then + # Check to see if options -fno-rtti -fno-exceptions are supported by compiler + echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions""... $ac_c" 1>&6 +echo "configure:3180: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 + echo "int some_variable = 0;" > conftest.$ac_ext + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext" + compiler_rtti_exceptions=no + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + compiler_rtti_exceptions=no + else + compiler_rtti_exceptions=yes + fi + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* + CFLAGS="$save_CFLAGS" + echo "$ac_t""$compiler_rtti_exceptions" 1>&6 + + if test "$compiler_rtti_exceptions" = "yes"; then + no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' + else + no_builtin_flag=' -fno-builtin' + fi +fi + +# See if the linker supports building shared libraries. +echo $ac_n "checking whether the linker ($LD) supports shared libraries""... $ac_c" 1>&6 +echo "configure:3220: checking whether the linker ($LD) supports shared libraries" >&5 + +allow_undefined_flag= +no_undefined_flag= +need_lib_prefix=unknown +need_version=unknown +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +archive_cmds= +archive_expsym_cmds= +old_archive_from_new_cmds= +old_archive_from_expsyms_cmds= +export_dynamic_flag_spec= +whole_archive_flag_spec= +thread_safe_flag_spec= +hardcode_into_libs=no +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_shlibpath_var=unsupported +runpath_var= +link_all_deplibs=unknown +always_export_symbols=no +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' +# include_expsyms should be a list of space-separated symbols to be *always* +# included in the symbol list +include_expsyms= +# exclude_expsyms can be an egrep regular expression of symbols to exclude +# it will be wrapped by ` (' and `)$', so one must not match beginning or +# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', +# as well as any symbol that contains `d'. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_" +# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out +# platforms (ab)use it in PIC code, but their linkers get confused if +# the symbol is explicitly referenced. Since portable code cannot +# rely on this symbol name, it's probably fine to never include it in +# preloaded symbol tables. +extract_expsyms_cmds= + +case $host_os in +cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; +openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX, the GNU linker is very broken + # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available. + ld_shlibs=no + cat <&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can use + # them. + ld_shlibs=no + ;; + + beos*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=yes + + extract_expsyms_cmds='test -f $output_objdir/impgen.c || \ + sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~ + test -f $output_objdir/impgen.exe || (cd $output_objdir && \ + if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \ + else $CC -o impgen impgen.c ; fi)~ + $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def' + + old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib' + + # cygwin and mingw dlls have different entry points and sets of symbols + # to exclude. + # FIXME: what about values for MSVC? + dll_entry=__cygwin_dll_entry@12 + dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12~ + case $host_os in + mingw*) + # mingw values + dll_entry=_DllMainCRTStartup@12 + dll_exclude_symbols=DllMain@12,DllMainCRTStartup@12,DllEntryPoint@12~ + ;; + esac + + # mingw and cygwin differ, and it's simplest to just exclude the union + # of the two symbol sets. + dll_exclude_symbols=DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12,DllMainCRTStartup@12,DllEntryPoint@12 + + # recent cygwin and mingw systems supply a stub DllMain which the user + # can override, but on older systems we have to supply one (in ltdll.c) + if test "x$lt_cv_need_dllmain" = "xyes"; then + ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext " + ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~ + test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~' + else + ltdll_obj= + ltdll_cmds= + fi + + # Extract the symbol export list from an `--export-all' def file, + # then regenerate the def file from the symbol export list, so that + # the compiled dll only exports the symbol export list. + # Be careful not to strip the DATA tag left be newer dlltools. + export_symbols_cmds="$ltdll_cmds"' + $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~ + sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols' + + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is. + # If DATA tags from a recent dlltool are present, honour them! + archive_expsym_cmds='if test "x`sed 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname-def; + else + echo EXPORTS > $output_objdir/$soname-def; + _lt_hint=1; + cat $export_symbols | while read symbol; do + set dummy \$symbol; + case \$# in + 2) echo " \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;; + 4) echo " \$2 \$3 \$4 ; " >> $output_objdir/$soname-def; _lt_hint=`expr \$_lt_hint - 1`;; + *) echo " \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;; + esac; + _lt_hint=`expr 1 + \$_lt_hint`; + done; + fi~ + '"$ltdll_cmds"' + $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~ + $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~ + $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags' + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + case $host_os in + cygwin* | mingw* | pw32*) + # dlltool doesn't understand --whole-archive et. al. + whole_archive_flag_spec= + ;; + *) + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + ;; + esac + fi +else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + hardcode_direct=yes + archive_cmds='' + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + esac + + shared_flag='-shared' + else + # not using gcc + if test "$host_cpu" = ia64; then + shared_flag='${wl}-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + # It seems that -bexpall can do strange things, so it is better to + # generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib' + archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib' + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='${wl}-berok' + # This is a bit strange, but is similar to how AIX traditionally builds + # it's shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname' + fi + fi + ;; + + amigaos*) + archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + ;; + + darwin* | rhapsody*) + case "$host_os" in + rhapsody* | darwin1.[012]) + allow_undefined_flag='-undefined suppress' + ;; + *) # Darwin 1.3 on + allow_undefined_flag='-flat_namespace -undefined suppress' + ;; + esac + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. Also zsh mangles + # `"' quotes if we put them in here... so don't! + archive_cmds='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs && $CC $(test .$module = .yes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib ${lib}-master.o $deplibs$linker_flags $(test .$module != .yes && echo -install_name $rpath/$soname $verstring)' + # We need to add '_' to the symbols in $export_symbols first + #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols' + hardcode_direct=yes + hardcode_shlibpath_var=no + whole_archive_flag_spec='-all_load $convenience' + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9* | hpux10* | hpux11*) + case $host_os in + hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;; + *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;; + esac + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_minus_L=yes # Not in the search PATH, but as the default + # location of the library. + export_dynamic_flag_spec='${wl}-E' + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + openbsd*) + hardcode_direct=yes + hardcode_shlibpath_var=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + #Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + export_dynamic_flag_spec='${wl}-Bexport' + ;; + + solaris*) + # gcc --version < 3.0 without binutils cannot create self contained + # shared libraries reliably, requiring libgcc.a to resolve some of + # the object symbols generated in some cases. Libraries that use + # assert need libgcc.a to resolve __eprintf, for example. Linking + # a copy of libgcc.a into every shared library to guarantee resolving + # such symbols causes other problems: According to Tim Van Holder + # , C++ libraries end up with a separate + # (to the application) exception stack for one thing. + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + case `$CC --version 2>/dev/null` in + [12].*) + cat <&2 + +*** Warning: Releases of GCC earlier than version 3.0 cannot reliably +*** create self contained shared libraries on Solaris systems, without +*** introducing a dependency on libgcc.a. Therefore, libtool is disabling +*** -no-undefined support, which will at least allow you to build shared +*** libraries. However, you may find that when you link such libraries +*** into an application without using GCC, you have to manually add +*** \`gcc --print-libgcc-file-name\` to the link command. We urge you to +*** upgrade to a newer version of GCC. Another option is to rebuild your +*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer. + +EOF + no_undefined_flag= + ;; + esac + fi + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv5*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' + hardcode_libdir_flag_spec= + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4.2uw2*) + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=no + hardcode_shlibpath_var=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5uw7* | unixware7*) + no_undefined_flag='${wl}-z ${wl}text' + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac +fi +echo "$ac_t""$ld_shlibs" 1>&6 +test "$ld_shlibs" = no && can_build_shared=no + +# Check hardcoding attributes. +echo $ac_n "checking how to hardcode library paths into programs""... $ac_c" 1>&6 +echo "configure:3919: checking how to hardcode library paths into programs" >&5 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var"; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$hardcode_shlibpath_var" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +echo "$ac_t""$hardcode_action" 1>&6 + +striplib= +old_striplib= +echo $ac_n "checking whether stripping libraries is possible""... $ac_c" 1>&6 +echo "configure:3947: checking whether stripping libraries is possible" >&5 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +reload_cmds='$LD$reload_flag -o $output$reload_objs' +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +# PORTME Fill in your ld.so characteristics +echo $ac_n "checking dynamic linker characteristics""... $ac_c" 1>&6 +echo "configure:3961: checking dynamic linker characteristics" >&5 +library_names_spec= +libname_spec='lib$name' +soname_spec= +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}.so$major' + ;; + +aix4* | aix5*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can + # not hardcode correct soname into executable. Probably we can + # add versioning support to collect2, so additional links can + # be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}.so$major' + fi + shlibpath_var=LIBPATH + fi + hardcode_into_libs=yes + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}.so' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi4*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + export_dynamic_flag_spec=-rdynamic + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32*) + version_type=windows + need_version=no + need_lib_prefix=no + case $GCC,$host_os in + yes,cygwin*) + library_names_spec='$libname.dll.a' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' + postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog .libs/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $rm \$dlpath' + ;; + yes,mingw*) + library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g" -e "s,=/,/,g"` + ;; + yes,pw32*) + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll' + ;; + *) + library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. + library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)' + soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd*-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='GNU/FreeBSD ld.so' + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + *) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + dynamic_linker="$host_os dld.sl" + version_type=sunos + need_lib_prefix=no + need_version=no + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' + soname_spec='${libname}${release}.sl$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) version_type=irix ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' + soname_spec='${libname}${release}.so$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case "$host_os" in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +os2*) + libname_spec='$name' + need_lib_prefix=no + library_names_spec='$libname.dll $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_version=no + need_lib_prefix=no + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + hardcode_into_libs=yes + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + export_dynamic_flag_spec='${wl}-Blargedynsym' + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' + soname_spec='$libname.so.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$ac_t""$dynamic_linker" 1>&6 +test "$dynamic_linker" = no && can_build_shared=no + +# Report the final consequences. +echo $ac_n "checking if libtool supports shared libraries""... $ac_c" 1>&6 +echo "configure:4385: checking if libtool supports shared libraries" >&5 +echo "$ac_t""$can_build_shared" 1>&6 + +echo $ac_n "checking whether to build shared libraries""... $ac_c" 1>&6 +echo "configure:4389: checking whether to build shared libraries" >&5 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; +esac +echo "$ac_t""$enable_shared" 1>&6 + +echo $ac_n "checking whether to build static libraries""... $ac_c" 1>&6 +echo "configure:4412: checking whether to build static libraries" >&5 +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes +echo "$ac_t""$enable_static" 1>&6 + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + cygwin* | mingw* | pw32*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + *) + echo $ac_n "checking for shl_load""... $ac_c" 1>&6 +echo "configure:4453: checking for shl_load" >&5 +if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_shl_load) || defined (__stub___shl_load) +choke me +#else +shl_load(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_shl_load=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_shl_load=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="shl_load" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 +echo "configure:4499: checking for shl_load in -ldld" >&5 +ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldld $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dlopen""... $ac_c" 1>&6 +echo "configure:4537: checking for dlopen" >&5 +if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen(); + +int main() { + +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_dlopen) || defined (__stub___dlopen) +choke me +#else +dlopen(); +#endif + +; return 0; } +EOF +if { (eval echo configure:4565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_dlopen=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_dlopen=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 +echo "configure:4583: checking for dlopen in -ldl" >&5 +ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dlopen in -lsvld""... $ac_c" 1>&6 +echo "configure:4621: checking for dlopen in -lsvld" >&5 +ac_lib_var=`echo svld'_'dlopen | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lsvld $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6 +echo "configure:4659: checking for dld_link in -ldld" >&5 +ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldld $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" +else + echo "$ac_t""no" 1>&6 +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6 +echo "configure:4734: checking whether a program can dlopen itself" >&5 +if eval "test \"`echo '$''{'lt_cv_dlopen_self'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo configure:4805: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi + +echo "$ac_t""$lt_cv_dlopen_self" 1>&6 + + if test "x$lt_cv_dlopen_self" = xyes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6 +echo "configure:4828: checking whether a statically linked program can dlopen itself" >&5 +if eval "test \"`echo '$''{'lt_cv_dlopen_self_static'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +#ifdef __cplusplus +extern "C" void exit (int); +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + + exit (status); +} +EOF + if { (eval echo configure:4899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi + +echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6 + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + +if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + echo $ac_n "checking whether -lc should be explicitly linked in""... $ac_c" 1>&6 +echo "configure:4948: checking whether -lc should be explicitly linked in" >&5 + if eval "test \"`echo '$''{'lt_cv_archive_cmds_need_lc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + $rm conftest* + echo 'static int dummy;' > conftest.$ac_ext + + if { (eval echo configure:4955: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_cv_prog_cc_wl + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { (eval echo configure:4968: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\") 1>&5; (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5; } + then + lt_cv_archive_cmds_need_lc=no + else + lt_cv_archive_cmds_need_lc=yes + fi + allow_undefined_flag=$save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi +fi + + echo "$ac_t""$lt_cv_archive_cmds_need_lc" 1>&6 + ;; + esac +fi +need_lc=${lt_cv_archive_cmds_need_lc-yes} + +# The second clause should only fire when bootstrapping the +# libtool distribution, otherwise you forgot to ship ltmain.sh +# with your package, and you will get complaints that there are +# no rules to generate ltmain.sh. +if test -f "$ltmain"; then + : +else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + test -f Makefile && make "$ltmain" +fi + +if test -f "$ltmain"; then + trap "$rm \"${ofile}T\"; exit 1" 1 2 15 + $rm -f "${ofile}T" + + echo creating $ofile + + # Now quote all the things that may contain metacharacters while being + # careful not to overquote the AC_SUBSTed values. We take copies of the + # variables and quote the copies for generation of the libtool script. + for var in echo old_CC old_CFLAGS SED \ + AR AR_FLAGS CC LD LN_S NM SHELL \ + reload_flag reload_cmds wl \ + pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ + thread_safe_flag_spec whole_archive_flag_spec libname_spec \ + library_names_spec soname_spec \ + RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ + old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \ + postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \ + old_striplib striplib file_magic_cmd export_symbols_cmds \ + deplibs_check_method allow_undefined_flag no_undefined_flag \ + finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ + global_symbol_to_c_name_address \ + hardcode_libdir_flag_spec hardcode_libdir_separator \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do + + case $var in + reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ + extract_expsyms_cmds | old_archive_from_expsyms_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + cat <<__EOF__ > "${ofile}T" +#! $SHELL + +# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996-2000 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="${SED} -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$need_lc + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$lt_echo + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# The default C compiler. +CC=$lt_CC + +# Is the compiler the GNU C compiler? +with_gcc=$GCC + +# The linker used to build libraries. +LD=$lt_LD + +# Whether we need hard or soft links. +LN_S=$lt_LN_S + +# A BSD-compatible nm program. +NM=$lt_NM + +# A symbol stripping program +STRIP=$STRIP + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=$MAGIC_CMD + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# How to pass a linker flag through the compiler. +wl=$lt_wl + +# Object file suffix (normally "o"). +objext="$ac_objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$lt_pic_flag +pic_mode=$pic_mode + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_compiler_c_o + +# Can we write directly to a .lo ? +compiler_o_lo=$lt_compiler_o_lo + +# Must we lock files when doing compilation ? +need_locks=$lt_need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_link_static_flag + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$lt_thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$lt_RANLIB +old_archive_cmds=$lt_old_archive_cmds +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds +postinstall_cmds=$lt_postinstall_cmds +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$lt_file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$lt_finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$lt_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="$variables_saved_for_relink" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# ### END LIBTOOL CONFIG + +__EOF__ + + case $host_os in + aix3*) + cat <<\EOF >> "${ofile}T" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + case $host_os in + cygwin* | mingw* | pw32* | os2*) + cat <<'EOF' >> "${ofile}T" + # This is a source program that is used to create dlls on Windows + # Don't remove nor modify the starting and closing comments +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include +# #undef WIN32_LEAN_AND_MEAN +# #include +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ + # This is a source program that is used to create import libraries + # on Windows for dlls which lack them. Don't remove nor modify the + # starting and closing comments +# /* impgen.c starts here */ +# /* Copyright (C) 1999-2000 Free Software Foundation, Inc. +# +# This file is part of GNU libtool. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# */ +# +# #include /* for printf() */ +# #include /* for open(), lseek(), read() */ +# #include /* for O_RDONLY, O_BINARY */ +# #include /* for strdup() */ +# +# /* O_BINARY isn't required (or even defined sometimes) under Unix */ +# #ifndef O_BINARY +# #define O_BINARY 0 +# #endif +# +# static unsigned int +# pe_get16 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[2]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 2); +# return b[0] + (b[1]<<8); +# } +# +# static unsigned int +# pe_get32 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[4]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 4); +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# static unsigned int +# pe_as32 (ptr) +# void *ptr; +# { +# unsigned char *b = ptr; +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# int +# main (argc, argv) +# int argc; +# char *argv[]; +# { +# int dll; +# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; +# unsigned long export_rva, export_size, nsections, secptr, expptr; +# unsigned long name_rvas, nexp; +# unsigned char *expdata, *erva; +# char *filename, *dll_name; +# +# filename = argv[1]; +# +# dll = open(filename, O_RDONLY|O_BINARY); +# if (dll < 1) +# return 1; +# +# dll_name = filename; +# +# for (i=0; filename[i]; i++) +# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') +# dll_name = filename + i +1; +# +# pe_header_offset = pe_get32 (dll, 0x3c); +# opthdr_ofs = pe_header_offset + 4 + 20; +# num_entries = pe_get32 (dll, opthdr_ofs + 92); +# +# if (num_entries < 1) /* no exports */ +# return 1; +# +# export_rva = pe_get32 (dll, opthdr_ofs + 96); +# export_size = pe_get32 (dll, opthdr_ofs + 100); +# nsections = pe_get16 (dll, pe_header_offset + 4 +2); +# secptr = (pe_header_offset + 4 + 20 + +# pe_get16 (dll, pe_header_offset + 4 + 16)); +# +# expptr = 0; +# for (i = 0; i < nsections; i++) +# { +# char sname[8]; +# unsigned long secptr1 = secptr + 40 * i; +# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); +# unsigned long vsize = pe_get32 (dll, secptr1 + 16); +# unsigned long fptr = pe_get32 (dll, secptr1 + 20); +# lseek(dll, secptr1, SEEK_SET); +# read(dll, sname, 8); +# if (vaddr <= export_rva && vaddr+vsize > export_rva) +# { +# expptr = fptr + (export_rva - vaddr); +# if (export_rva + export_size > vaddr + vsize) +# export_size = vsize - (export_rva - vaddr); +# break; +# } +# } +# +# expdata = (unsigned char*)malloc(export_size); +# lseek (dll, expptr, SEEK_SET); +# read (dll, expdata, export_size); +# erva = expdata - export_rva; +# +# nexp = pe_as32 (expdata+24); +# name_rvas = pe_as32 (expdata+32); +# +# printf ("EXPORTS\n"); +# for (i = 0; i> "${ofile}T" || (rm -f "${ofile}T"; exit 1) + + mv -f "${ofile}T" "$ofile" || \ + (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T") + chmod +x "$ofile" +fi + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Prevent multiple expansion + + + +SHARED_LIBTOOL='$(LIBTOOL)' +PHP_COMPILE='$(LIBTOOL) --mode=compile $(COMPILE) -c $<' +phplibdir="`pwd`/modules" +CPPFLAGS="$CPPFLAGS -DHAVE_CONFIG_H" + +test "$prefix" = "NONE" && prefix="/usr/local" +test "$exec_prefix" = "NONE" && exec_prefix='$(prefix)' + + + PHP_VAR_SUBST="$PHP_VAR_SUBST prefix" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST exec_prefix" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST libdir" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST prefix" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST phplibdir" + + + + PHP_VAR_SUBST="$PHP_VAR_SUBST PHP_COMPILE" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST CC" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST CFLAGS" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST CPP" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST CPPFLAGS" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST CXX" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST DEFS" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST EXTENSION_DIR" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST EXTRA_LDFLAGS" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST EXTRA_LIBS" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST INCLUDES" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST LEX" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST LEX_OUTPUT_ROOT" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST LFLAGS" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST SHARED_LIBTOOL" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST LIBTOOL" + + + PHP_VAR_SUBST="$PHP_VAR_SUBST SHELL" + + + + PHP_FAST_OUTPUT_FILES="$PHP_FAST_OUTPUT_FILES Makefile" + + + + + echo $ac_n "checking for working mkdir -p""... $ac_c" 1>&6 +echo "configure:5636: checking for working mkdir -p" >&5 +if eval "test \"`echo '$''{'ac_cv_mkdir_p'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + test -d conftestdir && rm -rf conftestdir + mkdir -p conftestdir/somedir >/dev/null 2>&1 + mkdir -p conftestdir/somedir >/dev/null 2>&1 + if test "$?" = "0" && test -d conftestdir/somedir; then + ac_cv_mkdir_p=yes + else + ac_cv_mkdir_p=no + fi + rm -rf conftestdir + +fi + +echo "$ac_t""$ac_cv_mkdir_p" 1>&6 + + echo creating config_vars.mk + > config_vars.mk + for i in $PHP_VAR_SUBST; do + eval echo "$i = \$$i" | sed 's%#%\\#%g' >> config_vars.mk + done + + + $SHELL $srcdir/build/fastgen.sh $srcdir $ac_cv_mkdir_p $BSD_MAKEFILE $PHP_FAST_OUTPUT_FILES + + +test -d modules || mkdir modules +touch .deps + + + +trap '' 1 2 15 +cat > confcache <<\EOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir + +trap 'rm -fr `echo " config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@CC@%$CC%g +s%@host@%$host%g +s%@host_alias@%$host_alias%g +s%@host_cpu@%$host_cpu%g +s%@host_vendor@%$host_vendor%g +s%@host_os@%$host_os%g +s%@build@%$build%g +s%@build_alias@%$build_alias%g +s%@build_cpu@%$build_cpu%g +s%@build_vendor@%$build_vendor%g +s%@build_os@%$build_os%g +s%@LN_S@%$LN_S%g +s%@OBJEXT@%$OBJEXT%g +s%@EXEEXT@%$EXEEXT%g +s%@ECHO@%$ECHO%g +s%@RANLIB@%$RANLIB%g +s%@STRIP@%$STRIP%g +s%@CPP@%$CPP%g +s%@LIBTOOL@%$LIBTOOL%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >> conftest.vals <<\EOF +s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/contrib/php/configure.in b/contrib/php/configure.in new file mode 100644 index 0000000..4a81aa0 --- /dev/null +++ b/contrib/php/configure.in @@ -0,0 +1,90 @@ + +AC_INIT(Makefile.in) + +AC_DEFUN(PHP_WITH_PHP_CONFIG,[ + AC_ARG_WITH(php-config, +[ --with-php-config=PATH],[ + PHP_CONFIG=$withval +],[ + PHP_CONFIG=php-config +]) + + prefix=`$PHP_CONFIG --prefix 2>/dev/null` + INCLUDES=`$PHP_CONFIG --includes 2>/dev/null` + EXTENSION_DIR=`$PHP_CONFIG --extension-dir` + + if test -z "$prefix"; then + AC_MSG_ERROR(Cannot find php-config. Please use --with-php-config=PATH) + fi + AC_MSG_CHECKING(for PHP prefix) + AC_MSG_RESULT($prefix) + AC_MSG_CHECKING(for PHP includes) + AC_MSG_RESULT($INCLUDES) + AC_MSG_CHECKING(for PHP extension directory) + AC_MSG_RESULT($EXTENSION_DIR) +]) + +abs_srcdir=`(cd $srcdir && pwd)` + +php_always_shared=yes + +PHP_CONFIG_NICE(config.nice) + +AC_PROG_CC +AC_PROG_CC_C_O + +PHP_SHLIB_SUFFIX_NAME +PHP_WITH_PHP_CONFIG + +AC_PREFIX_DEFAULT() + +sinclude(config.m4) + +enable_static=no +enable_shared=yes + +AC_PROG_LIBTOOL + +SHARED_LIBTOOL='$(LIBTOOL)' +PHP_COMPILE='$(LIBTOOL) --mode=compile $(COMPILE) -c $<' +phplibdir="`pwd`/modules" +CPPFLAGS="$CPPFLAGS -DHAVE_CONFIG_H" + +test "$prefix" = "NONE" && prefix="/usr/local" +test "$exec_prefix" = "NONE" && exec_prefix='$(prefix)' + +PHP_SUBST(prefix) +PHP_SUBST(exec_prefix) +PHP_SUBST(libdir) +PHP_SUBST(prefix) +PHP_SUBST(phplibdir) + +PHP_SUBST(PHP_COMPILE) +PHP_SUBST(CC) +PHP_SUBST(CFLAGS) +PHP_SUBST(CPP) +PHP_SUBST(CPPFLAGS) +PHP_SUBST(CXX) +PHP_SUBST(DEFS) +PHP_SUBST(EXTENSION_DIR) +PHP_SUBST(EXTRA_LDFLAGS) +PHP_SUBST(EXTRA_LIBS) +PHP_SUBST(INCLUDES) +PHP_SUBST(LEX) +PHP_SUBST(LEX_OUTPUT_ROOT) +PHP_SUBST(LFLAGS) +PHP_SUBST(SHARED_LIBTOOL) +PHP_SUBST(LIBTOOL) +PHP_SUBST(SHELL) + +PHP_FAST_OUTPUT(Makefile) + +PHP_GEN_CONFIG_VARS +PHP_GEN_MAKEFILES($PHP_FAST_OUTPUT_FILES) + +test -d modules || mkdir modules +touch .deps + +AC_CONFIG_HEADER(config.h) + +AC_OUTPUT() diff --git a/contrib/php/dynlib.m4 b/contrib/php/dynlib.m4 new file mode 100644 index 0000000..84e92de --- /dev/null +++ b/contrib/php/dynlib.m4 @@ -0,0 +1,88 @@ +# +----------------------------------------------------------------------+ +# | PHP Version 4 | +# +----------------------------------------------------------------------+ +# | Copyright (c) 1997-2002 The PHP Group | +# +----------------------------------------------------------------------+ +# | This source file is subject to version 2.02 of the PHP license, | +# | that is bundled with this package in the file LICENSE, and is | +# | available at through the world-wide-web at | +# | http://www.php.net/license/2_02.txt. | +# | If you did not receive a copy of the PHP license and are unable to | +# | obtain it through the world-wide-web, please send a note to | +# | license@php.net so we can mail you a copy immediately. | +# +----------------------------------------------------------------------+ +# | Author: Sascha Schumann | +# +----------------------------------------------------------------------+ +# +# $Id: dynlib.m4,v 1.9 2002/02/28 08:25:27 sebastian Exp $ +# + + + +AC_DEFUN(LIB_SHARED_CONVENIENCE,[ + lib_target="\$(LTLIBRARY_NAME)" + cat >>$1<>$1<>$1<$lib_makefile<>$lib_makefile<, 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# A sed that does not truncate output. +SED="/bin/sed" + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="/bin/sed -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + +# ### BEGIN LIBTOOL CONFIG + +# Libtool was configured on host evon: + +# Shell to use when invoking shell scripts. +SHELL="/bin/sh" + +# Whether or not to build shared libraries. +build_libtool_libs=yes + +# Whether or not to build static libraries. +build_old_libs=no + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=no + +# Whether or not to optimize for fast installation. +fast_install=yes + +# The host system. +host_alias=i686-pc-linux-gnu +host=i686-pc-linux-gnu + +# An echo program that does not interpret backslashes. +echo="echo" + +# The archiver. +AR="ar" +AR_FLAGS="cru" + +# The default C compiler. +CC="gcc" + +# Is the compiler the GNU C compiler? +with_gcc=yes + +# The linker used to build libraries. +LD="/usr/bin/ld" + +# Whether we need hard or soft links. +LN_S="ln -s" + +# A BSD-compatible nm program. +NM="/usr/bin/nm -B" + +# A symbol stripping program +STRIP=strip + +# Used to examine libraries when file_magic_cmd begins "file" +MAGIC_CMD=file + +# Used on cygwin: DLL creation program. +DLLTOOL="dlltool" + +# Used on cygwin: object dumper. +OBJDUMP="objdump" + +# Used on cygwin: assembler. +AS="as" + +# The name of the directory that contains temporary libtool files. +objdir=.libs + +# How to create reloadable object files. +reload_flag=" -r" +reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs" + +# How to pass a linker flag through the compiler. +wl="-Wl," + +# Object file suffix (normally "o"). +objext="o" + +# Old archive suffix (normally "a"). +libext="a" + +# Executable file suffix (normally ""). +exeext="" + +# Additional compiler flags for building library objects. +pic_flag=" -fPIC" +pic_mode=default + +# Does compiler simultaneously support -c and -o options? +compiler_c_o="yes" + +# Can we write directly to a .lo ? +compiler_o_lo="yes" + +# Must we lock files when doing compilation ? +need_locks="no" + +# Do we need the lib prefix for modules? +need_lib_prefix=no + +# Do we need a version for libraries? +need_version=no + +# Whether dlopen is supported. +dlopen_support=unknown + +# Whether dlopen of programs is supported. +dlopen_self=unknown + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=unknown + +# Compiler flag to prevent dynamic linking. +link_static_flag="-static" + +# Compiler flag to turn off builtin functions. +no_builtin_flag=" -fno-builtin -fno-rtti -fno-exceptions" + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec="\${wl}--export-dynamic" + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec="\${wl}--whole-archive\$convenience \${wl}--no-whole-archive" + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec="" + +# Library versioning type. +version_type=linux + +# Format of library name prefix. +libname_spec="lib\$name" + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec="\${libname}\${release}.so\$versuffix \${libname}\${release}.so\$major \$libname.so" + +# The coded name of the library, if different from the real name. +soname_spec="\${libname}\${release}.so\$major" + +# Commands used to build and install an old-style archive. +RANLIB="ranlib" +old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs\$old_deplibs~\$RANLIB \$oldlib" +old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib" +old_postuninstall_cmds="" + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds="" + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds="" + +# Commands used to build and install a shared archive. +archive_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname -o \$lib" +archive_expsym_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname \$wl\$soname \${wl}-retain-symbols-file \$wl\$export_symbols -o \$lib" +postinstall_cmds="" +postuninstall_cmds="" + +# Commands to strip libraries. +old_striplib="strip --strip-debug" +striplib="strip --strip-unneeded" + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method="pass_all" + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd="\$MAGIC_CMD" + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag="" + +# Flag that forces no undefined symbols. +no_undefined_flag="" + +# Commands used to finish a libtool library installation in a directory. +finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir" + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval="" + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGISTW][ABCDGISTW]*\\)[ ][ ]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2\\3 \\3/p'" + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern char \\1;/p'" + +# Transform the output of nm in a C name address pair +global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/ {\"\\2\", (lt_ptr) \\&\\2},/p'" + +# This is the shared library runtime path variable. +runpath_var=LD_RUN_PATH + +# This is the shared library path variable. +shlibpath_var=LD_LIBRARY_PATH + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=no + +# How to hardcode a shared library path into an executable. +hardcode_action=immediate + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=yes + +# Flag to hardcode $libdir into a binary during linking. +# This must work even if $libdir does not exist. +hardcode_libdir_flag_spec="\${wl}--rpath \${wl}\$libdir" + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator="" + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=no + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=no + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=unsupported + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at relink time. +variables_saved_for_relink="PATH LD_LIBRARY_PATH LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=unknown + +# Compile-time system search path for libraries +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec="/lib /usr/lib" + +# Fix the shell variable $srcfile for the compiler. +fix_srcfile_path="" + +# Set to yes if exported symbols are required. +always_export_symbols=no + +# The commands to list exported symbols. +export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | sed 's/.* //' | sort | uniq > \$export_symbols" + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds="" + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_" + +# Symbols that must always be exported. +include_expsyms="" + +# ### END LIBTOOL CONFIG + +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun configure. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +# Parse our command line options once, thoroughly. +while test $# -gt 0 +do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + exit 0 + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 + exit 0 + ;; + + --debug) + echo "$progname: enabling shell trace mode" + set -x + ;; + + --dry-run | -n) + run=: + ;; + + --features) + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + exit 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 +fi + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + case $nonopt in + *cc | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + prev= + lastarg= + srcfile="$nonopt" + suppress_output= + + user_target=no + for arg + do + case $prev in + "") ;; + xcompiler) + # Aesthetically quote the previous argument. + prev= + lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + + case $arg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + + # Add the previous argument to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + continue + ;; + esac + + # Accept any command-line options. + case $arg in + -o) + if test "$user_target" != "no"; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit 1 + fi + user_target=next + ;; + + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + continue + ;; + esac + + case $user_target in + next) + # The next one is the -o target name + user_target=yes + continue + ;; + yes) + # We got the output file + user_target=set + libobj="$arg" + continue + ;; + esac + + # Accept the current argument as the source file. + lastarg="$srcfile" + srcfile="$arg" + + # Aesthetically quote the previous argument. + + # Backslashify any backslashes, double quotes, and dollar signs. + # These are the only characters that are still specially + # interpreted inside of double-quoted scrings. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $lastarg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + # Add the previous argument to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + done + + case $user_target in + set) + ;; + no) + # Get the name of the library object. + libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + *) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit 1 + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSfmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit 1 + ;; + esac + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $libobj" + else + removelist="$libobj" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit 1" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit 1" 1 2 15 + else + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $run ln "$0" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + # All platforms use -DPIC, to notify preprocessed assembler code. + command="$base_compile $srcfile $pic_flag -DPIC" + else + # Don't build PIC code + command="$base_compile $srcfile" + fi + if test "$build_old_libs" = yes; then + lo_libobj="$libobj" + dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$libobj"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` + + if test -d "$dir"; then + $show "$rm $libobj" + $run $rm $libobj + else + $show "$mkdir $dir" + $run $mkdir $dir + status=$? + if test $status -ne 0 && test ! -d $dir; then + exit $status + fi + fi + fi + if test "$compiler_o_lo" = yes; then + output_obj="$libobj" + command="$command -o $output_obj" + elif test "$compiler_c_o" = yes; then + output_obj="$obj" + command="$command -o $output_obj" + fi + + $run $rm "$output_obj" + $show "$command" + if $run eval "$command"; then : + else + test -n "$output_obj" && $run $rm $removelist + exit 1 + fi + + if test "$need_locks" = warn && + test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed, then go on to compile the next one + if test x"$output_obj" != x"$libobj"; then + $show "$mv $output_obj $libobj" + if $run $mv $output_obj $libobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # If we have no pic_flag, then copy the object into place and finish. + if (test -z "$pic_flag" || test "$pic_mode" != default) && + test "$build_old_libs" = yes; then + # Rename the .lo from within objdir to obj + if test -f $obj; then + $show $rm $obj + $run $rm $obj + fi + + $show "$mv $libobj $obj" + if $run $mv $libobj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` + libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` + # Now arrange that obj and lo_libobj become the same file + $show "(cd $xdir && $LN_S $baseobj $libobj)" + if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + $run $rm "$lockfile" + fi + exit 0 + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Allow error messages only from the first compilation. + suppress_output=' >/dev/null 2>&1' + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $srcfile" + else + # All platforms use -DPIC, to notify preprocessed assembler code. + command="$base_compile $srcfile $pic_flag -DPIC" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + output_obj="$obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + $run $rm "$output_obj" + $show "$command" + if $run eval "$command"; then : + else + $run $rm $removelist + exit 1 + fi + + if test "$need_locks" = warn && + test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed + if test x"$output_obj" != x"$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Create an invalid libtool object if no PIC, so that we do not + # accidentally link it into a program. + if test "$build_libtool_libs" != yes; then + $show "echo timestamp > $libobj" + $run eval "echo timestamp > \$libobj" || exit $? + else + # Move the .lo from within objdir + $show "$mv $libobj $lo_libobj" + if $run $mv $libobj $lo_libobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + fi + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + $run $rm "$lockfile" + fi + + exit 0 + ;; + + # libtool link mode + link | relink) + modename="$modename: link" + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invokation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args="$nonopt" + compile_command="$nonopt" + finalize_command="$nonopt" + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + + avoid_version=no + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -all-static | -static) + if test "X$arg" = "X-all-static"; then + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test $# -gt 0; do + arg="$1" + shift + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit 1 + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n $prev + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit 1 + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | no/*-*-nonstopux*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit 1 + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-mingw* | *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # The PATH hackery in wrapper scripts is required on Windows + # in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -o) prev=output ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.lo | *.$objext) + # A library or standard object. + if test "$prev" = dlfiles; then + # This file was specified with -dlopen. + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $arg" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` + prev= + else + case $arg in + *.lo) libobjs="$libobjs $arg" ;; + *) objs="$objs $arg" ;; + esac + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d $output_objdir; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test $status -ne 0 && test ! -d $output_objdir; then + exit $status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit 1 + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test $linkmode = prog; then + # Determine which files to process + case $pass in + dlopen) + libs="$dlfiles" + save_deplibs="$deplibs" # Collect dlpreopened libraries + deplibs= + ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -l*) + if test $linkmode = oldlib && test $linkmode = obj; then + $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2 + continue + fi + if test $pass = conv; then + deplibs="$deplib $deplibs" + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do + # Search the libtool library + lib="$searchdir/lib${name}.la" + if test -f "$lib"; then + found=yes + break + fi + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test $pass = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test $pass = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test $pass = scan; then + deplibs="$deplib $deplibs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test $pass = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test $pass = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + if test "$deplibs_check_method" != pass_all; then + echo + echo "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not used here." + else + echo + echo "*** Warning: Linking the shared library $output against the" + echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test $pass != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test $found = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib'" 1>&2 + exit 1 + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # If the library was installed with an old release of libtool, + # it will not redefine variable installed. + installed=yes + + # Read the .la file + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test $linkmode = oldlib && test $linkmode = obj; }; then + # Add dl[pre]opened files of deplib + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test $pass = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit 1 + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test $linkmode != prog && test $linkmode != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit 1 + fi + continue + fi # $pass = conv + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit 1 + fi + + # This library was specified with -dlopen. + if test $pass = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit 1 + fi + if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. + dlprefiles="$dlprefiles $lib" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test $pass = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit 1 + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test $linkmode = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" + fi + continue + fi + + if test $linkmode = prog && test $pass != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test $linkalldeplibs = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + link_static=no # Whether the deplib will be linked statically + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + # Link against this shared library + + if test "$linkmode,$pass" = "prog,link" || + { test $linkmode = lib && test $hardcode_into_libs = yes; }; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + if test $linkmode = prog; then + # We need to hardcode the library path + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + fi + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; shift + libname=`eval \\$echo \"$libname_spec\"` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + eval cmds=\"$extract_expsyms_cmds\" + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + eval cmds=\"$old_archive_from_expsyms_cmds\" + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n $old_archive_from_expsyms_cmds + + if test $linkmode = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\/]*) + add_dir="-L$inst_prefix_dir$libdir $add_dir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit 1 + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test $linkmode = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test $linkmode = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\/]*) + add_dir="-L$inst_prefix_dir$libdir $add_dir" + ;; + esac + fi + add="-l$name" + fi + + if test $linkmode = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test $linkmode = prog; then + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + + # Try to link the static library + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + echo "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test $linkmode = lib; then + if test -n "$dependency_libs" && + { test $hardcode_into_libs != yes || test $build_old_libs = yes || + test $link_static = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test $link_all_deplibs != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="-L$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit 1 + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="-L$absdir" + fi + ;; + *) continue ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$deplibs $path" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test $pass = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test $pass != dlopen; then + test $pass != scan && dependency_libs="$newdependency_libs" + if test $pass != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + *) + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + if test "$pass" = "conv" && + { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then + libs="$deplibs" # reset libs + deplibs= + fi + done # for pass + if test $linkmode = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit 1 + else + echo + echo "*** Warning: Linking the shared library $output against the non-libtool" + echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test $# -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + libext=al + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + current="$2" + revision="$3" + age="$4" + + # Check that each of the things are valid numbers. + case $current in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case $revision in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case $age in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test $age -gt $current; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + major=`expr $current - $age + 1` + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test $loop != 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test $loop != 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + verstring="0.0" + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring="" + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; then + # Remove our outputs. + $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" + $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + for path in $notinst_path; do + lib_search_path=`echo "$lib_search_path " | ${SED} -e 's% $path % %g'` + deplibs=`echo "$deplibs " | ${SED} -e 's% -L$path % %g'` + dependency_libs=`echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` + done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test $hardcode_into_libs != yes || test $build_old_libs = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test $build_libtool_need_lc = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behaviour. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | egrep "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + echo "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + echo "*** with $libname but no candidates were found. (...for file magic test)" + else + echo "*** with $libname and none of the candidates passed a file format test" + echo "*** using a file magic. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name="`expr $a_deplib : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check below in file_magic test + if eval echo \"$potent_lib\" 2>/dev/null \ + | ${SED} 10q \ + | egrep "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + echo "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + echo "*** with $libname but no candidates were found. (...for regex pattern test)" + else + echo "*** with $libname and none of the candidates passed a file format test" + echo "*** using a regex pattern. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | + grep . >/dev/null; then + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + echo "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test $allow_undefined = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test $hardcode_into_libs = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + test -z "$dlname" && dlname=$soname + + lib="$output_objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Ensure that we have .o objects for linkers which dislike .lo + # (e.g. aix) in case we are running --disable-static + for obj in $libobjs; do + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` + if test ! -f $xdir/$oldobj; then + $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" + $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? + fi + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + eval cmds=\"$export_symbols_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval cmds=\"$archive_expsym_cmds\" + else + save_deplibs="$deplibs" + for conv in $convenience; do + tmp_deplibs= + for test_deplib in $deplibs; do + if test "$test_deplib" != "$conv"; then + tmp_deplibs="$tmp_deplibs $test_deplib" + fi + done + deplibs="$tmp_deplibs" + done + eval cmds=\"$archive_cmds\" + deplibs="$save_deplibs" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? + exit 0 + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + eval cmds=\"$reload_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + $show "echo timestamp > $libobj" + $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + eval cmds=\"$reload_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + else + # Just create a symlink. + $show $rm $libobj + $run $rm $libobj + xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$libobj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` + oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` + $show "(cd $xdir && $LN_S $oldobj $baseobj)" + $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + ;; + + prog) + case $host in + *cygwin*) output=`echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + ;; + esac + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$output.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' + $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval 'echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DPIC";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit 1 + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test $need_relink = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit 0 + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $0 --fallback-echo"; then + case $0 in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; + *) qecho="$SHELL `pwd`/$0 --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) exeext=.exe ;; + *) exeext= ;; + esac + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + echo >> $output "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $echo \"\$relink_command_output\" >&2 + $rm \"\$progdir/\$file\" + exit 1 + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 ${SED} + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # win32 systems need to use the prog path for dll + # lookup to work + *-*-cygwin* | *-*-pw32*) + $echo >> $output "\ + exec \$progdir/\$program \${1+\"\$@\"} +" + ;; + + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + # Export the path to the program. + PATH=\"\$progdir:\$PATH\" + export PATH + + exec \$program \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit 1 + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" + chmod +x $output + fi + exit 0 + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` + done + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + eval cmds=\"$old_archive_from_new_cmds\" + else + # Ensure that we have .o objects in place in case we decided + # not to build a shared library, and have fallen back to building + # static libs even though --disable-static was passed! + for oldobj in $oldobjs; do + if test ! -f $oldobj; then + xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$oldobj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` + obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` + $show "(cd $xdir && ${LN_S} $obj $baseobj)" + $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? + fi + done + + eval cmds=\"$old_archive_cmds\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test $need_relink = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test $# -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$echo "$destdir" | sed "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit 1 + fi + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%%"` + fi + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit 1 + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run eval "$striplib $destdir/$realname" || exit $? + fi + + if test $# -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + eval cmds=\"$postinstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit 0 + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | egrep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $wrapper ;; + *) . ./$wrapper ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $wrapper ;; + *) . ./$wrapper ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : + else + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + file=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyways + case $install_prog,$host in + /usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + destfile=`echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + eval cmds=\"$old_postinstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $0 --finish$current_libdirs' + else + exit 0 + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + eval cmds=\"$finish_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = ":" && exit 0 + + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + echo " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + echo "See any operating system documentation about shared libraries for" + echo "more information, such as the ld(1) and ld.so(8) manual pages." + echo "----------------------------------------------------------------------" + exit 0 + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit 1 + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit 1 + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved enviroment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit 0 + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + rmdirs= + + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$objdir" + else + objdir="$dir/$objdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test $mode = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test $mode = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if (test -L "$file") >/dev/null 2>&1 \ + || (test -h "$file") >/dev/null 2>&1 \ + || test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + + if test $mode = uninstall; then + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + if test $? != 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + if test $? != 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + fi + fi + ;; + + *.lo) + if test "$build_old_libs" = yes; then + oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` + rmfiles="$rmfiles $dir/$oldobj" + fi + ;; + + *) + # Do a test to see if this is a libtool program. + if test $mode = clean && + (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$file + + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit 1 +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --version print version information + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE." + exit 0 + ;; + +clean) + $echo \ +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; +esac + +echo +$echo "Try \`$modename --help' for more information about other modes." + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/contrib/php/ltmain.sh b/contrib/php/ltmain.sh new file mode 100644 index 0000000..6fc6900 --- /dev/null +++ b/contrib/php/ltmain.sh @@ -0,0 +1,5107 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun configure. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 +# Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit , 1996 +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +# Parse our command line options once, thoroughly. +while test $# -gt 0 +do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + exit 0 + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 + exit 0 + ;; + + --debug) + echo "$progname: enabling shell trace mode" + set -x + ;; + + --dry-run | -n) + run=: + ;; + + --features) + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + exit 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 +fi + +# If this variable is set in any of the actions, the command in it +# will be execed at the end. This prevents here-documents from being +# left over by shells. +exec_cmd= + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + case $nonopt in + *cc | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + prev= + lastarg= + srcfile="$nonopt" + suppress_output= + + user_target=no + for arg + do + case $prev in + "") ;; + xcompiler) + # Aesthetically quote the previous argument. + prev= + lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + + case $arg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + + # Add the previous argument to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + continue + ;; + esac + + # Accept any command-line options. + case $arg in + -o) + if test "$user_target" != "no"; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit 1 + fi + user_target=next + ;; + + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=no + continue + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + continue + ;; + esac + + case $user_target in + next) + # The next one is the -o target name + user_target=yes + continue + ;; + yes) + # We got the output file + user_target=set + libobj="$arg" + continue + ;; + esac + + # Accept the current argument as the source file. + lastarg="$srcfile" + srcfile="$arg" + + # Aesthetically quote the previous argument. + + # Backslashify any backslashes, double quotes, and dollar signs. + # These are the only characters that are still specially + # interpreted inside of double-quoted scrings. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $lastarg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + # Add the previous argument to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + done + + case $user_target in + set) + ;; + no) + # Get the name of the library object. + libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + *) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit 1 + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSfmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit 1 + ;; + esac + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $libobj" + else + removelist="$libobj" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit 1" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + pic_mode=default + ;; + esac + if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then + # non-PIC code in shared libraries is not supported + pic_mode=default + fi + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit 1" 1 2 15 + else + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until $run ln "$0" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + if test "$pic_mode" != no; then + # All platforms use -DPIC, to notify preprocessed assembler code. + command="$base_compile $srcfile $pic_flag -DPIC" + else + # Don't build PIC code + command="$base_compile $srcfile" + fi + if test "$build_old_libs" = yes; then + lo_libobj="$libobj" + dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$libobj"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` + + if test -d "$dir"; then + $show "$rm $libobj" + $run $rm $libobj + else + $show "$mkdir $dir" + $run $mkdir $dir + status=$? + if test $status -ne 0 && test ! -d $dir; then + exit $status + fi + fi + fi + if test "$compiler_o_lo" = yes; then + output_obj="$libobj" + command="$command -o $output_obj" + elif test "$compiler_c_o" = yes; then + output_obj="$obj" + command="$command -o $output_obj" + fi + + $run $rm "$output_obj" + $show "$command" + if $run eval "$command"; then : + else + test -n "$output_obj" && $run $rm $removelist + exit 1 + fi + + if test "$need_locks" = warn && + test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed, then go on to compile the next one + if test x"$output_obj" != x"$libobj"; then + $show "$mv $output_obj $libobj" + if $run $mv $output_obj $libobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # If we have no pic_flag, then copy the object into place and finish. + if (test -z "$pic_flag" || test "$pic_mode" != default) && + test "$build_old_libs" = yes; then + # Rename the .lo from within objdir to obj + if test -f $obj; then + $show $rm $obj + $run $rm $obj + fi + + $show "$mv $libobj $obj" + if $run $mv $libobj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"` + libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` + # Now arrange that obj and lo_libobj become the same file + $show "(cd $xdir && $LN_S $baseobj $libobj)" + if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + $run $rm "$lockfile" + fi + exit 0 + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Allow error messages only from the first compilation. + suppress_output=' >/dev/null 2>&1' + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + if test "$pic_mode" != yes; then + # Don't build PIC code + command="$base_compile $srcfile" + else + # All platforms use -DPIC, to notify preprocessed assembler code. + command="$base_compile $srcfile $pic_flag -DPIC" + fi + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + output_obj="$obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + $run $rm "$output_obj" + $show "$command" + if $run eval "$command"; then : + else + $run $rm $removelist + exit 1 + fi + + if test "$need_locks" = warn && + test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed + if test x"$output_obj" != x"$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Create an invalid libtool object if no PIC, so that we do not + # accidentally link it into a program. + if test "$build_libtool_libs" != yes; then + $show "echo timestamp > $libobj" + $run eval "echo timestamp > \$libobj" || exit $? + else + # Move the .lo from within objdir + $show "$mv $libobj $lo_libobj" + if $run $mv $libobj $lo_libobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + fi + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + $run $rm "$lockfile" + fi + + exit 0 + ;; + + # libtool link mode + link | relink) + modename="$modename: link" + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invokation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + ;; + *) + allow_undefined=yes + ;; + esac + libtool_args="$nonopt" + compile_command="$nonopt" + finalize_command="$nonopt" + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + old_deplibs= + compiler_flags= + linker_flags= + dllsearchpath= + lib_search_path=`pwd` + inst_prefix_dir= + + avoid_version=no + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + ltlibs= + module=no + no_install=no + objs= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + + # We need to know -static, to get the right output filenames. + for arg + do + case $arg in + -all-static | -static) + if test "X$arg" = "X-all-static"; then + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test $# -gt 0; do + arg="$1" + shift + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case $arg in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit 1 + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi # test -n $prev + + prevarg="$arg" + + case $arg in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit 1 + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -inst-prefix-dir) + prev=inst_prefix + continue + ;; + + # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* + # so, if we see these flags be careful not to treat them like -L + -L[A-Z][A-Z]*:*) + case $with_gcc/$host in + no/*-*-irix* | no/*-*-nonstopux*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit 1 + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-mingw* | *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # The PATH hackery in wrapper scripts is required on Windows + # in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -o) prev=output ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # The effects of -static are defined in a previous loop. + # We used to do the same as -all-static on platforms that + # didn't have a PIC flag, but the assumption that the effects + # would be equivalent was wrong. It would break on at least + # Digital Unix and AIX. + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.lo | *.$objext) + # A library or standard object. + if test "$prev" = dlfiles; then + # This file was specified with -dlopen. + if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then + dlfiles="$dlfiles $arg" + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` + prev= + else + case $arg in + *.lo) libobjs="$libobjs $arg" ;; + *) objs="$objs $arg" ;; + esac + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + fi + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + shlib_search_path= + fi + eval sys_lib_search_path=\"$sys_lib_search_path_spec\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d $output_objdir; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test $status -ne 0 && test ! -d $output_objdir; then + exit $status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + specialdeplibs= + libs= + # Find all interdependent deplibs by searching for libraries + # that are linked more than once (e.g. -la -lb -la) + for deplib in $deplibs; do + if test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$libs $deplib" + done + deplibs= + newdependency_libs= + newlib_search_path= + need_relink=no # whether we're linking any uninstalled libtool libraries + notinst_deplibs= # not-installed libtool libraries + notinst_path= # paths that contain not-installed libtool libraries + case $linkmode in + lib) + passes="conv link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit 1 + ;; + esac + done + ;; + prog) + compile_deplibs= + finalize_deplibs= + alldeplibs=no + newdlfiles= + newdlprefiles= + passes="conv scan dlopen dlpreopen link" + ;; + *) passes="conv" + ;; + esac + for pass in $passes; do + if test $linkmode = prog; then + # Determine which files to process + case $pass in + dlopen) + libs="$dlfiles" + save_deplibs="$deplibs" # Collect dlpreopened libraries + deplibs= + ;; + dlpreopen) libs="$dlprefiles" ;; + link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; + esac + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -l*) + if test $linkmode = oldlib && test $linkmode = obj; then + $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2 + continue + fi + if test $pass = conv; then + deplibs="$deplib $deplibs" + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do + # Search the libtool library + lib="$searchdir/lib${name}.la" + if test -f "$lib"; then + found=yes + break + fi + done + if test "$found" != yes; then + # deplib doesn't seem to be a libtool library + if test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + deplibs="$deplib $deplibs" + test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs" + fi + continue + fi + ;; # -l + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test $pass = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test $pass = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test $pass = scan; then + deplibs="$deplib $deplibs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test $pass = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test $pass = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + if test "$deplibs_check_method" != pass_all; then + echo + echo "*** Warning: Trying to link with static lib archive $deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because the file extensions .$libext of this argument makes me believe" + echo "*** that it is just a static archive that I should not used here." + else + echo + echo "*** Warning: Linking the shared library $output against the" + echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + continue + ;; + prog) + if test $pass != link; then + deplibs="$deplib $deplibs" + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + continue + ;; + esac # linkmode + ;; # *.$libext + *.lo | *.$objext) + if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlopen support or we're linking statically, + # we need to preload. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test $found = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib'" 1>&2 + exit 1 + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # If the library was installed with an old release of libtool, + # it will not redefine variable installed. + installed=yes + + # Read the .la file + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test $linkmode = oldlib && test $linkmode = obj; }; then + # Add dl[pre]opened files of deplib + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen" + fi + + if test $pass = conv; then + # Only check for convenience libraries + deplibs="$lib $deplibs" + if test -z "$libdir"; then + if test -z "$old_library"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit 1 + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test $linkmode != prog && test $linkmode != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit 1 + fi + continue + fi # $pass = conv + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit 1 + fi + + # This library was specified with -dlopen. + if test $pass = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit 1 + fi + if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking + # statically, we need to preload. + dlprefiles="$dlprefiles $lib" + else + newdlfiles="$newdlfiles $lib" + fi + continue + fi # $pass = dlopen + + # We need an absolute path. + case $ladir in + [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; + *) + abs_ladir=`cd "$ladir" && pwd` + if test -z "$abs_ladir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test $pass = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit 1 + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + fi # $pass = dlpreopen + + if test -z "$libdir"; then + # Link the convenience library + if test $linkmode = lib; then + deplibs="$dir/$old_library $deplibs" + elif test "$linkmode,$pass" = "prog,link"; then + compile_deplibs="$dir/$old_library $compile_deplibs" + finalize_deplibs="$dir/$old_library $finalize_deplibs" + else + deplibs="$lib $deplibs" + fi + continue + fi + + if test $linkmode = prog && test $pass != link; then + newlib_search_path="$newlib_search_path $ladir" + deplibs="$lib $deplibs" + + linkalldeplibs=no + if test "$link_all_deplibs" != no || test -z "$library_names" || + test "$build_libtool_libs" = no; then + linkalldeplibs=yes + fi + + tmp_libs= + for deplib in $dependency_libs; do + case $deplib in + -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + esac + # Need to link against all dependency_libs? + if test $linkalldeplibs = yes; then + deplibs="$deplib $deplibs" + else + # Need to hardcode shared library paths + # or/and link against static libraries + newdependency_libs="$deplib $newdependency_libs" + fi + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done # for deplib + continue + fi # $linkmode = prog... + + link_static=no # Whether the deplib will be linked statically + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + # Link against this shared library + + if test "$linkmode,$pass" = "prog,link" || + { test $linkmode = lib && test $hardcode_into_libs = yes; }; then + # Hardcode the library path. + # Skip directories that are in the system default run-time + # search path. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + if test $linkmode = prog; then + # We need to hardcode the library path + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + fi + fi # $linkmode,$pass = prog,link... + + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; shift + libname=`eval \\$echo \"$libname_spec\"` + # use dlname if we got it. it's perfectly good, no? + if test -n "$dlname"; then + soname="$dlname" + elif test -n "$soname_spec"; then + # bleh windows + case $host in + *cygwin*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + eval cmds=\"$extract_expsyms_cmds\" + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + eval cmds=\"$old_archive_from_expsyms_cmds\" + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + # make sure the library variables are pointing to the new library + dir=$output_objdir + linklib=$newlib + fi # test -n $old_archive_from_expsyms_cmds + + if test $linkmode = prog || test "$mode" != relink; then + add_shlibpath= + add_dir= + add= + lib_linked=yes + case $hardcode_action in + immediate | unsupported) + if test "$hardcode_direct" = no; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = no; then + case $host in + *-*-sunos*) add_shlibpath="$dir" ;; + esac + add_dir="-L$dir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = no; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + relink) + if test "$hardcode_direct" = yes; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\/]*) + add_dir="-L$inst_prefix_dir$libdir $add_dir" + ;; + esac + fi + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + add_shlibpath="$dir" + add="-l$name" + else + lib_linked=no + fi + ;; + *) lib_linked=no ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit 1 + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;; + esac + fi + if test $linkmode = prog; then + test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" + test -n "$add" && compile_deplibs="$add $compile_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + if test "$hardcode_direct" != yes && \ + test "$hardcode_minus_L" != yes && \ + test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test $linkmode = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + add="$libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$libdir" + add="-l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case :$finalize_shlibpath: in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + add="-l$name" + else + # We cannot seem to hardcode it, guess we'll fake it. + add_dir="-L$libdir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\/]*) + add_dir="-L$inst_prefix_dir$libdir $add_dir" + ;; + esac + fi + add="-l$name" + fi + + if test $linkmode = prog; then + test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" + test -n "$add" && finalize_deplibs="$add $finalize_deplibs" + else + test -n "$add_dir" && deplibs="$add_dir $deplibs" + test -n "$add" && deplibs="$add $deplibs" + fi + fi + elif test $linkmode = prog; then + if test "$alldeplibs" = yes && + { test "$deplibs_check_method" = pass_all || + { test "$build_libtool_libs" = yes && + test -n "$library_names"; }; }; then + # We only need to search for static libraries + continue + fi + + # Try to link the static library + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_deplibs="$dir/$linklib $compile_deplibs" + finalize_deplibs="$dir/$linklib $finalize_deplibs" + else + compile_deplibs="-l$name -L$dir $compile_deplibs" + finalize_deplibs="-l$name -L$dir $finalize_deplibs" + fi + elif test "$build_libtool_libs" = yes; then + # Not a shared library + if test "$deplibs_check_method" != pass_all; then + # We're trying link a shared library against a static one + # but the system doesn't support it. + + # Just print a warning and add the library to dependency_libs so + # that the program can be linked against the static library. + echo + echo "*** Warning: This system can not link to static lib archive $lib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + if test "$module" = yes; then + echo "*** But as you try to build a module library, libtool will still create " + echo "*** a static module, that should work as long as the dlopening application" + echo "*** is linked with the -dlopen flag to resolve symbols at runtime." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + else + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + deplibs="$dir/$old_library $deplibs" + link_static=yes + fi + fi # link shared/static library? + + if test $linkmode = lib; then + if test -n "$dependency_libs" && + { test $hardcode_into_libs != yes || test $build_old_libs = yes || + test $link_static = yes; }; then + # Extract -R from dependency_libs + temp_deplibs= + for libdir in $dependency_libs; do + case $libdir in + -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$newlib_search_path $absdir" + # Link against this library + test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" + # ... and its dependency_libs + tmp_libs= + for deplib in $dependency_libs; do + newdependency_libs="$deplib $newdependency_libs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test $link_all_deplibs != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="-L$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit 1 + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="-L$absdir" + fi + ;; + *) continue ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$deplibs $path" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + if test $pass = dlpreopen; then + # Link the dlpreopened libraries before other libraries + for deplib in $save_deplibs; do + deplibs="$deplib $deplibs" + done + fi + if test $pass != dlopen; then + test $pass != scan && dependency_libs="$newdependency_libs" + if test $pass != conv; then + # Make sure lib_search_path contains only unique directories. + lib_search_path= + for dir in $newlib_search_path; do + case "$lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir" ;; + esac + done + newlib_search_path= + fi + + if test "$linkmode,$pass" != "prog,link"; then + vars="deplibs" + else + vars="compile_deplibs finalize_deplibs" + fi + for var in $vars dependency_libs; do + # Add libraries to $var in reverse order + eval tmp_libs=\"\$$var\" + new_libs= + for deplib in $tmp_libs; do + case $deplib in + -L*) new_libs="$deplib $new_libs" ;; + *) + case " $specialdeplibs " in + *" $deplib "*) new_libs="$deplib $new_libs" ;; + *) + case " $new_libs " in + *" $deplib "*) ;; + *) new_libs="$deplib $new_libs" ;; + esac + ;; + esac + ;; + esac + done + tmp_libs= + for deplib in $new_libs; do + case $deplib in + -L*) + case " $tmp_libs " in + *" $deplib "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + done + eval $var=\"$tmp_libs\" + done # for var + fi + if test "$pass" = "conv" && + { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then + libs="$deplibs" # reset libs + deplibs= + fi + done # for pass + if test $linkmode = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit 1 + else + echo + echo "*** Warning: Linking the shared library $output against the non-libtool" + echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test $# -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + libext=al + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + current="$2" + revision="$3" + age="$4" + + # Check that each of the things are valid numbers. + case $current in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case $revision in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case $age in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test $age -gt $current; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case $version_type in + none) ;; + + darwin) + # Like Linux, but with the current version available in + # verstring for coding it into the library header + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + irix | nonstopux) + major=`expr $current - $age + 1` + + case $version_type in + nonstopux) verstring_prefix=nonstopux ;; + *) verstring_prefix=sgi ;; + esac + verstring="$verstring_prefix$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test $loop != 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test $loop != 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + verstring="0.0" + case $version_type in + darwin) + # we can't check for "0.0" in archive_cmds due to quoting + # problems, so we reset it completely + verstring="" + ;; + *) + verstring="0.0" + ;; + esac + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$mode" != relink; then + # Remove our outputs. + $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" + $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + for path in $notinst_path; do + lib_search_path=`echo "$lib_search_path " | ${SED} -e 's% $path % %g'` + deplibs=`echo "$deplibs " | ${SED} -e 's% -L$path % %g'` + dependency_libs=`echo "$dependency_libs " | ${SED} -e 's% -L$path % %g'` + done + + if test -n "$xrpath"; then + # If the user specified any rpath flags, then add them. + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + if test $hardcode_into_libs != yes || test $build_old_libs = yes; then + dependency_libs="$temp_xrpath $dependency_libs" + fi + fi + + # Make sure dlfiles contains only unique files that won't be dlpreopened + old_dlfiles="$dlfiles" + dlfiles= + for lib in $old_dlfiles; do + case " $dlprefiles $dlfiles " in + *" $lib "*) ;; + *) dlfiles="$dlfiles $lib" ;; + esac + done + + # Make sure dlprefiles contains only unique files + old_dlprefiles="$dlprefiles" + dlprefiles= + for lib in $old_dlprefiles; do + case "$dlprefiles " in + *" $lib "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test $build_libtool_need_lc = "yes"; then + deplibs="$deplibs -lc" + fi + ;; + esac + fi + + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case $deplibs_check_method in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behaviour. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c </dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` + case $potliblink in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | egrep "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + echo "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + echo "*** with $libname but no candidates were found. (...for file magic test)" + else + echo "*** with $libname and none of the candidates passed a file format test" + echo "*** using a file magic. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name="`expr $a_deplib : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + potlib="$potent_lib" # see symlink-check below in file_magic test + if eval echo \"$potent_lib\" 2>/dev/null \ + | ${SED} 10q \ + | egrep "$match_pattern_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + echo "*** Warning: linker path does not have real file for library $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have" + echo "*** because I did check the linker path looking for a file starting" + if test -z "$potlib" ; then + echo "*** with $libname but no candidates were found. (...for regex pattern test)" + else + echo "*** with $libname and none of the candidates passed a file format test" + echo "*** using a regex pattern. Last file checked: $potlib" + fi + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | + grep . >/dev/null; then + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + echo "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + + if test $allow_undefined = no; then + echo + echo "*** Since this library must not contain undefined symbols," + echo "*** because either the platform does not support them or" + echo "*** it was explicitly requested with -no-undefined," + echo "*** libtool will only create a static version of it." + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + fi + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + if test $hardcode_into_libs = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$mode" != relink && rpath="$compile_rpath$rpath" + for libdir in $rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" + fi + test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" + fi + + shlibpath="$finalize_shlibpath" + test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + if test -n "$shlibpath"; then + eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" + fi + + # Get the real and link names of the library. + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + test -z "$dlname" && dlname=$soname + + lib="$output_objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Ensure that we have .o objects for linkers which dislike .lo + # (e.g. aix) in case we are running --disable-static + for obj in $libobjs; do + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` + if test ! -f $xdir/$oldobj; then + $show "(cd $xdir && ${LN_S} $baseobj $oldobj)" + $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $? + fi + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + eval cmds=\"$export_symbols_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $? + fi + + # Do each of the archive commands. + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval cmds=\"$archive_expsym_cmds\" + else + save_deplibs="$deplibs" + for conv in $convenience; do + tmp_deplibs= + for test_deplib in $deplibs; do + if test "$test_deplib" != "$conv"; then + tmp_deplibs="$tmp_deplibs $test_deplib" + fi + done + deplibs="$tmp_deplibs" + done + eval cmds=\"$archive_cmds\" + deplibs="$save_deplibs" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? + exit 0 + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + obj) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + eval cmds=\"$reload_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + $show "echo timestamp > $libobj" + $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag" || test "$pic_mode" != default; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + eval cmds=\"$reload_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + else + # Just create a symlink. + $show $rm $libobj + $run $rm $libobj + xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$libobj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` + oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"` + $show "(cd $xdir && $LN_S $oldobj $baseobj)" + $run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $? + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + ;; + + prog) + case $host in + *cygwin*) output=`echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + ;; + esac + ;; + esac + + compile_command="$compile_command $compile_deplibs" + finalize_command="$finalize_command $finalize_deplibs" + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + esac + ;; + esac + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$output.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' + $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval 'echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | + if sort -k 3 /dev/null 2>&1; then + sort -k 3 + else + sort +2 + fi | + uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr void * +#else +# define lt_ptr char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr address; +} +lt_preloaded_symbols[] = +{\ +" + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case $host in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DPIC";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit 1 + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test $need_relink = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$no_install" = yes; then + # We don't need to create a wrapper script. + link_command="$compile_var$compile_command$compile_rpath" + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit 0 + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $0 --fallback-echo"; then + case $0 in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; + *) qecho="$SHELL `pwd`/$0 --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) exeext=.exe ;; + *) exeext= ;; + esac + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed="${SED}"' -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + notinst_deplibs='$notinst_deplibs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + echo >> $output "\ + program=lt-'$outputname'$exeext + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if relink_command_output=\`eval \$relink_command 2>&1\`; then : + else + $echo \"\$relink_command_output\" >&2 + $rm \"\$progdir/\$file\" + exit 1 + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + echo >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" +" + fi + + echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 ${SED} + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + # win32 systems need to use the prog path for dll + # lookup to work + *-*-cygwin* | *-*-pw32*) + $echo >> $output "\ + exec \$progdir/\$program \${1+\"\$@\"} +" + ;; + + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} +" + ;; + + *) + $echo >> $output "\ + # Export the path to the program. + PATH=\"\$progdir:\$PATH\" + export PATH + + exec \$program \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit 1 + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" + chmod +x $output + fi + exit 0 + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` + done + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + eval cmds=\"$old_archive_from_new_cmds\" + else + # Ensure that we have .o objects in place in case we decided + # not to build a shared library, and have fallen back to building + # static libs even though --disable-static was passed! + for oldobj in $oldobjs; do + if test ! -f $oldobj; then + xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$oldobj"; then + xdir="." + else + xdir="$xdir" + fi + baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'` + obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"` + $show "(cd $xdir && ${LN_S} $obj $baseobj)" + $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $? + fi + done + + eval cmds=\"$old_archive_cmds\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + # Preserve any variables that may affect compiler behavior + for var in $variables_saved_for_relink; do + if eval test -z \"\${$var+set}\"; then + relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command" + elif eval var_value=\$$var; test -z "$var_value"; then + relink_command="$var=; export $var; $relink_command" + else + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + # Replace all uninstalled libtool libraries with the installed ones + newdependency_libs= + for deplib in $dependency_libs; do + case $deplib in + *.la) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$tdlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Files to dlopen/dlpreopen +dlopen='$dlfiles' +dlpreopen='$dlprefiles' + +# Directory that this library needs to be installed in: +libdir='$install_libdir'" + if test "$installed" = no && test $need_relink = yes; then + $echo >> $output "\ +relink_command=\"$relink_command\"" + fi + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || + # Allow the use of GNU shtool's install command. + $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test $# -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case $file in + *.$libext) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + if test -n "$relink_command"; then + # Determine the prefix the user has applied to our future dir. + inst_prefix_dir=`$echo "$destdir" | sed "s%$libdir\$%%"` + + # Don't allow the user to place us outside of our expected + # location b/c this prevents finding dependent libraries that + # are installed to the same prefix. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit 1 + fi + + if test -n "$inst_prefix_dir"; then + # Stick the inst_prefix_dir data into the link command. + relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` + else + relink_command=`$echo "$relink_command" | sed "s%@inst_prefix_dir@%%"` + fi + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit 1 + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run eval "$striplib $destdir/$realname" || exit $? + fi + + if test $# -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + eval cmds=\"$postinstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit 0 + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | egrep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $wrapper ;; + *) . ./$wrapper ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $wrapper ;; + *) . ./$wrapper ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : + else + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + file=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyways + case $install_prog,$host in + /usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + destfile=`echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + eval cmds=\"$old_postinstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $0 --finish$current_libdirs' + else + exit 0 + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + eval cmds=\"$finish_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = ":" && exit 0 + + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + echo " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + echo "See any operating system documentation about shared libraries for" + echo "more information, such as the ld(1) and ld.so(8) manual pages." + echo "----------------------------------------------------------------------" + exit 0 + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit 1 + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit 1 + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case $file in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved enviroment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now prepare to actually exec the command. + exec_cmd="\$cmd$args" + else + # Display what would be done. + if test -n "$shlibpath_var"; then + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + fi + $echo "$cmd$args" + exit 0 + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + rm="$nonopt" + files= + rmforce= + exit_status=0 + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + for arg + do + case $arg in + -f) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + rmdirs= + + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$objdir" + else + objdir="$dir/$objdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test $mode = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test $mode = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + esac + fi + + # Don't error if the file doesn't exist and rm -f was used. + if (test -L "$file") >/dev/null 2>&1 \ + || (test -h "$file") >/dev/null 2>&1 \ + || test -f "$file"; then + : + elif test -d "$file"; then + exit_status=1 + continue + elif test "$rmforce" = yes; then + continue + fi + + rmfiles="$file" + + case $name in + *.la) + # Possibly a libtool archive, so verify it. + if (${SED} -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + + if test $mode = uninstall; then + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + if test $? != 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + if test $? != 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + fi + fi + ;; + + *.lo) + if test "$build_old_libs" = yes; then + oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` + rmfiles="$rmfiles $dir/$oldobj" + fi + ;; + + *) + # Do a test to see if this is a libtool program. + if test $mode = clean && + (${SED} -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$file + + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + fi +fi # test -z "$show_help" + +if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit 1 +fi + +# We need to display help for each of the modes. +case $mode in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --version print version information + +MODE must be one of the following: + + clean remove files from the build directory + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE." + exit 0 + ;; + +clean) + $echo \ +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE... + +Remove files from the build directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, object or program, all the files associated +with it are deleted. Otherwise, only FILE itself is deleted using RM." + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-fast-install disable the fast-install mode + -no-install link a not-installable executable + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; +esac + +echo +$echo "Try \`$modename --help' for more information about other modes." + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/contrib/php/missing b/contrib/php/missing new file mode 100644 index 0000000..e69de29 diff --git a/contrib/php/mkinstalldirs b/contrib/php/mkinstalldirs new file mode 100644 index 0000000..e69de29 diff --git a/contrib/php/php_auth_nds.c b/contrib/php/php_auth_nds.c new file mode 100644 index 0000000..d106bd8 --- /dev/null +++ b/contrib/php/php_auth_nds.c @@ -0,0 +1,710 @@ +/* + php_auth_nds.c - User verification for ncpfs + Copyright (C) 2000, 2001 Petr Vandrovec + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Revision history: + + 1.00 2000, September 30 Petr Vandrovec + Initial revision, used on dialog.cvut.cz. + + 1.01 2001, January 10 Petr Vandrovec + Further polishing, used on cdonline.cvut.cz. + + 1.01 2001, February 19 Petr Vandrovec + Added license, polished for release, added sample code. + + 1.02 2001, March 25 Patrick Pollet + Added some NWDSFreeContext in case of errors + Added group parameter (NDS name or bindery) + + 1.03 2001, March 28 Patrick Pollet + Added NDS reading attribute functions + string read_nds_string (tree, object, attribute) + string read_nds_num (tree, object, attribute) + + 1.04 2001, October 27 Patrick Pollet + Added nds_tree_auth allowing a tree name and a list of context to be searched + Simplified code by adding internal CreateCtx and CreateCtxAndConn (called by all NDS related functions) + + */ + +/* + +Original example: + +Expects uid as username, srv as server name and pwd as password. If server name +is FDNET or ST, it uses NDS username $uid.FADOP resp. $uid.STUDENT.CVUT-FSV. For +other servers it uses simple bindery login... If password verification passes, +$ss_username and $valid_user are set to $srv/$uid - you can use session_register +on one of them. + +if ($HTTP_POST_VARS["uid"] == "") + break; +if ($HTTP_POST_VARS["srv"] == "") { + $auth_err = "Wrong URL"; +} else if ($HTTP_POST_VARS["pwd"] == "") { + $auth_err = "Invalid password"; +} else { + $uu = strtoupper($HTTP_POST_VARS["uid"]); + if ($HTTP_POST_VARS["srv"] == "FDNET") { + $auth_err = auth_nds($HTTP_POST_VARS["srv"], $uu . ".FADOP", strtoupper($HTTP_POST_VARS["pwd"])); + } else if ($HTTP_POST_VARS["srv"] == "ST") { + $auth_err = auth_nds($HTTP_POST_VARS["srv"], $uu . ".STUDENT.CVUT-FSV", strtoupper($HTTP_POST_VARS["pwd"])); + } else { + $auth_err = auth_bindery($HTTP_POST_VARS["srv"], $uu, $HTTP_POST_VARS["pwd"]); + } + if ($auth_err == "") { + $valid_user = $HTTP_POST_VARS["srv"] . "/" . $uu; + $ss_username = $valid_user; + } +} + +for more examples see /contrib/php/site +*/ + + +#include "config.h" +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static int is_member_of_group_bind( char* errstr,NWCONN_HANDLE conn,const char* user,const char* group) { + int err; + + err = NWIsObjectInSet(conn, user, NCP_BINDERY_USER, "GROUPS_I'M_IN", group, NCP_BINDERY_UGROUP); + if (!err) { + err= NWIsObjectInSet(conn, group, NCP_BINDERY_UGROUP, "GROUP_MEMBERS", user, NCP_BINDERY_USER); + if (!err) + return 0; + else { + sprintf(errstr, "inconsistent bindery database for user %s and group %s: %s", + user, group, strnwerror(err)); + } + } else { + sprintf (errstr,"user %s is not member of %s: %s", user, group, strnwerror(err)); + } + return -1; +} + +static int is_member_of_group_nds( char* errstr,NWDSContextHandle ctx,NWCONN_HANDLE conn,NWObjectID oid,const char* group) { + int eval = 0; + Buf_T* buf=NULL; + NWDSCCODE dserr; + nbool8 match; + + dserr = NWDSAllocBuf(DEFAULT_MESSAGE_LEN, &buf); + if (dserr) { + sprintf(errstr, "NWDSAllocBuf() failed with %s\n", strnwerror(dserr)); + eval = 120; + goto bailout; + } + dserr = NWDSInitBuf(ctx, DSV_COMPARE, buf); + if (dserr) { + sprintf(errstr, "NWDSInitBuf() failed with %s\n", strnwerror(dserr)); + eval = 121; + goto bailout; + } + dserr = NWDSPutAttrName(ctx, buf, "Group Membership"); + if (dserr) { + sprintf(errstr, "NWDSPutAttrName() failed with %s\n", strnwerror(dserr)); + eval = 122; + goto bailout; + } + dserr = NWDSPutAttrVal(ctx, buf, SYN_DIST_NAME, group); + if (dserr) { + sprintf(errstr, "NWDSPutAttrVal() failed with %s\n", strnwerror(dserr)); + eval = 123; + goto bailout; + } + dserr = __NWDSCompare(ctx, conn, oid, buf, &match); + if (dserr) { + sprintf(errstr, "__NWDSCompare() failed with %s(oid=%x)\n", strnwerror(dserr), oid); + eval = 124; + goto bailout; + } + if (!match) { + sprintf(errstr, "Not member of NDS group %s\n", group); + eval=125; + } +bailout: + if (buf) + NWDSFreeBuf(buf); + return eval; +} + +/* internal; called by all functions requiring a context */ +static int _createCtx ( char * errstr, NWDSContextHandle *ctx) { + + NWDSCCODE dserr; + u_int32_t ctxflag = 0; + u_int32_t confidence = 0; + int eval = 0; + + dserr = NWDSCreateContextHandle(ctx); + if (dserr) { + sprintf(errstr, "NWDSCreateContextHandle failed with %s\n", strnwerror(dserr)); + return 100; + } + + ctxflag = DCV_XLATE_STRINGS | DCV_DEREF_ALIASES | DCV_TYPELESS_NAMES; + + dserr = NWDSSetContext(*ctx, DCK_FLAGS, &ctxflag); + if (dserr) { + sprintf(errstr, "NWDSSetContext(DCK_FLAGS) failed: %s\n", strnwerror(dserr)); + eval=101; + goto bailout; + } + dserr = NWDSSetContext(*ctx, DCK_NAME_CONTEXT, ""); + if (dserr) { + sprintf(errstr, "NWDSSetContext(DCK_NAME_CONTEXT) failed: %s\n",strnwerror(dserr)); + eval=102; + goto bailout; + } + dserr = NWDSSetContext(*ctx, DCK_CONFIDENCE, &confidence); + if (dserr) { + sprintf(errstr, "NWDSSetContext(DCK_CONFIDENCE) failed: %s\n",strnwerror(dserr)); + eval=103; + goto bailout; + } + /* success */ + return 0; + /*failure */ +bailout: + dserr = NWDSFreeContext(*ctx); + if (dserr) { + sprintf(errstr, "NWDSFreeContext failed with %s\n", strnwerror(dserr)); + eval=105; + } + return eval; +} + +/* internnal; called by all functions requiring a connection to a tree */ +static int _createCtxAndConn (char * errstr, const char* treename, NWDSContextHandle *ctx, NWCONN_HANDLE *conn) { + + NWDSCCODE dserr; + int eval = 0; + + eval=_createCtx (errstr,ctx); + if (eval) + return eval; + dserr= NWCXAttachToTreeByName(conn, treename); + if (dserr) { + sprintf(errstr, "NWCXAttachToTreeByName failed with %s\n", strnwerror(dserr)); + eval =99; + goto bailout; + } + + dserr = NWDSAddConnection(*ctx, *conn); + if (dserr) { + sprintf(errstr, "Cannot bind connection to context: %s\n",strnwerror(dserr)); + eval=104; + goto bailout; + } + /* success */ + //sprintf (errstr,"tout va bien\n"); + return 0; + /*failure */ +bailout: + if (conn) NWCCCloseConn(*conn); + dserr = NWDSFreeContext(*ctx); + if (dserr) { + sprintf(errstr, "NWDSFreeContext failed with %s\n", strnwerror(dserr)); + eval=105; + } + return eval; +} + + + +static int bindery_auth (char* errstr, const char* server, const char* user, const char* pwd, + const char * group) +{ + struct ncp_conn *conn; + struct ncp_conn_spec spec; + long err; + char upperpw[256]; + int i; + + if (strlen(pwd) > 255) { + sprintf(errstr, "Specified password is too long"); + return 1; + } + for (i = 0; pwd[i]; i++) { + upperpw[i] = toupper(pwd[i]); + } + upperpw[i] = 0; + spec.uid = ~0; /* ensure that ncp_open will not use permanent connection */ + spec.server[0] = 0; + spec.user[0] = 0; + strcpy(spec.server, server); + + if ((conn = ncp_open(&spec, &err)) == NULL) { + sprintf(errstr, "Cannot connect to server: %s", strnwerror(err)); + return 1; + } +/* useless code ??? + { + NWCONN_NUM num; + err=NWGetConnectionNumber(conn, &num); + } +*/ + /* Bindery authorization */ + err = NWVerifyObjectPassword(conn, user, OT_USER, upperpw); + + if (err) { + sprintf(errstr, "Wrong credentials: %s", strnwerror(err)); + + }else { + if (group[0]) { + err=is_member_of_group_bind(errstr,conn,user,group); + } + } + NWCCCloseConn(conn); + return err; +} + + +/* authenticate to a NDS server */ +static int nds_auth_fn(char* errstr, const char* server, const char* objectname, const char* pwd, + const char * group) +{ + NWDSCCODE dserr; + NWDSContextHandle ctx=NULL; + NWCONN_HANDLE conn=NULL; + int eval = 0; + NWObjectID oid; + + eval=_createCtx (errstr,&ctx); + if (eval) + return eval; + + if (server[0] == '/') { + dserr = ncp_open_mount(server, &conn); + if (dserr) { + sprintf(errstr, "ncp_open_mount failed with %s\n", strnwerror(dserr)); + eval=104; + goto bailout; + } + } else { + struct ncp_conn_spec connsp; + long err; + + memset(&connsp, 0, sizeof(connsp)); + strcpy(connsp.server, server); + conn = ncp_open(&connsp, &err); + if (!conn) { + sprintf(errstr, "ncp_open failed with %s\n",strnwerror(err)); + eval=105; + goto bailout; + } + } + dserr = NWDSAddConnection(ctx, conn); + if (dserr) { + sprintf(errstr, "Cannot bind connection to context: %s\n",strnwerror(dserr)); + eval=106; + goto bailout; + } + + dserr = NWDSVerifyObjectPassword(ctx, NDS_PASSWORD, objectname, pwd); + if (dserr) { + sprintf(errstr, "Verify password failed: %s\n", + strnwerror(dserr)); + eval = 110; + + } else { + if (group[0]) { + dserr=NWDSMapNameToID(ctx, conn,objectname,&oid); + if (dserr) { + sprintf(errstr, "%s when retrieving object ID\n", strnwerror(dserr)); + eval =119; + goto bailout; + } + eval=is_member_of_group_nds(errstr,ctx,conn,oid,group); + } + } +bailout: + + if (conn) NWCCCloseConn(conn); + if (ctx) { + dserr = NWDSFreeContext(ctx); + if (dserr) { + sprintf(errstr, "NWDSFreeContext failed with %s\n", strnwerror(dserr)); + eval=111; + } + } + return eval; +} + + +/* authenticate to a NDS tree and return FQDN of found user */ +static int tree_auth_fn(char* errstr, const char* treename, const char* objectname, const char* contexts,const char* pwd, + const char * group, char * fqdn) +{ + NWDSCCODE dserr; + NWDSContextHandle ctx=NULL; + NWCONN_HANDLE conn=NULL; + int eval = 0; + const char * ctxStart; + const char* ctxEnd; + NWObjectID oid; + + + eval=_createCtxAndConn (errstr,treename, &ctx, &conn); + if (eval) + return eval; + /* scan the search contexts list */ + ctxStart=contexts; + do { + strcpy(fqdn,objectname); + if (ctxStart) { + char ctxBuffer[MAX_DN_CHARS]; + strcat(fqdn,"."); + ctxEnd=strchr(ctxStart,','); + if (ctxEnd) { + memcpy(ctxBuffer,ctxStart,ctxEnd - ctxStart); + ctxBuffer[ctxEnd-ctxStart]=0; + ctxEnd++; + strcat(fqdn,ctxBuffer); + } else + strcat(fqdn,ctxStart); + ctxStart=ctxEnd; + } + eval=109; // don't forget to reset it !!!! + dserr=NWDSMapNameToID(ctx,conn, fqdn,&oid); + if (!dserr) { //found a matching user + dserr = NWDSVerifyObjectPassword(ctx, NDS_PASSWORD, fqdn, pwd); + if (dserr) { //password makes the difference + sprintf(errstr, "Verify password failed: %s\n", strnwerror(dserr)); + eval = 110; + } else { + eval=0; // got him + break; + } + } + } while (ctxStart ); + + if (!dserr) { + if (group[0]) + eval=is_member_of_group_nds(errstr,ctx,conn,oid,group); + } + NWCCCloseConn(conn); + dserr = NWDSFreeContext(ctx); + if (dserr) { + sprintf(errstr, "NWDSFreeContext failed with %s\n", strnwerror(dserr)); + eval=111; + } + return eval; +} + + +static int nds_read_string_fn(char* errstr, const char* treename, const char* objectname, const char* attrname,char ** buffer){ +/* return single or multi string attributes */ + NWDSCCODE dserr; + NWDSContextHandle ctx=NULL; + NWCONN_HANDLE conn=NULL; + int eval = 0; + + if (!treename || !objectname || !attrname ) { + sprintf (errstr," invalid parameters."); + return 98; + } + eval=_createCtxAndConn (errstr,treename, &ctx, &conn); + if (eval) + return eval; + + dserr= NWCXGetMultiStringAttributeValue (ctx,objectname,attrname,buffer); + if (dserr) { + sprintf(errstr, "NWCXGetAttribute failed : %s\n",strnwerror(dserr)); + eval=106; + } + NWCCCloseConn(conn); + dserr = NWDSFreeContext(ctx); + if (dserr) { + sprintf(errstr, "NWDSFreeContext failed with %s\n", strnwerror(dserr)); + eval=107; + } + return eval; +} + +static int nds_read_int_fn(char* errstr, const char* treename, const char* objectname, const char* attrname,char * buffer, int maxlen){ +/* return single numeric NDS (include time and boolean attributes)*/ + + NWDSCCODE dserr; + NWDSContextHandle ctx=NULL; + NWCONN_HANDLE conn=NULL; + int eval = 0; + + if (!treename || !objectname || !attrname ) { + sprintf (errstr," invalid parameters."); + return 98; + } + eval=_createCtxAndConn (errstr,treename, &ctx, &conn); + if (eval) + return eval; + + dserr=NWCXGetAttributeValueAsString (ctx,objectname,attrname,buffer,maxlen); + if (dserr) { + sprintf(errstr, "NWCXGetAttribute failed : %s\n",strnwerror(dserr)); + eval=106; + } + NWCCCloseConn(conn); + dserr = NWDSFreeContext(ctx); + if (dserr) { + sprintf(errstr, "NWDSFreeContext failed with %s\n", strnwerror(dserr)); + eval=107; + } + return eval; +} + + +PHP_FUNCTION (read_nds_string) +{ + int res; /* fcn result code */ + const char *treen, *objectn, *attributen; + char errstr[512]; + char local_buffer [8192]; + char * buffer; // returned by NWCXGetMultiStringAttributeValue + + int argc = ZEND_NUM_ARGS(); + zval **tree, **object, **attribute; + + if (argc != 3 || zend_get_parameters_ex(argc, &tree, &object, &attribute)) { + WRONG_PARAM_COUNT; + } + + sprintf(errstr, "Wrong parameters values"); + if (!tree || !object || !attribute) { + RETURN_STRING(errstr,1); + } + + convert_to_string_ex(tree); + convert_to_string_ex(object); + convert_to_string_ex(attribute); + + treen = (*tree)->value.str.val; + objectn = (*object)->value.str.val; + attributen = (*attribute)->value.str.val; + + if (!treen || !objectn || !attributen) { + RETURN_STRING(errstr,1); + } + + sprintf(errstr, "failure"); + res=nds_read_string_fn(errstr,treen,objectn,attributen,&buffer); + if (res) { + RETURN_STRING(errstr,1); + } + if (strlen(buffer) >=sizeof(local_buffer)) { + buffer[sizeof(local_buffer)-1]=0; + + } + strcpy(local_buffer,buffer); + free(buffer); + RETURN_STRING(local_buffer,1); + +} + +PHP_FUNCTION (read_nds_int) +{ + int res; /* fcn result code */ + const char *treen, *objectn, *attributen; + char errstr[512]; + char buffer [512]; + + int argc = ZEND_NUM_ARGS(); + zval **tree, **object, **attribute; + + if (argc != 3 || zend_get_parameters_ex(argc, &tree, &object, &attribute)) { + WRONG_PARAM_COUNT; + } + + sprintf(errstr, "Wrong parameters values"); + if (!tree || !object || !attribute) { + RETURN_STRING(errstr,1); + } + + convert_to_string_ex(tree); + convert_to_string_ex(object); + convert_to_string_ex(attribute); + + treen = (*tree)->value.str.val; + objectn = (*object)->value.str.val; + attributen = (*attribute)->value.str.val; + + if (!treen || !objectn || !attributen) { + RETURN_STRING(errstr,1); + } + buffer[0]=0; + sprintf(errstr, "failure"); + res=nds_read_int_fn(errstr,treen,objectn,attributen,buffer,sizeof(buffer)); + if (res) { + RETURN_STRING(errstr,1); + } + RETURN_STRING(buffer,1); +} + +PHP_FUNCTION(auth_bindery) +{ + int res; /* fcn result code */ + const char *servern, *usern, *sent_pw, *groupn; + char errstr[512]; + + int argc = ZEND_NUM_ARGS(); + zval **server, **user, **password, ** group; + + if (argc != 4 || zend_get_parameters_ex(argc, &server, &user, &password, &group)) { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(server); + convert_to_string_ex(user); + convert_to_string_ex(password); + convert_to_string_ex(group); + + servern = (*server)->value.str.val; + usern = (*user)->value.str.val; + sent_pw = (*password)->value.str.val; + groupn = (*group)->value.str.val; + + /* do they know the magic word? */ + sprintf(errstr, "failure"); + res = bindery_auth(errstr, servern, usern, sent_pw, groupn ); + if (res) { + RETURN_STRING(errstr,1); + } + RETURN_FALSE; +} + +PHP_FUNCTION(auth_tree) +{ + int res; /* fcn result code */ + const char *servern, *ctxs,*usern, *sent_pw, *groupn; + char errstr[512]; + char fqdn[MAX_DN_CHARS+1]; // to get the FQDN used + char fqdn_ret[MAX_DN_CHARS+5]; // to return to php DN=xxx.yyy.zzz + int argc = ZEND_NUM_ARGS(); + zval **server, **user, **contexts, **password, **group; + + if (argc != 5 || zend_get_parameters_ex(argc, &server, &user, &contexts,&password, &group)) { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(server); + convert_to_string_ex(user); + convert_to_string_ex(contexts); + convert_to_string_ex(password); + convert_to_string_ex(group); + + servern = (*server)->value.str.val; + usern = (*user)->value.str.val; + ctxs = (*contexts)->value.str.val ; + sent_pw = (*password)->value.str.val; + groupn = (*group)->value.str.val; + + /* do they know the magic word? */ + sprintf(errstr, "failure"); + res = tree_auth_fn(errstr, servern, usern, ctxs,sent_pw, groupn,fqdn); + if (res) { + RETURN_STRING(errstr,1); + } + //RETURN_FALSE; + strcpy(fqdn_ret,"DN="); + strcat(fqdn_ret,fqdn); + RETURN_STRING(fqdn_ret,1); +} + +PHP_FUNCTION(auth_nds) +{ + int res; /* fcn result code */ + const char *servern, *usern, *sent_pw, *groupn; + char errstr[512]; + + int argc = ZEND_NUM_ARGS(); + zval **server, **user, **password, **group; + + if (argc != 4 || zend_get_parameters_ex(argc, &server, &user, &password, &group)) { + WRONG_PARAM_COUNT; + } + convert_to_string_ex(server); + convert_to_string_ex(user); + convert_to_string_ex(password); + convert_to_string_ex(group); + + servern = (*server)->value.str.val; + usern = (*user)->value.str.val; + sent_pw = (*password)->value.str.val; + groupn = (*group)->value.str.val; + + /* do they know the magic word? */ + sprintf(errstr, "failure"); + res = nds_auth_fn(errstr, servern, usern, sent_pw, groupn); + if (res) { + RETURN_STRING(errstr,1); + } + RETURN_FALSE; +} + + +PHP_MINIT_FUNCTION(auth_nds) +{ + return SUCCESS; +} + +PHP_MINFO_FUNCTION(auth_nds) +{ + php_info_print_table_start(); + php_info_print_table_row(3, "NDS/Bindery authentication support", "enabled","(c) 2000-2001 by P.Vandrovec & P.Pollet "); + php_info_print_table_row(3, "NDS reading properties support", "enabled","(c) 2001 by P.Pollet"); + php_info_print_table_end(); +} + +function_entry auth_nds_functions[] = { + PHP_FE(auth_bindery, NULL) + PHP_FE(auth_nds, NULL) + PHP_FE(auth_tree, NULL) + PHP_FE(read_nds_string, NULL) + PHP_FE(read_nds_int, NULL) + {NULL, NULL, NULL} +}; + +zend_module_entry auth_nds_module_entry = { +#if ZEND_MODULE_API_NO >= 20010901 + STANDARD_MODULE_HEADER, +#endif + "auth_nds", + auth_nds_functions, + PHP_MINIT(auth_nds), + NULL, + NULL, + NULL, + PHP_MINFO(auth_nds), +#if ZEND_MODULE_API_NO >= 20010901 + NCPFS_VERSION, /* extension version number (string) */ +#endif + STANDARD_MODULE_PROPERTIES +}; + +ZEND_GET_MODULE(auth_nds) + diff --git a/contrib/php/site/config.inc.php3 b/contrib/php/site/config.inc.php3 new file mode 100644 index 0000000..76694bd --- /dev/null +++ b/contrib/php/site/config.inc.php3 @@ -0,0 +1,12 @@ + diff --git a/contrib/php/site/footer.inc.php3 b/contrib/php/site/footer.inc.php3 new file mode 100644 index 0000000..6a6cc99 --- /dev/null +++ b/contrib/php/site/footer.inc.php3 @@ -0,0 +1,8 @@ +
+ + +

+V 1.00 P.Pollet le 24/03/2001. +

+ + diff --git a/contrib/php/site/header.inc.php3 b/contrib/php/site/header.inc.php3 new file mode 100644 index 0000000..157ee3e --- /dev/null +++ b/contrib/php/site/header.inc.php3 @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + +
+ + +

+ +
+ +
+ +

+ + +
+
\ No newline at end of file diff --git a/contrib/php/site/images/bkg.gif b/contrib/php/site/images/bkg.gif new file mode 100644 index 0000000000000000000000000000000000000000..f329cdc1c4ff8a2495cca29cc492bb4edba61c17 GIT binary patch literal 236 zcmV;M1&EC2ui00|EU0008ToQ|o>?GK}z zwAzca-n{z{hT=$;=82~2%C_zc$MQ_q_KoNI&iDQg3<`(DqVb4KDwoWr^9hYgr_`$T zip^@b+>D_M4vWX+viXcotJmzd`wfrF=k&V$j?e4&{J#GW7$|7-HE4KnEDa+w1!a94tIc mTx@)doUFXe-0YmY`z$?8U2T1hovppi-R=Di9xh&80028I>V7}~ literal 0 HcmV?d00001 diff --git a/contrib/php/site/images/linuxlog.gif b/contrib/php/site/images/linuxlog.gif new file mode 100644 index 0000000000000000000000000000000000000000..3645ac7dab94f6f29eb518e1bb8907d9a77ca7ee GIT binary patch literal 5736 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 TwzmX-ZcF$q{6`4{0l@yhwteq0 literal 0 HcmV?d00001 diff --git a/contrib/php/site/images/netware.gif b/contrib/php/site/images/netware.gif new file mode 100644 index 0000000000000000000000000000000000000000..f1dbd5ed78b7ef74bf84c761dec8a455e930870e GIT binary patch literal 9002 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"; +if (session_is_registered("ss_authenticated")) + { + session_unregister ("ss_authenticated"); + unset ($ss_authenticated); + #echo "session auth:".$ss_authenticated."
"; + } +?> + + + + + +Identification + + + + + + + + + Identification"; +include("header.inc.php3"); +?> +
+ +
+"; +#echo "session auth:".$ss_authenticated."
"; +#echo "session tree:".$ss_tree."
"; +?> + + + + + + + + +
>
Veuillez entrer votre login Novell:
 
+ + +
+
 
+ + +         + + +
 
+ +
+
+
+ + + + + diff --git a/contrib/php/site/lib.inc.php3 b/contrib/php/site/lib.inc.php3 new file mode 100644 index 0000000..c8814c5 --- /dev/null +++ b/contrib/php/site/lib.inc.php3 @@ -0,0 +1,140 @@ +"; + $end=""; + + if ($pattern=="") return $string; + $string=strtolower($string); + $pattern=strtolower($pattern); + return(str_replace($pattern,$beg.$pattern.$end,$string)); + } + + +function mysql_die($error = "") + { + global $strError,$strMySQLSaid, $strBack; + echo " $strError

"; + if (empty($error)) + echo $strMySQLSaid.mysql_error(); + else + echo $strMySQLSaid.$error; + echo "
$strBack"; + require ("footer.inc.php3"); + exit; + } + +function auth() + { + global $cfgServer; + #$PHP_AUTH_USER = ""; No need to do this since err 401 allready clears that var + Header("status: 401 Unauthorized"); + Header("HTTP/1.0 401 Unauthorized"); + Header("WWW-authenticate: basic realm=\"phpMySQLAdmin on " . $cfgServer['host'] . "\""); + echo "" . $GLOBALS["strAccessDenied"] . "\n"; + echo "

" . $GLOBALS["strWrongUser"] . "

\n"; + echo "
"; + exit; + } + + + +function count_records ($db,$table) +{ $result = mysql_db_query($db, "select count(*) as num from $table"); + $num = mysql_result($result,0,"num"); + echo $num; +} + + +function show_message($message) + { + ?> +
+ + + + +
+
+
+
+ diff --git a/contrib/php/site/linuxinfos.phtml b/contrib/php/site/linuxinfos.phtml new file mode 100644 index 0000000..3084fbe --- /dev/null +++ b/contrib/php/site/linuxinfos.phtml @@ -0,0 +1,42 @@ + + + + + + +Menu général + + + + + + + + Informations sur ce serveur"; +include("header.inc.php3"); +?> + + + + + + + + diff --git a/contrib/php/site/menu.phtml b/contrib/php/site/menu.phtml new file mode 100644 index 0000000..5baafa8 --- /dev/null +++ b/contrib/php/site/menu.phtml @@ -0,0 +1,44 @@ + + + + + + +Menu général + + + + + + + + Menu général de l'Intranet enseignants"; +include("header.inc.php3"); +?> +"; +#echo "vous êtes ".$ss_username."
"; +#echo "attaché à ".$ss_tree."
"; +?> + + + + + + + diff --git a/contrib/php/site/nds.php b/contrib/php/site/nds.php new file mode 100644 index 0000000..c70dbc0 --- /dev/null +++ b/contrib/php/site/nds.php @@ -0,0 +1,72 @@ +"; + $auth_err = auth_nds("CIPCINSA", $ss_username, strtoupper($pwd),"profs.pc"); + } else if ($ctx == ".GCP.PC") { + #echo "authentification à GCP
"; + $auth_err = auth_nds("GCP", $ss_username, strtoupper($pwd),"profs.gcp.pc"); + } else + $auth_err = "Access denied!"; + + } else { + $ss_username=$uu; + #echo "authentification à ".$HTTP_POST_VARS["svr"]."
"; + $auth_err = auth_bindery($ss_svr, $uu, $pwd, $HTTP_POST_VARS["grp"]); + } + + # write in /var/log/secure + openlog ("php_nds_auth",LOG_ID |LOG_PID ,LOG_AUTHPRIV); + if ($auth_err == "") { + $ss_authenticated=1; + session_register("ss_username"); + session_register("ss_authenticated"); + session_register("ss_tree"); + session_register("ss_server"); + syslog (LOG_NOTICE,"granted access to ".$ss_username." the ".$date. " from ".$machine); + closelog(); + header ("Location: menu.phtml"); + + } + else { + syslog (LOG_WARNING,"access denied for ".$uu." from ".$machine." due to ".$auth_err); + closelog(); + + header ("Location: index.phtml?uid=".$uu."&message=".urlencode($auth_err)); + } + +} +?> + + + + diff --git a/contrib/php/site/nocache.txt b/contrib/php/site/nocache.txt new file mode 100644 index 0000000..084b554 --- /dev/null +++ b/contrib/php/site/nocache.txt @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/contrib/php/site/nwinfos.phtml b/contrib/php/site/nwinfos.phtml new file mode 100644 index 0000000..252d055 --- /dev/null +++ b/contrib/php/site/nwinfos.phtml @@ -0,0 +1,149 @@ + + + + + + +Menu général + + + + + + + + Informations sur votre compte"; +include("header.inc.php3"); +?> + + +"; + +} +function infoNumSur ($tree,$user,$prop,$propalias) { + syslog (LOG_NOTICE,"infoStrSur called on".$tree." for ".$user. " to get ".$prop); + $fn=read_nds_int($tree,$user,$prop); + if (strstr($fn,"(-60")) + $fn=" "; + return ""; + +} +if (session_is_registered("ss_authenticated") && ($ss_authenticated)) { + + openlog ("php_nds_read",LOG_ID |LOG_PID ,LOG_AUTHPRIV); + echo(infoStrSur($ss_tree,$ss_username,"CN","Login:")); + echo(infoStrSur($ss_tree,$ss_username,"Full Name","Nom complet:")); + echo(infoStrSur($ss_tree,$ss_username,"Given Name","Prénoms:")); + echo(infoStrSur($ss_tree,$ss_username,"Surname","Nom de famille:")); + echo(infoStrSur($ss_tree,$ss_username,"Initials","Civilité:")); + echo(infoStrSur($ss_tree,$ss_username,"Title","Titre:")); + echo(infoStrSur($ss_tree,$ss_username,"Description","Description:")); + echo(infoStrSur($ss_tree,$ss_username,"Generational Qualifier","GQ:")); + + echo(infoStrSur($ss_tree,$ss_username,"Group Membership","Adhésion aux groupes:")); + echo(infoStrSur($ss_tree,$ss_username,"Security Equals","Equivalence de sécurité:")); + echo(infoStrSur($ss_tree,$ss_username,"ACL","Droits:")); + + echo(infoStrSur($ss_tree,$ss_username,"EMail Address","Adresse Email I:")); + echo(infoStrSur($ss_tree,$ss_username,"Internet EMail Address","Adresse EMail II:")); + echo(infoStrSur($ss_tree,$ss_username,"Home Directory","Repertoire home:")); + echo(infoStrSur($ss_tree,$ss_username,"Message Server","Serveur préféré:")); + echo(infoStrSur($ss_tree,$ss_username,"Profile","Profil:")); + echo(infoStrSur($ss_tree,$ss_username,"Language","Langue:")); + + echo(infoNumSur($ss_tree,$ss_username,"Login Time","Date de login:")); + echo(infoNumSur($ss_tree,$ss_username,"Last Login Time","Dernier login:")); + + echo(infoNumSur($ss_tree,$ss_username,"Login Disabled","Compte désactivé:")); + echo(infoNumSur($ss_tree,$ss_username,"Login Expiration Time","Votre compte expire le:")); + echo(infoNumSur($ss_tree,$ss_username,"Login Grace Limit","Nombre maximum d'essais:")); + echo(infoNumSur($ss_tree,$ss_username,"Login Grace Remaining","Il vous reste:")); + echo(infoNumSur($ss_tree,$ss_username,"Login Intruder Attempts","Essais d'intrusions:")); + echo(infoNumSur($ss_tree,$ss_username,"Login Intruder Reset Time","Remise à zéro après:")); + echo(infoNumSur($ss_tree,$ss_username,"Login Maximum Simultaneous","Nombre de connexions permises:")); + + + echo(infoNumSur($ss_tree,$ss_username,"Password Required","Mot de passe obligatoire:")); + echo(infoNumSur($ss_tree,$ss_username,"Password Unique Required","Mots de passe uniques obligatoire:")); + echo(infoNumSur($ss_tree,$ss_username,"Password Allow Change","Chgmt de mot de passe permis:")); + echo(infoNumSur($ss_tree,$ss_username,"Password Minimum Length","Longueur mimimale du mot de passe:")); + echo(infoNumSur($ss_tree,$ss_username,"Password Expiration Time","Date d'expiration du mot de passe:")); + echo(infoNumSur($ss_tree,$ss_username,"Password Expiration Interval","Votre mot de passe expire tous les:")); + + + + echo(infoStrSur($ss_tree,$ss_username,"Telephone Number","N° de téléphone:")); + + echo(infoStrSur($ss_tree,$ss_username,"Facsimile Telephone Number","N° de FAX")); + + + echo(infoStrSur($ss_tree,$ss_username,"SA","Rue:")); + echo(infoStrSur($ss_tree,$ss_username,"Physical Delivery Office Name","Ville:")); + echo(infoStrSur($ss_tree,$ss_username,"Postal Office Box","Boite postale:")); + echo(infoStrSur($ss_tree,$ss_username,"Postal Code","Code postal:")); + echo(infoStrSur($ss_tree,$ss_username,"S","Etat/Province:")); + echo(infoStrSur($ss_tree,$ss_username,"Postal Address","Infos sur étiquettes:")); + + + echo(infoNumSur($ss_tree,$ss_username,"LINUX:UID","ID Linux:")); + echo(infoNumSur($ss_tree,$ss_username,"LINUX:GID","Groupe Linux:")); + #echo(infoNumSur($ss_tree,$ss_username,"LINUX:Primary GroupID","")); + #echo(infoStrSur($ss_tree,$ss_username,"LINUX:Primary GroupName","")); + echo(infoStrSur($ss_tree,$ss_username,"LINUX:Login Shell","Shell Linux:")); + echo(infoStrSur($ss_tree,$ss_username,"LINUX:Home Directory","Home Linux:")); + echo(infoStrSur($ss_tree,$ss_username,"LINUX:Comments","Gecos Linux:")); + + echo(infoNumSur($ss_tree,$ss_username,"UNIX:UID","ID Unix:")); + echo(infoNumSur($ss_tree,$ss_username,"UNIX:GID","Groupe Unix:")); + #echo(infoStrSur($ss_tree,$ss_username,"UNIX:Primary GroupID","")); + #echo(infoStrSur($ss_tree,$ss_username,"UNIX:Primary GroupName","")); + echo(infoStrSur($ss_tree,$ss_username,"UNIX:Login Shell","Shell Unix:")); + echo(infoStrSur($ss_tree,$ss_username,"UNIX:Home Directory","Home Unix:")); + echo(infoStrSur($ss_tree,$ss_username,"UNIX:Comments","Gecos Unix:")); + + echo(infoStrSur($ss_tree,$ss_username,"OU","Organisation:")); + echo(infoStrSur($ss_tree,$ss_username,"L","Locations:")); + + echo(infoStrSur($ss_tree,$ss_username,"Network Address","Loggué depuis:")); + closelog(); + +} +?> + +
".$propalias."".$fn."
".$propalias."".$fn."
+ + + + + + + diff --git a/contrib/scripts/config.ipx b/contrib/scripts/config.ipx new file mode 100644 index 0000000..144e27d --- /dev/null +++ b/contrib/scripts/config.ipx @@ -0,0 +1,19 @@ +#!/bin/sh +# +# @sysconfdir@/config.ipx Config file for IPX networking +# +# Author: Roumen Petrov (RYP) , sep 1998. + +IPX_DEVICE=eth0 +IPX_FRAME0=802.3 +IPX_FRAME1=802.2 + +#IPX_INTERNAL_NET=yes +IPX_INTERNAL_NET=no + +#IPX_NETNUM=333 +IPX_NETNUM=0 + +IPX_NODE=1 + +IPX_CONFIGURED=yes diff --git a/contrib/scripts/rc.ipxnet.in b/contrib/scripts/rc.ipxnet.in new file mode 100644 index 0000000..d47223a --- /dev/null +++ b/contrib/scripts/rc.ipxnet.in @@ -0,0 +1,68 @@ +#!/bin/sh +# +# /etc/rc.d/rc.ipxnet Bring up/down IPX networking +# +# Author: Roumen Petrov (RYP) , sep 1998. +# + +prefix=@prefix@ +exec_prefix=@exec_prefix@ + +sysconfdir=@sysconfdir@ +bindir=@bindir@ + +cfgfile=${sysconfdir}/config.ipx + +if [ -x ${cfgfile} ] +then + . ${cfgfile} +else + echo "IPX configuration not found!" + exit 1 +fi + + + +case "$1" in + start) + echo "Insert IPX modules..." + /sbin/insmod -k ipx; + /sbin/insmod -k ncpfs; + echo "Starting IPX network..." + if [ ${IPX_CONFIGURED} = "yes" ]; then + if [ ${IPX_INTERNAL_NET} = "yes" ]; then + ${bindir}/ipx_internal_net add ${IPX_NETNUM} ${IPX_NODE} + else + ${bindir}/ipx_interface add -p ${IPX_DEVICE} ${IPX_FRAME0} ${IPX_NETNUM} + ${bindir}/ipx_interface add ${IPX_DEVICE} ${IPX_FRAME1} ${IPX_NETNUM} + fi + fi + ${bindir}/ipx_configure --auto_primary=on --auto_interface=on + ;; + stop) + echo "umount all ncp file systems..." + umount -v -a -tncpfs + if [ $? -ne 0 ] ; then + exit 1; + fi + ncpmod=`cat /proc/modules | grep -w ncpfs | sed -e 's/ .*//'` + if [ ! -z $ncpmod ]; then + echo "Removing ncpfs module..." + /sbin/rmmod ncpfs; + if [ $? -ne 0 ] ; then + exit 1; + fi + fi + echo "Stoping IPX network..." + ${bindir}/ipx_configure --auto_primary=off --auto_interface=off + ${bindir}/ipx_interface delall + ;; + restart) + $0 stop + $0 start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + diff --git a/contrib/suseinit/LIESMICH b/contrib/suseinit/LIESMICH new file mode 100644 index 0000000..3f22e12 --- /dev/null +++ b/contrib/suseinit/LIESMICH @@ -0,0 +1 @@ +Der Inhalt von /etc/rc.config.app muss /etc/rc.config hinzugefuegt werden. diff --git a/contrib/suseinit/README b/contrib/suseinit/README new file mode 100644 index 0000000..7cd6263 --- /dev/null +++ b/contrib/suseinit/README @@ -0,0 +1 @@ +Add /etc/rc.config.app to /etc/rc.config. diff --git a/contrib/suseinit/etc/rc.config.app b/contrib/suseinit/etc/rc.config.app new file mode 100644 index 0000000..95b6286 --- /dev/null +++ b/contrib/suseinit/etc/rc.config.app @@ -0,0 +1,4 @@ +# +# start the IPX protocol? ("yes" or "no") +# +START_IPX="yes" diff --git a/contrib/suseinit/sbin/init.d/ipx b/contrib/suseinit/sbin/init.d/ipx new file mode 100755 index 0000000..66abe77 --- /dev/null +++ b/contrib/suseinit/sbin/init.d/ipx @@ -0,0 +1,52 @@ +#! /bin/sh +# Copyright (c) 1996 S.u.S.E. GmbH Fuerth, Germany. All rights reserved. +# +# Author: Florian La Roche , 1996 +# Werner Fink , 1996 +# Wolfram Pienkoss , 1996-2000 +# +# /sbin/init.d/ipx +# + +. /etc/rc.config + +# Determine the base and follow a runlevel link name. +base=${0##*/} +link=${base#*[SK][0-9][0-9]} + +# Force execution if not called by a runlevel directory. +test $link = $base && START_IPX=yes +test "$START_IPX" = yes || exit 0 + +# The echo return value for success (defined in /etc/rc.config). +return=$rc_done + +case "$1" in + start) + echo -n "Starting the IPX protocol." + /usr/bin/ipx_configure --auto_interface=on --auto_primary=on +# /usr/bin/ipx_internal_net add 41426001 1 +# /usr/bin/ipx_interface add eth0 EtherII 0x64284142 +# /usr/sbin/ipxd -l /var/log/ipxd.log + echo -e "$return" + ;; + stop) + echo -n "Shutting down the IPX protocol." + umount -a -t ncpfs +# killproc -TERM /usr/sbin/ipxd + /usr/bin/ipx_configure --auto_interface=off --auto_primary=off + /usr/bin/ipx_interface delall + echo -e "$return" + ;; + restart) + ## If first returns OK call the second, if first or + ## second command fails, set echo return value. + $0 stop && $0 start || return=$rc_failed + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +test "$return" = "$rc_done" || exit 1 +exit 0 diff --git a/contrib/suseinit/sbin/init.d/rc2.d/K25ipx b/contrib/suseinit/sbin/init.d/rc2.d/K25ipx new file mode 120000 index 0000000..03e2df2 --- /dev/null +++ b/contrib/suseinit/sbin/init.d/rc2.d/K25ipx @@ -0,0 +1 @@ +../ipx \ No newline at end of file diff --git a/contrib/suseinit/sbin/init.d/rc2.d/S25ipx b/contrib/suseinit/sbin/init.d/rc2.d/S25ipx new file mode 120000 index 0000000..03e2df2 --- /dev/null +++ b/contrib/suseinit/sbin/init.d/rc2.d/S25ipx @@ -0,0 +1 @@ +../ipx \ No newline at end of file diff --git a/contrib/suseinit/sbin/init.d/rc3.d/K25ipx b/contrib/suseinit/sbin/init.d/rc3.d/K25ipx new file mode 120000 index 0000000..03e2df2 --- /dev/null +++ b/contrib/suseinit/sbin/init.d/rc3.d/K25ipx @@ -0,0 +1 @@ +../ipx \ No newline at end of file diff --git a/contrib/suseinit/sbin/init.d/rc3.d/S25ipx b/contrib/suseinit/sbin/init.d/rc3.d/S25ipx new file mode 120000 index 0000000..03e2df2 --- /dev/null +++ b/contrib/suseinit/sbin/init.d/rc3.d/S25ipx @@ -0,0 +1 @@ +../ipx \ No newline at end of file diff --git a/contrib/swig/Makefile.PL b/contrib/swig/Makefile.PL new file mode 100644 index 0000000..4f19aca --- /dev/null +++ b/contrib/swig/Makefile.PL @@ -0,0 +1,23 @@ +use ExtUtils::MakeMaker; + +sub MY::postamble { + return <<'EOF' +ncpfs.int: ncpfs.i + set -e; sed -e 's/\\$$/PlAcElFhErE \\/' < ncpfs.i | cpp -E -C -P | sed -e "`echo -e 's/PlAcElFhErE /\\\\\\n/g'`" > ncpfs.int + +ncpfs_wrap.c: ncpfs.int + swig -perl5 -v -xslike -shadow -I../../include ncpfs.int + #swig -perl5 -v -shadow -I../../include ncpfs.int + +EOF +} + +WriteMakefile( + NAME => 'ncpfs', + LIBS => ['-lncp'], + INC => '-I../../include', + OBJECT => 'ncpfs_wrap.o', + DEFINE => '-W -Wall -Wno-unused -D_GNU_SOURCE', + clean => { FILES => 'ncpfs.int ncpfs.pm ncpfs_wrap.c' } +); + diff --git a/contrib/swig/README b/contrib/swig/README new file mode 100644 index 0000000..671d259 --- /dev/null +++ b/contrib/swig/README @@ -0,0 +1,25 @@ +This is beta code. You need special swig-1.3.10 +version, available on request from vandrove@vc.cvut.cz, +as I have to do couple of changes in swig to get it +to work as I expected. + +If you are installing this code, on Debian system +just run 'make'. On other systems run 'perl Makefile.PL', +then 'touch ncpfs.int ncpfs.pm ncpfs_wrap.c' (as you +have no swig to regenerate them), and then 'make', +'make install', and so on... + +I put generated files also to 'generated' subdirectory, +as 'make clean' removes them... + +And DO NOT RUN test.pl UNLESS YOU REALLY KNOW WHAT YOU DO! +It requires server VMWARE-NW6 mounted somewhere, and +then it creates/deletes files, directories, bindery +objects, NDS objects, NDS partitions and containers and +so on on that server to verify that all API functions +work correctly. It is VERY dangerous example... + Best regards, + Petr Vandrovec + vandrove@vc.cvut.cz + + diff --git a/contrib/swig/ncpfs.i b/contrib/swig/ncpfs.i new file mode 100644 index 0000000..103c2f4 --- /dev/null +++ b/contrib/swig/ncpfs.i @@ -0,0 +1,3175 @@ +#define _include #include +#define _define #define +#define _if #if +#define _else #else +#define _endif #endif + +%module ncpfs + +%pragma(swig) nodefault + +%clear SWIGTYPE []; + +%runtime %{ +typedef char fixedCharArray; +typedef u_int8_t fixedArray; +typedef u_int32_t fixedU32Array; +typedef char byteLenPrefixCharArray; +typedef char size_tLenPrefixCharArray; +typedef char uint_fast16_tLenPrefixCharArray; +typedef u_int8_t NWCCTranAddr_buffer; + +_define SWIG_BUILD + +_include +_include +%} + +_define inline +_define __attribute__(x) + +%rename(Buf_T) tagBuf_T; +%rename(NWDSContextHandle) __NWDSContextHandle; +/* %rename(NWCONN_HANDLE) ncp_conn; */ +%rename(Asn1ID_T) tagAsn1ID_T; + +/* How to get these without including couple of headers ?! */ +typedef unsigned char u_int8_t; +typedef unsigned short u_int16_t; +typedef unsigned int u_int32_t; +typedef u_int32_t uid_t; +typedef unsigned long __off_t; +typedef unsigned int size_t; +typedef int int32_t; +typedef double ncp_off64_t; +typedef unsigned short uint_fast16_t; +typedef unsigned int uint_fast32_t; +typedef unsigned short uint_least16_t; +typedef unsigned int uint_least32_t; +typedef unsigned int time_t; + +%runtime %{ +_define getBasicSV(sv) _getBasicSV(aTHX_ sv) +static SV* _getBasicSV(pTHX_ SV *sv) { + MAGIC *mg; + + if (!sv_isobject(sv)) { + return NULL; + } + sv = SvRV(sv); + if (SvTYPE(sv) != SVt_PVHV) { + return sv; + } + if (!SvMAGICAL(sv)) { + return sv; + } + mg = mg_find(sv,'P'); + if (!mg) { + return sv; + } + sv = mg->mg_obj; + if (!sv_isobject(sv)) { + return NULL; + } + return SvRV(sv); +} + +_define checkSVType(sv,_t,tc) _checkSVType(aTHX_ sv, _t, tc) +static inline int _checkSVType(pTHX_ SV *sv, swig_type_info *_t, swig_type_info **tc) { + HV *stash; + + if (!_t || !sv) { + goto maybe; + } + if (SvOBJECT(sv)) { + stash = SvSTASH(sv); + } else if (SvROK(sv)) { + SV *t = SvRV(sv); + if (!SvOBJECT(t)) { + goto nope; + } + stash = SvSTASH(t); + } else { +nope:; + if (tc) { + *tc = NULL; + } + return 0; + } + _t = SWIG_TypeCheck(HvNAME(stash), _t); + if (tc) { + *tc = _t; + } + return _t != NULL; + +maybe:; + if (tc) { + *tc = NULL; + } + return -1; +} + +_define MyConvertPtr(sv,ptr,len,t) _MyConvertPtr(aTHX_ sv, ptr, len, t) +static SV* _MyConvertPtr(pTHX_ SV *sv, void **ptr, STRLEN *len, swig_type_info *_t) { + swig_type_info *tc = NULL; + void *tmp; + size_t goffset; + STRLEN glen; + int glen_valid; + STRLEN cl; + SV *mainsv; + + /* If magical, apply more magic */ + SvGETMAGIC(sv); + if (checkSVType(sv, _t, &tc) == 0) { + return NULL; + } + mainsv = getBasicSV(sv); + if (!mainsv) { + if (!SvOK(sv)) { /* Check for undef */ + *ptr = NULL; + return sv; + } + return NULL; /* All rest... */ + } + sv = mainsv; + goffset = 0; + glen = 0; + glen_valid = 0; + do { + size_t go; + + SvGETMAGIC(sv); + if (SvTYPE(sv) != SVt_PVLV || LvTYPE(sv) != 'n') { /* Should we support also other LVALUEs? */ + break; + } + go = LvTARGOFF(sv); + cl = LvTARGLEN(sv); + if (glen_valid) { + if (goffset + glen > cl) { + return NULL; + } + } else { + glen = cl; + glen_valid = 1; + } + goffset += go; + sv = LvTARG(sv); + } while (1); + if (SvPOKp(sv)) { + tmp = SvPV(sv, cl); + } else { + return NULL; + } + if (glen_valid) { + if (goffset + glen > cl) { + return NULL; + } + } else { + glen = cl; + } + *ptr = (u_int8_t*)(tc ? SWIG_TypeCast(tc, tmp) : tmp) + goffset; + *len = glen; + return mainsv; +} + +_define SwigConvertPtr(sv,ptr,t) _SwigConvertPtr(aTHX_ sv, ptr, t) +static SV* _SwigConvertPtr(pTHX_ SV *sv, void **ptr, swig_type_info *_t) { + swig_type_info *tc = NULL; + void *tmp; + SV *mainsv; + + /* If magical, apply more magic */ + SvGETMAGIC(sv); + if (checkSVType(sv, _t, &tc) == 0) { + return NULL; + } + mainsv = getBasicSV(sv); + if (!mainsv) { + if (!SvOK(sv)) { /* Check for undef */ + *ptr = NULL; + return sv; + } + return NULL; /* All rest... */ + } + if (SvIOKp(mainsv)) { + tmp = (void*)SvIV(mainsv); + } else { + return NULL; + } + *ptr = (u_int8_t*)(tc ? SWIG_TypeCast(tc, tmp) : tmp); + return mainsv; +} + +_define getReferenceToIV(sv,ptr) _getReferenceToIV(aTHX_ sv, ptr) +static SV* _getReferenceToIV(pTHX_ SV *sv, IV *ptr) { + /* If magical, apply more magic */ + SvGETMAGIC(sv); + if (!SvROK(sv)) { + return NULL; + } + sv = SvRV(sv); + *ptr = SvIV(sv); + return sv; +} + +_define blessit(sv,type) _blessit(aTHX_ sv, type) +static inline void _blessit(pTHX_ SV *sv, const char* type) { + sv_bless(sv, gv_stashpv(type, TRUE)); +} + +_define createTiedHash(rv,type) _createTiedHash(aTHX_ rv, type) +static SV *_createTiedHash(pTHX_ SV *rv, const swig_type_info *type) { + HV* hash; + HV* stash; + SV* tie; + SV* result; + const char* name; + + name = type->clientdata?(const char*)type->clientdata:type->name; + hash = newHV(); + tie = sv_2mortal(rv); + stash = gv_stashpv(name, TRUE); + sv_bless(tie, stash); + hv_magic(hash, (GV*)tie, 'P'); + result = sv_2mortal(newRV_noinc((SV*)hash)); +_if 1 + sv_bless(result, stash); +_else + { + dSP; + + ENTER; + SAVETMPS; + PUSHMARK(SP); + XPUSHs(sv_2mortal(newSVpv(name, 0))); + XPUSHs(result); + PUTBACK; + call_method("TIEHASH", G_ARRAY | G_DISCARD | G_EVAL | G_KEEPERR); + FREETMPS; + LEAVE; + } +_endif + return result; +} + +_define createTiedArray(rv,type) _createTiedArray(aTHX_ rv, type) +static SV *_createTiedArray(pTHX_ SV *rv, const char *type) { + AV* array; + HV* stash; + SV* tie; + SV* result; + + array = newAV(); + tie = sv_2mortal(rv); + stash = gv_stashpv(type, TRUE); + sv_bless(tie, stash); + sv_magic((SV*)array, tie, 'P', NULL, 0); + result = sv_2mortal(newRV_noinc((SV*)array)); +_if 1 +// sv_bless(result, stash); +_else + { + dSP; + + ENTER; + SAVETMPS; + PUSHMARK(SP); + XPUSHs(sv_2mortal(newSVpv(type, 0))); + XPUSHs(result); + PUTBACK; + call_method("TIEARRAY", G_ARRAY | G_DISCARD | G_EVAL | G_KEEPERR); + FREETMPS; + LEAVE; + } +_endif + AvREAL_off(array); + SvREADONLY_on((SV*)array); + return result; +} + +_define createTiedHashReference(pv,type) _createTiedHashReference(aTHX_ pv, type) +static inline SV* _createTiedHashReference(pTHX_ SV* pv, const swig_type_info* type) { + return createTiedHash(newRV_noinc(pv), type); +} + +_define createTiedArrayReference(pv,type) _createTiedArrayReference(aTHX_ pv, type) +static inline SV* _createTiedArrayReference(pTHX_ SV* pv, const char* type) { + return createTiedArray(newRV_noinc(pv), type); +} + +_define createLV(pv,off,len) _createLV(aTHX_ pv, off, len) +static SV* _createLV(pTHX_ SV *pv, size_t off, size_t len) { + SV *sv = newSV(0); + SvUPGRADE(sv, SVt_PVLV); + LvTYPE(sv) = 'n'; + LvTARG(sv) = SvREFCNT_inc(pv); + LvTARGOFF(sv) = off; + LvTARGLEN(sv) = len; + return sv; +} + +_define createMagicChild(pv,off,len,type) _createMagicChild(aTHX_ pv, off, len, type) +static SV* _createMagicChild(pTHX_ SV *pv, size_t off, size_t len, const swig_type_info* type) { + SV *sv = createLV(pv, off, len); + return createTiedHashReference(sv, type); +} + +_define setupAVLen(sv,itemlen) _setupAVLen(aTHX_ sv, itemlen) +static inline void _setupAVLen(pTHX_ SV* sv, size_t itemlen) { + sv_magic(sv, NULL, '~', NULL, itemlen); +} + +_define setupAVTypeLen(sv,type,itemlen) _setupAVTypeLen(aTHX_ sv, type, itemlen) +static inline void _setupAVTypeLen(pTHX_ SV* sv, swig_type_info* type, size_t itemlen) { + SV* svp = newSVuv((UV)type); + sv_magic(sv, svp, '~', NULL, itemlen); + SvREFCNT_dec(svp); +} + +_define getAVLen(sv) _getAVLen(aTHX_ sv) +static inline I32 _getAVLen(pTHX_ SV* sv) { + MAGIC* mg = mg_find(sv, '~'); + return mg ? mg->mg_len : 0; +} + +_define getAVTypeLen(sv,name) _getAVTypeLen(aTHX_ sv, name) +static inline I32 _getAVTypeLen(pTHX_ SV* sv, swig_type_info** name) { + MAGIC* mg = mg_find(sv, '~'); + if (mg) { + *name = (swig_type_info*)SvUV(mg->mg_obj); + return mg->mg_len; + } + *name = NULL; + return 0; +} + +#define emit_buildArrayReferenceFromXArray(name,type,op) \ +_define buildArrayReferenceFrom##name##Array(items,array) _buildArrayReferenceFrom##name##Array(aTHX_ items, array) \ +static SV* _buildArrayReferenceFrom##name##Array(pTHX_ size_t items, const type * array) { \ + AV* av; \ + \ + av = newAV(); \ + while (items > 0) { \ + av_push(av, op(*array)); \ + array++; \ + items--; \ + } \ + return sv_2mortal(newRV_noinc((SV*)av)); \ +} + +emit_buildArrayReferenceFromXArray(Byte, u_int8_t, newSViv); +emit_buildArrayReferenceFromXArray(DWord, u_int32_t, newSViv); +emit_buildArrayReferenceFromXArray(NWConn, NWCONN_NUM, newSVuv); + +#define _emit_av_2xarray(name,type,op) \ +static const char * _av_2##name##Array(pTHX_ AV *av, size_t array_size, type ** result) { \ + type * r; \ + size_t p; \ + \ + if (array_size == 0) { \ + *result = NULL; \ + return NULL; \ + } \ + New((I32) #name, r, array_size, type); \ + *result = r; \ + for (p = 0; p < array_size; p++) { \ + SV * sv; \ + SV ** v = av_fetch(av, p, 0); \ + \ + if (!v) { \ + Safefree(*result); \ + return "Cannot fetch element from array."; \ + } \ + sv = *v; \ + op; \ + r++; \ + } \ + return NULL; \ +} + +#define emit_getXArray(name,type,op) \ +_emit_av_2xarray(name,type,op) \ +_define get##name##Array(sv,as,res,maxl) _get##name##Array(aTHX_ sv,as,res,maxl) \ +static const char * _get##name##Array(pTHX_ SV *sv, size_t *array_size, type ** result, size_t maxlen) { \ + AV* av; \ + size_t asize; \ + /* If magical, apply more magic */ \ + SvGETMAGIC(sv); \ + if (!SvROK(sv)) { /* Check for undef */ \ + type * r; \ + if (!SvOK(sv)) { \ + *result = NULL; \ + *array_size = 0; \ + return NULL; \ + } \ + New((I32) #name, r, 1, type); \ + *result = r; \ + op; \ + *array_size = 1; \ + return NULL; \ + } \ + sv = SvRV(sv); \ + SvGETMAGIC(sv); \ + if (SvTYPE(sv) != SVt_PVAV) { \ + return "Expected reference to array."; \ + } \ + av = (AV*)sv; \ + \ + asize = av_len(av) + 1; \ + if (asize >= maxlen) { \ + return "Array too large."; \ + } \ + *array_size = asize; \ + return _av_2##name##Array(aTHX_ av, asize, result); \ +} \ + \ +static inline void free##name##Array(type * buf) { \ + Safefree(buf); \ +} + +emit_getXArray(Byte, u_int8_t, *r = SvUV(sv)) +emit_getXArray(UnsignedInt, unsigned int, *r = SvUV(sv)) +emit_getXArray(NWConn, NWCONN_NUM, *r = SvUV(sv)) + +static SV * fetchItem(pTHX_ SV * sv, void * dst, swig_type_info * tp, size_t want_len) { + void * buf; + STRLEN len; + + if (!MyConvertPtr(sv, &buf, &len, tp)) { + return sv_2mortal(Perl_newSVpvf(aTHX_ "Unexpected element type. Expected %s.", tp->name)); + } + if (!buf) { + return sv_2mortal(newSVpv("Undefined element found in array.", 0)); + } + if (len != want_len) { + return sv_2mortal(Perl_newSVpvf(aTHX_ "Element with length %u was found in array. Expected length of %s is %u.", len, tp->name, want_len)); + } + memcpy(dst, buf, want_len); + return NULL; +} + +static const char * _av_2StructArray(pTHX_ AV *av, size_t array_size, void ** result, swig_type_info * tp, size_t want_len) { + unsigned char * r; + size_t p; + + if (array_size == 0) { + *result = NULL; + return NULL; + } + New((I32) tp->name, r, array_size * want_len, unsigned char); + *result = r; + for (p = 0; p < array_size; p++) { + SV * sv; + SV ** v = av_fetch(av, p, 0); + if (!v) { + Safefree(*result); + return "Cannot fetch element from array."; + } + sv = *v; + sv = fetchItem(aTHX_ sv, r, tp, want_len); + if (sv) { + Safefree(*result); + return SvPV_nolen(sv); + } + r += want_len; + } + return NULL; +} + +static const char * _getStructArray(pTHX_ SV *sv, size_t *array_size, void ** result, size_t maxlen, swig_type_info * tp, size_t want_len) { + AV* av; + size_t asize; + /* If magical, apply more magic */ + SvGETMAGIC(sv); + if (!SvROK(sv)) { /* Check for undef */ + unsigned char * r; + if (!SvOK(sv)) { + *result = NULL; + *array_size = 0; + return NULL; + } + New((I32) tp->name, r, want_len, unsigned char); + *result = r; + sv = fetchItem(aTHX_ sv, r, tp, want_len); + if (sv) { + Safefree(*result); + return SvPV_nolen(sv); + } + *array_size = 1; + return NULL; + } + sv = SvRV(sv); + SvGETMAGIC(sv); + if (SvTYPE(sv) != SVt_PVAV) { + return "Expected reference to array."; + } + av = (AV*)sv; + + asize = av_len(av) + 1; + if (asize >= maxlen) { + return "Array too large."; + } + *array_size = asize; + return _av_2StructArray(aTHX_ av, asize, result, tp, want_len); +} + +#define emit_getXStructArray(name, type) \ +static inline const char * _get##name##StructArray(pTHX_ SV * sv, size_t * sz, type ** res, size_t maxl, swig_type_info * tp, size_t want_len) { \ + return _getStructArray(aTHX_ sv, sz, (void**)res, maxl, tp, want_len); \ +} \ + \ +static inline void free##name##StructArray(type * buf) { \ + Safefree(buf); \ +} + +emit_getXStructArray(NCPTrustee, struct ncp_trustee_struct) +#define getNCPTrusteeStructArray(sv,sz,res,maxl,type) _getNCPTrusteeStructArray(aTHX_ sv, sz, res, maxl, type##_descriptor, sizeof(type##_basetype)) +%} + +%wrapper %{ +#define decltied \ + dXSARGS; \ + STRLEN len; \ + I32 avlen; \ + SV* sv; \ + unsigned char* v + +#define gettiedinfo() \ + sv = MyConvertPtr(ST(0), (void**)&v, &len, NULL); \ + if (!sv) { \ + Perl_croak(aTHX_ "Type error in argument 1 of " __FUNCTION__); \ + XSRETURN(1); \ + } \ + avlen = getAVLen(sv); \ + if (avlen <= 0) { \ + Perl_croak(aTHX_ "Type error in argument 1 of " __FUNCTION__); \ + XSRETURN(1); \ + } \ + len = len / avlen; + +#define gettiedPVinfo() \ + sv = MyConvertPtr(ST(0), (void**)&v, &len, NULL); \ + if (!sv) { \ + Perl_croak(aTHX_ "Type error in argument 1 of " __FUNCTION__); \ + XSRETURN(1); \ + } \ + avlen = getAVTypeLen(sv, &name); \ + if (avlen <= 0) { \ + Perl_croak(aTHX_ "Type error in argument 1 of " __FUNCTION__); \ + XSRETURN(1); \ + } \ + len = len / avlen; + + +XS(_wrap_uvar_fetchsize) { + decltied; + + if (items != 1) { + Perl_croak(aTHX_ "Usage: " __FUNCTION__ "(uv);"); + XSRETURN(1); + } + gettiedinfo(); + ST(0) = sv_2mortal(newSVuv(len)); + XSRETURN(1); +} + +XS(_wrap_uvar_storesize) { + decltied; + + if (items != 2) { + Perl_croak(aTHX_ "Usage: " __FUNCTION__ "(uv, newsize);"); + XSRETURN(1); + } + gettiedinfo(); + if (SvUV(ST(1)) != len) { + Perl_croak(aTHX_ "Cannot change size of fixed array"); + XSRETURN(1); + } + XSRETURN(0); +} + +XS(_wrap_uvar_exists) { + decltied; + UV idx; + + if (items != 2) { + Perl_croak(aTHX_ "Usage: " __FUNCTION__ "(uv, index);"); + XSRETURN(1); + } + gettiedinfo(); + idx = SvUV(ST(1)); + ST(0) = sv_2mortal(newSViv(idx < 0 || idx >= len)); + XSRETURN(1); +} + +XS(_wrap_uvar_fetch) { + decltied; + UV idx; + + if (items != 2) { + Perl_croak(aTHX_ "Usage: " __FUNCTION__ "(uv, index);"); + XSRETURN(1); + } + gettiedinfo(); + idx = SvUV(ST(1)); + if (idx < 0 || idx >= len) { + ST(0) = &PL_sv_undef; + } else { + unsigned char* b = v + idx * avlen; + UV uv; + + switch (avlen) { + case 1: uv = *b; break; + case 2: uv = *(u_int16_t*)b; break; + case 4: uv = *(u_int32_t*)b; break; + case 8: uv = *(u_int64_t*)b; break; + default: + Perl_croak(aTHX_ "Element size %u is not supported", avlen); + uv = 0; + } + ST(0) = sv_2mortal(newSVuv(uv)); + } + XSRETURN(1); +} + +XS(_wrap_pvar_fetch) { + decltied; + swig_type_info* name; + UV idx; + + if (items != 2) { + Perl_croak(aTHX_ "Usage: " __FUNCTION__ "(uv, index);"); + XSRETURN(1); + } + gettiedPVinfo(); + idx = SvUV(ST(1)); + if (idx < 0 || idx >= len) { + ST(0) = &PL_sv_undef; + } else { + SV* s; + + s = createLV(sv, idx * avlen, avlen); + ST(0) = createTiedHashReference(s, name); + } + XSRETURN(1); +} + +XS(_wrap_uvar_store) { + decltied; + UV idx; + UV uv; + unsigned char* b; + + if (items != 3) { + Perl_croak(aTHX_ "Usage: " __FUNCTION__ "(uv, index, value);"); + XSRETURN(1); + } + gettiedinfo(); + idx = SvUV(ST(1)); + if (idx < 0 || idx >= len) { + Perl_croak(aTHX_ "Index %u out of bounds <0...%u>", idx, len-1); + XSRETURN(1); + } + b = v + idx * avlen; + uv = SvUV(ST(2)); + switch (avlen) { + case 1: *b = uv; break; + case 2: *(u_int16_t*)b = uv; break; + case 4: *(u_int32_t*)b = uv; break; + case 8: *(u_int64_t*)b = uv; break; + default: + Perl_croak(aTHX_ "Element size %u is not supported", avlen); + } + XSRETURN(0); +} + +XS(_wrap_pvar_store) { + decltied; + UV idx; + swig_type_info* name; + unsigned char* b; + STRLEN vlen; + SV* sv_arg; + unsigned char* data; + + if (items != 3) { + Perl_croak(aTHX_ "Usage: " __FUNCTION__ "(uv, index, value);"); + XSRETURN(1); + } + gettiedPVinfo(); + idx = SvUV(ST(1)); + if (idx < 0 || idx >= len) { + Perl_croak(aTHX_ "Index %u out of bounds <0...%u>", idx, len-1); + XSRETURN(1); + } + b = v + idx * avlen; + if ((sv_arg = MyConvertPtr(ST(2), (void**)&data, &vlen, name)) == NULL) { + Perl_croak(aTHX_ "Type error in argument 3 of STORE. Expected %s.\n", name->name); + XSRETURN(1); + } + if (vlen != avlen) { + Perl_croak(aTHX_ "Problem with argument 3 of STORE. Expected %u bytes, but got %u.\n", avlen, vlen); + XSRETURN(1); + } + memcpy(b, data, avlen); + SvSETMAGIC(sv); + XSRETURN(0); +} + +XS(_wrap_uvar_nomodify) { + dXSARGS; + + Perl_croak(aTHX_ PL_no_modify); + XSRETURN(0); +} +%} + +#undef __FILE__ +#define __FILE__ __FILE__ +%init %{ + newXSproto("ncpfs::uvarray::FETCHSIZE", _wrap_uvar_fetchsize, __FILE__, "$"); + newXSproto("ncpfs::uvarray::STORESIZE", _wrap_uvar_storesize, __FILE__, "$$"); + newXSproto("ncpfs::uvarray::EXISTS", _wrap_uvar_exists, __FILE__, "$$"); + newXSproto("ncpfs::uvarray::FETCH", _wrap_uvar_fetch, __FILE__, "$$"); + newXSproto("ncpfs::uvarray::STORE", _wrap_uvar_store, __FILE__, "$$$"); + newXSproto("ncpfs::uvarray::DELETE", _wrap_uvar_nomodify, __FILE__, "$$"); + newXSproto("ncpfs::uvarray::CLEAR", _wrap_uvar_nomodify, __FILE__, "$"); + newXSproto("ncpfs::uvarray::PUSH", _wrap_uvar_nomodify, __FILE__, "$@"); + newXSproto("ncpfs::uvarray::POP", _wrap_uvar_nomodify, __FILE__, "$"); + newXSproto("ncpfs::uvarray::SHIFT", _wrap_uvar_nomodify, __FILE__, "$"); + newXSproto("ncpfs::uvarray::UNSHIFT", _wrap_uvar_nomodify, __FILE__, "$@"); + newXSproto("ncpfs::uvarray::SPLICE", _wrap_uvar_nomodify, __FILE__, "$$$@"); + newXSproto("ncpfs::pvarray::FETCHSIZE", _wrap_uvar_fetchsize, __FILE__, "$"); + newXSproto("ncpfs::pvarray::STORESIZE", _wrap_uvar_storesize, __FILE__, "$$"); + newXSproto("ncpfs::pvarray::EXISTS", _wrap_uvar_exists, __FILE__, "$$"); + newXSproto("ncpfs::pvarray::FETCH", _wrap_pvar_fetch, __FILE__, "$$"); + newXSproto("ncpfs::pvarray::STORE", _wrap_pvar_store, __FILE__, "$$$"); + newXSproto("ncpfs::pvarray::DELETE", _wrap_uvar_nomodify, __FILE__, "$$"); + newXSproto("ncpfs::pvarray::CLEAR", _wrap_uvar_nomodify, __FILE__, "$"); + newXSproto("ncpfs::pvarray::PUSH", _wrap_uvar_nomodify, __FILE__, "$@"); + newXSproto("ncpfs::pvarray::POP", _wrap_uvar_nomodify, __FILE__, "$"); + newXSproto("ncpfs::pvarray::SHIFT", _wrap_uvar_nomodify, __FILE__, "$"); + newXSproto("ncpfs::pvarray::UNSHIFT", _wrap_uvar_nomodify, __FILE__, "$@"); + newXSproto("ncpfs::pvarray::SPLICE", _wrap_uvar_nomodify, __FILE__, "$$$@"); +%} + +%wrapper %{ +_define hv_safe_store(hv,key,sv) _hv_safe_store(aTHX_ hv, key, sv) +static void _hv_safe_store(pTHX_ HV* hv, const char* key, SV* sv) { + SV** t; + + t = hv_store(hv, key, strlen(key), sv, 0); + if (!t) { + SvREFCNT_dec(sv); + } +} + +_define newHVitemPV(hv,key,val) _newHVitemPV(aTHX_ hv, key, val) +static void _newHVitemPV(pTHX_ HV* hv, const char* key, const char* val) { + hv_safe_store(hv, key, val ? newSVpv(val, 0) : &PL_sv_undef); +} + +_define newHVitemUV(hv,key,val) _newHVitemUV(aTHX_ hv, key, val) +static void _newHVitemUV(pTHX_ HV* hv, const char* key, UV val) { + hv_safe_store(hv, key, newSVuv(val)); +} + +_define fetchHVitemPV_nolen(hv,key) _fetchHVitemPV_nolen(aTHX_ hv, key) +static void * _fetchHVitemPV_nolen(pTHX_ HV* hv, const char* key) { + SV** r; + + r = hv_fetch(hv, key, strlen(key), 0); + if (!r) { + return NULL; + } + return swig_PV_maynull_nolen(*r); +} + +_define fetchHVitemUV(hv,key) _fetchHVitemUV(aTHX_ hv, key) +static UV _fetchHVitemUV(pTHX_ HV* hv, const char* key) { + SV** r; + + r = hv_fetch(hv, key, strlen(key), 0); + if (!r) { + return SvUV(&PL_sv_undef); + } + return SvUV(*r); +} + +_define newAVitemPV(av,val) _newAVitemPV(aTHX_ av, val) +static void _newAVitemPV(pTHX_ AV* av, const char* val) { + av_push(av, val ? newSVpv(val, 0) : &PL_sv_undef); +} +%} + +%typemap(perl5,ignore) PTRBASED * ($1_basetype temp) +%{ $1 = &temp; %} + +%typemap(perl5,argout) PTRBASED * %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + $result = sv_newmortal(); + if (!result) { + SWIG_MakePtr($result, *($1), $*1_descriptor, 0); + } + argvi++; +%} + +%typemap(perl5,out) PTRBASED %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + $result = sv_newmortal(); + if (!result) { + SWIG_MakePtr($result, $1, $1_descriptor, 0); + } + argvi++; +%} + +%typemap(perl5,perl5out) PTRBASED "" + +#define PTR_BASED_OUTPUT(x) \ +%typemap(perl5,ignore) x * = PTRBASED *; \ +%typemap(perl5,argout) x * = PTRBASED *; \ +%typemap(perl5,out) x = PTRBASED; \ +%typemap(perl5,perl5out) x = PTRBASED; + +PTR_BASED_OUTPUT(NWCONN_HANDLE); +PTR_BASED_OUTPUT(NWVOL_HANDLE); + +/* ncp_get_file_server_description_strings */ +%typemap(perl5,ignore) char descstring [512] ( char temp[512] ) +%{ $1 = temp; %} + +%typemap(perl5,argout) char descstring [512] { + int i; + char* x = temp; + + for (i = 0; i < 5; i++) { + size_t p; + + if (argvi >= items) { + EXTEND(sp, 1); + } + $result = sv_newmortal(); + p = strlen(x); + sv_setpvn($result, x, p); + argvi++; + x += p + 1; + } +} + +/* error value from old API */ +%typemap(perl5,ignore) long * err ( long temp ) %{ + temp = NWE_REQUESTER_FAILURE; + $1 = &temp; +%} + +%typemap(perl5,argout) long * err %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + $result = sv_2mortal(newSViv(*$1)); + argvi++; +%} + +%typemap(perl5,in) UVBASED input +%{ $1 = SvUV($input); %} + +%typemap(perl5,out) UVBASED +%{ $result = sv_2mortal(newSVuv($1)); %} + +%typemap(perl5,in) IVBASED input +%{ $1 = SvIV($input); %} + +%typemap(perl5,ignore) IVBASED * target ( $1_basetype temp ) +%{ $1 = &temp; %} + +%typemap(perl5,argout) IVBASED * target %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSViv(*$1)); + } + argvi++; +%} + +%typemap(perl5,ignore) UVBASED * target ( $*1_type temp ) +%{ $1 = &temp; %} + +%typemap(perl5,argout) UVBASED * target %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVuv(*$1)); + } + argvi++; +%} + +%typemap(perl5,in) IVBASED * both (SV * sv_arg, $1_basetype tempiv) { + IV val; + + sv_arg = getReferenceToIV($input, &val); + if (!sv_arg) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. Expected reference to integer.\n"); + XSRETURN(1); + } + tempiv = val; + $1 = &tempiv; +} + +%typemap(perl5,argout) IVBASED * both %{ + if (!result) { + sv_setiv_mg(sv_arg, *$1); + } +%} + +%typemap(perl5,in) IVBASED * both_mn (SV * sv_arg, $1_basetype tempiv) { + IV val; + + SvGETMAGIC($input); + if (SvOK($input)) { + sv_arg = getReferenceToIV($input, &val); + if (!sv_arg) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. Expected undef or reference to integer.\n"); + XSRETURN(1); + } + tempiv = val; + $1 = &tempiv; + } else { + $1 = NULL; + } +} + +%typemap(perl5,argout) IVBASED * both_mn %{ + if (!result && $1) { + sv_setiv_mg(sv_arg, *$1); + } +%} + +#define IV_BASED_OUTPUT(x) \ +%typemap(perl5,ignore) x = IVBASED * target; \ +%typemap(perl5,argout) x = IVBASED * target; + +#define UV_BASED_OUTPUT(x) \ +%typemap(perl5,ignore) x = UVBASED * target; \ +%typemap(perl5,argout) x = UVBASED * target; + +#define IV_BASED_BOTH(x) \ +%typemap(perl5,in) x = IVBASED * both; \ +%typemap(perl5,argout) x = IVBASED * both; + +#define IV_BASED_BOTH_MN(x) \ +%typemap(perl5,in) x = IVBASED * both_mn; \ +%typemap(perl5,argout) x = IVBASED * both_mn; + +/* relocatable structures with automatic refcounting */ +%typemap(perl5,ignore) PVBASED * target ($1_basetype temp) +%{ $1 = &temp; %} + +%typemap(perl5,in) PVBASED * (SV * sv_arg), const PVBASED * (SV * sv_arg) { + STRLEN len; + + if ((sv_arg = MyConvertPtr($input, (void**)&$1, &len, $1_descriptor)) == NULL) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. Expected %s.\n", $1_descriptor->name); + XSRETURN(1); + } + if (len != sizeof(*$1)) { + Perl_croak(aTHX_ "Problem with argument $argnum of $symname. Expected %u bytes, but got %u.\n", sizeof(*$1), len); + XSRETURN(1); + } +} + +%typemap(perl5,in) PVBASED_relaxed * (SV * sv_arg) { + STRLEN len; + + if ((sv_arg = MyConvertPtr($input, (void**)&$1, &len, $1_descriptor)) == NULL) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. Expected %s.\n", $1_descriptor->name); + XSRETURN(1); + } +} + +%typemap(perl5,in) PVBASED * both (SV * sv_arg) { + STRLEN len; + + sv_arg = MyConvertPtr($input, (void**)&$1, &len, $1_descriptor); + if (!sv_arg || !$1) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. Expected %s.\n", $1_descriptor->name); + XSRETURN(1); + } + if (len != sizeof(*$1)) { + Perl_croak(aTHX_ "Problem with argument $argnum of $symname. Expected %u bytes, but got %u.\n", sizeof(*$1), len); + XSRETURN(1); + } +} + +%typemap(perl5,in) PVBASED * target "#error in mapping for PVBASED * target emited" + +%typemap(perl5,argout) PVBASED * target %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + SV* s; + + s = newSVpvn((char*)$1, sizeof(*$1)); + $result = createTiedHashReference(s, $1_descriptor); + } + argvi++; +%} + +%typemap(perl5,argout) PVBASED * both +%{ + if (!result) { + SvSETMAGIC(sv_arg); + } +%} + +%typemap(perl5,out) PVBASED * +%{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if ($1) { + SV* s; + + s = newSVpvn((char*)$1, sizeof(*$1)); + $result = createTiedHashReference(s, $1_descriptor); + } else { + $result = &PL_sv_undef; + } + argvi++; +%} + +/* FIXME */ +%typemap(perl5,out) size_t [ANY] %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if ($1) { + SV* s; + + s = createLV(sv_arg1, (u_int8_t*)$1 - (u_int8_t*)arg1, sizeof(*$1) * $1_dim0); + setupAVLen(s, sizeof(*$1)); + $result = createTiedArrayReference(s, "ncpfs::uvarray"); + } else { + $result = &PL_sv_undef; + } + argvi++; +%} + +%typemap(perl5,out) u_int32_t reserved1[7] %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if ($1) { + SV* s; + + s = createLV(sv_arg1, (u_int8_t*)$1 - (u_int8_t*)arg1, sizeof(*$1) * $1_dim0); + setupAVLen(s, sizeof(*$1)); + $result = createTiedArrayReference(s, "ncpfs::uvarray"); + } else { + $result = &PL_sv_undef; + } + argvi++; +%} + +%typemap(perl5,out) PVBASED * depend +%{ + if (G_VOID != GIMME_V) { + if (argvi >= items) { + EXTEND(sp, 1); + } + if ($1) { + $result = createMagicChild(sv_arg1, (u_int8_t*)$1 - (u_int8_t*)arg1, sizeof(*$1), $1_descriptor); + } else { + $result = &PL_sv_undef; + } + argvi++; + } +%} + +%typemap(perl5,perl5out) PVBASED * "" + +%typemap(perl5,perl5out) PVBASED "" + +#define PV_BASED_NOINIT(x) \ +/* %remember x *; */ \ +%typemap(perl5,ignore) x * target = PVBASED * target; \ +%typemap(perl5,in) x * = PVBASED *; \ +%typemap(perl5,in) const x * = const PVBASED *; \ +%typemap(perl5,in) x * target = PVBASED * target; \ +%typemap(perl5,argout) x * target = PVBASED * target; \ +%typemap(perl5,out) x * = PVBASED *; \ +%typemap(perl5,perl5out) x * = PVBASED *; \ +%typemap(perl5,perl5out) x = PVBASED; + +#define PV_BASED_INIT(x,y) \ +PV_BASED_NOINIT(y); \ +%extend x { \ + x(void) { static y cs; return &cs; }; \ +} + +#define PV_BASED(x) PV_BASED_INIT(x,x) + +#define PV_BASED_STRUCT(x) PV_BASED_INIT(x, struct x); + +#define PV_BASED_OUTPUT(x) \ +%typemap(perl5,ignore) x = PVBASED * target; \ +%typemap(perl5,in) x = PVBASED * target; \ +%typemap(perl5,argout) x = PVBASED * target; + +#define PV_BASED_BOTH(x) \ +%typemap(perl5,in) x = PVBASED * both; \ +%typemap(perl5,argout) x = PVBASED * both; \ +%typemap(perl5,in) const x = PVBASED * both; \ +%typemap(perl5,argout) const x = PVBASED * both; + +#define PV_BASED_OUTDEP(x) \ +%typemap(perl5,out) x = PVBASED * depend; + +#define PV_BASED_MEMBER(structure,member,type) \ +PV_BASED_OUTDEP(type * structure##_##member##_getset); \ +PV_BASED_OUTDEP(type * structure##_##member##_get); + +#define PV_BASED_ARRAY(itemdesc, count) \ +%typemap(perl5,out) itemdesc %{ \ + if (argvi >= items) { \ + EXTEND(sp, 1); \ + } \ + if ($1) { \ + SV* s; \ + \ + s = createLV(sv_arg1, (u_int8_t*)$1 - (u_int8_t*)arg1, sizeof(*$1) * count); \ + setupAVTypeLen(s, $1_descriptor, sizeof(*$1)); \ + $result = createTiedArrayReference(s, "ncpfs::pvarray"); \ + } else { \ + $result = &PL_sv_undef; \ + } \ + argvi++; \ +%}; \ +%typemap(perl5,perl5out) itemdesc "" + +#define PV_BASED_RELAXED(x) \ +%typemap(perl5,in) x = PVBASED_relaxed *; + +PV_BASED_STRUCT(ncp_request_header); +PV_BASED_STRUCT(ncp_reply_header); +PV_BASED_STRUCT(ncp_file_server_info); +PV_BASED_STRUCT(ncp_conn_spec); +PV_BASED_STRUCT(ncp_property_info); +PV_BASED_STRUCT(ncp_station_addr); +PV_BASED_STRUCT(ncp_prop_login_control); +PV_BASED_STRUCT(ncp_bindery_object); +PV_BASED_STRUCT(ncp_conn_ent); +PV_BASED_STRUCT(nw_property); +PV_BASED_STRUCT(ncp_volume_info); +PV_BASED_STRUCT(ncp_filesearch_info); +PV_BASED_BOTH(struct ncp_filesearch_info * fsinfo); +PV_BASED_STRUCT(ncp_file_info); +PV_BASED_STRUCT(nw_info_struct); +PV_BASED_MEMBER(nw_file_info, i, struct nw_info_struct); +PV_BASED_STRUCT(nw_info_struct2); +PV_BASED_STRUCT(NSI_Attributes); +PV_BASED_MEMBER(nw_info_struct2, Attributes, struct NSI_Attributes); +PV_BASED_STRUCT(NSI_TotalSize); +PV_BASED_MEMBER(nw_info_struct2, TotalSize, struct NSI_TotalSize); +PV_BASED_STRUCT(NSI_ExtAttrInfo); +PV_BASED_MEMBER(nw_info_struct2, ExtAttrInfo, struct NSI_ExtAttrInfo); +PV_BASED_STRUCT(NSI_Change); +PV_BASED_MEMBER(nw_info_struct2, Archive, struct NSI_Change); +PV_BASED_MEMBER(nw_info_struct2, Modify, struct NSI_Change); +PV_BASED_MEMBER(nw_info_struct2, Creation, struct NSI_Change); +PV_BASED_STRUCT(NSI_LastAccess); +PV_BASED_MEMBER(nw_info_struct2, LastAccess, struct NSI_LastAccess); +PV_BASED_STRUCT(NSI_Directory); +PV_BASED_MEMBER(nw_info_struct2, Directory, struct NSI_Directory); +PV_BASED_STRUCT(NSI_DOSName); +PV_BASED_MEMBER(nw_info_struct2, DOSName, struct NSI_DOSName); +PV_BASED_STRUCT(NSI_MacTimes); +PV_BASED_MEMBER(nw_info_struct2, MacTimes, struct NSI_MacTimes); +PV_BASED_STRUCT(NSI_Name); +PV_BASED_MEMBER(nw_info_struct2, Name, struct NSI_Name); +PV_BASED_STRUCT(nw_info_struct3); +PV_BASED_STRUCT(ncp_dos_info); +PV_BASED_MEMBER(ncp_dos_info, Creation, struct NSI_Change); +PV_BASED_MEMBER(ncp_dos_info, Modify, struct NSI_Change); +PV_BASED_MEMBER(ncp_dos_info, Archive, struct NSI_Change); +PV_BASED_MEMBER(ncp_dos_info, LastAccess, struct NSI_LastAccess); +PV_BASED_STRUCT(ncp_dos_info_rights); +PV_BASED_MEMBER(ncp_dos_info, Rights, struct ncp_dos_info_rights) +PV_BASED_STRUCT(ncp_namespace_format_BitMask); +PV_BASED_STRUCT(ncp_namespace_format_BitsDefined); +PV_BASED_STRUCT(ncp_namespace_format); +PV_BASED_MEMBER(ncp_namespace_format, BitMask, struct ncp_namespace_format_BitMask); +PV_BASED_MEMBER(ncp_namespace_format, BitsDefined, struct ncp_namespace_format_BitsDefined); +PV_BASED_STRUCT(nw_modify_dos_info); +PV_BASED_STRUCT(nw_file_info); +PV_BASED_STRUCT(ncp_search_seq); +PV_BASED_BOTH(struct ncp_search_seq * seq); +PV_BASED_STRUCT(nw_search_sequence); +PV_BASED_MEMBER(ncp_search_seq, s, struct nw_search_sequence); +PV_BASED_STRUCT(queue_job); +PV_BASED_BOTH(struct queue_job * job); +PV_BASED_STRUCT(nw_queue_job_entry); +PV_BASED_MEMBER(queue_job, j, struct nw_queue_job_entry); +PV_BASED_STRUCT(ncp_trustee_struct); +PV_BASED_NOINIT(struct ncp_deleted_file); +%extend ncp_deleted_file { + ncp_deleted_file(void) { static struct ncp_deleted_file cs = { .seq = -1 }; return &cs; }; +} +PV_BASED_BOTH(struct ncp_deleted_file * finfo); + +PV_BASED(OPEN_FILE_CONN_CTRL); +PV_BASED_BOTH(OPEN_FILE_CONN_CTRL * openCtrl); +PV_BASED(OPEN_FILE_CONN); +PV_BASED_OUTPUT(OPEN_FILE_CONN * openFile); + +PV_BASED(CONNS_USING_FILE); +PV_BASED_BOTH(CONNS_USING_FILE * cfa); +PV_BASED(CONN_USING_FILE); +PV_BASED_OUTPUT(CONN_USING_FILE * cf); +PV_BASED_ARRAY(CONN_USING_FILE [ANY], arg1->connCount); + +PV_BASED(PHYSICAL_LOCKS); +PV_BASED_BOTH(PHYSICAL_LOCKS * locks); +PV_BASED(PHYSICAL_LOCK); +//%extend __PHYSICAL_LOCK { +// PHYSICAL_LOCK(void) { static PHYSICAL_LOCK cs; return &cs; }; +//} +PV_BASED_OUTPUT(PHYSICAL_LOCK * lock); +PV_BASED_ARRAY(PHYSICAL_LOCK [ANY], arg1->numRecords); + +PV_BASED(CONN_SEMAPHORES); +PV_BASED_BOTH(CONN_SEMAPHORES * semaphores); +PV_BASED(CONN_SEMAPHORE); +PV_BASED_OUTPUT(CONN_SEMAPHORE * semaphore); + +PV_BASED(SEMAPHORES); +PV_BASED_BOTH(SEMAPHORES * semaphores); +PV_BASED(SEMAPHORE); +PV_BASED_OUTPUT(SEMAPHORE * semaphore); +PV_BASED_ARRAY(SEMAPHORE [ANY], arg1->semaphoreCount); + +PV_BASED(NWOBJ_REST); +PV_BASED(NWVolumeRestrictions); +PV_BASED(NWVOL_RESTRICTIONS); +PV_BASED_ARRAY(NWOBJ_REST [ANY], arg1->numberOfEntries); + +PV_BASED(__NW_LIMIT_LIST_list); +PV_BASED(NW_LIMIT_LIST); +PV_BASED_ARRAY(__NW_LIMIT_LIST_list [ANY], arg1->numEntries); + +PV_BASED(DIR_SPACE_INFO); +PV_BASED(NWCCVersion); +PV_BASED_STRUCT(NWCCRootEntry); + +PV_BASED(NWCCTranAddr); +%typemap(perl5,check) const NWCCTranAddr* %{ + $1->buffer = $1->bufferdata; +%} +%typemap(perl5,check) NWCCTranAddr* = const NWCCTranAddr*; + +PV_BASED_STRUCT(ncp_ea_enumerate_info); +PV_BASED_BOTH(struct ncp_ea_enumerate_info * info); +PV_BASED_STRUCT(ncp_ea_read_info); +PV_BASED_STRUCT(ncp_ea_write_info); +PV_BASED_RELAXED(struct ncp_ea_info_level1 *); +PV_BASED_RELAXED(struct ncp_ea_info_level6 *); + +%typemap(perl5,in) char * INPUT %{ + SvGETMAGIC($input); + if (!SvOK($input)) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. Expected string.\n"); + XSRETURN(1); + } + $1 = (typeof($1))SvPV_nolen($input); +%} + +%typemap(perl5,in) const unsigned char * = char * INPUT; + +%typemap(perl5,in) time_t * source (time_t temp) %{ + temp = SvIV($input); + $1 = &temp; +%} + +IV_BASED_OUTPUT(time_t * target); /* ncp_get_file_server_time */ +IV_BASED_OUTPUT(time_t * login_time); /* ncp_get_stations_logged_info */ +IV_BASED_OUTPUT(u_int16_t * my_effective_rights); +IV_BASED_OUTPUT(u_int16_t * OUTPUT); +IV_BASED_OUTPUT(u_int32_t * OUTPUT); +IV_BASED_OUTPUT(u_int8_t * target); /* directory handle... */ +IV_BASED_OUTPUT(u_int16_t * target); /* ncp_get_effective_dir_rights */ +IV_BASED_OUTPUT(unsigned int * ttl); /* ncp_get_dentry_ttl */ +IV_BASED_OUTPUT(unsigned int * volnum); /* ncp_volume_list_next */ +IV_BASED_OUTPUT(u_int8_t * oc_action); /* ncp_ns_open_create_entry */ +IV_BASED_OUTPUT(u_int8_t * oc_callback); /* ncp_ns_open_create_entry */ +IV_BASED_OUTPUT(uid_t * uid); /* ncp_get_mount_uid */ +IV_BASED_OUTPUT(NWDIR_HANDLE * dirhandle); +IV_BASED_OUTPUT(NWVOL_NUM * ovol); +IV_BASED_OUTPUT(NWVOL_NUM * __vol); +IV_BASED_OUTPUT(size_t * destlen); /* ncp_ns_extract_info_field_size */ + +%typemap(perl5,ignore) fixedCharArray OUTPUT ( char temp[$1_dim0] ) [ANY] +%{ $1 = temp; %} + +%typemap(perl5,argout) fixedCharArray OUTPUT [ANY] +%{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVpvn($1, strnlen($1, $1_dim0))); + } + argvi++; +%} + +%typemap(perl5,out) fixedCharArray[ANY] +%{ + if (argvi >= items) { + EXTEND(sp, 1); + } + $result = sv_2mortal(newSVpvn($1, strnlen($1, $1_dim0))); + argvi++; +%} + +%typemap(perl5,in) fixedCharArray[ANY] (STRLEN temp) +%{ + SvGETMAGIC($input); + if (!SvOK($input)) { + $1 = NULL; + } else { + $1 = SvPV($input, temp); + } +%} + +%typemap(perl5,memberin) fixedCharArray[ANY] +%{ + if ($input) { + if (temp2 >= $1_dim0) { + memcpy($1, $input, $1_dim0); + } else { + memcpy($1, $input, temp2); + $1[temp2] = 0; + } + } +%} + +#define PREFIXED_CHAR_ARRAY(pref,type) \ +%typemap(perl5,ignore) pref##LenPrefixCharArray OUTPUT ( char temp[$1_dim0+1] ) [ANY] \ +%{ $1 = temp; %} \ + \ +%typemap(perl5,argout) pref##LenPrefixCharArray OUTPUT [ANY] \ +%{ \ + if (argvi >= items) { \ + EXTEND(sp, 1); \ + } \ + if (result) { \ + $result = &PL_sv_undef; \ + } else { \ + $result = sv_2mortal(newSVpvn($1, ((type*)$1)[-1])); \ + } \ + argvi++; \ +%} \ + \ +%typemap(perl5,out) pref##LenPrefixCharArray[ANY] \ +%{ \ + if (argvi >= items) { \ + EXTEND(sp, 1); \ + } \ + $result = sv_2mortal(newSVpvn($1, ((type*)$1)[-1])); \ + argvi++; \ +%} \ + \ +%typemap(perl5,in) pref##LenPrefixCharArray (STRLEN temp) [ANY] \ +%{ \ + SvGETMAGIC($input); \ + if (!SvOK($input)) { \ + $1 = NULL; \ + } else { \ + $1 = SvPV($input, temp); \ + } \ +%} \ + \ +%typemap(perl5,memberin) pref##LenPrefixCharArray[ANY] \ +%{ \ + if ($input) { \ + if (temp2 > $1_dim0) { \ + temp2 = $1_dim0; \ + } \ + memcpy($1, $input, temp2); \ + ((type*)$1)[-1] = temp2; \ + } \ +%} + +PREFIXED_CHAR_ARRAY(byte, u_int8_t); +PREFIXED_CHAR_ARRAY(size_t, size_t); +PREFIXED_CHAR_ARRAY(uint_fast16_t, uint_fast16_t); + +#define ASCIIZ_CHAR_ARRAY(pref,len) \ +%typemap(perl5,ignore) pref ( char temp[len+1] ) \ +%{ $1 = temp; %} \ + \ +%typemap(perl5,argout) pref \ +%{ \ + if (argvi >= items) { \ + EXTEND(sp, 1); \ + } \ + if (result) { \ + $result = &PL_sv_undef; \ + } else { \ + $result = sv_2mortal(newSVpvn($1, strnlen($1, len))); \ + } \ + argvi++; \ +%} + +#define WCHART_ARRAY(pref,len) \ +%typemap(perl5,ignore) pref ( wchar_t temp[len+1] ) \ +%{ $1 = temp; %} \ + \ +%typemap(perl5,argout) pref \ +%{ \ + if (argvi >= items) { \ + EXTEND(sp, 1); \ + } \ + if (result) { \ + $result = &PL_sv_undef; \ + } else { \ + $result = sv_2mortal(newSVpvn((char*)$1, wcsnlen($1, len) * sizeof(wchar_t))); \ + } \ + argvi++; \ +%} + +%typemap(perl5,ignore) fixedArray OUTPUT ( $1_basetype temp[$1_dim0] ) [ANY] +%{ $1 = temp; %} + +%typemap(perl5,argout) fixedArray OUTPUT[ANY] %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVpvn($1, $1_dim0)); + } + argvi++; +%} + +%typemap(perl5,out) fixedArray[ANY] %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + $result = sv_2mortal(newSVpvn($1, $1_dim0)); + argvi++; +%} + +%typemap(perl5,in) fixedArray[ANY], const fixedArray[ANY] +{ + STRLEN len; + + SvGETMAGIC($input); + if (!SvOK($input)) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. Expected string.\n"); + XSRETURN(1); + } + $1 = SvPV($input, len); + if (len != $1_dim0) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. Expected string with $1_dim0 chars, but got %u chars.\n", + len); + XSRETURN(1); + } +} + +%typemap(perl5,memberin) fixedArray[ANY] "memcpy($1, $input, $1_dim0);" + +#define FIXEDARRAY_IN(x) \ +%typemap(perl5,in) x = const fixedArray [ANY]; + +#define FIXEDARRAY_OUTPUT(x) \ +%typemap(perl5,ignore) x = fixedArray OUTPUT [ANY]; \ +%typemap(perl5,argout) x = fixedArray OUTPUT [ANY]; + +#define FIXEDARRAYLEN_OUTPUT(x,len) \ +%typemap(perl5,ignore) x ( unsigned char temp[len] ) \ +%{ $1 = temp; %} \ + \ +%typemap(perl5,argout) x %{ \ + if (argvi >= items) { \ + EXTEND(sp, 1); \ + } \ + if (result) { \ + $result = &PL_sv_undef; \ + } else { \ + $result = sv_2mortal(newSVpvn($1, len));\ + } \ + argvi++; \ +%} + +%typemap(perl5,ignore) (int * returned_no, u_int8_t conn_numbers[256]) (int conn_count, u_int8_t conns[256]) %{ + $1 = &conn_count; + $2 = conns; +%} + +%typemap(perl5,argout) (int * returned_no, u_int8_t conn_numbers[256]) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = buildArrayReferenceFromByteArray(conn_count, $2); + } + argvi++; +%} + +%typemap(perl5,default) (size_t __maxlen, nuint8 * __nslist, size_t * __nslen) %{ + $1 = 256; +%} + +%typemap(perl5,in) (size_t __maxlen, nuint8 * __nslist, size_t * __nslen) %{ + $1 = SvUV($input); +%} + +%typemap(perl5,check) (size_t __maxlen, nuint8 * __nslist, size_t * __nslen) (size_t temp) %{ + $3 = &temp; + New((I32)"$2_name", $2, $1, nuint8); +%} + +%typemap(perl5,argout) (size_t __maxlen, nuint8 * __nslist, size_t * __nslen) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = buildArrayReferenceFromByteArray(*$3, $2); + } + argvi++; +%} + +%typemap(perl5,freearg) (size_t __maxlen, nuint8 * __nslist, size_t * __nslen) %{ + Safefree($2); +%} + +%typemap(perl5,ignore) struct sockaddr * station_addr (struct sockaddr temp) +%{ $1 = &temp; %} + +%typemap(perl5,argout) struct sockaddr * station_addr %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVpvn((char*)$1, sizeof(*$1))); + } + argvi++; +%} + +%typemap(perl5,out) u_int8_t data[0] %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if ($1) { + size_t ro; + size_t len; + + ro = (u_int8_t*)$1 - (u_int8_t*)arg1; + len = SvCUR(sv_arg1); + if (len > ro) { + len -= ro; + } else { + len = 0; + } + $result = createLV(sv_arg1, ro, len); + } else { + $result = &PL_sv_undef; + } + argvi++; +%} + +IV_BASED_OUTPUT(u_int8_t * conn_type); + +/* ncp_send_broadcast */ +%typemap(perl5,in) (u_int8_t no_conn, const u_int8_t * connections) { + size_t asize; + const char *msg; + + msg = getByteArray($input, &asize, &$2, 256); + if (msg) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. %s\n", msg); + XSRETURN(1); + } + $1 = asize; +} + +%typemap(perl5,freearg) (u_int8_t no_conn, const u_int8_t * connections) +%{ freeByteArray($2); %} +/* end of ncp_send_broadcast */ + +/* ncp_send_broadcast2 */ +%typemap(perl5,in) (unsigned int no_conn, const unsigned int * connections) { + size_t asize; + const char *msg; + + msg = getUnsignedIntArray($input, &asize, &$2, 65536); + if (msg) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. %s\n", msg); + XSRETURN(1); + } + $1 = asize; +} + +%typemap(perl5,freearg) (unsigned int no_conn, const unsigned int * connections) +%{ freeUnsignedIntArray($2); %} +/* end of ncp_send_broadcast2 */ + +/* ncp_write */ +#define FETCHPV(src,tgt,tgtlen) \ + do { \ + STRLEN len; \ + \ + SvGETMAGIC(src); \ + if (!SvOK(src)) { \ + len = 0; \ + tgt = NULL; \ + } else { \ + tgt = SvPV(src, len); \ + } \ + tgtlen = len; \ + } while (0) + +%typemap(perl5,in) (size_t IGNORE, const char * STRING_LENPREV) +%{ FETCHPV($input, $2, $1); %} +/* end of ncp_write */ + +/* ncp_get_encryption_key */ +%typemap(perl5,ignore) char * encryption_key ( char temp[8] ) +%{ $1 = temp; %} + +%typemap(perl5,argout) char * encryption_key %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVpvn($1, 8)); + } + argvi++; +%} +/* end of ncp_get_encryption_key */ + +/* ncp_read */ +%typemap(perl5,in) (size_t count, char * RETBUFFER_LENPREV) %{ + $1 = SvUV($input); + New((I32)"retbuffer_lenprev", $2, $1, char); +%} + +%typemap(perl5,argout) (size_t count, char * RETBUFFER_LENPREV) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result < 0) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVpvn($2, result)); + } + argvi++; +%} + +%typemap(perl5,freearg) (size_t count, char * RETBUFFER_LENPREV) %{ + Safefree($2); +%} +/* end of ncp_read */ + +IV_BASED_OUTPUT(int * target); + +IV_BASED_OUTPUT(u_int16_t * OUTPUT); +IV_BASED_BOTH(u_int16_t * REFERENCE); + +IV_BASED_BOTH(u_int16_t * iterHandle); + +/* ncp_initialize_search2 */ +%typemap(perl5,in) (const unsigned char * enc_subpath, int subpathlen), + (const unsigned char * encpath, size_t pathlen), + (const unsigned char * encpath, int pathlen) +%{ FETCHPV($input, $1, $2); %} + +IV_BASED_OUTPUT(u_int32_t * queue_length); /* ncp_get_queue_length */ +IV_BASED_OUTPUT(u_int16_t * rights); /* ncp_str_to_perms */ + +/* ncp_get_queue_job_ids */ +%typemap(perl5,ignore) (u_int32_t * length1, u_int32_t * length2, u_int32_t ids[]) (u_int32_t ids_size, u_int32_t reply_ids_size, u_int32_t ids_array[125]) %{ + $1 = &ids_size; + $2 = &reply_ids_size; + $3 = ids_array; + ids_size = 125; +%} + +%typemap(perl5,argout) (u_int32_t * length1, u_int32_t * length2, u_int32_t ids[]) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + argvi++; + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVuv(ids_size)); + argvi++; + $result = buildArrayReferenceFromDWordArray(reply_ids_size, ids_array); + } + argvi++; +%} +/* end of ncp_get_queue_job_ids */ + +/* ncp_get_broadcast_message */ +%typemap(perl5,ignore) char message[256] = fixedCharArray OUTPUT [ANY]; +%typemap(perl5,argout) char message[256] = fixedCharArray OUTPUT [ANY]; +/* end of ncp_get_broadcast_message */ + +/* ncp_add_trustee_set */ +%typemap(perl5,in) (int object_count, const struct ncp_trustee_struct * rights) { + size_t asize; + const char *msg; + + msg = getNCPTrusteeStructArray($input, &asize, &$2, 2048, $2); + if (msg) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. %s\n", msg); + XSRETURN(1); + } + $1 = asize; +} + +%typemap(perl5,freearg) (int object_count, const struct ncp_trustee_struct * rights) +%{ freeNCPTrusteeStructArray($2); %} +/* end of ncp_add_trustee_set */ + +#define RETPTR_AND_MAXLEN(parm,deflen) \ +%typemap(perl5,default) parm %{ $2 = deflen; %} \ +%typemap(perl5,in) parm %{ $2 = SvUV($input); %} \ +%typemap(perl5,check) parm \ +%{ New((I32)"$1_name", $1, $2, $1_basetype); %} \ +%typemap(perl5,argout) parm %{ \ + if (argvi >= items) { \ + EXTEND(sp, 1); \ + } \ + if (result) { \ + $result = &PL_sv_undef; \ + } else { \ + $result = sv_2mortal(newSVpvn($1, strlen($1))); \ + } \ + argvi++; \ +%} \ +%typemap(perl5,freearg) parm %{ \ + Safefree($1); \ +%} + +RETPTR_AND_MAXLEN((char * retname, size_t retname_maxlen), 256); +RETPTR_AND_MAXLEN((char * retname, int retname_maxlen), 256); +RETPTR_AND_MAXLEN((unsigned char * encbuff, int encbuffsize), 4096); + +/* ncp_path_to_NW_format */ +%typemap(perl5,out) int ncp_path_to_NW_format %{ + if (G_ARRAY == GIMME_V) { + if (argvi >= items) { + EXTEND(sp, 1); + } + if ($1 < 0) { + $result = sv_2mortal(newSViv(-$1)); + } else { + $result = sv_2mortal(newSViv(0)); + } + argvi++; + } +%} + +%typemap(perl5,argout) (unsigned char * encbuff, int encbuffsize) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result < 0) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVpvn($1, result)); + } + argvi++; +%} +/* end of ncp_path_to_NW_format */ + +/* ncp_perms_to_str */ +%typemap(perl5,ignore) char r (char temp[11]) [11] +%{ $1 = temp; %} +/* end of ncp_perms_to_str */ + +/* ncp_namespace_to_str */ +%typemap(perl5,ignore) char r (char temp[5]) [5] +%{ $1 = temp; %} +/* end of ncp_namespace_to_str */ + +%constant NW_INFO_STRUCT = sizeof(struct nw_info_struct); +%constant NW_INFO_STRUCT2 = sizeof(struct nw_info_struct2); +%constant NW_INFO_STRUCT3 = sizeof(struct nw_info_struct3); + +%extend nw_info_struct3 { + ~nw_info_struct3(void) { free(self->data); }; +} + +%typemap(perl5,in) (void * target, size_t sizeoftarget) (swig_type_info * sti) %{ + $2 = SvIV($input); +%} + +%typemap(perl5,check) (void * target, size_t sizeoftarget) %{ + switch ($2) { + case 0: + sti = SWIGTYPE_p_void; + break; + case sizeof(struct nw_info_struct): + sti = SWIGTYPE_p_nw_info_struct; + break; + case sizeof(struct nw_info_struct2): + sti = SWIGTYPE_p_nw_info_struct2; + break; + case sizeof(struct nw_info_struct3): + sti = SWIGTYPE_p_nw_info_struct3; + break; + default: + Perl_croak(aTHX_ "Invalid value of argument $argnum of $symname.\n"); + XSRETURN(1); + } + Newz((I32)"nw_info_target", $1, $2, unsigned char); +%} + +%typemap(perl5,argout) (void * target, size_t sizeoftarget) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + SV* s; + + s = newSVpvn((char*)$1, $2); + $result = createTiedHashReference(s, sti); + } + argvi++; +%} + +%typemap(perl5,freearg) (void * target, size_t sizeoftarget) +%{ Safefree($1); %} + +%constant NCP_NAMESPACE_FORMAT = sizeof(struct ncp_namespace_format); + +%typemap(perl5,in) (struct ncp_namespace_format * format, size_t sizeofformat) (swig_type_info* sti) +%{ $2 = SvUV($input); %} + +%typemap(perl5,check) (struct ncp_namespace_format * format, size_t sizeofformat) %{ + switch ($2) { + case sizeof(struct ncp_namespace_format): + sti = SWIGTYPE_p_ncp_namespace_format; + break; + default: + Perl_croak(aTHX_ "Invalid value of argument $argnum of $symname.\n"); + XSRETURN(1); + } + Newz((I32)"ncp_namespace_format", (unsigned char*)$1, $2, unsigned char); +%} + +%typemap(perl5,argout) (struct ncp_namespace_format * format, size_t sizeofformat) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + SV* s; + + s = newSVpvn((char*)$1, $2); + $result = createTiedHashReference(s, sti); + } + argvi++; +%} + +%typemap(perl5,freearg) (struct ncp_namespace_format * format, size_t sizeofformat) +%{ Safefree($1); %} + +%typemap(perl5,in) (const void * mnsbuf, size_t mnsbuflen) +%{ FETCHPV($input, $1, $2); %} + +%typemap(perl5,in) (const void * nsibuf, size_t nsibuflen) = (const void * mnsbuf, size_t mnsbuflen); + +%typemap(perl5,default) (void * itembuf, size_t * itembuflen, size_t itemmaxbuflen) (size_t tmp) %{ + $2 = &tmp; + $3 = 1024; +%} + +%typemap(perl5,default) (void * nsibuf, size_t * nsibuflen, size_t nsimaxbuflen) = (void * itembuf, size_t * itembuflen, size_t itemmaxbuflen); + +%typemap(perl5,in) (void * itembuf, size_t * itembuflen, size_t itemmaxbuflen), + (void * nsibuf, size_t * nsibuflen, size_t nsimaxbuflen) +%{ $3 = SvUV($input); %} + +%typemap(perl5,check) (void * itembuf, size_t * itembuflen, size_t itemmaxbuflen), + (void * nsibuf, size_t * nsibuflen, size_t nsimaxbuflen) %{ + Newz((I32)"$1_name", $1, $3, unsigned char); +%} + +%typemap(perl5,argout) (void * itembuf, size_t * itembuflen, size_t itemmaxbuflen), + (void * nsibuf, size_t * nsibuflen, size_t nsimaxbuflen) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVpvn($1, *$2)); + } + argvi++; +%} + +%typemap(perl5,freearg) (void * itembuf, size_t * itembuflen, size_t itemmaxbuflen), + (void * nsibuf, size_t * nsibuflen, size_t nsimaxbuflen) +%{ Safefree($1); %} + +/* ncp_get_file_size */ +%typemap(perl5,ignore) NVBASED * OUTPUT ($*1_type temp) +%{ $1 = &temp; %} + +%typemap(perl5,argout) NVBASED * OUTPUT %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVnv(temp)); + } + argvi++; +%} + +#define NV_BASED_OUTPUT(x) \ +%typemap(perl5,ignore) x = NVBASED * OUTPUT; \ +%typemap(perl5,argout) x = NVBASED * OUTPUT; + +NV_BASED_OUTPUT(ncp_off64_t * fileSize); +/* end of ncp_get_file_size */ + +%typemap(perl5,in) const char * +%{ $1 = (char *) swig_PV_maynull_nolen($input); %} + +%typemap(perl5,out) const char * +%{ $result = sv_2mortal(newSVpv($1, 0)); argvi++; %} + +%typemap(perl5,in) const char * __objectname = char * INPUT; + +IV_BASED_OUTPUT(NWObjectType * __objecttype); +IV_BASED_OUTPUT(NWObjectID * __objectid); +IV_BASED_OUTPUT(nuint8 * __rights); +IV_BASED_OUTPUT(nuint32 * __volnumber); +IV_BASED_OUTPUT(NWCONN_NUM * __connnum); +IV_BASED_OUTPUT(u_int16_t * version); +%typemap(perl5,in) const char * __objectpassword = char * INPUT; +%typemap(perl5,in) const u_int16_t = UVBASED input; +%typemap(perl5,in) nint16 = IVBASED input; + +ASCIIZ_CHAR_ARRAY(char * __objectname, 48); +ASCIIZ_CHAR_ARRAY(char * __server, 48); +ASCIIZ_CHAR_ARRAY(char * __volume, 4096); +ASCIIZ_CHAR_ARRAY(char * __volpath, 4096); + +RETPTR_AND_MAXLEN((char * __name, size_t __maxlen), 256); + +FIXEDARRAY_IN(const char fileHandle[6]); +FIXEDARRAY_OUTPUT(char fileHandle[6]); + +/* NWGetObjectConnectionNumbers */ +%typemap(perl5,default) (size_t * noOfReturnedConns, NWCONN_NUM * conns, size_t maxConns) +%{ $3 = 256; %} + +%typemap(perl5,in) (size_t * noOfReturnedConns, NWCONN_NUM * conns, size_t maxConns) +%{ $3 = SvUV($input); %} + +%typemap(perl5,check) (size_t * noOfReturnedConns, NWCONN_NUM * conns, size_t maxConns) %{ + New((I32)"$2_name", $2, $3, NWCONN_NUM); + $1 = &$3; +%} + +%typemap(perl5,argout) (size_t * noOfReturnedConns, NWCONN_NUM * conns, size_t maxConns) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = buildArrayReferenceFromNWConnArray(*$1,$2); + } + argvi++; +%} + +%typemap(perl5,freearg) (size_t * noOfReturnedConns, NWCONN_NUM * conns, size_t maxConns) +%{ Safefree($2); %} +/* end of NWGetObjectConnectionNumbers */ + +/* NWGetConnListFromObject */ +%typemap(perl5,ignore) (size_t * noOfReturnedConns, NWCONN_NUM * conns125) (size_t temp) %{ + $1 = &temp; + New((I32)"$2_name", $2, 125, NWCONN_NUM); +%} + +%typemap(perl5,argout) (size_t * noOfReturnedConns, NWCONN_NUM * conns125) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = buildArrayReferenceFromNWConnArray(*$1,$2); + } + argvi++; +%} + +%typemap(perl5,freearg) (size_t * noOfReturnedConns, NWCONN_NUM * conns125) +%{ Safefree($2); %} +/* end of NWGetConnListFromObject */ + +/* NWSendBroadcastMessage */ +%typemap(perl5,in) (size_t conns, NWCONN_NUM * connArray, nuint8 * deliveryStatus) { + const char *msg; + + msg = getNWConnArray($input, &$1, &$2, 65536); + if (msg) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. %s\n", msg); + XSRETURN(1); + } + New((I32)"$3_name", $3, $1, nuint8); +} + +%typemap(perl5,argout) (size_t conns, NWCONN_NUM * connArray, nuint8 * deliveryStatus) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = buildArrayReferenceFromByteArray($1,$3); + } + argvi++; +%} + +%typemap(perl5,freearg) (size_t conns, NWCONN_NUM * connArray, nuint8 * deliveryStatus) +%{ freeNWConnArray($2); + Safefree($3); %} +/* end of NWSendBroadcastMessage */ + +/* NWGetNumberNCPExtensions */ +IV_BASED_OUTPUT(nuint * __exts); +/* end of NWGetNumberNCPExtensions */ + +/* NWScanNCPExtensions */ +IV_BASED_BOTH(nuint32 * __iter); +ASCIIZ_CHAR_ARRAY(char * __extname, 32); +IV_BASED_OUTPUT(nuint8 * __majorVersion); +IV_BASED_OUTPUT(nuint8 * __minorVersion); +IV_BASED_OUTPUT(nuint8 * __revision); +FIXEDARRAY_OUTPUT(nuint8 __queryData[32]); +/* end of NWScanNCPExtensions */ + +/* NWGetBroadcastMode */ +IV_BASED_OUTPUT(nuint16 * __bcstmode); +/* end of NWGetBroadcastMode */ + +/* NWGetObjDiskRestrictions */ +IV_BASED_OUTPUT(nuint32 * restriction); +IV_BASED_OUTPUT(nuint32 * inUse); +/* end of NWGetObjDiskRestrictions */ + +IV_BASED_BOTH(nuint32 * iterhandle); + +/* NWScanVolDiskRestrictions */ +PV_BASED_OUTPUT(NWVolumeRestrictions * volInfo); +/* end of NWScanVolDiskRestrictions */ + +/* NWScanVolDiskRestrictions2 */ +PV_BASED_OUTPUT(NWVOL_RESTRICTIONS * volInfo); +/* end of NWScanVolDiskRestrictions2 */ + +/* NWGetDirSpaceLimitList */ +FIXEDARRAYLEN_OUTPUT(nuint8 * __buffer512, 512); +/* end of NWGetDirSpaceLimitList */ + +/* NWGetDirSpaceLimitList2 */ +PV_BASED_OUTPUT(NW_LIMIT_LIST * limitlist); +/* end of NWGetDirSpaceLimitList2 */ + +/* ncp_get_directory_info */ +PV_BASED_OUTPUT(DIR_SPACE_INFO * target); +/* end of ncp_get_directory_info */ + +/* NWOpenSemaphore */ +IV_BASED_OUTPUT(nuint32 * semHandle); +IV_BASED_OUTPUT(nuint16 * semOpenCount); +/* end of NWOpenSemaphore */ + +/* NWExamineSemaphore */ +IV_BASED_OUTPUT(nint16 * semValue); +/* nuint16 * semOpenCount */ +/* end of NWExamineSemaphore */ + +/* NWCCGetConnAddressLength */ +IV_BASED_OUTPUT(nuint32 * bufLen); +/* end of NWCCGetConnAddressLength */ + +/* NWCCGetConnAddress */ +%typemap(perl5,out) NWCCTranAddr_buffer buffer[32] %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + $result = sv_2mortal(newSVpvn($1, arg1->len)); + argvi++; +%} +%typemap(perl5,in) NWCCTranAddr_buffer buffer [32] (STRLEN temp) %{ + SvGETMAGIC($input); + if (!SvOK($input)) { + $1 = NULL; + } else { + $1 = SvPV($input, temp); + } +%} +%typemap(perl5,memberin) NWCCTranAddr_buffer buffer[32] %{ + if ($input) { + if (temp2 > $1_dim0) { + temp2 = $1_dim0; + } + memcpy($1, $input, temp2); + arg1->len = temp2; + } +%} + +%typemap(perl5,ignore) (nuint32 bufLen, NWCCTranAddr * tranAddr) (NWCCTranAddr temp) +%{ $1 = sizeof(temp.bufferdata); + temp.buffer = temp.bufferdata; + $2 = &temp; %} +%typemap(perl5,argout) (nuint32 bufLen, NWCCTranAddr * tranAddr) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + SV* sv; + + sv = newSVpvn((const char*)$2, sizeof(*$2)); + $result = createTiedHashReference(sv, $2_descriptor); + } + argvi++; +%} +/* end of NWCCGetConnAddress */ + +%typemap(perl5,in) const struct sockaddr* addr = char * INPUT; + +/* NWCCGetConnInfo */ +%typemap(perl5,in) (nuint info, size_t conninfolen, void * conninfoaddr) +(int type, swig_type_info * tp, +char achar[512], +UV aUV, +NWCCVersion aserver_version, +NWCCTranAddr atran_addr, +struct NWCCRootEntry aroot_entry +) %{ + tp = NULL; + type = 0; + $1 = SvUV($input); + switch ($1) { + case NWCC_INFO_BCAST_STATE: + case NWCC_INFO_MOUNT_UID: + case NWCC_INFO_SECURITY: + case NWCC_INFO_MAX_PACKET_SIZE: + case NWCC_INFO_CONN_NUMBER: + case NWCC_INFO_USER_ID: + $2 = sizeof(aUV); + $3 = &aUV; + break; + case NWCC_INFO_SERVER_NAME: + case NWCC_INFO_USER_NAME: + case NWCC_INFO_TREE_NAME: + $2 = sizeof(achar); + $3 = achar; + type = 1; + break; + case NWCC_INFO_SERVER_VERSION: + $2 = sizeof(aserver_version); + $3 = &aserver_version; + type = 2; + tp = SWIGTYPE_p_NWCCVersion; + break; + case NWCC_INFO_TRAN_ADDR: + $2 = sizeof(atran_addr); + $3 = &atran_addr; + atran_addr.buffer = atran_addr.bufferdata; + atran_addr.len = sizeof(atran_addr.bufferdata); + type = 2; + tp = SWIGTYPE_p_NWCCTranAddr; + break; + case NWCC_INFO_ROOT_ENTRY: + $2 = sizeof(aroot_entry); + $3 = &aroot_entry; + type = 2; + tp = SWIGTYPE_p_NWCCRootEntry; + break; + case NWCC_INFO_AUTHENT_STATE: + case NWCC_INFO_MOUNT_POINT: + default: + $2 = 0; + $3 = NULL; + break; + } +%} + +%typemap(perl5,argout) (nuint info, size_t conninfolen, void * conninfoaddr) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + switch (type) { + case 0: + $result = sv_2mortal(newSVuv(aUV)); + break; + case 1: + $result = sv_2mortal(newSVpv(achar, 0)); + break; + case 2: + { + SV * sv; + + sv = newSVpvn($3, $2); + $result = createTiedHashReference(sv, tp); + } + break; + default: + Perl_croak(aTHX_ "Undefined case in NWCCopts parsing\n"); + $result = &PL_sv_undef; + } + } + argvi++; +%} +/* end of NWCCGetConnInfo */ + +/* ncp_ea_ */ +%typemap(perl5,in) (const void * key, size_t keyLen) +%{ FETCHPV($input, $1, $2); %} + +%typemap(perl5,default) (void * data, size_t datalen, size_t * rdatalen) %{ + $2 = 1024; +%} +%typemap(perl5,in) (void * data, size_t datalen, size_t * rdatalen) %{ + $2 = SvUV($input); +%} +%typemap(perl5,check) (void * data, size_t datalen, size_t * rdatalen) %{ + New((I32)"$1_name", $1, $2, unsigned char); + $3 = &$2; +%} +%typemap(perl5,argout) (void * data, size_t datalen, size_t * rdatalen) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVpvn($1, $2)); + } + argvi++; +%} +%typemap(perl5,freearg) (void * data, size_t datalen, size_t * rdatalen) %{ + Safefree($1); +%} + +%typemap(perl5,in) (const unsigned char * buffer, const unsigned char * endbuf) { + STRLEN tmp; + + $1 = SvPV($input, tmp); + $2 = $1 + tmp; + arg6 = &$1; +} +%typemap(perl5,argout) (const unsigned char * buffer, const unsigned char * endbuf) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVpvn($1, $2 - $1)); + } + argvi++; +%} + +%typemap(perl5,default) (struct ncp_ea_info_level1 * info, size_t maxsize, + size_t * needsize), + (struct ncp_ea_info_level6 * info, size_t maxsize, + size_t * needsize), + (char * key, size_t maxsize, size_t * needsize) %{ + $2 = 512; +%} +%typemap(perl5,in) (struct ncp_ea_info_level1 * info, size_t maxsize, + size_t * needsize), + (struct ncp_ea_info_level6 * info, size_t maxsize, + size_t * needsize), + (char * key, size_t maxsize, size_t * needsize) %{ + $2 = SvUV($input); +%} +%typemap(perl5,check) (struct ncp_ea_info_level1 * info, size_t maxsize, + size_t * needsize), + (struct ncp_ea_info_level6 * info, size_t maxsize, + size_t * needsize), + (char * key, size_t maxsize, size_t * needsize) %{ + Newc((I32)"$1_name", $1, $2, unsigned char, $*1_type); + $3 = &$2; +%} +%typemap(perl5,argout) (struct ncp_ea_info_level1 * info, size_t maxsize, + size_t * needsize) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + SV * sv; + + sv = newSVpvn((char*)$1, $2); + $result = createTiedHashReference(sv, $1_descriptor); + } + argvi++; +%} +%typemap(perl5,argout) (struct ncp_ea_info_level6 * info, size_t maxsize, + size_t * needsize) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + SV * sv; + + sv = newSVpvn((char*)$1, $2); + $result = createTiedHashReference(sv, $1_descriptor); + } + argvi++; +%} +%typemap(perl5,argout) (char * key, size_t maxsize, size_t * needsize) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result || !$2) { + $result = &PL_sv_undef; + } else { + $result = sv_2mortal(newSVpvn($1, $2 - 1)); + } + argvi++; +%} +%typemap(perl5,freearg) (struct ncp_ea_info_level1 * info, size_t maxsize, + size_t * needsize), + (struct ncp_ea_info_level6 * info, size_t maxsize, + size_t * needsize), + (char * key, size_t maxsize, size_t * needsize) +%{ Safefree($1); %} +%typemap(perl5,ignore) const unsigned char ** next ""; +/* end of ncp_ea_ */ + +/* ncp_ea_read */ +PV_BASED_OUTPUT(struct ncp_ea_read_info * info); +/* end of ncp_ea_read */ + +/* ncp_ea_write */ +PV_BASED_OUTPUT(struct ncp_ea_write_info * info); +%typemap(perl5,in) (const void * data, size_t datalen) +%{ FETCHPV($input, $1, $2); %} +/* end of ncp_ea_write */ + +/* ncp_ea_duplicate */ +UV_BASED_OUTPUT(u_int32_t * duplicateCount); +UV_BASED_OUTPUT(u_int32_t * dataSizeDuplicated); +UV_BASED_OUTPUT(u_int32_t * keySizeDuplicated); +/* end of ncp_ea_duplicate */ + +/* nwnet.h begins here *********************************************** */ + +%typemap(perl5,ignore) NWDSContextHandle * = PTRBASED *; +%typemap(perl5,argout) NWDSContextHandle * = PTRBASED *; +%typemap(perl5,perl5out) NWDSContextHandle ""; +%typemap(perl5,perl5out) struct __NWDSContextHandle ""; +%extend __NWDSContextHandle { + __NWDSContextHandle(NWDSContextHandle ctxHandleForCopy) { + NWDSContextHandle ctx; + NWDSCCODE dserr; + + if (ctxHandleForCopy) { + dserr = NWDSDuplicateContextHandle(ctxHandleForCopy, &ctx); + } else { + dserr = NWDSCreateContextHandle(&ctx); + } + if (dserr) { + return (NWDSContextHandle)ERR_CONTEXT_CREATION; + } + return ctx; + } + ~__NWDSContextHandle() { + if (self) { + NWDSFreeContext(self); + } + } +} +%typemap(perl5,default) NWDSContextHandle ctxHandleForCopy +%{ $1 = NULL; %} +%typemap(perl5,out) struct __NWDSContextHandle * %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + $result = sv_newmortal(); + if (result != (NWDSContextHandle)ERR_CONTEXT_CREATION) { + SWIG_MakePtr($result, $1, $1_descriptor, 0); + } + argvi++; +%} +%typemap(perl5,in) NWDSContextHandle %{ + if (!SwigConvertPtr($input, (void **) &$1, $1_descriptor)) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. Expected %s", $1_descriptor->name); + } +%} +%typemap(perl5,in) NWDSContextHandle ctxToFree { + SV* inpsv; + + inpsv = SwigConvertPtr($input, (void **) &$1, $1_descriptor); + if (!inpsv) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. Expected %s", $1_descriptor->name); + } + sv_setiv(inpsv, 0); +} +/* Make sure that real definition comes AFTER all related typemaps... Otherwise some typemaps do not work */ +struct __NWDSContextHandle { }; + + +PTR_BASED_OUTPUT(pBuf_T); +%typemap(perl5,default) size_t Buf_T_size +%{ $1 = DEFAULT_MESSAGE_LEN; %} +%typemap(perl5,perl5out) struct tagBuf_T ""; +%extend tagBuf_T { + tagBuf_T(size_t Buf_T_size) { + Buf_T* buf; + NWDSCCODE dserr; + + dserr = NWDSAllocBuf(Buf_T_size, &buf); + if (dserr) { + buf = NULL; + } + return buf; + }; + ~tagBuf_T() { + if (self) { + NWDSFreeBuf(self); + } + } +} +%typemap(perl5,default) BUFT * OUTPUT (size_t buflen, int alloced, SV* inpsv) +%{ buflen = DEFAULT_MESSAGE_LEN; + alloced = 0; + inpsv = NULL; + $1 = NULL; +%} +%typemap(perl5,in) BUFT * OUTPUT +%{ + inpsv = SwigConvertPtr($input, (void **) &$1, $1_descriptor); + if (!inpsv) { + if (!SvIOK($input)) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. Expected %s or buffer length", $1_descriptor->name); + } + buflen = SvUV($input); + } else { + alloced = 1; + } +%} +%typemap(perl5,check) BUFT * OUTPUT %{ + if (!alloced) { + NWDSCCODE result; + + if (G_ARRAY != GIMME_V) { + Perl_croak(aTHX_ "You must use array return value if you are passing only buffer size into $symname"); + } + result = NWDSAllocBuf(buflen, &$1); + if (result) { + ST(0) = sv_2mortal(newSViv(result)); + XSRETURN(1); + } + } +%} +%typemap(perl5,argout) BUFT * OUTPUT %{ + if (G_ARRAY == GIMME_V) { + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + if (!alloced) { + NWDSFreeBuf($1); + } + } else if (inpsv) { + $result = sv_2mortal(newRV_inc(inpsv)); + } else { + $result = sv_newmortal(); + SWIG_MakePtr($result, $1, $1_descriptor, 0); + } + argvi++; + } +%} +%typemap(perl5,in) pBuf_T freebuf { + SV* inpsv; + + inpsv = SwigConvertPtr($input, (void **) &$1, $1_descriptor); + if (!inpsv) { + Perl_croak(aTHX_ "Type error in argument $argnum of $symname. Expected %s", $1_descriptor->name); + } + sv_setiv(inpsv, 0); +} + +#define BUFT_OUTPUT(x) \ +%typemap(perl5,default) Buf_T * x = BUFT * OUTPUT; \ +%typemap(perl5,in) Buf_T * x = BUFT * OUTPUT; \ +%typemap(perl5,check) Buf_T * x = BUFT * OUTPUT; \ +%typemap(perl5,argout) Buf_T * x = BUFT * OUTPUT; + +IV_BASED_BOTH_MN(nuint32 * iterHandle); + +UV_BASED_OUTPUT(size_t * size); +UV_BASED_OUTPUT(NWObjectCount * count); +UV_BASED_OUTPUT(NWObjectCount * valcount); +UV_BASED_OUTPUT(NWObjectCount * attrs); +UV_BASED_OUTPUT(NWObjectCount * addrcnt); +UV_BASED_OUTPUT(NWObjectCount * countObjectsSearched); /* NWDSSearch */ +UV_BASED_OUTPUT(NWObjectCount * syntaxCount); /* NWDSGetSyntaxCount */ +UV_BASED_OUTPUT(enum SYNTAX * syntaxID); +UV_BASED_OUTPUT(nuint32 * flags); /* NWDSGetDSVerInfo, ... */ +UV_BASED_OUTPUT(nuint32 * replicaType); +UV_BASED_OUTPUT(nuint32 * timev); +UV_BASED_OUTPUT(nuint32 * dsVersion); /* NWDSGetDSVerInfo */ +UV_BASED_OUTPUT(nuint32 * rootMostEntryDepth); /* NWDSGetDSVerInfo */ +UV_BASED_OUTPUT(nuint32 * privileges); /* NWDSGetEffectiveRights */ +UV_BASED_OUTPUT(nuint32 * numberOfTrees); /* NWDSReturnBlockOfAvailableTrees */ +UV_BASED_OUTPUT(nuint32 * totalUniqueTrees); /* NWDSReturnBlockOfAvailableTrees */ +UV_BASED_OUTPUT(nuint32 * OUTPUT); /* __NWGetFileServerUTCTime */ +UV_BASED_OUTPUT(nuint32 * OUTPUT2); /* __NWGetFileServerUTCTime */ +UV_BASED_OUTPUT(nuint32 * OUTPUT3); /* __NWGetFileServerUTCTime */ +UV_BASED_OUTPUT(nuint32 * OUTPUT4); /* __NWGetFileServerUTCTime */ +UV_BASED_OUTPUT(nuint32 * OUTPUT5); /* __NWGetFileServerUTCTime */ +UV_BASED_OUTPUT(nbool8 * matched); /* __NWDSCompare, NWDSCompare */ + +IV_BASED_OUTPUT(NWObjectID * ID); /* NWDSMapNameToID, NWDSResolveName */ + +IV_BASED_BOTH(nint32 * scanIndex); /* NWDSScanForAvailableTrees */ + +PV_BASED(Attr_Info_T); +PV_BASED_OUTPUT(Attr_Info_T * attrInfo); + +PV_BASED(Class_Info_T); +PV_BASED_OUTPUT(Class_Info_T * classInfo); + +PV_BASED(Object_Info_T); +PV_BASED_OUTPUT(Object_Info_T * oit); + +PV_BASED(Syntax_Info_T); +PV_BASED_OUTPUT(Syntax_Info_T * syntaxDef); + +PV_BASED_STRUCT(tagAsn1ID_T); +PV_BASED_MEMBER(Attr_Info_T, asn1ID, Asn1ID_T); +PV_BASED_MEMBER(Class_Info_T, asn1ID, Asn1ID_T); + +PV_BASED(TimeStamp_T); + +BUFT_OUTPUT(serverAddresses); +BUFT_OUTPUT(addrBuf); +BUFT_OUTPUT(objectList); +BUFT_OUTPUT(objectInfo); +BUFT_OUTPUT(privilegeInfo); +BUFT_OUTPUT(partitions); +BUFT_OUTPUT(containableClasses); +BUFT_OUTPUT(attrDefs); +BUFT_OUTPUT(classDefs); +BUFT_OUTPUT(syntaxDefs); +BUFT_OUTPUT(initBuf); + +%runtime %{ +_define nwdschar2mortalsv(str) _nwdschar2mortalsv(aTHX_ str) +static SV * _nwdschar2mortalsv(pTHX_ NWDSChar * str) { + SV * tmp; + + tmp = sv_2mortal(newSVpv(str, 0)); + SvUTF8_on(tmp); + return tmp; +} +%} + +%typemap(perl5,ignore) NWDSChar * OUTPUT ( NWDSChar tempstr[MAX_DN_BYTES] ) +%{ $1 = tempstr; %} +%typemap(perl5,argout) NWDSChar * OUTPUT %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + $result = nwdschar2mortalsv($1); + } + argvi++; +%} +%typemap(perl5,in) const NWDSChar * +%{ $1 = swig_PV_maynull_nolen($input); %} + +#define NWDSCHAR_OUTPUT(x) \ +%typemap(perl5,ignore) NWDSChar * x = NWDSChar * OUTPUT; \ +%typemap(perl5,argout) NWDSChar * x = NWDSChar * OUTPUT; + +NWDSCHAR_OUTPUT(attrName); +NWDSCHAR_OUTPUT(binderyEmulationContext); +NWDSCHAR_OUTPUT(className); +NWDSCHAR_OUTPUT(distName); +NWDSCHAR_OUTPUT(dst); +NWDSCHAR_OUTPUT(item); +NWDSCHAR_OUTPUT(myDN); +NWDSCHAR_OUTPUT(name); +NWDSCHAR_OUTPUT(partitionRoot); +NWDSCHAR_OUTPUT(serverDN); +NWDSCHAR_OUTPUT(syntaxName); +NWDSCHAR_OUTPUT(treeName); + +/* NWIsDSServer */ +%typemap(perl5,ignore) char * treename (char treename[MAX_TREE_NAME_BYTES]) %{ + treename[0] = 0; + $1 = treename; +%} +%typemap(perl5,argout) char * treename %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + $result = sv_2mortal(newSVpv($1, 0)); + argvi++; +%} +/* end of NWIsDSServer */ + +/* NWDSGetNDSStatistics */ +PV_BASED(NDSStatsInfo_T); +%typemap(perl5,ignore) (size_t statsInfoLen, NDSStatsInfo_T* statsInfo) (NDSStatsInfo_T statbuf) %{ + $2 = &statbuf; + $1 = sizeof(statbuf); +%} +%typemap(perl5,argout) (size_t statsInfoLen, NDSStatsInfo_T* statsInfo) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result) { + $result = &PL_sv_undef; + } else { + SV* s; + + s = newSVpvn((char*)$2, sizeof(*$2)); + $result = createTiedHashReference(s, $2_descriptor); + } + argvi++; +%} +/* end of NWDSGetNDSStatistics */ + +/* NWDSGetDSVerInfo */ +ASCIIZ_CHAR_ARRAY(char * sapName, 48); +WCHART_ARRAY(wchar_t * treeName, 48); +/* end of NWDSGetDSVerInfo */ + +/* NWDSGetAttrVal */ +%typemap(perl5,default) (enum SYNTAX synt, void * val) (int syntok) +%{ syntok = 0; %} +%typemap(perl5,in) (enum SYNTAX synt, void * val) %{ + SvGETMAGIC($input); + if (SvOK($input)) { + $1 = SvUV($input); + syntok = 1; + } +%} +%typemap(perl5,check) (enum SYNTAX synt, void * val) %{ + if (syntok) { + size_t len; + result = NWDSComputeAttrValSize(arg1, arg2, $1, &len); + if (result) { + ST(0) = sv_2mortal(newSViv(result)); + XSRETURN(1); + } + New((I32)"NWDSGetAttrVal_data", $2, len, unsigned char); + } else { + $1 = SYN_OCTET_STRING; + $2 = NULL; + } +%} +%typemap(perl5,argout) (enum SYNTAX synt, void * val) %{ + if (argvi >= items) { + EXTEND(sp, 1); + } + if (result || !syntok) { + $result = &PL_sv_undef; + } else { + switch ($1) { + case SYN_DIST_NAME: + case SYN_CE_STRING: + case SYN_CI_STRING: + case SYN_PR_STRING: + case SYN_NU_STRING: + case SYN_TEL_NUMBER: + case SYN_CLASS_NAME: + $result = sv_2mortal(newSVpv($2, 0)); + break; + case SYN_BOOLEAN: + $result = sv_2mortal(newSVuv(*(Boolean_T*)$2)); + break; + case SYN_INTEGER: + case SYN_INTERVAL: + $result = sv_2mortal(newSViv(*(Integer_T*)$2)); + break; + case SYN_OCTET_STRING: + case SYN_STREAM: + $result = sv_2mortal(newSVpvn(((Octet_String_T*)$2)->data, ((Octet_String_T*)$2)->length)); + break; + case SYN_COUNTER: + $result = sv_2mortal(newSViv(*(Counter_T*)$2)); + break; + case SYN_TIME: + $result = sv_2mortal(newSViv(*(Time_T*)$2)); + break; + case SYN_OBJECT_ACL: + { + Object_ACL_T* acl = $2; + HV* hv = newHV(); + newHVitemPV(hv, "protectedAttrName", acl->protectedAttrName); + newHVitemPV(hv, "subjectName", acl->subjectName); + newHVitemUV(hv, "privileges", acl->privileges); + $result = sv_2mortal(newRV_noinc((SV*)hv)); + } + break; + case SYN_BACK_LINK: + { + Back_Link_T* bl = $2; + HV* hv = newHV(); + newHVitemPV(hv, "objectName", bl->objectName); + newHVitemUV(hv, "remoteID", bl->remoteID); + $result = sv_2mortal(newRV_noinc((SV*)hv)); + } + break; + case SYN_HOLD: + { + Hold_T* h = $2; + HV* hv = newHV(); + newHVitemPV(hv, "objectName", h->objectName); + newHVitemUV(hv, "amount", h->amount); + $result = sv_2mortal(newRV_noinc((SV*)hv)); + } + break; + case SYN_TYPED_NAME: + { + Typed_Name_T* tn = $2; + HV* hv = newHV(); + newHVitemPV(hv, "objectName", tn->objectName); + newHVitemUV(hv, "level", tn->level); + newHVitemUV(hv, "interval", tn->interval); + $result = sv_2mortal(newRV_noinc((SV*)hv)); + } + break; + case SYN_TIMESTAMP: + $result = createTiedHashReference(newSVpvn($2, sizeof(TimeStamp_T)), SWIGTYPE_p_TimeStamp_T); + break; + case SYN_PATH: + { + Path_T* p = $2; + HV* hv = newHV(); + newHVitemUV(hv, "nameSpaceType", p->nameSpaceType); + newHVitemPV(hv, "volumeName", p->volumeName); + newHVitemPV(hv, "path", p->path); + $result = sv_2mortal(newRV_noinc((SV*)hv)); + } + break; + case SYN_EMAIL_ADDRESS: + { + EMail_Address_T* ea = $2; + HV* hv = newHV(); + newHVitemUV(hv, "type", ea->type); + newHVitemPV(hv, "address", ea->address); + $result = sv_2mortal(newRV_noinc((SV*)hv)); + } + break; + case SYN_PO_ADDRESS: + { + NWDSChar** po = $2; + AV* av = newAV(); + int i; + + for (i = 0; i < 6; i++) { + newAVitemPV(av, *po); + } + $result = sv_2mortal(newRV_noinc((SV*)av)); + } + break; + case SYN_CI_LIST: + { + CI_List_T* ci; + AV* av = newAV(); + + for (ci = $2; ci; ci = ci->next) { + newAVitemPV(av, ci->s); + } + $result = sv_2mortal(newRV_noinc((SV*)av)); + } + break; + case SYN_OCTET_LIST: + { + Octet_List_T* ol; + AV* av = newAV(); + + for (ol = $2; ol; ol = ol->next) { + av_push(av, newSVpvn(ol->data, ol->length)); + } + $result = sv_2mortal(newRV_noinc((SV*)av)); + } + break; + case SYN_NET_ADDRESS: + { + Net_Address_T* na = $2; + HV* hv = newHV(); + newHVitemUV(hv, "addressType", na->addressType); + hv_safe_store(hv, "address", newSVpvn(na->address, na->addressLength)); + $result = sv_2mortal(newRV_noinc((SV*)hv)); + } + break; + case SYN_FAX_NUMBER: + { + Fax_Number_T* fn = $2; + HV* hv = newHV(); + HV* hv_params = newHV(); + newHVitemPV(hv, "telephoneNumber", fn->telephoneNumber); + newHVitemUV(hv_params, "numOfBits", fn->parameters.numOfBits); + hv_safe_store(hv_params, "data", newSVpvn(fn->parameters.data, (fn->parameters.numOfBits + 7) >> 3)); + hv_safe_store(hv, "parameters", newRV_noinc((SV*)hv_params)); + $result = sv_2mortal(newRV_noinc((SV*)hv)); + } + break; + case SYN_REPLICA_POINTER: + { + Replica_Pointer_T* rp = $2; + HV* hv = newHV(); + AV* av = newAV(); + UV idx; + Net_Address_T* na; + newHVitemPV(hv, "serverName", rp->serverName); + newHVitemUV(hv, "replicaType", rp->replicaType); + newHVitemUV(hv, "replicaNumber", rp->replicaNumber); + hv_safe_store(hv, "replicaAddressHint", newRV_noinc((SV*)av)); + $result = sv_2mortal(newRV_noinc((SV*)hv)); + na = rp->replicaAddressHint; + for (idx = rp->count; idx--; na++) { + HV* hv2 = newHV(); + newHVitemUV(hv2, "addressType", na->addressType); + hv_safe_store(hv2, "address", newSVpvn(na->address, na->addressLength)); + av_push(av, newRV_noinc((SV*)hv2)); + } + } + break; + default: + $result = &PL_sv_undef; + break; + } + } + argvi++; +%} +%typemap(perl5,freearg) (enum SYNTAX synt, void * val) %{ + Safefree($2); +%} +/* end of NWDSGetAttrVal */ + +/* NWDSGetAttrValModTime */ +PV_BASED_OUTPUT(TimeStamp_T * stamp); +/* end of NWDSGetAttrValModTime */ + +/* NWDSPutAttrVal, NWDSPutAttrNameAndVal, NWDSPutAttrChangeAndVal */ +%wrapper %{ +_define getHV(inp) _getHV(aTHX_ inp) +static HV * _getHV(pTHX_ SV* inp) { + SV* r; + + SvGETMAGIC(inp); + if (!SvROK(inp)) { + Perl_croak(aTHX_ "Expected reference, but found something else"); + return NULL; + } + r = SvRV(inp); + if (SvTYPE(r) != SVt_PVHV) { + Perl_croak(aTHX_ "Expected reference to hash, but found reference to something else"); + return NULL; + } + return (HV*)r; +} + +_define checkAttrVal(inp,synt,nfree) _checkAttrVal(aTHX_ inp, synt, nfree) +static void * _checkAttrVal(pTHX_ SV* inp, enum SYNTAX synt, int * nfree) { + *nfree = 1; + switch (synt) { + case SYN_DIST_NAME: + case SYN_CE_STRING: + case SYN_CI_STRING: + case SYN_PR_STRING: + case SYN_NU_STRING: + case SYN_TEL_NUMBER: + case SYN_CLASS_NAME: + *nfree = 0; + return swig_PV_maynull_nolen(inp); + case SYN_BOOLEAN: + { + Boolean_T* b; + + New((I32)"checkAttrVal_Boolean_T", b, 1, Boolean_T); + *b = SvUV(inp); + return b; + } + case SYN_INTEGER: + case SYN_INTERVAL: + { + Integer_T* i; + + New((I32)"checkAttrVal_Integer_T", i, 1, Integer_T); + *i = SvIV(inp); + return i; + } + case SYN_OCTET_STRING: + case SYN_STREAM: + { + Octet_String_T* os; + STRLEN len; + + New((I32)"checkAttrVal_Octet_String_T", os, 1, Octet_String_T); + os->data = SvPV(inp, len); + os->length = len; + return os; + } + case SYN_COUNTER: + { + Counter_T* c; + + New((I32)"checkAttrVal_Counter_T", c, 1, Counter_T); + *c = SvIV(inp); + return c; + } + case SYN_TIME: + { + Time_T* t; + + New((I32)"checkAttrVal_Time_T", t, 1, Time_T); + *t = SvIV(inp); + return t; + } + case SYN_OBJECT_ACL: + { + Object_ACL_T* acl; + HV* hv; + + hv = getHV(inp); + New((I32)"checkAttrVal_Object_ACL_T", acl, 1, Object_ACL_T); + acl->protectedAttrName = fetchHVitemPV_nolen(hv, "protectedAttrName"); + acl->subjectName = fetchHVitemPV_nolen(hv, "subjectName"); + acl->privileges = fetchHVitemUV(hv, "privileges"); + return acl; + } + case SYN_BACK_LINK: + { + Back_Link_T* bl; + HV* hv; + + hv = getHV(inp); + New((I32)"checkAttrVal_Back_Link_T", bl, 1, Back_Link_T); + bl->objectName = fetchHVitemPV_nolen(hv, "objectName"); + bl->remoteID = fetchHVitemUV(hv, "remoteID"); + return bl; + } + case SYN_HOLD: + { + Hold_T* h; + HV* hv; + + hv = getHV(inp); + New((I32)"checkAttrVal_Hold_T", h, 1, Hold_T); + h->objectName = fetchHVitemPV_nolen(hv, "objectName"); + h->amount = fetchHVitemUV(hv, "amount"); + return h; + } + case SYN_TYPED_NAME: + { + Typed_Name_T* tn; + HV* hv; + + hv = getHV(inp); + New((I32)"checkAttrVal_Typed_Name_T", tn, 1, Typed_Name_T); + tn->objectName = fetchHVitemPV_nolen(hv, "objectName"); + tn->level = fetchHVitemUV(hv, "level"); + tn->interval = fetchHVitemUV(hv, "interval"); + return tn; + } + case SYN_TIMESTAMP: + { + TimeStamp_T* ts; + HV* hv; + + hv = getHV(inp); + New((I32)"checkAttrVal_TimeStamp_T", ts, 1, TimeStamp_T); + ts->wholeSeconds = fetchHVitemUV(hv, "wholeSeconds"); + ts->replicaNum = fetchHVitemUV(hv, "replicaNum"); + ts->eventID = fetchHVitemUV(hv, "eventID"); + return ts; + } + case SYN_PATH: + { + Path_T* p; + HV* hv; + + hv = getHV(inp); + New((I32)"checkAttrVal_Path_T", p, 1, Path_T); + p->nameSpaceType = fetchHVitemUV(hv, "nameSpaceType"); + p->volumeName = fetchHVitemPV_nolen(hv, "volumeName"); + p->path = fetchHVitemPV_nolen(hv, "path"); + return p; + } + case SYN_EMAIL_ADDRESS: + { + EMail_Address_T* ea ; + HV* hv; + + hv = getHV(inp); + New((I32)"checkAttrVal_EMail_Address_T", ea, 1, EMail_Address_T); + ea->type = fetchHVitemUV(hv, "type"); + ea->address = fetchHVitemPV_nolen(hv, "address"); + return ea; + } +#ifdef NOTDEF + case SYN_PO_ADDRESS: + { + NWDSChar** po = $2; + AV* av = newAV(); + int i; + + for (i = 0; i < 6; i++) { + newAVitemPV(av, *po); + } + $result = sv_2mortal(newRV_noinc((SV*)av)); + } + break; + case SYN_CI_LIST: + { + CI_List_T* ci; + AV* av = newAV(); + + for (ci = $2; ci; ci = ci->next) { + newAVitemPV(av, ci->s); + } + $result = sv_2mortal(newRV_noinc((SV*)av)); + } + break; + case SYN_OCTET_LIST: + { + Octet_List_T* ol; + AV* av = newAV(); + + for (ol = $2; ol; ol = ol->next) { + av_push(av, newSVpvn(ol->data, ol->length)); + } + $result = sv_2mortal(newRV_noinc((SV*)av)); + } + break; + case SYN_NET_ADDRESS: + { + Net_Address_T* na = $2; + HV* hv = newHV(); + newHVitemUV(hv, "addressType", na->addressType); + hv_safe_store(hv, "address", newSVpvn(na->address, na->addressLength)); + $result = sv_2mortal(newRV_noinc((SV*)hv)); + } + break; + case SYN_FAX_NUMBER: + { + Fax_Number_T* fn = $2; + HV* hv = newHV(); + HV* hv_params = newHV(); + newHVitemPV(hv, "telephoneNumber", fn->telephoneNumber); + newHVitemUV(hv_params, "numOfBits", fn->parameters.numOfBits); + hv_safe_store(hv_params, "data", newSVpvn(fn->parameters.data, (fn->parameters.numOfBits + 7) >> 3)); + hv_safe_store(hv, "parameters", newRV_noinc((SV*)hv_params)); + $result = sv_2mortal(newRV_noinc((SV*)hv)); + } + break; + case SYN_REPLICA_POINTER: + { + Replica_Pointer_T* rp = $2; + HV* hv = newHV(); + AV* av = newAV(); + UV idx; + Net_Address_T* na; + newHVitemPV(hv, "serverName", rp->serverName); + newHVitemUV(hv, "replicaType", rp->replicaType); + newHVitemUV(hv, "replicaNumber", rp->replicaNumber); + hv_safe_store(hv, "replicaAddressHint", newRV_noinc((SV*)av)); + $result = sv_2mortal(newRV_noinc((SV*)hv)); + na = rp->replicaAddressHint; + for (idx = rp->count; idx--; na++) { + HV* hv2 = newHV(); + newHVitemUV(hv2, "addressType", na->addressType); + hv_safe_store(hv2, "address", newSVpvn(na->address, na->addressLength)); + av_push(av, newRV_noinc((SV*)hv2)); + } + } + break; +#endif + default: + *nfree = 0; + Perl_croak(aTHX_ "Syntax #%u is not supported", synt); + return NULL; + } +} +%} + +%typemap(perl5,in) const void * attrVal_syn3 (SV* sv, int needfree), + const void * attrVal_syn4 (SV* sv, int needfree), + const void * attrVal_syn5 (SV* sv, int needfree) +%{ needfree = 0; + sv = $input; %} +%typemap(perl5,check) const void * attrVal_syn3 +%{ $1 = checkAttrVal(sv, arg3, &needfree); %} +%typemap(perl5,check) const void * attrVal_syn4 +%{ $1 = checkAttrVal(sv, arg4, &needfree); %} +%typemap(perl5,check) const void * attrVal_syn5 +%{ $1 = checkAttrVal(sv, arg5, &needfree); %} +%typemap(perl5,freearg) const void * attrVal_syn3, + const void * attrVal_syn4, + const void * attrVal_syn5 +%{ if (needfree) Safefree($1); %} + +%include ncp/kernel/ncp.h +//%include ncp/kernel/ncp_fs.h +%include ncp/ncp.h +//%include ncp/ipxlib.h +%include ncp/ncplib.h +%include ncp/nwcalls.h +%include ncp/eas.h +%include ncp/ndslib.h +%include ncp/nwnet.h +//%include ncp/nwclient.h diff --git a/contrib/swig/test.pl b/contrib/swig/test.pl new file mode 100755 index 0000000..3429bd4 --- /dev/null +++ b/contrib/swig/test.pl @@ -0,0 +1,2937 @@ +#! /usr/bin/perl -w + +use strict; +use diagnostics; +use Socket; + +use Devel::Peek; + +use ncpfs; + +my ($test_objectname, $test_objecttype, $test_objectid, $server_name, $nds_volume, $test_base); + +$test_objectname = 'ADMIN'; +$test_objecttype = 1; +$test_objectid = 0xBD000001; + +$server_name = 'VMWARE-NW6'; + +$nds_volume = 'CN=VMWARE-NW6_SYS.O=VANASOFT.C=CZ'; + +$test_base = 'C=CZ'; + +sub errorinfo($) { + my ($err) = @_; + + if ($err) { + printf "failed, %s\n", ncpfs::strnwerror($err); + return 0; + } + return 1; +} + +sub errorall($) { + my ($err) = @_; + if (errorinfo($err)) { + printf "ok\n"; + } +} + +sub checkNWpath_int { + my ($r1, $r2) = @_; + my ($ret, $stat); + + print "ParsePath (array mode): $r1"; + if (defined($r2)) { + print "($r2)"; + ($stat, $ret) = ncpfs::ncp_path_to_NW_format($r1, $r2); + } else { + ($stat, $ret) = ncpfs::ncp_path_to_NW_format($r1); + } + print " => "; + if (errorinfo($stat)) { + print "OK, ".unpack('H*', $ret)."\n"; + } + + print "ParsePath (scalar mode): $r1"; + if (defined($r2)) { + print "($r2)"; + $stat = ncpfs::ncp_path_to_NW_format($r1, $r2); + } else { + $stat = ncpfs::ncp_path_to_NW_format($r1); + } + print " => "; + if (not defined($stat)) { + print "Err\n"; + } else { + print "OK, ".unpack('H*', $stat)."\n"; + } +} + +sub checkNWpath() { + checkNWpath_int('SYS:SYSTEM/LOPATA/AHOJ.TST'); + checkNWpath_int('SYS:SYSTEM/LOPATA/AHOJ.TST', 3); + checkNWpath_int('SYS:///////////'); + checkNWpath_int('/.', 55); + checkNWpath_int('A' x 256); +} + +sub gsinfo($) { + my ($conn) = @_; + my ($err); +my ($d,$e,$f,$g,$h); + +print "OK, Connection=$conn\n"; +#($err,$d,$e,$f,$g,$h) = ncpfs::ncp_get_file_server_description_strings($conn); +#print 'Status: '.ncpfs::strnwerror($err).", desc=$d/$e/$f/$g/$h\n"; +#loginUser($conn, "IDOS", "POKUS"); +for ($e = 0; $e < 1; $e++) { + my $f; +for ($f = 0; $f < 1; $f++) { + ($err,$d) = ncpfs::ncp_get_file_server_information($conn); +# bless $d,"ncpfs::ncp_file_server_info"; + if ($err) { + printf "GetFSInfo failed with %s\n", ncpfs::strnwerror($err); + last; + } + if (1) { + print "D=$d\n"; + print 'Status: '.ncpfs::strnwerror($err).", info=$d\n"; + print 'Name1: '.$d->{'ServerName'}."\n"; + print 'Name2: '.$d->ServerName()."\n"; + print 'Name3: '.$d->ServerName."\n"; + print 'Name: '.$d->ServerName.", Version: ".$d->FileServiceVersion.".".$d->FileServiceSubVersion.".".$d->Revision."\n"; + print 'Conns: Max: '.$d->MaximumServiceConnections.", InUse: ".$d->ConnectionsInUse.", Top: ".$d->MaxConnectionsEverUsed."\n"; + print 'Max volumes: '.$d->NumberMountedVolumes.", SFT: ".$d->SFTLevel.", TTS: ".$d->TTSLevel."\n"; + print 'Version: Account: '.$d->AccountVersion.", VAP: ".$d->VAPVersion.", Queue: ".$d->QueueVersion.", Print: ".$d->PrintVersion; + print ", VCVersion: ".$d->VirtualConsoleVersion."\n"; + print 'Restriction level: '.$d->RestrictionLevel.", Bridge: ".$d->InternetBridge."\n"; + print 'Reserved: '.$d->Reserved."\n"; + + print "EE=".$d->{'ServerName'}."\n"; + + $d->ServerName('Ahoj'); + print $d->ServerName."\n"; + + print "EE=".$d->{'ServerName'}."\n"; + + print $d->ServerName('Cau')."\n"; + print $d->ServerName."\n"; + + print join(',', keys %$d); + print "\n"; + + foreach $g (keys %$d) { + my $h = $d->{$g}; + if ($g eq 'Reserved') { + $h = unpack('H*', $h); + } + printf "%30s => $h\n", $g; + } + print $d->Reserved()."\n"; + +# if (0) { +# while (($g,$h) = each(%$d)) { +# printf "%30s => $h %s %s\n", $g, 'x', $d->$g; +# } +# } + print "$d\n"; + } +} +} +} + +sub dumpObjectInfo($) { + my $z = shift; + + return sprintf "%08X | %04X | %02X | %02X | %02X | %-48s", $z->object_id(), $z->object_type(), $z->object_flags(), + $z->object_security(), $z->object_has_prop(), $z->object_name(); +} + +sub dumpBindery($$$) { + my ($conn,$type,$name) = @_; + my $m = -1; + my $err; + + print "Bindery listing\n"; + print "ObjectID | Type | Fl | Sc | Pr | Name\n"; + print "---------+------+----+----+----+--------------------\n"; + while (1) { + my $z; + my $d; + + ($err,$z) = ncpfs::ncp_scan_bindery_object($conn, $m, $type, $name); + last if ($err); + print dumpObjectInfo($z)."\n"; + $m = $z->object_id(); + } + print "---------+------+----+----+----+--------------------\n"; + print 'Error='.ncpfs::strnwerror($err)."\n\n"; +} + +sub getTime($) { + my $conn = shift; + + print "Get File Server Time\n"; + my ($err,$tm) = ncpfs::ncp_get_file_server_time($conn); + if ($err) { + print 'Error='.ncpfs::strnwerror($err)."\n\n"; + return undef; + } else { + print 'Time='.$tm.' == '.scalar gmtime($tm)."\n\n"; + return $tm; + } +} + +sub setTime($$) { + my $conn = shift; + my $tm = shift; + + print "Set File Server Time: "; + my $err = ncpfs::ncp_set_file_server_time($conn,$tm); + errorall($err); +} + +sub getConnList($$$) { + my ($conn, $type, $name) = @_; + + printf "Connection list for %s(%04X)\n", $name, $type; + my ($err, $conns) = ncpfs::ncp_get_connlist($conn, $type, $name); + if ($err) { + print 'Error='.ncpfs::strnwerror($err)."\n\n"; + return undef; + } + print "Connections: ".scalar @$conns." at $conns; list: "; + print join(',', @$conns); + print "\n\n"; +} + +sub getStationInfo($$$) { + my ($conn, $first, $last) = @_; + + print "Connection listing\n"; + print "Con | ObjectID | Type | Fl | Sc | Pr | Name | Login Time\n"; + print "----+----------+------+----+----+----+--------------------------------------------------+--------------------------\n"; + while ($first <= $last) { + my ($err, $info, $tm) = ncpfs::ncp_get_stations_logged_info($conn, $first); + if ($err) { + if ($err != $ncpfs::NWE_CONN_NUM_INVALID) { + printf "%3u | Error: %s\n", $first, ncpfs::strnwerror($err); + } + } else { + printf "%3u | %s | %s\n", $first, dumpObjectInfo($info), scalar gmtime($tm); + } + $first++; + } + print "----+----------+------+----+----+----+--------------------------------------------------+--------------------------\n"; +} + +sub getInternetAddress($$$) { + my ($conn, $first, $last) = @_; + + print "Connection addresses\n"; + while ($first <= $last) { + my ($err, $addr, $type) = ncpfs::ncp_get_internet_address($conn, $first); + if ($err) { + printf "%3u | Error=%s\n", $first, ncpfs::strnwerror($err) unless $err == $ncpfs::NWE_SERVER_FAILURE; + } else { + my ($port,$ad) = eval { my ($a,$b) = unpack_sockaddr_in($addr); $b = inet_ntoa($b); return ($a,$b); }; + if ($@) { + printf "%3u | %3u | %s\n", $first, $type, $@; + } else { + printf "%3u | %3u | %s:%u\n", $first, $type, $ad, $port; + } + } + $first++; + } +} + +sub sendMessage1($$$) { + my ($conn, $arr, $msg) = @_; + + print "Sending message (old): "; + my $err = ncpfs::ncp_send_broadcast($conn, $arr, $msg); + errorall($err); +} + +sub sendMessage2($$$) { + my ($conn, $arr, $msg) = @_; + + print "Sending message: "; + my $err = ncpfs::ncp_send_broadcast2($conn, $arr, $msg); + errorall($err); + + my $out; + ($err, $out) = ncpfs::ncp_get_broadcast_message($conn); + if ($err) { + print "Cannot fetch broadcast message: ".ncpfs::strnwerror($err)."\n"; + } else { + print "Broadcast message: >$out<\n"; + } +} + +sub getEncryptionKey($) { + my $conn = shift; + + print "Get encryption key\n"; + my ($err, $key) = ncpfs::ncp_get_encryption_key($conn); + if ($err) { + print "Error=".ncpfs::strnwerror($err)."\n"; + return undef; + } + print "OK "; + foreach $conn (split(//,$key)) { + printf " %02X", ord $conn; + } + print "\n"; + return $key; +} + +sub getBinderyObjectId($$$) { + my ($conn, $type, $name) = @_; + + print "ObjectID | Type | Fl | Sc | Pr | Name\n"; + print "---------+------+----+----+----+--------------------------------------------------\n"; + my ($err, $info) = ncpfs::ncp_get_bindery_object_id($conn, $type, $name); + if ($err) { + printf "Error: %s\n", ncpfs::strnwerror($err); + } else { + printf "%s\n", dumpObjectInfo($info); + } + print "---------+------+----+----+----+--------------------------------------------------\n"; +} + +sub getBinderyObjectName($$) { + my ($conn, $id) = @_; + + print "ObjectID | Type | Fl | Sc | Pr | Name\n"; + print "---------+------+----+----+----+--------------------------------------------------\n"; + my ($err, $info) = ncpfs::ncp_get_bindery_object_name($conn, $id); + if ($err) { + printf "Error: %s\n", ncpfs::strnwerror($err); + } else { + printf "%s\n", dumpObjectInfo($info); + } + print "---------+------+----+----+----+--------------------------------------------------\n"; +} + +sub demoBindery($$$) { + my ($conn, $type, $name) = @_; + + print "Creating $name... "; + my $err = ncpfs::ncp_create_bindery_object($conn, $type, $name, 0, 0); + if ($err) { + printf "Error: %s\n", ncpfs::strnwerror($err); + } else { + print "OK\n"; + dumpBindery($conn, $type, $name); + } + print "Changing security of $name... "; + $err = ncpfs::ncp_change_object_security($conn, $type, $name, 0x33); + if ($err) { + printf "Error: %s\n", ncpfs::strnwerror($err); + } else { + print "OK\n"; + dumpBindery($conn, $type, $name); + } + print "Create normal property... "; + $err = ncpfs::ncp_create_property($conn, $type, $name, 'MY_NORMAL_PROP', 0, 0); + if (errorinfo($err)) { + print "OK\n"; + scanProperties($conn, $type, $name, 'MY_NORMAL_PROP'); + } + print "Write property value... "; + my $pp = ncpfs::nw_property->new(); + $pp->{'more_flag'} = 0; + $pp->{'value'} = pack('a128', 'Hokus Pokus Property'); + $err = ncpfs::ncp_write_property_value($conn, $type, $name, 'MY_NORMAL_PROP', 1, $pp); + if (errorinfo($err)) { + print "OK\n"; + scanProperties($conn, $type, $name, 'MY_NORMAL_PROP'); + } + print "Deleting property... "; + $err = ncpfs::ncp_delete_property($conn, $type, $name, 'MY_NORMAL_PROP'); + if (errorinfo($err)) { + print "OK\n"; + scanProperties($conn, $type, $name, 'MY_NORMAL_PROP'); + } + print "Create set property... "; + $err = ncpfs::ncp_create_property($conn, $type, $name, 'MY_SET_PROP', 2, 0); + if (errorinfo($err)) { + print "OK\n"; + scanProperties($conn, $type, $name, 'MY_SET_PROP'); + } + print "Change property security... "; + $err = ncpfs::ncp_change_property_security($conn, $type, $name, 'MY_SET_PROP', 0x22); + if (errorinfo($err)) { + print "OK\n"; + scanProperties($conn, $type, $name, 'MY_SET_PROP'); + } + print "Add SUPERVISOR to set... "; + $err = ncpfs::ncp_add_object_to_set($conn, $type, $name, 'MY_SET_PROP', 1, 'SUPERVISOR'); + if (errorinfo($err)) { + print "OK\n"; + scanProperties($conn, $type, $name, 'MY_SET_PROP'); + } + + printf 'NWIsObjectInSet(conn, "%s", %u, "%s", "%s", %u) = ', $name, $type, 'MY_SET_PROP', $name, $type; + $err = ncpfs::NWIsObjectInSet($conn, $name, $type, 'MY_SET_PROP', $name, $type); + errorall($err); + + print "Add myself to set... "; + $err = ncpfs::ncp_add_object_to_set($conn, $type, $name, 'MY_SET_PROP', $type, $name); + if (errorinfo($err)) { + print "OK\n"; + scanProperties($conn, $type, $name, 'MY_SET_PROP'); + } + + printf 'NWIsObjectInSet(conn, "%s", %u, "%s", "%s", %u) = ', $name, $type, 'MY_SET_PROP', $name, $type; + $err = ncpfs::NWIsObjectInSet($conn, $name, $type, 'MY_SET_PROP', $name, $type); + errorall($err); + + print "Delete supervisor from set... "; + $err = ncpfs::ncp_delete_object_from_set($conn, $type, $name, 'MY_SET_PROP', 1, 'SUPERVISOR'); + if (errorinfo($err)) { + print "OK\n"; + scanProperties($conn, $type, $name, 'MY_SET_PROP'); + } + + print "Deleting property... "; + $err = ncpfs::ncp_delete_property($conn, $type, $name, 'MY_SET_PROP'); + if (errorinfo($err)) { + print "OK\n"; + scanProperties($conn, $type, $name, 'MY_SET_PROP'); + } + print "Deleting $name... "; + $err = ncpfs::ncp_delete_bindery_object($conn, $type, $name); + if (errorinfo($err)) { + print "OK\n"; + dumpBindery($conn, $type, $name); + } +} + +sub readProperty($$$$) { + my ($conn, $type, $name, $prop) = @_; + my $seg; + + print "Reading property $prop of $name...\n"; + for ($seg = 1; $seg < 256; $seg++) { + my ($err, $info) = ncpfs::ncp_read_property_value($conn, $type, $name, $seg, $prop); + print "Block #$seg:\n"; + if ($err) { + printf "Error: %s\n", ncpfs::strnwerror($err); + last; + } else { + my $k; + + foreach $k (keys %$info) { + if ($k eq 'value') { + print "Value => ".unpack("H128", $info->{$k})."\n"; + } else { + printf "%s => %s\n", $k, $info->{$k}; + } + } + if ($info->{'more_flag'} != 255) { + last; + } + } + } + print "----\n"; +} + +sub scanProperties($$$$) { + my ($conn, $type, $name, $srch) = @_; + my $id = -1; + + while (1) { + my ($err, $info) = ncpfs::ncp_scan_property($conn, $type, $name, $id, $srch); + if ($err) { + if ($err != $ncpfs::NWE_NCP_NOT_SUPPORTED) { + printf "Error: %s\n", ncpfs::strnwerror($err); + } elsif ($id == -1) { + printf "Error: No such property\n"; + } + last; + } + my $k; + foreach $k (keys %$info) { + if ($k eq 'search_instance') { + printf "%s => %08X\n", $k, $info->{$k}; + } else { + printf "%s => %s\n", $k, $info->{$k}; + } + } + readProperty($conn, $type, $name, $info->{'property_name'}); +# We must not exit when we found that more_properties_flag signals no more properties. +# If we do so, iterator handle on the server stays allocated, and so you get +# search_instance == 1 on second run, 2 on third, 3 on fourth... out of server memory +# on dozen attempt... +# last if ($info->{'more_properties_flag'} != 255); + $id = $info->{'search_instance'}; + } +} + +sub loginEncrypted($$$$) { + my ($conn, $type, $name, $pwd) = @_; + + print "Encrypted login... "; + my ($err, $key) = ncpfs::ncp_get_encryption_key($conn); + if ($err) { + printf "Cannot get encryption key: %s\n".ncpfs::strnwerror($err); + } else { + my $info; + + ($err,$info) = ncpfs::ncp_get_bindery_object_id($conn, $type, $name); + if ($err) { + printf "Get Object ID failed: %s\n", ncpfs::strnwerror($err); + } else { + $err = ncpfs::ncp_login_encrypted($conn, $info, $key, $pwd); + if ($err) { + printf "Login failed: %s\n", ncpfs::strnwerror($err); + } else { + print "OK\n"; + getConnList($conn, $type, $name); + } + } + } +} + +sub loginUnencrypted($$$$) { + my ($conn, $type, $name, $pwd) = @_; + + print "Unencrypted login... "; + my $err = ncpfs::ncp_login_unencrypted($conn, $type, $name, $pwd); + if (errorinfo($err)) { + print "OK\n"; + getConnList($conn, $type, $name); + } +} + +sub loginUser($$$) { + my ($conn, $name, $pwd) = @_; + + print "Login User... "; + my $err = ncpfs::ncp_login_user($conn, $name, $pwd); + if (errorinfo($err)) { + print "OK\n"; + getConnList($conn, 1, $name); + } +} + +sub changePasswordEncrypted($$$$$) { + my ($conn, $type, $name, $pwd, $newpwd) = @_; + + print "Encrypted Change Password... "; + my ($err, $key) = ncpfs::ncp_get_encryption_key($conn); + if ($err) { + printf "Cannot get encryption key: %s\n".ncpfs::strnwerror($err); + } else { + my $info; + + ($err,$info) = ncpfs::ncp_get_bindery_object_id($conn, $type, $name); + if ($err) { + printf "Get Object ID failed: %s\n", ncpfs::strnwerror($err); + } else { + $err = ncpfs::ncp_change_login_passwd($conn, $info, $key, $pwd, $newpwd); + if ($err) { + printf "Change failed: %s\n", ncpfs::strnwerror($err); + } else { + print "OK\n"; + } + } + } +} + +sub getVolInfos($) { + my ($conn) = @_; + my $voln; + + for ($voln = 0; $voln < 256; $voln++) { + my ($err, $info) = ncpfs::ncp_get_volume_info_with_number($conn, $voln); + if ($err) { + printf "Volume %u does not exist: %s\n", $voln, ncpfs::strnwerror($err); + } else { + if ($info->{'volume_name'} ne '') { + printf "Volume %u:\n", $voln; + foreach $err (keys %$info) { + printf "%24s => %s\n", $err, $info->{$err}; + } + } + } + } +} + +sub getVolumeNumber($$) { + my ($conn, $name) = @_; + + print "Volume $name... "; + my ($err, $voln) = ncpfs::ncp_get_volume_number($conn, $name); + if (errorinfo($err)) { + print "ok, no=$voln\n"; + } +} + +sub dodir($$$$) { + my ($conn,$dirh,$path,$path2) = @_; + + print "Doing directory listing of $dirh / $path... "; + my ($err, $dir) = ncpfs::ncp_file_search_init($conn, $dirh, $path); + if ($err) { + printf "error: %s\n", ncpfs::strnwerror($err); + } else { + print "OK\n"; + while (1) { + my $z; + my $q; + + foreach $z (keys %$dir) { + printf "%20s => %s\n", $z, $dir->{$z}; + } +# Dump($dir); + ($err, $q) = ncpfs::ncp_file_search_continue($conn, $dir, 0x4E, $path2); +# Dump($dir); + if ($err) { + printf "error: %s\n", ncpfs::strnwerror($err); + last; + } + foreach $z (keys %$q) { + my $v = $q->{$z}; + if ($z eq 'file_id') { + $v = unpack('H*', $v); + } + printf "%20s => %s\n", $z, $v; + } + } + } +} + +sub getfinfo($$$$) { + my ($conn,$dirh,$path,$name) = @_; + + print "Retrievning file info on $dirh / $path/$name... "; + my ($err, $q) = ncpfs::ncp_get_finfo($conn, $dirh, $path, $name); + if ($err) { + printf "error: %s\n", ncpfs::strnwerror($err); + } else { + print "OK\n"; + my $z; + + foreach $z (keys %$q) { + my $v = $q->{$z}; + if ($z eq 'file_id') { + $v = unpack('H*', $v); + } + printf "%20s => %s\n", $z, $v; + } + } +} + +sub optrailer($$) { + my ($conn, $q) = @_; + my $err; + + print "OK\n"; + my $z; + + foreach $z (keys %$q) { + my $v = $q->{$z}; + if ($z eq 'file_id') { + $v = unpack('H*', $v); + } + printf "%20s => %s\n", $z, $v; + } + print "Closing... "; +# $z = $q->{'file_id'}; +# Dump($z); + $err = ncpfs::ncp_close_file($conn, $q->{'file_id'}); + errorall($err); +} + +sub openclose($$$$$) { + my ($conn, $dirh, $path, $attr, $accm) = @_; + + print "Opening file $dirh / $path... "; + my ($err, $q) = ncpfs::ncp_open_file($conn, $dirh, $path, $attr, $accm); + if ($err) { + printf "error: %s\n", ncpfs::strnwerror($err); + } else { + my $ret; + + ($err, $ret) = ncpfs::ncp_read($conn, $q->{'file_id'}, 1, 1000); + if ($err < 0) { + print "Read failed: ".ncpfs::strnwerror($err)."... "; + } else { + print "Read ok: $err bytes, \"$ret\"... "; + } + ($err, $ret) = ncpfs::ncp_copy_file($conn, $q->{'file_id'}, $q->{'file_id'}, 5, 891, 12); + if ($err) { + print "Copy failed: ".ncpfs::strnwerror($err)."... "; + } else { + print "Copy ok: $ret bytes copied... "; + } + ($err, $ret) = ncpfs::ncp_read($conn, $q->{'file_id'}, 891, 5); + if ($err < 0) { + print "Read failed: ".ncpfs::strnwerror($err)."... "; + } else { + print "Read ok: $err bytes, \"$ret\"... "; + } + optrailer($conn, $q); + } + +} + +sub createnewfile($$$$) { + my ($conn, $dirh, $path, $attr) = @_; + + print "Creating new file $dirh / $path... "; + my ($err, $q) = ncpfs::ncp_create_newfile($conn, $dirh, $path, $attr); + if ($err) { + printf "error: %s\n", ncpfs::strnwerror($err); + } else { + $err = ncpfs::ncp_write($conn, $q->{'file_id'}, 0, 'Test1' x 100); + if ($err < 0) { + print "write failed: ".ncpfs::strnwerror($err)."... "; + } else { + print "written $err bytes... "; + } + optrailer($conn, $q); + } +} + +sub createfile($$$$) { + my ($conn, $dirh, $path, $attr) = @_; + + print "Creating file $dirh / $path... "; + my ($err, $q) = ncpfs::ncp_create_file($conn, $dirh, $path, $attr); + if (errorinfo($err)) { + optrailer($conn, $q); + } +} + +sub erasefile($$$$) { + my ($conn, $dirh, $path, $attr) = @_; + + print "Erasing file $dirh / $path... "; + my $err = ncpfs::ncp_erase_file($conn, $dirh, $path, $attr); + errorall($err); +} + +sub renamefile($$$$$$) { + my ($conn, $dirh, $path, $attr, $dirhn, $pathn) = @_; + + print "Renaming file $dirh / $path => $dirhn / $pathn... "; + my $err = ncpfs::ncp_rename_file($conn, $dirh, $path, $attr, $dirhn, $pathn); + errorall($err); +} + +sub dumptstee($$$) { + my ($conn, $id, $vol) = @_; + my $seq = -1; + + print "SeqNo | GrRights | Path\n"; + print "------+----------+----------------------------\n"; + while (1) { + my ($err,$path,$rights) = ncpfs::ncp_get_trustee($conn, $id, $vol, \$seq); + + if ($err) { + printf "Error: %s\n", ncpfs::strnwerror($err); + last; + } + if ($seq == 0) { + last; + } + printf "%5u | %08b | %s\n", $seq, $rights, $path; + } + print "------+----------+----------------------------\n"; +} + +sub demoFile($$$) { + my ($conn, $dirh, $path) = @_; + + print "Creating directory $dirh / $path... "; + my $err = ncpfs::ncp_create_directory($conn, $dirh, $path, 0xFF); + errorall($err); + print "Adding trustee... "; + $err = ncpfs::ncp_add_trustee($conn, $dirh, $path, 0x00000001, 0xFF); + errorall($err); + my $pathf = $path.'/TESTFILE.TST'; + createnewfile($conn, $dirh, $pathf, 0); + openclose($conn, $dirh, $pathf, 0x4E, 3); + createfile($conn, $dirh, $pathf, 0); + print "Renaming directory... "; + $err = ncpfs::ncp_rename_directory($conn, $dirh, $path, 'RENAMED.TST'); + if (errorinfo($err)) { + print "OK\n"; + $path = 'SYS:RENAMED.TST'; + $pathf = $path.'/TESTFILE.TST'; + } + renamefile($conn, $dirh, $pathf, 0, $dirh, 'SYS:NCPFSPRL.NEW'); + erasefile($conn, $dirh, 'SYS:NCPFSPRL.NEW', 0); + dumptstee($conn, 0x00000001, 0); + print "Removing trustee... "; + $err = ncpfs::ncp_delete_trustee($conn, $dirh, $path, 0x00000001); + errorall($err); + print "Removing directory $dirh / $path... "; + $err = ncpfs::ncp_delete_directory($conn, $dirh, $path); + errorall($err); +} + +sub dump_nw_info_struct($) { + my ($info) = @_; + my $key; + + foreach $key (keys %$info) { + printf "%30s => %s\n", $key, $info->{$key}; + } +} + +sub dump_nw_file_info($) { + my ($info) = @_; + my $key; + + foreach $key (keys %$info) { + my $val = $info->{$key}; + + if ($key eq 'file_handle') { + $val = unpack('H*', $val); + } + printf "%30s => %s\n", $key, $val; + } + dump_nw_info_struct($info->{'i'}); +} + +sub file_subdir_info($) { + my ($conn) = @_; + + my ($err, $info) = ncpfs::ncp_obtain_file_or_subdir_info($conn, 0, 0, $ncpfs::SA_FILES_ALL, 0x00000FFF, 0, 0, undef); + print "Obtain info: ".ncpfs::strnwerror($err)."\n"; + if (!$err) { + my $z; + + dump_nw_info_struct($info); + ($err, $z) = ncpfs::ncp_get_eff_directory_rights($conn, 0, 0, $ncpfs::SA_FILES_ALL, $info->{'volNumber'}, + $info->{'DosDirNum'}, 'LOGIN'); + if ($err) { + printf "Cannot retrieve effective rights: %s\n", ncpfs::strnwerror($err); + } else { + printf "Effective rights: 0x%04X\n", $z; + } + ($err, $info) = ncpfs::ncp_do_lookup($conn, $info, 'LOGIN'); + if ($err) { + printf "Cannot find SYS:LOGIN: %s\n", ncpfs::strnwerror($err); + } else { + my $i2; + + print "SYS:LOGIN:\n"; + dump_nw_info_struct($info); + my $seq; + + print "Searching everything in SYS:LOGIN\n"; + ($err, $seq) = ncpfs::ncp_initialize_search($conn, $info, 0); + if ($err) { + print "Initialize search failed: ".ncpfs::strnwerror($err)."\n"; + } else { + while (1) { + print "Search seq:\n"; + foreach $z (keys %$seq) { + my $v = $seq->{$z}; + if ($z eq 's') { + $v = sprintf "%02X:%08X:%08X", $v->{'volNumber'}, $v->{'dirBase'}, $v->{'sequence'}; + } + printf "%20s => %s\n", $z, $v; + } + ($err, $i2) = ncpfs::ncp_search_for_file_or_subdir($conn, $seq); + if ($err) { + print "Search failed: ".ncpfs::strnwerror($err)."\n"; + last; + } + print "Result:\n"; + dump_nw_info_struct($i2); + } + } + print "Searching files in SYS:LOGIN/NLS/ENGLISH, requesting filename only:\n"; + ($err, $seq) = ncpfs::ncp_initialize_search2($conn, $info, 0, scalar ncpfs::ncp_path_to_NW_format('NLS/ENGLISH')); + if ($err) { + print "Initialize search failed: ".ncpfs::strnwerror($err)."\n"; + } else { + while (1) { + print "Search seq:\n"; + foreach $z (keys %$seq) { + my $v = $seq->{$z}; + if ($z eq 's') { + $v = sprintf "%02X:%08X:%08X", $v->{'volNumber'}, $v->{'dirBase'}, $v->{'sequence'}; + } + printf "%20s => %s\n", $z, $v; + } + ($err, $i2) = ncpfs::ncp_search_for_file_or_subdir2($conn, 6, 1, $seq); + if ($err) { + print "Search failed: ".ncpfs::strnwerror($err)."\n"; + last; + } + print "Result:\n"; + dump_nw_info_struct($i2); + } + } + ($err, $i2) = ncpfs::ncp_do_lookup2($conn, 0, $info, 'LOGIN.EXE', 4); + if ($err) { + printf "Cannot find SYS:LOGIN/LOGIN.EXE: %s\n", ncpfs::strnwerror($err); + } else { + print "SYS:LOGIN/LOGIN.EXE:\n"; + dump_nw_info_struct($i2); + } + + ($err, $i2) = ncpfs::ncp_open_create_file_or_subdir($conn, $info, 'NCPFSTMP.TMP', + $ncpfs::OC_MODE_OPEN | $ncpfs::OC_MODE_CREATE, 0x06, + $ncpfs::AR_READ_ONLY | $ncpfs::AR_WRITE_ONLY); + if ($err) { + printf "Cannot create SYS:LOGIN/NCPFSTMP.TMP: %s\n", ncpfs::strnwerror($err); + } else { + my $q = new ncpfs::nw_modify_dos_info; + + print "$i2\n"; + dump_nw_file_info($i2); + + $q->{'lastAccessDate'} = 12345; + $err = ncpfs::ncp_modify_file_or_subdir_dos_info($conn, $i2->{'i'}, $ncpfs::DM_LAST_ACCESS_DATE, $q); + if ($err) { + printf "Modify failed: %s\n", ncpfs::strnwerror($err); + } else { + my $i3; + + print "Modify OK\n"; + ($err, $i3) = ncpfs::ncp_do_lookup2($conn, 0, $i2->{'i'}, undef, 0); + if ($err) { + printf "Cannot find updated info: %s\n", ncpfs::strnwerror($err); + } else { + print "Updated info:\n"; + dump_nw_info_struct($i3); + } + } + $err = ncpfs::ncp_close_file($conn, $i2->{'file_handle'}); + if ($err) { + print "Close failed: ".ncpfs::strnwerror($err)."\n"; + } else { + print "Close OK\n"; + } + my $tlist; + my $tl2; + + $tlist = new ncpfs::ncp_trustee_struct; + $tlist->object_id(0x00000001); + $tlist->rights(0x01FB); + $tl2 = new ncpfs::ncp_trustee_struct; + $tl2->object_id(0x010000FF); + $tl2->rights(0x001); + print "Adding trustees ... "; + $err = ncpfs::ncp_add_trustee_set($conn, $i2->{'i'}->{'volNumber'}, $i2->{'i'}->{'DosDirNum'}, -1, [ $tlist, $tl2] ); + if ($err) { + print "failed: ".ncpfs::strnwerror($err)."\n"; + } else { + print "OK\n"; + } + $err = ncpfs::ncp_ren_or_mov_file_or_subdir($conn, $info, 'NCPFSTMP.TMP', $info, 'NEWNAMEN.TMP'); + if ($err) { + print "Rename failed: ".ncpfs::strnwerror($err)."\n"; + $err = ncpfs::ncp_del_file_or_subdir($conn, $i2->{'i'}, undef); + } else { + print "Rename OK\n"; + $err = ncpfs::ncp_del_file_or_subdir($conn, $info, 'NEWNAMEN.TMP'); + } + if ($err) { + print "Delete failed: ".ncpfs::strnwerror($err)."\n"; + } else { + print "Delete OK\n"; + } + my $salvseq = new ncpfs::ncp_deleted_file; + my $dopurge = 1; + while (1) { + my $pti; + + foreach $pti (keys %$salvseq) { + my $v = $salvseq->{$pti}; + printf "%20s => %s\n", $pti, $v; + } + ($err,$pti) = ncpfs::ncp_ns_scan_salvageable_file($conn, 0, 0xFF, 0, 0, scalar ncpfs::ncp_path_to_NW_format('SYS'), $salvseq); + if ($err) { + print "Cannot scan for salvageable file: ".ncpfs::strnwerror($err)."\n"; + last; + } + print "File: $pti\n"; + if ($dopurge) { + print "Purging... "; + $err = ncpfs::ncp_ns_purge_file($conn, $salvseq); + if ($err) { + print "failed: ".ncpfs::strnwerror($err)."\n"; + } else { + print "OK\n"; + $dopurge = 0; + } + } + } + } + } + } + ($err, $info) = ncpfs::ncp_obtain_file_or_subdir_info2($conn, 0, 4, $ncpfs::SA_FILES_ALL, 0x00000FFF, 0xFF, 0, 0, scalar ncpfs::ncp_path_to_NW_format('SYS/LOGIN')); + print "Obtain info of SYS:LOGIN: ".ncpfs::strnwerror($err)."\n"; + if (!$err) { + my $z; + + dump_nw_info_struct($info); + print "Mapping it back to path... "; + ($err,$info) = ncpfs::ncp_ns_get_full_name($conn, 0, 0, 1, $info->{'volNumber'}, $info->{'DosDirNum'}, undef); + if ($err) { + print "failed: ".ncpfs::strnwerror($err)."\n"; + } else { + print "OK, $info\n"; + } + } +} + +sub dumpJobEntry($) { + my ($j) = @_; + my $z; + + foreach $z (keys %$j) { + my $v = $j->{$z}; + + if ($z eq 'ClientRecordArea' or $z eq 'JobEntryTime' or $z eq 'TargetExecTime') { + $v = unpack('H*', $v); + } + printf "%30s => %s\n", $z, $v; + } +} + +sub dumpJob($) { + my ($job) = @_; + my $z; + + print "Job info:\n"; + foreach $z (keys %$job) { + my $v = $job->{$z}; + if ($z eq 'j') { + next; + } + if ($z eq 'file_handle') { + $v = unpack('H*', $v); + } + printf "%30s => %s\n", $z, $v; + } + dumpJobEntry($job->{'j'}); +} + +sub newQJob($$) { + my ($conn, $qid) = @_; + + my $job = new ncpfs::queue_job; + + my $j = $job->{'j'}; + my $z; + +# Dump($j,100); + $j->{'TargetServerID'} = 0xFFFFFFFF; + $j->{'JobType'} = 0; + $j->{'JobTextDescription'} = 'Hokus Pokus'; + $j->{'JobFileName'} = 'Hejhula'; + + dumpJob($job); + + my $err = ncpfs::ncp_create_queue_job_and_file($conn, $qid, $job); + if ($err) { + print "Create job failed: ".ncpfs::strnwerror($err)."\n"; + } else { + dumpJob($job); + + print "Starting job... "; + $err = ncpfs::ncp_close_file_and_start_job($conn, $qid, $job); + if (errorinfo($err)) { + print "OK\n"; + return $job->{'j'}->{'JobNumber'}; + } + } + return undef; +} + +sub serviceQJob($$) { + my ($conn, $qid) = @_; + + print "Servicing job... "; + my ($err,$job) = ncpfs::ncp_service_queue_job($conn, $qid, -1); + if ($err) { + print "failed: ".ncpfs::strnwerror($err)."\n"; + return undef; + } else { + my $j2; + + print "OK\n"; + + dumpJob($job); + ($err, $j2) = ncpfs::ncp_get_queue_job_info($conn, $qid, $job->{'j'}->{'JobNumber'}); + if ($err) { + print "Get info failed.\n"; + } else { + dumpJobEntry($j2); + } + return $job->{'j'}->{'JobNumber'}; + } +} + +sub qLength($$) { + my ($conn, $qid) = @_; + + print "Queue length... "; + my ($err, $cnt) = ncpfs::ncp_get_queue_length($conn, $qid); + if (errorinfo($err)) { + print "OK, $cnt jobs.\n"; + } + my $jl; + print "Queue jobs... "; + ($err, $cnt, $jl) = ncpfs::ncp_get_queue_job_ids($conn, $qid, 0); + if (errorinfo($err)) { + my $z; + printf "OK, %u jobs, %u returned.\n", $cnt, scalar @$jl; + foreach $z (@$jl) { + print "... $z\n"; + } + } +} + + +sub queueTest($) { + my ($conn) = @_; + my $err; + my $info; + my $qid; + + $err = ncpfs::ncp_create_bindery_object($conn, 3, 'NCPFSTESTQUEUE', 0, 0); + if ($err) { + print "Create queue failed: ".ncpfs::strnwerror($err)."\n"; + } + ($err, $info) = ncpfs::ncp_get_bindery_object_id($conn, 3, 'NCPFSTESTQUEUE'); + if ($err) { + print "Test queue not found: ".ncpfs::strnwerror($err)."\n"; + return undef; + } + $qid = $info->{'object_id'}; + printf "Test queue has id 0x%08X\n", $qid; + $err = ncpfs::ncp_add_object_to_set($conn, 3, 'NCPFSTESTQUEUE', 'Q_SERVERS', $test_objecttype, $test_objectname); + if ($err) { + printf "Adding $test_objectname to Q_SERVERS: Error: %s\n", ncpfs::strnwerror($err); + } + $err = ncpfs::ncp_add_object_to_set($conn, 3, 'NCPFSTESTQUEUE', 'Q_OPERATORS', $test_objecttype, $test_objectname); + if ($err) { + printf "Adding $test_objectname to Q_OPERATORS: Error: %s\n", ncpfs::strnwerror($err); + } + my $pp = ncpfs::nw_property->new(); + $pp->{'more_flag'} = 0; + $pp->{'value'} = pack('a128', 'SYS:LOGIN/NLS/ENGLISH'); + $err = ncpfs::ncp_write_property_value($conn, 3, 'NCPFSTESTQUEUE', 'Q_DIRECTORY', 1, $pp); + if ($err) { + printf "Setting Q_DIRECTORY: Error: %s\n", ncpfs::strnwerror($err); + } + $err = ncpfs::ncp_create_property($conn, 3, 'NCPFSTESTQUEUE', 'Q_USERS', 2, 0); + if ($err) { + printf "Creating Q_USERS: Error: %s\n", ncpfs::strnwerror($err); + } + $err = ncpfs::ncp_add_object_to_set($conn, 3, 'NCPFSTESTQUEUE', 'Q_USERS', $test_objecttype, $test_objectname); + if ($err) { + printf "Adding $test_objectname to Q_USERS: Error: %s\n", ncpfs::strnwerror($err); + } + + my $job; + my $j; + my $z; + + $j = newQJob($conn, $qid); + if (defined($j)) { + print "Removing job... "; + $err = ncpfs::NWRemoveJobFromQueue2($conn, $qid, $j); + errorall($err); + } + + newQJob($conn, $qid); + + print "Attaching to queue... "; + $err = ncpfs::ncp_attach_to_queue($conn, $qid); + if (errorinfo($err)) { + print "OK\n"; + + qLength($conn, $qid); + + my $n = serviceQJob($conn, $qid); + if (defined($n)) { + print "Aborting servicing job... "; + $err = ncpfs::ncp_abort_servicing_job($conn, $qid, $n); + errorall($err); + } + + qLength($conn, $qid); + + newQJob($conn, $qid); + + $n = serviceQJob($conn, $qid); + if (defined($n)) { + print "Finish servicing job... "; + $err = ncpfs::ncp_finish_servicing_job($conn, $qid, $n, 5); + errorall($err); + } + print "Detaching from queue... "; + $err = ncpfs::ncp_detach_from_queue($conn, $qid); + errorall($err); + } + +# $err = ncpfs::ncp_delete_bindery_object($conn, 3, 'NCPFSTESTQUEUE'); + $err = 0; + if ($err) { + print "Queue removing failed: ".ncpfs::strnwerror($err)."\n"; + } else { + print "Queue removed\n"; + } +} + +sub file2_demo($) { + my ($conn) = @_; + + my $dir = new ncpfs::nw_info_struct; + $dir->volNumber(0); + $dir->DosDirNum(0); + + print "Allocating short dir handle for SYS: ... "; + my ($err, $hnd) = ncpfs::ncp_alloc_short_dir_handle($conn, $dir, 1); + if ($err) { + print "failed: ".ncpfs::strnwerror($err)."\n"; + } else { + print "OK, $hnd\n"; + + print "Releasing short dir handle for SYS: ... "; + $err = ncpfs::ncp_dealloc_dir_handle($conn, $hnd); + errorall($err); + } + + print "Allocating short dir handle for SYS: ... "; + ($err, $hnd) = ncpfs::ncp_alloc_short_dir_handle2($conn, 0, $dir, 1); + if (errorinfo($err)) { + print "OK, $hnd\n"; + + print "Releasing short dir handle for SYS: ... "; + $err = ncpfs::ncp_dealloc_dir_handle($conn, $hnd); + errorall($err); + } +} + +sub connInfo($) { + my ($conn) = @_; + + print "Conn type: ".ncpfs::ncp_get_conn_type($conn)."\n"; + print "Conn number: ".ncpfs::ncp_get_conn_number($conn)."\n"; + my ($err, $ttl) = ncpfs::ncp_get_dentry_ttl($conn); + print "Directory Cache TTL: "; + if ($err) { + print "??? (".ncpfs::strnwerror($err).")\n"; + } else { + printf "%u ms\n", $ttl * 10; + } +} + +sub vollist($$) { + my ($conn, $nspace) = @_; + + print "Looking for volumes with ".ncpfs::ncp_namespace_to_str($nspace)." namespace... "; + my ($err, $h) = ncpfs::ncp_volume_list_init($conn, $nspace, 1); + if (errorinfo($err)) { + print "ok, with handle $h\n"; + while (1) { + my ($id, $nm); + + ($err, $id, $nm) = ncpfs::ncp_volume_list_next($h); + if ($err) { + print "No next entry: ".ncpfs::strnwerror($err)."\n"; + last; + } + printf "[%u] %s\n", $id, $nm; + } + $err = ncpfs::ncp_volume_list_end($h); + if ($err) { + print "Could not close iteration handle: ".ncpfs::strnwerror($err)."\n"; + } + } +} + +sub cnvtValue($) { + my ($val) = @_; + +## $val =~ s/([\000-\037\200-\237\\])/sprintf "\\%02X", ord($1)/eg; + $val =~ s/([\000-\037\177-\377\\])/sprintf "\\%02X", ord($1)/eg; + return $val; +} + +sub dumpInside($$) { + my ($spc, $val) = @_; + if (UNIVERSAL::isa($val, 'HASH')) { + &dumpInsideHash($spc, $val); + } elsif (UNIVERSAL::isa($val, 'ARRAY')) { + &dumpInsideArray($spc, $val); + } +} + +sub dumpInsideArray($$) { + my ($spc, $a) = @_; + my ($val); + my ($l) = (0); + +# Dump($a); + foreach $val (@$a) { + printf "%s[%u] => %s\n", $spc, $l, cnvtValue($val); + dumpInside($spc.' ', $val); + $l++; + } +# pop(@$a); READONLY +# $a->[4] = 123; +# push(@$a, 21, 22, 23); +# shift @$a; READONLY +# unshift @$a, 11, 22; +# undef @$a; READONLY +# $#$a = 111; +# @$a = (); READONLY +# splice @$a, 5, 2, 11, 12; +# delete $a->[4]; READONLY +# exists $a->[4]; +# untie @$a, 333; +} + +sub dumpInsideHash($$) { + my ($spc, $h) = @_; + my ($k); + + foreach $k (keys %$h) { + my $val = $h->{$k}; + printf "%s%s => %s\n", $spc, $k, cnvtValue($val); + dumpInside($spc.' ', $val); + } +} + +sub newnsdemo($) { + my ($conn) = @_; + + print "Obtaining info about SYS:LOGIN/NLS/ENGLISH... "; + my ($err, $h) = ncpfs::ncp_ns_obtain_entry_info($conn, $ncpfs::NW_NS_DOS, $ncpfs::SA_ALL, + $ncpfs::NCP_DIRSTYLE_NOHANDLE, 0, 0, scalar ncpfs::ncp_path_to_NW_format('SYS:LOGIN/NLS/ENGLISH'), + $ncpfs::NW_NS_OS2, 0x81FFFFFF, $ncpfs::NW_INFO_STRUCT2); + if (errorinfo($err)) { + print "ok, returned structure $h\n"; + dumpInsideHash('', $h); +# $h->{'ReferenceID'} = 1233; +# $h->{'LastAccess'}->{'Time'} = 1233; +# $h->{'reserved2'} = 'ABCD1234' x 64; +# dumpInsideHash('', $h); + my ($fh, $oca, $occ); + + print "Creating TMPFILE.TMP... "; + ($err, $h, $oca, $occ, $fh) = ncpfs::ncp_ns_open_create_entry($conn, $ncpfs::NW_NS_OS2, $ncpfs::SA_ALL, + $ncpfs::NCP_DIRSTYLE_DIRBASE, $h->{'Directory'}->{'volNumber'}, $h->{'Directory'}->{'dirEntNum'}, + scalar ncpfs::ncp_path_to_NW_format('TMPFILE.TMP'), -1, $ncpfs::OC_MODE_OPEN | $ncpfs::OC_MODE_CREATE, + 0x06, $ncpfs::AR_READ_ONLY | $ncpfs::AR_WRITE_ONLY, 0x81FFFFFF, + $ncpfs::NW_INFO_STRUCT2); + if (errorinfo($err)) { + print "ok, returned structure $h, action $oca, callback $occ\n"; + dumpInsideHash('', $h); + print 'File handle: '.unpack('H*', $fh)."\n"; + + print 'Writting... '; + $err = ncpfs::ncp_write($conn, $fh, 0, 'Test1' x 100); + if ($err < 0) { + print "failed: ".ncpfs::strnwerror($err)."... "; + } else { + print "OK, $err bytes written... "; + } + + print 'Closing file '.unpack('H*', $fh).'... '; + $err = ncpfs::ncp_close_file($conn, $fh); + errorall($err); + print 'Refetching file info... '; + my $nh; + ($err, $nh) = ncpfs::ncp_ns_obtain_entry_info($conn, $ncpfs::NW_NS_OS2, $ncpfs::SA_ALL, + $ncpfs::NCP_DIRSTYLE_DIRBASE, $h->{'Directory'}->{'volNumber'}, $h->{'Directory'}->{'dirEntNum'}, + undef, $ncpfs::NW_NS_OS2, 0x81FFFFFF, $ncpfs::NW_INFO_STRUCT2); + if (errorinfo($err)) { + print "ok, returned structure $nh\n"; + dumpInsideHash('', $nh); + } + print 'Setting DOS info... '; + my $ns = new ncpfs::ncp_dos_info; + $ns->{'Attributes'} = 0x26; + $ns->{'Modify'}->{'Date'} = 0x1111; + $ns->{'Modify'}->{'Time'} = 0xE0E0; + $ns->{'Modify'}->{'ID'} = 1; + $ns->{'Rights'}->{'Grant'} = 0x0000; + $ns->{'Rights'}->{'Revoke'} = 0xFFFF; + dumpInsideHash('', $ns); +# my $qq = $ns->{'Modify'}; +# print $qq; +# Dump($qq); + $err = ncpfs::ncp_ns_modify_entry_dos_info($conn, $ncpfs::NW_NS_OS2, $ncpfs::SA_ALL, + $ncpfs::NCP_DIRSTYLE_DIRBASE, $h->{'Directory'}->{'volNumber'}, $h->{'Directory'}->{'dirEntNum'}, + undef, $ncpfs::DM_ATTRIBUTES | $ncpfs::DM_MODIFY_DATE | $ncpfs::DM_MODIFY_TIME | $ncpfs::DM_MODIFIER_ID | + $ncpfs::DM_INHERITED_RIGHTS_MASK, $ns); + if (errorinfo($err)) { + print 'ok, refetching file info... '; + ($err, $nh) = ncpfs::ncp_ns_obtain_entry_info($conn, $ncpfs::NW_NS_OS2, $ncpfs::SA_ALL, + $ncpfs::NCP_DIRSTYLE_DIRBASE, $h->{'Directory'}->{'volNumber'}, $h->{'Directory'}->{'dirEntNum'}, + undef, $ncpfs::NW_NS_OS2, 0x81FFFFFF, $ncpfs::NW_INFO_STRUCT2); + if (errorinfo($err)) { + print "ok, returned structure $nh\n"; + dumpInsideHash('', $nh); + } + } + } + } +} + +sub dumpnsinfo($$$$) { + my ($conn, $ns, $vol, $dirent) = @_; + my ($err,$nspc, $volnm,$lay); + + $nspc = ncpfs::ncp_namespace_to_str($ns); + ($err, $volnm) = ncpfs::ncp_ns_get_full_name($conn, 0, 0, 1, $vol, $dirent, undef); + if ($err) { + $volnm = ''; + } + printf 'Obtaining %s namespace layout from %s... ', $nspc, $volnm; + ($err, $lay) = ncpfs::ncp_ns_obtain_namespace_info_format($conn, $vol, $ns, $ncpfs::NCP_NAMESPACE_FORMAT); + if ($err) { + print 'failed '.ncpfs::strnwerror($err)."\n"; + return undef; + } + print "ok\n"; + dumpInsideHash('',$lay); + my ($i,$inf); + for ($i = 0; $i < 32; $i++) { + printf 'Obtaining %s namespace info %u from %s ... ', $nspc, $i, $volnm; + ($err, $inf) = ncpfs::ncp_ns_obtain_entry_namespace_info($conn, $ns, $vol, $dirent, $ns, 1 << $i, 1024); + if (errorinfo($err)) { +# Dump($inf); + print unpack('H*', $inf)."\n"; + } + } + printf 'Obtaining %s namespace info from %s ... ', $nspc, $volnm; + ($err,$inf) = ncpfs::ncp_ns_obtain_entry_namespace_info($conn, $ns, $vol, $dirent, $ns, 0xFFFFFFFF, 1024); + if (errorinfo($err)) { + print "ok\n"; + for ($i = 0; $i < 32; $i++) { + my $itm; + + ($err,$itm) = ncpfs::ncp_ns_get_namespace_info_element($lay, 0xFFFFFFFF, $inf, $i); + if (not $err) { + printf 'Item %u: %s'."\n", $i, unpack('H*', $itm); + } + } + } +} + +sub namespacedemo($) { + my ($conn) = @_; + + dumpnsinfo($conn, 0, 0, 0); + dumpnsinfo($conn, 1, 0, 0); + dumpnsinfo($conn, 2, 0, 0); + dumpnsinfo($conn, 3, 0, 0); + dumpnsinfo($conn, 4, 0, 0); + dumpnsinfo($conn, 5, 0, 0); + print 'Changing attributes through DOS namespace info on SYS: ... '; + my ($err) = ncpfs::ncp_ns_modify_entry_namespace_info($conn, $ncpfs::NW_NS_DOS, 0, 0, $ncpfs::NW_NS_DOS, 0x0002, pack('H*', '16000000')); + errorall($err); +} + +sub ns3demo($) { + my ($conn) = @_; + + print 'Allocating short directory handle for SYS: ... '; + my ($err, $handle, $vol) = ncpfs::ncp_ns_alloc_short_dir_handle($conn, $ncpfs::NW_NS_DOS, $ncpfs::NCP_DIRSTYLE_DIRBASE, + 0, 0, undef, $ncpfs::NCP_ALLOC_TEMPORARY); + if (errorinfo($err)) { + print "ok, handle=$handle, volume=$vol\n"; + my ($info); + + print 'Obtaining info about LOGIN directory... '; + ($err,$info) = ncpfs::ncp_ns_obtain_entry_info($conn, $ncpfs::NW_NS_DOS, $ncpfs::SA_ALL, + $ncpfs::NCP_DIRSTYLE_HANDLE, 0, $handle, scalar ncpfs::ncp_path_to_NW_format('LOGIN'), + $ncpfs::NW_NS_DOS, 0x81FFFFFF, $ncpfs::NW_INFO_STRUCT3); + if (errorinfo($err)) { + print "ok, $info\n"; + dumpInsideHash('', $info); + my $i; + for ($i = 0; $i < 32; $i++) { + my ($v); + printf 'Field %u has size ',$i; + ($err,$v) = ncpfs::ncp_ns_extract_info_field_size($info, $i); + if ($err) { + print ''."\n"; + } else { + print "$v bytes\n"; + } + } + } + print 'Deallocating ... '; + $err = ncpfs::ncp_dealloc_dir_handle($conn, $handle); + errorall($err); + } + +} + +sub convdemo() { + print "Rights 0xF0 => ".ncpfs::ncp_perms_to_str(0xF0)."\n"; + print "Namespace 4 => ".ncpfs::ncp_namespace_to_str(4)."\n"; + my ($err,$z) = ncpfs::ncp_str_to_perms('[RWC]'); + if ($err) { + print "Cannot convert [RWC] to rights: ".ncpfs::strnwerror($err)."\n"; + } else { + printf "[RWC] => %04X\n", $z; + } +} + +sub fidinfo($) { + my ($conn) = @_; + + my ($fid) = ncpfs::ncp_get_fid($conn); + print "FID=$fid\n"; + my ($err, $uid) = ncpfs::ncp_get_mount_uid($fid); + if ($err) { + print "Cannot retrieve mount uid: ".ncpfs::strnwerror($err)."\n"; + } else { + print "Mount uid is $uid\n"; + } +} + +sub nwparsepath($) { + my ($path) = @_; + print "NWParsePath(\"$path\")... "; + my ($err,$server,$nconn,$volume,$volpath) = ncpfs::NWParsePath($path); + if ($err) { + printf "error: %s\n", ncpfs::strnwerror($err); + } elsif (defined($nconn)) { + print "remote, server=$server, conn=$nconn, volume=$volume, path=$volpath\n"; + ncpfs::NWCCCloseConn($nconn); + } else { + print "local, path=$volpath\n"; + } +} + +sub nwcallsdemo($) { + my ($conn) = @_; + + print 'NWCallsInit()... '; + my ($err) = ncpfs::NWCallsInit(undef, undef); + errorall($err); + + my ($name, $type); + print 'NWGetObjectName(conn, 1)... '; + ($err, $name, $type) = ncpfs::NWGetObjectName($conn, 1); + if (errorinfo($err)) { + printf "ok, %s(0x%04X)\n", $name, $type; + } + + print 'NWGetObjectID(conn, SUPERVISOR, 1)... '; + ($err, $type) = ncpfs::NWGetObjectID($conn, 'SUPERVISOR', 1); + if (errorinfo($err)) { + printf "ok, 0x%08X\n", $type; + } + + my ($level, $id); + print 'NWGetBinderyAccessLevel(conn)... '; + ($err, $level, $id) = ncpfs::NWGetBinderyAccessLevel($conn); + if (errorinfo($err)) { + printf "ok, level=0x%02X, id=0x%08X\n", $level, $id; + } + + print 'NWVerifyObjectPassword... '; + $err = ncpfs::NWVerifyObjectPassword($conn, 'SUPERVISOR', 1, 'AAAAA'); + errorall($err); + + my ($info); + print 'NWGetNSEntryInfo... '; + ($err, $info) = ncpfs::NWGetNSEntryInfo($conn, 0, 'SYS:LOGIN', + $ncpfs::NW_NS_DOS, $ncpfs::NW_NS_LONG, 0x8006, 0xFFF); + if (errorinfo($err)) { + print "ok, $info\n"; + dumpInsideHash(' ', $info); + } + + nwparsepath("/nw6/sys/login"); + nwparsepath("/tmp"); + print 'ncp_get_volume_name(conn,0) = '; + ($err,$info) = ncpfs::ncp_get_volume_name($conn, 0); + if (errorinfo($err)) { + print "ok, $info\n"; + } + + print 'NWGetVolumeNumber(conn, "SYS") = '; + ($err,$info) = ncpfs::NWGetVolumeNumber($conn, 'SYS'); + if (errorinfo($err)) { + print "ok, $info\n"; + } + + print 'NWGetVolumeName(conn, 0) = '; + ($err,$info) = ncpfs::NWGetVolumeName($conn, 0); + if (errorinfo($err)) { + print "ok, $info\n"; + } + + print 'NWGetNSLoadedList(conn, 0) = '; + ($err,$info) = ncpfs::NWGetNSLoadedList($conn, 0); + if (errorinfo($err)) { + printf "ok, $info, %u items\n", scalar @$info; + dumpInsideArray(' ', $info); + } + my ($cnum); + my ($wl_vol, $wl_dir); + for ($cnum = 1; $cnum < 10; $cnum++) { + my ($ctrl, $of, $n); + + $ctrl = new ncpfs::OPEN_FILE_CONN_CTRL; + $n = 0; + while (1) { + ($err,$of) = ncpfs::NWScanOpenFilesByConn2($conn, $cnum, \$n, $ctrl); + if ($err) { + last; + } + print "Ctrl:\n"; + dumpInsideHash(' ', $ctrl); + print "[$n] $of\n"; + dumpInsideHash(' ', $of); + $wl_vol = $of->{'volNumber'}; + $wl_dir = $of->{'dirEntry'}; + } + printf "Scan open files by conn terminated: %s\n", ncpfs::strnwerror($err); + } + if (defined($wl_vol)) { + my ($ctrl, $of, $n); + + $ctrl = new ncpfs::CONNS_USING_FILE; + $n = 0; + while (1) { + ($err,$of) = ncpfs::ncp_ns_scan_connections_using_file($conn, + $wl_vol, $wl_dir, 0, \$n, $ctrl); + if ($err) { + last; + } + print "Ctrl:\n"; + dumpInsideHash(' ', $ctrl); + print "[$n] $of\n"; + dumpInsideHash(' ', $of); + } + printf "Scan connections using file terminated: %s\n", ncpfs::strnwerror($err); + } + if (defined($wl_vol)) { + my ($ctrl, $of, $n); + + $ctrl = new ncpfs::PHYSICAL_LOCKS; + $n = 0; + while (1) { + ($err,$of) = ncpfs::ncp_ns_scan_physical_locks_by_file($conn, + $wl_vol, $wl_dir, 0, \$n, $ctrl); + if ($err) { + last; + } + print "Ctrl:\n"; + dumpInsideHash(' ', $ctrl); + print "[$n] $of\n"; + dumpInsideHash(' ', $of); + } + printf "Scan physical locks by file terminated: %s\n", ncpfs::strnwerror($err); + } +} + +sub nwbindry($) { + my ($conn) = @_; + my ($err); + + print 'NWCloseBindery(conn) = '; + $err = ncpfs::NWCloseBindery($conn); + errorall($err); + + print 'NWOpenBindery(conn) = '; + $err = ncpfs::NWOpenBindery($conn); + errorall($err); + + if (0) { + print 'NWDownFileServer(conn,0) = '; + $err = ncpfs::NWDownFileServer($conn,0); + errorall($err); + } + print 'NWDisableFileServerLogin(conn) = '; + $err = ncpfs::NWDisableFileServerLogin($conn); + errorall($err); + + print 'NWEnableFileServerLogin(conn) = '; + $err = ncpfs::NWEnableFileServerLogin($conn); + errorall($err); + + print 'NWDisableTTS(conn) = '; + $err = ncpfs::NWDisableTTS($conn); + errorall($err); + + print 'NWEnableTTS(conn) = '; + $err = ncpfs::NWEnableTTS($conn); + errorall($err); +} + +sub nwrpc($) { + my ($conn) = @_; + my ($err, $vol); + + print 'NWSMLoadNLM(conn, "MONITOR.NLM") = '; + $err = ncpfs::NWSMLoadNLM($conn, 'MONITOR.NLM'); + errorall($err); + + print 'NWSMUnloadNLM(conn, "MONITOR") = '; + $err = ncpfs::NWSMUnloadNLM($conn, 'MONITOR'); + errorall($err); + + print 'NWSMDismountVolumeByName(conn, "SYS") = '; + $err = ncpfs::NWSMDismountVolumeByName($conn, 'SYS'); + errorall($err); + + print 'NWSMMountVolume(conn, "SYS") = '; + ($err, $vol) = ncpfs::NWSMMountVolume($conn, 'SYS'); + if (errorinfo($err)) { + printf "ok, volume number %u\n", $vol; + printf 'NWSMDismountVolumeByNumber(conn, %u) = ', $vol; + $err = ncpfs::NWSMDismountVolumeByNumber($conn, $vol); + if (errorinfo($err)) { + print "ok, remounting back: "; + ($err,$vol) = ncpfs::NWSMMountVolume($conn, 'SYS'); + if (errorinfo($err)) { + printf "ok, volume number %u\n", $vol; + } + } + } + print 'NWSMExecuteNCFFile(conn,"BSTART.NCF") = '; + $err = ncpfs::NWSMExecuteNCFFile($conn, 'BSTART.NCF'); + errorall($err); +} + +sub nwsmset($) { + my ($conn) = @_; + my ($err); + + print 'NWSMSetDynamicCmdStrValue(conn, "DSTRACE", "*.") = '; + $err = ncpfs::NWSMSetDynamicCmdStrValue($conn, 'DSTRACE', '*.'); + errorall($err); + + print 'NWSMSetDynamicCmdIntValue(conn, "Maximum transactions", 9999) = '; + $err = ncpfs::NWSMSetDynamicCmdIntValue($conn, 'Maximum transactions', 9999); + errorall($err); +} + +sub nwconnsop($) { + my ($conn) = @_; + my ($err, $cnum, $srvname, $srvver, $connlist, $status, $bcstmode); + + print 'NWGetConnectionNumber(conn) = '; + ($err, $cnum) = ncpfs::NWGetConnectionNumber($conn); + if (errorinfo($err)) { + printf "ok, connection %u\n", $cnum; + } + print 'NWGetFileServerName(conn) = '; + ($err, $srvname) = ncpfs::NWGetFileServerName($conn); + if (errorinfo($err)) { + printf "ok, name %s\n", $srvname; + } + print 'NWGetFileServerVersion(conn) = '; + ($err, $srvver) = ncpfs::NWGetFileServerVersion($conn); + if (errorinfo($err)) { + printf "ok, version %u.%02u\n", $srvver / 256, $srvver % 256; + } + printf 'NWGetObjectConnectionNumbers(conn, "%s", %u) = ', $test_objectname, $test_objecttype; + ($err, $connlist) = ncpfs::NWGetObjectConnectionNumbers($conn, $test_objectname, $test_objecttype); + if (errorinfo($err)) { + print "ok, $connlist\n"; + dumpInsideArray(' ', $connlist); + } + printf 'NWGetConnListFromObject(conn, 0x%08X, 0) = ', $test_objectid; + ($err, $connlist) = ncpfs::NWGetConnListFromObject($conn, $test_objectid, 0); + if (errorinfo($err)) { + print "ok, $connlist\n"; + dumpInsideArray(' ', $connlist); + } + print 'NWDisableBroadcasts(conn) = '; + $err = ncpfs::NWDisableBroadcasts($conn); + errorall($err); + + print 'NWSendBroadcastMessage(conn, "Test", $connlist) = '; + ($err, $status) = ncpfs::NWSendBroadcastMessage($conn, "Test", $connlist); + if (errorinfo($err)) { + print "ok, $status\n"; + dumpInsideArray(' ', $status); + } + print 'NWEnableBroadcasts(conn) = '; + $err = ncpfs::NWEnableBroadcasts($conn); + errorall($err); + print 'NWGetBroadcastMode(conn) = '; + ($err, $bcstmode) = ncpfs::NWGetBroadcastMode($conn); + if (errorinfo($err)) { + printf "ok, mode %u\n", $bcstmode; + printf 'NWSetBroadcastMode(conn, %u) = ', $bcstmode; + $err = ncpfs::NWSetBroadcastMode($conn, $bcstmode); + errorall($err); + } +} + +sub nwncpext($) { + my ($conn) = @_; + my ($err, $cnt, $iter); + + print 'NWGetNumberNCPExtensions(conn) = '; + ($err, $cnt) = ncpfs::NWGetNumberNCPExtensions($conn); + if (errorinfo($err)) { + printf "ok, %u extensions loaded\n", $cnt; + } + $iter = -1; + while (1) { + my ($name,$maj,$min,$rev,$qdata); + + printf 'NWScanNCPExtensions(conn, \%u) = ', $iter; + ($err, $name, $maj, $min, $rev, $qdata) = + ncpfs::NWScanNCPExtensions($conn, \$iter); + if ($err) { + last; + } + printf "ok, id=0x%08X, ver=%u.%u.%u,\nname=%s,\nqdata=%s\n", + $iter, $maj, $min, $rev, $name, unpack('H*', $qdata); + } + printf "failed, %s\n", ncpfs::strnwerror($err); +} + +sub openbytran($) { + my ($addr) = @_; + my ($err, $nconn); + + print 'NWCCOpenConnByAddr(addr, $ncpfs::NWCC_OPEN_PRIVATE, $ncpfs::NWCC_RESERVED) = '; + ($err, $nconn) = ncpfs::NWCCOpenConnByAddr($addr, + $ncpfs::NWCC_OPEN_PRIVATE, $ncpfs::NWCC_RESERVED); + if (errorinfo($err)) { + printf "ok, conn2=$nconn\n"; + + print 'NWCCCloseConn(conn2) = '; + $err = ncpfs::NWCCCloseConn($nconn); + errorall($err); + } +} + +sub buildipx($$$) { + my ($net, $node, $sock) = @_; + + return pack('snNH12CC', 4, $sock, $net, $node, 0x11, 0); +} + +sub nwconnopen($) { + my ($conn) = @_; + my ($err, $nconn); + + printf 'NWCCOpenConnByName(undef, "%s", $ncpfs::NWCC_NAME_FORMAT_BIND, $ncpfs::NWCC_OPEN_PRIVATE, $ncpfs::NWCC_RESERVED) = ', $server_name; + ($err, $nconn) = ncpfs::NWCCOpenConnByName(undef, $server_name, + $ncpfs::NWCC_NAME_FORMAT_BIND, $ncpfs::NWCC_OPEN_PRIVATE, + $ncpfs::NWCC_RESERVED); + if (errorinfo($err)) { + my ($cnum); + + printf "ok, nconn=$nconn\n"; + + print 'NWGetConnectionNumber(nconn) = '; + ($err, $cnum) = ncpfs::NWGetConnectionNumber($nconn); + if (errorinfo($err)) { + printf "ok, connection %u\n", $cnum; + } + if (defined($cnum)) { + printf 'NWClearConnectionNumber(nconn, %u) = ', $cnum; + $err = ncpfs::NWClearConnectionNumber($nconn, $cnum); + errorall($err); + } + { + my ($addrlen,$addr); + my ($optn); + + for ($optn = 0; $optn < 0x4010; $optn++) { + my ($val); + if ($optn == 16) { + $optn = 0x4000; + } + printf 'NWCCGetConnInfo(conn, %u) = ', $optn; + ($err,$val) = ncpfs::NWCCGetConnInfo($nconn, $optn); + if (errorinfo($err)) { + print "ok, $val\n"; + dumpInside(' ', $val); + } + } + print 'NWCCGetConnAddressLength(nconn) = '; + ($err, $addrlen) = ncpfs::NWCCGetConnAddressLength($nconn); + if (errorinfo($err)) { + printf "ok, %u\n", $addrlen; + + print 'NWCCGetConnAddress(nconn) = '; + ($err, $addr) = ncpfs::NWCCGetConnAddress($nconn); + if (errorinfo($err)) { + print "ok, $addr\n"; + dumpInsideHash(' ', $addr); + printf "Address: %s\n", unpack('H*', $addr->{'buffer'}); + } + openbytran($addr); + } + my ($conn2); + + print 'NWCCOpenConnBySockAddr(conn, ADDR, IPX, ...) = '; + ($err, $conn2) = ncpfs::NWCCOpenConnBySockAddr( + buildipx(0xDD354240, '000000000001', 0x451), + $ncpfs::NT_IPX, $ncpfs::NWCC_OPEN_PRIVATE, + $ncpfs::NWCC_RESERVED); + if (errorinfo($err)) { + print "ok, conn2=$conn2\n"; + print 'NWCCCloseConn(conn2) = '; + $err = ncpfs::NWCCCloseConn($conn2); + errorall($err); + } + } + + print 'NWCCCloseConn(nconn) = '; + $err = ncpfs::NWCCCloseConn($nconn); + errorall($err); + } +} + +sub setdirlimit($$$) { + my ($conn, $path, $limit) = @_; + my ($err); + + my $ns = new ncpfs::ncp_dos_info; + $ns->{'MaximumSpace'} = $limit; + printf 'Limiting directory %s with limit %u: ', $path, $limit; + $err = ncpfs::ncp_ns_modify_entry_dos_info($conn, $ncpfs::NW_NS_DOS, + $ncpfs::SA_ALL, $ncpfs::NCP_DIRSTYLE_NOHANDLE, 0, 0, + scalar ncpfs::ncp_path_to_NW_format($path), + $ncpfs::DM_MAXIMUM_SPACE, $ns); + errorall($err); +} + +sub nwdiskrest($) { + my ($conn) = @_; + my ($err, $rest, $inuse, $rest2, $inuse2, $ih); + + printf 'NWGetObjDiskRestrictions(conn, 0, 0x%08X) = ', $test_objectid; + ($err, $rest, $inuse) = ncpfs::NWGetObjDiskRestrictions($conn, 0, $test_objectid); + if (errorinfo($err)) { + printf "ok, restriction 0x%08X, in use 0x%08X\n", $rest, $inuse; + } + + printf 'NWSetObjectVolSpaceLimit(conn, 0, 0x%08X, 123) = ', $test_objectid; + $err = ncpfs::NWSetObjectVolSpaceLimit($conn, 0, $test_objectid, 123); + errorall($err); + + printf 'NWGetObjDiskRestrictions(conn, 0, 0x%08X) = ', $test_objectid; + ($err, $rest2, $inuse2) = ncpfs::NWGetObjDiskRestrictions($conn, 0, $test_objectid); + if (errorinfo($err)) { + printf "ok, restriction 0x%08X, in use 0x%08X\n", $rest2, $inuse2; + } + + $ih = 0; + while (1) { + my ($volinfo); + + printf 'NWScanVolDiskRestrictions(conn, 0, \%u) = ', $ih; + ($err, $volinfo) = ncpfs::NWScanVolDiskRestrictions($conn, 0, \$ih); + if ($err) { + printf "failed, %s\n", ncpfs::strnwerror($err); + last; + } + print "ok, $volinfo\n"; + dumpInsideHash(' ',$volinfo); + if ($volinfo->{'numberOfEntries'} == 0) { + last; + } + $ih += $volinfo->{'numberOfEntries'}; + } + + $ih = 0; + while (1) { + my ($volinfo); + + printf 'NWScanVolDiskRestrictions2(conn, 0, \%u) = ', $ih; + ($err, $volinfo) = ncpfs::NWScanVolDiskRestrictions2($conn, 0, \$ih); + if ($err) { + printf "failed, %s\n", ncpfs::strnwerror($err); + last; + } + print "ok, $volinfo\n"; + dumpInsideHash(' ',$volinfo); + if ($volinfo->{'numberOfEntries'} == 0) { + last; + } + $ih += $volinfo->{'numberOfEntries'}; + } + + printf 'NWRemoveObjectDiskRestrictions(conn, 0, 0x%08X) = ', $test_objectid; + $err = ncpfs::NWRemoveObjectDiskRestrictions($conn, 0, $test_objectid); + errorall($err); + + printf 'NWGetObjDiskRestrictions(conn, 0, 0x%08X) = ', $test_objectid; + ($err, $rest2, $inuse2) = ncpfs::NWGetObjDiskRestrictions($conn, 0, $test_objectid); + if (errorinfo($err)) { + printf "ok, restriction 0x%08X, in use 0x%08X\n", $rest2, $inuse2; + } + + setdirlimit($conn, 'SYS:', 1048576000); + setdirlimit($conn, 'SYS:LOGIN', 123456789); + setdirlimit($conn, 'SYS:LOGIN/NLS', 12345678); + setdirlimit($conn, 'SYS:LOGIN/NLS/ENGLISH', 1234567); + printf 'Allocating directory handle for SYS:LOGIN/NLS/ENGLISH: '; + ($err, $ih, $rest2) = ncpfs::ncp_ns_alloc_short_dir_handle($conn, + $ncpfs::NW_NS_DOS, $ncpfs::NCP_DIRSTYLE_NOHANDLE, 0, 0, + scalar ncpfs::ncp_path_to_NW_format('SYS:LOGIN/NLS/ENGLISH'), + $ncpfs::NCP_ALLOC_TEMPORARY); + if (errorinfo($err)) { + my ($buff); + + printf "ok, handle=%u, volume=%u\n", $ih, $rest2; + + printf 'NWGetDirSpaceLimitList(conn, %u) = ', $ih; + ($err, $buff) = ncpfs::NWGetDirSpaceLimitList($conn, $ih); + if (errorinfo($err)) { + printf "ok, %s\n", unpack('H*', $buff); + } + printf 'NWGetDirSpaceLimitList2(conn, %u) = ', $ih; + ($err, $buff) = ncpfs::NWGetDirSpaceLimitList2($conn, $ih); + if (errorinfo($err)) { + print "ok, $buff\n"; + dumpInsideHash(' ', $buff); + } + printf 'ncp_get_directory_info(conn, %u) = ', $ih; + ($err, $buff) = ncpfs::ncp_get_directory_info($conn, $ih); + if (errorinfo($err)) { + print "ok, $buff\n"; + dumpInsideHash(' ', $buff); + } + setdirlimit($conn, 'SYS:', 0); + setdirlimit($conn, 'SYS:LOGIN', 0); + setdirlimit($conn, 'SYS:LOGIN/NLS', 0); + setdirlimit($conn, 'SYS:LOGIN/NLS/ENGLISH', 0); + printf 'NWGetDirSpaceLimitList2(conn, %u) = ', $ih; + ($err, $buff) = ncpfs::NWGetDirSpaceLimitList2($conn, $ih); + if (errorinfo($err)) { + print "ok, $buff\n"; + dumpInsideHash(' ', $buff); + } + } +} + +sub nwsema($) { + my ($conn) = @_; + my ($err, $semh, $opncnt); + + print 'NWOpenSemaphore(conn, "NCPFSSEMA", 0) = '; + ($err, $semh, $opncnt) = ncpfs::NWOpenSemaphore($conn, 'NCPFSSEMA', 0); + if (errorinfo($err)) { + my ($semv); + printf "ok, handle=0x%08X, open count=%u\n", $semh, $opncnt; + + printf 'NWExamineSemaphore(conn, 0x%08X) = ', $semh; + ($err, $semv, $opncnt) = ncpfs::NWExamineSemaphore($conn, $semh); + if (errorinfo($err)) { + printf "ok, value=%u, open count=%u\n", $semv, $opncnt; + } + + printf 'NWSignalSemaphore(conn, 0x%08X) = ', $semh; + $err = ncpfs::NWSignalSemaphore($conn, $semh); + errorall($err); + + printf 'NWExamineSemaphore(conn, 0x%08X) = ', $semh; + ($err, $semv, $opncnt) = ncpfs::NWExamineSemaphore($conn, $semh); + if (errorinfo($err)) { + printf "ok, value=%u, open count=%u\n", $semv, $opncnt; + } + + my ($cnum, $ctrl, $of, $n); + + ($err, $cnum) = ncpfs::NWGetConnectionNumber($conn); + + $ctrl = new ncpfs::CONN_SEMAPHORES; + $n = 0; + while (1) { + ($err,$of) = ncpfs::NWScanSemaphoresByConn($conn, + $cnum, \$n, $ctrl); + if ($err) { + last; + } + print "Ctrl:\n"; + dumpInsideHash(' ', $ctrl); + print "[$n] $of\n"; + dumpInsideHash(' ', $of); + } + printf "Scan semaphores by conn terminated: %s\n", ncpfs::strnwerror($err); + + printf 'NWWaitOnSemaphore(conn, 0x%08X, 1) = ', $semh; + $err = ncpfs::NWWaitOnSemaphore($conn, $semh, 1); + errorall($err); + + printf 'NWCloseSemaphore(conn, 0x%08X) = ', $semh; + $err = ncpfs::NWCloseSemaphore($conn, $semh); + errorall($err); + } +} + +sub readea1($$$$) { + my ($conn, $vol, $dirent, $aname) = @_; + my ($offset, $err, $hnd, $data); + + $offset = 0; + printf 'Reading extended attribute "%s": ', $aname; + ($err, $hnd, $data) = ncpfs::ncp_ea_read($conn, + $ncpfs::NWEA_FL_CLOSE_ERR|$ncpfs::NWEA_FL_SRC_DIRENT, + $vol, $dirent, -1, $aname, $offset); + while (not $err) { + print "Read hnd=$hnd\n"; + dumpInside(' ',$hnd); + print "Data=$data\n"; + ## last unless length($data); + $offset += length($data); + + printf 'Reading at offset %u: ', $offset; + ($err, $hnd, $data) = ncpfs::ncp_ea_read($conn, + $ncpfs::NWEA_FL_CLOSE_ERR|$ncpfs::NWEA_FL_SRC_EAHANDLE, + $hnd->{'newEAhandle'}, 0, -1, undef, $offset); + } + errorinfo($err); +} + +sub dumpeaX(&$$$$;$) { + my ($proc, $flags, $conn, $vol, $dirent, $aname) = @_; + my ($hnd, $err, $data); + + $hnd = new ncpfs::ncp_ea_enumerate_info; + printf 'Starting EA enumeration type %u: ', $flags / 16; + ($err, $data) = ncpfs::ncp_ea_enumerate($conn, + $flags | + $ncpfs::NWEA_FL_CLOSE_ERR | $ncpfs::NWEA_FL_SRC_DIRENT, + $vol, $dirent, -1, $aname, $hnd); + while ($err == 0) { + my ($keycnt); + print "ok, Handle=$hnd\n"; + dumpInside(' ', $hnd); + printf "Data=%s\n", unpack('H*', $data); + for ($keycnt = 0; $keycnt < $hnd->{'returnedItems'}; $keycnt++) { + my ($inf); + + printf 'Attribute %u: ', $keycnt; + ($err,$data,$inf) = $proc->($data); + if (errorinfo($err)) { + print "ok, $inf\n"; + dumpInside(' ', $inf); + printf "NewData=%s\n", unpack('H*', $data); + } + } + last unless ($hnd->{'enumSequence'}); + print 'Next EA loop: '; + ($err, $data) = ncpfs::ncp_ea_enumerate($conn, + $flags | $ncpfs::NWEA_FL_CLOSE_ERR | + $ncpfs::NWEA_FL_SRC_EAHANDLE, + $hnd->{'newEAhandle'}, 0, -1, undef, $hnd); + } + errorinfo($err); + if ($hnd->{'newEAhandle'}) { + printf 'ncp_ea_close(conn, %u) = ', $hnd->{'newEAhandle'}; + $err = ncpfs::ncp_ea_close($conn, $hnd->{'newEAhandle'}); + errorall($err); + } +} + +sub dumpea0($$$) { + my ($conn, $vol, $dirent) = @_; + + dumpeaX(sub { return -1 }, $ncpfs::NWEA_FL_INFO0, $conn, $vol, $dirent); +} + +sub dumpea1($$$) { + my ($conn, $vol, $dirent) = @_; + + dumpeaX(\&ncpfs::ncp_ea_extract_info_level1, $ncpfs::NWEA_FL_INFO1, + $conn, $vol, $dirent); +} + +sub dumpea6($$$$) { + my ($conn, $vol, $dirent, $aname) = @_; + + dumpeaX(\&ncpfs::ncp_ea_extract_info_level6, $ncpfs::NWEA_FL_INFO6, + $conn, $vol, $dirent, $aname); +} + +sub dumpea7($$$) { + my ($conn, $vol, $dirent) = @_; + + dumpeaX(\&ncpfs::ncp_ea_extract_info_level7, $ncpfs::NWEA_FL_INFO7, + $conn, $vol, $dirent); +} + +sub name2entry($$) { + my ($conn, $path) = @_; + my ($err, $dirinfo); + + printf 'Mapping %s to directory entry: ', $path; + ($err, $dirinfo) = ncpfs::ncp_ns_obtain_entry_info($conn, + $ncpfs::NW_NS_DOS, $ncpfs::SA_ALL, + $ncpfs::NCP_DIRSTYLE_NOHANDLE, 0, 0, + scalar ncpfs::ncp_path_to_NW_format($path), + $ncpfs::NW_NS_DOS, $ncpfs::IM_DIRECTORY, + $ncpfs::NW_INFO_STRUCT2); + if (errorinfo($err)) { + my ($vol, $dirent); + $vol = $dirinfo->{'Directory'}->{'volNumber'}; + $dirent = $dirinfo->{'Directory'}->{'dirEntNum'}; + printf "ok, got %u:0x%08X\n", $vol, $dirent; + return ($vol, $dirent); + } + return (); +} + +sub nwea($$$) { + my ($conn, $path, $path2) = @_; + my ($err, $dirinfo); + my ($vol, $dirent) = name2entry($conn, $path); + if (not defined($vol)) { + return; + } + my ($vol2, $dirent2) = name2entry($conn, $path2); + if (not defined($vol2)) { + return; + } + dumpea1($conn, $vol, $dirent); + + my ($winfo); + printf 'Creating some EA: '; + ($err, $winfo) = ncpfs::ncp_ea_write($conn, + $ncpfs::NWEA_FL_CLOSE_ERR | + $ncpfs::NWEA_FL_SRC_DIRENT, $vol, $dirent, 1024, + 'MyExtendedAttributeForTesting', 0, 0, + 'Test_Data ' x 51 . '01'); + if (errorinfo($err)) { + printf "ok, info=$winfo\n"; + dumpInside(' ', $winfo); + ($err,$winfo) = ncpfs::ncp_ea_write($conn, + $ncpfs::NWEA_FL_CLOSE_ERR | + $ncpfs::NWEA_FL_CLOSE_IMM | + $ncpfs::NWEA_FL_SRC_EAHANDLE, + $winfo->{'newEAhandle'}, 0, 1024, + undef, 512, 0, + 'SecondHalf' x 51 . 'ab'); + if (errorinfo($err)) { + printf "ok, info=$winfo\n"; + dumpInside(' ', $winfo); + } + dumpea1($conn, $vol, $dirent); + } + readea1($conn, $vol, $dirent, 'MyExtendedAttributeForTesting'); + { + my ($copycount, $datasize, $keysize); + print 'Duplicating EAs: '; + ($err, $copycount, $datasize, $keysize) = ncpfs::ncp_ea_duplicate($conn, + $ncpfs::NWEA_FL_SRC_DIRENT, $vol, $dirent, + $ncpfs::NWEA_FL_SRC_DIRENT, $vol2, $dirent2); + if (errorinfo($err)) { + printf "ok, count=%u, datasize=%u, keysize=%u\n", + $copycount, $datasize, $keysize; + } + dumpea0($conn, $vol2, $dirent2); + dumpea1($conn, $vol2, $dirent2); + dumpea6($conn, $vol2, $dirent2, 'MyExtendedAttributeForTesting'); + dumpea7($conn, $vol2, $dirent2); + } + printf 'Removing EA: '; + ($err, $winfo) = ncpfs::ncp_ea_write($conn, + $ncpfs::NWEA_FL_CLOSE_ERR | $ncpfs::NWEA_FL_CLOSE_IMM | + $ncpfs::NWEA_FL_SRC_DIRENT, $vol, $dirent, 0, + 'MyExtendedAttributeForTesting', 0, 0, + undef); + if (errorinfo($err)) { + printf "ok, info=$winfo\n"; + dumpInside(' ', $winfo); + } + printf 'Removing EA from copy: '; + ($err, $winfo) = ncpfs::ncp_ea_write($conn, + $ncpfs::NWEA_FL_CLOSE_ERR | $ncpfs::NWEA_FL_CLOSE_IMM | + $ncpfs::NWEA_FL_SRC_DIRENT, $vol2, $dirent2, 0, + 'MyExtendedAttributeForTesting', 0, 0, + undef); + if (errorinfo($err)) { + printf "ok, info=$winfo\n"; + dumpInside(' ', $winfo); + } + dumpea1($conn, $vol, $dirent); + dumpea1($conn, $vol2, $dirent2); +} + +sub nwdsbufcheck($$) { + my ($conn,$ctx) = @_; + my ($err,$buf); + + print 'new ncpfs::Buf_T = '; + $buf = new ncpfs::Buf_T; + print "$buf\n"; + + print 'NWDSAllocBuf(4096) = '; + ($err, $buf) = ncpfs::NWDSAllocBuf(4096); + if (errorinfo($err)) { + my ($buf2); + + print "ok, buf=$buf\n"; + dumpInside(' ',$buf); + + print 'NWDSInitBuf(ctx, $ncpfs::DSV_READ_ATTR_DEF, buf) = '; + $err = ncpfs::NWDSInitBuf($ctx, $ncpfs::DSV_READ_ATTR_DEF, $buf); + errorall($err); + + my ($ih) = ($ncpfs::NO_MORE_ITERATIONS); + + print 'NWDSPutClassName(ctx, buf, "User") = '; + $err = ncpfs::NWDSPutClassName($ctx, $buf, 'User'); + errorall($err); + + print 'NWDSReadAttrDef(ctx, 1, 0, buf, \ih) = '; + ($err, $buf2) = ncpfs::NWDSReadAttrDef($ctx, 1, 0, $buf, \$ih); + if (errorinfo($err)) { + print "ok, buf2=$buf2\n"; + + my ($cnt); + print 'NWDSGetAttrCount(ctx, buf2) = '; + ($err, $cnt) = ncpfs::NWDSGetAttrCount($ctx, $buf2); + if (errorinfo($err)) { + print "ok, cnt=$cnt\n"; + + while ($cnt) { + my ($name, $ainfo); + + print 'NWDSGetAttrDef(ctx, buf2) = '; + ($err,$name,$ainfo) = ncpfs::NWDSGetAttrDef($ctx, $buf2); + if (errorinfo($err)) { + print "ok, name=$name, ainfo=$ainfo\n"; + + dumpInside(' ', $ainfo); + ::Dump($name); + } + $cnt--; + } + } + print 'NWDSFreeBuf(buf2) = '; + $err = ncpfs::NWDSFreeBuf($buf2); + errorall($err); + } + print 'NWDSFreeBuf(buf) = '; + $err = ncpfs::NWDSFreeBuf($buf); + errorall($err); + } +} + +sub nwdsctxcheck($) { + my ($conn) = @_; + my ($err,$ctx); + + print 'NWDSInitRequester() = '; + $err = ncpfs::NWDSInitRequester(); + errorall($err); + print 'NWDSCreateContext() = '; + $ctx = ncpfs::NWDSCreateContext(); + if (not defined($ctx)) { + print "failed\n"; + } else { + my ($nctx); + print "ok, ctx=$ctx\n"; + print 'NWDSDuplicateContext(ctx) = '; + $nctx = ncpfs::NWDSDuplicateContext($ctx); + if (not defined($nctx)) { + print "failed\n"; + } else { + print "ok, nctx=$nctx\n"; + print 'NWDSFreeContext(nctx) = '; + $err = ncpfs::NWDSFreeContext($nctx); + errorall($err); + } + print 'NWDSFreeContext(ctx) = '; + $err = ncpfs::NWDSFreeContext($ctx); + errorall($err); + } + print 'NWDSCreateContextHandle() = '; + ($err,$ctx) = ncpfs::NWDSCreateContextHandle(); + if (errorinfo($err)) { + my ($nctx); + print "ok, ctx=$ctx\n"; + print 'NWDSDuplicateContextHandle(ctx) = '; + ($err,$nctx) = ncpfs::NWDSDuplicateContextHandle($ctx); + if (errorinfo($err)) { + print "ok, nctx=$nctx\n"; + print 'NWDSFreeContext(nctx) = '; + $err = ncpfs::NWDSFreeContext($nctx); + errorall($err); + } + print 'NWDSAddConnection(ctx,conn) = '; + $err = ncpfs::NWDSAddConnection($ctx, $conn); + errorall($err); + + nwdsbufcheck($conn,$ctx); + print 'NWDSFreeContext(ctx) = '; + $err = ncpfs::NWDSFreeContext($ctx); + errorall($err); + } +} + +sub nwdsdumpattr($$$) { + my ($ctx,$buf,$type) = @_; + my ($err,$cnt); + + print 'NWDSGetAttrCount(ctx,buf) = '; + ($err,$cnt) = ncpfs::NWDSGetAttrCount($ctx,$buf); + if (errorinfo($err)) { + print "ok, cnt=$cnt\n"; + while ($cnt > 0) { + my ($nm,$vcnt,$synt); + + print 'NWDSGetAttrName(ctx,buf) = '; + ($err,$nm,$vcnt,$synt) = ncpfs::NWDSGetAttrName($ctx,$buf); + if (errorinfo($err)) { + print "ok, name=$nm, valcount=$vcnt, syntaxid=$synt\n"; + while ($vcnt > 0) { + my ($sz); + + if ($type == 3 || $type == 4) { + print "NWDSGetAttrValFlags(ctx,buf) = "; + ($err,$sz) = ncpfs::NWDSGetAttrValFlags($ctx, $buf); + if (errorinfo($err)) { + printf "ok, 0x%08X\n", $sz; + } + print "NWDSGetAttrValModTime(ctx,buf) = "; + ($err,$sz) = ncpfs::NWDSGetAttrValModTime($ctx, $buf); + if (errorinfo($err)) { + print "ok, $sz\n"; + dumpInside(' ', $sz); + } + } + if ($type == 4) { + print "Attribute size in NDS = "; + ($err,$sz) = ncpfs::NWDSGetAttrCount($ctx,$buf); + if (errorinfo($err)) { + print "ok, $sz bytes\n"; + } + } else { + print "NWDSComputeAttrValSize(ctx,buf,$synt) = "; + ($err,$sz) = ncpfs::NWDSComputeAttrValSize($ctx,$buf,$synt); + if (errorinfo($err)) { + my ($val); + print "$sz bytes, retrieving value... "; + ($err, $val) = ncpfs::NWDSGetAttrVal($ctx,$buf,$synt); + if (errorinfo($err)) { + printf "ok, value=%s\n", cnvtValue($val); + dumpInside(' ', $val); + } + } + } + $vcnt--; + } + } + $cnt--; + } + } +} + +sub nwdsdumpone($$) { + my ($ctx,$buf) = @_; + my ($err,$nm,$attrs,$oit); + + print 'NWDSGetObjectName(ctx,buf) = '; + ($err,$nm,$attrs,$oit) = ncpfs::NWDSGetObjectName($ctx,$buf); + if (errorinfo($err)) { + print "ok, name=$nm, attrs=$attrs\n"; + print " oit=$oit\n"; + dumpInside(' ', $oit); + if ($attrs != 0) { + print " attributes:\n"; + print "\n"; + } + } +} + +sub nwdsdumpbuf($$) { + my ($ctx,$buf) = @_; + my ($err,$cnt); + + print 'NWDSGetObjectCount(ctx,buf) = '; + ($err,$cnt) = ncpfs::NWDSGetObjectCount($ctx,$buf); + if (errorinfo($err)) { + print "ok, $cnt objects\n"; + while ($cnt > 0) { + nwdsdumpone($ctx,$buf); + $cnt--; + } + } +} + +sub nwdslist($$) { + my ($ctx,$base) = @_; + my ($err,$iter,$buf); + + $iter = $ncpfs::NO_MORE_ITERATIONS; + while (1) { + printf 'NWDSList(ctx,"%s",\\%d) = ', $base, $iter; + ($err,$buf) = ncpfs::NWDSList($ctx, $base, \$iter); + if (errorinfo($err)) { + my ($cnt); + + print "ok, buf=$buf, iter=$iter\n"; + nwdsdumpbuf($ctx,$buf); + if ($iter == $ncpfs::NO_MORE_ITERATIONS) { + last; + } + next; + } + last; + } +} + +sub nwdsread($$$) { + my ($ctx,$base,$type) = @_; + my ($err,$iter,$buf); + + $iter = $ncpfs::NO_MORE_ITERATIONS; + while (1) { + printf 'NWDSRead(ctx,"%s",%u,1,undef,\\%d) = ', $base, $type, $iter; + ($err,$buf) = ncpfs::NWDSRead($ctx, $base, $type, 1, undef, \$iter); + if (errorinfo($err)) { + my ($cnt); + + print "ok, buf=$buf, iter=$iter\n"; + nwdsdumpattr($ctx,$buf,$type); + if ($iter == $ncpfs::NO_MORE_ITERATIONS) { + last; + } + next; + } + last; + } +} + +sub nwdsnames($) { + my ($conn) = @_; + my ($ctx,$err,$out,$a,$b,$c,$d,$e,$f,$buf); + + $ctx = new ncpfs::NWDSContextHandle; + if (not defined($ctx)) { + print "Cannot get context handle\n"; + return; + } + $err = ncpfs::NWDSAddConnection($ctx, $conn); + if ($err) { + printf "Cannot add connection to context: %s\n", ncpfs::strnwerror($err); + return; + } + print 'NWDSGetBinderyContext(ctx, conn) = '; + ($err,$out) = ncpfs::NWDSGetBinderyContext($ctx, $conn); + if (errorinfo($err)) { + printf "ok, %s\n", $out; + } + print 'NWDSRemoveAllTypes(ctx, "CN=Test.OU=VANA\.C\=CZ.C=CZ") = '; + ($err,$out) = ncpfs::NWDSRemoveAllTypes($ctx, 'CN=Test.OU=VANA\.C\=CZ.C=CZ'); + if (errorinfo($err)) { + printf "ok, %s\n", $out; + } + print 'NWDSCanonicalizeName(ctx, "Test.VANA\.C\=CZ.CZ") = '; + ($err,$out) = ncpfs::NWDSCanonicalizeName($ctx, 'Test.VANA\.C\=CZ.CZ'); + if (errorinfo($err)) { + printf "ok, %s\n", $out; + } + print 'NWDSAbbreviateName(ctx, "CN=Test.OU=VANA\.C\=CZ.C=CZ") = '; + ($err,$out) = ncpfs::NWDSAbbreviateName($ctx, 'CN=Test.OU=VANA\.C\=CZ.C=CZ'); + if (errorinfo($err)) { + printf "ok, %s\n", $out; + } + print 'NWIsDSServer(conn) = '; + ($err,$out) = ncpfs::NWIsDSServer($conn); + if ($err) { + print "yes, $out\n"; + } else { + print "no\n"; + } + print 'NWGetFileServerUTCTime(conn) = '; + ($err,$out) = ncpfs::NWGetFileServerUTCTime($conn); + if (errorinfo($err)) { + print "ok, $out\n"; + } + print '__NWGetFileServerUTCTime(conn) = '; + ($err,$out,$a,$b,$c,$d,$e,$f) = ncpfs::__NWGetFileServerUTCTime($conn); + if (errorinfo($err)) { + printf "ok, %08X.%08X, %08X, %08X %08X %08X %08X\n", $out, $a, $b, $c, $d, $e, $f; + } + print 'NWDSGetServerDN(ctx,conn) = '; + ($err,$out) = ncpfs::NWDSGetServerDN($ctx, $conn); + if (errorinfo($err)) { + print "ok, $out\n"; + printf 'NWDSMapNameToID(ctx,conn,"%s") = ', $out; + ($err,$a) = ncpfs::NWDSMapNameToID($ctx, $conn, $out); + if (errorinfo($err)) { + printf "ok, 0x%08X\n", $a; + printf 'NWDSMapIDToName(ctx,conn,0x%08X) = ', $a; + ($err,$b) = ncpfs::NWDSMapIDToName($ctx, $conn, $a); + if (errorinfo($err)) { + printf "ok, $b\n"; + } + } + printf 'NWDSResolveName(ctx,"%s") = ', $out; + ($err,$a,$b) = ncpfs::NWDSResolveName($ctx, $out); + if (errorinfo($err)) { + printf "ok, conn=$a, ID=0x%08X\n", $b; + ncpfs::NWCCCloseConn($a); + } + printf 'NWDSReadObjectInfo(ctx,"%s") = ', $out; + ($err,$a,$b) = ncpfs::NWDSReadObjectInfo($ctx, $out); + if (errorinfo($err)) { + print "ok, name=$a, info=$b\n"; + dumpInside(' ', $b); + } + printf 'NWDSOpenConnToNDSServer(ctx,"%s") = ', $out; + ($err,$a) = ncpfs::NWDSOpenConnToNDSServer($ctx, $out); + if (errorinfo($err)) { + print "ok, conn=$a\n"; + ncpfs::NWCCCloseConn($a); + } + printf 'NWDSGetNDSStatistics(ctx,"%s") = ', $out; + ($err,$a) = ncpfs::NWDSGetNDSStatistics($ctx, $out); + if (errorinfo($err)) { + print "ok, stats=$a\n"; + dumpInside(' ', $a); + } + } + print 'NWDSGetServerAddress(ctx,conn) = '; + ($err,$out,$buf) = ncpfs::NWDSGetServerAddress($ctx, $conn); + if (errorinfo($err)) { + print "ok, $out addresses, buffer $buf\n"; + } + print 'NWDSGetDSVerInfo(conn) = '; + ($err,$a,$b,$c,$d,$e) = ncpfs::NWDSGetDSVerInfo($conn); + if (errorinfo($err)) { + print "ok, DSVersion=$a, Depth=$b, Name=$c, Flags=$d, WName=$e\n"; + } + printf 'NWDSGetObjectHostServerAddress(ctx,"%s") = ', $nds_volume; + ($err,$a,$b) = ncpfs::NWDSGetObjectHostServerAddress($ctx, $nds_volume); + if (errorinfo($err)) { + print "ok, Server=$a, Addresses=$b\n"; + } + nwdslist($ctx, '[Root]'); + nwdsread($ctx, '[Root]', 0); + nwdsread($ctx, '[Root]', 1); + nwdsread($ctx, '[Root]', 2); + nwdsread($ctx, '[Root]', 3); + nwdsread($ctx, '[Root]', 4); +} + +sub nwdsreload($) { + my ($conn) = @_; + my ($ctx,$err,$out); + + $ctx = new ncpfs::NWDSContextHandle; + if (not defined($ctx)) { + print "Cannot get context handle\n"; + return; + } + $err = ncpfs::NWDSAddConnection($ctx, $conn); + if ($err) { + printf "Cannot add connection to context: %s\n", ncpfs::strnwerror($err); + return; + } + ($err,$out) = ncpfs::NWDSGetServerDN($ctx, $conn); + if (errorinfo($err)) { + printf 'NWDSReloadDS(ctx, "%s") = ', $out; + $err = ncpfs::NWDSReloadDS($ctx, $out); + errorall($err); + } +} + +sub retry($) { + my ($err) = @_; + + if ($err == -637 || $err == -654) { + print 'Sleeping...'; + sleep(5); + print 'Retrying...'; + return 1; + } + return 0; +} + +sub nwdscreate($) { + my ($conn) = @_; + my ($ctx,$err,$srvname,$out,$a,$b,$c,$d,$e,$f,$buf); + my ($test_x,$test_ou2,$test_rdn,$test_user,$newtest_rdn); + + $test_x = "O=NCPFS_TEST.$test_base"; + $test_ou2 = "OU=Inside.$test_x"; + $test_rdn = "CN=Test"; + $test_user = "$test_rdn.$test_x"; + $newtest_rdn = "CN=NewTest"; + + $ctx = new ncpfs::NWDSContextHandle; + if (not defined($ctx)) { + print "Cannot get context handle\n"; + return; + } + $err = ncpfs::NWDSAddConnection($ctx, $conn); + if ($err) { + printf "Cannot add connection to context: %s\n", ncpfs::strnwerror($err); + return; + } + ($err,$srvname) = ncpfs::NWDSGetServerDN($ctx, $conn); + if ($err) { + printf "Cannot retrieve server name: %s\n", ncpfs::strnwerror($err); + return; + } + print "Allocating and initializing new buffer... "; + ($err,$buf) = ncpfs::NWDSInitBuf($ctx, $ncpfs::DSV_ADD_ENTRY); + errorall($err); + if ($err) { + return; + } + print 'NWDSPutAttrNameAndVal(ctx, buf, "Object Class", $ncpfs::SYN_CLASS_NAME, "Organization") = '; + $err = ncpfs::NWDSPutAttrNameAndVal($ctx, $buf, "Object Class", $ncpfs::SYN_CLASS_NAME, "Organization"); + errorall($err); + printf 'NWDSAddObject(ctx, "%s", undef, 0, buf) = ', $test_x; + $err = ncpfs::NWDSAddObject($ctx, $test_x, undef, 0, $buf); + errorall($err); + print "Allocating and initializing new buffer... "; + ($err,$buf) = ncpfs::NWDSInitBuf($ctx, $ncpfs::DSV_ADD_ENTRY); + errorall($err); + if ($err) { + return; + } + print 'NWDSPutAttrNameAndVal(ctx, buf, "Object Class", $ncpfs::SYN_CLASS_NAME, "Organizational Unit") = '; + $err = ncpfs::NWDSPutAttrNameAndVal($ctx, $buf, "Object Class", $ncpfs::SYN_CLASS_NAME, "Organizational Unit"); + errorall($err); + printf 'NWDSAddObject(ctx, "%s", undef, 0, buf) = ', $test_ou2; + $err = ncpfs::NWDSAddObject($ctx, $test_ou2, undef, 0, $buf); + errorall($err); + printf 'NWDSRemoveObject(ctx, "%s") = ', $newtest_rdn.'.'.$test_x; + $err = ncpfs::NWDSRemoveObject($ctx, $newtest_rdn.'.'.$test_x); + errorall($err); + print "Allocating and initializing new buffer... "; + ($err,$buf) = ncpfs::NWDSInitBuf($ctx, $ncpfs::DSV_ADD_ENTRY); + errorall($err); + if ($err) { + return; + } + print 'NWDSPutAttrName(ctx, buf, "Object Class") = '; + $err = ncpfs::NWDSPutAttrName($ctx, $buf, "Object Class"); + errorall($err); + print 'NWDSPutAttrVal(ctx, buf, $ncpfs::SYN_CLASS_NAME, "User") = '; + $err = ncpfs::NWDSPutAttrVal($ctx, $buf, $ncpfs::SYN_CLASS_NAME, "User"); + errorall($err); + print 'NWDSPutAttrNameAndVal(ctx, buf, "Surname", $ncpfs::SYN_CI_STRING, "NCPFS Test User") = '; + $err = ncpfs::NWDSPutAttrNameAndVal($ctx, $buf, "Surname", $ncpfs::SYN_CI_STRING, "NCPFS Test User"); + errorall($err); + printf 'NWDSAddObject(ctx, "%s", undef, 0, buf) = ', $test_user; + $err = ncpfs::NWDSAddObject($ctx, $test_user, undef, 0, $buf); + errorall($err); + + printf 'NWDSRemoveObject(ctx, "%s") = ', $newtest_rdn.'.'.$test_x; + $err = ncpfs::NWDSRemoveObject($ctx, $newtest_rdn.'.'.$test_x); + errorall($err); + + if (0) { + # Do this only on special request... it is slow... + printf 'NWDSModifyRDN(ctx, "%s", "%s", 1) = ', $test_user, $newtest_rdn; + $err = ncpfs::NWDSModifyRDN($ctx, $test_user, $newtest_rdn, 1); + errorall($err); + printf 'NWDSMoveObject(ctx, "%s", "%s", "%s") = ', $newtest_rdn.'.'.$test_x, $test_ou2, $test_rdn; + do { + $err = ncpfs::NWDSMoveObject($ctx, $newtest_rdn.'.'.$test_x, $test_ou2, $test_rdn); + errorall($err); + } while (retry($err)); + } + print 'Allocating and initializing new buffer... '; + ($err,$buf) = ncpfs::NWDSInitBuf($ctx, $ncpfs::DSV_MODIFY_ENTRY); + errorall($err); + if ($err) { + return; + } + print 'NWDSPutChangeAndVal(ctx, buf, $ncpfs::DS_OVERWRITE_VALUE, "Surname", $ncpfs::SYN_CI_STRING, "Real Test User") = '; + $err = ncpfs::NWDSPutChangeAndVal($ctx, $buf, $ncpfs::DS_OVERWRITE_VALUE, "Surname", $ncpfs::SYN_CI_STRING, "Real Test User"); + errorall($err); + print 'NWDSPutChange(ctx, buf, $ncpfs::DS_ADD_ATTRIBUTE, "Given Name") = '; + $err = ncpfs::NWDSPutChange($ctx, $buf, $ncpfs::DS_ADD_ATTRIBUTE, "Given Name"); + errorall($err); + print 'NWDSPutAttrVal(ctx, buf, $ncpfs::SYN_CI_STRING, "NCPFS") = '; + $err = ncpfs::NWDSPutAttrVal($ctx, $buf, $ncpfs::SYN_CI_STRING, "NCPFS"); + errorall($err); + if (0) { + printf 'NWDSModifyObject(ctx, "%s", undef, 0, buf) = ', $test_rdn.'.'.$test_ou2; + $err = ncpfs::NWDSModifyObject($ctx, $test_rdn.'.'.$test_ou2, undef, 0, $buf); + errorall($err); + printf 'NWDSModifyDN(ctx, "%s", "%s", 1) = ', $test_rdn.'.'.$test_ou2, $test_user; + do { + $err = ncpfs::NWDSModifyDN($ctx, $test_rdn.'.'.$test_ou2, $test_user, 1); + errorall($err); + } while (retry($err)); + } else { + printf 'NWDSModifyObject(ctx, "%s", undef, 0, buf) = ', $test_user; + $err = ncpfs::NWDSModifyObject($ctx, $test_user, undef, 0, $buf); + errorall($err); + } + printf 'NWDSGetPartitionRoot(ctx, "%s") = ', $test_user; + ($err, $out) = ncpfs::NWDSGetPartitionRoot($ctx, $test_user); + if (errorinfo($err)) { + print "ok, partition root=$out\n"; + } + printf 'NWDSSplitPartition(ctx, "%s", 0) = ', $test_x; + do { + $err = ncpfs::NWDSSplitPartition($ctx, $test_x, 0); + errorall($err); + } while (retry($err)); + { + my ($i); + + print "Waiting for partition split...\n"; + for ($i = 0; $i < 20; $i++) { + printf 'NWDSGetPartitionRoot(ctx, "%s") = ', $test_user; + ($err, $out) = ncpfs::NWDSGetPartitionRoot($ctx, $test_user); + if (errorinfo($err)) { + print "ok, partition root=$out\n"; + if ($out eq $test_x) { + last; + } + sleep 5; + } + } + } + my ($i) = (0); + + printf 'NWDSJoinPartitions(ctx, "%s", 0) = ', $test_x; + do { + $err = ncpfs::NWDSJoinPartitions($ctx, $test_x, 0); + errorall($err); + if ($err == -672) { + print 'Whoa... strange...'; + $i++; + if ($i < 20) { + $err = -637; + } + } + } while (retry($err)); + { + my ($i); + + print "Waiting for partition merge...\n"; + for ($i = 0; $i < 20; $i++) { + printf 'NWDSGetPartitionRoot(ctx, "%s") = ', $test_user; + ($err, $out) = ncpfs::NWDSGetPartitionRoot($ctx, $test_user); + if (errorinfo($err)) { + print "ok, partition root=$out\n"; + if ($out ne $test_x) { + last; + } + sleep 5; + } + } + } + printf 'NWDSRemoveObject(ctx, "%s") = ', $test_ou2; + do { + $err = ncpfs::NWDSRemoveObject($ctx, $test_ou2); + errorall($err); + } while (retry($err)); + printf 'NWDSRemoveObject(ctx, "%s") = ', $test_user; + $err = ncpfs::NWDSRemoveObject($ctx, $test_user); + errorall($err); + printf 'NWDSRemoveObject(ctx, "%s") = ', $test_x; + $err = ncpfs::NWDSRemoveObject($ctx, $test_x); + errorall($err); +} + +$|=1; + +my $x = ncpfs::ncp_conn_spec->new(); + +print "W=$x, Undef=".defined($x)."\n"; + +$x->{'server'} = $server_name; + +print $x->{'server'}."\n"; +#print $x->{'u'}; + +my ($m) = ncpfs::ncp_find_permanent($x); +print "Z=".(defined($m)?$m:'')."\n"; + +if (0) { + my $z; + + ($x,$z) = ncpfs::ncp_find_conn_spec('NONE', 'AA', 'BB', 1, ~0); + print "X=$x, Z=$z\n"; + dumpInside(' ', $x); +} + +my ($err, $conn) = ncpfs::ncp_open_mount($m); + +if ($err) { + print 'Cannot open connection: '.ncpfs::strnwerror($err)."\n"; + exit; +} + +#gsinfo($conn); +#dumpBindery($conn,-1,'*'); +if (0) { + my $z; + + $z = getTime($conn); + setTime($conn, $z + 10); + getTime($conn); + setTime($conn, $z); +} +#checkNWpath(); +#getTime($conn); +#getConnList($conn, $test_objecttype, $test_objectname); +#getStationInfo($conn, 1, 100); +#getInternetAddress($conn, 1, 100); +#sendMessage1($conn, [7,9,10], 'Test Perl::ncpfs #1'); +#sendMessage2($conn, 7, 'Test Perl::ncpfs #2'); +#getEncryptionKey($conn); +#getBinderyObjectId($conn, $test_objecttype, $test_objectname); +#getBinderyObjectName($conn, 0x00000001); +#demoBindery($conn, 1, 'HOKUSPOKUS_DELETE_ME_I\'M_OF_NO_VALUE'); +#readProperty($conn, $test_objecttype, $test_objectname, 'ACL'); +#scanProperties($conn, $test_objecttype, $test_objectname, '*'); +#loginEncrypted($conn, $test_objecttype, $test_objectname, 'TEST'); +#loginUnencrypted($conn, $test_objecttype, $test_objectname, 'TEST'); +#changePasswordEncrypted($conn, $test_objecttype, $test_objectname, 'QTEST', 'TEST'); +#loginUser($conn, $test_objectname, 'TEST'); +#getVolInfos($conn); +#getVolumeNumber($conn, 'SYS'); +#getVolumeNumber($conn, 'UNKNOWN'); +#dodir($conn, 0, 'SYS:', '*'); +#getfinfo($conn, 0, 'SYS:', 'VOL$LOG.ERR'); +#demoFile($conn, 0, 'SYS:NCPFSPRL.TMP'); +#file_subdir_info($conn); +#queueTest($conn); +#file2_demo($conn); +#connInfo($conn); +#vollist($conn, 0); +#vollist($conn, 2); +#convdemo(); +#newnsdemo($conn); +#namespacedemo($conn); +#ns3demo($conn); +#fidinfo($conn); +#nwcallsdemo($conn); +#nwbindry($conn); +#nwrpc($conn); +#nwsmset($conn); +#nwconnsop($conn); +#nwncpext($conn); +#nwconnopen($conn); +#nwdiskrest($conn); +#nwsema($conn); +#nwea($conn, 'SYS:LOGIN/NLS', 'SYS:LOGIN/NLS/ENGLISH'); +#nwdsctxcheck($conn); +#nwdsnames($conn); +#nwdsreload($conn); +nwdscreate($conn); +##$err = ncpfs::NWLogoutFromFileServer($conn); +##printf "Logout error code: %s\n", ncpfs::strnwerror($err); +$err = ncpfs::ncp_close($conn); +print 'Close: '.ncpfs::strnwerror($err)."\n"; diff --git a/contrib/tcl-utils/Makefile.in b/contrib/tcl-utils/Makefile.in new file mode 100644 index 0000000..f07fa96 --- /dev/null +++ b/contrib/tcl-utils/Makefile.in @@ -0,0 +1,82 @@ +# Makefile for the linux ncp-filesystem routines. +# + +top_srcdir = @top_srcdir@ +top_builddir = ../.. +this_srcdir = ${top_srcdir}/contrib/tcl-utils + +include ${top_builddir}/Make.rules + +vpath %.c ${this_srcdir} + +USE_KERNEL = @USE_KERNEL@ +NDS_SUPPORT = @NDS_SUPPORT@ +MOUNT2 = @MOUNT2@ + +LIBS = @INTLLIBS@ @LIBS@ + +O_OTHER = +O_USERUTILS = ncpreadprop.o ncpwhoami.o ncplist.o ncplisttrees.o ncpvrest.o \ + chgpwd.o slist2.o vlist.o ncpreadprops.o \ + # +O_SBINUTILS = + +USERUTILS = $(O_USERUTILS:%.o=%) +SBINUTILS = $(O_SBINUTILS:%.o=%) + +UTILS = $(USERUTILS) $(SBINUTILS) + +ifeq ($(HAVE_ELF),yes) +NCP_LIB := libncp.so +else +NCP_LIB := libncp.a +endif +NCPLIB_DIR := ${top_builddir}/lib +LIBDEP := $(NCPLIB_DIR)/$(NCP_LIB) + +.PHONY : all install install-dev dep clean mrproper distclean +.PHONY : default + +default: all + +all: $(UTILS) + +install: all + ${INSTALL} -d $(DESTDIR)$(bindir) + ${INSTALL} $(USERUTILS) $(DESTDIR)$(bindir) + [ -z "$(SBINUTILS)" ] || ${INSTALL} -d $(DESTDIR)$(sbindir) + [ -z "$(SBINUTILS)" ] || ${INSTALL} $(SBINUTILS) $(DESTDIR)$(sbindir) + +install-dev: + +${NCPLIB_DIR}/libncp.a: + make -C ${NCPLIB_DIR} libncp.a + +${NCPLIB_DIR}/libncp.so: + make -C ${NCPLIB_DIR} libncp.so + +$(O_USERUTILS) $(O_SBINUTILS) $(O_OTHER): %.o: %.c + $(CC) $(CFLAGS) $(CCFLAGS) $(CFLAGS_$@) -o $@ -c $< + +$(UTILS): %: %.o $(LIBDEP) + $(CC) $(CFLAGS) -o $@ $(addsuffix .o,$@) $(ADDOBJS_$@) -L$(NCPLIB_DIR) -lncp ${LIBS} + +dep: + +clean: + rm -f *.o *~ core $(UTILS) + +mrproper: clean + rm -f *.d + +distclean: mrproper + +%.d: %.c + set -e; $(CC) -M $(CFLAGS) $(CCFLAGS) $(CFLAGS_$(@:.d=.o)) $< \ + | sed 's,\($*\)\.o[ :]*,\1.o \1.do \1.to $@ : ,g' > $@; \ + [ -s $@ ] || rm -f $@ + +ifeq ($(NEED_DEP),yes) +include $(UTILS:%=%.d) +endif + diff --git a/contrib/tcl-utils/chgpwd.c b/contrib/tcl-utils/chgpwd.c new file mode 100644 index 0000000..d138043 --- /dev/null +++ b/contrib/tcl-utils/chgpwd.c @@ -0,0 +1,346 @@ +/* + chgpwd.c - NWDSChangeObjectPasswor() API demo + Copyright (C) 2000 Petr Vandrovec + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Revision history: + + 1.00 2000, April 25 Petr Vandrovec + Initial revision. + + 1.01 2001, February 23 Petr Vandrovec + Added '-r' option. Feature request from Patrick Pollet. + + 1.02 2001, March 14 Patrick Pollet + Added -T' option. + Added errors code specific to password changing + + 1.03 2001, December 16 Petr Vandrovec + const <-> non-const pointers cleanup + Moved error codes to libncp. + + 1.04 2002 March 14 , Patrick Pollet + try to fix absent context problem by retrieving Default context if it exists + + */ + +#ifdef N_PLAT_MSW4 +#include +#include +#include + +#include +#include +#include +#include + +#include "getopt.h" + +#define _(X) X + +typedef unsigned int u_int32_t; +typedef unsigned long NWObjectID; +typedef u_int32_t Time_T; +#else +#include +#include +#include + +#include +#include +#include +#include + +#include "private/libintl.h" +#define _(X) gettext(X) +#endif + +static char *progname; + +static void +usage(void) +{ + fprintf(stderr, _("usage: %s [options]\n"), progname); +} + +static void +help(void) +{ + printf(_("\n" + "usage: %s [options]\n"), progname); + printf(_("\n" + "-h Print this help text\n" + "-v value Context DCK_FLAGS value (default 0)\n" + "-o object_name Name of object (default [Root])\n" + "-c context_name Name of current context (default [Root])\n" + "-C confidence DCK_CONFIDENCE value (default 0)\n" + "-S server Server to start with (no default)\n" + "-T tree NDS tree (no default)\n" + "-P password Old password (default TEST)\n" + "-n newpassword New password (default T2)\n" + "-r Raw, do not uppercase passwords\n" + "\n")); +} + +#ifdef N_PLAT_MSW4 +char* strnwerror(int dserr) { + static char errc[200]; + + sprintf(errc, "error %u / %d / 0x%X", dserr, dserr, dserr); + return errc; +} +#endif + + +static const char* +strnwerror2(int err) +{ + return strnwerror(err); +} + + +/* Uppercase string. Do NOT write to string if all characters are + uppercase, const uppercased strings (TEST, T2) may be passed + to this function! */ +static void safe_strupr(char* p) { + while (*p) { + if (islower(*p)) + *p = toupper(*p); + p++; + } +} + +int main(int argc, char *argv[]) { + NWDSCCODE dserr; + NWDSContextHandle ctx; + NWCONN_HANDLE conn=NULL; + const char* objectname = "[Root]"; + char context[MAX_TREE_NAME_CHARS +1]=""; + const char* server = NULL; + const char* pwd = "TEST"; + const char* newpwd = "T2"; + char treeName[MAX_TREE_NAME_CHARS +1]=""; + int opt; + int raw = 0; + u_int32_t ctxflag = 0; + u_int32_t confidence = 0; + +#ifndef N_PLAT_MSW4 + setlocale(LC_ALL, ""); + bindtextdomain(NCPFS_PACKAGE, LOCALEDIR); + textdomain(NCPFS_PACKAGE); +#endif + + progname = argv[0]; + + NWCallsInit(NULL, NULL); +#ifndef N_PLAT_MSW4 + NWDSInitRequester(); +#endif + + while ((opt = getopt(argc, argv, "h?o:c:v:S:C:P:n:T:r")) != EOF) + { + switch (opt) + { + case 'C': + confidence = strtoul(optarg, NULL, 0); + break; + case 'o': + objectname = optarg; + break; + //case 'c': + // context = optarg; + // break; + case 'c': + if (strlen(optarg) + Initial revision. + + 1.00 1999, November 20 Petr Vandrovec + Added license. + + 1.01 2000, April 26 Petr Vandrovec + Added NWDSGetCountByClassAndName demo. + + 1.02 2000, April 30 Petr Vandrovec + Added NWDSExtSyncList demo. + + 1.03 2001, February 17 Patrick Pollet + Duplicated in /contrib/tcl-utils from /contrib/testing/nwdslist.c + and renamed ncplist.c + Added flag quiet to reduce output lines to a minimum + Added flag abbreviate to trim out context part ( -c required) + This program is meant to be called by a TCL/tk from end in -Q mode + so it should emit the word "failed" in case of trouble + somewhere in the line. + Added option -T tree + Changed parameters -O -> -o and -C -> -c for consitency with other ncp utilities. + TCL/tk usage to get list of contexts : + if {$context !=""}{ + catch {exec ncplist -T $tree -v 4 -Q -A -o $context -c $context -l "Org*"} result + }else{ + catch {exec ncplist -T $tree -v 4 -Q -l "Org*"} result + } + + to get list of volumes (NDS format) ncplist -T tree -v 4 -Q -A -o ctx -c ctx -l "Vol*" + + 1.04 2001, March 10 Patrick Pollet + Corrected #196 : check size of parameter -T + Corrected #252 : removed wrong comments + Modified #237 : tretament of tree moved later (if (!server)) + + 1.05 2001, December 16 Petr Vandrovec + const <-> non const pointers cleanup + + */ + +#ifdef N_PLAT_MSW4 +#include +#include +#include + +#include +#include +#include +#include + +#include "getopt.h" + +#define _(X) X + +typedef unsigned int u_int32_t; +typedef unsigned long NWObjectID; +typedef u_int32_t Time_T; + +#else +#include +#include +#include +#include +#include +#include +#include + +#include "private/libintl.h" +#define _(X) gettext(X) +#endif + + +static char *progname; + +static void +usage(void) +{ + fprintf(stderr, _("usage: %s [options]\n"), progname); +} + +static void +help(void) +{ + printf(_("\n" + "usage: %s [options]\n"), progname); + printf(_("\n" + "-h Print this help text\n" + "-v value Context DCK_FLAGS value (default 0)\n" + "-o object_name Name of object (default [Root])\n" + "-c context_name Name of current context (default OrgUnit.Org.Country)\n" + "-C confidence DCK_CONFIDENCE value (default 0)\n" + "-S server Server to start with (default CDROM)\n" + "-T tree Tree to begin with (default env variable)\n" + "-q req_type Info type (default 0)\n" + "-s size Reply buffer size (default 4096)\n" + "-f subject_name Filter for subordinates (default NONE, may contain wildcards)\n" + "-l class_name Filter for base class names (default NONE)\n" + "-t timestamp Return objects after this time (default ALL)\n" + "-Q Short output (only names of objects found) \n" + "-A Abbreviate name if possible (-c required)\n" + "\n")); +} + +#ifdef N_PLAT_MSW4 +char* strnwerror(int err) { + static char errc[200]; + + sprintf(errc, "failed: error %u / %d / 0x%X", err, err, err); + return errc; +} +#endif + +int main(int argc, char *argv[]) { + NWDSCCODE dserr; + NWDSContextHandle ctx; + NWCONN_HANDLE conn; + const char* objectname = "[Root]"; + const char* context = ""; + const char* server = NULL; + const char* classname = NULL; + const char* subjectname = NULL; + TimeStamp_T ts = { 0, 0, 0 }; + int ts_defined = 0; + int opt; + u_int32_t ctxflag = 0; + u_int32_t confidence = 0; + u_int32_t req = 0; + nuint32 ih = NO_MORE_ITERATIONS; + Buf_T* buf; + size_t size = DEFAULT_MESSAGE_LEN; + size_t cnt; + + char treeName [MAX_TREE_NAME_CHARS +1]=""; + char serverName [MAX_SCHEMA_NAME_CHARS+1]=""; + int quiet=0; /*default = not quiet*/ + int abbreviate=0; + +#ifndef N_PLAT_MSW4 + setlocale(LC_ALL, ""); + bindtextdomain(NCPFS_PACKAGE, LOCALEDIR); + textdomain(NCPFS_PACKAGE); +#endif + + progname = argv[0]; + + NWCallsInit(NULL, NULL); +#ifndef N_PLAT_MSW4 + NWDSInitRequester(); +#endif + + dserr = NWDSCreateContextHandle(&ctx); + if (dserr) { + fprintf(stderr, "NWDSCreateContextHandle failed with %s\n", strnwerror(dserr)); + return 123; + } + while ((opt = getopt(argc, argv, "h?QAo:c:v:S:C:q:s:f:l:t:T:")) != EOF) + { + switch (opt) + { + case 'C': + confidence = strtoul(optarg, NULL, 0); + break; + case 'o': + objectname = optarg; + break; + case 'c': + context = optarg; + break; + case 'v': + ctxflag = strtoul(optarg, NULL, 0); + break; + case 'q': + req = strtoul(optarg, NULL, 0); + break; + case 's': + size = strtoul(optarg, NULL, 0); + break; + case 'h': + case '?': + help(); + goto finished; + case 'S': + server = optarg; + break; + case 'T': + if (strlen(optarg) curPos; + for (; pp < buf->dataend; pp++) { + printf("%02X ", *pp); + } + printf("\n"); + } +#endif + } else { + if (!quiet) + printf("%u objects found\n", cnt); + } + } while ((dserr == 0) && (ih != NO_MORE_ITERATIONS)); + NWCCCloseConn(conn); + dserr = NWDSFreeContext(ctx); + if (dserr) { + fprintf(stderr, "NWDSFreeContext failed with %s\n", strnwerror(dserr)); + return 121; + } +finished: + return 0; +} + diff --git a/contrib/tcl-utils/ncplisttrees.c b/contrib/tcl-utils/ncplisttrees.c new file mode 100644 index 0000000..003712e --- /dev/null +++ b/contrib/tcl-utils/ncplisttrees.c @@ -0,0 +1,307 @@ +/* + ncplisttrees.c + Return a sorted list of avaiable trees + Copyright (C) 1999, 2000 Petr Vandrovec, Patrick Pollet + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Revision history: + + + 1.00 2001, Feb 19 Patrick Pollet + Was named nwdslisttrees.c + + 1.01 2001, March 10 Patrick Pollet + Renamed from nwdslisttrees.c to ncplisttrees.c + This program is meant to be called by a TCL/tk from end in -Q mode + so it should emit the word "failed" in case of trouble + somewhere in the line. + #removed useless -U and -P parameters + #rewritten for use of corrected NWDSReturnBlockOfTrees + #232: Added test code for the 64 mallocs + + 1.02 2001, March 12 Patrick Pollet + Added -A option to list only trees where current user is authenticated. + for use from TCL/tk GUIS + + 1.03 2001, December 16 Petr Vandrovec + const <-> non const pointers cleanup + +*/ + +#ifdef N_PLAT_MSW4 +#include +#include +#include + +#include +#include +#include +#include + +#include "getopt.h" + +#define _(X) X + +typedef unsigned int u_int32_t; +typedef unsigned long NWObjectID; +typedef u_int32_t Time_T; +#else +#include +#include + +#include +#include +#include +#include + +#include "private/libintl.h" +#define _(X) gettext(X) +#endif + + + + +static char *progname; + +static void +usage(void) +{ + fprintf(stderr, _("usage: %s [options]\n"), progname); +} + +static void +help(void) +{ + printf(_("\n" + "usage: %s [options] \n"), progname); + printf(_("\n" + "-h Print this help text\n" + "-v value Context DCK_FLAGS value (default 0)\n" + "-c context_name Name of current context (default Root)\n" + "-C confidence DCK_CONFIDENCE value (default 0)\n" + "-S server Server to start with (default use .nwclient file)\n" + "-F filter Scan filter for trees (default *) \n" + " Yes, you can put * at the beginning and use ? \n" + "-a Only trees where current user is authenticated \n" + "With no options, will open a unlicensed connection to the nearest server\n" + "\n")); +} + +#ifdef N_PLAT_MSW4 +char* strnwerror(int err) { + static char errc[200]; + + sprintf(errc, "failed: error %u / %d / 0x%X", err, err, err); + return errc; +} +#endif + +int main(int argc, char *argv[]) { + NWDSCCODE dserr; + NWDSContextHandle ctx; + NWCONN_HANDLE conn; + + const char* context = "[Root]"; + const char * server=NULL; + const char * scanFilter="*"; + + int allTrees=1; + + int opt; + u_int32_t ctxflag = 0; + u_int32_t confidence = 0; + + + long err; + +#ifndef N_PLAT_MSW4 + setlocale(LC_ALL, ""); + bindtextdomain(NCPFS_PACKAGE, LOCALEDIR); + textdomain(NCPFS_PACKAGE); +#endif + + progname = argv[0]; + + NWCallsInit(NULL, NULL); +#ifndef N_PLAT_MSW4 + NWDSInitRequester(); +#endif + + dserr = NWDSCreateContextHandle(&ctx); + if (dserr) { + fprintf(stderr, "NWDSCreateContextHandle failed with %s\n", strnwerror(dserr)); + return 123; + } + while ((opt = getopt(argc, argv, "h?c:v:S:C:F:f:a")) != EOF) + { + switch (opt) + { + case 'C': + confidence = strtoul(optarg, NULL, 0); + break; + case 'c': + context = optarg; + break; + case 'a': + allTrees=0; + break; + + case 'v': + ctxflag = strtoul(optarg, NULL, 0); + break; + case 'h': + case '?': + help(); + goto finished; + case 'S': + server = optarg; + break; + case 'F': + case 'f': + scanFilter =optarg; break; + default: + usage(); + goto finished; + } + } + + + ctxflag |= DCV_XLATE_STRINGS; + + dserr = NWDSSetContext(ctx, DCK_FLAGS, &ctxflag); + if (dserr) { + fprintf(stderr, "NWDSSetContext(DCK_FLAGS) failed: %s\n", + strnwerror(dserr)); + return 123; + } + dserr = NWDSSetContext(ctx, DCK_NAME_CONTEXT, context); + if (dserr) { + fprintf(stderr, "NWDSSetContext(DCK_NAME_CONTEXT) failed: %s\n", + strnwerror(dserr)); + err = 122; + goto closing_ctx; + } + dserr = NWDSSetContext(ctx, DCK_CONFIDENCE, &confidence); + if (dserr) { + fprintf(stderr, "NWDSSetContext(DCK_CONFIDENCE) failed: %s\n", + strnwerror(dserr)); + err=121; + goto closing_ctx; + } +#ifndef N_PLAT_MSW4 + { + static const u_int32_t add[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; + dserr = NWDSSetTransport(ctx, 16, add); + if (dserr) { + fprintf(stderr, "NWDSSetTransport failed: %s\n", + strnwerror(dserr)); + err= 124; + goto closing_ctx; + } + } +#endif + +#ifdef N_PLAT_MSW4 + dserr = NWDSOpenConnToNDSServer(ctx, server, &conn); +#else + { + conn=ncp_initialize(&argc,argv,0,&err); /* no login required*/ + if (!conn) { + fprintf(stderr, "ncp_initialize failed with %s\n",strnwerror(err)); + err= 111; + goto closing_ctx; + } + } + dserr = NWDSAddConnection(ctx, conn); + +#endif + + if (dserr) { + fprintf(stderr, "failed: Cannot bind connection to context: %s\n", + strnwerror(dserr)); + err=dserr; + goto closing_all; + + } + +// testing code goes here + { +#define NB 64 + + nuint32 i,cnt,totTrees; + char* table[NB]; + char * nextBlock; + for (i=0;iNB) + totTrees=NB; + err=NWDSReturnBlockOfAvailableTrees (ctx,conn,scanFilter,nextBlock,NULL,totTrees,table,&cnt,&totTrees); + if (err) { + fprintf(stderr, "NWDSReturnBlockOfAvailableTrees failed: %s\n",strnwerror(err)); + goto closing_all; + } + + for (i=0; i + the program is meant to be called by a tcl/tk from end ... + so it should emit the word "failed" in case of trouble + Added option -T tree for use with TCL/tk + TCL usage to get a property + proc NDS:getprop {property} { + global NDS + #don't put \" around $property !!!! don't ask me why !!! (2 days !) + set result [exec ncpreadprop -O $NDS(usernameDN) -A $property] + return $result + } + 1.01 2001 March 10 Patrick Pollet + Corrected #74 -o and -c (instead of -O -C) for consistency with others utilities + Corrected #105 SYN_OCTET_LIST output in one line + Corrected #298 + Corrected #351 test for size of parameter -T before storing it + Corrected #469-479 (removed server_name) reading back server_name was useless. + Correctd #495 NWDSWhoAmI fails if not using a permanent connection + si we check that -o object_name has been provided + TODO: use NWCxGetDefaultUserName() when written to get this information if missing + + 1.02 2001 December 16 Petr Vandrovec + const <-> non const pointer cleanups + + */ + + + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include "getopt.h" + +#include "private/libintl.h" +#define _(X) X + +static char *progname; + +static void +usage(void) +{ + fprintf(stderr, _("usage: %s [options] \n"), progname); + exit(1); +} + +static void +help(void) +{ + printf(_("\n" + "usage: %s [options] \n"), progname); + printf(_("\n" + "-h Print this help text\n" + "-o object_name Object name (default me) \n" + "-A attribut_name mandatory\n" + "-T treename \n" + "-c context Default= [root]\n" + "-v value Context DCK_FLAGS default=0 \n" + + "\n")); + exit(1); +} + + + + +static int doPrintOut (NWDSContextHandle ctx, const void * name, const enum SYNTAX synt) { + + (void) ctx; + switch (synt) { + case SYN_DIST_NAME: + case SYN_CI_STRING: + case SYN_CE_STRING: + case SYN_PR_STRING: + case SYN_NU_STRING: + case SYN_TEL_NUMBER: + case SYN_CLASS_NAME: + printf("%s\n", (const char*)name); + break; + case SYN_OCTET_STRING:{ + const Octet_String_T* os = (const Octet_String_T*)name; + size_t i; + printf("%u:", os->length); + for (i = 0; i < os->length; i++) + printf("%02X:", os->data[i]); + printf("\n"); + } + break; + case SYN_COUNTER: + case SYN_INTEGER: + case SYN_INTERVAL: + printf("%u\n", *((const Integer_T*)name)); + break; + case SYN_BOOLEAN:{ + const Boolean_T* b = (const Boolean_T*)name; + printf("%s\n", (*b==1)?"true":(*b)?"unknown":"false"); + } + break; + case SYN_TIMESTAMP:{ + const TimeStamp_T* stamp = (const TimeStamp_T*)name; + printf("%u:%u:%u\n",stamp->wholeSeconds, stamp->replicaNum,stamp->eventID); + } + break; + case SYN_NET_ADDRESS:{ + const Net_Address_T* na = (const Net_Address_T*)name; + size_t z; + printf("%u:%u:\n", na->addressType,na->addressLength); + for (z = 0; z < na->addressLength; z++) + printf("%02X:", na->address[z]); + printf("\n"); + } + break; + case SYN_OBJECT_ACL:{ + const Object_ACL_T* oacl = (const Object_ACL_T*)name; + printf("%s:%s:%08x\n", oacl->protectedAttrName,oacl->subjectName, oacl->privileges); + } + break; + case SYN_PATH:{ + const Path_T* p = (const Path_T*)name; + printf("%u:%s:%s\n", p->nameSpaceType,p->volumeName, p->path); + } + break; + case SYN_TIME:{ + printf("%s", ctime((const Time_T*)name)); + } + break; + case SYN_TYPED_NAME:{ + const Typed_Name_T* tn = (const Typed_Name_T*)name; + printf("%u:%u:%s\n", tn->interval, tn->level, tn->objectName); + } + break; + case SYN_CI_LIST:{ + const CI_List_T* cl = (const CI_List_T*)name; + for (; cl; cl = cl->next) + printf("%s\n", cl->s); + } + break; + case SYN_OCTET_LIST:{ + const Octet_List_T* ol = (const Octet_List_T*)name; + for (; ol; ol = ol->next) { + size_t i; + printf("%u:\n", ol->length); + for (i = 0; i < ol->length; i++) + printf("%02X:", ol->data[i]); + printf("\n"); + } + } + break; + case SYN_BACK_LINK:{ + const Back_Link_T* bl = (const Back_Link_T*)name; + printf("%08X:%s\n", bl->remoteID, bl->objectName); + } + break; + case SYN_FAX_NUMBER:{ + const Fax_Number_T* fn = (const Fax_Number_T*)name; + printf("%s:%u\n", fn->telephoneNumber, fn->parameters.numOfBits); + } + break; + case SYN_EMAIL_ADDRESS:{ + const EMail_Address_T* ea = (const EMail_Address_T*)name; + printf("%u:%s\n", ea->type, ea->address); + } + break; + case SYN_PO_ADDRESS:{ + const NWDSChar** pa = (const NWDSChar**)name; + printf("%s:%s:%s:%s:%s:%s\n",pa[0],pa[1],pa[2],pa[3],pa[4],pa[5]); + } + break; + case SYN_HOLD:{ + const Hold_T* h = (const Hold_T*)name; + printf("%u:%s\n", h->amount,h->objectName); + } + break; + default: + printf("failed:Value unprintable\n"); + return 1; + } + + return 0; + + +} + +static NWCCODE readAttributeValue( NWDSContextHandle ctx, const char * objName, const char *attrName) { + + Buf_T* inbuf=NULL; + Buf_T* outbuf=NULL; + NWDSCCODE dserr; + nuint32 iterHandle; + + size_t size = DEFAULT_MESSAGE_LEN; + + iterHandle = NO_MORE_ITERATIONS; /*test at bailout point */ + + dserr = NWDSAllocBuf(size, &inbuf); + if (dserr) { + fprintf(stderr, "NWDSAllocBuf() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + dserr = NWDSInitBuf(ctx, DSV_READ, inbuf); + if (dserr) { + fprintf(stderr, "NWDSInitBuf() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + dserr = NWDSPutAttrName(ctx, inbuf, attrName); + if (dserr) { + fprintf(stderr, "NWDSPutAttrName(%s) failed with %s\n", attrName, strnwerror(dserr)); + goto bailout; + } + dserr = NWDSAllocBuf(size, &outbuf); + if (dserr) { + fprintf(stderr, "NWDSAllocBuf() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + do { + NWObjectCount attrs; + + dserr = NWDSRead(ctx, objName, DS_ATTRIBUTE_VALUES, 0, inbuf, &iterHandle, outbuf); + if (dserr) { + if (dserr == ERR_NO_SUCH_ATTRIBUTE) { + /*fprintf(stderr, "NWDSRead() failed with %s\n", strnwerror(dserr));*/ + dserr = 0; + } + else + fprintf(stderr, "NWDSRead() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + dserr = NWDSGetAttrCount(ctx, outbuf, &attrs); + if (dserr) { + fprintf(stderr, "NWDSGetAttrCount() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + /*fprintf(stderr, "%d velues found\n", attrs);*/ + while (attrs--) { + NWDSChar attrname[MAX_SCHEMA_NAME_CHARS+1]; + enum SYNTAX synt; + NWObjectCount vals; + + dserr = NWDSGetAttrName(ctx, outbuf, attrname, &vals, &synt); + if (dserr) { + fprintf(stderr, "NWDSGetAttrName() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + while (vals--) { + size_t sz; + void* val; + + dserr = NWDSComputeAttrValSize(ctx, outbuf, synt, &sz); + if (dserr) { + fprintf(stderr, "NWDSComputeAttrValSize() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + val = malloc(sz); + if (!val) { + fprintf(stderr, "malloc() failed with %s\n", strnwerror(ENOMEM)); + goto bailout; + } + dserr = NWDSGetAttrVal(ctx,outbuf, synt, val); + if (dserr) { + free(val); + fprintf(stderr, "NWDSGetAttrVal() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + dserr=doPrintOut (ctx,val,synt); + + free(val); + if (dserr) { + fprintf(stderr, "doPrintOut failed with %s\n", strnwerror(dserr)); + goto bailout; + } + } + } + } while (iterHandle != NO_MORE_ITERATIONS); +bailout:; + if (iterHandle != NO_MORE_ITERATIONS) { + // let's keep the final dserr as the real one + NWDSCCODE dserr2 = NWDSCloseIteration(ctx, DSV_READ, iterHandle); + if (dserr2) { + fprintf(stderr, "NWDSCloseIteration() failed with %s\n", strnwerror(dserr2)); + } + } + if (inbuf) NWDSFreeBuf(inbuf); + if (outbuf) NWDSFreeBuf(outbuf); + return dserr; +} + + +int +main(int argc, char *argv[]) +{ + long err; + int opt; + const char * objectName=NULL; + const char * attributeName=NULL; + const char * contextName="[Root]"; + const char * server=NULL; + + NWDSContextHandle ctx=NULL; + NWCONN_HANDLE conn=NULL; + NWDSCCODE dserr,dserr2; + u_int32_t ctxflag = 0; + + char treeName [MAX_TREE_NAME_CHARS +1]=""; + + progname = argv[0]; + + NWCallsInit(NULL, NULL); +#ifndef N_PLAT_MSW4 + NWDSInitRequester(); +#else + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + + while ((opt = getopt(argc, argv, "h?o:A:T:c:S:v:")) != EOF) + { + switch (opt) + { + case 'h': + case '?': + help(); + case 'A': + attributeName=optarg; + break; + case 'T': + if (strlen(optarg) + the program is an extension of ncpreadprop to allow: + a list of NDS properties + a separator between them + the first idea was to put in the attribute buffer the list of requested attributes: + IT WORKS BUT NDS does not return attributes in the same order +example: + ./ncpreadprops -o ppollet -A "Postal Address,Full Name,LINUX:uid,Home Directory,CN" -c PC +--> +Ppollet:0 CN=FCPC2_APPS home\ppollet:1 2 3 4 5 6:Patrick Pollet:9999 + + 1.01 2001 Nov 03 Patrick Pollet + we call ReadAttributeValue for every attribute of the list !!! + + 1.02 2001 Dec 16 Petr Vandrovec + const <-> non const pointers cleanup + + 1.03 2002 June 6 Patrick Pollet + emission of separator between multiple values + + 1.04 2002 Sept 16 Patrick Pollet + emission of separator between multiple values when attributes are not read at once + + */ + + + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include "getopt.h" + +#include "private/libintl.h" +#define _(X) X + +static char *progname; + +static void +usage(void) +{ + fprintf(stderr, _("usage: %s [options] \n"), progname); + exit(1); +} + +static void +help(void) +{ + printf(_("\n" + "usage: %s [options] \n"), progname); + printf(_("\n" + "-h Print this help text\n" + "-o object_name Mandatory: Object name \n" + "-A attribute_liste Mandatory: One NDS attribute or a comma separated list\n" + "-T treename \n" + "-c context Default= [root]\n" + "-v value Context DCK_FLAGS default=0 \n" + "-f character separator between attributes (default= :)\n" + "-m character separator between values of multi-valued attributes (default = space) \n" + "\n")); + exit(1); +} + + + + +static int doPrintOut (NWDSContextHandle ctx, const void * name, const enum SYNTAX synt, char sep ) { +/* do not emit CR here */ +/* sep is the caracter used to separate multiples values such as postal address or home directory*/ + (void) ctx; + switch (synt) { + case SYN_DIST_NAME: + case SYN_CI_STRING: + case SYN_CE_STRING: + case SYN_PR_STRING: + case SYN_NU_STRING: + case SYN_TEL_NUMBER: + case SYN_CLASS_NAME: + printf("%s", (const char*)name); + break; + case SYN_OCTET_STRING:{ + const Octet_String_T* os = (const Octet_String_T*)name; + size_t i; + printf("%u%c", os->length,sep); + for (i = 0; i < os->length; i++) + printf("%02X%c", os->data[i],sep); + } + break; + case SYN_COUNTER: + case SYN_INTEGER: + case SYN_INTERVAL: + printf("%u", *((const Integer_T*)name)); + break; + case SYN_BOOLEAN:{ + const Boolean_T* b = (const Boolean_T*)name; + printf("%s", (*b==1)?"true":(*b)?"unknown":"false"); + } + break; + case SYN_TIMESTAMP:{ + const TimeStamp_T* stamp = (const TimeStamp_T*)name; + printf("%u%c%u%c%u",stamp->wholeSeconds,sep, stamp->replicaNum,sep,stamp->eventID); + } + break; + case SYN_NET_ADDRESS:{ + const Net_Address_T* na = (const Net_Address_T*)name; + size_t z; + printf("%u%c%u%c", na->addressType,sep,na->addressLength,sep); + for (z = 0; z < na->addressLength; z++) + printf("%02X%c", na->address[z],sep); + } + break; + case SYN_OBJECT_ACL:{ + const Object_ACL_T* oacl = (const Object_ACL_T*)name; + printf("%s%c%s%c%08x", oacl->protectedAttrName,sep,oacl->subjectName,sep,oacl->privileges); + } + break; + case SYN_PATH:{ + const Path_T* p = (const Path_T*)name; + printf("%u%c%s%c%s", p->nameSpaceType,sep,p->volumeName,sep, p->path); + } + break; + case SYN_TIME:{ + printf("%s", ctime((const Time_T*)name)); + } + break; + case SYN_TYPED_NAME:{ + const Typed_Name_T* tn = (const Typed_Name_T*)name; + printf("%u%c%u%c%s", tn->interval,sep, tn->level,sep, tn->objectName); + } + break; + case SYN_CI_LIST:{ + const CI_List_T* cl = (const CI_List_T*)name; + for (; cl; cl = cl->next) + printf("%s", cl->s); + } + break; + case SYN_OCTET_LIST:{ + const Octet_List_T* ol = (const Octet_List_T*)name; + for (; ol; ol = ol->next) { + size_t i; + printf("%u%c", ol->length,sep); + for (i = 0; i < ol->length; i++) + printf("%02X%c", ol->data[i],sep); + } + } + break; + case SYN_BACK_LINK:{ + const Back_Link_T* bl = (const Back_Link_T*)name; + printf("%08X%c%s", bl->remoteID, sep,bl->objectName); + } + break; + case SYN_FAX_NUMBER:{ + const Fax_Number_T* fn = (const Fax_Number_T*)name; + printf("%s%c%u", fn->telephoneNumber, sep,fn->parameters.numOfBits); + } + break; + case SYN_EMAIL_ADDRESS:{ + const EMail_Address_T* ea = (const EMail_Address_T*)name; + printf("%u%c%s", ea->type, sep,ea->address); + } + break; + case SYN_PO_ADDRESS:{ + const NWDSChar** pa = (const NWDSChar**)name; + printf("%s%c%s%c%s%c%s%c%s%c%s",pa[0],sep,pa[1],sep,pa[2],sep,pa[3],sep,pa[4],sep,pa[5]); + } + break; + case SYN_HOLD:{ + const Hold_T* h = (const Hold_T*)name; + printf("%u%c%s", h->amount,sep,h->objectName); + } + break; + default: + printf(" *** "); /* don't mess up display */ + return 1; + } + + return 0; + + +} + +static NWCCODE readAttributeValue( NWDSContextHandle ctx, char * objName,char *attrName, char sepvalue) { + + Buf_T* inbuf=NULL; + Buf_T* outbuf=NULL; + NWDSCCODE dserr; + nuint32 iterHandle; + + size_t size = DEFAULT_MESSAGE_LEN; + + iterHandle = NO_MORE_ITERATIONS; /*test at bailout point */ + + dserr = NWDSAllocBuf(size, &inbuf); + if (dserr) { + fprintf(stderr, "NWDSAllocBuf() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + dserr = NWDSInitBuf(ctx, DSV_READ, inbuf); + if (dserr) { + fprintf(stderr, "NWDSInitBuf() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + + dserr = NWDSPutAttrName(ctx, inbuf, attrName); + if (dserr) { + fprintf(stderr, "NWDSPutAttrName(%s) failed with %s\n", attrName, strnwerror(dserr)); + goto bailout; + } + + + + dserr = NWDSAllocBuf(size, &outbuf); + if (dserr) { + fprintf(stderr, "NWDSAllocBuf() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + do { + NWObjectCount attrs; + + dserr = NWDSRead(ctx, objName, DS_ATTRIBUTE_VALUES, 0, inbuf, &iterHandle, outbuf); + if (dserr) { + if (dserr == ERR_NO_SUCH_ATTRIBUTE) { + /*fprintf(stderr, "NWDSRead() failed with %s\n", strnwerror(dserr));*/ + dserr = 0; + } + else + fprintf(stderr, "NWDSRead() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + dserr = NWDSGetAttrCount(ctx, outbuf, &attrs); + if (dserr) { + fprintf(stderr, "NWDSGetAttrCount() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + /*fprintf(stderr, "%d attributes found\n", attrs);*/ + while (attrs--) { + NWDSChar attrname[MAX_SCHEMA_NAME_CHARS+1]; + enum SYNTAX synt; + NWObjectCount vals; + + dserr = NWDSGetAttrName(ctx, outbuf, attrname, &vals, &synt); + if (dserr) { + fprintf(stderr, "NWDSGetAttrName() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + /*fprintf(stderr, "%d values found\n", vals);*/ + while (vals--) { + size_t sz; + void* val; + + dserr = NWDSComputeAttrValSize(ctx, outbuf, synt, &sz); + if (dserr) { + fprintf(stderr, "NWDSComputeAttrValSize() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + val = malloc(sz); + if (!val) { + fprintf(stderr, "malloc() failed with %s\n", strnwerror(ENOMEM)); + goto bailout; + } + dserr = NWDSGetAttrVal(ctx,outbuf, synt, val); + if (dserr) { + free(val); + fprintf(stderr, "NWDSGetAttrVal() failed with %s\n", strnwerror(dserr)); + goto bailout; + } + dserr=doPrintOut (ctx,val,synt,sepvalue); + + free(val); + if (dserr) { + fprintf(stderr, "doPrintOut failed with %s\n", strnwerror(dserr)); + goto bailout; + } + if ((vals) || (iterHandle != NO_MORE_ITERATIONS)) + printf("%c", sepvalue); /* emit separator between values */ + } + + } + } while (iterHandle != NO_MORE_ITERATIONS); +bailout:; + + if (iterHandle != NO_MORE_ITERATIONS) { + /* let's keep the final dserr as the real one */ + NWDSCCODE dserr2 = NWDSCloseIteration(ctx, DSV_READ, iterHandle); + if (dserr2) { + fprintf(stderr, "NWDSCloseIteration() failed with %s\n", strnwerror(dserr2)); + } + } + if (inbuf) NWDSFreeBuf(inbuf); + if (outbuf) NWDSFreeBuf(outbuf); + return dserr; +} + +static NWCCODE readAttributesValues( NWDSContextHandle ctx, char * objName,char *attrName, char sepvalue, char sepattr) { +/* scan the list of attributes*/ + char attrBuf[MAX_DN_CHARS+1]; + const char * attrStart; + const char * attrEnd; + + attrStart=attrName; + do { + if (attrStart) { + attrEnd=strchr(attrStart,','); + if (attrEnd) { + memcpy(attrBuf,attrStart,attrEnd - attrStart); + attrBuf[attrEnd-attrStart]=0; + attrEnd++; + } else + strcpy(attrBuf,attrStart); + attrStart=attrEnd; + } + readAttributeValue(ctx, objName,attrBuf, sepvalue); + if (attrStart) printf("%c",sepattr); /* emit separator exepct after the last attribute*/ + } while (attrStart); + printf("\n"); /* change line here */ + return 0; +} + +int +main(int argc, char *argv[]) +{ + long err; + int opt; + char * objectName=NULL; + char * attributeName=NULL; + const char * contextName="[Root]"; + char * server=NULL; + char sepvalue=' '; /*default separator between multiple values is space */ + char sepattr=':'; /* default separator between attributes is :*/ + + + + NWDSContextHandle ctx=NULL; + NWCONN_HANDLE conn=NULL; + NWDSCCODE dserr,dserr2; + u_int32_t ctxflag = 0; + + char treeName [MAX_TREE_NAME_CHARS +1]=""; + + progname = argv[0]; + + NWCallsInit(NULL, NULL); +#ifndef N_PLAT_MSW4 + NWDSInitRequester(); +#else + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + + while ((opt = getopt(argc, argv, "h?o:A:T:c:S:v:f:m:")) != EOF) + { + switch (opt) + { + case 'h': + case '?': + help(); + case 'A': + attributeName=optarg; + break; + case 'T': + if (strlen(optarg) + was named nwdsgetvolumerestrictions.c in /contrib/testing/pp + + 1.01 2001 March 10th Patrick Pollet + This program is ncpfs only + Since this program uses nwcalls aonly, removed unneeded contexts + + 1.02 2001 December 16th Petr Vandrovec + const <-> non const pointers cleanup + +*/ + +#include + +#include +#include +#include +#include + +#include "private/libintl.h" +#define _(X) gettext(X) + + + + +static char *progname; + +static void +usage(void) +{ + fprintf(stderr, _("usage: %s [options]\n"), progname); +} + +static void +help(void) +{ + printf(_("\n" + "usage: %s [options] \n"), progname); + printf(_("\n" + "-h Print this help text\n" + "-S server Server to start with (default use .nwclient file)\n" + "-N user name default= current user\n" + "-V volume NO Default value \n" + "\n")); +} + + +int main(int argc, char *argv[]) { + NWCCODE dserr; + NWCONN_HANDLE conn; + + char * server=NULL; + int opt; + char *userToTest=NULL; + static const char NO_VOLUME_BUT_NOT_NULL[]="Unknown Volume"; + const char *volumeToTest=NO_VOLUME_BUT_NOT_NULL; + + + long err; + + setlocale(LC_ALL, ""); + bindtextdomain(NCPFS_PACKAGE, LOCALEDIR); + textdomain(NCPFS_PACKAGE); + + progname = argv[0]; + + NWCallsInit(NULL, NULL); + + while ((opt = getopt(argc, argv, "h?S:N:V:")) != EOF) + { + switch (opt) + { + case 'h': + case '?': + help(); + goto finished; + case 'S': + server = optarg; + break; + case 'N': + userToTest = optarg; + break; + case 'V': + volumeToTest = optarg; + break; + + default: + usage(); + goto finished; + } + } + + if (server) { + if (server[0] == '/') { + dserr = ncp_open_mount(server, &conn); + if (dserr) { + fprintf(stderr, "ncp_open_mount failed with %s\n", + strnwerror(dserr)); + exit(111); + + } + } else { + struct ncp_conn_spec connsp; + memset(&connsp, 0, sizeof(connsp)); + strcpy(connsp.server, server); + conn = ncp_open(&connsp, &err); + if (!conn) { + fprintf(stderr, "ncp_open failed with %s\n",strnwerror(err)); + exit(111); + ; + } + } + + } + else { + conn=ncp_initialize(&argc,argv,0,&err); + if (!conn) { + fprintf(stderr, "ncp_initialize failed with %s\n",strnwerror(err)); + exit(111); + + } + } + + /* testing code goes here*/ + + { + + int optv=-1; + nuint32 nwuid,rest,inUse; + struct ncp_volume_info target; + + err=NWGetVolumeNumber(conn,volumeToTest,&optv); + if (err) { + fprintf(stderr,"%s: Volume %s does not exist\n", progname, volumeToTest); + goto closing_all; + } + + err=ncp_get_volume_info_with_number(conn, optv,&target); + if (err) { + fprintf(stderr,"%s: ncp_get_volume_info failed %s\n", progname,strnwerror(err) ); + goto closing_all; + } + + + if (!userToTest) { + err=NWCCGetConnInfo (conn,NWCC_INFO_USER_ID,sizeof(nwuid),&nwuid); + if (err) { + fprintf(stderr, "NWCCGetConnInfo NWCC_INFO_USER_ID failed with error %s\n", + strnwerror(err)); + goto closing_all; + } + userToTest=malloc(256); + err=NWCCGetConnInfo (conn,NWCC_INFO_USER_NAME,256,userToTest); + if (err) { + fprintf(stderr, "NWCCGetConnInfo NWCC_INFO_USER_NAME failed with error %s\n", + strnwerror(err)); + goto closing_all; + } + } else { + err=NWGetObjectID(conn, userToTest, OT_USER, &nwuid); + if (err) { + fprintf(stderr, "%s is unknown on this server. Failed with error %s\n", + userToTest,strnwerror(err)); + goto closing_all; + + } + } + + err=NWGetObjDiskRestrictions (conn,optv,nwuid,&rest,&inUse); + if (err) { + fprintf(stderr, "NWGetObjDiskRestrictions failed with error %s\n", + strnwerror(err)); + goto closing_all; + + } + if (rest==0x40000000) /* no restriction */ + rest=target.free_blocks; + /* printf ("%s has %d Kb limit on %s and uses %d Kb\n",userToTest,rest*4,volumeToTest,inUse*4);*/ + printf ("%s:%s:%d:%d\n",volumeToTest,userToTest,rest*4,inUse*4); + + + }/* end of testing code*/ + err=0; + +closing_all: + NWCCCloseConn(conn); +finished: + return err; +} + +/* testing + +[root@pent107g-2 tcl-utils]# ./ncpvrest -V apps -N ppollet +apps:ppollet:223864:405632 <-- using ./nwclient +[root@pent107g-2 tcl-utils]# ./ncpvrest -V apps -N ppollet -S CIPCINSA +apps:ppollet:360816:96976 +[root@pent107g-2 tcl-utils]# ./ncpvrest -V apps -N ppollet -S EURINSA +apps:ppollet:55748:226888 +[root@pent107g-2 tcl-utils]# ./ncpvrest -V edu -N ppollet -S EURINSA +edu:ppollet:28448:272364 +[root@pent107g-2 tcl-utils]# ./ncpvrest -V edu -N alexis -S EURINSA +edu:alexis:200:0 + */ diff --git a/contrib/tcl-utils/ncpwho b/contrib/tcl-utils/ncpwho new file mode 100755 index 0000000..f9f009a --- /dev/null +++ b/contrib/tcl-utils/ncpwho @@ -0,0 +1,4 @@ +#! /bin/sh +ncpwhoami -g $1 $2 $3 $4 + + diff --git a/contrib/tcl-utils/ncpwhoami.c b/contrib/tcl-utils/ncpwhoami.c new file mode 100644 index 0000000..4bcca47 --- /dev/null +++ b/contrib/tcl-utils/ncpwhoami.c @@ -0,0 +1,1110 @@ +/* + ncpwhoami - Returns details about all permanent connections + belonging to current user + Copyright (C) 2001 by Patrick Pollet + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Revision history: + + 0.00 2001 February 2001 Patrick Pollet + Initial revision. + 1.00 2001 March 7th 2001 Patrick Pollet + Corrected #140: use of NWCXGetPermConnInfo() for authentication state + #186: use of NWCXSplitNameAndContext() + #315: NWCCloseConn(conns[j]) and not NWCCloseConn(theConn) + #381: removed exit(1) in main after call to usage(). + Added the word "failed" to all error messages to + simplify TCL/Tk parsing. + Reorganized help options by alphabetic order. + + 1.01 2001 March 16th Patrick Pollet + Added many NDS informations ( this program is the "major tester" + for /lib/nwclient.c) + Added switch -1 to show only the first connection to tree + + 1.02 2001 December 16 Petr Vandrovec + const <-> non const pointers cleanup. + NWDSAddConnection must be invoked before any other NWDS* function + which can communicate with tree. + + 1.023 2002 January 24 Patrick Pollet + activated login scripts reading options + + 1.03 2002 March 15 Patrick Pollet + new release of nwnet set name context to default name context if found + so retrieving name context (-fc) or FQDN (-fD) got broken + + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include "getopt.h" + +#include "private/libintl.h" +#define _(X) X + +static const char *progname; + +/* three globals */ +/*default separator is tab*/ +static char gSeparator='\t'; +/* by default we print the following data in that order + Tree,Server,Netware Volume,Netware User, Unix User */ +static const char * gDefaultFields ="TSVUX"; +static const char * gUserFields=NULL; + + +static void +usage(void) +{ + fprintf(stderr, _("failed. usage: %s [-options] \n"), progname); + exit(1); +} + +static void +help(void) +{ + printf(_("\n" + "usage: %s [-options] \n"), progname); + printf(_("\n" + "-h Print this help text\n" + "-s Specify fields separator (default \\t)\n" + "-f Specify fields (A..Z a..z) & order of display (default=-f TSVXU)\n" + " A=Authentication state\n" + " a=NDS postal addresses informations\n" + " B=Broadcast state\n" + " b NDS stored Bindery property\n" + " C=connexion number\n" + " c=NDS Name context\n" + " D=NDS distinguished name\n" + " d=NDS description\n" + " E=NDS Foreign EMail address\n" + " e=NDS Internet EMail address\n" + " F=Netware File Server version\n" + " f=NDS Full Name\n" + " G=NDS group membership\n" + " g=NDS given name\n" + " H=Netware directory handle\n" + " h=NDS home directory \n" + " I=mount UID\n" + " i=NDS initials\n" + /* " J= \n"*/ + /* " j= \n"*/ + " K=NDS Public Key\n" + /* " k= \n"*/ + " L=NDS login time\n" + " l=LINUX:* NDS properties\n" + " M=mount point\n" + " m=NDS message server\n" + " N=Netware volume number\n" + " n=NDS Network Address Restrictions\n" + " O=NDS organization\n" + " o=NDS location\n" + " P=NDS profile\n" + " p=NDS password informations\n" + " Q=NDS language\n" + " q=NDS generational qualifier\n" + " R=NDS login restrictions\n" + " r=NDS rights (ACL's)\n" + " S=server bindery name\n" + " s=NDS surname\n" + " T=tree name\n" + " t=NDS phone infos (telephon & fax)\n" + " U=Netware user name\n" + " u=unix:* NDS properties\n" + " V=Netware volume name\n" + " v=NCPFS version\n" + " W=Netware UID\n" + " w=NDS Network addresses (where logged in)\n" + " X=Unix user name\n" + " x=NDS title(s)\n" + " Y=NDS Security equals to\n" + /* " y=\n"*/ + /* " Z=\n"*/ + " z=NDS Other names (CN+ ozer names ;-)\n" + " 0=NDS login script\n" + " 1=NDS profil login script\n" + " 2=NDS context login script\n" + + "-T tree_name Only connections to that tree\n" + "-S server_name Only connections to that server\n" + "-g All connections (default is only mine(s)) \n" + " Only root can use this flag\n" + "-a All possible informations\n" + "-1 Only the first connection to each tree\n" + "\n")); + exit(1); +} + + + + + +static NWCCODE processServer ( NWCONN_HANDLE conn, const char* treeName) { + + NWCCODE err; + NWObjectID nwOid; + NWCONN_NUM connNum; + struct NWCCRootEntry rootEntry; + NWCCVersion nwVersion; + uid_t mountUID; + int bcast; + char buffer[8192]; + int len=sizeof(buffer); + unsigned int i; + + char NDSname[MAX_DN_BYTES+1]; + NWDSContextHandle ctx=NULL; + u_int32_t ctxflag; + + char separator=gSeparator; + unsigned ll=strlen(gUserFields); + + +#define ERR_MARK "***" +#define UNK_MARK "???" + + if (!conn) + return 0; /*already seen*/ + /* we are dealing with permanent connexions */ + err=NWCXGetPermConnInfo(conn,NWCC_INFO_MOUNT_UID, sizeof (uid_t), &mountUID); + if (err) + mountUID=-1; + /* set up a context for NDS requests */ + /* if failed NDSname stays empty (tested below)*/ + NDSname[0]=0; + if (NWIsDSServer(conn,NULL)) { /*do not talk NDS to bindery servers */ + err = NWDSCreateContextHandle(&ctx); + if (!err) { + err=NWDSAddConnection (ctx,conn); + if (!err) { + err = NWDSGetContext(ctx, DCK_FLAGS, &ctxflag); + ctxflag |= DCV_XLATE_STRINGS+DCV_TYPELESS_NAMES; + } + if (!err) + err = NWDSSetContext(ctx, DCK_FLAGS, &ctxflag); + if (!err) + err=NWCXGetPermConnInfo(conn,NWCC_INFO_USER_ID, sizeof(NWObjectID), &nwOid); + if (!err) + err=NWDSMapIDToName(ctx, conn, nwOid, NDSname); + + /* + err = NWDSGetContext(ctx, DCK_NAME_CONTEXT, buffer); + if (err) { + fprintf(stderr, "NWDSSetContext(DCK_NAME_CONTEXT) failed: %s\n", + strnwerror(err)); + + }else printf ("%s%c\n",buffer,separator); + */ + + } + } + + for (i=0;i=32? buffer[i]:' '); + + printf ("%c", separator); + } + break; + + case 'E': + err=-1; + if (NDSname[0]) + err=NWCXGetAttributeValueAsString(ctx,NDSname,"EMail Address",buffer,sizeof(buffer)); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", buffer,separator); + break; + case 'e': + err=-1; + if (NDSname[0]) + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Internet EMail Address",buffer,sizeof(buffer)); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", buffer,separator); + + break; + + case 'F': + err=NWCXGetPermConnInfo(conn,NWCC_INFO_SERVER_VERSION, sizeof(nwVersion), &nwVersion); + if (err) + printf("%s%c",ERR_MARK,separator); + else + printf ("%d %d %d%c",nwVersion.major,nwVersion.minor,nwVersion.revision,separator); + break; + case 'f': + err=-1; + if (NDSname[0]) + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Full Name",buffer,sizeof(buffer)); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", buffer,separator); + break; + case 'G': { + char * NDSresult=NULL; + err=-1; + if (NDSname[0]) + err=NWCXGetMultiStringAttributeValue(ctx,NDSname,"Group Membership",&NDSresult); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", NDSresult,separator); + if (NDSresult) + free(NDSresult); + } + break; + + case 'g': + err=-1; + if (NDSname[0]) + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Given Name",buffer,sizeof(buffer)); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", buffer,separator); + break; + + case 'H': + err=NWCXGetPermConnInfo(conn,NWCC_INFO_ROOT_ENTRY, sizeof(rootEntry), &rootEntry); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%x%c",rootEntry.dirEnt,separator); + break; + case 'h': + err=-1; + if (NDSname[0]){ + char path[MAX_DN_BYTES+1]=""; + char NDSvolname[MAX_DN_BYTES+1]=""; + char server[MAX_DN_BYTES+1]=""; + char resource[MAX_DN_BYTES+1]=""; + err=NWCXGetObjectHomeDirectory(ctx,NDSname, + server,sizeof(server), + resource,sizeof(resource), + NDSvolname,sizeof(NDSvolname), + path,sizeof(path)); + if (!err) + sprintf(buffer,"%s,%s,%s,%s",NDSvolname,server,resource,path); + + } + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c",buffer,separator); + break; + case 'I': + if (mountUID ==(uid_t)-1) + printf("%s%c",ERR_MARK,separator); + else + printf ("%d%c",mountUID,separator); + break; + case 'i': + err=-1; + if (NDSname[0]) + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Initials",buffer,sizeof(buffer)); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", buffer,separator); + break; + case 'K': + err=-1; + if (NDSname[0]) + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Public Key",buffer,sizeof(buffer)); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", buffer,separator); + break; + + + + case 'L': + err=-1; + if (NDSname[0]){ + /* + time_t time=0; + err=NWCXGetObjectLastLoginTime(ctx,NDSname,&time); + if (!err) { + sprintf(buffer,ctime(&time)); + // remove LF added by ctime + if (strlen(buffer)>0 ) + buffer[strlen(buffer)-1]=0; + } + */ + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Login Time",buffer,sizeof(buffer)); + } + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c",buffer,separator); + break; + + case 'l': { err=-1; + if (NDSname[0]) { + char aux[128]=""; + buffer[0]=0; + err=NWCXGetAttributeValueAsString(ctx,NDSname,"LINUX:UID",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"LINUX:GID",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"LINUX:Primary GroupID",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"LINUX:Primary GroupName",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"LINUX:Login Shell",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"LINUX:Home Directory",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"LINUX:Comments",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + + printf ("%s%c", buffer,separator); + + } + } + break; + + case 'M': + err=NWCXGetPermConnInfo(conn,NWCC_INFO_MOUNT_POINT, len, buffer); + if (err) + printf("%s%c",ERR_MARK,separator); + else + printf ("%s%c",buffer,separator); + break; + case 'm': + err=-1; + if (NDSname[0]) + err=NWCXGetObjectMessageServer(ctx,NDSname,buffer,sizeof(buffer)); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c",buffer,separator); + break; + case 'N': + err=NWCXGetPermConnInfo(conn,NWCC_INFO_ROOT_ENTRY, sizeof(rootEntry), &rootEntry); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%x%c",rootEntry.volume,separator); + break; + case 'n': { + char * NDSresult=NULL; + err=-1; + + if (NDSname[0]) + err=NWCXGetMultiStringAttributeValue(ctx,NDSname,"Network Address Restriction",&NDSresult); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", NDSresult,separator); + if (NDSresult) + free(NDSresult); + } + break; + case 'O': { + char * NDSresult=NULL; + err=-1; + if (NDSname[0]) + err=NWCXGetMultiStringAttributeValue(ctx,NDSname,"OU",&NDSresult); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", NDSresult,separator); + if (NDSresult) + free(NDSresult); + } + break; + case 'o': { + char * NDSresult=NULL; + err=-1; + if (NDSname[0]) + err=NWCXGetMultiStringAttributeValue(ctx,NDSname,"L",&NDSresult); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", NDSresult,separator); + if (NDSresult) + free(NDSresult); + } + break; + case 'P': + err=-1; + if (NDSname[0]) + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Profile",buffer,sizeof(buffer)); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", buffer,separator); + break; + case 'p': { err=-1; + if (NDSname[0]) { + char aux[128]=""; + buffer[0]=0; + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Password Required",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Password Unique Required",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Password Allow Change",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Password Minimum Length",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Password Expiration Time",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Password Expiration Interval",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + + printf ("%s%c", buffer,separator); + + } + } + break; + case 'Q': { + char * NDSresult=NULL; + err=-1; + if (NDSname[0]) + err=NWCXGetMultiStringAttributeValue(ctx,NDSname,"Language",&NDSresult); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", NDSresult,separator); + if (NDSresult) + free(NDSresult); + } + break; + + case 'q': + err=-1; + if (NDSname[0]) + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Generational Qualifier",buffer,sizeof(buffer)); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", buffer,separator); + break; + + case 'R': { err=-1; + if (NDSname[0]) { + char aux[128]=""; + buffer[0]=0; + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Login Disabled",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Login Expiration Time",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Login Grace Limit",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Login Grace Remaining",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Login Intruder Attempts",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Login Intruder Reset Time",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Login Maximum Simultaneous",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + + printf ("%s%c", buffer,separator); + + } + } + break; + case 'r': { + char * NDSresult=NULL; + err=-1; + + if (NDSname[0]) + err=NWCXGetMultiStringAttributeValue(ctx,NDSname,"ACL",&NDSresult); + if (err) + printf ("%s(%s)%c",ERR_MARK,strnwerror(err),separator); + else + printf ("%s%c", NDSresult,separator); + if (NDSresult) + free(NDSresult); + } + break; + + case 'S': + err=NWCXGetPermConnInfo(conn,NWCC_INFO_SERVER_NAME, len, buffer); + if (err) + printf("%s%c",ERR_MARK,separator); + else + printf("%s%c",buffer,separator); + break; + case 's': + err=-1; + if (NDSname[0]) + err=NWCXGetAttributeValueAsString(ctx,NDSname,"Surname",buffer,sizeof(buffer)); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", buffer,separator); + break; + + case 'T': + printf("%s%c",treeName,separator); + break; + case 't': { + char * NDSresult=NULL; + err=-1; + if (NDSname[0]) + err=NWCXGetMultiStringAttributeValue(ctx,NDSname,"Telephone Number",&NDSresult); + if (err) + printf ("%s,",ERR_MARK); + else + printf ("%s,", NDSresult); + if (NDSresult) + free(NDSresult); + NDSresult=NULL; + err=NWCXGetMultiStringAttributeValue(ctx,NDSname,"Facsimile Telephone Number",&NDSresult); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", NDSresult,separator); + if (NDSresult) + free(NDSresult); + + } + break; + case 'U': + err=NWCXGetPermConnInfo(conn,NWCC_INFO_USER_NAME, len, buffer); + if (err) + printf("%s%c",ERR_MARK,separator); + else + printf("%s%c",buffer,separator); + break; + case 'u': { err=-1; + if (NDSname[0]) { + char aux[128]=""; + buffer[0]=0; + err=NWCXGetAttributeValueAsString(ctx,NDSname,"UNIX:UID",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"UNIX:GID",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"UNIX:Primary GroupID",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"UNIX:Primary GroupName",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"UNIX:Login Shell",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"UNIX:Home Directory",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + strcat(buffer,","); + err=NWCXGetAttributeValueAsString(ctx,NDSname,"UNIX:Comments",aux,sizeof(aux)); + if (!err) + strcat(buffer,aux); + else + strcat(buffer,ERR_MARK); + + printf ("%s%c", buffer,separator); + + } + } + break; + case 'V': + err=NWCXGetPermConnInfo(conn,NWCC_INFO_ROOT_ENTRY, sizeof(rootEntry), &rootEntry); + if (!err) + err=NWGetVolumeName(conn,rootEntry.volume,buffer); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c",buffer,separator); + break; + case 'v': + printf("%s%c", NCPFS_VERSION,separator); + break; + case 'W': + err=NWCXGetPermConnInfo(conn,NWCC_INFO_USER_ID, sizeof(NWObjectID), &nwOid); + if (err) + printf("%s%c",ERR_MARK,separator); + else + printf ("%x%c",nwOid,separator); + + break; + case 'w': { + char * NDSresult=NULL; + err=-1; + if (NDSname[0]) + err=NWCXGetMultiStringAttributeValue(ctx,NDSname,"Network Address",&NDSresult); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", NDSresult,separator); + if (NDSresult) + free(NDSresult); + } + break; + + case 'X':{ + struct passwd* pwd=NULL; + char unixUserName [128]; + setpwent(); + pwd=getpwuid(mountUID); + endpwent(); + if (pwd) + strcpy(unixUserName,pwd->pw_name); + else + strcpy(unixUserName,ERR_MARK); + printf ("%s%c",unixUserName,separator); + } + break; + case 'x': { + char * NDSresult=NULL; + err=-1; + if (NDSname[0]) + err=NWCXGetMultiStringAttributeValue(ctx,NDSname,"Title",&NDSresult); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", NDSresult,separator); + if (NDSresult) + free(NDSresult); + } + break; + case 'Y': { + char * NDSresult=NULL; + err=-1; + if (NDSname[0]) + err=NWCXGetMultiStringAttributeValue(ctx,NDSname,"Security Equals",&NDSresult); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", NDSresult,separator); + if (NDSresult) + free(NDSresult); + } + break; + + case 'z': { /*ozer names as frenchmen say ;-)*/ + char * NDSresult=NULL; + err=-1; + if (NDSname[0]) + err=NWCXGetMultiStringAttributeValue(ctx,NDSname,"CN",&NDSresult); + if (err) + printf ("%s%c",ERR_MARK,separator); + else + printf ("%s%c", NDSresult,separator); + if (NDSresult) + free(NDSresult); + } + break; + + + case '0': /*login script reading */ + case '1': + case '2':{ + err=-1; + if (NDSname[0]) { + switch (gUserFields[i]) { + case '0': + err=NWCXGetObjectLoginScript(ctx,NDSname,buffer,&len,sizeof(buffer)); + break; + case '1': + err=NWCXGetProfileLoginScript(ctx,NDSname,buffer,&len,sizeof(buffer)); + break; + case '2': + //strcpy(NDSname,"E14.OUT.R"); // to test context climbing default ctx is PC + err=NWCXGetContextLoginScript(ctx,NDSname,buffer,&len,sizeof(buffer)); + break; + } + } + if (err) + printf ("%s%c",ERR_MARK,separator); + //printf ( "%s%c",strnwerror(err),separator); + else + printf ("%s%c",buffer,separator); + + } + break; + + default: + printf ("%s%c",UNK_MARK,separator);; + + } + } + if (ctx) NWDSFreeContext(ctx); + return err; + } + + + +static NWCCODE processBindServers ( NWCONN_HANDLE conns[],int curEntries){ + int i; + for (i=0; i0) + gSeparator =optarg[0]; + break; + case 'S': + serverName=optarg; + break; + case 'T': + treeName=optarg; + break; + case '1':allConns=0; + break; + + + default: + usage(); + } + } + + if (optind != argc) { + printf ("failed:%d %d",optind,argc); + usage(); + } + if (treeName && serverName) { + fprintf(stderr,"%s failed:-S option cannot be used with -T option\n",progname); + } + + + { NWCONN_HANDLE conns[125]; + int maxEntries=125; + int curEntries=0; + + if (treeName) + err=NWCXGetPermConnListByTreeName (conns , maxEntries, &curEntries,uid,treeName); + else if (serverName) + err=NWCXGetPermConnListByServerName (conns , maxEntries, &curEntries,uid,serverName); + else err=NWCXGetPermConnList (conns , maxEntries, &curEntries,uid); + + if (err) { + fprintf(stderr, "NWCXGetPermConnList failed: %s\n", + strnwerror(err)); + return err; + } + + + /*printf ("got %d \n",curEntries);*/ + if (curEntries) { + + processTrees(conns,curEntries,allConns); + + processBindServers(conns,curEntries); + }else + if (treeName) printf("failed:no ncp connections to tree %s.\n",treeName); + else if (serverName) printf("failed:no ncp connections to server %s.\n",serverName); + else printf("failed:no ncp connections.\n"); + + } + return 0; +} diff --git a/contrib/tcl-utils/ndsexporter.pl b/contrib/tcl-utils/ndsexporter.pl new file mode 100755 index 0000000..0365fba --- /dev/null +++ b/contrib/tcl-utils/ndsexporter.pl @@ -0,0 +1,90 @@ +#!/usr/bin/perl + +# ndsexporter - print a list of NDS properties for a full NDS context +# Copyright (C) 2002 by Patrick Pollet + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +# Revision history: + +# 1.00 2002 June 06 Patrick Pollet +# the program is an Perl script wrapper around ncplist to get a list of objects of a NDS class +# and ncpreadprops to retrieve a liste of NDS properties for one user +# +# exemples of uses +#./ndsexporter.pl -C PC -c "group" get the list of NDS groups in context PC +# ./ndsexporter.pl -C PC -c "volume" -A "cn,Host Server,Host Resource Name" get the selected properties for volumes in context PC +#./ndsexporter.pl -C PC -c "organizational unit" -A "ou" get the list of NDS OU in context PC +#./ndsexporter.pl -C PC -c "group" -A "cn,member" -m "/" |grep 2a get all members of group 2a.PC separated with a : + + + +use Getopt::Std; + +getopts("T:C:A:c:m:v:f:n:h",\%options); + +if ($options{'h'}) { + usage(); + exit (0); +} + +$DEFTREE="INSA_ROOT"; +$DEFCONTEXT="[root]"; +$DEFSEARCH="cn"; +$DEFCLASS="user"; + +$DEFCTN=99999999999; + +$tree = $options {'T'} ? $options{'T'}:$DEFTREE; +$ctx = $options {'C'} ? $options{'C'}:$DEFCONTEXT; +$search = $options {'A'} ? $options{'A'}:$DEFSEARCH; +$class =$options {'c'} ? $options {'c'}:$DEFCLASS; +$sepv =$options {'m'} ? $options {'m'}:" "; +$sepa =$options {'f'} ? $options {'f'}:":"; +$flags =$options {'v'} ? $options {'v'}:"4"; +$cnt =$options {'n'} ? $options {'n'}:$DEFCNT; +$TMPFILE1="/tmp/nw2ldap.tmp1"; + + +system("ncplist -v 4 -o \"$ctx\" -T \"$tree\" -Q -l \"$class\" |sort >$TMPFILE1"); + +open (F1,$TMPFILE1) || die ("$TMPFILE1 not found"); +while () { + chomp; + system("ncpreadprops -T \"$tree\" -o \"$_\" -f \"$sepa\" -m \"$sepv\" -A \"$search\" -v $flags "); + #print; + $cnt--; + last if (! $cnt); + +} +close(F1); +unlink($TMPFILE1); +exit (0); + +sub usage () { + print < +#include +#include +#include +#include + +#include + +#include "private/libintl.h" +#define _(X) gettext(X) + +int +main(int argc, char *argv[]) +{ + struct ncp_conn *conn; + struct ncp_bindery_object obj; + int found = 0; + char default_pattern[] = "*"; + char *pattern = default_pattern; + char *p; + long err; + + + setlocale(LC_ALL, ""); + bindtextdomain(NCPFS_PACKAGE, LOCALEDIR); + textdomain(NCPFS_PACKAGE); + + if (argc > 2) + { + printf(_("usage: %s [pattern]\n"), argv[0]); + exit(1); + } + if (argc == 2) + { + pattern = argv[1]; + } + for (p = pattern; *p != '\0'; p++) + { + *p = toupper(*p); + } + + if ((conn = ncp_open(NULL, &err)) == NULL) + { + com_err(argv[0], err, _("failed:in ncp_open")); + exit(1); + } + + obj.object_id = 0xffffffff; + + while (ncp_scan_bindery_object(conn, obj.object_id, + NCP_BINDERY_FSERVER, pattern, + &obj) == 0) + { + found = 1; + + printf("%s\n", obj.object_name); + + } + + if ((found == 0) && (isatty(1))) + { + printf(_("failed:No servers found\n")); + } + ncp_close(conn); + return 0; +} diff --git a/contrib/tcl-utils/vlist.c b/contrib/tcl-utils/vlist.c new file mode 100644 index 0000000..4dcc1d6 --- /dev/null +++ b/contrib/tcl-utils/vlist.c @@ -0,0 +1,147 @@ +/* + vlist.c - List all volumes on a file server,even not connected. + really simple but can be called from tcl/tk front ends to fill + a listbox with available volumes on one server + Copyright (C) 2001 by Patrick Pollet + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + + Revision history: + + 0.00 2001 February 2001 Patrick Pollet + Initial revision. + + 1.00 2001 March 7rd 2001 Patrick Pollet + Added the word "failed" to all error messages to + simplify TCL/Tk parsing. + Use the "new ncp_volume_list_* API calls. + + + */ + +#include +#include +#include +#include +#include + +#include +#include + +#include "private/libintl.h" +#define _(X) gettext(X) + +static char *progname; + +static void +usage(void) +{ + fprintf(stderr, _("failed. usage: %s [options] servername\n"), progname); + exit(1); +} + +static void +help(void) +{ + printf(_("\n" + "failed.usage: %s [options] servername\n"), progname); + printf(_("\n" + "-h Print this help text\n" + "-n namespace 0=DOS, 1=MAC, 2=NFS, 3=FTAM, 4=OS2\n" + "\n")); + exit(1); +} + + + +int +main(int argc, char *argv[]) +{ + struct ncp_conn *conn; + NWDSCCODE err; + char * server; + unsigned int v; + char vName[256]; + u_int32_t destns = NW_NS_DOS; + NWVOL_HANDLE handle; + int opt; + + + progname = argv[0]; + setlocale(LC_ALL, ""); + bindtextdomain(NCPFS_PACKAGE, LOCALEDIR); + textdomain(NCPFS_PACKAGE); + + NWCallsInit(NULL, NULL); +// NWDSInitRequester(); + + + while ((opt = getopt(argc, argv, "h?n:")) != EOF) + { + switch (opt) + { + case 'n':{ char *zz=NULL; + destns = strtoul(optarg, &zz, 0); + if (zz && *zz && !isspace(zz)){ + printf ("failed: Value %s for optional name space is not a number.\n",optarg); + usage(); + } + break; + } + case 'h': + case '?': + help(); + + default: + usage(); + + } + } + + + if (optind >=argc ) + { + usage(); + } + server=argv[optind]; + + err= NWCCOpenConnByName (NULL,server,NWCC_NAME_FORMAT_BIND,0,NWCC_RESERVED,&conn); + if (err) { + fprintf(stderr,"failed:unable to open connection to %s",server); + exit (1); + } + /********* old code + for (v=0; v<64;v++) { + err=NWGetVolumeName(conn,v,&vName); + if (!err && vName[0]) printf ("%s\n",vName); + else break; + } + *************************/ + err = ncp_volume_list_init(conn, destns, 1, &handle); + if (err) + fprintf(stderr, "failed: Cannot initialize list: %s (%08X)\n", strnwerror(err), err); + else { + while ((err = ncp_volume_list_next(handle, &v, vName, sizeof(vName))) == 0) { + printf("%s\n", vName); + } + err=ncp_volume_list_end(handle); + } + NWCCCloseConn(conn); + /*printf ("err=%d\n",err);*/ + return err; +} + + diff --git a/contrib/tcl/ABOUT b/contrib/tcl/ABOUT new file mode 100644 index 0000000..d2b9000 --- /dev/null +++ b/contrib/tcl/ABOUT @@ -0,0 +1,43 @@ + NDS CLIENT suite v 0.90 + Patrick Pollet + + This set of applications was written to help our students to get access to their + NDS based home directories when using Linux boxes and ncpfs. + + These TCL/tk front ends takes care of everything. + +----------------------------------------------------- +ndslogin: Just login and mount a permanent ncp connection in a +~/ncp/SERVER/SYS directory in your home. +a KDE window will open right in your home if you set openhome_onlogin in +the ndsclient.conf file. Otherwise, use ndshome to open it later. +---------------------------------------------------- +ndslogout.tcl: Get out of Netware, and forget about me ! +It is important to use it since your Netware connections ARE NOT +closed automatically when you logout of Linux. +--------------------------------------------------- +ndshome.tcl: Search your NDS home directory, mount it and open a +Kde window, if you are already logged. Otherwise, call ndslogin. +-------------------------------------------------- +ndswhoami.tcl: You guessed it ;-) +-------------------------------------------------- +ndspasswd.tcl: Change you NDS passwords in a quite friendly way. +------------------------------------------------- +ndsspace.tcl: Display available space on your Netware based home directory +------------------------------------------------- +ndsmount.tcl: Mounts extra NDS volumes in your Linux box. +Only volumes belonging to trees to which you are authenticated +will be shown. +------------------------------------------------ +ncpmount.tcl: Mounts extra Netware volumes in your Linux box. +All Netware servers will be displayed. Still you must be authenticated +before to access their volumes. +------------------------------------------------ + + +This work was inspired by the Now-Well graphical login for bindery +based servers by Erwin Preuner +I did stole from his work a lot of bitmaps, and chunk of TCL/tk code.... +The good work was Erwin's... all added bugs are mine ;-) + +PP February 2001. diff --git a/contrib/tcl/COPYING b/contrib/tcl/COPYING new file mode 100644 index 0000000..a92291d --- /dev/null +++ b/contrib/tcl/COPYING @@ -0,0 +1,483 @@ +This software and all its components are under the GPL + + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/contrib/tcl/about.tcl b/contrib/tcl/about.tcl new file mode 100755 index 0000000..a9cffea --- /dev/null +++ b/contrib/tcl/about.tcl @@ -0,0 +1,183 @@ +#!/usr/bin/tixwish +############################################################################# +# Visual Tcl v1.20 Project +# + +################################# +# GLOBAL VARIABLES +# +global widget; + +################################# +# USER DEFINED PROCEDURES +# +proc init {argc argv} { +global SCRIPT_DIR +catch {image delete logo } +image create photo logo -file [file join $SCRIPT_DIR img/nw.gif ] +} + +init $argc $argv + + +proc {main} {argc argv} { +global SCRIPT_DIR +.about.fra41.tex56 delete 1.1 end + catch {exec cat [file join $SCRIPT_DIR ABOUT] } tmp + .about.fra41.tex56 insert end $tmp +# après l'avoir rempli. si on le met disabled dans WinProc +#ne le rempli pas !!! + .about.fra41.tex56 configure -state disabled +} + +proc {Window} {args} { +global vTcl + set cmd [lindex $args 0] + set name [lindex $args 1] + set newname [lindex $args 2] + set rest [lrange $args 3 end] + if {$name == "" || $cmd == ""} {return} + if {$newname == ""} { + set newname $name + } + set exists [winfo exists $newname] + switch $cmd { + show { + if {$exists == "1" && $name != "."} {wm deiconify $name; return} + if {[info procs vTclWindow(pre)$name] != ""} { + eval "vTclWindow(pre)$name $newname $rest" + } + if {[info procs vTclWindow$name] != ""} { + eval "vTclWindow$name $newname $rest" + } + if {[info procs vTclWindow(post)$name] != ""} { + eval "vTclWindow(post)$name $newname $rest" + } + } + hide { if $exists {wm withdraw $newname; return} } + iconify { if $exists {wm iconify $newname; return} } + destroy { if $exists {destroy $newname; return} } + } +} + +################################# +# VTCL GENERATED GUI PROCEDURES +# + +proc vTclWindow. {base} { + if {$base == ""} { + set base . + } + ################### + # CREATING WIDGETS + ################### + wm focusmodel $base passive + wm geometry $base 1x1+0+0 + wm maxsize $base 1265 1024 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 1 1 + wm withdraw $base + wm title $base "vt.tcl" + ################### + # SETTING GEOMETRY + ################### +} + +proc vTclWindow.about {base} { +global STR + if {$base == ""} { + set base .about + } + if {[winfo exists $base]} { + wm deiconify $base; return + } + ################### + # CREATING WIDGETS + ################### + toplevel $base -class Toplevel + wm focusmodel $base passive + wm geometry $base 443x395+55+110 + wm maxsize $base 785 570 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 0 0 + wm deiconify $base + wm title $base $STR(ndsabout) + label $base.lab40 \ + -borderwidth 0 -image logo -relief raised + frame $base.fra41 \ + -borderwidth 3 -height 324 -relief sunken -width 443 + label $base.fra41.lab44 \ + -anchor e -borderwidth 0 -font {Helvetica -12 normal} -text $STR(name) + label $base.fra41.lab47 \ + -anchor e -borderwidth 0 -font {Helvetica -12 normal} -text $STR(author) + label $base.fra41.lab48 \ + -anchor e -borderwidth 0 -font {Helvetica -12 normal} -text $STR(date) + label $base.fra41.lab49 \ + -anchor e -borderwidth 0 -font {Helvetica -12 normal} -text $STR(license) + label $base.fra41.lab51 \ + -font {Helvetica -12 normal} \ + -anchor w -borderwidth 0 -text $STR(version) + label $base.fra41.lab52 \ + -anchor w -borderwidth 0 \ + -font {Helvetica -12 normal} \ + -text {Patrick Pollet } + label $base.fra41.lab53 \ + -font {Helvetica -12 normal} \ + -anchor w -borderwidth 0 -text $STR(date_version) + label $base.fra41.lab54 \ + -font {Helvetica -12 normal} \ + -anchor w -borderwidth 0 -text $STR(gpl) + text $base.fra41.tex56 \ + -font {Helvetica -10 normal} \ + -highlightthickness 0 \ + -yscrollcommand {.about.fra41.scr59 set} + button $base.fra41.but58 \ + -activeforeground blue -command { destroy .about } \ + -font {Helvetica -12 normal} \ + -highlightthickness 0 -padx 9 -pady 3 -text $STR(ok) + scrollbar $base.fra41.scr59 \ + -command {.about.fra41.tex56 yview} -highlightthickness 0 \ + -orient vert + button $base.fra41.gpl \ + -font {Helvetica -12 normal} \ + -command {global SCRIPT_DIR; source [file join $SCRIPT_DIR license.tcl]} -padx 9 -pady 3 \ + -text $STR(see_gpl) + ################### + # SETTING GEOMETRY + ################### + pack $base.lab40 \ + -in .about -anchor center -expand 0 -fill none -side top + pack $base.fra41 \ + -in .about -anchor center -expand 0 -fill both -side top + place $base.fra41.lab44 \ + -x 10 -y 10 -width 77 -height 16 -anchor nw -bordermode ignore + place $base.fra41.lab47 \ + -x 10 -y 30 -width 77 -height 16 -anchor nw -bordermode ignore + place $base.fra41.lab48 \ + -x 10 -y 50 -width 77 -height 16 -anchor nw -bordermode ignore + place $base.fra41.lab49 \ + -x 10 -y 70 -width 77 -height 16 -anchor nw -bordermode ignore + place $base.fra41.lab51 \ + -x 95 -y 10 -width 337 -height 16 -anchor nw -bordermode ignore + place $base.fra41.lab52 \ + -x 95 -y 30 -width 337 -height 16 -anchor nw -bordermode ignore + place $base.fra41.lab53 \ + -x 95 -y 50 -width 337 -height 16 -anchor nw -bordermode ignore + place $base.fra41.lab54 \ + -x 95 -y 70 -width 112 -height 16 -anchor nw -bordermode ignore + place $base.fra41.tex56 \ + -x 15 -y 105 -width 395 -height 182 -anchor nw -bordermode ignore + place $base.fra41.but58 \ + -x 205 -y 290 -anchor nw -bordermode ignore + place $base.fra41.scr59 \ + -x 415 -y 104 -width 13 -height 184 -anchor nw -bordermode ignore + place $base.fra41.gpl \ + -x 290 -y 65 -anchor nw -bordermode ignore +} + +Window show . +Window show .about + +main $argc $argv diff --git a/contrib/tcl/contexts.tcl b/contrib/tcl/contexts.tcl new file mode 100755 index 0000000..f9dfe2c --- /dev/null +++ b/contrib/tcl/contexts.tcl @@ -0,0 +1,258 @@ +#!/usr/bin/tixwish +############################################################################# +# Visual Tcl v1.20 Project +# +# NDSutils library +# called by ncplogin.tcl to get the list of visible contexts under a tree +# Copyright (C) 2001 by Patrick Pollet +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +# Revision history: + +# 1.00 January 1999 Patrick Pollet +# Initial version using Caldera NDS client +# 1.1 February 2001 Patrick Pollet +# adapted for ncpfs NDS client + +################################# +# GLOBAL VARIABLES +# + + +################################# +# USER DEFINED PROCEDURES +# +proc init {argc argv} { +} + +init $argc $argv + + + +proc uponelevel {} { +global context + set dot [string first "." $context] + if { $dot == "-1" } { + set context "" + } else { + set context [string range $context [ expr $dot +1] [expr [string length $context]-1]] + } + readcontexts +} + + +proc chgcontext {nctx} { +global context + if {$nctx != ".."} { + if {$context !=""} { + set context $nctx.$context + } else { + set context $nctx + } + readcontexts + } else { + uponelevel + } +} + + +proc doValidate {} { +global context +global NDS + set NDS(context) $context + grab release .top51 + destroy .top51 +} + +proc doSelect {} { +global context + + catch { .top51.cpd53.01 curselection} num + if { $num != "-1" } { + catch { .top51.cpd53.01 get $num} sel + if { $sel == ".." } { + uponelevel + } else { + chgcontext $sel + } + } +} + + +proc {readcontexts} {} { +global context +global tree + + if {$context == "" } { + catch {exec ncplist -T $tree -v 4 -Q -l "Org*" } ctxs + } else { + catch {exec ncplist -T $tree -v 4 -Q -A -o $context -c $context -l "Org*" } ctxs + } + set ctxs [lsort $ctxs] + .top51.cpd53.01 delete 0 end + + if {$context !=""} { + .top51.cpd53.01 insert end ".." + } + foreach ctx $ctxs { + .top51.cpd53.01 insert end $ctx + } +} + + +proc {main} {argc argv} { +global tree +global context +global NDS + #set tree $NDS(tree) + #set context $NDS(context) + readcontexts +} + +proc {Window} {args} { +global vTcl + set cmd [lindex $args 0] + set name [lindex $args 1] + set newname [lindex $args 2] + set rest [lrange $args 3 end] + if {$name == "" || $cmd == ""} {return} + if {$newname == ""} { + set newname $name + } + set exists [winfo exists $newname] + switch $cmd { + show { + if {$exists == "1" && $name != "."} {wm deiconify $name; return} + if {[info procs vTclWindow(pre)$name] != ""} { + eval "vTclWindow(pre)$name $newname $rest" + } + if {[info procs vTclWindow$name] != ""} { + eval "vTclWindow$name $newname $rest" + } + if {[info procs vTclWindow(post)$name] != ""} { + eval "vTclWindow(post)$name $newname $rest" + } + } + hide { if $exists {wm withdraw $newname; return} } + iconify { if $exists {wm iconify $newname; return} } + destroy { if $exists {destroy $newname; return} } + } +} + +################################# +# VTCL GENERATED GUI PROCEDURES +# + +proc vTclWindow. {base} { + if {$base == ""} { + set base . + } + ################### + # CREATING WIDGETS + ################### + wm focusmodel $base passive + wm geometry $base 1x1+0+0 + wm maxsize $base 1137 834 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 1 1 + wm withdraw $base + wm title $base "vt.tcl" + ################### + # SETTING GEOMETRY + ################### +} + +proc vTclWindow.top51 {base} { +global STR + if {$base == ""} { + set base .top51 + } + if {[winfo exists $base]} { + wm deiconify $base; return + } + ################### + # CREATING WIDGETS + ################### + toplevel $base -class Toplevel \ + -menu .top51.m28 + wm focusmodel $base passive + wm geometry $base 453x290+163+164 + wm maxsize $base 1137 834 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 0 0 + wm deiconify $base + wm title $base $STR(pick_ctx) + button $base.but52 \ + -activeforeground blue -command doValidate \ + -font -Adobe-Helvetica-*-R-Normal--*-120-*-*-*-*-*-* -padx 9 -pady 3 \ + -text $STR(ok) + frame $base.cpd53 \ + -height 30 -relief sunken -width 30 + listbox $base.cpd53.01 \ + -font -Adobe-Helvetica-Medium-R-Normal-*-*-120-*-*-*-*-*-* -height 0 \ + -width 0 -xscrollcommand {.top51.cpd53.02 set} \ + -yscrollcommand {.top51.cpd53.03 set} + bind $base.cpd53.01 { + doSelect + } + scrollbar $base.cpd53.02 \ + -borderwidth 1 -command {.top51.cpd53.01 xview} -orient horiz \ + -width 0 + scrollbar $base.cpd53.03 \ + -borderwidth 1 -command {.top51.cpd53.01 yview} -orient vert \ + -width 10 + button $base.but55 \ + -activeforeground blue -command { destroy .top51 } \ + -font -Adobe-Helvetica-*-R-Normal--*-120-*-*-*-*-*-* -padx 9 -pady 3 \ + -text $STR(cancel) + label $base.lab58 \ + -image logo -relief sunken -text Logo + menu $base.m28 \ + -cursor {} + label $base.lab29 \ + -borderwidth 1 -justify left -relief raised \ + -textvariable context + ################### + # SETTING GEOMETRY + ################### + place $base.but52 \ + -x 355 -y 110 -width 92 -height 26 -anchor nw -bordermode ignore + place $base.cpd53 \ + -x 5 -y 105 -width 340 -height 180 -anchor nw -bordermode ignore + grid columnconf $base.cpd53 0 -weight 1 + grid rowconf $base.cpd53 0 -weight 1 + grid $base.cpd53.01 \ + -in .top51.cpd53 -column 0 -row 0 -columnspan 1 -rowspan 1 \ + -sticky nesw + grid $base.cpd53.02 \ + -in .top51.cpd53 -column 0 -row 1 -columnspan 1 -rowspan 1 -sticky ew + grid $base.cpd53.03 \ + -in .top51.cpd53 -column 1 -row 0 -columnspan 1 -rowspan 1 -sticky ns + place $base.but55 \ + -x 355 -y 160 -width 92 -height 26 -anchor nw -bordermode ignore + place $base.lab58 \ + -x 5 -y 5 -width 446 -height 77 -anchor nw -bordermode ignore + place $base.lab29 \ + -x 5 -y 85 -width 331 -height 18 -anchor nw -bordermode ignore +} + +Window show . +Window show .top51 + +main $argc $argv diff --git a/contrib/tcl/img/.xvpics/nw.gif b/contrib/tcl/img/.xvpics/nw.gif new file mode 100644 index 0000000000000000000000000000000000000000..0757c0343b0853e5c3761a17958698e8efdb7936 GIT binary patch literal 1017 zcmcJMF;Bu!5XW!kQ;^sXpctcZRWKbW1`W6|nYgfY;VWoj92o4-ufRYU=+Mt#(t)_V zp>OB_1A|S|)H0m^*IJ-8PR2`n`M-B}zjycE^=bY1xKTT}>-C!58@*$k*ADddm2R{; zP)*}<&}j`WI_-ATxV<^AogLPX8uiA>Nsa%*i0H3aAc#ax5qrFl!zw!D4RaiGSVXX_ z8VI@~=KBwYV3ty{T;mU*1C}Wyr@Rbfgz$y23}ltY3YFPB3r)T4yfQ|%D$u_-bA?e$h1b? V+1RnHv1z_qw!5E6p0}9H`3pLVLH+;$ literal 0 HcmV?d00001 diff --git a/contrib/tcl/img/.xvpics/refresh.gif b/contrib/tcl/img/.xvpics/refresh.gif new file mode 100644 index 0000000..ea0f36a --- /dev/null +++ b/contrib/tcl/img/.xvpics/refresh.gif @@ -0,0 +1,6 @@ +P7 332 +#XVVERSION: +#IMGINFO: +#END_OF_COMMENTS: +22 19 255 +ÛÛÛÛÛÛoooooooo%ÛÛÛÛÛÛÛÛÛÛÛÛoÿo“o“oo$%%ÛÛÛÛÛÛÛÛÛoÿ“““““o$$$%%ÛÛÛÛoÿÛÛÛÛ“Û“Û“Û“““o$$%ÛÛÛÛoÿÛÛ“Û“Û“Û“Û“$$$%%ÛÛÛÛÛoÿÛÛ“Û“Û“Û“$%%%ÛÛÛÛÛÛoÿÛÛÛÛÛÛo$%%%ÛÛÛÛÛÛÛoÿÛÛÛÛo$%%%ÛÛÛÛÛÛÛÛoÿÛÛo$%o%%ÛÛÛÛÛÛÛÛÛoÿo$%Ûo%%ÛÛÛÛÛÛÛÛÛÛ%%%ÛÛo$%%ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛo$%%Û’ÛÛÛÛÛÛÛÛÛÛÛÛÛ““$$%%Û’’ÛÛÛÛ“““““““““o$$%%’’’ÛÛÛÛ“““““““““o$$$%%ooÛÛÛÛÛ“o“o“o“o“oo$%o%o’ÛÛÛÛÛ“oooooooooooo%o’’ÛÛÛÛÛÛ“oo%%%%%%%%o’’ÛÛÛÛÛÛÛÛÛÛ’’’’’’’’’’’ÛÛÛ \ No newline at end of file diff --git a/contrib/tcl/img/.xvpics/server.gif b/contrib/tcl/img/.xvpics/server.gif new file mode 100644 index 0000000000000000000000000000000000000000..c6c706f714bfc46eb4036958d150149548730497 GIT binary patch literal 1017 zcmcJNF;Bu!5XW!kQ;^sXpctZYRWuza1`N6}nYgfY;VVdD92o4-ufRYU=+Mt#(t)_V zp>JS-fu(6kEyMYLuM}DmC*vjW<$u?Ezq@;{_ZQXk^IGNPsoQO|J7&wes+^e3JJY&t zK{c$KUhB4Z-D)-))pV$l%(Lc6CFr3q~`FlkX%z^*D}kR_}#` zy_^m`Z_2_SP`7OiZ2OBu7z*Keeu+rWs=Wz#<6vU+jrn*_I1=gS@Eva=e0N|wgZ6af TInKzoKOEODW>OH$$20x`Go(R= literal 0 HcmV?d00001 diff --git a/contrib/tcl/img/.xvpics/servericon.gif b/contrib/tcl/img/.xvpics/servericon.gif new file mode 100644 index 0000000000000000000000000000000000000000..e4360edcbc830252591dfa7ee30ebd56b950ffaa GIT binary patch literal 541 zcmZ{gOAdn|6h#@c3KLm@jcMYv)rNu6)W&q?3S3NC3qytaU+*6S zcITYk_uv}$82A{ttYi2uX7MXX;fVB4EU NZKR$~Y>N;<@BxC3pceoD literal 0 HcmV?d00001 diff --git a/contrib/tcl/img/.xvpics/umount.gif b/contrib/tcl/img/.xvpics/umount.gif new file mode 100644 index 0000000000000000000000000000000000000000..74d377fb52548d69c4f80c4b750986bb70083955 GIT binary patch literal 793 zcmb7?OAdlC5Qe*MI0Om3fFPK#RWK}QjT+*P6L7t*dyhE`PAPqW7;zTu%=G)GGtk>9 z&a#vyudb`^k4Es4CQW;7crDPY_@x(he->?9@#mwY$09xyahm58fRUZX0Dwqbc9|r= zB#e7aGBQY4Tq*T=iBFC|kVf7Z9;|tv!X6wQMUhrahl8~#QggIHTY+xKu&%X`Hm&GY zms%9vsO@R=46M{5xn0|!Ruc$f!?^5p6AfRS=a9_De-%=!TlV2 S<+mLq1LDj4@bFdr_hR3R?#IXg literal 0 HcmV?d00001 diff --git a/contrib/tcl/img/nw.gif b/contrib/tcl/img/nw.gif new file mode 100644 index 0000000000000000000000000000000000000000..4363b7bd36b3ad03de31ad3542a15c36b670a19e GIT binary patch literal 8958 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 literal 0 HcmV?d00001 diff --git a/contrib/tcl/img/organiz.gif b/contrib/tcl/img/organiz.gif new file mode 100644 index 0000000000000000000000000000000000000000..0705fa7d0048f2466eebd318583046edd72a801f GIT binary patch literal 259 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�+ zA*+bGEqbCU_%pKVbYL<&$F`3}llF@eye*pO-s$2ceZ59a$OH|cKVCwQ9v*fKSORsbX^Rxr9QW5R2nHK%VJ{lRBUlpJcof}5W{=3!RzSmL4eYO3( zuRfahaC+l_aInT(G9TaeP#O|`o3%&5ye0{lHq%_;5%LR zT-MB#4`9wL4Jei})hC$LrlPvP5G^V^o`jEg8UM^-QTQyowhvS;Ybe^4!ghv9XW4-*y(4}NJw9u?7N`|LxY^K)ohct zOmksooq9mV%lr!@h+Y(e1|WM{{CQ%x{dJJX=%|z}m)yj*gT^u+6J2uCqfp^Ahv!NN z?|^K>9~1A+eeBbzP5vnLodVg$&UA8t&t_*kR36-YdMv8XL$vqBrLj!)37-wL&9ilV zX4JOfwMt(x=SG!sl&p z!=qJhTCCvBFZ`CG?9u#x}Y7cwnx3;Nd4L3n0r*K5c%PH6XCPxvUgrRSU!$8LPI(r z_gxC2zK8M#~#dBiASCPliDE$;1aTb|zXC{oCvzrvfdcSD(v}Es1^SS)1l5%_UlHvI| zi23WYbKSG{0*`Y!G&!B&%B_xOgYQKdYI92KFH&5i<6qfKGgvlE3x(MJ`j)v(gTqx{ zqRr&sNQ($#_CUk`nv6t#9e;$xA(naR{7yNVZ`Hi5@WJCH3MhxGoCh8J5{EU)Ul*RMe9OqtFBv&A`|4_TzTeVexli_#tk)J18Uf6eMRRhX zMiw=XDi7ItD&k$vwluL!kN+*t&sNqv_5Fy<3Zb%s8QH;nL~vg=!s3%LB}UmBD*B%> znIHU&HE-L-vMG&;+(KvVr1|>(4eIz~EZQ}1#A#YVHu4AM9M%S`%e~~!98<6Wh@R|| zQMvKF>_c)$jsJZQXw!lA`DnlTxAu;NCZh|qt}_Jg|Jf6s5cG5(e!2HpIdX*tW3b5Y;F^vN;` zW(8!~^dWx!m#x{02#HD*DX~atFp-R{{+124az11=(f0(>2^7TiQuSqRkJcyF`Te^e zWNJn!f0)*(tgiid@w=S~5J{;!rGuKjm$`ct5yn_}_+a5s3fzDPowi9Lro6hhBW@QV z#VQ_W24z}vnzcwg^hd z+V|n-Y2{U?OjS8Zo%0&d@WF*~d5jm)vd>#1s|Hx0@GIPhOma#xYRo!rW6rXmdVPUkBD~^hci$k>)@Y Q_)N&Rldy033;?kCKamd6Pyhe` literal 0 HcmV?d00001 diff --git a/contrib/tcl/img/out/servericon.gif b/contrib/tcl/img/out/servericon.gif new file mode 100644 index 0000000000000000000000000000000000000000..3fdf04a8e3eae1e9ccb83f42ffbaad75b2d3faac GIT binary patch literal 463 zcmZ?wbhEHb6k`x$Sjxcg|NsAU=gu8Fc5KR&DOc6PR=rX~Xe0|y6(qM~ATbv01m+O=EvZawz?{quXz zubsPgZt2>kdynlcF3vu7Z125$=dN7?+OT!$(m8vN0j=0tU0r zOlfK9sh+d6$I#Hw%gf8s(lRJ0NI*aU=r)2t2j~u=>; z&#CMfV8F%Ew%m;IK^Y^DTf)LpBQegSPJ$jnGB-C(xR{{9kh8K`K|F~wf}fdPfVrTS zfjfgUk%>RFy_T1YRajU=Sd^7ftgwi&%!#+2O|Yi6kBxsdJ9F!@juKwZF78m)iSv1P zr!$7Kh%GNl=V20$2o>L%x`}rytN4z2XG*2GWf&FQ zcWHEJAV*0}Pyj3d0000M022TJ1AGX&(cWUo8Ac$t6(izg10jk*VRD{QNd(Zoq?rP% zYrn2pbkv~Wublz)sYyzLA+hLV2$j4Kt%(dMm(mK7c8y8_9glUmn|&F|GT?A#5e%}( vfxQ^nWAM(L{=1J#aSam~gc%rB0s(wK4~-6qb03Fc9Vn2CAA6db3kd)_>OV@` literal 0 HcmV?d00001 diff --git a/contrib/tcl/img/tree32.gif b/contrib/tcl/img/tree32.gif new file mode 100644 index 0000000000000000000000000000000000000000..f5727b8ffde3d456f5d1e09b6caa154ea9862555 GIT binary patch literal 1162 zcmZ?wbhEHbRA5kG`2L>(2pYh+0ZcUjc?}?N;J^Wf{|x{CGXNR?fz&7%4T0ep0*XIb z7#SG28FWCN1LX+^j{gke95Nmo794D5V^)Eg!f2&yU$(Q|x}QHb z9qy3O-&C6Q`N@r|>}PlJ@$TN1+Ze0PHG^AP`Pg1bQUARW!LQymE0u2VIT5Is-o`v* zxvk#?CGV}8{?mMR2P%dyWodUx?^!e3kYTr(Zk}9#!jqK6F4|$Xm64UVwrtto^+#gP z(m#FTo+cBEA6g#28KcIyZBi&dXF<55Od)$YP2Hib2D?+L7 eMN}v2$u{Ax+^uS1b*oo)Oe-_k^di)O!5RRBqNRlZ literal 0 HcmV?d00001 diff --git a/contrib/tcl/img/umount.gif b/contrib/tcl/img/umount.gif new file mode 100644 index 0000000000000000000000000000000000000000..74e2187cb9712691c9a81d8d8a6d22c6110878a1 GIT binary patch literal 268 zcmZ?wbhEHb)MF4}c+9|X_wHRKB_#$1hTXe&|NsBLyu5tXs#SaT?74mW_GJc!($Z3f z3cd zqx5iJfzJ67n}F6rg_`r~4)Y6cFspU2Oi);EVKLt?d4k0hx!T<+tv_Qb7KXJ}*lbff z@p#Ro*I)D&_^&?iv1tp5 O$eh0*BgY`fU=09A^?3mR literal 0 HcmV?d00001 diff --git a/contrib/tcl/license.tcl b/contrib/tcl/license.tcl new file mode 100755 index 0000000..a8f4b94 --- /dev/null +++ b/contrib/tcl/license.tcl @@ -0,0 +1,140 @@ +#!/usr/bin/tixwish +############################################################################# +# Visual Tcl v1.20 Project +# + +################################# +# GLOBAL VARIABLES +# +global widget; + +################################# +# USER DEFINED PROCEDURES +# +proc init {argc argv} { +global SCRIPT_DIR +catch {image delete logo} +image create photo logo -file [file join $SCRIPT_DIR img/nw.gif] +} + +init $argc $argv + + +proc {main} {argc argv} { +global SCRIPT_DIR +.license.tex30 delete 1.1 end + catch {exec cat [file join $SCRIPT_DIR COPYING] } about +.license.tex30 insert end $about +# après l'avoir rempli. si on le met disabled dans WinProc +#ne le rempli pas !!! + .license.tex30 configure -state disabled +} + +proc {Window} {args} { +global vTcl + set cmd [lindex $args 0] + set name [lindex $args 1] + set newname [lindex $args 2] + set rest [lrange $args 3 end] + if {$name == "" || $cmd == ""} {return} + if {$newname == ""} { + set newname $name + } + set exists [winfo exists $newname] + switch $cmd { + show { + if {$exists == "1" && $name != "."} {wm deiconify $name; return} + if {[info procs vTclWindow(pre)$name] != ""} { + eval "vTclWindow(pre)$name $newname $rest" + } + if {[info procs vTclWindow$name] != ""} { + eval "vTclWindow$name $newname $rest" + } + if {[info procs vTclWindow(post)$name] != ""} { + eval "vTclWindow(post)$name $newname $rest" + } + } + hide { if $exists {wm withdraw $newname; return} } + iconify { if $exists {wm iconify $newname; return} } + destroy { if $exists {destroy $newname; return} } + } +} + +################################# +# VTCL GENERATED GUI PROCEDURES +# + +proc vTclWindow. {base} { + if {$base == ""} { + set base . + } + ################### + # CREATING WIDGETS + ################### + wm focusmodel $base passive + wm geometry $base 1x1+0+0 + wm maxsize $base 1265 1024 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 1 1 + wm withdraw $base + wm title $base "vt.tcl" + ################### + # SETTING GEOMETRY + ################### +} + +proc vTclWindow.license {base} { +global STR + if {$base == ""} { + set base .license + } + if {[winfo exists $base]} { + wm deiconify $base; return + } + ################### + # CREATING WIDGETS + ################### + toplevel $base -class Toplevel + wm focusmodel $base passive + wm geometry $base 455x424+149+50 + wm maxsize $base 1265 994 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 1 1 + wm deiconify $base + wm title $base $STR(ndslicense) + label $base.01 \ + -anchor s -background white -borderwidth 3 -image logo -relief sunken \ + -text label + button $base.but40 \ + -activeforeground blue -command {destroy .license}\ + -font -Adobe-Helvetica-*-R-Normal--*-120-*-*-*-*-*-*\ + -padx 9 -pady 3 -text $STR(close) + text $base.tex30 \ + -font {Helvetica -10 normal} -wrap none \ + -xscrollcommand {.license.scr32 set} \ + -yscrollcommand {.license.scr31 set} + scrollbar $base.scr31 \ + -command {.license.tex30 yview} -orient vert + scrollbar $base.scr32 \ + -command {.license.tex30 xview} -orient horiz + ################### + # SETTING GEOMETRY + ################### + place $base.01 \ + -x 4 -y 5 -width 448 -height 87 -anchor nw -bordermode ignore + place $base.but40 \ + -x 185 -y 385 -width 77 -height 28 -anchor nw -bordermode ignore + place $base.tex30 \ + -x 5 -y 95 -width 430 -height 262 -anchor nw -bordermode ignore + place $base.scr31 \ + -x 435 -y 95 -width 18 -height 262 -anchor nw -bordermode ignore + place $base.scr32 \ + -x 5 -y 360 -width 429 -height 18 -anchor nw -bordermode ignore +} + +Window show . +Window show .license + +main $argc $argv diff --git a/contrib/tcl/ncpmount.tcl b/contrib/tcl/ncpmount.tcl new file mode 100755 index 0000000..820eb09 --- /dev/null +++ b/contrib/tcl/ncpmount.tcl @@ -0,0 +1,451 @@ +#!/usr/bin/tixwish +############################################################################# +# Visual Tcl v1.20 Project +# +# ncpmount.tcl - mount Netware volumes from a list of servers. +# user must have at least one ncpfs permanent connection. +# mounting will be done in ~/ncp/SERVER/VOL directory (autocreated) +# Copyright (C) 2001 by Patrick Pollet +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +# Revision history: + +# 1.00 January 1999 Patrick Pollet +# Initial version using Caldera NDS client +# (only root could use it !) +# 1.1 February 2001 Patrick Pollet +# adapted for ncpfs NDS client +# 1.2 May 2002 Patrick Pollet +# added -l parameter to all ncplogin/ncpmap calls +# to force local mounts in the case of NFS mounted homes +# if mount_locally is set in /etc/ndsclient.conf + + +################################# +# GLOBAL VARIABLES +# + + +################################# +# USER DEFINED PROCEDURES +# +proc {initpath} {} { +#set up path to others scripts and images +global SCRIPT_DIR env + + if {![info exists env(NDSCLIENT_HOME)]} { + set home [file dirname [info script]] + switch [file pathtype $home] { + absolute {set env(NDSCLIENT_HOME) $home} + relative {set env(NDSCLIENT_HOME) [file join [pwd] $home]} + volumerelative { + set curdir [pwd] + cd $home + set env(NDSCLIENT_HOME) [file join [pwd] [file dirname \ + [file join [lrange [file split $home] 1 end]]]] + cd $curdir + } + } + } +set SCRIPT_DIR $env(NDSCLIENT_HOME) +#puts $SCRIPT_DIR +} + +proc init {argc argv} { +global SCRIPT_DIR +initpath +catch { image delete logo} + image create photo logo -file [file join $SCRIPT_DIR img/nw.gif] +uplevel #0 [list source [file join $SCRIPT_DIR ndsutils.tcl]] +uplevel #0 [list source [file join $SCRIPT_DIR ndsstrings.tcl]] +NDS:init +} + +init $argc $argv + +proc {dobrowse} {} { +#global mntpoint + +} + +proc {domount} {} { +#global mntpoint +global server +global volume +global username +global mount_locally + + puts "mounting $volume on server $server" + if ($mount_locally) { + catch {exec ncpmap -S $server -V $volume -a -E -l} result + } else { + catch {exec ncpmap -S $server -V $volume -a -E } result + } + puts $result + if [regexp "(.*)mounted(.*):(.*)$" $result aux1 aux2 aux3 path] { + #puts $path + refresh_mounted + #KDE 2 + exec kfmclient openURL $path + return 1 + } + NDS:dialog $result + return 0 +} + + +proc {doumount} {} { +global STR + catch {.top28.f2.already curselection } {tmp} + if {$tmp !=""} { + catch {.top28.f2.already get $tmp} tmp1 + set tmp2 [split $tmp1 :] +# puts $tmp1 + set item [lindex $tmp2 0] + catch [exec ncpumount $item] status + if {$status !=""} { + NDS:dialog [join $status {-}] OK + } + refresh_mounted + } else { + NDS:dialog $STR(nothing) + } +} + + +proc {refreshservers} {} { +global server; + + catch {exec slist2 } slist + .top28.mount.serverslbx delete 0 end + set slist [lsort $slist] + foreach serv $slist { + .top28.mount.serverslbx insert end $serv + } + .top28.mount.serverslbx selection set 0 + catch {.top28.mount.serverslbx get 0} {server} + if {$server !=""} { + .top28.mount.vlist configure -state active + refreshvolumes + } +} + +proc {refreshvolumes} {} { +global server +global volume + + catch {exec vlist $server } vlist1 + set vlist1 [lsort $vlist1] +.top28.mount.volumeslbx delete 0 end + foreach vol $vlist1 { + .top28.mount.volumeslbx insert end $vol + } + .top28.mount.volumeslbx selection set 0 + catch {.top28.mount.volumeslbx get 0} volume + majbtn_mount +} + +proc {refresh_mounted} {} { +catch {exec ncpwhoami -fMSV -s :} slist + + .top28.f2.already delete 0 end + set cnt 0 + if {! [ string match "*no ncp*" $slist]} { + foreach mnt $slist { + .top28.f2.already insert end $mnt + set cnt [expr $cnt +1 ] + } + } + majbtn_umount {$cnt} +} + +proc {selectserver} {} { +global server; + catch {.top28.mount.serverslbx curselection} num + if {$num !=""} { + catch {.top28.mount.serverslbx get $num} server + if {$server !=""} { + .top28.mount.vlist configure -state active + refreshvolumes + } + } +} + +proc {selectvolume} {} { +global volume; + catch {.top28.mount.volumeslbx curselection} num + if {$num !=""} { + catch {.top28.mount.volumeslbx get $num} volume + if {$volume !=""} { + .top28.mount.vlist configure -state active + } + majbtn_mount + + } +} + +proc {majbtn_mount} {} { +#global mntpoint +global volume + + if {$volume !="" } { + .top28.mount.but30 configure -state normal + } else { + .top28.mount.but30 configure -state disabled + } +} + +proc {majbtn_umount} { onoff } { +#global mntpoint +global volume + + if {$onoff !="0" } { + .top28.f2.dismount configure -state normal + } else { + .top28.f2.dismount configure -state disabled + } +} + +proc {main} {argc argv} { +global server +global volume +global username +#global mntpoint +global mount_locally; # from /etc/ndsclient.conf +global STR NDS + + .top28.lab33 configure -text { } + .top28.lab34 configure -text { } + .top28.lab35 configure -text $STR(not_logged_in) + .top28.lab33 configure -text $NDS(tree) + .top28.lab34 configure -text $NDS(context) + set username $NDS(username) + set server "" + set volume "" + if {$username !=""} { + .top28.lab35 configure -text $username + refreshservers + refresh_mounted + } + if {$server==""} { + .top28.lab35 configure -text $STR(not_logged_in) + .top28.mount.but30 configure -state disabled + .top28.f2.dismount configure -state disabled +# .top28.mount.mntedit configure -state disabled +# .top28.mount.browsebtn configure -state disabled + } + # get global preferences + source /etc/ndsclient.conf +} + +proc {Window} {args} { +global vTcl + set cmd [lindex $args 0] + set name [lindex $args 1] + set newname [lindex $args 2] + set rest [lrange $args 3 end] + if {$name == "" || $cmd == ""} {return} + if {$newname == ""} { + set newname $name + } + set exists [winfo exists $newname] + switch $cmd { + show { + if {$exists == "1" && $name != "."} {wm deiconify $name; return} + if {[info procs vTclWindow(pre)$name] != ""} { + eval "vTclWindow(pre)$name $newname $rest" + } + if {[info procs vTclWindow$name] != ""} { + eval "vTclWindow$name $newname $rest" + } + if {[info procs vTclWindow(post)$name] != ""} { + eval "vTclWindow(post)$name $newname $rest" + } + } + hide { if $exists {wm withdraw $newname; return} } + iconify { if $exists {wm iconify $newname; return} } + destroy { if $exists {destroy $newname; return} } + } +} + +################################# +# VTCL GENERATED GUI PROCEDURES +# + +proc vTclWindow. {base} { + if {$base == ""} { + set base . + } + ################### + # CREATING WIDGETS + ################### + wm focusmodel $base passive + wm geometry $base 1x1+0+0 + wm maxsize $base 785 570 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 1 1 + wm withdraw $base + wm title $base "vt.tcl" + ################### + # SETTING GEOMETRY + ################### +} + +proc vTclWindow.top28 {base} { +global STR + if {$base == ""} { + set base .top28 + } + if {[winfo exists $base]} { + wm deiconify $base; return + } + ################### + # CREATING WIDGETS + ################### + toplevel $base -class Toplevel + wm focusmodel $base passive + wm geometry $base 450x456+144+75 + wm maxsize $base 785 570 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 0 0 + wm deiconify $base + wm title $base $STR(ndsmount) + + label $base.lab29 \ + -borderwidth 1 -font {Helvetica 12 normal} -justify right -text $STR(context) + label $base.lab30 \ + -borderwidth 1 -font {Helvetica 12 normal} -justify right -text $STR(tree) + label $base.lab31 \ + -borderwidth 1 -font {Helvetica 12 normal} -justify right -text $STR(user) + label $base.lab33 \ + -borderwidth 1 -justify left -relief sunken -text { } + label $base.lab34 \ + -borderwidth 1 -justify left -relief sunken -text { } + label $base.lab35 \ + -borderwidth 1 -justify left -relief sunken \ + -text $STR(not_logged_in) + label $base.lab36 \ + -image logo -relief sunken -text label + button $base.but28 \ + -activeforeground #0000f7 -command {exit} \ + -font -Adobe-Helvetica-*-R-Normal--*-120-*-*-*-*-*-* -padx 9 -pady 3 \ + -text $STR(close) + frame $base.mount \ + -borderwidth 2 -height 75 -relief groove -width 125 + listbox $base.mount.serverslbx \ + -font {Helvetica -12 normal} \ + -yscrollcommand {.top28.mount.serversscroll set} + + bind $base.mount.serverslbx { + selectserver + } + listbox $base.mount.volumeslbx \ + -font {Helvetica -12 normal} \ + -yscrollcommand {.top28.mount.volumesscroll set} + bind $base.mount.volumeslbx { + majbtn_mount + } + bind $base.mount.volumeslbx { + selectvolume + domount + } + button $base.mount.vlist \ + -command {selectserver } -padx 9 -pady 3 -text >> + + scrollbar $base.mount.serversscroll \ + -command {.top28.mount.serverslbx yview} -orient vert + scrollbar $base.mount.volumesscroll \ + -command {.top28.mount.volumeslbx yview} -orient vert + button $base.mount.but30 \ + -activeforeground #0000fe \ + -command {domount} \ + -font -Adobe-Helvetica-*-R-Normal--*-120-*-*-*-*-*-* -padx 9 -pady 3 \ + -text $STR(mount) + frame $base.f2 \ + -borderwidth 2 -height 75 -relief groove -width 125 + listbox $base.f2.already -font {Helvetica -12 normal}\ + -height 5 \ + -yscrollcommand {.top28.f2.sb2 set} + button $base.f2.dismount \ + -command {doumount} \ + -padx 9 -pady 3 -text $STR(umount) + scrollbar $base.f2.sb2 \ + -command {.top28.f2.already yview} -orient vert + label $base.f2.lb3 \ + -borderwidth 1 -font {Helvetica -12 normal} -justify left \ + -text $STR(already_mounted) + ################### + # SETTING GEOMETRY + ################### + place $base.lab29 \ + -x 280 -y 102 -anchor se -bordermode ignore + place $base.lab30 \ + -x 100 -y 102 -anchor se -bordermode ignore + place $base.lab31 \ + -x 100 -y 132 -anchor se -bordermode ignore + place $base.lab33 \ + -x 105 -y 85 -width 106 -height 18 -anchor nw -bordermode ignore + place $base.lab34 \ + -x 285 -y 85 -width 151 -height 18 -anchor nw -bordermode ignore + place $base.lab35 \ + -x 105 -y 115 -width 331 -height 18 -anchor nw -bordermode ignore + place $base.lab36 \ + -x 0 -y 0 -width 446 -height 78 -anchor nw -bordermode ignore + place $base.but28 \ + -x 175 -y 425 -width 98 -height 26 -anchor nw -bordermode ignore + place $base.mount \ + -x 5 -y 145 -width 440 -height 155 -anchor nw -bordermode ignore + place $base.mount.serverslbx \ + -x 5 -y 5 -width 163 -height 106 -anchor nw -bordermode ignore + place $base.mount.volumeslbx \ + -x 245 -y 5 -width 163 -height 106 -anchor nw -bordermode ignore + place $base.mount.vlist \ + -x 200 -y 35 -width 37 -height 56 -anchor nw -bordermode ignore +# place $base.mount.lb \ +# -x 10 -y 120 -anchor nw -bordermode ignore +# place $base.mount.mntedit \ +# -x 120 -y 120 -width 128 -height 22 -anchor nw -bordermode ignore +# place $base.mount.browsebtn \ +# -x 250 -y 120 -width 75 -height 26 -anchor nw -bordermode ignore + place $base.mount.serversscroll \ + -x 170 -y 5 -width 21 -height 107 -anchor nw -bordermode ignore + place $base.mount.volumesscroll \ + -x 410 -y 5 -width 21 -height 107 -anchor nw -bordermode ignore +# place $base.mount.but28 \ +# -x 95 -y 330 -width 98 -height 26 -anchor nw -bordermode ignore +# place $base.mount.but29 \ +# -x 95 -y 330 -width 98 -height 26 -anchor nw -bordermode ignore + place $base.mount.but30 \ + -x 170 -y 120 -width 85 -height 26 -anchor nw -bordermode ignore + place $base.f2 \ + -x 5 -y 310 -width 440 -height 105 -anchor nw -bordermode ignore + place $base.f2.already \ + -x 5 -y 20 -width 298 -height 76 -anchor nw -bordermode ignore + place $base.f2.dismount \ + -x 350 -y 35 -width 82 -height 26 -anchor nw -bordermode ignore + place $base.f2.sb2 \ + -x 305 -y 20 -width 21 -height 77 -anchor nw -bordermode ignore + place $base.f2.lb3 \ + -x 7 -y 2 -width 126 -height 18 -anchor nw -bordermode ignore +} + +Window show . +Window show .top28 + +main $argc $argv diff --git a/contrib/tcl/ndsclient.conf b/contrib/tcl/ndsclient.conf new file mode 100644 index 0000000..e8efb25 --- /dev/null +++ b/contrib/tcl/ndsclient.conf @@ -0,0 +1,18 @@ +# root personnalization the the NDS client suite + +#if 0 , a ~/.ndsclient.conf file will NOT be considered +set home_override 0 +#if 0, users cannot change trees, nor contexts +set browse_tree 1 +#if 1, will start with the "advanced frame" visible +#if 1 , will open the tree/context selection area browse_tree must be 1 too ! +set start_advanced 1 +#if 1 will open a window to home fter a successful login +set openhome_onlogin 1 +set mount_locally 0 +#if 1 will allow autologon if the 4 env values are set +#NWCLIENT_PREFERRED_TREE, NWCLIENT_DEFAULT_NAME_CONTEXT,NWCLIENT_DEFAULT_USER by Caldera +# and NWCLIENT_DEFAULT_PASSWORD ( by PP) +set autologon 1 + + diff --git a/contrib/tcl/ndshome.tcl b/contrib/tcl/ndshome.tcl new file mode 100755 index 0000000..d6cae7a --- /dev/null +++ b/contrib/tcl/ndshome.tcl @@ -0,0 +1,91 @@ +#!/usr/bin/tixwish +############################################################################# +# Visual Tcl v1.20 Project +# +# ndshome.tcl - open a KDE window on current user Netware home directory +# User must be authenticated to that tree, otherwise ndslogin.tcl is +# executed. +# Copyright (C) 2001 by Patrick Pollet +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +# Revision history: + +# 1.00 2001 February 2001 Patrick Pollet +# Initial release. +# 1.2 May 2002 Patrick Pollet +# added support for the new -l option of ncplogin/ncpmap +# if option mount_locally is 1 in /etc/ndsclient.conf + +################################# +# GLOBAL VARIABLES +# + +################################# +# USER DEFINED PROCEDURES +# + +proc {initpath} {} { +#set up path to others scripts and images +global SCRIPT_DIR env + + if {![info exists env(NDSCLIENT_HOME)]} { + set home [file dirname [info script]] + switch [file pathtype $home] { + absolute {set env(NDSCLIENT_HOME) $home} + relative {set env(NDSCLIENT_HOME) [file join [pwd] $home]} + volumerelative { + set curdir [pwd] + cd $home + set env(NDSCLIENT_HOME) [file join [pwd] [file dirname \ + [file join [lrange [file split $home] 1 end]]]] + cd $curdir + } + } + } +set SCRIPT_DIR $env(NDSCLIENT_HOME) +#puts $SCRIPT_DIR +} + +proc init {argc argv} { +global SCRIPT_DIR NDS +global mount_locally; # from /etc/ndsclient.conf +initpath +uplevel #0 [list source [file join $SCRIPT_DIR ndsutils.tcl]] + +set tree "" +if { $argc } { + puts "$argv" + set tree $argv + } +#use defaults or command line argument as the tree name + NDS:init $tree + + set user $NDS(username) + if {$user !=""} { + source /etc/ndsclient.conf + puts "searching for home of $user on tree $NDS(tree)" + set res [NDS:openhome $NDS(tree) ] + if {$res =="1"} { + exit + } + } + source [file join $SCRIPT_DIR ndslogin.tcl] + +} + +init $argc $argv + diff --git a/contrib/tcl/ndslogin.tcl b/contrib/tcl/ndslogin.tcl new file mode 100755 index 0000000..246ccd9 --- /dev/null +++ b/contrib/tcl/ndslogin.tcl @@ -0,0 +1,365 @@ +#!/usr/bin/tixwish +############################################################################# +# Visual Tcl v1.20 Project +# +# ndslogin.tcl +# Graphical Login to a NDS tree. +# Will authenticate, open a ncp permanent connection to the SYS volume +# of the authenticating server and optionnally mount the user's home +# directory and open a KDE window on it. +# Copyright (C) 2001 by Patrick Pollet +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +# Revision history: + +# 1.00 January 1999 Patrick Pollet +# Initial version using Caldera NDS client +# 1.1 February 2001 Patrick Pollet +# adapted for ncpfs NDS client + + +################################# +# GLOBAL VARIABLES +# + +################################# +# USER DEFINED PROCEDURES +# + +proc {initpath} {} { +#set up path to others scripts and images +global SCRIPT_DIR env + + if {![info exists env(NDSCLIENT_HOME)]} { + set home [file dirname [info script]] + switch [file pathtype $home] { + absolute {set env(NDSCLIENT_HOME) $home} + relative {set env(NDSCLIENT_HOME) [file join [pwd] $home]} + volumerelative { + set curdir [pwd] + cd $home + set env(NDSCLIENT_HOME) [file join [pwd] [file dirname \ + [file join [lrange [file split $home] 1 end]]]] + cd $curdir + } + } + } +set SCRIPT_DIR $env(NDSCLIENT_HOME) +#puts $SCRIPT_DIR +} + + + +proc init {argc argv} { +catch { image delete organiz + image delete logo + image delete tree32 } +global SCRIPT_DIR +initpath +image create photo organiz -file [file join $SCRIPT_DIR img/organiz.gif] +image create photo logo -file [file join $SCRIPT_DIR img/nw.gif] +image create photo tree32 -file [file join $SCRIPT_DIR img/tree32.gif] +uplevel #0 [list source [file join $SCRIPT_DIR ndsutils.tcl]] +uplevel #0 [list source [file join $SCRIPT_DIR ndsstrings.tcl]] + +#consider argument as a tree name +if {$argc } { + puts "$argv" + NDS:init $argv + } else { + NDS:init + } +} + +init $argc $argv + +proc {login} {} { +global password tree username context +global openhome_onlogin mount_locally + + if {$password !=""} { + set status [NDS:login $tree $username $password $context] + } else { + set status [NDS:login_nopwd $tree $username $context] + } + if { $status == 1 } { + if {$openhome_onlogin } { + if { [NDS:openhome $tree ] ==0 } {} + } + exit + } +} + +proc {toggledisplay} {} { +global STR; +global y; + if {$y=="1"} { + place configure .top28.tix29 -y 140 + place configure .top28.fra29 -y 250 + set y 0 + wm geometry .top28 440x280+145+100 + wm withdraw .top28 + wm deiconify .top28 + .top28.fra29.but35 configure -text $STR(minus) + } else { + place configure .top28.tix29 -y 500 + place configure .top28.fra29 -y 140 + set y 1 + wm geometry .top28 440x170+145+100 + wm withdraw .top28 + wm deiconify .top28 + .top28.fra29.but35 configure -text $STR(plus) + } +} + +proc {main} {argc argv} { +global tree; +global context; +global username; +global password; +global NDS; +global y; +global openhome_onlogin mount_locally; # from /etc/ndsclient.conf + +set numinfo 0 +#these three are possible env variables for the Caldera nwclient +catch { + if {$NDS(default_tree) !="" } { + incr numinfo + } + focus .top28.fra38.ent41 + if {$NDS(default_context)!=""} { + incr numinfo + } + if {$NDS(username)!=""} { + set username $NDS(username) + incr numinfo + focus .top28.fra38.ent42 + } +#this one is an extra by PP for a possible autologon + if {$NDS(password)!=""} { + set password $NDS(password) + incr numinfo + } +} +# get global preferences + source /etc/ndsclient.conf +# if allowed by root + if {$home_override != "0"} {source ~/.ndsclient.conf} + set y $start_advanced + set tree $NDS(default_tree) + set context $NDS(default_context) + if {$browse_tree !="0"} { + .top28.fra29.but35 configure -state normal + } else { + # Plus/moins button out of the window (hide it !) + place configure .top28.fra29.but35 -y 999 + #and Ok a bit to the right + place configure .top28.fra29.but32 -x 230 + set y 0 + } + toggledisplay + + if {$numinfo =="4" && $autologon !=0} { + login + } +} + + + +proc {Window} {args} { +global vTcl + set cmd [lindex $args 0] + set name [lindex $args 1] + set newname [lindex $args 2] + set rest [lrange $args 3 end] + if {$name == "" || $cmd == ""} {return} + if {$newname == ""} { + set newname $name + } + set exists [winfo exists $newname] + switch $cmd { + show { + if {$exists == "1" && $name != "."} {wm deiconify $name; return} + if {[info procs vTclWindow(pre)$name] != ""} { + eval "vTclWindow(pre)$name $newname $rest" + } + if {[info procs vTclWindow$name] != ""} { + eval "vTclWindow$name $newname $rest" + } + if {[info procs vTclWindow(post)$name] != ""} { + eval "vTclWindow(post)$name $newname $rest" + } + } + hide { if $exists {wm withdraw $newname; return} } + iconify { if $exists {wm iconify $newname; return} } + destroy { if $exists {destroy $newname; return} } + } +} + +################################# +# VTCL GENERATED GUI PROCEDURES +# + +proc vTclWindow. {base} { + if {$base == ""} { + set base . + } + ################### + # CREATING WIDGETS + ################### + wm focusmodel $base passive + wm geometry $base 1x1+0+0 + wm maxsize $base 1137 834 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 1 1 + wm withdraw $base + wm title $base "vt.tcl" + ################### + # SETTING GEOMETRY + ################### +} + +proc vTclWindow.top28 {base} { +global STR; + if {$base == ""} { + set base .top28 + } + if {[winfo exists $base]} { + wm deiconify $base; return + } + ################### + # CREATING WIDGETS + ################### + toplevel $base -class Toplevel + wm focusmodel $base passive + wm geometry $base 460x280+149+124 + wm maxsize $base 1265 994 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 0 0 + wm deiconify $base + wm title $base $STR(ndslogin) + + tixNoteBook $base.tix29 + $base.tix29 add page1 \ + -anchor center -label $STR(login) + entry $base.tix29.nbframe.page1.ent47 \ + -background #fefefe -textvariable tree + place $base.tix29.nbframe.page1.ent47 \ + -x 107 -y 0 -width 261 -height 24 -anchor nw -bordermode ignore + label $base.tix29.nbframe.page1.lab48 \ + -anchor w -borderwidth 1 -font {Helvetica -12 normal} -justify right \ + -text $STR(tree) + place $base.tix29.nbframe.page1.lab48 \ + -x 105 -y 20 -anchor se -bordermode ignore + label $base.tix29.nbframe.page1.lab55 \ + -anchor se -borderwidth 1 -font {Helvetica -12 normal} -justify right \ + -text $STR(context) + place $base.tix29.nbframe.page1.lab55 \ + -x 105 -y 50 -anchor se -bordermode ignore + entry $base.tix29.nbframe.page1.ent56 \ + -background #fefefe -textvariable context + place $base.tix29.nbframe.page1.ent56 \ + -x 107 -y 30 -width 260 -height 24 -anchor nw -bordermode ignore + button $base.tix29.nbframe.page1.but30 \ + -borderwidth 1 -command {global SCRIPT_DIR;source [file join $SCRIPT_DIR contexts.tcl]} -image organiz -padx 9 \ + -pady 3 + place $base.tix29.nbframe.page1.but30 \ + -x 375 -y 30 -width 37 -height 29 -anchor nw -bordermode ignore + button $base.tix29.nbframe.page1.but60 \ + -borderwidth 1 -command {global SCRIPT_DIR; source [file join $SCRIPT_DIR trees.tcl]} -image tree32 -padx 9 \ + -pady 3 + place $base.tix29.nbframe.page1.but60 \ + -x 375 -y 0 -width 37 -height 29 -anchor nw -bordermode ignore + frame $base.fra38 \ + -borderwidth 2 -height 75 -width 125 + + label $base.fra38.lab39 \ + -anchor e -borderwidth 1 -font {Helvetica -12 normal} -justify right \ + -text $STR(loginname) + label $base.fra38.lab40 \ + -anchor e -borderwidth 1 -font {Helvetica -12 normal} -justify right \ + -text $STR(password) + entry $base.fra38.ent41 \ + -background #fefefe -exportselection 0 -textvariable username + bind $base.fra38.ent41 { + .top28.fra38.ent42 selection from 0 +.top28.fra38.ent42 selection to end +focus .top28.fra38.ent42 + } + bind $base.fra38.ent41 { + .top28.fra38.ent42 selection from 0 +.top28.fra38.ent42 selection to end +focus .top28.fra38.ent42 + } + entry $base.fra38.ent42 \ + -background #fefefe -exportselection 0 -show * -textvariable password + bind $base.fra38.ent42 { + login + } + label $base.lab28 \ + -image logo -relief sunken -text label + frame $base.fra29 \ + -height 75 -relief groove -width 125 + button $base.fra29.but31 \ + -activeforeground #0000fe -command exit -highlightthickness 0 -padx 9 \ + -pady 3 -text $STR(cancel) + button $base.fra29.but32 \ + -activeforeground #0000fe -command login -highlightthickness 0 \ + -padx 9 -pady 3 -text $STR(ok) + button $base.fra29.but34 \ + -activeforeground #0000fe -command {global SCRIPT_DIR;source [file join $SCRIPT_DIR about.tcl]} -padx 9 \ + -pady 3 -text $STR(about) + button $base.fra29.but35 \ + -activeforeground blue -command toggledisplay -highlightcolor black \ + -highlightthickness 0 -padx 9 -pady 3 -text $STR(minus) + ################### + # SETTING GEOMETRY + ################### + place $base.tix29 \ + -x 3 -y 140 -width 455 -height 103 -anchor nw -bordermode ignore + place $base.fra38 \ + -x 5 -y 80 -width 455 -height 55 -anchor nw -bordermode ignore + place $base.fra38.lab39 \ + -x 90 -y 25 -anchor se -bordermode ignore + place $base.fra38.lab40 \ + -x 90 -y 50 -anchor se -bordermode ignore + place $base.fra38.ent41 \ + -x 95 -y 5 -width 335 -height 24 -anchor nw -bordermode ignore + place $base.fra38.ent42 \ + -x 95 -y 30 -width 335 -height 24 -anchor nw -bordermode ignore + place $base.lab28 \ + -x 0 -y 0 -width 455 -height 73 -anchor nw -bordermode ignore + place $base.fra29 \ + -x 10 -y 250 -width 455 -height 30 -anchor nw -bordermode ignore + place $base.fra29.but31 \ + -x 30 -y 0 -width 90 -height 23 -anchor nw -bordermode ignore + place $base.fra29.but32 \ + -x 130 -y 0 -width 90 -height 23 -anchor nw -bordermode ignore + place $base.fra29.but35 \ + -x 230 -y 0 -width 90 -height 23 -anchor nw -bordermode ignore + place $base.fra29.but34 \ + -x 330 -y 0 -width 90 -height 23 -anchor nw -bordermode ignore + +} + +Window show . +Window show .top28 + +main $argc $argv diff --git a/contrib/tcl/ndslogout.tcl b/contrib/tcl/ndslogout.tcl new file mode 100755 index 0000000..b6c4fe8 --- /dev/null +++ b/contrib/tcl/ndslogout.tcl @@ -0,0 +1,313 @@ +#!/usr/bin/wish +############################################################################# +# Visual Tcl v1.22 Project +# +# ndslogout.tcl +# Graphical Logout to a NDS tree. +# Will unauthenticate,and umount all permanent connections to ressources +# belonging to that tree. +# Copyright (C) 2001 by Patrick Pollet +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +# Revision history: + +# 1.00 January 1999 Patrick Pollet +# Initial version using Caldera NDS client +# 1.1 February 2001 Patrick Pollet +# adapted for ncpfs NDS client +# 1.2 March 2001 Patrick Pollet +# added tree selection logic and "logout from all" + +################################# +# GLOBAL VARIABLES +# +global NDS; +global SCRIPT_DIR; +global STR; +global widget; + +################################# +# USER DEFINED PROCEDURES +# + + + +proc {initpath} {} { +#set up path to others scripts and images +global SCRIPT_DIR env + + if {![info exists env(NDSCLIENT_HOME)]} { + set home [file dirname [info script]] + switch [file pathtype $home] { + absolute {set env(NDSCLIENT_HOME) $home} + relative {set env(NDSCLIENT_HOME) [file join [pwd] $home]} + volumerelative { + set curdir [pwd] + cd $home + set env(NDSCLIENT_HOME) [file join [pwd] [file dirname [file join [lrange [file split $home] 1 end]]]] + cd $curdir + } + } + } +set SCRIPT_DIR $env(NDSCLIENT_HOME) +#puts $SCRIPT_DIR +} + +proc maj_whoami {} { +global STR + catch {.top28.treelbx curselection} num + catch {.top28.treelbx get $num} tree + catch {exec ncpwhoami -fTcUM -s : -T $tree} mes + puts $mes + set tmpl [split $mes \n] + set tmpl [split [lindex $tmpl 0] :] + puts $tmpl + if {![ string match "*no ncp*" $tmpl]} { + .top28.lab35 configure -text [lindex $tmpl 2] + .top28.lab34 configure -text [lindex $tmpl 1] +# .top28.lab37 configure -text [lindex $tmpl 3] + .top28.but32 configure -state normal + + } else { + .top28.lab35 configure -text $STR(not_logged_in) + .top28.lab34 configure -text "" +# .top28.lab37 configure -text "" + .top28.but32 configure -state disabled + } +} + + +proc {readtrees} {} { +#currently ncplisttrees calls a bugged NWDSScanConnsForTrees +#that add to the liste th tree associated with the temporary +#opened connection ( where user may not be authenticated) + set trees [NDS:listtrees "authen"] + .top28.treelbx delete 0 end + set trees [lsort $trees] + foreach tree $trees { + .top28.treelbx insert end $tree + } + .top28.treelbx selection set 0 + maj_whoami +} + +proc doLogout {} { + catch {.top28.treelbx curselection} num + catch {.top28.treelbx get $num} tree + NDS:logout $tree + readtrees + +} + +proc doLogoutAll {} { + NDS:logout + exit +} + + +proc {main} {argc argv} { +global NDS STR +.top28.lab34 configure -text { } + .top28.lab35 configure -text $STR(not_logged_in) + .top28.lab34 configure -text $NDS(context) +# .top28.lab37 configure -text $NDS(mnt_point) + readtrees + +} + +proc {Window} {args} { +global vTcl + set cmd [lindex $args 0] + set name [lindex $args 1] + set newname [lindex $args 2] + set rest [lrange $args 3 end] + if {$name == "" || $cmd == ""} {return} + if {$newname == ""} { + set newname $name + } + set exists [winfo exists $newname] + switch $cmd { + show { + if {$exists == "1" && $name != "."} {wm deiconify $name; return} + if {[info procs vTclWindow(pre)$name] != ""} { + eval "vTclWindow(pre)$name $newname $rest" + } + if {[info procs vTclWindow$name] != ""} { + eval "vTclWindow$name $newname $rest" + } + if {[info procs vTclWindow(post)$name] != ""} { + eval "vTclWindow(post)$name $newname $rest" + } + } + hide { if $exists {wm withdraw $newname; return} } + iconify { if $exists {wm iconify $newname; return} } + destroy { if $exists {destroy $newname; return} } + } +} + +proc init {argc argv} { +global SCRIPT_DIR +initpath +catch { image delete logo} + image create photo logo -file [file join $SCRIPT_DIR img/nw.gif] + uplevel #0 [list source [file join $SCRIPT_DIR ndsutils.tcl]] + uplevel #0 [list source [file join $SCRIPT_DIR ndsstrings.tcl]] + if {$argc } { + puts "$argv" + NDS:init $argv + } else { + NDS:init + } +} + +init $argc $argv + +################################# +# VTCL GENERATED GUI PROCEDURES +# + +proc vTclWindow. {base {container 0}} { + if {$base == ""} { + set base . + } + ################### + # CREATING WIDGETS + ################### + if {!$container} { + wm focusmodel $base passive + wm geometry $base 1x1+0+0 + wm maxsize $base 785 570 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 1 1 + wm withdraw $base + wm title $base "vt.tcl" + } + ################### + # SETTING GEOMETRY + ################### +} + +proc vTclWindow.top28 {base {container 0}} { +global STR + if {$base == ""} { + set base .top28 + } + if {[winfo exists $base] && (!$container)} { + wm deiconify $base; return + } + ################### + # CREATING WIDGETS + ################### + + if {!$container} { + toplevel $base -class Toplevel \ + -background #dcdcdc -highlightbackground #dcdcdc \ + -highlightcolor #000000 + wm focusmodel $base passive + wm geometry $base 443x250+159+156 + wm maxsize $base 785 570 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 0 0 + wm deiconify $base + wm title $base $STR(ndslogout) + } + label $base.lab29 \ + -background #dcdcdc -borderwidth 1 -font {Helvetica 12 normal} \ + -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -justify right -text $STR(context) + label $base.lab30 \ + -background #dcdcdc -borderwidth 1 -font {Helvetica 12 normal} \ + -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -justify right -text $STR(trees) + label $base.lab31 \ + -background #dcdcdc -borderwidth 1 -font {Helvetica 12 normal} \ + -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -justify right -text $STR(user) + button $base.but32 \ + -activebackground #dcdcdc -activeforeground #0000f7 \ + -background #dcdcdc -command {doLogout} \ + -font -Adobe-Helvetica-*-R-Normal--*-120-*-*-*-*-*-* \ + -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -padx 9 -pady 3 -text $STR(logout) + label $base.lab34 \ + -background #dcdcdc -borderwidth 1 -font {Helvetica -12 normal} \ + -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -relief raised -justify right -text "" + label $base.lab35 \ + -background #dcdcdc -borderwidth 1 -font {Helvetica -12 normal} \ + -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -relief raised -text "" + label $base.lab36 \ + -background #dcdcdc -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -image logo -relief sunken -text label + button $base.but28 \ + -activebackground #dcdcdc -activeforeground #0000f7 \ + -background #dcdcdc -command exit \ + -font -Adobe-Helvetica-*-R-Normal--*-120-*-*-*-*-*-* \ + -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -padx 9 -pady 3 -text $STR(cancel) + listbox $base.treelbx -yscrollcommand {.top28.scr18 set}\ + -background #dcdcdc -foreground #000000 -highlightbackground #ffffff \ + -highlightcolor #000000 -selectbackground #547098 \ + -selectforeground #ffffff -selectmode single -height 2 + scrollbar $base.scr18 -command {.top28.treelbx yview}\ + -activebackground #dcdcdc -background #dcdcdc -cursor left_ptr \ + -highlightbackground #dcdcdc -highlightcolor #000000 -orient vert \ + -troughcolor #dcdcdc -width 10 + button $base.but19 \ + -activebackground #dcdcdc -activeforeground #0000f7 \ + -background #dcdcdc -command {doLogoutAll} \ + -font -Adobe-Helvetica-*-R-Normal--*-120-*-*-*-*-*-* \ + -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -padx 9 -pady 3 -text $STR(logoutall) + + bind $base.treelbx { + maj_whoami + } + ################### + # SETTING GEOMETRY + ################### + place $base.lab29 \ + -x 115 -y 160 -width 49 -height 18 -anchor se -bordermode ignore + place $base.lab30 \ + -x 120 -y 110 -anchor se -bordermode ignore + place $base.lab31 \ + -x 115 -y 190 -anchor se -bordermode ignore + place $base.but32 \ + -x 180 -y 210 -width 98 -height 26 -anchor nw -bordermode ignore + place $base.lab34 \ + -x 135 -y 145 -width 216 -height 18 -anchor nw -bordermode ignore + place $base.lab35 \ + -x 135 -y 175 -width 216 -height 18 -anchor nw -bordermode ignore + place $base.lab36 \ + -x 0 -y 0 -width 446 -height 78 -anchor nw -bordermode ignore + place $base.but28 \ + -x 65 -y 210 -width 98 -height 26 -anchor nw -bordermode ignore + place $base.treelbx \ + -x 135 -y 85 -width 213 -anchor nw -bordermode ignore + place $base.scr18 \ + -x 350 -y 85 -width 16 -height 42 -anchor nw -bordermode ignore + place $base.but19 \ + -x 295 -y 210 -width 98 -height 26 -anchor nw -bordermode ignore +} + +Window show . +Window show .top28 + +main $argc $argv diff --git a/contrib/tcl/ndsmount.tcl b/contrib/tcl/ndsmount.tcl new file mode 100755 index 0000000..d701919 --- /dev/null +++ b/contrib/tcl/ndsmount.tcl @@ -0,0 +1,491 @@ +#!/usr/bin/tixwish +############################################################################# +# Visual Tcl v1.22 Project +# +# +# ndsmount.tcl - mount Netware volumes from tree(s) where current user is +# authenticated. +# Copyright (C) 2001 by Patrick Pollet +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +# Revision history: + +# 1.00 2001 February 2001 Patrick Pollet +# Initial release. +# 1.2 May 2002 Patrick Pollet +# added -l parameter to all ncplogin/ncpmap calls +# to force local mounts in the case of NFS mounted homes +# if mount_locally is set in /etc/ndsclient.conf + + + + +################################# +# GLOBAL VARIABLES +# + +################################# +# USER DEFINED PROCEDURES +# + +proc {initpath} {} { +#set up path to others scripts and images +global SCRIPT_DIR env + + if {![info exists env(NDSCLIENT_HOME)]} { + set home [file dirname [info script]] + switch [file pathtype $home] { + absolute {set env(NDSCLIENT_HOME) $home} + relative {set env(NDSCLIENT_HOME) [file join [pwd] $home]} + volumerelative { + set curdir [pwd] + cd $home + set env(NDSCLIENT_HOME) [file join [pwd] [file dirname [file join [lrange [file split $home] 1 end]]]] + cd $curdir + } + } + } + set SCRIPT_DIR $env(NDSCLIENT_HOME) +#puts $SCRIPT_DIR +} + +proc init {argc argv} { +global SCRIPT_DIR + initpath + catch { image delete logo} + image create photo logo -file [file join $SCRIPT_DIR img/nw.gif] + uplevel #0 [list source [file join $SCRIPT_DIR ndsutils.tcl]] + uplevel #0 [list source [file join $SCRIPT_DIR ndsstrings.tcl]] +} + +init $argc $argv + +proc upOneLevel {} { +global context + set dot [string first "." $context] + if { $dot == "-1" } { + readTrees + } else { + set context [string range $context [ expr $dot +1] [expr [string length $context]-1]] + readContexts + readVolumes + } +} + + +proc {chgContext} { nctx} { +global context + if {$nctx != ".."} { + if {$context !=""} { + set context $nctx.$context + } else { + set context $nctx + } + readContexts + readVolumes + } else { + upOneLevel + } +} + +proc readTrees {} { +global context +global lastctx + set trees [NDS:listtrees "authen"] + .top28.mount.volctx delete 0 end + set trees [lsort $trees] + foreach tree $trees { + .top28.mount.volctx insert end $tree + } + .top28.mount.volctx selection set 0 + set context "" + set lastctx "9999" + majBtnMount + majWhoami +} + + +proc readContexts {} { +global context +global lastctx + + set dot [string last "." $context] + if { $dot == "-1" } { + catch {exec ncplist -T $context -v 4 -Q -l "Org*" } ctxs + } else { + set nctx [string range $context 0 [ expr $dot -1]] + set tree [string range $context [expr $dot +1] [expr [string length $context]-1]] + catch {exec ncplist -T $tree -v 4 -Q -A -o $nctx -c $nctx -l "Org*" } ctxs + } + set lastctx [llength $ctxs] + .top28.mount.volctx delete 0 end + .top28.mount.volctx insert end ".." + foreach ctx $ctxs { + .top28.mount.volctx insert end $ctx + } +} + + +proc readVolumes {} { +global context + set dot [string last "." $context] + set nctx [string range $context 0 [ expr $dot -1]] + set tree [string range $context [expr $dot +1] [expr [string length $context]-1]] + if { $nctx !="" } { + catch {exec ncplist -T $tree -v 4 -Q -A -o $nctx -c $nctx -l "Vol*" } vlist2 + set vlist2 [lsort $vlist2] + foreach vol $vlist2 { + .top28.mount.volctx insert end $vol + } + } +} + + +proc doSelect {} { +global lastctx +global context + + catch {.top28.mount.volctx curselection} num + if { $num != "-1" } { + catch {.top28.mount.volctx get $num} sel + if { $sel == ".." } { + upOneLevel + } else { + if { $num <= $lastctx } { + chgContext $sel + } else { + #puts $sel + doMount $sel + } + } + } +} + + +proc doMount {volume} { +global context +global mount_locally + + + + set dot [string last "." $context] + set nctx [string range $context 0 [ expr $dot -1]] + set tree [string range $context [expr $dot +1] [expr [string length $context]-1]] + puts "mounting $volume in context $nctx of tree $tree" + if ($mount_locally) { + catch { exec ncpmap -T $tree -X $nctx -V $volume -a -E -l} result + } else { + catch { exec ncpmap -T $tree -X $nctx -V $volume -a -E} result + } + + + #puts $result + if [regexp "(.*)mounted(.*):(.*)$" $result aux1 aux2 aux3 path] { + #puts $path + refreshMounted + #KDE 2 + exec kfmclient openURL $path + return 1 + } + NDS:dialog $result + return 0 +} + + +proc doUmount {} { +global STR + catch {.top28.f2.alreadyLbx curselection } {tmp} + if {$tmp !=""} { + catch {.top28.f2.alreadyLbx get $tmp} tmp1 + set tmp2 [split $tmp1 :] +# puts $tmp1 + set item [lindex $tmp2 0] + catch {exec ncpumount $item} status + if {$status !=""} { + NDS:dialog [join $status {-}] OK + } + refreshMounted + } else { + NDS:dialog $STR(nothing) + } +} + +proc majBtnMount {} { +global lastctx + catch {.top28.mount.volctx curselection} num + if { $num != "-1" & $num > $lastctx } { + .top28.mount.but30 configure -state normal + } else { + .top28.mount.but30 configure -state disabled + } +} + + +proc majWhoami {} { +global context +#only if at toplevel + if { $context == "" } { + catch {.top28.mount.volctx curselection} num + if { $num != "-1" } { + catch { .top28.mount.volctx get $num} tree + catch {exec ncpwhoami -fTU -s : -T $tree -1} mes + #puts $mes + if {![ string match "*no ncp*" $mes]} { + set tmpl [split $mes \n] + set tmpl [split [lindex $tmpl 0] :] + #puts $tmpl + .top28.lab35 configure -text [lindex $tmpl 1] + } + } + } + +} + + + +proc refreshMounted {} { + + catch {exec ncpwhoami -fMSV -s :} slist + .top28.f2.alreadyLbx delete 0 end + set cnt 0 + if {! [ string match "*no ncp*" $slist]} { + foreach mnt $slist { + .top28.f2.alreadyLbx insert end $mnt + set cnt [expr $cnt +1 ] + } + } + if {$cnt !="0" } { + .top28.f2.dismount configure -state normal + } else { + .top28.f2.dismount configure -state disabled + } +} + + + + +proc {main} {argc argv} { +global STR NDS +global mount_locally; # from /etc/ndsclient.conf + + .top28.lab35 configure -text $STR(not_logged_in) + NDS:init + if {$NDS(username) !=""} { + readTrees + refreshMounted + } else { + .top28.lab35 configure -text $STR(not_logged_in) + .top28.mount.but30 configure -state disabled + .top28.f2.dismount configure -state disabled + } + # get global preferences + source /etc/ndsclient.conf +} + + +proc {Window} {args} { +global vTcl + set cmd [lindex $args 0] + set name [lindex $args 1] + set newname [lindex $args 2] + set rest [lrange $args 3 end] + if {$name == "" || $cmd == ""} {return} + if {$newname == ""} { + set newname $name + } + set exists [winfo exists $newname] + switch $cmd { + show { + if {$exists == "1" && $name != "."} {wm deiconify $name; return} + if {[info procs vTclWindow(pre)$name] != ""} { + eval "vTclWindow(pre)$name $newname $rest" + } + if {[info procs vTclWindow$name] != ""} { + eval "vTclWindow$name $newname $rest" + } + if {[info procs vTclWindow(post)$name] != ""} { + eval "vTclWindow(post)$name $newname $rest" + } + } + hide { if $exists {wm withdraw $newname; return} } + iconify { if $exists {wm iconify $newname; return} } + destroy { if $exists {destroy $newname; return} } + } +} + + +################################# +# VTCL GENERATED GUI PROCEDURES +# + +proc vTclWindow. {base {container 0}} { + if {$base == ""} { + set base . + } + ################### + # CREATING WIDGETS + ################### + if {!$container} { + wm focusmodel $base passive + wm geometry $base 1x1+0+0 + wm maxsize $base 785 570 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 1 1 + wm withdraw $base + wm title $base "vt.tcl" + } + ################### + # SETTING GEOMETRY + ################### +} + +proc vTclWindow.top28 {base {container 0}} { + global STR + if {$base == ""} { + set base .top28 + } + if {[winfo exists $base] && (!$container)} { + wm deiconify $base; return + } + ################### + # CREATING WIDGETS + ################### + if {!$container} { + toplevel $base -class Toplevel \ + -background #dcdcdc -highlightbackground #dcdcdc \ + -highlightcolor #000000 + wm focusmodel $base passive + wm geometry $base 450x400+148+95 + wm maxsize $base 785 570 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 0 0 + wm deiconify $base + wm title $base $STR(ndsmount) + } + label $base.lab31 \ + -background #dcdcdc -borderwidth 1 -font {Helvetica 12 normal} \ + -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -justify left -text $STR(loginname) + label $base.lab35 \ + -background #dcdcdc -borderwidth 1 -foreground #000000 \ + -highlightbackground #dcdcdc -highlightcolor #000000 -justify right \ + -relief sunken -text {} + label $base.lab36 \ + -background #dcdcdc -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -image logo -relief sunken -justify left -text label + button $base.but28 \ + -activebackground #dcdcdc -activeforeground #0000f7 \ + -background #dcdcdc -command exit \ + -font -Adobe-Helvetica-*-R-Normal--*-120-*-*-*-*-*-* \ + -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -padx 9 -pady 3 -text $STR(close) + frame $base.mount \ + -background #dcdcdc -borderwidth 2 -height 75 \ + -highlightbackground #dcdcdc -highlightcolor #000000 -relief groove \ + -width 125 + listbox $base.mount.volctx \ + -background #dcdcdc -font {Helvetica -12 normal} -foreground #000000 \ + -highlightbackground #ffffff -highlightcolor #000000 \ + -selectbackground #547098 -selectforeground #ffffff \ + -yscrollcommand "$base.mount.serversscroll set" + + bind $base.mount.volctx { + doSelect + } + bind $base.mount.volctx { + majBtnMount + majWhoami + + } + scrollbar $base.mount.serversscroll \ + -activebackground #dcdcdc -background #dcdcdc \ + -command "$base.mount.volctx yview" -cursor left_ptr \ + -highlightbackground #dcdcdc -highlightcolor #000000 -orient vert \ + -troughcolor #dcdcdc -width 10 + button $base.mount.but30 \ + -activebackground #dcdcdc -activeforeground #0000fe \ + -background #dcdcdc -command doSelect \ + -font -Adobe-Helvetica-*-R-Normal--*-120-*-*-*-*-*-* \ + -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -padx 9 -pady 3 -text $STR(mount) + label $base.mount.lab17 \ + -background #dcdcdc -borderwidth 1 \ + -foreground #000000 -font {Helvetica -12 normal}\ + -highlightbackground #dcdcdc -highlightcolor #000000 \ + -text $STR(nds_volumes) + frame $base.f2 \ + -background #dcdcdc -borderwidth 2 -height 75 \ + -highlightbackground #dcdcdc -highlightcolor #000000 -relief groove \ + -width 125 + listbox $base.f2.alreadyLbx -font {Helvetica 12 normal}\ + -background #dcdcdc -foreground #000000 -height 5 \ + -highlightbackground #ffffff -highlightcolor #000000 \ + -selectbackground #547098 -selectforeground #ffffff \ + -yscrollcommand "$base.f2.sb2 set" + button $base.f2.dismount \ + -activebackground #dcdcdc -activeforeground #000000 \ + -background #dcdcdc -command doUmount -foreground #000000 \ + -highlightbackground #dcdcdc -highlightcolor #000000 -padx 9 -pady 3 \ + -text $STR(umount) + scrollbar $base.f2.sb2 \ + -activebackground #dcdcdc -background #dcdcdc \ + -command "$base.f2.alreadyLbx yview" -cursor left_ptr \ + -highlightbackground #dcdcdc -highlightcolor #000000 -orient vert \ + -troughcolor #dcdcdc -width 10 + label $base.f2.lb3 \ + -background #dcdcdc -borderwidth 1 -font {Helvetica -12 normal} \ + -foreground #000000 -highlightbackground #dcdcdc \ + -highlightcolor #000000 -justify left -text $STR(already_mounted) + ################### + # SETTING GEOMETRY + ################### + place $base.lab31 \ + -x 55 -y 105 -anchor se -bordermode ignore + place $base.lab35 \ + -x 80 -y 85 -width 291 -height 18 -bordermode ignore + place $base.lab36 \ + -x 0 -y 0 -width 446 -height 78 -anchor nw -bordermode ignore + place $base.but28 \ + -x 175 -y 370 -width 98 -height 26 -anchor nw -bordermode ignore + place $base.mount \ + -x 5 -y 115 -width 440 -height 130 -anchor nw -bordermode ignore + place $base.mount.volctx \ + -x 5 -y 20 -width 258 -height 101 -anchor nw -bordermode ignore + place $base.mount.serversscroll \ + -x 265 -y 20 -width 21 -height 97 -anchor nw -bordermode ignore + place $base.mount.but30 \ + -x 335 -y 50 -width 85 -height 26 -anchor nw -bordermode ignore + place $base.mount.lab17 \ + -x 7 -y 2 -width 150 -height 18 -anchor nw -bordermode ignore + place $base.f2 \ + -x 5 -y 255 -width 440 -height 105 -anchor nw -bordermode ignore + place $base.f2.alreadyLbx \ + -x 5 -y 20 -width 263 -height 76 -anchor nw -bordermode ignore + place $base.f2.dismount \ + -x 340 -y 35 -width 82 -height 26 -anchor nw -bordermode ignore + place $base.f2.sb2 \ + -x 270 -y 20 -width 21 -height 77 -anchor nw -bordermode ignore + place $base.f2.lb3 \ + -x 7 -y 2 -width 126 -height 18 -anchor nw -bordermode ignore +} + +Window show . +Window show .top28 + +main $argc $argv diff --git a/contrib/tcl/ndspasswd.tcl b/contrib/tcl/ndspasswd.tcl new file mode 100755 index 0000000..0f9644a --- /dev/null +++ b/contrib/tcl/ndspasswd.tcl @@ -0,0 +1,425 @@ +#!/usr/bin/tixwish +############################################################################# +# Visual Tcl v1.20 Project +# +# ndspassword.tcl +# Graphical password changer for NDS tress. +# User must be authenticated. +# Copyright (C) 2001 by Patrick Pollet +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +# Revision history: + +# 1.00 January 1999 Patrick Pollet +# Initial version using Caldera NDS client +# 1.1 February 2001 Patrick Pollet +# adapted for ncpfs NDS client +# 1.2 March 2001 Patrick Pollet +# added tree selection logic and "logout from all" +# 1.3 May 21 2002 Patrick Pollet +# bug in reading password expiration date +# fixed context problem +################################# +# GLOBAL VARIABLES +# +global newpwd; +global newpwd2; +global oldpwd; +global pass_expiration; +global pass_minilength; +global pass_required; +global username +global context +global NDS; + +################################# +# USER DEFINED PROCEDURES +# +proc {initpath} {} { +#set up path to others scripts and images +global SCRIPT_DIR env + + if {![info exists env(NDSCLIENT_HOME)]} { + set home [file dirname [info script]] + switch [file pathtype $home] { + absolute {set env(NDSCLIENT_HOME) $home} + relative {set env(NDSCLIENT_HOME) [file join [pwd] $home]} + volumerelative { + set curdir [pwd] + cd $home + set env(NDSCLIENT_HOME) [file join [pwd] [file dirname \ + [file join [lrange [file split $home] 1 end]]]] + cd $curdir + } + } + } +set SCRIPT_DIR $env(NDSCLIENT_HOME) +#puts $SCRIPT_DIR +} + +proc init {argc argv} { +global SCRIPT_DIR +initpath +catch { image delete logo} + image create photo logo -file [file join $SCRIPT_DIR img/nw.gif] +uplevel #0 [list source [file join $SCRIPT_DIR ndsutils.tcl]] +uplevel #0 [list source [file join $SCRIPT_DIR ndsstrings.tcl]] +if {$argc } { + puts "$argv" + NDS:init $argv + } else { + NDS:init + } +} + +init $argc $argv + +proc {readtrees} {} { +global NDS +global tree + set trees [NDS:listtrees "authen"] + .top28.treelbx delete 0 end + set trees [lsort $trees] + foreach tree $trees { + .top28.treelbx insert end $tree + } + .top28.treelbx selection set 0 + maj_whoami +} + + +proc maj_whoami {} { +global STR tree +global username +global context + catch {.top28.treelbx curselection} num + catch {.top28.treelbx get $num} tree + catch {exec ncpwhoami -fcU -s : -T $tree -1 } mes + puts $mes + set tmpl [split $mes \n] + set tmpl [split [lindex $tmpl 0] :] + #puts $tmpl + if {![ string match "*no ncp*" $tmpl]} { + set username [lindex $tmpl 1] + if {![string match {*\.*} $username ]} { + set context [lindex $tmpl 0] + } else { + set tmpl [split $username .] + set username [lindex $tmpl 0] + set context [join [lrange $tmpl 1 end] ':'] + } + + + } else { + .top28.lab35 configure -text $STR(not_logged_in) + .top28.lab34 configure -text "" + + } + getuserrestrictions $tree +} + + +proc {canchange} {} { +global newpwd; +global newpwd2; +global pass_minilength; + if { $newpwd == $newpwd2 && [string length $newpwd] >= $pass_minilength } { + .top28.but32 configure -state normal + } else { + .top28.but32 configure -state disabled + } +} + +proc {dochangepwd} {} { +global oldpwd; +global newpwd; +global newpwd2; +global pass_minilength; +global tree +global username +global context +global NDS STR + +#currently chgpwd dose not use the -c context +#so we must send a DN user name +#not anymore in v 1.03 of chgpwd.c +# puts "exec chgpwd -T $tree -o $username -c $context -P $oldpwd -n $newpwd" + if { $newpwd == $newpwd2 && [string length $newpwd] >= $pass_minilength } { + catch {exec chgpwd -T $tree -o $username -c$context -P $oldpwd -n $newpwd } status + if {$status ==""} { + NDS:dialog $STR(success_chg_pwd) Ok + exit + } else { + NDS:dialog [join $status { }] Ok + } + } +} + +proc getuserrestrictions { tree } { +global STR NDS +global pass_minilength +global pass_required +global pass_expiration +global oldpwd + set pass_minilength 0 + set pass_required $STR(no) + set pass_expiration $STR(none) + catch {exec ncpwhoami -fpT -1 -T $tree} res + puts $res + set tmpl [split $res ','] + if {[lindex $tmpl 2]!="true"} { + .top28.oldpwd configure -show + set oldpwd $STR(no_chg_pwd) + .top28.oldpwd configure -state disabled + .top28.newpwd configure -state disabled + .top28.newpwd2 configure -state disabled + return + } +#change it to regular password entry line + .top28.oldpwd configure -show * + if {[lindex $tmpl 0]=="true"} { + set pass_required $STR(yes) + set pass_minilength 4 + } + if {[lindex $tmpl 3]!="***"} { + set pass_minilength [lindex $tmpl 3] + } + if {[lindex $tmpl 4]!="***"} { + set pass_expiration [lindex $tmpl 4] + } +} + +proc {main} {argc argv} { +global STR NDS +global tree +global username + readtrees + if {$username !=""} { + focus .top28.oldpwd + } else { + .top28.lab35 configure -text $STR(not_logged_in) + .top28.but32 configure -state disabled + .top28.oldpwd configure -state disabled + .top28.newpwd configure -state disabled + .top28.newpwd2 configure -state disabled + } +} + +proc {Window} {args} { +global vTcl + set cmd [lindex $args 0] + set name [lindex $args 1] + set newname [lindex $args 2] + set rest [lrange $args 3 end] + if {$name == "" || $cmd == ""} {return} + if {$newname == ""} { + set newname $name + } + set exists [winfo exists $newname] + switch $cmd { + show { + if {$exists == "1" && $name != "."} {wm deiconify $name; return} + if {[info procs vTclWindow(pre)$name] != ""} { + eval "vTclWindow(pre)$name $newname $rest" + } + if {[info procs vTclWindow$name] != ""} { + eval "vTclWindow$name $newname $rest" + } + if {[info procs vTclWindow(post)$name] != ""} { + eval "vTclWindow(post)$name $newname $rest" + } + } + hide { if $exists {wm withdraw $newname; return} } + iconify { if $exists {wm iconify $newname; return} } + destroy { if $exists {destroy $newname; return} } + } +} + +################################# +# VTCL GENERATED GUI PROCEDURES +# + +proc vTclWindow. {base} { + if {$base == ""} { + set base . + } + ################### + # CREATING WIDGETS + ################### + wm focusmodel $base passive + wm geometry $base 1x1+0+0 + wm maxsize $base 785 570 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 1 1 + wm withdraw $base + wm title $base "vt.tcl" + ################### + # SETTING GEOMETRY + ################### +} + +proc vTclWindow.top28 {base} { +global STR + if {$base == ""} { + set base .top28 + } + if {[winfo exists $base]} { + wm deiconify $base; return + } + ################### + # CREATING WIDGETS + ################### + toplevel $base -class Toplevel + wm focusmodel $base passive + wm geometry $base 445x311+141+173 + wm maxsize $base 785 570 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 0 0 + wm deiconify $base + wm title $base $STR(ndspasswd) + label $base.lab29 \ + -borderwidth 1 -font {Helvetica 12 normal} -justify right -text $STR(context) + label $base.lab30 \ + -borderwidth 1 -font {Helvetica 12 normal} -justify right -text $STR(tree) + label $base.lab31 \ + -borderwidth 1 -font {Helvetica 12 normal} -justify right -text $STR(user) + listbox $base.treelbx \ + -background #dcdcdc -font {Helvetica -12 normal} -foreground #000000 \ + -highlightbackground #ffffff -highlightcolor #000000 \ + -selectbackground #547098 -selectforeground #ffffff \ + -selectmode single -height 2\ + -yscrollcommand {.top28.scr18 set} + scrollbar $base.scr18 -command {.top28.treelbx yview}\ + -activebackground #dcdcdc -background #dcdcdc -cursor left_ptr \ + -highlightbackground #dcdcdc -highlightcolor #000000 -orient vert \ + -troughcolor #dcdcdc -width 10 + button $base.but32 \ + -activeforeground #0000f7 -command { dochangepwd } \ + -font -Adobe-Helvetica-*-R-Normal--*-120-*-*-*-*-*-* -padx 9 -pady 3 \ + -state disabled -text $STR(change) + label $base.lab34 \ + -borderwidth 1 -justify left -relief sunken -text {} -textvariable context + label $base.lab35 \ + -borderwidth 1 -justify left -relief sunken -text {} -textvariable username + label $base.lab36 \ + -image logo -relief sunken -text label + button $base.but28 \ + -activeforeground #0000f7 -command exit \ + -font -Adobe-Helvetica-*-R-Normal--*-120-*-*-*-*-*-* -padx 9 -pady 3 \ + -text $STR(cancel) + label $base.l1 \ + -borderwidth 1 -font {Helvetica 12 bold} -justify right \ + -text $STR(old_pwd) + label $base.lab28 \ + -borderwidth 1 -font {Helvetica 12 bold} -justify right \ + -text $STR(new_pwd) + label $base.lab32 \ + -borderwidth 1 -font {Helvetica 12 bold} -justify right \ + -text $STR(new_pwd2) + entry $base.oldpwd \ + -background #f8fefe -textvariable oldpwd + entry $base.newpwd \ + -background #fefefe -show * -textvariable newpwd + bind $base.newpwd { + canchange + } + entry $base.newpwd2 \ + -background #fefefe -show * -textvariable newpwd2 + bind $base.newpwd2 { + canchange + } + frame $base.infos \ + -borderwidth 2 -height 75 -relief groove -width 125 + label $base.infos.requislb \ + -borderwidth 1 -justify left -relief sunken -text $STR(none) \ + -textvariable pass_expiration + label $base.infos.expirelbl \ + -borderwidth 1 -justify left -relief sunken -text $STR(no) \ + -textvariable pass_required + label $base.infos.lenlbl \ + -borderwidth 1 -justify left -relief sunken -text 0 \ + -textvariable pass_minilength + label $base.infos.lb1 \ + -borderwidth 1 -font {Helvetica -12 normal} -justify right\ + -text $STR(pwd_exp_date) + label $base.infos.lb2 \ + -borderwidth 1 -font {Helvetica -12 normal} -justify right\ + -text $STR(pwd_min_len) + label $base.infos.lb3 \ + -borderwidth 1 -font {Helvetica -12 normal} -justify right -text $STR(pwd_required) + + bind $base.treelbx { + maj_whoami + } + ################### + # SETTING GEOMETRY + ################### + place $base.lab29 \ + -x 260 -y 105 -anchor se -bordermode ignore + place $base.lab30 \ + -x 40 -y 105 -anchor se -bordermode ignore + place $base.lab31 \ + -x 260 -y 125 -anchor se -bordermode ignore + place $base.treelbx \ + -x 50 -y 85 -width 140 -anchor nw -bordermode ignore + place $base.scr18 \ + -x 190 -y 85 -width 16 -height 38 -anchor nw -bordermode ignore + + place $base.but32 \ + -x 100 -y 275 -width 98 -height 26 -anchor nw -bordermode ignore + place $base.lab34 \ + -x 270 -y 85 -width 151 -height 18 -anchor nw -bordermode ignore + place $base.lab35 \ + -x 270 -y 108 -width 151 -height 18 -anchor nw -bordermode ignore + place $base.lab36 \ + -x 0 -y 0 -width 446 -height 78 -anchor nw -bordermode ignore + place $base.but28 \ + -x 245 -y 275 -width 98 -height 26 -anchor nw -bordermode ignore + place $base.l1 \ + -x 155 -y 200 -anchor se -bordermode ignore + place $base.lab28 \ + -x 155 -y 230 -anchor se -bordermode ignore + place $base.lab32 \ + -x 155 -y 255 -anchor se -bordermode ignore + place $base.oldpwd \ + -x 160 -y 182 -width 268 -height 22 -anchor nw -bordermode ignore + place $base.newpwd \ + -x 160 -y 209 -width 268 -height 22 -anchor nw -bordermode ignore + place $base.newpwd2 \ + -x 160 -y 238 -width 268 -height 22 -anchor nw -bordermode ignore + place $base.infos \ + -x 0 -y 135 -width 445 -height 40 -anchor nw -bordermode ignore + place $base.infos.requislb \ + -x 71 -y 10 -width 161 -height 18 -anchor nw -bordermode ignore + place $base.infos.expirelbl \ + -x 400 -y 10 -width 31 -height 18 -anchor nw -bordermode ignore + place $base.infos.lenlbl \ + -x 320 -y 10 -width 26 -height 18 -anchor nw -bordermode ignore + place $base.infos.lb1 \ + -x 70 -y 28 -anchor se -bordermode ignore + place $base.infos.lb2 \ + -x 325 -y 28 -anchor se -bordermode ignore + place $base.infos.lb3 \ + -x 400 -y 28 -anchor se -bordermode ignore +} + +Window show . +Window show .top28 + +main $argc $argv diff --git a/contrib/tcl/ndsspace.tcl b/contrib/tcl/ndsspace.tcl new file mode 100755 index 0000000..f06e368 --- /dev/null +++ b/contrib/tcl/ndsspace.tcl @@ -0,0 +1,304 @@ +#!/usr/bin/tixwish +############################################################################# +# Visual Tcl v1.20 Project +# +# ndsspace.tcl +# Graphical display of Netware disk quota on a ncpmounted +# permanent connection. +# Copyright (C) 2001 by Patrick Pollet +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +# Revision history: + +# 1.00 January 1999 Patrick Pollet +# Initial version using Caldera NDS client +# 1.1 February 2001 Patrick Pollet +# adapted for ncpfs NDS client +# 1.2 March 2001 Patrick Pollet +# added server/volume selection logic +# 1.3 Feb 2002 Patrick Pollet +# in some cases ncpvrest chokes not finding current userid +# so we now force the username with the -N parameter +################################# +# GLOBAL VARIABLES +# + + +################################# +# USER DEFINED PROCEDURES +# +proc {initpath} {} { +#set up path to others scripts and images +global env SCRIPT_DIR + if {![info exists env(NDSCLIENT_HOME)]} { + set home [file dirname [info script]] + switch [file pathtype $home] { + absolute {set env(NDSCLIENT_HOME) $home} + relative {set env(NDSCLIENT_HOME) [file join [pwd] $home]} + volumerelative { + set curdir [pwd] + cd $home + set env(NDSCLIENT_HOME) [file join [pwd] [file dirname \ + [file join [lrange [file split $home] 1 end]]]] + cd $curdir + } + } + } +set SCRIPT_DIR $env(NDSCLIENT_HOME) +#puts $SCRIPT_DIR +} + +proc init {argc argv} { +global SCRIPT_DIR + initpath + uplevel #0 [list source [file join $SCRIPT_DIR ndsutils.tcl]] + uplevel #0 [list source [file join $SCRIPT_DIR ndsstrings.tcl]] + NDS:init +} + +init $argc $argv + +proc changeVolume {} { +global NDS + catch {.top28.treelbx curselection} num + if {$num !="" } { + catch {.top28.treelbx get $num} srv_vol + set tmpl [split $srv_vol '/'] + set NDS(server) [lindex $tmpl 0] + set NDS(volume) [lindex $tmpl 1] + refresh + } + +} + + +proc {getquota} {} { +# order quota used left +global NDS; +set tmp [exec ncpvrest -S $NDS(server) -V $NDS(volume) -N $NDS(username) ] + +set tmpl [split $tmp :] +set limit [lindex $tmpl 2] +set used [lindex $tmpl 3] +set left [expr $limit -$used] + +set tmpl [list $used $limit $left] +#NDS:dialog $tmpl +return $tmpl +} + + +proc {refresh} {} { + set GREEN #008e00 + set ORANGE #feaa00 + set RED #ee0000 + + + set quotas [getquota] + set left [lindex $quotas 2] + set color $RED + if {$left >= "1000" } { + set color $GREEN + } else { + if {$left > "500"} { + set color $ORANGE + } else { + set color $RED + } + } + .top28 configure -background $color + .top28.labut configure -background $color + .top28.lablim configure -background $color + .top28.labrest configure -background $color + .top28.labutR configure -background $color + .top28.lablimR configure -background $color + .top28.labrestR configure -background $color + .top28.labutR configure -text [format "%9d Kb" [lindex $quotas 0]] + .top28.lablimR configure -text [format "%9d Kb" [lindex $quotas 1]] + .top28.labrestR configure -text [format "%9d Kb" [lindex $quotas 2]] + after 5000 changeVolume +} + + +proc getVolumes {} { + catch {exec ncpwhoami -fSV -s / } result +# puts $result + set lresult [split $result \n] + .top28.treelbx delete 0 end + foreach item $lresult { + .top28.treelbx insert end $item + } + .top28.treelbx selection set 0 + changeVolume + +} + +proc {main} {argc argv} { +global NDS STR + set user $NDS(username) + puts $user + # .top28.lab35 configure -text $user + if {$user !=""} { + getVolumes + } else { + set tmpl [split $STR(not_logged_in) ] + .top28.labutR configure -text [lindex $tmpl 0] + .top28.lablimR configure -text [lindex $tmpl 1] + .top28.labrestR configure -text [lindex $tmpl 2] + } +} + +proc {Window} {args} { +global vTcl + set cmd [lindex $args 0] + set name [lindex $args 1] + set newname [lindex $args 2] + set rest [lrange $args 3 end] + if {$name == "" || $cmd == ""} {return} + if {$newname == ""} { + set newname $name + } + set exists [winfo exists $newname] + switch $cmd { + show { + if {$exists == "1" && $name != "."} {wm deiconify $name; return} + if {[info procs vTclWindow(pre)$name] != ""} { + eval "vTclWindow(pre)$name $newname $rest" + } + if {[info procs vTclWindow$name] != ""} { + eval "vTclWindow$name $newname $rest" + } + if {[info procs vTclWindow(post)$name] != ""} { + eval "vTclWindow(post)$name $newname $rest" + } + } + hide { if $exists {wm withdraw $newname; return} } + iconify { if $exists {wm iconify $newname; return} } + destroy { if $exists {destroy $newname; return} } + } +} + +################################# +# VTCL GENERATED GUI PROCEDURES +# + +proc vTclWindow. {base} { + if {$base == ""} { + set base . + } + ################### + # CREATING WIDGETS + ################### + wm focusmodel $base passive + wm geometry $base 1x1+0+0 + wm maxsize $base 785 570 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 1 1 + wm withdraw $base + wm title $base "vt.tcl" + ################### + # SETTING GEOMETRY + ################### +} + +proc vTclWindow.top28 {base} { +global STR + if {$base == ""} { + set base .top28 + } + if {[winfo exists $base]} { + wm deiconify $base; return + } + ################### + # CREATING WIDGETS + ################### + toplevel $base -class Toplevel \ + -background #00ae00 + wm focusmodel $base passive + wm geometry $base 180x160+292+271 + wm maxsize $base 785 570 + wm minsize $base 1 1 + wm overrideredirect $base 0 + wm resizable $base 0 0 + wm deiconify $base + wm title $base $STR(ndsspace) + wm protocol $base WM_DELETE_WINDOW {exit} + + listbox $base.treelbx \ + -background #dcdcdc -font {Helvetica -12 normal} -foreground #000000 \ + -highlightbackground #ffffff -highlightcolor #000000 \ + -selectbackground #547098 -selectforeground #ffffff \ + -selectmode browse -height 4\ + -yscrollcommand {.top28.scr18 set} + scrollbar $base.scr18 -command {.top28.treelbx yview}\ + -activebackground #dcdcdc -background #dcdcdc -cursor left_ptr \ + -highlightbackground #dcdcdc -highlightcolor #000000 -orient vert \ + -troughcolor #dcdcdc -width 10 + + + label $base.labut \ + -borderwidth 1 -font {Helvetica -10 normal} -justify right \ + -text $STR(used) + label $base.lablim \ + -borderwidth 1 -font {Helvetica -10 normal} -justify right \ + -text $STR(quota) + label $base.labrest \ + -borderwidth 1 -font {Helvetica -10 normal} -justify right \ + -text $STR(left) + label $base.labutR \ + -borderwidth 1 -font {Helvetica -12 normal} -justify left \ + -relief raised + label $base.lablimR \ + -borderwidth 1 -font {Helvetica -12 normal} -justify left \ + -relief raised + label $base.labrestR \ + -borderwidth 1 -font {Helvetica -12 normal} -justify left \ + -relief raised + bind $base.treelbx { + changeVolume + } + bind $base.treelbx

Bl}K=Ns4u-R4x_F_<>Y* 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 z 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 z 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 &_nVFe^U(1gU1O8B) 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ξRnD%KN@$z! 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