Longterm Targets of Ports Collection

Also known as sneaking changes.

Converting @exec install-info to INFO

Number of ports using INFO: 360

Number of ports with @exec install-info in their pkg-plist: 1

That gives us: 0.27% is rotten

find /usr/ports/ -name Makefile -exec grep ^INFO= '{}' '+' | wc -l
find /usr/ports/ -name pkg-plist\* -exec grep -l exec.install-info '{}' '+' | wc -l

Better use of RC_SUBR infrastructure

Number of ports with USE_RC_SUBR: 863

Number of ports that install rc script manually (bad use of RC_SUBR and non-RCng scripts): 102

Number of ports that install any rc script: 921

find /usr/ports/ -name Makefile -exec grep ^USE_RC_SUBR '{}' '+' | wc -l
find /usr/ports/ -name pkg-plist\* -exec grep -l etc/rc.d/ '{}' '+' | wc -l
(find /usr/ports/ -name pkg-plist\* -exec grep -l etc/rc.d/ '{}' '+' | cut -d / -f 5; find /usr/ports/ -name Makefile -exec grep ^USE_RC_SUBR '{}' '+' | awk -F '/' '{print $5}') | sort -u | wc -l

Not using :: in patchfile name

Number of patch files with : in the name: 75

Total number of patch files: 24851

That gives us: 0.30% is rotten

find /usr/ports/ -name '*patch*:*' | wc -l
find /usr/ports/ -name '*patch*' | wc -l

unexec rmdir

Number of @unexec rmdir lines in plists: 25

Number of @dirrmtry in plists: 99115

That gives us: 0.02% is rotten

find /usr/ports/ -name pkg-plist\* -exec grep 'unexec.rmdir %D' '{}' '+' | wc -l
find /usr/ports/ -name pkg-plist\* -exec grep dirrmtry '{}' '+' | wc -l

CPAN ports that use ../../authors as SUBDIR

Number of ports that use MASTER_SITE_SUBDIR=../../authors: 2

Total number of CPAN ports: 5960

That gives us: 0.03% is rotten

find /usr/ports/ -name Makefile -exec grep '^MASTER_SITE_SUBDIR.*\.\./.*authors' '{}' '+' | wc -l
find /usr/ports/ -name Makefile -exec grep '^MASTER_SITE.*CPAN' '{}' '+' | wc -l

Ports which don't use USES=dos2unix

See https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=87234

Number of ports that have ^M's in the Makefile

find /usr/ports/ -name Makefile\* -exec grep `printf '\15'` -l '{}' '+' | wc -l

1 ports left

Numner of patch-files that have ^M's in them

find /usr/ports/ -name '*patch-*' -exec grep `printf '\15'` -l '{}' '+' | wc -l

95 ports left

nox-- added EXTRACT_BEFORE_ARGS+= -aq because of the ^Ms in projectx

QT/QMAKE settings

Number of ports which set QMAKESPEC

find /usr/ports/ -name Makefile\* -exec grep -l QMAKESPEC '{}' '+' | wc -l

11 ports left

Number of ports which set QTDIR

find /usr/ports/ -name Makefile\* -exec grep -l QTDIR '{}' '+' | wc -l

57 ports left

Use of SITE_PERL in dependencies

/!\ As of September 2013, bsd.perl.mk is dead. Therefore, this section may be obsolete.

This is problematic because it means that bsd.perl.mk must be included for the port's Makefile just to make the dependency work, thus hindering efforts to make it a conditional include.

Number of ports that use ${SITE_PERL} in dependencies: 1

find /usr/ports/ -name Makefile -exec egrep -l '\${SITE_PERL}.*\${PORTSDIR}' '{}' '+' | wc -l

Fix: Depend on packages for perl ports, rather than the .pm file;

instead of:


use instead


There is a script at http://www.bayofrum.net/~crees/scripts/bin/site_perl_to_packages.sh to automate this, but you MUST ensure that the dependencies are correct before committing!

Remove unnecessary dependencies (Perl core modules) from {BUILD|RUN|TEST}_DEPENDS

I (sunpoet@) am working on this issue.

You can use corelist (devel/p5-Module-CoreList) to check if the specific dependency/module has been added to Perl core modules. If so, you may either

Note that please align PERL_LEVEL checks to stable Perl releases (lang/perl5.*). If one modules has been added to Perl since 5.9.3, please use .if ${PERL_LEVEL} < 501000 instead of .if ${PERL_LEVEL} < 500903. By doing so, it has higher possibility to merge multiple PERL_LEVEL checks to one check.

Example 1:

BUILD_DEPENDS=  p5-parent>=0:${PORTSDIR}/devel/p5-parent

According to corelist (parent was first released with perl v5.10.1), the above line should be changed to

.include <bsd.port.pre.mk>

.if ${PERL_LEVEL} < 501001
BUILD_DEPENDS+= p5-parent>=0:${PORTSDIR}/devel/p5-parent

.include <bsd.port.post.mk>

Example 2:

The port requires Compress::Zlib 2.030 or above.

BUILD_DEPENDS=  p5-IO-Compress>=2.030:${PORTSDIR}/archivers/p5-IO-Compress

Accoring to corelist, Perl bundled Compress::Zlib 2.030 since 5.13.4. The above lines should be changed to

.include <bsd.port.pre.mk>

.if ${PERL_LEVEL} < 501400
BUILD_DEPENDS+= p5-IO-Compress>=2.030:${PORTSDIR}/archivers/p5-IO-Compress
RUN_DEPENDS+=   p5-IO-Compress>=2.030:${PORTSDIR}/archivers/p5-IO-Compress

.include <bsd.port.post.mk>



Doc Targets

See also DocLongtermTargets


find /usr/ports/ -name Makefile\* -mindepth 3 -maxdepth 3 -exec egrep "NOPORTDOCS|NOPORTEXAMPLES" '{}' '+' | wc -l

14 ports left

DOCS and EXAMPLES: convert to OptionsNG

gnomehack vs pathfix

find /usr/ports/ -name Makefile\* -mindepth 3 -maxdepth 3 -exec grep -F "gnomehack" '{}' '+' | wc -l

30 ports left


This should be fixed as it reduced over dependencies which also speed up operation on package building cluster (around 5% performance boost has been noticed in that case)

These should be fixed as other important issues are fixed

Remove use of pkg-req

Any port which uses pkg-req should be changed to do the work in Makefile or pkg-message

Poorly written COMMENTs

- Remove Leading Articles From COMMENTs

cut -d'|' -f 2,4 /usr/ports/INDEX-10 | egrep "\|(A|An|The) " | wc -l

582 ports left

- Comments with words "very" or "extremely" in them

cut -d'|' -f 2,4 /usr/ports/INDEX-10 | egrep -i "\|.* very|extremely " | wc -l

21 ports left

X11 ports lacking .desktop files

awk -F\| '$9~/libX11/{print $2}' /usr/ports/INDEX-10 | while read port; do grep -q DESKTOP_ENTRIES $port/Makefile || grep -q share/applications $port/Makefile || grep -q share/applications $port/pkg-plist 2>/dev/null || echo $port; done | wc -l

5266 ports left

Reproducible Builds

See PortsReproducibleBuilds


PortsLongtermTargets (last edited 2015-11-26 23:25:42 by MarkLinimon)