Fix #69 (No way to set globally a custom architecture)

The "architecture" configuration keyword is now available to override
the native machine architecture returned by (uname(2)).

The XBPS_ARCH environment variable still has preference.
This commit is contained in:
Juan RP 2014-11-19 11:36:09 +01:00
parent b2bc7af66e
commit 428a747fad
8 changed files with 72 additions and 3 deletions

4
NEWS
View File

@ -1,5 +1,9 @@
xbps-0.42 (???):
* Implemented issue #69 (No way to set globally a custom architecture)
A new configuration keyword "architecture" has been added to override
the native machine architecture (uname -m).
* Fixed issue #68 "xbps_binpkg_arch() asserts if arch contains a dash"
https://github.com/voidlinux/xbps/issues/68

View File

@ -45,7 +45,7 @@ usage(void)
" Available actions:\n"
" binpkgarch, binpkgver, cmpver, digest, fetch, getpkgdepname,\n"
" getpkgname, getpkgrevision, getpkgversion, pkgmatch, version,\n"
" real-version.\n"
" real-version, arch.\n"
"\n"
" Action arguments:\n"
" binpkgarch\t<binpkg>\n"
@ -138,6 +138,7 @@ main(int argc, char **argv)
if ((strcmp(argv[0], "version") == 0) ||
(strcmp(argv[0], "real-version") == 0) ||
(strcmp(argv[0], "arch") == 0) ||
(strcmp(argv[0], "fetch") == 0)) {
/*
* Initialize libxbps.
@ -269,6 +270,12 @@ main(int argc, char **argv)
usage();
exit(xbps_cmpver(argv[1], argv[2]));
} else if (strcmp(argv[0], "arch") == 0) {
/* returns the xbps native arch */
if (argc != 1)
usage();
printf("%s\n", xh.native_arch);
} else if (strcmp(argv[0], "digest") == 0) {
/* Prints SHA256 hashes for specified files */
if (argc < 2)

View File

@ -157,7 +157,8 @@ parse_option(char *buf, char **k, char **v)
"virtualpkg",
"include",
"preserve",
"bestmatching"
"bestmatching",
"architecture"
};
bool found = false;
@ -249,6 +250,10 @@ parse_file(struct xbps_handle *xhp, const char *cwd, const char *path, bool nest
xbps_dbg_printf(xhp, "%s: cachedir set to %s\n",
path, v);
snprintf(xhp->cachedir, sizeof(xhp->cachedir), "%s", v);
} else if (strcmp(k, "architecture") == 0) {
xbps_dbg_printf(xhp, "%s: native architecture set to %s\n",
path, v);
snprintf(xhp->native_arch, sizeof(xhp->native_arch), "%s", v);
} else if (strcmp(k, "syslog") == 0) {
if (strcasecmp(v, "true") == 0) {
xhp->flags &= ~XBPS_FLAG_DISABLE_SYSLOG;

View File

@ -8,3 +8,5 @@ include('xbps-create/Kyuafile')
include('xbps-install/Kyuafile')
include('xbps-query/Kyuafile')
include('xbps-rindex/Kyuafile')
include('xbps-uhelper/Kyuafile')

View File

@ -1,5 +1,5 @@
-include ../../config.mk
SUBDIRS = common libxbps xbps-checkvers xbps-create xbps-install xbps-query xbps-rindex
SUBDIRS = common libxbps xbps-checkvers xbps-create xbps-install xbps-query xbps-rindex xbps-uhelper
include ../../mk/subdir.mk

View File

@ -0,0 +1,4 @@
syntax("kyuafile", 1)
test_suite("xbps-uhelper")
atf_test_program{name="arch_test"}

View File

@ -0,0 +1,8 @@
TOPDIR = ../../..
-include $(TOPDIR)/config.mk
TESTSHELL = arch_test
TESTSSUBDIR = xbps/xbps-uhelper
EXTRA_FILES = Kyuafile
include $(TOPDIR)/mk/test.mk

View File

@ -0,0 +1,39 @@
#! /usr/bin/env atf-sh
# Test that xbps-uhelper arch works as expected.
atf_test_case native
native_head() {
atf_set "descr" "xbps-uhelper arch: native test"
}
native_body() {
atf_check_equal $(xbps-uhelper arch) $(uname -m)
}
atf_test_case env
env_head() {
atf_set "descr" "xbps-uhelper arch: envvar override test"
}
env_body() {
export XBPS_ARCH=foo
atf_check_equal $(xbps-uhelper arch) foo
}
atf_test_case conf
conf_head() {
atf_set "descr" "xbps-uhelper arch: configuration override test"
}
conf_body() {
mkdir -p xbps.d
echo "architecture=x86_64-musl" > xbps.d/arch.conf
atf_check_equal $(xbps-uhelper -C $PWD/xbps.d arch) x86_64-musl
}
atf_init_test_cases() {
atf_add_test_case native
atf_add_test_case env
atf_add_test_case conf
}