There are actually two patches, one for src, the other for port. 1st patch unconditionally regenerates special files, even in -n mode, so that they can be checksummed. As a result, the printed plist contains @sha256 markers for these.
Con: very slightly slower. 2nd patch allows register-plist to take '-' as a parameter, so that it can read a packing-list on STDIN. Together, those two patches allow something like make print-plist-with-depends | register-plist ${PLIST_DB} - to work (as register-plist does need checksums for special files) With this, it should be easy to add a convenience target to the infrastructure that would just register all plists without building anything. One application would be to be able to do broad changes in the ports tree, like tweaking WANTLIB in modules, and quickly checked that ports didn't change or didn't change too much. This should not change anything to existing applications... well, unless someone has issues with @sha256 in packing-lists. Index: OpenBSD/PkgCreate.pm =================================================================== RCS file: /cvs/src/usr.sbin/pkg_add/OpenBSD/PkgCreate.pm,v retrieving revision 1.123 diff -u -p -r1.123 PkgCreate.pm --- OpenBSD/PkgCreate.pm 3 Oct 2016 13:17:30 -0000 1.123 +++ OpenBSD/PkgCreate.pm 14 May 2017 14:13:01 -0000 @@ -147,6 +147,7 @@ sub pretend_to_archive $self->comment_create_package($state); } +sub makesum_special_file {} sub record_digest {} sub archive {} sub really_archived { 0 } @@ -358,6 +359,12 @@ sub pretend_to_archive &OpenBSD::PackingElement::FileBase::pretend_to_archive; } +sub makesum_special_file +{ + my ($self, $state) = @_; + $self->add_digest($self->compute_digest($self->fullname)); +} + sub set_destdir { } @@ -410,6 +417,10 @@ sub makesum_plist { } +sub makesum_special_file +{ +} + sub verify_checksum { } @@ -1109,8 +1120,6 @@ sub add_description if (!defined $opt_d) { $state->usage("Description required"); } - return if $state->opt('q'); - open(my $fh, '>', $o->fullname) or die "Can't write to DESC: $!"; if (defined $comment) { print $fh $subst->do($comment), "\n"; @@ -1227,9 +1236,7 @@ sub create_plist } $state->say("Creating package #1", $pkgname) if !(defined $state->opt('q')) && $state->opt('v'); - if (!$state->opt('q')) { - $plist->set_infodir(OpenBSD::Temp->dir); - } + $plist->set_infodir(OpenBSD::Temp->dir); unless (defined $state->opt('q') && defined $state->opt('n')) { $state->set_status("reading plist"); @@ -1472,6 +1479,9 @@ sub parse_and_run $state->defines('HISTORY_DIR')); $self->show_bad_symlinks($state); $state->end_status; + } + if ($state->opt('n')) { + $plist->makesum_special_file($state); } if (!defined $plist->pkgname) { Index: register-plist =================================================================== RCS file: /cvs/ports/infrastructure/bin/register-plist,v retrieving revision 1.14 diff -u -p -r1.14 register-plist --- register-plist 1 Nov 2016 15:34:39 -0000 1.14 +++ register-plist 14 May 2017 14:13:17 -0000 @@ -534,14 +534,19 @@ if ($state->opt('p')) { my $error =0; for my $pkgfile (@ARGV) { - my $pkg = $state->repo->find($pkgfile); - if (!$pkg) { - $state->fatal("Bad package #1", $pkgfile); - } + my $plist; + if ($pkgfile eq '-') { + $plist = OpenBSD::PackingList->read(\*STDIN); + } else { + my $pkg = $state->repo->find($pkgfile); + if (!$pkg) { + $state->fatal("Bad package #1", $pkgfile); + } - my $plist = $pkg->plist; - $pkg->close; - $pkg->wipe_info; + $plist = $pkg->plist; + $pkg->close; + $pkg->wipe_info; + } $plist->forget_details; for my $dir (@dirs) {