gboolean anjuta_pm_project_refresh (AnjutaPmProject *project, GError **error) { ianjuta_project_load_node (project->project, project->root, NULL); return TRUE; }
static void on_pm_project_load_incomplete (AnjutaProjectNode *node, AnjutaPmProject *project) { gint state = anjuta_project_node_get_state (node); /* Get capabilities for all existing node */ project->node_capabilities |= state; if ((state & ANJUTA_PROJECT_INCOMPLETE) && !(state & ANJUTA_PROJECT_LOADING)) { //g_message ("incomplete node %s", anjuta_project_node_get_name (node)); project->incomplete_node++; anjuta_project_node_set_state (node, ANJUTA_PROJECT_LOADING); //g_message ("load incomplete %p", node); ianjuta_project_load_node (project->project, node, NULL); } }
static void on_file_changed (IAnjutaProject *sender, AnjutaProjectNode *node, AnjutaPmProject *project) { ianjuta_project_load_node (project->project, node, NULL); }
gboolean anjuta_pm_project_load (AnjutaPmProject *project, GFile *file, GError **error) { AnjutaPluginManager *plugin_manager; GList *desc; IAnjutaProjectBackend *backend; gint found = 0; GValue value = {0, }; g_return_val_if_fail (file != NULL, FALSE); DEBUG_PRINT ("loading gbf backend…\n"); plugin_manager = anjuta_shell_get_plugin_manager (project->plugin->shell, NULL); if (!anjuta_plugin_manager_is_active_plugin (plugin_manager, "IAnjutaProjectBackend")) { GList *descs = NULL; descs = anjuta_plugin_manager_query (plugin_manager, "Anjuta Plugin", "Interfaces", "IAnjutaProjectBackend", NULL); backend = NULL; for (desc = g_list_first (descs); desc != NULL; desc = g_list_next (desc)) { AnjutaPluginDescription *backend_desc; gchar *location = NULL; IAnjutaProjectBackend *plugin; gint backend_val; backend_desc = (AnjutaPluginDescription *)desc->data; anjuta_plugin_description_get_string (backend_desc, "Anjuta Plugin", "Location", &location); plugin = (IAnjutaProjectBackend *)anjuta_plugin_manager_get_plugin_by_id (plugin_manager, location); g_free (location); backend_val = ianjuta_project_backend_probe (plugin, file, NULL); if (backend_val > found) { /* Backend found */; backend = plugin; found = backend_val; } } g_list_free (descs); } else { /* A backend is already loaded, use it */ backend = IANJUTA_PROJECT_BACKEND (anjuta_shell_get_object (project->plugin->shell, "IAnjutaProjectBackend", NULL)); g_object_ref (backend); } if (!backend) { /* FIXME: Set err */ g_warning ("no backend available for this project\n"); return FALSE; } DEBUG_PRINT ("%s", "Creating new gbf project\n"); project->project = ianjuta_project_backend_new_project (backend, file, NULL); if (!project->project) { /* FIXME: Set err */ g_warning ("project creation failed\n"); return FALSE; } g_signal_connect (G_OBJECT (project->project), "file-changed", G_CALLBACK (on_file_changed), project); g_signal_connect (G_OBJECT (project->project), "node-loaded", G_CALLBACK (on_node_loaded), project); g_signal_connect (G_OBJECT (project->project), "node-changed", G_CALLBACK (on_node_changed), project); project->root = ianjuta_project_get_root (project->project, NULL); /* Export project root shell variable */ g_value_init (&value, G_TYPE_OBJECT); g_value_set_object (&value, project->project); anjuta_shell_add_value (project->plugin->shell, IANJUTA_PROJECT_MANAGER_CURRENT_PROJECT, &value, NULL); g_value_unset(&value); g_value_init (&value, G_TYPE_STRING); g_value_set_string (&value, ANJUTA_PLUGIN_PROJECT_MANAGER (project->plugin)->project_root_uri); anjuta_shell_add_value (project->plugin->shell, IANJUTA_PROJECT_MANAGER_PROJECT_ROOT_URI, &value, NULL); g_value_unset(&value); ianjuta_project_load_node (project->project, project->root, NULL); return TRUE; }
int main(int argc, char *argv[]) { IAnjutaProject *project = NULL; AnjutaProjectNode *node; AnjutaProjectNode *child; AnjutaProjectNode *sibling; AnjutaProjectNode *root = NULL; char **command; GOptionContext *context; GError *error = NULL; /* Initialize program */ g_type_init (); /* Parse options */ context = g_option_context_new ("list [args]"); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); g_option_context_set_summary (context, "test new autotools project manger"); if (!g_option_context_parse (context, &argc, &argv, &error)) { exit (1); } if (argc < 2) { printf ("PROJECT: %s", g_option_context_get_help (context, TRUE, NULL)); exit (1); } open_output (); /* Execute commands */ for (command = &argv[1]; *command != NULL; command++) { if (g_ascii_strcasecmp (*command, "load") == 0) { GFile *file = g_file_new_for_commandline_arg (*(++command)); if (project == NULL) { gint best = 0; gint probe; GType type; GTypeModule *module; /* Register project types */ module = g_object_new (dummy_type_module_get_type (), NULL); amp_project_register (module); /* Check for project type */ probe = amp_project_probe (file, NULL); if (probe > best) { best = probe; type = AMP_TYPE_PROJECT; } if (best == 0) { print_error ("Error: No backend for loading project in %s", *command); break; } else { project = IANJUTA_PROJECT (amp_project_new (file, NULL, NULL)); } } root = ianjuta_project_get_root (project, &error); ianjuta_project_load_node (project, root, &error); g_object_unref (file); } else if (g_ascii_strcasecmp (*command, "list") == 0) { list_root (project, root); } else if (g_ascii_strcasecmp (*command, "move") == 0) { if (AMP_IS_PROJECT (project)) { amp_project_move (AMP_PROJECT (project), *(++command)); } } else if (g_ascii_strcasecmp (*command, "save") == 0) { ianjuta_project_save_node (project, root, NULL); } else if (g_ascii_strcasecmp (*command, "remove") == 0) { node = get_node (project, root, *(++command)); ianjuta_project_remove_node (project, node, NULL); } else if (g_ascii_strcasecmp (*command, "dump") == 0) { if (g_ascii_strcasecmp (command[1], "makefile") == 0) { node = get_node (project, root, command[2]); amp_project_dump (AMP_PROJECT (project), node, DUMP_MAKEFILE); command +=2; } else if (g_ascii_strcasecmp (command[1], "configure") == 0) { amp_project_dump (AMP_PROJECT (project), root, DUMP_CONFIGURE); command +=1; } else { print_error ("Error: unknown command %s %s", *command, command[1]); break; } } else if (g_ascii_strcasecmp (command[0], "add") == 0) { node = get_node (project, root, command[2]); if (g_ascii_strcasecmp (command[1], "group") == 0) { if ((command[4] != NULL) && (g_ascii_strcasecmp (command[4], "before") == 0)) { sibling = get_node (project, root, command[5]); child = ianjuta_project_add_node_before (project, node, sibling, ANJUTA_PROJECT_GROUP, NULL, command[3], &error); command += 2; } else if ((command[4] != NULL) && (g_ascii_strcasecmp (command[4], "after") == 0)) { sibling = get_node (project, root, command[5]); child = ianjuta_project_add_node_after (project, node, sibling, ANJUTA_PROJECT_GROUP, NULL, command[3], &error); command += 2; } else { child = ianjuta_project_add_node_before (project, node, NULL, ANJUTA_PROJECT_GROUP, NULL, command[3], &error); } } else if (g_ascii_strcasecmp (command[1], "target") == 0) { if ((command[5] != NULL) && (g_ascii_strcasecmp (command[5], "before") == 0)) { sibling = get_node (project, root, command[6]); child = ianjuta_project_add_node_before (project, node, sibling, ANJUTA_PROJECT_TARGET | get_target_type (project, command[4]), NULL, command[3], &error); command += 2; } else if ((command[5] != NULL) && (g_ascii_strcasecmp (command[5], "after") == 0)) { sibling = get_node (project, root, command[6]); child = ianjuta_project_add_node_after (project, node, sibling, ANJUTA_PROJECT_TARGET | get_target_type (project, command[4]), NULL, command[3], &error); command += 2; } else { child = ianjuta_project_add_node_before (project, node, NULL, ANJUTA_PROJECT_TARGET | get_target_type (project, command[4]), NULL, command[3], &error); } command++; } else if (g_ascii_strcasecmp (command[1], "source") == 0) { GFile *file = get_file (node, command[3]); if ((command[4] != NULL) && (g_ascii_strcasecmp (command[4], "before") == 0)) { sibling = get_node (project, root, command[5]); child = ianjuta_project_add_node_before (project, node, sibling, ANJUTA_PROJECT_SOURCE, file, NULL, &error); command += 2; } else if ((command[4] != NULL) && (g_ascii_strcasecmp (command[4], "after") == 0)) { sibling = get_node (project, root, command[5]); child = ianjuta_project_add_node_after (project, node, sibling, ANJUTA_PROJECT_SOURCE, file, NULL, &error); command += 2; } else { child = ianjuta_project_add_node_before (project, node, NULL, ANJUTA_PROJECT_SOURCE, file, NULL, &error); } g_object_unref (file); } else if (g_ascii_strcasecmp (command[1], "module") == 0) { if ((command[4] != NULL) && (g_ascii_strcasecmp (command[4], "before") == 0)) { sibling = get_node (project, root, command[5]); child = ianjuta_project_add_node_before (project, node, sibling, ANJUTA_PROJECT_MODULE, NULL, command[3], &error); command += 2; } else if ((command[4] != NULL) && (g_ascii_strcasecmp (command[4], "after") == 0)) { sibling = get_node (project, root, command[5]); child = ianjuta_project_add_node_after (project, node, sibling, ANJUTA_PROJECT_MODULE, NULL, command[3], &error); command += 2; } else { child = ianjuta_project_add_node_before (project, node, NULL, ANJUTA_PROJECT_MODULE, NULL, command[3], &error); } } else if (g_ascii_strcasecmp (command[1], "package") == 0) { if ((command[4] != NULL) && (g_ascii_strcasecmp (command[4], "before") == 0)) { sibling = get_node (project, root, command[5]); child = ianjuta_project_add_node_before (project, node, sibling, ANJUTA_PROJECT_PACKAGE, NULL, command[3], &error); command += 2; } else if ((command[4] != NULL) && (g_ascii_strcasecmp (command[4], "after") == 0)) { sibling = get_node (project, root, command[5]); child = ianjuta_project_add_node_after (project, node, sibling, ANJUTA_PROJECT_PACKAGE, NULL, command[3], &error); command += 2; } else { child = ianjuta_project_add_node_before (project, node, NULL, ANJUTA_PROJECT_PACKAGE, NULL, command[3], &error); } } else { print_error ("Error: unknown command %s", *command); break; } command += 3; } else if (g_ascii_strcasecmp (command[0], "set") == 0) { if (AMP_IS_PROJECT (project)) { AnjutaProjectPropertyInfo *info; node = get_node (project, root, command[1]); info = get_project_property (project, node, command[2]); if (info != NULL) { gchar *value = g_shell_unquote (command[3], NULL); ianjuta_project_set_property (project, node, info->id, NULL, value, NULL); g_free (value); } } command += 3; } else if (g_ascii_strcasecmp (command[0], "clear") == 0) { if (AMP_IS_PROJECT (project)) { AnjutaProjectPropertyInfo *info; node = get_node (project, root, command[1]); info = get_project_property (project, node, command[2]); if (info != NULL) { ianjuta_project_remove_property (project, node, info->id, NULL, NULL); } } command += 2; } else { print_error ("Error: unknown command %s", *command); break; } amp_project_wait_ready (project); if (error != NULL) { print_error ("Error: %s", error->message == NULL ? "unknown error" : error->message); g_error_free (error); error = NULL; } } /* Free objects */ if (project) g_object_unref (project); close_output (); return (0); }