From 203335bd63cb43c16b5ecbfa60040048d785d5a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=2E=20David=20Ib=C3=A1=C3=B1ez?= Date: Sun, 11 Oct 2015 18:42:30 +0200 Subject: [PATCH] Trying to fix install with pip --- pygit2/__init__.py | 2 +- pygit2/_build.py | 64 ++++++++++++++++++++++++++++ pygit2/{libgit2_build.py => _run.py} | 50 +++++----------------- pygit2/ffi.py | 2 +- setup.py | 6 +-- 5 files changed, 80 insertions(+), 44 deletions(-) create mode 100644 pygit2/_build.py rename pygit2/{libgit2_build.py => _run.py} (69%) diff --git a/pygit2/__init__.py b/pygit2/__init__.py index 1fcd4da..595f91f 100644 --- a/pygit2/__init__.py +++ b/pygit2/__init__.py @@ -43,7 +43,7 @@ from .repository import Repository from .settings import Settings from .submodule import Submodule from .utils import to_bytes, to_str -from .libgit2_build import __version__ +from ._build import __version__ # Features diff --git a/pygit2/_build.py b/pygit2/_build.py new file mode 100644 index 0000000..5044866 --- /dev/null +++ b/pygit2/_build.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +# +# Copyright 2010-2014 The pygit2 contributors +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License, version 2, +# as published by the Free Software Foundation. +# +# In addition to the permissions in the GNU General Public License, +# the authors give you unlimited permission to link the compiled +# version of this file into combinations with other programs, +# and to distribute those combinations without any restriction +# coming from the use of this file. (The General Public License +# restrictions do apply in other respects; for example, they cover +# modification of the file, and distribution when not linked into +# a combined executable.) +# +# This file is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to +# the Free Software Foundation, 51 Franklin Street, Fifth Floor, +# Boston, MA 02110-1301, USA. + +""" +This is an special module, it provides stuff used by setup.py at build time. +But also used by pygit2 at run time. +""" + +# Import from the Standard Library +import os +from os import getenv + +# +# The version number of pygit2 +# +__version__ = '0.23.2' + + +# +# Utility functions to get the paths required for bulding extensions +# +def _get_libgit2_path(): + # LIBGIT2 environment variable takes precedence + libgit2_path = getenv("LIBGIT2") + if libgit2_path is not None: + return libgit2_path + + # Default + if os.name == 'nt': + return '%s\libgit2' % getenv("ProgramFiles") + return '/usr/local' + + +def get_libgit2_paths(): + libgit2_path = _get_libgit2_path() + return ( + os.path.join(libgit2_path, 'bin'), + os.path.join(libgit2_path, 'include'), + getenv('LIBGIT2_LIB', os.path.join(libgit2_path, 'lib')), + ) diff --git a/pygit2/libgit2_build.py b/pygit2/_run.py similarity index 69% rename from pygit2/libgit2_build.py rename to pygit2/_run.py index d4bc20a..bf26cab 100644 --- a/pygit2/libgit2_build.py +++ b/pygit2/_run.py @@ -26,53 +26,23 @@ # Boston, MA 02110-1301, USA. """ -This is an special module, it provides stuff used by setup.py and by -pygit2 at run-time. +This is an special module, it provides stuff used by by pygit2 at run-time. """ # Import from the Standard Library import codecs import os -from os import getenv from os.path import abspath, dirname import sys +# Import from cffi +from cffi import FFI -# -# The version number of pygit2 -# -__version__ = '0.23.2' +# Import from pygit2 +from _build import get_libgit2_paths -# -# Utility functions to get the paths required for bulding extensions -# -def _get_libgit2_path(): - # LIBGIT2 environment variable takes precedence - libgit2_path = getenv("LIBGIT2") - if libgit2_path is not None: - return libgit2_path - - # Default - if os.name == 'nt': - return '%s\libgit2' % getenv("ProgramFiles") - return '/usr/local' - - -def get_libgit2_paths(): - libgit2_path = _get_libgit2_path() - return ( - os.path.join(libgit2_path, 'bin'), - os.path.join(libgit2_path, 'include'), - getenv('LIBGIT2_LIB', os.path.join(libgit2_path, 'lib')), - ) - - -import cffi - -ffi = cffi.FFI() - -# Load C definitions +# C_HEADER_SRC if getattr(sys, 'frozen', False): dir_path = getattr(sys, '_MEIPASS', None) if dir_path is None: @@ -84,21 +54,23 @@ decl_path = os.path.join(dir_path, 'decl.h') with codecs.open(decl_path, 'r', 'utf-8') as header: C_HEADER_SRC = header.read() +# C_KEYWORDS libgit2_bin, libgit2_include, libgit2_lib = get_libgit2_paths() - C_KEYWORDS = dict(libraries=['git2'], library_dirs=[libgit2_lib], include_dirs=[libgit2_include]) -# The modulename -# Simplified version of what cffi does: remove kwargs and vengine +# preamble preamble = "#include " +# ffi +ffi = FFI() set_source = getattr(ffi, 'set_source', None) if set_source is not None: set_source("pygit2._libgit2", preamble, **C_KEYWORDS) ffi.cdef(C_HEADER_SRC) + if __name__ == '__main__': ffi.compile() diff --git a/pygit2/ffi.py b/pygit2/ffi.py index 95c8e4e..9b9a2d5 100644 --- a/pygit2/ffi.py +++ b/pygit2/ffi.py @@ -32,5 +32,5 @@ from __future__ import absolute_import try: from ._libgit2 import ffi, lib as C except ImportError: - from .libgit2_build import ffi, preamble, C_KEYWORDS + from ._run import ffi, preamble, C_KEYWORDS C = ffi.verify(preamble, **C_KEYWORDS) diff --git a/setup.py b/setup.py index 15dc51e..23f24c7 100644 --- a/setup.py +++ b/setup.py @@ -55,9 +55,9 @@ else: # Import stuff from pygit2/_utils.py without loading the whole pygit2 package sys.path.insert(0, 'pygit2') -from libgit2_build import __version__, get_libgit2_paths +from _build import __version__, get_libgit2_paths if cffi_major_version == 0: - from libgit2_build import ffi, preamble, C_KEYWORDS + from _run import ffi, preamble, C_KEYWORDS ffi.verify(preamble, **C_KEYWORDS) del sys.path[0] @@ -186,7 +186,7 @@ extra_args = { if cffi_major_version == 0: extra_args['ext_modules'].append(ffi.verifier.get_extension()) else: - extra_args['cffi_modules']=['pygit2/libgit2_build.py:ffi'] + extra_args['cffi_modules']=['pygit2/_run.py:ffi'] setup(name='pygit2',