diff --git a/setup/build.py b/setup/build.py index 369c6f4c54..80f2629f93 100644 --- a/setup/build.py +++ b/setup/build.py @@ -27,6 +27,7 @@ class Extension(object): self.name = d['name'] = name self.sources = d['sources'] = absolutize(sources) self.needs_cxx = d['needs_cxx'] = bool([1 for x in self.sources if os.path.splitext(x)[1] in ('.cpp', '.c++', '.cxx')]) + self.needs_py2 = d['needs_py2'] = kwargs.get('needs_py2', False) self.headers = d['headers'] = absolutize(kwargs.get('headers', [])) self.sip_files = d['sip_files'] = absolutize(kwargs.get('sip_files', [])) self.inc_dirs = d['inc_dirs'] = absolutize(kwargs.get('inc_dirs', [])) @@ -262,6 +263,8 @@ class Build(Command): for ext in extensions: if opts.only != 'all' and opts.only != ext.name: continue + if ext.needs_py2 and sys.version_info >= (3,): + continue if ext.error: if ext.optional: self.warn(ext.error) diff --git a/setup/extensions.json b/setup/extensions.json index 95d136361e..a22f98df65 100644 --- a/setup/extensions.json +++ b/setup/extensions.json @@ -10,7 +10,8 @@ { "name": "monotonic", "sources": "calibre/utils/monotonic.c", - "linux_libraries": "rt" + "linux_libraries": "rt", + "needs_py2": true }, { "name": "unicode_names", diff --git a/src/calibre/constants.py b/src/calibre/constants.py index 06705b71ad..4f9b6f9aa6 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -168,7 +168,6 @@ class Plugins(collections.Mapping): 'chm_extra', 'icu', 'speedup', - 'monotonic', 'unicode_names', 'zlib2', 'html', @@ -183,6 +182,10 @@ class Plugins(collections.Mapping): 'certgen', 'lzma_binding', ] + if not ispy3: + plugins.extend([ + 'monotonic', + ]) if iswindows: plugins.extend(['winutil', 'wpd', 'winfonts']) if isosx: diff --git a/src/calibre/utils/monotonic.py b/src/calibre/utils/monotonic.py index da6c88249e..6bf33e46d8 100644 --- a/src/calibre/utils/monotonic.py +++ b/src/calibre/utils/monotonic.py @@ -1,9 +1,12 @@ # vim:fileencoding=utf-8 -from calibre.constants import plugins +try: + from time import monotonic +except ImportError: + from calibre.constants import plugins -monotonicp, err = plugins['monotonic'] -if err: - raise RuntimeError('Failed to load the monotonic module with error: ' + err) -monotonic = monotonicp.monotonic -del monotonicp, err + monotonicp, err = plugins['monotonic'] + if err: + raise RuntimeError('Failed to load the monotonic module with error: ' + err) + monotonic = monotonicp.monotonic + del monotonicp, err