On Tue, Jan 24, 2012 at 10:33 PM, Andi Vajda <[email protected]> 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 <[email protected]> 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
>>>>>> [email protected]
>>>>>> [email protected]
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>> --
>>>> Scott D. Anderson
>>>> Computer Science Department
>>>> Wellesley College
>>>> [email protected]
>>>> [email protected]
>>>>
>>>>
>>>>
>>
>> --
>> Scott D. Anderson
>> Computer Science Department
>> Wellesley College
>> [email protected]
>> [email protected]
>>
>>
--
Scott D. Anderson
Computer Science Department
Wellesley College
[email protected]
[email protected]