static gboolean amp_source_node_update (AmpNode *node, AmpNode *new_node) { amp_source_node_update_node (AMP_SOURCE_NODE (node), AMP_SOURCE_NODE (new_node)); return TRUE; }
static void amp_source_node_finalize (GObject *object) { AmpSourceNode *node = AMP_SOURCE_NODE (object); G_OBJECT_CLASS (amp_source_node_parent_class)->finalize (object); }
static gboolean amp_source_node_erase (AmpNode *node, AmpNode *parent, AmpProject *project, GError **error) { return amp_source_node_delete_token (project, AMP_SOURCE_NODE (node), error); }
gboolean amp_source_node_create_token (AmpProject *project, AmpSourceNode *source, GError **error) { AmpGroupNode *group; AmpTargetNode *target; AnjutaProjectNode *sibling; gboolean after; AnjutaToken *token; AnjutaToken *prev; AnjutaToken *args; gchar *relative_name; /* Get parent target */ target = AMP_TARGET_NODE (anjuta_project_node_parent_type (ANJUTA_PROJECT_NODE (source), ANJUTA_PROJECT_TARGET)); if (target == NULL) return FALSE; group = AMP_GROUP_NODE (anjuta_project_node_parent_type (ANJUTA_PROJECT_NODE (target), ANJUTA_PROJECT_GROUP)); relative_name = get_relative_path (anjuta_project_node_get_file (ANJUTA_PROJECT_NODE (group)), anjuta_project_node_get_file (ANJUTA_PROJECT_NODE (source))); /* Add in Makefile.am */ /* Find a sibling if possible */ after = TRUE; for (sibling = anjuta_project_node_prev_sibling (ANJUTA_PROJECT_NODE (source)); sibling != NULL; sibling = anjuta_project_node_prev_sibling (sibling)) { if (anjuta_project_node_get_node_type (sibling) == ANJUTA_PROJECT_SOURCE) { break; } else if (anjuta_project_node_get_node_type (sibling) == ANJUTA_PROJECT_OBJECT) { sibling = anjuta_project_node_first_child (sibling); break; } } if (sibling == NULL) { after = FALSE; for (sibling = anjuta_project_node_next_sibling (ANJUTA_PROJECT_NODE (source)); sibling != NULL; sibling = anjuta_project_node_next_sibling (sibling)) { if (anjuta_project_node_get_node_type (sibling) == ANJUTA_PROJECT_SOURCE) { break; } else if (anjuta_project_node_get_node_type (sibling) == ANJUTA_PROJECT_OBJECT) { sibling = anjuta_project_node_first_child (sibling); break; } } } if (sibling == NULL) { after = TRUE; prev = NULL; args = NULL; } else { prev = amp_source_node_get_token (AMP_SOURCE_NODE (sibling)); args = anjuta_token_list (prev); } /* Check if a valid source variable is already defined */ if (args == NULL) { GList *last; for (last = amp_target_node_get_token (target, AM_TOKEN__SOURCES); last != NULL; last = g_list_next (last)) { args = anjuta_token_last_item ((AnjutaToken *)last->data); break; } if (last == NULL) { for (last = amp_target_node_get_token (target, AM_TOKEN__DATA); last != NULL; last = g_list_next (last)) { args = anjuta_token_last_item ((AnjutaToken *)last->data); break; } } } if (args == NULL) { gchar *target_var; gchar *canon_name; AnjutaToken *var; canon_name = canonicalize_automake_variable (anjuta_project_node_get_name (ANJUTA_PROJECT_NODE (target))); target_var = g_strconcat (canon_name, "_SOURCES", NULL); var = anjuta_token_find_target_property_position (target, AM_TOKEN__SOURCES); if (var == NULL) var = anjuta_token_find_target_property_position (target, AM_TOKEN__DATA); args = anjuta_token_insert_token_list (FALSE, var, ANJUTA_TOKEN_LIST, NULL, ANJUTA_TOKEN_NAME, target_var, ANJUTA_TOKEN_SPACE, " ", ANJUTA_TOKEN_OPERATOR, "=", ANJUTA_TOKEN_LIST, NULL, ANJUTA_TOKEN_SPACE, " ", NULL); args = anjuta_token_last_item (args); g_free (target_var); } if (args != NULL) { AnjutaTokenStyle *style; style = anjuta_token_style_new_from_base (project->am_space_list); anjuta_token_style_update (style, args); token = anjuta_token_new_string (ANJUTA_TOKEN_NAME | ANJUTA_TOKEN_ADDED, relative_name); if (after) { anjuta_token_insert_word_after (args, prev, token); } else { anjuta_token_insert_word_before (args, prev, token); } /* Try to use the same style than the current target list */ anjuta_token_style_format (style, args); anjuta_token_style_free (style); amp_group_node_update_makefile (group, token); amp_source_node_add_token (source, token); } return TRUE; }