Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix zope_interface and add python3 compatibility #1677

Merged
merged 1 commit into from
Feb 5, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions pythonforandroid/recipes/zope_interface/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from pythonforandroid.recipe import PythonRecipe
from pythonforandroid.toolchain import current_directory
from os.path import join
import sh


Expand All @@ -9,10 +10,18 @@ class ZopeInterfaceRecipe(PythonRecipe):
version = '4.1.3'
url = 'https://pypi.python.org/packages/source/z/zope.interface/zope.interface-{version}.tar.gz'
site_packages_name = 'zope.interface'

depends = [('python2', 'python3crystax')]
depends = ['setuptools']
patches = ['no_tests.patch']

def build_arch(self, arch):
super(ZopeInterfaceRecipe, self).build_arch(arch)
# The zope.interface module lacks of the __init__.py file in one of his
# folders (once is installed), that leads into an ImportError.
# Here we intentionally apply a patch to solve that, so, in case that
# this is solved in the future an error will be triggered
zope_install = join(self.ctx.get_site_packages_dir(arch.arch), 'zope')
self.apply_patch('fix-init.patch', arch.arch, build_dir=zope_install)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor: I'm not sure I understand why we're applying the patch that way rather than adding it to the patches list?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because the patch is apllied into the site-packages directory after the installation is made.
The patches are applied before the installation...and if you check the source code of zope.interface, you will se that the __init__.py file is in there, but when we install the package the file isn't installed...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ahah fun, thanks for the explanation!
Then is it not the manifest file or something like that we want to fix with a patch?
I mean the way you did seems fine, I'm just challenging to see if there're no better ways


def prebuild_arch(self, arch):
super(ZopeInterfaceRecipe, self).prebuild_arch(arch)
with current_directory(self.get_build_dir(arch.arch)):
Expand Down
9 changes: 9 additions & 0 deletions pythonforandroid/recipes/zope_interface/fix-init.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
The zope.interface module lacks of the __init__.py file in `zope` folder
(once is installed), this patch creates that missing file. This seems to be
caused during the installation process because that file exists in source
files.
diff -Naurp zope.orig/__init__.py zope/__init__.py
--- zope.orig/__init__.py 1970-01-01 01:00:00.000000000 +0100
+++ zope/__init__.py 2019-02-05 11:29:22.666757227 +0100
@@ -0,0 +1 @@
+