Find a file
Colin Walters beb9cd2eb2 2005-06-12 Colin Walters <walters@verbum.org>
Async signals and various bugfixes and testing by
	Ross Burton <ross@burtonini.com>.

	* glib/dbus-gvalue.h: (struct DBusBasicGValue): Delete.
	(dbus_gvalue_genmarshal_name_from_type)
	(dbus_gvalue_ctype_from_type): Moved to dbus-binding-tool-glib.c.
	(dbus_gtype_to_dbus_type): Renamed to dbus_gtype_from_signature.
	(dbus_g_value_types_init, dbus_gtype_from_signature)
	(dbus_gtype_from_signature_iter, dbus_gtype_to_signature)
	(dbus_gtypes_from_arg_signature): New function prototypes.
	(dbus_gvalue_demarshal): Take context and error arguments.
	(dbus_gvalue_demarshal_variant): New function.
	(dbus_gvalue_demarshal_message): New function.
	(dbus_gvalue_store): Delete.

	* glib/dbus-gvalue.c:

	File has been almost entirely rewritten; now we special-case
	more types such as DBUS_TYPE_SIGNATURE, handle arrays and
	hash tables correctly, etc.  Full support for recursive values
	is not yet complete.

	* glib/dbus-gproxy.c (dbus_g_proxy_class_init): Change last
	argument of signal to G_TYPE_POINTER since we now pass a
	structure.
	(lookup_g_marshaller): Delete in favor of
	_dbus_gobject_lookup_marshaller.
	(marshal_dbus_message_to_g_marshaller): Use
	_dbus_gobject_lookup_marshaller and dbus_gvalue_demarshal_message
	to handle remote signal callbacks.
	(dbus_g_proxy_new_from_proxy): New function; creates a new
	DBusGProxy by copying an existing one.
	(dbus_g_proxy_get_interface, dbus_g_proxy_set_interface)
	(dbus_g_proxy_get_path): New functions.
	(dbus_g_proxy_marshal_args_to_message): New function;
	factored out of existing code.
	(DBUS_G_VALUE_ARRAY_COLLECT_ALL): Collect all arguments
	from a varargs array.
	(dbus_g_proxy_begin_call_internal): New function.
	(dbus_g_proxy_end_call_internal): New function.
	(dbus_g_proxy_begin_call): Take GTypes instead of DBus types
	as arguments; simply invoke dbus_g_proxy_begin_call_internal
	after collecting args into value array.
	(dbus_g_proxy_end_call): Take GTypes instead of DBus types;
	invoke dbus_g_proxy_end_call_internal.
	(dbus_g_proxy_invoke): Simply invoke begin_call_interanl and
	end_call_internal.
	(dbus_g_proxy_call_no_reply): Take GTypes instead of DBus
	types.
	(array_free_all): New function.
	(dbus_g_proxy_add_signal): Take GTypes.

	* glib/dbus-gobject.h:
	(_dbus_glib_marshal_dbus_message_to_gvalue_array): Delete.
	(_dbus_gobject_get_path, _dbus_gobject_lookup_marshaller):
	Prototype.

	* glib/dbus-gobject.c: Add a global marshal_table hash which
	stores mappings from type signatures to marshallers.  Change lots
	of invocations of dbus_gtype_to_dbus_type to
	dbus_gtype_to_signature.
	(_dbus_glib_marshal_dbus_message_to_gvalue_array): Delete.
	(introspect_signals): Fix test for query.return_type.
	(set_object_property): Update invocation of dbus_gvalue_demarshal.
	(invoke_object_method): Many changes.  Handle asynchronous
	invocations.  Convert arguments with
	dbus_gvalue_demarshal_message.  Handle errors.  Use
	DBusSignatureIter instead of strlen on args. Handle all arguments
	generically.  Special-case variants.
	(dbus_g_method_return, dbus_g_method_return_error): New function.
	(DBusGSignalClosure): New structure, closes over signal
	information.
	(dbus_g_signal_closure_new): New function.
	(dbus_g_signal_closure_finalize): New function.
	(signal_emitter_marshaller): New function; is special marshaller
	which emits signals on bus.
	(export_signals): New function; introspects object signals and
	connects to them.
	(dbus_g_object_type_install_info): Take GType instead of
	GObjectClass.
	(dbus_g_connection_register_g_object): Invoke export_signals.
	(dbus_g_connection_lookup_g_object): New function.
	(DBusGFuncSignature) New structure; used for mapping type
	signatures to marshallers.
	(funcsig_hash): New function; hashes DBusGFuncSignature.
	(funcsig_equal): New function; compares DBusGFuncSignature.
	(_dbus_gobject_lookup_marshaller): New function.
	(dbus_g_object_register_marshaller): New function; used to
	register a marshaller at runtime for a particular signature.

	* glib/dbus-gmain.c (_dbus_gmain_test): Add various tests.

	* glib/dbus-binding-tool-glib.h: Add DBUS_GLIB_ANNOTATION_ASYNC
	which notes a server method implementation should be
	asynchronous.

	* glib/dbus-binding-tool-glib.c
	(dbus_binding_tool_output_glib_server): Call
	dbus_g_value_types_init.
	(write_formal_parameters): Use dbus_gtype_from_signature.  Handle
	variants specially.
	(dbus_g_type_get_lookup_function): Turn GType into an invocation
	of a lookup function.
	(write_args_for_direction): Use dbus_g_type_get_lookup_function.
	(write_untyped_out_args): New method; write output arguments.
	(write_formal_declarations_for_direction): Function for
	writing prototypes.
	(write_formal_parameters_for_direction): Function for
	writing implementations.
	(write_typed_args_for_direction): Function for writing
	arguments prefixed with GTypes.
	(write_async_method_client): Write out async version
	of method.

	* glib/dbus-binding-tool-glib.c: Include dbus-gvalue-utils.h.
	(dbus_g_type_get_marshal_name): Move mapping from GType
	to marshal name into here.
	(dbus_g_type_get_c_name): Move into here.
	(compute_marshaller): Convert signature to type with
	dbus_gtype_from_signature, use dbus_g_type_get_marshal_name.
	(compute_marshaller_name): Ditto.
	(compute_marshaller): Handle async signal annotations.
	(gather_marshallers): Return if we don't have a known
	prefix.
	(generate_glue): Collect introspection blob here, and
	write all of the blob at the end.  This allows an object
	with multiple interfaces to work.
	Mark async methods in introspection blob.

	* glib/Makefile.am (libdbus_glib_1_la_SOURCES): Add
	dbus-gtype-specialized.c, dbus-gtype-specialized.h,
	dbus-gvalue-utils.h, dbus-gvalue-utils.c.

	* dbus/dbus-glib.h: Don't include dbus-protocol.h; this
	avoids people accidentally using DBUS_TYPE_* which should
	not be necessary anymore.
	Do include dbus-gtype-specialized.h, which are utilities
	for GLib container types.
	Add various #defines for types such as
	DBUS_TYPE_G_BOOLEAN_ARRAY.
	(DBusGValueIterator, DBusGValue): Define, not fully used
	yet.
	(dbus_g_value_get_g_type): Type for recursive value.
	(dbus_g_value_open, dbus_g_value_iterator_get_value)
	(dbus_g_value_iterator_get_values, dbus_g_value_iterator_recurse)
	(dbus_g_value_free): Prototypes.
	(dbus_g_object_register_marshaller, dbus_g_proxy_new_from_proxy): Prototype.
	(dbus_g_proxy_set_interface): Prototype.
	(dbus_g_proxy_begin_call, dbus_g_proxy_end_call)
	(dbus_g_proxy_call_no_reply): Take GLib types instead of DBus
	types.
	(dbus_g_proxy_get_path, dbus_g_proxy_get_interface):
	Accessors.
	(DBusGAsyncData, DBusGMethodInvocation): Structures for
	doing async invocations.
	(dbus_g_method_return, dbus_g_method_return_error):
	Prototypes.
	* doc/dbus-tutorial.xml: Update GLib section.

	* tools/dbus-viewer.c (load_child_nodes): Update
	for new invocation type of dbus_g_proxy_end_call.
	(load_from_service_thread_func): Ditto.

	* tools/print-introspect.c (main): Ditto.

	* tools/dbus-names-model.c (have_names_notify)
	(names_model_reload, names_model_set_connection)
	Use GTypes.

	* python/Makefile.am (INCLUDES): Define DBUS_COMPILATION,
	needed since Python bindings use GLib bindings.

	* test/glib/Makefile.am (INCLUDES): Define DBUS_COMPILATION.
	Add --prefix argument.

	* tools/Makefile.am: Define DBUS_COMPILATION.  Remove
	unneeded --ignore-unsupported arg.

	* test/glib/test-service-glib.c:
	* test/glib/test-service-glib.xml:
	* test/glib/test-dbus-glib.c: Add many more tests.
