forked from textext/textext
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsetup_win.bat
286 lines (255 loc) · 9.62 KB
/
setup_win.bat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
@echo off
rem setup_win.bat
rem Wrapper for TexText's setup.py on Windows systems using the Python
rem installation shipped with Inkscape. You can use the same syntax
rem for setup_win.bat as for setup.py.
rem Example: setup_win.bat --inkscape-executable [exename]
rem Enable "if defined" etc.
setlocal EnableExtensions
rem Allow access to modified variables in if and for constructs by
rem !VAR! (%VAR% would not result in modified value as one would expect...)
setlocal EnableDelayedExpansion
set INKSCAPE_EXENAME=inkscape.exe
set "INKSCAPE_DIR="
set "PYTHON_ARGS="
set "PATHON_EXE="
set "PYTHON_COMMAND="
set args=%*
if not defined args (
rem If no arguments are passed try to detect inkscape location automatically
goto DETECT_INKSCAPE_LOCATION
) else (
rem Check valid argument syntax
if not "!args:~0,2!"=="--" goto PRINT_USAGE
)
rem Iterate over command line arguments to detect manually given inkscape
rem location. It is required to call the Python interpreter. To do this
rem we replace the -- keyword marker by ? so we can split the arguments
rem in keyword value groups using the delims feature of the for loop
rem (delims does not work with multiple characters. Since ? is not
rem allowed in file names on Windows using ? as a subsitute should be safe)
rem Furthermore, we cannot split at whitespaces due to possible
rem whitespaces in filenames
:PARSE_ARGS
if defined args (
set args=%args:--=?%
rem Split argument list into first "keyword value" pair (in %%A) and
rem remaining arguments in %%B
for /f "usebackq tokens=1* delims=?" %%A in ('!args!') do (
rem Split first pair into its two components %%C and %%D
for /f "usebackq tokens=1* delims= " %%C in ('%%A') do (
rem Check for explicitely given inkscape executable
if /I "%%C"=="inkscape-executable" if not "%%D"=="" (
if not exist "%%D" (
echo Specified directory %%D for Inkscape executable not found!
goto FINAL
) else (
rem Just take the path from %%D
set INKSCAPE_DIR=%%~dpD
)
) else (
echo No value specified for key --%%C
goto PRINT_USAGE
)
rem Check for given --portable-apps-dir argument
if /I "%%C"=="portable-apps-dir" if not "%%D"=="" (
if not exist "%%D" (
echo Specified PortableApps directory %%D not found!
goto FINAL
) else (
set arg=%%D
rem Remove quotes
set arg=!arg:"=%!
rem Remove possible trailing whitespaces
if "!arg:~-1!"==" " set arg=!arg:~0,-1!
set INKSCAPE_DIR=!arg!\InkscapePortable\App\Inkscape\bin
)
) else (
echo No value specified for key --%%C
goto PRINT_USAGE
)
set PYTHON_ARGS=!PYTHON_ARGS!--%%A
)
rem Repeat operation with remaining argument list
if /I not "%%B"=="" (
set args=%%B
goto PARSE_ARGS
)
)
)
if defined INKSCAPE_DIR goto INKSCAPE_FOUND
if defined PYTHON_ARGS goto DETECT_INKSCAPE_LOCATION
:PRINT_USAGE
echo.
echo setup_win
echo Tries to install the TexText extension using the Python distribution
echo shipped with Inkscape and the Python script setup.py. In fact this is
echo only a wrapper around setup.py which ensures that Python is correctly
echo identified in the Inkscape installation. If you have a system wide
echo Python installation you can directly call setup.py using that installation.
echo.
echo Usage:
echo ======
echo setup_win
echo Installs TexText with the default options and using the Python installation
echo shipped with Inkscape. Installation fails if no Inkscape is detected by the
echo script or Inkscape has been installed without Python or the requirements to
echo use TexText are not met. In the last case the script lists the steps to
echo be done for an successfull installation.
echo.
echo setup_win --inkscape-executable "C:\Path\to\Inkscape installation\inkscape.exe"
echo Installs TexText with the default options assuming that the inkscape executable
echo can be called via "C:\Path\to\Inkscape installation\inkscape.exe". This syntax
echo is only required if you have not installed Inkscape via an installer but from a
echo zip package. Note the double quotes sourrounding the path.
echo.
echo setup_win --option1 "value 1" --option2 "value 2"
echo Installs TexText using the Python distribution shipped with
echo Inkscape and directly passes the parameter string
echo --option1 "value 1" --option2 "value 2" to setup.py. You can pass any
echo parameters understood by setup.py. Call setup_win --help to list all available
echo options. Note the double quotes sourrounding the values.
echo.
echo You can combine the last two calling syntaxes, of course.
echo.
echo Example:
echo setup_win.bat --inkscape-executable "C:\Program Files\Inkscape\inkscape.exe"
echo --pdflatex-executable "C:\Program Files\MiKTeX 2.9\miktex\bin\x64\pdflatex.exe"
goto FINAL
:DETECT_INKSCAPE_LOCATION
echo Trying to find Inkscape in Windows Registry...
rem Checking NSIS-Installer registry information
rem Inkscape installation path is usually found in the registry
rem "SOFTWARE\Inkscape\Inkscape" under HKLM (Local Machine ->
rem machine wide installation) or rem HKCU (Current User ->
rem user installation) if installed via NSIS exe installer.
rem We also have to keep in mind that the values might be in the 32bit or 64bit
rem version of the registry (i.e., under SOFTWARE\WOW6432Node\Inkscape\Inkscape
rem or SOFTWARE\Inkscape\Inkscape)
for %%R in (HKLM HKCU) do (
for %%T in (32 64) do (
rem Output of REG QUERY "KeyName" /ve is (first line is a blank line):
rem ----
rem
rem HKEY_LOCAL_MACHINE\SOFTWARE\Inkscape\Inkscape
rem (Standard) REG_SZ C:\Program Files\Inkscape
rem ----
rem so we skip the first two lines (skip=2) and then we take the second token
rem and the reamining output (tokens=2*), so %%A is REG_SZ and %%B is the path
rem even if it contains spaces (tokens are delimited by spaces)
echo Trying SOFTWARE\Inkscape\Inkscape in registry root %%R [%%T]...
for /f "usebackq skip=2 tokens=2*" %%A in (`REG QUERY "%%R\SOFTWARE\Inkscape\Inkscape" /ve /reg:%%T 2^>nul`) do (
if exist %%B (
set INKSCAPE_DIR=%%B
)
)
if defined INKSCAPE_DIR (
echo Inkscape considered to be installed in !INKSCAPE_DIR!
set INKSCAPE_DIR=!INKSCAPE_DIR!\bin
echo Setting executable path to !INKSCAPE_DIR!
if exist "!INKSCAPE_DIR!\!INKSCAPE_EXENAME!" (
echo !INKSCAPE_DIR!\!INKSCAPE_EXENAME! found
echo.
goto INKSCAPE_FOUND
) else (
echo !INKSCAPE_DIR!\!INKSCAPE_EXENAME! not found
)
)
)
)
rem Checking MSI-Installer registry information
rem Inkscape installation path is usually found in the registry
rem under key "Path" in
rem SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\inkscape.exe
rem if installed via msi installer
for %%T in (32 64) do (
echo Trying SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\inkscape.exe in registry root HKLM [%%T]...
for /f "usebackq skip=2 tokens=2*" %%A in (`REG QUERY "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\inkscape.exe" /v Path /reg:%%T 2^>nul`) do (
if exist %%B (
set INKSCAPE_DIR=%%B
)
)
if defined INKSCAPE_DIR (
echo Inkscape considered to be installed in !INKSCAPE_DIR!
echo Setting executable path to !INKSCAPE_DIR!
if exist "!INKSCAPE_DIR!\!INKSCAPE_EXENAME!" (
echo !INKSCAPE_DIR!\!INKSCAPE_EXENAME! found
echo.
goto INKSCAPE_FOUND
) else (
echo !INKSCAPE_DIR!\!INKSCAPE_EXENAME! not found
)
)
)
rem If we did non succeed in the registry lets have a look
rem at the most common install locations
echo Trying the usual Windows install locations...
for %%D in (C, D, E, F, G, H) do (
for %%F in ("Program Files", "Program Files (x86)") do (
set INKSCAPE_DIR=%%D:\%%~F\Inkscape\bin
echo Trying !INKSCAPE_DIR!...
if exist "!INKSCAPE_DIR!\inkscape.exe" (
echo !INKSCAPE_DIR!\inkscape.exe found
echo.
goto INKSCAPE_FOUND
)
)
)
rem Check if Inkscape is in the system path (not very likely)
echo Trying system path...
for %%c in (inkscape.exe) do (
set INKSCAPE_DIR=%%~dp$PATH:c
)
if defined INKSCAPE_DIR (
echo Inkscape found in system path, installed in %INKSCAPE_DIR%
echo.
goto INKSCAPE_FOUND
)
rem Give up
goto INKSCAPE_NOT_FOUND
:INKSCAPE_FOUND
rem Check where the Python interpreter is in the Inkscape installation
echo Trying to detect Python interpreter in Inkscape installation directory...
set PYTHON_EXE="%INKSCAPE_DIR%\python.exe"
if exist "%PYTHON_EXE%" (
echo %PYTHON_EXE% found
echo.
goto RUN_SETUP_PY
) else (
echo %PYTHON_EXE% not found!
goto PYTHON_NOT_FOUND
)
:RUN_SETUP_PY
rem The Python interpreter proccessing setup.py must be invoked directly from
rem the directory in which it resides. Otherwise import test of gi
rem retroinspection/ tkinter fails. It is not enough to call
rem %PYTHON_EXE% setup.py or tweaking PYTHON_PATH.
rem Hence, we change into INKSCAPE_DIR (Attention! Maybe on another drive
rem as setup_win.bat!) and then call setup.py with its absolute path (%~dp0)
%INKSCAPE_DIR:~0,2%
cd %INKSCAPE_DIR%
set PYTHON_COMMAND=%PYTHON_EXE% "%~dp0setup.py" %PYTHON_ARGS%
echo Trying to run %PYTHON_COMMAND%...
echo.
%PYTHON_COMMAND%
goto FINAL
:INKSCAPE_NOT_FOUND
echo Inkscape neither found in the registry, nor in the most common
echo installation directories nor in the system path!
echo Specifiy an explicit location of inkscape.exe via the --inkscape-executable
echo option if you installed Inkscape from a zip package. E.g.:
echo setup_win --inkscape-executable "C:\Path\to\Inkscape installation\inkscape.exe"
echo.
echo Cannot continue!
echo.
goto FINAL
:PYTHON_NOT_FOUND
echo No Python interpreter found within your Inkscape installation.
echo Expected as %PYTHON_EXE%
echo You have to install Inkscape with the Python option enabled
echo in the Inkscape installer.
echo.
goto FINAL
:FINAL
echo.
pause