Skip to content

Commit

Permalink
sci-libs/cantera: revision bump (r2) with fix python installation path
Browse files Browse the repository at this point in the history
Fix python installation path using 'libdirname' env variable.
This patch is backport of upstream patch [1].

[1] Cantera/cantera#674

This patch is backport of upstream patch [1] but with removing of
'setIterator' function instead of it's deprecation.

[1] Cantera/cantera#672

Closes: gentoo#12701
Signed-off-by: Sergey Torokhov <torokhov_s_a@mail.ru>
Signed-off-by: Joonas Niilola <juippis@gentoo.org>
  • Loading branch information
band-a-prend authored and Wilson Michaels committed Sep 14, 2019
1 parent fde7e9b commit ffe4c3a
Show file tree
Hide file tree
Showing 3 changed files with 333 additions and 0 deletions.
126 changes: 126 additions & 0 deletions sci-libs/cantera/cantera-2.4.0-r2.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7

PYTHON_COMPAT=( python3_{5,6,7} )

FORTRAN_NEEDED=fortran
FORTRAN_STANDARD=90

inherit desktop fortran-2 python-single-r1 scons-utils toolchain-funcs

DESCRIPTION="Object-oriented tool suite for chemical kinetics, thermodynamics, and transport"
HOMEPAGE="https://www.cantera.org"
SRC_URI="https://github.com/Cantera/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"

LICENSE="BSD"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="+cti fortran pch +python test"

REQUIRED_USE="
python? ( cti )
${PYTHON_REQUIRED_USE}
"

RDEPEND="
${PYTHON_DEPS}
python? (
dev-python/numpy[${PYTHON_USEDEP}]
)
<sci-libs/sundials-5.0.0:0=
"

DEPEND="
${RDEPEND}
dev-cpp/eigen:3
dev-libs/boost
dev-libs/libfmt
python? (
dev-python/cython[${PYTHON_USEDEP}]
)
test? (
>=dev-cpp/gtest-1.8.0
)
"

PATCHES=(
"${FILESDIR}/${PN}_${PV}_env.patch"
"${FILESDIR}/${PN}_${PV}_env_python_install.patch"
"${FILESDIR}/${PN}_${PV}_sundials4.patch"
)

pkg_setup() {
fortran-2_pkg_setup
python-single-r1_pkg_setup
}

## Full list of configuration options of Cantera is presented here:
## http://cantera.org/docs/sphinx/html/compiling/config-options.html

src_configure() {
scons_vars=(
CC="$(tc-getCC)"
CXX="$(tc-getCXX)"
cc_flags="${CXXFLAGS}"
cxx_flags="-std=c++11"
debug="no"
FORTRAN="$(tc-getFC)"
FORTRANFLAGS="${CXXFLAGS}"
optimize_flags="-Wno-inline"
renamed_shared_libraries="no"
use_pch=$(usex pch)
## In some cases other order can break the detection of right location of Boost: ##
system_fmt="y"
system_sundials="y"
system_eigen="y"
env_vars="all"
extra_inc_dirs="/usr/include/eigen3"
)
use test || scons_vars+=( googletest="none" )

scons_targets=(
f90_interface=$(usex fortran y n)
python2_package="none"
)

if use cti ; then
local scons_python=$(usex python full minimal)
scons_targets+=( python3_package="${scons_python}" python3_cmd="${EPYTHON}" )
else
scons_targets+=( python3_package="none" )
fi
}

src_compile() {
escons build "${scons_vars[@]}" "${scons_targets[@]}" prefix="/usr"
}

src_test() {
escons test
}

src_install() {
escons install stage_dir="${D}" libdirname="$(get_libdir)"
if ! use cti ; then
rm -r "${D}/usr/share/man" || die "Can't remove man files."
else
# Run the byte-compile of modules
python_optimize "${D}/$(python_get_sitedir)/${PN}"
fi
}

