[Qbs] How to pass information to custom module via Depends ?

Glenn Coombs glenn.coombs at gmail.com
Wed Feb 15 02:51:37 CET 2017


Hi,

I have created a custom module to help wrap a dependency on the
Qt5GStreamerUi library.  To use it I add a line like this:

    Depends { name: "Qt5GStreamerUi" }

to any project that needs to link against Qt5GStreamerUi.  It works fine
but I would like to make the module more generic so that I can add a
dependency on any library that pkg-config knows about.  I can't work out
how to pass the name of the library through to the custom module.  I want
to be able to write something like this:

    Depends { name: "PkgConfig"; packageName = "Qt5GStreamerUi" }

where PkgConfig would be the renamed and modified version of my existing
Qt5GStreamerUi module.  Is there a way to do this ?

The contents of my qbs/modules/Qt5GStreamerUi/Qt5GStreamerUiModule.qbs file
look like this:

import qbs 1.0
import qbs.File
import qbs.FileInfo
import qbs.Probes


// TODO: turn this into more generic item (maybe called DependsPkg) that
could be used
// to depend on any pkg-config dependency, so that we could write something
like this:
//
// DependsPkg { name = "Qt5GStreamerUi-1.0" }

Module
{
    Depends { name: "cpp" }

    property string pkgConfigExecutable

    Probes.PkgConfigProbe
    {
        id:         pkgConfig
        name:       "Qt5GStreamerUi-1.0"   //  <== this is the bit that
needs to be passed through
        executable: pkgConfigExecutable
    }

    Properties
    {
    condition: !qbs.targetOS.contains("windows")

    pkgConfigExecutable:
    {
        var exe = "pkg-config";
        print("CHECKING cpp.compilerPath:", cpp.compilerPath);
        if (cpp.compilerPath)
        {
            var path = FileInfo.path(cpp.compilerPath);
            if (File.exists(path + "/" + exe))
            {
                exe = path + "/" + exe;
            }
        }
        print("=== USING pkg-config:", exe);
        return exe;
    }

    validate:
    {
        print("PKGCONFIG: IN VALIDATE product =", product.name);
        print("PKGCONFIG: IN VALIDATE cflags =", pkgConfig.cflags);
        print("PKGCONFIG: IN VALIDATE libs =", pkgConfig.libs);
    }

    property stringList myIncs:
    {
        print("PKGCONFIG: cflags =", pkgConfig.cflags);
        if (!pkgConfig.cflags) return [];
        return pkgConfig.cflags.filter(function(value, index, array) {
            return array.indexOf(value) == index;  // remove duplicates
        }).filter(function(value) {
            return value.startsWith("-I");         // ignore if not include
dir
        }).map(function(value) {
            return value.substring(2);             // remove initial "-I"
        });
    }

    property stringList myLibs:
    {
        print("PKGCONFIG: libs =", pkgConfig.libs);
        if (!pkgConfig.libs) return [];
        return pkgConfig.libs.filter(function(value) {
            return value.startsWith("-l");         // ignore if not library
        }).map(function(value) {
            return value.substring(2);             // remove initial "-l"
        });
    }

    property var debug:
    {
        print("Qt5GStreamerUi, INCS =", myIncs);
        print("Qt5GStreamerUi, LIBS =", myLibs);
    }

    cpp.includePaths:     myIncs
    cpp.dynamicLibraries: myLibs
    }
}


--
Glenn
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/qbs/attachments/20170215/b80af4f0/attachment.html>


More information about the Qbs mailing list