Honour an external definition of SOURCE_DATE_EPOCH when updating the embedded modification date in TTF/TTC files. --- a/lib/tatime.c +++ b/lib/tatime.c @@ -15,6 +15,8 @@ #include #include +#include +#include #include "ta.h" @@ -27,12 +29,51 @@ TA_get_current_time(FT_ULong* high, { /* there have been 24107 days between January 1st, 1904 (the epoch of */ /* OpenType), and January 1st, 1970 (the epoch of the `time' function) */ - TA_ULongLong seconds_to_1970 = 24107 * 24 * 60 * 60; - TA_ULongLong seconds_to_today = seconds_to_1970 + (TA_ULongLong)time(NULL); + const TA_ULongLong seconds_to_1970 = 24107 * 24 * 60 * 60; + TA_ULongLong seconds_to_build; + time_t now; + char *source_date_epoch, *endptr; + TA_ULongLong epoch; + source_date_epoch = getenv("SOURCE_DATE_EPOCH"); + if (source_date_epoch) { + errno = 0; + epoch = strtoull(source_date_epoch, &endptr, 10); + if ((errno == ERANGE && (epoch == ULLONG_MAX || epoch == 0)) + || (errno != 0 && epoch == 0)) { + fprintf(stderr, + "Environment variable $SOURCE_DATE_EPOCH: strtoull: %s\n", + strerror(errno)); + exit(EXIT_FAILURE); + } + if (endptr == source_date_epoch) { + fprintf(stderr, + "Environment variable $SOURCE_DATE_EPOCH: No digits were found: %s\n", + endptr); + exit(EXIT_FAILURE); + } + if (*endptr != '\0') { + fprintf(stderr, + "Environment variable $SOURCE_DATE_EPOCH: Trailing garbage: %s\n", + endptr); + exit(EXIT_FAILURE); + } + if (epoch > ULONG_MAX) { + fprintf(stderr, + "Environment variable $SOURCE_DATE_EPOCH: value must be smaller " + "than or equal to: %lu but was found to be: %llu \n", + ULONG_MAX, epoch); + exit(EXIT_FAILURE); + } + now = epoch; + } else { + now = time(NULL); + } - *high = (FT_ULong)(seconds_to_today >> 32); - *low = (FT_ULong)seconds_to_today; + seconds_to_build = seconds_to_1970 + (TA_ULongLong)now; + + *high = (FT_ULong)(seconds_to_build >> 32); + *low = (FT_ULong)seconds_to_build; } /* end of tatime.c */ ='/guix/log/doc/htmlxref.cnf?id=12fcf98071cd2f7e809e40ddf643d93067b6b5d6'>htmlxref.cnf
AgeCommit message (Expand)Author
2024-06-03nls: Update translations....* po/doc/guix-cookbook.sv.po: New file. * po/doc/local.mk: Add 'sv' cookbook. * po/doc/po4a.cfg (po4a_langs): Add 'sv'. * doc/local.mk: Add 'sv' cookbook. * doc/htmlxref.cnf: Update URLs for cookbook. * doc/build.scm (%cookbook-languages): Add 'sv'. * doc/guix-cookbook.texi (Top): Mention 'sv' cookbook. Change-Id: Ibfeb7254f583f1c8827e8c2756bbb02880bcba46 Florian Pelz
2024-04-01nls: Update translations....* po/guix/ar.po: New file. * po/guix/LINGUAS: Add 'ar'. * po/doc/guix-cookbook.pt_BR.po: New file. * po/doc/local.mk: Add 'pt_BR' cookbook. * doc/local.mk: Add 'pt_BR' cookbook. * doc/htmlxref.cnf: Update URLs for cookbook. * doc/build.scm (%cookbook-languages): Add 'ko', 'pt_BR'. * doc/guix-cookbook.texi (Top): Mention 'ko', 'pt_BR' cookbook. Change-Id: Id1846ca100263b3fc1fa2ed52654c670270ee809 Florian Pelz
2022-12-18doc: Update URLs for the manual and cookbook translations....* doc/htmlxref.cnf: Update URLs for "guix" and "guix-cookbook". Ludovic Courtès
2022-12-18doc: Add guile-netlink to 'htmlxref.cnf'....* doc/htmlxref.cnf: Add guile-netlink. Ludovic Courtès
2022-08-05doc: Fix Guix manual URLs in 'htmlxref.cnf'....Fixes a regression introduced in 868da34d54365023223a4ff7520043ba55ad64e8. * doc/htmlxref.cnf (GUIX): Remove "/guix". Ludovic Courtès
2022-06-16doc: Remove obsolete comment from htmlxref.cnf....This is follow up to <https://issues.guix.gnu.org/55290>. * doc/htmlxref.cnf (geiser): Delete obsolete comment. Maxim Cournoyer