2 rem ----------------------------------------------------------------------
\r
3 rem Configuration script for MS Windows 95/98/Me and NT/2000/XP
\r
4 rem Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005,
\r
5 rem 2006, 2007, 2008 Free Software Foundation, Inc.
\r
7 rem This file is part of GNU Emacs.
\r
9 rem GNU Emacs is free software: you can redistribute it and/or modify
\r
10 rem it under the terms of the GNU General Public License as published by
\r
11 rem the Free Software Foundation, either version 3 of the License, or
\r
12 rem (at your option) any later version.
\r
14 rem GNU Emacs is distributed in the hope that it will be useful,
\r
15 rem but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
16 rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
17 rem GNU General Public License for more details.
\r
19 rem You should have received a copy of the GNU General Public License
\r
20 rem along with GNU Emacs. If not, see http://www.gnu.org/licenses/.
\r
22 rem ----------------------------------------------------------------------
\r
23 rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
\r
25 rem + MS Windows 95/98/Me or NT/2000/XP
\r
26 rem + either MSVC 2.x or later, or gcc-2.95 or later (with GNU make 3.75
\r
27 rem or later) and the Mingw32 and W32 API headers and libraries.
\r
28 rem + Visual Studio 2005 is not supported at this time.
\r
30 rem For reference, here is a list of which builds of GNU make are known to
\r
31 rem work or not, and whether they work in the presence and/or absence of
\r
35 rem cygwin b20.1 make (3.75): fails[1,5] fails[2,5]
\r
36 rem MSVC compiled gmake 3.77: okay okay
\r
37 rem MSVC compiled gmake 3.78.1: okay okay
\r
38 rem MSVC compiled gmake 3.79.1: okay okay
\r
39 rem mingw32/gcc-2.92.2 make (3.77): okay okay[4]
\r
40 rem cygwin compiled gmake 3.77: fails[1,5] fails[2,5]
\r
41 rem cygwin compiled gmake 3.78.1: fails[5] fails[2,5]
\r
42 rem cygwin compiled gmake 3.79.1: fails[3,5] fails[2?,5]
\r
43 rem cygwin compiled make 3.80: okay[6] fails?[7]
\r
44 rem cygwin compiled make 3.81: fails fails?[7]
\r
45 rem mingw32 compiled make 3.79.1: okay okay
\r
46 rem mingw32 compiled make 3.80: okay okay?[7]
\r
47 rem mingw32 compiled make 3.81: okay okay[8]
\r
49 rem [1] doesn't cope with makefiles with DOS line endings, so must mount
\r
50 rem emacs source with text!=binary.
\r
51 rem [2] fails when needs to invoke shell commands; okay invoking gcc etc.
\r
52 rem [3] requires LC_MESSAGES support to build; cannot build with early
\r
53 rem versions of cygwin.
\r
54 rem [4] may fail on Windows 9X and Windows ME; if so, install Bash.
\r
55 rem [5] fails when building leim due to the use of cygwin style paths.
\r
56 rem May work if building emacs without leim.
\r
57 rem [6] need to uncomment 3 lines in nt/gmake.defs that invoke `cygpath';
\r
58 rem look for "cygpath" near line 85 of gmake.defs.
\r
59 rem [7] not recommended; please report if you try this combination.
\r
60 rem [8] tested only on Windows XP.
\r
63 if exist config.log del config.log
\r
65 rem ----------------------------------------------------------------------
\r
66 rem See if the environment is large enough. We need 43 (?) bytes.
\r
67 set $foo$=123456789_123456789_123456789_123456789_123
\r
68 if not "%$foo$%" == "123456789_123456789_123456789_123456789_123" goto SmallEnv
\r
71 rem ----------------------------------------------------------------------
\r
72 rem Make sure we are running in the nt subdir
\r
73 if exist configure.bat goto start
\r
74 echo You must run configure from the nt subdirectory.
\r
78 rem ----------------------------------------------------------------------
\r
79 rem Default settings.
\r
93 rem ----------------------------------------------------------------------
\r
94 rem Handle arguments.
\r
96 if "%1" == "-h" goto usage
\r
97 if "%1" == "--help" goto usage
\r
98 if "%1" == "--prefix" goto setprefix
\r
99 if "%1" == "--with-gcc" goto withgcc
\r
100 if "%1" == "--with-msvc" goto withmsvc
\r
101 if "%1" == "--no-debug" goto nodebug
\r
102 if "%1" == "--no-opt" goto noopt
\r
103 if "%1" == "--profile" goto profile
\r
104 if "%1" == "--no-cygwin" goto nocygwin
\r
105 if "%1" == "--cflags" goto usercflags
\r
106 if "%1" == "--ldflags" goto userldflags
\r
107 if "%1" == "--without-png" goto withoutpng
\r
108 if "%1" == "--without-jpeg" goto withoutjpeg
\r
109 if "%1" == "--without-gif" goto withoutgif
\r
110 if "%1" == "--without-tiff" goto withouttiff
\r
111 if "%1" == "--without-xpm" goto withoutxpm
\r
112 if "%1" == "" goto checkutils
\r
114 echo Usage: configure [options]
\r
116 echo. --prefix PREFIX install Emacs in directory PREFIX
\r
117 echo. --with-gcc use GCC to compile Emacs
\r
118 echo. --with-msvc use MSVC to compile Emacs
\r
119 echo. --no-debug exclude debug info from executables
\r
120 echo. --no-opt disable optimization
\r
121 echo. --profile enable profiling
\r
122 echo. --no-cygwin use -mno-cygwin option with GCC
\r
123 echo. --cflags FLAG pass FLAG to compiler
\r
124 echo. --ldflags FLAG pass FLAG to compiler when linking
\r
125 echo. --without-png do not use PNG library even if it is installed
\r
126 echo. --without-jpeg do not use JPEG library even if it is installed
\r
127 echo. --without-gif do not use GIF library even if it is installed
\r
128 echo. --without-tiff do not use TIFF library even if it is installed
\r
129 echo. --without-xpm do not use XPM library even if it is installed
\r
131 rem ----------------------------------------------------------------------
\r
137 rem ----------------------------------------------------------------------
\r
142 rem ----------------------------------------------------------------------
\r
147 rem ----------------------------------------------------------------------
\r
152 rem ----------------------------------------------------------------------
\r
157 rem ----------------------------------------------------------------------
\r
162 rem ----------------------------------------------------------------------
\r
167 rem ----------------------------------------------------------------------
\r
170 set usercflags=%usercflags%%sep1%%1
\r
171 set sep1= %nothing%
\r
174 rem ----------------------------------------------------------------------
\r
177 set userldflags=%userldflags%%sep2%%1
\r
178 set sep2= %nothing%
\r
181 rem ----------------------------------------------------------------------
\r
189 rem ----------------------------------------------------------------------
\r
197 rem ----------------------------------------------------------------------
\r
205 rem ----------------------------------------------------------------------
\r
213 rem ----------------------------------------------------------------------
\r
221 rem ----------------------------------------------------------------------
\r
222 rem Check that necessary utilities (cp and rm) are present.
\r
224 echo Checking for 'cp'...
\r
225 cp configure.bat junk.bat
\r
226 if not exist junk.bat goto needcp
\r
227 echo Checking for 'rm'...
\r
229 if exist junk.bat goto needrm
\r
232 echo You need 'cp' (the Unix file copy program) to build Emacs.
\r
236 echo You need 'rm' (the Unix file delete program) to build Emacs.
\r
239 rem ----------------------------------------------------------------------
\r
240 rem Auto-detect compiler if not specified, and validate GCC if chosen.
\r
242 if (%COMPILER%)==(cl) goto compilercheckdone
\r
243 if (%COMPILER%)==(gcc) goto checkgcc
\r
245 echo Checking whether 'gcc' is available...
\r
246 echo main(){} >junk.c
\r
248 if exist junk.o goto checkgcc
\r
250 echo Checking whether 'cl' is available...
\r
251 cl -nologo -c junk.c
\r
252 if exist junk.obj goto clOK
\r
256 if exist junk.o del junk.o
\r
257 Rem WARNING -- COMMAND.COM on some systems only looks at the first
\r
258 Rem 8 characters of a label. So do NOT be tempted to change
\r
259 Rem chkapi* into something fancier like checkw32api
\r
260 Rem You HAVE been warned!
\r
261 if (%nocygwin%) == (Y) goto chkapiN
\r
262 echo Checking whether gcc requires '-mno-cygwin'...
\r
263 echo #include "cygwin/version.h" >junk.c
\r
264 echo main(){} >>junk.c
\r
265 echo gcc -c junk.c >>config.log
\r
266 gcc -c junk.c >>config.log 2>&1
\r
267 if not exist junk.o goto chkapi
\r
268 echo gcc -mno-cygwin -c junk.c >>config.log
\r
269 gcc -mno-cygwin -c junk.c >>config.log 2>&1
\r
270 if exist junk.o set nocygwin=Y
\r
273 echo The failed program was: >>config.log
\r
274 type junk.c >>config.log
\r
276 rm -f junk.c junk.o
\r
277 rem ----------------------------------------------------------------------
\r
278 rem Older versions of the Windows API headers either don't have any of
\r
279 rem the IMAGE_xxx definitions (the headers that come with Cygwin b20.1
\r
280 rem are like this), or have a typo in the definition of
\r
281 rem IMAGE_FIRST_SECTION (the headers with gcc/mingw32 2.95 have this
\r
282 rem problem). The gcc/mingw32 2.95.2 headers are okay, as are distros
\r
283 rem of w32api-xxx.zip from Anders Norlander since 1999-11-18 at least.
\r
284 rem Beginning with Emacs 23, we need usp10.h.
\r
286 echo Checking whether W32 API headers are too old...
\r
287 echo #include "windows.h" >junk.c
\r
288 echo #include "usp10.h" >>junk.c
\r
289 echo test(PIMAGE_NT_HEADERS pHeader) >>junk.c
\r
290 echo {PIMAGE_SECTION_HEADER pSection = IMAGE_FIRST_SECTION(pHeader);} >>junk.c
\r
291 if (%nocygwin%) == (Y) goto chkapi1
\r
292 set cf=%usercflags%
\r
295 set cf=%usercflags% -mno-cygwin
\r
300 @echo gcc %cf% -c junk.c >>config.log
\r
301 gcc %cf% -c junk.c >>config.log 2>&1
\r
303 if exist junk.o goto gccOk
\r
304 echo The failed program was: >>config.log
\r
305 type junk.c >>config.log
\r
309 echo Configure failed.
\r
310 echo To configure Emacs for Windows, you need to have either
\r
311 echo gcc-2.95 or later with Mingw32 and the W32 API headers,
\r
312 echo or MSVC 2.x or later.
\r
319 rm -f junk.c junk.o
\r
320 Rem It is not clear what GCC version began supporting -mtune
\r
321 Rem and pentium4 on x86, so check this explicitly.
\r
322 echo main(){} >junk.c
\r
323 echo gcc -c -O2 -mtune=pentium4 junk.c >>config.log
\r
324 gcc -c -O2 -mtune=pentium4 junk.c >>config.log 2>&1
\r
325 if not errorlevel 1 goto gccMtuneOk
\r
326 echo The failed program was: >>config.log
\r
327 type junk.c >>config.log
\r
329 rm -f junk.c junk.o
\r
332 echo GCC supports -mtune=pentium4 >>config.log
\r
333 set mf=-mtune=pentium4
\r
334 rm -f junk.c junk.o
\r
336 rem Check for DWARF-2 debug info support, else default to stabs
\r
337 echo main(){} >junk.c
\r
338 echo gcc -c -gdwarf-2 -g3 junk.c >>config.log
\r
339 gcc -c -gdwarf-2 -g3 junk.c >>config.log 2>&1
\r
340 if not errorlevel 1 goto gccdwarf
\r
341 echo The failed program was: >>config.log
\r
342 type junk.c >>config.log
\r
343 set dbginfo=-gstabs+
\r
344 rm -f junk.c junk.o
\r
345 goto compilercheckdone
\r
347 echo GCC supports DWARF-2 >>config.log
\r
348 set dbginfo=-gdwarf-2 -g3
\r
349 rm -f junk.c junk.o
\r
350 goto compilercheckdone
\r
354 rm -f junk.c junk.obj
\r
359 rem ----------------------------------------------------------------------
\r
360 rem Check for external image libraries. Since they are loaded
\r
361 rem dynamically, the libraries themselves do not need to be present
\r
362 rem at compile time, but the header files are required.
\r
366 if (%nocygwin%) == (N) goto flagsOK
\r
367 set mingwflag=-mno-cygwin
\r
371 if (%pngsupport%) == (N) goto pngDone
\r
373 echo Checking for libpng...
\r
374 echo #include "png.h" >junk.c
\r
375 echo main (){} >>junk.c
\r
376 rem -o option is ignored with cl, but allows result to be consistent.
\r
377 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
378 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
379 if exist junk.obj goto havePng
\r
381 echo ...png.h not found, building without PNG support.
\r
382 echo The failed program was: >>config.log
\r
383 type junk.c >>config.log
\r
388 echo ...PNG header available, building with PNG support.
\r
392 rm -f junk.c junk.obj
\r
394 if (%jpegsupport%) == (N) goto jpegDone
\r
396 echo Checking for jpeg-6b...
\r
397 echo #include "jconfig.h" >junk.c
\r
398 echo main (){} >>junk.c
\r
399 rem -o option is ignored with cl, but allows result to be consistent.
\r
400 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
401 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
402 if exist junk.obj goto haveJpeg
\r
404 echo ...jconfig.h not found, building without JPEG support.
\r
405 echo The failed program was: >>config.log
\r
406 type junk.c >>config.log
\r
411 echo ...JPEG header available, building with JPEG support.
\r
415 rm -f junk.c junk.obj
\r
417 if (%gifsupport%) == (N) goto gifDone
\r
419 echo Checking for libgif...
\r
420 echo #include "gif_lib.h" >junk.c
\r
421 echo main (){} >>junk.c
\r
422 rem -o option is ignored with cl, but allows result to be consistent.
\r
423 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
424 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
425 if exist junk.obj goto haveGif
\r
427 echo ...gif_lib.h not found, building without GIF support.
\r
428 echo The failed program was: >>config.log
\r
429 type junk.c >>config.log
\r
434 echo ...GIF header available, building with GIF support.
\r
438 rm -f junk.c junk.obj
\r
440 if (%tiffsupport%) == (N) goto tiffDone
\r
442 echo Checking for tiff...
\r
443 echo #include "tiffio.h" >junk.c
\r
444 echo main (){} >>junk.c
\r
445 rem -o option is ignored with cl, but allows result to be consistent.
\r
446 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
447 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
448 if exist junk.obj goto haveTiff
\r
450 echo ...tiffio.h not found, building without TIFF support.
\r
451 echo The failed program was: >>config.log
\r
452 type junk.c >>config.log
\r
457 echo ...TIFF header available, building with TIFF support.
\r
461 rm -f junk.c junk.obj
\r
463 if (%xpmsupport%) == (N) goto xpmDone
\r
465 echo Checking for libXpm...
\r
466 echo #define FOR_MSW 1 >junk.c
\r
467 echo #include "X11/xpm.h" >>junk.c
\r
468 echo main (){} >>junk.c
\r
469 rem -o option is ignored with cl, but allows result to be consistent.
\r
470 echo %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >>config.log
\r
471 %COMPILER% %usercflags% %mingwflag% -c junk.c -o junk.obj >junk.out 2>>config.log
\r
472 if exist junk.obj goto haveXpm
\r
474 echo ...X11/xpm.h not found, building without XPM support.
\r
475 echo The failed program was: >>config.log
\r
476 type junk.c >>config.log
\r
481 echo ...XPM header available, building with XPM support.
\r
485 rm -f junk.c junk.obj junk.err junk.out
\r
487 rem ----------------------------------------------------------------------
\r
489 echo Generating makefiles
\r
490 if %COMPILER% == gcc set MAKECMD=gmake
\r
491 if %COMPILER% == cl set MAKECMD=nmake
\r
493 rem Pass on chosen settings to makefiles.
\r
494 rem NB. Be very careful to not have a space before redirection symbols
\r
495 rem except when there is a preceding digit, when a space is required.
\r
497 echo # Start of settings from configure.bat >config.settings
\r
498 echo COMPILER=%COMPILER%>>config.settings
\r
499 if not "(%mf%)" == "()" echo MCPU_FLAG=%mf%>>config.settings
\r
500 if not "(%dbginfo%)" == "()" echo DEBUG_INFO=%dbginfo%>>config.settings
\r
501 if (%nodebug%) == (Y) echo NODEBUG=1 >>config.settings
\r
502 if (%noopt%) == (Y) echo NOOPT=1 >>config.settings
\r
503 if (%profile%) == (Y) echo PROFILE=1 >>config.settings
\r
504 if (%nocygwin%) == (Y) echo NOCYGWIN=1 >>config.settings
\r
505 if not "(%prefix%)" == "()" echo INSTALL_DIR=%prefix%>>config.settings
\r
506 rem We go thru docflags because usercflags could be "-DFOO=bar" -something
\r
507 rem and the if command cannot cope with this
\r
508 for %%v in (%usercflags%) do if not (%%v)==() set docflags=Y
\r
509 if (%docflags%)==(Y) echo USER_CFLAGS=%usercflags%>>config.settings
\r
510 for %%v in (%userldflags%) do if not (%%v)==() set doldflags=Y
\r
511 if (%doldflags%)==(Y) echo USER_LDFLAGS=%userldflags%>>config.settings
\r
512 echo # End of settings from configure.bat>>config.settings
\r
513 echo. >>config.settings
\r
515 copy config.nt config.tmp
\r
517 echo /* Start of settings from configure.bat. */ >>config.tmp
\r
518 if (%docflags%) == (Y) echo #define USER_CFLAGS " %usercflags%">>config.tmp
\r
519 if (%doldflags%) == (Y) echo #define USER_LDFLAGS " %userldflags%">>config.tmp
\r
520 if not "(%HAVE_PNG%)" == "()" echo #define HAVE_PNG 1 >>config.tmp
\r
521 if not "(%HAVE_JPEG%)" == "()" echo #define HAVE_JPEG 1 >>config.tmp
\r
522 if not "(%HAVE_GIF%)" == "()" echo #define HAVE_GIF 1 >>config.tmp
\r
523 if not "(%HAVE_TIFF%)" == "()" echo #define HAVE_TIFF 1 >>config.tmp
\r
524 if not "(%HAVE_XPM%)" == "()" echo #define HAVE_XPM 1 >>config.tmp
\r
525 echo /* End of settings from configure.bat. */ >>config.tmp
\r
527 Rem See if fc.exe returns a meaningful exit status. If it does, we
\r
528 Rem might as well avoid unnecessary overwriting of config.h and epaths.h,
\r
529 Rem since this forces recompilation of every source file.
\r
530 if exist foo.bar del foo.bar
\r
531 fc /b foo.bar foo.bar >nul 2>&1
\r
532 if not errorlevel 2 goto doCopy
\r
533 fc /b config.tmp ..\src\config.h >nul 2>&1
\r
534 if errorlevel 1 goto doCopy
\r
535 fc /b paths.h ..\src\epaths.h >nul 2>&1
\r
536 if errorlevel 0 goto dontCopy
\r
538 copy config.tmp ..\src\config.h
\r
539 copy paths.h ..\src\epaths.h
\r
542 if exist config.tmp del config.tmp
\r
543 copy /b config.settings+%MAKECMD%.defs+..\nt\makefile.w32-in ..\nt\makefile
\r
544 if exist ..\admin\unidata copy /b config.settings+%MAKECMD%.defs+..\admin\unidata\makefile.w32-in ..\admin\unidata\makefile
\r
545 copy /b config.settings+%MAKECMD%.defs+..\lib-src\makefile.w32-in ..\lib-src\makefile
\r
546 copy /b config.settings+%MAKECMD%.defs+..\src\makefile.w32-in ..\src\makefile
\r
547 copy /b config.settings+%MAKECMD%.defs+..\doc\emacs\makefile.w32-in ..\doc\emacs\makefile
\r
548 copy /b config.settings+%MAKECMD%.defs+..\doc\misc\makefile.w32-in ..\doc\misc\makefile
\r
549 copy /b config.settings+%MAKECMD%.defs+..\doc\lispref\makefile.w32-in ..\doc\lispref\makefile
\r
550 copy /b config.settings+%MAKECMD%.defs+..\doc\lispintro\makefile.w32-in ..\doc\lispintro\makefile
\r
551 if exist ..\lisp\makefile rm -f ../lisp/[Mm]akefile
\r
552 copy /b config.settings+%MAKECMD%.defs+..\lisp\makefile.w32-in ..\lisp\makefile
\r
553 rem Use the default (no-op) Makefile.in if the nt version is not present.
\r
554 if exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\makefile.w32-in ..\leim\makefile
\r
555 if not exist ..\leim\makefile.w32-in copy /b config.settings+%MAKECMD%.defs+..\leim\Makefile.in ..\leim\makefile
\r
556 del config.settings
\r
558 Rem Some people use WinZip which doesn't create empty directories!
\r
559 if not exist ..\site-lisp\nul mkdir ..\site-lisp\
\r
560 Rem Update subdirs.el only if it is different or fc.exe doesn't work.
\r
561 if exist foo.bar del foo.bar
\r
562 fc /b foo.bar foo.bar >nul 2>&1
\r
563 if not errorlevel 2 goto doUpdateSubdirs
\r
564 fc /b subdirs.el ..\site-lisp\subdirs.el >nul 2>&1
\r
565 if not errorlevel 1 goto dontUpdateSubdirs
\r
567 if exist ..\site-lisp\subdirs.el del ..\site-lisp\subdirs.el
\r
568 copy subdirs.el ..\site-lisp\subdirs.el
\r
573 rem check that we have all the libraries we need.
\r
576 if not "(%HAVE_XPM%)" == "()" goto checkpng
\r
577 if (%xpmsupport%) == (N) goto checkpng
\r
579 echo XPM support is missing. It is required for color icons in the toolbar.
\r
580 echo Install libXpm development files or use --without-xpm
\r
583 if not "(%HAVE_PNG%)" == "()" goto checkjpeg
\r
584 if (%pngsupport%) == (N) goto checkjpeg
\r
586 echo PNG support is missing.
\r
587 echo Install libpng development files or use --without-png
\r
590 if not "(%HAVE_JPEG%)" == "()" goto checktiff
\r
591 if (%jpegsupport%) == (N) goto checktiff
\r
593 echo JPEG support is missing.
\r
594 echo Install jpeg development files or use --without-jpeg
\r
597 if not "(%HAVE_TIFF%)" == "()" goto checkgif
\r
598 if (%tiffsupport%) == (N) goto checkgif
\r
600 echo TIFF support is missing.
\r
601 echo Install libtiff development files or use --without-tiff
\r
604 if not "(%HAVE_GIF%)" == "()" goto donelibchecks
\r
605 if (%gifsupport%) == (N) goto donelibchecks
\r
607 echo GIF support is missing.
\r
608 echo Install giflib or libungif development files or use --without-gif
\r
611 if (%libsOK%) == (1) goto success
\r
613 echo Important libraries are missing. Fix these issues before running make.
\r
617 echo Emacs successfully configured.
\r
618 echo Emacs successfully configured. >>config.log
\r
619 if (%MAKECMD%) == (gmake) set MAKECMD=make
\r
620 echo Run `%MAKECMD%' to build, then run `%MAKECMD% install' to install.
\r
624 echo Your environment size is too small. Please enlarge it and rerun configure.
\r
625 echo For example, type "command.com /e:2048" to have 2048 bytes available.
\r
643 arch-tag: 300d20a4-1675-4e75-b615-7ce1a8c5376c
\r