#!/usr/bin/python-exec2c
# vim:fileencoding=utf-8:ft=python
# (c) 2012-2016 Michał Górny
# Released under the terms of the 2-clause BSD license.
#
# This is not the script you are looking for. This is just a wrapper.
# The actual scripts of this application were installed
# in subdirectories of /usr/lib/python-exec.
# You are most likely looking for one of those.

from __future__ import with_statement

# prepare a clean globals for exec()
new_globals = dict(globals())
# we have to keep the import top, so delete it from globals
del new_globals['with_statement']

import errno, os, os.path, sys

try:
	from epython import EPYTHON
except ImportError:
	EPYTHON = os.path.basename(sys.executable)
	if '' and EPYTHON.endswith(''):
		EPYTHON = EPYTHON[:-len('')]

# Alike python-exec2c, perform symlink resolution on target until
# EINVAL is hit. If the final target is python-exec2, use the last
# symlink name preceding it. Otherwise, use the final target.
prev_target = None
target = sys.argv[0]
while True:
	try:
		next_target = os.path.join(os.path.dirname(target),
				os.readlink(target))
	except OSError as e:
		if e.errno == errno.EINTR:
			# retry
			continue
		elif e.errno == errno.EINVAL:
			# if the final target is python-exec2, use last symlink
			if os.path.basename(target) in ( 'python-exec2', 'python-exec2' ):
				if prev_target is None:
					sys.stderr.write('%s: python-exec2 is a wrapper, it must not be run directly.\n'
							% target)
					sys.exit(127)

				target = prev_target
			break
		else:
			raise
	else:
		prev_target = target
		target = next_target

target = os.path.join('/usr/lib/python-exec', EPYTHON,
		os.path.basename(target))

data = None
while data is None:
	try:
		kwargs = {}
		if sys.version_info[0] >= 3:
			import tokenize

			# need to provide encoding
			with open(target, 'rb') as f:
				kwargs['encoding'] = tokenize.detect_encoding(f.readline)[0]

		with open(target, 'r', **kwargs) as f:
			data = f.read()
	except IOError as e:
		if e.errno == errno.EINTR:
			# retry
			continue
		elif e.errno == errno.ENOENT:
			sys.stderr.write('%s: this Python implementation (%s) is not supported by the script.\n'
					% (target, EPYTHON))
			sys.exit(127)
		else:
			raise

sys.argv[0] = target
new_globals['__file__'] = target

exec(data, new_globals)
