blob: 79cf0e3396af8265cf2bbc35add21938e6c476d9 [file] [log] [blame]
REM /*
REM * Licensed to the Apache Software Foundation (ASF) under one
REM * or more contributor license agreements. See the NOTICE file
REM * distributed with this work for additional information
REM * regarding copyright ownership. The ASF licenses this file
REM * to you under the Apache License, Version 2.0 (the
REM * "License"); you may not use this file except in compliance
REM * with the License. You may obtain a copy of the License at
REM *
REM * http://www.apache.org/licenses/LICENSE-2.0
REM *
REM * Unless required by applicable law or agreed to in writing,
REM * software distributed under the License is distributed on an
REM * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
REM * KIND, either express or implied. See the License for the
REM * specific language governing permissions and limitations
REM * under the License.
REM */
@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 init logfile
echo Errors > "%LOGFILE%"
echo ---------------- >> "%LOGFILE%"
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:register_types,constprefix,events,xmldoc "%%a" 2>> "%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.MD
cmd /c start notepad %0
pause
GOTO EOF
REM -----------------------------------------------------
:CONFIG_ERROR
REM -----------------------------------------------------
echo Missing, incomplete or wrong configuration settings!
cmd /c start notepad README.MD
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 -----------------------------------------------------