Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 19 Jul 2008 17:59:41 +0000 (UTC)
From:      Kris Kennaway <kris@FreeBSD.org>
To:        ports-committers@FreeBSD.org, cvs-ports@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: ports Makefile ports/Mk bsd.java.mk bsd.port.mk bsd.port.subdir.mk bsd.python.mk ports/Tools make_index
Message-ID:  <200807191759.m6JHxfsV032850@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
kris        2008-07-19 17:59:41 UTC

  FreeBSD ports repository

  Modified files:
    .                    Makefile 
    Mk                   bsd.java.mk bsd.port.mk 
                         bsd.port.subdir.mk bsd.python.mk 
    Tools                make_index 
  Log:
  Major optimizations for 'make index' and other recursive traversal
  targets.
  
  * Use /rescue/sh for index builds instead of /bin/sh, when it exists.
    The former is statically linked and faster to execute, which becomes
    significant when executing it tens of thousands of times.  This
    trick can be used with other recursive targets by passing in
    __MAKE_SHELL.
  
  * Get rid of make variable assignments that use != command invocations
    in the critical path, using several methods:
  
    - rewriting logic to use shell or make builtins instead of external command executions
    - macroizing commands and executing them in the targets where they
      are needed instead of with every invocation of make
    - precomputing the results of invariant commands in
      bsd.port.subdir.mk and passing them in explicitly to child makes,
      and using this to avoid recalculation in all the children. NB: the
      commands are still run one per top-level subdirectory but this
      does not currently seem to be a major issue.  They could be moved
      further up into the top-level Makefile at the cost of some
      cleanliness.
    - Committers are strongly discouraged from adding further "bare" !=
      assignments to the ports tree, even in their own ports.  One of
      the above strategies should be used to avoid future bloat.
  
  * Rewrite the core 'describe' target to work entirely within a single
    shell process using only builtin commands.  The old version is
    retained as a backup for use on systems older than 603104, which
    does not have the make :u modifier.  This cuts down the number of
    processes executed during the course of a 'make index' by an order
    of magnitude, and we are essentially now amortized to the minimum of
    a single make + sh instance per port, plus whatever commands the
    port makefile itself executes (which are usually unnecessary and
    bogus).
  
  * Less validation of the WWW: target is performed; this can become
    policed at a port level by portlint.  Specifically we look at the
    second word of the first line beginning with "WWW:" in pkg-descr,
    and append "http://" to it unless it already begins with "http://",
    "https://" or "ftp://".  Thanks to dougb for the idea of how to
    extract WWW: using shell builtins.
  
  * Use the "true" shell builtin instead of echo > /dev/null for a
    measurable decrease in CPU use.
  
  * Add a note about dubious escaping strategy in bsd.port.subdir.mk
  
  * Minor change in output of 'make describe': it no longer strips
    trailing CR characters from pkg-descr files with MSDOS CR/LF
    termination.  Instead the makeindex perl script that post-processes
    make describe into the INDEX is tweaked to strip on input.
  
  The bottom line is that on my test hardware INDEX builds are now
  faster by more than a factor of 2 and with a reduction in system time
  by a factor of 4-8 depending on configuration.
  
  Revision  Changes    Path
  1.104     +11 -1     ports/Makefile
  1.83      +50 -34    ports/Mk/bsd.java.mk
  1.596     +63 -31    ports/Mk/bsd.port.mk
  1.75      +75 -9     ports/Mk/bsd.port.subdir.mk
  1.105     +13 -1     ports/Mk/bsd.python.mk
  1.14      +3 -1      ports/Tools/make_index



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807191759.m6JHxfsV032850>