1293f4dce97903c0d6d0cdc1fabfb98829351230
[shellsnippets/shellsnippets.git] / other / getshver
1 # $MirOS: contrib/code/Snippets/getshver,v 1.11 2011/11/02 21:48:05 tg Exp $
2 #-
3 # Copyright (c) 2009, 2010, 2011
4 #       Thorsten Glaser <tg@mirbsd.org>
5 #
6 # Provided that these terms and disclaimer and all copyright notices
7 # are retained or reproduced in an accompanying document, permission
8 # is granted to deal in this work without restriction, including un-
9 # limited rights to use, publicly perform, distribute, sell, modify,
10 # merge, give away, or sublicence.
11 #
12 # This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
13 # the utmost extent permitted by applicable law, neither express nor
14 # implied; without malicious intent or gross negligence. In no event
15 # may a licensor, author or contributor be held liable for indirect,
16 # direct, other damage, loss, or other issues arising in any way out
17 # of dealing in the work, even if advised of the possibility of such
18 # damage or existence of a defect, except proven that it results out
19 # of said person's immediate fault when using the work as intended.
20
21 # escape this from tclsh \
22 set x = 1
23 # escape this from tclsh \
24 test 1 = "$x" && goto CSH
25
26 # BEGIN of Tcl section (((
27 # escape this from tclsh \
28 x='
29 if {[info exists ::jim_argv0]} {set v "jimsh"} elseif {[info commands tk] != ""} {set v "wish"} {set v "tclsh"}
30 if {[info exists ::tcl_version]} {
31         append v " " $::tcl_version
32         if {[info exists ::tcl_patchLevel]} {append v " (" $::tcl_patchLevel ")"}
33 } elseif {[info exists ::tcl_patchLevel]} {append v " " $::tcl_patchLevel}
34 set u 0
35 set w " on"
36 if {[info exists ::tcl_platform(machine)]} {set u 1; append w " " $::tcl_platform(machine)}
37 if {[info exists ::tcl_platform(byteOrder)]} {set u 1; append w " (" $::tcl_platform(byteOrder) ")"}
38 if {[info exists ::tcl_platform(os)]} {
39         set u 1
40         append w " " $::tcl_platform(os)
41         if {[info exists ::tcl_platform(osVersion)]} {append w " " $::tcl_platform(osVersion)}
42 } else {append w " unknown"}
43 if {[info exists ::tcl_platform(platform)]} {set u 1; append w " (" $::tcl_platform(platform) ")"}
44 if {$u == 1} {append v $w}
45 set w ","
46 if {[info exists ::tcl_platform(threaded)]} {
47         append w " "
48         if {$::tcl_platform(threaded) != 1} {append w "non"}
49         append w "threaded"
50 }
51 if {[info exists ::tcl_platform(debug)]} {
52         append w " "
53         if {$::tcl_platform(debug) != 1} {append w "non"}
54         append w "debug"
55 }
56 if {[info exists ::tcl_interactive]} {
57         append w " "
58         if {$::tcl_interactive != 1} {append w "non"}
59         append w "interactive"
60 }
61 if {[string equal $w ","] == 0} {append v $w}
62 puts $v
63 exit 0
64 '
65 # ))) END of Tcl section
66
67 if test x"`echo u ^ echo x`" = x"x"; then
68         # Bourne shell, maybe Heirloom sh (tested)
69         echo bourne
70         exit 0
71 fi
72 if test x"$(echo u)" != x"u"; then
73         # other non-POSIX shell, maybe Solaris /bin/sh
74         echo binsh
75         exit 0
76 fi
77 # POSIX shell
78
79 case $ZSH_VERSION in
80 *[0-9]*) echo "zsh $ZSH_VERSION"; exit 0 ;;
81 esac
82
83 case x$SHELL_VERSION in
84 x) ;;
85 *[0-9]*build*)
86         if ( (set -o korn) && (set -o bash) ) >&- 2>&-; then
87                 # MKS {,Korn,Bash} Shell (fixed by Michael Langguth)
88                 ( # subshell, just in case
89                 typeset _o
90
91                 _o=`set -o`
92                 if [ -z "${_o##*-o bash*}" ]; then
93                         echo "mksbash $SHELL_VERSION"
94                 elif [ -z "${_o##*-o korn*}" ]; then
95                         echo "mksksh $SHELL_VERSION"
96                 else
97                         echo "mkssh $SHELL_VERSION"
98                 fi ) || echo "mks $SHELL_VERSION"
99                 exit 0
100         fi
101         ;;
102 esac
103
104 x=
105 case x$BASH_VERSION in
106 # no GNU bash
107 x) ;;
108 # known GNU bash versions
109 x2*) x=bash2 ;;
110 x3*) x=bash3 ;;
111 x4*) x=bash4 ;;
112 # either bash1 or an unlikely version
113 *) x=bash ;;
114 esac
115 if test x"$x" != x""; then
116         echo "$x $BASH_VERSION"
117         exit 0
118 fi
119
120 # mksh, mirbsdksh (pre-mksh), oksh (3.7+), pdksh
121 case $KSH_VERSION in
122 *MIRBSD\ KSH*) echo "mksh ${KSH_VERSION#*KSH }" ; exit 0 ;;
123 *PD\ KSH*MirOS*) echo "pdksh-mbsd${KSH_VERSION#*PD KSH}"; exit 0 ;;
124 *PD\ KSH*)
125         if test x"`typeset -i10 x=0x10 2>&-; echo $x`" = x"16"; then
126                 # printing KSH_VERSION here is rather useless though
127                 echo "pdksh-obsd ${KSH_VERSION#*KSH }"
128         else
129                 # unspecified: Debian (modern), 5.2.14 (sorta modern),
130                 # some older or vendor-modified version, old oksh
131                 echo "pdksh ${KSH_VERSION#*KSH }"
132         fi
133         exit 0 ;;
134 esac
135
136 x=.sh.version
137 (eval x=\$\{$x\}) 2>&- || x=fail
138 if test fail != "$x"; then
139         if builtin XBell >/dev/null 2>&1; then
140                 eval echo 'dtksh ${.sh.version#Version }'
141         else
142                 eval echo 'ksh93 ${.sh.version#Version }'
143         fi
144         exit 0
145 fi
146 if (
147         typeset _p
148
149         _p='f+([ o])bar'
150         eval [[ foobar = $_p '&&' \"foo bar\" = $_p ]]
151 ) 2>&-; then
152         echo ksh88
153         exit 0
154 fi
155
156 if test x"$POSH_VERSION" != x""; then
157         echo "posix-posh $POSH_VERSION"
158         exit 0
159 fi
160 if ( [[ 0 < 1 ]] ) 2>&-; then
161         echo posix-ext
162         exit 0
163 fi
164 if test x"`
165         foo() {
166                 local a
167
168                 a=2
169         }
170         a=1
171         foo
172         echo $a
173     `" = x"1"; then
174         # we have a working "local"
175         if test x"$(PATH=/nonexistent; export PATH
176             printf 'f%so' o 2>/dev/null)" = x"foo"; then
177                 # probably, but not certain
178                 # also: NetBSD /bin/sh on MirBSD; dash on Debian
179                 echo posix-dash
180                 exit 0
181         fi
182         # test if we fulfil Debian Policy 10.4
183         if ( test 1 -eq 1 -a a = a ) && test x"`echo -n a;
184             echo -n b`" = x"ab"; then
185                 echo posix-debian
186                 exit 0
187         fi
188 fi
189 if test x"`echo -n a; echo -n b`" = x"ab"; then
190         echo posix-echon
191         exit 0
192 fi
193 if test x"`echo a'\c'; echo b`" = x"ab"; then
194         echo posix-echoc
195         exit 0
196 fi
197 echo posix
198 exit 0
199
200 CSH:
201
202 if { bindkey >& /dev/null } then
203         echo "tcsh $tcsh"
204 else
205         echo csh
206 endif
207 exit 0