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