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:
- man, diff, sort, sdiff, diff3
- Integration of mdocml into FreeBSD base, completely replacing groff
- Integration of above tools into FreeBSD base
- Benchmark comparisons of above tools to previous implementations
General TODOs
- Identify use of man, diff, sort, sdiff, or diff3 in make scripts, build world, etc.
- Performance analysis toolset
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
replacecomplement 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:
- Complete patch system for changing mandoc-incompatible man pages.
- Set up a ports package for groff (textproc/groff ?)
- Identify tools with remaining groff dependencies (catman, whatis, …) (looks like Gordon has since done work on this)
- Finish gordon's man.sh by removing dependencies on groff tools: (eqn, pic, refer)
- Identify remaining mandoc-incompatible man pages. Patch.