「rpmbuild.bat」以下のスクリプトをデバッグします。注: バグが含まれており、完全ではありません。これはコマンドラインです:
rpmbuild.bat -bb --target "noarch-pc-windows 7" --buildroot D:\MyPath\MyApp\buildroot --define "_topdir D:\MyPath\MyApp" MyApp.spec
アイデアは、上記の「.bat」cmd パラメーターを取得し、それらを変更して (cygwin 経由で) 同じ名前の UNIX ツール (rpmbuild) にリダイレクトすることです。したがって、次のようになります。
bash -c "rpmbuild -bb --target ""noarch-pc-windows 7"" --buildroot /cygdrive/d/MyPath/MyApp/buildroot --define ""_topdir /cygdrive/d/MyPath/MyApp"" MyApp.spec"
パスを適切な方法で変換するために、ユーティリティcygpathがあります。
以下はrpmbuild.batのソースです。ただし、ここで提案されているように、文字列比較を使用して行でコンパイルに失敗します
SETLOCAL EnableExtensions EnableDelayedExpansion
PUSHD .
SET PARAM_COUNT = 0
FOR %%P IN (%*) DO (
SET /A PARAM_COUNT += 1
SET PARAMS[PARAM_COUNT] = %%P
IF PARAM_COUNT GTR 1 IF PARAMS[PARAM_COUNT-1]=="--buildroot" (
REM Update buildroot path with cygwin path
FOR /F "tokens=*" %%i in ('cygpath %%P') do SET PARAMS[PARAM_COUNT]=%%i
)
REM string comparison for TOPDIR
SET str1 = %%P
IF NOT x%str1:_topdir=%==x%str1% (
REM Update topdir path
SET TOPDIR=%%P
SET TOPDIR=%TOPDIR:~9,-1%
FOR /F "tokens=*" %%i in ('cygpath "%TOPDIR%"') do SET NEW_TOPDIR=%%i
SET PARAMS[PARAM_COUNT] = "_topdir %NEW_TOPDIR"
)
REM string comparison for .spec
IF NOT x%str1:.spec=%==x%str1% (
REM Replace path in spec-file
SET OLD_PATH=%TOPDIR:\=\\%
SET NEW_PATH=%NEW_TOPDIR:/=\/%
sed -s -i -e s/%OLD_PATH%\\/%NEW_PATH%\//g %%P
)
)
REM construct new rpmbuild command in cygwin
SET RPMBUILD_COMMAND = bash -c "rpmbuild
FOR /L %%i IN (1,1,PARAM_COUNT) DO SET RPMBUILD_COMMAND=!RPMBUILD_COMMAND! %%i
SET RPMBUILD_COMMAND=!RPMBUILD_COMMAND!"
REM Execute rpmbuild
%RPMBUILD_COMMAND
POPD
ENDLOCAL
直し方?