pkg_postinst() {
if use cti && ! use python ; then
elog "Cantera was build without 'python' use-flag therefore the CTI tool 'ck2cti'"
elog "will convert Chemkin files to Cantera format without verification of kinetic mechanism."
fi

local post_msg=$(usex fortran "and Fortran " "")
elog "C++ ${post_msg}samples are installed to '/usr/share/${PN}/samples/' directory."

if use python ; then
elog "Python examples are installed to '$(python_get_sitedir)/${PN}/examples/' directories."
fi
}
17 changes: 17 additions & 0 deletions sci-libs/cantera/files/cantera_2.4.0_env_python_install.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
diff -Nur old/interfaces/cython/SConscript new/interfaces/cython/SConscript
--- old/interfaces/cython/SConscript 2018-08-24 16:24:45.000000000 +0300
+++ new/interfaces/cython/SConscript 2019-08-14 04:28:41.000000000 +0300
@@ -83,10 +83,10 @@
extra = ''
elif localenv['OS'] == 'Darwin':
extra = localenv.subst(' --prefix=${python%s_prefix}' % major)
- elif localenv['libdirname'] == 'lib64':
- # 64-bit RHEL / Fedora
+ elif localenv['libdirname'] != 'lib':
+ # 64-bit RHEL / Fedora etc. or e.g. x32 Gentoo profile
extra = localenv.subst(
- ' --prefix=${python%s_prefix} --install-lib=${python%s_prefix}/lib64/python%s.%s/site-packages' % (major, major, major, minor))
+ ' --prefix=${python%s_prefix} --install-lib=${python%s_prefix}/${libdirname}/python%s.%s/site-packages' % (major, major, major, minor))
else:
extra = '--user'
localenv.AppendENVPath(
190 changes: 190 additions & 0 deletions sci-libs/cantera/files/cantera_2.4.0_sundials4.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
diff -Nur old/SConstruct new/SConstruct
--- old/SConstruct 2019-08-14 04:12:50.000000000 +0300
+++ new/SConstruct 2019-08-14 04:38:55.000000000 +0300
@@ -1013,23 +1013,29 @@

import SCons.Conftest, SCons.SConf
context = SCons.SConf.CheckContext(conf)
-ret = SCons.Conftest.CheckLib(context,
- ['sundials_cvodes'],
- header='#include "cvodes/cvodes.h"',
- language='C++',
- call='CVodeCreate(CV_BDF, CV_NEWTON);',
- autoadd=False,
- extra_libs=env['blas_lapack_libs'])
-if ret:
+
+# Check initially for Sundials<=3.2 and then for Sundials>=4.0
+for cvode_call in ['CVodeCreate(CV_BDF, CV_NEWTON);','CVodeCreate(CV_BDF);']:
+ ret = SCons.Conftest.CheckLib(context,
+ ['sundials_cvodes'],
+ header='#include "cvodes/cvodes.h"',
+ language='C++',
+ call=cvode_call,
+ autoadd=False,
+ extra_libs=env['blas_lapack_libs'])
# CheckLib returns False to indicate success
+ if not ret:
+ if env['system_sundials'] == 'default':
+ env['system_sundials'] = 'y'
+ break
+
+# Execute if the cycle ends without 'break'
+else:
if env['system_sundials'] == 'default':
env['system_sundials'] = 'n'
elif env['system_sundials'] == 'y':
config_error('Expected system installation of Sundials, but it could '
'not be found.')
-elif env['system_sundials'] == 'default':
- env['system_sundials'] = 'y'
-

# Checkout Sundials submodule if needed
if (env['system_sundials'] == 'n' and
@@ -1066,7 +1072,7 @@

# Ignore the minor version, e.g. 2.4.x -> 2.4
env['sundials_version'] = '.'.join(sundials_version.split('.')[:2])
- if env['sundials_version'] not in ('2.4','2.5','2.6','2.7','3.0','3.1','3.2'):
+ if env['sundials_version'] not in ('2.4','2.5','2.6','2.7','3.0','3.1','3.2','4.0','4.1'):
print("""ERROR: Sundials version %r is not supported.""" % env['sundials_version'])
sys.exit(1)
print("""INFO: Using system installation of Sundials version %s.""" % sundials_version)
diff -Nur old/include/cantera/numerics/CVodesIntegrator.h new/include/cantera/numerics/CVodesIntegrator.h
--- old/include/cantera/numerics/CVodesIntegrator.h 2018-08-24 16:24:45.000000000 +0300
+++ new/include/cantera/numerics/CVodesIntegrator.h 2019-08-14 04:39:50.000000000 +0300
@@ -49,7 +49,6 @@
m_maxord = n;
}
virtual void setMethod(MethodType t);
- virtual void setIterator(IterType t);
virtual void setMaxStepSize(double hmax);
virtual void setMinStepSize(double hmin);
virtual void setMaxSteps(int nmax);
diff -Nur old/include/cantera/numerics/Integrator.h new/include/cantera/numerics/Integrator.h
--- old/include/cantera/numerics/Integrator.h 2018-08-24 16:24:45.000000000 +0300
+++ new/include/cantera/numerics/Integrator.h 2019-08-14 04:44:27.000000000 +0300
@@ -34,17 +34,6 @@
Adams_Method //! Adams
};

