aboutsummaryrefslogtreecommitdiff
path: root/libbutl/target-triplet.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'libbutl/target-triplet.cxx')
-rw-r--r--libbutl/target-triplet.cxx60
1 files changed, 32 insertions, 28 deletions
diff --git a/libbutl/target-triplet.cxx b/libbutl/target-triplet.cxx
index 17337b3..e28f119 100644
--- a/libbutl/target-triplet.cxx
+++ b/libbutl/target-triplet.cxx
@@ -1,33 +1,9 @@
// file : libbutl/target-triplet.cxx -*- C++ -*-
// license : MIT; see accompanying LICENSE file
-#ifndef __cpp_modules_ts
-#include <libbutl/target-triplet.mxx>
-#endif
-
-// C includes.
-
-#ifndef __cpp_lib_modules_ts
-#include <string>
-#include <ostream>
+#include <libbutl/target-triplet.hxx>
#include <stdexcept> // invalid_argument
-#endif
-
-// Other includes.
-
-#ifdef __cpp_modules_ts
-module butl.target_triplet;
-
-// Only imports additional to interface.
-#ifdef __clang__
-#ifdef __cpp_lib_modules_ts
-import std.core;
-import std.io;
-#endif
-#endif
-
-#endif
using namespace std;
@@ -48,7 +24,12 @@ namespace butl
if (f == 0 || f == string::npos)
bad ("missing cpu");
- cpu.assign (s, 0, f);
+ // Canonicalize CPU.
+ //
+ if (s.compare (0, f, "arm64") == 0)
+ cpu = "aarch64";
+ else
+ cpu.assign (s, 0, f);
// If we have something in between, then the first component after CPU is
// VENDOR. Unless it is a first component of two-component system, as in
@@ -107,6 +88,13 @@ namespace butl
if (system.front () == '-' || system.back () == '-')
bad ("invalid os/kernel/abi");
+ // Canonicalize SYSTEM.
+ //
+ if (system == "linux")
+ system = "linux-gnu"; // Per config.sub.
+ else if (system == "windows-gnu" && vendor == "w64") // Clang's innovation.
+ system = "mingw32";
+
// Extract VERSION for some recognized systems.
//
string::size_type v (0);
@@ -124,6 +112,14 @@ namespace butl
version.assign (system, v, string::npos);
system.resize (system.size () - version.size ());
}
+ else if (vendor == "apple" && system.compare (0, 3, "ios") == 0)
+ {
+ // Handle iosNN[-...].
+ //
+ string::size_type p (system.find ('-'));
+ version.assign (system, 3, p == string::npos ? p : p - 3);
+ system.erase (3, version.size ());
+ }
// Determine class for some recognized systems.
//
@@ -131,6 +127,8 @@ namespace butl
class_ = "linux";
else if (vendor == "apple" && system == "darwin")
class_ = "macos";
+ else if (vendor == "apple" && system.compare (0, 3, "ios") == 0)
+ class_ = "ios";
else if (system == "freebsd" ||
system == "openbsd" ||
system == "netbsd")
@@ -162,7 +160,10 @@ namespace butl
if (!version.empty ())
{
- r += version;
+ if (vendor == "apple" && system.compare (0, 3, "ios") == 0)
+ r.insert (r.size () - system.size () + 3, version);
+ else
+ r += version;
}
return r;
@@ -186,7 +187,10 @@ namespace butl
if (!version.empty ())
{
- r += version;
+ if (vendor == "apple" && system.compare (0, 3, "ios") == 0)
+ r.insert (r.size () - system.size () + 3, version);
+ else
+ r += version;
}
return r;