guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 04/07: Allow empty vendor string in GNU target triplets.


From: Ludovic Courtès
Subject: [Guile-commits] 04/07: Allow empty vendor string in GNU target triplets.
Date: Thu, 16 Jun 2022 04:06:51 -0400 (EDT)

civodul pushed a commit to branch main
in repository guile.

commit e4e8afd6c8eeb9be1564e1be8e33362e7e987a3c
Author: Taylor R Campbell <campbell+guile@mumble.net>
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 <ludo@gnu.org>
---
 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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]