diff --git a/easybuild/easyconfigs/a/Arrow/Arrow-8.0.0-foss-2021a.eb b/easybuild/easyconfigs/a/Arrow/Arrow-8.0.0-foss-2021a.eb new file mode 100644 index 00000000000..8c7316d60a9 --- /dev/null +++ b/easybuild/easyconfigs/a/Arrow/Arrow-8.0.0-foss-2021a.eb @@ -0,0 +1,71 @@ +easyblock = 'CMakeMake' + +name = 'Arrow' +version = '8.0.0' + +homepage = 'https://arrow.apache.org' +description = """Apache Arrow (incl. PyArrow Python bindings), a cross-language development platform + for in-memory data.""" + +toolchain = {'name': 'foss', 'version': '2021a'} + +source_urls = ['https://archive.apache.org/dist/%(namelower)s/%(namelower)s-%(version)s'] +sources = ['apache-arrow-%(version)s.tar.gz'] +checksums = ['ad9a05705117c989c116bae9ac70492fe015050e1b80fb0e38fde4b5d863aaa3'] + +builddependencies = [ + ('CMake', '3.20.1'), + ('Autotools', '20210128'), + ('flex', '2.6.4'), + ('Bison', '3.7.6'), + ('pkgconf', '1.8.0'), +] + +# Arrow strongly prefers included jemalloc, so not including it as a dependency +dependencies = [ + ('Python', '3.9.5'), + ('SciPy-bundle', '2021.05'), # for numpy + ('Boost', '1.76.0'), + ('lz4', '1.9.3'), + ('zlib', '1.2.11'), + ('bzip2', '1.0.8'), + ('zstd', '1.4.9'), + ('snappy', '1.1.8'), + ('RapidJSON', '1.1.0'), + ('RE2', '2022-02-01'), + ('utf8proc', '2.6.1'), +] + +start_dir = 'cpp' + +# see https://arrow.apache.org/docs/developers/python.html +configopts = "-DARROW_DATASET=on -DARROW_PYTHON=on -DARROW_PARQUET=ON -DARROW_WITH_SNAPPY=ON " +configopts += "-DCMAKE_INSTALL_LIBDIR=lib -DPython3_ROOT_DIR=$EBROOTPYTHON " +configopts += "-DARROW_WITH_ZLIB=ON -DARROW_WITH_BZ2=ON -DARROW_WITH_ZSTD=ON -DARROW_WITH_LZ4=ON " +configopts += "-DZSTD_ROOT=$EBROOTZSTD " + +# also install Python bindings +local_install_pyarrow_cmds = "export PKG_CONFIG_PATH=%(installdir)s/lib/pkgconfig:$PKG_CONFIG_PATH && " +local_install_pyarrow_cmds += "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && " +local_install_pyarrow_cmds += "cd %(builddir)s/*arrow-%(version)s/python && export XDG_CACHE_HOME=$TMPDIR && " +local_install_pyarrow_cmds += "sed -i 's/numpy==[0-9.]*/numpy/g' pyproject.toml && " +local_install_pyarrow_cmds += "Python3_ROOT_DIR=$EBROOTPYTHON " +local_install_pyarrow_cmds += "PYARROW_WITH_DATASET=1 PYARROW_WITH_PARQUET=1 " +local_install_pyarrow_cmds += "python -m pip install --prefix %(installdir)s --no-build-isolation ." +postinstallcmds = [local_install_pyarrow_cmds] + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages'} + +sanity_check_paths = { + 'files': ['lib/libarrow.a', 'lib/libarrow.%s' % SHLIB_EXT, + 'lib/libarrow_python.a', 'lib/libarrow_python.%s' % SHLIB_EXT], + 'dirs': ['include/arrow', 'lib/cmake/arrow', 'lib/pkgconfig', 'lib/python%(pyshortver)s/site-packages'], +} + +sanity_check_commands = [ + "python -c 'import pyarrow'", + "python -c 'import pyarrow.dataset'", + "python -c 'import pyarrow.parquet'", +] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/b/BLAT/BLAT-3.7-GCC-10.3.0.eb b/easybuild/easyconfigs/b/BLAT/BLAT-3.7-GCC-10.3.0.eb new file mode 100644 index 00000000000..dceaa2704a8 --- /dev/null +++ b/easybuild/easyconfigs/b/BLAT/BLAT-3.7-GCC-10.3.0.eb @@ -0,0 +1,55 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild +# +# Copyright:: Copyright 2012-2013 The Cyprus Institute +# Authors:: Andreas Panteli , Thekla Loizou +# Contributors:: Alex Domingo (Vrije Universiteit Brussel) +# License:: MIT/GPL +# +## + +name = 'BLAT' +version = '3.7' + +homepage = 'https://genome.ucsc.edu/goldenPath/help/blatSpec.html' +description = """BLAT on DNA is designed to quickly find sequences of 95% and +greater similarity of length 25 bases or more.""" + +toolchain = {'name': 'GCC', 'version': '10.3.0'} +toolchainopts = {'pic': True} + +source_urls = ['https://genome-test.gi.ucsc.edu/~kent/src/'] +sources = ['%%(namelower)sSrc%s.zip' % ''.join(version.split('.'))] +patches = ['BLAT-%(version)s_mend-tests.patch'] +checksums = [ + {'blatSrc37.zip': '88ee2b272d42ab77687c61d200b11f1d58443951069feb7e10226a2509f84cf2'}, + {'BLAT-3.7_mend-tests.patch': '1f42c7fadf7676a5cc3a2016f70089c3541aa1d53816cf86072682c44cf311a6'}, +] + +# BLAT relies on a bundled old version of HTSlib. We use the bundled library +# because it is statically linked and the newer HTSlib in this toolchain is not +# API compatible with it. +dependencies = [ + ('freetype', '2.10.4'), + ('libiconv', '1.16'), + ('libpng', '1.6.37'), + ('MariaDB', '10.6.4'), + ('OpenSSL', '1.1', '', SYSTEM), + ('util-linux', '2.36'), + ('zlib', '1.2.11'), +] + +pretestopts = 'PATH="%(builddir)s/blatSrc/bin:$PATH"' +runtest = 'test' + +_blat_bins = ["blat", "faToNib", "faToTwoBit", "gfClient", "gfServer", "nibFrag", "pslPretty", + "pslReps", "pslSort", "twoBitInfo", "twoBitToFa"] + +files_to_copy = [(["bin/%s" % x for x in _blat_bins] + ["webBlat/webBlat"], 'bin')] + +sanity_check_paths = { + 'files': ["bin/%s" % x for x in _blat_bins + ["webBlat"]], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/b/Bowtie/Bowtie-1.3.1-GCC-10.3.0.eb b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.3.1-GCC-10.3.0.eb new file mode 100644 index 00000000000..4f96d59e220 --- /dev/null +++ b/easybuild/easyconfigs/b/Bowtie/Bowtie-1.3.1-GCC-10.3.0.eb @@ -0,0 +1,30 @@ +## +# This is a contribution from DeepThought HPC Service, Flinders University, Adelaide, Australia +# Homepage: https://staff.flinders.edu.au/research/deep-thought +# +# Authors:: Robert Qiao +# License:: Artistic v2.0 +# +# Notes:: +## + +name = 'Bowtie' +version = '1.3.1' + +homepage = 'http://bowtie-bio.sourceforge.net/index.shtml' +description = """Bowtie is an ultrafast, memory-efficient short read aligner. + It aligns short DNA sequences (reads) to the human genome.""" + +toolchain = {'name': 'GCC', 'version': '10.3.0'} +toolchainopts = {'pic': True, 'cstd': 'gnu++98'} + +source_urls = ['https://sourceforge.net/projects/bowtie-bio/files/bowtie/%(version)s/'] +sources = ['%(namelower)s-%(version)s-src.zip'] +checksums = ['e23517aa53846ef828172be911750cd05748522117efcbbe5a36f3241fb40761'] + +dependencies = [ + ('tbb', '2020.3'), + ('zlib', '1.2.11'), +] + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/c/CIRIquant/CIRIquant-1.1.2-20221201-foss-2021b-Python-2.7.18.eb b/easybuild/easyconfigs/c/CIRIquant/CIRIquant-1.1.2-20221201-foss-2021b-Python-2.7.18.eb new file mode 100644 index 00000000000..b2f6bd3849e --- /dev/null +++ b/easybuild/easyconfigs/c/CIRIquant/CIRIquant-1.1.2-20221201-foss-2021b-Python-2.7.18.eb @@ -0,0 +1,50 @@ +easyblock = 'PythonBundle' + +name = 'CIRIquant' +local_commit = '2d0663e' +version = '1.1.2-20221201' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/bioinfo-biols/CIRIquant' +description = "CIRIquant is a comprehensive analysis pipeline for circRNA detection and quantification in RNA-Seq data" + +toolchain = {'name': 'foss', 'version': '2021b'} + +dependencies = [ + ('Python', '2.7.18'), + ('SciPy-bundle', '2021.10', versionsuffix), + ('PyYAML', '5.4.1', versionsuffix), + ('Pysam', '0.17.0', versionsuffix), + ('scikit-learn', '0.20.4', versionsuffix), +] + +use_pip = True + +exts_list = [ + ('argparse', '1.4.0', { + 'checksums': ['62b089a55be1d8949cd2bc7e0df0bddb9e028faefc8c32038cc84862aefdd6e4'], + }), + (name, version, { + 'source_urls': ['https://github.com/bioinfo-biols/CIRIquant/archive/'], + 'sources': [{'download_filename': '%s.tar.gz' % local_commit, 'filename': SOURCE_TAR_GZ}], + 'checksums': ['4990122c0eb820b1ec9cfc64fcfe49d3f9680dae69719dba3f8a7d77f9c3ff54'], + # relax numpy version requirement, no actual need for 1.22.0 + # (cfr. https://github.com/bioinfo-biols/CIRIquant/pull/39), + # and remove very strict version requirements for all required Python packages + 'preinstallopts': "sed -i 's/numpy==1.22.0/numpy==1.16.4/g' setup.py && sed -i 's/==/>=/g' setup.py && ", + 'modulename': 'CIRIquant', + }), +] + +sanity_pip_check = True + +sanity_check_paths = { + 'files': ['bin/CIRIquant'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +sanity_check_commands = ["CIRIquant --help"] + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages/CIRIquant'} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/c/Cufflinks/Cufflinks-20190706-GCC-11.2.0.eb b/easybuild/easyconfigs/c/Cufflinks/Cufflinks-20190706-GCC-11.2.0.eb index 403c88a5dca..98ab2c0bfa1 100644 --- a/easybuild/easyconfigs/c/Cufflinks/Cufflinks-20190706-GCC-11.2.0.eb +++ b/easybuild/easyconfigs/c/Cufflinks/Cufflinks-20190706-GCC-11.2.0.eb @@ -19,10 +19,10 @@ builddependencies = [ ('Eigen', '3.3.9'), ('Autotools', '20210726'), ('SAMtools', '1.14'), + ('Boost', '1.75.0'), ] dependencies = [ - ('Boost', '1.75.0'), ('zlib', '1.2.11'), ('HTSlib', '1.14'), ] @@ -30,9 +30,16 @@ dependencies = [ preconfigopts = 'autoreconf -i && export LIBS="${LIBS} -lhts" && export CFLAGS="$CFLAGS -fcommon" && ' configopts = '--with-boost=${EBROOTBOOST} --with-bam=${EBROOTSAMTOOLS}' +buildopts = "BOOST_FILESYSTEM_LIB=$EBROOTBOOST/lib/libboost_filesystem.a " +buildopts += "BOOST_SERIALIZATION_LIB=$EBROOTBOOST/lib/libboost_serialization.a " +buildopts += "BOOST_SYSTEM_LIB=$EBROOTBOOST/lib/libboost_system.a " +buildopts += "BOOST_THREAD_LIB=$EBROOTBOOST/lib/libboost_thread.a " + sanity_check_paths = { - 'files': ['bin/%(namelower)s'], + 'files': ['bin/cufflinks'], 'dirs': [] } +sanity_check_commands = ["cufflinks 2>&1 | grep 'Usage:.* cufflinks'"] + moduleclass = 'bio' diff --git a/easybuild/easyconfigs/c/code-server/code-server-4.16.1.eb b/easybuild/easyconfigs/c/code-server/code-server-4.16.1.eb new file mode 100644 index 00000000000..6f0b3e039d9 --- /dev/null +++ b/easybuild/easyconfigs/c/code-server/code-server-4.16.1.eb @@ -0,0 +1,20 @@ +name = 'code-server' +version = '4.16.1' + +homepage = 'https://github.com/cdr/code-server' +description = """Run VS Code on any machine anywhere and access it in the browser.""" + +toolchain = SYSTEM + +source_urls = ['https://github.com/cdr/code-server/releases/download/v%(version)s/'] +sources = ['code-server-%(version)s-linux-%(mapped_arch)s.tar.gz'] +checksums = [ + { + 'code-server-%(version)s-linux-amd64.tar.gz': + 'e10bc642be9fe8a802f556737b1bbb910ef818979a35034b092c85e62a42d1a7', + 'code-server-%(version)s-linux-arm64.tar.gz': + 'a256429887531d855baaa6b14b25906f69fa4b4a977b1ae0def001016fb37b81', + } +] + +moduleclass = 'tools' diff --git a/easybuild/easyconfigs/g/GATK/GATK-4.2.6.1-GCCcore-10.3.0-Java-11.eb b/easybuild/easyconfigs/g/GATK/GATK-4.2.6.1-GCCcore-10.3.0-Java-11.eb new file mode 100644 index 00000000000..c89b60d9311 --- /dev/null +++ b/easybuild/easyconfigs/g/GATK/GATK-4.2.6.1-GCCcore-10.3.0-Java-11.eb @@ -0,0 +1,54 @@ +## +# This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild +# +# Copyright:: Copyright 2012-2013 Cyprus Institute / CaSToRC, University of Luxembourg / LCSB +# Authors:: George Tsouloupas , Fotis Georgatos , +# Kenneth Hoste (UGent) +# License:: MIT/GPL +# $Id$ +# +# This work implements a part of the HPCBIOS project and is a component of the policy: +# http://hpcbios.readthedocs.org/en/latest/HPCBIOS_2012-94.html +# Modified by: Adam Huffman, Jonas Demeulemeester +# The Francis Crick Institute +# Modified for version 4.0.5.1 by: Ruben van Dijk, University of Groningen +## + +easyblock = 'Tarball' + +name = 'GATK' +version = '4.2.6.1' +versionsuffix = '-Java-%(javaver)s' + +homepage = 'https://www.broadinstitute.org/gatk/' +description = """The Genome Analysis Toolkit or GATK is a software package developed at the Broad Institute + to analyse next-generation resequencing data. The toolkit offers a wide variety of tools, + with a primary focus on variant discovery and genotyping as well as strong emphasis on + data quality assurance. Its robust architecture, powerful processing engine and + high-performance computing features make it capable of taking on projects of any size.""" + +toolchain = {'name': 'GCCcore', 'version': '10.3.0'} + +source_urls = ['https://github.com/broadinstitute/gatk/releases/download/%(version)s/'] +sources = ['gatk-%(version)s.zip'] +checksums = ['1125cfc862301d437310506c8774d36c3a90d00d52c7b5d6b59dac7241203628'] + +dependencies = [ + ('Java', '11', '', SYSTEM), + ('Python', '3.9.5'), +] + +modextrapaths = {'PATH': ''} + +sanity_check_paths = { + 'files': ['gatk'], + 'dirs': [], +} +sanity_check_commands = [ + "gatk --help", + "gatk --list", +] + +modloadmsg = "WARNING: GATK v%(version)s support for Java 11 is in beta state. Use at your own risk.\n" + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2023-04-20-GCC-10.3.0.eb b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2023-04-20-GCC-10.3.0.eb new file mode 100644 index 00000000000..855eec4f731 --- /dev/null +++ b/easybuild/easyconfigs/g/GMAP-GSNAP/GMAP-GSNAP-2023-04-20-GCC-10.3.0.eb @@ -0,0 +1,55 @@ +# This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild +# Author: Pablo Escobar Lopez +# Swiss Institute of Bioinformatics +# Biozentrum - University of Basel +# 2016-11-07 modified by: +# Adam Huffman +# The Francis Crick Institute + +easyblock = 'ConfigureMake' + +name = 'GMAP-GSNAP' +version = '2023-04-20' + +homepage = 'http://research-pub.gene.com/gmap/' +description = """GMAP: A Genomic Mapping and Alignment Program for mRNA and EST Sequences + GSNAP: Genomic Short-read Nucleotide Alignment Program""" + +toolchain = {'name': 'GCC', 'version': '10.3.0'} + +source_urls = ['http://research-pub.gene.com/gmap/src/'] +sources = [SOURCELOWER_TAR_GZ] +patches = [ + 'GMAP-GSNAP-2023-02-17_cleanup-headers.patch', + 'GMAP-GSNAP-2023-02-17_fix-typecast.patch', +] +checksums = [ + {'gmap-gsnap-2023-04-20.tar.gz': 'f858bc699cbcc9b3f06751ace55c86bfc21e4ca821a90b10681feac2172b725e'}, + {'GMAP-GSNAP-2023-02-17_cleanup-headers.patch': '7d17d4cbc717556e3a64475eb931b692e9d564b486acf6c9dbf4c2bf29853832'}, + {'GMAP-GSNAP-2023-02-17_fix-typecast.patch': 'eafe728cf00cf52320bbf4b710ef76b662df92533d22fa67dc273855c180296f'}, +] + +# with these deps you can use standard compressed files +# details in http://research-pub.gene.com/gmap/src/README +dependencies = [ + ('bzip2', '1.0.8'), + ('zlib', '1.2.11'), +] + +# GSNAP uses MAX_STACK_READLENGTH to control the use of stack or heap memory depending on the read length +# details in http://research-pub.gene.com/gmap/src/README +# configopts = 'MAX_STACK_READLENGTH=300' + +runtest = 'check' + +sanity_check_paths = { + 'files': ['bin/gmap', 'bin/gsnap'], + 'dirs': [], +} + +sanity_check_commands = [ + "gmap --help", + "gsnap --help", +] + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/g/GPAW/GPAW-23.9.1-foss-2022a.eb b/easybuild/easyconfigs/g/GPAW/GPAW-23.9.1-foss-2022a.eb new file mode 100644 index 00000000000..3b483fafeee --- /dev/null +++ b/easybuild/easyconfigs/g/GPAW/GPAW-23.9.1-foss-2022a.eb @@ -0,0 +1,49 @@ +easyblock = "PythonPackage" + +name = 'GPAW' +version = '23.9.1' + +homepage = 'https://wiki.fysik.dtu.dk/gpaw/' +description = """GPAW is a density-functional theory (DFT) Python code based on the projector-augmented wave (PAW) + method and the atomic simulation environment (ASE). It uses real-space uniform grids and multigrid methods or + atom-centered basis-functions.""" + +toolchain = {'name': 'foss', 'version': '2022a'} +toolchainopts = {'usempi': True, 'openmp': False} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] +patches = [ + ('GPAW-20.1.0-Add-Easybuild-configuration-files.patch', 1), +] +checksums = [ + {'gpaw-23.9.1.tar.gz': '19a24840b876003528864b7a0b38fc0d456800b83b8666b1f724273660745b47'}, + {'GPAW-20.1.0-Add-Easybuild-configuration-files.patch': + '2b337399479bf018a86156ed073dd7a78ec8c0df1f28b015f9284c6bf9fa5f15'}, +] + +dependencies = [ + ('Python', '3.10.4'), + ('SciPy-bundle', '2022.05'), + ('ASE', '3.22.1'), + ('libxc', '5.2.3'), + ('libvdwxc', '0.4.0'), + ('ELPA', '2021.11.001'), + ('PyYAML', '6.0'), + ('GPAW-setups', '0.9.20000', '', SYSTEM), +] + +prebuildopts = 'GPAW_CONFIG=doc/platforms/Linux/EasyBuild/config_foss.py' +preinstallopts = prebuildopts + +download_dep_fail = True +use_pip = True +sanity_pip_check = True + +sanity_check_paths = { + 'files': ['bin/gpaw%s' % x for x in ['', '-analyse-basis', '-basis', '-plot-parallel-timings', + '-runscript', '-setup', '-upfplot']], + 'dirs': ['lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/g/GPAW/GPAW-23.9.1-intel-2022a.eb b/easybuild/easyconfigs/g/GPAW/GPAW-23.9.1-intel-2022a.eb new file mode 100644 index 00000000000..65e38c0e70b --- /dev/null +++ b/easybuild/easyconfigs/g/GPAW/GPAW-23.9.1-intel-2022a.eb @@ -0,0 +1,48 @@ +easyblock = "PythonPackage" + +name = 'GPAW' +version = '23.9.1' + +homepage = 'https://wiki.fysik.dtu.dk/gpaw/' +description = """GPAW is a density-functional theory (DFT) Python code based on the projector-augmented wave (PAW) + method and the atomic simulation environment (ASE). It uses real-space uniform grids and multigrid methods or + atom-centered basis-functions.""" + +toolchain = {'name': 'intel', 'version': '2022a'} +toolchainopts = {'usempi': True, 'openmp': False} + +source_urls = [PYPI_LOWER_SOURCE] +sources = [SOURCELOWER_TAR_GZ] +patches = [ + ('GPAW-20.1.0-Add-Easybuild-configuration-files.patch', 1), +] +checksums = [ + {'gpaw-23.9.1.tar.gz': '19a24840b876003528864b7a0b38fc0d456800b83b8666b1f724273660745b47'}, + {'GPAW-20.1.0-Add-Easybuild-configuration-files.patch': + '2b337399479bf018a86156ed073dd7a78ec8c0df1f28b015f9284c6bf9fa5f15'}, +] + +dependencies = [ + ('Python', '3.10.4'), + ('SciPy-bundle', '2022.05'), + ('ASE', '3.22.1'), + ('libxc', '5.2.3'), + ('ELPA', '2021.11.001'), + ('PyYAML', '6.0'), + ('GPAW-setups', '0.9.20000', '', SYSTEM), +] + +prebuildopts = 'GPAW_CONFIG=doc/platforms/Linux/EasyBuild/config_intel.py' +preinstallopts = prebuildopts + +download_dep_fail = True +use_pip = True +sanity_pip_check = True + +sanity_check_paths = { + 'files': ['bin/gpaw%s' % x for x in ['', '-analyse-basis', '-basis', '-plot-parallel-timings', + '-runscript', '-setup', '-upfplot']], + 'dirs': ['lib/python%(pyshortver)s/site-packages'] +} + +moduleclass = 'chem' diff --git a/easybuild/easyconfigs/h/HDF/HDF-4.2.16-2-GCCcore-12.3.0.eb b/easybuild/easyconfigs/h/HDF/HDF-4.2.16-2-GCCcore-12.3.0.eb new file mode 100644 index 00000000000..453ca292d42 --- /dev/null +++ b/easybuild/easyconfigs/h/HDF/HDF-4.2.16-2-GCCcore-12.3.0.eb @@ -0,0 +1,60 @@ +easyblock = 'ConfigureMake' + +name = 'HDF' +version = '4.2.16-2' + +homepage = 'https://www.hdfgroup.org/products/hdf4/' +description = """ + HDF (also known as HDF4) is a library and multi-object file format for + storing and managing data between machines. +""" + +toolchain = {'name': 'GCCcore', 'version': '12.3.0'} +toolchainopts = {'pic': True} + +source_urls = ['http://www.hdfgroup.org/ftp/%(name)s/releases/%(name)s%(version)s/src/'] +sources = [SOURCELOWER_TAR_GZ] + +checksums = [ + 'a24b18312d421686031c2d66635f7d5abb2fe879f8a182b7e02797b0da8d1f6c', # %(namelower)s-%(version)s.tar.gz +] + +builddependencies = [ + ('binutils', '2.40'), + ('Bison', '3.8.2'), + ('flex', '2.6.4'), +] +dependencies = [ + ('libjpeg-turbo', '2.1.5.1'), + ('Szip', '2.1.1'), + ('zlib', '1.2.13'), + ('libtirpc', '1.3.3'), +] + +preconfigopts = "LIBS='-ltirpc' " + +local_common_configopts = '--with-szlib=$EBROOTSZIP CFLAGS="$CFLAGS -I$EBROOTLIBTIRPC/include/tirpc" ' +local_common_configopts += '--includedir=%(installdir)s/include/%(namelower)s ' + +configopts = [ + local_common_configopts, + # Cannot build shared libraries and Fortran... + # https://trac.osgeo.org/gdal/wiki/HDF#IncompatibilitywithNetCDFLibraries + # netcdf must be disabled to allow HDF to be used by GDAL + local_common_configopts + "--enable-shared --disable-fortran --disable-netcdf", +] + + +sanity_check_paths = { + 'files': ['bin/h4cc', 'bin/ncdump', 'lib/libdf.a', 'lib/libhdf4.settings', 'lib/libmfhdf.a', 'lib/libmfhdf.so'], + 'dirs': ['include/%(namelower)s'], +} + +sanity_check_commands = [ + "h4cc --help", + "ncdump -V", +] + +modextrapaths = {'CPATH': 'include/%(namelower)s'} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/h/HISAT2/HISAT2-2.2.1-gompi-2021a.eb b/easybuild/easyconfigs/h/HISAT2/HISAT2-2.2.1-gompi-2021a.eb new file mode 100644 index 00000000000..59e1d8054bd --- /dev/null +++ b/easybuild/easyconfigs/h/HISAT2/HISAT2-2.2.1-gompi-2021a.eb @@ -0,0 +1,59 @@ +## +# This is a contribution from DeepThought HPC Service, Flinders University, Adelaide, Australia +# Homepage: https://staff.flinders.edu.au/research/deep-thought +# +# Authors:: Robert Qiao +# License:: GPLv3.0 +# +# Notes:: +# 2.2.1 - changes from Adam Huffman +# Bumped to foss-2021b +# J. Sassmannshausen + +easyblock = 'MakeCp' + +name = 'HISAT2' +version = '2.2.1' + +homepage = 'https://daehwankimlab.github.io/hisat2' +description = """HISAT2 is a fast and sensitive alignment program for mapping next-generation sequencing reads + (both DNA and RNA) against the general human population (as well as against a single reference genome).""" + +toolchain = {'name': 'gompi', 'version': '2021a'} + +sources = [{ + 'source_urls': ['https://cloud.biohpc.swmed.edu/index.php/s/fE9QCsX3NH4QwBi'], + 'download_filename': 'download', + 'filename': '%(namelower)s-%(version)s-source.zip', +}] +patches = [ + 'hisat2-libname-fix.patch', +] +checksums = [ + '48e933330d4d8470d2b3dfe7ec3918f2e98a75f7381891e23b7df1fb4f135eb1', + '8aa91d1dd6455b96c10ce48827f8313b006241d815fbe6382422dbae3b610726', # hisat2-libname-fix.patch +] + +dependencies = [ + ('NGS', '2.10.9'), + ('ncbi-vdb', '2.10.9'), +] + +buildopts = 'CC="$CC" CPP="$CXX" RELEASE_FLAGS="$CFLAGS" ' +buildopts += "USE_SRA=1 NCBI_NGS_DIR=$EBROOTNGS NCBI_VDB_DIR=$EBROOTNCBIMINVDB" + +local_executables = ['hisat2', 'hisat2-align-l', 'hisat2-align-s', 'hisat2-build', 'hisat2-build-l', 'hisat2-build-s', + 'hisat2-inspect', 'hisat2-inspect-s', 'hisat2-inspect-l', 'hisat2-repeat', 'extract_exons.py', + 'extract_splice_sites.py', 'hisat2_extract_exons.py', 'hisat2_extract_snps_haplotypes_UCSC.py', + 'hisat2_extract_snps_haplotypes_VCF.py', 'hisat2_extract_splice_sites.py', + 'hisat2_read_statistics.py', 'hisat2_simulate_reads.py'] +files_to_copy = [(local_executables, 'bin'), 'scripts', 'example'] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in local_executables], + 'dirs': ['scripts', 'example'], +} + +sanity_check_commands = ["hisat2 --help"] + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/k/kallisto/kallisto-0.48.0-gompi-2021a.eb b/easybuild/easyconfigs/k/kallisto/kallisto-0.48.0-gompi-2021a.eb new file mode 100644 index 00000000000..3f83a6f896b --- /dev/null +++ b/easybuild/easyconfigs/k/kallisto/kallisto-0.48.0-gompi-2021a.eb @@ -0,0 +1,40 @@ +# This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild + +easyblock = 'CMakeMake' + +name = 'kallisto' +version = '0.48.0' + +homepage = 'https://pachterlab.github.io/kallisto/' +description = """kallisto is a program for quantifying abundances of transcripts from RNA-Seq data, or more generally + of target sequences using high-throughput sequencing reads.""" + +toolchain = {'name': 'gompi', 'version': '2021a'} +toolchainopts = {'pic': True, 'usempi': True} + +github_account = 'pachterlab' +source_urls = [GITHUB_SOURCE] +sources = ['v%(version)s.tar.gz'] +checksums = ['1797ac4d1f0771e3f1f25dd7972bded735fcb43f853cf52184d3d9353a6269b0'] + +builddependencies = [ + ('Autotools', '20210128'), + ('CMake', '3.20.1'), + ('zlib', '1.2.11'), +] + +dependencies = [('HDF5', '1.10.7')] + +preconfigopts = "cd ../%(name)s-%(version)s/ext/htslib/ && " +preconfigopts += "sed -i '/AC_PROG_CC/a AC_CANONICAL_HOST' configure.ac && " +preconfigopts += "autoreconf -i && cd - && " +configopts = '-DUSE_HDF5=ON' + +parallel = 1 + +sanity_check_paths = { + 'files': ['bin/%(name)s'], + 'dirs': [], +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/m/MATLAB/MATLAB-2023b.eb b/easybuild/easyconfigs/m/MATLAB/MATLAB-2023b.eb new file mode 100644 index 00000000000..f0bb088e901 --- /dev/null +++ b/easybuild/easyconfigs/m/MATLAB/MATLAB-2023b.eb @@ -0,0 +1,27 @@ +name = 'MATLAB' +version = '2023b' + +homepage = 'https://www.mathworks.com/products/matlab' +description = """MATLAB is a high-level language and interactive environment + that enables you to perform computationally intensive tasks faster than with + traditional programming languages such as C, C++, and Fortran.""" + +toolchain = SYSTEM + +sources = ['R%s_Linux.iso' % (version)] +checksums = ['f1cc4ae1a2e42a1d22745884aa80bf0d5d8676939ad21741ccff15fade06a881'] +download_instructions = 'Download %s from mathworks.com' % sources[0] + +java_options = '-Xmx2048m' + +osdependencies = [('p7zip-plugins', 'p7zip-full')] # for extracting iso-files + +# Use EB_MATLAB_KEY environment variable or uncomment and modify license key +# key = '00000-00000-00000-00000-00000-00000-00000-00000-00000-00000-00000-00000' + +# Use EB_MATLAB_LICENSE_SERVER and EB_MATLAB_LICENSE_SERVER_PORT environment variables or +# uncomment and modify the following variables for installation with floating license server +# license_file = 'my-license-file' +# license_server_port = 'XXXXX' + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/n/NTL/NTL-11.5.1-GCC-12.2.0.eb b/easybuild/easyconfigs/n/NTL/NTL-11.5.1-GCC-12.2.0.eb new file mode 100644 index 00000000000..e591e4d7c66 --- /dev/null +++ b/easybuild/easyconfigs/n/NTL/NTL-11.5.1-GCC-12.2.0.eb @@ -0,0 +1,44 @@ +# contributed by Guilherme Peretti-Pezzi (CSCS) +# updated by Alex Domingo (Vrije Universiteit Brussel) +# updated by Åke Sandgren(Umeå University) + +easyblock = 'ConfigureMake' + +name = 'NTL' +version = '11.5.1' + +homepage = 'https://shoup.net/ntl/' + +description = """NTL is a high-performance, portable C++ library providing data structures and +algorithms for manipulating signed, arbitrary length integers, and for vectors, +matrices, and polynomials over the integers and over finite fields.""" + +toolchain = {'name': 'GCC', 'version': '12.2.0'} +toolchainopts = {'pic': True} + +github_account = 'libntl' +source_urls = [GITHUB_LOWER_SOURCE] +sources = ['v%(version)s.tar.gz'] +checksums = ['ef578fa8b6c0c64edd1183c4c303b534468b58dd3eb8df8c9a5633f984888de5'] + +builddependencies = [ + ('Perl', '5.36.0'), +] + +dependencies = [ + ('GMP', '6.2.1'), +] + +start_dir = 'src' + +prefix_opt = 'PREFIX=' +configopts = 'CXX="$CXX" CXXFLAGS="$CXXFLAGS" GMP_PREFIX="$EBROOTGMP" SHARED=on' + +runtest = 'check' + +sanity_check_paths = { + 'files': ['lib/libntl.%s' % e for e in ['a', SHLIB_EXT]], + 'dirs': ['include/NTL', 'share/doc'], +} + +moduleclass = 'math' diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5-GCC-12.3.0.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5-GCC-12.3.0.eb index f54e9e48c72..6279c1af7bd 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5-GCC-12.3.0.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5-GCC-12.3.0.eb @@ -11,6 +11,7 @@ sources = [SOURCELOWER_TAR_BZ2] patches = [ 'OpenMPI-4.1.1_build-with-internal-cuda-header.patch', 'OpenMPI-4.1.1_opal-datatype-cuda-performance.patch', + 'OpenMPI-4.1.5_fix-pmix3x.patch', ] checksums = [ {'openmpi-4.1.5.tar.bz2': 'a640986bc257389dd379886fdae6264c8cfa56bc98b71ce3ae3dfbd8ce61dbe3'}, @@ -18,6 +19,8 @@ checksums = [ '63eac52736bdf7644c480362440a7f1f0ae7c7cae47b7565f5635c41793f8c83'}, {'OpenMPI-4.1.1_opal-datatype-cuda-performance.patch': 'b767c7166cf0b32906132d58de5439c735193c9fd09ec3c5c11db8d5fa68750e'}, + {'OpenMPI-4.1.5_fix-pmix3x.patch': + '46edac3dbf32f2a611d45e8a3c8edd3ae2f430eec16a1373b510315272115c40'}, ] builddependencies = [ diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5-GCC-13.2.0.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5-GCC-13.2.0.eb index 77905f262fe..ba58f99e8e3 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5-GCC-13.2.0.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5-GCC-13.2.0.eb @@ -11,6 +11,7 @@ sources = [SOURCELOWER_TAR_BZ2] patches = [ 'OpenMPI-4.1.1_build-with-internal-cuda-header.patch', 'OpenMPI-4.1.1_opal-datatype-cuda-performance.patch', + 'OpenMPI-4.1.5_fix-pmix3x.patch', ] checksums = [ {'openmpi-4.1.5.tar.bz2': 'a640986bc257389dd379886fdae6264c8cfa56bc98b71ce3ae3dfbd8ce61dbe3'}, @@ -18,6 +19,8 @@ checksums = [ '63eac52736bdf7644c480362440a7f1f0ae7c7cae47b7565f5635c41793f8c83'}, {'OpenMPI-4.1.1_opal-datatype-cuda-performance.patch': 'b767c7166cf0b32906132d58de5439c735193c9fd09ec3c5c11db8d5fa68750e'}, + {'OpenMPI-4.1.5_fix-pmix3x.patch': + '46edac3dbf32f2a611d45e8a3c8edd3ae2f430eec16a1373b510315272115c40'}, ] builddependencies = [ diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5-intel-compilers-2023.1.0.eb b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5-intel-compilers-2023.1.0.eb index 7d59c6d092f..4d79ac0d55a 100644 --- a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5-intel-compilers-2023.1.0.eb +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5-intel-compilers-2023.1.0.eb @@ -11,6 +11,7 @@ sources = [SOURCELOWER_TAR_BZ2] patches = [ 'OpenMPI-4.1.1_build-with-internal-cuda-header.patch', 'OpenMPI-4.1.1_opal-datatype-cuda-performance.patch', + 'OpenMPI-4.1.5_fix-pmix3x.patch', ] checksums = [ {'openmpi-4.1.5.tar.bz2': 'a640986bc257389dd379886fdae6264c8cfa56bc98b71ce3ae3dfbd8ce61dbe3'}, @@ -18,6 +19,8 @@ checksums = [ '63eac52736bdf7644c480362440a7f1f0ae7c7cae47b7565f5635c41793f8c83'}, {'OpenMPI-4.1.1_opal-datatype-cuda-performance.patch': 'b767c7166cf0b32906132d58de5439c735193c9fd09ec3c5c11db8d5fa68750e'}, + {'OpenMPI-4.1.5_fix-pmix3x.patch': + '46edac3dbf32f2a611d45e8a3c8edd3ae2f430eec16a1373b510315272115c40'}, ] builddependencies = [ diff --git a/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5_fix-pmix3x.patch b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5_fix-pmix3x.patch new file mode 100644 index 00000000000..5f209139a3d --- /dev/null +++ b/easybuild/easyconfigs/o/OpenMPI/OpenMPI-4.1.5_fix-pmix3x.patch @@ -0,0 +1,581 @@ +From 6e8e14f2c2f207d5fa51299cc67558697a5b7d63 Mon Sep 17 00:00:00 2001 +From: Gilles Gouaillardet +Date: Wed, 8 Mar 2023 10:48:00 +0900 +Subject: [PATCH] pmix3x: use PMIX_VALUE_LOAD() and PMIX_INFO_LOAD() macros + +Refs. open-mpi/ompi#10416 + +bot:notacherrypick + +Signed-off-by: Gilles Gouaillardet +--- + opal/mca/pmix/pmix3x/pmix3x.c | 273 ++++++++++++++++++++++----- + opal/mca/pmix/pmix3x/pmix3x.h | 6 +- + opal/mca/pmix/pmix3x/pmix3x_client.c | 48 ++--- + 3 files changed, 242 insertions(+), 85 deletions(-) + +diff --git a/opal/mca/pmix/pmix3x/pmix3x.c b/opal/mca/pmix/pmix3x/pmix3x.c +index 3b2a5353cc6..c49b6772af5 100644 +--- a/opal/mca/pmix/pmix3x/pmix3x.c ++++ b/opal/mca/pmix/pmix3x/pmix3x.c +@@ -1,7 +1,7 @@ + /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ + /* + * Copyright (c) 2014-2018 Intel, Inc. All rights reserved. +- * Copyright (c) 2014-2019 Research Organization for Information Science ++ * Copyright (c) 2014-2023 Research Organization for Information Science + * and Technology (RIST). All rights reserved. + * Copyright (c) 2014-2015 Mellanox Technologies, Inc. + * All rights reserved. +@@ -217,8 +217,7 @@ static void return_local_event_hdlr(int status, opal_list_t *results, + PMIX_INFO_CREATE(op->info, op->ninfo); + n=0; + OPAL_LIST_FOREACH(kv, cd->info, opal_value_t) { +- (void)strncpy(op->info[n].key, kv->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&op->info[n].value, kv); ++ pmix3x_info_load(&op->info[n], kv); + ++n; + } + } +@@ -735,7 +734,7 @@ char* pmix3x_convert_jobid(opal_jobid_t jobid) + /**** RHC: NEED TO ADD SUPPORT FOR NEW PMIX DATA TYPES, INCLUDING + **** CONVERSION OF PROC STATES ****/ + +-void pmix3x_value_load(pmix_value_t *v, ++void pmix3x_info_load(pmix_info_t *i, + opal_value_t *kv) + { + opal_pmix3x_jobid_trkr_t *job; +@@ -743,91 +742,264 @@ void pmix3x_value_load(pmix_value_t *v, + opal_list_t *list; + opal_value_t *val; + pmix_info_t *info; ++ pmix_envar_t envar; + size_t n; + + switch(kv->type) { + case OPAL_UNDEF: +- v->type = PMIX_UNDEF; ++ PMIX_INFO_LOAD(i, kv->key, &kv->data, PMIX_UNDEF); + break; + case OPAL_BOOL: +- v->type = PMIX_BOOL; +- memcpy(&(v->data.flag), &kv->data.flag, 1); ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.flag, PMIX_BOOL); + break; + case OPAL_BYTE: +- v->type = PMIX_BYTE; +- memcpy(&(v->data.byte), &kv->data.byte, 1); ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.byte, PMIX_BYTE); + break; + case OPAL_STRING: +- v->type = PMIX_STRING; +- if (NULL != kv->data.string) { +- v->data.string = strdup(kv->data.string); ++ PMIX_INFO_LOAD(i, kv->key, kv->data.string, PMIX_STRING); ++ break; ++ case OPAL_SIZE: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.size, PMIX_SIZE); ++ break; ++ case OPAL_PID: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.pid, PMIX_PID); ++ break; ++ case OPAL_INT: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.integer, PMIX_INT); ++ break; ++ case OPAL_INT8: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.int8, PMIX_INT8); ++ break; ++ case OPAL_INT16: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.int16, PMIX_INT16); ++ break; ++ case OPAL_INT32: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.int32, PMIX_INT32); ++ break; ++ case OPAL_INT64: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.int64, PMIX_INT64); ++ break; ++ case OPAL_UINT: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.uint, PMIX_UINT); ++ break; ++ case OPAL_UINT8: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.uint8, PMIX_UINT8); ++ break; ++ case OPAL_UINT16: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.uint16, PMIX_UINT16); ++ break; ++ case OPAL_UINT32: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.uint32, PMIX_UINT32); ++ break; ++ case OPAL_UINT64: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.uint32, PMIX_UINT64); ++ break; ++ case OPAL_FLOAT: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.fval, PMIX_FLOAT); ++ break; ++ case OPAL_DOUBLE: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.dval, PMIX_DOUBLE); ++ break; ++ case OPAL_TIMEVAL: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.tv, PMIX_TIMEVAL); ++ break; ++ case OPAL_TIME: ++ PMIX_INFO_LOAD(i, kv->key, &kv->data.time, PMIX_TIME); ++ break; ++ case OPAL_STATUS: ++ i->value.type = PMIX_STATUS; ++ i->value.data.status = pmix3x_convert_opalrc(kv->data.status); ++ break; ++ case OPAL_VPID: ++ i->value.type = PMIX_PROC_RANK; ++ i->value.data.rank = pmix3x_convert_opalrank(kv->data.name.vpid); ++ break; ++ case OPAL_NAME: ++ i->value.type = PMIX_PROC; ++ /* have to stringify the jobid */ ++ PMIX_PROC_CREATE(i->value.data.proc, 1); ++ /* see if this job is in our list of known nspaces */ ++ found = false; ++ OPAL_LIST_FOREACH(job, &mca_pmix_pmix3x_component.jobids, opal_pmix3x_jobid_trkr_t) { ++ if (job->jobid == kv->data.name.jobid) { ++ (void)strncpy(i->value.data.proc->nspace, job->nspace, PMIX_MAX_NSLEN); ++ found = true; ++ break; ++ } ++ } ++ if (!found) { ++ (void)opal_snprintf_jobid(i->value.data.proc->nspace, PMIX_MAX_NSLEN, kv->data.name.jobid); ++ } ++ i->value.data.proc->rank = pmix3x_convert_opalrank(kv->data.name.vpid); ++ break; ++ case OPAL_BYTE_OBJECT: ++ i->value.type = PMIX_BYTE_OBJECT; ++ if (NULL != kv->data.bo.bytes) { ++ i->value.data.bo.bytes = (char*)malloc(kv->data.bo.size); ++ memcpy(i->value.data.bo.bytes, kv->data.bo.bytes, kv->data.bo.size); ++ i->value.data.bo.size = (size_t)kv->data.bo.size; ++ } else { ++ i->value.data.bo.bytes = NULL; ++ i->value.data.bo.size = 0; ++ } ++ break; ++ case OPAL_PERSIST: ++ i->value.type = PMIX_PERSIST; ++ i->value.data.persist = pmix3x_convert_opalpersist((opal_pmix_persistence_t)kv->data.uint8); ++ break; ++ case OPAL_SCOPE: ++ i->value.type = PMIX_SCOPE; ++ i->value.data.scope = pmix3x_convert_opalscope((opal_pmix_scope_t)kv->data.uint8); ++ break; ++ case OPAL_DATA_RANGE: ++ i->value.type = PMIX_DATA_RANGE; ++ i->value.data.range = pmix3x_convert_opalrange((opal_pmix_data_range_t)kv->data.uint8); ++ break; ++ case OPAL_PROC_STATE: ++ i->value.type = PMIX_PROC_STATE; ++ /* the OPAL layer doesn't have any concept of proc state, ++ * so the ORTE layer is responsible for converting it */ ++ memcpy(&i->value.data.state, &kv->data.uint8, sizeof(uint8_t)); ++ break; ++ case OPAL_PTR: ++ /* if the opal_value_t is passing a true pointer, then ++ * respect that request and pass it along */ ++ if (0 == strcmp(kv->key, OPAL_PMIX_EVENT_RETURN_OBJECT)) { ++ i->value.type = PMIX_POINTER; ++ i->value.data.ptr = kv->data.ptr; ++ break; ++ } ++ /* otherwise, it must be to a list of ++ * opal_value_t's that we need to convert to a pmix_data_array ++ * of pmix_info_t structures */ ++ list = (opal_list_t*)kv->data.ptr; ++ i->value.type = PMIX_DATA_ARRAY; ++ i->value.data.darray = (pmix_data_array_t*)malloc(sizeof(pmix_data_array_t)); ++ i->value.data.darray->type = PMIX_INFO; ++ i->value.data.darray->size = opal_list_get_size(list); ++ if (0 < i->value.data.darray->size) { ++ PMIX_INFO_CREATE(info, i->value.data.darray->size); ++ i->value.data.darray->array = info; ++ n=0; ++ OPAL_LIST_FOREACH(val, list, opal_value_t) { ++ if (NULL != val->key) { ++ (void)strncpy(info[n].key, val->key, PMIX_MAX_KEYLEN); ++ } ++ pmix3x_value_load(&info[n].value, val); ++ ++n; ++ } + } else { +- v->data.string = NULL; ++ i->value.data.darray->array = NULL; ++ } ++ break; ++ case OPAL_PROC_INFO: ++ i->value.type = PMIX_PROC_INFO; ++ PMIX_PROC_INFO_CREATE(i->value.data.pinfo, 1); ++ /* see if this job is in our list of known nspaces */ ++ found = false; ++ OPAL_LIST_FOREACH(job, &mca_pmix_pmix3x_component.jobids, opal_pmix3x_jobid_trkr_t) { ++ if (job->jobid == kv->data.pinfo.name.jobid) { ++ (void)strncpy(i->value.data.pinfo->proc.nspace, job->nspace, PMIX_MAX_NSLEN); ++ found = true; ++ break; ++ } ++ } ++ if (!found) { ++ (void)opal_snprintf_jobid(i->value.data.pinfo->proc.nspace, PMIX_MAX_NSLEN, kv->data.pinfo.name.jobid); + } ++ i->value.data.pinfo->proc.rank = pmix3x_convert_opalrank(kv->data.pinfo.name.vpid); ++ if (NULL != kv->data.pinfo.hostname) { ++ i->value.data.pinfo->hostname = strdup(kv->data.pinfo.hostname); ++ } ++ if (NULL != kv->data.pinfo.executable_name) { ++ i->value.data.pinfo->executable_name = strdup(kv->data.pinfo.executable_name); ++ } ++ i->value.data.pinfo->pid = kv->data.pinfo.pid; ++ i->value.data.pinfo->exit_code = kv->data.pinfo.exit_code; ++ i->value.data.pinfo->state = pmix3x_convert_opalstate(kv->data.pinfo.state); ++ break; ++ case OPAL_ENVAR: ++ PMIX_ENVAR_CONSTRUCT(&envar); ++ PMIX_ENVAR_LOAD(&envar, kv->data.envar.envar, kv->data.envar.value, kv->data.envar.separator); ++ PMIX_INFO_LOAD(i, kv->key, &envar, PMIX_ENVAR); ++ PMIX_ENVAR_DESTRUCT(&envar); ++ break; ++ default: ++ /* silence warnings */ ++ break; ++ } ++} ++ ++void pmix3x_value_load(pmix_value_t *v, ++ opal_value_t *kv) ++{ ++ opal_pmix3x_jobid_trkr_t *job; ++ bool found; ++ opal_list_t *list; ++ opal_value_t *val; ++ pmix_info_t *info; ++ size_t n; ++ ++ switch(kv->type) { ++ case OPAL_UNDEF: ++ PMIX_VALUE_LOAD(v, NULL, PMIX_UNDEF); ++ break; ++ case OPAL_BOOL: ++ PMIX_VALUE_LOAD(v, &kv->data.flag, PMIX_BOOL); ++ break; ++ case OPAL_BYTE: ++ PMIX_VALUE_LOAD(v, &kv->data.byte, PMIX_BYTE); ++ break; ++ case OPAL_STRING: ++ PMIX_VALUE_LOAD(v, kv->data.string, PMIX_STRING); + break; + case OPAL_SIZE: +- v->type = PMIX_SIZE; +- memcpy(&(v->data.size), &kv->data.size, sizeof(size_t)); ++ PMIX_VALUE_LOAD(v, &kv->data.size, PMIX_SIZE); + break; + case OPAL_PID: +- v->type = PMIX_PID; +- memcpy(&(v->data.pid), &kv->data.pid, sizeof(pid_t)); ++ PMIX_VALUE_LOAD(v, &kv->data.pid, PMIX_PID); + break; + case OPAL_INT: +- v->type = PMIX_INT; +- memcpy(&(v->data.integer), &kv->data.integer, sizeof(int)); ++ PMIX_VALUE_LOAD(v, &kv->data.integer, PMIX_INT); + break; + case OPAL_INT8: +- v->type = PMIX_INT8; +- memcpy(&(v->data.int8), &kv->data.int8, 1); ++ PMIX_VALUE_LOAD(v, &kv->data.int8, PMIX_INT8); + break; + case OPAL_INT16: +- v->type = PMIX_INT16; +- memcpy(&(v->data.int16), &kv->data.int16, 2); ++ PMIX_VALUE_LOAD(v, &kv->data.int16, PMIX_INT16); + break; + case OPAL_INT32: +- v->type = PMIX_INT32; +- memcpy(&(v->data.int32), &kv->data.int32, 4); ++ PMIX_VALUE_LOAD(v, &kv->data.int32, PMIX_INT32); + break; + case OPAL_INT64: +- v->type = PMIX_INT64; +- memcpy(&(v->data.int64), &kv->data.int64, 8); ++ PMIX_VALUE_LOAD(v, &kv->data.int64, PMIX_INT64); + break; + case OPAL_UINT: +- v->type = PMIX_UINT; +- memcpy(&(v->data.uint), &kv->data.uint, sizeof(int)); ++ PMIX_VALUE_LOAD(v, &kv->data.uint, PMIX_UINT); + break; + case OPAL_UINT8: +- v->type = PMIX_UINT8; +- memcpy(&(v->data.uint8), &kv->data.uint8, 1); ++ PMIX_VALUE_LOAD(v, &kv->data.uint8, PMIX_UINT8); + break; + case OPAL_UINT16: +- v->type = PMIX_UINT16; +- memcpy(&(v->data.uint16), &kv->data.uint16, 2); ++ PMIX_VALUE_LOAD(v, &kv->data.uint16, PMIX_UINT16); + break; + case OPAL_UINT32: +- v->type = PMIX_UINT32; +- memcpy(&(v->data.uint32), &kv->data.uint32, 4); ++ PMIX_VALUE_LOAD(v, &kv->data.uint32, PMIX_UINT32); + break; + case OPAL_UINT64: +- v->type = PMIX_UINT64; +- memcpy(&(v->data.uint64), &kv->data.uint64, 8); ++ PMIX_VALUE_LOAD(v, &kv->data.uint64, PMIX_UINT64); + break; + case OPAL_FLOAT: +- v->type = PMIX_FLOAT; +- memcpy(&(v->data.fval), &kv->data.fval, sizeof(float)); ++ PMIX_VALUE_LOAD(v, &kv->data.fval, PMIX_FLOAT); + break; + case OPAL_DOUBLE: +- v->type = PMIX_DOUBLE; +- memcpy(&(v->data.dval), &kv->data.dval, sizeof(double)); ++ PMIX_VALUE_LOAD(v, &kv->data.dval, PMIX_DOUBLE); + break; + case OPAL_TIMEVAL: +- v->type = PMIX_TIMEVAL; +- memcpy(&(v->data.tv), &kv->data.tv, sizeof(struct timeval)); ++ PMIX_VALUE_LOAD(v, &kv->data.tv, PMIX_TIMEVAL); + break; + case OPAL_TIME: +- v->type = PMIX_TIME; +- memcpy(&(v->data.time), &kv->data.time, sizeof(time_t)); ++ PMIX_VALUE_LOAD(v, &kv->data.time, PMIX_TIME); + break; + case OPAL_STATUS: + v->type = PMIX_STATUS; +@@ -1308,8 +1480,7 @@ static void register_handler(opal_list_t *event_codes, + PMIX_INFO_CREATE(op->info, op->ninfo); + n=0; + OPAL_LIST_FOREACH(kv, info, opal_value_t) { +- (void)strncpy(op->info[n].key, kv->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&op->info[n].value, kv); ++ pmix3x_info_load(&op->info[n], kv); + ++n; + } + } +@@ -1428,7 +1599,7 @@ static int notify_event(int status, + op->info[n].value.type = PMIX_STATUS; + op->info[n].value.data.status = pmix3x_convert_opalrc(kv->data.integer); + } else { +- pmix3x_value_load(&op->info[n].value, kv); ++ pmix3x_info_load(&op->info[n], kv); + } + ++n; + } +@@ -1533,8 +1704,7 @@ static void pmix3x_query(opal_list_t *queries, + PMIX_INFO_CREATE(cd->queries[n].qualifiers, cd->queries[n].nqual); + nq = 0; + OPAL_LIST_FOREACH(ival, &q->qualifiers, opal_value_t) { +- (void)strncpy(cd->queries[n].qualifiers[nq].key, ival->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&cd->queries[n].qualifiers[nq].value, ival); ++ pmix3x_info_load(&cd->queries[n].qualifiers[nq], ival); + ++nq; + } + } +@@ -1596,8 +1766,7 @@ static void pmix3x_log(opal_list_t *info, + PMIX_INFO_CREATE(cd->info, cd->ninfo); + n=0; + OPAL_LIST_FOREACH(ival, info, opal_value_t) { +- (void)strncpy(cd->info[n].key, ival->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&cd->info[n].value, ival); ++ pmix3x_info_load(&cd->info[n], ival); + ++n; + } + +diff --git a/opal/mca/pmix/pmix3x/pmix3x.h b/opal/mca/pmix/pmix3x/pmix3x.h +index 94e46bbd461..7048af0cb03 100644 +--- a/opal/mca/pmix/pmix3x/pmix3x.h ++++ b/opal/mca/pmix/pmix3x/pmix3x.h +@@ -3,8 +3,8 @@ + * Copyright (c) 2014-2018 Intel, Inc. All rights reserved. + * Copyright (c) 2014-2015 Mellanox Technologies, Inc. + * All rights reserved. +- * Copyright (c) 2016 Research Organization for Information Science +- * and Technology (RIST). All rights reserved. ++ * Copyright (c) 2016-2023 Research Organization for Information Science ++ * and Technology (RIST). All rights reserved. + * Copyright (c) 2017 Los Alamos National Security, LLC. All rights + * reserved. + * Copyright (c) 2021 IBM Corporation. All rights reserved. +@@ -334,6 +334,8 @@ OPAL_MODULE_DECLSPEC opal_pmix_data_range_t pmix3x_convert_range(pmix_data_range + OPAL_MODULE_DECLSPEC opal_pmix_persistence_t pmix3x_convert_persist(pmix_persistence_t scope); + OPAL_MODULE_DECLSPEC pmix_persistence_t pmix3x_convert_opalpersist(opal_pmix_persistence_t scope); + ++OPAL_MODULE_DECLSPEC void pmix3x_info_load(pmix_info_t *v, ++ opal_value_t *kv); + OPAL_MODULE_DECLSPEC void pmix3x_value_load(pmix_value_t *v, + opal_value_t *kv); + OPAL_MODULE_DECLSPEC int pmix3x_value_unload(opal_value_t *kv, +diff --git a/opal/mca/pmix/pmix3x/pmix3x_client.c b/opal/mca/pmix/pmix3x/pmix3x_client.c +index caf1a409f4a..5d9f0fd28bb 100644 +--- a/opal/mca/pmix/pmix3x/pmix3x_client.c ++++ b/opal/mca/pmix/pmix3x/pmix3x_client.c +@@ -1,8 +1,8 @@ + /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ + /* + * Copyright (c) 2014-2018 Intel, Inc. All rights reserved. +- * Copyright (c) 2014-2017 Research Organization for Information Science +- * and Technology (RIST). All rights reserved. ++ * Copyright (c) 2014-2023 Research Organization for Information Science ++ * and Technology (RIST). All rights reserved. + * Copyright (c) 2014-2017 Mellanox Technologies, Inc. + * All rights reserved. + * Copyright (c) 2016 Cisco Systems, Inc. All rights reserved. +@@ -93,8 +93,7 @@ int pmix3x_client_init(opal_list_t *ilist) + PMIX_INFO_CREATE(pinfo, ninfo); + n=0; + OPAL_LIST_FOREACH(ival, ilist, opal_value_t) { +- (void)strncpy(pinfo[n].key, ival->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&pinfo[n].value, ival); ++ pmix3x_info_load(&pinfo[n], ival); + ++n; + } + } else { +@@ -222,8 +221,7 @@ int pmix3x_tool_init(opal_list_t *info) + PMIX_INFO_CREATE(pinfo, ninfo); + n=0; + OPAL_LIST_FOREACH(val, info, opal_value_t) { +- (void)strncpy(pinfo[n].key, val->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&pinfo[n].value, val); ++ pmix3x_info_load(&pinfo[n], val); + ++n; + /* check to see if our name is being given from above */ + if (0 == strcmp(val->key, OPAL_PMIX_TOOL_NSPACE)) { +@@ -647,8 +645,7 @@ int pmix3x_get(const opal_process_name_t *proc, const char *key, + PMIX_INFO_CREATE(pinfo, sz); + n=0; + OPAL_LIST_FOREACH(ival, info, opal_value_t) { +- (void)strncpy(pinfo[n].key, ival->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&pinfo[n].value, ival); ++ pmix3x_info_load(&pinfo[n], ival); + ++n; + } + } +@@ -768,8 +765,7 @@ int pmix3x_getnb(const opal_process_name_t *proc, const char *key, + PMIX_INFO_CREATE(op->info, op->sz); + n=0; + OPAL_LIST_FOREACH(val, info, opal_value_t) { +- (void)strncpy(op->info[n].key, val->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&op->info[n].value, val); ++ pmix3x_info_load(&op->info[n], val); + ++n; + } + } +@@ -809,8 +805,7 @@ int pmix3x_publish(opal_list_t *info) + PMIX_INFO_CREATE(pinfo, sz); + n=0; + OPAL_LIST_FOREACH(iptr, info, opal_value_t) { +- (void)strncpy(pinfo[n].key, iptr->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&pinfo[n].value, iptr); ++ pmix3x_info_load(&pinfo[n], iptr); + ++n; + } + } else { +@@ -857,8 +852,7 @@ int pmix3x_publishnb(opal_list_t *info, + PMIX_INFO_CREATE(op->info, op->sz); + n=0; + OPAL_LIST_FOREACH(iptr, info, opal_value_t) { +- (void)strncpy(op->info[n].key, iptr->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&op->info[n].value, iptr); ++ pmix3x_info_load(&op->info[n], iptr); + ++n; + } + } +@@ -903,8 +897,7 @@ int pmix3x_lookup(opal_list_t *data, opal_list_t *info) + PMIX_INFO_CREATE(pinfo, sz); + n=0; + OPAL_LIST_FOREACH(iptr, info, opal_value_t) { +- (void)strncpy(pinfo[n].key, iptr->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&pinfo[n].value, iptr); ++ pmix3x_info_load(&pinfo[n], iptr); + ++n; + } + } +@@ -1052,8 +1045,7 @@ int pmix3x_lookupnb(char **keys, opal_list_t *info, + PMIX_INFO_CREATE(op->info, op->sz); + n=0; + OPAL_LIST_FOREACH(iptr, info, opal_value_t) { +- (void)strncpy(op->info[n].key, iptr->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&op->info[n].value, iptr); ++ pmix3x_info_load(&op->info[n], iptr); + ++n; + } + } +@@ -1080,8 +1072,7 @@ int pmix3x_unpublish(char **keys, opal_list_t *info) + PMIX_INFO_CREATE(pinfo, ninfo); + n=0; + OPAL_LIST_FOREACH(iptr, info, opal_value_t) { +- (void)strncpy(pinfo[n].key, iptr->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&pinfo[n].value, iptr); ++ pmix3x_info_load(&pinfo[n], iptr); + ++n; + } + } else { +@@ -1119,8 +1110,7 @@ int pmix3x_unpublishnb(char **keys, opal_list_t *info, + PMIX_INFO_CREATE(op->info, op->sz); + n=0; + OPAL_LIST_FOREACH(iptr, info, opal_value_t) { +- (void)strncpy(op->info[n].key, iptr->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&op->info[n].value, iptr); ++ pmix3x_info_load(&op->info[n], iptr); + ++n; + } + } +@@ -1154,8 +1144,7 @@ int pmix3x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid) + PMIX_INFO_CREATE(info, ninfo); + n=0; + OPAL_LIST_FOREACH(ival, job_info, opal_value_t) { +- (void)strncpy(info[n].key, ival->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&info[n].value, ival); ++ pmix3x_info_load(&info[n], ival); + ++n; + } + } +@@ -1180,7 +1169,7 @@ int pmix3x_spawn(opal_list_t *job_info, opal_list_t *apps, opal_jobid_t *jobid) + m=0; + OPAL_LIST_FOREACH(ival, &app->info, opal_value_t) { + (void)strncpy(papps[n].info[m].key, ival->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&papps[n].info[m].value, ival); ++ pmix3x_info_load(&papps[n].info[m], ival); + ++m; + } + } +@@ -1270,8 +1259,7 @@ int pmix3x_spawnnb(opal_list_t *job_info, opal_list_t *apps, + PMIX_INFO_CREATE(op->info, op->ninfo); + n=0; + OPAL_LIST_FOREACH(info, job_info, opal_value_t) { +- (void)strncpy(op->info[n].key, info->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&op->info[n].value, info); ++ pmix3x_info_load(&op->info[n], info); + ++n; + } + } +@@ -1292,8 +1280,7 @@ int pmix3x_spawnnb(opal_list_t *job_info, opal_list_t *apps, + PMIX_INFO_CREATE(op->apps[n].info, op->apps[n].ninfo); + m=0; + OPAL_LIST_FOREACH(info, &app->info, opal_value_t) { +- (void)strncpy(op->apps[n].info[m].key, info->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&op->apps[n].info[m].value, info); ++ pmix3x_info_load(&op->apps[n].info[m], info); + ++m; + } + } +@@ -1659,8 +1646,7 @@ abort(); + PMIX_INFO_CREATE(op->info, op->ninfo); + n=0; + OPAL_LIST_FOREACH(iptr, directives, opal_value_t) { +- (void)strncpy(op->info[n].key, iptr->key, PMIX_MAX_KEYLEN); +- pmix3x_value_load(&op->info[n].value, iptr); ++ pmix3x_info_load(&op->info[n], iptr); + ++n; + } + } diff --git a/easybuild/easyconfigs/p/PyYAML/PyYAML-5.4.1-GCCcore-11.2.0-Python-2.7.18.eb b/easybuild/easyconfigs/p/PyYAML/PyYAML-5.4.1-GCCcore-11.2.0-Python-2.7.18.eb new file mode 100644 index 00000000000..1e3db0a9e7f --- /dev/null +++ b/easybuild/easyconfigs/p/PyYAML/PyYAML-5.4.1-GCCcore-11.2.0-Python-2.7.18.eb @@ -0,0 +1,28 @@ +easyblock = 'PythonPackage' + +name = 'PyYAML' +version = '5.4.1' +versionsuffix = '-Python-%(pyver)s' + +homepage = "https://github.com/yaml/pyyaml" +description = """PyYAML is a YAML parser and emitter for the Python programming language.""" + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +sources = [SOURCE_TAR_GZ] +checksums = ['607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e'] + +builddependencies = [('binutils', '2.37')] + +dependencies = [ + ('Python', '2.7.18'), + ('libyaml', '0.2.5'), +] + +use_pip = True +download_dep_fail = True +sanity_pip_check = True + +options = {'modulename': 'yaml'} + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/p/Pysam/Pysam-0.17.0-GCC-11.2.0-Python-2.7.18.eb b/easybuild/easyconfigs/p/Pysam/Pysam-0.17.0-GCC-11.2.0-Python-2.7.18.eb new file mode 100644 index 00000000000..2b1c61cd8ce --- /dev/null +++ b/easybuild/easyconfigs/p/Pysam/Pysam-0.17.0-GCC-11.2.0-Python-2.7.18.eb @@ -0,0 +1,41 @@ +# This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics +# 0.9.1.4: +# Modified by: Adam Huffman +# The Francis Crick Institute +# Modified by: Erich Birngruber +# Gregor Mendel Institute +# updated to 0.1.0. +# J. Sassmannshausen / GSTT +# +easyblock = 'PythonPackage' + +name = 'Pysam' +version = '0.17.0' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://github.com/pysam-developers/pysam' +description = """Pysam is a python module for reading and manipulating Samfiles. + It's a lightweight wrapper of the samtools C-API. Pysam also includes an interface for tabix.""" + +toolchain = {'name': 'GCC', 'version': '11.2.0'} + +source_urls = ['https://github.com/pysam-developers/pysam/archive/'] +sources = ['v%(version)s.tar.gz'] +checksums = ['f4d697e322d12f239c96c263374bad2b40fd95bff34841ab9515e3de9e3e7cca'] + +dependencies = [ + ('Python', '2.7.18'), + ('ncurses', '6.2'), + ('cURL', '7.78.0'), + ('XZ', '5.2.5'), +] + +download_dep_fail = True +use_pip = True + +sanity_pip_check = True + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/p/preCICE/preCICE-2.5.0-foss-2022a.eb b/easybuild/easyconfigs/p/preCICE/preCICE-2.5.0-foss-2022a.eb new file mode 100644 index 00000000000..1cfa3f80e8b --- /dev/null +++ b/easybuild/easyconfigs/p/preCICE/preCICE-2.5.0-foss-2022a.eb @@ -0,0 +1,70 @@ +easyblock = 'CMakeMake' + +name = 'preCICE' +version = '2.5.0' + +homepage = 'https://www.precice.org/' +description = """preCICE (Precise Code Interaction Coupling Environment) +is a coupling library for partitioned multi-physics simulations, +including, but not restricted to fluid-structure interaction and +conjugate heat transfer simulations. Partitioned means that preCICE +couples existing programs (solvers) capable of simulating a subpart of +the complete physics involved in a simulation. This allows for the high +flexibility that is needed to keep a decent time-to-solution for complex +multi-physics scenarios.""" + +toolchain = {'name': 'foss', 'version': '2022a'} +toolchainopts = {'usempi': True} + +source_urls = ['https://github.com/precice/precice/archive'] +sources = ['v%(version)s.tar.gz'] +patches = [ + 'preCICE-2.5.0_link_with_statics.patch', +] +checksums = [ + {'v2.5.0.tar.gz': '76ec6ee0d1a66f6f3d3d2d11f03cfc5aa7ef4d9e5deb9b7a4b4455ec7f796c00'}, + {'preCICE-2.5.0_link_with_statics.patch': '38de293a94e9029b60b262ee23e45f0e9098f7d00ba0d0f7278b7109a50e21f6'}, +] + +builddependencies = [ + ('CMake', '3.23.1'), + ('pkgconf', '1.8.0'), +] + +dependencies = [ + ('Python', '3.10.4'), + ('Boost', '1.79.0'), + ('Eigen', '3.4.0'), + ('libxml2', '2.9.13'), + ('PETSc', '3.17.4'), + ('SciPy-bundle', '2022.05'), +] + +separate_build_dir = True +build_shared_libs = True + +# Tell pkg-config to keep flags available in CPATH and others because it prevents CMake from finding PETSc correctly +preconfigopts = 'PKG_CONFIG_ALLOW_SYSTEM_LIBS=1 PKG_CONFIG_ALLOW_SYSTEM_CFLAGS=1 ' +# Make sure MPI support is enabled +configopts = '-DPRECICE_MPICommunication=ON ' +# Make sure PETSc support is enabled +configopts += '-DPRECICE_PETScMapping=ON ' +# Make sure PythonActions support is enabled +configopts += "-DPYTHON_INCLUDE_DIR=$EBROOTPYTHON/include/python%(pyshortver)s " +configopts += "-DPYTHON_LIBRARY=$EBROOTPYTHON/lib/libpython%%(pyshortver)s.%s " % SHLIB_EXT +configopts += '-DPRECICE_PythonActions=ON ' +# force Eigen include directory which is not found correctly otherwise +configopts += '-DEIGEN3_INCLUDE_DIR="$EBROOTEIGEN/include"' + +# Run basic tests +runtest = ' test_base' + +sanity_check_paths = { + 'files': ['bin/binprecice'] + + ['include/precice/%s' % x for x in ['SolverInterfaceC.h', 'Version.h', + 'SolverInterfaceFortran.hpp', 'SolverInterface.hpp']] + + ['lib/libprecice.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'numlib' diff --git a/easybuild/easyconfigs/p/preCICE/preCICE-2.5.0_link_with_statics.patch b/easybuild/easyconfigs/p/preCICE/preCICE-2.5.0_link_with_statics.patch new file mode 100644 index 00000000000..01efdbc69fc --- /dev/null +++ b/easybuild/easyconfigs/p/preCICE/preCICE-2.5.0_link_with_statics.patch @@ -0,0 +1,22 @@ +# Adds static SCOTCH library for PETSc component +# +# Author: Jiri Furst +# +--- cmake/modules/FindPETSc.cmake.orig 2023-02-27 15:04:41.282052238 +0100 ++++ cmake/modules/FindPETSc.cmake 2023-02-27 16:10:09.140875043 +0100 +@@ -182,6 +182,15 @@ + endif() + endforeach() + ++ # Add missing static liraries (easybuild specific?) ++ foreach(_next_lib IN LISTS PC_PETSc_STATIC_LIBRARIES) ++ if(_next_lib STREQUAL "ptscotch") ++ list(APPEND _petsc_libs "$ENV{EBROOTSCOTCH}/lib/libptscotch.a") ++ elseif(_next_lib STREQUAL "scotch") ++ list(APPEND _petsc_libs "$ENV{EBROOTSCOTCH}/lib/libscotch.a") ++ endif() ++ endforeach() ++ + # Link against MPI if it is used. + # This adds all required link directories. + foreach(_next_lib IN LISTS PC_PETSc_STATIC_LIBRARIES) diff --git a/easybuild/easyconfigs/r/RDFlib/RDFlib-7.0.0-GCCcore-12.3.0.eb b/easybuild/easyconfigs/r/RDFlib/RDFlib-7.0.0-GCCcore-12.3.0.eb new file mode 100644 index 00000000000..340bf45219e --- /dev/null +++ b/easybuild/easyconfigs/r/RDFlib/RDFlib-7.0.0-GCCcore-12.3.0.eb @@ -0,0 +1,32 @@ +easyblock = 'PythonBundle' + +name = 'RDFlib' +version = '7.0.0' + +homepage = 'https://github.com/RDFLib/rdflib' +description = """RDFLib is a Python library for working with RDF, a simple yet powerful language + for representing information.""" + +toolchain = {'name': 'GCCcore', 'version': '12.3.0'} + +builddependencies = [('binutils', '2.40'), + ('poetry', '1.5.1'), + ] + +dependencies = [('Python', '3.11.3'), + ('Python-bundle-PyPI', '2023.06')] + +use_pip = True + +exts_list = [ + ('isodate', '0.6.1', { + 'checksums': ['48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9'], + }), + ('rdflib', version, { + 'checksums': ['9995eb8569428059b8c1affd26b25eac510d64f5043d9ce8c84e0d0036e995ae'], + }), +] + +sanity_pip_check = True + +moduleclass = 'lib' diff --git a/easybuild/easyconfigs/s/SMRT-Link/SMRT-Link-12.0.0.177059-cli-tools-only.eb b/easybuild/easyconfigs/s/SMRT-Link/SMRT-Link-12.0.0.177059-cli-tools-only.eb new file mode 100644 index 00000000000..3169b1073f5 --- /dev/null +++ b/easybuild/easyconfigs/s/SMRT-Link/SMRT-Link-12.0.0.177059-cli-tools-only.eb @@ -0,0 +1,44 @@ +# This file is an EasyBuild reciPY as per https://easybuilders.github.io/easybuild/ +# Author: Pablo Escobar Lopez +# sciCORE - University of Basel +# SIB Swiss Institute of Bioinformatics + +easyblock = 'Binary' + +name = "SMRT-Link" +version = "12.0.0.177059" +versionsuffix = '-cli-tools-only' + +homepage = 'https://www.pacb.com/support/software-downloads/' +description = """PacBio’s open-source SMRT Analysis software suite is designed for use with Single Molecule, + Real-Time (SMRT) Sequencing data. You can analyze, visualize, and manage your data through an intuitive GUI + or command-line interface. You can also integrate SMRT Analysis in your existing data workflow through + the extensive set of APIs provided""" + +toolchain = SYSTEM + +download_instructions = """The download is a password protected zip file +Download it from https://www.pacb.com/support/software-downloads/ and uncompress +the .run file to your sources folder""" +sources = ['smrtlink_%(version)s.run'] +checksums = ['95dadf8c5435d55724e43a290144322c32c9c9cf8b4f1e54c1a7a6f3ec368fbe'] + +install_cmd = "%(builddir)s/smrtlink_%(version)s.run --rootdir %(installdir)s --smrttools-only" + +cleanupoldinstall = True +dontcreateinstalldir = True + +modextravars = { + 'SMRT_ROOT': '%(installdir)s', +} + +modextrapaths = { + 'PATH': ['smrtcmds/bin', 'smrtcmds/developer/bin', 'admin/bin'], +} + +sanity_check_paths = { + 'files': [], + 'dirs': ['install', 'userdata'] +} + +moduleclass = 'bio' diff --git a/easybuild/easyconfigs/s/SVG/SVG-2.87-GCC-12.2.0.eb b/easybuild/easyconfigs/s/SVG/SVG-2.87-GCC-12.2.0.eb new file mode 100644 index 00000000000..70425b6ecb3 --- /dev/null +++ b/easybuild/easyconfigs/s/SVG/SVG-2.87-GCC-12.2.0.eb @@ -0,0 +1,26 @@ +easyblock = 'PerlModule' + +name = 'SVG' +version = '2.87' + +homepage = 'https://metacpan.org/pod/SVG' +description = "Perl binding for SVG" + +toolchain = {'name': 'GCC', 'version': '12.2.0'} + +source_urls = ['https://cpan.metacpan.org/authors/id/M/MA/MANWAR/'] +sources = [SOURCE_TAR_GZ] +checksums = ['b3fa58c1c59942b4ebef003da97c3e01e531480ca29e8efbe327ff0589c0bd3c'] + +dependencies = [ + ('Perl', '5.36.0'), +] + +options = {'modulename': 'SVG'} + +sanity_check_paths = { + 'files': ['lib/perl5/site_perl/%(perlver)s/SVG.pm'], + 'dirs': ['lib/perl5/site_perl/%(perlver)s/SVG'], +} + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.20.3_fix-cd_fast.patch b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.20.3_fix-cd_fast.patch new file mode 100644 index 00000000000..46ddfdbb9e7 --- /dev/null +++ b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.20.3_fix-cd_fast.patch @@ -0,0 +1,44 @@ +fix "error: type of formal parameter 1 is incomplete" +see also https://bugs.gentoo.org/630294 +--- scikit-learn-0.20.3.orig/sklearn/linear_model/cd_fast.c 2019-08-09 03:05:05.351926119 +0500 ++++ scikit-learn-0.20.3.orig/sklearn/linear_model/cd_fast.c 2019-08-09 03:05:35.022926006 +0500 +@@ -4889,7 +4889,7 @@ + + static PyObject *__pyx_pf_7sklearn_12linear_model_7cd_fast_8enet_coordinate_descent(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_w, float __pyx_v_alpha, float __pyx_v_beta, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_y, int __pyx_v_max_iter, float __pyx_v_tol, PyObject *__pyx_v_rng, int __pyx_v_random, int __pyx_v_positive) { + PyObject *__pyx_v_dtype = NULL; +- void (*__pyx_v_gemv)(enum CBLAS_ORDER, enum CBLAS_TRANSPOSE, int, int, float, float *, int, float *, int, float, float *, int); ++ void (*__pyx_v_gemv)(CBLAS_ORDER, CBLAS_TRANSPOSE, int, int, float, float *, int, float *, int, float, float *, int); + float (*__pyx_v_dot)(int, float *, int, float *, int); + void (*__pyx_v_axpy)(int, float, float *, int, float *, int); + float (*__pyx_v_asum)(int, float *, int); +@@ -6279,7 +6279,7 @@ + + static PyObject *__pyx_pf_7sklearn_12linear_model_7cd_fast_10enet_coordinate_descent(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_w, double __pyx_v_alpha, double __pyx_v_beta, __Pyx_memviewslice __pyx_v_X, __Pyx_memviewslice __pyx_v_y, int __pyx_v_max_iter, double __pyx_v_tol, PyObject *__pyx_v_rng, int __pyx_v_random, int __pyx_v_positive) { + PyObject *__pyx_v_dtype = NULL; +- void (*__pyx_v_gemv)(enum CBLAS_ORDER, enum CBLAS_TRANSPOSE, int, int, double, double *, int, double *, int, double, double *, int); ++ void (*__pyx_v_gemv)(CBLAS_ORDER, CBLAS_TRANSPOSE, int, int, double, double *, int, double *, int, double, double *, int); + double (*__pyx_v_dot)(int, double *, int, double *, int); + void (*__pyx_v_axpy)(int, double, double *, int, double *, int); + double (*__pyx_v_asum)(int, double *, int); +@@ -16246,8 +16246,8 @@ + CYTHON_UNUSED float (*__pyx_v_asum)(int, float *, int); + void (*__pyx_v_copy)(int, float *, int, float *, int); + void (*__pyx_v_scal)(int, float, float *, int); +- void (*__pyx_v_ger)(enum CBLAS_ORDER, int, int, float, float *, int, float *, int, float *, int); +- void (*__pyx_v_gemv)(enum CBLAS_ORDER, enum CBLAS_TRANSPOSE, int, int, float, float *, int, float *, int, float, float *, int); ++ void (*__pyx_v_ger)(CBLAS_ORDER, int, int, float, float *, int, float *, int, float *, int); ++ void (*__pyx_v_gemv)(CBLAS_ORDER, CBLAS_TRANSPOSE, int, int, float, float *, int, float *, int, float, float *, int); + unsigned int __pyx_v_n_samples; + unsigned int __pyx_v_n_features; + unsigned int __pyx_v_n_tasks; +@@ -17965,8 +17965,8 @@ + CYTHON_UNUSED double (*__pyx_v_asum)(int, double *, int); + void (*__pyx_v_copy)(int, double *, int, double *, int); + void (*__pyx_v_scal)(int, double, double *, int); +- void (*__pyx_v_ger)(enum CBLAS_ORDER, int, int, double, double *, int, double *, int, double *, int); +- void (*__pyx_v_gemv)(enum CBLAS_ORDER, enum CBLAS_TRANSPOSE, int, int, double, double *, int, double *, int, double, double *, int); ++ void (*__pyx_v_ger)(CBLAS_ORDER, int, int, double, double *, int, double *, int, double *, int); ++ void (*__pyx_v_gemv)(CBLAS_ORDER, CBLAS_TRANSPOSE, int, int, double, double *, int, double *, int, double, double *, int); + unsigned int __pyx_v_n_samples; + unsigned int __pyx_v_n_features; + unsigned int __pyx_v_n_tasks; diff --git a/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.20.4-foss-2021b-Python-2.7.18.eb b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.20.4-foss-2021b-Python-2.7.18.eb new file mode 100644 index 00000000000..2e978bde2c2 --- /dev/null +++ b/easybuild/easyconfigs/s/scikit-learn/scikit-learn-0.20.4-foss-2021b-Python-2.7.18.eb @@ -0,0 +1,38 @@ +easyblock = 'PythonBundle' + +name = 'scikit-learn' +version = '0.20.4' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://scikit-learn.org/stable/index.html' +description = """Scikit-learn integrates machine learning algorithms in the tightly-knit scientific Python world, +building upon numpy, scipy, and matplotlib. As a machine-learning module, +it provides versatile tools for data mining and analysis in any field of science and engineering. +It strives to be simple and efficient, accessible to everybody, and reusable in various contexts.""" + +toolchain = {'name': 'foss', 'version': '2021b'} + +dependencies = [ + ('Python', '2.7.18'), + ('SciPy-bundle', '2021.10', versionsuffix) +] + +use_pip = True +sanity_pip_check = True + +exts_list = [ + (name, version, { + 'patches': ['scikit-learn-0.20.3_fix-cd_fast.patch'], + 'checksums': [ + {'scikit-learn-0.20.4.tar.gz': 'dfa8a3f33907614030cdfbc8b6f553dacbecaf09f922244f128af3060a137cfc'}, + {'scikit-learn-0.20.3_fix-cd_fast.patch': + '9a98785a99bde000a58048ccbe382ea362aa8cf644171097e8ae755cddddeb75'}, + ], + 'modulename': 'sklearn', + }), + ('sklearn', '0.0', { + 'checksums': ['e23001573aa194b834122d2b9562459bf5ae494a2d59ca6b8aa22c85a44c0e31'], + }), +] + +moduleclass = 'data' diff --git a/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.11-GCCcore-10.3.0.eb b/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.11-GCCcore-10.3.0.eb index da8a33a8547..66f838fc14b 100644 --- a/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.11-GCCcore-10.3.0.eb +++ b/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.11-GCCcore-10.3.0.eb @@ -95,7 +95,9 @@ components = [ }), ] -postinstallcmds = ["cp -a xvfb-run %(installdir)s/bin/ && chmod u+x %(installdir)s/bin/xvfb-run"] +# enable exec permissions for xvfb-run after copying; +# need to also enable user write permissions on xvfb-run to ensure that copying with preserved permissions works +postinstallcmds = ["chmod u+w xvfb-run && cp -a xvfb-run %(installdir)s/bin/ && chmod a+x %(installdir)s/bin/xvfb-run"] sanity_check_paths = { 'files': ['bin/Xvfb', 'bin/xvfb-run'], diff --git a/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.13-GCCcore-11.2.0.eb b/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.13-GCCcore-11.2.0.eb index 8260693dbd9..0fab63d96b8 100644 --- a/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.13-GCCcore-11.2.0.eb +++ b/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.13-GCCcore-11.2.0.eb @@ -95,7 +95,9 @@ components = [ }), ] -postinstallcmds = ["cp -a xvfb-run %(installdir)s/bin/ && chmod u+x %(installdir)s/bin/xvfb-run"] +# enable exec permissions for xvfb-run after copying; +# need to also enable user write permissions on xvfb-run to ensure that copying with preserved permissions works +postinstallcmds = ["chmod u+w xvfb-run && cp -a xvfb-run %(installdir)s/bin/ && chmod a+x %(installdir)s/bin/xvfb-run"] sanity_check_paths = { 'files': ['bin/Xvfb', 'bin/xvfb-run'], diff --git a/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.8-GCCcore-8.2.0.eb b/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.8-GCCcore-8.2.0.eb index cecac7a6fb8..1db3dc5e081 100644 --- a/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.8-GCCcore-8.2.0.eb +++ b/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.8-GCCcore-8.2.0.eb @@ -100,7 +100,9 @@ components = [ }), ] -postinstallcmds = ["cp -a xvfb-run %(installdir)s/bin/ && chmod u+x %(installdir)s/bin/xvfb-run"] +# enable exec permissions for xvfb-run after copying; +# need to also enable user write permissions on xvfb-run to ensure that copying with preserved permissions works +postinstallcmds = ["chmod u+w xvfb-run && cp -a xvfb-run %(installdir)s/bin/ && chmod a+x %(installdir)s/bin/xvfb-run"] sanity_check_paths = { 'files': ['bin/Xvfb', 'bin/xvfb-run'], diff --git a/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.8-GCCcore-8.3.0.eb b/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.8-GCCcore-8.3.0.eb index 4a228b5fdf7..fc27c8fc593 100644 --- a/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.8-GCCcore-8.3.0.eb +++ b/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.8-GCCcore-8.3.0.eb @@ -100,7 +100,9 @@ components = [ }), ] -postinstallcmds = ["cp -a xvfb-run %(installdir)s/bin/ && chmod u+x %(installdir)s/bin/xvfb-run"] +# enable exec permissions for xvfb-run after copying; +# need to also enable user write permissions on xvfb-run to ensure that copying with preserved permissions works +postinstallcmds = ["chmod u+w xvfb-run && cp -a xvfb-run %(installdir)s/bin/ && chmod a+x %(installdir)s/bin/xvfb-run"] sanity_check_paths = { 'files': ['bin/Xvfb', 'bin/xvfb-run'], diff --git a/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.9-GCCcore-10.2.0.eb b/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.9-GCCcore-10.2.0.eb index 5341032753f..43d07a3d4e1 100644 --- a/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.9-GCCcore-10.2.0.eb +++ b/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.9-GCCcore-10.2.0.eb @@ -95,7 +95,9 @@ components = [ }), ] -postinstallcmds = ["cp -a xvfb-run %(installdir)s/bin/ && chmod u+x %(installdir)s/bin/xvfb-run"] +# enable exec permissions for xvfb-run after copying; +# need to also enable user write permissions on xvfb-run to ensure that copying with preserved permissions works +postinstallcmds = ["chmod u+w xvfb-run && cp -a xvfb-run %(installdir)s/bin/ && chmod a+x %(installdir)s/bin/xvfb-run"] sanity_check_paths = { 'files': ['bin/Xvfb', 'bin/xvfb-run'], diff --git a/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.9-GCCcore-9.3.0.eb b/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.9-GCCcore-9.3.0.eb index 772ef1b22f5..94aa35864b6 100644 --- a/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.9-GCCcore-9.3.0.eb +++ b/easybuild/easyconfigs/x/Xvfb/Xvfb-1.20.9-GCCcore-9.3.0.eb @@ -95,7 +95,9 @@ components = [ }), ] -postinstallcmds = ["cp -a xvfb-run %(installdir)s/bin/ && chmod u+x %(installdir)s/bin/xvfb-run"] +# enable exec permissions for xvfb-run after copying; +# need to also enable user write permissions on xvfb-run to ensure that copying with preserved permissions works +postinstallcmds = ["chmod u+w xvfb-run && cp -a xvfb-run %(installdir)s/bin/ && chmod a+x %(installdir)s/bin/xvfb-run"] sanity_check_paths = { 'files': ['bin/Xvfb', 'bin/xvfb-run'], diff --git a/easybuild/easyconfigs/x/Xvfb/Xvfb-21.1.3-GCCcore-11.3.0.eb b/easybuild/easyconfigs/x/Xvfb/Xvfb-21.1.3-GCCcore-11.3.0.eb index 35ddaebf9e8..cd7d049d7e1 100644 --- a/easybuild/easyconfigs/x/Xvfb/Xvfb-21.1.3-GCCcore-11.3.0.eb +++ b/easybuild/easyconfigs/x/Xvfb/Xvfb-21.1.3-GCCcore-11.3.0.eb @@ -108,7 +108,9 @@ components = [ }), ] -postinstallcmds = ["cp -a xvfb-run %(installdir)s/bin/ && chmod u+x %(installdir)s/bin/xvfb-run"] +# enable exec permissions for xvfb-run after copying; +# need to also enable user write permissions on xvfb-run to ensure that copying with preserved permissions works +postinstallcmds = ["chmod u+w xvfb-run && cp -a xvfb-run %(installdir)s/bin/ && chmod a+x %(installdir)s/bin/xvfb-run"] sanity_check_paths = { 'files': ['bin/Xvfb', 'bin/xvfb-run'], diff --git a/easybuild/easyconfigs/x/Xvfb/Xvfb-21.1.6-GCCcore-12.2.0.eb b/easybuild/easyconfigs/x/Xvfb/Xvfb-21.1.6-GCCcore-12.2.0.eb index 306d5b638f1..2917a7c8876 100644 --- a/easybuild/easyconfigs/x/Xvfb/Xvfb-21.1.6-GCCcore-12.2.0.eb +++ b/easybuild/easyconfigs/x/Xvfb/Xvfb-21.1.6-GCCcore-12.2.0.eb @@ -108,7 +108,9 @@ components = [ }), ] -postinstallcmds = ["cp -a xvfb-run %(installdir)s/bin/ && chmod u+x %(installdir)s/bin/xvfb-run"] +# enable exec permissions for xvfb-run after copying; +# need to also enable user write permissions on xvfb-run to ensure that copying with preserved permissions works +postinstallcmds = ["chmod u+w xvfb-run && cp -a xvfb-run %(installdir)s/bin/ && chmod a+x %(installdir)s/bin/xvfb-run"] sanity_check_paths = { 'files': ['bin/Xvfb', 'bin/xvfb-run'], diff --git a/easybuild/easyconfigs/x/Xvfb/Xvfb-21.1.8-GCCcore-12.3.0.eb b/easybuild/easyconfigs/x/Xvfb/Xvfb-21.1.8-GCCcore-12.3.0.eb index 5e25aa280fe..5cb7e312a44 100644 --- a/easybuild/easyconfigs/x/Xvfb/Xvfb-21.1.8-GCCcore-12.3.0.eb +++ b/easybuild/easyconfigs/x/Xvfb/Xvfb-21.1.8-GCCcore-12.3.0.eb @@ -108,7 +108,9 @@ components = [ }), ] -postinstallcmds = ["cp -a xvfb-run %(installdir)s/bin/ && chmod u+x %(installdir)s/bin/xvfb-run"] +# enable exec permissions for xvfb-run after copying; +# need to also enable user write permissions on xvfb-run to ensure that copying with preserved permissions works +postinstallcmds = ["chmod u+w xvfb-run && cp -a xvfb-run %(installdir)s/bin/ && chmod a+x %(installdir)s/bin/xvfb-run"] sanity_check_paths = { 'files': ['bin/Xvfb', 'bin/xvfb-run'],