Your message dated Fri, 20 May 2016 19:16:24 +0000
with message-id <e1b3puk-0002qn...@franck.debian.org>
and subject line Bug#820450: fixed in yade 1.20.0-9
has caused the Debian Bug report #820450,
regarding yade: FTBFS with glibc 2.23: 'isnan' was not declared in this scope
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
820450: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=820450
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Source: yade
Version: 1.20.0-7

Hi Maintainer

Yade FTBFS with glibc 2.23 available in Experimental and Ubuntu Xenial.
I was able to get yade to build in Ubuntu with the attached patch.

There are other occurrences of 'isnan' and 'isinf' inside #ifdefs that I did not replace. I don't know if it would be better to just search & replace inside all files, or whether there is a simpler way to fix this.

Regards
Graham


[1] https://launchpad.net/ubuntu/+archive/test-rebuild-20160401/+build/9526535/+files/buildlog_ubuntu-xenial-amd64.yade_1.20.0-7_BUILDING.txt.gz

--- a/gui/qt5/GLViewer.cpp
+++ b/gui/qt5/GLViewer.cpp
@@ -350,7 +350,7 @@
 	if(not(rb->bound)){ rb->updateBound();}
 	
 	min=rb->bound->min; max=rb->bound->max;
-	bool hasNan=(isnan(min[0])||isnan(min[1])||isnan(min[2])||isnan(max[0])||isnan(max[1])||isnan(max[2]));
+	bool hasNan=(std::isnan(min[0])||std::isnan(min[1])||std::isnan(min[2])||std::isnan(max[0])||std::isnan(max[1])||std::isnan(max[2]));
 	Real minDim=std::min(max[0]-min[0],std::min(max[1]-min[1],max[2]-min[2]));
 	if(minDim<=0 || hasNan){
 		// Aabb is not yet calculated...
@@ -362,7 +362,7 @@
 			max=max.cwiseMax(b->state->pos);
 			min=min.cwiseMin(b->state->pos);
 		}
-		if(isinf(min[0])||isinf(min[1])||isinf(min[2])||isinf(max[0])||isinf(max[1])||isinf(max[2])){ LOG_DEBUG("No min/max computed from bodies either, setting cube (-1,-1,-1)×(1,1,1)"); min=-Vector3r::Ones(); max=Vector3r::Ones(); }
+		if(std::isinf(min[0])||std::isinf(min[1])||std::isinf(min[2])||std::isinf(max[0])||std::isinf(max[1])||std::isinf(max[2])){ LOG_DEBUG("No min/max computed from bodies either, setting cube (-1,-1,-1)×(1,1,1)"); min=-Vector3r::Ones(); max=Vector3r::Ones(); }
 	} else {LOG_DEBUG("Using scene's Aabb");}
 
 	LOG_DEBUG("Got scene box min="<<min<<" and max="<<max);
--- a/pkg/common/Cylinder.cpp
+++ b/pkg/common/Cylinder.cpp
@@ -450,7 +450,7 @@
 		
 		ChainedCylinder *cc1=static_cast<ChainedCylinder*>(cm1.get());
 		ChainedCylinder *cc2=static_cast<ChainedCylinder*>(cm2.get());
-		if(isnan(dist)){ //now if we didn't found a suitable distance because the segments don't cross each other, we try to find a sphere-cylinder distance.
+		if(std::isnan(dist)){ //now if we didn't found a suitable distance because the segments don't cross each other, we try to find a sphere-cylinder distance.
 			Vector3r pointsToCheck[4]={A,A+a,B,B+b}; Real resultDist=dist, resultProj=dist ; int whichCaseIsCloser=-1 ;
 			for (int i=0;i<4;i++){  //loop on the 4 cylinder's extremities and look at the extremity-cylinder distance
 				Vector3r S=pointsToCheck[i], C=(i<2)?B:A, vec=(i<2)?b:a; Vector3r CS=S-C;
@@ -458,7 +458,7 @@
 				if(d<0.) resultDist=CS.norm();
 				else if(d>vec.norm()) resultDist=(C+vec-S).norm();
 				else resultDist=(CS.cross(vec)).norm()/(vec.norm());
-				if(dist>resultDist or isnan(dist)){dist=resultDist ; whichCaseIsCloser=i; resultProj=d;}
+				if(dist>resultDist or std::isnan(dist)){dist=resultDist ; whichCaseIsCloser=i; resultProj=d;}
 			}
 			//we know which extremity may be in contact (i), so k and m are computed to generate the right fictiousStates.
 			insideCyl1=1 ; insideCyl2=1;
--- a/pkg/common/ZECollider.cpp
+++ b/pkg/common/ZECollider.cpp
@@ -68,7 +68,7 @@
 				minR=min(s->radius,minR);
 			}
 			// if no spheres, disable stride
-			verletDist=isinf(minR) ? 0 : std::abs(verletDist)*minR;
+			verletDist=std::isinf(minR) ? 0 : std::abs(verletDist)*minR;
 		}
 		
 		// update bounds via boundDispatcher
