1// Derived from Inferno utils/6l/l.h and related files.
2// https://bitbucket.org/inferno-os/inferno-os/src/master/utils/6l/l.h
3//
4//	Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
5//	Portions Copyright © 1995-1997 C H Forsyth ([email protected])
6//	Portions Copyright © 1997-1999 Vita Nuova Limited
7//	Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
8//	Portions Copyright © 2004,2006 Bruce Ellis
9//	Portions Copyright © 2005-2007 C H Forsyth ([email protected])
10//	Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
11//	Portions Copyright © 2009 The Go Authors. All rights reserved.
12//
13// Permission is hereby granted, free of charge, to any person obtaining a copy
14// of this software and associated documentation files (the "Software"), to deal
15// in the Software without restriction, including without limitation the rights
16// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17// copies of the Software, and to permit persons to whom the Software is
18// furnished to do so, subject to the following conditions:
19//
20// The above copyright notice and this permission notice shall be included in
21// all copies or substantial portions of the Software.
22//
23// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
26// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
29// THE SOFTWARE.
30
31package objabi
32
33import "fmt"
34
35// HeadType is the executable header type.
36type HeadType uint8
37
38const (
39	Hunknown HeadType = iota
40	Hdarwin
41	Hdragonfly
42	Hfreebsd
43	Hjs
44	Hlinux
45	Hnetbsd
46	Hopenbsd
47	Hplan9
48	Hsolaris
49	Hwasip1
50	Hwindows
51	Haix
52)
53
54func (h *HeadType) Set(s string) error {
55	switch s {
56	case "aix":
57		*h = Haix
58	case "darwin", "ios":
59		*h = Hdarwin
60	case "dragonfly":
61		*h = Hdragonfly
62	case "freebsd":
63		*h = Hfreebsd
64	case "js":
65		*h = Hjs
66	case "linux", "android":
67		*h = Hlinux
68	case "netbsd":
69		*h = Hnetbsd
70	case "openbsd":
71		*h = Hopenbsd
72	case "plan9":
73		*h = Hplan9
74	case "illumos", "solaris":
75		*h = Hsolaris
76	case "wasip1":
77		*h = Hwasip1
78	case "windows":
79		*h = Hwindows
80	default:
81		return fmt.Errorf("invalid headtype: %q", s)
82	}
83	return nil
84}
85
86func (h HeadType) String() string {
87	switch h {
88	case Haix:
89		return "aix"
90	case Hdarwin:
91		return "darwin"
92	case Hdragonfly:
93		return "dragonfly"
94	case Hfreebsd:
95		return "freebsd"
96	case Hjs:
97		return "js"
98	case Hlinux:
99		return "linux"
100	case Hnetbsd:
101		return "netbsd"
102	case Hopenbsd:
103		return "openbsd"
104	case Hplan9:
105		return "plan9"
106	case Hsolaris:
107		return "solaris"
108	case Hwasip1:
109		return "wasip1"
110	case Hwindows:
111		return "windows"
112	}
113	return fmt.Sprintf("HeadType(%d)", h)
114}
115