bsd.port.mk dependency loop checking patch (Re: Who broke 'make clean' for ports ?)

2002-05-11 Thread KOMATSU Shinichiro

(add To: [EMAIL PROTECTED])

From: Garrett Rooney [EMAIL PROTECTED]
Subject: Re: Who broke 'make clean' for ports ?
Date: Sat, May 11, 2002 at 02:31:32AM JST

 there's a circular dependency that was just introduced to gettext.
 gettext now depends on expat, which depends on gmake, which depends on
 gettext.

Recently, I wrote a patch for bsd.port.mk that checks circular dependency.
If a dependency loop is found, it gives you a warning and
does not invoke 'make' process any further.

Someone, please test the patch below.
If no problem is found, I will send-pr(8).


Index: bsd.port.mk
===
RCS file: /home/ncvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.411
diff -u -u -r1.411 bsd.port.mk
--- bsd.port.mk 27 Apr 2002 11:22:59 -  1.411
+++ bsd.port.mk 8 May 2002 17:13:40 -
@@ -684,6 +684,16 @@
 .else
 PORTSDIR?= /usr/ports
 .endif
+.if exists(/bin/realpath)
+PORTSDIR!= /bin/realpath ${PORTSDIR}
+.else
+PORTSDIR_IS_SYMLINK!=  if [ -L ${PORTSDIR} ]; then echo yes ; fi
+. if ${PORTSDIR_IS_SYMLINK} == yes
+. errorPORTSDIR must not be a symlink
+. endif
+. undef PORTSDIR_IS_SYMLINK
+.endif
+
 LOCALBASE?=${DESTDIR}/usr/local
 X11BASE?=  ${DESTDIR}/usr/X11R6
 LINUXBASE?=${DESTDIR}/compat/linux
@@ -3068,11 +3078,20 @@
@${ALL-DEPENDS-LIST}
 
 ALL-DEPENDS-LIST= \
