Python 3 port of PyME
[gpgme.git] / lang / py3-pyme / setup.py
1 #!/usr/bin/env python3
2
3 # $Id$
4
5 # Module: installer
6 # COPYRIGHT #
7 # Copyright (C) 2004 Igor Belyi <belyi@users.sourceforge.net>
8 # Copyright (C) 2002 John Goerzen <jgoerzen@complete.org>
9 #
10 #    This library is free software; you can redistribute it and/or
11 #    modify it under the terms of the GNU Lesser General Public
12 #    License as published by the Free Software Foundation; either
13 #    version 2.1 of the License, or (at your option) any later version.
14 #
15 #    This library is distributed in the hope that it will be useful,
16 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
17 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18 #    Lesser General Public License for more details.
19 #
20 #    You should have received a copy of the GNU Lesser General Public
21 #    License along with this library; if not, write to the Free Software
22 #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
23 # END OF COPYRIGHT #
24
25
26 from distutils.core import setup, Extension
27 from distutils.command.build_ext import build_ext
28 import os, os.path, sys
29 import subprocess
30
31 sys.path.append("pyme")
32 import version
33
34 def getconfig(what):
35     try:
36         process = subprocess.Popen(["gpgme-config", "--%s" % what],
37                                    stdout=subprocess.PIPE)
38         confdata = process.communicate()[0]
39     except OSError as e:
40          if e.errno == os.errno.ENOENT:
41              raise RuntimeError("Could not call gpgme-config, perhaps install libgpgme-dev")
42          else:
43              raise
44     return [x for x in confdata.decode('utf-8').split() if x != '']
45
46 include_dirs = [os.getcwd()]
47 define_macros = []
48 library_dirs = []
49 libs = getconfig('libs')
50 for item in getconfig('cflags'):
51     if item.startswith("-I"):
52         include_dirs.append(item[2:])
53     elif item.startswith("-D"):
54         defitem = item[2:].split("=", 1)
55         if len(defitem)==2:
56             define_macros.append((defitem[0], defitem[1]))
57         else:
58             define_macros.append((defitem[0], None))
59
60 # Adjust include and library locations in case of win32
61 uname_s = os.popen("uname -s").read()
62 if uname_s.startswith("MINGW32"):
63    mnts = [x.split()[0:3:2] for x in os.popen("mount").read().split("\n") if x] 
64    tmplist = sorted([(len(x[1]), x[1], x[0]) for x in mnts])
65    tmplist.reverse()
66    extra_dirs = []
67    for item in include_dirs:
68        for ln, mnt, tgt in tmplist:
69            if item.startswith(mnt):
70                item = os.path.normpath(item[ln:])
71                while item[0] == os.path.sep:
72                    item = item[1:]
73                extra_dirs.append(os.path.join(tgt, item))
74                break
75    include_dirs += extra_dirs
76    for item in [x[2:] for x in libs if x.startswith("-L")]:
77        for ln, mnt, tgt in tmplist:
78            if item.startswith(mnt):
79                item = os.path.normpath(item[ln:])
80                while item[0] == os.path.sep:
81                    item = item[1:]
82                library_dirs.append(os.path.join(tgt, item))
83                break
84
85 try:
86     subprocess.call("swig")
87 except OSError as e:
88     if e.errno == os.errno.ENOENT:
89         raise RuntimeError("Could not call swig, perhaps install swig.")
90     else:
91         raise
92     
93 subprocess.call(["make swig"], shell=True)
94                
95 swige = Extension("pyme._pygpgme", ["gpgme_wrap.c", "helpers.c"],
96                   include_dirs = include_dirs,
97                   define_macros = define_macros,
98                   library_dirs = library_dirs,
99                   extra_link_args = libs)
100
101 setup(name = "pyme",
102       version = version.versionstr,
103       description = version.description,
104       author = version.author,
105       author_email = version.author_email,
106       url = version.homepage,
107       ext_modules=[swige],
108       packages = ['pyme', 'pyme.constants', 'pyme.constants.data',
109                   'pyme.constants.keylist', 'pyme.constants.sig'], 
110       license = version.copyright + \
111                 ", Licensed under the GPL version 2 and the LGPL version 2.1"
112 )
113