|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# This file is under GNU Affero General Public License 3.0
|
|
|
|
# see LICENSE.txt
|
|
|
|
#
|
|
|
|
# For more debugging, export DISTUTILS_DEBUG=True
|
|
|
|
|
|
|
|
from __future__ import print_function
|
|
|
|
|
|
|
|
import sys
|
|
|
|
|
|
|
|
import os
|
|
|
|
from os import environ
|
|
|
|
from os.path import join
|
|
|
|
import platform
|
|
|
|
|
|
|
|
from setuptools import setup, Extension
|
|
|
|
from glob import glob
|
|
|
|
|
|
|
|
from setuptools.command.build_ext import build_ext
|
|
|
|
|
|
|
|
|
|
|
|
def pEpLog(*msg):
|
|
|
|
import inspect
|
|
|
|
msgstr = ''
|
|
|
|
separator = ' '
|
|
|
|
for m in msg:
|
|
|
|
msgstr += str(m)
|
|
|
|
msgstr += separator
|
|
|
|
func = inspect.currentframe().f_back.f_code
|
|
|
|
print(func.co_filename + " : " + func.co_name + " : " + msgstr)
|
|
|
|
|
|
|
|
|
|
|
|
class BuildExtCommand(build_ext):
|
|
|
|
user_options = build_ext.user_options + [
|
|
|
|
('prefix=', None, 'Use pEp-base installation in prefix (libs/includes)'),
|
|
|
|
]
|
|
|
|
|
|
|
|
def initialize_options(self):
|
|
|
|
build_ext.initialize_options(self)
|
|
|
|
self.prefix = getattr(self, "prefix=", None)
|
|
|
|
|
|
|
|
def windowsGetInstallLocation(self):
|
|
|
|
reg_path = "SOFTWARE\\Classes\\TypeLib\\{564A4350-419E-47F1-B0DF-6FCCF0CD0BBC}\\1.0\\0\\win32"
|
|
|
|
KeyName = None
|
|
|
|
regKey = None
|
|
|
|
pEpLog("Registry Lookup:", reg_path, KeyName)
|
|
|
|
try:
|
|
|
|
regKey = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, reg_path, 0, winreg.KEY_READ)
|
|
|
|
# Keys: Description, FileName, FriendlyName, LoadBehavior
|
|
|
|
com_server, _ = winreg.QueryValueEx(regKey, KeyName)
|
|
|
|
except WindowsError as error:
|
|
|
|
pEpLog("Error ocurred: " + error)
|
|
|
|
com_server = None
|
|
|
|
finally:
|
|
|
|
if winreg:
|
|
|
|
winreg.CloseKey(regKey)
|
|
|
|
dirname = os.path.dirname
|
|
|
|
ret = dirname(dirname(com_server))
|
|
|
|
pEpLog("Value:", ret)
|
|
|
|
return ret
|
|
|
|
|
|
|
|
def windowsGetBoostDirs(self):
|
|
|
|
for dir in [f.path for f in os.scandir(join(os.getcwd(), 'build-windows', 'packages')) if f.is_dir()]:
|
|
|
|
if 'boost.' in dir or 'boost_python' in dir or 'boost_locale' in dir:
|
|
|
|
yield join(dir, 'lib', 'native'), join(dir, 'lib', 'native', 'include')
|
|
|
|
|
|
|
|
def get_build_info_win32(self):
|
|
|
|
home = environ.get('PER_USER_DIRECTORY') or environ.get('USERPROFILE')
|
|
|
|
inst_prefix = self.windowsGetInstallLocation()
|
|
|
|
sys_includes = [
|
|
|
|
join(inst_prefix),
|
|
|
|
] + [d[1] for d in self.windowsGetBoostDirs()]
|
|
|
|
sys_libdirs = [ join(inst_prefix, 'Debug')] if self.debug else [ join(inst_prefix, 'Release')]
|
|
|
|
sys_libdirs += [d[0] for d in self.windowsGetBoostDirs()]
|
|
|
|
libs = [
|
|
|
|
'pEpEngine',
|
|
|
|
'libpEpAdapter',
|
|
|
|
'boost_python38-vc142-mt-x32-1_72',
|
|
|
|
'boost_locale-vc142-mt-x32-1_72'
|
|
|
|
]
|
|
|
|
compile_flags = ['/std:c++14', '/permissive']
|
|
|
|
if self.debug:
|
|
|
|
pEpLog("debug mode")
|
|
|
|
compile_flags += ['/Od', '/Zi', '/DEBUG']
|
|
|
|
|
|
|
|
return (home, sys_includes, sys_libdirs, libs, compile_flags)
|
|
|
|
|
|
|
|
|
|
|
|
def get_build_info_darwin(self):
|
|
|
|
home = environ.get('PER_USER_DIRECTORY') or environ.get('HOME')
|
|
|
|
sys_includes = [
|
|
|
|
'/opt/local/include',
|
|
|
|
]
|
|
|
|
sys_libdirs = [
|
|
|
|
'/opt/local/lib',
|
|
|
|
]
|
|
|
|
libs = [
|
|
|
|
'pEpEngine',
|
|
|
|
'pEpAdapter',
|
|
|
|
'boost_python38-mt',
|
|
|
|
'boost_locale-mt'
|
|
|
|
]
|
|
|
|
compile_flags = ['-std=c++14', '-fpermissive']
|
|
|
|
if self.debug:
|
|
|
|
pEpLog("debug mode")
|
|
|
|
compile_flags += ['-O0', '-g', '-UNDEBUG']
|
|
|
|
|
|
|
|
return (home, sys_includes, sys_libdirs, libs, compile_flags)
|
|
|
|
|
|
|
|
|
|
|
|
def get_build_info_linux(self):
|
|
|
|
home = environ.get('PER_USER_DIRECTORY') or environ.get('HOME')
|
|
|
|
sys_includes = [
|
|
|
|
'/usr/local/include',
|
|
|
|
'/usr/include',
|
|
|
|
]
|
|
|
|
sys_libdirs = [
|
|
|
|
'/usr/local/lib',
|
|
|
|
'/usr/lib',
|
|
|
|
'/usr/lib/{}-linux-gnu'.format(platform.machine())
|
|
|
|
]
|
|
|
|
libs = [
|
|
|
|
'pEpEngine',
|
|
|
|
'pEpAdapter',
|
|
|
|
'boost_python3',
|
|
|
|
'boost_locale'
|
|
|
|
]
|
|
|
|
compile_flags = ['-std=c++14', '-fpermissive']
|
|
|
|
if self.debug:
|
|
|
|
pEpLog("debug mode")
|
|
|
|
compile_flags += ['-O0', '-g', '-UNDEBUG']
|
|
|
|
|
|
|
|
return (home, sys_includes, sys_libdirs, libs, compile_flags)
|
|
|
|
|
|
|
|
|
|
|
|
def finalize_options(self):
|
|
|
|
build_ext.finalize_options(self)
|
|
|
|
|
|
|
|
pEpLog("prefix: ", self.prefix)
|
|
|
|
pEpLog("sys.platform: ", sys.platform)
|
|
|
|
|
|
|
|
|
|
|
|
# get build information for platform
|
|
|
|
if sys.platform == 'win32':
|
|
|
|
build_info = self.get_build_info_win32()
|
|
|
|
elif sys.platform == 'darwin':
|
|
|
|
build_info = self.get_build_info_darwin()
|
|
|
|
elif sys.platform == 'linux':
|
|
|
|
build_info = self.get_build_info_linux()
|
|
|
|
else:
|
|
|
|
pEpLog("Platform not supported:" + sys.platform)
|
|
|
|
exit()
|
|
|
|
|
|
|
|
(home, sys_includes, sys_libdirs, libs, compile_flags) = build_info
|
|
|
|
|
|
|
|
# Build the Includes -I and Library paths -L
|
|
|
|
# Start empty
|
|
|
|
includes = []
|
|
|
|
libdirs = []
|
|
|
|
|
|
|
|
|
|
|
|
# Append prefix-dir
|
|
|
|
if self.prefix:
|
|
|
|
prefix_include = [join(self.prefix, 'include')]
|
|
|
|
prefix_libdirs = [join(self.prefix, 'lib')]
|
|
|
|
includes += prefix_include
|
|
|
|
libdirs += prefix_libdirs
|
|
|
|
|
|
|
|
# Append default system dirs
|
|
|
|
includes += sys_includes
|
|
|
|
libdirs += sys_libdirs
|
|
|
|
|
|
|
|
# Apply the build information
|
|
|
|
global module_pEp
|
|
|
|
module_pEp.include_dirs = includes
|
|
|
|
module_pEp.library_dirs = libdirs
|
|
|
|
module_pEp.libraries = libs
|
|
|
|
module_pEp.extra_compile_args = compile_flags
|
|
|
|
|
|
|
|
pEpLog("Include Dirs:", module_pEp.include_dirs)
|
|
|
|
pEpLog("Libs Dirs:", module_pEp.library_dirs)
|
|
|
|
pEpLog("Libraries:", module_pEp.libraries)
|
|
|
|
pEpLog("Compile flags:", module_pEp.extra_compile_args)
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
build_ext.run(self)
|
|
|
|
|
|
|
|
|
|
|
|
if sys.platform == 'win32':
|
|
|
|
if sys.version_info[0] >= 3:
|
|
|
|
import winreg
|
|
|
|
else:
|
|
|
|
import _winreg as winreg
|
|
|
|
|
|
|
|
if sys.version_info[0] < 3:
|
|
|
|
FileNotFoundError = EnvironmentError
|
|
|
|
|
|
|
|
module_pEp = Extension(
|
|
|
|
'pEp._pEp',
|
|
|
|
sources=[
|
|
|
|
'src/pEp/_pEp/pEpmodule.cc',
|
|
|
|
'src/pEp/_pEp/basic_api.cc',
|
|
|
|
'src/pEp/_pEp/identity.cc',
|
|
|
|
'src/pEp/_pEp/message.cc',
|
|
|
|
'src/pEp/_pEp/message_api.cc',
|
|
|
|
'src/pEp/_pEp/str_attr.cc',
|
|
|
|
# 'src/pEp/_pEp/user_interface.cc',
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
# "MAIN" Function
|
|
|
|
setup(
|
|
|
|
package_dir={'': 'src'},
|
|
|
|
packages=['pEp'],
|
|
|
|
ext_modules=[module_pEp],
|
|
|
|
cmdclass={
|
|
|
|
'build_ext': BuildExtCommand,
|
|
|
|
},
|
|
|
|
# While not using a pyproject.toml, support setuptools_scm setup.cfg usage,
|
|
|
|
# see https://github.com/pypa/setuptools_scm/#setupcfg-usage
|
|
|
|
use_scm_version={
|
|
|
|
'write_to': 'src/pEp/__version__.py',
|
|
|
|
#TODO: fallback_version does not seem to work in case os missing tag
|
|
|
|
'fallback_version' : '0.0.0-RC0'
|
|
|
|
}
|
|
|
|
)
|