unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Two strange messages while building Emacs on MS-Windows
@ 2012-12-07 19:21 Dani Moncayo
  2012-12-07 19:54 ` Glenn Morris
  0 siblings, 1 reply; 71+ messages in thread
From: Dani Moncayo @ 2012-12-07 19:21 UTC (permalink / raw)
  To: Emacs development discussions

Hello,

Lately, I'm seeing two strange messages while building Emacs on MS-Windows.

First message: "conflicting tags" (during a `bzr pull' of the trunk):

  C:\emacs\trunk>bzr pull
  Using saved parent location: bzr://bzr.savannah.gnu.org/emacs/trunk/
  No revisions to pull.
  Conflicting tags:
      mh-e-8.4
      mh-e-8.3.1


Second message: "load-path shadowings" (during a `make'):

  ...
  Pure-hashed: 22211 strings, 3141 vectors, 36433 conses, 2846
bytecodes, 85 others
  Dumping under the name emacs
  Dumping from c:/emacs/trunk/src/oo/i386/temacs.exe
            to c:/emacs/trunk/src/oo/i386/emacs.exe
  1841562 pure bytes used
  "./oo/i386/emacs.exe" -batch -f list-load-path-shadows
  This site has duplicate Lisp libraries with the same name.
  If a locally-installed Lisp library overrides a library in the Emacs release,
  that can cause trouble, and you should probably remove the locally-installed
  version unless you know what you are doing.

  c:/emacs/trunk/src/../lisp/terminal hides
c:/emacs/trunk/lisp/obsolete/terminal
  c:/emacs/trunk/src/../lisp/longlines hides
c:/emacs/trunk/lisp/obsolete/longlines

  2 Emacs Lisp load-path shadowings were found
  ...


Do you see them too?  Are they normal?

TIA.

-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 19:21 Two strange messages while building Emacs on MS-Windows Dani Moncayo
@ 2012-12-07 19:54 ` Glenn Morris
  2012-12-07 19:57   ` Glenn Morris
  2012-12-07 20:17   ` Dani Moncayo
  0 siblings, 2 replies; 71+ messages in thread
From: Glenn Morris @ 2012-12-07 19:54 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: Emacs development discussions

Dani Moncayo wrote:

>   Conflicting tags:
>       mh-e-8.4
>       mh-e-8.3.1

See the previous time this happened:
http://lists.gnu.org/archive/html/emacs-devel/2011-09/msg00490.html

Use something like

bzr tag --force \
  -r 'revid:wohler@newt.com-20121125191128-anxghxzwj2qy6ody' mh-e-8.4

>   c:/emacs/trunk/src/../lisp/terminal hides
> c:/emacs/trunk/lisp/obsolete/terminal
>   c:/emacs/trunk/src/../lisp/longlines hides
> c:/emacs/trunk/lisp/obsolete/longlines

I guess you did not remove the old .elc files; ie did not bootstrap.




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 19:54 ` Glenn Morris
@ 2012-12-07 19:57   ` Glenn Morris
  2012-12-07 20:17     ` Dani Moncayo
  2012-12-07 20:17   ` Dani Moncayo
  1 sibling, 1 reply; 71+ messages in thread
From: Glenn Morris @ 2012-12-07 19:57 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: Emacs development discussions

Glenn Morris wrote:

> I guess you did not remove the old .elc files; ie did not bootstrap.

PS if you are going to be providing pre-built binaries for general
consumption, I hope you will make them via bootstrap, else there could
be subtle problems from time to time.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 19:57   ` Glenn Morris
@ 2012-12-07 20:17     ` Dani Moncayo
  2012-12-07 21:35       ` Eli Zaretskii
                         ` (2 more replies)
  0 siblings, 3 replies; 71+ messages in thread
From: Dani Moncayo @ 2012-12-07 20:17 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Emacs development discussions

>> I guess you did not remove the old .elc files; ie did not bootstrap.
>
> PS if you are going to be providing pre-built binaries for general
> consumption, I hope you will make them via bootstrap, else there could
> be subtle problems from time to time.

I see.  Thank you Glenn.

I was following Eli's advice for doing incremental builds
(http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12128#20), since
bootstrapping takes a lot more time.

But, why the makefiles don't take care all necessary recompilations?

Being forced to do a full bootstrap is too bad.  Is not there a better
solution for this?

-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 19:54 ` Glenn Morris
  2012-12-07 19:57   ` Glenn Morris
@ 2012-12-07 20:17   ` Dani Moncayo
  2012-12-07 21:24     ` Stefan Monnier
  1 sibling, 1 reply; 71+ messages in thread
From: Dani Moncayo @ 2012-12-07 20:17 UTC (permalink / raw)
  To: Glenn Morris; +Cc: Emacs development discussions

>>   Conflicting tags:
>>       mh-e-8.4
>>       mh-e-8.3.1
>
> See the previous time this happened:
> http://lists.gnu.org/archive/html/emacs-devel/2011-09/msg00490.html
>
> Use something like
>
> bzr tag --force \
>   -r 'revid:wohler@newt.com-20121125191128-anxghxzwj2qy6ody' mh-e-8.4

That errors out:
  bzr: ERROR: Unsupported protocol for url
"'revid:wohler@newt.com-20121125191128-anxghxzwj2qy6ody'"

But `bzr pull --overwrite' seems to have done the trick.  Now the
"conflicting tags" messages are gone.

Thanks.

>>   c:/emacs/trunk/src/../lisp/terminal hides
>> c:/emacs/trunk/lisp/obsolete/terminal
>>   c:/emacs/trunk/src/../lisp/longlines hides
>> c:/emacs/trunk/lisp/obsolete/longlines
>
> I guess you did not remove the old .elc files; ie did not bootstrap.

No I didn't remove anything, and didn't bootstrap either.

-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 20:17   ` Dani Moncayo
@ 2012-12-07 21:24     ` Stefan Monnier
  0 siblings, 0 replies; 71+ messages in thread
From: Stefan Monnier @ 2012-12-07 21:24 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: Emacs development discussions

>>> c:/emacs/trunk/src/../lisp/terminal hides
>>> c:/emacs/trunk/lisp/obsolete/terminal
>>> c:/emacs/trunk/src/../lisp/longlines hides
>>> c:/emacs/trunk/lisp/obsolete/longlines
>> I guess you did not remove the old .elc files; ie did not bootstrap.
> No I didn't remove anything, and didn't bootstrap either.

FWIW, the non-w32 build automatically removes these left-over .elc files
(tho it removes them after checking for such shadowing, so you typically
still get those messages when files are moved, but only once).


        Stefan



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 20:17     ` Dani Moncayo
@ 2012-12-07 21:35       ` Eli Zaretskii
  2012-12-07 22:11         ` Dani Moncayo
  2012-12-07 22:57         ` joakim
  2012-12-07 21:35       ` Stefan Monnier
  2012-12-09  3:20       ` Jason Rumney
  2 siblings, 2 replies; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-07 21:35 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: emacs-devel

> Date: Fri, 7 Dec 2012 21:17:04 +0100
> From: Dani Moncayo <dmoncayo@gmail.com>
> Cc: Emacs development discussions <emacs-devel@gnu.org>
> 
> I was following Eli's advice for doing incremental builds
> (http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12128#20), since
> bootstrapping takes a lot more time.

That advice wasn't meant to be used for producing distributions, only
for your own use.

> But, why the makefiles don't take care all necessary recompilations?

Because we don't have a good way of tracking dependencies between Lisp
files.

> Being forced to do a full bootstrap is too bad.

Why is it too bad for a distribution you do once in a while?  Let it
run in a separate directory, and you can meanwhile do something else.

How much time does it take you to bootstrap, btw?  And on what
machine?

> Is not there a better solution for this?

No.  Which is why admin/make-tarball.txt, the file documenting the
procedure to produce a release tarball, says:

  2.  Bootstrap to make 100% sure all elc files are up-to-date, and to
      make sure that the later tagged version will bootstrap, should it be
      necessary to check it out.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 20:17     ` Dani Moncayo
  2012-12-07 21:35       ` Eli Zaretskii
@ 2012-12-07 21:35       ` Stefan Monnier
  2012-12-09  3:20       ` Jason Rumney
  2 siblings, 0 replies; 71+ messages in thread
From: Stefan Monnier @ 2012-12-07 21:35 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: Emacs development discussions

> But, why the makefiles don't take care all necessary recompilations?

Several reasons:
- there is no tool that extracts dependencies between Elisp files, so we
  don't have the needed dependency data.
- if you try to make such a tool you'll find that we have a lot of
  (apparently) circular dependencies.
- unless the dependency management is very clever, it will tend to
  recompile everything whenever a change is made to one of the
  "core" files.  E.g.: the .elc files depend on bytecomp.elc.
  bytecomp.elc is generated from the "emacs" executable which required
  many elisp files like subr.el(c), mule.el(c), help.el(c), so any
  change to one of these files causes generation of a new "emacs"
  executable, which in turn would cause recompilation of bytecomp.elc
  and (pretty much) all other .elc files.

So the "naive right way" quickly degenerates to something very close to
"make bootstrap".  But in 99% of the cases, only the modified files
require recompilation, so the default is to be incorrect.
Hopefully, at some point, we'll be able to do better.


        Stefan



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 21:35       ` Eli Zaretskii
@ 2012-12-07 22:11         ` Dani Moncayo
  2012-12-07 22:35           ` Stefan Monnier
  2012-12-08  8:02           ` Eli Zaretskii
  2012-12-07 22:57         ` joakim
  1 sibling, 2 replies; 71+ messages in thread
From: Dani Moncayo @ 2012-12-07 22:11 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

>> I was following Eli's advice for doing incremental builds
>> (http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12128#20), since
>> bootstrapping takes a lot more time.
>
> That advice wasn't meant to be used for producing distributions, only
> for your own use.

Ok, I didn't know it.

>> Being forced to do a full bootstrap is too bad.
>
> Why is it too bad for a distribution you do once in a while?  Let it
> run in a separate directory, and you can meanwhile do something else.
>
> How much time does it take you to bootstrap, btw?  And on what
> machine?

I'm not sure.  About 30 min, I think.  I'll time it next time.

I said it's "too bad" because I'm used to incremental compilations,
which take much less time.  But if there's no better alternative, I'll
have to do it.

>> Is not there a better solution for this?
>
> No.  Which is why admin/make-tarball.txt, the file documenting the
> procedure to produce a release tarball, says:
>
>   2.  Bootstrap to make 100% sure all elc files are up-to-date, and to
>       make sure that the later tagged version will bootstrap, should it be
>       necessary to check it out.

Ok, thanks for the info.

-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 22:11         ` Dani Moncayo
@ 2012-12-07 22:35           ` Stefan Monnier
  2012-12-08  8:02           ` Eli Zaretskii
  1 sibling, 0 replies; 71+ messages in thread
From: Stefan Monnier @ 2012-12-07 22:35 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: Eli Zaretskii, emacs-devel

> I'm not sure.  About 30 min, I think.  I'll time it next time.

That's what it takes on my fit-pc2, but on my T61 laptop, it's about
7min (and on my E350 nettop it's around 20min).
So unless you're using underpowered machines like mine, there's probably
room for improvement.


        Stefan



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 21:35       ` Eli Zaretskii
  2012-12-07 22:11         ` Dani Moncayo
@ 2012-12-07 22:57         ` joakim
  2012-12-08  8:08           ` Eli Zaretskii
  1 sibling, 1 reply; 71+ messages in thread
From: joakim @ 2012-12-07 22:57 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, Dani Moncayo

Eli Zaretskii <eliz@gnu.org> writes:

>> Date: Fri, 7 Dec 2012 21:17:04 +0100
>> From: Dani Moncayo <dmoncayo@gmail.com>
>> Cc: Emacs development discussions <emacs-devel@gnu.org>
>> 
>> I was following Eli's advice for doing incremental builds
>> (http://debbugs.gnu.org/cgi/bugreport.cgi?bug=12128#20), since
>> bootstrapping takes a lot more time.
>
> That advice wasn't meant to be used for producing distributions, only
> for your own use.
>
>> But, why the makefiles don't take care all necessary recompilations?
>
> Because we don't have a good way of tracking dependencies between Lisp
> files.
>
>> Being forced to do a full bootstrap is too bad.
>
> Why is it too bad for a distribution you do once in a while?  Let it
> run in a separate directory, and you can meanwhile do something else.
>
> How much time does it take you to bootstrap, btw?  And on what
> machine?
>
>> Is not there a better solution for this?
>
> No.  Which is why admin/make-tarball.txt, the file documenting the
> procedure to produce a release tarball, says:
>
>   2.  Bootstrap to make 100% sure all elc files are up-to-date, and to
>       make sure that the later tagged version will bootstrap, should it be
>       necessary to check it out.

Is it possible to compile for windows on gnu/linux using wine or
something? It would be interesting to setup a windows build job on my
new build server. 

-- 
Joakim Verona



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 22:11         ` Dani Moncayo
  2012-12-07 22:35           ` Stefan Monnier
@ 2012-12-08  8:02           ` Eli Zaretskii
  2012-12-08  8:43             ` Dani Moncayo
  1 sibling, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-08  8:02 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: emacs-devel

> Date: Fri, 7 Dec 2012 23:11:01 +0100
> From: Dani Moncayo <dmoncayo@gmail.com>
> Cc: rgm@gnu.org, emacs-devel@gnu.org
> 
> > How much time does it take you to bootstrap, btw?  And on what
> > machine?
> 
> I'm not sure.  About 30 min, I think.  I'll time it next time.

You didn't say what machine was that.  If it's anywhere near core i7,
you can slash these times by a factor of 3, if you use a recent CVS
build of GNU Make which supports job-server style parallel builds on
Windows.  Just type "make -j8 bootstrap" instead of just "make bootstrap".
("-j8" because the core i7 CPU has the equivalent of 6.5 processing
units, and the recommendation for Make is to use a number slightly
larger than that.)



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 22:57         ` joakim
@ 2012-12-08  8:08           ` Eli Zaretskii
  2012-12-08 10:58             ` joakim
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-08  8:08 UTC (permalink / raw)
  To: joakim; +Cc: emacs-devel, dmoncayo

> From: joakim@verona.se
> Cc: Dani Moncayo <dmoncayo@gmail.com>,  emacs-devel@gnu.org
> Date: Fri, 07 Dec 2012 23:57:57 +0100
> 
> Is it possible to compile for windows on gnu/linux using wine or
> something?

Why don't you try?  I don't think anyone did, or at least we didn't
hear about that.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-08  8:02           ` Eli Zaretskii
@ 2012-12-08  8:43             ` Dani Moncayo
  2012-12-08  9:24               ` Eli Zaretskii
  2012-12-08 23:06               ` Stefan Monnier
  0 siblings, 2 replies; 71+ messages in thread
From: Dani Moncayo @ 2012-12-08  8:43 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

>> > How much time does it take you to bootstrap, btw?  And on what
>> > machine?
>>
>> I'm not sure.  About 30 min, I think.  I'll time it next time.
>
> You didn't say what machine was that.

Sorry.  The processor is an Intel Core i5-2410M @ 2.30GHz.

> If it's anywhere near core i7,
> you can slash these times by a factor of 3, if you use a recent CVS
> build of GNU Make which supports job-server style parallel builds on
> Windows.  Just type "make -j8 bootstrap" instead of just "make bootstrap".
> ("-j8" because the core i7 CPU has the equivalent of 6.5 processing
> units, and the recommendation for Make is to use a number slightly
> larger than that.)

I'll try a parallel build.  BTW, a plain "-j" option seem to be a good
choice;  according to the GNU Make manual it will dynamically
determine how many parallel recipes can be run:

  `-j [JOBS]'
  `--jobs[=JOBS]'
       Specifies the number of recipes (jobs) to run simultaneously.
       With no argument, `make' runs as many recipes simultaneously as
       possible.  If there is more than one `-j' option, the last one is
       effective.  *Note Parallel Execution: Parallel, for more
       information on how recipes are run.  Note that this option is
       ignored on MS-DOS.


-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-08  8:43             ` Dani Moncayo
@ 2012-12-08  9:24               ` Eli Zaretskii
  2012-12-08 23:06               ` Stefan Monnier
  1 sibling, 0 replies; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-08  9:24 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: emacs-devel

> Date: Sat, 8 Dec 2012 09:43:22 +0100
> From: Dani Moncayo <dmoncayo@gmail.com>
> Cc: emacs-devel@gnu.org
> 
> I'll try a parallel build.  BTW, a plain "-j" option seem to be a good
> choice;  according to the GNU Make manual it will dynamically
> determine how many parallel recipes can be run:
> 
>   `-j [JOBS]'
>   `--jobs[=JOBS]'
>        Specifies the number of recipes (jobs) to run simultaneously.
>        With no argument, `make' runs as many recipes simultaneously as
>        possible.  If there is more than one `-j' option, the last one is
>        effective.  *Note Parallel Execution: Parallel, for more
>        information on how recipes are run.  Note that this option is
>        ignored on MS-DOS.

Read more.  In the referenced node, the manual says:

     If the `-j' option is followed by an integer, this is the number of
  recipes to execute at once; this is called the number of "job slots".
  If there is nothing looking like an integer after the `-j' option,
  there is no limit on the number of job slots.
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

That's it.  Nothing as sophisticated as you seem to have concluded.
On Windows, "no limit" means "-j 64", because that's the limitation of
the API used on Windows to watch child processes.

(The referenced node also describes the -l option, which could limit
the effective number of parallel jobs depending on the system load,
but since sensing the system load doesn't work on Windows, that option
is of no use for you.)

So I suggest to time different "-j N" bootstraps and find the one that
is the fastest.  Or just use the recipe I gave ;-)



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-08  8:08           ` Eli Zaretskii
@ 2012-12-08 10:58             ` joakim
  2012-12-08 11:35               ` Óscar Fuentes
  2012-12-08 12:33               ` Eli Zaretskii
  0 siblings, 2 replies; 71+ messages in thread
From: joakim @ 2012-12-08 10:58 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, dmoncayo

Eli Zaretskii <eliz@gnu.org> writes:

>> From: joakim@verona.se
>> Cc: Dani Moncayo <dmoncayo@gmail.com>,  emacs-devel@gnu.org
>> Date: Fri, 07 Dec 2012 23:57:57 +0100
>> 
>> Is it possible to compile for windows on gnu/linux using wine or
>> something?
>
> Why don't you try?  I don't think anyone did, or at least we didn't
> hear about that.

Okay, I'll have a go.

http://www.gnu.org/software/emacs/windows/Getting-Emacs.html

seems to indicate one uses Mingw on windows to compile Emacs.
Is that correct?

I am familiar with cross-compiling for windows on gnu/linux. Would that
work? 

-- 
Joakim Verona



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-08 10:58             ` joakim
@ 2012-12-08 11:35               ` Óscar Fuentes
  2012-12-08 12:12                 ` Óscar Fuentes
  2012-12-08 12:33               ` Eli Zaretskii
  1 sibling, 1 reply; 71+ messages in thread
From: Óscar Fuentes @ 2012-12-08 11:35 UTC (permalink / raw)
  To: emacs-devel

joakim@verona.se writes:

>> Why don't you try?  I don't think anyone did, or at least we didn't
>> hear about that.
>
> Okay, I'll have a go.
>
> http://www.gnu.org/software/emacs/windows/Getting-Emacs.html
>
> seems to indicate one uses Mingw on windows to compile Emacs.
> Is that correct?
>
> I am familiar with cross-compiling for windows on gnu/linux. Would that
> work? 

For cross-compiling, there are a few difficult passages:

 * Mixed build mode: you build some pieces with native tools (the
   cross-compiler, etc) but other pieces, like the .elc files, shall be
   built with the products (temacs/emacs executable) on the target
   environment, which implies running some temacs/emacs under wine.
   Dumping should also be done under wine.

 * Most likely, the W32 makefiles are far from supporting
   cross-compiling. They also would need to work on the
   GNU/Linux-MSWindows mixed environment and my impression is that they
   strongly depend on MSWindows features all the way.

 * The "regular" configure&make used elsewhere could be adapted by
   setting the appropriate knobs at configure-time and make-time
   (setting variables like CC, EMACS, etc.) The problem I've seen so far
   is that the makefiles works on the native file system, while wine
   works on its own file system (with different root, volume letters and
   all). So commands executed under wine would take the wrong pathnames.
   Adapting that seems tricky.

OTOH, a MS Windows Emacs install appears to work well enough under Wine.
I managed to lock both Emacs and the KDE desktop (!) with a simple
operation (had to switch to a text-mode console and kill wine from
there) but it seems that it should work for byte compiling and,
hopefully, dumping. This means that, starting from `wine cmd.exe',
installing the *native* mingw compiler (not the cross-compiler) and
building with the MS Windows procedure, maybe a full MS Windows build
can be achieved. Not something that I would advise for an official
release, though.




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-08 11:35               ` Óscar Fuentes
@ 2012-12-08 12:12                 ` Óscar Fuentes
  2012-12-08 12:44                   ` Eli Zaretskii
  0 siblings, 1 reply; 71+ messages in thread
From: Óscar Fuentes @ 2012-12-08 12:12 UTC (permalink / raw)
  To: emacs-devel

Óscar Fuentes <ofv@wanadoo.es> writes:

> OTOH, a MS Windows Emacs install appears to work well enough under Wine.
> I managed to lock both Emacs and the KDE desktop (!) with a simple
> operation (had to switch to a text-mode console and kill wine from
> there) but it seems that it should work for byte compiling and,
> hopefully, dumping. This means that, starting from `wine cmd.exe',
> installing the *native* mingw compiler (not the cross-compiler) and
> building with the MS Windows procedure, maybe a full MS Windows build
> can be achieved. Not something that I would advise for an official
> release, though.

The nt/configure.bat script complains with errors like this:

D:\exp\emacs\emacs\nt>if ()==(cl) goto compilercheckdone 
Syntax error
File not found.


The script does not end, it seems to enter an infinite loop. Tried
executing cmd.exe with /E:ON or /X but made no difference.


This is what I'm using:

oscar@qcore:~/dev/exp/emacs$ wine --version
wine-1.4.1
oscar@qcore:~/dev/exp/emacs$ wine cmd.exe
CMD Version 1.4.1


What's the oldest OS version supported by the build scripts?




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-08 10:58             ` joakim
  2012-12-08 11:35               ` Óscar Fuentes
@ 2012-12-08 12:33               ` Eli Zaretskii
  1 sibling, 0 replies; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-08 12:33 UTC (permalink / raw)
  To: joakim; +Cc: dmoncayo, emacs-devel

> From: joakim@verona.se
> Date: Sat, 08 Dec 2012 11:58:42 +0100
> Cc: emacs-devel@gnu.org, dmoncayo@gmail.com
> 
> http://www.gnu.org/software/emacs/windows/Getting-Emacs.html
> 
> seems to indicate one uses Mingw on windows to compile Emacs.
> Is that correct?

Yes.  MSVC is also supported, but most people who build on Windows use
MinGW32 GCC.

> I am familiar with cross-compiling for windows on gnu/linux. Would that
> work? 

No.  The configure script and the Makefile.in files don't support the
Windows build yet.  See

  http://lists.gnu.org/archive/html/emacs-devel/2012-12/msg00203.html

for more details.

So I suggest to start with the build procedure described in
nt/INSTALL.  That would save you a lot of effort.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-08 12:12                 ` Óscar Fuentes
@ 2012-12-08 12:44                   ` Eli Zaretskii
  2012-12-08 13:24                     ` Óscar Fuentes
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-08 12:44 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: emacs-devel

> From: Óscar Fuentes <ofv@wanadoo.es>
> Date: Sat, 08 Dec 2012 13:12:37 +0100
> 
> The nt/configure.bat script complains with errors like this:
> 
> D:\exp\emacs\emacs\nt>if ()==(cl) goto compilercheckdone 
> Syntax error
> File not found.
> 
> 
> The script does not end, it seems to enter an infinite loop. Tried
> executing cmd.exe with /E:ON or /X but made no difference.

Your cmd.exe is dysfunctional.

> oscar@qcore:~/dev/exp/emacs$ wine --version
> wine-1.4.1
> oscar@qcore:~/dev/exp/emacs$ wine cmd.exe
> CMD Version 1.4.1
> 
> 
> What's the oldest OS version supported by the build scripts?

Windows NT4.




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-08 12:44                   ` Eli Zaretskii
@ 2012-12-08 13:24                     ` Óscar Fuentes
  2012-12-08 13:38                       ` Eli Zaretskii
  0 siblings, 1 reply; 71+ messages in thread
From: Óscar Fuentes @ 2012-12-08 13:24 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> Your cmd.exe is dysfunctional.

That's what I was suspecting.

>> What's the oldest OS version supported by the build scripts?
>
> Windows NT4.

Thanks.

So Wine is neglecting cmd.exe. Using one from a Windows XP install
allows the script to complete. Then, buildobj.h causes a failure because
it contains too much " and '. Apparently make-buildobj-SH: is used
instead of make-buildobj-CMD. Fixing that by hand allows the process to
reach this point:

mingw32-make[1]: Entering directory `D:/exp/emacs/emacs/lib-src'
mmingw32-make[1]: Leaving directory `D:/exp/emacs/emacs/lib-src'
ingw32-make[1]: *** No rule to make target `../lisp/abbrev.elc', needed by `DOC'.  Stop.
mingw32-make: *** [all-other-dirs-gmake] Error 2


Why DOC depends on .elc files when there is no temacs.exe for building
them?

Then I blindly remove the DOC target from here and there and the build
reaches the point where temacs.bin is created:

gcc -o oo-spd/i386/temacs.bin  -gdwarf-2 -g3   -Ld:/exp/emacs/gnuwin32/lib -Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -Wl,-subsystem,console -Wl,-entry,__start -Wl,-Map,oo-spd/i386/temacs.map oo-spd/i386/firstfile.o oo-spd/i386/emacs.res oo-spd/i386/temacs0.a oo-spd/i386/temacs1.a oo-spd/i386/temacs2.a oo-spd/i386/lastfile.a ../lib/oo-spd/i386/libgnu.a -lwinmm -ladvapi32 -lgdi32 -lcomdlg32 -luser32 -lmpr -lshell32 -lwinspool -lole32 -lcomctl32 -lusp10  
"./../nt/oo-spd/i386/addsection" "oo-spd/i386/temacs.bin" "oo-spd/i386/temacs.exe" EMHEAP 27
Dumping from oo-spd/i386/temacs.bin
          to oo-spd/i386/temacs.exe
"./oo-spd/i386/temacs.exe" -batch -l loadup dump
mingw32-make[1]: *** [oo-spd/i386/emacs.exe] Error -1
mingw32-make[1]: Leaving directory `D:/exp/emacs/emacs/src'
mingw32-make: *** [all-other-dirs-gmake] Error 2



Well, that's enough for now.




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-08 13:24                     ` Óscar Fuentes
@ 2012-12-08 13:38                       ` Eli Zaretskii
  2012-12-09  1:18                         ` Óscar Fuentes
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-08 13:38 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: emacs-devel

> From: Óscar Fuentes <ofv@wanadoo.es>
> Date: Sat, 08 Dec 2012 14:24:23 +0100
> 
> So Wine is neglecting cmd.exe. Using one from a Windows XP install
> allows the script to complete. Then, buildobj.h causes a failure because
> it contains too much " and '. Apparently make-buildobj-SH: is used
> instead of make-buildobj-CMD.

Maybe the Windows makefiles assume something that is false in Wine.
The test for the shell type is in nt/gmake.defs:

  # Determine whether make is using sh or cmd/command as shell; cmd.exe
  # will output "ECHO is on" when echo is given by itself, while sh will
  # not produce any output.
  sh_output := $(shell echo)
  ifeq "$(findstring ECHO, $(sh_output))" "ECHO"
  THE_SHELL = $(COMSPEC)$(ComSpec)
  SHELLTYPE=CMD
  SWITCHCHAR=/
  else
  USING_SH = 1
  THE_SHELL = $(SHELL)
  SHELLTYPE=SH

Which part(s) of this do(es)n't work in Wine?

> mingw32-make[1]: Entering directory `D:/exp/emacs/emacs/lib-src'
> mmingw32-make[1]: Leaving directory `D:/exp/emacs/emacs/lib-src'
> ingw32-make[1]: *** No rule to make target `../lisp/abbrev.elc', needed by `DOC'.  Stop.
> mingw32-make: *** [all-other-dirs-gmake] Error 2

You need to say "make bootstrap" explicitly, the Windows build scripts
cannot automatically intuit that a bootstrap is needed.

> Then I blindly remove the DOC target from here and there and the build
> reaches the point where temacs.bin is created:
> 
> gcc -o oo-spd/i386/temacs.bin  -gdwarf-2 -g3   -Ld:/exp/emacs/gnuwin32/lib -Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -Wl,-subsystem,console -Wl,-entry,__start -Wl,-Map,oo-spd/i386/temacs.map oo-spd/i386/firstfile.o oo-spd/i386/emacs.res oo-spd/i386/temacs0.a oo-spd/i386/temacs1.a oo-spd/i386/temacs2.a oo-spd/i386/lastfile.a ../lib/oo-spd/i386/libgnu.a -lwinmm -ladvapi32 -lgdi32 -lcomdlg32 -luser32 -lmpr -lshell32 -lwinspool -lole32 -lcomctl32 -lusp10  
> "./../nt/oo-spd/i386/addsection" "oo-spd/i386/temacs.bin" "oo-spd/i386/temacs.exe" EMHEAP 27
> Dumping from oo-spd/i386/temacs.bin
>           to oo-spd/i386/temacs.exe
> "./oo-spd/i386/temacs.exe" -batch -l loadup dump
> mingw32-make[1]: *** [oo-spd/i386/emacs.exe] Error -1

This means the above dump command failed.  So something is wrong with
the resulting binary.

Thanks.




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-08  8:43             ` Dani Moncayo
  2012-12-08  9:24               ` Eli Zaretskii
@ 2012-12-08 23:06               ` Stefan Monnier
  2012-12-09  3:44                 ` Eli Zaretskii
  1 sibling, 1 reply; 71+ messages in thread
From: Stefan Monnier @ 2012-12-08 23:06 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: Eli Zaretskii, emacs-devel

> Sorry.  The processor is an Intel Core i5-2410M @ 2.30GHz.

I get about 6min with "make -j2 bootstrap" on a Thinkpad T61, which is
an older machine (T9300 core 2 duo at 2.5GHz), so 30min sounds very
slow, even for sequential compilation.

IIRC the Windows bootstrap code is not as well tuned, and byte-compiles
all the .el files with the "bootstrap-emacs" instead of only compiling
the preloaded files this way.  That might explain it (the
"bootstrap-emacs" is an emacs binary built with the non-compiled Elisp
files, so its Elisp functions are slower).


        Stefan



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-08 13:38                       ` Eli Zaretskii
@ 2012-12-09  1:18                         ` Óscar Fuentes
  0 siblings, 0 replies; 71+ messages in thread
From: Óscar Fuentes @ 2012-12-09  1:18 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Óscar Fuentes <ofv@wanadoo.es>
>> Date: Sat, 08 Dec 2012 14:24:23 +0100
>> 
>> So Wine is neglecting cmd.exe. Using one from a Windows XP install
>> allows the script to complete. Then, buildobj.h causes a failure because
>> it contains too much " and '. Apparently make-buildobj-SH: is used
>> instead of make-buildobj-CMD.
>
> Maybe the Windows makefiles assume something that is false in Wine.
> The test for the shell type is in nt/gmake.defs:
>
>   # Determine whether make is using sh or cmd/command as shell; cmd.exe
>   # will output "ECHO is on" when echo is given by itself, while sh will
>   # not produce any output.
>   sh_output := $(shell echo)
>   ifeq "$(findstring ECHO, $(sh_output))" "ECHO"
>   THE_SHELL = $(COMSPEC)$(ComSpec)
>   SHELLTYPE=CMD
>   SWITCHCHAR=/
>   else
>   USING_SH = 1
>   THE_SHELL = $(SHELL)
>   SHELLTYPE=SH
>
> Which part(s) of this do(es)n't work in Wine?

cmd.exe from Wine outputs

Echo is off

(note the capitalization), while the one taken from the Spanish Windows
XP outputs

ECHO está activado

I don't know why the test fails with that cmd.exe, it was copied from
the virtual machine where I build Emacs. Possibly my mistake, because at
some point I realized that COMSPEC was not set and restarted the whole
process, but maybe some generated makefile was not deleted.

BTW, Wine's cmd.exe seems unable to get the quoting right while
generating buildobj.h. I tried multiple combinations, but haven't found
a method for outputting one double-quote to the file.

>> mingw32-make[1]: Entering directory `D:/exp/emacs/emacs/lib-src'
>> mmingw32-make[1]: Leaving directory `D:/exp/emacs/emacs/lib-src'
>> ingw32-make[1]: *** No rule to make target `../lisp/abbrev.elc', needed by `DOC'.  Stop.
>> mingw32-make: *** [all-other-dirs-gmake] Error 2
>
> You need to say "make bootstrap" explicitly, the Windows build scripts
> cannot automatically intuit that a bootstrap is needed.

Yes, I started with `make bootstrap' but, after fixing buildobj.h,
just executed `make'.

[snip]

After undoing the workarounds for the DOC target mentioned on my
previous message and commenting out the test for the shell type quoted
at the beginning of this one, hence forcing all makefiles to use the
copied cmd.exe, the build continued all along, except for about 30 .el
files which failed to compile crashing emacs but didn't stop the build.
Then `make install' failed with

mingw32-make[2]: Entering directory `D:/exp/emacs/emacs/lisp'
cp -f *.el "d:\exp\emacs\installed/lisp"
fixme:process:CmdBatNotification 1
cp: cannot stat `*.el': Invalid argument
fixme:process:CmdBatNotification 0
mingw32-make[2]: *** [install-lisp-CMD] Error 1
mingw32-make[2]: Leaving directory `D:/exp/emacs/emacs/lisp'

The `fixme' comes from Wine, there are a lot of them about
CmdBatNotification. The second most popular is

fixme:msvcrt:MSVCRT__sopen_s : pmode 0x81b6 ignored

At this point I gave out, as Wine seems too unreliable for the task.
Also I had the impression that the Wine build is slower than the
virtualized Windows XP build running on the same physical machine.




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-07 20:17     ` Dani Moncayo
  2012-12-07 21:35       ` Eli Zaretskii
  2012-12-07 21:35       ` Stefan Monnier
@ 2012-12-09  3:20       ` Jason Rumney
  2 siblings, 0 replies; 71+ messages in thread
From: Jason Rumney @ 2012-12-09  3:20 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: Emacs development discussions

Dani Moncayo <dmoncayo@gmail.com> writes:

> But, why the makefiles don't take care all necessary recompilations?

They do, but not neccesarily in the correct order if there are
interdependencies between changed files.  Also, as in this case, a
recompile will not remove the .elc files for .el files that have moved
in the bzr tree.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-08 23:06               ` Stefan Monnier
@ 2012-12-09  3:44                 ` Eli Zaretskii
  2012-12-09 15:50                   ` Stefan Monnier
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-09  3:44 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel, dmoncayo

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: Eli Zaretskii <eliz@gnu.org>,  emacs-devel@gnu.org
> Date: Sat, 08 Dec 2012 18:06:14 -0500
> 
> IIRC the Windows bootstrap code is not as well tuned, and byte-compiles
> all the .el files with the "bootstrap-emacs" instead of only compiling
> the preloaded files this way.  That might explain it (the
> "bootstrap-emacs" is an emacs binary built with the non-compiled Elisp
> files, so its Elisp functions are slower).

The more important reason is that byte compilation on Windows during
bootstrap is done sequentially, whereas on Unix it's done in parallel
(under "make -j").



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-09  3:44                 ` Eli Zaretskii
@ 2012-12-09 15:50                   ` Stefan Monnier
  2012-12-09 18:15                     ` Óscar Fuentes
                                       ` (2 more replies)
  0 siblings, 3 replies; 71+ messages in thread
From: Stefan Monnier @ 2012-12-09 15:50 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, dmoncayo

> The more important reason is that byte compilation on Windows during
> bootstrap is done sequentially, whereas on Unix it's done in parallel
> (under "make -j").

I do "make -j2" and get about %170 of cpu utilisation (most of the
less-than-100% is due to phases in the build process where we only have
one process running, such as when running `configure'), so presumably my
6min would turn into no more than 10min if run sequentially.
Still pretty far from his 30min, so while "make -j" would help, the
inefficiency of the bootstrap is at least as important in his specific
case, I think.


        Stefan



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-09 15:50                   ` Stefan Monnier
@ 2012-12-09 18:15                     ` Óscar Fuentes
  2012-12-09 18:52                       ` Eli Zaretskii
  2012-12-09 22:00                     ` Eli Zaretskii
  2012-12-10  9:59                     ` Eli Zaretskii
  2 siblings, 1 reply; 71+ messages in thread
From: Óscar Fuentes @ 2012-12-09 18:15 UTC (permalink / raw)
  To: emacs-devel

Stefan Monnier <monnier@iro.umontreal.ca> writes:

> I do "make -j2" and get about %170 of cpu utilisation (most of the
> less-than-100% is due to phases in the build process where we only have
> one process running, such as when running `configure'), so presumably my
> 6min would turn into no more than 10min if run sequentially.
> Still pretty far from his 30min, so while "make -j" would help, the
> inefficiency of the bootstrap is at least as important in his specific
> case, I think.

Starting an Emacs process for byte-compiling one .el file is *much*
slower on MSWindows than on GNU/Linux. In general, starting a process is
much slower on Windows than *nix, but I don't know if there are other
factors involved.




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-09 18:15                     ` Óscar Fuentes
@ 2012-12-09 18:52                       ` Eli Zaretskii
  2012-12-09 19:31                         ` Óscar Fuentes
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-09 18:52 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: emacs-devel

> From: Óscar Fuentes <ofv@wanadoo.es>
> Date: Sun, 09 Dec 2012 19:15:13 +0100
> 
> Starting an Emacs process for byte-compiling one .el file is *much*
> slower on MSWindows than on GNU/Linux. In general, starting a process is
> much slower on Windows than *nix

Do you have any numbers to put "slow" and "fast" into perspective?




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-09 18:52                       ` Eli Zaretskii
@ 2012-12-09 19:31                         ` Óscar Fuentes
  2012-12-09 22:14                           ` Eli Zaretskii
  0 siblings, 1 reply; 71+ messages in thread
From: Óscar Fuentes @ 2012-12-09 19:31 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> Starting an Emacs process for byte-compiling one .el file is *much*
>> slower on MSWindows than on GNU/Linux. In general, starting a process is
>> much slower on Windows than *nix
>
> Do you have any numbers to put "slow" and "fast" into perspective?

Good question. This is on the same machine, average of five runs
after warming the cache with one run:

time emacs --batch --eval '(message "Hello")'

Kubuntu 12.10 x86_64  : 0.026 s
Windows XP SP3 32 bits: 0.240 s

Bootstrapping compiles ~1400 el files. The difference on process startup
accounts for >5 minutes. And that's only for byte-compiling. Add
invocations to gcc, make, cmd, fileutils, etc.

Still, most of the difference on bootstrap time is unexplained. Maybe
it's the filesystem, maybe Emacs is super-optimized for GNU/Linux and
not so much for MSWindows...




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-09 15:50                   ` Stefan Monnier
  2012-12-09 18:15                     ` Óscar Fuentes
@ 2012-12-09 22:00                     ` Eli Zaretskii
  2012-12-09 23:31                       ` Dani Moncayo
  2012-12-10  9:59                     ` Eli Zaretskii
  2 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-09 22:00 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel, dmoncayo

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: dmoncayo@gmail.com,  emacs-devel@gnu.org
> Date: Sun, 09 Dec 2012 10:50:31 -0500
> 
> > The more important reason is that byte compilation on Windows during
> > bootstrap is done sequentially, whereas on Unix it's done in parallel
> > (under "make -j").
> 
> I do "make -j2" and get about %170 of cpu utilisation (most of the
> less-than-100% is due to phases in the build process where we only have
> one process running, such as when running `configure'), so presumably my
> 6min would turn into no more than 10min if run sequentially.

Indeed, I get 10min 40sec for sequential compilation with Emacs whose
byte compiler was byte-compiled.  This is on a 3.4GHz Core i7, which
is probably faster than your cores.

With the changes I committed in revision 111166, lisp/makefile.w32-in
now allows for 4-way parallelism while byte-compiling, which slashes
the byte compilation times from 10:40 to 3:35 if I use "make -jN" with
N >= 4.

The above is with byte-compiled byte compiler.  If I do the same with
the interpreted byte compiler, the sequential compilation takes 12:30
while the parallel compilation takes 4:40 -- slower, but not by a
large margin, only 25% slowdown.  A full bootstrap with "make -j8"
takes about 6 minutes.

> Still pretty far from his 30min, so while "make -j" would help, the
> inefficiency of the bootstrap is at least as important in his specific
> case, I think.

I cannot explain 30 min, since I never get such long times here.  One
possible reason could be that Dani uses an MSYS Make, which doesn't
support parallel execution (the MinGW Make does in its latest
builds).  Another potential difference between what I do and what Dani
does is that Dani uses MSYS Bash, while I use cmd.exe.  But I can
hardly believe that MSYS Bash slows down things so much.

Yet another possible reason could be that Dani runs a 64-bit Windows 7
while I did the above measurements on a 32-bit XPSP3.  Recently I
found out that running 32-bit executables on 64-bit Windows OS incurs
a tangible penalty.  But my own measurements of byte compilation on
Windows 7 show only 2-fold slowdown, which still brings us only to
around 20 min or so, not 30.  A mystery.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-09 19:31                         ` Óscar Fuentes
@ 2012-12-09 22:14                           ` Eli Zaretskii
  2012-12-09 22:44                             ` Óscar Fuentes
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-09 22:14 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: emacs-devel

> From: Óscar Fuentes <ofv@wanadoo.es>
> Date: Sun, 09 Dec 2012 20:31:51 +0100
> 
> > Do you have any numbers to put "slow" and "fast" into perspective?
> 
> Good question. This is on the same machine, average of five runs
> after warming the cache with one run:
> 
> time emacs --batch --eval '(message "Hello")'
> 
> Kubuntu 12.10 x86_64  : 0.026 s
> Windows XP SP3 32 bits: 0.240 s

On what hardware?

I get 0.080s on my Core i7 running 32-bit XP SP3.




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-09 22:14                           ` Eli Zaretskii
@ 2012-12-09 22:44                             ` Óscar Fuentes
  2012-12-10  6:06                               ` Eli Zaretskii
  0 siblings, 1 reply; 71+ messages in thread
From: Óscar Fuentes @ 2012-12-09 22:44 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> time emacs --batch --eval '(message "Hello")'
>> 
>> Kubuntu 12.10 x86_64  : 0.026 s
>> Windows XP SP3 32 bits: 0.240 s
>
> On what hardware?
>
> I get 0.080s on my Core i7 running 32-bit XP SP3.

Intel Q6600 2.4GHz.

Please note that GNU/Linux on my old machine still is 3x faster than
Windows XP on your newer one.

(Why your i7 is 4x faster than my Q6600? No idea. There are no running
antivirus and Emacs was built with default settings.)




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-09 22:00                     ` Eli Zaretskii
@ 2012-12-09 23:31                       ` Dani Moncayo
  2012-12-10  6:13                         ` Eli Zaretskii
  0 siblings, 1 reply; 71+ messages in thread
From: Dani Moncayo @ 2012-12-09 23:31 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: Stefan Monnier, emacs-devel

>> Still pretty far from his 30min, so while "make -j" would help, the
>> inefficiency of the bootstrap is at least as important in his specific
>> case, I think.
>
> I cannot explain 30 min, since I never get such long times here.  One
> possible reason could be that Dani uses an MSYS Make, which doesn't
> support parallel execution (the MinGW Make does in its latest
> builds).

I'm using "mingw32-make" (C:\MinGW\bin\mingw32-make.exe), not "MSYS
Make" (C:\MinGW\msys\1.0\bin\make.exe).

It seems to me that the current version of mingw32-make (GNU Make
3.82.90) does support parallel execution, because I sometimes see
mixed messages (from different processes) in the terminal when doing a
bootstrap with "-jN".

>  Another potential difference between what I do and what Dani
> does is that Dani uses MSYS Bash, while I use cmd.exe.  But I can
> hardly believe that MSYS Bash slows down things so much.

I've just bootstrapped (trunk revno 111165) using cmd.exe as shell,
and it took 30 min. and 29sec.  I.e., the shell doesn't seem to be
relevant here.

> Yet another possible reason could be that Dani runs a 64-bit Windows 7
> while I did the above measurements on a 32-bit XPSP3.  Recently I
> found out that running 32-bit executables on 64-bit Windows OS incurs
> a tangible penalty.  But my own measurements of byte compilation on
> Windows 7 show only 2-fold slowdown, which still brings us only to
> around 20 min or so, not 30.  A mystery.

Yes, my current OS is Windows 7 64-bit.

Next time I'll try your changes to `lisp/makefile.w32-in', and see if
they are effective here.

Thanks.

-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-09 22:44                             ` Óscar Fuentes
@ 2012-12-10  6:06                               ` Eli Zaretskii
  2012-12-10 11:11                                 ` Óscar Fuentes
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-10  6:06 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: emacs-devel

> From: Óscar Fuentes <ofv@wanadoo.es>
> Date: Sun, 09 Dec 2012 23:44:45 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> >> time emacs --batch --eval '(message "Hello")'
> >> 
> >> Kubuntu 12.10 x86_64  : 0.026 s
> >> Windows XP SP3 32 bits: 0.240 s
> >
> > On what hardware?
> >
> > I get 0.080s on my Core i7 running 32-bit XP SP3.
> 
> Intel Q6600 2.4GHz.
> 
> Please note that GNU/Linux on my old machine still is 3x faster than
> Windows XP on your newer one.

Noted.

> (Why your i7 is 4x faster than my Q6600? No idea. There are no running
> antivirus and Emacs was built with default settings.)

How did you time things on Windows?




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-09 23:31                       ` Dani Moncayo
@ 2012-12-10  6:13                         ` Eli Zaretskii
  2012-12-10 20:57                           ` Dani Moncayo
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-10  6:13 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: monnier, emacs-devel

> Date: Mon, 10 Dec 2012 00:31:10 +0100
> From: Dani Moncayo <dmoncayo@gmail.com>
> Cc: Stefan Monnier <monnier@iro.umontreal.ca>, emacs-devel@gnu.org
> 
> >  Another potential difference between what I do and what Dani
> > does is that Dani uses MSYS Bash, while I use cmd.exe.  But I can
> > hardly believe that MSYS Bash slows down things so much.
> 
> I've just bootstrapped (trunk revno 111165) using cmd.exe as shell,
> and it took 30 min. and 29sec.  I.e., the shell doesn't seem to be
> relevant here.
> 
> > Yet another possible reason could be that Dani runs a 64-bit Windows 7
> > while I did the above measurements on a 32-bit XPSP3.  Recently I
> > found out that running 32-bit executables on 64-bit Windows OS incurs
> > a tangible penalty.  But my own measurements of byte compilation on
> > Windows 7 show only 2-fold slowdown, which still brings us only to
> > around 20 min or so, not 30.  A mystery.
> 
> Yes, my current OS is Windows 7 64-bit.
> 
> Next time I'll try your changes to `lisp/makefile.w32-in', and see if
> they are effective here.

The mystery still stands.

I suggest to separate variables here, and time the byte compilation
alone.  Try this:

  cd lisp
  find . -name "*.elc" -delete
  make compile

and time the last command.

With the current trunk, you can do "make -j6 compile" instead of the
last command, and it should be about 3 to 4 times faster.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-09 15:50                   ` Stefan Monnier
  2012-12-09 18:15                     ` Óscar Fuentes
  2012-12-09 22:00                     ` Eli Zaretskii
@ 2012-12-10  9:59                     ` Eli Zaretskii
  2012-12-10 10:37                       ` Romain Francoise
  2012-12-10 14:44                       ` Eli Zaretskii
  2 siblings, 2 replies; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-10  9:59 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: dmoncayo, emacs-devel

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Date: Sun, 09 Dec 2012 10:50:31 -0500
> Cc: emacs-devel@gnu.org, dmoncayo@gmail.com
> 
> I do "make -j2" and get about %170 of cpu utilisation (most of the
> less-than-100% is due to phases in the build process where we only have
> one process running, such as when running `configure'), so presumably my
> 6min would turn into no more than 10min if run sequentially.

FWIW, "make -j2 bootstrap" was timed as follows:

  real    17m2.832s
  user    23m4.760s
  sys     4m45.010s

on this machine:

  Linux fencepost.gnu.org 2.6.32-42-server #1trisquel3 SMP Sat Aug 11 18:02:12 UTC 2012 x86_64 GNU/Linux

whose /proc/cpuinfo says, inter alia:

  vendor_id       : AuthenticAMD
  cpu family      : 16
  model           : 9
  model name      : AMD Opteron(tm) Processor 6128
  stepping        : 1
  cpu MHz         : 2000.078
  cache size      : 512 KB

This machine was 98% idle when I timed the bootstrap.

This command:

   time emacs --batch --eval '(message "Hello")'

(with an unoptimized build of Emacs) takes between 0.085s and 0.123s
on this machine.  (Why this is 5 times slower than Óscar's slower
machine is also unclear.)

The command "cd lisp && make compile-always", which sequentially
compiles every Lisp file, was timed on this machine as follows:

  real    23m11.277s
  user    16m50.820s
  sys     2m45.910s

The same command with "make -j2" times like this:

  real    11m51.381s
  user    17m15.850s
  sys     2m49.410s

which is an entirely reasonable 2-fold speedup in the elapsed time
(and seems to reveal some bug in accounting for user- and
system-times).

According to http://www.cpubenchmark.net, the CPU marks of the
machines mentioned in this thread are, top to bottom:

  Intel Core i7-2600      8,628
  AMD Opteron 6128        4,999
  Intel Core i5-2410M     3,186
  Intel Core2 Quad Q6600  2,941
  Intel Core 2 duo T9300  1,709

So I have no idea how Stefan gets a 6-min bootstrap on his 2.5-GHz
T9300 Core 2 duo...  Probably missing some factor here.  I thought
maybe the filesystem used on fencepost could be it, but "df -hT ."
there says:

  Filesystem    Type    Size  Used Avail Use% Mounted on
  /dev/xvdb1    ext4    493G  378G  115G  77% /srv/data

and my, perhaps incorrect, reading of that is that this is a local
ext4 filesystem.




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10  9:59                     ` Eli Zaretskii
@ 2012-12-10 10:37                       ` Romain Francoise
  2012-12-10 14:42                         ` Eli Zaretskii
  2012-12-10 14:44                       ` Eli Zaretskii
  1 sibling, 1 reply; 71+ messages in thread
From: Romain Francoise @ 2012-12-10 10:37 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, Stefan Monnier, dmoncayo

Eli Zaretskii <eliz@gnu.org> writes:

> This machine was 98% idle when I timed the bootstrap.

fencepost is a Xen virtual machine so even if it's idle, the hardware
itself may not be.

> According to http://www.cpubenchmark.net, the CPU marks of the
> machines mentioned in this thread are, top to bottom:

>   Intel Core i7-2600      8,628
>   AMD Opteron 6128        4,999
>   Intel Core i5-2410M     3,186
>   Intel Core2 Quad Q6600  2,941
>   Intel Core 2 duo T9300  1,709

FWIW, on my Core i7-2600 (4 cores, 8 threads), `make -j16 bootstrap'
runs in about 1m30s:

  403.12s user 20.83s system 463% cpu 1:31.37 total

Fast enough to always do a clean build from a pristine source tree and be
spared strange bootstrap errors...



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10  6:06                               ` Eli Zaretskii
@ 2012-12-10 11:11                                 ` Óscar Fuentes
  2012-12-10 14:37                                   ` Eli Zaretskii
  0 siblings, 1 reply; 71+ messages in thread
From: Óscar Fuentes @ 2012-12-10 11:11 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

> How did you time things on Windows?

From a MSYS bash shell:

time <command>


Your reports motivated me to do more research. Booted again the machine
with the XP partition with the intention of timing with other methods.
The first try was with MSYS again, just a sanity check, and this is the
result for the second and successive runs:

time /c/apps/emacs/bin/emacs --batch --eval '(message "Hello")'

0.047 s

I can only speculate about what happened. That XP partition was used by
the first time on about two years for the timings I posted the first
time you asked for data. This last time I booted XP it was idle for
several minutes before I ran the tests. Maybe the first time Windows
Update or other background programs were doing their chores, although
Task Manager didn't show significant activity.

The timings I originally posted seemed right because they were about 10%
better than the ones I get on the virtualized XP machine I use for
building Emacs. Now I'm surprised to see how big the performance penalty
virtualization imposes on some tasks. (Now I recall that long time ago I
did quite a bit of experimentation and observed that the overhead is
less if you assign just one CPU to the virtual machine.)




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10 11:11                                 ` Óscar Fuentes
@ 2012-12-10 14:37                                   ` Eli Zaretskii
  2012-12-10 15:42                                     ` Óscar Fuentes
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-10 14:37 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: emacs-devel

> From: Óscar Fuentes <ofv@wanadoo.es>
> Date: Mon, 10 Dec 2012 12:11:22 +0100
> 
> time /c/apps/emacs/bin/emacs --batch --eval '(message "Hello")'
> 
> 0.047 s

So what does this say about the efficiency of starting programs on
Windows as compared to GNU/Linux?




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10 10:37                       ` Romain Francoise
@ 2012-12-10 14:42                         ` Eli Zaretskii
  2012-12-10 15:33                           ` Romain Francoise
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-10 14:42 UTC (permalink / raw)
  To: Romain Francoise; +Cc: emacs-devel, monnier, dmoncayo

> From: Romain Francoise <romain@orebokech.com>
> Cc: Stefan Monnier <monnier@iro.umontreal.ca>,  dmoncayo@gmail.com,  emacs-devel@gnu.org
> Date: Mon, 10 Dec 2012 11:37:37 +0100
> 
> FWIW, on my Core i7-2600 (4 cores, 8 threads), `make -j16 bootstrap'
> runs in about 1m30s:
> 
>   403.12s user 20.83s system 463% cpu 1:31.37 total

What about "make -j2"?  That was the basis for comparison, so going to
higher parallelization gets in the way of comparison.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10  9:59                     ` Eli Zaretskii
  2012-12-10 10:37                       ` Romain Francoise
@ 2012-12-10 14:44                       ` Eli Zaretskii
  1 sibling, 0 replies; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-10 14:44 UTC (permalink / raw)
  To: monnier; +Cc: emacs-devel, dmoncayo

> Date: Mon, 10 Dec 2012 11:59:14 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: dmoncayo@gmail.com, emacs-devel@gnu.org
> 
> The command "cd lisp && make compile-always", which sequentially
> compiles every Lisp file, was timed on this machine as follows:
> 
>   real    23m11.277s
>   user    16m50.820s
>   sys     2m45.910s
> 
> The same command with "make -j2" times like this:
> 
>   real    11m51.381s
>   user    17m15.850s
>   sys     2m49.410s
> 
> which is an entirely reasonable 2-fold speedup in the elapsed time
> (and seems to reveal some bug in accounting for user- and
> system-times).

Actually, there's no bug: user and system times are sums of all the
cores that participated in the job, so for -j2 these numbers are
roughly doubled.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10 14:42                         ` Eli Zaretskii
@ 2012-12-10 15:33                           ` Romain Francoise
  2012-12-10 16:04                             ` Eli Zaretskii
  0 siblings, 1 reply; 71+ messages in thread
From: Romain Francoise @ 2012-12-10 15:33 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, monnier, dmoncayo

Eli Zaretskii <eliz@gnu.org> writes:

> What about "make -j2"?  That was the basis for comparison, so going to
> higher parallelization gets in the way of comparison.

make -j2 bootstrap:

 246.51s user 15.08s system 124% cpu 3:30.54 total



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10 14:37                                   ` Eli Zaretskii
@ 2012-12-10 15:42                                     ` Óscar Fuentes
  2012-12-10 16:20                                       ` Eli Zaretskii
  0 siblings, 1 reply; 71+ messages in thread
From: Óscar Fuentes @ 2012-12-10 15:42 UTC (permalink / raw)
  To: emacs-devel

Eli Zaretskii <eliz@gnu.org> writes:

>> time /c/apps/emacs/bin/emacs --batch --eval '(message "Hello")'
>> 
>> 0.047 s
>
> So what does this say about the efficiency of starting programs on
> Windows as compared to GNU/Linux?

It says that MS Windows is ~80% slower than GNU/Linux at running emacs
with for evaling a simple expression :-)

Serioulsy, though, Emacs does quite a few things at startup. My day to
day experience is that GNU/Linux efficiency at starting processes make a
difference when running lots of instances of short-lived programs, as,
for instance, a compiler test suite. Years ago, I worked on MS-Windows
native and on a virtualized Debian install: running the test suite for
the compiler I was working on required more than twice the time on
MS-Windows than on the Debian virtual machine.

As for emacs build times, the startup time is small enough to not make
it all that relevant while running >1000 times emacs.exe for compiling
all the .el files.

Still, I don't understand how your i7 is 90% slower than my old Q6600,
running the same OS. IIRC you mentioned that your build is unoptimized.
Mine is with default configuration, which defaults to -O2.




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10 15:33                           ` Romain Francoise
@ 2012-12-10 16:04                             ` Eli Zaretskii
  0 siblings, 0 replies; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-10 16:04 UTC (permalink / raw)
  To: Romain Francoise; +Cc: emacs-devel, monnier, dmoncayo

> From: Romain Francoise <romain@orebokech.com>
> Cc: monnier@iro.umontreal.ca,  dmoncayo@gmail.com,  emacs-devel@gnu.org
> Date: Mon, 10 Dec 2012 16:33:16 +0100
> 
> Eli Zaretskii <eliz@gnu.org> writes:
> 
> > What about "make -j2"?  That was the basis for comparison, so going to
> > higher parallelization gets in the way of comparison.
> 
> make -j2 bootstrap:
> 
>  246.51s user 15.08s system 124% cpu 3:30.54 total

Thanks.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10 15:42                                     ` Óscar Fuentes
@ 2012-12-10 16:20                                       ` Eli Zaretskii
  0 siblings, 0 replies; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-10 16:20 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: emacs-devel

> From: Óscar Fuentes <ofv@wanadoo.es>
> Date: Mon, 10 Dec 2012 16:42:15 +0100
> 
> It says that MS Windows is ~80% slower than GNU/Linux at running emacs
> with for evaling a simple expression :-)

That's more reasonable, and probably even expected, see below.

> Serioulsy, though, Emacs does quite a few things at startup.

Indeed.  And on Windows it does more.  What's more, quite a few of
those things involves calling 'stat', which on Windows is much slower.

> Still, I don't understand how your i7 is 90% slower than my old Q6600,
> running the same OS. IIRC you mentioned that your build is unoptimized.
> Mine is with default configuration, which defaults to -O2.

A more important difference is that I do have an anti-virus installed
(although the few tens of milliseconds that takes, if that's the
reason, I'm gladly willing to pay).  And my system is heavily used for
years (the motherboard is new, but the OS installation is 7-year old),
so it has quite a lot of baggage in its Registry etc.

On top of that, I didn't use MSYS to time the commands.  I have a
clone of the 'time' command (called 'timep', because 'time' is taken
by an internal cmd command that does something very different) which
uses Windows APIs to report times used by its child processes.  This
alone can explain the difference.

Anyway, a 4 to 6 min bootstrap is something I can easily live with,
especially since I almost never do it.




^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10  6:13                         ` Eli Zaretskii
@ 2012-12-10 20:57                           ` Dani Moncayo
  2012-12-10 21:08                             ` Eli Zaretskii
  2012-12-11  7:57                             ` Daniel Colascione
  0 siblings, 2 replies; 71+ messages in thread
From: Dani Moncayo @ 2012-12-10 20:57 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: monnier, emacs-devel

> The mystery still stands.
>
> I suggest to separate variables here, and time the byte compilation
> alone.  Try this:
>
>   cd lisp
>   find . -name "*.elc" -delete
>   make compile
>
> and time the last command.
>
> With the current trunk, you can do "make -j6 compile" instead of the
> last command, and it should be about 3 to 4 times faster.

"mingw32-make [-j4] compile" takes:
  - With revno 111165 (before your changes in `lisp/makefile.w32-in'):
    . without "-jN": 15:57
    . with -j4: 15:34
  - With revno 111175:
    . without "-jN": 16:21
    . with -j4: 6:23


A full bootstrap with "-j4" (of the last trunk) has taken 13:53.

So it seems that I've got an speedup of 50% approximately.  (Not bad!)

And for the record, from a MSYS bash:

  $ time /c/emacs/trunk/bin/emacs --batch --eval '(message "Hello")'
  Hello

  real    0m1.189s
  user    0m0.031s
  sys     0m0.000s



-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10 20:57                           ` Dani Moncayo
@ 2012-12-10 21:08                             ` Eli Zaretskii
  2012-12-10 21:33                               ` Dani Moncayo
  2012-12-11 20:41                               ` Dani Moncayo
  2012-12-11  7:57                             ` Daniel Colascione
  1 sibling, 2 replies; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-10 21:08 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: monnier, emacs-devel

> Date: Mon, 10 Dec 2012 21:57:32 +0100
> From: Dani Moncayo <dmoncayo@gmail.com>
> Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
> 
> "mingw32-make [-j4] compile" takes:
>   - With revno 111165 (before your changes in `lisp/makefile.w32-in'):
>     . without "-jN": 15:57
>     . with -j4: 15:34
>   - With revno 111175:
>     . without "-jN": 16:21
>     . with -j4: 6:23
> 
> 
> A full bootstrap with "-j4" (of the last trunk) has taken 13:53.

So now the new mystery is: why does it take you a whopping 7.5 min to
compile the C sources of Emacs?  It takes about 30 sec for me with GCC
3.4.x; GCC 4.7.2 that you use should be about 2 times slower, so I'd
expect something like 1 min, not 7.5.

Try this:

  cd nt
  touch ../src/config.h
  make -j6

and time the last command.

> So it seems that I've got an speedup of 50% approximately.  (Not bad!)

You should be able to do better, like 8min at most.  Something is
still getting in your way.

> And for the record, from a MSYS bash:
> 
>   $ time /c/emacs/trunk/bin/emacs --batch --eval '(message "Hello")'
>   Hello
> 
>   real    0m1.189s
>   user    0m0.031s
>   sys     0m0.000s

Maybe that's your problem.  Does the time go down if you repeat that
command?  If it doesn't, you may wish to try from cmd.exe.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10 21:08                             ` Eli Zaretskii
@ 2012-12-10 21:33                               ` Dani Moncayo
  2012-12-11  6:49                                 ` Eli Zaretskii
  2012-12-11 20:41                               ` Dani Moncayo
  1 sibling, 1 reply; 71+ messages in thread
From: Dani Moncayo @ 2012-12-10 21:33 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: monnier, emacs-devel

> So now the new mystery is: why does it take you a whopping 7.5 min to
> compile the C sources of Emacs?  It takes about 30 sec for me with GCC
> 3.4.x; GCC 4.7.2 that you use should be about 2 times slower, so I'd
> expect something like 1 min, not 7.5.
>
> Try this:
>
>   cd nt
>   touch ../src/config.h
>   make -j6
>
> and time the last command.

That errors out here with the current trunk:
  mingw32-make[1]: *** No rule to make target
'../lisp/term/tty-colors.elc', needed by 'DOC'.  Stop.
  mingw32-make[1]: *** Waiting for unfinished jobs....
  mingw32-make[1]: Leaving directory 'C:/emacs/trunk/lib-src'
  makefile:453: recipe for target 'all-other-dirs-gmake' failed
  mingw32-make: *** [all-other-dirs-gmake] Error 2


>> So it seems that I've got an speedup of 50% approximately.  (Not bad!)
>
> You should be able to do better, like 8min at most.  Something is
> still getting in your way.
>
>> And for the record, from a MSYS bash:
>>
>>   $ time /c/emacs/trunk/bin/emacs --batch --eval '(message "Hello")'
>>   Hello
>>
>>   real    0m1.189s
>>   user    0m0.031s
>>   sys     0m0.000s
>
> Maybe that's your problem.  Does the time go down if you repeat that
> command?  If it doesn't, you may wish to try from cmd.exe.



-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10 21:33                               ` Dani Moncayo
@ 2012-12-11  6:49                                 ` Eli Zaretskii
  2012-12-11  7:18                                   ` Dani Moncayo
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-11  6:49 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: monnier, emacs-devel

> Date: Mon, 10 Dec 2012 22:33:46 +0100
> From: Dani Moncayo <dmoncayo@gmail.com>
> Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
> 
> >   cd nt
> >   touch ../src/config.h
> >   make -j6
> >
> > and time the last command.
> 
> That errors out here with the current trunk:
>   mingw32-make[1]: *** No rule to make target
> '../lisp/term/tty-colors.elc', needed by 'DOC'.  Stop.
>   mingw32-make[1]: *** Waiting for unfinished jobs....
>   mingw32-make[1]: Leaving directory 'C:/emacs/trunk/lib-src'
>   makefile:453: recipe for target 'all-other-dirs-gmake' failed
>   mingw32-make: *** [all-other-dirs-gmake] Error 2

Why don't you have tty-colors.elc?  It should be produced by the
bootstrap or by "make bzr-update", whichever you ran last.

What is going on in your builds?

Anyway, just compile that file by hand and try again.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11  6:49                                 ` Eli Zaretskii
@ 2012-12-11  7:18                                   ` Dani Moncayo
  2012-12-11  7:51                                     ` Eli Zaretskii
  0 siblings, 1 reply; 71+ messages in thread
From: Dani Moncayo @ 2012-12-11  7:18 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

>> >   cd nt
>> >   touch ../src/config.h
>> >   make -j6
>> >
>> > and time the last command.
>>
>> That errors out here with the current trunk:
>>   mingw32-make[1]: *** No rule to make target
>> '../lisp/term/tty-colors.elc', needed by 'DOC'.  Stop.
>>   mingw32-make[1]: *** Waiting for unfinished jobs....
>>   mingw32-make[1]: Leaving directory 'C:/emacs/trunk/lib-src'
>>   makefile:453: recipe for target 'all-other-dirs-gmake' failed
>>   mingw32-make: *** [all-other-dirs-gmake] Error 2
>
> Why don't you have tty-colors.elc?  It should be produced by the
> bootstrap or by "make bzr-update", whichever you ran last.
>
> What is going on in your builds?
>
> Anyway, just compile that file by hand and try again.

I don't know Eli, but I tried even a distclean + configure + bootstrap
and the bootstrap ended up failing with the same error above.  I'll
try that when I have time.  Sorry for the trouble.


-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11  7:18                                   ` Dani Moncayo
@ 2012-12-11  7:51                                     ` Eli Zaretskii
  2012-12-11 20:41                                       ` Dani Moncayo
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-11  7:51 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: emacs-devel

> Date: Tue, 11 Dec 2012 08:18:40 +0100
> From: Dani Moncayo <dmoncayo@gmail.com>
> Cc: emacs-devel@gnu.org
> 
> >> >   cd nt
> >> >   touch ../src/config.h
> >> >   make -j6
> >> >
> >> > and time the last command.
> >>
> >> That errors out here with the current trunk:
> >>   mingw32-make[1]: *** No rule to make target
> >> '../lisp/term/tty-colors.elc', needed by 'DOC'.  Stop.
> >>   mingw32-make[1]: *** Waiting for unfinished jobs....
> >>   mingw32-make[1]: Leaving directory 'C:/emacs/trunk/lib-src'
> >>   makefile:453: recipe for target 'all-other-dirs-gmake' failed
> >>   mingw32-make: *** [all-other-dirs-gmake] Error 2
> >
> > Why don't you have tty-colors.elc?  It should be produced by the
> > bootstrap or by "make bzr-update", whichever you ran last.
> >
> > What is going on in your builds?
> >
> > Anyway, just compile that file by hand and try again.
> 
> I don't know Eli, but I tried even a distclean + configure + bootstrap
> and the bootstrap ended up failing with the same error above.  I'll
> try that when I have time.  Sorry for the trouble.

Sorry, it was my bad.  There was a typo in lisp/makefile.w32-in, now
fixed, which would cause 'lisp/term' to be skipped, but only of a
Unixy shell was used.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10 20:57                           ` Dani Moncayo
  2012-12-10 21:08                             ` Eli Zaretskii
@ 2012-12-11  7:57                             ` Daniel Colascione
  2012-12-11 20:42                               ` Dani Moncayo
  1 sibling, 1 reply; 71+ messages in thread
From: Daniel Colascione @ 2012-12-11  7:57 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: Eli Zaretskii, monnier, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 369 bytes --]

On 12/10/2012 12:57 PM, Dani Moncayo wrote:
> And for the record, from a MSYS bash:
> 
>   $ time /c/emacs/trunk/bin/emacs --batch --eval '(message "Hello")'
>   Hello
> 
>   real    0m1.189s

Can you try cp /c/emacs/trunk/bin/emacs.exe /c/emacs/trunk/bin/emacs2.exe &&
time /c/emacs/trunk/bin/emacs2.exe? Can you try running the time command a few
times?


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 258 bytes --]

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11  7:51                                     ` Eli Zaretskii
@ 2012-12-11 20:41                                       ` Dani Moncayo
  2012-12-11 21:00                                         ` Eli Zaretskii
  0 siblings, 1 reply; 71+ messages in thread
From: Dani Moncayo @ 2012-12-11 20:41 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

> Sorry, it was my bad.  There was a typo in lisp/makefile.w32-in, now
> fixed, which would cause 'lisp/term' to be skipped, but only of a
> Unixy shell was used.

Thanks, now I can bootstrap again.

It seems like nowadays I'm about the only person who build Emacs on
Windows using a shell different to the native cmd.exe.  OTOH, having
to support two completely different shells for Windows implies (for
you) an extra effort that perhaps could be saved for other (better)
tasks.

IOW: I'd agree to simplify the MS-Windows makefiles by removing the
SH-related stuff.

-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-10 21:08                             ` Eli Zaretskii
  2012-12-10 21:33                               ` Dani Moncayo
@ 2012-12-11 20:41                               ` Dani Moncayo
  2012-12-11 21:05                                 ` Eli Zaretskii
  1 sibling, 1 reply; 71+ messages in thread
From: Dani Moncayo @ 2012-12-11 20:41 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: monnier, emacs-devel

> So now the new mystery is: why does it take you a whopping 7.5 min to
> compile the C sources of Emacs?  It takes about 30 sec for me with GCC
> 3.4.x; GCC 4.7.2 that you use should be about 2 times slower, so I'd
> expect something like 1 min, not 7.5.
>
> Try this:
>
>   cd nt
>   touch ../src/config.h
>   make -j6
>
> and time the last command.

0:51

>>   $ time /c/emacs/trunk/bin/emacs --batch --eval '(message "Hello")'
>>   Hello
>>
>>   real    0m1.189s
>>   user    0m0.031s
>>   sys     0m0.000s
>
> Maybe that's your problem.  Does the time go down if you repeat that
> command?

I've tried that now, and I observe that the "real" component varies
between 145 and 200 ms (without decreasing or increasing tendency;
it's kinda random).

I don't understand such big difference with the previous measure.

In any case, the total bootstrap time keeps about the same: about 15 min.

> If it doesn't, you may wish to try from cmd.exe.

I don't know what's the best way to measure execution time from a
cmd.exe shell.  I've written this script:
  @echo Start %time%
  @C:\emacs\trunk\bin\emacs --batch --eval '(message "Hello")'
  @echo End %time%

And I get this output when I run it:
  Start 21:33:04.25
  Loading macroexp.elc...
  End of file during parsing
  End 21:33:04.42

-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11  7:57                             ` Daniel Colascione
@ 2012-12-11 20:42                               ` Dani Moncayo
  2012-12-11 20:47                                 ` Daniel Colascione
  0 siblings, 1 reply; 71+ messages in thread
From: Dani Moncayo @ 2012-12-11 20:42 UTC (permalink / raw)
  To: Daniel Colascione; +Cc: Eli Zaretskii, monnier, emacs-devel

>>   $ time /c/emacs/trunk/bin/emacs --batch --eval '(message "Hello")'
>>   Hello
>>
>>   real    0m1.189s
>
> Can you try cp /c/emacs/trunk/bin/emacs.exe /c/emacs/trunk/bin/emacs2.exe &&
> time /c/emacs/trunk/bin/emacs2.exe? Can you try running the time command a few
> times?

I guess you mean to execute
  time /c/emacs/trunk/bin/emacs2 --batch --eval '(message "Hello")'

The result is the same as invoking "emacs" instead of "emacs2", i.e.,
between 145 and 200 ms.

-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11 20:42                               ` Dani Moncayo
@ 2012-12-11 20:47                                 ` Daniel Colascione
  2012-12-11 20:58                                   ` Dani Moncayo
  0 siblings, 1 reply; 71+ messages in thread
From: Daniel Colascione @ 2012-12-11 20:47 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: Eli Zaretskii, monnier, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 610 bytes --]

On 12/11/2012 12:42 PM, Dani Moncayo wrote:
>>>   $ time /c/emacs/trunk/bin/emacs --batch --eval '(message "Hello")'
>>>   Hello
>>>
>>>   real    0m1.189s
>>
>> Can you try cp /c/emacs/trunk/bin/emacs.exe /c/emacs/trunk/bin/emacs2.exe &&
>> time /c/emacs/trunk/bin/emacs2.exe? Can you try running the time command a few
>> times?
> 
> I guess you mean to execute
>   time /c/emacs/trunk/bin/emacs2 --batch --eval '(message "Hello")'
> 
> The result is the same as invoking "emacs" instead of "emacs2", i.e.,
> between 145 and 200 ms.
> 

What do you mean? The emacs run above took 1189ms.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 258 bytes --]

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11 20:47                                 ` Daniel Colascione
@ 2012-12-11 20:58                                   ` Dani Moncayo
  2012-12-11 20:59                                     ` Daniel Colascione
  0 siblings, 1 reply; 71+ messages in thread
From: Dani Moncayo @ 2012-12-11 20:58 UTC (permalink / raw)
  To: Daniel Colascione; +Cc: Eli Zaretskii, monnier, emacs-devel

>>>>   $ time /c/emacs/trunk/bin/emacs --batch --eval '(message "Hello")'
>>>>   Hello
>>>>
>>>>   real    0m1.189s
>>>
>>> Can you try cp /c/emacs/trunk/bin/emacs.exe /c/emacs/trunk/bin/emacs2.exe &&
>>> time /c/emacs/trunk/bin/emacs2.exe? Can you try running the time command a few
>>> times?
>>
>> I guess you mean to execute
>>   time /c/emacs/trunk/bin/emacs2 --batch --eval '(message "Hello")'
>>
>> The result is the same as invoking "emacs" instead of "emacs2", i.e.,
>> between 145 and 200 ms.
>>
>
> What do you mean? The emacs run above took 1189ms.

I only say what I see.  Apparently, yesterday it took indeed much
longer to start.  No idea why.



-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11 20:58                                   ` Dani Moncayo
@ 2012-12-11 20:59                                     ` Daniel Colascione
  2012-12-11 21:01                                       ` Dani Moncayo
  0 siblings, 1 reply; 71+ messages in thread
From: Daniel Colascione @ 2012-12-11 20:59 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: Eli Zaretskii, monnier, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 825 bytes --]

On 12/11/2012 12:58 PM, Dani Moncayo wrote:
>>>>>   $ time /c/emacs/trunk/bin/emacs --batch --eval '(message "Hello")'
>>>>>   Hello
>>>>>
>>>>>   real    0m1.189s
>>>>
>>>> Can you try cp /c/emacs/trunk/bin/emacs.exe /c/emacs/trunk/bin/emacs2.exe &&
>>>> time /c/emacs/trunk/bin/emacs2.exe? Can you try running the time command a few
>>>> times?
>>>
>>> I guess you mean to execute
>>>   time /c/emacs/trunk/bin/emacs2 --batch --eval '(message "Hello")'
>>>
>>> The result is the same as invoking "emacs" instead of "emacs2", i.e.,
>>> between 145 and 200 ms.
>>>
>>
>> What do you mean? The emacs run above took 1189ms.
> 
> I only say what I see.  Apparently, yesterday it took indeed much
> longer to start.  No idea why.

Have you rebooted in the interim without rebuilding that emacs binary?



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 258 bytes --]

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11 20:41                                       ` Dani Moncayo
@ 2012-12-11 21:00                                         ` Eli Zaretskii
  0 siblings, 0 replies; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-11 21:00 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: emacs-devel

> Date: Tue, 11 Dec 2012 21:41:44 +0100
> From: Dani Moncayo <dmoncayo@gmail.com>
> Cc: emacs-devel@gnu.org
> 
> IOW: I'd agree to simplify the MS-Windows makefiles by removing the
> SH-related stuff.

Thanks.  It will go one day, but we need to deprecate it first.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11 20:59                                     ` Daniel Colascione
@ 2012-12-11 21:01                                       ` Dani Moncayo
  2012-12-11 21:02                                         ` Daniel Colascione
  0 siblings, 1 reply; 71+ messages in thread
From: Dani Moncayo @ 2012-12-11 21:01 UTC (permalink / raw)
  To: Daniel Colascione; +Cc: Eli Zaretskii, monnier, emacs-devel

>> I only say what I see.  Apparently, yesterday it took indeed much
>> longer to start.  No idea why.
>
> Have you rebooted in the interim without rebuilding that emacs binary?

I have rebooted, but this emacs binary is different, since I've
bootstrapped about an hour ago.

-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11 21:01                                       ` Dani Moncayo
@ 2012-12-11 21:02                                         ` Daniel Colascione
  0 siblings, 0 replies; 71+ messages in thread
From: Daniel Colascione @ 2012-12-11 21:02 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: Eli Zaretskii, monnier, emacs-devel

[-- Attachment #1: Type: text/plain, Size: 570 bytes --]

On 12/11/2012 1:01 PM, Dani Moncayo wrote:
>>> I only say what I see.  Apparently, yesterday it took indeed much
>>> longer to start.  No idea why.
>>
>> Have you rebooted in the interim without rebuilding that emacs binary?
> 
> I have rebooted, but this emacs binary is different, since I've
> bootstrapped about an hour ago.
> 

Hrm. It's not what I thought, then. With Cygwin, I'm seeing the OS sometimes
decide to re-read all Emacs code pages from disk instead of retrieving them from
cache, but it only when executing a freshly-dumped Emacs binary.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 258 bytes --]

^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11 20:41                               ` Dani Moncayo
@ 2012-12-11 21:05                                 ` Eli Zaretskii
  2012-12-11 21:58                                   ` Dani Moncayo
  0 siblings, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-11 21:05 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: monnier, emacs-devel

> Date: Tue, 11 Dec 2012 21:41:55 +0100
> From: Dani Moncayo <dmoncayo@gmail.com>
> Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
> 
> > So now the new mystery is: why does it take you a whopping 7.5 min to
> > compile the C sources of Emacs?  It takes about 30 sec for me with GCC
> > 3.4.x; GCC 4.7.2 that you use should be about 2 times slower, so I'd
> > expect something like 1 min, not 7.5.
> >
> > Try this:
> >
> >   cd nt
> >   touch ../src/config.h
> >   make -j6
> >
> > and time the last command.
> 
> 0:51

As expected.  So, if compiling the C sources takes 1 min and compiling
the Lisp files takes 6.5 min, how come the bootstrap takes 15 min?
What else takes 7.5 min?

> >>   $ time /c/emacs/trunk/bin/emacs --batch --eval '(message "Hello")'
> >>   Hello
> >>
> >>   real    0m1.189s
> >>   user    0m0.031s
> >>   sys     0m0.000s
> >
> > Maybe that's your problem.  Does the time go down if you repeat that
> > command?
> 
> I've tried that now, and I observe that the "real" component varies
> between 145 and 200 ms (without decreasing or increasing tendency;
> it's kinda random).

Most Windows time measurement have inherent 15-msec granularity.

> I don't know what's the best way to measure execution time from a
> cmd.exe shell.

I attach a program that you could use, call it timep.exe.

/* timep: Emulate Unix `time' command. */
#include <stdio.h>
#include <windows.h>
#include <tchar.h>

LPTSTR SkipArg (const LPTSTR args)
{
   LPTSTR argp = args;

   while (*argp != _T (' '))
     ++argp;
   while (*argp == _T (' '))
     ++argp;
   return argp;
}

int _tmain (int argc, LPTSTR argv [])
{
   STARTUPINFO StartUp;
   PROCESS_INFORMATION ProcInfo;
   union { /* Structure required for file time arithmetic. */
      LONGLONG li;
      FILETIME ft;
   } CreateTime, ExitTime, ElapsedTime;
   FILETIME KernelTime, UserTime;
   SYSTEMTIME ElTiSys, KeTiSys, UsTiSys, StartTimeSys, ExitTimeSys;
   LPTSTR targv = SkipArg (GetCommandLine ());
   OSVERSIONINFO OSVer;
   BOOL IsNT;
   HANDLE hProc;
   DWORD status;

   OSVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
   GetVersionEx (&OSVer);
   IsNT = (OSVer.dwPlatformId == VER_PLATFORM_WIN32_NT);
   /* NT (all versions) returns VER_PLATFORM_WIN32_NT. */
   GetStartupInfo (&StartUp);
   GetSystemTime (&StartTimeSys);

   /* Execute the command line; wait for process to complete. */
   CreateProcess (NULL, targv, NULL, NULL, TRUE,
         NORMAL_PRIORITY_CLASS, NULL, NULL, &StartUp, &ProcInfo);

   /* Assure that we have all REQUIRED access to the process. */
   DuplicateHandle (GetCurrentProcess (), ProcInfo.hProcess,
         GetCurrentProcess (), &hProc,
         PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, 0);
   WaitForSingleObject (hProc, INFINITE);
   GetExitCodeProcess (hProc, &status);
   GetSystemTime (&ExitTimeSys);

   if (status >= 0 && status < 256 && IsNT) { /* W NT. Elapsed, Kernel, & User times. */
      GetProcessTimes (hProc, &CreateTime.ft,
            &ExitTime.ft, &KernelTime, &UserTime);
      ElapsedTime.li = ExitTime.li - CreateTime.li;
      FileTimeToSystemTime (&ElapsedTime.ft, &ElTiSys);
      FileTimeToSystemTime (&KernelTime, &KeTiSys);
      FileTimeToSystemTime (&UserTime, &UsTiSys);
      _ftprintf (stderr, _T ("\nreal\t%02dh%02dm%02d.%03ds\n"),
            ElTiSys.wHour, ElTiSys.wMinute, ElTiSys.wSecond,
            ElTiSys.wMilliseconds);
      _ftprintf (stderr, _T ("user\t%02dh%02dm%02d.%03ds\n"),
            UsTiSys.wHour, UsTiSys.wMinute, UsTiSys.wSecond,
            UsTiSys.wMilliseconds);
      _ftprintf (stderr, _T ("sys\t%02dh%02dm%02d.%03ds\n"),
            KeTiSys.wHour, KeTiSys.wMinute, KeTiSys.wSecond,
            KeTiSys.wMilliseconds);
   } else {
      /* Windows 9x and CE. Elapsed time only. */
   }
   CloseHandle (ProcInfo.hThread); CloseHandle (ProcInfo.hProcess);
   CloseHandle (hProc);
   return 0;
}



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11 21:05                                 ` Eli Zaretskii
@ 2012-12-11 21:58                                   ` Dani Moncayo
  2012-12-11 22:55                                     ` Stefan Monnier
  2012-12-12  3:48                                     ` Eli Zaretskii
  0 siblings, 2 replies; 71+ messages in thread
From: Dani Moncayo @ 2012-12-11 21:58 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: monnier, emacs-devel

>> > Try this:
>> >
>> >   cd nt
>> >   touch ../src/config.h
>> >   make -j6
>> >
>> > and time the last command.
>>
>> 0:51
>
> As expected.  So, if compiling the C sources takes 1 min and compiling
> the Lisp files takes 6.5 min, how come the bootstrap takes 15 min?
> What else takes 7.5 min?

I don't know.  It seems that a bootstrap is not equivalent to the sum
of the two commands we've measured.

>> I don't know what's the best way to measure execution time from a
>> cmd.exe shell.

Thanks.

-- 
Dani Moncayo



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11 21:58                                   ` Dani Moncayo
@ 2012-12-11 22:55                                     ` Stefan Monnier
  2012-12-12  3:50                                       ` Eli Zaretskii
  2012-12-12 18:42                                       ` Eli Zaretskii
  2012-12-12  3:48                                     ` Eli Zaretskii
  1 sibling, 2 replies; 71+ messages in thread
From: Stefan Monnier @ 2012-12-11 22:55 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: Eli Zaretskii, emacs-devel

>> As expected.  So, if compiling the C sources takes 1 min and compiling
>> the Lisp files takes 6.5 min, how come the bootstrap takes 15 min?
>> What else takes 7.5 min?
> I don't know.  It seems that a bootstrap is not equivalent to the sum
> of the two commands we've measured.

Indeed, there are various other things like leim, info, and whatnot.
Still 7½min seems like a long time for it.

Could it be that when you compiled the files, you used an `emacs' that
was dumped from .elc files, whereas when you bootstrap, you compile the
files with an `emacs' that was dumped from .el files?


        Stefan



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11 21:58                                   ` Dani Moncayo
  2012-12-11 22:55                                     ` Stefan Monnier
@ 2012-12-12  3:48                                     ` Eli Zaretskii
  2012-12-12 18:41                                       ` Eli Zaretskii
  1 sibling, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-12  3:48 UTC (permalink / raw)
  To: Dani Moncayo; +Cc: monnier, emacs-devel

> Date: Tue, 11 Dec 2012 22:58:33 +0100
> From: Dani Moncayo <dmoncayo@gmail.com>
> Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
> 
> > As expected.  So, if compiling the C sources takes 1 min and compiling
> > the Lisp files takes 6.5 min, how come the bootstrap takes 15 min?
> > What else takes 7.5 min?
> 
> I don't know.  It seems that a bootstrap is not equivalent to the sum
> of the two commands we've measured.

The only other thing is deleting files at the beginning of bootstrap.

I suggest to bootstrap with a clock in your hand, and make notes about
the times each part takes.  There are at least 5 min more to gain
here, so I think you should be motivated enough ;-)



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11 22:55                                     ` Stefan Monnier
@ 2012-12-12  3:50                                       ` Eli Zaretskii
  2012-12-12 14:26                                         ` Stefan Monnier
  2012-12-12 18:42                                       ` Eli Zaretskii
  1 sibling, 1 reply; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-12  3:50 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel, dmoncayo

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: Eli Zaretskii <eliz@gnu.org>,  emacs-devel@gnu.org
> Date: Tue, 11 Dec 2012 17:55:58 -0500
> 
> >> As expected.  So, if compiling the C sources takes 1 min and compiling
> >> the Lisp files takes 6.5 min, how come the bootstrap takes 15 min?
> >> What else takes 7.5 min?
> > I don't know.  It seems that a bootstrap is not equivalent to the sum
> > of the two commands we've measured.
> 
> Indeed, there are various other things like leim, info, and whatnot.

Leim takes much less than a minute, and info is not built as part of
the Windows bootstrap.

> Could it be that when you compiled the files, you used an `emacs' that
> was dumped from .elc files, whereas when you bootstrap, you compile the
> files with an `emacs' that was dumped from .el files?

Yes, but that can only explain a 25% increase in time.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-12  3:50                                       ` Eli Zaretskii
@ 2012-12-12 14:26                                         ` Stefan Monnier
  2012-12-12 17:18                                           ` Eli Zaretskii
  0 siblings, 1 reply; 71+ messages in thread
From: Stefan Monnier @ 2012-12-12 14:26 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel, dmoncayo

>> Could it be that when you compiled the files, you used an `emacs' that
>> was dumped from .elc files, whereas when you bootstrap, you compile the
>> files with an `emacs' that was dumped from .el files?
> Yes, but that can only explain a 25% increase in time.

Where do you get that 25% from?


        Stefan



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-12 14:26                                         ` Stefan Monnier
@ 2012-12-12 17:18                                           ` Eli Zaretskii
  0 siblings, 0 replies; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-12 17:18 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel, dmoncayo

> From: Stefan Monnier <monnier@IRO.UMontreal.CA>
> Cc: dmoncayo@gmail.com, emacs-devel@gnu.org
> Date: Wed, 12 Dec 2012 09:26:48 -0500
> 
> >> Could it be that when you compiled the files, you used an `emacs' that
> >> was dumped from .elc files, whereas when you bootstrap, you compile the
> >> files with an `emacs' that was dumped from .el files?
> > Yes, but that can only explain a 25% increase in time.
> 
> Where do you get that 25% from?

I reported that here:

  http://lists.gnu.org/archive/html/emacs-devel/2012-12/msg00247.html

But it now seems my measurements in this area were not entirely
accurate, to say the least.  Stay tuned.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-12  3:48                                     ` Eli Zaretskii
@ 2012-12-12 18:41                                       ` Eli Zaretskii
  0 siblings, 0 replies; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-12 18:41 UTC (permalink / raw)
  To: dmoncayo; +Cc: monnier, emacs-devel

> Date: Wed, 12 Dec 2012 05:48:51 +0200
> From: Eli Zaretskii <eliz@gnu.org>
> Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
> 
> > Date: Tue, 11 Dec 2012 22:58:33 +0100
> > From: Dani Moncayo <dmoncayo@gmail.com>
> > Cc: monnier@iro.umontreal.ca, emacs-devel@gnu.org
> > 
> > > As expected.  So, if compiling the C sources takes 1 min and compiling
> > > the Lisp files takes 6.5 min, how come the bootstrap takes 15 min?
> > > What else takes 7.5 min?
> > 
> > I don't know.  It seems that a bootstrap is not equivalent to the sum
> > of the two commands we've measured.
> 
> The only other thing is deleting files at the beginning of bootstrap.
> 
> I suggest to bootstrap with a clock in your hand, and make notes about
> the times each part takes.  There are at least 5 min more to gain
> here, so I think you should be motivated enough ;-)

This is a bit longish message, sorry.  The bottom line is that I think
I know where those 5 min come from, and that Dani should get used to
the 15-min mark for the time being.

First, on my Core i7 running XP, and with "make -j8", the detailed
time schedule of a full bootstrap are:

  1:10 min for the initial compilation of C sources
  0:30 min for generating loaddefs
  4:10 min for compiling Lisp files
  0:26 min for the final compilation of C sources
  6:46 min total

After the bootstrap, removing all the *.elc files and recompiling them
with emacs.exe, which includes a byte-compiled byte compiler, takes
about 2:30 to 3 min with "make -j8", which is 60% of the time it takes
using an interpreted byte compiler.  Not the 25% I somehow measured a
day or two ago.

I also did measurements on a Windows 7 machine.  This one has a Core 2
duo E7300 CPU, so it is slightly less powerful than what Dani has.
Here's the bootstrap schedule on that machine using "make -j2":

  1:45 min for the initial compilation of C sources
  0:50 min for generating loaddefs
 11:35 min for compiling Lisp files
  0:50 min for the final compilation of C sources
 16:00 min total

Removing *.elc files and recompiling all of them with byte-compiled
compiler and "make -j2" takes 6:00 minutes, which is again almost
twice faster.  IOW, the missing 5 min are the difference between
compiling Lisp files with an interpreted byte compiler and a
byte-compiled one.

So I guess the 15 min that Dani gets is what is possible on a 2-core
machine, and any further improvements are possible only if Emacs is
re-dumped with byte-compiled preloaded filed early on and then that
binary used to compile the rest of Lisp files, like we do on Unix.



^ permalink raw reply	[flat|nested] 71+ messages in thread

* Re: Two strange messages while building Emacs on MS-Windows
  2012-12-11 22:55                                     ` Stefan Monnier
  2012-12-12  3:50                                       ` Eli Zaretskii
@ 2012-12-12 18:42                                       ` Eli Zaretskii
  1 sibling, 0 replies; 71+ messages in thread
From: Eli Zaretskii @ 2012-12-12 18:42 UTC (permalink / raw)
  To: Stefan Monnier; +Cc: emacs-devel, dmoncayo

> From: Stefan Monnier <monnier@iro.umontreal.ca>
> Cc: Eli Zaretskii <eliz@gnu.org>,  emacs-devel@gnu.org
> Date: Tue, 11 Dec 2012 17:55:58 -0500
> 
> Could it be that when you compiled the files, you used an `emacs' that
> was dumped from .elc files, whereas when you bootstrap, you compile the
> files with an `emacs' that was dumped from .el files?

That is how bootstrap works on Windows, yes.



^ permalink raw reply	[flat|nested] 71+ messages in thread

end of thread, other threads:[~2012-12-12 18:42 UTC | newest]

Thread overview: 71+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-12-07 19:21 Two strange messages while building Emacs on MS-Windows Dani Moncayo
2012-12-07 19:54 ` Glenn Morris
2012-12-07 19:57   ` Glenn Morris
2012-12-07 20:17     ` Dani Moncayo
2012-12-07 21:35       ` Eli Zaretskii
2012-12-07 22:11         ` Dani Moncayo
2012-12-07 22:35           ` Stefan Monnier
2012-12-08  8:02           ` Eli Zaretskii
2012-12-08  8:43             ` Dani Moncayo
2012-12-08  9:24               ` Eli Zaretskii
2012-12-08 23:06               ` Stefan Monnier
2012-12-09  3:44                 ` Eli Zaretskii
2012-12-09 15:50                   ` Stefan Monnier
2012-12-09 18:15                     ` Óscar Fuentes
2012-12-09 18:52                       ` Eli Zaretskii
2012-12-09 19:31                         ` Óscar Fuentes
2012-12-09 22:14                           ` Eli Zaretskii
2012-12-09 22:44                             ` Óscar Fuentes
2012-12-10  6:06                               ` Eli Zaretskii
2012-12-10 11:11                                 ` Óscar Fuentes
2012-12-10 14:37                                   ` Eli Zaretskii
2012-12-10 15:42                                     ` Óscar Fuentes
2012-12-10 16:20                                       ` Eli Zaretskii
2012-12-09 22:00                     ` Eli Zaretskii
2012-12-09 23:31                       ` Dani Moncayo
2012-12-10  6:13                         ` Eli Zaretskii
2012-12-10 20:57                           ` Dani Moncayo
2012-12-10 21:08                             ` Eli Zaretskii
2012-12-10 21:33                               ` Dani Moncayo
2012-12-11  6:49                                 ` Eli Zaretskii
2012-12-11  7:18                                   ` Dani Moncayo
2012-12-11  7:51                                     ` Eli Zaretskii
2012-12-11 20:41                                       ` Dani Moncayo
2012-12-11 21:00                                         ` Eli Zaretskii
2012-12-11 20:41                               ` Dani Moncayo
2012-12-11 21:05                                 ` Eli Zaretskii
2012-12-11 21:58                                   ` Dani Moncayo
2012-12-11 22:55                                     ` Stefan Monnier
2012-12-12  3:50                                       ` Eli Zaretskii
2012-12-12 14:26                                         ` Stefan Monnier
2012-12-12 17:18                                           ` Eli Zaretskii
2012-12-12 18:42                                       ` Eli Zaretskii
2012-12-12  3:48                                     ` Eli Zaretskii
2012-12-12 18:41                                       ` Eli Zaretskii
2012-12-11  7:57                             ` Daniel Colascione
2012-12-11 20:42                               ` Dani Moncayo
2012-12-11 20:47                                 ` Daniel Colascione
2012-12-11 20:58                                   ` Dani Moncayo
2012-12-11 20:59                                     ` Daniel Colascione
2012-12-11 21:01                                       ` Dani Moncayo
2012-12-11 21:02                                         ` Daniel Colascione
2012-12-10  9:59                     ` Eli Zaretskii
2012-12-10 10:37                       ` Romain Francoise
2012-12-10 14:42                         ` Eli Zaretskii
2012-12-10 15:33                           ` Romain Francoise
2012-12-10 16:04                             ` Eli Zaretskii
2012-12-10 14:44                       ` Eli Zaretskii
2012-12-07 22:57         ` joakim
2012-12-08  8:08           ` Eli Zaretskii
2012-12-08 10:58             ` joakim
2012-12-08 11:35               ` Óscar Fuentes
2012-12-08 12:12                 ` Óscar Fuentes
2012-12-08 12:44                   ` Eli Zaretskii
2012-12-08 13:24                     ` Óscar Fuentes
2012-12-08 13:38                       ` Eli Zaretskii
2012-12-09  1:18                         ` Óscar Fuentes
2012-12-08 12:33               ` Eli Zaretskii
2012-12-07 21:35       ` Stefan Monnier
2012-12-09  3:20       ` Jason Rumney
2012-12-07 20:17   ` Dani Moncayo
2012-12-07 21:24     ` Stefan Monnier

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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).