]> SALOME platform Git repositories - tools/sat_salome.git/commitdiff
Salome HOME
spns #41954: support Ubuntu 24.04
authorGuytri Kastane <Guytri.Kastane@cea.fr>
Fri, 30 Aug 2024 14:55:59 +0000 (16:55 +0200)
committerNabil Ghodbane <nabil.ghodbane@cea.fr>
Fri, 30 Aug 2024 14:56:26 +0000 (16:56 +0200)
34 files changed:
applications/SALOME-9.13.0-native.pyconf
products/FIELDS.pyconf
products/FMILibrary.pyconf
products/KERNEL.pyconf
products/PARAVIS.pyconf
products/ParaView.pyconf
products/PyFMI.pyconf
products/assimulo.pyconf [new file with mode: 0644]
products/compil_scripts/C3PO-v2.3.sh
products/compil_scripts/FMILibrary-2.4.1.sh [new file with mode: 0755]
products/compil_scripts/PyFMI-2.13.1.sh [new file with mode: 0755]
products/compil_scripts/YACSGEN.sh
products/compil_scripts/assimulo.sh [new file with mode: 0755]
products/compil_scripts/nose-py3-1.6.9.sh [new file with mode: 0755]
products/compil_scripts/omniORBpy.sh
products/compil_scripts/opencv.sh
products/compil_scripts/openturns-1.22.sh
products/compil_scripts/petsc-3.20.5.sh [new file with mode: 0755]
products/env_scripts/assimulo.py [new file with mode: 0644]
products/env_scripts/nose_py3.py [new file with mode: 0644]
products/freetype.pyconf
products/gmsh.pyconf
products/nose_py3.pyconf [new file with mode: 0644]
products/omniORBpy.pyconf
products/patches/FIELDS-UB24.04-V9_13_0-PyUnicode_AsWideCharString.patch [new file with mode: 0644]
products/patches/KERNEL-UB24.04-V9_13_0_configparser.patch [new file with mode: 0644]
products/patches/PARAVIS-UB24.04-V9_13_0-PyUnicode_AsWideCharString.patch [new file with mode: 0644]
products/patches/omniORBpy-4.2.5.p2.patch [new file with mode: 0644]
products/patches/paraview-5.11.0.p007-mpi4py-UB24.patch [new file with mode: 0644]
products/patches/paraview-5.11.0.p012-skip-FindTBB.patch [new file with mode: 0644]
products/patches/rkCommon-1.5.1-skip-FindTBB.patch [new file with mode: 0644]
products/petsc.pyconf
products/rkCommon.pyconf
products/salome_system.pyconf

index eb57ef86750b3155545ac753d889d8fe47d66a95..4374f0efc026347711fcb0ba4f69e44959600261 100644 (file)
@@ -11,7 +11,7 @@ APPLICATION :
     debug : 'no'
     base : 'no'
     python3 : 'yes'
