~jprotopopov/public-inbox

kefir: Treat zero-length environment variables as unset v1 PROPOSED

remph: 1
 Treat zero-length environment variables as unset

 3 files changed, 31 insertions(+), 23 deletions(-)
#1425539 freebsd.yml failed
#1425540 netbsd.yml failed
#1425541 openbsd.yml failed
#1425542 ubuntu.yml failed
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~jprotopopov/public-inbox/patches/57367/mbox | git am -3
Learn more about email & git

[PATCH kefir] Treat zero-length environment variables as unset Export this patch

Idiomatically, environment variables set to '' are treated as unset, as they
are in the shell. This patch fixes behaviour a user may not expect:
* `make CC=kefir KEFIR_LD=': kefir tries to exec an empty string
* `TMPDIR= kefir ...': kefir writes temporary files to current working
  directory, rather than using a default TMPDIR

Also a manpage typo
---
 docs/man/kefir.1           |  2 +-
 source/driver/externals.c  | 48 ++++++++++++++++++++++----------------
 source/platform/tempfile.c |  4 ++--
 3 files changed, 31 insertions(+), 23 deletions(-)

diff --git a/docs/man/kefir.1 b/docs/man/kefir.1
index 949f991b..63e8a98a 100644
--- a/docs/man/kefir.1
+++ b/docs/man/kefir.1
@@ -628,7 +628,7 @@ Override kefir temporary directory
Normally
.Nm
exits with 0 exit code. In case of any errors in any of compilation stages, all further compilation is aborted and
non-zero exit code retruned.
non-zero exit code returned.
.\"
.Sh STANDARDS
.Nm
diff --git a/source/driver/externals.c b/source/driver/externals.c
index 764cd151..3f11e0de 100644
--- a/source/driver/externals.c
+++ b/source/driver/externals.c
@@ -28,6 +28,14 @@ static void set_if_null(const char **target, const char *value) {
    }
}

static const char *getenv_nonzero(const char *envvar) {
    const char *value = getenv(envvar);
    if (value != NULL && *value == '\0') {
        value = NULL;
    }
    return value;
}

