libcpp: Provide date routine
authorNathan Sidwell <nathan@acm.org>
Fri, 6 Nov 2020 16:53:31 +0000 (08:53 -0800)
committerNathan Sidwell <nathan@acm.org>
Fri, 6 Nov 2020 16:59:20 +0000 (08:59 -0800)
commit4b5f564a5d958295d51a1a7ff825896a89f22b75
tree89b054bb02f70619eacc29089f28e45e102c1a27
parent6c3ce63b04b38f84c0357e4648383f0e3ab11cd9
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.
libcpp/include/cpplib.h
libcpp/init.c
libcpp/internal.h
libcpp/macro.c