+   parents=${PARENTS} ${.CURDIR}; \
checked=${PARENT_CHECKED}; \
-   for dir in $$(${ECHO_CMD} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} 
${RUN_DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//') 
$$(${ECHO_CMD} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//'); do \
+   for dir in $$( { ${ECHO_CMD} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} 
+${RUN_DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//' ; 
+${ECHO_CMD} ${DEPENDS} | ${TR} '\040' '\012' | ${SED} -e 's/:.*//'; } | sort -u); do \
if [ -d $$dir ]; then \
-   if (${ECHO_CMD} $$checked | ${GREP} -qwv $$dir); then \
-   child=$$(cd $$dir; ${MAKE} PARENT_CHECKED=$$checked 
all-depends-list); \
+   for p in $$parents; do \
+   if [ $$p = $$dir ]; then \
+   ${ECHO_MSG} Dependency loop: 2; \
+   ${ECHO_MSG} ${.CURDIR} = $$p 2; \
+   ${ECHO_MSG}  2; \
+   exit 1;\
+   fi; \
+   done; \
+   if $$( for c in $$checked; do if [ $$dir = $$c ]; then 
+exit 1; fi ; done ); then \
+   child=$$(cd $$dir; ${MAKE} PARENTS=$$parents 
+PARENT_CHECKED=$$checked all-depends-list); \
for d in $$child; do ${ECHO_CMD} $$d; done; \
${ECHO_CMD} $$dir; \
checked=$$dir $$child $$checked; \
@@ -3155,11 +3174,20 @@
if [ ${CHILD_DEPENDS} ]; then \
${ECHO_CMD} ${PKGNAME} ${.CURDIR}; \
fi; \
+   parents=${PARENTS} ${.CURDIR}; \
checked=${PARENT_CHECKED}; \
-   for dir in $$(${ECHO_CMD} ${LIB_DEPENDS} ${RUN_DEPENDS} | ${TR} '\040' 
'\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//') $$(${ECHO_CMD} ${DEPENDS} | ${TR} 
'\040' '\012' | ${SED} -e 's/:.*//'); do \
+   for dir in $$( { ${ECHO_CMD} ${LIB_DEPENDS} ${RUN_DEPENDS} | ${TR} '\040' 
+'\012' | ${SED} -e 's/^[^:]*://' -e 's/:.*//' ; ${ECHO_CMD} ${DEPENDS} | ${TR} '\040' 
+'\012' | ${SED} -e 's/:.*//'; } | sort -u); do \
if [ -d $$dir ]; then \
-   if (${ECHO_CMD} $$checked | ${GREP} -qwv $$dir); then \
-   childout=$$(cd $$dir; ${MAKE} CHILD_DEPENDS=yes 
PARENT_CHECKED=$$checked package-depends-list); \
+   for p in $$parents; do \
+   if [ $$p = $$dir ]; then \
+   ${ECHO_MSG} Dependency loop: 2; \
+   ${ECHO_MSG} ${.CURDIR} = $$p 2; \
+   ${ECHO_MSG}  2; \
+   exit 1;\
+   fi; \
+   done; \
+   if $$( for c in $$checked; do if [ $$dir = $$c ]; then 
+exit 1; fi ; done ); then \
+   childout=$$(cd $$dir; ${MAKE} CHILD_DEPENDS=yes 
+PARENTS=$$parents PARENT_CHECKED=$$checked package-depends-list); \
set -- $$childout; \
childname=; childdir=; \
while [ $$\# != 0 ]; do \
@@ -3173,7 +3201,7 @@
else \
${ECHO_MSG} ${PKGNAME}: \$$dir\ non-existent -- dependency 
list incomplete 2

Re: bsd.port.mk dependency loop checking patch (Re: Who broke 'make clean' for ports ?)

2002-05-11 Thread Maxim Sobolev

KOMATSU Shinichiro wrote:
 
 (add To: [EMAIL PROTECTED])
 
 From: Garrett Rooney [EMAIL PROTECTED]
 Subject: Re: Who broke 'make clean' for ports ?
 Date: Sat, May 11, 2002 at 02:31:32AM JST
 
  there's a circular dependency that was just introduced to gettext.
  gettext now depends on expat, which depends on gmake, which depends on
  gettext.
 
 Recently, I wrote a patch for bsd.port.mk that checks circular dependency.
 If a dependency loop is found, it gives you a warning and
 does not invoke 'make' process any further.
 
 Someone, please test the patch below.
 If no problem is found, I will send-pr(8).

I don't think that we really need such patch. In 99.% of cases it
would just waste CPU cycles. Circular dependency is a bug and as such
it doesn't need to be a supported special case.

-Maxim

To Unsubscribe: send mail to [EMAIL PROTECTED]
with unsubscribe freebsd-current in the body of the message



Re: bsd.port.mk dependency loop checking patch (Re: Who broke 'make clean' for ports ?)

2002-05-11 Thread Oliver Braun

* Maxim Sobolev [EMAIL PROTECTED] [2002-05-11 15:00]:
 KOMATSU Shinichiro wrote:
  
  (add To: [EMAIL PROTECTED])
  
  From: Garrett Rooney [EMAIL PROTECTED]
  Subject: Re: Who broke 'make clean' for ports ?
  Date: Sat, May 11, 2002 at 02:31:32AM JST
  
   there's a circular dependency that was just introduced to gettext.
   gettext now depends on expat, which depends on gmake, which depends on
   gettext.
  
  Recently, I wrote a patch for bsd.port.mk that checks circular dependency.
  If a dependency loop is found, it gives you a warning and
  does not invoke 'make' process any further.
  
  Someone, please test the patch below.
  If no problem is found, I will send-pr(8).

 I don't think that we really need such patch. In 99.% of cases it
 would just waste CPU cycles. Circular dependency is a bug and as such
 it doesn't need to be a supported special case.

But it might be a good idea to incorporate this functionality into
${PORTSDIR}/devel/portlint.

Regards,
 Olli
-- 
Institute for Software TechnologyInstitute for Information Systems
Department of Computing Science, Federal Armed Forces University Munich
--- http://ist.unibw-muenchen.de/People/obraun/

To Unsubscribe: send mail to [EMAIL PROTECTED]
with unsubscribe freebsd-current in the body of the message



Re: bsd.port.mk dependency loop checking patch (Re: Who broke 'make clean' for ports ?)

2002-05-11 Thread Kris Kennaway

On Sat, May 11, 2002 at 04:00:53PM +0300, Maxim Sobolev wrote:
 KOMATSU Shinichiro wrote:
  
  (add To: [EMAIL PROTECTED])
  
  From: Garrett Rooney [EMAIL PROTECTED]
  Subject: Re: Who broke 'make clean' for ports ?
  Date: Sat, May 11, 2002 at 02:31:32AM JST
  
   there's a circular dependency that was just introduced to gettext.
   gettext now depends on expat, which depends on gmake, which depends on
   gettext.
  
  Recently, I wrote a patch for bsd.port.mk that checks circular dependency.
  If a dependency loop is found, it gives you a warning and
  does not invoke 'make' process any further.
  
  Someone, please test the patch below.
  If no problem is found, I will send-pr(8).
 
 I don't think that we really need such patch. In 99.% of cases it
 would just waste CPU cycles. Circular dependency is a bug and as such
 it doesn't need to be a supported special case.

Actually it would be useful to have this functionality somewhere.  I
recently spent a couple of hours trying to track down a circular
dependency I had introduced via a bsd.port.mk patch.  The main symptom
was that the make_index script would just go into a loop and exhaust
memory.  I ended up finding it by adding all sorts of debugging
printfs to the perl script, but this was pretty ugly.

Kris



msg38195/pgp0.pgp
Description: PGP signature


RE: Who broke 'make clean' for ports ?

2002-05-10 Thread Riccardo Torrini

On 10-May-2002 (17:01:26/GMT) Riccardo Torrini wrote:

 into /usr/ports/deve/gettext

s/deve/devel/


I use make clean to show dependencies before install/update.
No, I don't use neither pkg_update nor portupgrade.


Riccardo.

To Unsubscribe: send mail to [EMAIL PROTECTED]
with unsubscribe freebsd-current in the body of the message



Re: Who broke 'make clean' for ports ?

2002-05-10 Thread Dan Nelson

In the last episode (May 10), Riccardo Torrini said:
 After a cvsup of 10 minutes ago either on 5.0-CURRENT and on
 4.6-PRERELEASE (both of May 8, 02:46 CEST) making a
 
 # make clean
 
 into /usr/ports/deve/gettext spawn zillions(!) of make process,
 lead to cpu load average at 96.xx before a reboot  :-(
 
 Up to yesterday it works.  Doing this into others ports works...

Syntax errors (or defining things that bsd.port.mk wants to control
itself) in /etc/make.conf can cause this.

-- 
Dan Nelson
[EMAIL PROTECTED]

To Unsubscribe: send mail to [EMAIL PROTECTED]
with unsubscribe freebsd-current in the body of the message



Re: Who broke 'make clean' for ports ?

2002-05-10 Thread Garrett Rooney

On Fri, May 10, 2002 at 12:26:56PM -0500, Dan Nelson wrote:
 In the last episode (May 10), Riccardo Torrini said:
  After a cvsup of 10 minutes ago either on 5.0-CURRENT and on
  4.6-PRERELEASE (both of May 8, 02:46 CEST) making a
  
  # make clean
  
  into /usr/ports/deve/gettext spawn zillions(!) of make process,
  lead to cpu load average at 96.xx before a reboot  :-(
  
  Up to yesterday it works.  Doing this into others ports works...
 
 Syntax errors (or defining things that bsd.port.mk wants to control
 itself) in /etc/make.conf can cause this.

there's a circular dependency that was just introduced to gettext.
gettext now depends on expat, which depends on gmake, which depends on
gettext.

it's a known problem, and is being worked on.

-garrett 

-- 
garrett rooneyRemember, any design flaw you're 
[EMAIL PROTECTED]  sufficiently snide about becomes  
http://electricjellyfish.net/ a feature.   -- Dan Sugalski

To Unsubscribe: send mail to [EMAIL PROTECTED]
with unsubscribe freebsd-current in the body of the message



Re: Who broke 'make clean' for ports ?

2002-05-10 Thread Riccardo Torrini

On 10-May-2002 (17:26:56/GMT) Dan Nelson wrote:

 After a cvsup of 10 minutes ago either on 5.0-CURRENT and on
 4.6-PRERELEASE (both of May 8, 02:46 CEST) making a
 # make clean
 into /usr/ports/deve/gettext spawn zillions(!) of make process,
 lead to cpu load average at 96.xx before a reboot  :-(

 Syntax errors (or defining things that bsd.port.mk wants to control
 itself) in /etc/make.conf can cause this.

What things?  I don't'think.  Why into /usr/ports/astro/luna works?
Without changing my /etc/make.conf obviously...  Anyway this are my
4.6 and 5.0 make.conf(s)


-8-[ 4.6-PRERELEASE ]-8
KERNCONF=   SILOS
CFLAGS= -O2 -pipe
NOPROFILE=  true

USA_RESIDENT=   NO

SUP_UPDATE= yes
SUP=/usr/local/bin/cvsup
SUPFLAGS=   -g -L 2 -z
SUPFILE=/usr/local/etc/cvsup.stable
PORTSSUPFILE=   /usr/local/etc/cvsup.ports

SENDMAIL_MC=/etc/mail/silos.mc

# Resume
##FETCH_BEFORE_ARGS=-rR -o $${file}.resume
##FETCH_AFTER_ARGS= mv $${file}.resume $${file}

# Ports
WITHOUT_CUPS=   yes

# qpopper
WITHOUT_IPV6=   yes


-8-[ 5.0-CURRENT ]-8-
KERNCONF=   TRUDY
CPUTYPE=p3
CFLAGS= -O2 -pipe
NOPROFILE=  true
COMPAT3X=   yes
COMPAT4X=   yes

XFREE86_VERSION=4

USA_RESIDENT=   NO

SUP_UPDATE= yes
SUP=/usr/local/bin/cvsup
SUPFLAGS=   -g -L 2 -z
SUPFILE=/usr/local/etc/cvsup.current
PORTSSUPFILE=   /usr/local/etc/cvsup.ports

SENDMAIL_MC=/etc/mail/trudy.mc

# Resume
##FETCH_BEFORE_ARGS=-rR -o $${file}.resume
##FETCH_AFTER_ARGS= mv $${file}.resume $${file}

# Ports
A4= yes # ghostscript-gnu
WITH_GPHOTO2=   yes # sane-backends
WITH_GIMP=  yes # sane-frontends

# mplayer
WITH_GUI=   yes
WITH_DVD=   yes
WITH_VORBIS=yes

# bocsh
WITH_BOCHS_CPU_LEVEL=   6
WITH_BOCHS_PROCESSORS=  1

# libmpeg2
WITH_SDL=   yes


Riccardo.

To Unsubscribe: send mail to [EMAIL PROTECTED]
with unsubscribe freebsd-current in the body of the message



Re: Who broke 'make clean' for ports ?

2002-05-10 Thread Riccardo Torrini

On 10-May-2002 (17:31:32/GMT) Garrett Rooney wrote:

 there's a circular dependency that was just introduced to gettext.
 gettext now depends on expat, which depends on gmake, which depends
 on gettext.
 it's a known problem, and is being worked on.

Ok, thanks.  Sorry for alarm but I don't see any message before
my own.  Can I back-cvsup to a stable date?  When (sh)it happens?


Riccardo.

To Unsubscribe: send mail to [EMAIL PROTECTED]
with unsubscribe freebsd-current in the body of the message



Re: Who broke 'make clean' for ports ?

2002-05-10 Thread Garrett Rooney

On Fri, May 10, 2002 at 07:41:44PM +0200, Riccardo Torrini wrote:
 On 10-May-2002 (17:31:32/GMT) Garrett Rooney wrote:
 
  there's a circular dependency that was just introduced to gettext.
  gettext now depends on expat, which depends on gmake, which depends
  on gettext.
  it's a known problem, and is being worked on.
 
 Ok, thanks.  Sorry for alarm but I don't see any message before
 my own.  Can I back-cvsup to a stable date?  When (sh)it happens?

the change is just a few hours old.  you can just remove expat2 from
the LIB_DEPENDS in textproc/gettext/Makefile and you should be fine
for now.

-garrett

-- 
garrett rooneyRemember, any design flaw you're 
[EMAIL PROTECTED]  sufficiently snide about becomes  
http://electricjellyfish.net/ a feature.   -- Dan Sugalski

To Unsubscribe: send mail to [EMAIL PROTECTED]
with unsubscribe freebsd-current in the body of the message



Re: Who broke 'make clean' for ports ?

2002-05-10 Thread Riccardo Torrini

On 10-May-2002 (17:44:21/GMT) Garrett Rooney wrote:

 Ok, thanks.  Sorry for alarm but I don't see any message before
 my own.  Can I back-cvsup to a stable date?  When (sh)it happens?

 the change is just a few hours old.  you can just remove expat2
 from the LIB_DEPENDS in textproc/gettext/Makefile and you should
 be fine for now.

Yes, it works.  Thanks again.


Riccardo.

To Unsubscribe: send mail to [EMAIL PROTECTED]
with unsubscribe freebsd-current in the body of the message