← Back to team overview

yslopeusers team mailing list archive

[Merge] lp:~jduriez/yslope/trunk into lp:yslope

 

jduriez has proposed merging lp:~jduriez/yslope/trunk into lp:yslope.

Requested reviews:
  yslope Users (yslopeusers)

-- 
https://code.launchpad.net/~jduriez/yslope/trunk/+merge/40938
Your team yslope Users is requested to review the proposed merge of lp:~jduriez/yslope/trunk into lp:yslope.
=== modified file 'pkg/dem/Engine/GlobalEngine/MechJointStateRecorder.cpp'
=== modified file 'pkg/dem/Engine/GlobalEngine/MechJointStateRecorder.hpp'
--- pkg/dem/Engine/GlobalEngine/MechJointStateRecorder.hpp	2010-11-15 14:50:45 +0000
+++ pkg/dem/Engine/GlobalEngine/MechJointStateRecorder.hpp	2010-11-16 09:16:13 +0000
@@ -23,8 +23,13 @@
 		tau=0.0;
 		normalDisp=0.0;
 		tangentialDisp=0.0;
+<<<<<<< TREE
 		sumFn=Vector3r::Zero();
 		sumFs=Vector3r::Zero();
+=======
+		sumFn=0.0;
+				       sumFs=Vector3r::Zero();
+>>>>>>> MERGE-SOURCE
 		sumSec=0.0;
 	);
 	DECLARE_LOGGER;

