On Tue, Jan 24, 2012 at 10:33 PM, Andi Vajda <va...@apache.org> wrote:

>
>  Hi Scott,
>
> I looked at the data you sent.
>
> I don't have a Fedora 14 system with python 2.7 where I can reproduce this.
> I suspect something else modified this file and thus the jcc patch doesn't
> apply out of the box.
>

I can understand your suspicion, which is why I did the rpm -V to check
whether it's been modified, and it hasn't.
I even uninstalled and re-installed it, to be sure (that wasn't in the
typescript).  I even checked that it's coming from
the fedora repo, not some odd other repo. So unless something is very
strange, there are a lot of Fedora 14 files
out there that the patch doesn't work for.


>
> I can't guess what you have in that file so I don't know what to tell you
> off hand. If you send me the original file, I can try to patch it manually.
>

I've pasted it below my signature, since something seems to be stripping my
attachments.

>
> Have you looked at it ? Does it look difficult for you to do ?


I don't have a lot of experience with setuptools, so I'd be doing a lot of
poor guesswork.  If you'd be willing to take a crack at it, I'd be very
grateful.

Thanks,

Scott

# =============== build_ext.py ========
from distutils.command.build_ext import build_ext as _du_build_ext
try:
    # Attempt to use Pyrex for building extensions, if available
    from Pyrex.Distutils.build_ext import build_ext as _build_ext
except ImportError:
    _build_ext = _du_build_ext

import os, sys
from distutils.file_util import copy_file
from setuptools.extension import Library
from distutils.ccompiler import new_compiler
from distutils.sysconfig import customize_compiler, get_config_var
get_config_var("LDSHARED")  # make sure _config_vars is initialized
from distutils.sysconfig import _config_vars
from distutils import log
from distutils.errors import *

have_rtld = False
use_stubs = False
libtype = 'shared'

if sys.platform == "darwin":
    use_stubs = True
elif os.name != 'nt':
    try:
        from dl import RTLD_NOW
        have_rtld = True
        use_stubs = True
    except ImportError:
        pass

def if_dl(s):
    if have_rtld:
        return s
    return ''






class build_ext(_build_ext):
    def run(self):
        """Build extensions in build directory, then copy if --inplace"""
        old_inplace, self.inplace = self.inplace, 0
        _build_ext.run(self)
        self.inplace = old_inplace
        if old_inplace:
            self.copy_extensions_to_source()

    def copy_extensions_to_source(self):
        build_py = self.get_finalized_command('build_py')
        for ext in self.extensions:
            fullname = self.get_ext_fullname(ext.name)
            filename = self.get_ext_filename(fullname)
            modpath = fullname.split('.')
            package = '.'.join(modpath[:-1])
            package_dir = build_py.get_package_dir(package)
            dest_filename =
os.path.join(package_dir,os.path.basename(filename))
            src_filename = os.path.join(self.build_lib,filename)

            # Always copy, even if source is older than destination, to
ensure
            # that the right extensions for the current Python/platform are
            # used.
            copy_file(
                src_filename, dest_filename, verbose=self.verbose,
                dry_run=self.dry_run
            )
            if ext._needs_stub:
                self.write_stub(package_dir or os.curdir, ext, True)


    if _build_ext is not _du_build_ext and not
hasattr(_build_ext,'pyrex_sources'):
        # Workaround for problems using some Pyrex versions w/SWIG and/or
2.4
        def swig_sources(self, sources, *otherargs):
            # first do any Pyrex processing
            sources = _build_ext.swig_sources(self, sources) or sources
            # Then do any actual SWIG stuff on the remainder
            return _du_build_ext.swig_sources(self, sources, *otherargs)



    def get_ext_filename(self, fullname):
        filename = _build_ext.get_ext_filename(self,fullname)
        if fullname not in self.ext_map:
            return filename
        ext = self.ext_map[fullname]
        if isinstance(ext,Library):
            fn, ext = os.path.splitext(filename)
            return self.shlib_compiler.library_filename(fn,libtype)
        elif use_stubs and ext._links_to_dynamic:
            d,fn = os.path.split(filename)
            return os.path.join(d,'dl-'+fn)
        else:
            return filename

    def initialize_options(self):
        _build_ext.initialize_options(self)
        self.shlib_compiler = None
        self.shlibs = []
        self.ext_map = {}

    def finalize_options(self):
        _build_ext.finalize_options(self)
        self.extensions = self.extensions or []
        self.check_extensions_list(self.extensions)
        self.shlibs = [ext for ext in self.extensions
                        if isinstance(ext,Library)]
        if self.shlibs:
            self.setup_shlib_compiler()
        for ext in self.extensions:
            ext._full_name = self.get_ext_fullname(ext.name)
        for ext in self.extensions:
            fullname = ext._full_name
            self.ext_map[fullname] = ext

            # distutils 3.1 will also ask for module names
            # XXX what to do with conflicts?
            self.ext_map[fullname.split('.')[-1]] = ext

            ltd = ext._links_to_dynamic = \
                self.shlibs and self.links_to_dynamic(ext) or False
            ext._needs_stub = ltd and use_stubs and not
