Skip to content

Commit

Permalink
Update to upstream ctypesgen version (#1651)
Browse files Browse the repository at this point in the history
* update ctypesgen to community version

* ctypesgen patches needed for mac

* ctypesgen patch for python printer of preamble and loader

* patches applied to ctypesgen source code

* patch for ctypesgen POINTER

* Use ReturnString to create String from str object

* remove lextab.py from gitignore

* remove sed-file for preamble/loader replacement

* black on preamble patch

* add README

- with instructions on updating ctypesgen version
- remove patches dir and separate files

* set RASTER3D_DEFAULT_WINDOW=0

* libimagery unittest: adapt to community ctypesgen

* add win patches to README

* patches needed for Windows

* update README and run Black on a patch
  • Loading branch information
nilason committed Oct 1, 2021
1 parent 2d6ba1e commit ca2d28a
Show file tree
Hide file tree
Showing 59 changed files with 7,777 additions and 3,714 deletions.
1 change: 0 additions & 1 deletion .gitignore
Expand Up @@ -24,7 +24,6 @@ lib/db/sqlp/sqlp.output
lib/db/sqlp/sqlp.tab.c
lib/db/sqlp/sqlp.tab.h
lib/db/sqlp/sqlp.yy.c
python/grass/ctypes/ctypesgencore/parser/lextab.py
python/grass/script/setup.py.tmp
raster/r.mapcalc/mapcalc.output
raster/r.mapcalc/mapcalc.tab.c
Expand Down
2 changes: 1 addition & 1 deletion include/grass/raster3d.h
Expand Up @@ -26,7 +26,7 @@
#define RASTER3D_USE_CACHE_YZ -7
#define RASTER3D_USE_CACHE_XYZ -8

#define RASTER3D_DEFAULT_WINDOW NULL
#define RASTER3D_DEFAULT_WINDOW 0 /* NULL pointer, now (int)0 because issues with ctypesgen */

#define RASTER3D_DIRECTORY "grid3"
#define RASTER3D_CELL_ELEMENT "cell"
Expand Down
6 changes: 4 additions & 2 deletions lib/imagery/testsuite/test_imagery_signature_management.py
Expand Up @@ -40,17 +40,19 @@
I_make_signatures_dir,
)

H_DIRSEP = HOST_DIRSEP.decode("utf-8")


class GetSignaturesElementTestCase(TestCase):
def test_get_sig(self):
cdir = ctypes.create_string_buffer(GNAME_MAX)
I_get_signatures_dir(cdir, I_SIGFILE_TYPE_SIG)
self.assertEqual(utils.decode(cdir.value), f"signatures{HOST_DIRSEP}sig")
self.assertEqual(utils.decode(cdir.value), f"signatures{H_DIRSEP}sig")

def test_get_sigset(self):
cdir = ctypes.create_string_buffer(GNAME_MAX)
I_get_signatures_dir(cdir, I_SIGFILE_TYPE_SIGSET)
self.assertEqual(utils.decode(cdir.value), f"signatures{HOST_DIRSEP}sigset")
self.assertEqual(utils.decode(cdir.value), f"signatures{H_DIRSEP}sigset")


class MakeSignaturesElementTestCase(TestCase):
Expand Down
38 changes: 19 additions & 19 deletions lib/imagery/testsuite/test_imagery_sigsetfile.py
Expand Up @@ -36,7 +36,7 @@
I_init_group_ref,
I_add_file_to_group_ref,
I_free_group_ref,
String,
ReturnString,
)


Expand Down Expand Up @@ -71,11 +71,11 @@ def test_roundtrip_sigset_v1_one_band(self):
self.assertEqual(So.ClassSig[0].nsubclasses, 1)

# Fill sigset struct with data
So.title = String("Signature title")
So.title = ReturnString("Signature title")
So.bandrefs[0] = ctypes.create_string_buffer(b"The_Doors")
So.ClassSig[0].used = 1
So.ClassSig[0].classnum = 2
So.ClassSig[0].title = String("1st class")
So.ClassSig[0].title = ReturnString("1st class")
So.ClassSig[0].type = 1
So.ClassSig[0].SubSig[0].pi = 3.14
So.ClassSig[0].SubSig[0].means[0] = 42.42
Expand Down Expand Up @@ -124,11 +124,11 @@ def test_read_fail_sigset_v1_one_band(self):
self.assertEqual(So.ClassSig[0].nsubclasses, 1)

