LibreOffice(18)setsdkenv_windows.batを修正する

前の関連記事:LibreOffice(17)setsdkenv_windows.bat


Windows7 64bitにLibreOffice 4.1 SDKをインストールするとパスにカッコや空白があるためにインストール後に作成するsetsdkenv_windows.batがうまく動きません。これを修正します。
(H25.2.20追記。Windows7 64bitではJavaのbootstrap()は動かないようでJavaの例はソケット接続に修正しないと動きません。詳しくはLibreOffice(27)Java-UNO Bootstrapはやめてソケット接続を使おうへ。)

パスをすべて短い名前に変換する


LibreOffice(17)setsdkenv_windows.batで行った代入式を""で囲む方法は代入式が出現する部分すべてを修正しないといけません。

もっと根本的な解決法がないものかと検討した結果、パスを8.3形式の短い名前に変換することを思いつきました。

DICOM(12)OsirixのDICOMサンプルデータのフォルダ一覧で得た知識を活用します。
for %%i in ("ロングネームのパス") do echo %%~fdspi
これでロングネームのパスをショートネームのパスに変換できます。

問題はこのコマンドをどこに組み込むかです。

setsdkenv_windows.batをみるとAutomatic deploymentのあとはそれまでの変数を利用しているだけなのでそこに以下をいれることにしました。

for %%i in ("%OO_SDK_HOME%") do set OO_SDK_HOME=%%~fdspi
for %%i in ("%OFFICE_HOME%") do set OFFICE_HOME=%%~fdspi
for %%i in ("%OO_SDK_URE_HOME%") do set OO_SDK_URE_HOME=%%~fdspi
for %%i in ("%OO_SDK_MAKE_HOME%") do set OO_SDK_MAKE_HOME=%%~fdspi
for %%i in ("%OO_SDK_CPP_HOME%") do set OO_SDK_CPP_HOME=%%~fdspi
for %%i in ("%CPP_MANIFEST%") do set CPP_MANIFEST=%%~fdspi
for %%i in ("%CPP_WINDOWS_SDK%") do set CPP_WINDOWS_SDK=%%~fdspi
for %%i in ("%OO_SDK_CLI_HOME%") do set OO_SDK_CLI_HOME=%%~fdspi
for %%i in ("%OO_SDK_JAVA_HOME%") do set OO_SDK_JAVA_HOME=%%~fdspi
for %%i in ("%OO_SDK_OUT%") do set OO_SDK_OUT=%%~fdspi
for %%i in ("%CPP_WINDOWS_SDK%") do set CPP_WINDOWS_SDK=%%~fdspi

これを入れても環境変数PATHに空白やカッコが含まれておりまだエラーがでます。

そこで環境変数PATHを短い名前の形式に変換するをします。

ついでにsetlocal~endlocalの外に変数をたくさん持ち出すでやったようにsetsdkenv_windows.batの変数もスマートに変換します。

これらをまとめて整理したのが以下。
set LF=^


set OO_PATH=OO_SDK_HOME;OFFICE_HOME;OO_SDK_URE_HOME;OO_SDK_MAKE_HOME;OO_SDK_ZIP_HOME;OO_SDK_CPP_HOME;CPP_MANIFEST;CPP_WINDOWS_SDK;OO_SDK_CLI_HOME;OO_SDK_JAVA_HOME;OO_SDK_OUT
set OO_PATH=%OO_PATH:;=!LF!%
set PATH=%PATH:;=!LF!%
setlocal enabledelayedexpansion
  for /f "delims=" %%i in ("%PATH%") do set PATH1=!PATH1!%%~fdsi;
  set PATH1=%PATH1:~0,-1%
  for /f "delims=" %%i in ("%OO_PATH%") do for %%j in ("!%%i!") do set OO_PATH1=!OO_PATH1!%%i,%%~fdsj;
  set OO_PATH1=%OO_PATH1:~0,-1%
endlocal & set PATH=%PATH1% & set OO_PATH=%OO_PATH1%
set OO_PATH=%OO_PATH:;=!LF!%
setlocal enabledelayedexpansion
  for /f "tokens=1,2 delims=," %%i in ("%OO_PATH%") do endlocal & set %%i=%%j
setsdkenv_windows.batに直接入れるとsetsdkenv_windows.batを作り直すたびに入れないといけないのでcfgWin.jsに入れます。
"REM Automatic deployment\n" +
"REM Example: set SDK_AUTO_DEPLOYMENT=YES\n" +
"set SDK_AUTO_DEPLOYMENT=" + sdk_auto_deployment +
"\n\n" +
cfgWin.jsのこのあとの785行目に以下をいれます。

