178 lines
6.4 KiB
Cheetah
178 lines
6.4 KiB
Cheetah
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 -----------------------------------------------------
|