Why can’t I put my special stuff in NuttX header files?
Warning
Migrated from: https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=139629466
The Problem
I am very picky about what goes into NuttX header files. I don’t accept non-standardized changes to go into them just to permit external code to compile; nor do I accept changes that imply something is implemented in NuttX when it is not (although there are cases like that in the header files now).
But I want to use newlib logic that depends on certain definitions on the Nuttx header files!
But I am trying to compile an application that depends on non-standard declarations in header files! Or prototypes for functions that are not provided by NuttX! Or types that are not used by NuttX!
You will find that I am very stubborn on this subject and you will be wasting your time and energy if you try to get kruft included into NuttX header files for your personal purposes.
A Work-Around
But there is a work-around for my pickiness and stubborn-ness (at least for compilers like GCC that support the GNU extensions). Let’s suppose you wanted to add this definition:
#define I_AM_A_NERD true
to the standard time.h
header file. You submitted a patch to do this and
I refused it. Now what?
While I refuse to put non-standard or useless stuff in NuttX header files,
there are ways to work around this. Suppose that you create a directory
called myincludes/
and in your myincludes/
directory is a header called
time.h
. This time.h
header file consists of:
#define I_AM_A_NERD true
#include_next <time.h>
Then in your CFLAGS
, you use an -isystem
setting to include header
files from myincludes/
before any header files from the NuttX include/
directory. Then when your application includes time.h
, the version of
time.h
in myincludes/
is the one that will be included. That version
will define I_AM_A_NERD
as you want and then include the next file named
time.h
in the compiler’s include path. That file will be the standard
time.h
header file that is provided in the NuttX include/
directory
In this way you an append or modify any of the NuttX header files to suit your own purposes without my having to accept changes that I do not want into the NuttX repository.
When Does It Make Sense?
When does it make sense to add new definitions, types, and function prototypes to the NuttX header files? Only under the following conditions:
The changes are standard and specified in OpenGroup.org
The changes are provided by a patch that includes the full, verified implementation of the feature that uses the types and implements the functions.