1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4; coding: utf-8 -*- */ 2 /* am-project.h 3 * 4 * Copyright (C) 2009 Sébastien Granjoux 5 * 6 * This program is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU General Public License as 8 * published by the Free Software Foundation; either version 2 of the 9 * License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public 17 * License along with this program; if not, write to the 18 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19 * Boston, MA 02110-1301, USA. 20 */ 21 22 #ifndef _AM_PROJECT_H_ 23 #define _AM_PROJECT_H_ 24 25 #include <glib-object.h> 26 27 #include "amp-root.h" 28 29 #include <libanjuta/anjuta-project.h> 30 #include <libanjuta/anjuta-token.h> 31 #include <libanjuta/anjuta-token-file.h> 32 #include <libanjuta/anjuta-token-list.h> 33 #include <libanjuta/interfaces/ianjuta-language.h> 34 35 G_BEGIN_DECLS 36 37 #define AMP_TYPE_PROJECT (amp_project_get_type ()) 38 #define AMP_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AMP_TYPE_PROJECT, AmpProject)) 39 #define AMP_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), AMP_TYPE_PROJECT, AmpProjectClass)) 40 #define AMP_IS_PROJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AMP_TYPE_PROJECT)) 41 #define AMP_IS_PROJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), AMP_TYPE_PROJECT)) 42 43 44 typedef struct _AmpProjectClass AmpProjectClass; 45 46 typedef struct _AmpModuleNode AmpModuleNode; 47 typedef struct _AmpPackageNode AmpPackageNode; 48 typedef struct _AmpTargetNode AmpTargetNode; 49 typedef struct _AmpObjectNode AmpObjectNode; 50 typedef struct _AmpSourceNode AmpSourceNode; 51 52 struct _AmpProjectClass { 53 AmpRootNodeClass parent_class; 54 }; 55 56 typedef struct _AmpProperty AmpProperty; 57 typedef struct _AmpPropertyInfo AmpPropertyInfo; 58 59 GType amp_project_get_type (void); 60 AmpProject *amp_project_new (GFile *file, IAnjutaLanguage *language, GError **error); 61 62 void amp_project_register (GTypeModule *module); 63 64 65 gint amp_project_probe (GFile *directory, GError **error); 66 void amp_project_unload (AmpProject *project); 67 gboolean amp_project_is_loaded (AmpProject *project); 68 69 70 void amp_project_load_config (AmpProject *project, AnjutaToken *arg_list); 71 void amp_project_load_properties (AmpProject *project, AnjutaToken *macro, AnjutaToken *list); 72 void amp_project_load_module (AmpProject *project, AnjutaToken *module); 73 74 AnjutaToken *amp_project_get_config_token (AmpProject *project, GFile *file); 75 76 AnjutaTokenFile* amp_project_set_configure (AmpProject *project, GFile *configure); 77 gboolean amp_project_update_configure (AmpProject *project, AnjutaToken *token); 78 AnjutaToken* amp_project_get_configure_token (AmpProject *project); 79 void amp_project_update_root (AmpProject *project, AmpProject *new_project); 80 81 AmpProject *amp_project_get_root (AmpProject *project); 82 AmpGroupNode *amp_project_get_group (AmpProject *project, const gchar *id); 83 AmpTargetNode *amp_project_get_target (AmpProject *project, const gchar *id); 84 AmpSourceNode *amp_project_get_source (AmpProject *project, const gchar *id); 85 gboolean amp_project_get_token_location (AmpProject *project, AnjutaTokenFileLocation *location, AnjutaToken *token); 86 87 gboolean amp_project_move (AmpProject *project, const gchar *path); 88 89 typedef enum _AmpFileType{ 90 DUMP_MAKEFILE, 91 DUMP_CONFIGURE 92 } AmpFileType; 93 94 gboolean amp_project_dump (AmpProject *project, AnjutaProjectNode *node, AmpFileType type); 95 96 gchar * amp_project_get_uri (AmpProject *project); 97 GFile* amp_project_get_file (AmpProject *project); 98 99 gboolean amp_project_is_busy (AmpProject *project); 100 101 void amp_project_add_file (AmpProject *project, GFile *file, AnjutaTokenFile* token); 102 void amp_project_add_subst_variable (AmpProject *project, const gchar *name, AnjutaToken *value); 103 AnjutaToken *amp_project_get_subst_variable_token (AmpProject *project, const gchar *name); 104 105 106 AmpGroupNode* amp_project_add_group (AmpProject *project, AmpGroupNode *parent, const gchar *name, GError **error); 107 AmpGroupNode* amp_project_add_sibling_group (AmpProject *project, AmpGroupNode *parent, const gchar *name, gboolean after, AmpGroupNode *sibling, GError **error); 108 void amp_project_remove_group (AmpProject *project, AmpGroupNode *group, GError **error); 109 110 AmpTargetNode* amp_project_add_target (AmpProject *project, AmpGroupNode *parent, const gchar *name, AnjutaProjectNodeType type, GError **error); 111 AmpTargetNode* amp_project_add_sibling_target (AmpProject *project, AmpGroupNode *parent, const gchar *name, AnjutaProjectNodeType type, gboolean after, AmpTargetNode *sibling, GError **error); 112 void amp_project_remove_target (AmpProject *project, AmpTargetNode *target, GError **error); 113 114 AmpSourceNode* amp_project_add_source (AmpProject *project, AmpTargetNode *parent, GFile *file, GError **error); 115 AmpSourceNode* amp_project_add_sibling_source (AmpProject *project, AmpTargetNode *parent, GFile *file, gboolean after, AmpSourceNode *sibling, GError **error); 116 void amp_project_remove_source (AmpProject *project, AmpSourceNode *source, GError **error); 117 118 AnjutaProjectNodeInfo *amp_project_get_type_info (AmpProject *project, AnjutaProjectNodeType type); 119 const GList *amp_project_get_node_info (AmpProject *project, GError **error); 120 121 GList *amp_project_get_config_modules (AmpProject *project, GError **error); 122 GList *amp_project_get_config_packages (AmpProject *project, const gchar* module, GError **error); 123 124 GList *amp_project_get_target_types (AmpProject *project, GError **error); 125 126 AnjutaProjectNode *amp_node_parent (AnjutaProjectNode *node); 127 AnjutaProjectNode *amp_node_first_child (AnjutaProjectNode *node); 128 AnjutaProjectNode *amp_node_last_child (AnjutaProjectNode *node); 129 AnjutaProjectNode *amp_node_next_sibling (AnjutaProjectNode *node); 130 AnjutaProjectNode *amp_node_prev_sibling (AnjutaProjectNode *node); 131 //void amp_node_all_foreach (AnjutaProjectNode *node, AnjutaProjectNodeFunc func, gpointer data); 132 133 GFile *amp_group_node_get_directory (AmpGroupNode *group); 134 gchar *amp_group_node_get_id (AmpGroupNode *group); 135 void amp_group_node_update_variable (AmpGroupNode *group, AnjutaToken *variable); 136 137 const gchar *amp_target_node_get_name (AmpTargetNode *target); 138 gchar *amp_target_node_get_id (AmpTargetNode *target); 139 140 void amp_source_node_free (AmpSourceNode *node); 141 gchar *amp_source_node_get_id (AmpSourceNode *source); 142 GFile *amp_source_node_get_file (AmpSourceNode *source); 143 144 gchar* canonicalize_automake_variable (const gchar *name); 145 gboolean split_automake_variable (gchar *name, gint *flags, gchar **module, gchar **primary); 146 gchar* get_relative_path (GFile *parent, GFile *file); 147 GFileType file_type (GFile *file, const gchar *filename); 148 149 150 151 152 G_END_DECLS 153 154 #endif /* _AM_PROJECT_H_ */ 155