#1 Make drgeo compatible with guile-2.0
Opened 3 years ago by tkorbar. Modified 3 years ago
rpms/ tkorbar/drgeo guile20  into  rawhide

@@ -0,0 +1,197 @@ 

+ commit 69f29c68f737399c1b36018ac9783126eafeb92a

+ Author: Tomas Korbar <tkorbar@redhat.com>

+ Date:   Tue Jun 23 12:21:21 2020 +0200

+ 

+     Make drgeo compatible with guile 2.0

+ 

+ diff --git a/drgenius_config.cc b/drgenius_config.cc

+ index bf4943a..6aecdfe 100644

+ --- a/drgenius_config.cc

+ +++ b/drgenius_config.cc

+ @@ -83,7 +83,7 @@ drgeoConfigGet (gchar *attr)

+  #if SCM_MAJOR_VERSION < 2

+    value = gh_scm2newstr (ret, NULL);

+  #else

+ -  value = (gchar *) gh_scm2newstr ((const char *) ret, NULL);

+ +  value = (gchar *) gh_scm2newstr (ret, NULL);

+  #endif

+    return value;

+  }

+ diff --git a/drgenius_main.cc b/drgenius_main.cc

+ index dfedd54..8a36f7d 100644

+ --- a/drgenius_main.cc

+ +++ b/drgenius_main.cc

+ @@ -84,62 +84,62 @@ main_prog (int argc, char *argv[])

+    loadUserPreferences ();

+  

+    /* declare drgeo API in guile */

+ -  gh_new_procedure ("move", (SCM (*) ()) drgeo_scm_move, 2, 0, 0);

+ -  gh_new_procedure ("getAbscissa", (SCM (*) ()) drgeo_scm_getAbscissa, 1, 0, 0);

+ -  gh_new_procedure ("setAbscissa", (SCM (*) ()) drgeo_scm_setAbscissa, 2, 0, 0);

+ -  gh_new_procedure ("getCoordinates", (SCM (*) ()) drgeo_scm_getCoordinates, 1, 0, 0);

+ -  gh_new_procedure ("setCoordinates", (SCM (*) ()) drgeo_scm_setCoordinates, 2, 0, 0);

+ -  gh_new_procedure ("getUnit", (SCM (*) ()) drgeo_scm_getUnit, 1, 0, 0);

+ -  gh_new_procedure ("getNormal", (SCM (*) ()) drgeo_scm_getNormal, 1, 0, 0);

+ -  gh_new_procedure ("getSlope", (SCM (*) ()) drgeo_scm_getSlope, 1, 0, 0);

+ -  gh_new_procedure ("getNorm", (SCM (*) ()) drgeo_scm_getNorm, 1, 0, 0);

+ -  gh_new_procedure ("getLength", (SCM (*) ()) drgeo_scm_getLength, 1, 0, 0);

+ -  gh_new_procedure ("getCenter", (SCM (*) ()) drgeo_scm_getCenter, 1, 0, 0);

+ -  gh_new_procedure ("getRadius", (SCM (*) ()) drgeo_scm_getRadius, 1, 0, 0);

+ -  gh_new_procedure ("getValue", (SCM (*) ()) drgeo_scm_getValue, 1, 0, 0);

+ -  gh_new_procedure ("setValue", (SCM (*) ()) drgeo_scm_setValue, 2, 0, 0);

+ -  gh_new_procedure ("getAngle", (SCM (*) ()) drgeo_scm_getAngle, 1, 0, 0);

+ +  gh_new_procedure ("move", (void*) drgeo_scm_move, 2, 0, 0);

+ +  gh_new_procedure ("getAbscissa", (void*) drgeo_scm_getAbscissa, 1, 0, 0);

+ +  gh_new_procedure ("setAbscissa", (void*) drgeo_scm_setAbscissa, 2, 0, 0);

+ +  gh_new_procedure ("getCoordinates", (void*) drgeo_scm_getCoordinates, 1, 0, 0);

+ +  gh_new_procedure ("setCoordinates", (void*) drgeo_scm_setCoordinates, 2, 0, 0);

+ +  gh_new_procedure ("getUnit", (void*) drgeo_scm_getUnit, 1, 0, 0);

