forked from Mirrors/flatpak-builder
Add append-path and append-ld-libary-path build options
These are useful for e.g. sdk extensions.tingping/wmclass
parent
f779394d92
commit
21cd4963b1
|
@ -253,6 +253,16 @@
|
|||
<listitem><para>The build prefix for the modules (defaults to <filename>/app</filename> for
|
||||
applications and <filename>/usr</filename> for runtimes).</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>append-path</option> (string)</term>
|
||||
<listitem><para>This will get appended to PATH in the build environment (with an leading colon if
|
||||
needed).</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>append-ld-library-path</option> (string)</term>
|
||||
<listitem><para>This will get appended to LD_LIBRARY_PATH in the build environment (with an leading colon if
|
||||
needed).</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>env</option> (object)</term>
|
||||
<listitem><para>This is a dictionary defining environment variables to be set during the build. Elements in this override the properties that set the environment, like cflags and ldflags.</para></listitem>
|
||||
|
|
|
@ -878,18 +878,22 @@ char **
|
|||
builder_context_extend_env (BuilderContext *self,
|
||||
char **envp)
|
||||
{
|
||||
g_autofree char *path = NULL;
|
||||
|
||||
path = g_strdup (g_environ_getenv (envp, "PATH"));
|
||||
if (path == NULL)
|
||||
path = g_strdup ("/app/bin:/usr/bin"); /* This is the flatpak default PATH, we alway set it so we can easily append to it */
|
||||
|
||||
if (self->use_ccache)
|
||||
{
|
||||
const char *old_path = g_environ_getenv (envp, "PATH");
|
||||
g_autofree char *new_path = NULL;
|
||||
if (old_path == NULL)
|
||||
old_path = "/app/bin:/usr/bin"; /* This is the flatpak default PATH */
|
||||
|
||||
new_path = g_strdup_printf ("/run/ccache/bin:%s", old_path);
|
||||
envp = g_environ_setenv (envp, "PATH", new_path, TRUE);
|
||||
char *new_path = g_strdup_printf ("/run/ccache/bin:%s", path);
|
||||
g_free (path);
|
||||
path = new_path;
|
||||
envp = g_environ_setenv (envp, "CCACHE_DIR", "/run/ccache", TRUE);
|
||||
}
|
||||
|
||||
envp = g_environ_setenv (envp, "PATH", path, TRUE);
|
||||
|
||||
return envp;
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,8 @@ struct BuilderOptions
|
|||
char *cppflags;
|
||||
char *cxxflags;
|
||||
char *ldflags;
|
||||
char *append_path;
|
||||
char *append_ld_library_path;
|
||||
char *prefix;
|
||||
char **env;
|
||||
char **build_args;
|
||||
|
@ -72,6 +74,8 @@ enum {
|
|||
PROP_ARCH,
|
||||
PROP_BUILD_ARGS,
|
||||
PROP_CONFIG_OPTS,
|
||||
PROP_APPEND_PATH,
|
||||
PROP_APPEND_LD_LIBRARY_PATH,
|
||||
LAST_PROP
|
||||
};
|
||||
|
||||
|
@ -85,6 +89,8 @@ builder_options_finalize (GObject *object)
|
|||
g_free (self->cxxflags);
|
||||
g_free (self->cppflags);
|
||||
g_free (self->ldflags);
|
||||
g_free (self->append_path);
|
||||
g_free (self->append_ld_library_path);
|
||||
g_free (self->prefix);
|
||||
g_strfreev (self->env);
|
||||
g_strfreev (self->build_args);
|
||||
|
@ -120,6 +126,14 @@ builder_options_get_property (GObject *object,
|
|||
g_value_set_string (value, self->ldflags);
|
||||
break;
|
||||
|
||||
case PROP_APPEND_PATH:
|
||||
g_value_set_string (value, self->append_path);
|
||||
break;
|
||||
|
||||
case PROP_APPEND_LD_LIBRARY_PATH:
|
||||
g_value_set_string (value, self->append_ld_library_path);
|
||||
break;
|
||||
|
||||
case PROP_PREFIX:
|
||||
g_value_set_string (value, self->prefix);
|
||||
break;
|
||||
|
@ -184,6 +198,16 @@ builder_options_set_property (GObject *object,
|
|||
self->ldflags = g_value_dup_string (value);
|
||||
break;
|
||||
|
||||
case PROP_APPEND_PATH:
|
||||
g_clear_pointer (&self->append_path, g_free);
|
||||
self->append_path = g_value_dup_string (value);
|
||||
break;
|
||||
|
||||
case PROP_APPEND_LD_LIBRARY_PATH:
|
||||
g_clear_pointer (&self->append_ld_library_path, g_free);
|
||||
self->append_ld_library_path = g_value_dup_string (value);
|
||||
break;
|
||||
|
||||
case PROP_PREFIX:
|
||||
g_clear_pointer (&self->prefix, g_free);
|
||||
self->prefix = g_value_dup_string (value);
|
||||
|
@ -263,6 +287,20 @@ builder_options_class_init (BuilderOptionsClass *klass)
|
|||
"",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_APPEND_PATH,
|
||||
g_param_spec_string ("append-path",
|
||||
"",
|
||||
"",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_APPEND_LD_LIBRARY_PATH,
|
||||
g_param_spec_string ("append-ld-library-path",
|
||||
"",
|
||||
"",
|
||||
NULL,
|
||||
G_PARAM_READWRITE));
|
||||
g_object_class_install_property (object_class,
|
||||
PROP_PREFIX,
|
||||
g_param_spec_string ("prefix",
|
||||
|
@ -583,6 +621,69 @@ builder_options_get_ldflags (BuilderOptions *self, BuilderContext *context)
|
|||
return builder_options_get_flags (self, context, G_STRUCT_OFFSET (BuilderOptions, ldflags));
|
||||
}
|
||||
|
||||
static char *
|
||||
builder_options_get_appended_path (BuilderOptions *self, BuilderContext *context, const char *initial_value, size_t field_offset)
|
||||
{
|
||||
g_autoptr(GList) options = get_all_options (self, context);
|
||||
GList *l;
|
||||
GString *path_list = NULL;
|
||||
|
||||
if (initial_value)
|
||||
path_list = g_string_new (initial_value);
|
||||
|
||||
for (l = options; l != NULL; l = l->next)
|
||||
{
|
||||
BuilderOptions *o = l->data;
|
||||
const char *append = G_STRUCT_MEMBER (const char *, o, field_offset);
|
||||
|
||||
if (append)
|
||||
{
|
||||
if (path_list == NULL)
|
||||
path_list = g_string_new ("");
|
||||
|
||||
if (path_list->len > 0)
|
||||
g_string_append_c (path_list, ':');
|
||||
|
||||
g_string_append (path_list, append);
|
||||
}
|
||||
}
|
||||
|
||||
if (path_list)
|
||||
return g_string_free (path_list, FALSE);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static char **
|
||||
builder_options_update_ld_path (BuilderOptions *self, BuilderContext *context, char **envp)
|
||||
{
|
||||
g_autofree char *path = NULL;
|
||||
const char *old = NULL;
|
||||
|
||||
old = g_environ_getenv (envp, "LD_LIBRARY_PATH");
|
||||
if (old == NULL)
|
||||
old = "/app/lib";
|
||||
|
||||
path = builder_options_get_appended_path (self, context, old,
|
||||
G_STRUCT_OFFSET (BuilderOptions, append_ld_library_path));
|
||||
if (path)
|
||||
envp = g_environ_setenv (envp, "LD_LIBRARY_PATH", path, TRUE);
|
||||
|
||||
return envp;
|
||||
}
|
||||
|
||||
static char **
|
||||
builder_options_update_path (BuilderOptions *self, BuilderContext *context, char **envp)
|
||||
{
|
||||
g_autofree char *path = NULL;
|
||||
path = builder_options_get_appended_path (self, context,
|
||||
g_environ_getenv (envp, "PATH"),
|
||||
G_STRUCT_OFFSET (BuilderOptions, append_path));
|
||||
if (path)
|
||||
envp = g_environ_setenv (envp, "PATH", path, TRUE);
|
||||
return envp;
|
||||
}
|
||||
|
||||
const char *
|
||||
builder_options_get_prefix (BuilderOptions *self, BuilderContext *context)
|
||||
{
|
||||
|
@ -689,6 +790,9 @@ builder_options_get_env (BuilderOptions *self, BuilderContext *context)
|
|||
if (ldflags)
|
||||
envp = g_environ_setenv (envp, "LDFLAGS", ldflags, FALSE);
|
||||
|
||||
envp = builder_options_update_path (self, context, envp);
|
||||
envp = builder_options_update_ld_path (self, context, envp);
|
||||
|
||||
return envp;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue