diff options
Diffstat (limited to 'gpip/package-fixes.scm')
-rw-r--r-- | gpip/package-fixes.scm | 500 |
1 files changed, 500 insertions, 0 deletions
diff --git a/gpip/package-fixes.scm b/gpip/package-fixes.scm new file mode 100644 index 0000000..e5efccb --- /dev/null +++ b/gpip/package-fixes.scm @@ -0,0 +1,500 @@ +(define-module (gpip package-fixes) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-9) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (guix build utils) + #:use-module (gnu packages tls) + #:use-module (gnu packages xml) + #:use-module (gnu packages image) + #:use-module (gnu packages libffi) + #:use-module (gnu packages databases) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages ghostscript) + #:use-module (gnu packages compression) + #:use-module (pypi sdist) + #:use-module (pypi package) + #:use-module (pypi requirement) + #:export (get-fixed-package)) + +(define-record-type <fix> + (fix requirement operation) + fix? + (requirement fix-requirement) + (operation fix-operation)) + +(define disable-tests + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + '(#:tests? #f)))))) + +(define (add-inputs inputs) + (lambda (pkg) + (package + (inherit pkg) + (inputs + (append + (package-inputs pkg) + inputs))))) + +(define pbr-snippet + '(replace + 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (command "install") + (params `("--root" "/" "--prefix" ,out + "--single-version-externally-managed"))) + (simple-format #t "running \"python setup.py\" with command ~s and parameters ~s~%" + command params) + (apply system* "python" "setup.py" command params))))) + +(define fixes (list + (fix + (requirement + (name "pbr")) + disable-tests) ; Tests try to use virtualenv + + (fix + (requirement + (name "cssutils")) + disable-tests) ; The tests try to download from the network + + (fix + (requirement + (name "nose")) + disable-tests) + + (fix + (requirement + (name "testscenarios")) + disable-tests) + + (fix + (requirement + (name "py")) + disable-tests) + + (fix + (requirement + (name "scripttest")) + disable-tests) + + (fix + (requirement + (name "fixtures") + (specifiers ">=3.0.0")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + `(#:phases + (modify-phases %standard-phases + ,pbr-snippet))))))) + + (fix + (requirement + (name "testtools") + (specifiers ">=2.2.0")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + `(#:tests? #f + #:phases + (modify-phases %standard-phases + ,pbr-snippet))))))) + + (fix + (requirement + (name "linecache2") + (specifiers ">=2.2.0")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + `(#:phases + (modify-phases %standard-phases + ,pbr-snippet))))))) + + (fix + (requirement + (name "traceback2") + (specifiers ">=2.2.0")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + `(#:phases + (modify-phases %standard-phases + ,pbr-snippet))))))) + + (fix + (requirement + (name "pip")) + disable-tests) + + (fix + (requirement + (name "virtualenv")) + disable-tests) + + (fix + (requirement + (name "coverage")) + disable-tests) + + (fix + (requirement + (name "cssselect")) + disable-tests) + + (fix + (requirement + (name "six")) + disable-tests) + + (fix + (requirement + (name "django-celery")) + disable-tests) + + (fix + (requirement + (name "bottle")) + disable-tests) + + (fix + (requirement + (name "raven")) + disable-tests) + + (fix + (requirement + (name "urllib3")) + disable-tests) + + (fix + (requirement + (name "web.py")) + disable-tests) + + (fix + (requirement + (name "backports.ssl_match_hostname")) + disable-tests) + + (fix + (requirement + (name "tornado")) + disable-tests) + + (fix + (requirement + (name "Flask-Login")) + disable-tests) + + (fix + (requirement + (name "requests")) + disable-tests) + + (fix + (requirement + (name "Paste")) + disable-tests) + + (fix + (requirement + (name "python-u2flib-server")) + disable-tests) + + (fix + (requirement + (name "django-sudo")) + disable-tests) + + (fix + (requirement + (name "celery")) + disable-tests) + + (fix + (requirement + (name "oauth2")) + disable-tests) ; The tests try to download from the network + + (fix + (requirement + (name "django-paging")) + disable-tests) ; The tests fail for an unknown reason + + (fix + (requirement + (name "django-nose")) + disable-tests) ; The tests fail for an unknown reason + + (fix + (requirement + (name "django-recaptcha")) + disable-tests) ; The tests fail for an unknown reason + + (fix + (requirement + (name "django-bitfield")) + disable-tests) ; The tests fail for an unknown reason + + (fix + (requirement + (name "djangorestframework")) + disable-tests) ; The tests fail for an unknown reason + + (fix + (requirement + (name "paste")) + disable-tests) + + (fix + (requirement + (name "redis")) + disable-tests) + + (fix + (requirement + (name "hiredis")) + disable-tests) ; Missing tests + + (fix + (requirement + (name "python-openid")) + disable-tests) ; Missing tests + + (fix + (requirement + (name "hashlib")) + disable-tests) ; Missing tests + + (fix + (requirement + (name "hashlib")) + (add-inputs + `(("openssl" ,openssl)))) + + (fix + (requirement + (name "ipaddr")) + disable-tests) ; Missing tests + + (fix + (requirement + (name "statsd")) + disable-tests) + + (fix + (requirement + (name "psycopg2")) + disable-tests) ; Needs running postgres + + (fix + (requirement + (name "cryptography")) + (add-inputs + `(("openssl" ,openssl)))) + + (fix + (requirement + (name "psycopg2")) + (add-inputs + `(("postgresql" ,postgresql)))) + + (fix + (requirement + (name "cffi")) + (add-inputs + `(("libffi" ,libffi)))) + + (fix + (requirement + (name "email-reply-parser")) + disable-tests) ; The tests hang for an unknown reason + + (fix + (requirement + (name "BeautifulSoup")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + '(#:tests? #f)))))) + + (fix + (requirement + (name "lxml")) + (add-inputs + `(("libxml2" ,libxml2) + ("libxslt" ,libxslt)))) + (fix + (requirement + (name "Pillow")) + (add-inputs + `(("freetype" ,freetype) + ("lcms" ,lcms) + ("zlib" ,zlib) + ("libjpeg" ,libjpeg) + ("openjpeg" ,openjpeg) + ("libtiff" ,libtiff) + ("libwebp" ,libwebp)))) + + (fix + (requirement + (name "Django")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + '(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + (with-directory-excursion "tests" + (system* "python" "./runtests.py" "--settings=test_sqlite"))))))))))) + + (fix + (requirement + (name "uwsgi")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + '(#:phases + (modify-phases %standard-phases + (add-before 'check 'set-path-for-check + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (mkdir-p (string-append out "/bin")) + (setenv "UWSGI_BIN_NAME" (string-append out "/bin/uwsgi")))))))))))) + + (fix + (requirement + (name "unittest2")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + '(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ (system* "python" "-m" "unittest2")))))))))) + + (fix + (requirement + (name "setuptools")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + `(#:phases + (alist-cons-before + 'check 'set-PYTHON_EGG_CACHE + (lambda* _ (setenv "PYTHON_EGG_CACHE" "/tmp")) + %standard-phases))))))) + + (fix + (requirement + (name "extras")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + '(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ (system* "make" "test")))))))))) + + (fix + (requirement + (name "hmac")) + (lambda (pkg) + (package + (inherit pkg) + (source + (origin + (inherit (package-source pkg)) + (modules '((guix build utils))) + (snippet + '(substitute* "setup.py" + (("'hashlib',") "")))))))) + + (fix + (requirement + (name "pytest")) + (lambda (pkg) + (package + (inherit pkg) + (source + (origin + (inherit (package-source pkg)) + (modules '((guix build utils))) + (snippet + ;; One of the tests involves the /usr directory, so it fails. + '(substitute* "testing/test_argcomplete.py" + (("def test_remove_dir_prefix\\(self\\):") + "@pytest.mark.xfail\n def test_remove_dir_prefix(self):")))))))))) + +(define indexed-fixes + (let ((ht (make-hash-table))) + (for-each + (lambda (fx) + (let* ((key (requirement-name (fix-requirement fx))) + (fixes (hash-ref ht key))) + (hash-set! + ht + key + (if fixes + (cons fx fixes) + (list fx))))) + fixes) + ht)) + +(define (get-fixed-package sd pkg) + (let* ((key (pkg-info-name (sdist-info sd))) + (fixes + (filter + (lambda (fix) + (version-meets-requirement + (fix-requirement fix) + (pkg-info-version (sdist-info sd)))) + (or + (hash-ref indexed-fixes key) + '())))) + (fold + (lambda (f pkg) + (f pkg)) + pkg + (map + fix-operation + fixes)))) |