Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 9 Dec 2012 07:35:12 GMT
From:      Garrett Cooper <yanegomi@gmail.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/174291: [pkgng] fails to properly register manpages for pkg-remove and pkg-static because of bad MLINKS shims in bsd.port.mk
Message-ID:  <201212090735.qB97ZC4P073852@red.freebsd.org>
Resent-Message-ID: <201212090740.qB97e0FE070504@freefall.freebsd.org>

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

>Number:         174291
>Category:       ports
>Synopsis:       [pkgng] fails to properly register manpages for pkg-remove and pkg-static because of bad MLINKS shims in bsd.port.mk
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Dec 09 07:40:00 UTC 2012
>Closed-Date:
>Last-Modified:
>Originator:     Garrett Cooper
>Release:        10-CURRENT
>Organization:
EMC Isilon
>Environment:
FreeBSD fallout-atf-current.local 10.0-CURRENT FreeBSD 10.0-CURRENT #3: Mon Oct 22 10:30:54 PDT 2012     root@fallout-atf-current.local:/usr/obj/usr/src/sys/GENERIC  i386
>Description:
pkg-remove and pkg-static's manpages aren't being properly registered for pkg-1.0.3_1, even though they're being installed properly.

The problem is how bsd.port.mk is dealing with the MLINKS variable as the plist generated is busted. My guess is that it's this section of code that's doing things wrong in bsd.port.mk:

2995 .if (defined(MLINKS) || defined(_MLINKS_PREPEND)) && !defined(_MLINKS)
2996 __pmlinks!= ${ECHO_CMD} '${MLINKS:S/    / /}' | ${AWK} \
2997  '{ if (NF % 2 != 0) { print "broken"; exit; } \
2998     for (i=1; i<=NF; i++) { \
2999         if ($$i ~ /^-$$/ && i != 1 && i % 2 != 0) \
3000             { $$i = $$(i-2); printf " " $$i " "; } \
3001         else if ($$i ~ /^[^ ]+\.[1-9ln][^. ]*$$/ || $$i ~ /^\//) \
3002             printf " " $$i " "; \
3003         else \
3004             { print "broken"; exit; } \
3005     } \
3006   }' | ${SED} -e 's^H \([^/ ][^ ]*\.\(.\)[^. ]*\)^H $${MAN\2PREFIX}/$$$$$$$${__lang}/man\2/\1${MANEXT}^Hg' -e 's/ /^H/g' -e 's/MANlPREFIX/MANLPREFIX/g' -e 's/MANnPREFIX/MANNPREFIX/g'
3007 .if ${__pmlinks:Mbroken} == "broken"
3008 check-makevars::
3009     @${ECHO_MSG} "${PKGNAME}: Makefile error: unable to parse MLINKS."
3010     @${FALSE}
3011 .endif

It doesn't seem correct for MLINKS to be duplicated between the package installation and the installation proper though, so I just nuked the references and given that tar does the right thing with hardlinks I assumed it best to apply the attached patch and move on.

ports should do the right thing for non-autoconf based ports, but that's an aside to the issue that's seen here that can be easily resolved.

root@fallout-atf-current:/usr/ports/ports-mgmt/pkg # make reinstall
===>  Installing for pkg-1.0.3_1
===>   Generating temporary packing list
===> external (install)
===> external/sqlite (install)
===> external/libyaml (install)
===> libpkg (install)
install -C -o root -g wheel -m 444   libpkg.a /usr/local/lib
install  -o root -g wheel -m 444     libpkg.so.0 /usr/local/lib
ln -fs libpkg.so.0 /usr/local/lib/libpkg.so
install -C -o root -g wheel -m 444  pkg.h /usr/local/include
install -m 644 pkg.pc /usr/local/libdata/pkgconfig
===> pkg (install)
install  -o root -g wheel -m 555   pkg /usr/local/sbin
install -o root -g wheel -m 444 pkg.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-add.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-audit.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-autoremove.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-backup.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-check.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-clean.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-create.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-delete.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-fetch.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-info.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-install.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-query.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-register.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-repo.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-rquery.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-search.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-set.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-shell.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-shlib.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-stats.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-update.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-updating.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-upgrade.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-version.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-which.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg.conf.5.gz  /usr/local/man/man5
/usr/local/man/man8/pkg-remove.8.gz -> /usr/local/man/man8/pkg-delete.8.gz
/usr/local/man/man8/pkg-static.8.gz -> /usr/local/man/man8/pkg.8.gz
===> pkg-static (install)
install  -o root -g wheel -m 555   pkg-static /usr/local/sbin
If you are upgrading from the old package format, first run:

  # pkg2ng
