How do capability macros get named?

The following is taken from some production code:

#ifdef LOCK_LOCKF
#ifdef HAVE_SYS_FILE_H
#include <sys/lockf.h>
#endif
#ifdef HAVE_SYS_FILE_H
#include <sys/file.h>
#endif
#define LOCK(file) fseek(file, 0L, 0), lockf(file, 1, 0L)
#define UNLOCK(file) fseek(file, 0L, 0), lockf(file, 0, 0L)
#endif /* LOCK_LOCKF */

#ifdef LOCK_LOCKING
#ifdef HAVE_SYS_LOCKING_H
#include <sys/locking.h>
#endif
#define LOCK(file) fseek(file, 0L, 0), chk_lock(file, 1)
#define UNLOCK(file) fseek(file, 0L, 0), chk_lock(file, 0)
#endif /* LOCK_LOCKING */

#ifdef LOCK_NONE
#define LOCK(file)
#define UNLOCK(file)
#endif /* LOCK_NONE */

Are the names LOCK_LOCKF, LOCK_LOCKING, and LOCK_NONE arbritrary? Ie, could they have been names LOCKF, LOCKING, and NONE instead?

Yes. They are arbitrary. _DEFINE_POSIX_SOURCE _XOPEN_SOURCE are not - they are some of the feature test macros defined by POSIX, or GNU or whoever.

You should not change contents of compiler header files. And if you come up with a name conflict problem, change the name of your test macros to something else.

The HAVE_xxxx defines come from "configure" which does a ton of test compilations to see what includes/functions/types/capabilities your machine has.