GNU bug report logs - #11578
24.1.50; Can't 'make install' on Windows

Previous Next

Package: emacs;

Reported by: Kazuhiro Ito <kzhr <at> d1.dion.ne.jp>

Date: Tue, 29 May 2012 14:06:02 UTC

Severity: normal

Found in version 24.1.50

Done: Eli Zaretskii <eliz <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 11578 in the body.
You can then email your comments to 11578 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#11578; Package emacs. (Tue, 29 May 2012 14:06:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Kazuhiro Ito <kzhr <at> d1.dion.ne.jp>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Tue, 29 May 2012 14:06:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Kazuhiro Ito <kzhr <at> d1.dion.ne.jp>
To: bug-gnu-emacs <at> gnu.org
Subject: 24.1.50; Can't 'make install' on Windows
Date: Tue, 29 May 2012 23:03:37 +0900
When I run configure.bat with --prefix option, 'make install' with
MinGW fails.

> make: Circular D:/bin/emacs_trunk <- D:/bin/emacs_trunk dependency dropped.
> make   -C ../lib-src install
> [Please ignore a syntax error on the next line - it is intentional]
> /bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
> /bin/sh: -c: line 1: syntax error: unexpected end of file
> make[1]: Entering directory `/f/build/emacs-trunk/lib-src'
> mkdir "D:/bin/emacs_trunk /bin"
> mkdir: cannot create directory `D:/bin/emacs_trunk /bin': No such file or directory
> make[1]: [install] Error 1 (ignored)
> cp -f oo-spd/i386/etags.exe D:/bin/emacs_trunk /bin
> cp: omitting directory `D:/bin/emacs_trunk'
> make[1]: *** [install] Error 1
> make[1]: Leaving directory `/f/build/emacs-trunk/lib-src'
> make: *** [install-other-dirs-gmake] Error 2

In the above, 'D:/bin/emacs_trunk' is argument of --prefix option.  It
seems that makefile.w32-in does not assume INSTALL_DIR has trailing
space.

-- 
Kazuhiro Ito




Reply sent to Eli Zaretskii <eliz <at> gnu.org>:
You have taken responsibility. (Tue, 29 May 2012 16:00:02 GMT) Full text and rfc822 format available.

Notification sent to Kazuhiro Ito <kzhr <at> d1.dion.ne.jp>:
bug acknowledged by developer. (Tue, 29 May 2012 16:00:03 GMT) Full text and rfc822 format available.

Message #10 received at 11578-done <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Kazuhiro Ito <kzhr <at> d1.dion.ne.jp>
Cc: 11578-done <at> debbugs.gnu.org
Subject: Re: bug#11578: 24.1.50; Can't 'make install' on Windows
Date: Tue, 29 May 2012 18:57:29 +0300
> Date: Tue, 29 May 2012 23:03:37 +0900
> From: Kazuhiro Ito <kzhr <at> d1.dion.ne.jp>
> 
> When I run configure.bat with --prefix option, 'make install' with
> MinGW fails.
> 
> > make: Circular D:/bin/emacs_trunk <- D:/bin/emacs_trunk dependency dropped.
> > make   -C ../lib-src install
> > [Please ignore a syntax error on the next line - it is intentional]
> > /bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
> > /bin/sh: -c: line 1: syntax error: unexpected end of file
> > make[1]: Entering directory `/f/build/emacs-trunk/lib-src'
> > mkdir "D:/bin/emacs_trunk /bin"
> > mkdir: cannot create directory `D:/bin/emacs_trunk /bin': No such file or directory
> > make[1]: [install] Error 1 (ignored)
> > cp -f oo-spd/i386/etags.exe D:/bin/emacs_trunk /bin
> > cp: omitting directory `D:/bin/emacs_trunk'
> > make[1]: *** [install] Error 1
> > make[1]: Leaving directory `/f/build/emacs-trunk/lib-src'
> > make: *** [install-other-dirs-gmake] Error 2

This was reported to me yesterday off-list, and I fixed it on the
emacs-24 branch in revision 108019.  The patch is below, if you cannot
wait for the next merge from emacs-24 to the trunk.

> In the above, 'D:/bin/emacs_trunk' is argument of --prefix option.  It
> seems that makefile.w32-in does not assume INSTALL_DIR has trailing
> space.

No, the problem is a subtlety of the cmd.exe "echo" command.  If you
say

  echo foo=bar >>file

the blank between "bar" and the redirection symbol winds up in the
file.  The fix for that, which doesn't re-introduce a different, but
related bug fixed in r108005, is somewhat tricky, as you see below.

A workaround is not to use --prefix at configure time and instead set
INSTALL_DIR at "make install" time, like this:

  make install INSTALL_DIR=d:/bin/emacs_trunk

(If you are installing in the source tree, you need neither --prefix
nor INSTALL_DIR= at "make install" time, since that's the default
INSTALL_DIR anyway.)


