1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4; coding: utf-8 -*- */
4 * Copyright (C) 2009 Sébastien Granjoux
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.
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.
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.
22 #ifndef _AM_PROJECT_H_
23 #define _AM_PROJECT_H_
25 #include <glib-object.h>
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>
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))
44 typedef struct _AmpProjectClass AmpProjectClass
;
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
;
52 struct _AmpProjectClass
{
53 AmpRootNodeClass parent_class
;
56 typedef struct _AmpProperty AmpProperty
;
57 typedef struct _AmpPropertyInfo AmpPropertyInfo
;
59 GType
amp_project_get_type (void);
60 AmpProject
*amp_project_new (GFile
*file
, IAnjutaLanguage
*language
, GError
**error
);
62 void amp_project_register (GTypeModule
*module
);
65 gint
amp_project_probe (GFile
*directory
, GError
**error
);
66 void amp_project_unload (AmpProject
*project
);
67 gboolean
amp_project_is_loaded (AmpProject
*project
);
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
);
74 AnjutaToken
*amp_project_get_config_token (AmpProject
*project
, GFile
*file
);
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
);
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
);
87 gboolean
amp_project_move (AmpProject
*project
, const gchar
*path
);
89 typedef enum _AmpFileType
{
94 gboolean
amp_project_dump (AmpProject
*project
, AnjutaProjectNode
*node
, AmpFileType type
);
96 gchar
* amp_project_get_uri (AmpProject
*project
);
97 GFile
* amp_project_get_file (AmpProject
*project
);
99 gboolean
amp_project_is_busy (AmpProject
*project
);
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
);
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
);
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
);
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
);
118 AnjutaProjectNodeInfo
*amp_project_get_type_info (AmpProject
*project
, AnjutaProjectNodeType type
);
119 const GList
*amp_project_get_node_info (AmpProject
*project
, GError
**error
);
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
);
124 GList
*amp_project_get_target_types (AmpProject
*project
, GError
**error
);
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);
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
);
137 const gchar
*amp_target_node_get_name (AmpTargetNode
*target
);
138 gchar
*amp_target_node_get_id (AmpTargetNode
*target
);
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
);
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
);
154 #endif /* _AM_PROJECT_H_ */