Hi pylucene-dev,

If I use gcc-4.3 to build the jcc included with pylucene 2.4.0-1
(downloaded from the official website), it fails on JArray.cpp with
this message:

jcc/sources/JArray.cpp:621: error: explicit template specialization cannot have 
a storage class
jcc/sources/JArray.cpp:627: error: explicit template specialization cannot have 
a storage class
jcc/sources/JArray.cpp:633: error: explicit template specialization cannot have 
a storage class
jcc/sources/JArray.cpp:723: error: explicit template specialization cannot have 
a storage class
jcc/sources/JArray.cpp:730: error: explicit template specialization cannot have 
a storage class
jcc/sources/JArray.cpp:801: error: explicit template specialization cannot have 
a storage class
jcc/sources/JArray.cpp:852: error: explicit template specialization cannot have 
a storage class
jcc/sources/JArray.cpp:903: error: explicit template specialization cannot have 
a storage class


For reference, I'm using this gcc:
Target: i486-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.3.2-1' 
--with-bugurl=file:///usr/share/doc/gcc-4.3/README.Bugs 
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared 
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext 
--enable-threads=posix --enable-nls --with-gxx-include-dir=/usr/include/c++/4.3 
--program-suffix=-4.3 --enable-clocale=gnu --enable-libstdcxx-debug 
--enable-objc-gc --enable-mpfr --enable-targets=all --enable-cld 
--enable-checking=release --build=i486-linux-gnu --host=i486-linux-gnu 
--target=i486-linux-gnu
Thread model: posix
gcc version 4.3.2 (Debian 4.3.2-1) 

The gcc-4.3 docs say that the c++ gurus say that you can't specify a
storage class when explicitly specializing a template:

http://gcc.gnu.org/gcc-4.3/porting_to.html

        Explicit template specialization cannot have a storage class

        Specializations of templates cannot explicitly specify a
        storage class, and have the same storage as the primary
        template. This is a change from previous behavior, based on
        the feedback and commentary as part of the ISO C++ Core Defect
        Report 605.

I took their advice and removed "static" from those specializations:

--- oldJArray.cpp       2008-10-11 19:29:03.000000000 -0400
+++ JArray.cpp  2008-11-10 18:50:34.000000000 -0500
@@ -615,25 +615,25 @@
 };
 
 template<>
-static PyObject *get(_t_jobjectarray<jobject> *self, int n)
+PyObject *get(_t_jobjectarray<jobject> *self, int n)
 {
     return self->array.get(n, self->wrapfn);
 }
 
 template<>
-static PyObject *toSequence(_t_jobjectarray<jobject> *self)
+PyObject *toSequence(_t_jobjectarray<jobject> *self)
 {
     return self->array.toSequence(self->wrapfn);
 }
 
 template<>
-static PyObject *toSequence(_t_jobjectarray<jobject> *self, int lo, int hi)
+PyObject *toSequence(_t_jobjectarray<jobject> *self, int lo, int hi)
 {
     return self->array.toSequence(lo, hi, self->wrapfn);
 }
 
 template<>
-static int init< jobject,_t_jobjectarray<jobject> >(_t_jobjectarray<jobject> 
*self, PyObject *args, PyObject *kwds)
+int init< jobject,_t_jobjectarray<jobject> >(_t_jobjectarray<jobject> *self, 
PyObject *args, PyObject *kwds)
 {
     PyObject *obj, *clsObj = NULL;
     PyObject *(*wrapfn)(const jobject &) = NULL;
@@ -723,14 +723,14 @@
 }
 
 template<>
-static jclass initializeClass<jobject>(void)
+jclass initializeClass<jobject>(void)
 {
     jclass cls = env->findClass("java/lang/Object");
     return env->get_vm_env()->GetObjectClass(JArray<jobject>(cls, 0).this$);
 }
 
 template<> 
-static PyObject *cast_<jobject>(PyTypeObject *type,
+PyObject *cast_<jobject>(PyTypeObject *type,
                                 PyObject *args, PyObject *kwds)
 {
     PyObject *arg, *clsArg = NULL;
@@ -801,7 +801,7 @@
 }
 
 template<> 
-static PyObject *instance_<jobject>(PyTypeObject *type,
+PyObject *instance_<jobject>(PyTypeObject *type,
                                     PyObject *args, PyObject *kwds)
 {
     PyObject *arg, *clsArg = NULL;
@@ -852,7 +852,7 @@
 }
 
 template<> 
-static PyObject *assignable_<jobject>(PyTypeObject *type,
+PyObject *assignable_<jobject>(PyTypeObject *type,
                                       PyObject *args, PyObject *kwds)
 {
     PyObject *arg, *clsArg = NULL;


This seems to work. I'm curious: is dumping the 'static' storage class
likely to break anything?

best,

Joe

P.S.: I usually set my umask to 0027. If I build jcc with python
      setup.py build; sudo python setup.py install, my installed jcc
      dir is not world-readable. I think there might be a
      perms-setting step missing in the setup script. (If I chmod o+r
      everything before the build and set the building user's umask to
      0022, the installed files have the correct perms.)

_______________________________________________
pylucene-dev mailing list
pylucene-dev@osafoundation.org
http://lists.osafoundation.org/mailman/listinfo/pylucene-dev

Reply via email to