=== added file 'yadeSCons.py'
--- yadeSCons.py	1970-01-01 00:00:00 +0000
+++ yadeSCons.py	2010-11-16 09:16:13 +0000
@@ -0,0 +1,164 @@
+
+def getRealVersion():
+	"Attempts to get yade version from RELEASE file if it exists or from bzr/svn, or from VERSION"
+	import os.path,re,os
+	if os.path.exists('RELEASE'):
+		return file('RELEASE').readline().strip()
+	if os.path.exists('.bzr'):
+		for l in os.popen("LC_ALL=C bzr revno 2>/dev/null").readlines():
+			return 'bzr'+l[:-1]
+	if os.path.exists('VERSION'):
+		return file('VERSION').readline().strip()
+	return None
+
+
+class Plugin:
+	def __init__(self,name,src,deps,feats,module):
+		self.name,self.src,self.deps,self.feats,self.module=name,src,deps,feats,module
+	def __str__(self):
+		return '%s/%s [%s] (%s)'%(self.module,self.name,','.join(self.feats),','.join(self.libs))
+
+def grepForIncludes(root,f):
+	import re
+	ret=set()
+	skipping=False
+	lineNo=0
+	for l in open(root+'/'+f):
+		if re.match(r'\s*#endif.*$',l): skipping=False; continue
+		if skipping: continue
+		m=re.match(r'^\s*#include\s*<yade/([^/]*)/(.*)>.*$',l)
+		if m:
+			incMod=m.group(1); baseName=m.group(2).split('.')[0];
+			if incMod=='core' or incMod.startswith('lib-'): continue
+			if skipping: continue
+			ret.add(baseName)
+			continue
+		m=re.match(r'\s*#ifdef\s*YADE_(.*)\s*$',l)
+		if m:
+			feat=m.group(1).lower()
+			if feat not in features: skipping=True; continue
+	return ret
+
+features=[]
+
+def scanAllPlugins(cacheFile,feats):
+	"""Traverse all files in pkg/, recording what plugins they link with and what features they require.
+	Save the result in a cache file and only regenerate the information if the cache file is missing."""
+	import os, os.path, re, shelve
+	features=feats # update the module-level var
+	if cacheFile:
+		refresh=os.path.exists(cacheFile)
+		plugInfo=shelve.open(cacheFile)
+	else:
+		plugInfo={}; refresh=True
+	if refresh:
+		for root, dirs, files in os.walk('pkg/',topdown=True):
+			for f in files:
+				if not (f.endswith('.cpp') or f.endswith('.cc') or f.endswith('C')): continue
+				ff=root+'/'+f
+				linkDeps,featureDeps=set(),set()
+				isPlugin=True # False
+				skipping=False
+				for l in open(ff):
+					if re.match(r'\s*#endif.*$',l): skipping=False; continue
+					if skipping: continue
+					m=re.match(r'\s*#(ifdef|ifndef)\s*YADE_(.*)\s*$',l)
+					if m:
+						cond,feat=m.group(1),m.group(2).lower()
+						if (cond=='ifdef' and feat not in features) or (cond=='ifndef' and feat in features): skipping=True
+					if re.match(r'\s*YADE_PLUGIN\(.*',l): isPlugin=True
+					m=re.match(r'^\s*#include\s*<yade/([^/]*)/(.*)>.*$',l)
+					if m:
+						incMod=m.group(1); incHead=m.group(2); baseName=incHead.split('.')[0]; assert(len(incHead.split('.'))==2)
+						if incMod=='core' or incMod.startswith('lib-'): continue
+						if os.path.exists(root+'/'+m.group(2)):
+							linkDeps.update(grepForIncludes(root,m.group(2)))
+						linkDeps.add(incHead.split('.')[0])
+						continue
+					m=re.match('^\s*YADE_REQUIRE_FEATURE\s*\(\s*(.*)\s*\).*$',l)
+					if m:
+						featureDeps.add(m.group(1).upper())
+					m=re.match('^s*YADE_LINK_EXTRA_LIB\((.*)\).*$',l)
+					if m:
+						linkDeps.add('!'+m.group(1)) # hack!! see getPLuginLibs
+					m=re.match('^\s*#include\s*"([^/]*)".*$',l)
+					if m:
+						inc=m.group(1); incBaseName=m.group(1).split('.')[0]
+						if not os.path.exists(root+'/'+m.group(1)):
+							print "WARNING: file %s included from %s doesn't exist"%(m.group(1),ff)
+						else:
+							linkDeps.update(grepForIncludes(root,m.group(1)))
+							continue
+				if isPlugin:
+					plugin=f.split('.')[0]
+					m=re.match(r'.*pkg/([^/]*)(/.*|)$',root)
+					plugInfo[plugin]=Plugin(plugin,ff,linkDeps,featureDeps,m.group(1))
+	pp={}
+	for p in plugInfo.keys(): pp[p]=plugInfo[p]
+	if cacheFile: plugInfo.close()
+	return pp
+
+def getWantedPlugins(plugInfo,excludes,features,linkStrategy):
+	"""Use pluginInfo (generated by scanAllPlugins) and return only plugins that we should build,
+	based on excludes and available features.
+	
+	Set the plugin object according to linkStrategy and set also other plugins this one should link to."""
+	ret={}
+	feats=set([feat.upper() for feat in features])
+	excludes=set(excludes)
+	for p in plugInfo:
+		plug=plugInfo[p]
+		if plug.module in excludes: continue
+		if not plug.feats<=feats:
+			continue # plugin needs more feature than we have
+		ret[plug.name]=plug
+	for p in plugInfo.values(): p.obj=getPluginObj(p,linkStrategy)
+	for p in plugInfo.values(): p.libs=getPluginLibs(p,plugInfo)
+	return ret
+
+def getPluginObj(plug,linkStrategy):
+	"""Return name of library this plugin will be compiled into, based on current linkStrategy."""
+	if   linkStrategy=='per-class': return plug.name
+	elif linkStrategy=='per-pkg': return plug.module
+	elif linkStrategy=='monolithic': return 'plugins'
+	elif linkStrategy=='static': return 'plugins'
+
+def getPluginLibs(p,plugInfo):
+	"""Returns library names this plugin should link to, based on current information about other plugins."""
+	ret=set()
+	for dep in p.deps:
+		if dep in plugInfo.keys():
+			ret.add(plugInfo[dep].obj)
+		elif dep.startswith('!'):
+			ret.add(dep[1:])
+		else:
+			pass
+			#print p.src+':',dep,"not a plugin?"
+	ret.discard(p.obj)
+	return ret
+
+def buildPluginLibs(env,plugInfo):
+	objs={}
+	linkStrategy=env['linkStrategy']
+	chunkSize=env['chunkSize']
+	for p in plugInfo.values():
+		if not objs.has_key(p.obj): objs[p.obj]=(set(),set())
+		objs[p.obj][0].add(p.src)
+		objs[p.obj][1].update(p.libs)
+	for obj in objs.keys():
+		srcs=list(objs[obj][0])
+		if len(srcs)>1:
+			if len(srcs)<chunkSize or chunkSize<=0: srcs=env.Combine('$buildDir/'+obj+'.cpp',srcs)
+			# thanks to http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python :
+			else: srcs=[env.Combine('$buildDir/'+obj+'%d.cpp'%j,srcs[i:i+chunkSize]) for j,i in enumerate(range(0,len(srcs),chunkSize))]
+		if linkStrategy!='static':
+			env.Install('$PREFIX/lib/yade$SUFFIX/plugins',env.SharedLibrary(obj,srcs,LIBS=env['LIBS']+['yade-support','core']+list(objs[obj][1])))
+		else:
+			env.Install('$PREFIX/lib/yade$SUFFIX/plugins',env.StaticLibrary(obj,srcs,LIBS=env['LIBS']+['yade-support','core']+list(objs[obj][1])))
+	
+
+	
+
+
+
+

=== renamed file 'yadeSCons.py' => 'yadeSCons.py.moved'

Follow ups