pkg-config file now has script pathes
[unitool.git] / db / QueryPkgConfig.java
blobfceb50b6ff249da254c66cd41e00944332e92e90
2 package org.de.metux.unitool.db;
4 import org.de.metux.util.ShellVariableDef;
5 import org.de.metux.util.StrSplit;
6 import org.de.metux.util.StrReplace;
7 import org.de.metux.util.PathNormalizer;
8 import org.de.metux.util.StrUtil;
9 import org.de.metux.util.Environment;
10 import org.de.metux.util.Exec;
11 import org.de.metux.util.CmdLineSplitter;
13 import java.io.BufferedReader;
14 import java.io.IOException;
15 import java.io.FileNotFoundException;
16 import java.io.File;
17 import java.io.FileReader;
19 import org.de.metux.unitool.base.PackageInfo;
20 import org.de.metux.unitool.base.EPkgConfigMissingProperty;
21 import org.de.metux.unitool.base.EPkgConfigParseError;
22 import org.de.metux.unitool.base.EPkgConfigUnhandledProperty;
24 public class QueryPkgConfig
26 String query_command;
27 String path;
28 String sysroot;
30 public QueryPkgConfig()
32 query_command = Environment.getenv("PKG_CONFIG");
35 public void setPath(String p)
37 path = p;
40 public void setCommand(String cmd)
42 query_command = cmd;
45 public void setSysroot(String sr)
47 sysroot = sr;
50 public PackageInfo queryPackage(String pkgname, String minversion)
52 if (StrUtil.isEmpty(query_command))
53 throw new RuntimeException("query_command not set");
54 if (StrUtil.isEmpty(path))
55 throw new RuntimeException("path not set");
57 String pkg_config = "export PKG_CONFIG_PATH=\""+path+"\" ; "+query_command;
58 String suffix = " || echo PKG_CONFIG_QUERY_ERROR";
60 // String cmd_cflags = pkg_config+" --cflags "+pkgname+suffix;
61 // String cmd_ldflags = pkg_config+" --libs "+pkgname+suffix;
63 // we have to call pkgconfig
64 String cflags = new Exec().run_catch(pkg_config+" --cflags "+pkgname+suffix);
65 String ldflags = new Exec().run_catch(pkg_config+" --libs "+pkgname+suffix);
67 if ((cflags.indexOf("PKG_CONFIG_QUERY_ERROR")!=-1) ||
68 (ldflags.indexOf("PKG_CONFIG_QUERY_ERROR")!=-1))
69 throw new RuntimeException("Query error");
71 PackageInfo pkg = new PackageInfo();
72 if (!StrUtil.isEmpty(sysroot))
73 pkg.sysroot = sysroot;
75 /* process cflags */
77 String elems[] = CmdLineSplitter.split(cflags);
78 for (int x=0; x<elems.length; x++)
80 if (elems[x].startsWith("-I"))
81 pkg.include_pathes.add(elems[x].substring(2));
82 else
83 throw new RuntimeException("unhandled cflag: \""+elems[x]);
87 /* process ldflags */
89 String elems[] = CmdLineSplitter.split(ldflags);
90 for (int x=0; x<elems.length; x++)
92 if (elems[x].startsWith("-L"))
93 pkg.library_pathes.add(elems[x].substring(2));
94 else if (elems[x].startsWith("-l"))
95 pkg.libraries.add(elems[x].substring(2));
96 else
97 throw new RuntimeException("unhandled ldflag: \""+elems[x]);
101 return pkg;