2005-06-13 03:01:30 +00:00
bus * dbus/dbus-connection.c, dbus/dbus-connection.h 2005-06-02 17:41:04 +00:00
dbus 2005-06-12 Colin Walters <walters@verbum.org> 2005-06-13 03:01:30 +00:00
doc 2005-06-12 Colin Walters <walters@verbum.org> 2005-06-13 03:01:30 +00:00
gcj 2003-06-23 Anders Carlsson <andersca@codefactory.se> 2003-06-23 17:39:48 +00:00
glib 2005-06-12 Colin Walters <walters@verbum.org> 2005-06-13 03:01:30 +00:00
mono 2005-03-15 Joe Shaw <joeshaw@novell.com> 2005-03-15 23:30:55 +00:00
python 2005-06-12 Colin Walters <walters@verbum.org> 2005-06-13 03:01:30 +00:00
qt * NEWS: Update for 0.31 2005-03-07 21:10:46 +00:00
test 2005-06-12 Colin Walters <walters@verbum.org> 2005-06-13 03:01:30 +00:00
tools 2005-06-12 Colin Walters <walters@verbum.org> 2005-06-13 03:01:30 +00:00
.cvsignore 2003-02-16 Havoc Pennington <hp@pobox.com> 2003-02-16 07:20:54 +00:00
acinclude.m4 2003-09-21 Seth Nickell <seth@gnome.org> 2003-09-22 05:45:59 +00:00
AUTHORS 2004-10-21 Colin Walters <walters@verbum.org> 2004-10-22 02:14:00 +00:00
autogen.sh 2005-01-30 Havoc Pennington <hp@redhat.com> 2005-01-31 02:55:12 +00:00
ChangeLog 2005-06-12 Colin Walters <walters@verbum.org> 2005-06-13 03:01:30 +00:00
configure.in 2005-05-18 Havoc Pennington <hp@redhat.com> 2005-05-18 15:44:50 +00:00
COPYING 2004-08-09 Havoc Pennington <hp@redhat.com> 2004-08-10 03:07:01 +00:00
dbus-1.pc.in 2003-04-29 Havoc Pennington <hp@redhat.com> 2003-04-29 21:56:37 +00:00
dbus-glib-1.pc.in 2003-06-22 Anders Carlsson <andersca@codefactory.se> 2003-06-22 06:53:42 +00:00
dbus-sharp.pc.in Remove glib-sharp from Libs flag. 2004-06-10 12:55:28 +00:00
Doxyfile.in 2004-06-02 Kristian Høgsberg <krh@redhat.com> 2004-06-02 13:13:14 +00:00
HACKING * News: Update 0.32 2005-03-29 18:27:35 +00:00
INSTALL initial import of "dbus" skeleton 2002-11-21 16:41:33 +00:00
Makefile.am 2005-03-20 Colin Walters <walters@verbum.org> 2005-03-21 02:31:09 +00:00
Makefile.cvs Match kde schematics 2003-11-23 08:07:04 +00:00
NEWS * Update to 0.33 2005-04-26 00:54:52 +00:00
README add a couple of notes about libdbus vs. bindings 2004-08-10 02:18:37 +00:00
update-dbus-docs.sh 2005-01-21 Havoc Pennington <hp@redhat.com> 2005-01-21 06:18:04 +00:00

D-BUS is a simple IPC library based on messages.

See also the file HACKING for notes of interest to developers working on D-BUS.

See http://www.freedesktop.org/software/dbus/ for lots of documentation, 
mailing lists, etc.

Note
===

A core concept of the D-BUS implementation is that "libdbus" is
intended to be a low-level API, similar to Xlib. Most programmers are
intended to use the bindings to GLib, Qt, Python, Mono, Java, or
whatever. These bindings have varying levels of completeness.

Configuration flags
===

These are the dbus-specific configuration flags that can be given to
the ./configure program.

  --enable-qt      enable Qt-friendly client library
  --enable-glib    enable GLib-friendly client library
  --enable-mono    enable mono bindings
  --enable-mono-docs build mono documentation (requires monodoc)
  --enable-tests   enable unit test code
  --enable-ansi    enable -ansi -pedantic gcc flags
  --enable-verbose-mode support verbose debug mode
  --enable-asserts include assertion checks
  --enable-checks  include sanity checks on public API
  --enable-docs    build documentation (requires Doxygen and jade)
  --enable-gcov    compile with coverage profiling instrumentation (gcc only)
  --enable-python  build python bindings (reqires Pyrex >= 0.9)

  --with-xml=libxml/expat           XML library to use
  --with-init-scripts=redhat        Style of init scripts to install
  --with-session-socket-dir=dirname Where to put sockets for the per-login-session message bus
  --with-test-socket-dir=dirname    Where to put sockets for make check
  --with-system-pid-file=pidfile    PID file for systemwide daemon
  --with-system-socket=filename     UNIX domain socket for systemwide daemon


API/ABI Policy
===

D-BUS API/ABI and protocol necessarily remain in flux until we are
sure it will meet the various needs it's intended to meet. This means
we need to see some significant sample usage in the contexts of GNOME,
KDE, desktop applications, and systemwide uses such as print queue
monitoring, hotplug events, or whatever. We need the flexibility to
incorporate feedback from this sample usage.

Once we feel confident in the protocol and the API, we will release a 
version 1.0. At that point, the intent is:

 - The protocol will never be broken again; any message bus should 
   work with any client forever. However, extensions are possible
   where the protocol is extensible.

 - If the library API is modified incompatibly, we will rename it 
   as in http://ometer.com/parallel.html - in other words, 
   it will always be possible to compile against and use the older 
   API, and apps will always get the API they expect.

Until 1.0 is released, feedback that requires API changes may be
incorporated into D-BUS. This may break the API, the ABI, the
protocol, or all three.

To avoid a huge soname, the plan is to increment the soname only
between official stable releases, not with every development snapshot.
Versions numbered 0.x are considered development snapshots.

Until 1.0 is released, you have to define -DDBUS_API_SUBJECT_TO_CHANGE
just as a safety check to be sure everyone is aware of this API/ABI
policy and has the right expectations.

We do need people to test the APIs, so please do use the development
snapshots of D-BUS. They are intended to work and we do actively
address bugs.

However, if you're shipping a commercial binary-only application that
needs to keep running on M future versions of N operating systems, you
might want to include your own copy of D-BUS rather than relying on
the installed copy, for example.