--- a/pkg/common/MatchMaker.cpp
+++ b/pkg/common/MatchMaker.cpp
@@ -9,7 +9,7 @@
 		if(((int)m[0]==id1 && (int)m[1]==id2) || ((int)m[0]==id2 && (int)m[1]==id1)) return m[2];
 	}
 	// no match
-	if(fbNeedsValues && (isnan(val1) || isnan(val2))) throw std::invalid_argument("MatchMaker: no match for ("+boost::lexical_cast<string>(id1)+","+boost::lexical_cast<string>(id2)+"), and values required for algo computation '"+algo+"' not specified.");
+	if(fbNeedsValues && (std::isnan(val1) || std::isnan(val2))) throw std::invalid_argument("MatchMaker: no match for ("+boost::lexical_cast<string>(id1)+","+boost::lexical_cast<string>(id2)+"), and values required for algo computation '"+algo+"' not specified.");
 	return computeFallback(val1,val2);
 }
 
--- a/pkg/common/Gl1_NormPhys.cpp
+++ b/pkg/common/Gl1_NormPhys.cpp
@@ -34,7 +34,7 @@
 		fnNorm=std::abs(fnNorm);
 		Real radiusScale=1.;
 		// weak/strong fabric, only used if maxWeakFn is set
-		if(!isnan(maxWeakFn)){
+		if(!std::isnan(maxWeakFn)){
 			if(fnNorm*fnSign<maxWeakFn){ // weak fabric
 				if(weakFilter>0) return;
 				radiusScale=weakScale;
--- a/pkg/common/InsertionSortCollider.cpp
+++ b/pkg/common/InsertionSortCollider.cpp
@@ -241,9 +241,9 @@
 				if(!s) continue;
 				minR=min(s->radius,minR);
 			}
-			if (isinf(minR)) LOG_ERROR("verletDist is set to 0 because no spheres were found. It will result in suboptimal performances, consider setting a positive verletDist in your script.");
+			if (std::isinf(minR)) LOG_ERROR("verletDist is set to 0 because no spheres were found. It will result in suboptimal performances, consider setting a positive verletDist in your script.");
 			// if no spheres, disable stride
-			verletDist=isinf(minR) ? 0 : std::abs(verletDist)*minR;
+			verletDist=std::isinf(minR) ? 0 : std::abs(verletDist)*minR;
 		}
 		// if interactions are dirty, force reinitialization
 		if(scene->interactions->dirty){
--- a/pkg/common/Facet.cpp
+++ b/pkg/common/Facet.cpp
@@ -20,7 +20,7 @@
 	// in the future, a fixed-size array should be used instead of vector<Vector3r> for vertices
 	// this is prevented by yade::serialization now IIRC
 	if(vertices.size()!=3){ throw runtime_error(("Facet must have exactly 3 vertices (not "+boost::lexical_cast<string>(vertices.size())+")").c_str()); }
-	if(isnan(vertices[0][0])) return;  // not initialized, nothing to do
+	if(std::isnan(vertices[0][0])) return;  // not initialized, nothing to do
 	Vector3r e[3] = {vertices[1]-vertices[0] ,vertices[2]-vertices[1] ,vertices[0]-vertices[2]};
 	#define CHECK_EDGE(i) if(e[i].squaredNorm()==0){LOG_FATAL("Facet has coincident vertices "<<i<<" ("<<vertices[i]<<") and "<<(i+1)%3<<" ("<<vertices[(i+1)%3]<<")!");}
 		CHECK_EDGE(0); CHECK_EDGE(1);CHECK_EDGE(2);
--- a/pkg/dem/NewtonIntegrator.cpp
+++ b/pkg/dem/NewtonIntegrator.cpp
@@ -102,7 +102,7 @@
 	// its velocity will count as max velocity of bodies
 	// otherwise the collider might not run if only the cell were changing without any particle motion
 	// FIXME: will not work for pure shear transformation, which does not change Cell::getSize()
-	if(scene->isPeriodic && ((prevCellSize!=scene->cell->getSize())) && /* initial value */!isnan(prevCellSize[0]) ){ cellChanged=true; maxVelocitySq=(prevCellSize-scene->cell->getSize()).squaredNorm()/pow(dt,2); }
+	if(scene->isPeriodic && ((prevCellSize!=scene->cell->getSize())) && /* initial value */!std::isnan(prevCellSize[0]) ){ cellChanged=true; maxVelocitySq=(prevCellSize-scene->cell->getSize()).squaredNorm()/pow(dt,2); }
 	else { maxVelocitySq=0; cellChanged=false; }
 
 	#ifdef YADE_BODY_CALLBACK
--- a/lib/triangulation/FlowBoundingSphere.ipp
+++ b/lib/triangulation/FlowBoundingSphere.ipp
@@ -895,7 +895,7 @@
 						} else {							
 						/// INCOMPRESSIBLE 
 							m += (cell->info().kNorm())[j2] * cell->neighbor(j2)->info().p();
-							if ( isinf(m) && j<10 ) cout << "(cell->info().kNorm())[j2] = " << (cell->info().kNorm())[j2] << " cell->neighbor(j2)->info().p() = " << cell->neighbor(j2)->info().p() << endl;
+							if ( std::isinf(m) && j<10 ) cout << "(cell->info().kNorm())[j2] = " << (cell->info().kNorm())[j2] << " cell->neighbor(j2)->info().p() = " << cell->neighbor(j2)->info().p() << endl;
 							if (j==0) n += (cell->info().kNorm())[j2];
 						}  
 					}
