Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Feb 2012 18:19:08 -0700
From:      John Hein <jhein@symmetricom.com>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/164875: [maintainer update] update finance/opentaxsolver to 9.00 for TY 2011
Message-ID:  <20273.52620.798529.716412@gromit.timing.com>
Resent-Message-ID: <201202080140.q181e9UJ094576@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         164875
>Category:       ports
>Synopsis:       [maintainer update] update finance/opentaxsolver to 9.00 for TY 2011
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          maintainer-update
>Submitter-Id:   current-users
>Arrival-Date:   Wed Feb 08 01:40:09 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator:     John Hein
>Release:        
>Organization:
>Environment:
System:


>Description:

Update finance/opentaxsolver to 9.00

Added file(s):
- files/patch-src-GUI-Makefile.linux
- files/pkg-plist.in

Removed file(s):
- pkg-plist

>From upstream readme...
 Jan 14, 2012 v9.00 - Initial Release for Tax Year 2011.
    Contains:
        - US-1040, w/Scheds A, B, C, D, and form 8949. 
        - State Income Taxes for Virginia, Ohio, California,
          New York, Massachusetts, New Jersey, North Carolina, 
          and Pennsylvania.
        All updated for 2011 tax-year.
  History:
    * v9.00 (1/3/12) - Initial Release for Tax Year 2011.

>How-To-Repeat:
>Fix:

Index: Makefile
===================================================================
RCS file: /base/FreeBSD-CVS/ports/finance/opentaxsolver/Makefile,v
retrieving revision 1.22
diff -u -p -r1.22 Makefile
--- Makefile	3 Apr 2011 08:07:13 -0000	1.22
+++ Makefile	7 Feb 2012 18:41:59 -0000
@@ -6,26 +6,28 @@
 #
 
 PORTNAME=	${UPPORTNAME:L}
-PORTVERSION=	8.05
+PORTVERSION=	9.00
 CATEGORIES=	finance
-MASTER_SITES=	SF/${PORTNAME}/OTS_2010/v${PORTVERSION}
-DISTNAME=	${UPPORTNAME}2010_${PORTVERSION}
+MASTER_SITES=	SF/${PORTNAME}/OTS_${TAXYEAR}/v${PORTVERSION}
+DISTNAME=	${UPPORTNAME}${TAXYEAR}_${PORTVERSION}
 EXTRACT_SUFX=	.tgz
 
 MAINTAINER=	jhein@symmetricom.com
 COMMENT=	US tax prep software
 
+PLIST=		${WRKDIR}/pkg-plist
+SUB_FILES=	pkg-plist
+SUB_LIST=	TAXYEAR=${TAXYEAR}
+TAXYEAR=	2011
+UPPORTNAME=	OpenTaxSolver
 USE_GL=		yes
 USE_XORG=	xmu xext x11
-UPPORTNAME=	OpenTaxSolver
 
 post-patch:
 	@${REINPLACE_CMD} -e 's/%%PREFIX%%/${PREFIX:C,/,\/,g}/' \
 	${WRKSRC}/src/GUI/ots_gui.c
-	@${REINPLACE_CMD} -e 's|/usr/X11R6|${LOCALBASE}|' \
-	${WRKSRC}/src/GUI/Makefile.linux
 
-# 4.07 distfile has pre-built (linux) binaries we must whack.
+# 9.00 distfile has pre-built (linux) binaries we must whack.
 pre-build:
 	@(cd ${BUILD_WRKSRC}/src && make -f Makefile.unix clean && \
 	cd GUI && make -f Makefile.linux clean)
@@ -45,7 +47,6 @@ do-install:
 	    ${INSTALL_PROGRAM} $${prog} ${PREFIX}/bin/. ; \
 	done && \
 	${MKDIR} ${PREFIX}/share/ots && \
-	${INSTALL_DATA} src/GUI/otslogo.ppm ${PREFIX}/share/ots/. && \
 	for example in $$(${BUILDEXAMPLELISTCMD}); do \
 	    ${MKDIR} ${PREFIX}/share/ots/$$(dirname $${example}) && \
 	    ${INSTALL_DATA} $${example} \