-//! Specifies the method used for iteration.
-/*!
- * Not all methods are supported by all integrators.
- */
-enum IterType {
- //! Newton Iteration
- Newton_Iter,
- //! Functional Iteration
- Functional_Iter
-};
-
//! Abstract base class for ODE system integrators.
/*!
* @ingroup odeGroup
@@ -163,11 +152,6 @@
warn("setMethodType");
}

- //! Set the linear iterator.
- virtual void setIterator(IterType t) {
- warn("setInterator");
- }
-
//! Set the maximum step size
virtual void setMaxStepSize(double hmax) {
warn("setMaxStepSize");
diff -Nur old/src/kinetics/ImplicitSurfChem.cpp new/src/kinetics/ImplicitSurfChem.cpp
--- old/src/kinetics/ImplicitSurfChem.cpp 2018-08-24 16:24:45.000000000 +0300
+++ new/src/kinetics/ImplicitSurfChem.cpp 2019-08-14 04:45:57.000000000 +0300
@@ -79,7 +79,6 @@
// numerically, and use a Newton linear iterator
m_integ->setMethod(BDF_Method);
m_integ->setProblemType(DENSE + NOJAC);
- m_integ->setIterator(Newton_Iter);
m_work.resize(ntmax);
}

diff -Nur old/src/numerics/CVodesIntegrator.cpp new/src/numerics/CVodesIntegrator.cpp
--- old/src/numerics/CVodesIntegrator.cpp 2018-08-24 16:24:45.000000000 +0300
+++ new/src/numerics/CVodesIntegrator.cpp 2019-08-14 04:49:02.000000000 +0300
@@ -88,7 +88,6 @@
m_type(DENSE+NOJAC),
m_itol(CV_SS),
m_method(CV_BDF),
- m_iter(CV_NEWTON),
m_maxord(0),
m_reltol(1.e-9),
m_abstols(1.e-15),
@@ -218,17 +217,6 @@
}
}

-void CVodesIntegrator::setIterator(IterType t)
-{
- if (t == Newton_Iter) {
- m_iter = CV_NEWTON;
- } else if (t == Functional_Iter) {
- m_iter = CV_FUNCTIONAL;
- } else {
- throw CanteraError("CVodesIntegrator::setIterator", "unknown iterator");
- }
-}
-
void CVodesIntegrator::sensInit(double t0, FuncEval& func)
{
m_np = func.nparams();
@@ -284,7 +272,11 @@
//! Specify the method and the iteration type. Cantera Defaults:
//! CV_BDF - Use BDF methods
//! CV_NEWTON - use Newton's method
- m_cvode_mem = CVodeCreate(m_method, m_iter);
+ #if CT_SUNDIALS_VERSION < 40
+ m_cvode_mem = CVodeCreate(m_method, CV_NEWTON);
+ #else
+ m_cvode_mem = CVodeCreate(m_method);
+ #endif
if (!m_cvode_mem) {
throw CanteraError("CVodesIntegrator::initialize",
"CVodeCreate failed.");
@@ -394,7 +386,11 @@
#if CT_SUNDIALS_VERSION >= 30
SUNLinSolFree((SUNLinearSolver) m_linsol);
SUNMatDestroy((SUNMatrix) m_linsol_matrix);
- m_linsol_matrix = SUNBandMatrix(N, nu, nl, nu+nl);
+ #if CT_SUNDIALS_VERSION < 40
+ m_linsol_matrix = SUNBandMatrix(N, nu, nl, nu+nl);
+ #else
+ m_linsol_matrix = SUNBandMatrix(N, nu, nl);
+ #endif
#if CT_SUNDIALS_USE_LAPACK
m_linsol = SUNLapackBand(m_y, (SUNMatrix) m_linsol_matrix);
#else
diff -Nur old/src/numerics/IDA_Solver.cpp new/src/numerics/IDA_Solver.cpp
--- old/src/numerics/IDA_Solver.cpp 2018-08-24 16:24:45.000000000 +0300
+++ new/src/numerics/IDA_Solver.cpp 2019-08-14 04:51:01.000000000 +0300
@@ -442,7 +442,11 @@
#if CT_SUNDIALS_VERSION >= 30
SUNLinSolFree((SUNLinearSolver) m_linsol);
SUNMatDestroy((SUNMatrix) m_linsol_matrix);
- m_linsol_matrix = SUNBandMatrix(N, nu, nl, nu+nl);
+ #if CT_SUNDIALS_VERSION < 40
+ m_linsol_matrix = SUNBandMatrix(N, nu, nl, nu+nl);
+ #else
+ m_linsol_matrix = SUNBandMatrix(N, nu, nl);
+ #endif
#if CT_SUNDIALS_USE_LAPACK
m_linsol = SUNLapackBand(m_y, (SUNMatrix) m_linsol_matrix);
#else
diff -Nur old/src/zeroD/ReactorNet.cpp new/src/zeroD/ReactorNet.cpp
--- old/src/zeroD/ReactorNet.cpp 2018-08-24 16:24:45.000000000 +0300
+++ new/src/zeroD/ReactorNet.cpp 2019-08-14 04:51:35.000000000 +0300
@@ -28,7 +28,6 @@
// numerically, and use a Newton linear iterator
m_integ->setMethod(BDF_Method);
m_integ->setProblemType(DENSE + NOJAC);
- m_integ->setIterator(Newton_Iter);
}

void ReactorNet::setInitialTime(double time)

0 comments on commit ffe4c3a

Please sign in to comment.