From 4c4a148edc7e790d3d6ababccd1cdc49b14cb19f Mon Sep 17 00:00:00 2001
From: Jean-Baptiste Keck <jean-baptiste.keck@imag.fr>
Date: Wed, 18 Sep 2019 11:22:41 +0200
Subject: [PATCH] build option fix for cpp and fortran

---
 setup.py.in | 40 ++++++++++++++++++----------------------
 1 file changed, 18 insertions(+), 22 deletions(-)
 mode change 100755 => 100644 setup.py.in

diff --git a/setup.py.in b/setup.py.in
old mode 100755
new mode 100644
index 370ff9bda..0af718ed2
--- a/setup.py.in
+++ b/setup.py.in
@@ -24,22 +24,18 @@ if enable_cpp:
     swig_executable = find_executable("@SWIG_EXECUTABLE@")
 
 
-def parseCMakeVar(var):
+def parseCMakeVar(var, sep=';'):
     """
     Post-process cmake list-like variables.
 
     Example::
-
-        a = parseCMakeVar("var1;var2;var3;")
+        a = parseCMakeVar("var1;var2  ; var3;")
         # --> a = ['var', 'var2', 'var3']
     """
     if var != "":
-        res = list(set(var.split(';')))
-        # list/set stuff to avoid duplicates
-        # remove empty strings to avoid '-I -I' things leading to bugs
-        if res.count(''):
-            res.remove('')
-        return res
+        # split and remove empty strings
+        res = list(var.split(sep))
+        return list(filter(len, map(str.strip, res)))
     else:
         return []
 
@@ -57,7 +53,7 @@ def parseCMakeDefines(var):
     defines = parseCMakeVar(var)
     if len(defines)==0:
         return None
-
+    
     # regex to match compiler defines like -DMACRO_NAME or
     # -DMACRO_NAME = MACRO_VALUE
     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,
     for sdir in src_dirs:
         sources += glob.glob(os.path.join(sdir, '*.f95'))
         sources += glob.glob(os.path.join(sdir, '*.f90'))
-
+    
     # Reorder source list with fortran modules
     # dependencies. It seems that this is not taken into
     # account in f2py or distutils.
@@ -136,9 +132,10 @@ def create_fortran_extension(name, pyf_file=None, src_dirs=None, sources=None,
     # --- set f2py options ---
     f2py_options = ['--no-lower', '--no-wrap-functions']
     options = []
-    options.append(('F2PY_REPORT_ON_ARRAY_COPY', '1'))
-    if debug_mode and (os.uname()[0] == 'Linux'):
-        options.append(('F2PY_REPORT_ATEXIT', '1'))
+    if debug_mode == 1:
+        options.append(('F2PY_REPORT_ON_ARRAY_COPY', '1'))
+        if os.uname()[0] == 'Linux':
+            options.append(('F2PY_REPORT_ATEXIT', '1'))
 
     # --- set include dir ---
     inc_dir =  parseCMakeVar("@FORTRAN_INCLUDE_DIRS@")
@@ -146,13 +143,12 @@ def create_fortran_extension(name, pyf_file=None, src_dirs=None, sources=None,
     inc_dir += parseCMakeVar('@CMAKE_Fortran_MODULE_DIRECTORY@')
 
     # --- set compilation flags ---
-    fortran_flags = ['@Fortran_FLAGS@']
-    fortran_flags = list(set([_ for _ in fortran_flags[0].split(' ') if _ != '']))
+    fortran_flags = parseCMakeVar('@Fortran_FLAGS@', sep=' ')
 
     # we trust cmake for external libraries and
     # add them to linker, without using libraries option
     extra_link_args = hysop_link_libraries
-
+    
     ext_fort = Extension(name=name,
                          sources=sources,
                          f2py_options=f2py_options,
@@ -223,8 +219,8 @@ def create_swig_extension(name, inc_dirs, src_dirs=None, sources=None):
 
     libraries = parseCMakeVar("@CXX_EXT_LIBS@")
     library_dirs = parseCMakeVar("@CXX_EXT_LIB_DIRS@")
-    extra_compile_args = parseCMakeVar("@CXX_FLAGS@")
-    extra_link_args = parseCMakeVar("@CXX_LINKER_FLAGS@")
+    extra_compile_args = parseCMakeVar("@CXX_FLAGS@", sep=' ')
+    extra_link_args = parseCMakeVar("@CXX_LINKER_FLAGS@", sep=' ')
     define_macros = parseCMakeDefines("@CXX_EXTRA_DEFINES@")
     swig_ext = Extension(name, sources=sources, language='c++',
                          swig_opts=swig_opts,
@@ -309,7 +305,7 @@ if enable_fortran is "ON":
     num_dirs = []
     for sd in subdirs:
         num_dirs.append(os.path.join(fortran_root, sd))
-
+   
     hysop_libdir = [ld.strip() for ld in hysop_libdir]
     # hysop_libdir = ' '.join([ '-L{}'.format(ld) if ld[1]!='L' else hysop_libdir])
     num_dirs.append('@GENERATED_FORTRAN_FILES_DIR@')
@@ -367,8 +363,8 @@ config = Configuration(
     description=descr,
     author=authors,
     author_email='hysop-members@lists.forge.imag.fr',
-    url='https://gricad-gitlab.univ-grenoble-alpes.fr/particle_methods/hysop',
-    license='Apache Licence, Version 2.0 (APLv2)',
+    url='https://forge.imag.fr/projects/hysop/',
+    license='GNU General Public License (GPLv3)',
     package_dir={'': '@CMAKE_SOURCE_DIR@'},
     ext_modules=ext_modules,
     packages=packages,
-- 
GitLab