-
Notifications
You must be signed in to change notification settings - Fork 2
/
Building erlang using Visual C++ 2008 Express Edition.txt
671 lines (494 loc) · 22.9 KB
/
Building erlang using Visual C++ 2008 Express Edition.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
#####################################################
How to build Erlang using Visual C++ Express Edition
#####################################################
SOME CONTEXT:
- Use cygwin for building erlang
-> no point in trying msys
-> actually...
MAKE DAMN SURE NO msys/mingw binaries are present in the path!
- this build uses cl.exe from Visual C++ wrapped by the cc.sh script
- still haven't figured out how to get the gs and wx applications to build
-> working on it as you read
By the way, have I mentioned?
"Make sure you don't have mingw or msys binaries on the system PATH!"
Let me know (nesrait@gmail.com) if you find errors or have any
suggestions that might improve this tutorial.
#####################################################
BUGS & PATCHES - read and apply as needed!
#####################################################
$ERL_TOP/erts/configure.in:
3242:
open_ssl_default_dir=`cygpath "c:\OpenSSL"`
for dir in $extra_dir $open_ssl_default_dir \
3493:
kerberos_default_dir=`cygpath "c:\kerberos"`
SSL_KRB5_INCLUDE=
if test "x$ssl_krb5_enabled" = "xyes" ; then
AC_MSG_CHECKING(for krb5.h in standard locations)
for dir in $extra_dir $SSL_ROOT/include $SSL_ROOT/include/openssl \
$SSL_ROOT/include/kerberos $kerberos_default_dir/include \
$ERL_TOP/erts/configure:
21867:
open_ssl_default_dir=`cygpath "c:\OpenSSL"`
for dir in $extra_dir $open_ssl_default_dir \
22235:
kerberos_default_dir=`cygpath "c:\kerberos"`
SSL_KRB5_INCLUDE=
if test "x$ssl_krb5_enabled" = "xyes" ; then
echo "$as_me:$LINENO: checking for krb5.h in standard locations" >&5
echo $ECHO_N "checking for krb5.h in standard locations... $ECHO_C" >&6
for dir in $extra_dir $SSL_ROOT/include $SSL_ROOT/include/openssl \
$SSL_ROOT/include/kerberos $kerberos_default_dir/include \
Using the "--with-ssl" option in configure (EVEN IF OpenSSL is installed
in a default location) will set the SSL_LIBDIR variable to an incorrect value
and crypto and ssh compilation will fail.
- If OpenSSL is found in the default location:
$ ./otp_build configure
...
$ grep "SSL_LIBDIR =" lib/crypto/c_src/win32/Makefile
SSL_LIBDIR = /c/OpenSSL/lib
- Otherwise if we provide the path to OpenSSL:
$ ./otp_build configure --with-ssl="/c/OpenSSL"
...
$ grep "SSL_LIBDIR =" lib/crypto/c_src/win32/Makefile
SSL_LIBDIR = /c/OpenSSL/lib/VC
$ERL_TOP/erts/configure:22139
$ERL_TOP/erts/configure.in:3418
if test "x$MIXED_CYGWIN" = "xyes" -a -d "$with_ssl/lib/VC"; then
SSL_LIBDIR="$with_ssl/lib/VC"
should include the additional tests:
if test "x$MIXED_CYGWIN" = "xyes" ; then
if test -f "$dir/lib/VC/ssleay32.lib" -o \
-f "$dir/lib/VC/openssl.lib"; then
SSL_LIBDIR="$dir/lib/VC"
elif test -f "$dir/lib/ssleay32.lib" -o \
-f "$dir/lib/openssl.lib"; then
SSL_LIBDIR="$dir/lib"
else
is_real_ssl=no
fi
that are done when looking open OpenSSL in the default paths
($ERL_TOP/erts/configure.in:21867 and $ERL_TOP/erts/configure:3242).
$ERL_TOP/erts/etc/win32/cygwin_tools/vc/mc.sh:
70:
if [ "X$MC_SH_DEBUG_LOG" != "X" ]; then
echo mc.sh "$SAVE" >>$MC_SH_DEBUG_LOG
echo $MCC $CMD >>$MC_SH_DEBUG_LOG
fi
Comparing line 33 of $ERL_TOP/erts/etc/win32/cygwin_tools/vc/mc.sh:
if [ -n "`$p/mc.exe -? 2>&1 >/dev/null </dev/null \
| grep -i \"message compiler\"`" ]; then
MCC=$p/mc.exe
fi
with line 33 of $ERL_TOP/erts/etc/win32/cygwin_tools/vc/rc.sh:
if [ -n "`$p/rc.exe -? 2>&1 | grep -i "resource compiler"`" ]; then
RCC=$p/rc.exe
fi
It seems the second one needs some escaping: \"resource compiler\".
---------------------------------
It seems that gs looks up the wish binary in its priv dir and fallbacks
to a lookup in the system path.
Having the build fail just because it doesn't find a binaries/win32.tar.gz file
imposes an unnecessary restriction (not present in the actual application).
$ERL_TOP/lib/gs/configure.in has this:
AC_SUBST(TCL_TAR)
AC_MSG_CHECKING(for prebuilt tcl/tk in tcl/binaries/$system_type.tar.gz)
if test -f "tcl/binaries/$system_type.tar.gz" ; then
TCL_TAR="binaries/$system_type.tar.gz"
AC_MSG_RESULT(found)
else
TCL_TAR=""
AC_MSG_RESULT(not found, using PATH at runtime)
fi
When the $system_type.tar.gz file is missing TCL_TAR="" as expected.
The bug lies in
$ERL_TOP/lib/gs/tcl/Makefile.in:36
ifeq ($(TARGET),win32)
TCL_TAR = binaries/win32.tar.gz
else
TCL_TAR = @TCL_TAR@
endif
Where the result of the test for the file's presence is simply ignored and
TCL_TAR is set to "binaries/win32.tar.gz" thus enabling some invalid
operations on non-existing files:
ifeq ($(TCL_TAR),)
debug opt:
else
debug opt:
gzip -dc $(TCL_TAR) | (cd ../priv && tar -xf -)
endif
...
release_spec:
$(INSTALL_DIR) $(RELSYSDIR)/priv
$(INSTALL_DATA) $(TCL_FILES) $(EXTRA_FILES) $(RELSYSDIR)/priv
ifneq ($(TCL_TAR),)
gzip -dc $(TCL_TAR) | (cd $(RELSYSDIR)/priv && tar -xf -)
endif
Only overriding the TCL_TAR if it was defined should solve the problem.
$ERL_TOP/lib/gs/tcl/Makefile.in:36
TCL_TAR = @TCL_TAR@
ifneq ($(TCL_TAR),)
ifeq ($(TARGET),win32)
TCL_TAR = binaries/win32.tar.gz
endif
endif
---------------------------------
Enabling the detection of a wxWidgets installation under c:\Program Files.
$ERL_TOP/lib/wx/configure.in:292
AC_MSG_CHECKING(for WxWidgets in standard locations)
+PROGRAM_FILES_SHORTNAME=`cygpath -d "c:\\Program Files"`
+WXWIN="$PROGRAM_FILES_SHORTNAME\\wxWidgets-2.8.*"
CWXWIN=`cygpath $WXWIN 2>/dev/null`
for dir in $CWXWIN /opt/local/pgm/wxMSW-2.8.*; do
$ERL_TOP/lib/wx/configure~4565
echo $ECHO_N "checking for WxWidgets in standard locations... $ECHO_C" >&6
+PROGRAM_FILES_SHORTNAME=`cygpath -d "c:\\Program Files"`
+WXWIN="$PROGRAM_FILES_SHORTNAME\\wxWidgets-2.8.*"
CWXWIN=`cygpath $WXWIN 2>/dev/null`
for dir in $CWXWIN /opt/local/pgm/wxMSW-2.8.*; do
---------------------------------
Mandatory patch for building wxWidgets with VC++ Express 2008:
cc.sh bug: files with the .cc extension are rewritten on compile.
$ERL_TOP/erts/etc/win32/cygwin_tools/vc/cc.sh:224:
-o=`echo $x | sed 's,.*/,,' | sed 's,\.cp*$,.o,'`
+o=`echo $x | sed 's,.*/,,' | sed 's,\.cp*$,.o,' | sed 's,\.cc$,.o,'`
---------------------------------
If the paths to the executables (rc.exe and mc.exe) contain spaces
then the wrapper scripts will fail without any meaningful error.
To prevent this from happening you need to make sure that the
spaces are removed.
This step would normally take care of that:
$ eval `./otp_build env_win32`
But if you're using a cygdrive prefix different from /cygdrive then
you need to apply this patch:
$ERL_TOP/otp_build:584
+ P2=`echo $PATH | sed 's,",,g'`
- P2=`echo $PATH | \
- sed 's,",,g;s,:[cC]:,:/cygdrive/c,g;s,:[dD]:,:/cygdrive/d,g'`
$ERL_TOP/otp_build:629
+ P2=`echo $PATH | sed 's,",,g'`
- P2=`echo $PATH | \
- sed 's,",,g;s,:[cC]:,:/cygdrive/c,g;s,:[dD]:,:/cygdrive/d,g'`
#####################################################
Building erlang
#####################################################
1) Get and install complete Cygwin (latest)
- Install the latest *STABLE* version
- experimental versions will get you into lots of trouble
- http://www.cygwin.com/
- You can check the version you have installed using:
$ uname -srv
CYGWIN_NT-5.1 1.5.25(0.156/4/2) 2008-06-12 19:34
- install make using cygwin's setup:
- package -> devel -> make
- In my cygwin installation I've changed the cygdrive prefix
(to use /c/... instead of /c/cygdrive/...) by adding
mount --change-cygdrive-prefix /
to the beginning of the ~/.bashrc file.
If you also have a non-default cygdrive-prefix then you have to
apply all the path-correcting patches.
Caveat emptor and all that.
#####################################################
2) Download Visual C++ 2008 Express Edition
My installation was done under:
c:/MSVC9.0
Remember that if you copy paste something from this tutorial.
VC++ 2008 Express Edition doesn't include the Message Compiler (mc.exe)
which will be needed later in the build process.
Details:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=374833
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=477064
Get a copy of this file of a Windows SDK and place it in:
c:\MSVC9.0\VC\bin
Question: is this file freely distributable? If so I could add it to the repo.
Possible workaround:
http://bugs.mysql.com/bug.php?id=40280
#####################################################
3) Get and install Sun's Java SE Development Kit 6u16
- Add the bin dir to the PATH environment variable in windows
or in some cygwin "boot script"
$ export PATH="$PATH:/c/Progra~1/Java/jdk1.6.0_16/bin"
#####################################################
4) Install "Win32 OpenSSL v0.9.8k"
REQUIRED FOR APPLICATIONS: crypt, ssl, ssh
-> That's "Win32 OpenSSL v0.9.8k" and
NOT "Win32 OpenSSL v0.9.8k Light"
- Get the installer here:
http://www.slproweb.com/products/Win32OpenSSL.html
- If not installing in the /c/OpenSSL folder take note of the
install dir (you'll need it later on step 17).
#####################################################
5) Get tcl/tk - or not - your choice!
REQUIRED FOR APPLICATIONS: gs
The gs application can run using a system wide install of tcl/tk
or a local install (under $ERL_TOP/lib/gs/priv/tcl).
During the build process the gs application looks for this file:
$ERL_TOP/lib/gs/tcl/binaries/win32.tar.gz
In an attempt to deploy to the new system an existing version
of the tcl/tk binaries.
Unfortunately if you're starting a fresh install you won't have
that win32.tar.gz file and the build will fail.
Two choices:
1) Use a system-wide tcl/tk install
- get the tcl/tk binaries
http://www.tcl.tk/software/tcltk/
- make sure that the wish*.exe binary is on the PATH
- apply the patch to $ERL_TOP/lib/gs/tcl/Makefile.in:36
- needed for gs to install even without the local
tcl/tk binaries (win32.tar.gz)
2) Fetch the tck/tk binaries from a previous erlang install.
The win32.tar.gz file is nothing more than a tar of the files
under: $PREV_ERL_TOP/lib/gs-version/priv/tcl
- open a cygwin shell
- change dir to $PREV_ERL_TOP/lib/gs-VERSION/priv
- mkdir $ERL_TOP/lib/gs/tcl/binaries
- tar cvzf $ERL_TOP/lib/gs/tcl/binaries/win32.tar.gz tcl
That should create the win32.tar.gz file in the directory
where the build process expects it to be.
A big thanks to Juhani Ränkimies for helping out with this one. :)
#####################################################
6) Get wxWidgets-2.8.10
REQUIRED FOR APPLICATIONS: wx
- both the installer or zip packages will do
- http://www.wxwidgets.org/downloads/
- install/extract wxWidgets to one of these locations:
- <cygwin>/opt/local/pgm/wxMSW-2.8.10
- c:\\Program Files\\wxWidgets-2.8.10
Reminder:
- at this point the configure script only checks for versions 2.8.*
- edit <wxWidgets dir>/include/wx/msw/setup.h and enable:
- wxUSE_GRAPHICS_CONTEXT
- wxUSE_GLCANVAS
- wxUSE_POSTSCRIPT
- open <wxWidgets dir>/build/msw/wx.dsw
- let VC convert the projects
- build the "Unicode Release" and "Unicode Debug" configurations
- open <wxWidgets dir>/contrib/build/stc/stc.dsw
- let VC convert the projects
- build the "Unicode Release" and "Unicode Debug" configurations
A big thanks to Dan Gudmundsson on this one. :)
#####################################################
7) Get and unpack the erlang source distribution with Cygwin's tar.
-> Unpacked using 7zip to:
c:/otp_src_R13B02-1
#####################################################
8) set ERL_TOP to where you unpacked the source distribution
$ export ERL_TOP=/c/otp_src_R13B02-1
$ cd $ERL_TOP
#####################################################
9) Create a script to modify the PATH and other environment variables
so that the VC compiler is accessible from the shell.
- I followed this suggestion:
http://www.cygwin.com/ml/cygwin/2008-05/msg00322.html
And adapted the values to match Visual C++ 2008 SP1 Express Edition
current bindings. Check C:\MSVC9.0\Common7\Tools\vsvars32.bat
to see if there are any changes on your machine.
- create a vcshell script under the c:/cygwin/bin folder
containing the following commands:
#!/bin/sh
# This file mimics the environment setup done by
# C:\MSVC9.0\Common7\Tools\vsvars32.bat
# Change these to match your installation paths
VCROOT="c:\MSVC9.0"
VCDIR="$VCROOT\VC"
COMDIR="$VCROOT\Common7"
WSDKDIR="c:\Program Files\Microsoft SDKs\Windows\v6.0A"
DOTNET="c:\WINDOWS\Microsoft.NET\Framework"
# Lib and INCLUDE should be Windows'ish
# Note that semicolon (;) is used to separate Windows style paths but
# colon (:) to separate Cygwin ditto!
INCLUDE="$VCDIR\include;$WSDKDIR\include"
LIB="$VCDIR\lib;$WSDKDIR\lib"
LIBPATH="$DOTNET\v3.5;$DOTNET\v2.0.50727;$VCDIR\lib"
# The PATH variable should be Cygwin'ish
# BUT we'll leave the PATH sanitation to the
# eval `./otp_build env_win32`
# build step.
PATH="$WSDKDIR\bin:$PATH"
PATH="$COMDIR\IDE:$PATH"
PATH="$VCDIR\bin:$PATH"
PATH="$COMDIR\Tools:$PATH"
PATH="$COMDIR\Tools/bin:$PATH"
PATH="$DOTNET\v3.5:$DOTNET\v2.0.50727:$PATH"
PATH="$VCDIR\vcPackages:$PATH"
export INCLUDE LIB LIBPATH PATH
echo "Say 'exit' to leave the VC2008 shell and restore Cygwin environment."
/usr/bin/bash --rcfile ~/.vcvars9rc
- create a ~/.vcvars9rc file containing:
PS1='VC2008: \W \$ '
#####################################################
10) Enter the VC2008 shell
$ vcshell
Say 'exit' to leave VC2008 shell and restore Cygwin environment.
VC2008: otp_src_R13B02-1 $
(from now on all commands are assumed to be run inside this subshell)
#####################################################
11) Setup the environment for building under windows:
$ eval `./otp_build env_win32`
#####################################################
12) Check if the PATH to VC's tools are correct
and that none of them contain spaces
(the vcshell script should have taken care of that)
$ which cl
/c/MSVC9.0/VC/bin/cl
$ which link
/c/MSVC9.0/VC/bin/link
$ which mt
/c/PROGRA~1/MICROS~2/Windows/v6.0A/bin/mt
# which rc
/c/PROGRA~1/MICROS~2/Windows/v6.0A/bin/rc
$ which mc
/c/MSVC9.0/VC/bin/mc
(check step 2 for this last one)
- if any of the binaries is missing there's no point in going any further.
Just go back to the previous step and fix the PATH!
#####################################################
13) Check if the java compiler can be found (complement to step 3)
$ which javac
/c/PROGRA~1/Java/JDK16~1.0_1/bin/javac
#####################################################
14) Make sure that the directory specified by the TMP environment variable
exists and has write permissions (otherwise compilation will fail).
$ echo $TMP
/c/DOCUME~1/Monkey/LOCALS~1/Temp
$ touch $TMP/test && ls $TMP/test
/c/DOCUME~1/Monkey/LOCALS~1/Temp/test
- if case that fails this is sure to work:
$ export TMP=/tmp
#####################################################
15) Set log files for the various scripts that run during the build process:
$ export CC_SH_DEBUG_LOG=/c/otp_src_R13B02-1/cc.log
$ export LD_SH_DEBUG_LOG=/c/otp_src_R13B02-1/ld.log
$ export RC_SH_DEBUG_LOG=/c/otp_src_R13B02-1/rc.log
$ export MD_SH_DEBUG_LOG=/c/otp_src_R13B02-1/md.log
$ export MC_SH_DEBUG_LOG=/c/otp_src_R13B02-1/mc.log
This is really useful when things go wrong! :)
#####################################################
16) Run autoconf to update the configure files
$ ./otp_build autoconf
***************************************************
***************************************************
*** WARNING: System might fail to configure or
*** might be erroneously configured
*** since autoconf version 2.64 is used
*** instead of version 2.59!
***************************************************
***************************************************
=== running autoconf in lib
configure.in:35: warning: AC_CONFIG_SUBDIRS: you should use literals
/usr/src/packages/autoconf/26/autoconf2.5-2.64-1/src/autoconf-2.64/lib/autoconf/status.m4:1111: AC_CONFIG_SUBDIRS is expanded from...
configure.in:35: the top level
=== running autoconf in lib/common_test
=== running autoconf in lib/erl_interface
=== running autoconf in lib/gs
=== running autoconf in lib/megaco
=== running autoconf in lib/odbc
=== running autoconf in lib/snmp
=== running autoconf in lib/wx
=== running autoconf in erts
/usr/bin/m4: cannot remove temporary directory /tmp/m4-rUNfpj: Directory not empty
autom4te-2.64: /usr/bin/m4 failed with exit status: 1
#####################################################
17) Run the configure script
$ ./otp_build configure [--with-ssl=<OpenSSL directory>]
#####################################################
18) Build a complete OTP system
$ ./otp_build boot -a
From README.win32:
This uses the bootstrap directory (shipped with the source,
$ERL_TOP/bootstrap) to build a complete OTP system. It first
builds an emulator and sets up a minimal OTP system under
$ERL_TOP/bootstrap, then starts to compile the different OTP
compilers to make the $ERL_TOP/bootstrap system potent enough
to be able to compile all Erlang code in OTP. Then, all Erlang and
C code under $ERL_TOP/lib is built using the bootstrap system,
giving a complete OTP system (although not installed). When this
is done, one can run Erlang from within the source tree, just type
$ERL_TOP/bin/erl and you should have a prompt. If you omit the
-a flag, you'll get a smaller system, that might be useful during
development.
#####################################################
19) Build an erlang release
$ ./otp_build release -a
If you applied all the patches there should be no errors.
But if there are... let me know and I'll see if I can help.
From README.win32:
Builds a commercial release tree from the source tree, default is
to put it in $ERL_TOP/release/win32, you can give any directory
as parameter (Cygwin style), but it doesn't really matter if you're
going to build a self extracting installer too. You could of course
build release to the final directory and then run ./Install.exe
standing in the directory where the release was put, that will
create a fully functional OTP installation.
#####################################################
20) Create the installer
- Get and install NSIS 2.45
- http://nsis.sourceforge.net/Download
- Add makensis.exe to the $PATH
$ export PATH="/c/Progra~1/NSIS:$PATH"
- Create the self extracting installer executable
$ ./otp_build installer_win32
make RELEASE_PATH=/c/otp_src_R13B02-1/release/win32 \
release_spec
Failed to locate vcredist_x86.exe because directory structure was unexpected
Failed to locate vcredist_x86.exe because directory structure was unexpected
make[1]: Entering directory `/c/otp_src_R13B02-1/erts/etc/win32/nsis'
Running makensis /V2 erlang20.nsi
Processed 1 file, writing output:
Output: "c:\OTP_SR~2\release\win32\otp_win32_R13B02.exe"
Install: 5 pages (320 bytes), 4 sections (1 required) (4192 bytes), 5469 instructions (153132 bytes), 5114 strings (107194 bytes), 1 language table (326 bytes).
Uninstall: 3 pages (192 bytes),
1 section (1048 bytes), 78 instructions (2184 bytes), 98 strings (1583 bytes), 1 language table (250 bytes).
Datablock optimizer saved 146899 bytes (~0.3%).
Using bzip2 compression.
EXE header size: 35840 / 34816 bytes
Install code: 61047 / 265540 bytes
Install data: 48303191 / 112543769 bytes
Uninstall code+data: 2056 / 2454 bytes
CRC (0x23DCEC82): 4 / 4 bytes
Total size: 48402138 / 112846583 bytes (42.8%)
make[1]: Leaving directory `/c/otp_src_R13B02-1/erts/etc/win32/nsis'
Et voilá!
From README.win32:
The executable otp_win32_<OTP version>.exe will be placed in
the top directory of the release created in the previous step.
If no release directory is specified, the release is expected to
have been built to $ERL_TOP/release/win32, which also will be
the place where the installer executable will be placed. If you
specified some other directory for the release (i.e. ./otp_build
release -a /tmp/erl_release), you're expected to give the same
parameter here, (i.e. ./otp_build installer_win32 /tmp/erl_release).
You need to have a full NSIS installation and makensis.exe in your
path for this to work of course. Once you have created the installer,
you can run it to install Erlang/OTP in the regular way, just run the
executable and follow the steps in the installation wizard. To get all
default settings in the installation without any questions asked, you
run the executable with the parameter "/S" (capital S). like in:
------------------------------------------------------
$ cd $ERL_TOP
$ release/win32/otp_win32_R9C /S
.....
------------------------------------------------------
- and after a while Erlang will have been installed in
C:\Program Files\erl5.5, with shortcuts in the menu etc.
*NOTE* Beginning with R9C, the Windows installer does *not* add
Erlang to the system wide path. If one wants to have Erlang in the
path, one has to add it by hand.
The necessary setup of an Erlang installation is actually done by the
program Install.exe, which resides in the release top. That program
creates ".ini-files" and copies the correct boot scripts. If one has
the correct directory tree (like after a ./otp_build release -a), only
the running of Install.exe is necessary to get a fully functional
OTP. What the self extracting installer adds is (of course) the
possibility to distribute the binary easily, together with adding
shortcuts to the Windows start menu. There is also some adding of
entries in the registry, to associate .erl and .beam files with Erlang
and get nifty icons, but that's not something you'll really need to
run Erlang. The registry is also used to store uninstall information,
but if one has not used the self extracting installer, one cannot
(need not) do any uninstall, one just scratches the release directory
and everything is gone. Erlang/OTP R9C does not *need* to put
anything in the Windows registry at all, and does not if you don't
use the self extracting installer. In other words the installer is pure
cosmetics :-)
#####################################################