diff options
author | Nathan Sidwell <nathan@acm.org> | 2020-11-06 08:53:31 -0800 |
---|---|---|
committer | Nathan Sidwell <nathan@acm.org> | 2020-11-06 08:59:20 -0800 |
commit | 4b5f564a5d958295d51a1a7ff825896a89f22b75 (patch) | |
tree | 89b054bb02f70619eacc29089f28e45e102c1a27 /libcpp/internal.h | |
parent | 6c3ce63b04b38f84c0357e4648383f0e3ab11cd9 (diff) | |
download | gcc-4b5f564a5d958295d51a1a7ff825896a89f22b75.zip gcc-4b5f564a5d958295d51a1a7ff825896a89f22b75.tar.gz gcc-4b5f564a5d958295d51a1a7ff825896a89f22b75.tar.bz2 |
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.
Diffstat (limited to 'libcpp/internal.h')
-rw-r--r-- | libcpp/internal.h | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/libcpp/internal.h b/libcpp/internal.h index 4759961..d7780e4 100644 --- a/libcpp/internal.h +++ b/libcpp/internal.h @@ -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; |