mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 03:46:53 -05:00
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:
@@ -512,10 +512,9 @@ struct cpp_reader
|
||||
const unsigned char *date;
|
||||
const unsigned char *time;
|
||||
|
||||
/* Externally set timestamp to replace current date and time useful for
|
||||
reproducibility. It should be initialized to -2 (not yet set) and
|
||||
set to -1 to disable it or to a non-negative value to enable it. */
|
||||
time_t source_date_epoch;
|
||||
/* Time stamp, set idempotently lazily. */
|
||||
time_t time_stamp;
|
||||
int time_stamp_kind; /* Or errno. */
|
||||
|
||||
/* A token forcing paste avoidance, and one demarking macro arguments. */
|
||||
cpp_token avoid_paste;
|
||||
|
||||
Reference in New Issue
Block a user