blob: 8d25eaee82d634d35075e18ba6470ebe8ab43144 [file] [log] [blame]
@echo off
if ""=="%1" goto CONFIG
goto HANDLEDIR
REM -----------------------------------------------------
:CONFIG
REM -----------------------------------------------------
rem * CONFIGURATION BEGIN
rem * configuration settings, adjust as necessary to meet your system setup
set SVNWORKDIR=
set MY_THRIFT_FILES=
set BIN=C:\MSys10\local\bin
set MINGW_BIN=C:\MinGW\bin
set DCC=
set SUBDIR=gen-delphi
rem * CONFIGURATION END
REM -----------------------------------------------------
:START
REM -----------------------------------------------------
rem * configured?
if "%SVNWORKDIR%"=="" goto CONFIG_ERROR
rem * try to find dcc32.exe
echo Looking for dcc32.exe ...
if not exist "%DCC%" set DCC=%ProgramFiles%\Embarcadero\RAD Studio\8.0\bin\dcc32.exe
if not exist "%DCC%" set DCC=%ProgramFiles(x86)%\Embarcadero\RAD Studio\8.0\bin\dcc32.exe
if not exist "%DCC%" goto CONFIG_ERROR
echo Found %DCC%
echo.
rem * some helpers
set PATH=%BIN%;%MINGW_BIN%;%PATH%
set TARGET=%SVNWORKDIR%\..\thrift-testing
set SOURCE=%SVNWORKDIR%
set TESTAPP=TestProject
set UNITSEARCH=%SOURCE%\lib\pas\src;%SOURCE%\lib\delphi\src
set OUTDCU="%TARGET%\dcu"
set LOGFILE=%TARGET%\%SUBDIR%\codegen.log
rem * create and/or empty target dirs
if not exist "%TARGET%" md "%TARGET%"
if not exist "%TARGET%\%SUBDIR%" md "%TARGET%\%SUBDIR%"
if not exist "%OUTDCU%" md "%OUTDCU%"
if exist "%TARGET%\*.thrift" del "%TARGET%\*.thrift" /Q
if exist "%TARGET%\%SUBDIR%\*.*" del "%TARGET%\%SUBDIR%\*.*" /Q
if exist "%OUTDCU%\*.*" del "%OUTDCU%\*.*" /Q
rem * recurse through thrift WC and "my thrift files" folder
rem * copies all .thrift files into thrift-testing
call %0 %SOURCE%
if not "%MY_THRIFT_FILES%"=="" call %0 %MY_THRIFT_FILES%
rem * compile all thrift files, generate PAS and C++ code
echo.
echo Generating code, please wait ...
cd "%TARGET%"
for %%a in (*.thrift) do "%BIN%\thrift.exe" -v --gen delphi:ansistr_binary "%%a" >> "%LOGFILE%"
REM * for %%a in (*.thrift) do "%BIN%\thrift.exe" -v --gen cpp "%%a" >> NUL:
cmd /c start notepad "%LOGFILE%"
cd ..
rem * check for special Delphi testcases being processed
if not exist "%TARGET%\%SUBDIR%\ReservedKeywords.pas" goto TESTCASE_MISSING
rem * generate a minimal DPR file that uses all generated pascal units
cd "%TARGET%\%SUBDIR%\"
if exist inherited.* ren inherited.* _inherited.*
echo program %TESTAPP%; > %TESTAPP%.dpr
echo {$APPTYPE CONSOLE} >> %TESTAPP%.dpr
echo. >> %TESTAPP%.dpr
echo uses >> %TESTAPP%.dpr
for %%a in (*.pas) do echo %%~na, >> %TESTAPP%.dpr
echo Windows, Classes, SysUtils; >> %TESTAPP%.dpr
echo. >> %TESTAPP%.dpr
echo begin >> %TESTAPP%.dpr
echo Writeln('Successfully compiled!'); >> %TESTAPP%.dpr
echo Writeln('List of units:'); >> %TESTAPP%.dpr
for %%a in (*.pas) do echo Write('%%~na':30,'':10); >> %TESTAPP%.dpr
echo Writeln; >> %TESTAPP%.dpr
echo end. >> %TESTAPP%.dpr
echo. >> %TESTAPP%.dpr
cd ..\..
rem * try to compile the DPR
rem * this should not throw any errors, warnings or hints
"%DCC%" -B "%TARGET%\%SUBDIR%\%TESTAPP%" -U"%UNITSEARCH%" -I"%UNITSEARCH%" -N"%OUTDCU%" -E"%TARGET%\%SUBDIR%"
dir "%TARGET%\%SUBDIR%\%TESTAPP%.exe"
if not exist "%TARGET%\%SUBDIR%\%TESTAPP%.exe" goto CODEGEN_FAILED
echo.
echo -----------------------------------------------------------------
echo The compiled program is now executed. If it hangs or crashes, we
echo have a serious problem with the generated code. Expected output
echo is "Successfully compiled:" followed by a list of generated units.
echo -----------------------------------------------------------------
"%TARGET%\%SUBDIR%\%TESTAPP%.exe"
echo -----------------------------------------------------------------
echo.
pause
GOTO EOF
REM -----------------------------------------------------
:DXE_NOT_FOUND
REM -----------------------------------------------------
echo Delphi Compiler (dcc32.exe) not found.
echo Please check the "DCC" setting in this batch.
echo.
cmd /c start notepad README.TXT
cmd /c start notepad %0
pause
GOTO EOF
REM -----------------------------------------------------
:CONFIG_ERROR
REM -----------------------------------------------------
echo Missing, incomplete or wrong configuration settings!
cmd /c start notepad README.TXT
cmd /c start notepad %0
pause
GOTO EOF
REM -----------------------------------------------------
:TESTCASE_MISSING
REM -----------------------------------------------------
echo Missing an expected Delphi testcase!
pause
GOTO EOF
REM -----------------------------------------------------
:CODEGEN_FAILED
REM -----------------------------------------------------
echo Code generation FAILED!
pause
GOTO EOF
REM -----------------------------------------------------
:HANDLEDIR
REM -----------------------------------------------------
REM echo %1
for /D %%a in (%1\*) do call %0 %%a
if exist "%1\*.thrift" copy /b "%1\*.thrift" "%TARGET%\*.*"
GOTO EOF
REM -----------------------------------------------------
:EOF
REM -----------------------------------------------------