Re: build failure with GCC 9.1.0

"Dechaux Eric CEN (BCQ STIG)" <[email protected]>
Newsgroups gmane.comp.gis.proj-4.devel
Message-ID <53298f2f-5b33-4f9e-4355-a7509ef2914b@gendarmerie.interieur.gouv.fr>
Le 24/09/2019 à 15:37, Even Rouault a écrit :
> Hi
>
>> Could it comes from my buildbox (Solaris 11.4.12) ?
> Definitely a Solaris specific thing.
> Should hopefully be fixed by https://github.com/OSGeo/PROJ/pull/1637
> Can you confirm this patch fixes the issue ?

I am afraid it is not enough. Please find attached 4 additional patches :

     - proj-6.2.0-hanato.gpatch and proj-6.2.0-mbtfpp.gpatch

In files src/projections/hatano.cpp and src/projections/mbtfpp.cpp, 
change the CS define to CSz in order to avoid overriding the CS system 
definition

     - proj-6.2.0-isea.gpatch :

In file src/projections/isea.cpp, change the quad variable name as it is 
overriding another system definition

$ grep quad  /usr/include/sys/types.h
typedef struct _quad { int val[2]; } quad_t;    /* used by UFS */
typedef quad_t          quad;                   /* used by UFS */

     - proj-6.2.0-io.gpatch

In file src/iso19111/io.cpp, change another class name that override the 
CS system define

$ gegrep '[[:space:]]CS[[:space:]]' /usr/include/sys/regset.h
#define CS              15



With those changes, 6.2.0 build and check properly on Solaris 11.4.12 
and GCC 9.1.

Note : I quite understood what I changed in the first 3 patches. Not 
sure in the last one. Can you please review it ?


Regards.

--
Eric

_______________________________________________
PROJ mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/proj
proj-6.2.0-mbtfpp.gpatch (text/plain, 1 KB)
--- proj-6.2.0.orig/src/projections/mbtfpp.cpp	2019-05-06 07:12:09.000000000 +0200
+++ proj-6.2.0/src/projections/mbtfpp.cpp	2019-09-24 17:42:27.416670200 +0200
@@ -7,7 +7,7 @@
 
 PROJ_HEAD(mbtfpp, "McBride-Thomas Flat-Polar Parabolic") "\n\tCyl, Sph";
 
-#define CS  .95257934441568037152
+#define CSy .95257934441568037152
 #define FXC .92582009977255146156
 #define FYC 3.40168025708304504493
 #define C23 .66666666666666666666
@@ -19,7 +19,7 @@
     PJ_XY xy = {0.0,0.0};
     (void) P;
 
-    lp.phi = asin(CS * sin(lp.phi));
+    lp.phi = asin(CSy * sin(lp.phi));
     xy.x = FXC * lp.lam * (2. * cos(C23 * lp.phi) - 1.);
     xy.y = FYC * sin(C13 * lp.phi);
     return xy;
@@ -41,7 +41,7 @@
         lp.phi = asin(lp.phi);
 
     lp.lam = xy.x / ( FXC * (2. * cos(C23 * (lp.phi *= 3.)) - 1.) );