# Fill sigset struct with data
So.title = String("Signature title")
So.title = ReturnString("Signature title")
So.bandrefs[0] = ctypes.create_string_buffer(tempname(252).encode())
So.ClassSig[0].used = 1
So.ClassSig[0].classnum = 2
So.ClassSig[0].title = String("1st class")
So.ClassSig[0].title = ReturnString("1st class")
So.ClassSig[0].type = 1
So.ClassSig[0].SubSig[0].pi = 3.14
So.ClassSig[0].SubSig[0].means[0] = 42.42
Expand Down Expand Up @@ -163,12 +163,12 @@ def test_roundtrip_sigset_v1_two_bands(self):
self.assertEqual(So.ClassSig[0].nsubclasses, 1)

# Fill sigset struct with data
So.title = String("Signature title")
So.title = ReturnString("Signature title")
So.bandrefs[0] = ctypes.create_string_buffer(b"The_Doors")
So.bandrefs[1] = ctypes.create_string_buffer(b"The_Who")
So.ClassSig[0].used = 1
So.ClassSig[0].classnum = 2
So.ClassSig[0].title = String("1st class")
So.ClassSig[0].title = ReturnString("1st class")
So.ClassSig[0].type = 1
So.ClassSig[0].SubSig[0].pi = 3.14
So.ClassSig[0].SubSig[0].means[0] = 42.42
Expand Down Expand Up @@ -254,11 +254,11 @@ def test_symmetric_complete_difference(self):
self.assertEqual(S.nclasses, 1)
I_NewSubSig(ctypes.byref(S), ctypes.byref(S.ClassSig[0]))
self.assertEqual(S.ClassSig[0].nsubclasses, 1)
S.title = String("Signature title")
S.title = ReturnString("Signature title")
S.bandrefs[0] = ctypes.create_string_buffer(b"The_Troggs")
S.ClassSig[0].used = 1
S.ClassSig[0].classnum = 2
S.ClassSig[0].title = String("1st class")
S.ClassSig[0].title = ReturnString("1st class")
S.ClassSig[0].type = 1
S.ClassSig[0].SubSig[0].pi = 3.14
S.ClassSig[0].SubSig[0].means[0] = 42.42
Expand Down Expand Up @@ -299,11 +299,11 @@ def test_asymmetric_complete_difference(self):
self.assertEqual(S.nclasses, 1)
I_NewSubSig(ctypes.byref(S), ctypes.byref(S.ClassSig[0]))
self.assertEqual(S.ClassSig[0].nsubclasses, 1)
S.title = String("Signature title")
S.title = ReturnString("Signature title")
S.bandrefs[0] = ctypes.create_string_buffer(b"The_Troggs")
S.ClassSig[0].used = 1
S.ClassSig[0].classnum = 2
S.ClassSig[0].title = String("1st class")
S.ClassSig[0].title = ReturnString("1st class")
S.ClassSig[0].type = 1
S.ClassSig[0].SubSig[0].pi = 3.14
S.ClassSig[0].SubSig[0].means[0] = 42.42
Expand Down Expand Up @@ -345,11 +345,11 @@ def test_missing_bandref(self):
self.assertEqual(S.nclasses, 1)
I_NewSubSig(ctypes.byref(S), ctypes.byref(S.ClassSig[0]))
self.assertEqual(S.ClassSig[0].nsubclasses, 1)
S.title = String("Signature title")
S.title = ReturnString("Signature title")
S.bandrefs[0] = ctypes.create_string_buffer(b"The_Who")
S.ClassSig[0].used = 1
S.ClassSig[0].classnum = 2
S.ClassSig[0].title = String("1st class")
S.ClassSig[0].title = ReturnString("1st class")
S.ClassSig[0].type = 1
S.ClassSig[0].SubSig[0].pi = 3.14
S.ClassSig[0].SubSig[0].means[0] = 42.42
Expand Down Expand Up @@ -394,11 +394,11 @@ def test_single_complete_match(self):
self.assertEqual(S.nclasses, 1)
I_NewSubSig(ctypes.byref(S), ctypes.byref(S.ClassSig[0]))
self.assertEqual(S.ClassSig[0].nsubclasses, 1)
S.title = String("Signature title")
S.title = ReturnString("Signature title")
S.bandrefs[0] = ctypes.create_string_buffer(b"The_Doors")
S.ClassSig[0].used = 1
S.ClassSig[0].classnum = 2
S.ClassSig[0].title = String("1st class")
S.ClassSig[0].title = ReturnString("1st class")
S.ClassSig[0].type = 1
S.ClassSig[0].SubSig[0].pi = 3.14
S.ClassSig[0].SubSig[0].means[0] = 42.42
Expand Down Expand Up @@ -439,12 +439,12 @@ def test_double_complete_match_reorder(self):
self.assertEqual(S.nclasses, 1)
I_NewSubSig(ctypes.byref(S), ctypes.byref(S.ClassSig[0]))
self.assertEqual(S.ClassSig[0].nsubclasses, 1)
S.title = String("Signature title")
S.title = ReturnString("Signature title")
S.bandrefs[0] = ctypes.create_string_buffer(b"The_Who")
S.bandrefs[1] = ctypes.create_string_buffer(b"The_Doors")
S.ClassSig[0].used = 1
S.ClassSig[0].classnum = 2
S.ClassSig[0].title = String("1st class")
S.ClassSig[0].title = ReturnString("1st class")
S.ClassSig[0].type = 1
S.ClassSig[0].SubSig[0].pi = 3.14
S.ClassSig[0].SubSig[0].means[0] = 42.42
Expand Down Expand Up @@ -498,12 +498,12 @@ def test_double_complete_match_same_order(self):
self.assertEqual(S.nclasses, 1)
I_NewSubSig(ctypes.byref(S), ctypes.byref(S.ClassSig[0]))
self.assertEqual(S.ClassSig[0].nsubclasses, 1)
S.title = String("Signature title")
S.title = ReturnString("Signature title")
S.bandrefs[0] = ctypes.create_string_buffer(b"The_Who")
S.bandrefs[1] = ctypes.create_string_buffer(b"The_Doors")
S.ClassSig[0].used = 1
S.ClassSig[0].classnum = 2
S.ClassSig[0].title = String("1st class")
S.ClassSig[0].title = ReturnString("1st class")
S.ClassSig[0].type = 1
S.ClassSig[0].SubSig[0].pi = 3.14
S.ClassSig[0].SubSig[0].means[0] = 42.42
Expand Down
21 changes: 11 additions & 10 deletions python/grass/ctypes/Makefile
Expand Up @@ -61,8 +61,7 @@ ifneq ($(findstring darwin,$(ARCH)),)
MAC_FLAGS = "-D_Nullable="
endif

