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
;
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
30 public QueryPkgConfig()
32 query_command
= Environment
.getenv("PKG_CONFIG");
35 public void setPath(String p
)
40 public void setCommand(String cmd
)
45 public void setSysroot(String 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
;
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));
83 throw new RuntimeException("unhandled cflag: \""+elems
[x
]);
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));
97 throw new RuntimeException("unhandled ldflag: \""+elems
[x
]);