0

「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

直し方?

4

1 に答える 1