[anjuta/newproject] am: Read _DATA targets
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [anjuta/newproject] am: Read _DATA targets
- Date: Tue, 26 Jan 2010 21:42:06 +0000 (UTC)
commit e395fa2cfcb397cc700d0f9dabab092d7a53fae7
Author: Sébastien Granjoux <seb sfo free fr>
Date: Tue Jan 26 22:41:29 2010 +0100
am: Read _DATA targets
plugins/am-project/am-project.c | 88 ++++++++++++++++++++++++++++++++++++++-
1 files changed, 86 insertions(+), 2 deletions(-)
---
diff --git a/plugins/am-project/am-project.c b/plugins/am-project/am-project.c
index 3f8129c..17fbc8f 100644
--- a/plugins/am-project/am-project.c
+++ b/plugins/am-project/am-project.c
@@ -608,6 +608,7 @@ static void
amp_group_add_token (AmpGroup *node, AnjutaToken *token, AmpGroupTokenCategory category)
{
AmpGroupData *group;
+
g_return_if_fail ((node != NULL) && (node->data != NULL));
@@ -1276,6 +1277,89 @@ project_load_sources (AmpProject *project, AnjutaToken *name, AnjutaToken *list,
return NULL;
}
+static AnjutaToken*
+project_load_data (AmpProject *project, AnjutaToken *name, AnjutaToken *list, AnjutaProjectGroup *parent, GHashTable *orphan_sources)
+{
+ AnjutaProjectTargetType type = NULL;
+ gchar *install;
+ AnjutaProjectTarget *target;
+ gchar *target_id;
+ gpointer find;
+ gint flags;
+ AmpTargetInformation *targets = AmpTargetTypes;
+ AnjutaToken *arg;
+
+ type = (AnjutaProjectTargetType)targets;
+ while (targets->base.name != NULL)
+ {
+ if (anjuta_token_get_type (name) == targets->token)
+ {
+ type = (AnjutaProjectTargetType)targets;
+ break;
+ }
+ targets++;
+ }
+
+ target_id = anjuta_token_evaluate (name);
+ split_automake_variable (target_id, &flags, &install, NULL);
+ /*if (target_id)
+ {
+ gchar *end = strrchr (target_id, '_');
+ if (end)
+ {
+ *end = '\0';
+ }
+ }*/
+
+ amp_group_add_token (parent, name, AM_GROUP_TARGET);
+
+ /* Check if target already exists */
+ find = target_id;
+ anjuta_project_node_children_foreach (parent, find_target, &find);
+ if ((gchar *)find == target_id)
+ {
+ /* Create target */
+ target = amp_target_new (target_id, type, install, flags);
+ amp_target_add_token (target, arg);
+ anjuta_project_node_append (parent, target);
+ DEBUG_PRINT ("create target %p name %s", target, target_id);
+ }
+ else
+ {
+ target = (AnjutaProjectTarget *)find;
+ }
+ g_free (target_id);
+
+ if (target)
+ {
+ GFile *parent_file = g_object_ref (AMP_GROUP_DATA (parent)->base.directory);
+
+ for (arg = anjuta_token_first_word (list); arg != NULL; arg = anjuta_token_next_word (arg))
+ {
+ gchar *value;
+ AmpSource *source;
+ GFile *src_file;
+
+ value = anjuta_token_evaluate (arg);
+
+ /* Create source */
+ src_file = g_file_get_child (parent_file, value);
+ source = amp_source_new (src_file);
+ g_object_unref (src_file);
+ AMP_SOURCE_DATA(source)->token = arg;
+
+ /* Add as target child */
+ DEBUG_PRINT ("add target child %p", target);
+ anjuta_project_node_append (target, source);
+
+ g_free (value);
+ }
+ g_object_unref (parent_file);
+ }
+
+ return NULL;
+}
+
static AmpGroup* project_load_makefile (AmpProject *project, GFile *file, AmpGroup *parent, gboolean dist_only);
static void
@@ -1338,7 +1422,6 @@ project_load_makefile (AmpProject *project, GFile *file, AnjutaProjectGroup *par
AmpAmScanner *scanner;
AmpGroup *group;
//AnjutaToken *significant_tok;
- AnjutaToken *arg;
AnjutaTokenFile *tfile;
GFile *makefile = NULL;
@@ -1411,6 +1494,8 @@ amp_project_set_am_variable (AmpProject* project, AmpGroup* group, AnjutaTokenTy
project_load_subdirs (project, list, group, TRUE);
break;
case AM_TOKEN__DATA:
+ project_load_data (project, name, list, group, orphan_sources);
+ break;
case AM_TOKEN__HEADERS:
case AM_TOKEN__LIBRARIES:
case AM_TOKEN__LISP:
@@ -2312,7 +2397,6 @@ amp_project_move (AmpProject *project, const gchar *path)
gchar *relative;
GHashTableIter iter;
gpointer key;
- gpointer value;
AnjutaTokenFile *tfile;
AmpConfigFile *cfg;
GHashTable* old_hash;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]