Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 Aug 1998 22:47:59 -0400 (EDT)
From:      Tim Vanderhoek <ac199@hwcn.org>
To:        Satoshi Asami <asami@FreeBSD.ORG>
Cc:        ports@FreeBSD.ORG
Subject:   Re: cvs commit: ports/x11-wm/afterstep/pkg PLIST (more bsd.port.mk mods)
Message-ID:  <Pine.BSF.3.96.980824214720.7081A-100000@localhost>
In-Reply-To: <199808250146.SAA00195@silvia.hip.berkeley.edu>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 24 Aug 1998, Satoshi Asami wrote:

> I only sent that do you because I had the feeling that we're just
> boring everyone else on the list. ;)

As opposed to the never-ending stream of PRs changes and
bugreports?  ;-)


>  * even I haven't tested this quite as much I would like, I'll post
>  * this now in hopes of saving a testrun.
>  * 
>  * [I'll read those latest diffs right after this...  :-]
> 
> I think mine are child's play compared to your stuff.

Hehe.  You _did_ ask for an MLINKS variable.  :)

Seriously, when I started I thought it would be just a simple
shell script tacked onto generate-plist: and man-compress:.  I
hadn't intended to write some 94 lines.  :(


> Do we really need the "->"?  The ones in /usr/src don't have that and
> will just link even-numbered entries to odd-numbered ones. (*)

I hate reading the ones that use bsd.man.mk.  This was an attempt
at an improvement.  :-)

+__fl!=	${ECHO} '${MLINKS:S/	/ /g}' | \
+     		${SED} -e 's/\([^ ]*\) *\-\> *\([^ ]*\)/\1/g'
+__tl!=	${ECHO} '${MLINKS:S/	/ /g}' | \
+     		${SED} -e 's/\([^ ]*\) *\-\> *\([^ ]*\)/\2/g'

Those are the only two lines that require it.  It _should_ work
fine if you just delete the arrows or make them optional,
although that will make an already minimal amount of error
checking even more minimal. 


> Anyway, the patch did apply to my latest bsd.port.mk.  The build is
> still humming along despite me doing a "make install" from
> /usr/src/share/mk, so it hasn't broken anything obvious (yet).

All my new variables do seem to slow things down a little,
though.  :-(


>  * Thoughts, vetoes, comments, curses?  ;-)
> 
> Not sure what to say.  If you can send me some patches to Makefiles,
> I'll test it.  (And an answer to * above too....)

There's a missing line (Sorry...).  :(

What currently reads

generate-plist:
[...]
	${SED} ${_sedsubplist} ${PLIST} >> ${TMPPLIST}
	@for link in ${_HMLINKS}; do \

should read

generate-plist:
[...]
	${SED} ${_sedsubplist} ${PLIST} >> ${TMPPLIST}
	@${ECHO} @cwd / >> ${TMPPLIST}
	@for link in ${_HMLINKS}; do \

That ``@cwd'' is a little evil, but it's not too easy to avoid
it.  A simple hack to avoid it would just
${AppropriateVariables:S/${PREFIX}//} but...


I'll give you some diffs to make some current ports use MLINKS
for testing.  How many do you want?


Okay, since as you point-out, this isn't entirely obvious to the
casual reader, I'll make some comments on how it's _supposed_ to
work...  Hopefully this'll encourage a couple lurkers on -ports
to offer their opinions on whether or not this is worthwhile. :)


+# Parses space-delimited lists
+_WORD=	`${ECHO} "SENT" | ${SED} -e 's/\([^ ]* *\)\{'$$((NUMB-1))'\}\([^ ]*\).*/\2/'`
+

So given a list like

list=	aaa bbb ccc

One can do

	@${ECHO} ${WORD:S/SENT/${list}/:S/NUMB/2/}

and print "bbb".


