[LU-3011] client build fails on ubuntu 12.04 Created: 22/Mar/13  Updated: 05/Nov/14  Resolved: 05/Nov/14

Status: Closed
Project: Lustre
Component/s: None
Affects Version/s: Lustre 2.4.0
Fix Version/s: Lustre 2.4.0

Type: Bug Priority: Minor
Reporter: Robert Read (Inactive) Assignee: WC Triage
Resolution: Fixed Votes: 0
Labels: None

Severity: 3
Rank (Obsolete): 7332

 Description   

Building current master (19d5b835) on ubuntu 12.04 with kernel 3.2.0-35, though the errors are actually building userspace code. First error is:

gcc -DHAVE_CONFIG_H -I. -I../..  -D__arch_lib__ -D_LARGEFILE64_SOURCE=1 -include /root/lustre/config.h -I/root/lustre/libcfs/include -I/root/lustre/lnet/include -I/root/lustre/lustre/include -D_FORTIFY_SOURCE=2 -g -Wall -fPIC -D_GNU_SOURCE -Wall -g -O2 -Werror -c -o libcfs_a-fail.o `test -f 'fail.c' || echo './'`fail.c
In file included from /root/lustre/lustre/include/lprocfs_status.h:54:0,
                 from /root/lustre/lustre/include/obd_support.h:42,
                 from /root/lustre/lustre/include/liblustre.h:500,
                 from fail.c:37:
/root/lustre/lustre/include/lustre/lustre_idl.h: In function ‘fid_ostid_unpack’:
/root/lustre/lustre/include/lustre/lustre_idl.h:632:17: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘obd_seq’ [-Werror=format]
/root/lustre/lustre/include/lustre/lustre_idl.h:632:17: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘obd_id’ [-Werror=format]
/root/lustre/lustre/include/lustre/lustre_idl.h:644:26: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘obd_seq’ [-Werror=format]
/root/lustre/lustre/include/lustre/lustre_idl.h:644:26: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘obd_id’ [-Werror=format]
/root/lustre/lustre/include/lustre/lustre_idl.h:657:26: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘obd_seq’ [-Werror=format]
/root/lustre/lustre/include/lustre/lustre_idl.h:657:26: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘obd_id’ [-Werror=format]
/root/lustre/lustre/include/lustre/lustre_idl.h:666:17: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘obd_seq’ [-Werror=format]
/root/lustre/lustre/include/lustre/lustre_idl.h:666:17: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘obd_id’ [-Werror=format]
/root/lustre/lustre/include/lustre/lustre_idl.h: In function ‘fid_ostid_pack’:
/root/lustre/lustre/include/lustre/lustre_idl.h:702:3: error: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘__u64’ [-Werror=format]
/root/lustre/lustre/include/lustre/lustre_idl.h: In function ‘ostid_seq’:
/root/lustre/lustre/include/lustre/lustre_idl.h:718:17: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘obd_seq’ [-Werror=format]
/root/lustre/lustre/include/lustre/lustre_idl.h:718:17: error: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 4 has type ‘obd_id’ [-Werror=format]
gcc -DHAVE_CONFIG_H -I. -I../..  -D__arch_lib__ -D_LARGEFILE64_SOURCE=1 -include /root/lustre/config.h -I/root/lustre/libcfs/include -I/root/lustre/lnet/include -I/root/lustre/lustre/include -D_FORTIFY_SOURCE=2 -g -Wall -fPIC -D_GNU_SOURCE -Wall -g -O2 -Werror -c -o libcfs_a-libcfs_cpu.o `test -f 'libcfs_cpu.c' || echo './'`libcfs_cpu.c
gcc -DHAVE_CONFIG_H -I. -I../..  -D__arch_lib__ -D_LARGEFILE64_SOURCE=1 -include /root/lustre/config.h -I/root/lustre/libcfs/include -I/root/lustre/lnet/include -I/root/lustre/lustre/include -D_FORTIFY_SOURCE=2 -g -Wall -fPIC -D_GNU_SOURCE -Wall -g -O2 -Werror -c -o libcfs_a-libcfs_mem.o `test -f 'libcfs_mem.c' || echo './'`libcfs_mem.c
cc1: all warnings being treated as errors
make[6]: *** [libcfs_a-fail.o] Error 1
make[6]: *** Waiting for unfinished jobs....
make[6]: Leaving directory `/root/lustre/libcfs/libcfs'
make[5]: *** [all-recursive] Error 1
make[5]: Leaving directory `/root/lustre/libcfs/libcfs'
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory `/root/lustre/libcfs'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/root/lustre'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/root/lustre'
make[1]: *** [build-stamp] Error 2
make[1]: Leaving directory `/root/lustre'
dpkg-buildpackage: error: debian/rules build gave error exit status 2
make: *** [debs] Error 2

The second error occurs when linking the utils; the readline symbols are not found. The issue seems to be because $(LIBREADLINE) is referenced before the object files that use it. Moving it to the end fixes this, but I wonder why it wsan't there to begin with...

Testing a patch now...



 Comments   
Comment by Robert Read (Inactive) [ 22/Mar/13 ]

http://review.whamcloud.com/5803

Comment by Robert Read (Inactive) [ 22/Mar/13 ]

The build failures for the patch looke like the inverse of the original failure on 12.04 - the configure check for userspace "long long" size is failing because the test code silently fails to compile. Most likely because the option I added, -Wno-error=unused-but-set-variable, isn't available on the versions of gcc in SLES 11 and Ubuntu 10.04.

I don't know how to fix the autoconf file to make these options platform/compiler specific. The big stick approach would be to just remove the -Werror from this test case. According to git blame, Brian add this parameter a couple years ago. Brian, do you feel strong about the -Werror here?

# check userland __u64 type
AC_MSG_CHECKING([userspace __u64 is long long type])
tmp_flags="$CFLAGS"
CFLAGS="$CFLAGS -Werror"
AC_COMPILE_IFELSE([
        #include <stdio.h>
        #include <linux/types.h>
        #include <linux/stddef.h>
        int main(void) {
                unsigned long long *data1;
                __u64 *data2 = NULL;

                data1 = data2;
                return 0;
        }
],[
        AC_MSG_RESULT([yes])
        AC_DEFINE(HAVE_USER__U64_LONG_LONG, 1,
                  [__u64 is long long type])
],[
        AC_MSG_RESULT([no])
])
CFLAGS="$tmp_flags"
Comment by Brian Murrell (Inactive) [ 25/Mar/13 ]

I don't feel strongly about the -Werror, just so long as removing it doesn't break the test.

Comment by Robert Read (Inactive) [ 25/Mar/13 ]

Currently, having it there is causing the test fail silently on some platforms, so removing probably won't be worse than that.

Comment by Jodi Levi (Inactive) [ 22/Apr/13 ]

Patch landed; however, additional comments make it seem there is more to do? Or can this ticket be closed?

Generated at Sat Feb 10 01:30:11 UTC 2024 using Jira 9.4.14#940014-sha1:734e6822bbf0d45eff9af51f82432957f73aa32c.