ln: /usr/local//man8/pkg-remove.8.gz: No such file or directory
ln: /usr/local//man8/pkg-static.8.gz: No such file or directory
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HERE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
===>   Running ldconfig
/sbin/ldconfig -m /usr/local/lib
===>   Registering installation for pkg-1.0.3_1
pkg: lstat(/man8/pkg-remove.8.gz): No such file or directory
pkg: lstat(/man8/pkg-static.8.gz): No such file or directory
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ HERE ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Installing pkg-1.0.3_1... done
root@fallout-atf-current:/usr/ports/ports-mgmt/pkg # find /usr/local/man/man8 -name pkg\*.gz
/usr/local/man/man8/pkg.8.gz
/usr/local/man/man8/pkg-add.8.gz
/usr/local/man/man8/pkg-audit.8.gz
/usr/local/man/man8/pkg-autoremove.8.gz
/usr/local/man/man8/pkg-backup.8.gz
/usr/local/man/man8/pkg-check.8.gz
/usr/local/man/man8/pkg-clean.8.gz
/usr/local/man/man8/pkg-create.8.gz
/usr/local/man/man8/pkg-delete.8.gz
/usr/local/man/man8/pkg-fetch.8.gz
/usr/local/man/man8/pkg-info.8.gz
/usr/local/man/man8/pkg-install.8.gz
/usr/local/man/man8/pkg-query.8.gz
/usr/local/man/man8/pkg-register.8.gz
/usr/local/man/man8/pkg-repo.8.gz
/usr/local/man/man8/pkg-rquery.8.gz
/usr/local/man/man8/pkg-search.8.gz
/usr/local/man/man8/pkg-set.8.gz
/usr/local/man/man8/pkg-shell.8.gz
/usr/local/man/man8/pkg-shlib.8.gz
/usr/local/man/man8/pkg-stats.8.gz
/usr/local/man/man8/pkg-update.8.gz
/usr/local/man/man8/pkg-updating.8.gz
/usr/local/man/man8/pkg-upgrade.8.gz
/usr/local/man/man8/pkg-version.8.gz
/usr/local/man/man8/pkg-which.8.gz
/usr/local/man/man8/pkg-remove.8.gz
/usr/local/man/man8/pkg-static.8.gz

# make -V_MLINKS
  /usr/local//man8/pkg-delete.8.gz  /usr/local//man8/pkg-remove.8.gz  /usr/local//man8/pkg.8.gz  /usr/local//man8/pkg-static.8.gz

After the patch...

root@fallout-atf-current:/usr/ports/ports-mgmt/pkg # make reinstall
===>  Installing for pkg-1.0.3_1
===>   Generating temporary packing list
===> external (install)
===> external/sqlite (install)
===> external/libyaml (install)
===> libpkg (install)
install -C -o root -g wheel -m 444   libpkg.a /usr/local/lib
install  -o root -g wheel -m 444     libpkg.so.0 /usr/local/lib
ln -fs libpkg.so.0 /usr/local/lib/libpkg.so
install -C -o root -g wheel -m 444  pkg.h /usr/local/include
install -m 644 pkg.pc /usr/local/libdata/pkgconfig
===> pkg (install)
install  -o root -g wheel -m 555   pkg /usr/local/sbin
install -o root -g wheel -m 444 pkg.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-add.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-audit.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-autoremove.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-backup.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-check.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-clean.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-create.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-delete.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-fetch.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-info.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-install.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-query.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-register.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-repo.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-rquery.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-search.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-set.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-shell.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-shlib.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-stats.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-update.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-updating.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-upgrade.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-version.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg-which.8.gz  /usr/local/man/man8
install -o root -g wheel -m 444 pkg.conf.5.gz  /usr/local/man/man5
/usr/local/man/man8/pkg-remove.8.gz -> /usr/local/man/man8/pkg-delete.8.gz
/usr/local/man/man8/pkg-static.8.gz -> /usr/local/man/man8/pkg.8.gz
===> pkg-static (install)
install  -o root -g wheel -m 555   pkg-static /usr/local/sbin
If you are upgrading from the old package format, first run:

  # pkg2ng
