From ecd5f487e831837e1668a8079621b5a04bd68b2f Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 11 Feb 2013 19:39:04 +0000 Subject: [PATCH] Fix patch to fix FTBFS with gcc 4.8 --- at-3.1.13-usePOSIXtimers.patch | 238 ++++++++++++++++----------------- at.spec | 8 +- 2 files changed, 125 insertions(+), 121 deletions(-) diff --git a/at-3.1.13-usePOSIXtimers.patch b/at-3.1.13-usePOSIXtimers.patch index b1afeb6..018bae2 100644 --- a/at-3.1.13-usePOSIXtimers.patch +++ b/at-3.1.13-usePOSIXtimers.patch @@ -1,119 +1,119 @@ -diff -ur -x configure at-3.1.13.orig/atd.c at-3.1.13/atd.c ---- at-3.1.13.orig/atd.c 2011-11-16 11:30:22.424764253 -0500 -+++ at-3.1.13/atd.c 2011-11-16 16:41:12.102831656 -0500 -@@ -815,6 +815,54 @@ - return next_job; - } - -+#ifdef HAVE_CLOCK_GETTIME -+timer_t timer; -+struct itimerspec timeout; -+ -+void timer_setup() -+{ -+ struct sigevent sev; -+ -+ sev.sigev_notify = SIGEV_SIGNAL; -+ sev.sigev_signo = SIGHUP; -+ sev.sigev_value.sival_ptr = &timer; -+ -+ memset(&timeout, 0, sizeof(timeout)); -+ -+ if (timer_create(CLOCK_REALTIME, &sev, &timer) < 0) -+ pabort("unable to create timer"); -+} -+ -+time_t atd_gettime() -+{ -+ struct timespec curtime; -+ -+ clock_gettime(CLOCK_REALTIME, &curtime); -+ -+ return curtime.tv_sec; -+} -+ -+void atd_setalarm(time_t next) -+{ -+ timeout.it_value.tv_sec = next; -+ timer_settime(timer, TIMER_ABSTIME, &timeout, NULL); -+ pause(); -+} -+#else -+void timer_setup() -+{ -+} -+ -+time_t atd_gettime() -+{ -+ return time(NULL); -+} -+ -+void atd_setalarm(time_t next) -+{ -+ sleep(next - atd_gettime()); -+} -+#endif - /* Global functions */ - - int -@@ -835,7 +883,6 @@ - struct sigaction act; - struct passwd *pwe; - struct group *ge; -- - #ifdef WITH_SELINUX - selinux_enabled=is_selinux_enabled(); - #endif -@@ -912,7 +959,7 @@ - sigaction(SIGCHLD, &act, NULL); - - if (!run_as_daemon) { -- now = time(NULL); -+ now = atd_gettime(); - run_loop(); - exit(EXIT_SUCCESS); - } -@@ -935,13 +982,15 @@ - act.sa_handler = set_term; - sigaction(SIGINT, &act, NULL); - -+ timer_setup(); -+ - daemon_setup(); - - do { -- now = time(NULL); -+ now = atd_gettime(); - next_invocation = run_loop(); - if (next_invocation > now) { -- sleep(next_invocation - now); -+ atd_setalarm(next_invocation); - } - } while (!term_signal); - daemon_cleanup(); -diff -ur -x configure at-3.1.13.orig/config.h.in at-3.1.13/config.h.in ---- at-3.1.13.orig/config.h.in 2011-11-16 11:30:22.424764253 -0500 -+++ at-3.1.13/config.h.in 2011-11-16 16:32:44.485426754 -0500 -@@ -38,6 +38,9 @@ - /* Define to 1 if you have the `getloadavg' function. */ - #undef HAVE_GETLOADAVG - -+/* Define to 1 if you have the `clock_gettime' function. */ -+#undef HAVE_CLOCK_GETTIME -+ - /* Define to 1 if you have the header file. */ - #undef HAVE_GETOPT_H - -diff -ur -x configure at-3.1.13.orig/configure.ac at-3.1.13/configure.ac ---- at-3.1.13.orig/configure.ac 2011-11-16 11:30:22.425764254 -0500 -+++ at-3.1.13/configure.ac 2011-11-16 16:31:29.791561747 -0500 -@@ -274,5 +274,9 @@ - AC_SUBST(SELINUXLIB) - AC_SUBST(WITH_SELINUX) - -+dnl check for POSIX timer functions -+AC_SEARCH_LIBS([clock_gettime],[rt]) -+AC_CHECK_FUNCS([clock_gettime]) -+ - AC_CONFIG_FILES(Makefile atrun atd.8 atrun.8 at.1 at.allow.5 batch) - AC_OUTPUT +diff -ur -x configure at-3.1.13.orig/atd.c at-3.1.13/atd.c +--- at-3.1.13.orig/atd.c 2011-11-16 11:30:22.424764253 -0500 ++++ at-3.1.13/atd.c 2011-11-16 16:41:12.102831656 -0500 +@@ -815,6 +815,54 @@ + return next_job; + } + ++#ifdef HAVE_CLOCK_GETTIME ++timer_t timer; ++struct itimerspec timeout; ++ ++void timer_setup() ++{ ++ struct sigevent sev; ++ ++ sev.sigev_notify = SIGEV_SIGNAL; ++ sev.sigev_signo = SIGHUP; ++ sev.sigev_value.sival_ptr = &timer; ++ ++ memset(&timeout, 0, sizeof(timeout)); ++ ++ if (timer_create(CLOCK_REALTIME, &sev, &timer) < 0) ++ pabort("unable to create timer"); ++} ++ ++time_t atd_gettime() ++{ ++ struct timespec curtime; ++ ++ clock_gettime(CLOCK_REALTIME, &curtime); ++ ++ return curtime.tv_sec; ++} ++ ++void atd_setalarm(time_t next) ++{ ++ timeout.it_value.tv_sec = next; ++ timer_settime(timer, TIMER_ABSTIME, &timeout, NULL); ++ pause(); ++} ++#else ++void timer_setup() ++{ ++} ++ ++time_t atd_gettime() ++{ ++ return time(NULL); ++} ++ ++void atd_setalarm(time_t next) ++{ ++ sleep(next - atd_gettime()); ++} ++#endif + /* Global functions */ + + int +@@ -835,7 +883,6 @@ + struct sigaction act; + struct passwd *pwe; + struct group *ge; +- + #ifdef WITH_SELINUX + selinux_enabled=is_selinux_enabled(); + #endif +@@ -912,7 +959,7 @@ + sigaction(SIGCHLD, &act, NULL); + + if (!run_as_daemon) { +- now = time(NULL); ++ now = atd_gettime(); + run_loop(); + exit(EXIT_SUCCESS); + } +@@ -935,13 +982,15 @@ + act.sa_handler = set_term; + sigaction(SIGINT, &act, NULL); + ++ timer_setup(); ++ + daemon_setup(); + + do { +- now = time(NULL); ++ now = atd_gettime(); + next_invocation = run_loop(); + if (next_invocation > now) { +- sleep(next_invocation - now); ++ atd_setalarm(next_invocation); + } + } while (!term_signal); + daemon_cleanup(); +diff -ur -x configure at-3.1.13.orig/config.h.in at-3.1.13/config.h.in +--- at-3.1.13.orig/config.h.in 2011-11-16 11:30:22.424764253 -0500 ++++ at-3.1.13/config.h.in 2011-11-16 16:32:44.485426754 -0500 +@@ -38,6 +38,9 @@ + /* Define to 1 if you have the `getloadavg' function. */ + #undef HAVE_GETLOADAVG + ++/* Define to 1 if you have the `clock_gettime' function. */ ++#undef HAVE_TIMER_CREATE ++ + /* Define to 1 if you have the header file. */ + #undef HAVE_GETOPT_H + +diff -ur -x configure at-3.1.13.orig/configure.ac at-3.1.13/configure.ac +--- at-3.1.13.orig/configure.ac 2011-11-16 11:30:22.425764254 -0500 ++++ at-3.1.13/configure.ac 2011-11-16 16:31:29.791561747 -0500 +@@ -274,5 +274,9 @@ + AC_SUBST(SELINUXLIB) + AC_SUBST(WITH_SELINUX) + ++dnl check for POSIX timer functions ++AC_SEARCH_LIBS([timer_create],[rt]) ++AC_CHECK_FUNCS([timer_create]) ++ + AC_CONFIG_FILES(Makefile atrun atd.8 atrun.8 at.1 at.allow.5 batch) + AC_OUTPUT diff --git a/at.spec b/at.spec index 88aee0b..e1a2a3a 100644 --- a/at.spec +++ b/at.spec @@ -3,12 +3,13 @@ Summary: Job spooling tools Name: at Version: 3.1.13 -Release: 11%{dist} +Release: 12%{dist} # http://packages.debian.org/changelogs/pool/main/a/at/current/copyright # + install-sh is MIT license with changes under Public Domain License: GPLv3+ and GPLv2+ and ISC and MIT and Public Domain Group: System Environment/Daemons URL: http://ftp.debian.org/debian/pool/main/a/at + Source: http://ftp.debian.org/debian/pool/main/a/at/at_%{version}.orig.tar.gz # git upstream source git://git.debian.org/git/collab-maint/at.git Source1: pam_atd @@ -95,7 +96,7 @@ rm -f lex.yy.* y.tab.* --with-pam %endif -make +make %{?_smp_mflags} V=1 %install make install \ @@ -186,6 +187,9 @@ chown daemon:daemon %{_localstatedir}/spool/at/.SEQ %attr(0755,root,root) %{_initrddir}/atd %changelog +* Mon Feb 11 2013 Peter Robinson 3.1.13-12 +- Fix patch to fix FTBFS with gcc 4.8 + * Wed Nov 14 2012 Marcela Mašláňová - 3.1.13-11 - fix license field again