#!/usr/bin/python -bO
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

from __future__ import print_function

import errno
import sys

def usage(status):
	print("Usage: env-update [--no-ldconfig]")
	print("")
	print("See the env-update(1) man page for more info")
	sys.exit(status)

if "-h" in sys.argv or "--help" in sys.argv:
	usage(0)

makelinks=1
if "--no-ldconfig" in sys.argv:
	makelinks=0
	sys.argv.pop(sys.argv.index("--no-ldconfig"))

if len(sys.argv) > 1:
	print("!!! Invalid command line options!\n")
	usage(1)

from os import path as osp
if osp.isfile(osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), ".portage_not_installed")):
	sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
import portage
portage._internal_caller = True

try:
	portage.env_update(makelinks)
except IOError as e:
	if e.errno == errno.EACCES:
		print("env-update: Need superuser access")
		sys.exit(1)
	else:
		raise
