[anjuta] am: Find target modules and display them in the project tree view
- From: Sebastien Granjoux <sgranjoux src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [anjuta] am: Find target modules and display them in the project tree view
- Date: Wed, 24 Nov 2010 21:40:47 +0000 (UTC)
commit 30dd6ea7686cef7b9c2b99ad228e192b94ff1f78
Author: Sébastien Granjoux <seb sfo free fr>
Date: Wed Nov 24 22:39:58 2010 +0100
am: Find target modules and display them in the project tree view
libanjuta/anjuta-project.h | 2 +-
plugins/am-project/am-project.c | 107 +++++++++++++++++++++++++++++++++++-
plugins/am-project/am-properties.c | 67 ++++++++++++++++++++++
plugins/am-project/am-properties.h | 3 +-
4 files changed, 176 insertions(+), 3 deletions(-)
---
diff --git a/libanjuta/anjuta-project.h b/libanjuta/anjuta-project.h
index 5277db0..bd33073 100644
--- a/libanjuta/anjuta-project.h
+++ b/libanjuta/anjuta-project.h
@@ -76,7 +76,7 @@ typedef enum
ANJUTA_PROJECT_UNKNOWN = 0,
ANJUTA_PROJECT_SHAREDLIB,
ANJUTA_PROJECT_STATICLIB,
- ANJUTA_PROJECT_BINARY,
+ ANJUTA_PROJECT_PROGRAM,
ANJUTA_PROJECT_PYTHON,
ANJUTA_PROJECT_JAVA,
ANJUTA_PROJECT_LISP,
diff --git a/plugins/am-project/am-project.c b/plugins/am-project/am-project.c
index 072d6dc..bb54d02 100644
--- a/plugins/am-project/am-project.c
+++ b/plugins/am-project/am-project.c
@@ -123,7 +123,7 @@ static AmpNodeInfo AmpNodeInformations[] = {
"_LIBRARIES",
"lib"},
- {{ANJUTA_PROJECT_TARGET | ANJUTA_PROJECT_PRIMARY | ANJUTA_PROJECT_EXECUTABLE | ANJUTA_PROJECT_BINARY,
+ {{ANJUTA_PROJECT_TARGET | ANJUTA_PROJECT_PRIMARY | ANJUTA_PROJECT_PROGRAM | ANJUTA_PROJECT_EXECUTABLE,
N_("Program"),
"application/x-executable"},
AM_TOKEN__PROGRAMS,
@@ -1355,6 +1355,110 @@ project_load_group_properties (AmpProject *project, AnjutaToken *token, AnjutaTo
return NULL;
}
+/* Find if pkg-config modules are used in group targets */
+static gboolean
+project_load_group_module (AmpProject *project, AnjutaAmGroupNode *group)
+{
+ AnjutaProjectNode *target;
+ AnjutaProjectProperty *prop;
+ gchar **group_cpp = NULL;
+
+ prop = amp_node_get_property_from_token (ANJUTA_PROJECT_NODE (group), AM_TOKEN__CPPFLAGS);
+ if (prop) group_cpp = g_strsplit_set (prop->value, " \t", 0);
+
+ /* Check all targets */
+ for (target = anjuta_project_node_first_child (ANJUTA_PROJECT_NODE (group)); target != NULL; target = anjuta_project_node_next_sibling (target))
+ {
+ gint type = anjuta_project_node_get_full_type (target) & (ANJUTA_PROJECT_ID_MASK | ANJUTA_PROJECT_TYPE_MASK);
+ gchar **target_lib = NULL;
+ gchar **target_cpp = NULL;
+
+ prop = NULL;
+ switch (type)
+ {
+ case ANJUTA_PROJECT_TARGET | ANJUTA_PROJECT_PROGRAM:
+ prop = amp_node_get_property_from_token (target, AM_TOKEN_TARGET_LDADD);
+ break;
+ case ANJUTA_PROJECT_TARGET | ANJUTA_PROJECT_STATICLIB:
+ case ANJUTA_PROJECT_TARGET | ANJUTA_PROJECT_SHAREDLIB:
+ prop = amp_node_get_property_from_token (target, AM_TOKEN_TARGET_LIBADD);
+ break;
+ default:
+ break;
+ }
+ if (prop) target_lib = g_strsplit_set (prop->value, " \t", 0);
+
+ /* Check if targets use libraries */
+ if (target_lib != NULL)
+ {
+ AnjutaProjectNode *module;
+
+ prop = amp_node_get_property_from_token (target, AM_TOKEN_TARGET_CPPFLAGS);
+ if (prop) target_cpp = g_strsplit_set (prop->value, " \t", 0);
+
+ for (module = anjuta_project_node_first_child (ANJUTA_PROJECT_NODE (project)); module != NULL; module = anjuta_project_node_next_sibling (module))
+ {
+ if (anjuta_project_node_get_node_type (module) == ANJUTA_PROJECT_MODULE)
+ {
+ const gchar *name = anjuta_project_node_get_name (module);
+ gchar *lib_flags = g_strconcat ("$(", name, "_LIBS)", NULL);
+ gchar **flags;
+
+ for (flags = target_lib; *flags != NULL; flags++)
+ {
+
+ if (strcmp (*flags, lib_flags) == 0)
+ {
+ gchar *cpp_flags = g_strconcat ("$(", name, "_CFLAGS)", NULL);
+ gchar **cflags;
+ gboolean found = FALSE;
+
+ if (group_cpp != NULL)
+ {
+ for (cflags = group_cpp; *cflags != NULL; cflags++)
+ {
+ if (strcmp (*cflags, cpp_flags) == 0)
+ {
+ found = TRUE;
+ break;
+ }
+ }
+ }
+ if ((target_cpp != NULL) && !found)
+ {
+ for (cflags = target_cpp; *cflags != NULL; cflags++)
+ {
+ if (strcmp (*cflags, cpp_flags) == 0)
+ {
+ found = TRUE;
+ break;
+ }
+ }
+ }
+ if (found)
+ {
+ /* Add new module */
+ AnjutaProjectNode *new_module;
+
+ new_module = project_node_new (project, ANJUTA_PROJECT_MODULE, NULL, name, NULL);
+ anjuta_project_node_append (target, new_module);
+ }
+ g_free (cpp_flags);
+ }
+ }
+ g_free (lib_flags);
+ }
+ }
+ g_strfreev (target_cpp);
+ g_strfreev (target_lib);
+ }
+ }
+ g_strfreev (group_cpp);
+
+ return TRUE;
+}
+
+
static AnjutaAmGroupNode* project_load_makefile (AmpProject *project, AnjutaAmGroupNode *group);
static gboolean
@@ -1461,6 +1565,7 @@ project_load_makefile (AmpProject *project, AnjutaAmGroupNode *group)
DEBUG_PRINT ("Parse: %s", g_file_get_uri (makefile));
tfile = amp_group_set_makefile (group, makefile, G_OBJECT (project));
+ project_load_group_module (project, group);
return group;
}
diff --git a/plugins/am-project/am-properties.c b/plugins/am-project/am-properties.c
index 378bfb6..7ec49b2 100644
--- a/plugins/am-project/am-properties.c
+++ b/plugins/am-project/am-properties.c
@@ -93,6 +93,52 @@ static AmpProperty AmpTargetProperties[] = {
static GList* AmpTargetPropertyList = NULL;
+static AmpProperty AmpProgramTargetProperties[] = {
+ {{N_("Do not install:"), ANJUTA_PROJECT_PROPERTY_BOOLEAN, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 3, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
+ {{N_("Installation directory:"), ANJUTA_PROJECT_PROPERTY_STRING, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 6, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
+ {{N_("Linker flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_LDFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_LDFLAGS"},
+ {{N_("Libraries:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_LDADD, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_LDADD"},
+ {{N_("C preprocessor flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_CPPFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_CPPFLAGS"},
+ {{N_("C compiler flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_CFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_CFLAGS"},
+ {{N_("C++ compiler flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_CXXFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_CXXFLAGS"},
+ {{N_("Java compiler flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_JAVACFLAGS,0, AM_PROPERTY_IN_MAKEFILE, NULL, "_JAVACFLAGS"},
+ {{N_("Vala compiler flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_VALAFLAGS,0, AM_PROPERTY_IN_MAKEFILE, NULL, "_VALAFLAGS"},
+ {{N_("Fortan compiler flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_FCFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_FCFLAGS"},
+ {{N_("Objective C compiler flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_OBJCFLAGS,0, AM_PROPERTY_IN_MAKEFILE, NULL, "_OBJCFLAGS"},
+ {{N_("Lex/Flex flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_LFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_LFLAGS"},
+ {{N_("Yacc/Bison flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_YFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_YFLAGS"},
+ {{N_("Additional dependencies:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_DEPENDENCIES, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "EXTRA_DIST"},
+ {{N_("Include in distribution:"), ANJUTA_PROJECT_PROPERTY_BOOLEAN, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 2, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
+ {{N_("Build for check only:"), ANJUTA_PROJECT_PROPERTY_BOOLEAN, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 4, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
+ {{N_("Do not use prefix:"), ANJUTA_PROJECT_PROPERTY_BOOLEAN, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 1, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
+ {{N_("Keep target path:"), ANJUTA_PROJECT_PROPERTY_BOOLEAN, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
+ {{NULL, ANJUTA_PROJECT_PROPERTY_STRING, 0, NULL, NULL}, 0, 0, 0, NULL, NULL}};
+
+static GList* AmpProgramTargetPropertyList = NULL;
+
+static AmpProperty AmpLibraryTargetProperties[] = {
+ {{N_("Do not install:"), ANJUTA_PROJECT_PROPERTY_BOOLEAN, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 3, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
+ {{N_("Installation directory:"), ANJUTA_PROJECT_PROPERTY_STRING, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 6, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
+ {{N_("Linker flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_LDFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_LDFLAGS"},
+ {{N_("Libraries:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_LIBADD, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_LIBADD"},
+ {{N_("C preprocessor flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_CPPFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_CPPFLAGS"},
+ {{N_("C compiler flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_CFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_CFLAGS"},
+ {{N_("C++ compiler flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_CXXFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_CXXFLAGS"},
+ {{N_("Java compiler flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_JAVACFLAGS,0, AM_PROPERTY_IN_MAKEFILE, NULL, "_JAVACFLAGS"},
+ {{N_("Vala compiler flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_VALAFLAGS,0, AM_PROPERTY_IN_MAKEFILE, NULL, "_VALAFLAGS"},
+ {{N_("Fortan compiler flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_FCFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_FCFLAGS"},
+ {{N_("Objective C compiler flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_OBJCFLAGS,0, AM_PROPERTY_IN_MAKEFILE, NULL, "_OBJCFLAGS"},
+ {{N_("Lex/Flex flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_LFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_LFLAGS"},
+ {{N_("Yacc/Bison flags:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_YFLAGS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "_YFLAGS"},
+ {{N_("Additional dependencies:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_WRITE, NULL, NULL}, AM_TOKEN_TARGET_DEPENDENCIES, 0, AM_PROPERTY_IN_MAKEFILE, NULL, "EXTRA_DIST"},
+ {{N_("Include in distribution:"), ANJUTA_PROJECT_PROPERTY_BOOLEAN, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 2, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
+ {{N_("Build for check only:"), ANJUTA_PROJECT_PROPERTY_BOOLEAN, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 4, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
+ {{N_("Do not use prefix:"), ANJUTA_PROJECT_PROPERTY_BOOLEAN, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 1, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
+ {{N_("Keep target path:"), ANJUTA_PROJECT_PROPERTY_BOOLEAN, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 0, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
+ {{NULL, ANJUTA_PROJECT_PROPERTY_STRING, 0, NULL, NULL}, 0, 0, 0, NULL, NULL}};
+
+static GList* AmpLibraryTargetPropertyList = NULL;
+
static AmpProperty AmpManTargetProperties[] = {
{{N_("Additional dependencies:"), ANJUTA_PROJECT_PROPERTY_LIST, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, 0, 0, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
{{N_("Do not use prefix:"), ANJUTA_PROJECT_PROPERTY_BOOLEAN, ANJUTA_PROJECT_PROPERTY_READ_ONLY, NULL, NULL}, AM_TOKEN__PROGRAMS, 1, AM_PROPERTY_IN_MAKEFILE, NULL, NULL},
@@ -284,7 +330,23 @@ amp_node_property_set (AnjutaProjectNode *node, AnjutaProjectProperty *prop, con
return new_prop;
}
+AnjutaProjectProperty *
+amp_node_get_property_from_token (AnjutaProjectNode *node, gint token)
+{
+ GList *item;
+
+ for (item = anjuta_project_node_get_native_properties (node); item != NULL; item = g_list_next (item))
+ {
+ AmpProperty *prop = (AmpProperty *)item->data;
+ if (prop->token_type == token)
+ {
+ return anjuta_project_node_get_property (node, (AnjutaProjectProperty *)prop);
+ }
+ }
+
+ return NULL;
+}
/* Get property list
*---------------------------------------------------------------------------*/
@@ -306,6 +368,11 @@ amp_get_target_property_list (AnjutaProjectNodeType type)
{
switch (type & ANJUTA_PROJECT_ID_MASK)
{
+ case ANJUTA_PROJECT_PROGRAM:
+ return amp_create_property_list (&AmpProgramTargetPropertyList, AmpProgramTargetProperties);
+ case ANJUTA_PROJECT_SHAREDLIB:
+ case ANJUTA_PROJECT_STATICLIB:
+ return amp_create_property_list (&AmpLibraryTargetPropertyList, AmpLibraryTargetProperties);
case ANJUTA_PROJECT_MAN:
return amp_create_property_list (&AmpManTargetPropertyList, AmpManTargetProperties);
default:
diff --git a/plugins/am-project/am-properties.h b/plugins/am-project/am-properties.h
index e2721a1..8322bb5 100644
--- a/plugins/am-project/am-properties.h
+++ b/plugins/am-project/am-properties.h
@@ -33,7 +33,8 @@ void amp_property_free (AnjutaProjectProperty *prop);
gboolean amp_node_property_load (AnjutaProjectNode *target, gint token_type, gint position, const gchar *value, AnjutaToken *token);
gboolean amp_node_property_add (AnjutaProjectNode *node, AnjutaProjectProperty *prop);
-AnjutaProjectProperty * amp_node_property_set (AnjutaProjectNode *node, AnjutaProjectProperty *prop, const gchar* value);
+AnjutaProjectProperty *amp_node_property_set (AnjutaProjectNode *node, AnjutaProjectProperty *prop, const gchar* value);
+AnjutaProjectProperty *amp_node_get_property_from_token (AnjutaProjectNode *node, gint token);
GList* amp_get_project_property_list (void);
GList* amp_get_group_property_list (void);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]