Esempio n. 1
0
Package AvailablePackages::getPackage(OovStringRef const pkgName) const
    {
    /// @todo - should check if all paths are ok with this.
    Package pkg(pkgName, "/usr");

    TextProcessor proc;
    OovProcessChildArgs args;
    args.addArg("pkg-config");
    args.addArg(pkgName);
    args.addArg("--cflags");
    if(proc.spawn("pkg-config", args.getArgv()))
        {
        CompoundValue pkgflags;
        CompoundValue incFlags;
        CompoundValue cppFlags;
        pkgflags.parseString(proc.mText, ' ');
        for(auto &flag : pkgflags)
            {
            if(flag[0] == '-' && flag[1] == 'I')
                {
                flag.erase(0, 2);
                if(flag.compare(0, pkg.getRootDir().length(), pkg.getRootDir()) == 0)
                    flag.erase(0, pkg.getRootDir().length());
                incFlags.push_back(flag);
                }
            else if(flag[0] == '-')
                cppFlags.push_back(flag);
            }
        pkg.setCompileInfo(incFlags.getAsString(), cppFlags.getAsString());
        }
    args.clearArgs();
    args.addArg("pkg-config");
    args.addArg(pkgName);
    args.addArg("--libs");
    if(proc.spawn("pkg-config", args.getArgv()))
        {
        CompoundValue pkgFlags;
        CompoundValue libFlags;
        CompoundValue linkFlags;
        pkgFlags.parseString(proc.mText, ' ');
        for(auto &flag : pkgFlags)
            {
            if(flag[0] == '-' && flag[1] == 'l')
                {
                flag.erase(0, 2);
                libFlags.push_back(flag);
                }
            else if(flag[0] == '-')
                {
                linkFlags.push_back(flag);
                }
            }
        pkg.setLinkInfo("lib", libFlags.getAsString(), linkFlags.getAsString());
        }
    return pkg;
    }