[focal] pacemaker FTBFS because of deprecated ftime()

Bug #1869751 reported by Rafael David Tinoco
18
This bug affects 2 people
Affects Status Importance Assigned to Milestone
pacemaker (Ubuntu)
Fix Released
High
Unassigned

Bug Description

https://people.canonical.com/~doko/ftbfs-report/test-rebuild-20200327-focal-focal.html

shows that pacemaker started to be FTBFS because of:

"""
gcc -DHAVE_CONFIG_H -I. -I../../include -DSUPPORT_REMOTE -I../../include -I../../include -I../../libltdl -I../../libltdl -DPCMK_TIME_EMERGENCY_CGT -Wdate-time -D_FORTIFY_SOURCE=2 -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/libxml2 -I/usr/include/heartbeat -I/usr/include/dbus-1.0 -I/usr/lib/i386-linux-gnu/dbus-1.0/include -fPIE -g -O2 -fdebug-prefix-map=/<<PKGBUILDDIR>>=. -fstack-protector-strong -Wformat -Werror=format-security -ggdb -fgnu89-inline -Wall -Waggregate-return -Wbad-function-cast -Wcast-align -Wdeclaration-after-statement -Wendif-labels -Wfloat-equal -Wformat-security -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wno-long-long -Wno-strict-aliasing -Wpointer-arith -Wwrite-strings -Wunused-but-set-variable -Wformat=2 -Wformat-nonliteral -fstack-protector-strong -Werror -c -o pacemaker_remoted-pacemaker-execd.o `test -f 'pacemaker-execd.c' || echo './'`pacemaker-execd.c
execd_commands.c: In function ‘stonith_recurring_op_helper’:
execd_commands.c:257:5: error: ‘ftime’ is deprecated [-Werror=deprecated-declarations]
  257 | ftime(&cmd->t_queue);
      | ^~~~~
In file included from execd_commands.c:23:
/usr/include/i386-linux-gnu/sys/timeb.h:39:12: note: declared here
   39 | extern int ftime (struct timeb *__timebuf)
      | ^~~~~
execd_commands.c: In function ‘schedule_lrmd_cmd’:
execd_commands.c:389:5: error: ‘ftime’ is deprecated [-Werror=deprecated-declarations]
  389 | ftime(&cmd->t_queue);
      | ^~~~~
"""

And man page shows:

SYNOPSIS
       #include <sys/timeb.h>

       int ftime(struct timeb *tp);

DESCRIPTION
       NOTE: This function is deprecated, and will be removed in a future version of the GNU C library. Use clock_gettime(2) instead.

I'll fix this together with other fixes, opening this bug to track the issue.

Changed in pacemaker (Ubuntu):
status: New → Won't Fix
status: Won't Fix → Confirmed
importance: Undecided → High
assignee: nobody → Rafael David Tinoco (rafaeldtinoco)
Revision history for this message
Rafael David Tinoco (rafaeldtinoco) wrote :

commit 4b8b84cce1fd57eec1f47ca44780d60c148b399d
Author: Jan Pokorný <email address hidden>
Date: Fri Nov 15 16:06:57 2019 +0100

    Build: restore buildability in the face of obsolete ftime(3)

    Since the usage of ftime(3) is purely optional and since
    clock_gettime(3) is mandated with POSIX 2001, we can simply
    look at whether CLOCK_MONOTONIC is defined to be used as an
    identifier for the particular clock (kind exactly suitable
    for this context). But due to being late in the release cycle,
    such a change is kept as opt-in (see configure.ac comment for
    details), and for compatibility stability concerns[*], also
    dropping some old surrounding cruft is delayed.

    In this form, constitutes first step out of two to restore
    out-of-the-box buildability with recent enough glibc, again,
    refer to configure.ac comment.

    References:
    https://sourceware.org/git/?p=glibc.git;a=commit;h=2b5fea833bcd0f651579afd16ed7842770ecbae1
    https://src.fedoraproject.org/rpms/glibc/c/ebf75398f06dd27357d8a5321e8e5959633b8182?branch=master
    (for a Fedora Rawhide follow-the-upstream update that led to this
    discovery)

    [*] in case you opt-in (as described), CLOCK_MONOTONIC gets detected
        in time.h positively but it starts choking for whatever reason in
        the actual build or even in run-time, you can rescind that,
        or you can shortcut any checking and refrain from any time period
        measurements altogher with something like:

          env \
            ac_cv_header_sys_timeb_h=no
            ac_cv_have_decl_CLOCK_MONOTONIC=no \
            ./configure

Revision history for this message
Rafael David Tinoco (rafaeldtinoco) wrote :

While some may think the fix for this is to suppress deprecated warning OR to "fix" ftime()... the actual fix for this is to start using MONOTONIC clock for the related functions:

(c)rafaeldtinoco@clufocaldev:~/.../sources/ubuntu/pacemaker$ git diff HEAD
diff --git a/configure.ac b/configure.ac
index a4c8ae93..b7edea57 100644
--- a/configure.ac
+++ b/configure.ac
@@ -981,7 +981,7 @@ AC_CHECK_DECLS([CLOCK_MONOTONIC], [], [], [[
 # will only be applied in 2.0.3 release and will become opt-out since
 # (which hopefully explains the name of the macro as it will start to
 # make more sense then, and the continuity is important)
-CPPFLAGS="-DPCMK_TIME_EMERGENCY_CGT $CPPFLAGS"
+# CPPFLAGS="-DPCMK_TIME_EMERGENCY_CGT $CPPFLAGS"

 dnl ========================================================================

This solves the building issue.

Revision history for this message
Rafael David Tinoco (rafaeldtinoco) wrote :
Revision history for this message
Rafael David Tinoco (rafaeldtinoco) wrote :

There is an on-going merge request for this bug.

Revision history for this message
Matthias Klose (doko) wrote :

pacemaker was uploaded for the riscv64 bootstrap. now builds

Changed in pacemaker (Ubuntu):
status: Confirmed → Fix Committed
Revision history for this message
Rafael David Tinoco (rafaeldtinoco) wrote :

Thanks @doko,

This was fixed by:

# ftime causes deprecation errors now, but the clock_gettime replacement is
# disabled by default in 2.0.3. Enable it.
CPPFLAGS = -UPCMK_TIME_EMERGENCY_CGT

in

pacemaker (2.0.3-3ubuntu2) focal; urgency=medium

  * Forcibly switch from ftime to clock_gettime, since building with ftime now
    results in deprecation errors

 -- William Grant <email address hidden> Sat, 04 Apr 2020 19:15:34 +1100

I'll rebase my merge request.

Changed in pacemaker (Ubuntu):
assignee: Rafael David Tinoco (rafaeldtinoco) → nobody
Changed in pacemaker (Ubuntu):
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.