#!/usr/bin/python -O
# Copyright 2005-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

"""'The emaint program provides an interface to system health
	checks and maintenance.
"""

from __future__ import print_function

import sys
import errno
# This block ensures that ^C interrupts are handled quietly.
try:
	import signal

	def exithandler(signum,frame):
		signal.signal(signal.SIGINT, signal.SIG_IGN)
		signal.signal(signal.SIGTERM, signal.SIG_IGN)
		sys.exit(1)

	signal.signal(signal.SIGINT, exithandler)
	signal.signal(signal.SIGTERM, exithandler)
	signal.signal(signal.SIGPIPE, signal.SIG_DFL)

except KeyboardInterrupt:
	sys.exit(1)

from os import path as osp
pym_path = osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym")
sys.path.insert(0, pym_path)
import portage
from portage.emaint.main import emaint_main

try:
	emaint_main(sys.argv[1:])
except IOError as e:
	if e.errno == errno.EACCES:
		print("\nemaint: Need superuser access")
		sys.exit(1)
	else:
		raise
