Liblicense tutorial
Revision as of 22:33, 28 July 2007 by Jason Kivlighn (talk | contribs)
Command-line Interface
License Chooser
Liblicense aims to make integration of license selection into applications seamless. The license chooser API allows for selecting licenses based on what the license permits, requires, and/or prohibits.
C bindings
#include <liblicense.h> #include <stdio.h> int main() { ll_init(); char *attributes[] = { "http://creativecommons.org/ns#Distribution", "http://creativecommons.org/ns#CommercialUse", "http://creativecommons.org/ns#DerivativeWorks", "http://creativecommons.org/ns#ShareAlike", "http://creativecommons.org/ns#Attribution", NULL }; ll_license_chooser_t *chooser = ll_new_license_chooser(NULL,attributes); int permits, requires, prohibits; //permits Distribution(0) and DerivativeWorks(2) permits = (1 << 0) | (1 << 2); //requires ShareAlike(3) and Attribution(4) requires = (1 << 3) | (1 << 4); //doesn't prohibit any particular attribute prohibits = (1 << 1); const ll_license_list_t *licenses = ll_get_licenses_from_flags(chooser,permits,requires,prohibits); while (licenses) { printf("%s\n",licenses->license); licenses = licenses->next; } ll_free_license_chooser(chooser); ll_stop(); return 0; }
Note how flags are specified. For example, if we want a license that requires Attribution, we need to set the 4th bit of "requires". This is because Attribution is the 4th element in the attribute array (remember, zero-based indexes here).
Python bindings
Python bindings greatly simplify the above. This retrieves all licenses that permit Distribution and Derivative Works and don't require Attribution or Notice (in other words, Public Domain).
from liblicense import LicenseChooser attributes = ["http://creativecommons.org/ns#Distribution", "http://creativecommons.org/ns#DerivativeWorks", "http://creativecommons.org/ns#Attribution", "http://creativecommons.org/ns#Notice"] chooser = LicenseChooser(None,attributes) permits = (1 << 0) | (1 << 1) requires = 0 prohibits = 0 print chooser.get_licenses(permits,requires,prohibits)
The the C bindings example for more details.