mmgen-wallet/setup.py

66 lines
2.2 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
#
2024-10-18 10:32:06 +00:00
# MMGen Wallet, a terminal-based cryptocurrency wallet
2025-02-16 14:42:27 +00:00
# Copyright (C)2013-2025 The MMGen Project <mmgen@tuta.io>
# Licensed under the GNU General Public License, Version 3:
# https://www.gnu.org/licenses
# Public project repositories:
# https://github.com/mmgen/mmgen-wallet
# https://gitlab.com/mmgen/mmgen-wallet
import sys, os
2023-11-13 11:17:28 +00:00
from pathlib import Path
2025-01-27 16:01:48 +00:00
from subprocess import run
2024-10-18 10:32:11 +00:00
from setuptools import setup, Extension
from setuptools.command.build_ext import build_ext
def build_libsecp256k1():
2023-11-13 11:17:28 +00:00
2023-11-15 10:20:19 +00:00
home = Path(os.environ['HOME'])
2024-10-18 10:32:11 +00:00
cache_path = home.joinpath('.cache', 'mmgen')
src_path = home.joinpath('.cache', 'mmgen', 'secp256k1')
2023-11-15 10:20:19 +00:00
lib_file = src_path.joinpath('.libs', 'libsecp256k1.dll.a')
root = Path().resolve().anchor
installed_lib_file = Path(root, 'msys64', 'ucrt64', 'lib', 'libsecp256k1.dll.a')
2023-05-19 20:29:09 +00:00
if installed_lib_file.exists():
return
# fix broken aclocal path:
os.environ['ACLOCAL_PATH'] = '/C/msys64/ucrt64/share/aclocal:/C/msys64/usr/share/aclocal'
2023-05-19 20:29:09 +00:00
2023-11-13 11:17:28 +00:00
if not src_path.exists():
cache_path.mkdir(parents=True)
2022-05-06 12:52:41 +00:00
print('\nCloning libsecp256k1')
2024-10-18 10:32:11 +00:00
run(['git', 'clone', 'https://github.com/bitcoin-core/secp256k1.git'], check=True, cwd=cache_path)
2023-05-19 20:29:09 +00:00
2023-11-13 11:17:28 +00:00
if not lib_file.exists():
print(f'\nBuilding libsecp256k1 (cwd={str(src_path)})')
cmds = (
2024-10-18 10:32:11 +00:00
['sh', './autogen.sh'],
['sh', './configure', 'CFLAGS=-g -O2 -fPIC', '--disable-dependency-tracking'],
['mingw32-make', 'MAKE=mingw32-make'])
for cmd in cmds:
print('Executing {}'.format(' '.join(cmd)))
2024-10-18 10:32:11 +00:00
run(cmd, check=True, cwd=src_path)
if not installed_lib_file.exists():
2024-10-18 10:32:11 +00:00
run(['mingw32-make', 'install', 'MAKE=mingw32-make'], check=True, cwd=src_path)
class my_build_ext(build_ext):
2024-10-18 10:32:11 +00:00
def build_extension(self, ext):
if sys.platform == 'win32':
build_libsecp256k1()
2024-10-18 10:32:11 +00:00
build_ext.build_extension(self, ext)
setup(
2024-10-18 10:32:11 +00:00
cmdclass = {'build_ext': my_build_ext},
ext_modules = [Extension(
2023-11-15 10:20:19 +00:00
name = 'mmgen.proto.secp256k1.secp256k1',
sources = ['extmod/secp256k1mod.c'],
depends = ['extmod/random.h'],
libraries = ['gmp', 'secp256k1'] if sys.platform == 'win32' else ['secp256k1'],
include_dirs = ['/usr/local/include'] if sys.platform == 'darwin' else [],
library_dirs = ['/usr/local/lib'] if sys.platform == 'darwin' else [],
)]
)