1 package org.codehaus.mojo.natives.bcc;
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.c.CLinker;
29 import org.codehaus.mojo.natives.linker.LinkerConfiguration;
30
31 import org.codehaus.plexus.util.FileUtils;
32 import org.codehaus.plexus.util.cli.Commandline;
33
34 import java.io.File;
35 import java.util.Iterator;
36 import java.util.List;
37 import org.codehaus.mojo.natives.linker.Linker;
38 import org.codehaus.plexus.component.annotations.Component;
39
40 @Component(role = Linker.class, hint = "bcc", instantiationStrategy = "per-lookup")
41 public class BCCLinker
42 extends CLinker
43 {
44
45 public static final String DEFAULT_EXECUTABLE = "ilink32";
46
47 protected Commandline createLinkerCommandLine( List objectFiles, LinkerConfiguration config )
48 throws NativeBuildException
49 {
50 Commandline cl = new Commandline();
51
52 cl.setWorkingDirectory( config.getWorkingDirectory().getPath() );
53
54 String executable = DEFAULT_EXECUTABLE;
55
56
57
58
59
60 if ( config.getExecutable() != null && config.getExecutable().trim().length() != 0 )
61 {
62 executable = config.getExecutable();
63 }
64
65 cl.createArg().setValue( executable );
66
67 cl.addArguments( config.getStartOptions() );
68
69
70 for ( int i = 0; i < objectFiles.size(); ++i )
71 {
72 File objFile = (File) objectFiles.get( i );
73
74 cl.createArg().setValue( objFile.getPath() );
75 }
76
77 for ( Iterator iter = config.getExternalLibFileNames().iterator(); iter.hasNext(); )
78 {
79 String fileName = (String) iter.next();
80
81 if ( !FileUtils.getExtension( fileName ).toLowerCase().equals( "res" ) )
82 {
83 cl.createArg().setFile( new File( config.getExternalLibDirectory(), fileName ) );
84 }
85 }
86
87
88 cl.createArg().setValue( "," + config.getOutputFile() );
89
90
91
92 cl.createArg().setValue( "," );
93 cl.addArguments( config.getMiddleOptions() );
94
95
96 cl.createArg().setValue( "," );
97 for ( Iterator iter = config.getExternalLibFileNames().iterator(); iter.hasNext(); )
98 {
99 String fileName = (String) iter.next();
100
101 if ( FileUtils.getExtension( fileName ).toLowerCase().equals( "res" ) )
102 {
103 cl.createArg().setFile( new File( config.getExternalLibDirectory(), fileName ) );
104 }
105 }
106
107 return cl;
108 }
109 }