[class-init] Allow ghc_slot or finalize_slot == 0
[mono-project.git] / msvc / winsetup.bat
blob44442f06d8c95ad754731189548641f0fe8b46f3
1 @ECHO off
2 SetLocal
4 SET CONFIG_H="%~dp0..\config.h"
5 SET CYG_CONFIG_H="%~dp0..\cygconfig.h"
6 SET WIN_CONFIG_H="%~dp0..\winconfig.h"
7 SET CONFIGURE_AC="%~dp0..\configure.ac"
8 SET VERSION_H="%~dp0..\mono\mini\version.h"
9 SET OPTIONAL_DEFINES=%~1
11 ECHO Setting up Mono configuration headers...
13 :: generate unique temp file path
14 uuidgen > nul 2>&1 || goto no_uuidgen
15 for /f %%a in ('uuidgen') do set CONFIG_H_TEMP=%%a
16 goto :got_temp
18 :no_uuidgen
19 :: Random isn't very random or unique. %time% and %date% is not random but fairly unique.
20 set CONFIG_H_TEMP=%~n0%random%%time%%date%
22 :got_temp
23 :: Remove special characters.
24 set CONFIG_H_TEMP=%CONFIG_H_TEMP:-=%
25 set CONFIG_H_TEMP=%CONFIG_H_TEMP:\=%
26 set CONFIG_H_TEMP=%CONFIG_H_TEMP:/=%
27 set CONFIG_H_TEMP=%CONFIG_H_TEMP::=%
28 set CONFIG_H_TEMP=%CONFIG_H_TEMP: =%
29 set CONFIG_H_TEMP=%CONFIG_H_TEMP:.=%
30 set CONFIG_H_TEMP=%temp%\CONFIG_H_TEMP%CONFIG_H_TEMP%
31 mkdir "%CONFIG_H_TEMP%\.." 2>nul
32 set CONFIG_H_TEMP="%CONFIG_H_TEMP%"
34 REM Backup existing config.h into cygconfig.h if its not already replaced.
35 if exist %CONFIG_H% (
36         findstr /i /r /c:"#include *\"cygconfig.h\"" %CONFIG_H% >nul || copy /y %CONFIG_h% %CYG_CONFIG_H%
39 :: Extract MONO_VERSION from configure.ac.
40 for /f "delims=[] tokens=2" %%a in ('findstr /b /c:"AC_INIT(mono, [" %CONFIGURE_AC%') do (
41         set MONO_VERSION=%%a
44 :: Split MONO_VERSION into three parts.
45 for /f "delims=. tokens=1-3" %%a in ('echo %MONO_VERSION%') do (
46         set MONO_VERSION_MAJOR=%%a
47         set MONO_VERSION_MINOR=%%b
48         set MONO_VERSION_PATCH=%%c
50 :: configure.ac hardcodes this.
51 set MONO_VERSION_PATCH=00
53 :: Extract MONO_CORLIB_VERSION from configure.ac.
54 for /f "tokens=*" %%a in ('findstr /b /c:MONO_CORLIB_VERSION= %CONFIGURE_AC%') do set %%a
56 :: Pad out version pieces to 2 characters with zeros on left.
57 if "%MONO_VERSION_MAJOR:~1%" == "" set MONO_VERSION_MAJOR=0%MONO_VERSION_MAJOR%
58 if "%MONO_VERSION_MINOR:~1%" == "" set MONO_VERSION_MINOR=0%MONO_VERSION_MINOR%
60 :: Remove every define VERSION from winconfig.h and add what we want.
61 findstr /v /b /i /c:"#define PACKAGE_VERSION " /c:"#define VERSION " /c:"#define MONO_CORLIB_VERSION " %WIN_CONFIG_H% > %CONFIG_H_TEMP%
63 : Setup dynamic section of config.h
64 echo #ifdef _MSC_VER >> %CONFIG_H_TEMP%
65 echo #define PACKAGE_VERSION "%MONO_VERSION%" >> %CONFIG_H_TEMP%
66 echo #define VERSION "%MONO_VERSION%" >> %CONFIG_H_TEMP%
67 echo #define MONO_CORLIB_VERSION "%MONO_CORLIB_VERSION%" >> %CONFIG_H_TEMP%
69 :: Add dynamic configuration parameters affecting msvc build.
70 for %%a in (%OPTIONAL_DEFINES%) do (
71         echo #ifndef %%a >> %CONFIG_H_TEMP%
72         echo #define %%a 1 >> %CONFIG_H_TEMP%
73         echo #endif >> %CONFIG_H_TEMP%
76 echo #endif >> %CONFIG_H_TEMP%
78 echo #if defined(ENABLE_LLVM) ^&^& defined(HOST_WIN32) ^&^& defined(TARGET_WIN32) ^&^& (!defined(TARGET_AMD64) ^|^| !defined(_MSC_VER)) >> %CONFIG_H_TEMP%
79 echo #error LLVM for host=Windows and target=Windows is only supported on x64 MSVC build. >> %CONFIG_H_TEMP%
80 echo #endif >> %CONFIG_H_TEMP%
82 :: If the file is different, replace it.
83 fc %CONFIG_H_TEMP% %CONFIG_H% >nul 2>&1 || move /y %CONFIG_H_TEMP% %CONFIG_H%
84 del %CONFIG_H_TEMP% 2>nul
86 echo #define FULL_VERSION "Visual Studio built mono" > %CONFIG_H_TEMP%
87 fc %CONFIG_H_TEMP% %VERSION_H% >nul 2>&1 || move /y %CONFIG_H_TEMP% %VERSION_H%
88 del %CONFIG_H_TEMP% 2>nul
90 :: Log environment variables that start "mono".
91 set MONO
93 ECHO Successfully setup Mono configuration headers.
94 EXIT /b 0