make fails on master

John Ralls jralls at ceridwen.us
Sun Jun 14 22:42:55 EDT 2015


> On Jun 14, 2015, at 6:44 PM, Alex Aycinena <alex.aycinena at gmail.com> wrote:
> 
> John,
> 
> On Sun, Jun 7, 2015 at 1:34 PM, John Ralls <jralls at ceridwen.us <mailto:jralls at ceridwen.us>> wrote:
> 
> > On Jun 7, 2015, at 12:38 PM, Derek Atkins <derek at ihtfp.com <mailto:derek at ihtfp.com>> wrote:
> >
> >
> > On Sun, June 7, 2015 3:02 pm, John Ralls wrote:
> >
> >> Alex,
> >>
> >> Turns out that for some flavors of GCC -std=gnu99 is required for strdup
> >> to be provided. I’d made the default c99, which in those cases doesn’t
> >> support it, hence the error.
> >>
> >> Fixed and pushed.
> >
> > Why are we using strdup() and not g_strdup()?
> 
> Oversight? It’s used in several places. The earliest I found was a5d4c7cf from 2004.
> 
> Regards,
> John Ralls
> 
> 
> I upgraded My Fedora 20 machine to Fedora 22, which came out a few weeks ago, and got the same problem again. In order to make sure it was not my new build environment, I cloned a new gnucash, checked out maint, and was able to make, make-clean, and make-install OK. So the new F22 build environment is OK. But when I checked out master on the new clone and wiped out my build directory and tried make again, I got the same error, as follows:
> 
> /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c: In function 'gfec_catcher':
> /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c:60:25: error: implicit declaration of function 'strdup' [-Werror=implicit-function-declaration]
>          *(char**)data = strdup("Guile error: Too many recursions in error catch handler.");
>                          ^
> /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c:60:23: error: assignment makes pointer from integer without a cast [-Werror=int-conversion]
>          *(char**)data = strdup("Guile error: Too many recursions in error catch handler.");
>                        ^
> /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c:79:13: warning: 'scm_internal_stack_catch' is deprecated [-Wdeprecated-declarations]
>              scm_internal_stack_catch(SCM_BOOL_T,
>              ^
> In file included from /usr/include/guile/2.0/libguile.h:126:0,
>                  from /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.h:12,
>                  from /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c:13:
> /usr/include/guile/2.0/libguile/deprecated.h:648:45: note: declared here
>  SCM_DEPRECATED SCM scm_internal_stack_catch (SCM tag,
>                                              ^
> /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c:99:23: error: assignment makes pointer from integer without a cast [-Werror=int-conversion]
>          *(char**)data = strdup("Error running guile function.");
>                        ^
> /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c:103:23: error: assignment makes pointer from integer without a cast [-Werror=int-conversion]
>          *(char**)data = strdup(msg);
>                        ^
> /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c: In function 'gfec_eval_string':
> /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c:135:5: warning: 'scm_internal_stack_catch' is deprecated [-Wdeprecated-declarations]
>      result = scm_internal_stack_catch(SCM_BOOL_T,
>      ^
> In file included from /usr/include/guile/2.0/libguile.h:126:0,
>                  from /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.h:12,
>                  from /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c:13:
> /usr/include/guile/2.0/libguile/deprecated.h:648:45: note: declared here
>  SCM_DEPRECATED SCM scm_internal_stack_catch (SCM tag,
>                                              ^
> /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c: In function 'gfec_apply':
> /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c:203:5: warning: 'scm_internal_stack_catch' is deprecated [-Wdeprecated-declarations]
>      result = scm_internal_stack_catch(SCM_BOOL_T,
>      ^
> In file included from /usr/include/guile/2.0/libguile.h:126:0,
>                  from /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.h:12,
>                  from /home/gnucash-dev/gitcheckouts/gnucash-new/src/app-utils/gfec.c:13:
> /usr/include/guile/2.0/libguile/deprecated.h:648:45: note: declared here
>  SCM_DEPRECATED SCM scm_internal_stack_catch (SCM tag,
>                                              ^
> cc1: all warnings being treated as errors
> Makefile:860: recipe for target 'gfec.lo' failed
> make[4]: *** [gfec.lo] Error 1
> make[4]: Leaving directory '/home/gnucash-dev/gitcheckouts/gnucash-new-build/src/app-utils'
> 
> So your last fix seems to have worked for F20 & F21 but not for F22. Is there any further information I can provide you?

Alex,

Well, make sure that it’s getting -std=gnu99 in CFLAGS, for one. Then root around in /usr/include and try to figure out why strdup isn’t being declared.

If all else fails we can just replace the dozen-or-so instances with g_strdup, which will suffice until those are all replaced with std::string::operator=().

Regards,
John Ralls



More information about the gnucash-devel mailing list