On Mon, 15 Aug 2005 21:03:02 +0200
Joerg Sonnenberger <[EMAIL PROTECTED]> wrote:

> On Mon, Aug 15, 2005 at 10:59:35AM -0700, Chris Pressey wrote:
> > - package install/deinstall can execute arbitrary commands
> 
> This issue exists for every packaging system out there, simply because
> it is necessary for proper operation.

I disagree.  There is absolutely no reason that any package should be
able to execute 'fdisk', for example.

> > - bsd.port.mk and friends are almost unreadable/unmaintainable
> 
> Well, anything comparable to bsd.port.mk or bsd.pkg.mk is a
> complicated beast.

Make(1) is basically the wrong tool for organizing something of this
level of complexity - especially considering that 80% or more of what
ports/pkgsrc does, has *nothing* to do with what make(1) was designed to
do (dependency ordering & elimination of redundant actions.)

> I agree neither with the unreadable nor with the
> unmaintainable, at least for pkgsrc.

How long do you think it would it take the average developer to read and
understand the following code excerpt from bsd.pkg.mk?

# Cache variables listed in MAKEVARS in a phase-specific "makevars.mk"
# file.  These variables are effectively passed to sub-make processes
# that are invoked on the same Makefile.
#
.for _phase_ in ${ALL_PHASES}
${_MAKEVARS_MK.${_phase_}}: ${WRKDIR}
.  if !empty(PKG_PHASE:M${_phase_})
        ${_PKG_SILENT}${_PKG_DEBUG}${RM} -f ${.TARGET}.tmp
.    for _var_ in ${MAKEVARS:O:u}
.      if defined(${_var_})
        ${_PKG_SILENT}${_PKG_DEBUG}                                     \
        ${ECHO} ${_var_}"=      "${${_var_}:Q} >> ${.TARGET}.tmp
.      endif
.    endfor
        ${_PKG_SILENT}${_PKG_DEBUG}                                     \
        if ${TEST} -f ${.TARGET}.tmp; then                              \
                ( ${ECHO} ".if !defined(_MAKEVARS_MK)";                 \
                  ${ECHO} "_MAKEVARS_MK=        defined";               \
                  ${ECHO} "";                                           \
                  ${CAT} ${.TARGET}.tmp;                                \
                  ${ECHO} "";                                           \
                  ${ECHO} ".endif # _MAKEVARS_MK";                      \
                ) > ${.TARGET};                                         \
                ${RM} -f ${.TARGET}.tmp;                                \
        fi
.  endif
        ${_PKG_SILENT}${_PKG_DEBUG}${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
.endfor
.undef _phase_

...at least it's commented and well-formatted; at least, as well as
make(1)'s syntax allows it to be.

If you say pkgsrc is better than ports, I won't dispute that.  But I
don't believe for a second that either of them is particularly _good_.

-Chris

Reply via email to