@@ -55,7 +56,6 @@ do-install:
 new-plist:
 	@(cd ${WRKSRC} && \
 	${BUILDPROGLISTCMD} | ${SORT} > ${NEWPLIST} && \
-	${ECHO_CMD} share/ots/otslogo.ppm >> ${NEWPLIST} && \
 	${BUILDEXAMPLELISTCMD} | ${SED} 's,^,share/ots/,' | ${SORT} \
 	    >> ${NEWPLIST} && \
 	for f in $$(${BUILDEXAMPLEDIRLISTCMD} | ${SED} 's,^,share/ots/,' && \
Index: distinfo
===================================================================
RCS file: /base/FreeBSD-CVS/ports/finance/opentaxsolver/distinfo,v
retrieving revision 1.17
diff -u -p -r1.17 distinfo
--- distinfo	3 Apr 2011 08:07:13 -0000	1.17
+++ distinfo	7 Feb 2012 18:23:35 -0000
@@ -1,2 +1,2 @@
-SHA256 (OpenTaxSolver2010_8.05.tgz) = dbc307b0d1750679c204a8ea04a33ce4d097544c366318e5951184ed50a3ffe0
-SIZE (OpenTaxSolver2010_8.05.tgz) = 442180
+SHA256 (OpenTaxSolver2011_9.00.tgz) = 6be62226625795f11d6c1aab6dcd1d3d3628424d9f0c1fca8ea357c891b44758
+SIZE (OpenTaxSolver2011_9.00.tgz) = 499595
Index: pkg-plist
===================================================================
RCS file: /base/FreeBSD-CVS/ports/finance/opentaxsolver/pkg-plist,v
retrieving revision 1.13
diff -u -p -r1.13 pkg-plist
--- pkg-plist	19 Feb 2011 14:40:04 -0000	1.13
+++ pkg-plist	7 Feb 2012 18:23:35 -0000
@@ -1,55 +0,0 @@
-bin/ots_gui
-bin/taxsolve_CA_540_2010
-bin/taxsolve_MA_1_2010
-bin/taxsolve_NC_D400_2010
-bin/taxsolve_NJ_1040_2010
-bin/taxsolve_NY_IT201_2010
-bin/taxsolve_OH_IT1040_2010
-bin/taxsolve_PA_40_2010
-bin/taxsolve_US_1040_2010
-bin/taxsolve_US_1040_Sched_C_2010
-bin/taxsolve_VA_760_2010
-share/ots/otslogo.ppm
-share/ots/examples_and_templates/CA_540/CA_540_2010_example.dat
-share/ots/examples_and_templates/CA_540/CA_540_2010_template.dat
-share/ots/examples_and_templates/CA_540/README_CA_540.txt
-share/ots/examples_and_templates/MA_1/README_MA_1.txt
-share/ots/examples_and_templates/MA_1/ma_1_2010_example.dat
-share/ots/examples_and_templates/MA_1/ma_1_2010_template.dat
-share/ots/examples_and_templates/NC_D400/NC_400_2010_example.dat
-share/ots/examples_and_templates/NC_D400/NC_400_2010_template.dat
-share/ots/examples_and_templates/NC_D400/README_NC_400.txt
-share/ots/examples_and_templates/NJ_1040/NJ_1040_2010_example.dat
-share/ots/examples_and_templates/NJ_1040/NJ_1040_2010_template.dat
-share/ots/examples_and_templates/NJ_1040/README_NJ_1040.txt
-share/ots/examples_and_templates/NY_IT201/NY_IT201_2010_example.dat
-share/ots/examples_and_templates/NY_IT201/NY_IT201_2010_template.dat
-share/ots/examples_and_templates/NY_IT201/README_NY_IT201.txt
-share/ots/examples_and_templates/OH_IT1040/OH_IT1040_2010_example.dat
-share/ots/examples_and_templates/OH_IT1040/OH_IT1040_2010_template.dat
-share/ots/examples_and_templates/OH_IT1040/README_OH_IT1040.txt
-share/ots/examples_and_templates/PA_40/PA_40_2010_example.dat
-share/ots/examples_and_templates/PA_40/PA_40_2010_template.dat
-share/ots/examples_and_templates/PA_40/README_PA_40.txt
-share/ots/examples_and_templates/US_1040/README_US_1040.txt
-share/ots/examples_and_templates/US_1040/US_1040_example.dat
-share/ots/examples_and_templates/US_1040/US_1040_template.dat
-share/ots/examples_and_templates/US_1040_Sched_C/8829_template.dat
-share/ots/examples_and_templates/US_1040_Sched_C/README_US_1040_Sched_C.txt
-share/ots/examples_and_templates/US_1040_Sched_C/US_1040Sched_C_2010_example.dat
-share/ots/examples_and_templates/US_1040_Sched_C/US_1040Sched_C_2010_template.dat
-share/ots/examples_and_templates/VA_760/README_VA_760.txt
-share/ots/examples_and_templates/VA_760/VA_760_2010_example.dat
-share/ots/examples_and_templates/VA_760/VA_760_2010_template.dat
-@dirrm share/ots/examples_and_templates/VA_760
-@dirrm share/ots/examples_and_templates/US_1040_Sched_C
-@dirrm share/ots/examples_and_templates/US_1040
-@dirrm share/ots/examples_and_templates/PA_40
-@dirrm share/ots/examples_and_templates/OH_IT1040
-@dirrm share/ots/examples_and_templates/NY_IT201
-@dirrm share/ots/examples_and_templates/NJ_1040
-@dirrm share/ots/examples_and_templates/NC_D400
-@dirrm share/ots/examples_and_templates/MA_1
-@dirrm share/ots/examples_and_templates/CA_540
-@dirrm share/ots/examples_and_templates
-@dirrm share/ots
Index: files/patch-src-GUI-Makefile.linux
===================================================================
RCS file: files/patch-src-GUI-Makefile.linux
diff -N files/patch-src-GUI-Makefile.linux
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/patch-src-GUI-Makefile.linux	7 Feb 2012 18:23:35 -0000
@@ -0,0 +1,15 @@
+$FreeBSD$
+--- src/GUI/Makefile.linux.orig	Fri Mar 31 22:16:19 2006
++++ src/GUI/Makefile.linux	Mon Feb  4 21:47:35 2008
+@@ -2,9 +2,9 @@
+ 
+ CFLAGS  =
+ COPTIM  = -O 
+-INCLUDE = -I/usr/X11R6/include
+-LDPATH  = -L/usr/X11R6/lib
++INCLUDE = ${CPPFLAGS}
++LDPATH  = ${LDFLAGS}
+ LIBS    = -lGLU -lGL -lXmu -lXext -lX11 -lm
+ 
+ 
+ ../../bin/ots_gui:
Index: files/patch-src-GUI-otk_lib-otk_lib.c
===================================================================
RCS file: /base/FreeBSD-CVS/ports/finance/opentaxsolver/files/patch-src-GUI-otk_lib-otk_lib.c,v
retrieving revision 1.1
diff -u -p -r1.1 patch-src-GUI-otk_lib-otk_lib.c
--- files/patch-src-GUI-otk_lib-otk_lib.c	28 Aug 2006 21:05:20 -0000	1.1
+++ files/patch-src-GUI-otk_lib-otk_lib.c	7 Feb 2012 18:38:45 -0000
@@ -1,3 +1,4 @@
+$FreeBSD$
 --- src/GUI/otk_lib/otk_lib.c.orig	Fri Mar 31 21:42:34 2006
 +++ src/GUI/otk_lib/otk_lib.c	Sat Apr  8 11:50:21 2006
 @@ -38,6 +38,10 @@
Index: files/patch-src-GUI-ots_gui.c
===================================================================
RCS file: /base/FreeBSD-CVS/ports/finance/opentaxsolver/files/patch-src-GUI-ots_gui.c,v
retrieving revision 1.4
diff -u -p -r1.4 patch-src-GUI-ots_gui.c
--- files/patch-src-GUI-ots_gui.c	26 Jan 2011 10:55:15 -0000	1.4
+++ files/patch-src-GUI-ots_gui.c	7 Feb 2012 18:38:48 -0000
@@ -1,15 +1,16 @@
---- src/GUI/ots_gui.c.orig	2011-01-16 10:31:20.000000000 -0700
-+++ src/GUI/ots_gui.c	2011-01-24 14:49:02.000000000 -0700
-@@ -664,7 +664,7 @@
+$FreeBSD$
+--- src/GUI/ots_gui.c.orig	2012-01-13 07:12:50.000000000 -0700
++++ src/GUI/ots_gui.c	2012-02-07 08:14:06.000000000 -0700
+@@ -731,7 +731,7 @@
    npanels = nlines / lines_per_page + 1;
    if (npanels < 2) npanels = 2;
    panelnames = (char **)malloc( (npanels+1) * sizeof(char *));
 -  for (j=0; j<npanels; j++) {panelnames[j] = (char *)malloc(30); sprintf( panelnames[j], "Page %d ", j+1); }
-+  for (j=0; j<npanels; j++) {panelnames[j] = (char *)malloc(30); snprintf(panelnames[j], sizeof(panelnames[j]), "Page %d ", j+1); }
++  for (j=0; j<npanels; j++) {int len = 30;panelnames[j] = (char *)malloc(len); snprintf(panelnames[j], len, "Page %d ", j+1); }
    Panels = Otk_Tabbed_Panel_New( main_panel, npanels, panelnames, Otk_LightGray, 1, 1, 98, 98, 5 );
    TabbedPanel = Panels;
  
-@@ -724,7 +724,7 @@
+@@ -791,7 +791,7 @@
       switch (entry->kind)
        {
         case VKIND_FLOAT:  // printf("Formbox: '%s'\n", messg);
@@ -18,7 +19,7 @@
  		pos_x = leftmargin;
  		leftmargin = leftmargin + box_width + 1.5;
  		pos_y = (float)linenum * 9.0 + 6.5;
-@@ -1048,9 +1048,9 @@
+@@ -1142,9 +1142,9 @@
     return;   
    }
   if (PLATFORM_KIND==Posix_Platform)
@@ -30,7 +31,16 @@
  
   printf("Invoking '%s'\n", cmd );
   system(cmd);	/* Invoke the TaxSolver. */
-@@ -1086,7 +1086,7 @@
+@@ -1166,7 +1166,7 @@
+    viewfile = fopen( outfname, "rb" );
+    if (viewfile == 0)
+     {
+-     sprintf(vline,"Cannot open: %s", outfname);
++     snprintf(vline, sizeof(vline), "Cannot open: %s", outfname);
+      Otk_Add_Selection_Item( viewwin, vline, 0, 0 ); 
+     }
+    else
+@@ -1206,7 +1206,7 @@
  
  void togprntcmd_in(void *x)
  { 
@@ -39,7 +49,7 @@
   Otk_Modify_Text( printerformbox, printer_command );
  }
  
-@@ -1094,7 +1094,7 @@
+@@ -1214,7 +1214,7 @@
  { char tmpstr[MaxFname];
    int k;
   predict_output_filename(wrkingfname,tmpstr);
@@ -48,7 +58,7 @@
   Otk_Modify_Text( printerformbox, printer_command );
  }
  
-@@ -1122,7 +1122,7 @@
+@@ -1242,7 +1242,7 @@
   Otk_Add_BoundingBox( printpopup, Otk_Blue, 1.0, 18.0, 16.0, 63.0, 47.0 );
  
   if (working_file==0) strcpy(wrkingfname,filename_dat); else strcpy(wrkingfname,working_file);
@@ -57,14 +67,14 @@
  
   OtkMakeTextLabel( printpopup, "Print Command:", Otk_Black, /*scale=*/ 1.5, /*weight=*/ 1, /*x=*/ 4, /*y=*/ 57 );
   printerformbox = OtkMakeTextFormBox( printpopup, printer_command, 60,  28.5, 55, 68, 18, acceptprinter_command2, 0 );
-@@ -1181,15 +1181,15 @@
+@@ -1302,15 +1302,15 @@
     if (k>0) k--;
     while ((k>0) && (tmpstr[k]!=slashchr)) k--;
     if (tmpstr[k]==slashchr)  tmpstr[k+1] = '\0';
 -   else  {sprintf(tmpstr,".%c", slashchr);}
 -   sprintf(directory_dat,"%sexamples_and_templates%c", tmpstr, slashchr);
 +   else  {snprintf(tmpstr, sizeof(tmpstr), ".%c", slashchr);}
-+   snprintf(directory_dat, sizeof(directory_dat), "%sexamples_and_templates%c", tmpstr, slashchr);
++   snprintf(directory_dat, sizeof(directory_dat), "%%PREFIX%%/share/ots/examples_and_templates%c", slashchr);
     Otk_Browse_Files( "Select TaxForm:", MaxFname, directory_dat, wildcards_dat, taxsolvestrng, open_taxfile );
     return;
    }
@@ -76,18 +86,18 @@
     printf("Setting Tax Program to be: '%s'\n", tmpstr);
     taxsolvecmd = strdup(tmpstr);
     strcpy(taxsolvestrng,tmpstr);
-@@ -1200,8 +1200,8 @@
+@@ -1321,8 +1321,8 @@
     if (k>0) k--;
     while ((k>0) && (tmpstr[k]!=slashchr)) k--;
     if (tmpstr[k]==slashchr)  tmpstr[k+1] = '\0';
 -   else  {sprintf(tmpstr,".%c", slashchr);}
 -   sprintf(directory_dat,"%sexamples_and_templates%c", tmpstr, slashchr);
 +   else  {snprintf(tmpstr, sizeof(tmpstr), ".%c", slashchr);}
-+   snprintf(directory_dat, sizeof(directory_dat), "%sexamples_and_templates%c", tmpstr, slashchr);
++   snprintf(directory_dat, sizeof(directory_dat), "%%PREFIX%%/share/ots/examples_and_templates%c", slashchr);
  
-    sel = strstr( strg, "_2010" );
-    sel[0] = '\0';
-@@ -1272,7 +1272,7 @@
+    sel = strstr( strg, "_2011" );
+    if (sel != 0)
+@@ -1399,7 +1399,7 @@
     {printf("Unknown command-line parameter '%s'\n", argv[argn]); /* exit(1); */ }
    argn = argn + 1;
   }
