Date: Thu, 18 Mar 2004 14:30:50 +0100 From: Oliver Eikemeier <eikemeier@fillmore-labs.com> To: FreeBSD-gnats-submit@FreeBSD.org Cc: Joe Marcus Clarke <marcus@FreeBSD.org> Subject: ports/64420: [PATCH] devel/portlint: check for proper master-slave Makefile handling Message-ID: <4059A48A.4020905@fillmore-labs.com> Resent-Message-ID: <200403181340.i2IDeN3W090122@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 64420 >Category: ports >Synopsis: [PATCH] devel/portlint: check for proper master-slave Makefile handling >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Thu Mar 18 05:40:22 PST 2004 >Closed-Date: >Last-Modified: >Originator: Oliver Eikemeier >Release: FreeBSD 4.9-STABLE i386 >Organization: Fillmore Labs - http://www.fillmore-labs.com >Environment: System: FreeBSD nuuk.fillmore-labs.com 4.9-STABLE >Description: This patch updates portlint to check for the rules formulated in PR 64393, refer to this PR for some rationale. 1.) A port is a slave port if and only if MASTERDIR != .CURDIR 2.) Slave ports should define MASTERDIR using one of the following lines: MASTERDIR= ${.CURDIR}/../../<category>/<port> MASTERDIR= ${.CURDIR}/../<port> 3.) Non-slave ports shouldn't define MASTERDIR at all 4.) The last line of a slave port's Makefile has to be .include "${MASTERDIR}/Makefile" 5.) The last line of a non-slave ports Makefile must be one of: .include <bsd.port.mk> .include <bsd.port.post.mk> 6.) slave ports may not include bsd.port(.pre).mk >How-To-Repeat: These are detected as follows: 1.) is flagged FATAL, check with /usr/local/share/examples/portlint/portlintgrep 'CURDIR != MASTERDIR' 2.) and 3.) are flagged WARN, check with /usr/local/share/examples/portlint/portlintgrep 'define MASTERDIR' 4.) and 5.) are flagged FATAL, check with /usr/local/share/examples/portlint/portlintgrep 'last line of' 6.) is flagged FATAL, part of the is seen as violating 1.), check with /usr/local/share/examples/portlint/portlintgrep 'may not include' >Fix: bump PORTVERSION and apply the following patch: --- devel/portlint/src/portlint.pl Wed Mar 10 11:43:45 2004 +++ devel/portlint/src/portlint.pl Thu Mar 18 14:11:25 2004 @@ -1046,16 +1046,6 @@ } # - # whole file: anything after bsd.port(.post).mk - # - print "OK: checking for anything after bsd.port(.post).mk.\n" - if ($verbose); - if ($whole =~ /^\.include\s+<bsd\.port(?:\.post)?\.mk>\s*[^\s]/m) { - &perror("FATAL: $file: do not include anything after ". - "bsd.port(.post).mk."); - } - - # # whole file: USE_* as a user-settable option # print "OK: checking for USE_* as a user-settable option.\n" if ($verbose); @@ -1274,13 +1264,35 @@ $slaveport = 1; print "OK: slave port detected, checking for inclusion of $masterdir/Makefile.\n" if ($verbose); - if ($whole !~ /\n\.include\s+[<"]\$\{MASTERDIR\}\/Makefile[">]\s*$/) { - &perror('FATAL: $file: the last line of a slave port\'s Makefile has to be'. + if ($whole =~ /^\.\s*include\s*[<"]bsd\.port(?:\.post)?\.mk[">]/m) { + &perror("FATAL: $file: supposedly non-slave port with". + " .CURDIR != MASTERDIR"); + } elsif ($whole =~ /^\.\s*include\s*[<"]bsd\.port\.pre\.mk[">]/m) { + &perror("FATAL: $file: slave ports may not include". + " bsd.port.pre.mk"); + } + if ($whole !~ /\n\.include\s+"\$\{MASTERDIR\}\/Makefile"\s*$/s) { + &perror("FATAL: $file: the last line of a slave port's Makefile has to be". ' .include "${MASTERDIR}/Makefile"'); } print "OK: checking master port in $masterdir.\n" if ($verbose); if (! -e "$masterdir/Makefile") { &perror("WARN: unable to locate master port in $masterdir"); + } + if ($whole !~ /^MASTERDIR=\s*\$\{\.CURDIR\}(?:\/\.\.){1,2}(?:\/[\w\@.+-]+){1,2}\s*$/m) { + &perror('WARN: $file: slave ports must define MASTERDIR='. + '${.CURDIR}/..(/../<category>)/<port>'); + } + } else { + #$slaveport = 0; + print "OK: non-slave port detected, checking for anything after bsd.port(.post).mk.\n" + if ($verbose); + if ($whole !~ /\n\.include\s+<bsd\.port(?:\.post)?\.mk>\s*$/s) { + &perror("FATAL: $file: the last line of Makefile has to be". + ' .include <bsd.port(.post).mk>'); + } + if ($whole =~ /^MASTERDIR\s*[+?:!]?\s*=/m) { + &perror("WARN: $file: non-slave ports may not define MASTERDIR"); } } >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4059A48A.4020905>