aboutsummaryrefslogtreecommitdiffstats
path: root/lang/python/setup.py.in
diff options
context:
space:
mode:
Diffstat (limited to 'lang/python/setup.py.in')
-rwxr-xr-xlang/python/setup.py.in299
1 files changed, 0 insertions, 299 deletions
diff --git a/lang/python/setup.py.in b/lang/python/setup.py.in
deleted file mode 100755
index 1ddfbe7d..00000000
--- a/lang/python/setup.py.in
+++ /dev/null
@@ -1,299 +0,0 @@
-#!/usr/bin/env python
-
-# Copyright (C) 2016-2018 g10 Code GmbH
-# Copyright (C) 2004,2008 Igor Belyi <[email protected]>
-# Copyright (C) 2002 John Goerzen <[email protected]>
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-try:
- from setuptools import setup, Extension
- from setuptools.command.build import build
-except ImportError:
- from distutils.core import setup, Extension
- from distutils.command.build import build
-
-import glob
-import os
-import os.path
-import re
-import shutil
-import subprocess
-import sys
-
-# Out-of-tree build of the gpg bindings.
-gpgme_h = ''
-include_dirs = [os.getcwd()]
-library_dirs = []
-in_tree = False
-extra_swig_opts = []
-extra_macros = dict()
-
-top_builddir = os.environ.get('top_builddir')
-if top_builddir:
- # In-tree build.
- in_tree = True
- gpgme_h = os.path.join(top_builddir, 'src/gpgme.h')
- library_dirs = [os.path.join(top_builddir,
- 'src/.libs')] # XXX uses libtool internals
- extra_macros.update(
- HAVE_CONFIG_H=1,
- HAVE_DATA_H=1,
- IN_TREE_BUILD=1,
- )
-
-if hasattr(subprocess, 'DEVNULL'):
- devnull = subprocess.DEVNULL
-else:
- devnull = open(os.devnull, 'w')
-
-
-version = version_raw = "@VERSION@"
-if '-' in version:
- version = version.split('-')[0]
-major, minor, patch = map(int, version.split('.'))
-
-if not (major > 1 or (major == 1 and minor >= 7)):
- sys.exit('Need at least GPGME version 1.7, found {}.'.format(version_raw))
-
-if not gpgme_h:
- gpgme_h = os.path.join('@prefix@', 'include', 'gpgme.h')
-
-define_macros = []
-if '@GPGME_CONFIG_LIBS@':
- libs = '@GPGME_CONFIG_LIBS@'.split(' ')
-else:
- libs = []
-
-# Define extra_macros for both the SWIG and C code
-for k, v in extra_macros.items():
- extra_swig_opts.append('-D{0}={1}'.format(k, v))
- define_macros.append((k, str(v)))
-
-if '@GPGME_CONFIG_CFLAGS@':
- for item in '@GPGME_CONFIG_CFLAGS@'.split(' '):
- if item.startswith('-I'):
- include_dirs.append(item[2:])
- elif item.startswith('-D'):
- defitem = item[2:].split('=', 1)
- if len(defitem) == 2:
- define_macros.append((defitem[0], defitem[1]))
- else:
- define_macros.append((defitem[0], None))
-
-# Adjust include and library locations in case of win32
-uname_s = os.popen('uname -s').read()
-if uname_s.startswith('MINGW32'):
- mnts = [
- x.split()[0:3:2] for x in os.popen('mount').read().split('\n') if x
- ]
- tmplist = sorted([(len(x[1]), x[1], x[0]) for x in mnts])
- tmplist.reverse()
- extra_dirs = []
- for item in include_dirs:
- for ln, mnt, tgt in tmplist:
- if item.startswith(mnt):
- item = os.path.normpath(item[ln:])
- while item[0] == os.path.sep:
- item = item[1:]
- extra_dirs.append(os.path.join(tgt, item))
- break
- include_dirs += extra_dirs
- for item in [x[2:] for x in libs if x.startswith('-L')]:
- for ln, mnt, tgt in tmplist:
- if item.startswith(mnt):
- item = os.path.normpath(item[ln:])
- while item[0] == os.path.sep:
- item = item[1:]
- library_dirs.append(os.path.join(tgt, item))
- break
-
-
-def in_srcdir(name):
- return os.path.join(os.environ.get('srcdir', ''), name)
-
-
-def up_to_date(source, target):
- return (os.path.exists(target) and
- os.path.getmtime(source) <= os.path.getmtime(target))
-
-
-# We build an Extension using SWIG, which generates a Python module.
-# By default, the 'build_py' step is run before 'build_ext', and
-# therefore the generated Python module is not copied into the build
-# directory.
-# Bugs: https://bugs.python.org/issue1016626
-# https://bugs.python.org/issue2624
-# Workaround:
-# https://stackoverflow.com/questions/12491328/python-distutils-not-include-the-swig-generated-module
-#
-# To install to multiple Python installations or to alternate ones run the
-# following three commands (yes, run the build one twice):
-#
-# /path/to/pythonX.Y setup.py build
-# /path/to/pythonX.Y setup.py build
-# /path/to/pythonX.Y setup.py install
-#
-# It is highly likely that this will need to be run as root or with sudo (or
-# sudo -H). It may or may not work with venv. and outside a virtualenv
-
-class BuildExtFirstHack(build):
- def _read_header(self, header, cflags):
- tmp_include = self._in_build_base('include1.h')
- with open(tmp_include, 'w') as f:
- f.write('#include <%s>' % header)
- return subprocess.check_output(
- os.environ.get('CPP', 'cc -E').split() + cflags +
- [tmp_include]).decode('utf-8')
-
- def _write_if_unchanged(self, target, content):
- if os.path.exists(target):
- with open(target) as f:
- if f.read() == content:
- return
-
- with open(target, 'w') as sink:
- sink.write(content)
-
- def _generate_gpgme_h(self, source_name, sink_name):
- print('Using gpgme.h from {}'.format(source_name))
- shutil.copy2(source_name, sink_name)
-
- def _generate_errors_i(self):
-
- ge_cflags='@GPG_ERROR_CFLAGS@'
- gpg_error_content = self._read_header(
- 'gpg-error.h', ge_cflags.split(' ') if ge_cflags else [])
-
- filter_re = re.compile(r'GPG_ERR_[^ ]* =')
- rewrite_re = re.compile(r' *(.*) = .*')
-
- errors_i_content = ''
- for line in gpg_error_content.splitlines():
- if not filter_re.search(line):
- continue
- errors_i_content += rewrite_re.sub(
- r'%constant long \1 = \1;' + '\n', line.strip())
-
- self._write_if_unchanged(
- self._in_build_base('errors.i'), errors_i_content)
-
- def _in_build_base(self, name):
- return os.path.join(self.build_base, name)
-
- def _generate(self):
- # Cleanup gpgme.h from deprecated functions and typedefs.
- if not os.path.exists(self.build_base):
- os.makedirs(self.build_base)
-
- self._generate_gpgme_h(gpgme_h, self._in_build_base('gpgme.h'))
- self._generate_errors_i()
-
- # Copy due to https://bugs.python.org/issue2624
- # Avoid creating in srcdir
- for source, target in ((in_srcdir(n), self._in_build_base(n))
- for n in ('gpgme.i', 'helpers.c', 'private.h',
- 'helpers.h')):
- if not up_to_date(source, target):
- shutil.copy2(source, target)
-
- # Append generated files via build_base
- if not os.path.exists(os.path.join(self.build_lib, 'gpg')):
- os.makedirs(os.path.join(self.build_lib, 'gpg'))
- shutil.copy2('version.py', os.path.join(self.build_lib, 'gpg'))
-
- def run(self):
- self._generate()
-
- swige.sources.extend((self._in_build_base('gpgme.i'),
- self._in_build_base('helpers.c')))
- swige.swig_opts.extend([
- '-I' + self.build_base, '-outdir',
- os.path.join(self.build_lib, 'gpg')
- ])
- include_dirs.insert(0, self.build_base)
-
- self.run_command('build_ext')
- build.run(self)
-
-
-swig_sources = []
-swig_opts = ['-threads'] + extra_swig_opts
-swige = Extension(
- 'gpg._gpgme',
- sources=swig_sources,
- swig_opts=swig_opts,
- include_dirs=include_dirs,
- define_macros=define_macros,
- library_dirs=library_dirs,
- extra_link_args=libs)
-
-setup(
- name='gpg',
- cmdclass={'build': BuildExtFirstHack},
- version='@VERSION@',
- # Note: description appears as Summary in egg-info file.
- description='Python bindings to the GPGME API of the GnuPG cryptography library.',
- # Note: long-description appears as Description in egg-info file.
- long_description='''Dynamically generated bindings to the C API of the GNU Privacy Guard.
-
-The GPG Made Easy (GPGME) library provides a high-level API in C to all the
-component software and libraries in the GnuPG Project, including GPG itself
-(the GnuPG OpenPGP implementation), libgcrypt, libgpg-error, libassuan and
-more.
-
-The official CPython bindings to GPGME are generated during the compiling
-process of GPGME itself and built for the specific C header and include files
-produced when GPGME is compiled using SWIG. This provides access to over two
-thousand functions, methods and values via both the lower level dynamically
-generated bindings and a more intuitively pythonic higher level layer.
-
-While the lower level, dynamically generated bindings provide access to
-everything which GPGME itself provides; the higher level layer is easier to use
-by Python developers, provides access to the vast majority of functionality
-developers would want from GnuPG and is extensively documented.
-
-GPGME and these bindings is available here:
-
- https://gnupg.org/software/gpgme/index.html
-''',
- author='The GnuPG hackers',
- author_email='[email protected]',
- url='https://www.gnupg.org',
- ext_modules=[swige],
- packages=[
- 'gpg', 'gpg.constants', 'gpg.constants.data', 'gpg.constants.keylist',
- 'gpg.constants.sig', 'gpg.constants.tofu'
- ],
- license='LGPL2.1+ (the library), GPL2+ (tests and examples)',
- classifiers=[
- 'Development Status :: 4 - Beta',
- 'Intended Audience :: Developers',
- 'License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)',
- 'Programming Language :: Python :: 2',
- 'Programming Language :: Python :: 2.7',
- 'Programming Language :: Python :: 3',
- 'Programming Language :: Python :: 3.6',
- 'Programming Language :: Python :: 3.9',
- 'Programming Language :: Python :: 3.10',
- 'Programming Language :: Python :: 3.11',
- 'Programming Language :: Python :: 3.12',
- 'Programming Language :: Python :: 3.13',
- 'Operating System :: POSIX',
- 'Operating System :: Microsoft :: Windows',
- 'Topic :: Communications :: Email',
- 'Topic :: Security :: Cryptography',
- ],
-)