-    platform : ["FD32", "FD34", "FD36", "FD37", "FD38", "CO8", "CO9", "DB10", "DB11", "DB12", "UB20.04", "UB22.04"]
+    platform : ["FD32", "FD34", "FD36", "FD37", "FD38", "CO8", "CO9", "DB10", "DB11", "DB12", "UB20.04", "UB22.04", "UB24.04"]
     environ :
     {
         build :
@@ -36,6 +36,7 @@ APPLICATION :
     {
         # PREREQUISITES :
         alabaster : 'native'
+        assimulo  : '3.5.2'
         Babel : 'native'
         boost : 'native'
         CAS : {tag : 'SALOME_9_13_V7_8_0', section: 'version_CR780_SALOME_PATCH', base:  'no'}
@@ -91,6 +92,7 @@ APPLICATION :
         netCDF4: 'native'
         nlopt : 'native'
         nose: 'native'
+        nose_py3: '1.6.9'
         numpy : 'native'
         numpydoc : 'native'
         omniORB : '4.2.5'
@@ -215,6 +217,7 @@ __overwrite__ :
     {
         #
         __condition__ : "VARS.dist in ['UB20.04']"
+        'APPLICATION.rm_products'               : ['nose_py3','assimulo'] #
         'APPLICATION.products.opencv'           : '3.2.0'
         'APPLICATION.products.cminpack'         : 'native'
         'APPLICATION.products.netcdf'           : '4.6.2'
@@ -233,7 +236,7 @@ __overwrite__ :
     {
         #
         __condition__ : "VARS.dist in ['UB22.04']"
-        'APPLICATION.rm_products'               : ['TTK', 'markdown_it_py', 'mdurl'] # causes crashes
+        'APPLICATION.rm_products'               : ['TTK', 'markdown_it_py', 'mdurl','nose_py3','assimulo'] # TTK causes crashes
         'APPLICATION.products.cmake'            : 'native' # TTK requires cmake > 3.21
         'APPLICATION.products.cftime'           : 'native'
         'APPLICATION.products.h5py'             : 'native'
@@ -249,11 +252,41 @@ __overwrite__ :
         'APPLICATION.products.root'             : {tag: '6.22.02',   base: 'no', section: 'version_6_22_02_UB22_04'                }
         'APPLICATION.products.medfile'          : {tag: '4.1.1',     base: 'no', section: 'version_4_1_1_UB22_04'                  }
     }
+    {
+        #
+        __condition__ : "VARS.dist in ['UB24.04']"
+        'APPLICATION.rm_products'               : ['root','URANIE'] #
+        'APPLICATION.products.assimulo'         : '3.5.2'
+        'APPLICATION.products.netcdf'           : '4.6.2'
+        'APPLICATION.products.opencv'           : '3.2.0'
+        'APPLICATION.products.PyFMI'            : '2.13.1'
+        'APPLICATION.products.petsc'            : '3.20.5'
+        'APPLICATION.products.swig'             : '4.0.2'
+        'APPLICATION.products.cmake'            : 'native'
+        'APPLICATION.products.cftime'           : 'native'
+        'APPLICATION.products.h5py'             : 'native'
+        'APPLICATION.products.markdown_it_py'   : 'native'
+        'APPLICATION.products.meshio'           : {tag: '5.3.5' , base: 'no', section: 'version_5_3_5_no_pip'    }
+        'APPLICATION.products.netCDF4'          : 'native'
+        'APPLICATION.products.rich'             : 'native'
+        'APPLICATION.products.cminpack'         : 'native'
+        'APPLICATION.products.omniORBpy'        : {tag: '4.2.5',     base: 'no', section: 'version_4_2_5_UB24_04'                  }
+        'APPLICATION.products.nose_py3'         : {tag: '1.6.9',     base: 'no', section: 'version_1_6_9_no_pip'                   }
+        'APPLICATION.products.rkCommon'         : {tag: '1.5.1',     base: 'no', section: 'version_1_5_1_UB24_04'                  }
+        'APPLICATION.products.catalyst'         : {tag: '2.0',       base: 'no', section: 'version_2_0_FD38'                       }
+        'APPLICATION.products.medfile'          : {tag: '4.1.1',     base: 'no', section: 'version_4_1_1_UB22_04'                  }
+        'APPLICATION.products.gmsh'             : {tag: '4.10.3',    base: 'no', section: 'version_4_10_3_with_CAS_7_8_UB24_04'    }
+        'APPLICATION.products.ParaView'         : {tag: '5.11.0',    base: 'no', section: 'version_5_11_0_MPI_UB24_04', hpc: 'yes' }
+        'APPLICATION.products.KERNEL'           : {tag: 'V9_13_0',   base: 'no', section: 'version_V9_13_0_UB24_04'                }
+        'APPLICATION.products.FIELDS'           : {tag: 'V9_13_0',   base: 'no', section: 'version_V9_13_0_UB24_04'                }
+        'APPLICATION.products.PARAVIS'          : {tag: 'V9_13_0',   base: 'no', section: 'version_V9_13_0_UB24_04'                }
+    }
     {
         # DB10:
         #   - Qt minimal version 5.12
         #   - xmlpatterns executable
         __condition__ : "VARS.dist in ['DB10']"
+        'APPLICATION.rm_products'       : ['nose_py3','assimulo'] #
         'APPLICATION.products.nlopt'    : '2.4.2'
         'APPLICATION.products.opencv'   : '3.2.0'
         'APPLICATION.products.cminpack' : 'native'
@@ -275,6 +308,7 @@ __overwrite__ :
     }
     {
         __condition__ : "VARS.dist in ['DB11']"
+        'APPLICATION.rm_products'               : ['nose_py3','assimulo'] #
         'APPLICATION.products.opencv'           : '3.2.0'
         'APPLICATION.products.hdf5'             : 'native'
         'APPLICATION.products.cminpack'         : 'native'
@@ -287,6 +321,7 @@ __overwrite__ :
     }
     {
         __condition__ : "VARS.dist in ['DB12']"
+        'APPLICATION.rm_products'               : ['nose_py3','assimulo'] #
         'APPLICATION.products.cmake'            : 'native' # TTK requires cmake > 3.21
         'APPLICATION.products.cftime'           : 'native'
         'APPLICATION.products.h5py'             : 'native'
@@ -307,6 +342,7 @@ __overwrite__ :
         # CentOS 8 repositories don't include sphinxintl package which must be installed through pip.
         # To avoid its missing (system_info pyconf key doesn't handle this use case), we embed it.
         __condition__ : "VARS.dist in ['CO8']"
+        'APPLICATION.rm_products'               : ['nose_py3','assimulo'] #
         'APPLICATION.products.sphinxintl'       : {tag: '0.9.10', base: 'no', section: 'version_0_9_10_no_pip'  }
         'APPLICATION.products.cminpack'         : '1.3.6'
         'APPLICATION.products.nlopt'            : '2.4.2'
@@ -323,6 +359,7 @@ __overwrite__ :
     }
     {
          __condition__ : "VARS.dist in ['CO9']"
+         'APPLICATION.rm_products'               : ['nose_py3','assimulo'] #
          'APPLICATION.products.nlopt'            : '2.4.2'
          'APPLICATION.products.cminpack'         : '1.3.6'
          'APPLICATION.products.qwt'              : '6.1.6'
@@ -349,6 +386,7 @@ __overwrite__ :
     }
     {
         __condition__ : "VARS.dist in ['FD32']"
+        'APPLICATION.rm_products'               : ['nose_py3','assimulo'] #
         'APPLICATION.products.opencv'           : '3.2.0'
         'APPLICATION.products.qt'               : '5.15.2'
         'APPLICATION.products.qwt'              : '6.1.6'
@@ -367,6 +405,7 @@ __overwrite__ :
     }
     {
         __condition__ : "VARS.dist in ['FD34']"
+        'APPLICATION.rm_products'               : ['nose_py3','assimulo'] #
         'APPLICATION.products.opencv'           : '3.2.0'
         'APPLICATION.products.qwt'              : '6.1.6'
         'APPLICATION.products.omniORB'          : '4.2.5'
@@ -382,6 +421,7 @@ __overwrite__ :
     }
     {
         __condition__ : "VARS.dist in ['FD36']"
+        'APPLICATION.rm_products'               : ['nose_py3','assimulo'] #
         'APPLICATION.products.opencv'           : {tag: '3.2.0',     base: 'no', section: 'version_3_2_0_FD36'                  }
         'APPLICATION.products.omniORB'          : '4.2.5'
         'APPLICATION.products.omniORBpy'        : '4.2.5'
@@ -400,7 +440,7 @@ __overwrite__ :
 
     {
         __condition__ : "VARS.dist in ['FD37']"
-        'APPLICATION.rm_products' : ['root', 'URANIE']
+        'APPLICATION.rm_products' : ['root', 'URANIE','nose_py3','assimulo']
         'APPLICATION.products.cmake'            : 'native'
         'APPLICATION.products.opencv'           : {tag: '3.2.0',     base: 'no', section: 'version_3_2_0_FD37'                  }
         'APPLICATION.products.omniORB'          : '4.2.5'
@@ -414,7 +454,7 @@ __overwrite__ :
     }
     {
         __condition__ : "VARS.dist in ['FD38']"
-        'APPLICATION.rm_products' : ['root', 'URANIE', 'mesa']
+        'APPLICATION.rm_products' : ['root', 'URANIE', 'mesa','nose_py3','assimulo']
         'APPLICATION.products.markdown_it_py'   : 'native'
         'APPLICATION.products.rich'             : 'native'
         'APPLICATION.products.cmake'            : 'native'
index ba697a2ddd29e5a4362862de051cfc2104232540..f6cd020f60881951a9a3da1bceeb362ebc2fdd73 100755 (executable)
@@ -44,6 +44,11 @@ default_MPI :
     ]
 }
 
+version_V9_13_0_UB24_04 :
+{
+  patches: ['FIELDS-UB24.04-V9_13_0-PyUnicode_AsWideCharString.patch']
+}
+
 version_V9_10_0:
 {
   patches: []
index 6c357822c0df38c715c626302f4607c3a0f0de91..e0a3c64eb72c851b4e447dc32584718b77e36647 100644 (file)
@@ -33,6 +33,12 @@ default_win :
     opt_depend : []
 }
 
+version_2_4_1 :
+{
+    build_source : "script"
+    compil_script :  'FMILibrary-2.4.1.sh'
+}
+
 version_2_0_3 :
 {
    patches : ['FMILibrary-2.0.3-installdir.patch']
index 1ccfaabce3edf34e1a87ca12f0cd8b462700243e..ddd299e8ae99914d4a24a2e8bc99595b72dffc6d 100644 (file)
@@ -108,6 +108,11 @@ default_32BIT_IDS :
     cmake_options : "-DSALOME_USE_LIBBATCH=ON -DSWIG_EXECUTABLE=${SWIG_ROOT_DIR}/bin/swig -DSALOME_CMAKE_DEBUG=ON -DSALOME_USE_64BIT_IDS=OFF"
 }
 
+version_V9_13_0_UB24_04 :
+{
+    patches: ['KERNEL-UB24.04-V9_13_0_configparser.patch']
+}
+
 version_V9_10_0_MPI :
 {
     cmake_options : "-DSALOME_USE_MPI=ON -DSALOME_USE_LIBBATCH=ON -DSWIG_EXECUTABLE=${SWIG_ROOT_DIR}/bin/swig -DSALOME_USE_64BIT_IDS=ON "
index f4f9711e780cf2516ddce11d9fe91b57f6c79878..6f24a315d4830729d66ff0729d4978d95ce7de83 100644 (file)
@@ -105,6 +105,33 @@ default_MPI :
     patches : []
 }
 
+version_V9_13_0_UB24_04 :
+{
+   cmake_options : "-DSALOME_PARAVIS_USE_GEOM_SOURCE=ON -DSALOME_PARAVIS_USE_SMESH_SOURCE=ON  -DSALOME_USE_MPI=ON -DCMAKE_CXX_COMPILER:STRING=${MPI_CXX_COMPILER} -DCMAKE_C_COMPILER:STRING=${MPI_C_COMPILER} "
+   depend : [
+      "KERNEL",
+      "GUI",
+      "MEDCOUPLING",
+      "FIELDS",
+      "GEOM",
+      "SMESH",
+      "Python",
+      "qt",
+      "boost",
+      "hdf5",
+      "medfile",
+      "ParaView",
+      "CAS",
+      "omniORB",
+      "docutils",
+      "libxml2",
+      "six",
+      "pytz",
+      "openmpi"
+   ]
+   patches: ['PARAVIS-UB24.04-V9_13_0-PyUnicode_AsWideCharString.patch']
+}
+
 version_V9_11_0_MPI :
 {
     cmake_options : "-DSALOME_PARAVIS_USE_GEOM_SOURCE=ON -DSALOME_PARAVIS_USE_SMESH_SOURCE=ON  -DSALOME_USE_MPI=ON -DCMAKE_CXX_COMPILER:STRING=${MPI_CXX_COMPILER} -DCMAKE_C_COMPILER:STRING=${MPI_C_COMPILER} "
index 3ac69abb9ea5682b19685cd951fa390f0970973c..45616e849facbb27719119e30b83a36425937830 100755 (executable)
@@ -417,6 +417,35 @@ version_5_11_0_MPI_LATA_64BITS_IDS :
     opt_depend : ['openmpi', 'ospray','tbb', 'openturns', 'gdal', 'netcdf', 'catalyst']
 }
 
+version_5_11_0_MPI_UB24_04 :
+{
+    compil_script :  'ParaView-5.11.0.sh'
+    archive_info : {archive_name : "ParaView-5.11.0.tar.gz"}
+    patches : ['paraview-5.11.0.p001-FindCGNS.patch',
+               'paraview-5.11.0.p002-FindMPI.patch',
+               'paraview-5.11.0.p006-GIL.patch',
+               'paraview-5.11.0.p007-mpi4py-UB24.patch',
+               'paraview-5.11.0.p008-cstdint-FD38.patch',
+               'paraview-5.11.0.p009-openturns-1.21.patch',
+               'paraview-5.11.0.p010-python-3.11.patch',
+               'paraview-5.11.0.p012-skip-FindTBB.patch'
+              ]
+    depend : [
+              'Python',
+              'hdf5',
+              'qt',
+              'PyQt',
+              'sip',
+              'boost',
+              'libxml2',
+              'freetype',
+              'matplotlib',
+              'cgns',
+              'Pygments'
+              ]
+    opt_depend : ['openmpi', 'ospray','tbb', 'openturns', 'gdal', 'netcdf', 'catalyst']
+}
+
 version_5_11_0_MPI_DB12 :
 {
     compil_script :  'ParaView-5.11.0.sh'
index e32fa4e822a8f19c9b39168a4c9ae012b7dec0ec..321e58dc73c2c1125d7318182b4b70e653f428bb 100644 (file)
@@ -27,6 +27,17 @@ default :
     patches: []
 }
 
+version_2_13_1 :                                                                                   
+{                                                                                                  
+  compil_script : "PyFMI-2.13.1.sh"                                                              
+  depend : ["Python", "setuptools", "Cython", "FMILibrary", "matplotlib", "nose_py3", "assimulo"]                           
+  properties:                                                                                    
+  {                                                                          
+    incremental : "yes"
+    pip : "no"
+  }
+}
+
 version_2_6_no_pip :
 {
     compil_script : "PyFMI-2.6.sh"
diff --git a/products/assimulo.pyconf b/products/assimulo.pyconf
new file mode 100644 (file)
index 0000000..40379cf
--- /dev/null
@@ -0,0 +1,21 @@
+default :
+{
+    name : "assimulo"
+    build_source : "script"
+    compil_script :  'assimulo' + $VARS.scriptExtension
+    get_source : "archive"
+    environ :
+    {
+       env_script : "assimulo.py"
+    }
+    depend : ['Python','lapack']
+    opt_dep: ['sundials']
+    source_dir : $APPLICATION.workdir + $VARS.sep + 'SOURCES' + $VARS.sep + "assimulo"
+    build_dir : $APPLICATION.workdir + $VARS.sep + 'BUILD' + $VARS.sep + "assimulo"
+    install_dir : 'base'
+    properties:
+    {
+      incremental : "yes"
+      pip : "no"
+    }
+}
index 32f6a27f7a21a777797d512de829d2a21b987fa0..6a244e9abe505477378402542b82a9096e0281c1 100755 (executable)
@@ -30,6 +30,15 @@ if [ "${SAT_Python_IS_NATIVE}" != "1" ] || [ -z "${PYTEST}" ]; then
     export PATH="${PRODUCT_INSTALL}/bin":$PATH
 fi
 
+if [ -d ${PRODUCT_INSTALL}/local ];then
+    mv ${PRODUCT_INSTALL}/local/* ${PRODUCT_INSTALL}
+    rm -rf ${PRODUCT_INSTALL}/local
+fi
+
+if [ -d ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/dist-packages ]; then
+    mv ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/dist-packages ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages
+fi
+
 echo
 echo "*** running C3PO non-regression tests"
 export LD_LIBRARY_PATH="${MEDCOUPLING_ROOT_DIR}/lib:${LD_LIBRARY_PATH}"
diff --git a/products/compil_scripts/FMILibrary-2.4.1.sh b/products/compil_scripts/FMILibrary-2.4.1.sh
new file mode 100755 (executable)
index 0000000..3dabac7
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+
+echo "##########################################################################"
+echo FMILibrary $VERSION
+echo "##########################################################################"
+
+CMAKE_OPTIONS=
+CMAKE_OPTIONS+=" -DCMAKE_BUILD_TYPE=Release"
+CMAKE_OPTIONS+=" -DFMILIB_GENERATE_DOXYGEN_DOC=OFF"
+CMAKE_OPTIONS+=" -DFMILIB_INSTALL_PREFIX=${PRODUCT_INSTALL}"
+
+cd $BUILD_DIR
+
+echo
+echo "*** cmake ${CMAKE_OPTIONS} ${SOURCE_DIR}"
+if ! cmake ${CMAKE_OPTIONS} ${SOURCE_DIR}; then
+    echo "error on cmake"
+fi
+
+echo
+echo "*** make ${MAKE_OPTIONS}"
+if ! make ${MAKE_OPTIONS}; then
+    echo "Error on make ${MAKE_OPTIONS}"
+fi
+
+echo
+echo "*** make install"
+if ! make install; then
+    echo "error on make install"
+fi
+
+echo
+echo "############## END"
diff --git a/products/compil_scripts/PyFMI-2.13.1.sh b/products/compil_scripts/PyFMI-2.13.1.sh
new file mode 100755 (executable)
index 0000000..289a6b8
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/bash                                                                                                                                                                              
+
+echo "##########################################################################"
+echo "PyFMI " $VERSION
+echo "##########################################################################"
+
+rm -rf $BUILD_DIR
+mkdir -p $BUILD_DIR
+cd $BUILD_DIR
+cp -R $SOURCE_DIR/* .
+
+rm -f $BUILD_DIR/src/pyfmi/*.c
+export PATH=$(pwd)/bin:$PATH
+export PYTHONPATH=$(pwd):$PYTHONPATH
+
+echo 
+echo "*** ${PYTHONBIN} -m pip install . --prefix=${PRODUCT_INSTALL}"
+if ! ${PYTHONBIN} -m pip install . --prefix=${PRODUCT_INSTALL} -vvv; then
+    echo "Error on pip install"
+fi
+
+if [ -d ${PRODUCT_INSTALL}/local ];then
+    mv ${PRODUCT_INSTALL}/local/* ${PRODUCT_INSTALL}
+    rm -rf ${PRODUCT_INSTALL}/local
+fi
+
+if [ -d ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/dist-packages ]; then
+    mv ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/dist-packages ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages
+fi
+
+echo
+echo "########## END"
index 9f15eb73a9230f93e1b90dcafddc99a0b0851dc4..fc077a375db6ee243fb005fa382fe58cc20437b8 100755 (executable)
@@ -4,23 +4,25 @@ echo "##########################################################################
 echo "YACSGEN" $VERSION
 echo "##########################################################################"
 
-
+LINUX_DISTRIBUTION="$DIST_NAME$DIST_VERSION"
 
 echo  "*** build in SOURCE directory"
 cd $SOURCE_DIR
 
-# we don't install in python directory -> modify environment as described in INSTALL file
-mkdir -p $PRODUCT_INSTALL/lib/python${PYTHON_VERSION}/site-packages
 export PATH=$(pwd)/bin:$PATH
 export PYTHONPATH=$(pwd):$PYTHONPATH
 export PYTHONPATH=${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages:$PYTHONPATH
 
 echo
 echo "*** build and install with $PYTHONBIN"
+echo "*** $LINUX_DISTRIBUTION *"
 case $LINUX_DISTRIBUTION in
     DB12)
         $PYTHONBIN setup.py install --install-lib=${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages --install-scripts=${PRODUCT_INSTALL}/bin
         ;;
+    UB24*)
+        $PYTHONBIN -m pip install . --prefix=$PRODUCT_INSTALL
+        ;;
     *)
         $PYTHONBIN setup.py install --prefix=$PRODUCT_INSTALL
         ;;
@@ -31,5 +33,14 @@ if [ $? -ne 0 ]; then
     exit 3
 fi
 
+if [ -d ${PRODUCT_INSTALL}/local ];then
+    mv ${PRODUCT_INSTALL}/local/* ${PRODUCT_INSTALL}
+    rm -rf ${PRODUCT_INSTALL}/local
+fi
+
+if [ -d ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/dist-packages ]; then
+    mv ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/dist-packages ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages
+fi
+
 echo
 echo "########## END"
diff --git a/products/compil_scripts/assimulo.sh b/products/compil_scripts/assimulo.sh
new file mode 100755 (executable)
index 0000000..86a3de1
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+echo "##########################################################################"
+echo Assimulo $VERSION
+echo "##########################################################################"
+
+cd $BUILD_DIR
+cp -R $SOURCE_DIR/* .
+
+echo 
+echo "*** ${PYTHONBIN} -m pip install . --prefix=${PRODUCT_INSTALL}"
+if ! ${PYTHONBIN} -m pip install . --prefix=${PRODUCT_INSTALL} -vvv; then
+    echo "Error on pip install"
+    exit 1
+fi
+
+if [ -d ${PRODUCT_INSTALL}/local ];then
+    mv ${PRODUCT_INSTALL}/local/* ${PRODUCT_INSTALL}
+    rm -rf ${PRODUCT_INSTALL}/local
+fi
+
+if [ -d ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/dist-packages ]; then
+    mv ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/dist-packages ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages
+fi
+
+echo
+echo "########## END"
diff --git a/products/compil_scripts/nose-py3-1.6.9.sh b/products/compil_scripts/nose-py3-1.6.9.sh
new file mode 100755 (executable)
index 0000000..c1dcd39
--- /dev/null
@@ -0,0 +1,34 @@
+#!/bin/bash                                                                                                                                                                              
+
+echo "##########################################################################"
+echo "nose-py3" $VERSION
+echo "##########################################################################"
+
+LINUX_DISTRIBUTION="$DIST_NAME$DIST_VERSION"
+
+echo "*** check installation"
+mkdir -p ${PRODUCT_INSTALL}
+rm -rf $BUILD_DIR
+mkdir -p $BUILD_DIR/cache/pip
+cd $BUILD_DIR
+cp -r $SOURCE_DIR/* .
+
+INSTALL_CMD="${PYTHONBIN} -m pip install --cache-dir=$BUILD_DIR/cache/pip . --prefix=$PRODUCT_INSTALL"
+
+echo "*** ${INSTALL_CMD}"
+if ! ${INSTALL_CMD}; then
+    echo "ERROR: ${INSTALL_CMD} failed"
+    exit 1
+fi
+
+if [ -d ${PRODUCT_INSTALL}/local ];then
+    mv ${PRODUCT_INSTALL}/local/* ${PRODUCT_INSTALL}
+    rm -rf ${PRODUCT_INSTALL}/local
+fi
+
+if [ -d ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/dist-packages ]; then
+    mv ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/dist-packages ${PRODUCT_INSTALL}/lib/python${PYTHON_VERSION}/site-packages
+fi
+
+echo
+echo "########## END"
index 2b3c4c6f453f4a961f2c39b21c55a27295414e5a..b8128f3208235f8035f95f350a117e394a175ee8 100755 (executable)
@@ -34,7 +34,16 @@ fi
 mkdir -p $PRODUCT_INSTALL
 echo "omniORBpy is installed into omni dir ${OMNIORB_ROOT_DIR}" > $PRODUCT_INSTALL/README
 
-# fix 
+# fix
+if [ -d $OMNIORB_ROOT_DIR/local ]; then
+    mv $OMNIORB_ROOT_DIR/local/lib/* $OMNIORB_ROOT_DIR/lib
+    rm -rf $OMNIORB_ROOT_DIR/local
+fi
+
+if [ -d $OMNIORB_ROOT_DIR/lib/python${PYTHON_VERSION}/dist-packages ]; then
+   mv $OMNIORB_ROOT_DIR/lib/python${PYTHON_VERSION}/dist-packages $OMNIORB_ROOT_DIR/lib/python${PYTHON_VERSION}/site-packages
+fi
+
 cd $OMNIORB_ROOT_DIR/lib
 find . -name "*.so*" |xargs chmod u+rwx 
 
index 467f559d0925043882065ac220a7aaa5341641b5..9ad8c673b5b63939958a5178ba4c03dd8b3cf2c6 100755 (executable)
@@ -35,7 +35,7 @@ if version_ge $VERSION "3."; then
     CMAKE_OPTIONS+=" -DCMAKE_C_FLAGS=-fPIC"
     LINUX_DISTRIBUTION="$DIST_NAME$DIST_VERSION"
     case $LINUX_DISTRIBUTION in
-      FD34|FD35|FD36|FD37|FD38|UB22*|CO9|DB12)
+      FD34|FD35|FD36|FD37|FD38|UB22*|UB24*|CO9|DB12)
           CMAKE_OPTIONS+=" -DCMAKE_CXX_FLAGS=\"-std=c++14\""
           CMAKE_OPTIONS+=" -DCMAKE_CXX_STANDARD=14"
           ;;
index e21d367b7f5bd42eb8f1581d80fba580db01786e..db040c41d5d340d79686ef2b2e3ede44e5a5cacf 100755 (executable)
@@ -373,13 +373,23 @@ if [[ -d "$SOURCE_DIR/otfftw-0.14" ]]; then
                     echo "*** skipping: since system Cython too old"
                     continue
                 fi
-                echo "INFO: install scikit-learn-0.24.2"
-                # use --no-build-isolation and --no-use-pep517 flags
-                ${PYTHONBIN} -m pip install  --cache-dir=$BUILD_DIR/cache/pip $SOURCE_DIR/scikit-learn-0.24.2/scikit-learn-0.24.2.tar.gz --no-deps  --prefix=$PRODUCT_INSTALL --no-build-isolation --no-use-pep517
-                if [ $? -ne 0 ]
-                then
-                    echo "FATAL: could not install scikit-0.24.2"
-                    exit 6
+                if [ "${PYTHON_VERSION}" == "3.12" ]; then
+                    echo "INFO: install scikit-learn-1.2.2"
+                    ${PYTHONBIN} -m pip install --cache-dir=$BUILD_DIR/cache/pip $SOURCE_DIR/scikit-learn-1.2.2/scikit-learn-1.2.2.tar.gz --no-deps --prefix=$PRODUCT_INSTALL --no-build-isolation --no-use-pep517
+                    if [ $? -ne 0 ]
+                    then
+                        echo "FATAL: could not install scikit-1.2.2"
+                        exit 6
+                    fi
+                else
+                    echo "INFO: install scikit-learn-0.24.2"
+                    # use --no-build-isolation and --no-use-pep517 flags
+                    ${PYTHONBIN} -m pip install  --cache-dir=$BUILD_DIR/cache/pip $SOURCE_DIR/scikit-learn-0.24.2/scikit-learn-0.24.2.tar.gz --no-deps  --prefix=$PRODUCT_INSTALL --no-build-isolation --no-use-pep517
+                    if [ $? -ne 0 ]
+                    then
+                        echo "FATAL: could not install scikit-0.24.2"
+                        exit 6
+                    fi
                 fi
                 echo "INFO: install threadpoolctl-3.0.0"
                 ${PYTHONBIN} -m pip install --cache-dir=$BUILD_DIR/cache/pip  $SOURCE_DIR/threadpoolctl-3.0.0/threadpoolctl-3.0.0-py3-none-any.whl --no-deps --prefix=$PRODUCT_INSTALL
diff --git a/products/compil_scripts/petsc-3.20.5.sh b/products/compil_scripts/petsc-3.20.5.sh
new file mode 100755 (executable)
index 0000000..106bbab
--- /dev/null
@@ -0,0 +1,125 @@
+#!/bin/bash
+
+echo "##########################################################################"
+echo "Petsc" $VERSION
+echo "##########################################################################"
+
+NATIVE_PATH="/usr"
+LINUX_DISTRIBUTION="$DIST_NAME$DIST_VERSION"
+echo "WARNING: "
+case $LINUX_DISTRIBUTION in
+    UB*|DB*)
+        NATIVE_PATH="/usr/lib/x86_64-linux-gnu"
+        ;;
+    *)
+        ;;
+esac
+
+cp -r $SOURCE_DIR/* .
+
+CONFIGURE_FLAGS=
+
+CONFIGURE_FLAGS+="--download-slepc=ext/slepc-3.20.1.tar.gz"
+
+if [ -f "${NATIVE_PATH}/liblapack.a" ] && [ "${SAT_lapack_IS_NATIVE}" == "1" ]; then
+   CONFIGURE_FLAGS+=" --with-blaslapack=1"
+elif [ -n "${LAPACK_ROOT_DIR}" ] && [ "${SAT_lapack_IS_NATIVE}" != "1" ]; then
+   CONFIGURE_FLAGS+=" --with-blaslapack-dir=${LAPACK_ROOT_DIR}"
+else
+   CONFIGURE_FLAGS+=" --download-f2cblaslapack=ext/f2cblaslapack-3.8.0.q2.tar.gz"
+fi
+
+CONFIGURE_FLAGS+=" --with-python-dir=${PYTHON_ROOT_DIR}"
+CONFIGURE_FLAGS+=" --with-hdf5-dir=${HDF5_ROOT_DIR}"
+
+if [ -f "${NATIVE_PATH}/libfftw3.a" ] && [ "${SAT_fftw_IS_NATIVE}" == "1" ]; then
+   CONFIGURE_FLAGS+=" --with-fftw=1"
+elif [ -n "${FFTW_ROOT_DIR}" ] && [ "${SAT_fftw_IS_NATIVE}" != "1" ]; then
+   CONFIGURE_FLAGS+=" --with-fftw-dir=${FFTW_ROOT_DIR}"
+else
+   CONFIGURE_FLAGS+=" --download-fftw=ext/fftw-3.3.10.tar.gz"
+fi
+
+CONFIGURE_FLAGS+=" --with-cuda=0" # 
+CONFIGURE_FLAGS+=" --with-debugging=0" # by default Petsc is build in debug mode
+CONFIGURE_FLAGS+=" --with-petsc4py=yes"
+CONFIGURE_FLAGS+=" --download-slepc-configure-arguments=--with-slepc4py=yes"
+
+if [ -f "${NATIVE_PATH}/libmetis.so" ] && [ "${SAT_metis_IS_NATIVE}" == "1" ]; then
+    CONFIGURE_FLAGS+=" --with-metis=1"
+elif [ -n "${METIS_ROOT_DIR}" ] && [ "${SAT_metis_IS_NATIVE}" != "1" ]; then
+    CONFIGURE_FLAGS+=" --with-metis-dir=${METIS_ROOT_DIR}"
+else
+    CONFIGURE_FLAGS+=" --download-metis=ext/metis-5.1.0-p11.tar.gz"
+fi
+
+echo
+if [ -n "${SAT_HPC}" ]; then
+  CONFIUGRE_FLAGS+=" --with-med-dir=${MEDFILE_ROOT_DIR}"
+  
+  if [ -f "${NATIVE_PATH}/libHYPRE_core.so" ]; then
+      CONFIGURE_FLAGS+=" --with-hypre=1"
+  else
+      CONFIGURE_FLAGS+=" --download-hypre=ext/hypre-2.29.0.tar.gz"
+  fi
+  
+  if [ -f "${NATIVE_PATH}/libptscotch.so" ] && [ "${SAT_ptscotch_IS_NATIVE}" == "1" ]; then
+      CONFIGURE_FLAGS+=" --with-ptscotch=1"
+  elif [ -n "${PTSCOTCH_ROOT_DIR}" ] && [ "${SAT_ptscotch_IS_NATIVE}" != "1" ]; then 
+      CONFIGURE_FLAGS+=" --with-ptscoth=${PTSCOTCH_ROOT_DIR}"
+  else
+      CONFIGURE_FLAGS+=" --download-ptscotch=ext/scotch_7.0.3.tar.gz"
+  fi
+
+  if [ -n "${MPI4PY_ROOT_DIR}" ]; then
+      CONFIGURE_FLAGS+=" --with-mpi4py-dir=${MPI4PY_ROOT_DIR}"
+  else
+      CONFIGURE_FLAGS+=" --download-mpi4py=ext/mpi4py-3.1.5.tar.gz"
+  fi
+
+  CONFIGURE_FLAGS+=" --with-mpi-dir=${MPI_ROOT_DIR}"
+
+else
+   CONFIGURE_FLAGS+=" --with-mpi=0"
+fi
+
+CONFIGURE_FLAGS+=" --PETSC_ARCH=installed-arch-linux2-c-opt"
+CONFIGURE_FLAGS+=" --PETSC_DIR=${BUILD_DIR}"
+
+echo "*** configure --prefix=${PRODUCT_INSTALL} ${CONFIGURE_FLAGS}"
+if ! ./configure --prefix=${PRODUCT_INSTALL} ${CONFIGURE_FLAGS}
+then
+    echo "ERROR on configure"
+    exit 1
+fi
+
+echo
+echo "*** make" $MAKE_OPTIONS
+if ! make "$MAKE_OPTIONS"
+then
+    echo "ERROR on make"
+    exit 2
+fi
+
+# CentOS 6 automatically set PETSC_ARCH to arch-linux2-c-debug : remove arch specification
+# MAKE_OPTIONS=$MAKE_OPTIONS" PETSC_ARCH=arch-linux-c-debug"
+
+echo
+echo "*** make install"
+if ! make "$MAKE_OPTIONS" install
+then
+    echo "ERROR on make install"
+    exit 3
+fi
+
+echo
+echo "*** make check"
+if ! make "$MAKE_OPTIONS" check
+then
+    echo "ERROR on make check"
+    exit 4
+fi
+
+echo
+echo "########## END"
+
diff --git a/products/env_scripts/assimulo.py b/products/env_scripts/assimulo.py
new file mode 100644 (file)
index 0000000..0887324
--- /dev/null
@@ -0,0 +1,12 @@
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+import os
+
+def set_env(env, prereq_dir, version):
+    pyver = 'python' + env.get('PYTHON_VERSION')
+    env.set("ASSIMULO_ROOT_DIR",prereq_dir)
+    env.prepend("PYTHONPATH",os.path.join(prereq_dir, 'lib', pyver, 'site-packages'))
+
+def set_nativ_env(env):
+    pass
diff --git a/products/env_scripts/nose_py3.py b/products/env_scripts/nose_py3.py
new file mode 100644 (file)
index 0000000..8680ea3
--- /dev/null
@@ -0,0 +1,14 @@
+#!/usr/bin/env python
+#-*- coding:utf-8 -*-
+
+import os.path
+import platform
+
+def set_env(env, prereq_dir, version):
+    env.set('NOSE_PY3_ROOT_DIR',prereq_dir)
+    if not platform.system() == "Windows" :
+        pyver = 'python' + env.get('PYTHON_VERSION')
+        env.prepend('PYTHONPATH', os.path.join(prereq_dir, 'lib', pyver, 'site-packages'))
+
+def set_nativ_env(env):
+    pass
index 32109e4ce942b7e77b09225bd2c33dfe3e564346..5845a1b59a0e49dcb2a86ebbabaf1f8c1dd3b1d7 100755 (executable)
@@ -4,13 +4,6 @@ default :
     build_source : "script"
     compil_script :  $name + $VARS.scriptExtension
     get_source : "archive"
-    system_info : 
-    {
-        rpm : ["freetype"]
-        rpm_dev : ["freetype-devel"]
-        apt : ["libfreetype6"]
-        apt_dev : ["libfreetype6-dev"]
-    }
     environ :
     {
        env_script : $name + ".py"
index 7170f52429c841632e62fca138a796cedec414eb..d296739c123014cdb1d80d7ea0cc3cb22ac6fd36 100644 (file)
@@ -47,6 +47,14 @@ version_4_10_3_with_CAS_7_8_FD38:
   patches : ["gmsh-4.10.3-gc13-fc38.patch", "gmsh-4.10.3-occt780.patch"]
 }
 
+version_4_10_3_with_CAS_7_8_UB24_04:
+{
+  archive_info : {archive_name : "gmsh-4.10.3.tar.gz"}
+  compil_script : "gmsh-4.10.3.sh"
+  depend : ["CAS","lapack","hdf5","medfile", "cgns"]
+  patches : ["gmsh-4.10.3-gc13-fc38.patch", "gmsh-4.10.3-occt780.patch"]
+}
+
 version_4_10_3_with_CAS_7_8_win:
 {
   archive_info : {archive_name : "gmsh-4.10.3.tar.gz"}
diff --git a/products/nose_py3.pyconf b/products/nose_py3.pyconf
new file mode 100644 (file)
index 0000000..93a58a5
--- /dev/null
@@ -0,0 +1,37 @@
+default :
+{
+    name : "nose-py3"
+    build_source : "script"
+    compil_script :  'pip_install' + $VARS.scriptExtension
+    archive_info : {archive_prefix : "nose_py3"}
+    get_source : "archive"  
+    patches : []
+    environ :
+    {
+       env_script : "nose_py3.py"
+    }
+    depend : ['Python', 'setuptools', 'numpy', 'scipy', 'six', 'Sphinx', 'Jinja2', 
+              'Pygments', 'docutils', 'snowballstemmer', 'Babel', 'alabaster', 
+              'imagesize', 'requests', 'packaging']
+    opt_depend: []
+    source_dir : $APPLICATION.workdir + $VARS.sep + 'SOURCES' + $VARS.sep + $name
+    build_dir : $APPLICATION.workdir + $VARS.sep + 'BUILD' + $VARS.sep + $name
+    install_dir : 'base'
+    properties :
+    {
+      incremental : "yes"
+      pip : "yes"
+    }
+}
+
+version_1_6_9_no_pip:
+{
+   compil_script: "nose-py3-1.6.9"  + $VARS.scriptExtension
+   archive_info : {archive_name : "nose_py3-1.6.9.tar.gz"}
+   properties :
+   {
+     incremental : "yes"
+     pip : "no"
+   }
+}
+
index 78d1a761dbc7ad6ed8f1dec6c28820efc131d014..a45511425430566d63688678dbc415cf153d27c0 100644 (file)
@@ -23,3 +23,8 @@ version_4_2_5:
 {
   patches: ['omniORBpy-4.2.5.p1.patch']
 }
+
+version_4_2_5_UB24_04:
+{
+  patches: ['omniORBpy-4.2.5.p1.patch','omniORBpy-4.2.5.p2.patch']
+}
diff --git a/products/patches/FIELDS-UB24.04-V9_13_0-PyUnicode_AsWideCharString.patch b/products/patches/FIELDS-UB24.04-V9_13_0-PyUnicode_AsWideCharString.patch
new file mode 100644 (file)
index 0000000..997aab5
--- /dev/null
@@ -0,0 +1,194 @@
+diff --git a/src/MEDCalc/cmp/MEDPresentation.cxx b/src/MEDCalc/cmp/MEDPresentation.cxx
+index c11a292a7..a76d206d9 100644
+--- a/src/MEDCalc/cmp/MEDPresentation.cxx
++++ b/src/MEDCalc/cmp/MEDPresentation.cxx
+@@ -37,7 +37,6 @@ Py_EncodeLocale(const wchar_t *text, size_t *error_pos)
+       return _Py_wchar2char(text, error_pos);
+ }
+ #endif
+-
+ const std::string MEDPresentation::PROP_NAME  = "name";
+ const std::string MEDPresentation::PROP_NB_COMPONENTS = "nbComponents";
+ const std::string MEDPresentation::PROP_SELECTED_COMPONENT = "selectedComponent";
+@@ -995,7 +994,11 @@ MEDPresentation::fillAvailableFieldComponents()
+       PyObject* p_obj = getPythonObjectFromMain("__compo");
+       std::string compo;
+       if (p_obj && PyUnicode_Check(p_obj))
++#if PY_VERSION_HEX < 0x030c0000 // See PEP-623
+         compo = std::string(Py_EncodeLocale(PyUnicode_AS_UNICODE(p_obj), NULL));  // pointing to internal Python memory, so make a copy!!
++#else
++        compo = std::string(Py_EncodeLocale(PyUnicode_AsWideCharString(p_obj,NULL), NULL));
++#endif
+       else
+         {
+           STDLOG("Unexpected Python error");
+diff --git a/src/MEDCalculator/Swig/MEDCalculatorTypemaps.i b/src/MEDCalculator/Swig/MEDCalculatorTypemaps.i
+index 8e7f4c292..e8d2c3aa4 100644
+--- a/src/MEDCalculator/Swig/MEDCalculatorTypemaps.i
++++ b/src/MEDCalculator/Swig/MEDCalculatorTypemaps.i
+@@ -48,7 +48,11 @@ void convertPyObjToRS(PyObject *o, MEDCoupling::MEDCalculatorDBRangeSelection& r
+     }
+   if(PyString_Check(o))
+     {
++#if PY_VERSION_HEX < 0x030c0000 // See PEP-623
+       char *s=Py_EncodeLocale(PyUnicode_AS_UNICODE(o), NULL);
++#else
++      char *s=Py_EncodeLocale(PyUnicode_AsWideCharString(o,NULL), NULL);
++#endif
+       rs=s;
+       return ;
+     }
+diff --git a/src/MEDCalculator/Swig/SPythonParser.cxx b/src/MEDCalculator/Swig/SPythonParser.cxx
+index 265f8093d..f76737e31 100644
+--- a/src/MEDCalculator/Swig/SPythonParser.cxx
++++ b/src/MEDCalculator/Swig/SPythonParser.cxx
+@@ -459,7 +459,11 @@ TypeOfEntity SPythonPredParser::getTypeOfVar(const std::string& var, PyObject *g
+   oss << TMPVAR << "=type(" << var << ").__name__";
+   PyRun_String(oss.str().c_str(),Py_single_input,glob,loc);
+   PyObject *p=PyDict_GetItemString(glob,TMPVAR);
++#if PY_VERSION_HEX < 0x030c0000 // See PEP-623
+   const char *type=Py_EncodeLocale(PyUnicode_AS_UNICODE(p), NULL);
++#else
++  const char *type=Py_EncodeLocale(PyUnicode_AsWideCharString(p,NULL), NULL);
++#endif
+   std::string typecpp=std::string(type);
+   if(typecpp=="function")
+     return FUNC_TYPE;
+diff --git a/src/MEDCouplingCorba_Swig/Client/MEDCouplingClient.i b/src/MEDCouplingCorba_Swig/Client/MEDCouplingClient.i
+index 492fd186b..b91866ddc 100644
+--- a/src/MEDCouplingCorba_Swig/Client/MEDCouplingClient.i
++++ b/src/MEDCouplingCorba_Swig/Client/MEDCouplingClient.i
+@@ -69,6 +69,7 @@ Py_EncodeLocale(const wchar_t *text, size_t *error_pos)
+ #endif
+ %}
++
+ namespace MEDCoupling
+ {
+   class MEDCouplingFieldDoubleClient
+@@ -88,7 +89,7 @@ namespace MEDCoupling
+           PyObject *iorField=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",fieldPtr);
+           if(!iorField)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of MEDCouplingFieldDoubleClient.New appears to differ from CORBA reference ! Expecting a FieldDouble CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorField), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorField,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var fieldPtrCpp=orb->string_to_object(ior);
+@@ -120,7 +121,7 @@ namespace MEDCoupling
+           PyObject *iorField=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",fieldPtr);
+           if(!iorField)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of MEDCouplingFieldTemplateClient.New appears to differ from CORBA reference ! Expecting a FieldTemplate CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorField), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorField,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var fieldPtrCpp=orb->string_to_object(ior);
+@@ -152,7 +153,7 @@ namespace MEDCoupling
+           PyObject *iorField=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",fieldPtr);
+           if(!iorField)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of MEDCouplingFieldTemplateClient.New appears to differ from CORBA reference ! Expecting a MultiFields CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorField), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorField,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var fieldPtrCpp=orb->string_to_object(ior);
+@@ -185,7 +186,7 @@ namespace MEDCoupling
+           PyObject *iorField=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",fieldPtr);
+           if(!iorField)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of MEDCouplingFieldOverTimeClient.New appears to differ from CORBA reference ! Expecting a FieldOverTime CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorField), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorField,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var fieldPtrCpp=orb->string_to_object(ior);
+@@ -217,7 +218,7 @@ namespace MEDCoupling
+           PyObject *iorMesh=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",meshPtr);
+           if(!iorMesh)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of MEDCouplingMeshClient.New appears to differ from CORBA reference ! Expecting a MeshCorbaInterface CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorMesh), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorMesh,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var meshPtrCpp=orb->string_to_object(ior);
+@@ -292,7 +293,7 @@ namespace MEDCoupling
+           PyObject *iorMesh=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",meshPtr);
+           if(!iorMesh)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of MEDCouplingUMeshClient.New appears to differ from CORBA reference ! Expecting a UMeshCorbaInterface CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorMesh), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorMesh,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var meshPtrCpp=orb->string_to_object(ior);
+@@ -324,7 +325,7 @@ namespace MEDCoupling
+           PyObject *iorMesh=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",meshPtr);
+           if(!iorMesh)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of MEDCoupling1SGTUMeshClient.New appears to differ from CORBA reference ! Expecting a 1SGTUMeshCorbaInterface CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorMesh), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorMesh,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var meshPtrCpp=orb->string_to_object(ior);
+@@ -356,7 +357,7 @@ namespace MEDCoupling
+           PyObject *iorMesh=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",meshPtr);
+           if(!iorMesh)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of MEDCoupling1DGTUMeshClient.New appears to differ from CORBA reference ! Expecting a 1DGTUMeshCorbaInterface CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorMesh), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorMesh,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var meshPtrCpp=orb->string_to_object(ior);
+@@ -388,7 +389,7 @@ namespace MEDCoupling
+           PyObject *iorMesh=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",meshPtr);
+           if(!iorMesh)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of MEDCouplingExtrudedMeshClient.New appears to differ from CORBA reference ! Expecting an ExtrudedMeshCorbaInterface CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorMesh), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorMesh,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var meshPtrCpp=orb->string_to_object(ior);
+@@ -420,7 +421,7 @@ namespace MEDCoupling
+           PyObject *iorMesh=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",meshPtr);
+           if(!iorMesh)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of MEDCouplingCMeshClient.New appears to differ from CORBA reference ! Expecting a CMeshCorbaInterface CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorMesh), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorMesh,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var meshPtrCpp=orb->string_to_object(ior);
+@@ -452,7 +453,7 @@ namespace MEDCoupling
+           PyObject *iorMesh=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",meshPtr);
+           if(!iorMesh)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of MEDCouplingIMeshClient.New appears to differ from CORBA reference ! Expecting a IMeshCorbaInterface CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorMesh), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorMesh,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var meshPtrCpp=orb->string_to_object(ior);
+@@ -484,7 +485,7 @@ namespace MEDCoupling
+           PyObject *iorMesh=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",meshPtr);
+           if(!iorMesh)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of MEDCouplingCurveLinearMeshClient.New appears to differ from CORBA reference ! Expecting a CurveLinearMeshCorbaInterface CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorMesh), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorMesh,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var meshPtrCpp=orb->string_to_object(ior);
+@@ -516,7 +517,7 @@ namespace MEDCoupling
+           PyObject *iorMesh=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",meshPtr);
+           if(!iorMesh)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of DataArrayDoubleClient.New appears to differ from CORBA reference ! Expecting a DataArrayDoubleCorbaInterface CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorMesh), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorMesh,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var meshPtrCpp=orb->string_to_object(ior);
+@@ -548,7 +549,7 @@ namespace MEDCoupling
+           PyObject *iorMesh=PyObject_CallMethod(orbPython,(char*)"object_to_string",(char*)"O",meshPtr);
+           if(!iorMesh)
+             throw INTERP_KERNEL::Exception("Error : the input parameter of DataArrayIntClient.New appears to differ from CORBA reference ! Expecting a DataArrayIntCorbaInterface CORBA reference !");
+-          char *ior=Py_EncodeLocale(PyUnicode_AS_UNICODE(iorMesh), NULL);
++          char *ior=Py_EncodeLocale(PyUnicode_AsWideCharString(iorMesh,NULL), NULL);
+           int argc=0;
+           CORBA::ORB_var orb=CORBA::ORB_init(argc,0);
+           CORBA::Object_var meshPtrCpp=orb->string_to_object(ior);
diff --git a/products/patches/KERNEL-UB24.04-V9_13_0_configparser.patch b/products/patches/KERNEL-UB24.04-V9_13_0_configparser.patch
new file mode 100644 (file)
index 0000000..550b08a
--- /dev/null
@@ -0,0 +1,55 @@
+diff --git a/bin/parseConfigFile.py b/bin/parseConfigFile.py
+index 20d782c8c..adf1809c8 100644
+--- a/bin/parseConfigFile.py
++++ b/bin/parseConfigFile.py
+@@ -17,8 +17,13 @@
+ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+ #
+-import configparser
+ import os
++import sys
++import configparser
++if sys.sys.version_info[:2] >= (3,12):
++  import configparser.ConfigParser as SafeConfigParser
++else:
++  import configparser.SafeConfigParser
+ import logging
+ import re
+ from io import StringIO
+@@ -46,9 +51,9 @@ def _expandSystemVariables(key, val):
+ #
+ # :TRICKY: So ugly solution...
+-class MultiOptSafeConfigParser(configparser.SafeConfigParser):
++class MultiOptSafeConfigParser(SafeConfigParser):
+   def __init__(self):
+-    configparser.SafeConfigParser.__init__(self)
++    SafeConfigParser.__init__(self)
+   # copied from python 2.6.8 Lib.ConfigParser.py
+   # modified (see code comments) to handle duplicate keys
+diff --git a/bin/salomeContext.py b/bin/salomeContext.py
+index 04f960e31..fa95889c5 100755
+--- a/bin/salomeContext.py
++++ b/bin/salomeContext.py
+@@ -22,6 +22,10 @@ import os
+ import sys
+ import logging
+ import configparser
++if sys.sys.version_info[:2] >= (3,12):
++  import configparser.ConfigParser as SafeConfigParser
++else:
++  import configparser.SafeConfigParser
+ from parseConfigFile import parseConfigFile
+@@ -542,7 +546,7 @@ class SalomeContext:
+   #
+   def _showSoftwareVersions(self, softwares=None):
+-    config = configparser.SafeConfigParser()
++    config = SafeConfigParser()
+     absoluteAppliPath = os.getenv('ABSOLUTE_APPLI_PATH')
+     filename = os.path.join(absoluteAppliPath, "sha1_collections.txt")
+     versions = {}
diff --git a/products/patches/PARAVIS-UB24.04-V9_13_0-PyUnicode_AsWideCharString.patch b/products/patches/PARAVIS-UB24.04-V9_13_0-PyUnicode_AsWideCharString.patch
new file mode 100644 (file)
index 0000000..0942831
--- /dev/null
@@ -0,0 +1,19 @@
+diff --git a/src/PVGUI/PVGUI_Module.cxx b/src/PVGUI/PVGUI_Module.cxx
+index 79bfdccd..e739b812 100644
+--- a/src/PVGUI/PVGUI_Module.cxx
++++ b/src/PVGUI/PVGUI_Module.cxx
+@@ -839,12 +839,12 @@ QString PVGUI_Module::getTraceString()
+         vtkSmartPyObject save_cam(PyObject_GetAttrString(trace_mod, const_cast<char*>("SaveCameras")));
+         vtkSmartPyObject camera_trace(PyObject_CallMethod(save_cam, const_cast<char*>("get_trace"), NULL));
+         // Convert to a single string
+-        vtkSmartPyObject ret(PyUnicode_FromUnicode(Py_DecodeLocale(end_line.toStdString().c_str(), NULL), end_line.size()));
++        vtkSmartPyObject ret(PyUnicode_FromWideChar(Py_DecodeLocale(end_line.toStdString().c_str(), NULL), end_line.size()));
+         vtkSmartPyObject final_string(PyObject_CallMethod(ret, const_cast<char*>("join"),
+             const_cast<char*>("O"), (PyObject*)camera_trace));
+         if (PyUnicode_CheckExact(final_string))
+           {
+-            QString camera_qs(Py_EncodeLocale(PyUnicode_AS_UNICODE(final_string.GetPointer()), NULL));  // deep copy
++            QString camera_qs(Py_EncodeLocale(PyUnicode_AsWideCharString(final_string.GetPointer(),NULL), NULL));  // deep copy
+             traceString = traceString + end_line  + end_line + QString("#### saving camera placements for all active views")
+                 + end_line + end_line + camera_qs + end_line;
+           }
diff --git a/products/patches/omniORBpy-4.2.5.p2.patch b/products/patches/omniORBpy-4.2.5.p2.patch
new file mode 100644 (file)
index 0000000..83aca8b
--- /dev/null
@@ -0,0 +1,23 @@
+diff -Naur omniORBpy/modules/pyMarshal.cc omniORBpy_dev/modules/pyMarshal.cc
+--- omniORBpy/modules/pyMarshal.cc         2021-03-23 18:24:39.000000000 +0100
++++ omniORBpy_dev/modules/pyMarshal.cc 2024-07-02 13:10:36.387696661 +0200
+@@ -2987,8 +2987,8 @@
+   OMNIORB_CHECK_TCS_W_FOR_UNMARSHAL(stream.TCS_W(), stream);
+   Py_UNICODE  c   = stream.TCS_W()->unmarshalWChar(stream);
+-  PyObject*   r_o = PyUnicode_FromUnicode(0, 1);
+-  Py_UNICODE* str = PyUnicode_AS_UNICODE(r_o);
++  PyObject*   r_o = PyUnicode_FromWideChar(0, 1);
++  Py_UNICODE* str = PyUnicode_AsWideCharString(r_o, NULL);
+   str[0]          = c;
+   str[1]          = 0;
+   return r_o;
+@@ -4641,7 +4641,7 @@
+                      omniPy::formatString("Expecting unicode, got %r",
+                                           "O", a_o->ob_type));
+   }
+-  if (PyUnicode_GET_SIZE(a_o) != 1) {
++  if (PyUnicode_GetLength(a_o) != 1) {
+     THROW_PY_BAD_PARAM(BAD_PARAM_WrongPythonType, compstatus,
+                      omniPy::formatString("Expecting unicode of length 1, "
+                                           "got %r",
diff --git a/products/patches/paraview-5.11.0.p007-mpi4py-UB24.patch b/products/patches/paraview-5.11.0.p007-mpi4py-UB24.patch
new file mode 100644 (file)
index 0000000..1bc43bd
--- /dev/null
@@ -0,0 +1,1940 @@
+--- ParaView/VTK/ThirdParty/mpi4py/vtkmpi4py/src/mpi4py.MPI.c  2022-11-18 15:26:55.000000000 +0100
++++ ParaView_dev/VTK/ThirdParty/mpi4py/vtkmpi4py/src/mpi4py.MPI.c      2024-06-27 08:35:16.687060202 +0200
+@@ -1,14 +1,16 @@
+-/* Generated by Cython 0.29.21 */
++/* Generated by Cython 0.29.32 */
++#ifndef PY_SSIZE_T_CLEAN
+ #define PY_SSIZE_T_CLEAN
++#endif /* PY_SSIZE_T_CLEAN */
+ #include "Python.h"
+ #ifndef Py_PYTHON_H
+     #error Python headers needed to compile C extensions, please install development version of Python.
+ #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
+     #error Cython requires Python 2.6+ or Python 3.3+.
+ #else
+-#define CYTHON_ABI "0_29_21"
+-#define CYTHON_HEX_VERSION 0x001D15F0
++#define CYTHON_ABI "0_29_32"
++#define CYTHON_HEX_VERSION 0x001D20F0
+ #define CYTHON_FUTURE_DIVISION 0
+ #include <stddef.h>
+ #ifndef offsetof
+@@ -47,6 +49,7 @@
+   #define CYTHON_COMPILING_IN_PYPY 1
+   #define CYTHON_COMPILING_IN_PYSTON 0
+   #define CYTHON_COMPILING_IN_CPYTHON 0
++  #define CYTHON_COMPILING_IN_NOGIL 0
+   #undef CYTHON_USE_TYPE_SLOTS
+   #define CYTHON_USE_TYPE_SLOTS 0
+   #undef CYTHON_USE_PYTYPE_LOOKUP
+@@ -83,10 +86,14 @@
+   #define CYTHON_USE_DICT_VERSIONS 0
+   #undef CYTHON_USE_EXC_INFO_STACK
+   #define CYTHON_USE_EXC_INFO_STACK 0
++  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
++    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
++  #endif
+ #elif defined(PYSTON_VERSION)
+   #define CYTHON_COMPILING_IN_PYPY 0
+   #define CYTHON_COMPILING_IN_PYSTON 1
+   #define CYTHON_COMPILING_IN_CPYTHON 0
++  #define CYTHON_COMPILING_IN_NOGIL 0
+   #ifndef CYTHON_USE_TYPE_SLOTS
+     #define CYTHON_USE_TYPE_SLOTS 1
+   #endif
+@@ -124,10 +131,59 @@
+   #define CYTHON_USE_DICT_VERSIONS 0
+   #undef CYTHON_USE_EXC_INFO_STACK
+   #define CYTHON_USE_EXC_INFO_STACK 0
++  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
++    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
++  #endif
++#elif defined(PY_NOGIL)
++  #define CYTHON_COMPILING_IN_PYPY 0
++  #define CYTHON_COMPILING_IN_PYSTON 0
++  #define CYTHON_COMPILING_IN_CPYTHON 0
++  #define CYTHON_COMPILING_IN_NOGIL 1
++  #ifndef CYTHON_USE_TYPE_SLOTS
++    #define CYTHON_USE_TYPE_SLOTS 1
++  #endif
++  #undef CYTHON_USE_PYTYPE_LOOKUP
++  #define CYTHON_USE_PYTYPE_LOOKUP 0
++  #ifndef CYTHON_USE_ASYNC_SLOTS
++    #define CYTHON_USE_ASYNC_SLOTS 1
++  #endif
++  #undef CYTHON_USE_PYLIST_INTERNALS
++  #define CYTHON_USE_PYLIST_INTERNALS 0
++  #ifndef CYTHON_USE_UNICODE_INTERNALS
++    #define CYTHON_USE_UNICODE_INTERNALS 1
++  #endif
++  #undef CYTHON_USE_UNICODE_WRITER
++  #define CYTHON_USE_UNICODE_WRITER 0
++  #undef CYTHON_USE_PYLONG_INTERNALS
++  #define CYTHON_USE_PYLONG_INTERNALS 0
++  #ifndef CYTHON_AVOID_BORROWED_REFS
++    #define CYTHON_AVOID_BORROWED_REFS 0
++  #endif
++  #ifndef CYTHON_ASSUME_SAFE_MACROS
++    #define CYTHON_ASSUME_SAFE_MACROS 1
++  #endif
++  #ifndef CYTHON_UNPACK_METHODS
++    #define CYTHON_UNPACK_METHODS 1
++  #endif
++  #undef CYTHON_FAST_THREAD_STATE
++  #define CYTHON_FAST_THREAD_STATE 0
++  #undef CYTHON_FAST_PYCALL
++  #define CYTHON_FAST_PYCALL 0
++  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
++    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
++  #endif
++  #ifndef CYTHON_USE_TP_FINALIZE
++    #define CYTHON_USE_TP_FINALIZE 1
++  #endif
++  #undef CYTHON_USE_DICT_VERSIONS
++  #define CYTHON_USE_DICT_VERSIONS 0
++  #undef CYTHON_USE_EXC_INFO_STACK
++  #define CYTHON_USE_EXC_INFO_STACK 0
+ #else
+   #define CYTHON_COMPILING_IN_PYPY 0
+   #define CYTHON_COMPILING_IN_PYSTON 0
+   #define CYTHON_COMPILING_IN_CPYTHON 1
++  #define CYTHON_COMPILING_IN_NOGIL 0
+   #ifndef CYTHON_USE_TYPE_SLOTS
+     #define CYTHON_USE_TYPE_SLOTS 1
+   #endif
+@@ -155,7 +211,7 @@
+   #ifndef CYTHON_USE_UNICODE_INTERNALS
+     #define CYTHON_USE_UNICODE_INTERNALS 1
+   #endif
+-  #if PY_VERSION_HEX < 0x030300F0
++  #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
+     #undef CYTHON_USE_UNICODE_WRITER
+     #define CYTHON_USE_UNICODE_WRITER 0
+   #elif !defined(CYTHON_USE_UNICODE_WRITER)
+@@ -170,11 +226,14 @@
+   #ifndef CYTHON_UNPACK_METHODS
+     #define CYTHON_UNPACK_METHODS 1
+   #endif
+-  #ifndef CYTHON_FAST_THREAD_STATE
+-    #define CYTHON_FAST_THREAD_STATE 1
++  #if PY_VERSION_HEX >= 0x030B00A4
++    #undef CYTHON_FAST_THREAD_STATE
++    #define CYTHON_FAST_THREAD_STATE 0
++  #elif !defined(CYTHON_FAST_THREAD_STATE)
++    #define CYTHON_FAST_THREAD_STATE (PY_VERSION_HEX < 0x030C00A6)
+   #endif
+   #ifndef CYTHON_FAST_PYCALL
+-    #define CYTHON_FAST_PYCALL 1
++    #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030A0000)
+   #endif
+   #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+     #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
+@@ -185,15 +244,23 @@
+   #ifndef CYTHON_USE_DICT_VERSIONS
+     #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
+   #endif
+-  #ifndef CYTHON_USE_EXC_INFO_STACK
++  #if PY_VERSION_HEX >= 0x030B00A4
++    #undef CYTHON_USE_EXC_INFO_STACK
++    #define CYTHON_USE_EXC_INFO_STACK 0
++  #elif !defined(CYTHON_USE_EXC_INFO_STACK)
+     #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3)
+   #endif
++  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
++    #define CYTHON_UPDATE_DESCRIPTOR_DOC 1
++  #endif
+ #endif
+ #if !defined(CYTHON_FAST_PYCCALL)
+ #define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
+ #endif
+ #if CYTHON_USE_PYLONG_INTERNALS
+-  #include "longintrepr.h"
++  #if PY_MAJOR_VERSION < 3
++    #include "longintrepr.h"
++  #endif
+   #undef SHIFT
+   #undef BASE
+   #undef MASK
+@@ -310,9 +377,68 @@
+   #define __Pyx_DefaultClassType PyClass_Type
+ #else
+   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+-#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
+-  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+-          PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
++  #define __Pyx_DefaultClassType PyType_Type
++#if PY_VERSION_HEX >= 0x030B00A1
++    static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, int s, int f,
++                                                    PyObject *code, PyObject *c, PyObject* n, PyObject *v,
++                                                    PyObject *fv, PyObject *cell, PyObject* fn,
++                                                    PyObject *name, int fline, PyObject *lnos) {
++        PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL;
++        PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL;
++        const char *fn_cstr=NULL;
++        const char *name_cstr=NULL;
++        PyCodeObject* co=NULL;
++        PyObject *type, *value, *traceback;
++        PyErr_Fetch(&type, &value, &traceback);
++        if (!(kwds=PyDict_New())) goto end;
++        if (!(argcount=PyLong_FromLong(a))) goto end;
++        if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end;
++        if (!(posonlyargcount=PyLong_FromLong(0))) goto end;
++        if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end;
++        if (!(kwonlyargcount=PyLong_FromLong(k))) goto end;
++        if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end;
++        if (!(nlocals=PyLong_FromLong(l))) goto end;
++        if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end;
++        if (!(stacksize=PyLong_FromLong(s))) goto end;
++        if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end;
++        if (!(flags=PyLong_FromLong(f))) goto end;
++        if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end;
++        if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end;
++        if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end;
++        if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end;
++        if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end;
++        if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end;
++        if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end;
++        if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end;
++        if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end;
++        if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end;
++        if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end;
++        if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too;
++        if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here
++        if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too;
++        Py_XDECREF((PyObject*)co);
++        co = (PyCodeObject*)call_result;
++        call_result = NULL;
++        if (0) {
++            cleanup_code_too:
++            Py_XDECREF((PyObject*)co);
++            co = NULL;
++        }
++        end:
++        Py_XDECREF(kwds);
++        Py_XDECREF(argcount);
++        Py_XDECREF(posonlyargcount);
++        Py_XDECREF(kwonlyargcount);
++        Py_XDECREF(nlocals);
++        Py_XDECREF(stacksize);
++        Py_XDECREF(replace);
++        Py_XDECREF(call_result);
++        Py_XDECREF(empty);
++        if (type) {
++            PyErr_Restore(type, value, traceback);
++        }
++        return co;
++    }
+ #else
+   #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+           PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+@@ -426,8 +552,12 @@
+ #endif
+ #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
+   #define CYTHON_PEP393_ENABLED 1
+-  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
++  #if defined(_PyUnicode_Ready)
++  #define __Pyx_PyUnicode_READY(op)       (likely(_PyUnicode_Ready(op)) ?\
+                                               0 : _PyUnicode_Ready((PyObject *)(op)))
++  #else
++  #define __Pyx_PyUnicode_READY(op)       (0)
++  #endif
+   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
+   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+   #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
+@@ -435,8 +565,12 @@
+   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
+   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
+   #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
+-  #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)
+-  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
++  #if defined(_PyUnicode_Ready) && defined(PyUnicode_GET_SIZE)
++  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
++  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(_PyUnicode_Ready(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
++  #else
++  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(_PyUnicode_Ready(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
++  #endif
+   #else
+   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
+   #endif
+@@ -542,10 +676,10 @@
+ #if PY_VERSION_HEX < 0x030200A4
+   typedef long Py_hash_t;
+   #define __Pyx_PyInt_FromHash_t PyInt_FromLong
+-  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
++  #define __Pyx_PyInt_AsHash_t   __Pyx_PyIndex_AsHash_t
+ #else
+   #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
+-  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
++  #define __Pyx_PyInt_AsHash_t   __Pyx_PyIndex_AsSsize_t
+ #endif
+ #if PY_MAJOR_VERSION >= 3
+   #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func))
+@@ -570,8 +704,10 @@
+     } __Pyx_PyAsyncMethodsStruct;
+ #endif
+-#if defined(WIN32) || defined(MS_WINDOWS)
+-  #define _USE_MATH_DEFINES
++#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
++  #if !defined(_USE_MATH_DEFINES)
++    #define _USE_MATH_DEFINES
++  #endif
+ #endif
+ #include <math.h>
+ #ifdef NAN
+@@ -703,6 +839,7 @@
+     (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
+ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
+ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
++static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
+ #if CYTHON_ASSUME_SAFE_MACROS
+ #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+ #else
+@@ -1747,13 +1884,21 @@
+ #ifndef Py_MEMBER_SIZE
+ #define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
+ #endif
++#if CYTHON_FAST_PYCALL
+   static size_t __pyx_pyframe_localsplus_offset = 0;
+   #include "frameobject.h"
++#if PY_VERSION_HEX >= 0x030b00a6
++  #ifndef Py_BUILD_CORE
++    #define Py_BUILD_CORE 1
++  #endif
++  #include "internal/pycore_frame.h"
++#endif
+   #define __Pxy_PyFrame_Initialize_Offsets()\
+     ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
+      (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
+   #define __Pyx_PyFrame_GetLocalsplus(frame)\
+     (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
++#endif // CYTHON_FAST_PYCALL
+ #endif
+ /* PyObjectCall.proto */
+@@ -2340,26 +2485,19 @@
+ static void __Pyx_AddTraceback(const char *funcname, int c_line,
+                                int py_line, const char *filename);
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Aint(MPI_Aint value);
+-
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
+-
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
++/* GCCDiagnostics.proto */
++#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
++#define __Pyx_HAS_GCC_DIAGNOSTIC
++#endif
+-/* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Offset(MPI_Offset value);
++/* CIntFromPy.proto */
++static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
+ /* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Fint(MPI_Fint value);
++static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Aint(MPI_Aint value);
+ /* CIntToPy.proto */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Count(MPI_Count value);
+-
+-/* CIntFromPy.proto */
+-static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
++static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
+ /* CIntFromPy.proto */
+ static CYTHON_INLINE MPI_Aint __Pyx_PyInt_As_MPI_Aint(PyObject *);
+@@ -2370,12 +2508,24 @@
+ /* CIntFromPy.proto */
+ static CYTHON_INLINE MPI_Offset __Pyx_PyInt_As_MPI_Offset(PyObject *);
++/* CIntToPy.proto */
++static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
++
+ /* CIntFromPy.proto */
+ static CYTHON_INLINE unsigned char __Pyx_PyInt_As_unsigned_char(PyObject *);
++/* CIntToPy.proto */
++static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Offset(MPI_Offset value);
++
++/* CIntToPy.proto */
++static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Fint(MPI_Fint value);
++
+ /* CIntFromPy.proto */
+ static CYTHON_INLINE MPI_Fint __Pyx_PyInt_As_MPI_Fint(PyObject *);
++/* CIntToPy.proto */
++static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Count(MPI_Count value);
++
+ /* CIntFromPy.proto */
+ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
+@@ -16973,7 +17123,8 @@
+   PyObject *__pyx_t_2 = NULL;
+   int __pyx_t_3;
+   int __pyx_t_4;
+-  MPI_Status __pyx_t_5;
++  PyObject *__pyx_t_5 = NULL;
++  MPI_Status __pyx_t_6;
+   int __pyx_lineno = 0;
+   const char *__pyx_filename = NULL;
+   int __pyx_clineno = 0;
+@@ -17073,10 +17224,13 @@
+       PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
+       __PYX_ERR(13, 79, __pyx_L1_error)
+     }
+-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_self->query_fn, __pyx_t_1, __pyx_v_self->kargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 79, __pyx_L1_error)
++    __pyx_t_2 = PyDict_Copy(__pyx_v_self->kargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(13, 79, __pyx_L1_error)
+     __Pyx_GOTREF(__pyx_t_2);
++    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_self->query_fn, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 79, __pyx_L1_error)
++    __Pyx_GOTREF(__pyx_t_5);
+     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
++    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+     /* "mpi4py/MPI/reqimpl.pxi":80
+  *             sts.ob_mpi = status[0]
+@@ -17085,8 +17239,8 @@
+  *             if self.cancel_fn is None:
+  *                 <void>MPI_Status_set_cancelled(status, 0)
+  */
+-    __pyx_t_5 = __pyx_v_sts->ob_mpi;
+-    (__pyx_v_status[0]) = __pyx_t_5;
++    __pyx_t_6 = __pyx_v_sts->ob_mpi;
++    (__pyx_v_status[0]) = __pyx_t_6;
+     /* "mpi4py/MPI/reqimpl.pxi":81
+  *             self.query_fn(sts, *self.args, **self.kargs)
+@@ -17148,6 +17302,7 @@
+   __pyx_L1_error:;
+   __Pyx_XDECREF(__pyx_t_1);
+   __Pyx_XDECREF(__pyx_t_2);
++  __Pyx_XDECREF(__pyx_t_5);
+   __Pyx_AddTraceback("mpi4py.MPI._p_greq.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
+   __pyx_r = -1;
+   __pyx_L0:;
+@@ -17170,6 +17325,7 @@
+   int __pyx_t_1;
+   int __pyx_t_2;
+   PyObject *__pyx_t_3 = NULL;
++  PyObject *__pyx_t_4 = NULL;
+   int __pyx_lineno = 0;
+   const char *__pyx_filename = NULL;
+   int __pyx_clineno = 0;
+@@ -17201,9 +17357,12 @@
+       PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
+       __PYX_ERR(13, 87, __pyx_L1_error)
+     }
+-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_self->free_fn, __pyx_v_self->args, __pyx_v_self->kargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 87, __pyx_L1_error)
++    __pyx_t_3 = PyDict_Copy(__pyx_v_self->kargs); if (unlikely(!__pyx_t_3)) __PYX_ERR(13, 87, __pyx_L1_error)
+     __Pyx_GOTREF(__pyx_t_3);
++    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_self->free_fn, __pyx_v_self->args, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 87, __pyx_L1_error)
++    __Pyx_GOTREF(__pyx_t_4);
+     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
++    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+     /* "mpi4py/MPI/reqimpl.pxi":86
+  * 
+@@ -17235,6 +17394,7 @@
+   /* function exit code */
+   __pyx_L1_error:;
+   __Pyx_XDECREF(__pyx_t_3);
++  __Pyx_XDECREF(__pyx_t_4);
+   __Pyx_AddTraceback("mpi4py.MPI._p_greq.free", __pyx_clineno, __pyx_lineno, __pyx_filename);
+   __pyx_r = -1;
+   __pyx_L0:;
+@@ -17257,6 +17417,7 @@
+   int __pyx_t_2;
+   PyObject *__pyx_t_3 = NULL;
+   PyObject *__pyx_t_4 = NULL;
++  PyObject *__pyx_t_5 = NULL;
+   int __pyx_lineno = 0;
+   const char *__pyx_filename = NULL;
+   int __pyx_clineno = 0;
+@@ -17298,10 +17459,13 @@
+       PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
+       __PYX_ERR(13, 92, __pyx_L1_error)
+     }
+-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_self->cancel_fn, __pyx_t_3, __pyx_v_self->kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 92, __pyx_L1_error)
++    __pyx_t_4 = PyDict_Copy(__pyx_v_self->kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(13, 92, __pyx_L1_error)
+     __Pyx_GOTREF(__pyx_t_4);
++    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_self->cancel_fn, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(13, 92, __pyx_L1_error)
++    __Pyx_GOTREF(__pyx_t_5);
+     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
++    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+     /* "mpi4py/MPI/reqimpl.pxi":91
+  * 
+@@ -17334,6 +17498,7 @@
+   __pyx_L1_error:;
+   __Pyx_XDECREF(__pyx_t_3);
+   __Pyx_XDECREF(__pyx_t_4);
++  __Pyx_XDECREF(__pyx_t_5);
+   __Pyx_AddTraceback("mpi4py.MPI._p_greq.cancel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+   __pyx_r = -1;
+   __pyx_L0:;
+@@ -157790,12 +157955,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Datatype(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -158075,12 +158243,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Request(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -158285,12 +158456,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Prequest(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -158370,12 +158544,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Grequest(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -158455,12 +158632,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Message(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -158656,12 +158836,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Op(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -158843,12 +159026,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Group(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -159039,12 +159225,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Info(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -159258,12 +159447,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Errhandler(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -159428,12 +159620,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Comm(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -159770,12 +159965,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Intracomm(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -159870,12 +160068,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Topocomm(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -159999,12 +160200,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Cartcomm(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -160122,12 +160326,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Graphcomm(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -160253,12 +160460,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Distgraphcomm(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -160338,12 +160548,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Intercomm(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -160438,12 +160651,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_Win(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -160749,12 +160965,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_File(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -161025,12 +161244,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI_memory(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+@@ -161201,12 +161423,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_mem(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+@@ -161297,12 +161522,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static struct __pyx_vtabstruct_6mpi4py_3MPI__p_greq __pyx_vtable_6mpi4py_3MPI__p_greq;
+@@ -161443,12 +161671,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static struct __pyx_vtabstruct_6mpi4py_3MPI__p_datarep __pyx_vtable_6mpi4py_3MPI__p_datarep;
+@@ -161573,12 +161804,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_keyval(PyTypeObject *t, PyObject *a, PyObject *k) {
+@@ -161740,12 +161974,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyObject *__pyx_tp_new_6mpi4py_3MPI__p_message(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+@@ -161868,12 +162105,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_p2p __pyx_vtable_6mpi4py_3MPI__p_msg_p2p;
+@@ -161982,12 +162222,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_cco __pyx_vtable_6mpi4py_3MPI__p_msg_cco;
+@@ -162112,12 +162355,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_ccow __pyx_vtable_6mpi4py_3MPI__p_msg_ccow;
+@@ -162234,12 +162480,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_rma __pyx_vtable_6mpi4py_3MPI__p_msg_rma;
+@@ -162372,12 +162621,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static struct __pyx_vtabstruct_6mpi4py_3MPI__p_msg_io __pyx_vtable_6mpi4py_3MPI__p_msg_io;
+@@ -162486,12 +162738,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static struct __pyx_vtabstruct_6mpi4py_3MPI_Pickle __pyx_vtable_6mpi4py_3MPI_Pickle;
+@@ -162637,12 +162892,15 @@
+   #if PY_VERSION_HEX >= 0x030400a1
+   0, /*tp_finalize*/
+   #endif
+-  #if PY_VERSION_HEX >= 0x030800b1
++  #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+   0, /*tp_vectorcall*/
+   #endif
+   #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+   0, /*tp_print*/
+   #endif
++  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++  0, /*tp_pypy_flags*/
++  #endif
+ };
+ static PyMethodDef __pyx_methods[] = {
+@@ -165349,11 +165607,9 @@
+   #endif
+   /*--- Library function declarations ---*/
+   /*--- Threads initialization code ---*/
+-  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
+-  #ifdef WITH_THREAD /* Python build with threading support? */
++  #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
+   PyEval_InitThreads();
+   #endif
+-  #endif
+   /*--- Module creation code ---*/
+   #if CYTHON_PEP489_MULTI_PHASE_INIT
+   __pyx_m = __pyx_pyinit_module;
+@@ -177405,7 +177661,7 @@
+ #if CYTHON_COMPILING_IN_CPYTHON
+ static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+     PyObject *result;
+-    ternaryfunc call = func->ob_type->tp_call;
++    ternaryfunc call = Py_TYPE(func)->tp_call;
+     if (unlikely(!call))
+         return PyObject_Call(func, arg, kw);
+     if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+@@ -177492,7 +177748,7 @@
+         if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
+             return __Pyx_PyObject_CallMethO(func, arg);
+ #if CYTHON_FAST_PYCCALL
+-        } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) {
++        } else if (__Pyx_PyFastCFunction_Check(func)) {
+             return __Pyx_PyCFunction_FastCall(func, &arg, 1);
+ #endif
+         }
+@@ -177684,7 +177940,7 @@
+             return (equals == Py_EQ);
+         } else {
+             int result;
+-#if CYTHON_USE_UNICODE_INTERNALS
++#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000)
+             Py_hash_t hash1, hash2;
+             hash1 = ((PyBytesObject*)s1)->ob_shash;
+             hash2 = ((PyBytesObject*)s2)->ob_shash;
+@@ -177958,12 +178214,12 @@
+         Py_XDECREF(tmp_tb);
+ #else
+         PyThreadState *tstate = __Pyx_PyThreadState_Current;
+-        PyObject* tmp_tb = tstate->curexc_traceback;
+-        if (tb != tmp_tb) {
+-            Py_INCREF(tb);
+-            tstate->curexc_traceback = tb;
+-            Py_XDECREF(tmp_tb);
+-        }
++        /*PyObject* tmp_tb = tstate->curexc_traceback;*/
++        /*if (tb != tmp_tb) {*/
++            /*Py_INCREF(tb);*/
++            /*tstate->curexc_traceback = tb;*/
++            /*Py_XDECREF(tmp_tb);*/
++        /*}*/
+ #endif
+     }
+ bad:
+@@ -179668,7 +179924,8 @@
+ __Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
+ {
+ #if PY_MAJOR_VERSION >= 3
+-    return PyUnicode_FromString(m->func.m_ml->ml_name);
++    Py_INCREF(m->func_qualname);
++    return m->func_qualname;
+ #else
+     return PyString_FromString(m->func.m_ml->ml_name);
+ #endif
+@@ -179871,6 +180128,9 @@
+         self = PyTuple_GetItem(args, 0);
+         if (unlikely(!self)) {
+             Py_DECREF(new_args);
++            PyErr_Format(PyExc_TypeError,
++                         "unbound method %.200S() needs an argument",
++                         cyfunc->func_qualname);
+             return NULL;
+         }
+         result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
+@@ -179939,12 +180199,15 @@
+ #if PY_VERSION_HEX >= 0x030400a1
+     0,
+ #endif
+-#if PY_VERSION_HEX >= 0x030800b1
++#if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+     0,
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+     0,
+ #endif
++#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
++    0,
++#endif
+ };
+ static int __pyx_CyFunction_init(void) {
+     __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
+@@ -180194,7 +180457,7 @@
+     }
+     if (!use_cline) {
+         c_line = 0;
+-        PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
++        (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
+     }
+     else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
+         c_line = 0;
+@@ -180288,33 +180551,40 @@
+ #include "compile.h"
+ #include "frameobject.h"
+ #include "traceback.h"
++#if PY_VERSION_HEX >= 0x030b00a6
++  #ifndef Py_BUILD_CORE
++    #define Py_BUILD_CORE 1
++  #endif
++  #include "internal/pycore_frame.h"
++#endif
+ static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
+             const char *funcname, int c_line,
+             int py_line, const char *filename) {
+-    PyCodeObject *py_code = 0;
+-    PyObject *py_srcfile = 0;
+-    PyObject *py_funcname = 0;
++    PyCodeObject *py_code = NULL;
++    PyObject *py_funcname = NULL;
+     #if PY_MAJOR_VERSION < 3
++    PyObject *py_srcfile = NULL;
+     py_srcfile = PyString_FromString(filename);
+-    #else
+-    py_srcfile = PyUnicode_FromString(filename);
+-    #endif
+     if (!py_srcfile) goto bad;
++    #endif
+     if (c_line) {
+         #if PY_MAJOR_VERSION < 3
+         py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
++        if (!py_funcname) goto bad;
+         #else
+         py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
++        if (!py_funcname) goto bad;
++        funcname = PyUnicode_AsUTF8(py_funcname);
++        if (!funcname) goto bad;
+         #endif
+     }
+     else {
+         #if PY_MAJOR_VERSION < 3
+         py_funcname = PyString_FromString(funcname);
+-        #else
+-        py_funcname = PyUnicode_FromString(funcname);
++        if (!py_funcname) goto bad;
+         #endif
+     }
+-    if (!py_funcname) goto bad;
++    #if PY_MAJOR_VERSION < 3
+     py_code = __Pyx_PyCode_New(
+         0,
+         0,
+@@ -180333,11 +180603,16 @@
+         __pyx_empty_bytes  /*PyObject *lnotab*/
+     );
+     Py_DECREF(py_srcfile);
+-    Py_DECREF(py_funcname);
++    #else
++    py_code = PyCode_NewEmpty(filename, funcname, py_line);
++    #endif
++    Py_XDECREF(py_funcname);  // XDECREF since it's only set on Py3 if cline
+     return py_code;
+ bad:
+-    Py_XDECREF(py_srcfile);
+     Py_XDECREF(py_funcname);
++    #if PY_MAJOR_VERSION < 3
++    Py_XDECREF(py_srcfile);
++    #endif
+     return NULL;
+ }
+ static void __Pyx_AddTraceback(const char *funcname, int c_line,
+@@ -180345,14 +180620,24 @@
+     PyCodeObject *py_code = 0;
+     PyFrameObject *py_frame = 0;
+     PyThreadState *tstate = __Pyx_PyThreadState_Current;
++    PyObject *ptype, *pvalue, *ptraceback;
+     if (c_line) {
+         c_line = __Pyx_CLineForTraceback(tstate, c_line);
+     }
+     py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
+     if (!py_code) {
++        __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
+         py_code = __Pyx_CreateCodeObjectForTraceback(
+             funcname, c_line, py_line, filename);
+-        if (!py_code) goto bad;
++        if (!py_code) {
++            /* If the code object creation fails, then we should clear the
++               fetched exception references and propagate the new exception */
++            Py_XDECREF(ptype);
++            Py_XDECREF(pvalue);
++            Py_XDECREF(ptraceback);
++            goto bad;
++        }
++        __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
+         __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
+     }
+     py_frame = PyFrame_New(
+@@ -180391,195 +180676,16 @@
+         return (target_type) value;\
+     }
+-/* CIntToPy */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Aint(MPI_Aint value) {
+-    const MPI_Aint neg_one = (MPI_Aint) ((MPI_Aint) 0 - (MPI_Aint) 1), const_zero = (MPI_Aint) 0;
+-    const int is_unsigned = neg_one > const_zero;
+-    if (is_unsigned) {
+-        if (sizeof(MPI_Aint) < sizeof(long)) {
+-            return PyInt_FromLong((long) value);
+-        } else if (sizeof(MPI_Aint) <= sizeof(unsigned long)) {
+-            return PyLong_FromUnsignedLong((unsigned long) value);
+-#ifdef HAVE_LONG_LONG
+-        } else if (sizeof(MPI_Aint) <= sizeof(unsigned PY_LONG_LONG)) {
+-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+-#endif
+-        }
+-    } else {
+-        if (sizeof(MPI_Aint) <= sizeof(long)) {
+-            return PyInt_FromLong((long) value);
+-#ifdef HAVE_LONG_LONG
+-        } else if (sizeof(MPI_Aint) <= sizeof(PY_LONG_LONG)) {
+-            return PyLong_FromLongLong((PY_LONG_LONG) value);
+-#endif
+-        }
+-    }
+-    {
+-        int one = 1; int little = (int)*(unsigned char *)&one;
+-        unsigned char *bytes = (unsigned char *)&value;
+-        return _PyLong_FromByteArray(bytes, sizeof(MPI_Aint),
+-                                     little, !is_unsigned);
+-    }
+-}
+-
+-/* CIntToPy */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+-    const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
+-    const int is_unsigned = neg_one > const_zero;
+-    if (is_unsigned) {
+-        if (sizeof(int) < sizeof(long)) {
+-            return PyInt_FromLong((long) value);
+-        } else if (sizeof(int) <= sizeof(unsigned long)) {
+-            return PyLong_FromUnsignedLong((unsigned long) value);
+-#ifdef HAVE_LONG_LONG
+-        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
+-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+-#endif
+-        }
+-    } else {
+-        if (sizeof(int) <= sizeof(long)) {
+-            return PyInt_FromLong((long) value);
+-#ifdef HAVE_LONG_LONG
+-        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
+-            return PyLong_FromLongLong((PY_LONG_LONG) value);
+-#endif
+-        }
+-    }
+-    {
+-        int one = 1; int little = (int)*(unsigned char *)&one;
+-        unsigned char *bytes = (unsigned char *)&value;
+-        return _PyLong_FromByteArray(bytes, sizeof(int),
+-                                     little, !is_unsigned);
+-    }
+-}
+-
+-/* CIntToPy */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+-    const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
+-    const int is_unsigned = neg_one > const_zero;
+-    if (is_unsigned) {
+-        if (sizeof(long) < sizeof(long)) {
+-            return PyInt_FromLong((long) value);
+-        } else if (sizeof(long) <= sizeof(unsigned long)) {
+-            return PyLong_FromUnsignedLong((unsigned long) value);
+-#ifdef HAVE_LONG_LONG
+-        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
+-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+-#endif
+-        }
+-    } else {
+-        if (sizeof(long) <= sizeof(long)) {
+-            return PyInt_FromLong((long) value);
+-#ifdef HAVE_LONG_LONG
+-        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
+-            return PyLong_FromLongLong((PY_LONG_LONG) value);
+-#endif
+-        }
+-    }
+-    {
+-        int one = 1; int little = (int)*(unsigned char *)&one;
+-        unsigned char *bytes = (unsigned char *)&value;
+-        return _PyLong_FromByteArray(bytes, sizeof(long),
+-                                     little, !is_unsigned);
+-    }
+-}
+-
+-/* CIntToPy */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Offset(MPI_Offset value) {
+-    const MPI_Offset neg_one = (MPI_Offset) ((MPI_Offset) 0 - (MPI_Offset) 1), const_zero = (MPI_Offset) 0;
+-    const int is_unsigned = neg_one > const_zero;
+-    if (is_unsigned) {
+-        if (sizeof(MPI_Offset) < sizeof(long)) {
+-            return PyInt_FromLong((long) value);
+-        } else if (sizeof(MPI_Offset) <= sizeof(unsigned long)) {
+-            return PyLong_FromUnsignedLong((unsigned long) value);
+-#ifdef HAVE_LONG_LONG
+-        } else if (sizeof(MPI_Offset) <= sizeof(unsigned PY_LONG_LONG)) {
+-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+-#endif
+-        }
+-    } else {
+-        if (sizeof(MPI_Offset) <= sizeof(long)) {
+-            return PyInt_FromLong((long) value);
+-#ifdef HAVE_LONG_LONG
+-        } else if (sizeof(MPI_Offset) <= sizeof(PY_LONG_LONG)) {
+-            return PyLong_FromLongLong((PY_LONG_LONG) value);
+-#endif
+-        }
+-    }
+-    {
+-        int one = 1; int little = (int)*(unsigned char *)&one;
+-        unsigned char *bytes = (unsigned char *)&value;
+-        return _PyLong_FromByteArray(bytes, sizeof(MPI_Offset),
+-                                     little, !is_unsigned);
+-    }
+-}
+-
+-/* CIntToPy */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Fint(MPI_Fint value) {
+-    const MPI_Fint neg_one = (MPI_Fint) ((MPI_Fint) 0 - (MPI_Fint) 1), const_zero = (MPI_Fint) 0;
+-    const int is_unsigned = neg_one > const_zero;
+-    if (is_unsigned) {
+-        if (sizeof(MPI_Fint) < sizeof(long)) {
+-            return PyInt_FromLong((long) value);
+-        } else if (sizeof(MPI_Fint) <= sizeof(unsigned long)) {
+-            return PyLong_FromUnsignedLong((unsigned long) value);
+-#ifdef HAVE_LONG_LONG
+-        } else if (sizeof(MPI_Fint) <= sizeof(unsigned PY_LONG_LONG)) {
+-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+-#endif
+-        }
+-    } else {
+-        if (sizeof(MPI_Fint) <= sizeof(long)) {
+-            return PyInt_FromLong((long) value);
+-#ifdef HAVE_LONG_LONG
+-        } else if (sizeof(MPI_Fint) <= sizeof(PY_LONG_LONG)) {
+-            return PyLong_FromLongLong((PY_LONG_LONG) value);
+-#endif
+-        }
+-    }
+-    {
+-        int one = 1; int little = (int)*(unsigned char *)&one;
+-        unsigned char *bytes = (unsigned char *)&value;
+-        return _PyLong_FromByteArray(bytes, sizeof(MPI_Fint),
+-                                     little, !is_unsigned);
+-    }
+-}
+-
+-/* CIntToPy */
+-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Count(MPI_Count value) {
+-    const MPI_Count neg_one = (MPI_Count) ((MPI_Count) 0 - (MPI_Count) 1), const_zero = (MPI_Count) 0;
+-    const int is_unsigned = neg_one > const_zero;
+-    if (is_unsigned) {
+-        if (sizeof(MPI_Count) < sizeof(long)) {
+-            return PyInt_FromLong((long) value);
+-        } else if (sizeof(MPI_Count) <= sizeof(unsigned long)) {
+-            return PyLong_FromUnsignedLong((unsigned long) value);
+-#ifdef HAVE_LONG_LONG
+-        } else if (sizeof(MPI_Count) <= sizeof(unsigned PY_LONG_LONG)) {
+-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+-#endif
+-        }
+-    } else {
+-        if (sizeof(MPI_Count) <= sizeof(long)) {
+-            return PyInt_FromLong((long) value);
+-#ifdef HAVE_LONG_LONG
+-        } else if (sizeof(MPI_Count) <= sizeof(PY_LONG_LONG)) {
+-            return PyLong_FromLongLong((PY_LONG_LONG) value);
+-#endif
+-        }
+-    }
+-    {
+-        int one = 1; int little = (int)*(unsigned char *)&one;
+-        unsigned char *bytes = (unsigned char *)&value;
+-        return _PyLong_FromByteArray(bytes, sizeof(MPI_Count),
+-                                     little, !is_unsigned);
+-    }
+-}
+-
+ /* CIntFromPy */
+ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+-    const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const int neg_one = (int) -1, const_zero = (int) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
+     const int is_unsigned = neg_one > const_zero;
+ #if PY_MAJOR_VERSION < 3
+     if (likely(PyInt_Check(x))) {
+@@ -180597,7 +180703,7 @@
+     if (likely(PyLong_Check(x))) {
+         if (is_unsigned) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (int) 0;
+                 case  1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0])
+@@ -180652,7 +180758,7 @@
+             }
+         } else {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (int) 0;
+                 case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0]))
+@@ -180766,9 +180872,92 @@
+     return (int) -1;
+ }
++/* CIntToPy */
++static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Aint(MPI_Aint value) {
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const MPI_Aint neg_one = (MPI_Aint) -1, const_zero = (MPI_Aint) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
++    const int is_unsigned = neg_one > const_zero;
++    if (is_unsigned) {
++        if (sizeof(MPI_Aint) < sizeof(long)) {
++            return PyInt_FromLong((long) value);
++        } else if (sizeof(MPI_Aint) <= sizeof(unsigned long)) {
++            return PyLong_FromUnsignedLong((unsigned long) value);
++#ifdef HAVE_LONG_LONG
++        } else if (sizeof(MPI_Aint) <= sizeof(unsigned PY_LONG_LONG)) {
++            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
++#endif
++        }
++    } else {
++        if (sizeof(MPI_Aint) <= sizeof(long)) {
++            return PyInt_FromLong((long) value);
++#ifdef HAVE_LONG_LONG
++        } else if (sizeof(MPI_Aint) <= sizeof(PY_LONG_LONG)) {
++            return PyLong_FromLongLong((PY_LONG_LONG) value);
++#endif
++        }
++    }
++    {
++        int one = 1; int little = (int)*(unsigned char *)&one;
++        unsigned char *bytes = (unsigned char *)&value;
++        return _PyLong_FromByteArray(bytes, sizeof(MPI_Aint),
++                                     little, !is_unsigned);
++    }
++}
++
++/* CIntToPy */
++static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const int neg_one = (int) -1, const_zero = (int) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
++    const int is_unsigned = neg_one > const_zero;
++    if (is_unsigned) {
++        if (sizeof(int) < sizeof(long)) {
++            return PyInt_FromLong((long) value);
++        } else if (sizeof(int) <= sizeof(unsigned long)) {
++            return PyLong_FromUnsignedLong((unsigned long) value);
++#ifdef HAVE_LONG_LONG
++        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
++            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
++#endif
++        }
++    } else {
++        if (sizeof(int) <= sizeof(long)) {
++            return PyInt_FromLong((long) value);
++#ifdef HAVE_LONG_LONG
++        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
++            return PyLong_FromLongLong((PY_LONG_LONG) value);
++#endif
++        }
++    }
++    {
++        int one = 1; int little = (int)*(unsigned char *)&one;
++        unsigned char *bytes = (unsigned char *)&value;
++        return _PyLong_FromByteArray(bytes, sizeof(int),
++                                     little, !is_unsigned);
++    }
++}
++
+ /* CIntFromPy */
+ static CYTHON_INLINE MPI_Aint __Pyx_PyInt_As_MPI_Aint(PyObject *x) {
+-    const MPI_Aint neg_one = (MPI_Aint) ((MPI_Aint) 0 - (MPI_Aint) 1), const_zero = (MPI_Aint) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const MPI_Aint neg_one = (MPI_Aint) -1, const_zero = (MPI_Aint) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
+     const int is_unsigned = neg_one > const_zero;
+ #if PY_MAJOR_VERSION < 3
+     if (likely(PyInt_Check(x))) {
+@@ -180786,7 +180975,7 @@
+     if (likely(PyLong_Check(x))) {
+         if (is_unsigned) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (MPI_Aint) 0;
+                 case  1: __PYX_VERIFY_RETURN_INT(MPI_Aint, digit, digits[0])
+@@ -180841,7 +181030,7 @@
+             }
+         } else {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (MPI_Aint) 0;
+                 case -1: __PYX_VERIFY_RETURN_INT(MPI_Aint, sdigit, (sdigit) (-(sdigit)digits[0]))
+@@ -180957,7 +181146,14 @@
+ /* CIntFromPy */
+ static CYTHON_INLINE MPI_Count __Pyx_PyInt_As_MPI_Count(PyObject *x) {
+-    const MPI_Count neg_one = (MPI_Count) ((MPI_Count) 0 - (MPI_Count) 1), const_zero = (MPI_Count) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const MPI_Count neg_one = (MPI_Count) -1, const_zero = (MPI_Count) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
+     const int is_unsigned = neg_one > const_zero;
+ #if PY_MAJOR_VERSION < 3
+     if (likely(PyInt_Check(x))) {
+@@ -180975,7 +181171,7 @@
+     if (likely(PyLong_Check(x))) {
+         if (is_unsigned) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (MPI_Count) 0;
+                 case  1: __PYX_VERIFY_RETURN_INT(MPI_Count, digit, digits[0])
+@@ -181030,7 +181226,7 @@
+             }
+         } else {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (MPI_Count) 0;
+                 case -1: __PYX_VERIFY_RETURN_INT(MPI_Count, sdigit, (sdigit) (-(sdigit)digits[0]))
+@@ -181146,7 +181342,14 @@
+ /* CIntFromPy */
+ static CYTHON_INLINE MPI_Offset __Pyx_PyInt_As_MPI_Offset(PyObject *x) {
+-    const MPI_Offset neg_one = (MPI_Offset) ((MPI_Offset) 0 - (MPI_Offset) 1), const_zero = (MPI_Offset) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const MPI_Offset neg_one = (MPI_Offset) -1, const_zero = (MPI_Offset) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
+     const int is_unsigned = neg_one > const_zero;
+ #if PY_MAJOR_VERSION < 3
+     if (likely(PyInt_Check(x))) {
+@@ -181164,7 +181367,7 @@
+     if (likely(PyLong_Check(x))) {
+         if (is_unsigned) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (MPI_Offset) 0;
+                 case  1: __PYX_VERIFY_RETURN_INT(MPI_Offset, digit, digits[0])
+@@ -181219,7 +181422,7 @@
+             }
+         } else {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (MPI_Offset) 0;
+                 case -1: __PYX_VERIFY_RETURN_INT(MPI_Offset, sdigit, (sdigit) (-(sdigit)digits[0]))
+@@ -181333,9 +181536,54 @@
+     return (MPI_Offset) -1;
+ }
++/* CIntToPy */
++static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const long neg_one = (long) -1, const_zero = (long) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
++    const int is_unsigned = neg_one > const_zero;
++    if (is_unsigned) {
++        if (sizeof(long) < sizeof(long)) {
++            return PyInt_FromLong((long) value);
++        } else if (sizeof(long) <= sizeof(unsigned long)) {
++            return PyLong_FromUnsignedLong((unsigned long) value);
++#ifdef HAVE_LONG_LONG
++        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
++            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
++#endif
++        }
++    } else {
++        if (sizeof(long) <= sizeof(long)) {
++            return PyInt_FromLong((long) value);
++#ifdef HAVE_LONG_LONG
++        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
++            return PyLong_FromLongLong((PY_LONG_LONG) value);
++#endif
++        }
++    }
++    {
++        int one = 1; int little = (int)*(unsigned char *)&one;
++        unsigned char *bytes = (unsigned char *)&value;
++        return _PyLong_FromByteArray(bytes, sizeof(long),
++                                     little, !is_unsigned);
++    }
++}
++
+ /* CIntFromPy */
+ static CYTHON_INLINE unsigned char __Pyx_PyInt_As_unsigned_char(PyObject *x) {
+-    const unsigned char neg_one = (unsigned char) ((unsigned char) 0 - (unsigned char) 1), const_zero = (unsigned char) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const unsigned char neg_one = (unsigned char) -1, const_zero = (unsigned char) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
+     const int is_unsigned = neg_one > const_zero;
+ #if PY_MAJOR_VERSION < 3
+     if (likely(PyInt_Check(x))) {
+@@ -181353,7 +181601,7 @@
+     if (likely(PyLong_Check(x))) {
+         if (is_unsigned) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (unsigned char) 0;
+                 case  1: __PYX_VERIFY_RETURN_INT(unsigned char, digit, digits[0])
+@@ -181408,7 +181656,7 @@
+             }
+         } else {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (unsigned char) 0;
+                 case -1: __PYX_VERIFY_RETURN_INT(unsigned char, sdigit, (sdigit) (-(sdigit)digits[0]))
+@@ -181522,9 +181770,92 @@
+     return (unsigned char) -1;
+ }
++/* CIntToPy */
++static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Offset(MPI_Offset value) {
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const MPI_Offset neg_one = (MPI_Offset) -1, const_zero = (MPI_Offset) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
++    const int is_unsigned = neg_one > const_zero;
++    if (is_unsigned) {
++        if (sizeof(MPI_Offset) < sizeof(long)) {
++            return PyInt_FromLong((long) value);
++        } else if (sizeof(MPI_Offset) <= sizeof(unsigned long)) {
++            return PyLong_FromUnsignedLong((unsigned long) value);
++#ifdef HAVE_LONG_LONG
++        } else if (sizeof(MPI_Offset) <= sizeof(unsigned PY_LONG_LONG)) {
++            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
++#endif
++        }
++    } else {
++        if (sizeof(MPI_Offset) <= sizeof(long)) {
++            return PyInt_FromLong((long) value);
++#ifdef HAVE_LONG_LONG
++        } else if (sizeof(MPI_Offset) <= sizeof(PY_LONG_LONG)) {
++            return PyLong_FromLongLong((PY_LONG_LONG) value);
++#endif
++        }
++    }
++    {
++        int one = 1; int little = (int)*(unsigned char *)&one;
++        unsigned char *bytes = (unsigned char *)&value;
++        return _PyLong_FromByteArray(bytes, sizeof(MPI_Offset),
++                                     little, !is_unsigned);
++    }
++}
++
++/* CIntToPy */
++static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Fint(MPI_Fint value) {
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const MPI_Fint neg_one = (MPI_Fint) -1, const_zero = (MPI_Fint) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
++    const int is_unsigned = neg_one > const_zero;
++    if (is_unsigned) {
++        if (sizeof(MPI_Fint) < sizeof(long)) {
++            return PyInt_FromLong((long) value);
++        } else if (sizeof(MPI_Fint) <= sizeof(unsigned long)) {
++            return PyLong_FromUnsignedLong((unsigned long) value);
++#ifdef HAVE_LONG_LONG
++        } else if (sizeof(MPI_Fint) <= sizeof(unsigned PY_LONG_LONG)) {
++            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
++#endif
++        }
++    } else {
++        if (sizeof(MPI_Fint) <= sizeof(long)) {
++            return PyInt_FromLong((long) value);
++#ifdef HAVE_LONG_LONG
++        } else if (sizeof(MPI_Fint) <= sizeof(PY_LONG_LONG)) {
++            return PyLong_FromLongLong((PY_LONG_LONG) value);
++#endif
++        }
++    }
++    {
++        int one = 1; int little = (int)*(unsigned char *)&one;
++        unsigned char *bytes = (unsigned char *)&value;
++        return _PyLong_FromByteArray(bytes, sizeof(MPI_Fint),
++                                     little, !is_unsigned);
++    }
++}
++
+ /* CIntFromPy */
+ static CYTHON_INLINE MPI_Fint __Pyx_PyInt_As_MPI_Fint(PyObject *x) {
+-    const MPI_Fint neg_one = (MPI_Fint) ((MPI_Fint) 0 - (MPI_Fint) 1), const_zero = (MPI_Fint) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const MPI_Fint neg_one = (MPI_Fint) -1, const_zero = (MPI_Fint) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
+     const int is_unsigned = neg_one > const_zero;
+ #if PY_MAJOR_VERSION < 3
+     if (likely(PyInt_Check(x))) {
+@@ -181542,7 +181873,7 @@
+     if (likely(PyLong_Check(x))) {
+         if (is_unsigned) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (MPI_Fint) 0;
+                 case  1: __PYX_VERIFY_RETURN_INT(MPI_Fint, digit, digits[0])
+@@ -181597,7 +181928,7 @@
+             }
+         } else {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (MPI_Fint) 0;
+                 case -1: __PYX_VERIFY_RETURN_INT(MPI_Fint, sdigit, (sdigit) (-(sdigit)digits[0]))
+@@ -181711,9 +182042,54 @@
+     return (MPI_Fint) -1;
+ }
++/* CIntToPy */
++static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Count(MPI_Count value) {
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const MPI_Count neg_one = (MPI_Count) -1, const_zero = (MPI_Count) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
++    const int is_unsigned = neg_one > const_zero;
++    if (is_unsigned) {
++        if (sizeof(MPI_Count) < sizeof(long)) {
++            return PyInt_FromLong((long) value);
++        } else if (sizeof(MPI_Count) <= sizeof(unsigned long)) {
++            return PyLong_FromUnsignedLong((unsigned long) value);
++#ifdef HAVE_LONG_LONG
++        } else if (sizeof(MPI_Count) <= sizeof(unsigned PY_LONG_LONG)) {
++            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
++#endif
++        }
++    } else {
++        if (sizeof(MPI_Count) <= sizeof(long)) {
++            return PyInt_FromLong((long) value);
++#ifdef HAVE_LONG_LONG
++        } else if (sizeof(MPI_Count) <= sizeof(PY_LONG_LONG)) {
++            return PyLong_FromLongLong((PY_LONG_LONG) value);
++#endif
++        }
++    }
++    {
++        int one = 1; int little = (int)*(unsigned char *)&one;
++        unsigned char *bytes = (unsigned char *)&value;
++        return _PyLong_FromByteArray(bytes, sizeof(MPI_Count),
++                                     little, !is_unsigned);
++    }
++}
++
+ /* CIntFromPy */
+ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+-    const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic push
++#pragma GCC diagnostic ignored "-Wconversion"
++#endif
++    const long neg_one = (long) -1, const_zero = (long) 0;
++#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
++#pragma GCC diagnostic pop
++#endif
+     const int is_unsigned = neg_one > const_zero;
+ #if PY_MAJOR_VERSION < 3
+     if (likely(PyInt_Check(x))) {
+@@ -181731,7 +182107,7 @@
+     if (likely(PyLong_Check(x))) {
+         if (is_unsigned) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (long) 0;
+                 case  1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0])
+@@ -181786,7 +182162,7 @@
+             }
+         } else {
+ #if CYTHON_USE_PYLONG_INTERNALS
+-            const digit* digits = ((PyLongObject*)x)->ob_digit;
++            const digit* digits = ((PyLongObject*)x)->long_value.ob_digit;
+             switch (Py_SIZE(x)) {
+                 case  0: return (long) 0;
+                 case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0]))
+@@ -182002,11 +182378,33 @@
+ /* CheckBinaryVersion */
+ static int __Pyx_check_binary_version(void) {
+-    char ctversion[4], rtversion[4];
+-    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
+-    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
+-    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
++    char ctversion[5];
++    int same=1, i, found_dot;
++    const char* rt_from_call = Py_GetVersion();
++    PyOS_snprintf(ctversion, 5, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
++    found_dot = 0;
++    for (i = 0; i < 4; i++) {
++        if (!ctversion[i]) {
++            same = (rt_from_call[i] < '0' || rt_from_call[i] > '9');
++            break;
++        }
++        if (rt_from_call[i] != ctversion[i]) {
++            same = 0;
++            break;
++        }
++    }
++    if (!same) {
++        char rtversion[5] = {'\0'};
+         char message[200];
++        for (i=0; i<4; ++i) {
++            if (rt_from_call[i] == '.') {
++                if (found_dot) break;
++                found_dot = 1;
++            } else if (rt_from_call[i] < '0' || rt_from_call[i] > '9') {
++                break;
++            }
++            rtversion[i] = rt_from_call[i];
++        }
+         PyOS_snprintf(message, sizeof(message),
+                       "compiletime version %s of module '%.100s' "
+                       "does not match runtime version %s",
+@@ -182252,7 +182650,7 @@
+ #endif
+   if (likely(PyLong_CheckExact(b))) {
+     #if CYTHON_USE_PYLONG_INTERNALS
+-    const digit* digits = ((PyLongObject*)b)->ob_digit;
++    const digit* digits = ((PyLongObject*)b)->long_value.ob_digit;
+     const Py_ssize_t size = Py_SIZE(b);
+     if (likely(__Pyx_sst_abs(size) <= 1)) {
+         ival = likely(size) ? digits[0] : 0;
+@@ -182301,6 +182699,23 @@
+   Py_DECREF(x);
+   return ival;
+ }
++static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
++  if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
++    return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
++#if PY_MAJOR_VERSION < 3
++  } else if (likely(PyInt_CheckExact(o))) {
++    return PyInt_AS_LONG(o);
++#endif
++  } else {
++    Py_ssize_t ival;
++    PyObject *x;
++    x = PyNumber_Index(o);
++    if (!x) return -1;
++    ival = PyInt_AsLong(x);
++    Py_DECREF(x);
++    return ival;
++  }
++}
+ static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
+   return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
+ }
diff --git a/products/patches/paraview-5.11.0.p012-skip-FindTBB.patch b/products/patches/paraview-5.11.0.p012-skip-FindTBB.patch
new file mode 100644 (file)
index 0000000..dd933d3
--- /dev/null
@@ -0,0 +1,72 @@
+--- ParaView/VTK/CMake/vtkModule.cmake 2022-11-18 15:26:52.000000000 +0100
++++ ParaView/VTK/CMake/vtkModule.cmake 2024-07-03 09:08:03.853091754 +0200
+@@ -4900,26 +4900,49 @@
+       if (_vtk_export_exact)
+         set(_vtk_export_exact_arg EXACT)
+       endif ()
+-
+-      set(_vtk_export_module_content
+-"  find_package(${_vtk_export_package}
+-    ${_vtk_export_version}
+-    ${_vtk_export_exact_arg}
+-    ${_vtk_export_config_arg}
+-    \${_vtk_module_find_package_quiet}
+-    \${_vtk_module_find_package_required}
+-    COMPONENTS          ${_vtk_export_components}
+-    OPTIONAL_COMPONENTS ${_vtk_export_optional_components})
+-  if (NOT ${_vtk_export_package}_FOUND AND _vtk_module_find_package_fail_if_not_found)
+-    if (NOT \${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
+-      message(STATUS
+-        \"Could not find the \${CMAKE_FIND_PACKAGE_NAME} package due to a \"
+-        \"missing dependency: ${_vtk_export_package}\")
+-    endif ()
+-    set(\"\${CMAKE_FIND_PACKAGE_NAME}_${_vtk_export_target_name}_FOUND\" 0)
+-    list(APPEND \"\${CMAKE_FIND_PACKAGE_NAME}_${_vtk_export_target_name}_NOT_FOUND_MESSAGE\"
+-      \"Failed to find the ${_vtk_export_package} package.\")
+-  endif ()\n")
++      if ("TBB" STREQUAL ${_vtk_export_package})
++        set(_vtk_export_module_content
++          " if (NOT TARGET TBB::tbb)  
++  find_package(${_vtk_export_package}
++      ${_vtk_export_version}
++      ${_vtk_export_exact_arg}
++      ${_vtk_export_config_arg}
++      \${_vtk_module_find_package_quiet}
++      \${_vtk_module_find_package_required}
++      COMPONENTS          ${_vtk_export_components}
++      OPTIONAL_COMPONENTS ${_vtk_export_optional_components})
++  endif()
++    if (NOT ${_vtk_export_package}_FOUND AND _vtk_module_find_package_fail_if_not_found)
++      if (NOT \${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
++        message(STATUS
++          \"Could not find the \${CMAKE_FIND_PACKAGE_NAME} package due to a \"
++          \"missing dependency: ${_vtk_export_package}\")
++      endif ()
++      set(\"\${CMAKE_FIND_PACKAGE_NAME}_${_vtk_export_target_name}_FOUND\" 0)
++      list(APPEND \"\${CMAKE_FIND_PACKAGE_NAME}_${_vtk_export_target_name}_NOT_FOUND_MESSAGE\"
++        \"Failed to find the ${_vtk_export_package} package.\")
++    endif ()\n")
++      else()
++        set(_vtk_export_module_content
++  "  find_package(${_vtk_export_package}
++      ${_vtk_export_version}
++      ${_vtk_export_exact_arg}
++      ${_vtk_export_config_arg}
++      \${_vtk_module_find_package_quiet}
++      \${_vtk_module_find_package_required}
++      COMPONENTS          ${_vtk_export_components}
++      OPTIONAL_COMPONENTS ${_vtk_export_optional_components})
++    if (NOT ${_vtk_export_package}_FOUND AND _vtk_module_find_package_fail_if_not_found)
++      if (NOT \${CMAKE_FIND_PACKAGE_NAME}_FIND_QUIETLY)
++        message(STATUS
++          \"Could not find the \${CMAKE_FIND_PACKAGE_NAME} package due to a \"
++          \"missing dependency: ${_vtk_export_package}\")
++      endif ()
++      set(\"\${CMAKE_FIND_PACKAGE_NAME}_${_vtk_export_target_name}_FOUND\" 0)
++      list(APPEND \"\${CMAKE_FIND_PACKAGE_NAME}_${_vtk_export_target_name}_NOT_FOUND_MESSAGE\"
++        \"Failed to find the ${_vtk_export_package} package.\")
++    endif ()\n")
++      endif()
+       string(APPEND _vtk_export_module_build_content "${_vtk_export_module_content}")
+       # Private usages should be guarded by `$<BUILD_INTERFACE>` and can be
diff --git a/products/patches/rkCommon-1.5.1-skip-FindTBB.patch b/products/patches/rkCommon-1.5.1-skip-FindTBB.patch
new file mode 100644 (file)
index 0000000..611189b
--- /dev/null
@@ -0,0 +1,13 @@
+--- rkCommon/cmake/rkcommon_macros.cmake       2021-02-09 12:57:36.000000000 +0100
++++ rkCommon/cmake/rkcommon_macros.cmake       2024-07-03 11:13:34.044426549 +0200
+@@ -177,7 +177,9 @@
+     endif()
+     # Try getting TBB via config first
+-    find_package(TBB 2021.1 QUIET COMPONENTS tbb tbbmalloc CONFIG)
++    if (NOT TARGET TBB::tbb)
++      find_package(TBB 2021.1 QUIET COMPONENTS tbb tbbmalloc CONFIG)
++    endif()
+     if (TBB_FOUND)
+       list(APPEND RKCOMMON_TASKING_LIBS TBB::tbb TBB::tbbmalloc)
+       set(RKCOMMON_TASKING_DEFINITIONS RKCOMMON_TASKING_TBB)
index 3bad8c3f7ef2e5c103b773f949ebf3f4183a164c..3eefc52053e66654db4d75c87dc34c6a6231cc3d 100644 (file)
@@ -21,6 +21,19 @@ default :
     post_script: "fix_permissions.sh"
 }
 
+version_3_20_5 :
+{
+    compil_script :  "petsc-3.20.5.sh"
+    depend : ["hdf5", "Python", "lapack","fftw", "llvm", "metis", "medfile", "mpi4py", "scotch" ]
+}
+
+version_3_19_4 :
+{
+    compil_script :  "petsc-3.19.4.sh"
+    depend : ["hdf5", "Python", "lapack","fftw", "llvm", "metis", "medfile" ]
+    patches: ['petsc-3.19.4-mpi4py.patch','petsc-3.19.4-libpath.patch']
+}
+
 version_3_17_0 :
 {
     compil_script :  "petsc-3.17.0.sh"
index 2cb8ab036f5cccc78791be5e3921f8f656bccd54..b934b84fbd9d642ebcd9583cacf7c5bd5aa59b47 100644 (file)
@@ -27,3 +27,8 @@ default_win :
       single_install_dir : "yes"
     }
 }
+
+version_1_5_1_UB24_04 :
+{
+  patches: ['rkCommon-1.5.1-skip-FindTBB.patch']
+}
index 6fa9b8c2ebd4749596a254926592a3ab9c7ea360..d5e5477d20ba7f18546217bd30920996bde30b2f 100644 (file)
@@ -22,7 +22,7 @@ default :
                    "libXpm-devel", "libXft-devel", "sqlite-devel", "libcurl-devel", "libXt-devel", "libXcursor-devel", "tbb-devel"]
         apt : ["libbsd0", "libbz2-1.0", "libc6", "libdrm2", "libegl1", "libexif12", "libexpat1",
                "libfftw3-double3", "libfontconfig1", "libgl1", "libglu1-mesa", "libgomp1", "libgphoto2-6", "libice6",
-               "libjbig0", "libltdl7", "liblzma5", "libncurses5", "libnuma1", "libpcre3", "libquadmath0",
+               "libjbig0", "libltdl7", "liblzma5", "libnuma1", "libpcre3", "libquadmath0",
                "libraw1394-11", "libsm6", "libstdc++6", "libtiff5", "libudev1", "libusb-1.0-0", "libuuid1", "libx11-6",
                "libx11-xcb1", "libxau6", "libxcb1", "libxcb-glx0", "libxcb-xfixes0", "libxcb-xkb1", "libxdmcp6",
                "libxext6", "libxft2", "libxi6", "libxkbcommon0", "libxkbcommon-x11-0", "libxmu6", "libxpm4", "libxrender1",
@@ -36,15 +36,15 @@ default :
         # specific to some platform(s)
         "CO7" :
         {
-            rpm : ["lz4", "gsl", "libgeotiff", "giflib", "geos", "fftw", "postgresql-libs", "pcllib", "libxml++"]
-            rpm_dev : ["perl", "gsl-devel", "libpng-devel", "libtiff-devel", "libgeotiff-devel", "giflib-devel", "geos-devel", "fftw-devel", "devtoolset-8-gcc", "texlive-dvipng", "libxml++-devel"]
+            rpm : ["lz4", "gsl", "libgeotiff", "giflib", "geos", "fftw", "postgresql-libs", "pcllib", "libxml++", "freetype"]
+            rpm_dev : ["perl", "gsl-devel", "libpng-devel", "libtiff-devel", "libgeotiff-devel", "giflib-devel", "geos-devel", "fftw-devel", "devtoolset-8-gcc", "texlive-dvipng", "libxml++-devel", "freetype-devel"]
         }
         "CO8" :
         {
-            rpm : ["lz4", "openmpi", "gsl", "libgeotiff", "giflib", "geos", "sqlite", "netcdf", "libxml++"]
+            rpm : ["lz4", "openmpi", "gsl", "libgeotiff", "giflib", "geos", "sqlite", "netcdf", "libxml++", "freetype"]
             rpm_dev : ["perl-interpreter", "qt5-devel", "openmpi-devel", "gsl-devel", "libpng-devel", "libtiff-devel", "libgeotiff-devel", "giflib-devel", "geos-devel", "netcdf-devel", "texlive-dvipng",
                        "libxml++-devel", "xcb-util-cursor-devel", "xcb-util-image-devel", "xcb-util-keysyms-devel", "xcb-util-renderutil-devel", "xcb-util-wm-devel",
-                       "libXrender-devel", "libxkbcommon-devel", "libxkbcommon-x11-devel", "libXi-devel", "libXcursor-devel", "libXcomposite-devel"] # libdrm-devel xcb-util-xrm-devel
+                       "libXrender-devel", "libxkbcommon-devel", "libxkbcommon-x11-devel", "libXi-devel", "libXcursor-devel", "libXcomposite-devel", "freetype-devel"] # libdrm-devel xcb-util-xrm-devel
         }
         "CO9" :
         {
@@ -61,23 +61,23 @@ default :
         }
         "FD32" :
         {
-           rpm : ["lz4", "gsl", "openmpi", "netcdf", "python3-netcdf4", "gdal", "libxml++"]
-           rpm_dev : ["perl-interpreter", "qt5-devel", "gsl-devel", "openmpi-devel", "netcdf-devel", "protobuf-devel", "python3-protobuf", "texlive-dvipng", "libxml++-devel"]
+           rpm : ["lz4", "gsl", "openmpi", "netcdf", "python3-netcdf4", "gdal", "libxml++", "freetype"]
+           rpm_dev : ["perl-interpreter", "qt5-devel", "gsl-devel", "openmpi-devel", "netcdf-devel", "protobuf-devel", "python3-protobuf", "texlive-dvipng", "libxml++-devel", "freetype-devel"]
         }
         "FD34" :
         {
-           rpm : ["lz4-libs", "gsl", "openmpi", "netcdf", "gdal", "libxml++"]
-           rpm_dev : ["lz4-devel", "qt5-qtbase-devel", "gsl-devel", "openmpi-devel", "netcdf-devel", "gdal-devel", "texlive-dvipng", "libxml++-devel"]
+           rpm : ["lz4-libs", "gsl", "openmpi", "netcdf", "gdal", "libxml++", "freetype"]
+           rpm_dev : ["lz4-devel", "qt5-qtbase-devel", "gsl-devel", "openmpi-devel", "netcdf-devel", "gdal-devel", "texlive-dvipng", "libxml++-devel", "freetype-devel"]
         }
         "FD36" :
         {
-           rpm : ["lz4-libs", "gsl", "openmpi", "netcdf", "gdal", "libxml++"]
-           rpm_dev : ["lz4-devel", "qt5-qtbase-devel", "gsl-devel", "openmpi-devel", "netcdf-devel", "gdal-devel", "libxml++-devel"]
+           rpm : ["lz4-libs", "gsl", "openmpi", "netcdf", "gdal", "libxml++", "freetype"]
+           rpm_dev : ["lz4-devel", "qt5-qtbase-devel", "gsl-devel", "openmpi-devel", "netcdf-devel", "gdal-devel", "libxml++-devel", "freetype-devel"]
         }
         "FD38" :
         {
-           rpm : ["lz4-libs", "gsl", "openmpi", "netcdf", "gdal", "libxml++"]
-           rpm_dev : ["lz4-devel", "qt5-qtbase-devel", "gsl-devel", "openmpi-devel", "netcdf-devel", "gdal-devel", "libxml++-devel"]
+           rpm : ["lz4-libs", "gsl", "openmpi", "netcdf", "gdal", "libxml++", "freetype"]
+           rpm_dev : ["lz4-devel", "qt5-qtbase-devel", "gsl-devel", "openmpi-devel", "netcdf-devel", "gdal-devel", "libxml++-devel", "freetype-devel"]
         }
         "DB08" :
         {
@@ -87,19 +87,19 @@ default :
         "DB09" :
         {
             apt : ["libdc1394-22", "libopenexr22", "libwebp6", "libgfortran3", "libilmbase12", "libevent-2.0-5", "libpng16-16", "libgcc-6-dev",
-                   "libffi6", "libtinfo5", "libgphoto2-port12", "libglx0", "libopengl0", "libjsoncpp1", "libtbb2"]
+                   "libffi6", "libtinfo5", "libgphoto2-port12", "libglx0", "libopengl0", "libjsoncpp1", "libtbb2", "libfreetype6", "libncurses5"]
             apt_dev : ["libtbb-dev", "libpng-dev", "libtiff5-dev", "libgeotiff-dev", "libjpeg-dev", "libgif-dev", "libgeos-dev", "libsqlite3-dev", "texlive-latex-base", "texlive-latex-extra", "dvipng",
                        "libxcb1-dev", "libxcb-composite0-dev", "libxcb-cursor-dev", "libxcb-damage0-dev", "libxcb-dpms0-dev", "libxcb-dri2-0-dev", "libxcb-dri3-dev",
                        "libxcb-glx0-dev", "libxcb-screensaver0-dev", "libxcb-util0-dev", "libxcb-present-dev", "libxcb-randr0-dev", "libxcb-record0-dev", "libxcb-render0-dev",
                        "libxcb-res0-dev", "libxcb-shape0-dev", "libxcb-shm0-dev", "libxcb-sync-dev", "libxcb-xf86dri0-dev", "libxcb-xfixes0-dev", "libxcb-xinerama0-dev",
                        "libxcb-xkb-dev", "libxcb-xtest0-dev", "libxcb-xv0-dev", "libxcb-xvmc0-dev", "libxcb-image0-dev", "libxcb-keysyms1-dev", "libxcb-render-util0-dev",
-                       "libxcb-ewmh-dev", "libxcb-icccm4-dev", "libxcb-xrm-dev"]
+                       "libxcb-ewmh-dev", "libxcb-icccm4-dev", "libxcb-xrm-dev", "libfreetype6-dev"]
         }
         "DB10" :
         {
             apt : ["libdc1394-22", "libopenexr23", "libwebp6", "libgfortran5", "libilmbase23", "libevent-2.1-6", "libpng16-16", "libgcc-8-dev",
                    "libffi6", "libtinfo6", "libgphoto2-port12", "libglx0", "libopengl0", "libzstd1", "libglvnd0", "libjsoncpp1", "libopenblas-base", "libscotch-6.0", "openmpi-bin",
-                   "libnetcdf13", "libgdal20", "libtbb2", "libxml++2.6-2v5"]
+                   "libnetcdf13", "libgdal20", "libtbb2", "libxml++2.6-2v5", "libfreetype6", "libncurses5"]
             apt_dev : ["libtbb-dev", "cython3", "libfftw3-dev", "libopenblas-dev",
                        "qttools5-dev", "libqt5svg5-dev", "libqt5x11extras5-dev", "qtxmlpatterns5-dev-tools", "libopenmpi-dev",
                        "libpng-dev", "libtiff5-dev", "libgeotiff-dev", "libjpeg-dev", "libgif-dev", "libgeos-dev", "libsqlite3-dev", "libnetcdf-dev", "libgdal-dev",
@@ -110,27 +110,27 @@ default :
                        "libxcb-shape0-dev", "libxcb-shm0-dev", "libxcb-sync-dev", "libxcb-xf86dri0-dev", "libxcb-xfixes0-dev",
                        "libxcb-xinerama0-dev", "libxcb-xinput-dev", "libxcb-xkb-dev", "libxcb-xtest0-dev", "libxcb-xv0-dev", "libxcb-xvmc0-dev",
                        "libxcb-imdkit-dev", "libxcb-image0-dev", "libxcb-keysyms1-dev", "libxcb-render-util0-dev", "libxcb-ewmh-dev",
-                        "libxcb-icccm4-dev", "libxcb-xrm-dev"]
+                        "libxcb-icccm4-dev", "libxcb-xrm-dev", "libfreetype6-dev"]
         }
         "DB11" :
         {
             apt : ["libdc1394-25", "libopenexr25", "libwebp6", "libgfortran5", "libilmbase25", "libevent-2.1-7", "libpng16-16", "libgcc-10-dev",
                    "libffi7", "libtinfo6", "libgphoto2-port12", "libglx0", "libopengl0", "libzstd1", "libglvnd0", "libjsoncpp24",
-                   "openmpi-bin", "libnetcdf18", "libgdal28", "libtbb2", "pypy-setuptools", "libxml++2.6-2v5"]
+                   "openmpi-bin", "libnetcdf18", "libgdal28", "libtbb2", "pypy-setuptools", "libxml++2.6-2v5", "libfreetype6", "libncurses5"]
             apt_dev : ["libtbb-dev", "cython3", "libfftw3-dev", "libopenblas-dev",
                        "qttools5-dev", "libqt5svg5-dev", "libqt5x11extras5-dev", "qtxmlpatterns5-dev-tools", "libopenmpi-dev",
                        "libpng-dev", "libtiff5-dev", "libgeotiff-dev", "libjpeg-dev", "libgif-dev", "libgeos-dev", "libsqlite3-dev", "libnetcdf-dev", "libgdal-dev",
-                       "texlive-latex-base", "texlive-latex-extra", "dvipng", "libxml++2.6-dev"]
+                       "texlive-latex-base", "texlive-latex-extra", "dvipng", "libxml++2.6-dev", "libfreetype6-dev"]
         }
         "DB12" :
         {
             apt : ["libdc1394-25", "libopenexr-3-1-30", "libwebp7", "libgfortran5", "libevent-2.1-7", "libpng16-16", "libgcc",
                    "libffi8", "libtinfo6", "libgphoto2-port12", "libglx0", "libopengl0", "libzstd1", "libglvnd0", "libjsoncpp25",
-                   "openmpi-bin", "libnetcdf19", "libgdal32", "libtbb12", "python3-setuptools", "libxml++2.6-2v5", "liblzf1"]
+                   "openmpi-bin", "libnetcdf19", "libgdal32", "libtbb12", "python3-setuptools", "libxml++2.6-2v5", "liblzf1", "libfreetype6", "libncurses5"]
             apt_dev : ["libtbb-dev", "cython3", "libfftw3-dev", "libopenblas-dev",
                        "qttools5-dev", "libqt5svg5-dev", "libqt5x11extras5-dev", "qtxmlpatterns5-dev-tools", "libopenmpi-dev",
                        "libpng-dev", "libtiff5-dev", "libgeotiff-dev", "libjpeg-dev", "libgif-dev", "libgeos-dev", "libsqlite3-dev", "libnetcdf-dev", "libgdal-dev",
-                       "texlive-latex-base", "texlive-latex-extra", "dvipng", "libxml++2.6-dev"]
+                       "texlive-latex-base", "texlive-latex-extra", "dvipng", "libxml++2.6-dev", "libfreetype6-dev"]
         }
         "UB16.04" :
         {
@@ -141,15 +141,15 @@ default :
         "UB18.04" :
         {
             apt : ["libdc1394-22", "libopenexr22", "libwebp6", "libgfortran4", "libilmbase12", "libevent-2.1-6", "libpng16-16", "libgcc-7-dev",
-                   "libffi6", "libtinfo5", "libgphoto2-port12", "libglx0", "libopengl0", "libzstd1", "libglvnd0", "libopenblas-base", "libgeos-c1v5", "libtbb2", "libxml++2.6"]
+                   "libffi6", "libtinfo5", "libgphoto2-port12", "libglx0", "libopengl0", "libzstd1", "libglvnd0", "libopenblas-base", "libgeos-c1v5", "libtbb2", "libxml++2.6", "libfreetype6"]
             apt_dev : ["libtbb-dev", "cython3", "libfftw3-dev", "libopenblas-dev",
-                       "libpng-dev", "libtiff5-dev", "libgeotiff-dev", "libjpeg-dev", "libgif-dev", "libgeos-dev", "libsqlite3-dev", "dvipng", "libxml++2.6-dev"]
+                       "libpng-dev", "libtiff5-dev", "libgeotiff-dev", "libjpeg-dev", "libgif-dev", "libgeos-dev", "libsqlite3-dev", "dvipng", "libxml++2.6-dev", "libfreetype6-dev"]
         }
         "UB20.04" :
         {
             apt : ["libdc1394-22", "libopenexr24", "libwebp6", "libgfortran5", "libilmbase24", "libevent-2.1-7", "libpng16-16", "libgcc-9-dev",
                    "libffi7", "libtinfo6", "libgphoto2-port12", "libglx0", "libopengl0", "libzstd1", "libglvnd0", "openmpi-bin", "libgdal26", "libopenblas0-serial", "libtbb2",
-                   "libxml++2.6-2v5", "python3-netcdf4"]
+                   "libxml++2.6-2v5", "python3-netcdf4", "libfreetype6", "libncurses5"]
             apt_dev : ["libtbb-dev", "cython3", "libfftw3-dev", "libopenblas-dev",
                        "qttools5-dev", "libqt5svg5-dev", "libqt5x11extras5-dev", "qtxmlpatterns5-dev-tools", "libopenmpi-dev",
                        "libpng-dev", "libtiff5-dev", "libgeotiff-dev", "libjpeg-dev", "libgif-dev", "libgeos-dev", "libsqlite3-dev", "libgdal-dev", "dvipng", "libxml++2.6-dev",
@@ -159,18 +159,26 @@ default :
                        "libxcb-shape0-dev", "libxcb-shm0-dev", "libxcb-sync-dev", "libxcb-xf86dri0-dev", "libxcb-xfixes0-dev",
                        "libxcb-xinerama0-dev", "libxcb-xinput-dev", "libxcb-xkb-dev", "libxcb-xtest0-dev", "libxcb-xv0-dev", "libxcb-xvmc0-dev",
                        "libxcb-imdkit-dev", "libxcb-image0-dev", "libxcb-keysyms1-dev", "libxcb-render-util0-dev", "libxcb-ewmh-dev",
-                        "libxcb-icccm4-dev", "libxcb-xrm-dev"]
+                        "libxcb-icccm4-dev", "libxcb-xrm-dev", "libfreetype6-dev"]
         }
         "UB22.04" :
         {
             apt : ["libdc1394-25", "libopenexr25", "libwebp7", "gfortran-11", "libilmbase25", "libevent-2.1-7", "libpng16-16", "libgcc-11-dev",
                    "libffi7", "libtinfo6", "libgphoto2-port12", "libglx0", "libopengl0", "libzstd1", "libglvnd0", "openmpi-bin", "libgdal30", "libopenblas0-serial", "libtbb12",
-                   "libxml++2.6-2v5"]
+                   "libxml++2.6-2v5", "libfreetype6", "libncurses5"]
             apt_dev : ["libtbb-dev", "cython3", "libfftw3-dev", "libopenblas-dev",
                        "qttools5-dev", "libqt5svg5-dev", "libqt5x11extras5-dev", "qtxmlpatterns5-dev-tools", "libopenmpi-dev",
-                       "libpng-dev", "libtiff5-dev", "libgeotiff-dev", "libjpeg-dev", "libgif-dev", "libgeos-dev", "libsqlite3-dev", "libgdal-dev", "dvipng", "libxml++2.6-dev"]
+                       "libpng-dev", "libtiff5-dev", "libgeotiff-dev", "libjpeg-dev", "libgif-dev", "libgeos-dev", "libsqlite3-dev", "libgdal-dev", "dvipng", "libxml++2.6-dev", "libfreetype6-dev"]
+        }
+        "UB24.04" :                                                                                 
+        {                                                                                           
+            apt : ["libdc1394-25", "libopenexr-3-1-30", "libwebp7", "gfortran-13", "libevent-2.1-7", "libpng16-16", "libgcc-13-dev", libncurses6,
+                   "libffi8", "libtinfo6", "libgphoto2-port12", "libglx0", "libopengl0", "libzstd1", "libglvnd0", "openmpi-bin", "libgdal34t64", "libopenblas0-serial", "libtbb12",
+                   "libxml++2.6-2v5", "libfreetype6", "libncurses6"]                                               
+            apt_dev : ["libtbb-dev", "cython3", "libfftw3-dev", "libopenblas-dev",                  
+                       "qttools5-dev", "libqt5svg5-dev", "libqt5x11extras5-dev", "qtxmlpatterns5-dev-tools", "libopenmpi-dev",
+                       "libpng-dev", "libtiff5-dev", "libgeotiff-dev", "libjpeg-dev", "libgif-dev", "libgeos-dev", "libsqlite3-dev", "libgdal-dev", "dvipng", "libxml++2.6-dev", "libfreetype-dev"]
         }
-        
     }
     depend : []
     properties :