#!/usr/bin/env python # -*- coding: utf-8 -*- from __future__ import print_function import sys try: from setuptools import setup, find_packages except ImportError: from pkg import distribute_setup distribute_setup.use_setuptools() from setuptools import setup, find_packages import os from pkg import utils from pkg import branding import versioneer versioneer.versionfile_source = 'src/leap/_version.py' versioneer.versionfile_build = 'leap/_version.py' versioneer.tag_prefix = '' # tags are like 1.2.0 #versioneer.parentdir_prefix = 'leap_client-' versioneer.parentdir_prefix = branding.APP_PREFIX branding.brandingfile = 'src/leap/_branding.py' branding.brandingfile_build = 'leap/_branding.py' branding.cert_path = 'src/leap/certs' setup_root = os.path.dirname(__file__) sys.path.insert(0, os.path.join(setup_root, "src")) trove_classifiers = [ "Development Status :: 3 - Alpha", "Environment :: X11 Applications :: Qt", "Intended Audience :: End Users/Desktop", ("License :: OSI Approved :: GNU General " "Public License v3 or later (GPLv3+)"), "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Communications", "Topic :: Security", "Topic :: System :: Networking", "Topic :: Utilities" ] BRANDING_OPTS = """ # Do NOT manually edit this file! # This file has been written from pkg/branding/config.py data by leap setup.py # script. BRANDING = { 'short_name': "%(short_name)s", 'provider_domain': "%(provider_domain)s", 'provider_ca_file': "%(provider_ca_file)s"} """ def write_to_branding_file(filename, branding_dict): f = open(filename, "w") f.write(BRANDING_OPTS % branding_dict) f.close() def copy_pemfile_to_certdir(frompath, topath): with open(frompath, "r") as cert_f: cert_s = cert_f.read() with open(topath, "w") as f: f.write(cert_s) def do_branding(targetfile=branding.brandingfile): if branding.BRANDED_BUILD: opts = branding.BRANDED_OPTS print("DOING BRANDING FOR LEAP") certpath = opts['provider_ca_path'] shortname = opts['short_name'] tocertfile = shortname + '-cacert.pem' topath = os.path.join( branding.cert_path, tocertfile) copy_pemfile_to_certdir( certpath, topath) opts['provider_ca_file'] = tocertfile write_to_branding_file( targetfile, opts) else: print('not running branding because BRANDED_BUILD set to False') from setuptools import Command class DoBranding(Command): description = "copy the branding info the the top level package" user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): do_branding() from distutils.command.build import build as _build from distutils.command.sdist import sdist as _sdist class cmd_build(_build): def run(self): #versioneer.cmd_build(self) _build.run(self) # versioneer versions = versioneer.get_versions(verbose=True) # now locate _version.py in the new build/ directory and replace it # with an updated value target_versionfile = os.path.join( self.build_lib, versioneer.versionfile_build) print("UPDATING %s" % target_versionfile) os.unlink(target_versionfile) f = open(target_versionfile, "w") f.write(versioneer.SHORT_VERSION_PY % versions) f.close() # branding target_brandingfile = os.path.join( self.build_lib, branding.brandingfile_build) do_branding(targetfile=target_brandingfile) class cmd_sdist(_sdist): def run(self): # versioneer: versions = versioneer.get_versions(verbose=True) self._versioneer_generated_versions = versions # unless we update this, the command will keep using the old version self.distribution.metadata.version = versions["version"] # branding: do_branding() return _sdist.run(self) def make_release_tree(self, base_dir, files): _sdist.make_release_tree(self, base_dir, files) # now locate _version.py in the new base_dir directory (remembering # that it may be a hardlink) and replace it with an updated value target_versionfile = os.path.join( base_dir, versioneer.versionfile_source) print("UPDATING %s" % target_versionfile) os.unlink(target_versionfile) f = open(target_versionfile, "w") f.write( versioneer.SHORT_VERSION_PY % self._versioneer_generated_versions) f.close() from distutils.command.install_data import install_data as _install_data class cmd_post_install(_install_data): """ workaround for installing non-package data outside of the bounds of our internal data Debian or other packaging should igore this. """ # We could use a environmental flag. def run(self): _install_data.run(self) # is this the real life? # is this just fantasy? if not hasattr(sys, 'real_prefix'): # looks like we are NOT # running inside a virtualenv... # let's install data. # XXX should add platform switch import shutil print("Now installing policykit file...") shutil.copyfile( "pkg/linux/polkit/net.openvpn.gui.leap.policy", "/usr/share/polkit-1/actions" "/net.openvpn.gui.leap.policy") cmdclass = versioneer.get_cmdclass() cmdclass["branding"] = DoBranding # Uncomment this to have the branding command run automatically # on the build and sdist commands. #cmdclass["build"] = cmd_build #cmdclass["sdist"] = cmd_sdist cmdclass["install_data"] = cmd_post_install launcher_name = branding.get_shortname() if launcher_name: leap_launcher = 'leap-%s-client=leap.app:main' % launcher_name else: leap_launcher = 'leap-client=leap.app:main' setup( name=branding.get_name(), package_dir={"": "src"}, version=versioneer.get_version(), cmdclass=cmdclass, description="the internet encryption toolkit", long_description=( "Desktop Client for the LEAP Platform." "\n" "LEAP (LEAP Encryption Access Project) develops " "a multi-year plan to secure everyday communication, breaking down" "into discrete services, to be rolled out one at a time.\n" "The client for the current phase gives support to the EIP Service." "EIP (the Encrypted Internet Proxy) provides circumvention, location " "anonymization, and traffic " "encryption in a hassle-free, automatically self-configuring fashion, " "and has an enhanced level of security." ), classifiers=trove_classifiers, install_requires=utils.parse_requirements(), test_suite='nose.collector', test_requires=utils.parse_requirements( reqfiles=['pkg/test-requirements.pip']), keywords='leap, client, qt, encryption, proxy', author='The LEAP project', author_email='info@leap.se', url='https://leap.se', license='GPL', packages=find_packages( 'src', exclude=['ez_setup', 'setup', 'examples', 'tests']), include_package_data=True, zip_safe=False, # not being used since setuptools does not like it. data_files=[ ("share/man/man1", ["docs/leap.1"]), ("share/polkit-1/actions", ["pkg/linux/polkit/net.openvpn.gui.leap.policy"]) ], platforms="all", entry_points = { 'console_scripts': [leap_launcher] }, )