SED = sed
CTYPESGEN = ./ctypesgen.py
CTYPESGEN = ./run.py
CTYPESFLAGS = --cpp "$(CC) -E $(CPPFLAGS) $(LFS_CFLAGS) $(MAC_FLAGS) $(EXTRA_CFLAGS) $(NLS_CFLAGS) $(DEFS) $(EXTRA_INC) $(INC) -D__GLIBC_HAVE_LONG_LONG"
EXTRA_CLEAN_FILES := $(wildcard ctypesgencore/*.pyc) $(wildcard ctypesgencore/*/*.pyc)

Expand All @@ -76,12 +75,14 @@ PYDIR = $(ETC)/python
GDIR = $(PYDIR)/grass
DSTDIR = $(GDIR)/lib

PYFILES := $(patsubst %,$(DSTDIR)/%.py,$(MODULES) __init__ ctypes_preamble ctypes_loader)
PYCFILES := $(patsubst %,$(DSTDIR)/%.pyc,$(MODULES) __init__ ctypes_preamble ctypes_loader)
PYFILES := $(patsubst %,$(DSTDIR)/%.py,$(MODULES))
PYCFILES := $(patsubst %,$(DSTDIR)/%.pyc,$(MODULES))
LPYFILES := $(patsubst %,$(OBJDIR)/%.py,$(MODULES))

COPY_FILES = $(DSTDIR)/ctypes_loader.py $(DSTDIR)/ctypes_preamble.py

ifeq ($(strip $(GRASS_LIBRARY_TYPE)),shlib)
default:
default: $(COPY_FILES)
$(MAKE) $(DSTDIR)
$(MAKE) $(LPYFILES) $(PYFILES) $(PYCFILES)
else
Expand All @@ -90,13 +91,13 @@ default:
exit 1
endif

$(DSTDIR)/__init__.py: __init__.py | $(DSTDIR)
$(INSTALL_DATA) $< $@
$(COPY_FILES): | $(DSTDIR)
$(DSTDIR)/ctypes_loader.py: ctypesgen/libraryloader.py
cp -f $< $@
$(DSTDIR)/ctypes_preamble.py: ctypesgen/printer_python/preamble/3_2.py
cp -f $< $@

$(DSTDIR)/%.py: $(OBJDIR)/%.py | $(DSTDIR)
$(SED) -f fix.sed $< > $@

$(DSTDIR)/ctypes_%.py: %.py | $(DSTDIR)
$(INSTALL_DATA) $< $@

define module_rule
Expand Down

0 comments on commit ca2d28a

Please sign in to comment.