===>   Running ldconfig
/sbin/ldconfig -m /usr/local/lib
===>   Registering installation for pkg-1.0.3_1
Installing pkg-1.0.3_1... done
# pkg info -l pkg
pkg-1.0.3_1 owns the following files:
/usr/local/etc/periodic/daily/411.pkg-backup
/usr/local/etc/periodic/security/410.pkg-audit
/usr/local/etc/pkg.conf.sample
/usr/local/include/pkg.h
/usr/local/lib/libpkg.a
/usr/local/lib/libpkg.so
/usr/local/lib/libpkg.so.0
/usr/local/libdata/pkgconfig/pkg.pc
/usr/local/man/man5/pkg.conf.5.gz
/usr/local/man/man8/pkg-add.8.gz
/usr/local/man/man8/pkg-audit.8.gz
/usr/local/man/man8/pkg-autoremove.8.gz
/usr/local/man/man8/pkg-backup.8.gz
/usr/local/man/man8/pkg-check.8.gz
/usr/local/man/man8/pkg-clean.8.gz
/usr/local/man/man8/pkg-create.8.gz
/usr/local/man/man8/pkg-delete.8.gz
/usr/local/man/man8/pkg-fetch.8.gz
/usr/local/man/man8/pkg-info.8.gz
/usr/local/man/man8/pkg-install.8.gz
/usr/local/man/man8/pkg-query.8.gz
/usr/local/man/man8/pkg-register.8.gz
/usr/local/man/man8/pkg-remove.8.gz
/usr/local/man/man8/pkg-repo.8.gz
/usr/local/man/man8/pkg-rquery.8.gz
/usr/local/man/man8/pkg-search.8.gz
/usr/local/man/man8/pkg-set.8.gz
/usr/local/man/man8/pkg-shell.8.gz
/usr/local/man/man8/pkg-shlib.8.gz
/usr/local/man/man8/pkg-static.8.gz
/usr/local/man/man8/pkg-stats.8.gz
/usr/local/man/man8/pkg-update.8.gz
/usr/local/man/man8/pkg-updating.8.gz
/usr/local/man/man8/pkg-upgrade.8.gz
/usr/local/man/man8/pkg-version.8.gz
/usr/local/man/man8/pkg-which.8.gz
/usr/local/man/man8/pkg.8.gz
/usr/local/sbin/pkg
/usr/local/sbin/pkg-static
/usr/local/sbin/pkg2ng
/usr/local/share/licenses/pkg-1.0.3_1/BSD
/usr/local/share/licenses/pkg-1.0.3_1/LICENSE
/usr/local/share/licenses/pkg-1.0.3_1/catalog.mk
/usr/local/share/zsh/site-functions/_pkg
>How-To-Repeat:
cd /usr/ports
cd ports-mgmt/pkg; make install
>Fix:


Patch attached with submission follows:

diff --git a/ports-mgmt/pkg/Makefile b/ports-mgmt/pkg/Makefile
index 1555a94..2962bae 100644
--- a/ports-mgmt/pkg/Makefile
+++ b/ports-mgmt/pkg/Makefile
@@ -38,6 +38,7 @@ MAN8=	pkg.8 \
 	pkg-install.8 \
 	pkg-query.8 \
 	pkg-register.8 \
+	pkg-remove.8 \
 	pkg-repo.8 \
 	pkg-rquery.8 \
 	pkg-search.8 \
@@ -45,14 +46,13 @@ MAN8=	pkg.8 \
 	pkg-shell.8 \
 	pkg-shlib.8 \
 	pkg-stats.8 \
+	pkg-static.8 \
 	pkg-update.8 \
 	pkg-updating.8 \
 	pkg-upgrade.8 \
 	pkg-version.8 \
 	pkg-which.8
 MAN5=	pkg.conf.5
-MLINKS=	pkg-delete.8 pkg-remove.8 \
-	pkg.8 pkg-static.8
 
 .include <bsd.port.pre.mk>
 


>Release-Note:
>Audit-Trail:
>Unformatted:



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