0006-build-sys-add-disable-hwclock-gplv3.patch 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. From e8c21c894e69ba0c72ecf69e8297cb20ec5f9c1e Mon Sep 17 00:00:00 2001
  2. From: Karel Zak <kzak@redhat.com>
  3. Date: Mon, 27 Jan 2020 16:17:10 +0100
  4. Subject: [PATCH] build-sys: add --disable-hwclock-gplv3
  5. The currently used date/time parser (for hwclock --set --date <date>)
  6. is gnulib based code with GPLv3.
  7. This patch allows to avoid this code and replace it with minimalistic
  8. date/time parser.
  9. Addresses: https://github.com/karelzak/util-linux/issues/891
  10. Reported-by: Carlos Santos <unixmania@gmail.com>
  11. Signed-off-by: Karel Zak <kzak@redhat.com>
  12. ---
  13. configure.ac | 9 +++++++++
  14. sys-utils/Makemodule.am | 5 ++++-
  15. sys-utils/hwclock.c | 17 ++++++++++++++---
  16. 3 files changed, 27 insertions(+), 4 deletions(-)
  17. diff --git a/configure.ac b/configure.ac
  18. index 84b375543..960e2016d 100644
  19. --- a/configure.ac
  20. +++ b/configure.ac
  21. @@ -1558,6 +1558,15 @@ AS_IF([test "x$build_hwclock_cmos" = xyes ], [
  22. AC_DEFINE([USE_HWCLOCK_CMOS], [1], [Define to 1 if want to use CMOS clock.])
  23. ])
  24. +AC_ARG_ENABLE([hwclock_gplv3],
  25. + AS_HELP_STRING([--disable-hwclock-gplv3], [do not use datetime parsing GPLv3 code]),
  26. + [], [enable_hwclock_gplv3=yes]
  27. +)
  28. +AM_CONDITIONAL([USE_HWCLOCK_GPLv3_DATETIME], [test "x$enable_hwclock_gplv3" = xyes])
  29. +AS_IF([test "x$enable_hwclock_gplv3" = xyes ], [
  30. + AC_DEFINE([USE_HWCLOCK_GPLv3_DATETIME], [1], [use datetime parsing GPLv3 code to hwclock])
  31. +])
  32. +
  33. UL_BUILD_INIT([mkfs], [yes])
  34. AM_CONDITIONAL([BUILD_MKFS], [test "x$build_mkfs" = xyes])
  35. diff --git a/sys-utils/Makemodule.am b/sys-utils/Makemodule.am
  36. index baf851e5b..07228f75f 100644
  37. --- a/sys-utils/Makemodule.am
  38. +++ b/sys-utils/Makemodule.am
  39. @@ -451,8 +451,11 @@ dist_man_MANS += \
  40. PATHFILES += sys-utils/hwclock.8
  41. hwclock_SOURCES = \
  42. sys-utils/hwclock.c \
  43. - sys-utils/hwclock.h \
  44. + sys-utils/hwclock.h
  45. +if USE_HWCLOCK_GPLv3_DATETIME
  46. +hwclock_SOURCES += \
  47. sys-utils/hwclock-parse-date.y
  48. +endif
  49. hwclock_LDADD = $(LDADD) libcommon.la -lm
  50. hwclock_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/sys-utils
  51. if USE_HWCLOCK_CMOS
  52. diff --git a/sys-utils/hwclock.c b/sys-utils/hwclock.c
  53. index 15fc19afd..e736da717 100644
  54. --- a/sys-utils/hwclock.c
  55. +++ b/sys-utils/hwclock.c
  56. @@ -3,6 +3,7 @@
  57. *
  58. * Since 7a3000f7ba548cf7d74ac77cc63fe8de228a669e (v2.30) hwclock is linked
  59. * with parse_date.y from gnullib. This gnulib code is distributed with GPLv3.
  60. + * Use --disable-hwclock-gplv3 to exclude this code.
  61. *
  62. *
  63. * clock.c was written by Charles Hedrick, hedrick@cs.rutgers.edu, Apr 1992
  64. @@ -1170,7 +1171,6 @@ int main(int argc, char **argv)
  65. };
  66. struct timeval startup_time;
  67. struct adjtime adjtime = { 0 };
  68. - struct timespec when = { 0 };
  69. /*
  70. * The time we started up, in seconds into the epoch, including
  71. * fractions.
  72. @@ -1398,11 +1398,22 @@ int main(int argc, char **argv)
  73. if (ctl.set || ctl.predict) {
  74. if (!ctl.date_opt) {
  75. - warnx(_("--date is required for --set or --predict"));
  76. - exit(EXIT_FAILURE);
  77. + warnx(_("--date is required for --set or --predict"));
  78. + exit(EXIT_FAILURE);
  79. }
  80. +#ifdef USE_HWCLOCK_GPLv3_DATETIME
  81. + /* date(1) compatible GPLv3 parser */
  82. + struct timespec when = { 0 };
  83. +
  84. if (parse_date(&when, ctl.date_opt, NULL))
  85. set_time = when.tv_sec;
  86. +#else
  87. + /* minimalistic GPLv2 based parser */
  88. + usec_t usec;
  89. +
  90. + if (parse_timestamp(ctl.date_opt, &usec) == 0)
  91. + set_time = (time_t) (usec / 1000000);
  92. +#endif
  93. else {
  94. warnx(_("invalid date '%s'"), ctl.date_opt);
  95. exit(EXIT_FAILURE);
  96. --
  97. 2.18.2