# librepo
librepo - A library providing C and Python (libcURL like) API for downloading
linux repository metadata and packages
## Building
### Build requires:
Fedora/Ubuntu name
* check (http://check.sourceforge.net/) - check-devel/check
* cmake (http://www.cmake.org/) - cmake/cmake
* expat (http://expat.sourceforge.net/) - expat-devel/libexpat1-dev
* gcc (http://gcc.gnu.org/) - gcc/gcc
* glib2 (http://developer.gnome.org/glib/) - glib2-devel/libglib2.0-dev
* gpgme (http://www.gnupg.org/) - gpgme-devel/libgpgme11-dev
* libattr (http://www.bestbits.at/acl/) - libattr-devel/libattr1-dev
* libcurl (http://curl.haxx.se/libcurl/) - libcurl-devel/libcurl4-openssl-dev
* openssl (http://www.openssl.org/) - openssl-devel/libssl-dev
* python (http://python.org/) - python2-devel/libpython2.7-dev (python3-devel/libpython3-dev)
* **Test requires:** pygpgme (https://pypi.python.org/pypi/pygpgme/0.1) - pygpgme/python-gpgme (python3-pygpgme/python3-gpgme)
* **Test requires:** python-flask (http://flask.pocoo.org/) - python-flask/python-flask
* **Test requires:** python-nose (https://nose.readthedocs.org/) - python-nose/python-nose (python3-nose)
* **Test requires:** pyxattr (https://github.com/xattr/xattr) - /pyxattr (python3-pyxattr)
### Build from your checkout dir (Python 2 bindings):
mkdir build
cd build/
cmake ..
make
### Build from your checkout dir (Python 3 bindings):
mkdir build
cd build/
cmake -DPYTHON_DESIRED="3" ..
make
### Build with debug flags:
mkdir build
cd build/
cmake -DCMAKE_BUILD_TYPE="DEBUG" ..
make
## Documentation
### Build:
cd build/
make doc
* C documentation: `build/doc/c/html/index.html`
* Python documentation: `build/doc/python/index.html`
### Online python bindings documentation:
https://rpm-software-management.github.com/librepo/
## Python 3 notes:
Support for Python 3 is experimental.
Python unittests are not fully working due to missing python3 support in
Flask module.
Flask python3 support rely on python3 support in:
* [Werkzeug module](http://werkzeug.pocoo.org/docs/python3/) (Currently - 13.8.2013 - Highly experimental)
* [Jinja2 module](http://jinja.pocoo.org/docs/intro/) (Done)
* [itsdangerous module](https://github.com/mitsuhiko/itsdangerous) (Done)
## Testing
All unit tests run from librepo checkout dir
### Run both (C & Python) tests via makefile:
make test
### Run (from your checkout dir) - C unittests:
build/tests/test_main tests/test_data/
Available params:
* ``-v`` Run tests verbosely (Show Librepo debug messages)
* ``-d`` Run download tests (This tests need internet connection)
To check memoryleaks:
Add this line to your ``~/.bashrc`` file
alias gvalgrind='G_SLICE=always-malloc G_DEBUG=gc-friendly valgrind'
And then run:
CK_FORK=no gvalgrind --leak-check=full build/tests/test_main tests/test_data/
Suppress known still_reachable memory:
CK_FORK=no gvalgrind --leak-check=full --suppressions=still_reachable.supp build/tests/test_main tests/test_data/
Note: .valgrindrc file is present in checkoutdir, this file contains the settings:
`--memcheck:leak-check=full --suppressions=./valgrind.supp`
### Run (from your checkout dir) - Python 2 unittests:
PYTHONPATH=`readlink -f ./build/librepo/python/python2/` nosetests -s -v tests/python/tests/
Example of run only one specific test: ``PYTHONPATH=`readlink -f ./build/librepo/python/python2/` nosetests -s -v tests/python/tests/test_yum_repo_downloading.py:TestCaseYumRepoDownloading.test_download_and_update_repo_01``
### Run (from your checkout dir) - Python 3 unittests:
PYTHONPATH=`readlink -f ./build/librepo/python/python3/` nosetests-3.3 -s -v tests/python/tests/
## Links
* [Red Hat Bugzilla](https://bugzilla.redhat.com/buglist.cgi?query_format=advanced&bug_status=NEW&bug_status=ASSIGNED&bug_status=MODIFIED&bug_status=VERIFIED&component=librepo)
* [Fedora spec file](http://pkgs.fedoraproject.org/cgit/librepo.git/tree/librepo.spec)
Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]