Skip to content
Snippets Groups Projects
Commit 4c4a148e authored by Jean-Baptiste Keck's avatar Jean-Baptiste Keck
Browse files

build option fix for cpp and fortran

parent b4db021e
No related branches found
No related tags found
1 merge request!16MPI operators
Pipeline #29419 canceled
setup.py.in 100755 → 100644
...@@ -24,22 +24,18 @@ if enable_cpp: ...@@ -24,22 +24,18 @@ if enable_cpp:
swig_executable = find_executable("@SWIG_EXECUTABLE@") swig_executable = find_executable("@SWIG_EXECUTABLE@")
def parseCMakeVar(var): def parseCMakeVar(var, sep=';'):
""" """
Post-process cmake list-like variables. Post-process cmake list-like variables.
Example:: Example::
a = parseCMakeVar("var1;var2 ; var3;")
a = parseCMakeVar("var1;var2;var3;")
# --> a = ['var', 'var2', 'var3'] # --> a = ['var', 'var2', 'var3']
""" """
if var != "": if var != "":
res = list(set(var.split(';'))) # split and remove empty strings
# list/set stuff to avoid duplicates res = list(var.split(sep))
# remove empty strings to avoid '-I -I' things leading to bugs return list(filter(len, map(str.strip, res)))
if res.count(''):
res.remove('')
return res
else: else:
return [] return []
...@@ -57,7 +53,7 @@ def parseCMakeDefines(var): ...@@ -57,7 +53,7 @@ def parseCMakeDefines(var):
defines = parseCMakeVar(var) defines = parseCMakeVar(var)
if len(defines)==0: if len(defines)==0:
return None return None
# regex to match compiler defines like -DMACRO_NAME or # regex to match compiler defines like -DMACRO_NAME or
# -DMACRO_NAME = MACRO_VALUE # -DMACRO_NAME = MACRO_VALUE
p = re.compile('\s*(?:-D)?\s*(\w+)(?:\s*=\s*(\w+))?\s*') p = re.compile('\s*(?:-D)?\s*(\w+)(?:\s*=\s*(\w+))?\s*')
...@@ -126,7 +122,7 @@ def create_fortran_extension(name, pyf_file=None, src_dirs=None, sources=None, ...@@ -126,7 +122,7 @@ def create_fortran_extension(name, pyf_file=None, src_dirs=None, sources=None,
for sdir in src_dirs: for sdir in src_dirs:
sources += glob.glob(os.path.join(sdir, '*.f95')) sources += glob.glob(os.path.join(sdir, '*.f95'))
sources += glob.glob(os.path.join(sdir, '*.f90')) sources += glob.glob(os.path.join(sdir, '*.f90'))
# Reorder source list with fortran modules # Reorder source list with fortran modules
# dependencies. It seems that this is not taken into # dependencies. It seems that this is not taken into
# account in f2py or distutils. # account in f2py or distutils.
...@@ -136,9 +132,10 @@ def create_fortran_extension(name, pyf_file=None, src_dirs=None, sources=None, ...@@ -136,9 +132,10 @@ def create_fortran_extension(name, pyf_file=None, src_dirs=None, sources=None,
# --- set f2py options --- # --- set f2py options ---
f2py_options = ['--no-lower', '--no-wrap-functions'] f2py_options = ['--no-lower', '--no-wrap-functions']
options = [] options = []
options.append(('F2PY_REPORT_ON_ARRAY_COPY', '1')) if debug_mode == 1:
if debug_mode and (os.uname()[0] == 'Linux'): options.append(('F2PY_REPORT_ON_ARRAY_COPY', '1'))
options.append(('F2PY_REPORT_ATEXIT', '1')) if os.uname()[0] == 'Linux':
options.append(('F2PY_REPORT_ATEXIT', '1'))
# --- set include dir --- # --- set include dir ---
inc_dir = parseCMakeVar("@FORTRAN_INCLUDE_DIRS@") inc_dir = parseCMakeVar("@FORTRAN_INCLUDE_DIRS@")
...@@ -146,13 +143,12 @@ def create_fortran_extension(name, pyf_file=None, src_dirs=None, sources=None, ...@@ -146,13 +143,12 @@ def create_fortran_extension(name, pyf_file=None, src_dirs=None, sources=None,
inc_dir += parseCMakeVar('@CMAKE_Fortran_MODULE_DIRECTORY@') inc_dir += parseCMakeVar('@CMAKE_Fortran_MODULE_DIRECTORY@')
# --- set compilation flags --- # --- set compilation flags ---
fortran_flags = ['@Fortran_FLAGS@'] fortran_flags = parseCMakeVar('@Fortran_FLAGS@', sep=' ')
fortran_flags = list(set([_ for _ in fortran_flags[0].split(' ') if _ != '']))
# we trust cmake for external libraries and # we trust cmake for external libraries and
# add them to linker, without using libraries option # add them to linker, without using libraries option
extra_link_args = hysop_link_libraries extra_link_args = hysop_link_libraries
ext_fort = Extension(name=name, ext_fort = Extension(name=name,
sources=sources, sources=sources,
f2py_options=f2py_options, f2py_options=f2py_options,
...@@ -223,8 +219,8 @@ def create_swig_extension(name, inc_dirs, src_dirs=None, sources=None): ...@@ -223,8 +219,8 @@ def create_swig_extension(name, inc_dirs, src_dirs=None, sources=None):
libraries = parseCMakeVar("@CXX_EXT_LIBS@") libraries = parseCMakeVar("@CXX_EXT_LIBS@")
library_dirs = parseCMakeVar("@CXX_EXT_LIB_DIRS@") library_dirs = parseCMakeVar("@CXX_EXT_LIB_DIRS@")
extra_compile_args = parseCMakeVar("@CXX_FLAGS@") extra_compile_args = parseCMakeVar("@CXX_FLAGS@", sep=' ')
extra_link_args = parseCMakeVar("@CXX_LINKER_FLAGS@") extra_link_args = parseCMakeVar("@CXX_LINKER_FLAGS@", sep=' ')
define_macros = parseCMakeDefines("@CXX_EXTRA_DEFINES@") define_macros = parseCMakeDefines("@CXX_EXTRA_DEFINES@")
swig_ext = Extension(name, sources=sources, language='c++', swig_ext = Extension(name, sources=sources, language='c++',
swig_opts=swig_opts, swig_opts=swig_opts,
...@@ -309,7 +305,7 @@ if enable_fortran is "ON": ...@@ -309,7 +305,7 @@ if enable_fortran is "ON":
num_dirs = [] num_dirs = []
for sd in subdirs: for sd in subdirs:
num_dirs.append(os.path.join(fortran_root, sd)) num_dirs.append(os.path.join(fortran_root, sd))
hysop_libdir = [ld.strip() for ld in hysop_libdir] hysop_libdir = [ld.strip() for ld in hysop_libdir]
# hysop_libdir = ' '.join([ '-L{}'.format(ld) if ld[1]!='L' else hysop_libdir]) # hysop_libdir = ' '.join([ '-L{}'.format(ld) if ld[1]!='L' else hysop_libdir])
num_dirs.append('@GENERATED_FORTRAN_FILES_DIR@') num_dirs.append('@GENERATED_FORTRAN_FILES_DIR@')
...@@ -367,8 +363,8 @@ config = Configuration( ...@@ -367,8 +363,8 @@ config = Configuration(
description=descr, description=descr,
author=authors, author=authors,
author_email='hysop-members@lists.forge.imag.fr', author_email='hysop-members@lists.forge.imag.fr',
url='https://gricad-gitlab.univ-grenoble-alpes.fr/particle_methods/hysop', url='https://forge.imag.fr/projects/hysop/',
license='Apache Licence, Version 2.0 (APLv2)', license='GNU General Public License (GPLv3)',
package_dir={'': '@CMAKE_SOURCE_DIR@'}, package_dir={'': '@CMAKE_SOURCE_DIR@'},
ext_modules=ext_modules, ext_modules=ext_modules,
packages=packages, packages=packages,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment