Add support for LLVM integrated build as part of Visual Studio solution
[mono-project.git] / msvc / winsetup.bat
blobaff095a122c0aa24ebcf529b73f746c4f8af1edf
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 findstr /i /r /c:"#include *\"cygconfig.h\"" %CONFIG_H% >nul || copy /y %CONFIG_h% %CYG_CONFIG_H%
37 :: Extract MONO_VERSION from configure.ac.
38 for /f "delims=[] tokens=2" %%a in ('findstr /b /c:"AC_INIT(mono, [" %CONFIGURE_AC%') do (
39         set MONO_VERSION=%%a
42 :: Split MONO_VERSION into three parts.
43 for /f "delims=. tokens=1-3" %%a in ('echo %MONO_VERSION%') do (
44         set MONO_VERSION_MAJOR=%%a
45         set MONO_VERSION_MINOR=%%b
46         set MONO_VERSION_PATCH=%%c
48 :: configure.ac hardcodes this.
49 set MONO_VERSION_PATCH=00
51 :: Extract MONO_CORLIB_VERSION from configure.ac.
52 for /f "tokens=*" %%a in ('findstr /b /c:MONO_CORLIB_VERSION= %CONFIGURE_AC%') do set %%a
54 :: Pad out version pieces to 2 characters with zeros on left.
55 if "%MONO_VERSION_MAJOR:~1%" == "" set MONO_VERSION_MAJOR=0%MONO_VERSION_MAJOR%
56 if "%MONO_VERSION_MINOR:~1%" == "" set MONO_VERSION_MINOR=0%MONO_VERSION_MINOR%
58 :: Remove every define VERSION from winconfig.h and add what we want.
59 findstr /v /b /i /c:"#define PACKAGE_VERSION " /c:"#define VERSION " /c:"#define MONO_CORLIB_VERSION " %WIN_CONFIG_H% > %CONFIG_H_TEMP%
61 : Setup dynamic section of config.h
62 echo #ifdef _MSC_VER >> %CONFIG_H_TEMP%
63 echo #define PACKAGE_VERSION "%MONO_VERSION%" >> %CONFIG_H_TEMP%
64 echo #define VERSION "%MONO_VERSION%" >> %CONFIG_H_TEMP%
65 echo #define MONO_CORLIB_VERSION "%MONO_CORLIB_VERSION%" >> %CONFIG_H_TEMP%
67 :: Add dynamic configuration parameters affecting msvc build.
68 for %%a in (%OPTIONAL_DEFINES%) do (
69         echo #ifndef %%a >> %CONFIG_H_TEMP%
70         echo #define %%a 1 >> %CONFIG_H_TEMP%
71         echo #endif >> %CONFIG_H_TEMP%
74 echo #endif >> %CONFIG_H_TEMP%
76 :: If the file is different, replace it.
77 fc %CONFIG_H_TEMP% %CONFIG_H% >nul 2>&1 || move /y %CONFIG_H_TEMP% %CONFIG_H%
78 del %CONFIG_H_TEMP% 2>nul
80 echo #define FULL_VERSION "Visual Studio built mono" > %CONFIG_H_TEMP%
81 fc %CONFIG_H_TEMP% %VERSION_H% >nul 2>&1 || move /y %CONFIG_H_TEMP% %VERSION_H%
82 del %CONFIG_H_TEMP% 2>nul
84 :: Log environment variables that start "mono".
85 set MONO
87 ECHO Successfully setup Mono configuration headers.
88 EXIT /b 0