+.if defined(MLINKS)
+__fl!=	${ECHO} '${MLINKS:S/	/ /g}' | \
+     		${SED} -e 's/\([^ ]*\) *\-\> *\([^ ]*\)/\1/g'
+__tl!=	${ECHO} '${MLINKS:S/	/ /g}' | \
+     		${SED} -e 's/\([^ ]*\) *\-\> *\([^ ]*\)/\2/g'
+__fs!=	${ECHO} ${__fl} | ${SED} -e 's/[^ ]*\.\([1-9ln]\)[^. ]*/\1/g'
+__ts!=	${ECHO} ${__tl} | ${SED} -e 's/[^ ]*\.\([1-9ln]\)[^. ]*/\1/g'

Break the MLINKS variable up into

__fl  --  the _list_ of each manpage on the left of a "->"
__tl  --  the _list_ of each manpage on the right of a "->"
__fs  --  A _list_ of man sections (1-9ln), corresponding to __fl
__ts  --  A _list_ of man sections (1-9ln), corresponding to __tl

For a manpage such as qt.234.6qt, we grab the "6".

[This doesn't handle something like "iamnotamanpage" at
 all---I should fix this...]


+__count:=	0
+.for __fsect in ${__fs}
+__count!=	${ECHO} $$((${__count}+1))
+__fname!=	${ECHO} ${_WORD:S/SENT/${__fl}/:S/NUMB/${__count}/}
+__tname!=	${ECHO} ${_WORD:S/SENT/${__tl}/:S/NUMB/${__count}/}
+__tsect!=	${ECHO} ${_WORD:S/SENT/${__ts}/:S/NUMB/${__count}/}

Loop once for each set of two manpages.

__fname  ---  grab the appropriate left-side manpage (as per __count)
__fsect  ---  man section ${__fname} belongs to
__tname  ---  grab the appropriate right-side manpage (as per __count)
__tsect  ---  man section ${__tname} belongs to


+.if defined(SYMMLINKS)
+__defln:=	-fs
+.else
+__defln:=	-f
+.endif

Default linking style.  Duh.  ;-)


+.else defined(NOMANCOMPRESS)
[...]

The goal here is to produce variables

_FMLINKS= /full/path/from.1    /full/path/from.2   [...]
_TMLINKS= /full/path/to.1      /full/path/to.2     [...]
_HMLINKS= -fs                  -fs                 [...]

+.if ${__tname:M/*}x == x
+.for __tsect in ${__tsect}
+_TMLINKS!=	${ECHO} ${_TMLINKS} ${MAN${__tsect:S/l/L/:S/n/N/}PREFIX}/man/${lang}/man${__tsect}/${__tname}.gz
 .endfor
+.else Not an Absolute Path
+_TMLINKS!=	${ECHO} ${_TMLINKS} ${__tname}.gz
+__defln:=	-fs
+.endif

This expands the short path "man.1" to its full path (as
necessary) and adds it to the appropriate list.

Don't even ask why that inner .for loop is necessary...


+.endif defined(NOMANCOMPRESS)
+_HMLINKS+=	${__defln}
+_HMLINKS:=	${_HMLINKS}

Add the link style to the appropriate list.

+.endfor __fsect in ${__fs}
+.endif defined(MLINKS)
+.endfor lang in ${MANLANG}

Loop again for the next pair of manpages.
End of conditional MLINKS section.
Loop again for next MANLANG.

Easy.  :-)


+__w1!=	${ECHO} ${_HMLINKS} | ${WC} -w
+__w2!=	${ECHO} ${_FMLINKS} | ${WC} -w
+__w3!=	${ECHO} ${_TMLINKS} | ${WC} -w
+.if ${__w1} != ${__w2} || ${__w1} != ${__w3}
+.BEGIN:
+	@${ECHO_MSG} "Error: variables derived from MLINKS are bad."
+	@${FALSE}
+.endif

Make sure nobody is trying to go behind our back and cause
trouble.
 

Now that our variables _HMLINKS, _FMLINKS, and _TMLINKS are
setup, the rest is easy.

Pop one value off each, combine, do appropriate thing for
generate-plist: or man-compress:, repeat until finished.


How's that?


-- 
This .sig is not innovative, witty, or profund.


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ports" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.96.980824214720.7081A-100000>