Project Title

BSD-licensed Text-Processing Tools


Project Description

Merge the latest version of mdocml (ISC licensed) from the ports into the FreeBSD system base, and configure it as a replacement for the GNU roff (groff) tool set (this would aditionally involve a rewrite of man). There are FreeBSD replacements for sort and diff in ports (also from a GSoC project), but they are lacking features from their GNU counterparts. I will pick up and complete these, possibly borrowing/porting from one of the other BSD projects when possible. Benchmarking the new tools and ensuring they scale appropriately when compared to their GNU counterparts is highly desired, and I would like to try to confirm the mdocml author's assertion that it should be noticeably faster than groff.


Deliverables

A feature-complete (including wide character support) BSD-licensed replacement for:


General TODOs


Project Schedule / Milestones

May 24 - May 26: Licensing/Cost Analysis
  • Identify existing tools with a BSD-compatible license (ISC, 2/3/4 Clause BSD, Public Domain?). Contact respective authors about possibility of changing existing code to 2 Clause BSD licensing.
  • Brief analysis for above candidates of effort required to port existing code to FreeBSD versus scratch re-write.


June 1 - 12: diff
  • (vacation ends)
  • complete diff replacement/port


June 13 - June 15: diff Testing
  • Verify feature compatibility
  • Exhaustive debugging
  • Performance-measuring, optimization if necessary


June 16 - June 21: sdiff
  • Complete sdiff replacement/port

June 21-25: sdiff Testing
  • Verify feature compatibility
  • Exhaustive testing (mergemaster)
  • Performance-measuring, optimization if necessary


June 26 - July 16: mdocml
  • Merge mdocml (mandoc) into base.

  • Work with Ulrich Spörlein to prevent duplicate work
  • Identify and replace complement scripts with option of compiling man pages with mandoc tools

  • Find and recompose any pages not compatible with mandoc


  • GSoC Mid-term *


July 17 - July 19: man
  • Complement http://people.freebsd.org/~gordon/man.sh (broken link) man replacement

  • Ensure compatibility with mandoc


July 20 - July 26: sort
  • Complete sort replacement/port

July 27 - July 30: '''sort''' Testing
  • Verify feature compatibility
  • Regression tests
  • Performance-measuring, optimization if necessary


July 31 - August 7: diff3
  • Complete diff3 replacement/port

August 7 - August 9: '''diff3''' Testing
  • Verify feature compatibility
  • Regression tests
  • Performance-measuring, optimization if necessary


August 9 - August 16: Closing Time
  • Documentation
  • Compile performance presentation
  • Test, test, test

==Status Report==

diff

Item

Status

Notes

Missing --speed-large-files

INCOMPLETE

Argument is accepted, but makes no functional change

Missing --ignore-file-name-case

COMPLETED

Missing --no-ignore-file-name-case

COMPLETED

Missing --strip-trailing-cr

COMPLETED

Missing --normal

COMPLETED

Missing --tabsize

INCOMPLETE

Missing --unidirectional-new-file

COMPLETED

Missing --from-file

COMPLETED

Missing --to-file

COMPLETED

Missing --help

COMPLETED

Missing --ignore-blank-lines

INCOMPLETE

Missing --ignore-tab-expansion

INCOMPLETE

Missing -v / --version

COMPLETED

Eliminate warnings

COMPLETED

Comment the code

INCOMPLETE

Check GNU compatibility

INCOMPLETE

Check POSIX conformance

COMPLETED

Missing --line-format options

INCOMPLETE

regex support is available

Missing --group-format options

INCOMPLETE

Missing --group-format

sdiff

Base version ported from OpenBSD

Item

Status

Notes

Fix -c99 build warnings/errors

COMPLETE

Combine diff-specific args and pipe to diff process

INCOMPLETE

diff3

Base version ported from OpenBSD

Item

Status

Notes

Replaced ksh script with sh

COMPLETED

-i flag

COMPLETED

-T flag

COMPLETED

-a flag

COMPLETED

--show-all option

INCOMPLETE

--easy-only

INCOMPLETE

--merge

INCOMPLETE

--label

INCOMPLETE

--strip-trailing-cr

INCOMPLETE

--diff-program

INCOMPLETE

--version

INCOMPLETE

--help

INCOMPLETE

mandoc

Complemented Ulrich Spoerlein's progress: system makefiles have been modified to build mandoc instead of groff and use Gordon Tetlow's modified man.sh when WITH_MANDOC specified in /etc/make.conf .

Remaining items TODO:

SOC2010BenFiedler (last edited 2022-10-27T04:03:56+0000 by KubilayKocak)