1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.codehaus.mojo.natives.msvc;
25
26 import org.codehaus.mojo.natives.NativeBuildException;
27 import org.codehaus.mojo.natives.linker.Manifest;
28 import org.codehaus.mojo.natives.linker.ManifestConfiguration;
29 import org.codehaus.mojo.natives.util.CommandLineUtil;
30 import org.codehaus.mojo.natives.util.EnvUtil;
31 import org.codehaus.plexus.component.annotations.Component;
32 import org.codehaus.plexus.logging.AbstractLogEnabled;
33 import org.codehaus.plexus.util.FileUtils;
34 import org.codehaus.plexus.util.cli.Commandline;
35
36 @Component(role = Manifest.class, hint = "msvc", instantiationStrategy = "per-lookup")
37 public class MSVCManifest
38 extends AbstractLogEnabled
39 implements Manifest
40 {
41 public void run( ManifestConfiguration config )
42 throws NativeBuildException
43 {
44 Commandline cl = new Commandline();
45
46 cl.setExecutable( "mt.exe" );
47 cl.setWorkingDirectory( config.getWorkingDirectory().getPath() );
48
49 cl.createArg().setValue( "-manifest" );
50
51 int manifestType = 0;
52
53 if ( "EXE".equalsIgnoreCase( FileUtils.getExtension( config.getInputFile().getPath() ) ) )
54 {
55 manifestType = 1;
56 }
57 else if ( "DLL".equalsIgnoreCase( FileUtils.getExtension( config.getInputFile().getPath() ) ) )
58 {
59 manifestType = 2;
60 }
61
62 if ( manifestType == 0 )
63 {
64 throw new NativeBuildException( "Unknown manifest input file type: " + config.getInputFile() );
65 }
66
67 cl.createArg().setFile( config.getManifestFile() );
68 cl.createArg().setValue( "-outputresource:" + config.getInputFile() + ";" + manifestType );
69
70 EnvUtil.setupCommandlineEnv( cl, config.getEnvFactory() );
71
72 CommandLineUtil.execute( cl, this.getLogger() );
73 }
74 }