import from svn
[unitool.git] / tools / LD_cmdline.java
blob748f2c7985c464ab97c2f8fa224ad00d3ebd24e3
2 package org.de.metux.unitool.tools;
4 import org.de.metux.util.HTMLEntities;
5 import org.de.metux.util.PathNormalizer;
6 import org.de.metux.util.FileOps;
7 import org.de.metux.util.StrUtil;
9 public class LD_cmdline
11 String cmdline = "";
12 String addpar = "";
13 String soname = null;
14 String output = null;
15 boolean prohibit_undefined = false;
16 boolean strip_debug = false;
18 PathNormalizer normalizer;
20 public LD_cmdline(String ld_command, PathNormalizer n)
22 cmdline = ld_command;
23 normalizer = n;
26 public String toString()
28 if (output==null)
29 throw new RuntimeException("LD_cmdline() missing output file");
31 // FIXME !!! we better should split off into gcc_cmdline and ld_cmdline
32 return cmdline+
33 " -shared -o "+
34 output+" "+
35 (StrUtil.isEmpty(soname)?"":" -Wl,-soname -Wl,"+soname+" ")+
36 (prohibit_undefined ? " -Wl,-no-undefined ":"")+
37 (strip_debug ? " -S ":"")+
38 addpar;
41 public void dlname(String n)
43 soname = n;
46 public void libpath(String p)
48 if (!StrUtil.isEmpty(p))
49 addpar += " -L"+normalizer.dec_sysroot(p);
52 public void libpath(String[] par)
54 if (par!=null)
55 for (int x=0; x<par.length; x++)
56 libpath(par[x]);
59 public void output_filename(String fn)
61 if (StrUtil.isEmpty(fn))
62 throw new RuntimeException("output_filename() fn is empty!");
64 FileOps.mkdir(PathNormalizer.dirname(fn));
65 output = fn;
68 public void dynlink(String[] par)
70 if (!StrUtil.isEmpty(par))
71 for (int x=0; x<par.length; x++)
72 if (par[x].length()>0)
73 addpar += " -l"+par[x];
76 public void objlink(String[] par)
78 if (!StrUtil.isEmpty(par))
79 for (int x=0; x<par.length; x++)
80 if (par[x].length()>0)
81 addpar += " "+par[x];
84 public void linker_flag(String flag)
86 if (StrUtil.isEmpty(flag))
87 return;
89 if (flag.equals("no-undefined"))
90 prohibit_undefined = true;
91 else if (flag.equals("strip-debug"))
92 strip_debug = true;
93 else
94 throw new RuntimeException("unhandled flag: "+flag);
97 public void linker_flag(String[] par)
99 if (par!=null)
100 for (int x=0; x<par.length; x++)
101 linker_flag(par[x]);
104 // FIXME: obsolete ?
105 public void staticlink(String[] par)
107 if (par!=null)
108 for (int x=0; x<par.length; x++)
109 staticlink(par[x]);
112 public void staticlink(String filename)
114 if (!StrUtil.isEmpty(filename))
115 addpar += " -Wl,--whole-archive -Wl,"+filename;
118 /* add an --rpath option */
119 public void rpath(String rpath)
121 if (!StrUtil.isEmpty(rpath))
122 addpar += " -Wl,--rpath -Wl,"+rpath;
125 public void rpath(String[] par)
127 if (!StrUtil.isEmpty(par))
128 for (int x=0; x<par.length; x++)
129 rpath(par[x]);
132 public void exportSymbols(String re[])
134 if (re!=null)
135 for (int x=0; x<re.length; x++)
136 if ((re[x]!=null) && (re[x].length()!=0))
137 System.err.println("WARN: -export-symbols not implemented yet");
138 // addpar += " -Wl,-export-symbols -Wl,\""+re[x]+"\"";
141 public void exportSymbolsRegex(String re[])
143 if (re!=null)
144 for (int x=0; x<re.length; x++)
145 if ((re[x]!=null) && (re[x].length()!=0))
146 System.err.println("-export-symbols-regex not implemented yet");
147 // addpar += " -Wl,--export-symbols-regex -Wl,\""+re[x]+"\"";
150 public void verbatims(String[] par)
152 if (!StrUtil.isEmpty(par))
153 for (int x=0; x<par.length; x++)
154 if (par[x].length()>0)
156 System.err.println("WARNING: LD: adding verbatim parameter \""+par[x]+"\" -- will be removed soon!");
157 cmdline += " \""+par[x]+"\"";
158 // throw new RuntimeException(" !!! VERBATIM PARAMETERS NO LONGER SUPPORTED !!!: "+par[x]);