Browse Source

setup.py: build libsecp256k1 only on MSYS2 platform

For Linux, just use the version provided by the distro:

    # Debian/Ubuntu
    $ sudo apt-get install libsecp256k1-dev

    # ArchLinux:
    $ sudo pacman -S libsecp256k1
The MMGen Project 1 year ago
parent
commit
159e1c8a
2 changed files with 31 additions and 49 deletions
  1. 1 1
      mmgen/data/version
  2. 30 48
      setup.py

+ 1 - 1
mmgen/data/version

@@ -1 +1 @@
-14.0.dev16
+14.0.dev17

+ 30 - 48
setup.py

@@ -8,85 +8,67 @@
 #   https://github.com/mmgen/mmgen
 #   https://gitlab.com/mmgen/mmgen
 
-# MSYS2 Note (2023-10-26):
-#   mingw-w64-ucrt-x86_64-python package is missing static lib, so we must build dynamic extmod
-#   linked to installed libsecp256k1
-
 import os,platform
 from pathlib import Path
 from subprocess import run,PIPE
 from setuptools import setup,Extension
 from setuptools.command.build_ext import build_ext
 
-have_arm   = platform.uname().machine in ('aarch64','armv7l') # x86_64 (linux), AMD64 (win), aarch64, armv7l
-have_msys2 = platform.system() == 'Windows'
-
-home = Path(os.environ['HOME'])
-
-cache_path = home.joinpath('.cache','mmgen')
-src_path   = home.joinpath('.cache','mmgen','secp256k1')
+def build_libsecp256k1():
 
-if have_msys2:
 	root = Path().resolve().anchor
 	installed_lib_file = Path(root, 'msys64', 'ucrt64', 'lib', 'libsecp256k1.dll.a')
-	lib_file = src_path.joinpath('.libs', 'libsecp256k1.dll.a')
-else:
-	installed_lib_file = None
-	lib_file = src_path.joinpath('.libs', 'libsecp256k1.a')
-
-def build_libsecp256k1():
 
-	if installed_lib_file and installed_lib_file.exists(): # see ‘MSYS2 Note’ above
+	if installed_lib_file.exists():
 		return
 
-	def fix_broken_aclocal_path():
-		os.environ['ACLOCAL_PATH'] = '/C/msys64/ucrt64/share/aclocal:/C/msys64/usr/share/aclocal'
-
-	if have_msys2:
-		fix_broken_aclocal_path()
-
-	if not cache_path.exists():
-		cache_path.mkdir(parents=True)
+	# fix broken aclocal path:
+	os.environ['ACLOCAL_PATH'] = '/C/msys64/ucrt64/share/aclocal:/C/msys64/usr/share/aclocal'
 
 	if not src_path.exists():
+		cache_path.mkdir(parents=True)
 		print('\nCloning libsecp256k1')
 		run(['git','clone','https://github.com/bitcoin-core/secp256k1.git'],check=True,cwd=cache_path)
 
 	if not lib_file.exists():
 		print(f'\nBuilding libsecp256k1 (cwd={str(src_path)})')
-		cmds = {
-			'Windows': (
-				['sh','./autogen.sh'],
-				['sh','./configure','CFLAGS=-g -O2 -fPIC','--disable-dependency-tracking'],
-				['mingw32-make','MAKE=mingw32-make']
-			),
-			'Linux': (
-				['./autogen.sh'],
-				['./configure','CFLAGS=-g -O2 -fPIC'],
-				['make'] + ([] if have_arm else ['-j4']),
-			),
-		}[platform.system()]
+		cmds = (
+			['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)))
 			run(cmd,check=True,cwd=src_path)
 
-	if installed_lib_file and not installed_lib_file.exists(): # see ‘MSYS2 Note’ above
+	if not installed_lib_file.exists():
 		run(['mingw32-make','install','MAKE=mingw32-make'],check=True,cwd=src_path)
 
 class my_build_ext(build_ext):
 	def build_extension(self,ext):
-		build_libsecp256k1()
+		if platform.system() == 'Windows':
+			build_libsecp256k1()
 		build_ext.build_extension(self,ext)
 
+if platform.system() == 'Windows':
+	home          = Path(os.environ['HOME'])
+	cache_path    = home.joinpath('.cache','mmgen')
+	src_path      = home.joinpath('.cache','mmgen','secp256k1')
+	lib_file      = src_path.joinpath('.libs', 'libsecp256k1.dll.a')
+	libraries     = ['gmp']
+	include_dirs  = [str(src_path.joinpath('include'))]
+	extra_objects = [str(lib_file)]
+else:
+	libraries     = []
+	include_dirs  = []
+	extra_objects = []
+
 setup(
 	cmdclass = { 'build_ext': my_build_ext },
 	ext_modules = [Extension(
-		name               = 'mmgen.proto.secp256k1.secp256k1',
-		sources            = ['extmod/secp256k1mod.c'],
-		libraries          = ['gmp'] if have_msys2 else [],
-		include_dirs       = [str(src_path.joinpath('include'))],
-		extra_objects      = [str(lib_file)],
-		extra_compile_args = ['-shared'] if have_msys2 else [],
-		extra_link_args    = ['-shared'] if have_msys2 else [],
+		name           = 'mmgen.proto.secp256k1.secp256k1',
+		sources        = ['extmod/secp256k1mod.c'],
+		libraries      = libraries,
+		include_dirs   = include_dirs,
+		extra_objects  = extra_objects,
 	)]
 )