1 /* ide-fallback-build-system.c
2 *
3 * Copyright 2015-2019 Christian Hergert <christian@hergert.me>
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 *
18 * SPDX-License-Identifier: GPL-3.0-or-later
19 */
20
21 #define G_LOG_DOMAIN "fallback-build-system"
22
23 #include "config.h"
24
25 #include <glib/gi18n.h>
26
27 #include "ide-fallback-build-system.h"
28
29 struct _IdeFallbackBuildSystem
30 {
31 IdeObject parent_instance;
32 GFile *project_file;
33 };
34
35 static void build_system_init (IdeBuildSystemInterface *iface);
36
37 G_DEFINE_FINAL_TYPE_WITH_CODE (IdeFallbackBuildSystem,
38 ide_fallback_build_system,
39 IDE_TYPE_OBJECT,
40 G_IMPLEMENT_INTERFACE (IDE_TYPE_BUILD_SYSTEM, build_system_init))
41
42 enum {
43 PROP_0,
44 PROP_PROJECT_FILE,
45 LAST_PROP
46 };
47
48 static GParamSpec *properties [LAST_PROP];
49
50 static void
ide_fallback_build_system_finalize(GObject * object)51 ide_fallback_build_system_finalize (GObject *object)
52 {
53 IdeFallbackBuildSystem *self = (IdeFallbackBuildSystem *)object;
54
55 g_clear_object (&self->project_file);
56
57 G_OBJECT_CLASS (ide_fallback_build_system_parent_class)->finalize (object);
58 }
59
60 static void
ide_fallback_build_system_get_property(GObject * object,guint prop_id,GValue * value,GParamSpec * pspec)61 ide_fallback_build_system_get_property (GObject *object,
62 guint prop_id,
63 GValue *value,
64 GParamSpec *pspec)
65 {
66 IdeFallbackBuildSystem *self = IDE_FALLBACK_BUILD_SYSTEM (object);
67
68 switch (prop_id)
69 {
70 case PROP_PROJECT_FILE:
71 g_value_set_object (value, self->project_file);
72 break;
73
74 default:
75 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
76 }
77 }
78
79 static void
ide_fallback_build_system_set_property(GObject * object,guint prop_id,const GValue * value,GParamSpec * pspec)80 ide_fallback_build_system_set_property (GObject *object,
81 guint prop_id,
82 const GValue *value,
83 GParamSpec *pspec)
84 {
85 IdeFallbackBuildSystem *self = IDE_FALLBACK_BUILD_SYSTEM (object);
86
87 switch (prop_id)
88 {
89 case PROP_PROJECT_FILE:
90 self->project_file = g_value_dup_object (value);
91 break;
92
93 default:
94 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
95 }
96 }
97
98 static void
ide_fallback_build_system_class_init(IdeFallbackBuildSystemClass * klass)99 ide_fallback_build_system_class_init (IdeFallbackBuildSystemClass *klass)
100 {
101 GObjectClass *object_class = G_OBJECT_CLASS (klass);
102
103 object_class->finalize = ide_fallback_build_system_finalize;
104 object_class->get_property = ide_fallback_build_system_get_property;
105 object_class->set_property = ide_fallback_build_system_set_property;
106
107 /**
108 * IdeFallbackBuildSystem:project-file:
109 *
110 * The "project-file" property is the primary file representing the
111 * projects build system.
112 *
113 * Since: 3.32
114 */
115 properties [PROP_PROJECT_FILE] =
116 g_param_spec_object ("project-file",
117 "Project File",
118 "The path of the project file.",
119 G_TYPE_FILE,
120 (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
121
122 g_object_class_install_properties (object_class, LAST_PROP, properties);
123 }
124
125 static void
ide_fallback_build_system_init(IdeFallbackBuildSystem * self)126 ide_fallback_build_system_init (IdeFallbackBuildSystem *self)
127 {
128 }
129
130 static gint
ide_fallback_build_system_get_priority(IdeBuildSystem * build_system)131 ide_fallback_build_system_get_priority (IdeBuildSystem *build_system)
132 {
133 return 1000000;
134 }
135
136 static gchar *
ide_fallback_build_system_get_id(IdeBuildSystem * build_system)137 ide_fallback_build_system_get_id (IdeBuildSystem *build_system)
138 {
139 return g_strdup ("fallback");
140 }
141
142 static gchar *
ide_fallback_build_system_get_display_name(IdeBuildSystem * build_system)143 ide_fallback_build_system_get_display_name (IdeBuildSystem *build_system)
144 {
145 return g_strdup (_("Fallback"));
146 }
147
148 static void
build_system_init(IdeBuildSystemInterface * iface)149 build_system_init (IdeBuildSystemInterface *iface)
150 {
151 iface->get_priority = ide_fallback_build_system_get_priority;
152 iface->get_id = ide_fallback_build_system_get_id;
153 iface->get_display_name = ide_fallback_build_system_get_display_name;
154 }
155
156 /**
157 * ide_fallback_build_system_new:
158 *
159 * Creates a new #IdeFallbackBuildSystem.
160 *
161 * Returns: (transfer full): an #IdeBuildSystem
162 *
163 * Since: 3.32
164 */
165 IdeBuildSystem *
ide_fallback_build_system_new(void)166 ide_fallback_build_system_new (void)
167 {
168 return g_object_new (IDE_TYPE_FALLBACK_BUILD_SYSTEM, NULL);
169 }
170