builder: Run builds in /run/build/$modulename

This creates repeatable builds for anything that leaves the build
dir in the resulting files, such as debug info.
tingping/wmclass
Alexander Larsson 2016-01-12 11:05:37 +01:00
parent e1cb723c55
commit 59c8c49bdd
1 changed files with 26 additions and 16 deletions

View File

@ -516,8 +516,9 @@ static const char strv_arg[] = "strv";
static gboolean
build (GFile *app_dir,
const char *module_name,
GFile *source_dir,
GFile *cwd_dir,
const char *cwd_subdir,
char **xdg_app_opts,
char **env_vars,
GError **error,
@ -546,6 +547,12 @@ build (GFile *app_dir,
g_ptr_array_add (args, g_strdup ("--nofilesystem=host"));
g_ptr_array_add (args, g_strdup_printf ("--filesystem=%s", source_dir_path_canonical));
g_ptr_array_add (args, g_strdup_printf ("--bind-mount=/run/build/%s=%s", module_name, source_dir_path_canonical));
if (cwd_subdir)
g_ptr_array_add (args, g_strdup_printf ("--build-dir=/run/build/%s/%s", module_name, cwd_subdir));
else
g_ptr_array_add (args, g_strdup_printf ("--build-dir=/run/build/%s", module_name));
if (xdg_app_opts)
{
for (i = 0; xdg_app_opts[i] != NULL; i++)
@ -582,14 +589,7 @@ build (GFile *app_dir,
launcher = g_subprocess_launcher_new (0);
if (cwd_dir)
{
cwd_dir_path = g_file_get_path (cwd_dir);
cwd_dir_path_canonical = canonicalize_file_name (cwd_dir_path);
g_subprocess_launcher_set_cwd (launcher, cwd_dir_path_canonical);
}
else
g_subprocess_launcher_set_cwd (launcher, source_dir_path_canonical);
g_subprocess_launcher_set_cwd (launcher, source_dir_path_canonical);
subp = g_subprocess_launcher_spawnv (launcher, (const gchar * const *) args->pdata, error);
g_ptr_array_free (args, TRUE);
@ -707,6 +707,7 @@ builder_module_build (BuilderModule *self,
g_autoptr(GFile) cmake_file = NULL;
const char *makefile_names[] = {"Makefile", "makefile", "GNUmakefile", NULL};
g_autoptr(GFile) build_dir = NULL;
g_autofree char *build_dir_relative = NULL;
gboolean has_configure;
gboolean var_require_builddir;
gboolean has_notparallel;
@ -718,6 +719,7 @@ builder_module_build (BuilderModule *self,
g_autofree char *buildname = NULL;
g_autoptr(GFile) source_dir = NULL;
g_autoptr(GFile) source_subdir = NULL;
const char *source_subdir_relative = NULL;
g_autoptr(GFile) source_dir_template = NULL;
g_autofree char *source_dir_path = NULL;
@ -743,7 +745,10 @@ builder_module_build (BuilderModule *self,
return FALSE;
if (self->subdir != NULL && self->subdir[0] != 0)
source_subdir = g_file_resolve_relative_path (source_dir, self->subdir);
{
source_subdir = g_file_resolve_relative_path (source_dir, self->subdir);
source_subdir_relative = self->subdir;
}
else
source_subdir = g_object_ref (source_dir);
@ -804,7 +809,7 @@ builder_module_build (BuilderModule *self,
}
env_with_noconfigure = g_environ_setenv (g_strdupv (env), "NOCONFIGURE", "1", TRUE);
if (!build (app_dir, source_dir, source_subdir, build_args, env_with_noconfigure, error,
if (!build (app_dir, self->name, source_dir, source_subdir_relative, build_args, env_with_noconfigure, error,
autogen_cmd, NULL))
return FALSE;
@ -832,6 +837,7 @@ builder_module_build (BuilderModule *self,
if (use_builddir)
{
build_dir_relative = g_build_filename (source_subdir_relative, "_xdg_app_build", NULL);
build_dir = g_file_get_child (source_subdir, "_xdg_app_build");
if (!g_file_make_directory (build_dir, NULL, error))
@ -849,6 +855,7 @@ builder_module_build (BuilderModule *self,
}
else
{
build_dir_relative = g_strdup (source_subdir_relative);
build_dir = g_object_ref (source_subdir);
if (self->cmake)
{
@ -866,12 +873,15 @@ builder_module_build (BuilderModule *self,
configure_prefix_arg = g_strdup_printf ("--prefix=%s",
builder_options_get_prefix (self->build_options, context));
if (!build (app_dir, source_dir, build_dir, build_args, env, error,
if (!build (app_dir, self->name, source_dir, build_dir_relative, build_args, env, error,
configure_cmd, configure_prefix_arg, strv_arg, self->config_opts, configure_final_arg, NULL))
return FALSE;
}
else
build_dir = g_object_ref (source_subdir);
{
build_dir_relative = g_strdup (source_subdir_relative);
build_dir = g_object_ref (source_subdir);
}
for (i = 0; makefile_names[i] != NULL; i++)
{
@ -902,11 +912,11 @@ builder_module_build (BuilderModule *self,
/* Build and install */
if (!build (app_dir, source_dir, build_dir, build_args, env, error,
if (!build (app_dir, self->name, source_dir, build_dir_relative, build_args, env, error,
"make", make_j?make_j:skip_arg, make_l?make_l:skip_arg, strv_arg, self->make_args, NULL))
return FALSE;
if (!build (app_dir, source_dir, build_dir, build_args, env, error,
if (!build (app_dir, self->name, source_dir, build_dir_relative, build_args, env, error,
"make", "install", strv_arg, self->make_install_args, NULL))
return FALSE;
@ -916,7 +926,7 @@ builder_module_build (BuilderModule *self,
{
for (i = 0; self->post_install[i] != NULL; i++)
{
if (!build (app_dir, source_dir, build_dir, build_args, env, error,
if (!build (app_dir, self->name, source_dir, build_dir_relative, build_args, env, error,
"/bin/sh", "-c", self->post_install[i], NULL))
return FALSE;
}