From nobody Fri Apr 26 06:59:39 2024 X-Original-To: freebsd-ports@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4VQkB34ZDqz5J4VD for ; Fri, 26 Apr 2024 06:59:55 +0000 (UTC) (envelope-from marklmi@yahoo.com) Received: from sonic304-23.consmr.mail.gq1.yahoo.com (sonic304-23.consmr.mail.gq1.yahoo.com [98.137.68.204]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4VQkB16QKxz4vbr for ; Fri, 26 Apr 2024 06:59:53 +0000 (UTC) (envelope-from marklmi@yahoo.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=yahoo.com header.s=s2048 header.b="j4qOAH/e"; dmarc=pass (policy=reject) header.from=yahoo.com; spf=pass (mx1.freebsd.org: domain of marklmi@yahoo.com designates 98.137.68.204 as permitted sender) smtp.mailfrom=marklmi@yahoo.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1714114791; bh=3Wp1KTFnp4lzwvwXZXq/07x9Uat4rdPKShqSO7G4zQk=; h=From:Subject:Date:To:References:From:Subject:Reply-To; b=j4qOAH/efYrcvxdeWMeX1q3XMPlSQ0QiDTyPfNZKC1Z8ah30kQADChFDgkbHT7CY30lttHI1HcbhXDyeHpuCpDU2Bf8aaRNyb3ngfgWE3lVvsWFDcW85aBIWcTOxIdAtYIMToVd9By40Q6FXNZHKS+7/qMvNFFjiEF1pIdFDCKdulbHOiu9N1z7KyPVI4PErS/WLt/WUtJUEL6xLe71wo9+xoju6ivIsTotErXwF0HzHEfaSQLM3XavA5Ktcq/OgnwZb3MCYvLMidtQi8Zh1iakXWK1gTOEzMioj9XnCbSBSb+0tGcyYQKLShDMH8/GTTFZn0LPUr7Ksj0qeU7mAkw== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1714114791; bh=4T8J5WxcZ8odhC2skXeXUt+aAg1kNkLU2fz8/ibQkIm=; h=X-Sonic-MF:From:Subject:Date:To:From:Subject; b=joSkf0OLV4rCG4WkyujYrCieuDH+BUoHmkAkaRcTrpkIoIHxay1+D7UGgigPcSB7ntcTwcypjezFGfXF0hmAdF//ZeiZxH5UDix7kcf4H/RUTc7PQDAfY6WikWjW2w0m1EXhiwlt3QHQTMU2s+5dSsFVXCoj5kmZ6CK3vennS0cYgykt7f57qoDrRHsT9XdoTL7z7dsp9ZMWlCn5cjxt70tS1+wIRYCyTuoYvqOuIHsQPiYQFKy4SiLYIMuOzMj+pMG65m8tQh50Bg7ehuYbyCJXLQ5sLBKKu1xH5lfT1IXN/jWkBVjQSQuTWFG4QDqH5NhM53yS9P6Bgv9bMAfa8Q== X-YMail-OSG: mME9PkIVM1m7WSZFSkVK38IBfDTKJYM2f.98Yj3B4lQAeYo17eSQF_TkRyvSjYC xNRTlM2vbZXD4oZVEh14KMGQXREoG3xrKdGDRqvJDFh1xAkUC2CSMkAsiy0Koye2NsbNuS_sYyUL bpJ6SisA498GYQ5nFpWhGYJ04HDRzbrOrsJVEyZgdBrS4VfNq_VKIVHwIXa8t.ldQVi0lFXpIHk2 kwWwaAtZY2LhIYbeJJhCO4oC8syRvQPVYTGd9JnjSzgayfWTZpw9.wonvP1gOOR9r5KFKGGxWvJR LPWjhBA1gC8cm0FHXlnfwH.sehk8LOfSg593XPMNDQQiEBbH9eNKPj2W.VhxsVHbwAMgHaYpvEQZ 51NJD1ygVlPUMYUIEu1prx0nrzFiPIZCqTyD1jWdvf_S2Mg_M6cRvImVMDTJcHbePriBQ2sNp_i9 Dzpj1438v5g5wxOp3D3OTu4KqAxNUJMSJZFUCr5xJ7azWv51bHXBVqggA_OCw9Z3kPwRRM6XwN3C gVOs_Zdxz2aCuExltNtMgV48TXBueXMp0jZsgZolvQosLWmSZcWHYgapYZJGp3IX.EVj79yj67lc EiotyH7p6NwbDxFDzVl7S.oz5sHobVoyxUMRji5zHCrG9PspAfxMP5INgT0iV7460aP8MGuz_DOo 9lI9DiSdvQ8uRqMM0Zn8._HOuAllMTEgworsmEIZw.dhkDMbfLrTOPsARmVzNkWZ12cATDP6fnJO pAZsdV3rhP9jgdKJBT6XDzlfSZOqZCy7o33_e9tq38hxNFH8AhKlFi0WTwdRBx2hgA.AokeLVFbB Um5dCnuggjZahRQijmKSVcJjJras0xyShUivVElD8QZOJE07_p7NTe9q2BIKNu0ORSMAmY4Sxc06 1DdAF1zoi.vfLgST9Ndd3zbyKnCdlXz3b.HeumE4S6BL4vgtvWW_ByeEWMoS_FtLkKCiEheqOPUm uRIRyiGv3YjHgKvnXzlusWB3ocWU9N3jKXa9qTSf7vIVVgvBm5UPbojnMFV9bzx_N4qeb1jPMN.r jyT2ZJxkwA69I5BH8H10tx7wl4koFDGjrIe4JrYdKH3MzJK4xDoYHAl_ib8HzuqLiu1fnyYLGfoE gz5Nl2Lb5lbj7Nu5V4SfRDx6a7HPRru8ZRLzePiXgGaadprghBwReiXrSo7LlE.PhdaCjux1RGme cdN1kVuyfwzYsAU_Wd7nYRWlS7eouM80mw.YCdiU2qg241QVYNii3vXou2iGHqyyzLN_QNBZPJQh 6qv56C3qheSVg7FMhAEHyw5LztSLGMGX77_DgZAUnZ_Bma7KyfLA_a8w7ZQFB9NbPn7RwmTaDznb n3vlDHMFD3JSWTSBgtqBPHGUmNWng95nqFXmdAlT0LD_.nLD5wdlKGcc.pYS.V38mUcIvccPMXbj OEPbHEZFG6.4e.R2So2ocRdbtGUvcPAlDN0wfjwHuN0un79rsIwop15tWrTPiltuwXKITwvb0isT JjTvXgLYfeEpvJxnAYwu1gFgzjM1aJOTFOQuORUQc.zsHTmsxKWzea6LUDbX54uch7nR58SYBgtn AaXPe7C61uy2jVcnuAsYGNfemPBsMYY2GxmZhGpCZmk6YByBirgn2AS3EKBAJvojM685nfUeyvc0 OSe0Q62GJzKNfjan5qJk2tElDKmQCUidIt87_fgXwGLy57Uoo3ZTf9twWYUcGNjgz3m_GgAwc4i3 1y5U1aLUQ0qXDc9li.iIuV2cZWKcCPsDW7qjW0iIyy9skkhCBGjBBaWd4YzFYLUrH8gjqHNCoYoG YW3NSBhwgGbCH5uspAzSepCr3qmGgkjYepN_Q8l6mcRzUMyjMidck7qpheFC8WQgUw_VSbiP56vZ AiInC3_5Lt8Tctvp9RVG.UAzaSmUsGR6yRsWYbeS1eG5dXxGIinqia8EzTTwlGOuPPby9OZXvWx3 p0pfmnQJrkAdpFO1nRLcK20cGxRVsszr8x7D5fIj2C0JNLm9MQ51hSYGqBUg_pLki3b6MBzMOm8R RxC9XcI8rgcCiQvzIkifRJGCdDbqhcP2pyV5ux_qnCXhllnI2UrKDZhqHxhvxVq3jsiY3sID96Jg iJYKs27sD2U96I0GjWU2iTtdjp.n5SUOHQOslxklTdJ51_oP5.vADD5NAQTEksLlrpklRc7DqvOU 0eBoZUj_tSFIKrQR3jUW0n9QGLW6HPf_vG_Ps7e38aQh.kNhlwRTdWFJUCJUO6dz.xWjfsqKP2Tt XjIsXDfLdXV7NEOL8.EaxJ13M.1.hk8t5PbbuL9jQThZje.qPUlAL3qBMHFGkT7aHfx04OQKh X-Sonic-MF: X-Sonic-ID: 4c7781e7-d923-4c25-9521-7af9e160ed3f Received: from sonic.gate.mail.ne1.yahoo.com by sonic304.consmr.mail.gq1.yahoo.com with HTTP; Fri, 26 Apr 2024 06:59:51 +0000 Received: by hermes--production-gq1-59c575df44-ftslf (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID ae6162167fcde35601d938ef222feac7; Fri, 26 Apr 2024 06:59:50 +0000 (UTC) From: Mark Millard Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable List-Id: Porting software to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-ports List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: freebsd-ports@freebsd.org Sender: owner-freebsd-ports@FreeBSD.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.500.171.1.1\)) Subject: USE_TMPFS=all context: poudriere bulk -a fails for the tmpfs : /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/.p having no space left Message-Id: <6C0D3228-D035-43E2-AA86-2E4AAADB9A13@yahoo.com> Date: Thu, 25 Apr 2024 23:59:39 -0700 To: FreeBSD Mailing List , Bryan Drewery X-Mailer: Apple Mail (2.3774.500.171.1.1) References: <6C0D3228-D035-43E2-AA86-2E4AAADB9A13.ref@yahoo.com> X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.50 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-0.998]; MV_CASE(0.50)[]; DMARC_POLICY_ALLOW(-0.50)[yahoo.com,reject]; R_SPF_ALLOW(-0.20)[+ptr:yahoo.com]; R_DKIM_ALLOW(-0.20)[yahoo.com:s=s2048]; MIME_GOOD(-0.10)[text/plain]; RCVD_TLS_LAST(0.00)[]; TO_DN_ALL(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; RCPT_COUNT_TWO(0.00)[2]; DWL_DNSWL_NONE(0.00)[yahoo.com:dkim]; FREEMAIL_FROM(0.00)[yahoo.com]; FROM_HAS_DN(0.00)[]; ASN(0.00)[asn:36647, ipnet:98.137.64.0/20, country:US]; FREEMAIL_ENVFROM(0.00)[yahoo.com]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; DKIM_TRACE(0.00)[yahoo.com:+]; MLMMJ_DEST(0.00)[freebsd-ports@freebsd.org]; RWL_MAILSPIKE_POSSIBLE(0.00)[98.137.68.204:from]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[98.137.68.204:from] X-Rspamd-Queue-Id: 4VQkB16QKxz4vbr # poudriere version poudriere-git-3.4.99.20240419 Note the "1024 1024 0 100%" for = /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/.p It is the only "Avail" being near or at 0. # df -m Filesystem = 1M-blocks Used Avail Capacity Mounted on zoptb/ROOT/main-amd64 = 667579 4902 662676 1% / . . . tmpfs = 1024 1024 0 100% = /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/.p /usr/ports = 667677 5001 662676 1% = /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/usr/ports /usr/local/poudriere/data/packages/main-amd64-bulk_a-default/.building = 797764 135087 662676 17% = /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/packages /usr/ports/distfiles = 667677 5001 662676 1% = /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/distfiles tmpfs = 707954 0 707954 0% = /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/var/db/portspou= dreire=20 The actual errors that show up start after "Gathering ports metadata": [00:00:01] [Dry Run] Loading MOVED for = /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/usr/ports [00:00:01] [Dry Run] Gathering ports metadata [00:00:15] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//" [00:00:15] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 482: Unknown modifier "local//" [00:00:15] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//" [00:00:15] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 482: Unknown modifier "local//" [00:00:15] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//" [00:00:15] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 482: Unknown modifier "local//" [00:00:15] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//" [00:00:15] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 484: Unknown modifier "local//" [00:00:15] [Dry Run] Warning: (sysutils/pacman): make: Fatal errors = encountered -- cannot continue [00:00:15] [Dry Run] Warning: (sysutils/pacman): Error: Error looking up = dependencies for sysutils/pacman [00:00:18] [Dry Run] Warning: (www/rubygem-socksify): Error: (91456) = /usr/local/share/poudriere/bulk.sh:shash_set:257: cannot create = var/cache/pkgname-deps-run%rubygem-socksify-1.7.1: No space left on = device [00:00:18] [Dry Run] Warning: (www/rubygem-socksify): Error: (91456) = /usr/local/share/poudriere/bulk.sh:shash_set:257: cannot create = var/cache/pkgname-run_deps%rubygem-socksify-1.7.1: No space left on = device [00:00:18] [Dry Run] Warning: (www/rubygem-sitemap_generator): Error: = /usr/local/share/poudriere/bulk.sh:deps_fetch_vars:177:Duplicated origin = for rubygem-sitemap_generator-6.3.0: www/rubygem-sitemap_generator AND . = Rerun with -v to see which ports are depending on these. [00:00:18] [Dry Run] Warning: (www/rubygem-sinatra1): Error: = /usr/local/share/poudriere/bulk.sh:deps_fetch_vars:177:Duplicated origin = for rubygem-sinatra1-1.4.8: www/rubygem-sinatra1 AND . Rerun with -v to = see which ports are depending on these. [00:00:18] [Dry Run] Warning: (www/rubygem-tailwindcss-rails-rails70): = Error: /usr/local/share/poudriere/bulk.sh:deps_fetch_vars:177:Duplicated = origin for rubygem-tailwindcss-rails-rails70-1.0.0: = www/rubygem-tailwindcss-rails-rails70 AND . Rerun with -v to see which = ports are depending on these. . . . [00:00:19] [Dry Run] Warning: (x11-wm/cosmic-comp): Error: = /usr/local/share/poudriere/bulk.sh:deps_fetch_vars:177:Duplicated origin = for cosmic-comp-s20240419: x11-wm/cosmic-comp AND . Rerun with -v to see = which ports are depending on these. [00:00:19] [Dry Run] Warning: (x11-wm/niri): Error: = /usr/local/share/poudriere/bulk.sh:deps_fetch_vars:177:Duplicated origin = for niri-0.1.5: x11-wm/niri AND . Rerun with -v to see which ports are = depending on these. [00:00:19] [Dry Run] Error: = /usr/local/share/poudriere/bulk.sh:gather_port_vars:125:Fatal errors = encountered gathering initial ports metadata [main-amd64-bulk_a-default] [2024-04-26_05h44m38s] [crashed] Time: = 00:00:18 [00:00:19] [Dry Run] Logs: = /usr/local/poudriere/data/logs/bulk/main-amd64-bulk_a-default/2024-04-26_0= 5h44m38s [00:00:19] [Dry Run] Cleaning up Error: (3616) _mktemp:_mktemp:257: mkstemp failed on = ../usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/.p/tmp/parall= el.pipe.4kKzIqN2: No space left on device Error: (5921) mkfifo:parallel_start:1: : No such file or directory Error: (5921) exit:parallel_start:1: cannot create : No such file or = directory The 1024 figure seems to be tied to: do_portbuild_mounts() { [ $# -eq 4 ] || eargs do_portbuild_mounts mnt jname ptname = setname local mnt=3D"$1" local jname=3D"$2" local ptname=3D"$3" local setname=3D"$4" local optionsdir opt o msgmount msgdev # Create our data dirs MNT_DATADIR=3D"${mnt:?}/${DATADIR_NAME:?}" mkdir -p "${MNT_DATADIR:?}" add_relpath_var MNT_DATADIR if [ ${TMPFS_DATA} -eq 1 -o ${TMPFS_ALL} -eq 1 ]; then mnt_tmpfs data "${MNT_DATADIR:?}" fi . . . and: mnt_tmpfs() { [ $# -ge 2 ] || eargs mnt_tmpfs type dst local type=3D"$1" local dst=3D"$2" local limit size case ${type} in data) # Limit data to 1GiB limit=3D1 ;; *) limit=3D${TMPFS_LIMIT} ;; esac size=3D case "${limit:+set}" in set) size=3D"-o size=3D${limit}G" ;; esac mount -t tmpfs ${size} tmpfs "${dst:?}" } If I use limit=3D2 I still get the early error messages but not the later ones: # poudriere bulk -jmain-amd64-bulk_a -a -n [00:00:01] [Dry Run] Creating the reference jail... done [00:00:01] [Dry Run] Mounting system devices for = main-amd64-bulk_a-default [00:00:01] [Dry Run] Stashing existing package repository [00:00:01] [Dry Run] Mounting ports from: /usr/ports [00:00:01] [Dry Run] Mounting packages from: = /usr/local/poudriere/data/packages/main-amd64-bulk_a-default [00:00:01] [Dry Run] Mounting distfiles from: /usr/ports/distfiles [00:00:01] [Dry Run] Copying /var/db/ports from: = /usr/local/etc/poudriere.d/options [00:00:01] [Dry Run] Appending to make.conf: = /usr/local/etc/poudriere.d/make.conf [00:00:01] [Dry Run] Appending to make.conf: = /usr/local/etc/poudriere.d/main-amd64-bulk_a-make.conf [00:00:01] [Dry Run] Warning: DEVELOPER=3Dyes ignored from make.conf. = Use 'bulk -t' or 'testport' for testing instead. /etc/resolv.conf -> = /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/etc/resolv.conf= [00:00:01] [Dry Run] Starting jail main-amd64-bulk_a-default Updating /var/run/os-release done. [00:00:01] [Dry Run] Will build as nobody:nobody (65534:65534) [00:00:02] [Dry Run] Ports supports: FLAVORS SUBPACKAGES = SELECTED_OPTIONS [00:00:02] [Dry Run] Inspecting = /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref//usr/ports = for modifications to git checkout... yes [00:00:02] [Dry Run] Ports top-level git hash: 62a76b7dc95a (dirty) [00:00:02] [Dry Run] Acquiring build logs lock for = main-amd64-bulk_a-default... done [00:00:02] [Dry Run] Logs: = /usr/local/poudriere/data/logs/bulk/main-amd64-bulk_a-default/2024-04-26_0= 6h32m01s [00:00:02] [Dry Run] Loading MOVED for = /usr/local/poudriere/data/.m/main-amd64-bulk_a-default/ref/usr/ports [00:00:02] [Dry Run] Gathering ports metadata [00:00:16] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//" [00:00:16] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 482: Unknown modifier "local//" [00:00:16] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//" [00:00:16] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 482: Unknown modifier "local//" [00:00:16] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//" [00:00:16] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 482: Unknown modifier "local//" [00:00:16] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 480: Unknown modifier "local//" [00:00:16] [Dry Run] Warning: (sysutils/pacman): make: = "/usr/ports/Mk/bsd.options.mk" line 484: Unknown modifier "local//" [00:00:16] [Dry Run] Warning: (sysutils/pacman): make: Fatal errors = encountered -- cannot continue [00:00:16] [Dry Run] Warning: (sysutils/pacman): Error: Error looking up = dependencies for sysutils/pacman [00:00:20] [Dry Run] Error: = /usr/local/share/poudriere/bulk.sh:gather_port_vars:125:Fatal errors = encountered gathering initial ports metadata [main-amd64-bulk_a-default] [2024-04-26_06h32m01s] [crashed] Time: = 00:00:18 [00:00:20] [Dry Run] Logs: = /usr/local/poudriere/data/logs/bulk/main-amd64-bulk_a-default/2024-04-26_0= 6h32m01s [00:00:20] [Dry Run] Cleaning up [00:00:20] [Dry Run] Unmounting file systems That should establish that limit=3D1 is a problem. The sysutils/pacman problems seems to be tied to its Makefile 's: SUB_FILES=3D pkg-message pkg-deinstall SUB_LIST=3D PACMAN_ROOT=3D"${PACMAN_ROOT}" PREFIX=3D"${PREFIX}" PLIST_SUB=3D PACMAN_ROOT=3D"${PACMAN_ROOT:C/^${PREFIX}//}" leading to bad PLIST_SUB usage in /usr/ports/Mk/bsd.options.mk : . if ! ${PLIST_SUB:M${opt}=3D*} . if ${PORT_OPTIONS:M${opt}} PLIST_SUB:=3D ${PLIST_SUB} ${opt}=3D"" NO_${opt}=3D"@comment " . else PLIST_SUB:=3D ${PLIST_SUB} ${opt}=3D"@comment " NO_${opt}=3D"" . endif . endif =3D=3D=3D Mark Millard marklmi at yahoo.com