René Nyffenegger's collection of things on the web
René Nyffenegger on Oracle - Most wanted - Feedback -
 

File dependencies in a ./configure project

The following image depicts the dependencies of executables, input files and produced files in the GNU Build System:
/misc/tools/configure/map.png
The graphic was produced with dot and the following file:
map.dot
digraph map {

  node [shape=hexagon     fontsize=12 fontname=verdana]; configure_in Makefile_am acconfig_h code acinclude_m4   man_created;   
  node [shape=box         fontsize=12 fontname=verdana]; aclocal_m4 configure config_h_in Makefile_in Makefile
                                                         config_status config_log configure_scan  created; 

  node [shape=ellipse fontsize=12 fontname=verdana]; aclocal autoheader autoconf automake autoscan  gnu_tools;      

  configure_in   [label="configure.ac"                          ];
  Makefile_am    [label="Makefile.am"                           ];
  configure      [label="./configure"                           ];
  aclocal        [label="aclocal"                               ];
  autoheader     [label="autoheader"                            ];
  autoconf       [label="autoconf"                              ];
  autoscan       [label="autoscan"                              ];
  config_h_in    [label="config.h.in"                           ];
  aclocal_m4     [label="aclocal.m4"                            ];
  config_h       [label="config.h"                              ];
  Makefile_in    [label="Makefile.in"                           ];
  gnu_tools      [label="GNU Tools"                             ];
  created        [label="created"                               ];
  man_created    [label="manually created"                      ];
  acconfig_h     [label="acconfig.h"                            ];
  acinclude_m4   [label="acinclude.m4"                          ];
  config_status  [label="config.status"                         ];
  config_log     [label="config.log"                            ];
  configure_scan [label="configure.scan"                        ];
  code           [label="code"                                  ];

  code           -> autoscan;

  configure_in   -> autoconf;
  autoconf       -> configure;

  autoscan       -> configure_scan;
  configure_scan -> configure_in    [label="Manually editing" fontname=verdana fontsize=12];

  configure_in   -> aclocal         [label=reads  fontname=verdana fontsize=12];
  acinclude_m4   -> aclocal;
  aclocal        -> aclocal_m4;
  aclocal_m4     -> autoconf        [label=reads  fontname=verdana fontsize=12];
  aclocal_m4     -> autoheader      [label=reads  fontname=verdana fontsize=12]; /*see http://www.lrde.epita.fr/~adl/dl/autotools.pdf*/
  aclocal_m4     -> automake        [label=reads  fontname=verdana fontsize=12]; /*see http://www.lrde.epita.fr/~adl/dl/autotools.pdf*/

  acconfig_h     -> autoheader;
  configure_in   -> autoheader      [label=reads  fontname=verdana fontsize=12];
  autoheader     -> config_h_in;

  Makefile_am    -> automake;
  automake       -> Makefile_in;

  configure_in   -> automake        [label=reads  fontname=verdana fontsize=12]; /*see http://www.lrde.epita.fr/~adl/dl/autotools.pdf*/
  config_h_in    -> configure       [label=reads  fontname=verdana fontsize=12];
  Makefile_in    -> configure       [label=reads  fontname=verdana fontsize=12];
  configure      -> config_h        [label=writes fontname=verdana fontsize=12];
  configure      -> Makefile        [label=writes fontname=verdana fontsize=12];
  configure      -> config_status   [label=writes fontname=verdana fontsize=12 style=dotted];
  configure      -> config_log      [label=writes fontname=verdana fontsize=12];

  Makefile       -> make;
}
The command to produce the file was:
dot.exe -Tpng -omap.png map.dot

Thanks

Thanks to Bram Adams who enhanced my previous version of the dot file with input from this GNU Build System description. Thanks also to Matthew Harris who corrected an error on this page.