+ +  gh_new_procedure ("getNormal", (void*) drgeo_scm_getNormal, 1, 0, 0);

+ +  gh_new_procedure ("getSlope", (void*) drgeo_scm_getSlope, 1, 0, 0);

+ +  gh_new_procedure ("getNorm", (void*) drgeo_scm_getNorm, 1, 0, 0);

+ +  gh_new_procedure ("getLength", (void*) drgeo_scm_getLength, 1, 0, 0);

+ +  gh_new_procedure ("getCenter", (void*) drgeo_scm_getCenter, 1, 0, 0);

+ +  gh_new_procedure ("getRadius", (void*) drgeo_scm_getRadius, 1, 0, 0);

+ +  gh_new_procedure ("getValue", (void*) drgeo_scm_getValue, 1, 0, 0);

+ +  gh_new_procedure ("setValue", (void*) drgeo_scm_setValue, 2, 0, 0);

+ +  gh_new_procedure ("getAngle", (void*) drgeo_scm_getAngle, 1, 0, 0);

+  

+    /* declare the drgeo interface in Guile */

+ -  gh_new_procedure ("drgeoMake-figure", (SCM (*) ()) drgeo_scm_make_figure, 1, 0, 0);

+ -  gh_new_procedure ("drgeoMake-freePoint", (SCM (*) ()) drgeo_scm_make_freePoint, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-pointOnCurve", (SCM (*) ()) drgeo_scm_make_pointOnCurve, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-middle2Points", (SCM (*) ()) drgeo_scm_make_middle2Points, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-middleSegment", (SCM (*) ()) drgeo_scm_make_middleSegment, 3, 0, 0);

+ -  gh_new_procedure ("drgeoMake-intersection", (SCM (*) ()) drgeo_scm_make_intersection, 5, 0, 0);

+ -  gh_new_procedure ("drgeoMake-segmentExtremity", (SCM (*) ()) drgeo_scm_make_segmentExtremity, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-line", (SCM (*) ()) drgeo_scm_make_line, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-parallel", (SCM (*) ()) drgeo_scm_make_parallel, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-orthogonal", (SCM (*) ()) drgeo_scm_make_orthogonal, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-ray", (SCM (*) ()) drgeo_scm_make_ray, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-vector", (SCM (*) ()) drgeo_scm_make_vector, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-circle2Points", (SCM (*) ()) drgeo_scm_make_circle2Points, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-circleRadius", (SCM (*) ()) drgeo_scm_make_circleRadius, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-circleSegment", (SCM (*) ()) drgeo_scm_make_circleSegment, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-arc", (SCM (*) ()) drgeo_scm_make_arc, 5, 0, 0);

+ -  gh_new_procedure ("drgeoMake-locus", (SCM (*) ()) drgeo_scm_make_locus, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-polygon", (SCM (*) ()) drgeo_scm_make_polygon, 3, 0, 0);

+ -  gh_new_procedure ("drgeoMake-freeValue", (SCM (*) ()) drgeo_scm_make_freeValue, 5, 0, 0);

+ -  gh_new_procedure ("drgeoMake-segmentLength", (SCM (*) ()) drgeo_scm_make_segmentLength, 5, 0, 0);

+ -  gh_new_procedure ("drgeoMake-vectorNorm", (SCM (*) ()) drgeo_scm_make_vectorNorm, 5, 0, 0);

+ -  gh_new_procedure ("drgeoMake-distancePointCircle", (SCM (*) ()) drgeo_scm_make_distancePointCircle, 6, 0, 0);

+ -  gh_new_procedure ("drgeoMake-distancePointLine", (SCM (*) ()) drgeo_scm_make_distancePointLine, 6, 0, 0);

+ -  gh_new_procedure ("drgeoMake-distancePointPoint", (SCM (*) ()) drgeo_scm_make_distancePointPoint, 6, 0, 0);

+ -  gh_new_procedure ("drgeoMake-circleLength", (SCM (*) ()) drgeo_scm_make_circleLength, 5, 0, 0);

+ -  gh_new_procedure ("drgeoMake-lineSlope", (SCM (*) ()) drgeo_scm_make_lineSlope, 5, 0, 0);

+ -  gh_new_procedure ("drgeoMake-arcLength", (SCM (*) ()) drgeo_scm_make_arcLength, 5, 0, 0);

+ -  gh_new_procedure ("drgeoMake-geometricAngle", (SCM (*) ()) drgeo_scm_make_geometricAngle, 5, 0, 0);

+ -  gh_new_procedure ("drgeoMake-orientedAngle", (SCM (*) ()) drgeo_scm_make_orientedAngle, 6, 0, 0);

+ -

+ -  gh_new_procedure ("drgeoMake-rotation", (SCM (*) ()) drgeo_scm_make_rotation, 5, 0, 0);

+ -  gh_new_procedure ("drgeoMake-scale", (SCM (*) ()) drgeo_scm_make_scale, 5, 0, 0);

+ -  gh_new_procedure ("drgeoMake-symmetry", (SCM (*) ()) drgeo_scm_make_symmetry, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-reflexion", (SCM (*) ()) drgeo_scm_make_reflexion, 4, 0, 0);

+ -  gh_new_procedure ("drgeoMake-translation", (SCM (*) ()) drgeo_scm_make_translation, 4, 0, 0);

+ -  gh_new_procedure ("change-color", (SCM (*) ()) drgeo_scm_change_color, 3, 0, 0);

+ -  gh_new_procedure ("change-thickness", (SCM (*) ()) drgeo_scm_change_thickness, 3, 0, 0);

+ -  gh_new_procedure ("change-pointShape", (SCM (*) ()) drgeo_scm_change_pointShape, 3, 0, 0);

+ -  gh_new_procedure ("change-masked", (SCM (*) ()) drgeo_scm_change_masked, 2, 0, 0);

+ +  gh_new_procedure ("drgeoMake-figure", (void*) drgeo_scm_make_figure, 1, 0, 0);

+ +  gh_new_procedure ("drgeoMake-freePoint", (void*) drgeo_scm_make_freePoint, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-pointOnCurve", (void*) drgeo_scm_make_pointOnCurve, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-middle2Points", (void*) drgeo_scm_make_middle2Points, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-middleSegment", (void*) drgeo_scm_make_middleSegment, 3, 0, 0);

+ +  gh_new_procedure ("drgeoMake-intersection", (void*) drgeo_scm_make_intersection, 5, 0, 0);

+ +  gh_new_procedure ("drgeoMake-segmentExtremity", (void*) drgeo_scm_make_segmentExtremity, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-line", (void*) drgeo_scm_make_line, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-parallel", (void*) drgeo_scm_make_parallel, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-orthogonal", (void*) drgeo_scm_make_orthogonal, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-ray", (void*) drgeo_scm_make_ray, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-vector", (void*) drgeo_scm_make_vector, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-circle2Points", (void*) drgeo_scm_make_circle2Points, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-circleRadius", (void*) drgeo_scm_make_circleRadius, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-circleSegment", (void*) drgeo_scm_make_circleSegment, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-arc", (void*) drgeo_scm_make_arc, 5, 0, 0);

+ +  gh_new_procedure ("drgeoMake-locus", (void*) drgeo_scm_make_locus, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-polygon", (void*) drgeo_scm_make_polygon, 3, 0, 0);

+ +  gh_new_procedure ("drgeoMake-freeValue", (void*) drgeo_scm_make_freeValue, 5, 0, 0);

+ +  gh_new_procedure ("drgeoMake-segmentLength", (void*) drgeo_scm_make_segmentLength, 5, 0, 0);

+ +  gh_new_procedure ("drgeoMake-vectorNorm", (void*) drgeo_scm_make_vectorNorm, 5, 0, 0);

+ +  gh_new_procedure ("drgeoMake-distancePointCircle", (void*) drgeo_scm_make_distancePointCircle, 6, 0, 0);

+ +  gh_new_procedure ("drgeoMake-distancePointLine", (void*) drgeo_scm_make_distancePointLine, 6, 0, 0);

+ +  gh_new_procedure ("drgeoMake-distancePointPoint", (void*) drgeo_scm_make_distancePointPoint, 6, 0, 0);

+ +  gh_new_procedure ("drgeoMake-circleLength", (void*) drgeo_scm_make_circleLength, 5, 0, 0);

+ +  gh_new_procedure ("drgeoMake-lineSlope", (void*) drgeo_scm_make_lineSlope, 5, 0, 0);

+ +  gh_new_procedure ("drgeoMake-arcLength", (void*) drgeo_scm_make_arcLength, 5, 0, 0);

+ +  gh_new_procedure ("drgeoMake-geometricAngle", (void*) drgeo_scm_make_geometricAngle, 5, 0, 0);

+ +  gh_new_procedure ("drgeoMake-orientedAngle", (void*) drgeo_scm_make_orientedAngle, 6, 0, 0);

+ +

+ +  gh_new_procedure ("drgeoMake-rotation", (void*) drgeo_scm_make_rotation, 5, 0, 0);

+ +  gh_new_procedure ("drgeoMake-scale", (void*) drgeo_scm_make_scale, 5, 0, 0);

+ +  gh_new_procedure ("drgeoMake-symmetry", (void*) drgeo_scm_make_symmetry, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-reflexion", (void*) drgeo_scm_make_reflexion, 4, 0, 0);

+ +  gh_new_procedure ("drgeoMake-translation", (void*) drgeo_scm_make_translation, 4, 0, 0);

+ +  gh_new_procedure ("change-color", (void*) drgeo_scm_change_color, 3, 0, 0);

+ +  gh_new_procedure ("change-thickness", (void*) drgeo_scm_change_thickness, 3, 0, 0);

+ +  gh_new_procedure ("change-pointShape", (void*) drgeo_scm_change_pointShape, 3, 0, 0);

+ +  gh_new_procedure ("change-masked", (void*) drgeo_scm_change_masked, 2, 0, 0);

+  

+    /* not in texmacs mode by default */

+    texmacsMode = false;

+ diff --git a/geo/drgeo_scm_interface.cc b/geo/drgeo_scm_interface.cc

+ index dade441..c2efa5c 100644

+ --- a/geo/drgeo_scm_interface.cc

+ +++ b/geo/drgeo_scm_interface.cc

+ @@ -792,7 +792,7 @@ ScmInterface::setObjectName (SCM name, geometricObject *item)

+  #if SCM_MAJOR_VERSION < 2

+    str = gh_scm2newstr (name, NULL);

+  #else

+ -  str = (gchar *) gh_scm2newstr ((const char *) name, NULL);

+ +  str = (gchar *) gh_scm2newstr (name, NULL);

+  #endif

+    item->setName (str); 

+    g_free (str);

+ @@ -814,7 +814,7 @@ drgeo_scm_make_figure (SCM name)

+  #if SCM_MAJOR_VERSION < 2

+    str = gh_scm2newstr (name, NULL);

+  #else

+ -  str = (gchar *) gh_scm2newstr ((const char *) name, NULL);

+ +  str = (gchar *) gh_scm2newstr (name, NULL);

+  #endif

+    mdi->renameView (((drgeoGtkDrawable *) figure->getDrawable())->getGeoView (), str);

+    g_free (str);

+ diff --git a/geo/drgeo_script.cc b/geo/drgeo_script.cc

+ index 8a783a7..b9a8bc6 100644

+ --- a/geo/drgeo_script.cc

+ +++ b/geo/drgeo_script.cc

+ @@ -156,7 +156,7 @@ script::update (drgeoDrawable & area)

+  #if SCM_MAJOR_VERSION < 2

+      setString (gh_scm2newstr (ret, NULL));

+  #else

+ -    setString ((char *) gh_scm2newstr ((const char *) ret, NULL));

+ +    setString ((char *) gh_scm2newstr (ret, NULL));

+  #endif

+    else

+      setString (g_strdup (_("Unprintable result")));

+ diff --git a/guile_fixups.h b/guile_fixups.h

+ index 8aabcb9..7ec5ee8 100644

+ --- a/guile_fixups.h

+ +++ b/guile_fixups.h

+ @@ -12,7 +12,7 @@

+  #define gh_scm2int scm_to_int

+  #define gh_scm2double scm_to_double

+  #define gh_string_p scm_is_string

+ -#define gh_scm2newstr(a, b) scm_str2string((a))

+ +#define gh_scm2newstr(a, b) scm_to_locale_string((a))

+  #define gh_scm2ulong scm_to_ulong

+  #define gh_car scm_car

+  #define gh_cdr scm_cdr

+ @@ -21,7 +21,7 @@

+  #define gh_ulong2scm scm_from_ulong

+  #define gh_double2scm scm_from_double

+  #define gh_list scm_list_n

+ -#define gh_new_procedure(p, f, nr, no, v) scm_c_define_gsubr((p), (size_t)(f), (nr), (no), (v))

+ +#define gh_new_procedure(p, f, nr, no, v) scm_c_define_gsubr((p), (nr), (no), (v), (f))

+  #define gh_load(fname) gh_eval_file(fname)

+  #define gh_eval_str scm_c_eval_string

+  #define gh_catch scm_internal_catch

file modified
+14 -14
@@ -1,7 +1,7 @@ 

  Summary: Interactive educational geometry software

  Name: drgeo

  Version: 1.1.0

- Release: 41%{?dist}

+ Release: 42%{?dist}

  License: GPLv2+

  URL: http://www.ofset.org/drgeo

  
@@ -11,19 +11,15 @@ 

  Patch2: drgeo-1.1.0-anonymous-type.patch

  Patch4: drgeo-1.1.0-format-security.patch

  

- #The following are necessary if using Guile 1.9 or later

- #Patch3: drgeo-1.1.0-guile-fixups.patch

- #Patch5: drgeo-1.1.0-guile2-runtime.patch

+ Patch3: drgeo-1.1.0-guile-fixups.patch

+ Patch5: drgeo-1.1.0-guile2-runtime.patch

+ Patch6: drgeo-1.1.0-guile20-runtime-fix.patch

  

  BuildRequires:  gcc-c++

  BuildRequires: flex, bison, gmp-devel >= 2.0.2, desktop-file-utils

  BuildRequires: libglade2-devel, intltool, gettext

  

- # Despite the two patches above, drgeo still doesn't work with

- # Guile 1.9 or later, giving a runtime error.  See

- #   https://bugzilla.redhat.com/show_bug.cgi?id=1037042#c4

- #BuildRequires: guile-devel

- BuildRequires: compat-guile18-devel

+ BuildRequires: guile-devel

  

  %description

  Dr. Geo is an interactive geometry GUI application. It allows one to create
@@ -40,16 +36,17 @@ 

  

  # patches for Guile 2 compatibility:

  # compile time:

- #%patch3 -p1 -b .guile-fixups

+ %patch3 -p1 -b .guile-fixups

  # run time:

  #   http://bhattigurjot.wordpress.com/2014/05/23/23-may-2014/

  #   http://git.savannah.gnu.org/cgit/dr-geo.git/commit/?h=upgrade&id=4c4a75a77bf91c6840cfa9101f3eaabd8fee7dbd

- #%patch5 -p1 -b .guile2

+ %patch5 -p1 -b .guile2

+ %patch6 -p1 -b .guile20-runtime

  

  %build

- export GUILE=/usr/bin/guile1.8

- export GUILE_CONFIG=/usr/bin/guile1.8-config

- export GUILE_TOOLS=/usr/bin/guile1.8-tools

+ export GUILE=/usr/bin/guile

+ export GUILE_CONFIG=/usr/bin/guile-config

+ export GUILE_TOOLS=/usr/bin/guile-tools

  %configure

  make %{?_smp_mflags}

  
@@ -77,6 +74,9 @@ 

  %{_datadir}/applications/drgeo.desktop

  

  %changelog

+ * Wed Jun 24 2020 Tomas Korbar <tkorbar@redhat.com> - 1.1.0-42

+ - Make drgeo compatible with guile-2.0

+ 

  * Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.0-41

  - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild

  

Hi,
I'm maintainer of guile in Fedora and i'm currently trying to update
packages which depend on its old versions. Please consider merging this pull request
so i can remove compat-guile18 package.