--- a/lib/triangulation/PeriodicFlow.hpp
+++ b/lib/triangulation/PeriodicFlow.hpp
@@ -406,7 +406,7 @@
 				if (j==0) n += compFlowFactor*(cell->info().kNorm())[j2];
 			} else {
 				m += (cell->info().kNorm())[j2]*cell->neighbor(j2)->info().shiftedP();
-				if ( isinf(m) && j<10 ) cout << "(cell->info().kNorm())[j2] = " << (cell->info().kNorm())[j2] << " cell->neighbor(j2)->info().shiftedP() = " << cell->neighbor(j2)->info().shiftedP() << endl;
+				if ( std::isinf(m) && j<10 ) cout << "(cell->info().kNorm())[j2] = " << (cell->info().kNorm())[j2] << " cell->neighbor(j2)->info().shiftedP() = " << cell->neighbor(j2)->info().shiftedP() << endl;
 				if (j==0) n += (cell->info().kNorm())[j2];
 			} 
 		  }
--- a/pkg/dem/GeneralIntegratorInsertionSortCollider.cpp
+++ b/pkg/dem/GeneralIntegratorInsertionSortCollider.cpp
@@ -86,9 +86,9 @@
 				if(!s) continue;
 				minR=min(s->radius,minR);
 			}
-			if (isinf(minR)) LOG_ERROR("verletDist is set to 0 because no spheres were found. It will result in suboptimal performances, consider setting a positive verletDist in your script.");
+			if (std::isinf(minR)) LOG_ERROR("verletDist is set to 0 because no spheres were found. It will result in suboptimal performances, consider setting a positive verletDist in your script.");
 			// if no spheres, disable stride
-			verletDist=isinf(minR) ? 0 : std::abs(verletDist)*minR;
+			verletDist=std::isinf(minR) ? 0 : std::abs(verletDist)*minR;
 		}
 		
 		// update bounds via boundDispatcher
