[build2] How to detect and configure #define macros?

Boris Kolpackov boris at codesynthesis.com
Mon Nov 6 22:34:20 UTC 2017


Joshua Olson <0joshua.olson1 at gmail.com> writes:

> To rephrase, can the build system extract macros from a project's source,
> whether that means printing a list, making a config header. or something
> else? Or is that out of scope for now?
> 
> I imagine one could look for #ifdef, #ifndef, and all-caps identifiers, but
> almost anything could be changed a la -D define flags so there's no
> completely 'correct' way to do this.

Yes, to handle this automatically will require quite a bit of magic.

Generally, when porting an existing project to build2 we use the
following procedure:

1. Identify how the existing build system communicates configuration
   to the source code. This is usually in the form of preprocessor
   macros either via a configuration files (e.g., config.h) and/or
   command line (e.g., -D options).

2. If necessary, narrow down the above set of macros to the actually
   used ones. This is necessary if the build system has a "kitchen
   sink" configuration file, like autotools-based projects often do.
   
   The way we achieve this is by grepping the project's source code
   for the use of each macro. We also use this as an opportunity to
   understand the exact meaning of each macro (which is  not always
   evident from #1).

3. Appropriately define each macro when building with build2. This
   can done either via the command line (-D) from buildfiles or
   from a configuration file.

   In our work we try hard to come up with what we call a "static 
   configuration file". It determines the configuration based on
   predefined macros for the target compiler/platform/standard
   library as opposed to, say, running some compilation tests
   like autoconf.

   In the future we also plan to support generating configuration
   files from .in templates.

You can see some examples of real libraries that we have converted
here:

https://git.build2.org/cgit/packaging/

Boris



More information about the users mailing list