diff options
author | Alexander Larsson <alexl@redhat.com> | 2015-11-27 09:32:22 +0100 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2015-11-27 10:23:14 +0100 |
commit | 56652c9ea1dc5b3482c64d9b4310df7a3663dcc7 (patch) | |
tree | c4ff1b85ee33813fad37d54dcf8847d791f7565d /builder/builder-module.c | |
parent | 106a5b06ecb28f4eb0eda9310b28903effe9d381 (diff) | |
download | xdg-app-56652c9ea1dc5b3482c64d9b4310df7a3663dcc7.tar.gz |
builder: Add support for cmake and forced builddir
Diffstat (limited to 'builder/builder-module.c')
-rw-r--r-- | builder/builder-module.c | 89 |
1 files changed, 80 insertions, 9 deletions
diff --git a/builder/builder-module.c b/builder/builder-module.c index 5acdae2..ae69ff6 100644 --- a/builder/builder-module.c +++ b/builder/builder-module.c @@ -43,6 +43,8 @@ struct BuilderModule { char **make_install_args; gboolean rm_configure; gboolean no_autogen; + gboolean cmake; + gboolean builddir; BuilderOptions *build_options; GPtrArray *changes; char **cleanup; @@ -63,6 +65,8 @@ enum { PROP_NAME, PROP_RM_CONFIGURE, PROP_NO_AUTOGEN, + PROP_CMAKE, + PROP_BUILDDIR, PROP_CONFIG_OPTS, PROP_MAKE_ARGS, PROP_MAKE_INSTALL_ARGS, @@ -114,6 +118,14 @@ builder_module_get_property (GObject *object, g_value_set_boolean (value, self->no_autogen); break; + case PROP_CMAKE: + g_value_set_boolean (value, self->cmake); + break; + + case PROP_BUILDDIR: + g_value_set_boolean (value, self->builddir); + break; + case PROP_CONFIG_OPTS: g_value_set_boxed (value, self->config_opts); break; @@ -167,6 +179,14 @@ builder_module_set_property (GObject *object, self->no_autogen = g_value_get_boolean (value); break; + case PROP_CMAKE: + self->cmake = g_value_get_boolean (value); + break; + + case PROP_BUILDDIR: + self->builddir = g_value_get_boolean (value); + break; + case PROP_CONFIG_OPTS: tmp = self->config_opts; self->config_opts = g_strdupv (g_value_get_boxed (value)); @@ -237,6 +257,20 @@ builder_module_class_init (BuilderModuleClass *klass) FALSE, G_PARAM_READWRITE)); g_object_class_install_property (object_class, + PROP_CMAKE, + g_param_spec_boolean ("cmake", + "", + "", + FALSE, + G_PARAM_READWRITE)); + g_object_class_install_property (object_class, + PROP_BUILDDIR, + g_param_spec_boolean ("builddir", + "", + "", + FALSE, + G_PARAM_READWRITE)); + g_object_class_install_property (object_class, PROP_SOURCES, g_param_spec_pointer ("sources", "", @@ -498,6 +532,7 @@ builder_module_build (BuilderModule *self, g_autofree char *make_l = NULL; g_autofree char *makefile_content = NULL; g_autoptr(GFile) configure_file = NULL; + g_autoptr(GFile) cmake_file = NULL; const char *makefile_names[] = {"Makefile", "makefile", "GNUmakefile", NULL}; g_autoptr(GFile) build_dir = NULL; gboolean has_configure; @@ -543,12 +578,25 @@ builder_module_build (BuilderModule *self, if (cxxflags) env = g_environ_setenv (env, "CXXFLAGS", cxxflags, TRUE); - configure_file = g_file_get_child (source_dir, "configure"); - - if (self->rm_configure) + if (self->cmake) { - if (!g_file_delete (configure_file, NULL, error)) - return FALSE; + cmake_file = g_file_get_child (source_dir, "CMakeLists.txt"); + if (g_file_query_exists (cmake_file, NULL)) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Can't find CMakeLists.txt"); + return FALSE; + } + configure_file = g_object_ref (cmake_file); + } + else + { + configure_file = g_file_get_child (source_dir, "configure"); + + if (self->rm_configure) + { + if (!g_file_delete (configure_file, NULL, error)) + return FALSE; + } } has_configure = g_file_query_exists (configure_file, NULL); @@ -592,27 +640,48 @@ builder_module_build (BuilderModule *self, if (has_configure) { const char *configure_cmd; + const char *configure_final_arg = skip_arg; + const char *configure_prefix_arg = skip_arg; g_autofree char *configure_content = NULL; if (!g_file_load_contents (configure_file, NULL, &configure_content, NULL, NULL, error)) return FALSE; var_require_builddir = strstr (configure_content, "buildapi-variable-require-builddir") != NULL; - use_builddir = var_require_builddir; + use_builddir = var_require_builddir || self->builddir; if (use_builddir) { build_dir = g_file_get_child (source_dir, "_build"); - configure_cmd = "../configure"; + if (self->cmake) + { + configure_cmd = "cmake"; + configure_final_arg = ".."; + } + else + { + configure_cmd = "../configure"; + } } else { build_dir = g_object_ref (source_dir); - configure_cmd = "./configure"; + if (self->cmake) + { + configure_cmd = "cmake"; + configure_final_arg = "."; + } + else + configure_cmd = "./configure"; } + if (self->cmake) + configure_prefix_arg = "-DCMAKE_INSTALL_PREFIX:PATH='/app'"; + else + configure_prefix_arg = "--prefix=/app"; + if (!build (app_dir, source_dir, build_dir, build_args, env, error, - configure_cmd, "--prefix=/app", strv_arg, self->config_opts, NULL)) + configure_cmd, configure_prefix_arg, strv_arg, self->config_opts, configure_final_arg, NULL)) return FALSE; } else @@ -673,6 +742,8 @@ builder_module_checksum (BuilderModule *self, builder_cache_checksum_strv (cache, self->make_install_args); builder_cache_checksum_boolean (cache, self->rm_configure); builder_cache_checksum_boolean (cache, self->no_autogen); + builder_cache_checksum_boolean (cache, self->cmake); + builder_cache_checksum_boolean (cache, self->builddir); for (l = self->sources; l != NULL; l = l->next) { |