I recently tried to build dbus from the dbus-1.10 branch with cmake and run dbus-daemon.exe --session, which fails with the message Failed to start message bus: Address 'autolaunch' already used After a switch to dbus-1.8 branch, followed by a recompile, a run with the same command line does not fail. dbus verbose prints out the lines below, which may give a hint about the root cause. What I can see is that: First the daemon checks if the bus address is published [1]. After publishing the bus address [2], the daemon asks if the bus address is published [3], which is true and is interpreted as error condition. It looks that something in the daemon initialization logic has been changed. 8: [dbus/dbus-memory.c(262):_dbus_decrement_fail_alloc_counter] TODO: memory allocation testing errors disabled for now 8: [dbus/dbus-dataslot.c(135):_dbus_data_slot_allocator_alloc] Allocated slot 0 on allocator 6DBE4338 total 1 slots allocated 1 used 8: [dbus/dbus-socket-set-poll.c(98):_dbus_socket_set_poll_new] new socket set at 00241590 8: [dbus/dbus-file-win.c(134):_dbus_file_get_contents] file S:\xxxx\src\dbus-1-cmake-cross-x86-build\bus\session.conf hnd 00000088 opened 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 1000000000 for limit max_incoming_bytes 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 250000000 for limit max_incoming_unix_fds 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 1000000000 for limit max_outgoing_bytes 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 250000000 for limit max_outgoing_unix_fds 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 1000000000 for limit max_message_size 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 120000 for limit service_start_timeout 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 240000 for limit auth_timeout 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 150000 for limit pending_fd_timeout 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 100000 for limit max_completed_connections 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 10000 for limit max_incomplete_connections 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 100000 for limit max_connections_per_user 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 10000 for limit max_pending_service_starts 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 50000 for limit max_names_per_connection 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 50000 for limit max_match_rules_per_connectio 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 50000 for limit max_replies_per_connection 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 1000000000 for limit max_incoming_bytes 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 250000000 for limit max_incoming_unix_fds 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 1000000000 for limit max_outgoing_bytes 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 250000000 for limit max_outgoing_unix_fds 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 1000000000 for limit max_message_size 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 120000 for limit service_start_timeout 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 240000 for limit auth_timeout 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 150000 for limit pending_fd_timeout 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 100000 for limit max_completed_connections 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 10000 for limit max_incomplete_connections 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 100000 for limit max_connections_per_user 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 10000 for limit max_pending_service_starts 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 50000 for limit max_names_per_connection 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 50000 for limit max_match_rules_per_connection 8: [bus/config-parser.c(2647):bus_config_parser_content] Loaded value 50000 for limit max_replies_per_connection 8: [dbus/dbus-sysdeps-win.c(1029):_dbus_getsid] _dbus_getsid() got 'S-1-5-21-0-0-0-1000' and returns 1 [1] 8: [dbus/dbus-sysdeps-win.c(2893):_dbus_daemon_is_session_bus_address_published] scope 8: [dbus/dbus-server.c(165):_dbus_server_init_base] Initialized server on address tcp:host=localhost,port=51841,family=ipv4,guid=9c02e5e919e9b2c38a69520755fa030c [2] 8: [dbus/dbus-sysdeps-win.c(2990):_dbus_daemon_publish_session_bus_address] published session bus address at DBusDaemonAddressInfo 8: [dbus/dbus-watch.c(318):_dbus_watch_list_set_functions] Adding a read watch on fd 136 using newly-set add watch function 8: [dbus/dbus-socket-set-poll.c(146):socket_set_poll_add] before adding fd 136 to 00241590, 0 en/0 res/1 alloc [3]8: [dbus/dbus-sysdeps-win.c(2893):_dbus_daemon_is_session_bus_address_published] scope 8: [bus/bus.c(1099):bus_context_unref] Finalizing bus context 00241400 8: [dbus/dbus-watch.c(354):_dbus_watch_list_set_functions] Removing all pre-existing watches 8: [dbus/dbus-socket-set-poll.c(221):socket_set_poll_remove] after removing fd 136 from 00241590, 0 en/0 res/1 alloc 8: [dbus/dbus-watch.c(686):dbus_watch_set_data] Setting watch fd 4294967295 data to data = 00000000 function = 00000000 from data = 00000000 function = 00000000 8: [dbus/dbus-sysdeps-win.c(510):_dbus_close_socket] _dbus_close_socket: socket=136, 8: [dbus/dbus-socket-set-poll.c(68):socket_set_poll_free] freed socket set 00241590 8: [dbus/dbus-dataslot.c(175):_dbus_data_slot_allocator_free] Freeing slot 0 on allocator 6DBE4338 total 1 allocated 1 used Failed to start message bus: Address 'autolaunch' already used
> 8: [dbus/dbus-file-win.c(134):_dbus_file_get_contents] file S:\xxxx\src\dbus-1-cmake-cross-x86-build\bus\session.conf hnd 00000088 opened dbus-daemon.exe --session should not be reading a file from the build directory. On Unix, dbus-daemon --session *always* uses its installation directory (${datadir}/dbus-1), and we use environment variables or --config-file if we want to substitute files in the build directory (for example see installcheck_environment in test/Makefile.am). It's fine for dbus-daemon.exe --session to autodetect its ${prefix} using _dbus_get_install_root() if that makes your life easier on Windows, but it shouldn't really autodetect "I am in the build directory" and change its configuration for that, because being in the build directory is a significant semantic change. The reason you're getting this error is that dbus-daemon is seeing two instances of <listen>autolaunch:</code>: one from bus/session.conf, and one from the old ${sysconfdir}/dbus-1/session.conf from a version < 1.9.18 (which is <include>'d by bus/session.conf). ${sysconfdir}/dbus-1/session.conf would be overwritten with one that does not include <listen> when you do "make install", but it looks as though you haven't actually installed dbus-daemon and are running it uninstalled, with configuration that refers to a previously installed ${sysconfdir}. On closer inspection, _dbus_get_config_file_name() also needs updating for 1.10, because it hard-codes "etc\\". This was in fact always wrong if someone used a non-default ${sysconfdir}; but in 1.10 it will fail all the time, because the bus setup is installed to ${datadir} (Autotools) or share/dbus-1 (CMake).
Created attachment 118326 [details] [review] Make Windows dbus-daemon look for the config file we install The canonical location for bus setup changed from ${sysconfdir}/dbus-1 to ${datadir}/dbus-1 (or their CMake equivalents) in version 1.9.18. Also stop trying to use bus/session.conf from the build tree, which will not work if our ${prefix} contains an older ${sysconfdir}/dbus-1/session.conf. --- Please try this patch (cross-compiles successfully; untested). You will need to "make install" into some suitable prefix. I think this would be OK for 1.10.
(In reply to Simon McVittie from comment #1) > > 8: [dbus/dbus-file-win.c(134):_dbus_file_get_contents] file S:\xxxx\src\dbus-1-cmake-cross-x86-build\bus\session.conf hnd 00000088 opened > > dbus-daemon.exe --session should not be reading a file from the build > directory. On Unix, dbus-daemon --session *always* uses its installation > directory (${datadir}/dbus-1), and we use environment variables or > --config-file if we want to substitute files in the build directory (for > example see installcheck_environment in test/Makefile.am). dbus-launch.exe always uses --session to run the daemon, which means there will be no way to run it with a session.conf from a build dir :-( > It's fine for dbus-daemon.exe --session to autodetect its ${prefix} using > _dbus_get_install_root() if that makes your life easier on Windows, but it > shouldn't really autodetect "I am in the build directory" and change its > configuration for that, because being in the build directory is a > significant semantic change. dbus_get_install_root() running from a build root on windows will return the directory where libdbus-1.3.dll lives, which is <build-root>/dbus with autotools and <build-root> with cmake. For the latter creating the *.conf file and related dir into <build-dir>/share/dbus-1 will let --session mode work again.
(In reply to Ralf Habacker from comment #3) > dbus-launch.exe always uses --session to run the daemon, which means there > will be no way to run it with a session.conf from a build dir :-( Don't use dbus-launch.exe to run uninstalled binaries, then? dbus-launch on Unix uses --session too, unless you specifically pass a --config-file argument to it. To debug an uninstalled dbus-daemon on Unix, we'd normally run that uninstalled dbus-daemon directly, with either --session or --config-file, and without using dbus-launch. > dbus_get_install_root() running from a build root on windows will return the > directory where libdbus-1.3.dll lives, which is <build-root>/dbus with > autotools and <build-root> with cmake. For the latter creating the *.conf > file and related dir into <build-dir>/share/dbus-1 will let --session mode > work again. D-Bus is not (primarily) designed to be run from a build directory; it is designed to be run after installation. If it happens to work from a build directory some of the time, that isn't actively harmful, but I don't think we should introduce more complexity to support it either. If you do copy session.conf into ${builddir}/share/dbus-1, then it will still say "<include ignore_missing="yes">/myprefix/etc/dbus-1/session.conf</include>"; and if /myprefix still includes the session.conf from an older version of D-Bus, then it will still see two <listen>autolaunch:</listen> directives, and it will still fail in this way. The solution is to not mix the configuration of a newly built dbus with the configuration of an older dbus. Move the old one out of the way (if you want to keep it), "make install" (overwriting the old session.conf if you didn't already move it out of the way), *then* test the new one.
(In reply to Simon McVittie from comment #4) > If you do copy session.conf into ${builddir}/share/dbus-1, then it will > still say "<include > ignore_missing="yes">/myprefix/etc/dbus-1/session.conf</include>"; This and similar absolute pathes does not work on windows, because the installation prefix is not known on configure/build time. It should be > ignore_missing="yes">etc/dbus-1/session.conf</include>"; and relative to the path returned by dbus_get_install_root().
(In reply to Ralf Habacker from comment #5) > This and similar absolute pathes does not work on windows, because the > installation prefix is not known on configure/build time. If necessary we can make it <include ignore_missing="yes">@configinclude@/session.conf</include> and subst different values of @configinclude@ for Unix and Windows? Would that solve this for you?
(In reply to Ralf Habacker from comment #5) > It should be > > > ignore_missing="yes">etc/dbus-1/session.conf</include>"; > > and relative to the path returned by dbus_get_install_root(). That can't work, because relative paths already mean something (they are relative to the directory in which the config file was found). Relocating absolute paths through _dbus_replace_install_prefix() would be OK.
(In reply to Simon McVittie from comment #7) > (In reply to Ralf Habacker from comment #5) > > It should be > > > > > ignore_missing="yes">etc/dbus-1/session.conf</include>"; > > > > and relative to the path returned by dbus_get_install_root(). > > That can't work, because relative paths already mean something (they are > relative to the directory in which the config file was found). Indeed, a reference to relative path session.d from share/dbus-1/session.conf relates to share/dbus-1/session.d, which is used in all dbus versions. The above mentioned line in share/dbus-1/session.conf should be <include ignore_missing="yes">../../etc/dbus-1/session.conf</include>"; Thanks for clarification. :-)
(In reply to Simon McVittie from comment #6) > (In reply to Ralf Habacker from comment #5) > > This and similar absolute pathes does not work on windows, because the > > installation prefix is not known on configure/build time. > > If necessary we can make it > > <include ignore_missing="yes">@configinclude@/session.conf</include> > > and subst different values of @configinclude@ for Unix and Windows? Would > that solve this for you? yes
(In reply to Ralf Habacker from comment #8) > The above mentioned line in share/dbus-1/session.conf should be > <include ignore_missing="yes">../../etc/dbus-1/session.conf</include>"; I would really rather not write ../.. sequences into the configuration files. I think using _dbus_replace_install_prefix() should work, assuming <https://bugs.freedesktop.org/show_bug.cgi?id=83539#c32> can be fixed up and applied.
Created attachment 118347 [details] [review] Add a DBusString-based version of _dbus_replace_install_prefix For the moment, this is just a wrapper around the version that uses static string buffers, but in the development branch it should be rewritten to use DBusString throughout. --- Compiles; untested. Please review and test. The intended result is that if you configure for prefix /CONF, install to C:/RUN and run, then the config file will say <include>/CONF/etc/dbus-1/session.conf</include>, but we will actually load C:/RUN/etc/dbus-1/session.conf instead. If you insist on supporting running-from-built-tree, you might also need some CMake build-system changes to copy configuration files where the dbus-daemon will expect them. <https://bugs.freedesktop.org/show_bug.cgi?id=83539#c33> is probably also necessary to make this actually useful.
Created attachment 118348 [details] [review] Replace build-time prefix with installation prefix to include config files --- See previous comment for test instructions. All three patches from this bug will be needed, and probably the one from Bug #83539 as well.
(In reply to Simon McVittie from comment #10) > (In reply to Ralf Habacker from comment #8) > > The above mentioned line in share/dbus-1/session.conf should be > > <include ignore_missing="yes">../../etc/dbus-1/session.conf</include>"; > > I would really rather not write ../.. sequences into the configuration files. > > I think using _dbus_replace_install_prefix() should work, assuming > <https://bugs.freedesktop.org/show_bug.cgi?id=83539#c32> can be fixed up and > applied. I do not agree. Consider the following example from a cross compile dbus installation bundled with a KDE application on Windows as done for umbrello https://build.opensuse.org/package/show?project=windows%3Amingw%3Awin32&package=mingw32-umbrello-installer There is c:\Program Files (x86)\umbrello\share\dbus-1/session.conf <include ignore_missing="yes">/usr/i686-w64-mingw32/sys-root/mingw/etc/dbus-1/session.conf</include>"; Having a full installation path coming from the build system in a configuration file which has nothing to do with the real installation path and is somehow magically converted to a real path looks ugly and would increase people complaining about invalid pathes in configuration files. Instead <include ignore_missing="yes">../../etc/dbus-1/session.conf</include>"; this is full transparant and easily to follow: "from this directory go two dirs up and down to etc/dbus-1" Also using relative pathes in such use cases is a common pattern used several linux and mingw32 packages like docbook https://build.opensuse.org/package/show/windows:mingw:win32/mingw32-docbook_4 (see for variable rel_xml_docbook_dtd_dir)
(In reply to Ralf Habacker from comment #13) > <include ignore_missing="yes">../../etc/dbus-1/session.conf</include>"; > > this is full transparant and easily to follow: "from this directory go two > dirs up and down to etc/dbus-1" If you insist. I'm really not keen on playing "count the ../.." on Unix (and replacing directories with symbolic links can break the expected ../.. resolution in some circumstances), so if you implement a build-system patch to do this, I would strongly prefer it to be Windows-specific. Both our build systems can do OS conditionals, though, so that should be straightforward. It looks as though redefining DBUS_SYSCONFDIR should be sufficient, either on Windows with both build systems, or just on Windows with CMake (depending which one you care about). That variable isn't currently used for anything else. It would probably be good to rename it to RELATIVE_SYSCONFDIR with a comment about "on Windows this is relative to the bus setup in /usr/share/dbus-1 to allow relocation", so that its purpose is clear.
(In reply to Simon McVittie from comment #11) > Add a DBusString-based version of _dbus_replace_install_prefix Even if you don't want Attachment #118348 [details] for config files, this change is also relevant to the existing support for relocatable service files, and getting rid of buffer-overflow-prone strcat() from the Windows support code (see Bug #83539 for more on that).
Comment on attachment 118326 [details] [review] Make Windows dbus-daemon look for the config file we install looks good Applied to dbus-1.10
I did run manual-paths with remaining patches applied and got: cmake: dbus_get_install_root() returned 'S:\xxx\src\dbus-cmake-cross-x86-build\' default service dir: S:\xxx\src\dbus-cmake-cross-x86-build\shareshare/dbus-1/services default service dir: C:\Program Files\Common Files/dbus-1/services replaced 'bin/dbus-daemon' by 'sharesharebin/dbus-daemonbin/dbus-daemon' replaced 'c:\Windows\System32\testfile' by 'sharesharebin/dbus-daemonbin/dbus-daemonc:\Windows\System32\testfilec:\Windows\System32\testfile' autotools dbus_get_install_root() returned 'S:\xxx\src\dbus-autotools-cross-build\dbus\.libs\' default service dir: S:/x/src/dbus-autotools-cross-build/dbus/.libs/share/dbus-1/services default service dir: C:\Program Files\Common Files/dbus-1/services replaced '/bin/dbus-daemon' by 'S:/xxx/src/dbus-autotools-cross-build/dbus/.libs/bin/dbus-daemon' replaced 'c:\Windows\System32\testfile' by 'S:/xxx/src/dbus-autotools-cross-build/dbus/.libs/bin/dbus-daemonc:\Windows\System32\testfilec:\Windows\System32\testfile'
Please test this sort of thing from an installed tree, instead of or as well as from within the build tree; I think that's the more important thing to have working. I'd suggest something like this: * build in S:\xxx\src\dbus-cmake-cross-x86-build * configure with --prefix=/prefix or the CMake equivalent * install in C:\dbus-install or something so that you can easily distinguish between configure-time paths (which will start with /prefix) and runtime-discovered paths (C:/dbus-install). (In reply to Ralf Habacker from comment #17) > S:\xxx\src\dbus-cmake-cross-x86-build\shareshare/dbus-1/services What were you expecting? S:\xxx\src\dbus-cmake-cross-x86-build\share/dbus-1/services? > default service dir: C:\Program Files\Common Files/dbus-1/services Looks valid, apart from possibly some / <-> \ confusion? > replaced 'bin/dbus-daemon' by 'sharesharebin/dbus-daemonbin/dbus-daemon' What is the expected result here? > replaced 'c:\Windows\System32\testfile' by > 'sharesharebin/dbus-daemonbin/dbus-daemonc:\Windows\System32\testfilec: > \Windows\System32\testfile' This looks like incorrect use of strcat() where we intended strcpy() (Bug #83539). Did you apply Attachment #118346 [details]? > replaced 'c:\Windows\System32\testfile' by > 'S:/xxx/src/dbus-autotools-cross-build/dbus/.libs/bin/dbus-daemonc: > \Windows\System32\testfilec:\Windows\System32\testfile' This also looks like it needs Attachment #118346 [details].
(In reply to Simon McVittie from comment #18) > Please test this sort of thing from an installed tree, instead of or as well > as from within the build tree; I think that's the more important thing to > have working. > > I'd suggest something like this: > > * build in S:\xxx\src\dbus-cmake-cross-x86-build > * configure with --prefix=/prefix or the CMake equivalent > * install in C:\dbus-install or something see below > This also looks like it needs Attachment #118346 [details]. applied additional this patch and got: running manual-paths cmake build on native host -> looks okay bus_get_install_root() returned 'S:\dbus-install-cmake\usr\i686-w64-mingw32\sys-root\mingw\'looks default service dir: S:/dbus-install-cmake/usr/i686-w64-mingw32/sys-root/mingw/share/dbus-1/services default service dir: C:\Program Files\Common Files/dbus-1/services replaced '/usr/i686-w64-mingw32/sys-root/mingw/bin/dbus-daemon' by 'S:/dbus-install-cmake/usr/i686-w64-mingw32/sys-root/mingw/bin/dbus-daemon' replaced 'c:\Windows\System32\testfile' by 'c:/Windows/System32/testfile' running manual-paths cmake build running with wine -> looks okay bus_get_install_root() returned 's:\dbus-install-cmake\usr\i686-w64-mingw32\sys-root\mingw\' default service dir: s:/dbus-install-cmake/usr/i686-w64-mingw32/sys-root/mingw/share/dbus-1/services default service dir: C:\Program Files\Common Files/dbus-1/services replaced '/usr/i686-w64-mingw32/sys-root/mingw/bin/dbus-daemon' by 's:/dbus-install-cmake/usr/i686-w64-mingw32/sys-root/mingw/bin/dbus-daemon' replaced 'c:\Windows\System32\testfile' by 'c:/Windows/System32/testfile' running manual-paths cmake build running with wine into build root -> looks okay dbus_get_install_root() returned 'Z:\home\xxxx\src\dbus-master-cmake-cross-build\' default service dir: Z:/home/xxxx/src/dbus-master-cmake-cross-build/share/dbus-1/services default service dir: C:\Program Files\Common Files/dbus-1/services replaced '/usr/i686-w64-mingw32/sys-root/mingw/bin/dbus-daemon' by 'Z:/home/xxxx/src/dbus-master-cmake-cross-build/bin/dbus-daemon' replaced 'c:\Windows\System32\testfile' by 'c:/Windows/System32/testfile' compiling tests with autotools seems to be broken: ./dbus/configure --cache-file=mingw32-config.cache --host=i686-w64-mingw32 --build=x86_64-suse-linux-gnu --target=i686-w64-mingw32 --prefix=/usr/i686-w64-mingw32/sys-root/mingw --exec-prefix=/usr/i686-w64-mingw32/sys-root/mingw --bindir=/usr/i686-w64-mingw32/sys-root/mingw/bin --sbindir=/usr/i686-w64-mingw32/sys-root/mingw/sbin --sysconfdir=/usr/i686-w64-mingw32/sys-root/mingw/etc --datadir=/usr/i686-w64-mingw32/sys-root/mingw/share --includedir=/usr/i686-w64-mingw32/sys-root/mingw/include --libdir=/usr/i686-w64-mingw32/sys-root/mingw/lib --libexecdir=/usr/i686-w64-mingw32/sys-root/mingw/libexec --localstatedir=/usr/i686-w64-mingw32/sys-root/mingw/var --sharedstatedir=/usr/i686-w64-mingw32/sys-root/mingw/com --mandir=/usr/i686-w64-mingw32/sys-root/mingw/share/man --infodir=/usr/i686-w64-mingw32/sys-root/mingw/share/info --enable-maintainer-mode --disable-static --enable-verbose-mode --enable-tests --enable-embedded-tests --enable-checks --enable-asserts --disable-xml-docs --disable-doxygen-docs ... make CC test-utils-glib.lo ../../dbus-master/test/test-utils-glib.c: In function 'test_kill_pid': ../../dbus-master/test/test-utils-glib.c:396:11: warning: comparison between pointer and integer if (pid != NULL) ^ ../../dbus-master/test/test-utils-glib.c:397:23: warning: passing argument 1 of 'TerminateProcess' makes pointer from integer without a cast [-Wint-conversion] TerminateProcess (pid, 1); ^ In file included from /home/sysroot-mingw/include/winbase.h:29:0, from /home/sysroot-mingw/include/windows.h:70, from /home/sysroot-mingw/include/winsock2.h:23, from /home/sysroot-mingw/include/ws2tcpip.h:17, from ../../dbus-master/dbus/dbus-sysdeps.h:66, from ../../dbus-master/dbus/dbus-internals.h:33, from ../../dbus-master/test/test-utils.h:10, from ../../dbus-master/test/test-utils-glib.h:34, from ../../dbus-master/test/test-utils-glib.c:28: /home/sysroot-mingw/include/processthreadsapi.h:81:29: note: expected 'HANDLE {aka void *}' but argument is of type 'GPid {aka int}' WINBASEAPI WINBOOL WINAPI TerminateProcess (HANDLE hProcess, UINT uExitCode); ^ ../../dbus-master/test/test-utils-glib.c: In function 'test_init': ../../dbus-master/test/test-utils-glib.c:434:3: warning: implicit declaration of function 'alarm' [-Wimplicit-function-declaration] alarm (TIMEOUT + 10); ^ ../../dbus-master/test/test-utils-glib.c:434:3: warning: nested extern declaration of 'alarm' [-Wnested-externs] ../../dbus-master/test/test-utils-glib.c:438:14: error: variable 'act' has initializer but incomplete type struct sigaction act = { }; ^ ../../dbus-master/test/test-utils-glib.c:438:24: error: storage size of 'act' isn't known struct sigaction act = { }; ^ ../../dbus-master/test/test-utils-glib.c:442:7: warning: implicit declaration of function 'sigaction' [-Wimplicit-function-declaration] sigaction (SIGALRM, &act, NULL); ^ ../../dbus-master/test/test-utils-glib.c:442:7: warning: nested extern declaration of 'sigaction' [-Wnested-externs] ../../dbus-master/test/test-utils-glib.c:442:18: error: 'SIGALRM' undeclared (first use in this function) sigaction (SIGALRM, &act, NULL); ^ ../../dbus-master/test/test-utils-glib.c:442:18: note: each undeclared identifier is reported only once for each function it appears in ../../dbus-master/test/test-utils-glib.c:438:24: warning: unused variable 'act' [-Wunused-variable] struct sigaction act = { }; ^
(In reply to Ralf Habacker from comment #19) > ../../dbus-master/test/test-utils-glib.c:434:3: warning: implicit > declaration of function 'alarm' [-Wimplicit-function-declaration] > alarm (TIMEOUT + 10); Opening a separate bug for this stuff, it seems unrelated. The short version is that you're probably building against the wrong GLib.
(In reply to Simon McVittie from comment #20) > Opening a separate bug for this stuff, it seems unrelated. Bug #92065
(In reply to Ralf Habacker from comment #17) > I did run manual-paths with remaining patches applied and got... If you are pasting results from a manual test, please say what you expected to see - I don't always know what a Windows developer would expect.
Comment on attachment 118347 [details] [review] Add a DBusString-based version of _dbus_replace_install_prefix Obsoleted by Attachment #118540 [details] on Bug #83539
Comment on attachment 118348 [details] [review] Replace build-time prefix with installation prefix to include config files This now depends on Attachment #118540 [details] from Bug #83539.
Created attachment 118543 [details] [review] On Windows, load local configuration relative to bus setup This makes an installed tree with /some-prefix/ etc/ dbus-1/ session-local.conf share/ dbus-1/ session.conf relocatable to any location. --- Alternative to Attachment #118348 [details]; or we could have both. I don't intend to write code to count the right number of ../ to support arbitrary combinations of ${datadir} and ${sysconfdir}.
I applied all 3 patches to dbus-1.10 branch and got [ 418s] /home/abuild/rpmbuild/BUILD/dbus-1.10.2e599ffd/bus/config-parser.c:2137: undefined reference to `_dbus_replace_install_prefix_str' see https://build.opensuse.org/package/live_build_log/home:rhabacker:branches:windows:mingw:win32:personal/mingw32-dbus-1/openSUSE_13.2/x86_64 for a full log.
Created attachment 118558 [details] [review] Replace build-time prefix with installation prefix when including config files This was already done for the contents of .service files, but not config files. --- (In reply to Ralf Habacker from comment #26) > /home/abuild/rpmbuild/BUILD/dbus-1.10.2e599ffd/bus/config-parser.c:2137: > undefined reference to `_dbus_replace_install_prefix_str' Sorry, I forgot I'd renamed that function as an API simplification in Attachment #118540 [details]. Here's the necessary update to make this change build.
Comment on attachment 118558 [details] [review] Replace build-time prefix with installation prefix when including config files Review of attachment 118558 [details] [review]: ----------------------------------------------------------------- look good
Comment on attachment 118543 [details] [review] On Windows, load local configuration relative to bus setup Review of attachment 118543 [details] [review]: ----------------------------------------------------------------- looks good, except the wrong expanded pathes in bus/legacy-config/session.conf.in ::: bus/legacy-config/session.conf.in @@ +6,1 @@ > @DBUS_DATADIR@/dbus-1/session.conf, which should not be edited. DBUS_DATADIR is still expanded to /usr/i686-w64-mingw32/sys-root/mingw/share. Instead on windows it should be expanded to ../../share/dbus-1 @@ +12,3 @@ > > For upstream or distribution-wide defaults that can be overridden > by a local sysadmin, create files matching after this string the expanded path /usr/i686-w64-mingw32/sys-root/mingw/share/dbus-1/session.d/*.conf is placed in the generated config file. Instead it should be on windows ../../share/dbus-1/session.d/*.conf ::: bus/legacy-config/system.conf.in @@ +6,1 @@ > @DBUS_DATADIR@/dbus-1/system.conf, which should not be edited. see similar issue in bus/legacy-config/session.conf.in @@ +12,3 @@ > > For upstream or distribution-wide defaults that can be overridden > by a local sysadmin, create files matching dito
(In reply to Ralf Habacker from comment #29) > @@ +6,1 @@ > > @DBUS_DATADIR@/dbus-1/session.conf, which should not be edited. > > DBUS_DATADIR is still expanded to > /usr/i686-w64-mingw32/sys-root/mingw/share. Instead on windows it should be > expanded to ../../share
Created attachment 118574 [details] [review] On Windows, load local configuration relative to bus setup --- Now with DATADIR_FROM_PKGSYSCONFDIR as well as SYSCONFDIR_FROM_PKGDATADIR.
Comment on attachment 118574 [details] [review] On Windows, load local configuration relative to bus setup Review of attachment 118574 [details] [review]: ----------------------------------------------------------------- looks good, tested with autotools and cmake.
(In reply to Ralf Habacker from comment #32) > On Windows, load local configuration relative to bus setup > > looks good, tested with autotools and cmake. Thanks. I'm going to apply this one to 1.10... (In reply to Ralf Habacker from comment #28) > Replace build-time prefix with installation prefix when including config > files ... but this one is too intrusive for a stable branch IMO, so it can go in master.
(In reply to Simon McVittie from comment #33) > (In reply to Ralf Habacker from comment #28) > > Attachment #118558 [details] > > Replace build-time prefix with installation prefix when including config > > files > > ... but this one is too intrusive for a stable branch IMO, so it can go in > master. 118558 depends on Attachment #118540 [details], which you seem to have tested but not reviewed. Is 118540 OK for merge to master?
Comment on attachment 118574 [details] [review] On Windows, load local configuration relative to bus setup Applied for 1.10.1 and 1.11.0, thanks. Leaving the bug open for the other one.
Comment on attachment 118558 [details] [review] Replace build-time prefix with installation prefix when including config files I applied this. It will be in 1.11.
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.