#!/usr/bin/env python

from __future__ import print_function

import re
import sys
import distutils
from distutils import core, log
from glob import glob

import os
import io

sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'pym'))

__version__ = os.getenv('VERSION', default='9999')

cwd = os.getcwd()

# Load EPREFIX from Portage, fall back to the empty string if it fails
try:
	from portage.const import EPREFIX
except ImportError:
	EPREFIX=''

# Python files that need `__version__ = ""` subbed, relative to this dir:
python_scripts = [os.path.join(cwd, path) for path in (
	'bin/euscan',
)]

class set_version(core.Command):
	"""Set python __version__ to our __version__."""
	description = "hardcode scripts' version using VERSION from environment"
	user_options = []  # [(long_name, short_name, desc),]

	def initialize_options (self):
		pass

	def finalize_options (self):
		pass

	def run(self):
		ver = 'git' if __version__ == '9999' else __version__
		print("Settings version to %s" % ver)
		def sub(files, pattern):
			for f in files:
				updated_file = []
				with io.open(f, 'r', 1, 'utf_8') as s:
					for line in s:
						newline = re.sub(pattern, '"%s"' % ver, line, 1)
						if newline != line:
							log.info("%s: %s" % (f, newline))
						updated_file.append(newline)
				with io.open(f, 'w', 1, 'utf_8') as s:
					s.writelines(updated_file)
		quote = r'[\'"]{1}'
		python_re = r'(?<=^__version__ = )' + quote + '[^\'"]*' + quote
		sub(python_scripts, python_re)

packages = [
	str('.'.join(root.split(os.sep)[1:]))
	for root, dirs, files in os.walk('pym/euscan')
	if '__init__.py' in files
]

core.setup(
	name='euscan',
	version=__version__,
	description='Ebuild upstream scan utility.',
	author='Corentin Chary',
	author_email='corentin.chary@gmail.com',
	maintainer='Corentin Chary',
	maintainer_email='corentin.chary@gmail.com',
	url='http://euscan.iksaif.net',
	download_url='https://github.com/iksaif/euscan/tarball/' + ('master' if __version__ == '9999' else ('euscan-%s' % __version__)),
	package_dir={'': 'pym'},
	packages=packages,
	package_data = {},
	scripts=python_scripts,
	data_files=(
		(os.path.join(os.sep, EPREFIX.lstrip(os.sep), 'usr/share/man/man1'), glob('man/*')),
	),
	cmdclass={
		'set_version': set_version,
	},
)

