Page 1 sur 1

SUNOS built (macro pb)

Publié : mer. janv. 31, 2018 10:34 am
par frederic han
Hello,
sage report a built error on SUNOS due to a macro conflict defined in this OS:

cf: https://trac.sagemath.org/ticket/24619

they suggest the following patch:

Code : Tout sélectionner

+Work around _ABS macro on SunOS
+
+See https://trac.sagemath.org/ticket/24619
+
+diff -ru a/src/rpn.h b/src/rpn.h
+--- a/src/rpn.h	2016-01-03 09:12:13.000000000 +0100
++++ b/src/rpn.h	2018-01-31 10:36:43.049921736 +0100
+@@ -24,6 +24,10 @@
+ #include <string>
+ #include <ctype.h>
+ 
++/* SunOS defines this as macro */
++#undef _ABS
++
++
+ #ifndef NO_NAMESPACE_GIAC
+ namespace giac {
+ #endif // ndef NO_NAMESPACE_GIAC

Re: SUNOS built (macro pb)

Publié : mer. janv. 31, 2018 6:36 pm
par parisse
Ok!

Re: SUNOS built (macro pb)

Publié : jeu. févr. 01, 2018 10:00 am
par frederic han
En fait ce patch ne suffit pas il y a ensuite d'autres problemes:
as tu une idee?

Code : Tout sélectionner

libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -DIN_GIAC -I. -I.. -I. -I.. -I/datapool/jeroen/sage/local/include -g -O2 -m64 -O2 -g -D_XPG6 -fno-strict-aliasing -DGIAC_GENERIC_CONSTANTS -MT gen.lo -MD -MP -MF .deps/gen.Tpo -c gen.cc  -fPIC -DPIC -o .libs/gen.o
gen.cc: In function 'giac::gen giac::chartab2gen(char*&, const giac::context*)':
gen.cc:11206:38: error: 'alloca' was not declared in this scope
       char * scopy=(char *)alloca(l+2);

Code : Tout sélectionner

help.cc: In function 'int giac::dir_select(const dirent*)':
help.cc:936:12: error: 'const struct dirent' has no member named 'd_type'
     if (d->d_type==DT_DIR || equalposcomp(subdir_strings,s)){
            ^
help.cc:936:20: error: 'DT_DIR' was not declared in this scope
     if (d->d_type==DT_DIR || equalposcomp(subdir_strings,s)){

Re: SUNOS built (macro pb)

Publié : jeu. févr. 01, 2018 10:14 am
par parisse
alloca devrait etre connu pourtant, c'est declare dans stdlib.h (donc inclus dans #include <cstdlib>), peut-etre faut-il mettre std::alloca? Ou bien #include <alloca.h>?
Pour help.cc, on peut tout simplement desactiver cette partie ligne 908 en ajoutant un defined correspondant a SunOS, de toutes facons ce n'est pas une plateforme tres importante!

Re: SUNOS built (macro pb)

Publié : dim. févr. 04, 2018 10:10 pm
par frederic han
Les problemes semblent résolus dans sage:

les 3 patches appliqués sont la:

https://git.sagemath.org/sage.git/diff? ... 15930f202c

Re: SUNOS built (macro pb)

Publié : lun. févr. 05, 2018 7:03 am
par parisse
Je ne peux pas back-porter ce genre de patches, d'abord il y a trop de risques d'en rater en les lisant avec un diff comme ca, il n'y aurait pas une UI ou on voit clairement les changements? Ensuite, il n'y a pas de commentaires sur les raisons des changements ni de recherche du changement minimal.
Par exemple, je vois qu'ils veulent modifier le prototype de

Code : Tout sélectionner

gen chartab2gen(char * & s,GIAC_CONTEXT);
en enlevant le &, or si j'ai mis un & c'est probablement que c'etait necessaire, au moins a un moment donne et pour une architecture donnee. Si ce n'est pas indispensable pour compiler pour sunos, pourquoi faire ce changement? Si c'est indispensable, alors ca devrait etre dans un ifdef specifique a sunos.
Pour l'introduction de DT_DIR, c'est la meme chose, qu'est-ce qui me garantit que ca va marcher sous windows et mac? Pourquoi ne pas avoir un ifdef specifique a sunos comme je le suggerais?
Le seul changement que je fais pour le moment (en plus de #undef ABS deja fait dans rpn.cc) c'est dans gen.cc pour alloca, changement que je reduis au minimum:

Code : Tout sélectionner

#if 1 // def FREERTOS
      ALLOCA(char, scopy, l+2); 
#else
      char * scopy=(char *)alloca(l+2);
#endif

Re: SUNOS built (macro pb)

Publié : lun. févr. 05, 2018 7:13 am
par parisse
Bon, en regardant de plus pres help.cc, pour DT_DIR je fais les changements suivants qui me semblent beaucoup moins impactant et devraient passer sur sunos:

Code : Tout sélectionner

909c909
diff help.cc help.cc~
< #if defined WIN32 || !defined DT_DIR
---
> #ifdef WIN32
991c991
< #if defined WIN32 || !defined DT_DIR
---
> #ifdef WIN32

Re: SUNOS built (macro pb)

Publié : mer. févr. 07, 2018 12:50 pm
par parisse
Bon, en retestant, je vois qu'il est en effet necessaire d'enlever le & du prototype de chartab2gen, a cause de la macro ALLOCA visiblement.