From 9860569536d5d13f69eee5457a7d2ca66d2edc2f Mon Sep 17 00:00:00 2001 From: LexManos Date: Sun, 12 Aug 2012 04:27:36 -0700 Subject: [PATCH] Fix MCPMerger injecting Side/SideOnly when it already exists. --- .../common/asm/transformers/MCPMerger.java | 22 +++++++++++++++---- install/fml.py | 9 +++++++- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/common/cpw/mods/fml/common/asm/transformers/MCPMerger.java b/common/cpw/mods/fml/common/asm/transformers/MCPMerger.java index 6c034db781..cc8fb20809 100644 --- a/common/cpw/mods/fml/common/asm/transformers/MCPMerger.java +++ b/common/cpw/mods/fml/common/asm/transformers/MCPMerger.java @@ -159,6 +159,8 @@ public class MCPMerger } Hashtable cClasses = getClassEntries(cInJar, cOutJar); Hashtable sClasses = getClassEntries(sInJar, sOutJar); + HashSet cAdded = new HashSet(); + HashSet sAdded = new HashSet(); for (Entry entry : cClasses.entrySet()) { @@ -171,6 +173,7 @@ public class MCPMerger if (!copyToServer.contains(name)) { copyEntry(cInJar, cEntry, cOutJar); + cAdded.add(name); } else { @@ -179,6 +182,8 @@ public class MCPMerger System.out.println("Copy class c->s : " + name); } copyClass(cInJar, cEntry, cOutJar, sOutJar, true); + cAdded.add(name); + sAdded.add(name); } continue; } @@ -196,6 +201,8 @@ public class MCPMerger cOutJar.write(data); sOutJar.putNextEntry(newEntry); sOutJar.write(data); + cAdded.add(name); + sAdded.add(name); } for (Entry entry : sClasses.entrySet()) { @@ -215,12 +222,19 @@ public class MCPMerger for (String name : new String[]{SideOnly.class.getName(), Side.class.getName()}) { + String eName = name.replace(".", "/"); byte[] data = getClassBytes(name); ZipEntry newEntry = new ZipEntry(name.replace(".", "/").concat(".class")); - cOutJar.putNextEntry(newEntry); - cOutJar.write(data); - sOutJar.putNextEntry(newEntry); - sOutJar.write(data); + if (!cAdded.contains(eName)) + { + cOutJar.putNextEntry(newEntry); + cOutJar.write(data); + } + if (!sAdded.contains(eName)) + { + sOutJar.putNextEntry(newEntry); + sOutJar.write(data); + } } } diff --git a/install/fml.py b/install/fml.py index 69ae7fdd87..3fd6287824 100644 --- a/install/fml.py +++ b/install/fml.py @@ -157,6 +157,7 @@ def setup_fml(fml_dir, mcp_dir): os.makedirs(binDir) #Compile AccessTransformer + print 'Compiling AccessTransformer' forkcmd = ('%s -Xlint:-options -deprecation -g -source 1.6 -target 1.6 -classpath "{classpath}" -sourcepath "{sourcepath}" -d "{outpath}" "{target}"' % self.cmdjavac).format( classpath=os.pathsep.join(['.', os.path.join(mcp_dir, 'lib', '*')]), sourcepath=os.path.join(fml_dir, 'common'), outpath=os.path.join(fml_dir, 'bin'), target=os.path.join(fml_dir, 'common', 'cpw', 'mods', 'fml', 'common', 'asm', 'transformers', 'AccessTransformer.java')) @@ -164,6 +165,7 @@ def setup_fml(fml_dir, mcp_dir): self.runcmd(forkcmd) if (side == CLIENT): + print 'Compiling MCPMerger' #Compile MCPMerger forkcmd = ('%s -Xlint:-options -deprecation -g -source 1.6 -target 1.6 -classpath "{classpath}" -sourcepath "{sourcepath}" -d "{outpath}" "{target}"' % self.cmdjavac).format( classpath=os.pathsep.join(['.', os.path.join(mcp_dir, 'lib', '*')]), sourcepath=os.path.join(fml_dir, 'common'), outpath=os.path.join(fml_dir, 'bin'), @@ -171,11 +173,13 @@ def setup_fml(fml_dir, mcp_dir): #print forkcmd self.runcmd(forkcmd) + print 'Running MCPMerder for %s' % side #Run MCPMerger forkcmd = ('%s -classpath "{classpath}" cpw.mods.fml.common.asm.transformers.MCPMerger "{mergecfg}" "{client}" "{server}"' % self.cmdjava).format( classpath=os.pathsep.join([os.path.join(mcp_dir, 'lib', '*'), binDir]), mergecfg=os.path.join(fml_dir, 'mcp_merge.cfg'), client=jars[CLIENT], server=jars[SERVER]) self.runcmd(forkcmd) + print 'Running AccessTransformer' #Run AccessTransformer forkcmd = ('%s -classpath "{classpath}" cpw.mods.fml.common.asm.transformers.AccessTransformer "{jar}" "{fmlconfig}"' % self.cmdjava).format( classpath=os.pathsep.join([os.path.join(mcp_dir, 'lib', '*'), binDir]), jar=jars[side], fmlconfig=os.path.join(fml_dir, 'common', 'fml_at.cfg')) @@ -192,9 +196,11 @@ def setup_fml(fml_dir, mcp_dir): def checkjars_shunt(self, side, checkjars_real = Commands.checkjars): self.jarclient = self.jarclient + '.backup' self.jarserver = self.jarserver + '.backup' + print 'Jar Check %s %s %s' % (side, self.jarclient, self.jarserver) ret = checkjars_real(self, side) self.jarclient = self.jarclient[:-7] self.jarserver = self.jarserver[:-7] + #print 'Jar Check out %s %s %s' % (side, self.jarclient, self.jarserver) return ret try: @@ -538,7 +544,8 @@ def setup_mcp(fml_dir, mcp_dir, dont_gen_conf=True): #update workspace print 'Fixing MCP Workspace' - merge_tree(os.path.join(fml_dir, 'eclipse'), os.path.join(mcp_dir, 'eclipse')) + if not os.path.isdir(os.path.join(fml_dir, 'eclipse', 'Clean-Client')): + merge_tree(os.path.join(fml_dir, 'eclipse'), os.path.join(mcp_dir, 'eclipse')) def normaliselines(in_filename): in_filename = os.path.normpath(in_filename)