--- a/pkg/dem/UniaxialStrainer.cpp
+++ b/pkg/dem/UniaxialStrainer.cpp
@@ -38,13 +38,13 @@
 	if(originalLength<=0) throw runtime_error(("UniaxialStrainer: Initial length is negative or zero (swapped reference particles?)! "+boost::lexical_cast<string>(originalLength)).c_str());
 	/* this happens is nan propagates from e.g. brefcom consitutive law in case 2 bodies have _exactly_ the same position
 	 * (the the normal strain is 0./0.=nan). That is an user's error, however and should not happen. */
-	if(isnan(originalLength)) throw logic_error("UniaxialStrainer: Initial length is NaN!");
-	assert(originalLength>0 && !isnan(originalLength));
+	if(std::isnan(originalLength)) throw logic_error("UniaxialStrainer: Initial length is NaN!");
+	assert(originalLength>0 && !std::isnan(originalLength));
 
-	assert(!isnan(strainRate) || !isnan(absSpeed));
-	if(!isnan(std::numeric_limits<Real>::quiet_NaN())){ throw runtime_error("UniaxialStrainer: NaN's are not properly supported (compiled with -ffast-math?), which is required."); }
+	assert(!std::isnan(strainRate) || !std::isnan(absSpeed));
+	if(!std::isnan(std::numeric_limits<Real>::quiet_NaN())){ throw runtime_error("UniaxialStrainer: NaN's are not properly supported (compiled with -ffast-math?), which is required."); }
 
-	if(isnan(strainRate)){ strainRate=absSpeed/originalLength; LOG_INFO("Computed new strainRate "<<strainRate); }
+	if(std::isnan(strainRate)){ strainRate=absSpeed/originalLength; LOG_INFO("Computed new strainRate "<<strainRate); }
 	else {absSpeed=strainRate*originalLength;}
 
 	if(!setSpeeds){
@@ -77,7 +77,7 @@
 			b->state->vel[axis]=pNormalized*(v1-v0)+v0;
 		}
 	}
-	if(isnan(crossSectionArea)){ throw std::invalid_argument("UniaxialStrain.crossSectionArea must be specified."); }
+	if(std::isnan(crossSectionArea)){ throw std::invalid_argument("UniaxialStrain.crossSectionArea must be specified."); }
 }
 
 void UniaxialStrainer::action(){
@@ -93,7 +93,7 @@
 	} else currentStrainRate=strainRate;
 	// how much do we move (in total, symmetry handled below)
 	Real dAX=currentStrainRate*originalLength*scene->dt;