=== modified file 'nt/ChangeLog'
--- nt/ChangeLog	2012-05-18 08:21:19 +0000
+++ nt/ChangeLog	2012-05-28 16:17:35 +0000
@@ -1,3 +1,12 @@
+2012-05-28  Eli Zaretskii  <eliz <at> gnu.org>
+
+	* configure.bat (genmakefiles): Move the redirection away from the
+	end of the command, to avoid excess whitespace at the end of Make
+	variables created at configure time, and also avoid things like
+	"FOO1>>config.settings", where "1" gets interpreted as the file
+	descriptor and eaten up.  This fixes breakage introduced by the
+	last change, without reintroducing the bug fixed by that change.
+
 2012-05-18  Eli Zaretskii  <eliz <at> gnu.org>
 
 	* configure.bat: Ensure a space between %var% expansion and

=== modified file 'nt/configure.bat'
--- nt/configure.bat	2012-05-18 08:21:19 +0000
+++ nt/configure.bat	2012-05-28 16:17:35 +0000
@@ -721,29 +721,36 @@ if %COMPILER% == gcc set MAKECMD=gmake
 if %COMPILER% == cl set MAKECMD=nmake
 
 rem   Pass on chosen settings to makefiles.
-rem   NB. Be very careful to not have a space before redirection symbols
-rem   except when there is a preceding digit, when a space is required.
 rem
+rem   The weird place we put the redirection is to make sure no extra
+rem   whitespace winds up at the end of the Make variables, since some
+rem   variables, e.g. INSTALL_DIR, cannot stand that.  Yes, echo will
+rem   write the blanks between the end of command arguments and the
+rem   redirection symbol to the file.  OTOH, we cannot put the
+rem   redirection immediately after the last character of the command,
+rem   because environment variable expansion can yield a digit there,
+rem   which will then be misinterpreted as the file descriptor to
+rem   redirect...
 echo # Start of settings from configure.bat >config.settings
-echo COMPILER=%COMPILER% >>config.settings
-if not "(%mf%)" == "()" echo MCPU_FLAG=%mf% >>config.settings
-if not "(%dbginfo%)" == "()" echo DEBUG_INFO=%dbginfo% >>config.settings
-if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings
-if (%noopt%) == (Y) echo NOOPT=1 >>config.settings
-if (%enablechecking%) == (Y) echo ENABLECHECKS=1 >>config.settings
-if (%profile%) == (Y) echo PROFILE=1 >>config.settings
-if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings
-if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix% >>config.settings
-if not "(%distfiles%)" == "()" echo DIST_FILES=%distfiles% >>config.settings
+>>config.settings echo COMPILER=%COMPILER%
+if not "(%mf%)" == "()" >>config.settings echo MCPU_FLAG=%mf%
+if not "(%dbginfo%)" == "()" >>config.settings echo DEBUG_INFO=%dbginfo%
+if (%nodebug%) == (Y) >>config.settings echo NODEBUG=1
+if (%noopt%) == (Y) >>config.settings echo NOOPT=1
+if (%enablechecking%) == (Y) >>config.settings echo ENABLECHECKS=1
+if (%profile%) == (Y) >>config.settings echo PROFILE=1
+if (%nocygwin%) == (Y) >>config.settings echo NOCYGWIN=1
+if not "(%prefix%)" == "()" >>config.settings echo INSTALL_DIR=%prefix%
+if not "(%distfiles%)" == "()" >>config.settings echo DIST_FILES=%distfiles%
 rem We go thru docflags because usercflags could be "-DFOO=bar" -something
 rem and the if command cannot cope with this
 for %%v in (%usercflags%) do if not (%%v)==() set docflags=Y
-if (%docflags%)==(Y) echo USER_CFLAGS=%usercflags% >>config.settings
-if (%docflags%)==(Y) echo ESC_USER_CFLAGS=%escusercflags% >>config.settings
+if (%docflags%)==(Y) >>config.settings echo USER_CFLAGS=%usercflags%
+if (%docflags%)==(Y) >>config.settings echo ESC_USER_CFLAGS=%escusercflags%
 for %%v in (%userldflags%) do if not (%%v)==() set doldflags=Y
-if (%doldflags%)==(Y) echo USER_LDFLAGS=%userldflags% >>config.settings
+if (%doldflags%)==(Y) >>config.settings echo USER_LDFLAGS=%userldflags%
 for %%v in (%extrauserlibs%) do if not (%%v)==() set doextralibs=Y
-if (%doextralibs%)==(Y) echo USER_LIBS=%extrauserlibs% >>config.settings
+if (%doextralibs%)==(Y) >>config.settings echo USER_LIBS=%extrauserlibs%
 echo # End of settings from configure.bat>>config.settings
 echo. >>config.settings
 





bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Wed, 27 Jun 2012 11:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 12 years and 358 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.