kefir_result_t kefir_driver_external_resources_init_from_env(struct kefir_mem *mem,
                                                             struct kefir_driver_external_resources *externals,
                                                             struct kefir_tempfile_manager *tmpmgr) {
@@ -41,9 +49,9 @@ kefir_result_t kefir_driver_external_resources_init_from_env(struct kefir_mem *m
    externals->default_target = getenv("KEFIR_TARGET");

    externals->assembler_path_explicit = false;
    externals->assembler_path = getenv("KEFIR_AS");
    externals->assembler_path = getenv_nonzero("KEFIR_AS");
    if (externals->assembler_path == NULL) {
        externals->assembler_path = getenv("AS");
        externals->assembler_path = getenv_nonzero("AS");
    }
    if (externals->assembler_path != NULL) {
        externals->assembler_path_explicit = true;
@@ -55,9 +63,9 @@ kefir_result_t kefir_driver_external_resources_init_from_env(struct kefir_mem *m
        externals->assembler_path = "as";
    }

    externals->linker_path = getenv("KEFIR_LD");
    externals->linker_path = getenv_nonzero("KEFIR_LD");
    if (externals->linker_path == NULL) {
        externals->linker_path = getenv("LD");
        externals->linker_path = getenv_nonzero("LD");
    }
#ifdef KEFIR_CONFIG_HOST_LD
    set_if_null(&externals->linker_path, KEFIR_CONFIG_HOST_LD);
@@ -66,22 +74,22 @@ kefir_result_t kefir_driver_external_resources_init_from_env(struct kefir_mem *m
        externals->linker_path = "ld";
    }

    externals->runtime_include = getenv("KEFIR_RTINC");
    externals->musl.include_path = getenv("KEFIR_MUSL_INCLUDE");
    externals->musl.library_path = getenv("KEFIR_MUSL_LIB");
    externals->musl.dynamic_linker = getenv("KEFIR_MUSL_DYNAMIC_LINKER");
    externals->gnu.include_path = getenv("KEFIR_GNU_INCLUDE");
    externals->gnu.library_path = getenv("KEFIR_GNU_LIB");
    externals->gnu.dynamic_linker = getenv("KEFIR_GNU_DYNAMIC_LINKER");
    externals->freebsd.include_path = getenv("KEFIR_FREEBSD_INCLUDE");
    externals->freebsd.library_path = getenv("KEFIR_FREEBSD_LIB");
    externals->freebsd.dynamic_linker = getenv("KEFIR_FREEBSD_DYNAMIC_LINKER");
    externals->openbsd.include_path = getenv("KEFIR_OPENBSD_INCLUDE");
    externals->openbsd.library_path = getenv("KEFIR_OPENBSD_LIB");
    externals->openbsd.dynamic_linker = getenv("KEFIR_OPENBSD_DYNAMIC_LINKER");
    externals->netbsd.include_path = getenv("KEFIR_NETBSD_INCLUDE");
    externals->netbsd.library_path = getenv("KEFIR_NETBSD_LIB");
    externals->netbsd.dynamic_linker = getenv("KEFIR_NETBSD_DYNAMIC_LINKER");
    externals->runtime_include = getenv_nonzero("KEFIR_RTINC");
    externals->musl.include_path = getenv_nonzero("KEFIR_MUSL_INCLUDE");
    externals->musl.library_path = getenv_nonzero("KEFIR_MUSL_LIB");
    externals->musl.dynamic_linker = getenv_nonzero("KEFIR_MUSL_DYNAMIC_LINKER");
    externals->gnu.include_path = getenv_nonzero("KEFIR_GNU_INCLUDE");
    externals->gnu.library_path = getenv_nonzero("KEFIR_GNU_LIB");
    externals->gnu.dynamic_linker = getenv_nonzero("KEFIR_GNU_DYNAMIC_LINKER");
    externals->freebsd.include_path = getenv_nonzero("KEFIR_FREEBSD_INCLUDE");
    externals->freebsd.library_path = getenv_nonzero("KEFIR_FREEBSD_LIB");
    externals->freebsd.dynamic_linker = getenv_nonzero("KEFIR_FREEBSD_DYNAMIC_LINKER");
    externals->openbsd.include_path = getenv_nonzero("KEFIR_OPENBSD_INCLUDE");
    externals->openbsd.library_path = getenv_nonzero("KEFIR_OPENBSD_LIB");
    externals->openbsd.dynamic_linker = getenv_nonzero("KEFIR_OPENBSD_DYNAMIC_LINKER");
    externals->netbsd.include_path = getenv_nonzero("KEFIR_NETBSD_INCLUDE");
    externals->netbsd.library_path = getenv_nonzero("KEFIR_NETBSD_LIB");
    externals->netbsd.dynamic_linker = getenv_nonzero("KEFIR_NETBSD_DYNAMIC_LINKER");

    UNUSED(set_if_null);

diff --git a/source/platform/tempfile.c b/source/platform/tempfile.c
index 2fa69a3f..ee3a6644 100644
--- a/source/platform/tempfile.c
+++ b/source/platform/tempfile.c
@@ -93,10 +93,10 @@ kefir_result_t kefir_tempfile_manager_free(struct kefir_mem *mem, struct kefir_t

static const char *get_tmp_directory(void) {
    const char *tmp_directory = getenv("KEFIR_TMPDIR");
    if (tmp_directory == NULL) {
    if (tmp_directory == NULL || *tmp_directory == '\0') {
        tmp_directory = getenv("TMPDIR");
    }
    if (tmp_directory == NULL) {
    if (tmp_directory == NULL || *tmp_directory == '\0') {
#ifdef P_tmpdir
        tmp_directory = P_tmpdir;
#else
-- 
2.48.1
kefir/patches: FAILED in 2h27m53s

[Treat zero-length environment variables as unset][0] from [remph][1]

[0]: https://lists.sr.ht/~jprotopopov/public-inbox/patches/57367
[1]: mailto:lhr@disroot.org

✗ #1425541 FAILED kefir/patches/openbsd.yml https://builds.sr.ht/~jprotopopov/job/1425541
✗ #1425540 FAILED kefir/patches/netbsd.yml  https://builds.sr.ht/~jprotopopov/job/1425540
✗ #1425539 FAILED kefir/patches/freebsd.yml https://builds.sr.ht/~jprotopopov/job/1425539
✗ #1425542 FAILED kefir/patches/ubuntu.yml  https://builds.sr.ht/~jprotopopov/job/1425542