SAGE_SPKG_CONFIGURE([brial], [
dnl Issue #31624: Avoid C++ ABI issues
SAGE_SPKG_DEPCHECK([gcc m4ri], [
# If we're using the system m4ri, ensure that we can
# compile and run an executable linked against both libbrial and
# libbrial_groebner (both are used by SageMath).
AC_LANG_PUSH(C++)
SAVED_LIBS=$LIBS
LIBS="$LIBS -lbrial -lbrial_groebner"
AC_MSG_CHECKING([if we can link against brial libraries and run])
AC_RUN_IFELSE([
AC_LANG_PROGRAM([
#include <polybori.h>
#include <polybori/groebner/groebner_alg.h>
USING_NAMESPACE_PBORI
USING_NAMESPACE_PBORIGB
class MyConstant : public BooleConstant{
public: void negate() { this->m_value = !this->m_value; }
};
],[
BoolePolyRing r = BoolePolyRing(2, COrderEnums::dlex);
ReductionStrategy rs = ReductionStrategy(r);
rs.llReduceAll(); // uses groebner lib
if (2 != r.nVariables()) { return 1; }
if (r.constant(true) == r.constant(false)) { return 2; }
MyConstant f = MyConstant();
f.negate(); // ensures v1.1.0+ if m_value isn't const
if (!f.isOne()) { return 3; }
return 0;
])
],
[
dnl check we're not on Fedora 30 - more precisely, we reject version 1.2.5
dnl for which the version is verifiable by the following code.
AC_MSG_CHECKING([version not equal to 1.2.5])
AC_RUN_IFELSE([
AC_LANG_PROGRAM(
[[#include <polybori.h>
#include <polybori/config.h>
]], [[
if (VERSION=="1.2.5") return 0;
else return 1;
]])
], [
AC_MSG_RESULT([found a possibly buggy 1.2.5. Rejecting])
sage_spkg_install_brial=yes
], [
AC_MSG_RESULT([yes])
sage_spkg_install_brial=no
], [
AC_MSG_RESULT([cross compiling. Assume yes])
sage_spkg_install_brial=no
])
],
[
AC_MSG_RESULT([no])
sage_spkg_install_brial=yes
],
[
AC_MSG_CHECKING([if we can link against brial libraries])
AC_LINK_IFELSE([
AC_LANG_PROGRAM([
#include <polybori.h>
#include <polybori/groebner/groebner_alg.h>
USING_NAMESPACE_PBORI
USING_NAMESPACE_PBORIGB
class MyConstant : public BooleConstant{
public: void negate() { this->m_value = !this->m_value; }
};
],[
BoolePolyRing r = BoolePolyRing(2, COrderEnums::dlex);
ReductionStrategy rs = ReductionStrategy(r);
rs.llReduceAll(); // uses groebner lib
if (2 != r.nVariables()) { return 1; }
if (r.constant(true) == r.constant(false)) { return 2; }
MyConstant f = MyConstant();
f.negate(); // ensures v1.1.0+ if m_value isn't const
if (!f.isOne()) { return 3; }
return 0;
])
],[
AC_MSG_RESULT([yes])
sage_spkg_install_brial=yes
],[
AC_MSG_RESULT([no])
sage_spkg_install_brial=no
])
])
LIBS=$SAVED_LIBS
AC_LANG_POP
],
[ # If we're installing sage's m4ri, then we have to
# install its BRiAl, too.
sage_spkg_install_brial=yes
])
])