[GRASS-dev] [GRASS GIS] #2708: Run GRASS with Python3

massimo di stefano massimodisasha at gmail.com
Tue Sep 22 19:28:06 PDT 2015


Hi,

is this the right ticket to look into the porting of grass to work with python3 ? 
what’s the state of port, is there any temporary fork of the project or should I apply the several patches on this ticket ?

At the moment my build fails on most of core modules  my default python is V3.
Is there a way to specify in the configure which python has to be used for to build grass ?

Thanks!

Massimo.


> On Jul 24, 2015, at 9:57 AM, GRASS GIS <trac at osgeo.org> wrote:
> 
> #2708: Run GRASS with Python3
> --------------------------+-------------------------
>  Reporter:  zarch        |      Owner:  grass-dev@…
>      Type:  defect       |     Status:  new
>  Priority:  normal       |  Milestone:  7.0.1
> Component:  Default      |    Version:  unspecified
> Resolution:               |   Keywords:
>       CPU:  Unspecified  |   Platform:  Unspecified
> --------------------------+-------------------------
> 
> Comment (by glynn):
> 
> Replying to [comment:6 zarch]:
> 
>> Testing with the python debugger:
>> 
> {{{
> ipdb> (1024 / (8 * sizeof(c_ulong)))
> 16.0
> ipdb> c_ulong * (1024 / (8 * sizeof(c_ulong)))
> *** TypeError: can't multiply sequence by non-int of type 'float'
> }}}
>> 
>> Do you have an idea on how we can fix this?
> 
> One option is to make ctypesgen use truncating division:
> 
> lib/python/ctypes/ctypesgencore/parser/cgrammar.py:282
> {{{
> -    '/': ("division", (lambda x,y: x/y), "(%s / %s)"),
> +    '/': ("division", (lambda x,y: x/y), "(%s // %s)"),
> }}}
> 
> However, this would break macros which perform floating-point division.
> 
> Another option would be to explicitly convert array sizes to integers, but
> that still doesn't handle the situation where a macro is expecting "/" to
> match C's division semantics (truncating division for integers, non-
> truncating division for floating-point values).
> 
> Ultimately, ctypesgen just translates macros directly to Python, so
> whichever division operator is used would be wrong for one case or the
> other. We could change it to use e.g. c_division(a,b) and define that
> function in ctypes_preamble.py. But that seems like overkill given that
> (on Linux) there are two occurrences of the division operator in the
> generated files.
> 
> One of them is for the definition of sigset_t, which is required for
> jmp_buf which in turn is required for G_fatal_longjmp(), and I'm not sure
> it's even possible to make use of that from Python. The other is for a
> macro named FUDGE() in ogsf.h, which I suspect is probably not
> particularly useful (and that one happens to be a floating-point
> division).
> 
> An alternative option is to just guard the <setjmp.h> include and the
> G_fatal_longjmp() declaration in defs/gis.h with `#ifndef CTYPESGEN`, and
> do likewise for the FUDGE() macro in ogsf.h.
> 
> However, that ignores the possibility that other platforms may have macros
> involving division in their system headers, or that future changes to
> GRASS may pull in additional headers with such macros.
> 
> Yet another option is a combination of the other two: prevent ctypesgen
> from ever seeing a macro involving division, and just remove the division
> case from mult_ops_dict so that if it does encounter one it raises an
> exception. That may require ongoing maintenance but avoids the situation
> where we end up silently generating broken conversions of macros.
> 
> --
> Ticket URL: <https://trac.osgeo.org/grass/ticket/2708#comment:7>
> GRASS GIS <http://grass.osgeo.org>
> 
> _______________________________________________
> grass-dev mailing list
> grass-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/grass-dev



More information about the grass-dev mailing list