@@ -96,12 +106,12 @@
   invocation_path = strdup(argv[0]);
   k = strlen(invocation_path)-1;
   while ((k>0) && (invocation_path[k]!=slashchr)) k--;
-@@ -1298,7 +1298,7 @@
-  main_panel = 
-  OtkMakePanel( bckgrnd, Otk_Raised, Otk_LightGray, 1, 7.5, 98, 87 );	/* Main Panel. */
-  Otk_SetBorderThickness( main_panel, 0.25 );
+@@ -1436,7 +1436,7 @@
+   OtkMakeImagePanel_ImgPtr( subpanel, logo_image, 1.5, 5.0, 96.8, 89.85 );
+  }
+ #else
 - sprintf(tmpstr,"%s..%csrc%cGUI%cotslogo.ppm", invocation_path, slashchr, slashchr, slashchr );
 + snprintf(tmpstr, sizeof(tmpstr), "%%PREFIX%%/share/ots/otslogo.ppm");
-  subpanel = OtkMakePanel( main_panel, Otk_Raised, Otk_LightGray, 18.5, 2, 63, 17 );
-  Otk_SetBorderThickness( subpanel, 0.75 );
-  testfile = fopen(tmpstr,"r");
+  testfile = fopen(tmpstr,"r");	/* External image-file. */
+  if (testfile!=0)
+   { /* Only attempt to show image if image-file is where we expect to find it. */
Index: files/pkg-plist.in
===================================================================
RCS file: files/pkg-plist.in
diff -N files/pkg-plist.in
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ files/pkg-plist.in	7 Feb 2012 18:23:35 -0000
@@ -0,0 +1,58 @@
+@comment $FreeBSD$
+bin/ots_gui
+bin/taxsolve_CA_540_%%TAXYEAR%%
+bin/taxsolve_MA_1_%%TAXYEAR%%
+bin/taxsolve_NC_D400_%%TAXYEAR%%
+bin/taxsolve_NJ_1040_%%TAXYEAR%%
+bin/taxsolve_NY_IT201_%%TAXYEAR%%
+bin/taxsolve_OH_IT1040_%%TAXYEAR%%
+bin/taxsolve_PA_40_%%TAXYEAR%%
+bin/taxsolve_US_1040_%%TAXYEAR%%
+bin/taxsolve_US_1040_Sched_C_%%TAXYEAR%%
+bin/taxsolve_US_8829
+bin/taxsolve_VA_760_%%TAXYEAR%%
+share/ots/examples_and_templates/CA_540/CA_540_%%TAXYEAR%%_example.txt
+share/ots/examples_and_templates/CA_540/CA_540_%%TAXYEAR%%_template.txt
+share/ots/examples_and_templates/CA_540/README_CA_540.txt
+share/ots/examples_and_templates/MA_1/README_MA_1.txt
+share/ots/examples_and_templates/MA_1/ma_1_%%TAXYEAR%%_example.txt
+share/ots/examples_and_templates/MA_1/ma_1_%%TAXYEAR%%_template.txt
+share/ots/examples_and_templates/NC_D400/NC_400_%%TAXYEAR%%_example.txt
+share/ots/examples_and_templates/NC_D400/NC_400_%%TAXYEAR%%_template.txt
+share/ots/examples_and_templates/NC_D400/README_NC_400.txt
+share/ots/examples_and_templates/NJ_1040/NJ_1040_%%TAXYEAR%%_example.txt
+share/ots/examples_and_templates/NJ_1040/NJ_1040_%%TAXYEAR%%_template.txt
+share/ots/examples_and_templates/NJ_1040/README_NJ_1040.txt
+share/ots/examples_and_templates/NY_IT201/NY_IT201_%%TAXYEAR%%_example.txt
+share/ots/examples_and_templates/NY_IT201/NY_IT201_%%TAXYEAR%%_template.txt
+share/ots/examples_and_templates/NY_IT201/README_NY_IT201.txt
+share/ots/examples_and_templates/OH_IT1040/OH_IT1040_%%TAXYEAR%%_example.txt
+share/ots/examples_and_templates/OH_IT1040/OH_IT1040_%%TAXYEAR%%_template.txt
+share/ots/examples_and_templates/OH_IT1040/README_OH_IT1040.txt
+share/ots/examples_and_templates/PA_40/PA_40_%%TAXYEAR%%_example.txt
+share/ots/examples_and_templates/PA_40/PA_40_%%TAXYEAR%%_template.txt
+share/ots/examples_and_templates/PA_40/README_PA_40.txt
+share/ots/examples_and_templates/US_1040/README_US_1040.txt
+share/ots/examples_and_templates/US_1040/US_1040_example.txt
+share/ots/examples_and_templates/US_1040/US_1040_template.txt
+share/ots/examples_and_templates/US_1040_Sched_C/README_US_1040_Sched_C.txt
+share/ots/examples_and_templates/US_1040_Sched_C/US_1040Sched_C_%%TAXYEAR%%_example.txt
+share/ots/examples_and_templates/US_1040_Sched_C/US_1040Sched_C_%%TAXYEAR%%_template.txt
+share/ots/examples_and_templates/US_8829/8829_example.txt
+share/ots/examples_and_templates/US_8829/8829_template.txt
+share/ots/examples_and_templates/VA_760/README_VA_760.txt
+share/ots/examples_and_templates/VA_760/VA_760_%%TAXYEAR%%_example.txt
+share/ots/examples_and_templates/VA_760/VA_760_%%TAXYEAR%%_template.txt
+@dirrm share/ots/examples_and_templates/VA_760
+@dirrm share/ots/examples_and_templates/US_8829
+@dirrm share/ots/examples_and_templates/US_1040_Sched_C
+@dirrm share/ots/examples_and_templates/US_1040
+@dirrm share/ots/examples_and_templates/PA_40
+@dirrm share/ots/examples_and_templates/OH_IT1040
+@dirrm share/ots/examples_and_templates/NY_IT201
+@dirrm share/ots/examples_and_templates/NJ_1040
+@dirrm share/ots/examples_and_templates/NC_D400
+@dirrm share/ots/examples_and_templates/MA_1
+@dirrm share/ots/examples_and_templates/CA_540
+@dirrm share/ots/examples_and_templates
+@dirrm share/ots
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20273.52620.798529.716412>