Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Determine ABI dynamically per OS instead of at compile time
Baptiste Daroussin committed 6 years ago
commit 559302cffc1c2201552b1baae72bb063c3ab7505
parent ac5157b
6 files changed +30 -12
modified libpkg/pkg_elf.c
@@ -796,20 +796,21 @@ elf_note_analyse(Elf_Data *data, GElf_Ehdr *elfhdr, struct os_info *oi)
	} else {
		if (oi->osversion == 0)
			oi->osversion = version;
-
#if defined(__DragonFly__)
-
		xasprintf(&oi->version, "%d.%d", version / 100000, (((version / 100 % 1000)+1)/2)*2);
-
#elif defined(__NetBSD__)
+
		if (strncasecmp(oi->name, "dragonfly", 9) == 0) {
+
			xasprintf(&oi->version, "%d.%d", version / 100000, (((version / 100 % 1000)+1)/2)*2);
+
		} else if (strncasecmp(oi->name, "netbsd", 6) == 0) {
		xasprintf(&oi->version, "%d", (version + 1000000) / 100000000);
-
#else
+
		} else {
		xasprintf(&oi->version_major, "%d", version / 100000);
		xasprintf(&oi->version_minor, "%d", (((version / 100 % 1000)+1)/2)*2);
		xasprintf(&oi->version, "%d", version / 100000);
-
#endif
+
		}
	}

	return (true);
}

+

static int
pkg_get_myarch_elfparse(char *dest, size_t sz, struct os_info *oi)
{
@@ -1097,18 +1098,24 @@ pkg_get_myarch_legacy(char *dest, size_t sz)
	return (0);
}

-
#ifndef __DragonFly__
int
pkg_get_myarch(char *dest, size_t sz, struct os_info *oi)
{
	struct arch_trans *arch_trans;
	char *arch_tweak;
+
	int i;

	int err;
	err = pkg_get_myarch_elfparse(dest, sz, oi);
	if (err)
		return (err);

+
	if (strncasecmp(dest, "DragonFly", 9) == 0) {
+
		for (i = 0; i < strlen(dest); i++)
+
			dest[i] = tolower(dest[i]);
+
		return (0);
+
	}
+

	/* Translate architecture string back to regular OS one */
	arch_tweak = strchr(dest, ':');
	if (arch_tweak == NULL)
@@ -1130,5 +1137,4 @@ pkg_get_myarch(char *dest, size_t sz, struct os_info *oi)

	return (0);
}
-
#endif

modified libpkg/private/pkg.h
@@ -666,11 +666,7 @@ struct os_info {
	char *arch;
};

-
#ifdef __DragonFly__
-
#define pkg_get_myarch(d, z, v, n) pkg_get_myarch_legacy(d, z)
-
#else
int pkg_get_myarch(char *pkgarch, size_t sz, struct os_info *);
-
#endif
int pkg_get_myarch_legacy(char *pkgarch, size_t sz);

/**
modified tests/Makefile.autosetup
@@ -52,7 +52,8 @@ TESTS_SH= \
	frontend/lua.sh \
	frontend/shellscript.sh \
	frontend/clean.sh \
-
	frontend/backup_lib.sh
+
	frontend/backup_lib.sh \
+
	frontend/abi.sh

merge_OBJS=	lib/merge.o
plist_OBJS=	lib/plist.o
added tests/frontend/abi.sh
@@ -0,0 +1,15 @@
+
#! /usr/bin/env atf-sh
+

+
. $(atf_get_srcdir)/test_environment.sh
+
tests_init \
+
	basic
+

+
basic_body() {
+
	atf_check \
+
		-o inline:"FreeBSD:13:amd64\n" \
+
		pkg -o IGNORE_OSMAJOR=1 -o ABI_FILE=$(atf_get_srcdir)/fbsd.bin config abi
+

+
	atf_check \
+
		-o inline:"dragonfly:5.10:x86:64\n" \
+
		pkg -o IGNORE_OSMAJOR=1 -o ABI_FILE=$(atf_get_srcdir)/dfly.bin config abi
+
}
added tests/frontend/dfly.bin
added tests/frontend/fbsd.bin