Recent dbus git master fails to be compiled using mingw32 cross compiler on linux. libdbus-win-init library contains c++ code ,currently only used on windows. The c++ compiler is detected, libdbus-win-init has been added as dependency of libdbus-1, but the libdbus-win-init target is not added to the makefiles. ../dbus/configure --host i686-w64-mingw32 --build x86_64-suse-linux --prefix=/usr/i686-w64-mingw32 --enable-abstract-sockets configure: loading site script /usr/share/site/x86_64-unknown-linux-gnu checking build system type... x86_64-suse-linux-gnu checking host system type... i686-w64-mingw32 checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for i686-w64-mingw32-strip... i686-w64-mingw32-strip checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking how to create a ustar tar archive... gnutar checking whether to enable maintainer-specific portions of Makefiles... yes checking whether make supports nested variables... yes checking for i686-w64-mingw32-gcc... i686-w64-mingw32-gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.exe checking for suffix of executables... .exe checking whether we are cross compiling... yes checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether i686-w64-mingw32-gcc accepts -g... yes checking for i686-w64-mingw32-gcc option to accept ISO C89... none needed checking for style of include used by make... GNU checking dependency style of i686-w64-mingw32-gcc... gcc3 checking whether i686-w64-mingw32-gcc and cc understand -c and -o together... yes checking for i686-w64-mingw32-g++... i686-w64-mingw32-g++ checking whether we are using the GNU C++ compiler... yes checking whether i686-w64-mingw32-g++ accepts -g... yes checking dependency style of i686-w64-mingw32-g++... gcc3 checking whether i686-w64-mingw32-g++ understands -c and -o together... yes checking how to run the C preprocessor... i686-w64-mingw32-gcc -E checking for grep that handles long lines and -e... /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define __EXTENSIONS__... yes checking for library containing strerror... none required checking for ANSI C header files... (cached) yes checking for inline... inline checking how to print strings... printf checking for a sed that does not truncate output... /usr/bin/sed checking for fgrep... /usr/bin/grep -F checking for ld used by i686-w64-mingw32-gcc... /usr/i686-w64-mingw32/bin/ld checking if the linker (/usr/i686-w64-mingw32/bin/ld) is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... /usr/bin/i686-w64-mingw32-nm -B checking the name lister (/usr/bin/i686-w64-mingw32-nm -B) interface... BSD nm checking whether ln -s works... yes checking the maximum length of command line arguments... 1572864 checking whether the shell understands some XSI constructs... yes checking whether the shell understands "+="... yes checking how to convert x86_64-suse-linux-gnu file names to i686-w64-mingw32 format... func_convert_file_nix_to_w32 checking how to convert x86_64-suse-linux-gnu file names to toolchain format... func_convert_file_noop checking for /usr/i686-w64-mingw32/bin/ld option to reload object files... -r checking for i686-w64-mingw32-objdump... i686-w64-mingw32-objdump checking how to recognize dependent libraries... file_magic ^x86 archive import|^x86 DLL checking for i686-w64-mingw32-dlltool... i686-w64-mingw32-dlltool checking how to associate runtime and link libraries... func_cygming_dll_for_implib checking for i686-w64-mingw32-ar... i686-w64-mingw32-ar checking for archiver @FILE support... @ checking for i686-w64-mingw32-strip... (cached) i686-w64-mingw32-strip checking for i686-w64-mingw32-ranlib... i686-w64-mingw32-ranlib checking command to parse /usr/bin/i686-w64-mingw32-nm -B output from i686-w64-mingw32-gcc object... ok checking for sysroot... no checking for i686-w64-mingw32-mt... no checking for mt... mt configure: WARNING: using cross tools not prefixed with host triplet checking if mt is a manifest tool... no checking for dlfcn.h... no checking for objdir... .libs checking if i686-w64-mingw32-gcc supports -fno-rtti -fno-exceptions... no checking for i686-w64-mingw32-gcc option to produce PIC... -DDLL_EXPORT -DPIC checking if i686-w64-mingw32-gcc PIC flag -DDLL_EXPORT -DPIC works... yes checking if i686-w64-mingw32-gcc static flag -static works... yes checking if i686-w64-mingw32-gcc supports -c -o file.o... yes checking if i686-w64-mingw32-gcc supports -c -o file.o... (cached) yes checking whether the i686-w64-mingw32-gcc linker (/usr/i686-w64-mingw32/bin/ld) supports shared libraries... yes checking whether -lc should be explicitly linked in... yes checking dynamic linker characteristics... Win32 ld.exe checking how to hardcode library paths into programs... immediate checking whether stripping libraries is possible... yes checking if libtool supports shared libraries... yes checking whether to build shared libraries... yes checking whether to build static libraries... yes checking how to run the C++ preprocessor... i686-w64-mingw32-g++ -E checking for ld used by i686-w64-mingw32-g++... /usr/i686-w64-mingw32/bin/ld checking if the linker (/usr/i686-w64-mingw32/bin/ld) is GNU ld... yes checking whether the i686-w64-mingw32-g++ linker (/usr/i686-w64-mingw32/bin/ld) supports shared libraries... yes checking for i686-w64-mingw32-g++ option to produce PIC... -DDLL_EXPORT -DPIC checking if i686-w64-mingw32-g++ PIC flag -DDLL_EXPORT -DPIC works... yes checking if i686-w64-mingw32-g++ static flag -static works... yes checking if i686-w64-mingw32-g++ supports -c -o file.o... yes checking if i686-w64-mingw32-g++ supports -c -o file.o... (cached) yes checking whether the i686-w64-mingw32-g++ linker (/usr/i686-w64-mingw32/bin/ld) supports shared libraries... yes checking dynamic linker characteristics... Win32 ld.exe checking how to hardcode library paths into programs... immediate checking for i686-w64-mingw32-pkg-config... /usr/bin/i686-w64-mingw32-pkg-config checking pkg-config is at least version 0.9.0... yes checking for i686-w64-mingw32-windres... i686-w64-mingw32-windres checking for i686-w64-mingw32-windres... i686-w64-mingw32-windres checking for GLIB... yes checking for DBUS_GLIB... yes checking for a Python interpreter with version >= 2.6... python checking for python... /usr/bin/python checking for python version... 2.7 checking for python platform... linux2 checking for python script directory... ${prefix}lib/python2.7/site-packages checking for python extension module directory... ${exec_prefix}lib64/python2.7/site-packages checking whether we are using the GNU C Library 2.1 or newer... no checking size of char... 1 checking size of short... 2 checking size of long... 4 checking size of int... 4 checking size of void *... 4 checking size of long long... 8 checking size of __int64... 8 checking 64-bit integer type... long long checking 32-bit integer type... int checking 16-bit integer type... short checking whether byte ordering is bigendian... no checking for an implementation of va_copy()... yes checking for an implementation of __va_copy()... yes checking whether va_lists can be copied by value... yes checking whether i686-w64-mingw32-gcc knows __sync_sub_and_fetch()... yes checking for library containing socket... no checking for gethostbyname... no checking for gethostbyname in -lnsl... no checking for vsnprintf... yes checking for vasprintf... no checking for nanosleep... no checking for usleep... yes checking for setenv... no checking for clearenv... no checking for unsetenv... no checking for socketpair... no checking for getgrouplist... no checking for fpathconf... no checking for setrlimit... no checking for poll... no checking for setlocale... yes checking for localeconv... yes checking for strtoll... yes checking for strtoull... yes checking for issetugid... no checking for getresuid... no checking syslog.h usability... no checking syslog.h presence... no checking for syslog.h... no checking for broken poll... no (cross compiling) checking for dirfd... no checking for DIR *dirp->dd_fd... no checking sys/resource.h usability... no checking sys/resource.h presence... no checking for sys/resource.h... no checking dirent.h usability... yes checking dirent.h presence... yes checking for dirent.h... yes checking execinfo.h usability... no checking execinfo.h presence... no checking for execinfo.h... no checking errno.h usability... yes checking errno.h presence... yes checking for errno.h... yes checking signal.h usability... yes checking signal.h presence... yes checking for signal.h... yes checking locale.h usability... yes checking locale.h presence... yes checking for locale.h... yes checking byteswap.h usability... no checking byteswap.h presence... no checking for byteswap.h... no checking for unistd.h... (cached) yes checking ws2tcpip.h usability... yes checking ws2tcpip.h presence... yes checking for ws2tcpip.h... yes checking wspiapi.h usability... yes checking wspiapi.h presence... yes checking for wspiapi.h... yes checking alloca.h usability... no checking alloca.h presence... no checking for alloca.h... no checking for posix getpwnam_r... yes checking whether socklen_t is defined... no checking sys/uio.h usability... no checking sys/uio.h presence... no checking for sys/uio.h... no checking sys/syslimits.h usability... no checking sys/syslimits.h presence... no checking for sys/syslimits.h... no checking whether MSG_NOSIGNAL is declared... no checking for ISO C99 varargs macros in C... yes checking for GNUC varargs macros... yes checking for struct cmsgcred... no checking for getpeerucred... no checking for getpeereid... no checking for pipe2... no checking for accept4... no checking for i686-w64-mingw32-pkg-config... (cached) /usr/bin/i686-w64-mingw32-pkg-config checking pkg-config is at least version 0.9.0... yes checking for XML_ParserCreate_MM in -lexpat... yes checking expat.h usability... yes checking expat.h presence... yes checking for expat.h... yes checking for is_selinux_enabled in -lselinux... no configure: WARNING: Sufficiently new SELinux library not found checking sys/inotify.h usability... no checking sys/inotify.h presence... no checking for sys/inotify.h... no checking for Linux epoll(4)... no checking sys/event.h usability... no checking sys/event.h presence... no checking for sys/event.h... no checking for kqueue... no checking launch.h usability... no checking launch.h presence... no checking for launch.h... no checking for launchctl... no checking for SYSTEMD... no checking for audit_log_user_avc_message in -laudit... no checking for ADT API... no checking for SCM_RIGHTS... not supported checking to see if compiler understands ... yes checking to see if compiler understands -Wall... yes checking to see if compiler understands -Wextra... yes checking to see if compiler understands -Wchar-subscripts... yes checking to see if compiler understands -Wmissing-declarations... yes checking to see if compiler understands -Wmissing-prototypes... yes checking to see if compiler understands -Wnested-externs... yes checking to see if compiler understands -Wpointer-arith... yes checking to see if compiler understands -Wcast-align... yes checking to see if compiler understands -Wno-address... yes checking to see if compiler understands -Wfloat-equal... yes checking to see if compiler understands -Wdeclaration-after-statement... yes checking to see if compiler understands -Werror... yes checking to see if compiler understands -Wno-unused-label... yes checking to see if compiler understands -Wno-error=unused-label... yes checking to see if compiler understands -Wno-missing-field-initializers... yes checking to see if compiler understands -Wno-error=missing-field-initializers... yes checking to see if compiler understands -Wno-unused-parameter... yes checking to see if compiler understands -Wno-error=unused-parameter... yes checking to see if compiler understands -Wno-sign-compare... yes checking to see if compiler understands -Wno-error=sign-compare... yes checking to see if compiler understands -Wno-pointer-sign... yes checking to see if compiler understands -Wno-error=pointer-sign... yes checking to see if compiler understands -Wno-type-limits... yes checking to see if compiler understands -Wno-error=type-limits... yes checking to see if compiler understands -fno-common... yes checking to see if compiler understands -fno-strict-aliasing... yes checking for doxygen... /usr/bin/doxygen checking whether to build Doxygen documentation... yes checking for xsltproc... xsltproc checking for xmlto... /usr/bin/xmlto checking whether to build XML documentation... yes checking crt_externs.h usability... no checking crt_externs.h presence... no checking for crt_externs.h... no checking for _NSGetEnviron... no checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating Doxyfile config.status: creating dbus/versioninfo.rc config.status: creating dbus/dbus-arch-deps.h config.status: creating bus/system.conf config.status: creating bus/session.conf config.status: creating bus/messagebus config.status: creating bus/messagebus-config config.status: creating bus/org.freedesktop.dbus-session.plist config.status: creating bus/rc.messagebus config.status: creating bus/dbus.service config.status: creating bus/dbus.socket config.status: creating Makefile config.status: creating dbus/Makefile config.status: creating bus/Makefile config.status: creating tools/Makefile config.status: creating test/Makefile config.status: creating test/name-test/Makefile config.status: creating doc/Makefile config.status: creating doc/dbus-cleanup-sockets.1.xml config.status: creating doc/dbus-daemon.1.xml config.status: creating doc/dbus-launch.1.xml config.status: creating doc/dbus-monitor.1.xml config.status: creating doc/dbus-run-session.1.xml config.status: creating doc/dbus-send.1.xml config.status: creating doc/dbus-uuidgen.1.xml config.status: creating dbus-1.pc config.status: creating dbus-1-uninstalled.pc config.status: creating test/data/valid-config-files/debug-allow-all.conf config.status: creating test/data/valid-config-files/debug-allow-all-sha1.conf config.status: creating test/data/valid-config-files-system/debug-allow-all-pass.conf config.status: creating test/data/valid-config-files-system/debug-allow-all-fail.conf config.status: creating test/data/valid-service-files/org.freedesktop.DBus.TestSuite.PrivServer.service config.status: creating test/data/valid-service-files/org.freedesktop.DBus.TestSuiteEchoService.service config.status: creating test/data/valid-service-files/org.freedesktop.DBus.TestSuiteForkingEchoService.service config.status: creating test/data/valid-service-files/org.freedesktop.DBus.TestSuiteSegfaultService.service config.status: creating test/data/valid-service-files/org.freedesktop.DBus.TestSuiteShellEchoServiceSuccess.service config.status: creating test/data/valid-service-files/org.freedesktop.DBus.TestSuiteShellEchoServiceFail.service config.status: creating test/data/valid-service-files-system/org.freedesktop.DBus.TestSuiteEchoService.service config.status: creating test/data/valid-service-files-system/org.freedesktop.DBus.TestSuiteSegfaultService.service config.status: creating test/data/valid-service-files-system/org.freedesktop.DBus.TestSuiteShellEchoServiceSuccess.service config.status: creating test/data/valid-service-files-system/org.freedesktop.DBus.TestSuiteShellEchoServiceFail.service config.status: creating test/data/invalid-service-files-system/org.freedesktop.DBus.TestSuiteNoExec.service config.status: creating test/data/invalid-service-files-system/org.freedesktop.DBus.TestSuiteNoUser.service config.status: creating test/data/invalid-service-files-system/org.freedesktop.DBus.TestSuiteNoService.service config.status: creating config.h config.status: config.h is unchanged config.status: executing depfiles commands config.status: executing libtool commands D-Bus 1.7.5 ============== prefix: exec_prefix: ${prefix} libdir: /lib libexecdir: /lib bindir: /bin sysconfdir: /etc localstatedir: /var datadir: /share source code location: ../dbus compiler: i686-w64-mingw32-gcc cflags: -Wall -Wextra -Wchar-subscripts -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wcast-align -Wno-address -Wfloat-equal -Wdeclaration-after-statement -Wno-unused-label -Wno-missing-field-initializers -Wno-unused-parameter -Wno-sign-compare -Wno-pointer-sign -Wno-type-limits -fno-common -fno-strict-aliasing -g -O2 cppflags: cxxflags: -g -O2 64-bit int: long long 32-bit int: int 16-bit int: short Doxygen: /usr/bin/doxygen xmlto: /usr/bin/xmlto Rebuilding generated files: yes gcc coverage profiling: no Building embedded tests: no Building modular tests: auto - with GLib: yes Building verbose mode: no Building assertions: no Building checks: yes Building bus stats API: no Building SELinux support: no Building inotify support: no Building kqueue support: no Building systemd support: no Building X11 code: no Building Doxygen docs: yes Building XML docs: yes Building cache support: yes Building launchd support: no Init scripts style: none Abstract socket names: System bus socket: /var/run/dbus/system_bus_socket System bus address: unix:path=/var/run/dbus/system_bus_socket System bus PID file: /var/run/dbus/pid Session bus listens on: autolaunch: Session clients connect to: autolaunch: Console auth dir: /var/run/console/ Console owner file: no Console owner file path: System bus user: messagebus Session bus services dir: /share/dbus-1/services 'make check' socket dir: /tmp ralf@bramsche:~/src/dbus-autotools-cross-build> make make all-recursive make[1]: Entering directory `/home/ralf/src/dbus-autotools-cross-build' Making all in dbus make[2]: Entering directory `/home/ralf/src/dbus-autotools-cross-build/dbus' make all-am make[3]: Entering directory `/home/ralf/src/dbus-autotools-cross-build/dbus' CC libdbus_1_la-dbus-address.lo CC libdbus_1_la-dbus-auth.lo CC libdbus_1_la-dbus-bus.lo CC libdbus_1_la-dbus-connection.lo CC libdbus_1_la-dbus-credentials.lo CC libdbus_1_la-dbus-errors.lo CC libdbus_1_la-dbus-keyring.lo CC libdbus_1_la-dbus-marshal-header.lo CC libdbus_1_la-dbus-marshal-byteswap.lo CC libdbus_1_la-dbus-marshal-recursive.lo CC libdbus_1_la-dbus-marshal-validate.lo CC libdbus_1_la-dbus-message.lo CC libdbus_1_la-dbus-misc.lo CC libdbus_1_la-dbus-nonce.lo CC libdbus_1_la-dbus-object-tree.lo CC libdbus_1_la-dbus-pending-call.lo CC libdbus_1_la-dbus-resources.lo CC libdbus_1_la-dbus-server.lo CC libdbus_1_la-dbus-server-debug-pipe.lo CC libdbus_1_la-dbus-server-socket.lo CC libdbus_1_la-dbus-server-win.lo CC libdbus_1_la-dbus-sha.lo CC libdbus_1_la-dbus-signature.lo CC libdbus_1_la-dbus-syntax.lo CC libdbus_1_la-dbus-timeout.lo CC libdbus_1_la-dbus-threads.lo CC libdbus_1_la-dbus-transport.lo CC libdbus_1_la-dbus-transport-socket.lo CC libdbus_1_la-dbus-watch.lo CC libdbus_1_la-dbus-dataslot.lo CC libdbus_1_la-dbus-file.lo CC libdbus_1_la-dbus-hash.lo CC libdbus_1_la-dbus-internals.lo CC libdbus_1_la-dbus-list.lo CC libdbus_1_la-dbus-marshal-basic.lo CC libdbus_1_la-dbus-memory.lo CC libdbus_1_la-dbus-mempool.lo CC libdbus_1_la-dbus-pipe.lo CC libdbus_1_la-dbus-string.lo CC libdbus_1_la-dbus-file-win.lo CC libdbus_1_la-dbus-pipe-win.lo CC libdbus_1_la-dbus-sysdeps-win.lo ../../dbus/dbus/dbus-sysdeps-win.c: In function '_dbus_poll': ../../dbus/dbus/dbus-sysdeps-win.c:1315:9: warning: unused variable 'msgp' [-Wunused-variable] char *msgp; ^ ../../dbus/dbus/dbus-sysdeps-win.c:1314:8: warning: unused variable 'msg' [-Wunused-variable] char msg[DBUS_POLL_CHAR_BUFFER_SIZE]; ^ CC libdbus_1_la-dbus-sysdeps-thread-win.lo CC libdbus_1_la-dbus-transport-win.lo CC libdbus_1_la-dbus-sysdeps.lo i686-w64-mingw32-windres versioninfo.rc -o versioninfo.o CCLD libdbus-1.la libtool: link: cannot find the library `libdbus-init-win.la' or unhandled argument `libdbus-init-win.la' make[3]: *** [libdbus-1.la] Fehler 1 make[3]: Leaving directory `/home/ralf/src/dbus-autotools-cross-build/dbus' make[2]: *** [all] Fehler 2 make[2]: Leaving directory `/home/ralf/src/dbus-autotools-cross-build/dbus' make[1]: *** [all-recursive] Fehler 1 make[1]: Leaving directory `/home/ralf/src/dbus-autotools-cross-build' make: *** [all] Fehler 2 ralf@bramsche:~/src/dbus-autotools-cross-build>
Have you tried running autoreconf? I'm pretty sure this cross-compile worked for me.
(In reply to comment #1) > Have you tried running autoreconf? I'm pretty sure this cross-compile worked > for me. yes, same results. Further investigation shows that this seems to be a Makefile.am dependency problem because manual compiling the target works. > cd <buildroot>/dbus > make libdbus-init-win.la CXX dbus-init-win.lo CXXLD libdbus-init-win.la Linking than works.
Build logs with "silent rules" aren't great for this sort of thing - "make ... V=1" to see what the compiler/linker is doing. I see what the problem is, though: libdbus_1_la_DEPENDENCIES = $(dbus_res) That's overwriting the dependencies completely - libdbus-1.la won't be recompiled unless the $(dbus_res) change, which they usually don't.
Created attachment 84709 [details] [review] libdbus-1.la: have proper dependencies on Windows Assigning to libdbus_1_la_DEPENDENCIES defeats Automake's normal dependency logic, which makes libdbus-1.la depend on all the static libraries that will go into it (it still had a corrct dependency on the other objects, which go through a separate variable). This meant libdbus-init-win wasn't necessarily built first. Use EXTRA_libdbus_1_la_DEPENDENCIES to avoid that problem.
(In reply to comment #4) > Created attachment 84709 [details] [review] [review] > libdbus-1.la: have proper dependencies on Windows > > Assigning to libdbus_1_la_DEPENDENCIES defeats Automake's normal > dependency logic, which makes libdbus-1.la depend on all the > static libraries that will go into it (it still had a corrct dependency > on the other objects, which go through a separate variable). > This meant libdbus-init-win wasn't necessarily built first. > > Use EXTRA_libdbus_1_la_DEPENDENCIES to avoid that problem. works as expected.
(In reply to comment #5) > works as expected. I'll assume that was a positive review... (please be clear about whether you're saying "yes, I reviewed this and it looks good" or not, our review policy relies on it). Fixed in git, will be in 1.7.6.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.