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