Date: Wed, 14 Apr 2004 16:34:51 +0200 (CEST) From: Janos Mohacsi <mohacsi@niif.hu> To: FreeBSD-gnats-submit@FreeBSD.org Cc: Munish Chopra <chopra@soulwax.net> Subject: ports/65527: New port: net/py-bittornado and net/py-bittornado-core version 0.1.4 Message-ID: <200404141434.i3EEYp0e032945@norfolk.ki.iif.hu> Resent-Message-ID: <200404141440.i3EEeOBK076335@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 65527 >Category: ports >Synopsis: New port: net/py-bittornado and net/py-bittornado-core version 0.1.4 >Confidential: no >Severity: non-critical >Priority: medium >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Wed Apr 14 07:40:23 PDT 2004 >Closed-Date: >Last-Modified: >Originator: Janos Mohacsi >Release: FreeBSD 5.2-CURRENT i386 >Organization: NIIF >Environment: System: FreeBSD norfolk.ki.iif.hu 5.2-CURRENT FreeBSD 5.2-CURRENT #10: Wed Mar 24 17:08:06 CET 2004 root@norfolk.ki.iif.hu:/usr/obj/usr/src/sys/NORFOLK i386 >Description: New port: net/py-bittornado version 0.1.4 BitTornado is a tool for distributing files. It's based on the BitTorrent tool but has many enhancement over it - multitracker support - to have redundant tracker - preferences menu for GUI client - webseed support to have better control of download - graphical torrent file maker - experimental IPv6 support WWW: http://www.bittornado.com Note1: this shar contain py-bittornado and a slave port py-bittornado-core Note2: This port obsolotes ports/65199 and ports/64451 >How-To-Repeat: Apply this shar. >Fix: # This is a shell archive. Save it in a file, remove anything before # this line, and then unpack it by entering "sh file". Note, it may # create directories; files and directories will be owned by you and # have default permissions. # # This archive contains: # # py-bittornado # py-bittornado/pkg-plist # py-bittornado/pkg-descr # py-bittornado/distinfo # py-bittornado/Makefile # py-bittornado/files # py-bittornado/files/patch-btdownloadgui.py # py-bittornado/files/extra-nogui-patch-setup.py # py-bittornado/files/extra-gui-patch-setup.py # py-bittornado-core/ # py-bittornado-core/Makefile # echo c - py-bittornado mkdir -p py-bittornado > /dev/null 2>&1 echo x - py-bittornado/pkg-plist sed 's/^X//' >py-bittornado/pkg-plist << 'END-of-py-bittornado/pkg-plist' Xbin/bt-t-make.py Xbin/btcompletedir.py X%%GUI%%bin/btcompletedirgui.py Xbin/btcopyannounce.py Xbin/btdownloadcurses.py X%%GUI%%bin/btdownloadgui.py Xbin/btdownloadheadless.py Xbin/btdownloadlibrary.py Xbin/btlaunchmany.py Xbin/btlaunchmanycurses.py Xbin/btmakemetafile.py X%%GUI%%bin/btmaketorrentgui.py Xbin/btreannounce.py Xbin/btrename.py Xbin/btsethttpseeds.py Xbin/btshowmetainfo.py Xbin/bttest.py Xbin/bttrack.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Choker.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Choker.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Choker.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Connecter.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Connecter.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Connecter.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Downloader.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Downloader.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Downloader.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/DownloaderFeedback.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/DownloaderFeedback.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/DownloaderFeedback.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Encrypter.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Encrypter.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Encrypter.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/HTTPDownloader.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/HTTPDownloader.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/HTTPDownloader.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/NatCheck.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/NatCheck.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/NatCheck.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/PiecePicker.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/PiecePicker.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/PiecePicker.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Rerequester.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Rerequester.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Rerequester.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Statistics.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Statistics.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Statistics.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Storage.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Storage.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Storage.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/StorageWrapper.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/StorageWrapper.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/StorageWrapper.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/T2T.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/T2T.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/T2T.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Uploader.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Uploader.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/Uploader.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/__init__.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/__init__.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/__init__.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/btformats.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/btformats.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/btformats.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/download.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/download.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/download.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/fakeopen.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/fakeopen.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/fakeopen.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/testtest.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/testtest.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/testtest.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/track.py X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/track.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/BT1/track.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/ConfigReader.py X%%PYTHON_SITELIBDIR%%/BitTornado/ConfigReader.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/ConfigReader.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/ConnChoice.py X%%PYTHON_SITELIBDIR%%/BitTornado/ConnChoice.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/ConnChoice.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/CurrentRateMeasure.py X%%PYTHON_SITELIBDIR%%/BitTornado/CurrentRateMeasure.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/CurrentRateMeasure.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/HTTPHandler.py X%%PYTHON_SITELIBDIR%%/BitTornado/HTTPHandler.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/HTTPHandler.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/PSYCO.py X%%PYTHON_SITELIBDIR%%/BitTornado/PSYCO.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/PSYCO.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/RateLimiter.py X%%PYTHON_SITELIBDIR%%/BitTornado/RateLimiter.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/RateLimiter.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/RateMeasure.py X%%PYTHON_SITELIBDIR%%/BitTornado/RateMeasure.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/RateMeasure.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/RawServer.py X%%PYTHON_SITELIBDIR%%/BitTornado/RawServer.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/RawServer.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/SocketHandler.py X%%PYTHON_SITELIBDIR%%/BitTornado/SocketHandler.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/SocketHandler.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/ServerPortHandler.py X%%PYTHON_SITELIBDIR%%/BitTornado/ServerPortHandler.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/ServerPortHandler.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/__init__.py X%%PYTHON_SITELIBDIR%%/BitTornado/__init__.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/__init__.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/bencode.py X%%PYTHON_SITELIBDIR%%/BitTornado/bencode.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/bencode.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/bitfield.py X%%PYTHON_SITELIBDIR%%/BitTornado/bitfield.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/bitfield.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/download_bt1.py X%%PYTHON_SITELIBDIR%%/BitTornado/download_bt1.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/download_bt1.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/launchmanycore.py X%%PYTHON_SITELIBDIR%%/BitTornado/launchmanycore.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/launchmanycore.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/parseargs.py X%%PYTHON_SITELIBDIR%%/BitTornado/parseargs.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/parseargs.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/parsedir.py X%%PYTHON_SITELIBDIR%%/BitTornado/parsedir.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/parsedir.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/selectpoll.py X%%PYTHON_SITELIBDIR%%/BitTornado/selectpoll.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/selectpoll.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/subnetparse.py X%%PYTHON_SITELIBDIR%%/BitTornado/subnetparse.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/subnetparse.pyo X%%PYTHON_SITELIBDIR%%/BitTornado/zurllib.py X%%PYTHON_SITELIBDIR%%/BitTornado/zurllib.pyc X%%PYTHON_SITELIBDIR%%/BitTornado/zurllib.pyo X@dirrm %%PYTHON_SITELIBDIR%%/BitTornado/BT1 X@dirrm %%PYTHON_SITELIBDIR%%/BitTornado Xshare/BitTornado/alloc.gif Xshare/BitTornado/black1.ico Xshare/BitTornado/black.ico Xshare/BitTornado/blue.ico Xshare/BitTornado/green1.ico Xshare/BitTornado/green.ico Xshare/BitTornado/icon_bt.ico Xshare/BitTornado/icon_done.ico Xshare/BitTornado/red.ico Xshare/BitTornado/white.ico Xshare/BitTornado/yellow1.ico Xshare/BitTornado/yellow.ico X@dirrm share/BitTornado/ X%%PORTDOCS%%%%DOCSDIR%%/BUILD.windows.txt X%%PORTDOCS%%%%DOCSDIR%%/FAQ.txt X%%PORTDOCS%%%%DOCSDIR%%/IMPORTANT-multitracker-readme.txt X%%PORTDOCS%%%%DOCSDIR%%/INSTALL.unix.txt X%%PORTDOCS%%%%DOCSDIR%%/LICENSE.txt X%%PORTDOCS%%%%DOCSDIR%%/README-Psyco.txt X%%PORTDOCS%%%%DOCSDIR%%/README-experimental.txt X%%PORTDOCS%%%%DOCSDIR%%/README.txt X%%PORTDOCS%%%%DOCSDIR%%/credits.txt X%%PORTDOCS%%%%DOCSDIR%%/multitracker-spec.txt X%%PORTDOCS%%%%DOCSDIR%%/multitracker_README.txt X%%PORTDOCS%%%%DOCSDIR%%/todo.txt X%%PORTDOCS%%%%DOCSDIR%%/webseed-spec.txt X%%PORTDOCS%%@dirrm %%DOCSDIR%% END-of-py-bittornado/pkg-plist echo x - py-bittornado/pkg-descr sed 's/^X//' >py-bittornado/pkg-descr << 'END-of-py-bittornado/pkg-descr' XBitTornado is a tool for distributing files. It's based on the BitTorrent Xtool but has many enhancement over it (it was also knows as SHADOWS Xexperimental Bittorrent client): X- multitracker support - to have redundant tracker X- preferences menu for GUI client X- webseed support to have better control of download X- graphical torrent file maker X- experimental IPv6 support X XWWW: http://www.bittornado.com END-of-py-bittornado/pkg-descr echo x - py-bittornado/distinfo sed 's/^X//' >py-bittornado/distinfo << 'END-of-py-bittornado/distinfo' XMD5 (BitTornado-0.1.4.tar.gz) = c5cb7099921b31a0f0f1ef4747d43ffc XSIZE (BitTornado-0.1.4.tar.gz) = 161367 END-of-py-bittornado/distinfo echo x - py-bittornado/Makefile sed 's/^X//' >py-bittornado/Makefile << 'END-of-py-bittornado/Makefile' X# New ports collection makefile for: BitTornado X# Date created: 18/03/2004 X# Whom: janos.mohacsi@bsd.hu X# used the work of net/py-bittorrent X# X# $FreeBSD$ X# X XPORTNAME= BitTornado XPORTVERSION= 0.1.4 XCATEGORIES= net python ipv6 XMASTER_SITES= http://e.scarywater.net/bt/download/ XPKGNAMEPREFIX= ${PYTHON_PKGNAMEPREFIX} X XMAINTAINER= janos.mohacsi@bsd.hu XCOMMENT= An extended BitTorrent peer-to-peer tool for distributing files X X#GUI requirements X.ifndef(WITHOUT_GUI) XRUN_DEPENDS+= ${PYTHON_SITELIBDIR}/wxPython/__init__.py:${PORTSDIR}/x11-toolkits/py-wxPython XPLIST_SUB+= GUI='' XEXTRA_PATCHES+= ${FILESDIR}/extra-gui-patch-setup.py X.else XEXTRA_PATCHES+= ${FILESDIR}/extra-nogui-patch-setup.py XPLIST_SUB+= GUI='@comment ' X.endif X X.ifdef(WITH_PSYCO) XRUN_DEPENDS+= ${PYTHON_SITELIBDIR}/psyco/_psyco.so:${PORTSDIR}/devel/py-psyco Xpre-configure: X @${REINPLACE_CMD} -e "s/^psyco = 0/psyco = 1/g" \ X ${WRKSRC}/BitTorrent/PSYCO.py X.endif X Xpre-everything:: X.ifndef(WITHOUT_GUI) X @${ECHO_MSG} '===> Define WITHOUT_GUI to disable GUI installation' X.endif X.ifndef(WITH_PSYCO) X @${ECHO_MSG} '===> Define WITH_PSYCO to enable the optimizing Python compiler' X.endif X XUSE_PYTHON= 2.3+ XUSE_PYDISTUTILS= yes XUSE_REINPLACE= yes XWRKSRC= ${WRKDIR}/${PORTNAME}-CVS X XCONFLICTS= py??-*[Bb]it[Tt]orrent* py??-[Bb]it[Tt]ornado* X XDOC_FILES= BUILD.windows.txt FAQ.txt IMPORTANT-multitracker-readme.txt \ X INSTALL.unix.txt LICENSE.txt README-Psyco.txt \ X README-experimental.txt README.txt credits.txt \ X multitracker-spec.txt todo.txt webseed-spec.txt XEXTRA_DOC_FILES= multitracker/README.txt X X#post-patch: X# @${FIND} ${WRKSRC} -type f | \ X# ${XARGS} -x -n 10 \ X# ${REINPLACE_CMD} -E \ X# -e 's|/usr/bin/env python|${LOCALBASE}/bin/python|' \ X# -e 's|%%PREFIX%%|${PREFIX}|' X Xpost-install: X.ifndef(PORTDOCS) X @${MKDIR} ${DOCSDIR} X.for file in ${DOC_FILES} X @${INSTALL_DATA} ${WRKSRC}/${file} ${DOCSDIR} X.endfor X.for file in ${EXTRA_DOC_FILES} X ${INSTALL_DATA} ${WRKSRC}/${file} ${DOCSDIR}/`${ECHO} ${file} | ${SED} -e 's|/|_|g'` X.endfor X.endif X X.include <bsd.port.mk> END-of-py-bittornado/Makefile echo c - py-bittornado/files mkdir -p py-bittornado/files > /dev/null 2>&1 echo x - py-bittornado/files/patch-btdownloadgui.py sed 's/^X//' >py-bittornado/files/patch-btdownloadgui.py << 'END-of-py-bittornado/files/patch-btdownloadgui.py' X X$FreeBSD$ X X--- btdownloadgui.py.orig Sun Apr 4 23:40:03 2004 X+++ btdownloadgui.py Sun Apr 4 23:40:50 2004 X@@ -48,7 +48,7 @@ X X PROFILER = False X X-basepath=os.path.abspath(os.path.dirname(os.path.realpath(sys.argv[0]))) X+basepath="%%PREFIX%%/share/BitTornado" X X def hours(n): X if n == -1: END-of-py-bittornado/files/patch-btdownloadgui.py echo x - py-bittornado/files/extra-nogui-patch-setup.py sed 's/^X//' >py-bittornado/files/extra-nogui-patch-setup.py << 'END-of-py-bittornado/files/extra-nogui-patch-setup.py' X--- setup.py.orig Sat Apr 3 01:56:44 2004 X+++ setup.py Wed Apr 14 15:57:49 2004 X@@ -18,13 +18,14 @@ X X packages = ["BitTornado","BitTornado.BT1"], X X- scripts = ["btdownloadgui.py", "btdownloadheadless.py", "btdownloadlibrary.py", X+ scripts = ["btdownloadheadless.py", "btdownloadlibrary.py", X "bttrack.py", "btmakemetafile.py", "btlaunchmany.py", "btcompletedir.py", X- "btdownloadcurses.py", "btcompletedirgui.py", "btlaunchmanycurses.py", X+ "btdownloadcurses.py", "btlaunchmanycurses.py", X "btmakemetafile.py", "btreannounce.py", "btrename.py", "btshowmetainfo.py", X "bttest.py", X- 'btmaketorrentgui.py', 'btcopyannounce.py', 'btsethttpseeds.py', 'bt-t-make.py', X- 'alloc.gif','black1.ico','black.ico','blue.ico','green1.ico','green.ico', X+ 'btcopyannounce.py', 'btsethttpseeds.py', 'bt-t-make.py'], X+ data_files=[('share/BitTornado', X+ ['alloc.gif','black1.ico','black.ico','blue.ico','green1.ico','green.ico', X 'icon_bt.ico','icon_done.ico','red.ico','white.ico', X- 'yellow1.ico','yellow.ico'] X+ 'yellow1.ico','yellow.ico'])] X ) END-of-py-bittornado/files/extra-nogui-patch-setup.py echo x - py-bittornado/files/extra-gui-patch-setup.py sed 's/^X//' >py-bittornado/files/extra-gui-patch-setup.py << 'END-of-py-bittornado/files/extra-gui-patch-setup.py' X X$FreeBSD$ X X--- setup.py.orig Sun Apr 4 23:20:04 2004 X+++ setup.py Sun Apr 4 23:21:13 2004 X@@ -23,8 +23,9 @@ X "btdownloadcurses.py", "btcompletedirgui.py", "btlaunchmanycurses.py", X "btmakemetafile.py", "btreannounce.py", "btrename.py", "btshowmetainfo.py", X "bttest.py", X- 'btmaketorrentgui.py', 'btcopyannounce.py', 'btsethttpseeds.py', 'bt-t-make.py', X- 'alloc.gif','black1.ico','black.ico','blue.ico','green1.ico','green.ico', X+ 'btmaketorrentgui.py', 'btcopyannounce.py', 'btsethttpseeds.py', 'bt-t-make.py'], X+ data_files=[('share/BitTornado', X+ ['alloc.gif','black1.ico','black.ico','blue.ico','green1.ico','green.ico', X 'icon_bt.ico','icon_done.ico','red.ico','white.ico', X- 'yellow1.ico','yellow.ico'] X+ 'yellow1.ico','yellow.ico'])] X ) END-of-py-bittornado/files/extra-gui-patch-setup.py echo c - py-bittornado-core/ mkdir -p py-bittornado-core/ > /dev/null 2>&1 echo x - py-bittornado-core/Makefile sed 's/^X//' >py-bittornado-core/Makefile << 'END-of-py-bittornado-core/Makefile' X# New ports collection makefile for: BitTornado X# Date created: 18/03/2004 X# Whom: janos.mohacsi@bsd.hu X# used the work of net/py-bittorrent X# X# $FreeBSD$ X# X XPKGNAMESUFFIX= -core XCATEGORIES= net python ipv6 X XCOMMENT= An extended BitTorrent peer-to-peer core tool for distributing files X X#Build only the CORE XWITHOUT_GUI= yes X XMASTERDIR= ${.CURDIR}/../py-bittornado X X.include "${MASTERDIR}/Makefile" END-of-py-bittornado-core/Makefile exit >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200404141434.i3EEYp0e032945>