[gnome-builder] configuration: add prebuild/postbuild options to buildconfig
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] configuration: add prebuild/postbuild options to buildconfig
- Date: Sat, 3 Sep 2016 02:44:40 +0000 (UTC)
commit 3776260df55fce2fc9b9a523fd860a1161ed0200
Author: Christian Hergert <chergert redhat com>
Date: Fri Sep 2 19:43:06 2016 -0700
configuration: add prebuild/postbuild options to buildconfig
This allows something like the following in your .buildconfig
[foo]
prebuild=echo 'PREBUILD'; git status
postbuild=echo 'POSTBUILD'; ls -lsah
libide/buildsystem/ide-configuration-manager.c | 51 +++++++++++++
libide/buildsystem/ide-configuration.c | 73 +++++++++++++++++++
libide/buildsystem/ide-configuration.h | 90 ++++++++++++------------
libide/ide-internal.h | 4 +
4 files changed, 174 insertions(+), 44 deletions(-)
---
diff --git a/libide/buildsystem/ide-configuration-manager.c b/libide/buildsystem/ide-configuration-manager.c
index 9124e36..0aaa4ab 100644
--- a/libide/buildsystem/ide-configuration-manager.c
+++ b/libide/buildsystem/ide-configuration-manager.c
@@ -22,8 +22,11 @@
#include "ide-context.h"
#include "ide-debug.h"
+#include "ide-internal.h"
#include "ide-macros.h"
+#include "buildsystem/ide-build-command.h"
+#include "buildsystem/ide-build-command-queue.h"
#include "buildsystem/ide-configuration-manager.h"
#include "buildsystem/ide-configuration.h"
#include "buildsystem/ide-environment.h"
@@ -113,6 +116,36 @@ load_environ (IdeConfiguration *configuration,
}
}
+static void
+load_command_queue (IdeBuildCommandQueue *cmdq,
+ GKeyFile *key_file,
+ const gchar *group,
+ const gchar *name)
+
+{
+ g_auto(GStrv) commands = NULL;
+
+ g_assert (IDE_IS_BUILD_COMMAND_QUEUE (cmdq));
+ g_assert (key_file != NULL);
+ g_assert (group != NULL);
+ g_assert (name != NULL);
+
+ commands = g_key_file_get_string_list (key_file, group, name, NULL, NULL);
+
+ if (commands != NULL)
+ {
+ for (guint i = 0; commands [i]; i++)
+ {
+ g_autoptr(IdeBuildCommand) command = NULL;
+
+ command = g_object_new (IDE_TYPE_BUILD_COMMAND,
+ "command-text", commands [i],
+ NULL);
+ ide_build_command_queue_append (cmdq, command);
+ }
+ }
+}
+
static gboolean
ide_configuration_manager_load (IdeConfigurationManager *self,
GKeyFile *key_file,
@@ -140,6 +173,24 @@ ide_configuration_manager_load (IdeConfigurationManager *self,
load_string (configuration, key_file, group, "runtime", "runtime-id");
load_string (configuration, key_file, group, "prefix", "prefix");
+ if (g_key_file_has_key (key_file, group, "prebuild", NULL))
+ {
+ g_autoptr(IdeBuildCommandQueue) cmdq = NULL;
+
+ cmdq = ide_build_command_queue_new ();
+ load_command_queue (cmdq, key_file, group, "prebuild");
+ _ide_configuration_set_prebuild (configuration, cmdq);
+ }
+
+ if (g_key_file_has_key (key_file, group, "postbuild", NULL))
+ {
+ g_autoptr(IdeBuildCommandQueue) cmdq = NULL;
+
+ cmdq = ide_build_command_queue_new ();
+ load_command_queue (cmdq, key_file, group, "postbuild");
+ _ide_configuration_set_postbuild (configuration, cmdq);
+ }
+
env_group = g_strdup_printf ("%s.environment", group);
if (g_key_file_has_group (key_file, env_group))
diff --git a/libide/buildsystem/ide-configuration.c b/libide/buildsystem/ide-configuration.c
index 6115090..a8f913d 100644
--- a/libide/buildsystem/ide-configuration.c
+++ b/libide/buildsystem/ide-configuration.c
@@ -21,7 +21,9 @@
#include <string.h>
#include "ide-context.h"
+#include "ide-internal.h"
+#include "buildsystem/ide-build-command-queue.h"
#include "buildsystem/ide-configuration.h"
#include "buildsystem/ide-environment.h"
#include "devices/ide-device-manager.h"
@@ -42,6 +44,9 @@ struct _IdeConfiguration
IdeEnvironment *environment;
+ IdeBuildCommandQueue *prebuild;
+ IdeBuildCommandQueue *postbuild;
+
gint parallelism;
guint sequence;
@@ -176,6 +181,8 @@ ide_configuration_finalize (GObject *object)
IdeConfiguration *self = (IdeConfiguration *)object;
g_clear_object (&self->environment);
+ g_clear_object (&self->prebuild);
+ g_clear_object (&self->postbuild);
g_clear_pointer (&self->config_opts, g_free);
g_clear_pointer (&self->device_id, g_free);
@@ -849,3 +856,69 @@ ide_configuration_get_sequence (IdeConfiguration *self)
return self->sequence;
}
+
+/**
+ * ide_configuration_get_prebuild:
+ *
+ * Gets a queue of commands to be run before the standard build process of
+ * the configured build system. This can be useful for situations where the
+ * user wants to setup some custom commands to prepare their environment.
+ *
+ * Constrast this with ide_configuration_get_postbuild() which gets commands
+ * to be executed after the build system has completed.
+ *
+ * This function will always return a command queue. The command
+ * queue may contain zero or more commands to be executed.
+ *
+ * Returns: (transfer full): An #IdeBuildCommandQueue.
+ */
+IdeBuildCommandQueue *
+ide_configuration_get_prebuild (IdeConfiguration *self)
+{
+ g_return_val_if_fail (IDE_IS_CONFIGURATION (self), NULL);
+
+ if (self->prebuild != NULL)
+ return g_object_ref (self->prebuild);
+
+ return ide_build_command_queue_new ();
+}
+
+/**
+ * ide_configuration_get_postbuild:
+ *
+ * Gets a queue of commands to be run after the standard build process of
+ * the configured build system. This can be useful for situations where the
+ * user wants to modify something after the build completes.
+ *
+ * Constrast this with ide_configuration_get_prebuild() which gets commands
+ * to be executed before the build system has started.
+ *
+ * This function will always return a command queue. The command
+ * queue may contain zero or more commands to be executed.
+ *
+ * Returns: (transfer full): An #IdeBuildCommandQueue.
+ */
+IdeBuildCommandQueue *
+ide_configuration_get_postbuild (IdeConfiguration *self)
+{
+ g_return_val_if_fail (IDE_IS_CONFIGURATION (self), NULL);
+
+ if (self->postbuild != NULL)
+ return g_object_ref (self->postbuild);
+
+ return ide_build_command_queue_new ();
+}
+
+void
+_ide_configuration_set_prebuild (IdeConfiguration *self,
+ IdeBuildCommandQueue *prebuild)
+{
+ g_set_object (&self->prebuild, prebuild);
+}
+
+void
+_ide_configuration_set_postbuild (IdeConfiguration *self,
+ IdeBuildCommandQueue *postbuild)
+{
+ g_set_object (&self->postbuild, postbuild);
+}
diff --git a/libide/buildsystem/ide-configuration.h b/libide/buildsystem/ide-configuration.h
index 81f19f2..8c2c422 100644
--- a/libide/buildsystem/ide-configuration.h
+++ b/libide/buildsystem/ide-configuration.h
@@ -30,50 +30,52 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (IdeConfiguration, ide_configuration, IDE, CONFIGURATION, IdeObject)
-IdeConfiguration *ide_configuration_new (IdeContext *context,
- const gchar *id,
- const gchar *device_id,
- const gchar *runtime_id);
-const gchar *ide_configuration_get_id (IdeConfiguration *self);
-const gchar *ide_configuration_get_runtime_id (IdeConfiguration *self);
-void ide_configuration_set_runtime_id (IdeConfiguration *self,
- const gchar *runtime_id);
-const gchar *ide_configuration_get_device_id (IdeConfiguration *self);
-void ide_configuration_set_device_id (IdeConfiguration *self,
- const gchar *device_id);
-IdeDevice *ide_configuration_get_device (IdeConfiguration *self);
-void ide_configuration_set_device (IdeConfiguration *self,
- IdeDevice *device);
-gboolean ide_configuration_get_dirty (IdeConfiguration *self);
-void ide_configuration_set_dirty (IdeConfiguration *self,
- gboolean dirty);
-const gchar *ide_configuration_get_display_name (IdeConfiguration *self);
-void ide_configuration_set_display_name (IdeConfiguration *self,
- const gchar *display_name);
-IdeRuntime *ide_configuration_get_runtime (IdeConfiguration *self);
-void ide_configuration_set_runtime (IdeConfiguration *self,
- IdeRuntime *runtime);
-gchar **ide_configuration_get_environ (IdeConfiguration *self);
-const gchar *ide_configuration_getenv (IdeConfiguration *self,
- const gchar *key);
-void ide_configuration_setenv (IdeConfiguration *self,
- const gchar *key,
- const gchar *value);
-gboolean ide_configuration_get_debug (IdeConfiguration *self);
-void ide_configuration_set_debug (IdeConfiguration *self,
- gboolean debug);
-const gchar *ide_configuration_get_prefix (IdeConfiguration *self);
-void ide_configuration_set_prefix (IdeConfiguration *self,
- const gchar *prefix);
-const gchar *ide_configuration_get_config_opts (IdeConfiguration *self);
-void ide_configuration_set_config_opts (IdeConfiguration *self,
- const gchar *config_opts);
-gint ide_configuration_get_parallelism (IdeConfiguration *self);
-void ide_configuration_set_parallelism (IdeConfiguration *self,
- gint parallelism);
-IdeEnvironment *ide_configuration_get_environment (IdeConfiguration *self);
-IdeConfiguration *ide_configuration_duplicate (IdeConfiguration *self);
-guint ide_configuration_get_sequence (IdeConfiguration *self);
+IdeConfiguration *ide_configuration_new (IdeContext *context,
+ const gchar *id,
+ const gchar *device_id,
+ const gchar *runtime_id);
+const gchar *ide_configuration_get_id (IdeConfiguration *self);
+const gchar *ide_configuration_get_runtime_id (IdeConfiguration *self);
+void ide_configuration_set_runtime_id (IdeConfiguration *self,
+ const gchar *runtime_id);
+const gchar *ide_configuration_get_device_id (IdeConfiguration *self);
+void ide_configuration_set_device_id (IdeConfiguration *self,
+ const gchar *device_id);
+IdeDevice *ide_configuration_get_device (IdeConfiguration *self);
+void ide_configuration_set_device (IdeConfiguration *self,
+ IdeDevice *device);
+gboolean ide_configuration_get_dirty (IdeConfiguration *self);
+void ide_configuration_set_dirty (IdeConfiguration *self,
+ gboolean dirty);
+const gchar *ide_configuration_get_display_name (IdeConfiguration *self);
+void ide_configuration_set_display_name (IdeConfiguration *self,
+ const gchar *display_name);
+IdeRuntime *ide_configuration_get_runtime (IdeConfiguration *self);
+void ide_configuration_set_runtime (IdeConfiguration *self,
+ IdeRuntime *runtime);
+gchar **ide_configuration_get_environ (IdeConfiguration *self);
+const gchar *ide_configuration_getenv (IdeConfiguration *self,
+ const gchar *key);
+void ide_configuration_setenv (IdeConfiguration *self,
+ const gchar *key,
+ const gchar *value);
+gboolean ide_configuration_get_debug (IdeConfiguration *self);
+void ide_configuration_set_debug (IdeConfiguration *self,
+ gboolean debug);
+const gchar *ide_configuration_get_prefix (IdeConfiguration *self);
+void ide_configuration_set_prefix (IdeConfiguration *self,
+ const gchar *prefix);
+const gchar *ide_configuration_get_config_opts (IdeConfiguration *self);
+void ide_configuration_set_config_opts (IdeConfiguration *self,
+ const gchar *config_opts);
+gint ide_configuration_get_parallelism (IdeConfiguration *self);
+void ide_configuration_set_parallelism (IdeConfiguration *self,
+ gint parallelism);
+IdeEnvironment *ide_configuration_get_environment (IdeConfiguration *self);
+IdeConfiguration *ide_configuration_duplicate (IdeConfiguration *self);
+guint ide_configuration_get_sequence (IdeConfiguration *self);
+IdeBuildCommandQueue *ide_configuration_get_prebuild (IdeConfiguration *self);
+IdeBuildCommandQueue *ide_configuration_get_postbuild (IdeConfiguration *self);
G_END_DECLS
diff --git a/libide/ide-internal.h b/libide/ide-internal.h
index c102f23..14f9d97 100644
--- a/libide/ide-internal.h
+++ b/libide/ide-internal.h
@@ -49,6 +49,10 @@ void _ide_buffer_manager_reclaim (IdeBufferManager
IdeBuffer *buffer);
void _ide_build_system_set_project_file (IdeBuildSystem *self,
GFile *project_file);
+void _ide_configuration_set_prebuild (IdeConfiguration *self,
+ IdeBuildCommandQueue *prebuild);
+void _ide_configuration_set_postbuild (IdeConfiguration *self,
+ IdeBuildCommandQueue *postbuild);
gboolean _ide_context_is_restoring (IdeContext *self);
const gchar *_ide_file_get_content_type (IdeFile *self);
GtkSourceFile *_ide_file_set_content_type (IdeFile *self,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]