civodul pushed a commit to branch main
in repository guile.
commit e4e8afd6c8eeb9be1564e1be8e33362e7e987a3c
Author: Taylor R Campbell <[email protected]>
AuthorDate: Wed Apr 13 09:51:08 2022 +0000
Allow empty vendor string in GNU target triplets.
NetBSD and pkgsrc have been using an empty vendor string since the
mid-'90s, such as x86_64--netbsd. pkgsrc has been carrying around a
workaround just the guile build for a long time. (Before that,
NetBSD omitted the vendor altogether, so if x86_64 existed then it
might have been `x86_64-netbsd', but that caused more problems.)
This change makes Guile accept an empty vendor string so workarounds
are no longer necessary.
* module/system/base/target.scm (validate-target): Allow empty vendor
string in GNU target triplets.
* test-suite/tests/cross-compilation.test ("cross-compilation"): Add
tests for "x86_64--netbsd".
Co-authored-by: Ludovic Courtès <[email protected]>
---
module/system/base/target.scm | 9 ++++++++-
test-suite/tests/cross-compilation.test | 4 +++-
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/module/system/base/target.scm b/module/system/base/target.scm
index 74af64b9d..87ab5b0c4 100644
--- a/module/system/base/target.scm
+++ b/module/system/base/target.scm
@@ -53,7 +53,14 @@
(if (or (not (string? target))
(let ((parts (string-split target #\-)))
(or (< (length parts) 3)
- (or-map string-null? parts))))
+ (let ((cpu (list-ref parts 0))
+ (os (list-ref parts 2)))
+ (or (string-null? cpu)
+ ;; vendor (parts[1]) may be empty
+ (string-null? os)
+ ;; optional components (ABI) should be nonempty if
+ ;; specified
+ (or-map string-null? (list-tail parts 3)))))))
(error "invalid target" target)))
(define (with-target target thunk)
diff --git a/test-suite/tests/cross-compilation.test
b/test-suite/tests/cross-compilation.test
index 120317b42..e520e02f4 100644
--- a/test-suite/tests/cross-compilation.test
+++ b/test-suite/tests/cross-compilation.test
@@ -1,6 +1,6 @@
;;;; Cross compilation -*- mode: scheme; coding: utf-8; -*-
;;;;
-;;;; Copyright (C) 2010-2014, 2020 Free Software Foundation, Inc.
+;;;; Copyright (C) 2010-2014, 2020, 2022 Free Software Foundation, Inc.
;;;;
;;;; This library is free software; you can redistribute it and/or
;;;; modify it under the terms of the GNU Lesser General Public
@@ -67,11 +67,13 @@
(test-triplet "i586" "pc" "gnu0.3")
(test-triplet "x86_64" "unknown" "linux-gnu")
(test-triplet "x86_64" "unknown" "kfreebsd-gnu")
+ (test-triplet "x86_64" "" "netbsd") ;NetBSD/pkgsrc with empty vendor
(test-target "i586-pc-gnu0.3" (endianness little) 4)
(test-target "x86_64-pc-linux-gnu" (endianness little) 8)
(test-target "powerpc-unknown-linux-gnu" (endianness big) 4)
(test-target "sparc64-unknown-freebsd8.2" (endianness big) 8)
+ (test-target "x86_64--netbsd" (endianness little) 8)
(test-target "mips64el-unknown-linux-gnu" ; n32 or o32 ABI
(endianness little) 4)