[gnome-builder] plugins/buildconfig: add build target provider
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] plugins/buildconfig: add build target provider
- Date: Tue, 5 Apr 2022 21:00:28 +0000 (UTC)
commit d515d548d755a284bbab054769b7411be7755264
Author: Christian Hergert <chergert redhat com>
Date: Tue Apr 5 12:53:26 2022 -0700
plugins/buildconfig: add build target provider
The goal here is just so that we can gain the ability to run a command
that is defined in the .buildconfig. Long term, we want run-command
providers rather than relying on build-command providers, but this is
just a stop-gap until we can get there post-GTK-4.
src/plugins/buildconfig/buildconfig-plugin.c | 5 +
.../ide-buildconfig-build-target-provider.c | 118 +++++++++++++++
.../ide-buildconfig-build-target-provider.h | 31 ++++
.../buildconfig/ide-buildconfig-build-target.c | 167 +++++++++++++++++++++
.../buildconfig/ide-buildconfig-build-target.h | 31 ++++
.../buildconfig/ide-buildconfig-config-provider.c | 42 ++++++
src/plugins/buildconfig/ide-buildconfig-config.c | 38 +++++
src/plugins/buildconfig/ide-buildconfig-config.h | 3 +
src/plugins/buildconfig/meson.build | 2 +
9 files changed, 437 insertions(+)
---
diff --git a/src/plugins/buildconfig/buildconfig-plugin.c b/src/plugins/buildconfig/buildconfig-plugin.c
index 19dcf8e67..c3376615c 100644
--- a/src/plugins/buildconfig/buildconfig-plugin.c
+++ b/src/plugins/buildconfig/buildconfig-plugin.c
@@ -23,14 +23,19 @@
#include "config.h"
#include <libpeas/peas.h>
+
#include <libide-foundry.h>
+#include "ide-buildconfig-build-target-provider.h"
#include "ide-buildconfig-config-provider.h"
#include "ide-buildconfig-pipeline-addin.h"
_IDE_EXTERN void
_gbp_buildconfig_register_types (PeasObjectModule *module)
{
+ peas_object_module_register_extension_type (module,
+ IDE_TYPE_BUILD_TARGET_PROVIDER,
+ IDE_TYPE_BUILDCONFIG_BUILD_TARGET_PROVIDER);
peas_object_module_register_extension_type (module,
IDE_TYPE_CONFIG_PROVIDER,
IDE_TYPE_BUILDCONFIG_CONFIG_PROVIDER);
diff --git a/src/plugins/buildconfig/ide-buildconfig-build-target-provider.c
b/src/plugins/buildconfig/ide-buildconfig-build-target-provider.c
new file mode 100644
index 000000000..8cf2dde39
--- /dev/null
+++ b/src/plugins/buildconfig/ide-buildconfig-build-target-provider.c
@@ -0,0 +1,118 @@
+/* ide-buildconfig-build-target-provider.c
+ *
+ * Copyright 2022 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#define G_LOG_DOMAIN "ide-buildconfig-build-target-provider"
+
+#include "config.h"
+
+#include <libide-threading.h>
+
+#include "ide-buildconfig-config.h"
+#include "ide-buildconfig-build-target.h"
+#include "ide-buildconfig-build-target-provider.h"
+
+struct _IdeBuildconfigBuildTargetProvider
+{
+ IdeObject parent_instance;
+};
+
+static void
+ide_buildconfig_build_target_provider_get_targets_async (IdeBuildTargetProvider *provider,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ IdeBuildconfigBuildTargetProvider *self = (IdeBuildconfigBuildTargetProvider *)provider;
+ g_autoptr(IdeTask) task = NULL;
+ g_autoptr(GPtrArray) targets = NULL;
+ IdeConfigManager *config_manager;
+ IdeConfig *config;
+ IdeContext *context;
+
+ g_assert (IDE_IS_BUILDCONFIG_BUILD_TARGET_PROVIDER (self));
+ g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
+
+ task = ide_task_new (self, cancellable, callback, user_data);
+ ide_task_set_source_tag (task, ide_buildconfig_build_target_provider_get_targets_async);
+ ide_task_set_priority (task, G_PRIORITY_LOW);
+
+ context = ide_object_get_context (IDE_OBJECT (self));
+ config_manager = ide_config_manager_from_context (context);
+ config = ide_config_manager_get_current (config_manager);
+
+ targets = g_ptr_array_new_with_free_func (g_object_unref);
+
+ if (IDE_IS_BUILDCONFIG_CONFIG (config))
+ {
+ const char * const *run_command;
+
+ run_command = ide_buildconfig_config_get_run_command (IDE_BUILDCONFIG_CONFIG (config));
+
+ if (run_command != NULL && run_command[0] != NULL)
+ g_ptr_array_add (targets,
+ g_object_new (IDE_TYPE_BUILDCONFIG_BUILD_TARGET,
+ "command", run_command,
+ NULL));
+
+ }
+
+ ide_task_return_pointer (task,
+ g_steal_pointer (&targets),
+ g_ptr_array_unref);
+}
+
+static GPtrArray *
+ide_buildconfig_build_target_provider_get_targets_finish (IdeBuildTargetProvider *provider,
+ GAsyncResult *result,
+ GError **error)
+{
+ GPtrArray *ret;
+
+ g_assert (IDE_IS_BUILDCONFIG_BUILD_TARGET_PROVIDER (provider));
+ g_assert (IDE_IS_TASK (result));
+ g_assert (ide_task_is_valid (IDE_TASK (result), provider));
+
+ ret = ide_task_propagate_pointer (IDE_TASK (result), error);
+
+ return IDE_PTR_ARRAY_STEAL_FULL (&ret);
+}
+
+static void
+build_target_provider_iface_init (IdeBuildTargetProviderInterface *iface)
+{
+ iface->get_targets_async = ide_buildconfig_build_target_provider_get_targets_async;
+ iface->get_targets_finish = ide_buildconfig_build_target_provider_get_targets_finish;
+}
+
+G_DEFINE_FINAL_TYPE_WITH_CODE (IdeBuildconfigBuildTargetProvider,
+ ide_buildconfig_build_target_provider,
+ IDE_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (IDE_TYPE_BUILD_TARGET_PROVIDER,
+ build_target_provider_iface_init))
+
+static void
+ide_buildconfig_build_target_provider_class_init (IdeBuildconfigBuildTargetProviderClass *klass)
+{
+}
+
+static void
+ide_buildconfig_build_target_provider_init (IdeBuildconfigBuildTargetProvider *self)
+{
+}
diff --git a/src/plugins/buildconfig/ide-buildconfig-build-target-provider.h
b/src/plugins/buildconfig/ide-buildconfig-build-target-provider.h
new file mode 100644
index 000000000..a266d4e3f
--- /dev/null
+++ b/src/plugins/buildconfig/ide-buildconfig-build-target-provider.h
@@ -0,0 +1,31 @@
+/* ide-buildconfig-build-target-provider.h
+ *
+ * Copyright 2022 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#pragma once
+
+#include <libide-foundry.h>
+
+G_BEGIN_DECLS
+
+#define IDE_TYPE_BUILDCONFIG_BUILD_TARGET_PROVIDER (ide_buildconfig_build_target_provider_get_type())
+
+G_DECLARE_FINAL_TYPE (IdeBuildconfigBuildTargetProvider, ide_buildconfig_build_target_provider, IDE,
BUILDCONFIG_BUILD_TARGET_PROVIDER, IdeObject)
+
+G_END_DECLS
diff --git a/src/plugins/buildconfig/ide-buildconfig-build-target.c
b/src/plugins/buildconfig/ide-buildconfig-build-target.c
new file mode 100644
index 000000000..631c66cd4
--- /dev/null
+++ b/src/plugins/buildconfig/ide-buildconfig-build-target.c
@@ -0,0 +1,167 @@
+/* ide-buildconfig-build-target.c
+ *
+ * Copyright 2022 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#define G_LOG_DOMAIN "ide-buildconfig-build-target"
+
+#include <libide-foundry.h>
+
+#include "ide-buildconfig-build-target.h"
+
+struct _IdeBuildconfigBuildTarget
+{
+ IdeObject parent;
+
+ char **command;
+};
+
+enum {
+ PROP_0,
+ PROP_COMMAND,
+ N_PROPS
+};
+
+static char *
+ide_buildconfig_build_target_get_display_name (IdeBuildTarget *build_target)
+{
+ IdeBuildconfigBuildTarget *self = IDE_BUILDCONFIG_BUILD_TARGET (build_target);
+
+ if (self->command == NULL || self->command[0] == NULL)
+ return NULL;
+
+ return g_strdup_printf ("%s <span fgalpha='32767' size='smaller'>(.buildconfig)</span>", self->command[0]);
+}
+
+static char *
+ide_buildconfig_build_target_get_name (IdeBuildTarget *build_target)
+{
+ IdeBuildconfigBuildTarget *self = IDE_BUILDCONFIG_BUILD_TARGET (build_target);
+
+ if (self->command == NULL || self->command[0] == NULL)
+ return NULL;
+
+ return g_strdup (self->command[0]);
+}
+
+static char **
+ide_buildconfig_build_target_get_argv (IdeBuildTarget *build_target)
+{
+ IdeBuildconfigBuildTarget *self = IDE_BUILDCONFIG_BUILD_TARGET (build_target);
+
+ return g_strdupv (self->command);
+}
+
+static GFile *
+ide_buildconfig_build_target_get_install_directory (IdeBuildTarget *build_target)
+{
+ return NULL;
+}
+
+static gint
+ide_buildconfig_build_target_get_priority (IdeBuildTarget *build_target)
+{
+ return -50;
+}
+
+static void
+build_target_iface_init (IdeBuildTargetInterface *iface)
+{
+ iface->get_display_name = ide_buildconfig_build_target_get_display_name;
+ iface->get_name = ide_buildconfig_build_target_get_name;
+ iface->get_argv = ide_buildconfig_build_target_get_argv;
+ iface->get_install_directory = ide_buildconfig_build_target_get_install_directory;
+ iface->get_priority = ide_buildconfig_build_target_get_priority;
+}
+
+G_DEFINE_FINAL_TYPE_WITH_CODE (IdeBuildconfigBuildTarget, ide_buildconfig_build_target, IDE_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (IDE_TYPE_BUILD_TARGET, build_target_iface_init))
+
+static GParamSpec *properties [N_PROPS];
+
+static void
+ide_buildconfig_build_target_finalize (GObject *object)
+{
+ IdeBuildconfigBuildTarget *self = (IdeBuildconfigBuildTarget *)object;
+
+ g_clear_pointer (&self->command, g_strfreev);
+
+ G_OBJECT_CLASS (ide_buildconfig_build_target_parent_class)->finalize (object);
+}
+
+static void
+ide_buildconfig_build_target_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ IdeBuildconfigBuildTarget *self = IDE_BUILDCONFIG_BUILD_TARGET (object);
+
+ switch (prop_id)
+ {
+ case PROP_COMMAND:
+ g_value_set_boxed (value, self->command);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ide_buildconfig_build_target_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ IdeBuildconfigBuildTarget *self = IDE_BUILDCONFIG_BUILD_TARGET (object);
+
+ switch (prop_id)
+ {
+ case PROP_COMMAND:
+ self->command = g_value_dup_boxed (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+ide_buildconfig_build_target_class_init (IdeBuildconfigBuildTargetClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = ide_buildconfig_build_target_finalize;
+ object_class->get_property = ide_buildconfig_build_target_get_property;
+ object_class->set_property = ide_buildconfig_build_target_set_property;
+
+ properties [PROP_COMMAND] =
+ g_param_spec_boxed ("command",
+ NULL,
+ NULL,
+ G_TYPE_STRV,
+ (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS));
+
+ g_object_class_install_properties (object_class, N_PROPS, properties);
+}
+
+static void
+ide_buildconfig_build_target_init (IdeBuildconfigBuildTarget *self)
+{
+}
diff --git a/src/plugins/buildconfig/ide-buildconfig-build-target.h
b/src/plugins/buildconfig/ide-buildconfig-build-target.h
new file mode 100644
index 000000000..a4a143338
--- /dev/null
+++ b/src/plugins/buildconfig/ide-buildconfig-build-target.h
@@ -0,0 +1,31 @@
+/* ide-buildconfig-build-target.h
+ *
+ * Copyright 2022 Christian Hergert <chergert redhat com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#pragma once
+
+#include <libide-core.h>
+
+G_BEGIN_DECLS
+
+#define IDE_TYPE_BUILDCONFIG_BUILD_TARGET (ide_buildconfig_build_target_get_type())
+
+G_DECLARE_FINAL_TYPE (IdeBuildconfigBuildTarget, ide_buildconfig_build_target, IDE,
BUILDCONFIG_BUILD_TARGET, IdeObject)
+
+G_END_DECLS
diff --git a/src/plugins/buildconfig/ide-buildconfig-config-provider.c
b/src/plugins/buildconfig/ide-buildconfig-config-provider.c
index babe4f650..8731197b7 100644
--- a/src/plugins/buildconfig/ide-buildconfig-config-provider.c
+++ b/src/plugins/buildconfig/ide-buildconfig-config-provider.c
@@ -156,6 +156,36 @@ load_strv (IdeConfig *config,
}
}
+static void
+load_argv (IdeConfig *config,
+ GKeyFile *key_file,
+ const gchar *group,
+ const gchar *key,
+ const gchar *property)
+{
+ g_assert (IDE_IS_CONFIG (config));
+ g_assert (key_file != NULL);
+ g_assert (group != NULL);
+ g_assert (key != NULL);
+
+ if (g_key_file_has_key (key_file, group, key, NULL))
+ {
+ g_autofree char *str = NULL;
+ g_auto(GValue) value = G_VALUE_INIT;
+ g_auto(GStrv) argv = NULL;
+ int argc = 0;
+
+ if ((str = g_key_file_get_string (key_file, group, key, NULL)) &&
+ str[0] != 0 &&
+ g_shell_parse_argv (str, &argc, &argv, NULL))
+ {
+ g_value_init (&value, G_TYPE_STRV);
+ g_value_take_boxed (&value, g_steal_pointer (&argv));
+ g_object_set_property (G_OBJECT (config), property, &value);
+ }
+ }
+}
+
static void
load_environ (IdeConfig *config,
IdeEnvironment *environment,
@@ -210,6 +240,7 @@ ide_buildconfig_config_provider_create (IdeBuildconfigConfigProvider *self,
load_string (config, self->key_file, config_id, "app-id", "app-id");
load_strv (config, self->key_file, config_id, "prebuild", "prebuild");
load_strv (config, self->key_file, config_id, "postbuild", "postbuild");
+ load_argv (config, self->key_file, config_id, "run-command", "run-command");
if (g_key_file_has_key (self->key_file, config_id, "builddir", NULL))
{
@@ -476,6 +507,16 @@ ide_buildconfig_config_provider_save_async (IdeConfigProvider *provider,
gsize vlen = val ? g_strv_length ((gchar **)val) : 0; \
g_key_file_set_string_list (self->key_file, config_id, key, val, vlen); \
} G_STMT_END
+#define PERSIST_ARGV_KEY(key, getter) G_STMT_START { \
+ const gchar * const *val = ide_buildconfig_config_##getter (IDE_BUILDCONFIG_CONFIG (config)); \
+ if (val) \
+ { \
+ g_autofree char *str = g_strjoinv (" ", (char **)val); \
+ g_key_file_set_string (self->key_file, config_id, key, str); \
+ } \
+ else \
+ g_key_file_set_string (self->key_file, config_id, key, ""); \
+} G_STMT_END
PERSIST_STRING_KEY ("name", get_display_name);
PERSIST_STRING_KEY ("runtime", get_runtime_id);
@@ -486,6 +527,7 @@ ide_buildconfig_config_provider_save_async (IdeConfigProvider *provider,
PERSIST_STRING_KEY ("app-id", get_app_id);
PERSIST_STRV_KEY ("postbuild", get_postbuild);
PERSIST_STRV_KEY ("prebuild", get_prebuild);
+ PERSIST_ARGV_KEY ("run-command", get_run_command);
#undef PERSIST_STRING_KEY
#undef PERSIST_STRV_KEY
diff --git a/src/plugins/buildconfig/ide-buildconfig-config.c
b/src/plugins/buildconfig/ide-buildconfig-config.c
index 83fda7104..9d7910528 100644
--- a/src/plugins/buildconfig/ide-buildconfig-config.c
+++ b/src/plugins/buildconfig/ide-buildconfig-config.c
@@ -30,12 +30,14 @@ struct _IdeBuildconfigConfig
gchar **prebuild;
gchar **postbuild;
+ gchar **run_command;
};
enum {
PROP_0,
PROP_PREBUILD,
PROP_POSTBUILD,
+ PROP_RUN_COMMAND,
N_PROPS
};
@@ -50,6 +52,7 @@ ide_buildconfig_config_finalize (GObject *object)
g_clear_pointer (&self->prebuild, g_strfreev);
g_clear_pointer (&self->postbuild, g_strfreev);
+ g_clear_pointer (&self->run_command, g_strfreev);
G_OBJECT_CLASS (ide_buildconfig_config_parent_class)->finalize (object);
}
@@ -72,6 +75,10 @@ ide_buildconfig_config_get_property (GObject *object,
g_value_set_boxed (value, ide_buildconfig_config_get_postbuild (self));
break;
+ case PROP_RUN_COMMAND:
+ g_value_set_boxed (value, ide_buildconfig_config_get_run_command (self));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -95,6 +102,10 @@ ide_buildconfig_config_set_property (GObject *object,
ide_buildconfig_config_set_postbuild (self, g_value_get_boxed (value));
break;
+ case PROP_RUN_COMMAND:
+ ide_buildconfig_config_set_run_command (self, g_value_get_boxed (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -119,6 +130,11 @@ ide_buildconfig_config_class_init (IdeBuildconfigConfigClass *klass)
G_TYPE_STRV,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ properties [PROP_RUN_COMMAND] =
+ g_param_spec_boxed ("run-command", NULL, NULL,
+ G_TYPE_STRV,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+
g_object_class_install_properties (object_class, N_PROPS, properties);
}
@@ -170,3 +186,25 @@ ide_buildconfig_config_set_postbuild (IdeBuildconfigConfig *self,
g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_POSTBUILD]);
}
}
+
+const gchar * const *
+ide_buildconfig_config_get_run_command (IdeBuildconfigConfig *self)
+{
+ g_return_val_if_fail (IDE_IS_BUILDCONFIG_CONFIG (self), NULL);
+
+ return (const gchar * const *)self->run_command;
+}
+
+void
+ide_buildconfig_config_set_run_command (IdeBuildconfigConfig *self,
+ const gchar * const *run_command)
+{
+ g_return_if_fail (IDE_IS_BUILDCONFIG_CONFIG (self));
+
+ if (self->run_command != (gchar **)run_command)
+ {
+ g_strfreev (self->run_command);
+ self->run_command = g_strdupv ((gchar **)run_command);
+ g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_RUN_COMMAND]);
+ }
+}
diff --git a/src/plugins/buildconfig/ide-buildconfig-config.h
b/src/plugins/buildconfig/ide-buildconfig-config.h
index fc557a3aa..69d5b483c 100644
--- a/src/plugins/buildconfig/ide-buildconfig-config.h
+++ b/src/plugins/buildconfig/ide-buildconfig-config.h
@@ -34,5 +34,8 @@ void ide_buildconfig_config_set_prebuild (IdeBuildconfigConfi
const gchar * const *ide_buildconfig_config_get_postbuild (IdeBuildconfigConfig *self);
void ide_buildconfig_config_set_postbuild (IdeBuildconfigConfig *self,
const gchar * const *postbuild);
+const gchar * const *ide_buildconfig_config_get_run_command (IdeBuildconfigConfig *self);
+void ide_buildconfig_config_set_run_command (IdeBuildconfigConfig *self,
+ const gchar * const *postbuild);
G_END_DECLS
diff --git a/src/plugins/buildconfig/meson.build b/src/plugins/buildconfig/meson.build
index ca9d20d75..a3ef88ada 100644
--- a/src/plugins/buildconfig/meson.build
+++ b/src/plugins/buildconfig/meson.build
@@ -1,5 +1,7 @@
plugins_sources += files([
'buildconfig-plugin.c',
+ 'ide-buildconfig-build-target.c',
+ 'ide-buildconfig-build-target-provider.c',
'ide-buildconfig-config.c',
'ide-buildconfig-config-provider.c',
'ide-buildconfig-pipeline-addin.c',
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]