2023-02-21 19:31:14 +01:00
#!/usr/bin/env python
import Cython . Build
import setuptools
import sysconfig
2023-02-22 01:04:45 +01:00
import subprocess
2023-02-21 19:31:14 +01:00
libname = " cnorxz "
author = " Christian Zimmermann "
author_email = " chizeta@f3l.de "
2023-02-22 02:37:51 +01:00
path_to_cnorxz = " /home/chizeta/repos/cnorxz/install "
2023-02-22 01:04:45 +01:00
expected_cnorxz_version = " 1.0.0 " # dummy for now; in the future this is supposed to be the c++ version which is guaranteed to be compatible with py cnorxz
git_hash = subprocess . run ( [ ' git ' , ' rev-parse ' , ' HEAD ' ] , stdout = subprocess . PIPE ) . stdout . decode ( ' ascii ' ) [ : - 1 ]
git_tags = subprocess . run ( [ ' git ' , ' tag ' , ' -l ' , ' --sort=refname ' , ' v* ' ] , stdout = subprocess . PIPE ) . stdout . decode ( ' ascii ' ) . split ( )
2023-02-22 02:37:51 +01:00
cnorxz_version = subprocess . run ( [ path_to_cnorxz + " /bin/cnorxz-config " , ' --version ' ] , stdout = subprocess . PIPE ) . stdout . decode ( ' ascii ' ) [ : - 1 ]
2023-02-22 01:04:45 +01:00
2023-02-22 02:37:51 +01:00
assert len ( git_tags ) != 0 , " no version tags found "
git_tag = git_tags [ - 1 ]
version = git_tag [ 1 : ] + ' dev '
2023-02-22 13:21:47 +01:00
git_hash_tag = subprocess . run ( [ ' git ' , ' rev-list ' , ' -n ' , ' 1 ' , git_tag ] , stdout = subprocess . PIPE ) . stdout . decode ( ' ascii ' ) [ : - 1 ]
2023-02-22 02:37:51 +01:00
if git_hash_tag == git_hash and expected_cnorxz_version != cnorxz_version :
version = git_tag [ 1 : ]
2023-02-22 01:04:45 +01:00
2023-02-21 19:31:14 +01:00
inc_dirs = list ( )
2023-02-22 01:04:45 +01:00
if path_to_cnorxz != " " :
inc_dirs . append ( path_to_cnorxz + " /include/cnorxz " )
2023-02-21 19:31:14 +01:00
lib_dirs = list ( )
lib_dirs . append ( " /usr/lib " )
lib_dirs . append ( " /usr/local/lib " )
2023-02-22 01:04:45 +01:00
if path_to_cnorxz != " " :
inc_dirs . append ( path_to_cnorxz + " /lib " )
lib_dirs . append ( " /home/chizeta/repos/cnorxz/install/lib " )
2023-02-21 19:31:14 +01:00
extra_compile_args = sysconfig . get_config_var ( ' CFLAGS ' ) . split ( )
2023-02-22 02:37:51 +01:00
cnorxz_flags = subprocess . run ( [ path_to_cnorxz + " /bin/cnorxz-config " , ' --flags ' ] , stdout = subprocess . PIPE ) . stdout . decode ( ' ascii ' ) . split ( )
extra_compile_args + = cnorxz_flags
2023-02-21 19:31:14 +01:00
default_extension_args = dict (
language = " c++ " ,
include_dirs = inc_dirs ,
libraries = [ libname ] ,
library_dirs = lib_dirs ,
extra_compile_args = extra_compile_args ,
)
if __name__ == " __main__ " :
print ( " Include directories: " )
for d in inc_dirs :
print ( " \t " , d )
print ( " Library directories: " )
for d in lib_dirs :
print ( " \t " , d )
extensions = list ( )
extensions . append (
setuptools . Extension (
name = libname + " .base " ,
sources = [
2023-05-07 21:45:41 +02:00
" cnorxz/base/base.pyx " ,
2023-02-21 19:31:14 +01:00
] ,
2023-05-10 01:21:30 +02:00
define_macros = [ ( ' HAVE_CEREAL ' , None ) ] ,
2023-02-21 19:31:14 +01:00
* * default_extension_args
)
)
# append further extensions (cereal, hdf5, mpi ...) here
setuptools . setup (
name = libname ,
packages = setuptools . find_packages ( ) ,
2023-02-22 01:04:45 +01:00
version = version ,
2023-02-21 19:31:14 +01:00
include_dirs = inc_dirs ,
ext_modules = Cython . Build . cythonize ( extensions ) ,
author = author ,
author_email = author_email ,
)