forked from Mirrors/flatpak-builder
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
parent
e1cb723c55
commit
59c8c49bdd
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue