Longterm Targets of Ports Collection

Also known as sneaking changes.

Better use of RC_SUBR infrastructure

Number of ports with USE_RC_SUBR: 988

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

Number of ports that install any rc script: 1046

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

unexec rmdir / @dirrmtry

Number of @unexec rmdir lines in plists: 8

Number of @dirrmtry in plists: 0

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: 0

Total number of CPAN ports: 6234

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

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

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

109 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

7 ports left

Number of ports which set QTDIR

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

56 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 erl 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

13 ports left

DOCS and EXAMPLES: convert to OptionsNG


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

Poorly written COMMENTs

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

5381 ports left

Reproducible Builds

See PortsReproducibleBuilds

Undefined LICENSE

find /usr/ports -name Makefile -depth 3 -exec grep -L '^LICENSE=' {} + | wc -l

10230 ports left

This one-liner is not ideal as it does not take into account that the license could be included in an extra Makefile (as for example it is done in mail/claws-mail: there are two makefiles: Makefile and Makefile.claws; the license is specified in Makefile.claws).


PortsLongtermTargets (last edited 2018-03-14 04:38:59 by MarkLinimon)