summaryrefslogtreecommitdiff
path: root/builder/builder-module.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2015-11-27 09:32:22 +0100
committerAlexander Larsson <alexl@redhat.com>2015-11-27 10:23:14 +0100
commit56652c9ea1dc5b3482c64d9b4310df7a3663dcc7 (patch)
treec4ff1b85ee33813fad37d54dcf8847d791f7565d /builder/builder-module.c
parent106a5b06ecb28f4eb0eda9310b28903effe9d381 (diff)
downloadxdg-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.c89
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)
{