libcpp: Provide date routine
Joseph pointed me at cb_get_source_date_epoch, which allows repeatable builds and solves a FIXME I had on the modules branch. Unfortunately it's used exclusively to generate __DATE__ and __TIME__ values, which fallback to using a time(2) call. It'd be nicer if the preprocessor made whatever time value it determined available to the rest of the compiler. So this patch adds a new cpp_get_date function, which abstracts the call to the get_source_date_epoch hook, or uses time directly. The value is cached. Thus the timestamp I end up putting on CMI files matches __DATE__ and __TIME__ expansions. That seems worthwhile. libcpp/ * include/cpplib.h (enum class CPP_time_kind): New. (cpp_get_date): Declare. * internal.h (struct cpp_reader): Replace source_date_epoch with time_stamp and time_stamp_kind. * init.c (cpp_create_reader): Initialize them. * macro.c (_cpp_builtin_macro_text): Use cpp_get_date. (cpp_get_date): Broken out from _cpp_builtin_macro_text and genericized.
This commit is contained in:
parent
6c3ce63b04
commit
4b5f564a5d
4 changed files with 71 additions and 33 deletions
|
@ -1040,6 +1040,15 @@ inline location_t cpp_macro_definition_location (cpp_hashnode *node)
|
|||
{
|
||||
return node->value.macro->line;
|
||||
}
|
||||
/* Return an idempotent time stamp (possibly from SOURCE_DATE_EPOCH). */
|
||||
enum class CPP_time_kind
|
||||
{
|
||||
FIXED = -1, /* Fixed time via source epoch. */
|
||||
DYNAMIC = -2, /* Dynamic via time(2). */
|
||||
UNKNOWN = -3 /* Wibbly wobbly, timey wimey. */
|
||||
};
|
||||
extern CPP_time_kind cpp_get_date (cpp_reader *, time_t *);
|
||||
|
||||
extern void _cpp_backup_tokens (cpp_reader *, unsigned int);
|
||||
extern const cpp_token *cpp_peek_token (cpp_reader *, int);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue