Qt-contributors-summit-2011-Qt library archive
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine. Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean. |
#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
- // install with
- gem install inqlude
- // install a package:
- 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
- {
- "schema_version": 1,
- "name": "qjson",
- "version": "0.7.1",
- "release_date": "20110618",
- "summary": "Development files for QJson",
- "urls": {
- "logo": "",
- "screenshots": {
- "Fancy Widgets": "",
- "Boring widgets": ""
- }
- },
- "licenses": [ "LGPL" ],
- "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",
- "authors": [ "Flavio Castelli <flavio@castelli.name>" ],
- "maturity": "stable",
- "platforms": [ "Linux", "Windows" ],
- "packages": {
- "source": {
- "git": {
- "tag": "0_7_1"
- },
- "build_system": [ "cmake", "qmake" ]
- },
- "openSUSE": {
- "11.4": {
- "package_name": "libqjson-devel",
- "repository": {
- "name": "openSUSE-11.4-Oss"
- },
- "source_rpm": "libqjson-0.7.1-9.3.src.rpm"
- }
- }
- }
- "keywords": [ "JSON", "magic" ],
- "dependencies": [ "QtCore", "QtUi >= 4.6.1", "QtUi < 4.9", "libfoo" ],
- "languages": [ "C++" ]
- }