From: Mantis B. T. <no...@bu...> - 2009-09-25 12:41:02
|
A NOTE has been added to this issue. ====================================================================== http://bugs.bacula.org/view.php?id=1359 ====================================================================== Reported By: jgoerzen Assigned To: ====================================================================== Project: bacula Issue ID: 1359 Category: Storage Daemon Reproducibility: always Severity: major Priority: normal Status: feedback ====================================================================== Date Submitted: 2009-08-28 22:52 BST Last Modified: 2009-09-25 13:40 BST ====================================================================== Summary: Doesn't compile on Alpha Description: During the attempt to autobuild bacula 3 on Debian, this error was reported: make[1]: Entering directory `/build/buildd-bacula_3.0.2-3-alpha-1PG1hy/bacula-3.0.2/debian/tmp-build-sqlite3/src/stored' Compiling dev.c dev.c: In member function 'void DEVICE::init_backend()': dev.c:307: error: invalid conversion from 'int (*)(int, long unsigned int, ...)throw ()' to 'int (*)(int, int, ...)' make[1]: *** [dev.o] Error 1 make[1]: Leaving directory `/build/buildd-bacula_3.0.2-3-alpha-1PG1hy/bacula-3.0.2/debian/tmp-build-sqlite3/src/stored' make: *** [build-stamp-sqlite3] Error 2 The full error log is available at https://buildd.debian.org/fetch.cgi?pkg=bacula;ver=3.0.2-3;arch=alpha;stamp=1251420917 The line of source in question is d_ioctl = ::ioctl; Version 2.4.4 successfully built on this platform. ====================================================================== ---------------------------------------------------------------------- (0004556) ebollengier (administrator) - 2009-08-29 07:47 http://bugs.bacula.org/view.php?id=1359#c4556 ---------------------------------------------------------------------- We have a specific define for Alpha that maps ioctl argument to int. Does it mean that it should be mapped to long unsigned int ? Or it's a different architecture ? #ifdef __alpha__ #define OSF 1 #undef ioctl_req_t #define ioctl_req_t int #endif ---------------------------------------------------------------------- (0004557) kern (administrator) - 2009-08-29 09:17 http://bugs.bacula.org/view.php?id=1359#c4557 ---------------------------------------------------------------------- I don't understand why vendors don't simply follow the POSIX standard. Eric, for Alpha (and a few other that don't respect standards), the second argument of an ioctl call is "unsigned int" rather than "int". The definition you show above should be: #define ioctl_req_t unsigned int However, who knows if it is going to break something somewhere else. ---------------------------------------------------------------------- (0004562) jgoerzen (reporter) - 2009-08-29 14:59 http://bugs.bacula.org/view.php?id=1359#c4562 ---------------------------------------------------------------------- It appears that your #ifdef __alpha__ is for HP Tru64 UNIX (previously known as OSF/1) running on that platform. Linux also runs on that platform, and may have different semantics. Kern, my reading of the error suggests that it should be #define ioctl_req_t long unsigned int but I may be missing something. ---------------------------------------------------------------------- (0004563) jgoerzen (reporter) - 2009-08-29 15:02 http://bugs.bacula.org/view.php?id=1359#c4563 ---------------------------------------------------------------------- I should clarify. It is invalid to infer what OS is being used from what architecture is in use. You can't assume that an Alpha is running OSF/1, as Debian, NetBSD, etc. all run on it as well. ---------------------------------------------------------------------- (0004565) kern (administrator) - 2009-08-29 15:28 http://bugs.bacula.org/view.php?id=1359#c4565 ---------------------------------------------------------------------- Well, when we are compiling Bacula, we *must* know what OS is running. Perhaps it was a mistake for the author to use __alpha__ rather than the OS. This code was submitted by a user, so I don't exactly know what OS/platform it was for. Perhaps if you have the system in front of you, you can figure out what the correct #ifdefing should be. In general, it should be something like: #ifdef HAVE_xxx_OS ... ... #endif I suspect that we should leave the current __alpha__ #ifdefing alone and just add a new one for your case after it. What is actually used for ioctl_req_t varies a bit, but yes, you are right in the case of the error you were seeing (and for most of the silly non-POSIX compatible OSes) it should be: #define ioctl_req_t unsigned long For the system in question, I suggest you look in the system header files for what is really defined rather than relying on the output from g++. ---------------------------------------------------------------------- (0004568) kern (administrator) - 2009-08-29 15:35 http://bugs.bacula.org/view.php?id=1359#c4568 ---------------------------------------------------------------------- I forgot to mention that you can look in <bacula>/src/config.h after running ./configure to know which HAVE_XXX_OS is defined. ---------------------------------------------------------------------- (0004628) jgoerzen (reporter) - 2009-09-20 01:42 http://bugs.bacula.org/view.php?id=1359#c4628 ---------------------------------------------------------------------- This information has been posted at http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=544090: From: James Vega <jam...@de...> To: 54...@bu... Subject: Alpha information from albeniz.d.o Date: Sat, 19 Sep 2009 20:15:06 -0400 [Message part 1 (text/plain, inline)] Ran a test build on albeniz to get the requisite info. Hope that helps solve the issue. (sid)jamessan@albeniz:~/bacula-3.0.2$ grep _OS debian/tmp-build-sqlite3/src/config.h #define HAVE_LINUX_OS 1 /* #undef HAVE_FREEBSD_OS */ /* #undef HAVE_NETBSD_OS */ /* #undef HAVE_OPENBSD_OS */ /* #undef HAVE_BSDI_OS */ /* #undef HAVE_HPUX_OS */ /* #undef HAVE_SUN_OS */ /* #undef HAVE_IRIX_OS */ /* #undef HAVE_AIX_OS */ /* #undef HAVE_SGI_OS */ /* #undef HAVE_OSF1_OS */ /* #undef HAVE_DARWIN_OS */ (sid)jamessan@albeniz:~/bacula-3.0.2$ uname -a Linux albeniz 2.6.26-2-alpha-generic http://bugs.bacula.org/view.php?id=1 Wed Aug 19 22:14:00 UTC 2009 alpha GNU/Linux (sid)jamessan@albeniz:~/bacula-3.0.2$ dpkg-architecture DEB_BUILD_ARCH=alpha DEB_BUILD_ARCH_OS=linux DEB_BUILD_ARCH_CPU=alpha DEB_BUILD_ARCH_BITS=64 DEB_BUILD_ARCH_ENDIAN=little DEB_BUILD_GNU_CPU=alpha DEB_BUILD_GNU_SYSTEM=linux-gnu DEB_BUILD_GNU_TYPE=alpha-linux-gnu DEB_HOST_ARCH=alpha DEB_HOST_ARCH_OS=linux DEB_HOST_ARCH_CPU=alpha DEB_HOST_ARCH_BITS=64 DEB_HOST_ARCH_ENDIAN=little DEB_HOST_GNU_CPU=alpha DEB_HOST_GNU_SYSTEM=linux-gnu DEB_HOST_GNU_TYPE=alpha-linux-gnu -- James GPG Key: 1024D/61326D40 2003-09-02 James Vega <jam...@de...> ---------------------------------------------------------------------- (0004629) kern (administrator) - 2009-09-20 07:20 http://bugs.bacula.org/view.php?id=1359#c4629 ---------------------------------------------------------------------- Thank you for the most recent information. That and what John wrote made me realize that currently distinguish OS types, but in most of the code not machine architecture. In your case, it is apparently a different definition that depends on architecture. I think this is rather easy to fix, but I need one more confirmation in order to do it correctly. After doing your ./configure on the alpha, would you please copy the contents of <bacula-source>/src/host.h into the bug report. If it has #define DISTNAME "alpha" then I understand the problem and can create a patch. ---------------------------------------------------------------------- (0004630) jgoerzen (reporter) - 2009-09-23 16:55 http://bugs.bacula.org/view.php?id=1359#c4630 ---------------------------------------------------------------------- host.h has been posted to the Debian bug. I will attach. ---------------------------------------------------------------------- (0004634) kern (administrator) - 2009-09-25 13:40 http://bugs.bacula.org/view.php?id=1359#c4634 ---------------------------------------------------------------------- Unfortunately, the route I was taking will not work. I have come up with another idea. Please apply the attached patch to version 3.0.2. You should be able to apply it with: cd <bacula-source> patch -p2 <0001-Fix-Alpha-ifdefing-should-fix-bug-1359.patch ./configure <your options> make make install Please let me know if it resolves the problem. Issue History Date Modified Username Field Change ====================================================================== 2009-08-28 22:52 jgoerzen New Issue 2009-08-29 07:47 ebollengier Note Added: 0004556 2009-08-29 07:47 ebollengier Status new => feedback 2009-08-29 09:17 kern Note Added: 0004557 2009-08-29 14:59 jgoerzen Note Added: 0004562 2009-08-29 15:02 jgoerzen Note Added: 0004563 2009-08-29 15:28 kern Note Added: 0004565 2009-08-29 15:35 kern Note Added: 0004568 2009-09-20 01:42 jgoerzen Note Added: 0004628 2009-09-20 07:20 kern Note Added: 0004629 2009-09-23 16:55 jgoerzen Note Added: 0004630 2009-09-23 16:55 jgoerzen File Added: host.h 2009-09-25 13:37 kern File Added: 0001-Fix-Alpha-ifdefing-should-fix-bug-1359.patch 2009-09-25 13:40 kern Note Added: 0004634 ====================================================================== |