-    if (fabs(lp.phi = sin(lp.phi) / CS) >= 1.) {
+    if (fabs(lp.phi = sin(lp.phi) / CSy) >= 1.) {
         if (fabs(lp.phi) > ONEEPS) {
             proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
             return lp;
proj-6.2.0-isea.gpatch (text/plain, 7.3 KB)
--- proj-6.2.0.orig/src/projections/isea.cpp	2019-05-06 07:12:09.000000000 +0200
+++ proj-6.2.0/src/projections/isea.cpp	2019-09-24 17:48:13.835557603 +0200
@@ -668,10 +668,10 @@
 
 /* convert projected triangle coords to quad xy coords, return quad number */
 static int isea_ptdd(int tri, struct isea_pt *pt) {
-    int             downtri, quad;
+    int             downtri, quadz;
 
     downtri = (((tri - 1) / 5) % 2 == 1);
-    quad = ((tri - 1) % 5) + ((tri - 1) / 10) * 5 + 1;
+    quadz = ((tri - 1) % 5) + ((tri - 1) / 10) * 5 + 1;
 
     isea_rotate(pt, downtri ? 240.0 : 60.0);
     if (downtri) {
@@ -679,10 +679,10 @@
         /* pt->y += cos(30.0 * M_PI / 180.0); */
         pt->y += .86602540378443864672;
     }
-    return quad;
+    return quadz;
 }
 
-static int isea_dddi_ap3odd(struct isea_dgg *g, int quad, struct isea_pt *pt,
+static int isea_dddi_ap3odd(struct isea_dgg *g, int quadz, struct isea_pt *pt,
                             struct isea_pt *di)
 {
     struct isea_pt  v;
@@ -715,40 +715,40 @@
      * you want to test for max coords for the next quad in the same
      * "row" first to get the case where both are max
      */
-    if (quad <= 5) {
+    if (quadz <= 5) {
         if (d == 0 && i == maxcoord) {
             /* north pole */
-            quad = 0;
+            quadz = 0;
             d = 0;
             i = 0;
         } else if (i == maxcoord) {
             /* upper right in next quad */
-            quad += 1;
-            if (quad == 6)
-                quad = 1;
+            quadz += 1;
+            if (quadz == 6)
+                quadz = 1;
             i = maxcoord - d;
             d = 0;
         } else if (d == maxcoord) {
             /* lower right in quad to lower right */
-            quad += 5;
+            quadz += 5;
             d = 0;
         }
-    } else if (quad >= 6) {
+    } else if (quadz >= 6) {
         if (i == 0 && d == maxcoord) {
             /* south pole */
-            quad = 11;
+            quadz = 11;
             d = 0;
             i = 0;
         } else if (d == maxcoord) {
             /* lower right in next quad */
-            quad += 1;
-            if (quad == 11)
-                quad = 6;
+            quadz += 1;
+            if (quadz == 11)
+                quadz = 6;
             d = maxcoord - i;
             i = 0;
         } else if (i == maxcoord) {
             /* upper right in quad to upper right */
-            quad = (quad - 4) % 5;
+            quadz = (quadz - 4) % 5;
             i = 0;
         }
     }
@@ -756,11 +756,11 @@
     di->x = d;
     di->y = i;
 
-    g->quad = quad;
-    return quad;
+    g->quad = quadz;
+    return quadz;
 }
 
-static int isea_dddi(struct isea_dgg *g, int quad, struct isea_pt *pt,
+static int isea_dddi(struct isea_dgg *g, int quadz, struct isea_pt *pt,
                      struct isea_pt *di) {
     struct isea_pt  v;
     double          hexwidth;
@@ -768,7 +768,7 @@
     struct hex      h;
 
     if (g->aperture == 3 && g->resolution % 2 != 0) {
-        return isea_dddi_ap3odd(g, quad, pt, di);
+        return isea_dddi_ap3odd(g, quadz, pt, di);
     }
     /* todo might want to do this as an iterated loop */
     if (g->aperture >0) {
@@ -793,41 +793,41 @@
     hex_iso(&h);
 
     /* we may actually be on another quad */
-    if (quad <= 5) {
+    if (quadz <= 5) {
         if (h.x == 0 && h.z == -sidelength) {
             /* north pole */
-            quad = 0;
+            quadz = 0;
             h.z = 0;
             h.y = 0;
             h.x = 0;
         } else if (h.z == -sidelength) {
-            quad = quad + 1;
-            if (quad == 6)
-                quad = 1;
+            quadz = quadz + 1;
+            if (quadz == 6)
+                quadz = 1;
             h.y = sidelength - h.x;
             h.z = h.x - sidelength;
             h.x = 0;
         } else if (h.x == sidelength) {
-            quad += 5;
+            quadz += 5;
             h.y = -h.z;
             h.x = 0;
         }
-    } else if (quad >= 6) {
+    } else if (quadz >= 6) {
         if (h.z == 0 && h.x == sidelength) {
             /* south pole */
-            quad = 11;
+            quadz = 11;
             h.x = 0;
             h.y = 0;
             h.z = 0;
         } else if (h.x == sidelength) {
-            quad = quad + 1;
-            if (quad == 11)
-                quad = 6;
+            quadz = quadz + 1;
+            if (quadz == 11)
+                quadz = 6;
             h.x = h.y + sidelength;
             h.y = 0;
             h.z = -h.x;
         } else if (h.y == -sidelength) {
-            quad -= 4;
+            quadz -= 4;
             h.y = 0;
             h.z = -h.x;
         }
@@ -835,35 +835,35 @@
     di->x = h.x;
     di->y = -h.z;
 
-    g->quad = quad;
-    return quad;
+    g->quad = quadz;
+    return quadz;
 }
 
 static int isea_ptdi(struct isea_dgg *g, int tri, struct isea_pt *pt,
                      struct isea_pt *di) {
     struct isea_pt  v;
-    int             quad;
+    int             quadz;
 
     v = *pt;
-    quad = isea_ptdd(tri, &v);
-    quad = isea_dddi(g, quad, &v, di);
-    return quad;
+    quadz = isea_ptdd(tri, &v);
+    quadz = isea_dddi(g, quadz, &v, di);
+    return quadz;
 }
 
 /* q2di to seqnum */
 
-static long isea_disn(struct isea_dgg *g, int quad, struct isea_pt *di) {
+static long isea_disn(struct isea_dgg *g, int quadz, struct isea_pt *di) {
     long             sidelength;
     long             sn, height;
     long             hexes;
 
-    if (quad == 0) {
+    if (quadz == 0) {
         g->serial = 1;
         return g->serial;
     }
     /* hexes in a quad */
     hexes = lround(pow(static_cast<double>(g->aperture), static_cast<double>(g->resolution)));
-    if (quad == 11) {
+    if (quadz == 11) {
         g->serial = 1 + 10 * hexes + 1;
         return g->serial;
     }
@@ -871,11 +871,11 @@
         height = lround(floor((pow(g->aperture, (g->resolution - 1) / 2.0))));
         sn = ((long)di->x) * height;
         sn += ((long)di->y) / height;
-        sn += (quad - 1) * hexes;
+        sn += (quadz - 1) * hexes;
         sn += 2;
     } else {
         sidelength = lround((pow(g->aperture, g->resolution / 2.0)));
-        sn = lround(floor(((quad - 1) * hexes + sidelength * di->x + di->y + 2)));
+        sn = lround(floor(((quadz - 1) * hexes + sidelength * di->x + di->y + 2)));
     }
 
     g->serial = sn;
@@ -894,15 +894,15 @@
     long sidelength;
     long d, i, x, y;
 #endif
-    int quad;
+    int quadz;
 
-    quad = isea_ptdi(g, tri, pt, &v);
+    quadz = isea_ptdi(g, tri, pt, &v);
 
     if( v.x < (INT_MIN >> 4) || v.x > (INT_MAX >> 4) )
     {
         throw "Invalid shift";
     }
-    hex->x = ((int)v.x << 4) + quad;
+    hex->x = ((int)v.x << 4) + quadz;
     hex->y = v.y;
 
     return 1;
@@ -914,16 +914,16 @@
     if (g->aperture == 3 && g->resolution % 2 != 0) {
         long offset = lround((pow(3.0, g->resolution - 1) + 0.5));
 
-        d += offset * ((g->quad-1) % 5);
-        i += offset * ((g->quad-1) % 5);
+        d += offset * ((g->quadz-1) % 5);
+        i += offset * ((g->quadz-1) % 5);
 
-        if (quad == 0) {
+        if (quadz == 0) {
             d = 0;
             i = offset;
-        } else if (quad == 11) {
+        } else if (quadz == 11) {
             d = 2 * offset;
             i = 0;
-        } else if (quad > 5) {
+        } else if (quadz > 5) {
             d += offset;
         }
proj-6.2.0-io.gpatch (text/plain, 1.6 KB)
--- proj-6.2.0.orig/src/iso19111/io.cpp	2019-08-27 00:10:15.000000000 +0200
+++ proj-6.2.0/src/iso19111/io.cpp	2019-09-24 17:19:25.975914267 +0200
@@ -4444,12 +4444,12 @@
     }
 
     template <class TargetCRS, class DatumBuilderType,
-              class CS = CoordinateSystem>
+              class CSM = CoordinateSystem>
     util::nn<std::shared_ptr<TargetCRS>> buildCRS(const json &j,
                                                   DatumBuilderType f) {
         auto datum = (this->*f)(getObject(j, "datum"));
         auto cs = buildCS(getObject(j, "coordinate_system"));
-        auto csCast = util::nn_dynamic_pointer_cast<CS>(cs);
+        auto csCast = util::nn_dynamic_pointer_cast<CSM>(cs);
         if (!csCast) {
             throw ParsingException("coordinate_system not of expected type");
         }
@@ -4457,7 +4457,7 @@
                                  NN_NO_CHECK(csCast));
     }
 
-    template <class TargetCRS, class BaseCRS, class CS = CoordinateSystem>
+    template <class TargetCRS, class BaseCRS, class CSM = CoordinateSystem>
     util::nn<std::shared_ptr<TargetCRS>> buildDerivedCRS(const json &j) {
         auto baseCRSObj = create(getObject(j, "base_crs"));
         auto baseCRS = util::nn_dynamic_pointer_cast<BaseCRS>(baseCRSObj);
@@ -4465,7 +4465,7 @@
             throw ParsingException("base_crs not of expected type");
         }
         auto cs = buildCS(getObject(j, "coordinate_system"));
-        auto csCast = util::nn_dynamic_pointer_cast<CS>(cs);
+        auto csCast = util::nn_dynamic_pointer_cast<CSM>(cs);
         if (!csCast) {
             throw ParsingException("coordinate_system not of expected type");
         }
proj-6.2.0-hanato.gpatch (text/plain, 668 B)
--- proj-6.2.0.orig/src/projections/hatano.cpp	2019-05-06 07:12:09.000000000 +0200
+++ proj-6.2.0/src/projections/hatano.cpp	2019-09-24 17:41:51.900833050 +0200
@@ -11,7 +11,7 @@
 #define EPS 1e-7
 #define ONETOL 1.000001
 #define CN  2.67595
-#define CS  2.43763
+#define CSz 2.43763
 #define RCN 0.37369906014686373063
 #define RCS 0.41023453108141924738
 #define FYCN    1.75859
@@ -28,7 +28,7 @@
     int i;
     (void) P;
 
-    c = sin(lp.phi) * (lp.phi < 0. ? CS : CN);
+    c = sin(lp.phi) * (lp.phi < 0. ? CSz : CN);
     for (i = NITER; i; --i) {
         lp.phi -= th1 = (lp.phi + sin(lp.phi) - c) / (1. + cos(lp.phi));
         if (fabs(th1) < EPS) break;
avertissement.txt (text/plain, 1.1 KB)
Ce message électronique et tous les fichiers attachés qu'il contient sont confidentiels et destinés exclusivement à l'usage de la personne à laquelle ils sont adressés. Si vous avez reçu ce message par erreur, merci de le retourner à son émetteur. La publication, l'usage, la distribution, l'impression ou la copie non autorisée de ce message et des attachements qu'il contient sont strictement interdits.

En cas d'urgence, composez le 17 ou le 112.
Afin de contribuer au respect de l'environnement, merci de n'imprimer cet e-mail qu'en cas de necessite.

This e-mail and any files transmitted with it are confidential and intended solely for the use of the individual to whom it is addressed. If you have received this email in error please send it back to the person that sent it to you. Unauthorized publication, use, dissemination, forwarding, printing or copying of this email and its associated attachments is strictly prohibited.

In case of emergency, dial number 17 or 112.
To contribute to the environmental protection, please print this e-mail only if necessary.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.