| Notes on the source code |
| ======================== |
| |
| The mechanism to generate the system error codes is delicate and |
| fragile, but it's the best I could come up with that supports |
| cross-compilation and dynamic self-configuration. Here is how it |
| works: |
| |
| 1. Generate list of supported system error codes. |
| |
| mkerrcodes1.awk generates a list of supported system error codes from |
| errnos.in. Each entry in the list is protected with #ifdef/#endif, |
| and contains a GPG_ERR_* marker. The list is stored in "_mkerrcodes.h". |
| |
| 2. The HOST cpp is run on _mkerrcodes.h. This evaluates the known |
| system error macros to something (may be a number, maybe a constant |
| expression as on the GNU/Hurd), suppressing the unknown ones. The |
| output is piped into step 3. |
| |
| 3. The cpp output is filtered with grep for only those lines which |
| contain a GPG_ERR_* marker. The output is piped into step 4. |
| |
| 4. The filtered output is processed by mkerrcodes.awk, which produces |
| a table of constant expressions plus GPG_ERR_* code string symbols in |
| a format suitable for the C program mkerrcodes.c. At this point we |
| are crossing our fingers that the constant expressions produced by the |
| system do not contain GPG_ERR_* markers. The output is stored in |
| mkerrcodes.h. |
| |
| 5. The file mkerrcodes.h is included by mkerrcodes.c, which is |
| compiled to a binary executable on the BUILD system. At this point we |
| are crossing our fingers that the constant expressions produced by the |
| system do not depend on the build platform anymore. The output is |
| post-processed by mkerrcodes2.awk and stored in "code-from-errno.h", |
| which is subsequently used in the library. |
| |
| -- Marcus |
| |
| Copyright 2006 g10 Code GmbH |
| |
| This file is free software; as a special exception the author gives |
| unlimited permission to copy and/or distribute it, with or without |
| modifications, as long as this notice is preserved. |
| |
| This file is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY, to the extent permitted by law; without even the |
| implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |