4 # gtk-doc - GTK DocBook documentation generator.
5 # Copyright (C) 1998 Damon Chaplin
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with this program; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 # This gets information about object heirarchies and signals
24 # by compiling a small C program. CFLAGS and LDFLAGS must be
25 # set appropriately before running this script.
27 # NOTE: the lookup_signal_arg_names() function contains the argument names of
28 # standard GTK signal handlers. This may need to be updated for new
29 # GTK signals or Gnome widget signals.
33 unshift @INC, '/usr/share/gtk-doc/data';
34 require "gtkdoc-common.pl";
38 # name of documentation module
44 my $TYPE_INIT_FUNC="g_type_init ()";
46 # --nogtkinit is deprecated, as it is the default now anyway.
47 %optctl = (module => \$MODULE,
49 types => \$TYPES_FILE,
50 nogtkinit => \$NO_GTK_INIT,
51 'type-init-func' => \$TYPE_INIT_FUNC,
52 'output-dir' => \$OUTPUT_DIR,
53 'inspect-dir' => \$INSPECT_DIR,
54 'version' => \$PRINT_VERSION,
55 'help' => \$PRINT_HELP);
57 GetOptions(\%optctl, "module=s", "source=s", "types:s", "output-dir:s", "inspect-dir:s", "nogtkinit", "type-init-func:s", "version", "help");
60 # Do nothing. This just avoids a warning.
73 print "gstdoc-scangobj version 1.5\n";
74 print "\n--module=MODULE_NAME Name of the doc module being parsed";
75 print "\n--source=SOURCE_NAME Name of the source module for plugins";
76 print "\n--types=FILE The name of the file to store the types in";
77 print "\n--type-init-func=FUNC The init function to call instead of g_type_init ()";
78 print "\n--output-dir=DIRNAME The directory where the results are stored";
79 print "\n--inspect-dir=DIRNAME The directory where the plugin inspect data is stored";
80 print "\n--version Print the version of this program";
81 print "\n--help Print this help\n";
85 $OUTPUT_DIR = $OUTPUT_DIR ? $OUTPUT_DIR : ".";
87 $TYPES_FILE = $TYPES_FILE ? $TYPES_FILE : "$OUTPUT_DIR/$MODULE.types";
89 open (TYPES, $TYPES_FILE) || die "Cannot open $TYPES_FILE: $!\n";
90 open (OUTPUT, ">$MODULE-scan.c") || die "Cannot open $MODULE-scan.c: $!\n";
92 my $old_signals_filename = "$OUTPUT_DIR/$MODULE.signals";
93 my $new_signals_filename = "$OUTPUT_DIR/$MODULE.signals.new";
94 my $old_hierarchy_filename = "$OUTPUT_DIR/$MODULE.hierarchy";
95 my $new_hierarchy_filename = "$OUTPUT_DIR/$MODULE.hierarchy.new";
96 my $old_interfaces_filename = "$OUTPUT_DIR/$MODULE.interfaces";
97 my $new_interfaces_filename = "$OUTPUT_DIR/$MODULE.interfaces.new";
98 my $old_prerequisites_filename = "$OUTPUT_DIR/$MODULE.prerequisites";
99 my $new_prerequisites_filename = "$OUTPUT_DIR/$MODULE.prerequisites.new";
100 my $old_args_filename = "$OUTPUT_DIR/$MODULE.args";
101 my $new_args_filename = "$OUTPUT_DIR/$MODULE.args.new";
103 # write a C program to scan the types
116 } elsif (/^type:(.*)$/) {
119 push @impl_types, $t;
126 $ntypes = @types + @impl_types;
136 #ifdef GTK_IS_WIDGET_CLASS
137 #include <gtk/gtkversion.h>
140 static GType *object_types = NULL;
142 static GString *xmlstr = NULL;
145 xmlprint (gint indent, const gchar *tag, const gchar *data)
147 const gchar indent_str[] = " ";
150 g_string_truncate (xmlstr, 0);
151 g_string_append_len (xmlstr, indent_str, MIN (indent, strlen (indent_str)));
152 g_string_append_printf (xmlstr, "<%s>", tag);
157 s = g_markup_escape_text (data, -1);
158 g_string_append (xmlstr, s);
162 g_string_append_printf (xmlstr, "</%s>\\n", tag);
167 gst_feature_sort_compare (gconstpointer a, gconstpointer b)
169 return strcmp (((GstPluginFeature *)a)->name, ((GstPluginFeature *)b)->name);
173 get_object_types (void)
175 GList *plugins = NULL;
176 GList *factories = NULL;
178 GstElementFactory *factory = NULL;
182 /* get a list of features from plugins in our source module */
183 plugins = gst_registry_get_plugin_list (gst_registry_get_default());
185 xmlstr = g_string_new ("");
188 GList *features, *pads;
191 FILE *inspect = NULL;
194 plugin = (GstPlugin *) (plugins->data);
195 plugins = g_list_next (plugins);
196 source = gst_plugin_get_source (plugin);
197 /*g_print ("plugin: %s source: %s\\n", plugin->desc.name, source);*/
198 if (!source || strcmp (source, "$SOURCE") != 0) {
202 /* skip static coreelements plugin with pipeline and bin element factory */
203 if (gst_plugin_get_filename (plugin) == NULL)
206 g_print ("plugin: %s source: %s\\n", plugin->desc.name, source);
208 inspect_name = g_strdup_printf ("$INSPECT_DIR" G_DIR_SEPARATOR_S "plugin-%s.xml",
210 inspect = fopen (inspect_name, "w");
211 g_free (inspect_name);
213 /* output plugin data */
214 fputs ("<plugin>\\n",inspect);
215 fputs (xmlprint(2, "name", plugin->desc.name),inspect);
216 fputs (xmlprint(2, "description", plugin->desc.description),inspect);
217 fputs (xmlprint(2, "filename", plugin->filename),inspect);
218 fputs (xmlprint(2, "basename", plugin->basename),inspect);
219 fputs (xmlprint(2, "version", plugin->desc.version),inspect);
220 fputs (xmlprint(2, "license", plugin->desc.license),inspect);
221 fputs (xmlprint(2, "source", plugin->desc.source),inspect);
222 fputs (xmlprint(2, "package", plugin->desc.package),inspect);
223 fputs (xmlprint(2, "origin", plugin->desc.origin),inspect);
224 fputs (" <elements>\\n", inspect);
227 gst_registry_get_feature_list_by_plugin (gst_registry_get_default (),
230 /* sort factories by feature->name */
231 features = g_list_sort (features, gst_feature_sort_compare);
234 GstPluginFeature *feature;
235 feature = GST_PLUGIN_FEATURE (features->data);
236 feature = gst_plugin_feature_load (feature);
238 g_warning ("Could not load plugin feature %s",
239 gst_plugin_feature_get_name (feature));
242 if (GST_IS_ELEMENT_FACTORY (feature)) {
243 GstStaticPadTemplate *pt;
244 const gchar *pad_dir[] = { "unknown","source","sink" };
245 const gchar *pad_pres[] = { "always","sometimes","request" };
247 /*g_print (" feature: %s\\n", feature->name);*/
249 factory = GST_ELEMENT_FACTORY (feature);
250 factories = g_list_prepend (factories, factory);
252 /* output element data */
253 fputs (" <element>\\n", inspect);
254 fputs (xmlprint(6, "name", feature->name),inspect);
255 fputs (xmlprint(6, "longname", factory->details.longname),inspect);
256 fputs (xmlprint(6, "class", factory->details.klass),inspect);
257 fputs (xmlprint(6, "description", factory->details.description),inspect);
258 fputs (xmlprint(6, "author", factory->details.author),inspect);
259 fputs (" <pads>\\n", inspect);
261 /* output pad-template data */
262 pads =(GList *) gst_element_factory_get_static_pad_templates (factory);
264 pt = (GstStaticPadTemplate *)pads->data;
266 fputs (" <caps>\\n", inspect);
267 fputs (xmlprint(10, "name", pt->name_template),inspect);
268 fputs (xmlprint(10, "direction", pad_dir[pt->direction]),inspect);
269 fputs (xmlprint(10, "presence", pad_pres[pt->presence]),inspect);
270 fputs (xmlprint(10, "details", pt->static_caps.string),inspect);
271 fputs (" </caps>\\n", inspect);
273 pads = g_list_next (pads);
275 fputs (" </pads>\\n </element>\\n", inspect);
277 features = g_list_next (features);
280 fputs (" </elements>\\n</plugin>", inspect);
284 g_string_free (xmlstr, TRUE);
286 g_message ("number of element factories: %d", g_list_length (factories));
288 /* allocate the object_types array to hold them */
289 object_types = g_new0 (GType, g_list_length (factories)+$ntypes+1);
296 factory = GST_ELEMENT_FACTORY (l->data);
297 type = gst_element_factory_get_element_type (factory);
299 g_message ("adding type %p for factory %s", (void *) type, gst_element_factory_get_longname (factory));
300 object_types[i++] = type;
302 g_message ("type info for factory %s not found",
303 gst_element_factory_get_longname (factory));
310 # get_type functions:
315 g_message ("$_ () didn't return a valid type");
318 object_types[i++] = type;
323 # Implicit types retrieved from GLib:
326 type = g_type_from_name ("$_");
328 g_message ("Implicit type $_ not found");
331 object_types[i++] = type;
340 /* Need to make sure all the types are loaded in and initialize
341 * their signals and properties.
343 for (i=0; object_types[i]; i++) {
344 if (G_TYPE_IS_CLASSED (object_types[i]))
345 g_type_class_ref (object_types[i]);
347 g_warning ("not reffing type: %s", g_type_name (object_types[i]));
355 * This uses GObject type functions to output signal prototypes and the object
359 /* The output files */
360 const gchar *signals_filename = "$new_signals_filename";
361 const gchar *hierarchy_filename = "$new_hierarchy_filename";
362 const gchar *interfaces_filename = "$new_interfaces_filename";
363 const gchar *prerequisites_filename = "$new_prerequisites_filename";
364 const gchar *args_filename = "$new_args_filename";
367 static void output_signals (void);
368 static void output_object_signals (FILE *fp,
370 static void output_object_signal (FILE *fp,
371 const gchar *object_class_name,
373 static const gchar * get_type_name (GType type,
374 gboolean * is_pointer);
375 static const gchar * get_gdk_event (const gchar * signal_name);
376 static const gchar ** lookup_signal_arg_names (const gchar * type,
377 const gchar * signal_name);
379 static void output_object_hierarchy (void);
380 static void output_hierarchy (FILE *fp,
384 static void output_object_interfaces (void);
385 static void output_interfaces (FILE *fp,
388 static void output_interface_prerequisites (void);
389 static void output_prerequisites (FILE *fp,
392 static void output_args (void);
393 static void output_object_args (FILE *fp, GType object_type);
396 main (int argc, char *argv[])
398 /* Silence the compiler: */
399 if (argv != argv) argc = argc;
406 output_object_hierarchy ();
407 output_object_interfaces ();
408 output_interface_prerequisites ();
416 output_signals (void)
421 fp = fopen (signals_filename, "w");
424 g_warning ("Couldn't open output file: %s : %s", signals_filename, strerror(errno));
428 for (i = 0; object_types[i]; i++)
429 output_object_signals (fp, object_types[i]);
435 compare_signals (const void *a, const void *b)
437 const guint *signal_a = a;
438 const guint *signal_b = b;
440 return strcmp (g_signal_name (*signal_a), g_signal_name (*signal_b));
443 /* This outputs all the signals of one object. */
445 output_object_signals (FILE *fp, GType object_type)
447 const gchar *object_class_name;
448 guint *signals, n_signals;
451 if (G_TYPE_IS_INSTANTIATABLE (object_type) ||
452 G_TYPE_IS_INTERFACE (object_type))
455 object_class_name = g_type_name (object_type);
457 signals = g_signal_list_ids (object_type, &n_signals);
458 qsort (signals, n_signals, sizeof (guint), compare_signals);
460 for (sig = 0; sig < n_signals; sig++)
462 output_object_signal (fp, object_class_name, signals[sig]);
469 /* This outputs one signal. */
471 output_object_signal (FILE *fp,
472 const gchar *object_name,
475 GSignalQuery query_info;
476 const gchar *type_name, *ret_type, *object_arg, *arg_name;
477 gchar *pos, *object_arg_lower;
479 gchar ret_type_buffer[1024], buffer[1024];
481 const gchar **arg_names;
482 gint param_num, widget_num, event_num, callback_num;
484 gchar signal_name[128];
487 /* g_print ("Object: %s Signal: %u\\n", object_name, signal_id);*/
490 widget_num = event_num = callback_num = 0;
492 g_signal_query (signal_id, &query_info);
494 /* Output the return type and function name. */
495 ret_type = get_type_name (query_info.return_type & ~G_SIGNAL_TYPE_STATIC_SCOPE, &is_pointer);
496 sprintf (ret_type_buffer, "%s%s", ret_type, is_pointer ? "*" : "");
498 /* Output the signal object type and the argument name. We assume the
499 type is a pointer - I think that is OK. We remove "Gtk" or "Gnome" and
500 convert to lower case for the argument name. */
502 sprintf (pos, "%s ", object_name);
505 if (!strncmp (object_name, "Gtk", 3))
506 object_arg = object_name + 3;
507 else if (!strncmp (object_name, "Gnome", 5))
508 object_arg = object_name + 5;
510 object_arg = object_name;
512 object_arg_lower = g_ascii_strdown (object_arg, -1);
513 sprintf (pos, "*%s\\n", object_arg_lower);
515 if (!strncmp (object_arg_lower, "widget", 6))
517 g_free(object_arg_lower);
519 /* Convert signal name to use underscores rather than dashes '-'. */
520 strcpy (signal_name, query_info.signal_name);
521 for (i = 0; signal_name[i]; i++)
523 if (signal_name[i] == '-')
524 signal_name[i] = '_';
527 /* Output the signal parameters. */
528 arg_names = lookup_signal_arg_names (object_name, signal_name);
530 for (param = 0; param < query_info.n_params; param++)
534 sprintf (pos, "%s\\n", arg_names[param]);
539 type_name = get_type_name (query_info.param_types[param] & ~G_SIGNAL_TYPE_STATIC_SCOPE, &is_pointer);
541 /* Most arguments to the callback are called "arg1", "arg2", etc.
542 GdkWidgets are called "widget", "widget2", ...
543 GdkEvents are called "event", "event2", ...
544 GtkCallbacks are called "callback", "callback2", ... */
545 if (!strcmp (type_name, "GtkWidget"))
548 arg_num = &widget_num;
550 else if (!strcmp (type_name, "GdkEvent"))
552 type_name = get_gdk_event (signal_name);
554 arg_num = &event_num;
557 else if (!strcmp (type_name, "GtkCallback")
558 || !strcmp (type_name, "GtkCCallback"))
560 arg_name = "callback";
561 arg_num = &callback_num;
566 arg_num = ¶m_num;
568 sprintf (pos, "%s ", type_name);
571 if (!arg_num || *arg_num == 0)
572 sprintf (pos, "%s%s\\n", is_pointer ? "*" : " ", arg_name);
574 sprintf (pos, "%s%s%i\\n", is_pointer ? "*" : " ", arg_name,
589 /* We use one-character flags for simplicity. */
590 if (query_info.signal_flags & G_SIGNAL_RUN_FIRST)
592 if (query_info.signal_flags & G_SIGNAL_RUN_LAST)
594 if (query_info.signal_flags & G_SIGNAL_RUN_CLEANUP)
596 if (query_info.signal_flags & G_SIGNAL_NO_RECURSE)
598 if (query_info.signal_flags & G_SIGNAL_DETAILED)
600 if (query_info.signal_flags & G_SIGNAL_ACTION)
602 if (query_info.signal_flags & G_SIGNAL_NO_HOOKS)
607 "<SIGNAL>\\n<NAME>%s::%s</NAME>\\n<RETURNS>%s</RETURNS>\\n<FLAGS>%s</FLAGS>\\n%s</SIGNAL>\\n\\n",
608 object_name, query_info.signal_name, ret_type_buffer, flags, buffer);
612 /* Returns the type name to use for a signal argument or return value, given
613 the GtkType from the signal info. It also sets is_pointer to TRUE if the
614 argument needs a '*' since it is a pointer. */
616 get_type_name (GType type, gboolean * is_pointer)
618 const gchar *type_name;
621 type_name = g_type_name (type);
635 /* These all have normal C type names so they are OK. */
639 /* A GtkString is really a gchar*. */
645 /* We use a gint for both of these. Hopefully a subtype with a decent
646 name will be registered and used instead, as GTK+ does itself. */
650 /* The boxed type shouldn't be used itself, only subtypes. Though we
651 return 'gpointer' just in case. */
655 /* A GParam is really a GParamSpec*. */
663 /* For all GObject subclasses we can use the class name with a "*",
664 e.g. 'GtkWidget *'. */
665 if (g_type_is_a (type, G_TYPE_OBJECT))
668 if (G_TYPE_IS_CLASSED (type))
671 /* All boxed subtypes will be pointers as well. */
672 if (g_type_is_a (type, G_TYPE_BOXED))
675 /* All pointer subtypes will be pointers as well. */
676 if (g_type_is_a (type, G_TYPE_POINTER))
679 /* But enums are not */
680 if (g_type_is_a (type, G_TYPE_ENUM) ||
681 g_type_is_a (type, G_TYPE_FLAGS))
689 get_gdk_event (const gchar * signal_name)
691 static const gchar *GbGDKEvents[] =
693 "button_press_event", "GdkEventButton",
694 "button_release_event", "GdkEventButton",
695 "motion_notify_event", "GdkEventMotion",
696 "delete_event", "GdkEvent",
697 "destroy_event", "GdkEvent",
698 "expose_event", "GdkEventExpose",
699 "key_press_event", "GdkEventKey",
700 "key_release_event", "GdkEventKey",
701 "enter_notify_event", "GdkEventCrossing",
702 "leave_notify_event", "GdkEventCrossing",
703 "configure_event", "GdkEventConfigure",
704 "focus_in_event", "GdkEventFocus",
705 "focus_out_event", "GdkEventFocus",
706 "map_event", "GdkEvent",
707 "unmap_event", "GdkEvent",
708 "property_notify_event", "GdkEventProperty",
709 "selection_clear_event", "GdkEventSelection",
710 "selection_request_event", "GdkEventSelection",
711 "selection_notify_event", "GdkEventSelection",
712 "proximity_in_event", "GdkEventProximity",
713 "proximity_out_event", "GdkEventProximity",
714 "drag_begin_event", "GdkEventDragBegin",
715 "drag_request_event", "GdkEventDragRequest",
716 "drag_end_event", "GdkEventDragRequest",
717 "drop_enter_event", "GdkEventDropEnter",
718 "drop_leave_event", "GdkEventDropLeave",
719 "drop_data_available_event", "GdkEventDropDataAvailable",
720 "other_event", "GdkEventOther",
721 "client_event", "GdkEventClient",
722 "no_expose_event", "GdkEventNoExpose",
723 "visibility_notify_event", "GdkEventVisibility",
724 "window_state_event", "GdkEventWindowState",
725 "scroll_event", "GdkEventScroll",
731 for (i = 0; GbGDKEvents[i]; i += 2)
733 if (!strcmp (signal_name, GbGDKEvents[i]))
734 return GbGDKEvents[i + 1];
740 /* This returns argument names to use for some known GTK signals.
741 It is passed a widget name, e.g. 'GtkCList' and a signal name, e.g.
742 'select_row' and it returns a pointer to an array of argument types and
744 static const gchar **
745 lookup_signal_arg_names (const gchar * type, const gchar * signal_name)
747 /* Each arg array starts with the object type name and the signal name,
748 and then signal arguments follow. */
749 static const gchar *GbArgTable[][16] =
751 {"GtkCList", "select_row",
754 "GdkEventButton *event"},
755 {"GtkCList", "unselect_row",
758 "GdkEventButton *event"},
759 {"GtkCList", "click_column",
762 {"GtkCList", "resize_column",
766 {"GtkCList", "extend_selection",
767 "GtkScrollType scroll_type",
769 "gboolean auto_start_selection"},
770 {"GtkCList", "scroll_vertical",
771 "GtkScrollType scroll_type",
773 {"GtkCList", "scroll_horizontal",
774 "GtkScrollType scroll_type",
777 {"GtkCTree", "tree_select_row",
778 "GtkCTreeNode *node",
780 {"GtkCTree", "tree_unselect_row",
781 "GtkCTreeNode *node",
783 {"GtkCTree", "tree_expand",
784 "GtkCTreeNode *node"},
785 {"GtkCTree", "tree_collapse",
786 "GtkCTreeNode *node"},
787 {"GtkCTree", "tree_move",
788 "GtkCTreeNode *node",
789 "GtkCTreeNode *new_parent",
790 "GtkCTreeNode *new_sibling"},
791 {"GtkCTree", "change_focus_row_expansion",
792 "GtkCTreeExpansionType expansion"},
794 {"GtkEditable", "insert_text",
796 "gint new_text_length",
798 {"GtkEditable", "delete_text",
801 {"GtkEditable", "set_editable",
802 "gboolean is_editable"},
803 {"GtkEditable", "move_cursor",
806 {"GtkEditable", "move_word",
808 {"GtkEditable", "move_page",
811 {"GtkEditable", "move_to_row",
813 {"GtkEditable", "move_to_column",
816 {"GtkEditable", "kill_char",
818 {"GtkEditable", "kill_word",
820 {"GtkEditable", "kill_line",
824 {"GtkInputDialog", "enable_device",
825 "GdkDevice *deviceid"},
826 {"GtkInputDialog", "disable_device",
827 "GdkDevice *deviceid"},
829 {"GtkListItem", "extend_selection",
830 "GtkScrollType scroll_type",
832 "gboolean auto_start_selection"},
833 {"GtkListItem", "scroll_vertical",
834 "GtkScrollType scroll_type",
836 {"GtkListItem", "scroll_horizontal",
837 "GtkScrollType scroll_type",
840 {"GtkMenuShell", "move_current",
841 "GtkMenuDirectionType direction"},
842 {"GtkMenuShell", "activate_current",
843 "gboolean force_hide"},
846 {"GtkNotebook", "switch_page",
847 "GtkNotebookPage *page",
849 {"GtkStatusbar", "text_pushed",
852 {"GtkStatusbar", "text_popped",
855 {"GtkTipsQuery", "widget_entered",
858 "gchar *tip_private"},
859 {"GtkTipsQuery", "widget_selected",
862 "gchar *tip_private",
863 "GdkEventButton *event"},
864 {"GtkToolbar", "orientation_changed",
865 "GtkOrientation orientation"},
866 {"GtkToolbar", "style_changed",
867 "GtkToolbarStyle style"},
868 {"GtkWidget", "draw",
869 "GdkRectangle *area"},
870 {"GtkWidget", "size_request",
871 "GtkRequisition *requisition"},
872 {"GtkWidget", "size_allocate",
873 "GtkAllocation *allocation"},
874 {"GtkWidget", "state_changed",
875 "GtkStateType state"},
876 {"GtkWidget", "style_set",
877 "GtkStyle *previous_style"},
879 {"GtkWidget", "install_accelerator",
880 "gchar *signal_name",
884 {"GtkWidget", "add_accelerator",
885 "guint accel_signal_id",
886 "GtkAccelGroup *accel_group",
888 "GdkModifierType accel_mods",
889 "GtkAccelFlags accel_flags"},
891 {"GtkWidget", "parent_set",
892 "GtkObject *old_parent"},
894 {"GtkWidget", "remove_accelerator",
895 "GtkAccelGroup *accel_group",
897 "GdkModifierType accel_mods"},
898 {"GtkWidget", "debug_msg",
900 {"GtkWindow", "move_resize",
905 {"GtkWindow", "set_focus",
906 "GtkWidget *widget"},
908 {"GtkWidget", "selection_get",
909 "GtkSelectionData *data",
912 {"GtkWidget", "selection_received",
913 "GtkSelectionData *data",
916 {"GtkWidget", "drag_begin",
917 "GdkDragContext *drag_context"},
918 {"GtkWidget", "drag_end",
919 "GdkDragContext *drag_context"},
920 {"GtkWidget", "drag_data_delete",
921 "GdkDragContext *drag_context"},
922 {"GtkWidget", "drag_leave",
923 "GdkDragContext *drag_context",
925 {"GtkWidget", "drag_motion",
926 "GdkDragContext *drag_context",
930 {"GtkWidget", "drag_drop",
931 "GdkDragContext *drag_context",
935 {"GtkWidget", "drag_data_get",
936 "GdkDragContext *drag_context",
937 "GtkSelectionData *data",
940 {"GtkWidget", "drag_data_received",
941 "GdkDragContext *drag_context",
944 "GtkSelectionData *data",
953 for (i = 0; GbArgTable[i][0]; i++)
956 if (!strcmp (type, GbArgTable[i][0])
957 && !strcmp (signal_name, GbArgTable[i][1]))
958 return &GbArgTable[i][2];
964 /* This outputs the hierarchy of all objects which have been initialized,
965 i.e. by calling their XXX_get_type() initialization function. */
967 output_object_hierarchy (void)
972 fp = fopen (hierarchy_filename, "w");
975 g_warning ("Couldn't open output file: %s : %s", hierarchy_filename, strerror(errno));
978 output_hierarchy (fp, G_TYPE_OBJECT, 0);
979 output_hierarchy (fp, G_TYPE_INTERFACE, 0);
981 for (i=0; object_types[i]; i++) {
982 if (!g_type_parent (object_types[i]) &&
983 (object_types[i] != G_TYPE_NONE) &&
984 (object_types[i] != G_TYPE_OBJECT) &&
985 (object_types[i] != G_TYPE_INTERFACE)
987 g_warning ("printing hierarchy for root type: %s",
988 g_type_name (object_types[i]));
989 output_hierarchy (fp, object_types[i], 0);
993 for (i=0; object_types[i]; i++) {
994 if(object_types[i] != G_TYPE_NONE) {
995 g_print ("type has not been added to hierarchy: %s\\n",
996 g_type_name (object_types[i]));
1004 /* This is called recursively to output the hierarchy of a widget. */
1006 output_hierarchy (FILE *fp,
1018 for (i=0; object_types[i]; i++) {
1019 if(object_types[i] == type) {
1020 g_print ("added type to hierarchy (level %d): %s\\n",
1021 level, g_type_name (type));
1022 object_types[i] = G_TYPE_NONE;
1028 for (i = 0; i < level; i++)
1030 fprintf (fp, "%s", g_type_name (type));
1031 fprintf (fp, "\\n");
1033 children = g_type_children (type, &n_children);
1035 for (i=0; i < n_children; i++) {
1036 output_hierarchy (fp, children[i], level + 1);
1042 static void output_object_interfaces (void)
1047 fp = fopen (interfaces_filename, "w");
1050 g_warning ("Couldn't open output file: %s : %s", interfaces_filename, strerror(errno));
1053 output_interfaces (fp, G_TYPE_OBJECT);
1055 for (i = 0; object_types[i]; i++)
1057 if (!g_type_parent (object_types[i]) &&
1058 (object_types[i] != G_TYPE_OBJECT) &&
1059 G_TYPE_IS_INSTANTIATABLE (object_types[i]))
1061 output_interfaces (fp, object_types[i]);
1068 output_interfaces (FILE *fp,
1072 GType *children, *interfaces;
1073 guint n_children, n_interfaces;
1078 interfaces = g_type_interfaces (type, &n_interfaces);
1080 if (n_interfaces > 0)
1082 fprintf (fp, "%s", g_type_name (type));
1083 for (i=0; i < n_interfaces; i++)
1084 fprintf (fp, " %s", g_type_name (interfaces[i]));
1085 fprintf (fp, "\\n");
1087 g_free (interfaces);
1089 children = g_type_children (type, &n_children);
1091 for (i=0; i < n_children; i++)
1092 output_interfaces (fp, children[i]);
1097 static void output_interface_prerequisites (void)
1101 fp = fopen (prerequisites_filename, "w");
1104 g_warning ("Couldn't open output file: %s : %s", prerequisites_filename, strerror(errno));
1107 output_prerequisites (fp, G_TYPE_INTERFACE);
1112 output_prerequisites (FILE *fp,
1115 #if GLIB_CHECK_VERSION(2,1,0)
1117 GType *children, *prerequisites;
1118 guint n_children, n_prerequisites;
1123 prerequisites = g_type_interface_prerequisites (type, &n_prerequisites);
1125 if (n_prerequisites > 0)
1127 fprintf (fp, "%s", g_type_name (type));
1128 for (i=0; i < n_prerequisites; i++)
1129 fprintf (fp, " %s", g_type_name (prerequisites[i]));
1130 fprintf (fp, "\\n");
1132 g_free (prerequisites);
1134 children = g_type_children (type, &n_children);
1136 for (i=0; i < n_children; i++)
1137 output_prerequisites (fp, children[i]);
1149 fp = fopen (args_filename, "w");
1152 g_warning ("Couldn't open output file: %s : %s", args_filename, strerror(errno));
1156 for (i = 0; object_types[i]; i++) {
1157 output_object_args (fp, object_types[i]);
1164 compare_param_specs (const void *a, const void *b)
1166 GParamSpec *spec_a = *(GParamSpec **)a;
1167 GParamSpec *spec_b = *(GParamSpec **)b;
1169 return strcmp (g_param_spec_get_name (spec_a), g_param_spec_get_name (spec_b));
1172 /* Its common to have unsigned properties restricted
1173 * to the signed range. Therefore we make this look
1174 * a bit nicer by spelling out the max constants.
1177 /* Don't use "==" with floats, it might trigger a gcc warning. */
1178 #define GTKDOC_COMPARE_FLOAT(x, y) (x <= y && x >= y)
1181 describe_double_constant (gdouble value)
1185 if (GTKDOC_COMPARE_FLOAT (value, G_MAXDOUBLE))
1186 desc = g_strdup ("G_MAXDOUBLE");
1187 else if (GTKDOC_COMPARE_FLOAT (value, G_MINDOUBLE))
1188 desc = g_strdup ("G_MINDOUBLE");
1189 else if (GTKDOC_COMPARE_FLOAT (value, -G_MAXDOUBLE))
1190 desc = g_strdup ("-G_MAXDOUBLE");
1191 else if (GTKDOC_COMPARE_FLOAT (value, G_MAXFLOAT))
1192 desc = g_strdup ("G_MAXFLOAT");
1193 else if (GTKDOC_COMPARE_FLOAT (value, G_MINFLOAT))
1194 desc = g_strdup ("G_MINFLOAT");
1195 else if (GTKDOC_COMPARE_FLOAT (value, -G_MAXFLOAT))
1196 desc = g_strdup ("-G_MAXFLOAT");
1198 desc = g_strdup_printf ("%lg", value);
1204 describe_signed_constant (gint64 value)
1208 if (value == G_MAXINT)
1209 desc = g_strdup ("G_MAXINT");
1210 else if (value == G_MININT)
1211 desc = g_strdup ("G_MININT");
1212 else if (value == G_MAXUINT)
1213 desc = g_strdup ("G_MAXUINT");
1214 else if (value == G_MAXLONG)
1215 desc = g_strdup ("G_MAXLONG");
1216 else if (value == G_MINLONG)
1217 desc = g_strdup ("G_MINLONG");
1218 else if (value == G_MAXULONG)
1219 desc = g_strdup ("G_MAXULONG");
1220 else if (value == G_MAXINT64)
1221 desc = g_strdup ("G_MAXINT64");
1222 else if (value == G_MININT64)
1223 desc = g_strdup ("G_MININT64");
1225 desc = g_strdup_printf ("%" G_GINT64_FORMAT, value);
1231 describe_unsigned_constant (guint64 value)
1235 if (value == G_MAXINT)
1236 desc = g_strdup ("G_MAXINT");
1237 else if (value == G_MININT)
1238 desc = g_strdup ("G_MININT");
1239 else if (value == G_MAXUINT)
1240 desc = g_strdup ("G_MAXUINT");
1241 else if (value == G_MAXLONG)
1242 desc = g_strdup ("G_MAXLONG");
1243 else if (value == G_MINLONG)
1244 desc = g_strdup ("G_MINLONG");
1245 else if (value == G_MAXULONG)
1246 desc = g_strdup ("G_MAXULONG");
1247 else if (value == G_MAXINT64)
1248 desc = g_strdup ("G_MAXINT64");
1249 else if (value == G_MININT64)
1250 desc = g_strdup ("G_MININT64");
1251 else if (value == G_MAXUINT64)
1252 desc = g_strdup ("G_MAXUINT64");
1254 desc = g_strdup_printf ("%" G_GUINT64_FORMAT, value);
1260 describe_type (GParamSpec *spec)
1266 if (G_IS_PARAM_SPEC_CHAR (spec))
1268 GParamSpecChar *pspec = G_PARAM_SPEC_CHAR (spec);
1270 lower = describe_signed_constant (pspec->minimum);
1271 upper = describe_signed_constant (pspec->maximum);
1272 if (pspec->minimum == G_MININT8 && pspec->maximum == G_MAXINT8)
1273 desc = g_strdup ("");
1274 else if (pspec->minimum == G_MININT8)
1275 desc = g_strdup_printf ("<= %s", upper);
1276 else if (pspec->maximum == G_MAXINT8)
1277 desc = g_strdup_printf (">= %s", lower);
1279 desc = g_strdup_printf ("[%s,%s]", lower, upper);
1283 else if (G_IS_PARAM_SPEC_UCHAR (spec))
1285 GParamSpecUChar *pspec = G_PARAM_SPEC_UCHAR (spec);
1287 lower = describe_unsigned_constant (pspec->minimum);
1288 upper = describe_unsigned_constant (pspec->maximum);
1289 if (pspec->minimum == 0 && pspec->maximum == G_MAXUINT8)
1290 desc = g_strdup ("");
1291 else if (pspec->minimum == 0)
1292 desc = g_strdup_printf ("<= %s", upper);
1293 else if (pspec->maximum == G_MAXUINT8)
1294 desc = g_strdup_printf (">= %s", lower);
1296 desc = g_strdup_printf ("[%s,%s]", lower, upper);
1300 else if (G_IS_PARAM_SPEC_INT (spec))
1302 GParamSpecInt *pspec = G_PARAM_SPEC_INT (spec);
1304 lower = describe_signed_constant (pspec->minimum);
1305 upper = describe_signed_constant (pspec->maximum);
1306 if (pspec->minimum == G_MININT && pspec->maximum == G_MAXINT)
1307 desc = g_strdup ("");
1308 else if (pspec->minimum == G_MININT)
1309 desc = g_strdup_printf ("<= %s", upper);
1310 else if (pspec->maximum == G_MAXINT)
1311 desc = g_strdup_printf (">= %s", lower);
1313 desc = g_strdup_printf ("[%s,%s]", lower, upper);
1317 else if (G_IS_PARAM_SPEC_UINT (spec))
1319 GParamSpecUInt *pspec = G_PARAM_SPEC_UINT (spec);
1321 lower = describe_unsigned_constant (pspec->minimum);
1322 upper = describe_unsigned_constant (pspec->maximum);
1323 if (pspec->minimum == 0 && pspec->maximum == G_MAXUINT)
1324 desc = g_strdup ("");
1325 else if (pspec->minimum == 0)
1326 desc = g_strdup_printf ("<= %s", upper);
1327 else if (pspec->maximum == G_MAXUINT)
1328 desc = g_strdup_printf (">= %s", lower);
1330 desc = g_strdup_printf ("[%s,%s]", lower, upper);
1334 else if (G_IS_PARAM_SPEC_LONG (spec))
1336 GParamSpecLong *pspec = G_PARAM_SPEC_LONG (spec);
1338 lower = describe_signed_constant (pspec->minimum);
1339 upper = describe_signed_constant (pspec->maximum);
1340 if (pspec->minimum == G_MINLONG && pspec->maximum == G_MAXLONG)
1341 desc = g_strdup ("");
1342 else if (pspec->minimum == G_MINLONG)
1343 desc = g_strdup_printf ("<= %s", upper);
1344 else if (pspec->maximum == G_MAXLONG)
1345 desc = g_strdup_printf (">= %s", lower);
1347 desc = g_strdup_printf ("[%s,%s]", lower, upper);
1351 else if (G_IS_PARAM_SPEC_ULONG (spec))
1353 GParamSpecULong *pspec = G_PARAM_SPEC_ULONG (spec);
1356 lower = describe_unsigned_constant (pspec->minimum);
1357 upper = describe_unsigned_constant (pspec->maximum);
1358 if (pspec->minimum == 0 && pspec->maximum == G_MAXULONG)
1359 desc = g_strdup ("");
1360 else if (pspec->minimum == 0)
1361 desc = g_strdup_printf ("<= %s", upper);
1362 else if (pspec->maximum == G_MAXULONG)
1363 desc = g_strdup_printf (">= %s", lower);
1365 desc = g_strdup_printf ("[%s,%s]", lower, upper);
1369 else if (G_IS_PARAM_SPEC_INT64 (spec))
1371 GParamSpecInt64 *pspec = G_PARAM_SPEC_INT64 (spec);
1373 lower = describe_signed_constant (pspec->minimum);
1374 upper = describe_signed_constant (pspec->maximum);
1375 if (pspec->minimum == G_MININT64 && pspec->maximum == G_MAXINT64)
1376 desc = g_strdup ("");
1377 else if (pspec->minimum == G_MININT64)
1378 desc = g_strdup_printf ("<= %s", upper);
1379 else if (pspec->maximum == G_MAXINT64)
1380 desc = g_strdup_printf (">= %s", lower);
1382 desc = g_strdup_printf ("[%s,%s]", lower, upper);
1386 else if (G_IS_PARAM_SPEC_UINT64 (spec))
1388 GParamSpecUInt64 *pspec = G_PARAM_SPEC_UINT64 (spec);
1390 lower = describe_unsigned_constant (pspec->minimum);
1391 upper = describe_unsigned_constant (pspec->maximum);
1392 if (pspec->minimum == 0 && pspec->maximum == G_MAXUINT64)
1393 desc = g_strdup ("");
1394 else if (pspec->minimum == 0)
1395 desc = g_strdup_printf ("<= %s", upper);
1396 else if (pspec->maximum == G_MAXUINT64)
1397 desc = g_strdup_printf (">= %s", lower);
1399 desc = g_strdup_printf ("[%s,%s]", lower, upper);
1403 else if (G_IS_PARAM_SPEC_FLOAT (spec))
1405 GParamSpecFloat *pspec = G_PARAM_SPEC_FLOAT (spec);
1407 lower = describe_double_constant (pspec->minimum);
1408 upper = describe_double_constant (pspec->maximum);
1409 if (GTKDOC_COMPARE_FLOAT (pspec->minimum, -G_MAXFLOAT))
1411 if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXFLOAT))
1412 desc = g_strdup ("");
1414 desc = g_strdup_printf ("<= %s", upper);
1416 else if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXFLOAT))
1417 desc = g_strdup_printf (">= %s", lower);
1419 desc = g_strdup_printf ("[%s,%s]", lower, upper);
1423 else if (G_IS_PARAM_SPEC_DOUBLE (spec))
1425 GParamSpecDouble *pspec = G_PARAM_SPEC_DOUBLE (spec);
1427 lower = describe_double_constant (pspec->minimum);
1428 upper = describe_double_constant (pspec->maximum);
1429 if (GTKDOC_COMPARE_FLOAT (pspec->minimum, -G_MAXDOUBLE))
1431 if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXDOUBLE))
1432 desc = g_strdup ("");
1434 desc = g_strdup_printf ("<= %s", upper);
1436 else if (GTKDOC_COMPARE_FLOAT (pspec->maximum, G_MAXDOUBLE))
1437 desc = g_strdup_printf (">= %s", lower);
1439 desc = g_strdup_printf ("[%s,%s]", lower, upper);
1445 desc = g_strdup ("");
1452 describe_default (GParamSpec *spec)
1456 if (G_IS_PARAM_SPEC_CHAR (spec))
1458 GParamSpecChar *pspec = G_PARAM_SPEC_CHAR (spec);
1460 desc = g_strdup_printf ("%d", pspec->default_value);
1462 else if (G_IS_PARAM_SPEC_UCHAR (spec))
1464 GParamSpecUChar *pspec = G_PARAM_SPEC_UCHAR (spec);
1466 desc = g_strdup_printf ("%u", pspec->default_value);
1468 else if (G_IS_PARAM_SPEC_BOOLEAN (spec))
1470 GParamSpecBoolean *pspec = G_PARAM_SPEC_BOOLEAN (spec);
1472 desc = g_strdup_printf ("%s", pspec->default_value ? "TRUE" : "FALSE");
1474 else if (G_IS_PARAM_SPEC_INT (spec))
1476 GParamSpecInt *pspec = G_PARAM_SPEC_INT (spec);
1478 desc = g_strdup_printf ("%d", pspec->default_value);
1480 else if (G_IS_PARAM_SPEC_UINT (spec))
1482 GParamSpecUInt *pspec = G_PARAM_SPEC_UINT (spec);
1484 desc = g_strdup_printf ("%u", pspec->default_value);
1486 else if (G_IS_PARAM_SPEC_LONG (spec))
1488 GParamSpecLong *pspec = G_PARAM_SPEC_LONG (spec);
1490 desc = g_strdup_printf ("%ld", pspec->default_value);
1492 else if (G_IS_PARAM_SPEC_LONG (spec))
1494 GParamSpecULong *pspec = G_PARAM_SPEC_ULONG (spec);
1496 desc = g_strdup_printf ("%lu", pspec->default_value);
1498 else if (G_IS_PARAM_SPEC_INT64 (spec))
1500 GParamSpecInt64 *pspec = G_PARAM_SPEC_INT64 (spec);
1502 desc = g_strdup_printf ("%" G_GINT64_FORMAT, pspec->default_value);
1504 else if (G_IS_PARAM_SPEC_UINT64 (spec))
1506 GParamSpecUInt64 *pspec = G_PARAM_SPEC_UINT64 (spec);
1508 desc = g_strdup_printf ("%" G_GUINT64_FORMAT, pspec->default_value);
1510 else if (G_IS_PARAM_SPEC_UNICHAR (spec))
1512 GParamSpecUnichar *pspec = G_PARAM_SPEC_UNICHAR (spec);
1514 if (g_unichar_isprint (pspec->default_value))
1515 desc = g_strdup_printf ("'%c'", pspec->default_value);
1517 desc = g_strdup_printf ("%u", pspec->default_value);
1519 else if (G_IS_PARAM_SPEC_ENUM (spec))
1521 GParamSpecEnum *pspec = G_PARAM_SPEC_ENUM (spec);
1523 GEnumValue *value = g_enum_get_value (pspec->enum_class, pspec->default_value);
1525 desc = g_strdup_printf ("%s", value->value_name);
1527 desc = g_strdup_printf ("%d", pspec->default_value);
1529 else if (G_IS_PARAM_SPEC_FLAGS (spec))
1531 GParamSpecFlags *pspec = G_PARAM_SPEC_FLAGS (spec);
1532 guint default_value;
1535 default_value = pspec->default_value;
1536 acc = g_string_new ("");
1538 while (default_value)
1540 GFlagsValue *value = g_flags_get_first_value (pspec->flags_class, default_value);
1546 g_string_append (acc, "|");
1547 g_string_append (acc, value->value_name);
1549 default_value &= ~value->value;
1552 if (default_value == 0)
1553 desc = g_string_free (acc, FALSE);
1556 desc = g_strdup_printf ("%d", pspec->default_value);
1557 g_string_free (acc, TRUE);
1560 else if (G_IS_PARAM_SPEC_FLOAT (spec))
1562 GParamSpecFloat *pspec = G_PARAM_SPEC_FLOAT (spec);
1564 desc = g_strdup_printf ("%g", pspec->default_value);
1566 else if (G_IS_PARAM_SPEC_DOUBLE (spec))
1568 GParamSpecDouble *pspec = G_PARAM_SPEC_DOUBLE (spec);
1570 desc = g_strdup_printf ("%lg", pspec->default_value);
1572 else if (G_IS_PARAM_SPEC_STRING (spec))
1574 GParamSpecString *pspec = G_PARAM_SPEC_STRING (spec);
1576 if (pspec->default_value)
1578 gchar *esc = g_strescape (pspec->default_value, NULL);
1580 desc = g_strdup_printf ("\\"%s\\"", esc);
1585 desc = g_strdup_printf ("NULL");
1589 desc = g_strdup ("");
1597 output_object_args (FILE *fp, GType object_type)
1600 const gchar *object_class_name;
1602 gchar flags[16], *pos;
1603 GParamSpec **properties;
1605 gboolean child_prop;
1606 gboolean style_prop;
1607 gboolean is_pointer;
1608 const gchar *type_name;
1610 gchar *default_value;
1612 if (G_TYPE_IS_OBJECT (object_type))
1614 class = g_type_class_peek (object_type);
1618 properties = g_object_class_list_properties (class, &n_properties);
1620 #if GLIB_MAJOR_VERSION > 2 || (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION >= 3)
1621 else if (G_TYPE_IS_INTERFACE (object_type))
1623 class = g_type_default_interface_ref (object_type);
1628 properties = g_object_interface_list_properties (class, &n_properties);
1634 object_class_name = g_type_name (object_type);
1640 qsort (properties, n_properties, sizeof (GParamSpec *), compare_param_specs);
1641 for (arg = 0; arg < n_properties; arg++)
1643 GParamSpec *spec = properties[arg];
1644 const gchar *nick, *blurb, *dot;
1646 if (spec->owner_type != object_type)
1650 /* We use one-character flags for simplicity. */
1651 if (child_prop && !style_prop)
1655 if (spec->flags & G_PARAM_READABLE)
1657 if (spec->flags & G_PARAM_WRITABLE)
1659 if (spec->flags & G_PARAM_CONSTRUCT)
1661 if (spec->flags & G_PARAM_CONSTRUCT_ONLY)
1665 nick = g_param_spec_get_nick (spec);
1666 blurb = g_param_spec_get_blurb (spec);
1670 int str_len = strlen (blurb);
1671 if (str_len > 0 && blurb[str_len - 1] != '.')
1675 type_desc = describe_type (spec);
1676 default_value = describe_default (spec);
1677 type_name = get_type_name (spec->value_type, &is_pointer);
1678 fprintf (fp, "<ARG>\\n<NAME>%s::%s</NAME>\\n<TYPE>%s%s</TYPE>\\n<RANGE>%s</RANGE>\\n<FLAGS>%s</FLAGS>\\n<NICK>%s</NICK>\\n<BLURB>%s%s</BLURB>\\n<DEFAULT>%s</DEFAULT>\\n</ARG>\\n\\n",
1679 object_class_name, g_param_spec_get_name (spec), type_name, is_pointer ? "*" : "", type_desc, flags, nick ? nick : "(null)", blurb ? blurb : "(null)", dot, default_value);
1681 g_free (default_value);
1684 g_free (properties);
1686 #ifdef GTK_IS_CONTAINER_CLASS
1687 if (!child_prop && GTK_IS_CONTAINER_CLASS (class)) {
1688 properties = gtk_container_class_list_child_properties (class, &n_properties);
1694 #ifdef GTK_IS_WIDGET_CLASS
1695 #if GTK_CHECK_VERSION(2,1,0)
1696 if (!style_prop && GTK_IS_WIDGET_CLASS (class)) {
1697 properties = gtk_widget_class_list_style_properties (GTK_WIDGET_CLASS (class), &n_properties);
1711 # Compile and run our file
1713 $CC = $ENV{CC} ? $ENV{CC} : "gcc";
1714 $LD = $ENV{LD} ? $ENV{LD} : $CC;
1715 $CFLAGS = $ENV{CFLAGS} ? "$ENV{CFLAGS} -Wall -g" : "-Wall -g";
1716 $LDFLAGS = $ENV{LDFLAGS} ? $ENV{LDFLAGS} : "";
1719 if ($CC =~ /libtool/) {
1720 $o_file = "$MODULE-scan.lo"
1722 $o_file = "$MODULE-scan.o"
1725 print "gtk-doc: Compiling scanner\n";
1726 $command = "$CC $CFLAGS -c -o $o_file $MODULE-scan.c";
1727 system($command) == 0 or die "Compilation of scanner failed: $!\n";
1729 print "gtk-doc: Linking scanner\n";
1730 $command = "$LD -o $MODULE-scan $o_file $LDFLAGS";
1731 system($command) == 0 or die "Linking of scanner failed: $!\n";
1733 print "gtk-doc: Running scanner $MODULE-scan\n";
1734 system("sh -c ./$MODULE-scan") == 0 or die "Scan failed: $!\n";
1736 if (!defined($ENV{"GTK_DOC_KEEP_INTERMEDIATE"})) {
1737 unlink "./$MODULE-scan.c", "./$MODULE-scan.o", "./$MODULE-scan.lo", "./$MODULE-scan";
1740 #&UpdateFileIfChanged ($old_signals_filename, $new_signals_filename, 0);
1741 &UpdateFileIfChanged ($old_hierarchy_filename, $new_hierarchy_filename, 0);
1742 &UpdateFileIfChanged ($old_interfaces_filename, $new_interfaces_filename, 0);
1743 &UpdateFileIfChanged ($old_prerequisites_filename, $new_prerequisites_filename, 0);
1744 #&UpdateFileIfChanged ($old_args_filename, $new_args_filename, 0);