* Link failure on systems lacking mkstemp
@ 2014-08-16 11:42 Eli Zaretskii
2014-08-16 14:49 ` Eli Zaretskii
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Eli Zaretskii @ 2014-08-16 11:42 UTC (permalink / raw)
To: guile-devel
Guile 2.0.11 has mkstemp.c in lib/, from Gnulib, and it also has its
own private version in libguile/. This causes link failures on
systems, such as MinGW, that lack mkstemp in their system libraries:
CCLD libguile-2.0.la
../lib/.libs/libgnu.a(mkstemp.o): In function `mkstemp':
d:\gnu\guile-2.0.11\lib/mkstemp.c:48: multiple definition of `mkstemp'
.libs/libguile_2.0_la-mkstemp.o:d:\gnu\guile-2.0.11\libguile/mkstemp.c:68: first defined here
collect2.exe: error: ld returned 1 exit status
Makefile:2242: recipe for target `libguile-2.0.la' failed
make[3]: *** [libguile-2.0.la] Error 1
make[3]: Leaving directory `/d/gnu/guile-2.0.11/libguile'
Makefile:2162: recipe for target `all' failed
I think the solution is simply remove mkstemp.c from libguile/, and
all its traces from the configury that causes its dependency to be
added to libguile/Makefile. Not sure how to do the latter, though.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Link failure on systems lacking mkstemp
2014-08-16 11:42 Link failure on systems lacking mkstemp Eli Zaretskii
@ 2014-08-16 14:49 ` Eli Zaretskii
2014-08-29 8:30 ` Eli Zaretskii
2014-08-29 8:29 ` Eli Zaretskii
2015-10-30 14:53 ` Ludovic Courtès
2 siblings, 1 reply; 8+ messages in thread
From: Eli Zaretskii @ 2014-08-16 14:49 UTC (permalink / raw)
To: guile-devel
> Date: Sat, 16 Aug 2014 14:42:54 +0300
> From: Eli Zaretskii <eliz@gnu.org>
>
> I think the solution is simply remove mkstemp.c from libguile/, and
> all its traces from the configury that causes its dependency to be
> added to libguile/Makefile. Not sure how to do the latter, though.
Actually, there's one small change that's required for using Gnulib's
mkstemp: it opens the temporary file in the (default) text I/O mode,
while we need it in binary mode, because we use these temporary files
for writing *.go files. Here's the proposed patch:
+++ libguile/filesys.c 2014-08-16 17:44:35.578125000 +0300
@@ -1479,6 +1479,14 @@ SCM_DEFINE (scm_mkstemp, "mkstemp!", 1,
SCM_SYSCALL (rv = mkstemp (c_tmpl));
if (rv == -1)
SCM_SYSERROR;
+#ifdef __MINGW32__
+ /* Files created by this function are used for *.go files, so make
+ sure they use binary I/O, or else the produced *.go files will be
+ corrupted by end-of-line conversion and ^Z "software EOF"
+ misfeature. Gnulib's 'mkstemp' uses the default text mode to
+ open the file . */
+ _setmode (rv, _O_BINARY);
+#endif
scm_substring_move_x (scm_from_locale_string (c_tmpl),
SCM_INUM0, scm_string_length (tmpl),
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Link failure on systems lacking mkstemp
2014-08-16 11:42 Link failure on systems lacking mkstemp Eli Zaretskii
2014-08-16 14:49 ` Eli Zaretskii
@ 2014-08-29 8:29 ` Eli Zaretskii
2014-09-15 17:14 ` Eli Zaretskii
2015-10-30 14:53 ` Ludovic Courtès
2 siblings, 1 reply; 8+ messages in thread
From: Eli Zaretskii @ 2014-08-29 8:29 UTC (permalink / raw)
To: guile-devel
Ping!
> Date: Sat, 16 Aug 2014 14:42:54 +0300
> From: Eli Zaretskii <eliz@gnu.org>
>
> Guile 2.0.11 has mkstemp.c in lib/, from Gnulib, and it also has its
> own private version in libguile/. This causes link failures on
> systems, such as MinGW, that lack mkstemp in their system libraries:
>
> CCLD libguile-2.0.la
> ../lib/.libs/libgnu.a(mkstemp.o): In function `mkstemp':
> d:\gnu\guile-2.0.11\lib/mkstemp.c:48: multiple definition of `mkstemp'
> .libs/libguile_2.0_la-mkstemp.o:d:\gnu\guile-2.0.11\libguile/mkstemp.c:68: first defined here
> collect2.exe: error: ld returned 1 exit status
> Makefile:2242: recipe for target `libguile-2.0.la' failed
> make[3]: *** [libguile-2.0.la] Error 1
> make[3]: Leaving directory `/d/gnu/guile-2.0.11/libguile'
> Makefile:2162: recipe for target `all' failed
>
> I think the solution is simply remove mkstemp.c from libguile/, and
> all its traces from the configury that causes its dependency to be
> added to libguile/Makefile. Not sure how to do the latter, though.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Link failure on systems lacking mkstemp
2014-08-16 14:49 ` Eli Zaretskii
@ 2014-08-29 8:30 ` Eli Zaretskii
2014-09-15 17:15 ` Eli Zaretskii
0 siblings, 1 reply; 8+ messages in thread
From: Eli Zaretskii @ 2014-08-29 8:30 UTC (permalink / raw)
To: guile-devel
Ping!
> Date: Sat, 16 Aug 2014 17:49:10 +0300
> From: Eli Zaretskii <eliz@gnu.org>
>
> > Date: Sat, 16 Aug 2014 14:42:54 +0300
> > From: Eli Zaretskii <eliz@gnu.org>
> >
> > I think the solution is simply remove mkstemp.c from libguile/, and
> > all its traces from the configury that causes its dependency to be
> > added to libguile/Makefile. Not sure how to do the latter, though.
>
> Actually, there's one small change that's required for using Gnulib's
> mkstemp: it opens the temporary file in the (default) text I/O mode,
> while we need it in binary mode, because we use these temporary files
> for writing *.go files. Here's the proposed patch:
>
> +++ libguile/filesys.c 2014-08-16 17:44:35.578125000 +0300
> @@ -1479,6 +1479,14 @@ SCM_DEFINE (scm_mkstemp, "mkstemp!", 1,
> SCM_SYSCALL (rv = mkstemp (c_tmpl));
> if (rv == -1)
> SCM_SYSERROR;
> +#ifdef __MINGW32__
> + /* Files created by this function are used for *.go files, so make
> + sure they use binary I/O, or else the produced *.go files will be
> + corrupted by end-of-line conversion and ^Z "software EOF"
> + misfeature. Gnulib's 'mkstemp' uses the default text mode to
> + open the file . */
> + _setmode (rv, _O_BINARY);
> +#endif
>
> scm_substring_move_x (scm_from_locale_string (c_tmpl),
> SCM_INUM0, scm_string_length (tmpl),
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Link failure on systems lacking mkstemp
2014-08-29 8:29 ` Eli Zaretskii
@ 2014-09-15 17:14 ` Eli Zaretskii
0 siblings, 0 replies; 8+ messages in thread
From: Eli Zaretskii @ 2014-09-15 17:14 UTC (permalink / raw)
To: guile-devel
Ping! (1 month)
> Date: Fri, 29 Aug 2014 11:29:29 +0300
> From: Eli Zaretskii <eliz@gnu.org>
>
> Ping!
>
> > Date: Sat, 16 Aug 2014 14:42:54 +0300
> > From: Eli Zaretskii <eliz@gnu.org>
> >
> > Guile 2.0.11 has mkstemp.c in lib/, from Gnulib, and it also has its
> > own private version in libguile/. This causes link failures on
> > systems, such as MinGW, that lack mkstemp in their system libraries:
> >
> > CCLD libguile-2.0.la
> > ../lib/.libs/libgnu.a(mkstemp.o): In function `mkstemp':
> > d:\gnu\guile-2.0.11\lib/mkstemp.c:48: multiple definition of `mkstemp'
> > .libs/libguile_2.0_la-mkstemp.o:d:\gnu\guile-2.0.11\libguile/mkstemp.c:68: first defined here
> > collect2.exe: error: ld returned 1 exit status
> > Makefile:2242: recipe for target `libguile-2.0.la' failed
> > make[3]: *** [libguile-2.0.la] Error 1
> > make[3]: Leaving directory `/d/gnu/guile-2.0.11/libguile'
> > Makefile:2162: recipe for target `all' failed
> >
> > I think the solution is simply remove mkstemp.c from libguile/, and
> > all its traces from the configury that causes its dependency to be
> > added to libguile/Makefile. Not sure how to do the latter, though.
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Link failure on systems lacking mkstemp
2014-08-29 8:30 ` Eli Zaretskii
@ 2014-09-15 17:15 ` Eli Zaretskii
0 siblings, 0 replies; 8+ messages in thread
From: Eli Zaretskii @ 2014-09-15 17:15 UTC (permalink / raw)
To: guile-devel
Ping! (1 month)
> Date: Fri, 29 Aug 2014 11:30:47 +0300
> From: Eli Zaretskii <eliz@gnu.org>
>
> Ping!
>
> > Date: Sat, 16 Aug 2014 17:49:10 +0300
> > From: Eli Zaretskii <eliz@gnu.org>
> >
> > > Date: Sat, 16 Aug 2014 14:42:54 +0300
> > > From: Eli Zaretskii <eliz@gnu.org>
> > >
> > > I think the solution is simply remove mkstemp.c from libguile/, and
> > > all its traces from the configury that causes its dependency to be
> > > added to libguile/Makefile. Not sure how to do the latter, though.
> >
> > Actually, there's one small change that's required for using Gnulib's
> > mkstemp: it opens the temporary file in the (default) text I/O mode,
> > while we need it in binary mode, because we use these temporary files
> > for writing *.go files. Here's the proposed patch:
> >
> > +++ libguile/filesys.c 2014-08-16 17:44:35.578125000 +0300
> > @@ -1479,6 +1479,14 @@ SCM_DEFINE (scm_mkstemp, "mkstemp!", 1,
> > SCM_SYSCALL (rv = mkstemp (c_tmpl));
> > if (rv == -1)
> > SCM_SYSERROR;
> > +#ifdef __MINGW32__
> > + /* Files created by this function are used for *.go files, so make
> > + sure they use binary I/O, or else the produced *.go files will be
> > + corrupted by end-of-line conversion and ^Z "software EOF"
> > + misfeature. Gnulib's 'mkstemp' uses the default text mode to
> > + open the file . */
> > + _setmode (rv, _O_BINARY);
> > +#endif
> >
> > scm_substring_move_x (scm_from_locale_string (c_tmpl),
> > SCM_INUM0, scm_string_length (tmpl),
> >
> >
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Link failure on systems lacking mkstemp
2014-08-16 11:42 Link failure on systems lacking mkstemp Eli Zaretskii
2014-08-16 14:49 ` Eli Zaretskii
2014-08-29 8:29 ` Eli Zaretskii
@ 2015-10-30 14:53 ` Ludovic Courtès
2015-10-30 15:19 ` Eli Zaretskii
2 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2015-10-30 14:53 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: guile-devel
Hello, Eli,
Eli Zaretskii <eliz@gnu.org> skribis:
> Guile 2.0.11 has mkstemp.c in lib/, from Gnulib, and it also has its
> own private version in libguile/. This causes link failures on
> systems, such as MinGW, that lack mkstemp in their system libraries:
>
> CCLD libguile-2.0.la
> ../lib/.libs/libgnu.a(mkstemp.o): In function `mkstemp':
> d:\gnu\guile-2.0.11\lib/mkstemp.c:48: multiple definition of `mkstemp'
> .libs/libguile_2.0_la-mkstemp.o:d:\gnu\guile-2.0.11\libguile/mkstemp.c:68: first defined here
> collect2.exe: error: ld returned 1 exit status
> Makefile:2242: recipe for target `libguile-2.0.la' failed
> make[3]: *** [libguile-2.0.la] Error 1
> make[3]: Leaving directory `/d/gnu/guile-2.0.11/libguile'
> Makefile:2162: recipe for target `all' failed
>
> I think the solution is simply remove mkstemp.c from libguile/, and
> all its traces from the configury that causes its dependency to be
> added to libguile/Makefile. Not sure how to do the latter, though.
I’m ashamed of the delay but hey, better late than never.
This bug was reported independently at <http://bugs.gnu.org/21425> and a
fix was committed just yesterday, along the lines of what you suggested
(see commit efd8a43.) Let me know what you think.
Apologies for the lack of response!
Thank you,
Ludo’.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Link failure on systems lacking mkstemp
2015-10-30 14:53 ` Ludovic Courtès
@ 2015-10-30 15:19 ` Eli Zaretskii
0 siblings, 0 replies; 8+ messages in thread
From: Eli Zaretskii @ 2015-10-30 15:19 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: guile-devel
> From: ludo@gnu.org (Ludovic Courtès)
> Cc: guile-devel <guile-devel@gnu.org>
> Date: Fri, 30 Oct 2015 15:53:27 +0100
>
> Eli Zaretskii <eliz@gnu.org> skribis:
>
> > Guile 2.0.11 has mkstemp.c in lib/, from Gnulib, and it also has its
> > own private version in libguile/. This causes link failures on
> > systems, such as MinGW, that lack mkstemp in their system libraries:
> >
> > CCLD libguile-2.0.la
> > ../lib/.libs/libgnu.a(mkstemp.o): In function `mkstemp':
> > d:\gnu\guile-2.0.11\lib/mkstemp.c:48: multiple definition of `mkstemp'
> > .libs/libguile_2.0_la-mkstemp.o:d:\gnu\guile-2.0.11\libguile/mkstemp.c:68: first defined here
> > collect2.exe: error: ld returned 1 exit status
> > Makefile:2242: recipe for target `libguile-2.0.la' failed
> > make[3]: *** [libguile-2.0.la] Error 1
> > make[3]: Leaving directory `/d/gnu/guile-2.0.11/libguile'
> > Makefile:2162: recipe for target `all' failed
> >
> > I think the solution is simply remove mkstemp.c from libguile/, and
> > all its traces from the configury that causes its dependency to be
> > added to libguile/Makefile. Not sure how to do the latter, though.
>
> I’m ashamed of the delay but hey, better late than never.
>
> This bug was reported independently at <http://bugs.gnu.org/21425> and a
> fix was committed just yesterday, along the lines of what you suggested
> (see commit efd8a43.) Let me know what you think.
Thanks, looks good.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-10-30 15:19 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-16 11:42 Link failure on systems lacking mkstemp Eli Zaretskii
2014-08-16 14:49 ` Eli Zaretskii
2014-08-29 8:30 ` Eli Zaretskii
2014-09-15 17:15 ` Eli Zaretskii
2014-08-29 8:29 ` Eli Zaretskii
2014-09-15 17:14 ` Eli Zaretskii
2015-10-30 14:53 ` Ludovic Courtès
2015-10-30 15:19 ` Eli Zaretskii
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).