isinstance(ext,Library)
            filename = ext._file_name = self.get_ext_filename(fullname)
            libdir = os.path.dirname(os.path.join(self.build_lib,filename))
            if ltd and libdir not in ext.library_dirs:
                ext.library_dirs.append(libdir)
            if ltd and use_stubs and os.curdir not in
ext.runtime_library_dirs:
                ext.runtime_library_dirs.append(os.curdir)

    def setup_shlib_compiler(self):
        compiler = self.shlib_compiler = new_compiler(
            compiler=self.compiler, dry_run=self.dry_run, force=self.force
        )
        if sys.platform == "darwin":
            tmp = _config_vars.copy()
            try:
                # XXX Help!  I don't have any idea whether these are
right...
                _config_vars['LDSHARED'] = "gcc -Wl,-x -dynamiclib
-undefined dynamic_lookup"
                _config_vars['CCSHARED'] = " -dynamiclib"
                _config_vars['SO'] = ".dylib"
                customize_compiler(compiler)
            finally:
                _config_vars.clear()
                _config_vars.update(tmp)
        else:
            customize_compiler(compiler)

        if self.include_dirs is not None:
            compiler.set_include_dirs(self.include_dirs)
        if self.define is not None:
            # 'define' option is a list of (name,value) tuples
            for (name,value) in self.define:
                compiler.define_macro(name, value)
        if self.undef is not None:
            for macro in self.undef:
                compiler.undefine_macro(macro)
        if self.libraries is not None:
            compiler.set_libraries(self.libraries)
        if self.library_dirs is not None:
            compiler.set_library_dirs(self.library_dirs)
        if self.rpath is not None:
            compiler.set_runtime_library_dirs(self.rpath)
        if self.link_objects is not None:
            compiler.set_link_objects(self.link_objects)

        # hack so distutils' build_extension() builds a library instead
        compiler.link_shared_object = link_shared_object.__get__(compiler)



    def get_export_symbols(self, ext):
        if isinstance(ext,Library):
            return ext.export_symbols
        return _build_ext.get_export_symbols(self,ext)

    def build_extension(self, ext):
        _compiler = self.compiler
        try:
            force_shared = False
            if isinstance(ext,Library):
                self.compiler = self.shlib_compiler
                force_shared = ext.force_shared and not use_stubs
                if force_shared:
                    self.compiler.link_shared_object = \
                        sh_link_shared_object.__get__(self.compiler)
            _build_ext.build_extension(self,ext)
            if ext._needs_stub:
                self.write_stub(
                    self.get_finalized_command('build_py').build_lib, ext
                )
        finally:
            if force_shared:
                self.compiler.link_shared_object = \
                    link_shared_object.__get__(self.compiler)
            self.compiler = _compiler

    def links_to_dynamic(self, ext):
        """Return true if 'ext' links to a dynamic lib in the same
package"""
        # XXX this should check to ensure the lib is actually being built
        # XXX as dynamic, and not just using a locally-found version or a
        # XXX static-compiled version
        libnames = dict.fromkeys([lib._full_name for lib in self.shlibs])
        pkg = '.'.join(ext._full_name.split('.')[:-1]+[''])
        for libname in ext.libraries:
            if pkg+libname in libnames: return True
        return False

    def get_outputs(self):
        outputs = _build_ext.get_outputs(self)
        optimize = self.get_finalized_command('build_py').optimize
        for ext in self.extensions:
            if ext._needs_stub:
                base = os.path.join(self.build_lib,
*ext._full_name.split('.'))
                outputs.append(base+'.py')
                outputs.append(base+'.pyc')
                if optimize:
                    outputs.append(base+'.pyo')
        return outputs

    def write_stub(self, output_dir, ext, compile=False):
        log.info("writing stub loader for %s to %s",ext._full_name,
output_dir)
        stub_file = os.path.join(output_dir,
*ext._full_name.split('.'))+'.py'
        if compile and os.path.exists(stub_file):
            raise DistutilsError(stub_file+" already exists! Please
delete.")
        if not self.dry_run:
            f = open(stub_file,'w')
            f.write('\n'.join([
                "def __bootstrap__():",
                "   global __bootstrap__, __file__, __loader__",
                "   import sys, os, pkg_resources, imp"+if_dl(", dl"),
                "   __file__ = pkg_resources.resource_filename(__name__,%r)"
                   % os.path.basename(ext._file_name),
                "   del __bootstrap__",
                "   if '__loader__' in globals():",
                "       del __loader__",
                if_dl("   old_flags = sys.getdlopenflags()"),
                "   old_dir = os.getcwd()",
                "   try:",
                "     os.chdir(os.path.dirname(__file__))",
                if_dl("     sys.setdlopenflags(dl.RTLD_NOW)"),
                "     imp.load_dynamic(__name__,__file__)",
                "   finally:",
                if_dl("     sys.setdlopenflags(old_flags)"),
                "     os.chdir(old_dir)",
                "__bootstrap__()",
                "" # terminal \n
            ]))
            f.close()
        if compile:
            from distutils.util import byte_compile
            byte_compile([stub_file], optimize=0,
                         force=True, dry_run=self.dry_run)
            optimize = self.get_finalized_command('install_lib').optimize
            if optimize > 0:
                byte_compile([stub_file], optimize=optimize,
                             force=True, dry_run=self.dry_run)
            if os.path.exists(stub_file) and not self.dry_run:
                os.unlink(stub_file)


def sh_link_shared_object(self, objects, output_libname, output_dir=None,
    libraries=None, library_dirs=None, runtime_library_dirs=None,
    export_symbols=None, debug=0, extra_preargs=None,
    extra_postargs=None, build_temp=None, target_lang=None
):  self.link(self.SHARED_LIBRARY, objects, output_libname,
              output_dir, libraries, library_dirs, runtime_library_dirs,
              export_symbols, debug, extra_preargs, extra_postargs,
              build_temp, target_lang)

def st_link_shared_object(self, objects, output_libname, output_dir=None,
    libraries=None, library_dirs=None, runtime_library_dirs=None,
    export_symbols=None, debug=0, extra_preargs=None,
    extra_postargs=None, build_temp=None, target_lang=None
):
    # XXX we need to either disallow these attrs on Library instances,
    #     or warn/abort here if set, or something...
    #libraries=None, library_dirs=None, runtime_library_dirs=None,
    #export_symbols=None, extra_preargs=None, extra_postargs=None,
    #build_temp=None

    assert output_dir is None   # distutils build_ext doesn't pass this
    output_dir,filename = os.path.split(output_libname)
    basename, ext = os.path.splitext(filename)
    if self.library_filename("x").startswith('lib'):
        # strip 'lib' prefix; this is kludgy if some platform uses
        # a different prefix
        basename = basename[3:]

    self.create_static_lib(objects, basename, output_dir, debug,
target_lang)


if use_stubs or os.name=='nt':
    # Build shared libraries
    link_shared_object = sh_link_shared_object
else:
    # Build static libraries everywhere else (unless force_shared)
    libtype = 'static'
    link_shared_object = st_link_shared_object
# =============== end of build_ext.py ===================

>
>
> Andi..
>
>
> On Tue, 24 Jan 2012, Scott D Anderson wrote:
>
>  On Tue, Jan 24, 2012 at 4:37 PM, Andi Vajda <va...@apache.org> wrote:
>>
>>
>>> On Tue, 24 Jan 2012, Scott D Anderson wrote:
>>>
>>>  Sorry for the confusion.  I named it pylucene-install.log, but that's
>>> just
>>>
>>>> a rename
>>>> of the typescript file.
>>>>
>>>>
>>> Your messages have no attachments. Maybe they're being filtered out.
>>> Can you include it inline since it's plain text anyway ?
>>>
>>
>>
>>  Andi..
>>>
>>
>>
>> Sure.  Here's the typescript:
>>
>> Script started on Tue 24 Jan 2012 01:07:10 PM EST
>> [root@sampras tmp] cat /etc/issue
>> Fedora release 14 (Laughlin)
>> Kernel \r on an \m (\l)
>>
>> [root@sampras tmp] rpm -qV python-setuptools
>> [root@sampras tmp] ls -l /usr/lib/python2.7/site-**packages/setuptools*
>> -rw-r--r-- 1 root root  144 Oct 26 22:05
>> /usr/lib/python2.7/site-**packages/setuptools-0.6c11-**py2.7.egg-info
>> -rw-r--r-- 1 root root   34 Oct 26 22:05
>> /usr/lib/python2.7/site-**packages/setuptools.pth
>>
>> /usr/lib/python2.7/site-**packages/setuptools:
>> total 300
>> -rw-r--r-- 1 root root  5927 Oct 26 22:04 archive_util.py
>> -rw-r--r-- 2 root root  5725 Oct 26 22:05 archive_util.pyc
>> -rw-r--r-- 2 root root  5725 Oct 26 22:05 archive_util.pyo
>> drwxr-xr-x 2 root root  4096 Jan 24 11:47 command
>> -rw-r--r-- 1 root root  6209 Oct 26 22:04 depends.py
>> -rw-r--r-- 2 root root  6749 Oct 26 22:05 depends.pyc
>> -rw-r--r-- 2 root root  6749 Oct 26 22:05 depends.pyo
>> -rw-r--r-- 1 root root 30309 Oct 26 22:04 dist.py
>> -rw-r--r-- 1 root root 30221 Oct 26 22:05 dist.pyc
>> -rw-r--r-- 1 root root 30163 Oct 26 22:05 dist.pyo
>> -rw-r--r-- 1 root root  1278 Oct 26 22:04 extension.py
>> -rw-r--r-- 2 root root  1761 Oct 26 22:05 extension.pyc
>> -rw-r--r-- 2 root root  1761 Oct 26 22:05 extension.pyo
>> -rw-r--r-- 1 root root  1278 Oct 26 22:04 extension.py.orig
>> -rw-r--r-- 1 root root  3744 Oct 26 22:04 __init__.py
>> -rw-r--r-- 2 root root  4028 Oct 26 22:05 __init__.pyc
>> -rw-r--r-- 2 root root  4028 Oct 26 22:05 __init__.pyo
>> -rw-r--r-- 1 root root 30447 Oct 26 22:04 package_index.py
>> -rw-r--r-- 2 root root 28625 Oct 26 22:05 package_index.pyc
>> -rw-r--r-- 2 root root 28625 Oct 26 22:05 package_index.pyo
>> -rw-r--r-- 1 root root  8756 Oct 26 22:04 sandbox.py
>> -rw-r--r-- 2 root root 11425 Oct 26 22:05 sandbox.pyc
>> -rw-r--r-- 2 root root 11425 Oct 26 22:05 sandbox.pyo
>> [root@sampras tmp] patch -d /usr/lib/python2.7/site-**packages -Nup0 <
>> /usr/network/tmp/pylucene-3.5.**0-3 /jcc/jcc/patches/patch.43.0.**6c11
>> patching file setuptools/extension.py
>> Hunk #1 succeeded at 32 (offset 4 lines).
>> patching file setuptools/command/build_ext.**py
>> Hunk #1 FAILED at 85.
>> Hunk #2 succeeded at 177 (offset 7 lines).
>> Hunk #3 succeeded at 259 (offset 7 lines).
>> 1 out of 3 hunks FAILED -- saving rejects to file
>> setuptools/command/build_ext.**py.rej
>> [root@sampras tmp] exit
>>
>> Script done on Tue 24 Jan 2012 01:08:32 PM EST
>>
>> and here's the contents of build_ex.py.rej
>>
>> --- setuptools/command/build_ext.**py    (revision 75864)
>> +++ setuptools/command/build_ext.**py    (working copy)
>> @@ -85,8 +85,12 @@
>>        if fullname in self.ext_map:
>>            ext = self.ext_map[fullname]
>>            if isinstance(ext,Library):
>> +                if ext.force_shared and not use_stubs:
>> +                    _libtype = 'shared'
>> +                else:
>> +                    _libtype = libtype
>>                fn, ext = os.path.splitext(filename)
>> -                return self.shlib_compiler.library_**
>> filename(fn,libtype)
>> +                return self.shlib_compiler.library_**
>> filename(fn,_libtype)
>>            elif use_stubs and ext._links_to_dynamic:
>>                d,fn = os.path.split(filename)
>>                return os.path.join(d,'dl-'+fn)
>>
>>
>> Thanks for your help.
>>
>> Scott
>>
>>
>>>
>>>
>>>  Scott
>>>>
>>>>
>>>>  Andi..
>>>>>
>>>>>
>>>>>  standard python-setuptools from the distribution and I show that it's
>>>>>
>>>>>  running setuptools-0.6c11.
>>>>>> I've also attached the file of rejects listed above.
>>>>>>
>>>>>> Since you have a pretty sophisticated patch setup, I'm hoping that
>>>>>> you'll
>>>>>> be able to solve this pretty
>>>>>> easily.  Please let me know if there's any way I can help.
>>>>>>
>>>>>> Thanks for your support,
>>>>>>
>>>>>> Scott
>>>>>>
>>>>>> --
>>>>>> Scott D. Anderson
>>>>>> Computer Science Department
>>>>>> Wellesley College
>>>>>> scott.ander...@acm.org
>>>>>> scott.ander...@wellesley.edu
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>> --
>>>> Scott D. Anderson
>>>> Computer Science Department
>>>> Wellesley College
>>>> scott.ander...@acm.org
>>>> scott.ander...@wellesley.edu
>>>>
>>>>
>>>>
>>
>> --
>> Scott D. Anderson
>> Computer Science Department
>> Wellesley College
>> scott.ander...@acm.org
>> scott.ander...@wellesley.edu
>>
>>


-- 
Scott D. Anderson
Computer Science Department
Wellesley College
scott.ander...@acm.org
scott.ander...@wellesley.edu

Reply via email to