Fix MCPMerger injecting Side/SideOnly when it already exists.

This commit is contained in:
LexManos 2012-08-12 04:27:36 -07:00
parent 9777204547
commit f73e4b6169
2 changed files with 26 additions and 5 deletions

View File

@ -159,6 +159,8 @@ public class MCPMerger
}
Hashtable<String, ZipEntry> cClasses = getClassEntries(cInJar, cOutJar);
Hashtable<String, ZipEntry> sClasses = getClassEntries(sInJar, sOutJar);
HashSet<String> cAdded = new HashSet<String>();
HashSet<String> sAdded = new HashSet<String>();
for (Entry<String, ZipEntry> 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<String, ZipEntry> 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);
}
}
}

View File

@ -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)