cfgWin.jsはJScriptというJavaScriptとほぼ同じ言語で書いてあるので"は\"と書き換えてあります。
"set LF=^\n" +
"\n" +
"\n" +
"set OO_PATH=OO_SDK_HOME;OFFICE_HOME;OO_SDK_URE_HOME;OO_SDK_MAKE_HOME;OO_SDK_ZIP_HOME;OO_SDK_CPP_HOME;CPP_MANIFEST;CPP_WINDOWS_SDK;OO_SDK_CLI_HOME;OO_SDK_JAVA_HOME;OO_SDK_OUT\n" +
"set OO_PATH=%OO_PATH:;=!LF!%\n" +
"set PATH=%PATH:;=!LF!%\n" +
"setlocal enabledelayedexpansion\n" +
"  for /f \"delims=\" %%i in (\"%PATH%\") do set PATH1=!PATH1!%%~fdsi;\n" +
"  set PATH1=%PATH1:~0,-1%\n" +
"  for /f \"delims=\" %%i in (\"%OO_PATH%\") do for %%j in (\"!%%i!\") do set OO_PATH1=!OO_PATH1!%%i,%%~fdsj;\n" +
"  set OO_PATH1=%OO_PATH1:~0,-1%\n" +
"endlocal & set PATH=%PATH1% & set OO_PATH=%OO_PATH1%\n" +
"set OO_PATH=%OO_PATH:;=!LF!%\n" +
"setlocal enabledelayedexpansion\n" +
"  for /f \"tokens=1,2 delims=,\" %%i in (\"%OO_PATH%\") do endlocal & set %%i=%%j\n\n" + 
さらにこのあとVCVARS32.batで新たな長い名前のPATHが追加されるので以下の行のあとにもう一度環境変数PATHを短い名前に変換するコマンドを入れます。(行番号は上のコードを挿入後のものです。)
"\nREM Prepare shell with all necessary environment variables.\n" +
この次行に以下をいれます。
"\nset PATH=%PATH:;=!LF!%\n"  +
"setlocal enabledelayedexpansion\n" +
"  for /f \"delims=\" %%i in (\"%PATH%\") do set PATH1=!PATH1!%%~fdsi;\n"+
"  set PATH1=%PATH1:~0,-1%\n" +
"endlocal & set PATH=%PATH1%\n\n" +
これでもう一度setsdkenv_windows.batを作り直します。

setsdkenv_windows.batを作る


cfgWin.jsを書き換えたらC:\Program Files (x86)\LibreOffice 4\sdk\setsdkenv_windows.batを実行します。

 ******************************************************************
 *
 *  You have to configure your SDK environment first before you can
 *  use it. The configuration has to be done only once.
 *
 ******************************************************************


 *** Configure your SDK environment ***

 NOTE: This script is working only for Windows 2000, Windows XP or newer versions!


 Enter the Office Software Development Kit directory [C:\Program Files (x86)\LibreOffice 4\sdk]:

これはデフォルトのままでよいのでEnterをクリック。

 Enter the Office base installation directory []:C:\Program Files (x86)\LibreOffice 4

LibreOffice4のインストールフォルダを指定します。

 Enter GNU make (3.79.1 or higher) tools directory []:C:\mingw\bin

mingw32-make.exeがあるフォルダのパスを指定します。

 Enter a zip (2.3 or higher) tools directory []:C:\mingw\bin

zip.exeがあるフォルダのパスを指定します。

 Enter the directory of the C++ compiler (optional) []:C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin

これは必須事項ではないのですがMicrosoft Visual Studio Express 2013 for Windows Desktopのフォルダを指定しておきました。

 Enter the directory of the C# and VB.NET compilers (optional) [C:\Windows\Microsoft.NET\Framework64\v2.0.50727]:

これはデフォルトですでに指定されていましたのでそのままEnterキーを押します。

 Enter JAVA SDK (1.4.1_01 or higher) installation directory (optional) [C:\Java\jdk1.7.0_17]:

これも既に指定されていました。

 Default output directory is the "c:\libreoffice4.1_sdk".
 Enter an existent directory if you prefer a different one. But note that only a path without spaces is allowed because of a limitation of gnu make. (optional) [c:\libreoffice4.1_sdk]:

出力フォルダを指定します。デフォルトのc:\libreoffice4.1_sdkでよければそのままEnterキーを押します。

フルパスにスペースが含まれないフォルダを指定する必要があります。

 Automatic deployment of UNO components (YES/NO) [NO]:

自動的に完成したUNOコンポーネントをインストールするか、との質問ですがこれはNOにしました。

******************************************************************
*
*  You have to configure your SDK environment first before you can
*  use it. The configuration has to be done only once.
*
******************************************************************

これで完成です。

Windwos7 64bitでは以下のフォルダにsetsdkenv_windows.batが作成されていいます。

C:\Users\<username>\AppData\Roaming\libreoffice4.1_sdk

AppData以下は隠しフォルダになっています。

作ったsetsdkenv_windows.batをコマンドウィンドウで実行


C:\_battest>setsdkenv_windows.bat

 ******************************************************************
 *
 * SDK environment is prepared for Windows
 *
 * SDK = C:\PROGRA~2\LIBREO~1\sdk
 * Office = C:\PROGRA~2\LIBREO~1
 * URE = C:\PROGRA~2\LIBREO~1\URE
 * Make = C:\mingw\bin
 * Zip = C:\mingw\bin
 * C++ Compiler = C:\PROGRA~2\MICROS~1.0\VC\bin
 * C# and VB.NET compilers = C:\Windows\MICROS~1.NET\FRAMEW~2\V20~1.507
 * Java = C:\Java\JDK17~1.0_1
 * Special Output directory = c:\LIBREO~1.1_S
 * Auto deployment = NO
 *
 ******************************************************************


C:\_battest>

エラーがでなくなりましたね。

次の関連記事:LibreOffice(19)Javaの例をmakeする

PR

0 件のコメント:

コメントを投稿