Qt-contributors-summit-2011-Qt library archive

From Qt Wiki
Jump to: navigation, search

#inqlude – The Qt library archive

Notes from the Qt Developers' Summit session of a Qt library archive aka "CPAN" for Qt

Getting a better overview and more easy access to all the great Qt based libraries out there, especially also those done independently of the core Qt libraries. Having something like CPAN or Ruby gems would be great. Let's discuss what we can do here. We already discussed this topic at the KDE Platform sprint and collected some input and ideas.

It shall not be just an archive on a website, but also include a system to install stuff. It's inspired by Perl's CPAN or Ruby's gem.

A prototype is available on http://inqlude.org
Git repository is at https://github.com/cornelius/inqlude
The metadata git repo is at https://github.com/cornelius/inqlude_data
Mailing list for discussing Inqlude: https://mail.kde.org/mailman/listinfo/inqlude

implemented as a git repository with metadata for the "packages"

There is a prototype command line tool

  1. // install with
  2. gem install inqlude
  3.  
  4. // install a package:
  5. inqlude install qjson

The installer is hooked into the native package manager (e.g. rpm, dep). It installs the operating system's packages if available.

Dependencies

  • not yet fully designed and implemented
  • is needed in the long term

Use of native package managers

Pros

  • using the infrastructure that's already there

Cons

  • Mixing native packages and manually installed ones is messing up the system
  • No native packages for various platforms (including Mac, Windows)

Build Systems

  • force the libs to provide a qmake .pro file or allow different build tools (qmake, CMake, autotools)
  • possible tools to look at:
    Gentoo ebuilds
    Ruby gems

Metadata

  • use own format or adapt an existing one (deb, gems)?
  • what info to put in?
    • dependencies (on qt libs and/or external libs)
    • which type of build system is used
    • supported platforms
    • licenses
    • required Qt version (min, probably max)
  • who will create the metadata (bootstrapping?)
  • where is it stored (file inside the tarball?)

QML Components

Search for a particualar component should be possible (where to find it, which package to install it)

Misc

  • rating a lib (centralized? or on different sites focusing on specialized audiences)

Metadata Followup Session

Field description

schema_version

  • identifies the version of the used metadata schema

name

  • identifies the add on
  • must be unique
  • first come, first server

version

  • to distinguish different versions of an add on
  • is the same as the upstream version
  • there is no QPAN/inqlude specific versioning

release_date

  • date when the library was released upstream

summary

  • a short string (one line) describing the library

urls

with subkeys:

  • homepage
    for the project homepage
  • api_docs
    for the API docs
  • readme
  • logo
  • screenshots
    with a list of URLs

licenses

  • list of multiple licenses
  • well known licenses are identified by keywords
  • custom licenses with a keyword only, no link

description

  • a long description
  • can include multiple paragraphs
  • format plain text (newlines for separating paragraphs)

authors

  • list of authors consisting of author's name and a url/email address in a string

maturity

  • inspired by sourceforge, but leaving out some states

platforms

  • list of platforms (Linux, Windows, Mac…)

packages

  • with subkeys for various systems
  • source is mandatory
    • optionally scm repositories (scm specific)
    • build systems (may be more)
  • platform/distribution specific formats

keywords

  • should be obvious :-)

dependencies

  • dependencies within the metadata space and external
  • name, min version, max version
  • this are hard dependencies which are required to build the lib/app
  • optional requirements should go into the description

languages

  • list of programming languages. Mostly will be C++, but could be something like Python, with bindings, or QML, if we want to extend to that.

notes

  • update_date (reflecting the last change of the metadata) is not required

Example for meta data

  1. {
  2.   "schema_version": 1,
  3.   "name": "qjson",
  4.   "version": "0.7.1",
  5.   "release_date": "20110618",
  6.   "summary": "Development files for QJson",
  7.   "urls": {
  8.     "homepage": "http://qjson.sourceforge.net/",
  9.     "api_docs": "http://qjson.sf.net/api",
  10.     "readme": "http://qjson.sf.net/README",
  11.     "logo": "logo.png",
  12.     "screenshots": {
  13.       "Fancy Widgets": "one.jpg",
  14.       "Boring widgets": "two.jpg"
  15.     }
  16.   },
  17.   "licenses": [ "LGPL" ],
  18.   "description": "JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nIt can represent integer, real number, string, an ordered sequence of value,\nand a collection of name/value pairs. QJson is a qt-based library that maps\nJSON data to QVariant objects. JSON arrays will be mapped to QVariantList\ninstances, while JSON's objects will be mapped to QVariantMap.\n\nThis package contains files for developing applications using QJson.\n\n",
  19.   "authors": [ "Flavio Castelli <flavio@castelli.name>" ],
  20.   "maturity": "stable",
  21.   "platforms": [ "Linux", "Windows" ],
  22.   "packages": {
  23.     "source": {
  24.       "git": {
  25.         "url": "http://github.com/flavio/qjson",
  26.         "tag": "0_7_1"
  27.       },
  28.       "build_system": [ "cmake", "qmake" ]
  29.     },
  30.     "openSUSE": {
  31.       "11.4": {
  32.         "package_name": "libqjson-devel",
  33.         "repository": {
  34.           "name": "openSUSE-11.4-Oss"
  35.         },
  36.         "source_rpm": "libqjson-0.7.1-9.3.src.rpm"
  37.       }
  38.     }
  39.   }
  40.   "keywords": [ "JSON", "magic" ],
  41.   "dependencies": [ "QtCore", "QtUi >= 4.6.1", "QtUi < 4.9", "libfoo" ],
  42.   "languages": [ "C++" ]
  43. }