Trying to fix install with pip

This commit is contained in:
J. David Ibáñez
2015-10-11 18:42:30 +02:00
parent 64150d3535
commit 203335bd63
5 changed files with 80 additions and 44 deletions

View File

@@ -43,7 +43,7 @@ from .repository import Repository
from .settings import Settings from .settings import Settings
from .submodule import Submodule from .submodule import Submodule
from .utils import to_bytes, to_str from .utils import to_bytes, to_str
from .libgit2_build import __version__ from ._build import __version__
# Features # Features

64
pygit2/_build.py Normal file
View File

@@ -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')),
)

View File

@@ -26,53 +26,23 @@
# Boston, MA 02110-1301, USA. # Boston, MA 02110-1301, USA.
""" """
This is an special module, it provides stuff used by setup.py and by This is an special module, it provides stuff used by by pygit2 at run-time.
pygit2 at run-time.
""" """
# Import from the Standard Library # Import from the Standard Library
import codecs import codecs
import os import os
from os import getenv
from os.path import abspath, dirname from os.path import abspath, dirname
import sys import sys
# Import from cffi
from cffi import FFI
# # Import from pygit2
# The version number of pygit2 from _build import get_libgit2_paths
#
__version__ = '0.23.2'
# # C_HEADER_SRC
# 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
if getattr(sys, 'frozen', False): if getattr(sys, 'frozen', False):
dir_path = getattr(sys, '_MEIPASS', None) dir_path = getattr(sys, '_MEIPASS', None)
if dir_path is 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: with codecs.open(decl_path, 'r', 'utf-8') as header:
C_HEADER_SRC = header.read() C_HEADER_SRC = header.read()
# C_KEYWORDS
libgit2_bin, libgit2_include, libgit2_lib = get_libgit2_paths() libgit2_bin, libgit2_include, libgit2_lib = get_libgit2_paths()
C_KEYWORDS = dict(libraries=['git2'], C_KEYWORDS = dict(libraries=['git2'],
library_dirs=[libgit2_lib], library_dirs=[libgit2_lib],
include_dirs=[libgit2_include]) include_dirs=[libgit2_include])
# The modulename # preamble
# Simplified version of what cffi does: remove kwargs and vengine
preamble = "#include <git2.h>" preamble = "#include <git2.h>"
# ffi
ffi = FFI()
set_source = getattr(ffi, 'set_source', None) set_source = getattr(ffi, 'set_source', None)
if set_source is not None: if set_source is not None:
set_source("pygit2._libgit2", preamble, **C_KEYWORDS) set_source("pygit2._libgit2", preamble, **C_KEYWORDS)
ffi.cdef(C_HEADER_SRC) ffi.cdef(C_HEADER_SRC)
if __name__ == '__main__': if __name__ == '__main__':
ffi.compile() ffi.compile()

View File

@@ -32,5 +32,5 @@ from __future__ import absolute_import
try: try:
from ._libgit2 import ffi, lib as C from ._libgit2 import ffi, lib as C
except ImportError: except ImportError:
from .libgit2_build import ffi, preamble, C_KEYWORDS from ._run import ffi, preamble, C_KEYWORDS
C = ffi.verify(preamble, **C_KEYWORDS) C = ffi.verify(preamble, **C_KEYWORDS)

View File

@@ -55,9 +55,9 @@ else:
# Import stuff from pygit2/_utils.py without loading the whole pygit2 package # Import stuff from pygit2/_utils.py without loading the whole pygit2 package
sys.path.insert(0, 'pygit2') 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: 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) ffi.verify(preamble, **C_KEYWORDS)
del sys.path[0] del sys.path[0]
@@ -186,7 +186,7 @@ extra_args = {
if cffi_major_version == 0: if cffi_major_version == 0:
extra_args['ext_modules'].append(ffi.verifier.get_extension()) extra_args['ext_modules'].append(ffi.verifier.get_extension())
else: else:
extra_args['cffi_modules']=['pygit2/libgit2_build.py:ffi'] extra_args['cffi_modules']=['pygit2/_run.py:ffi']
setup(name='pygit2', setup(name='pygit2',