-	if(!isnan(stopStrain)){
+	if(!std::isnan(stopStrain)){
 		Real axialLength=axisCoord(posIds[0])-axisCoord(negIds[0]);
 		Real newStrain=(axialLength+dAX)/originalLength-1;
 		if((newStrain*stopStrain>0) && std::abs(newStrain)>=stopStrain){ // same sign of newStrain and stopStrain && over the limit from below in abs values
--- a/pkg/dem/Polyhedra_Ig2.cpp
+++ b/pkg/dem/Polyhedra_Ig2.cpp
@@ -64,7 +64,7 @@
 	Real volume;
 	Vector3r centroid;	
 	P_volume_centroid(Int, &volume, &centroid);
- 	if(isnan(volume) || volume<=1E-25 || volume > min(A->GetVolume(),B->GetVolume())) {
+ 	if(std::isnan(volume) || volume<=1E-25 || volume > min(A->GetVolume(),B->GetVolume())) {
 		bang->equivalentPenetrationDepth=0;
 		bang->penetrationVolume=min(A->GetVolume(),B->GetVolume());
 		bang->normal = (A->GetVolume()>B->GetVolume() ? 1 : -1)*(se32.position+shift2-se31.position);
@@ -155,7 +155,7 @@
 	Real volume;
 	Vector3r centroid;	
 	P_volume_centroid(Int, &volume, &centroid);
-	if(isnan(volume) || volume<=1E-25 || volume > B->GetVolume())  {bang->equivalentPenetrationDepth=0; return true;}
+	if(std::isnan(volume) || volume<=1E-25 || volume > B->GetVolume())  {bang->equivalentPenetrationDepth=0; return true;}
 	if (!Is_inside_Polyhedron(PB, ToCGALPoint(centroid)))  {bang->equivalentPenetrationDepth=0; return true;}
 
 	//calculate area of projection of Intersection into the normal plane
@@ -250,7 +250,7 @@
 	Real volume;
 	Vector3r centroid;	
 	P_volume_centroid(Int, &volume, &centroid);
- 	if(isnan(volume) || volume<=1E-25 || volume > B->GetVolume()) {bang->equivalentPenetrationDepth=0; return true;}
+ 	if(std::isnan(volume) || volume<=1E-25 || volume > B->GetVolume()) {bang->equivalentPenetrationDepth=0; return true;}
 	if (!Is_inside_Polyhedron(PB, ToCGALPoint(centroid)))  {bang->equivalentPenetrationDepth=0; return true;}
 
 	//find normal direction
--- a/pkg/dem/ScGeom.cpp
+++ b/pkg/dem/ScGeom.cpp
@@ -104,7 +104,7 @@
 // add -DYADE_SCGEOM_DEBUG to CXXFLAGS to enable this piece or just do
 // #define YADE_SCGEOM_DEBUG //(but do not commit with that enabled in the code)
 #ifdef YADE_SCGEOM_DEBUG
-		if (isnan(aa.angle())) {
+		if (std::isnan(aa.angle())) {
 			cerr<<"NaN angle found in angleAxisr(q), for quaternion "<<delta<<", after quaternion product"<<endl;
 			cerr<<"rbp1.ori * (initialOrientation1.conjugate())) * (initialOrientation2 * (rbp2.ori.conjugate()) with quaternions :"<<endl;
 			cerr<<rbp1.ori<<" * "<<initialOrientation1<<" * "<<initialOrientation2<<" * "<<rbp2.ori<<endl<<" and sub-products :"<<endl<<rbp1.ori * (initialOrientation1.conjugate())<<" * "<<initialOrientation2 * (rbp2.ori.conjugate())<<endl;
@@ -115,7 +115,7 @@
 			cerr<<delta<<" "<<bb.angle()<<endl;
 		}
 #else
-		if (isnan(aa.angle())) aa.angle()=0;
+		if (std::isnan(aa.angle())) aa.angle()=0;
 #endif
 		if (aa.angle() > Mathr::PI) aa.angle() -= Mathr::TWO_PI;   // angle is between 0 and 2*pi, but should be between -pi and pi
 		twist = (aa.angle() * aa.axis().dot(normal));
--- a/pkg/dem/Shop_02.cpp
+++ b/pkg/dem/Shop_02.cpp
@@ -87,7 +87,7 @@
 	else theta=0;
 	Real hRef=dH_dTheta*(theta-theta0);
 	long period;
-	if(isnan(periodStart)){
+	if(std::isnan(periodStart)){
 		Real h=Shop::periodicWrap(pt[axis]-hRef,hRef-Mathr::PI*dH_dTheta,hRef+Mathr::PI*dH_dTheta,&period);
 		return boost::make_tuple(r,h,theta);
 	}
@@ -238,7 +238,7 @@
 		Real N=(compressionPositive?-1:1)*phys->normalForce.dot(n);
 		// Real R=(Body::byId(I->getId2(),scene)->state->pos+cellHsize*I->cellDist.cast<Real>()-Body::byId(I->getId1(),scene)->state->pos).norm();
 		Real R=.5*(geom->refR1+geom->refR2);
-		Real Fsplit=(!isnan(thresholdForce))?thresholdForce:Fmean;
+		Real Fsplit=(!std::isnan(thresholdForce))?thresholdForce:Fmean;
 		if (compressionPositive?(N<Fsplit):(N>Fsplit)){
 			for(int i=0; i<3; i++) for(int j=i; j<3; j++){
 				sigNStrong(i,j)+=R*N*n[i]*n[j];}
@@ -304,7 +304,7 @@
 	fabricStrong=Matrix3r::Zero(); 
 	fabricWeak=Matrix3r::Zero(); 
 	int nStrong(0), nWeak(0); // number of strong and weak contacts respectively
-	if (!splitTensor & !isnan(thresholdForce)) {LOG_WARN("The bool splitTensor should be set to True if you specified a threshold value for the contact force, otherwise the function will return only the fabric tensor and not the two separate contributions.");}
+	if (!splitTensor & !std::isnan(thresholdForce)) {LOG_WARN("The bool splitTensor should be set to True if you specified a threshold value for the contact force, otherwise the function will return only the fabric tensor and not the two separate contributions.");}
 	FOREACH(const shared_ptr<Interaction>& I, *scene->interactions){
 		if(!I->isReal()) continue;
 		GenericSpheresContact* geom=YADE_CAST<GenericSpheresContact*>(I->geom.get());
@@ -312,7 +312,7 @@
 		const Vector3r& n=geom->normal;
 		Real  f=(revertSign?-1:1)*phys->normalForce.dot(n); 
 		// slipt the tensor according to the mean contact force or a threshold value if this is given
-		Real Fsplit=(!isnan(thresholdForce))?thresholdForce:Fmean;
+		Real Fsplit=(!std::isnan(thresholdForce))?thresholdForce:Fmean;
 		if (revertSign?(f<Fsplit):(f>Fsplit)){ // reminder: forces are compared with their sign
 			for(int i=0; i<3; i++) for(int j=i; j<3; j++){
 				fabricStrong(i,j)+=n[i]*n[j];
--- a/pkg/dem/ConcretePM.cpp
+++ b/pkg/dem/ConcretePM.cpp
@@ -43,14 +43,14 @@
 
 	// check unassigned values
 	if (!mat1->neverDamage) {
-		assert(!isnan(mat1->sigmaT));
-		assert(!isnan(mat1->epsCrackOnset));
-		assert(!isnan(mat1->relDuctility));
+		assert(!std::isnan(mat1->sigmaT));
+		assert(!std::isnan(mat1->epsCrackOnset));
+		assert(!std::isnan(mat1->relDuctility));
 	}
 	if (!mat2->neverDamage) {
-		assert(!isnan(mat2->sigmaT));
-		assert(!isnan(mat2->epsCrackOnset));
-		assert(!isnan(mat2->relDuctility));
+		assert(!std::isnan(mat2->sigmaT));
+		assert(!std::isnan(mat2->epsCrackOnset));
+		assert(!std::isnan(mat2->relDuctility));
 	}
 
 	cpmPhys->damLaw = mat1->damLaw;
@@ -273,7 +273,7 @@
 
 #ifdef YADE_DEBUG
 	#define CPM_YADE_DEBUG_A \
-		if(isnan(epsN)){\
+		if(std::isnan(epsN)){\
 			/*LOG_FATAL("refLength="<<geom->refLength<<"; pos1="<<geom->se31.position<<"; pos2="<<geom->se32.position<<"; displacementN="<<geom->displacementN());*/ \
 			throw runtime_error("!! epsN==NaN !!");\
 		}
@@ -283,8 +283,8 @@
 
 
 #define YADE_VERIFY(condition) if(!(condition)){LOG_FATAL("Verification `"<<#condition<<"' failed!"); LOG_FATAL("in interaction #"<<I->getId1()<<"+#"<<I->getId2()); Omega::instance().saveSimulation("/tmp/verificationFailed.xml"); throw;}
-#define NNAN(a) YADE_VERIFY(!isnan(a));
-#define NNANV(v) YADE_VERIFY(!isnan(v[0])); assert(!isnan(v[1])); assert(!isnan(v[2]));
+#define NNAN(a) YADE_VERIFY(!std::isnan(a));
+#define NNANV(v) YADE_VERIFY(!std::isnan(v[0])); assert(!std::isnan(v[1])); assert(!std::isnan(v[2]));
 
 bool Law2_ScGeom_CpmPhys_Cpm::go(shared_ptr<IGeom>& _geom, shared_ptr<IPhys>& _phys, Interaction* I){
 	TIMING_DELTAS_START();
--- a/pkg/dem/PeriIsoCompressor.cpp
+++ b/pkg/dem/PeriIsoCompressor.cpp
@@ -154,7 +154,7 @@
 	if(doUpdate || min(stiff[0],min(stiff[1],stiff[2])) <=0 || dynCell){ strainStressStiffUpdate(); }
 
 	// set mass to be sum of masses, if not set by the user
-	if(dynCell && isnan(mass)){
+	if(dynCell && std::isnan(mass)){
 		mass=0; FOREACH(const shared_ptr<Body>& b, *scene->bodies){ if(b && b->state) mass+=b->state->mass; }
 		LOG_INFO("Setting cell mass to "<<mass<<" automatically.");}
 	bool allOk=true;

--- End Message ---
--- Begin Message ---
Source: yade
Source-Version: 1.20.0-9

We believe that the bug you reported is fixed in the latest version of
yade, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 820...@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Anton Gladky <gl...@debian.org> (supplier of updated yade package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmas...@ftp-master.debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Format: 1.8
Date: Fri, 20 May 2016 19:49:42 +0200
Source: yade
Binary: yade libyade python-yade yade-doc
Architecture: source
Version: 1.20.0-9
Distribution: unstable
Urgency: medium
Maintainer: Debian Science Maintainers 
<debian-science-maintainers@lists.alioth.debian.org>
Changed-By: Anton Gladky <gl...@debian.org>
Description:
 libyade    - Platform for discrete element modeling. Libraries
 python-yade - Platform for discrete element modeling. Python bindings
 yade       - Platform for discrete element modeling
 yade-doc   - Platform for discrete element modeling. Documentation
Closes: 820450
Changes:
 yade (1.20.0-9) unstable; urgency=medium
 .
   [ Anton Gladky ]
   * [2a9a603] Update dependencies for libqglviewer-dev-qt5.
 .
   [ Graham Inggs ]
   * [a68444e] Fix FTBFS with glibc 2.23. (Closes: #820450)
Checksums-Sha1:
 d67de8a716a4a26ca8ed4cfb98c6e71bcad14dea 2781 yade_1.20.0-9.dsc
 2b0a3ed99f8995908698aa734affd531a52a776a 26272 yade_1.20.0-9.debian.tar.xz
Checksums-Sha256:
 e03bd041253e9a949b90db2c6a50d28919fc7e1048fa2abb89ab1767a42c2511 2781 
yade_1.20.0-9.dsc
 8b886212d921b0c5ae4c98e52d4a3c2aa78047a309b118bfe5f345f5c8492fbf 26272 
yade_1.20.0-9.debian.tar.xz
Files:
 e362f15c1f976a55876162460ff0ca48 2781 science extra yade_1.20.0-9.dsc
 9ab07cb4a20db3cbbdfe6f267429867a 26272 science extra 
yade_1.20.0-9.debian.tar.xz

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAEBAgAGBQJXP05OAAoJENPhc4PPp/8Gd24P/2fKBAJFJxKZHVEMTQC/vShx
l+L1ZcmeNZCOFcCMg8gGVQAa1W3EQPYIqgEluhe99iBFxuJ7ieUnFYn3CAeJ+Frx
S8jktF0IQENMrcieTr3w+ibkuwou7jJABVpdVqNETH+Xf6Rj0vyh2PsbcchJiJQw
lTdGsOKcHB9Z6cKEtQI7mRA5q9uwUnacD/2glPjT8G+4VWYZC8qp+99hNQwIahOx
Y1aCZEPzYwC4kMWirHZJAaDqXn9wfDA81bNMZ54SyJAtMlpnTXfLUl8j6nxOW2zp
KEyEmN1LDNfs0QmQ5c1hiGbrCzzBw3spKm0gYOpxBlh45yKEmUfMgWn6WCmNbkJO
5U963oddEr7i1gfAj2Ll7QTmMvzNXvfzqsZkxXcC1cprENBwjLF1Frd9plQT+U0T
+ajcDUmU9yLL56v3NYzc6KyOnQUXcjgtA8ntYeLf5B3dlZ8b1BpHwtwqx8uBqdHS
N58bK4pwH61JUiBW0h/Vnm8V1cz4O6Gvi39um1TCWcG6uXnXPu4UDUbc2FmvI5aa
Sky48r22v+7nsmf9Bj2uR/fDE1Y23T/34phnGnSkRGD3TSCs1rQnmkXd3eyTNnSh
NQ93PiU9GEeCXJX2QIsDt6JNxM0ZtRZE+dafKdX54pwIkuXf77nygrZV308Jf/yW
k9EyBKCuhMAgfT91U9OL
=AObK
-----END PGP SIGNATURE-----

--- End Message ---
-- 
debian-science-maintainers mailing list
debian-science-maintainers@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-science-maintainers

Reply via email to