The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

'Rules/C_depender.pm'

This is a PBS (Perl Build System) module.

When is ''Rules/C_depender.pm' used?

Whenever C or CPP files need to be depended. This module is automatically used when 'Rules/C.pm' is used.

What 'Rules/C_depender.pm' does.

It adds a rule to start the C depender whenevenra C or CPP node is added to the dependency graph.

it also add a rule to "build" C files. The build does nothing and is there merely to handle the case where PBS finds a dependency (a header file) must be rebuild thus forcing the rebuild of the C node too.

How does the C depender work?

The C depender first checks to see if a C dependency cache exists for the C file to depend. If the cache exists, it is read, verified and a dependency graph regenerated from the cache.

If the cache file doesn't exist, The 'PreprocessorDepend' is called to find which header files the C file depends on.

'PreprocessorDepend' must be defined in your config.

A graph is generated from the dependencies and it is serialized into a cache with the MD5 of all the nodes in the dependency graph.

The dependency graph is then merged with the global dependency graph. I finally returns the direct dependencies to the C file. As the nodes have already been merged, PBS will only link to those dependencies.

Since the header files are also considered source, we need to tell PBS that the C file must be "rebuild". This is done by returning "__PBS_FORCE_TRIGGER" as one of the dependencies.