d1a67b9d |
1 | # ======================================================================= |
2 | # Created on: 2012-01-26 |
3 | # Created by: Kirill GAVRILOV |
4 | # Copyright (c) 2012 OPEN CASCADE SAS |
5 | # |
6 | # This file is part of Open CASCADE Technology software library. |
7 | # |
8 | # This library is free software; you can redistribute it and/or modify it under |
9 | # the terms of the GNU Lesser General Public License version 2.1 as published |
10 | # by the Free Software Foundation, with special exception defined in the file |
11 | # OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT |
12 | # distribution for complete text of the license and disclaimer of any warranty. |
13 | # |
14 | # Alternatively, this file may be used under the terms of Open CASCADE |
15 | # commercial license or contractual agreement. |
16 | |
17 | # ======================================================================= |
18 | # Tools for search of third-party libraries and generation on environment |
19 | # customization script |
20 | # ======================================================================= |
910970ab |
21 | |
c7d774c5 |
22 | set ARCH "64" |
910970ab |
23 | |
24 | if { "$tcl_platform(platform)" == "unix" } { |
25 | set SYS_PATH_SPLITTER ":" |
26 | set SYS_LIB_PREFIX "lib" |
27 | set SYS_EXE_SUFFIX "" |
28 | if { "$tcl_platform(os)" == "Darwin" } { |
29 | set SYS_LIB_SUFFIX "dylib" |
aafe169f |
30 | set PRJFMT "xcd" |
910970ab |
31 | } else { |
32 | set SYS_LIB_SUFFIX "so" |
aafe169f |
33 | set PRJFMT "cbp" |
910970ab |
34 | } |
35 | set VCVER "gcc" |
36 | set VCVARS "" |
37 | } elseif { "$tcl_platform(platform)" == "windows" } { |
38 | set SYS_PATH_SPLITTER ";" |
39 | set SYS_LIB_PREFIX "" |
40 | set SYS_LIB_SUFFIX "lib" |
41 | set SYS_EXE_SUFFIX ".exe" |
42 | set VCVER "vc10" |
43 | set VCVARS "" |
aafe169f |
44 | set PRJFMT "vcxproj" |
910970ab |
45 | } |
46 | |
5951a088 |
47 | set SHORTCUT_HEADERS "ShortCut" |
910970ab |
48 | |
910970ab |
49 | set PRODUCTS_PATH "" |
50 | set CSF_OPT_INC [list] |
51 | set CSF_OPT_LIB32 [list] |
52 | set CSF_OPT_LIB64 [list] |
53 | set CSF_OPT_BIN32 [list] |
54 | set CSF_OPT_BIN64 [list] |
55 | |
c7d774c5 |
56 | if { "$tcl_platform(pointerSize)" == "4" } { |
57 | set ARCH "32" |
58 | } |
910970ab |
59 | if { [info exists ::env(ARCH)] } { |
60 | set ARCH "$::env(ARCH)" |
61 | } |
e22105a9 |
62 | |
910970ab |
63 | if { [info exists ::env(SHORTCUT_HEADERS)] } { |
64 | set SHORTCUT_HEADERS "$::env(SHORTCUT_HEADERS)" |
5951a088 |
65 | if { $SHORTCUT_HEADERS == "true" } { |
66 | set SHORTCUT_HEADERS "ShortCut" |
67 | } |
910970ab |
68 | } |
e22105a9 |
69 | |
70 | # fetch environment variables (e.g. set by custom.sh or custom.bat) and set them as tcl variables with the same name |
27bd52b5 |
71 | set THE_ENV_VARIABLES {HAVE_FREEIMAGE HAVE_FFMPEG HAVE_TBB HAVE_GLES2 HAVE_D3D HAVE_VTK HAVE_ZLIB HAVE_LIBLZMA HAVE_E57 HAVE_RAPIDJSON HAVE_OPENCL CHECK_QT4 CHECK_JDK MACOSX_USE_GLX HAVE_RelWithDebInfo} |
e22105a9 |
72 | foreach anEnvIter $THE_ENV_VARIABLES { |
73 | set ${anEnvIter} "false" |
74 | if { [info exists ::env(${anEnvIter})] } { |
75 | set ${anEnvIter} "$::env(${anEnvIter})" |
76 | } |
910970ab |
77 | } |
e22105a9 |
78 | # do not export platform-specific variables |
79 | if { "$::tcl_platform(os)" == "Darwin" } { |
80 | set HAVE_GLES2 "" |
81 | } else { |
82 | set MACOSX_USE_GLX "" |
26cfd29c |
83 | } |
84 | if { "$tcl_platform(platform)" != "windows" } { |
85 | set HAVE_D3D "" |
86 | set HAVE_RelWithDebInfo "" |
910970ab |
87 | } |
f4b0c772 |
88 | foreach anEnvIter {ARCH VCVER VCVARS PRJFMT } { |
e22105a9 |
89 | if { [info exists ::env(${anEnvIter})] } { |
90 | set ${anEnvIter} "$::env(${anEnvIter})" |
91 | } |
910970ab |
92 | } |
f4b0c772 |
93 | if { [info exists ::env(PRODUCTS_PATH)] } { |
94 | set PRODUCTS_PATH [file normalize "$::env(PRODUCTS_PATH)"] |
95 | } |
e22105a9 |
96 | |
910970ab |
97 | if { [info exists ::env(CSF_OPT_INC)] } { |
98 | set CSF_OPT_INC [split "$::env(CSF_OPT_INC)" $::SYS_PATH_SPLITTER] |
99 | } |
100 | if { [info exists ::env(CSF_OPT_LIB32)] } { |
101 | set CSF_OPT_LIB32 [split "$::env(CSF_OPT_LIB32)" $::SYS_PATH_SPLITTER] |
102 | } |
103 | if { [info exists ::env(CSF_OPT_LIB64)] } { |
104 | set CSF_OPT_LIB64 [split "$::env(CSF_OPT_LIB64)" $::SYS_PATH_SPLITTER] |
105 | } |
106 | if { [info exists ::env(CSF_OPT_BIN32)] } { |
107 | set CSF_OPT_BIN32 [split "$::env(CSF_OPT_BIN32)" $::SYS_PATH_SPLITTER] |
108 | } |
109 | if { [info exists ::env(CSF_OPT_BIN64)] } { |
110 | set CSF_OPT_BIN64 [split "$::env(CSF_OPT_BIN64)" $::SYS_PATH_SPLITTER] |
111 | } |
112 | |
113 | # Search header file in $::CSF_OPT_INC and standard paths |
114 | proc wokdep:SearchHeader {theHeader} { |
115 | # search in custom paths |
116 | foreach anIncPath $::CSF_OPT_INC { |
117 | set aPath "${anIncPath}/${theHeader}" |
118 | if { [file exists "$aPath"] } { |
119 | return "$aPath" |
120 | } |
121 | } |
122 | |
123 | # search in system |
124 | set aPath "/usr/include/${theHeader}" |
125 | if { [file exists "$aPath"] } { |
126 | return "$aPath" |
127 | } |
08f8a185 |
128 | |
129 | if { "$::tcl_platform(os)" == "Linux" } { |
130 | if { "$::ARCH" == "64" } { |
131 | set aPath "/usr/include/x86_64-linux-gnu/${theHeader}" |
132 | if { [file exists "$aPath"] } { |
133 | return "$aPath" |
134 | } |
135 | } else { |
136 | set aPath "/usr/include/i386-linux-gnu/${theHeader}" |
137 | if { [file exists "$aPath"] } { |
138 | return "$aPath" |
139 | } |
140 | } |
141 | } |
142 | |
910970ab |
143 | return "" |
144 | } |
145 | |
146 | # Search library file in $::CSF_OPT_LIB* and standard paths |
147 | proc wokdep:SearchLib {theLib theBitness {theSearchPath ""}} { |
148 | if { "$theSearchPath" != "" } { |
27bd52b5 |
149 | set aPath "${theSearchPath}/${::SYS_LIB_PREFIX}${theLib}.${::SYS_LIB_SUFFIX}" |
150 | set aPath2 "${theSearchPath}/${::SYS_LIB_PREFIX}${theLib}.a" |
910970ab |
151 | if { [file exists "$aPath"] } { |
152 | return "$aPath" |
27bd52b5 |
153 | } elseif { "$::tcl_platform(platform)" != "windows" && [file exists "$aPath2"] } { |
154 | return "$aPath2" |
910970ab |
155 | } else { |
156 | return "" |
157 | } |
158 | } |
159 | |
160 | # search in custom paths |
161 | foreach aLibPath [set ::CSF_OPT_LIB$theBitness] { |
27bd52b5 |
162 | set aPath "${aLibPath}/${::SYS_LIB_PREFIX}${theLib}.${::SYS_LIB_SUFFIX}" |
163 | set aPath2 "${aLibPath}/${::SYS_LIB_PREFIX}${theLib}.a" |
910970ab |
164 | if { [file exists "$aPath"] } { |
165 | return "$aPath" |
27bd52b5 |
166 | } elseif { "$::tcl_platform(platform)" != "windows" && [file exists "$aPath2"] } { |
167 | return "$aPath2" |
910970ab |
168 | } |
169 | } |
170 | |
171 | # search in system |
172 | if { "$::ARCH" == "$theBitness"} { |
27bd52b5 |
173 | set aPath "/usr/lib/${::SYS_LIB_PREFIX}${theLib}.${::SYS_LIB_SUFFIX}" |
174 | set aPath2 "/usr/lib/${::SYS_LIB_PREFIX}${theLib}.a" |
910970ab |
175 | if { [file exists "$aPath"] } { |
176 | return "$aPath" |
27bd52b5 |
177 | } elseif { [file exists "$aPath2"] } { |
178 | return "$aPath2" |
910970ab |
179 | } |
180 | } |
181 | |
c7d774c5 |
182 | if { "$::tcl_platform(os)" == "Linux" } { |
910970ab |
183 | if { "$theBitness" == "64" } { |
27bd52b5 |
184 | set aPath "/usr/lib/x86_64-linux-gnu/lib${theLib}.so" |
185 | set aPath2 "/usr/lib/x86_64-linux-gnu/lib${theLib}.a" |
910970ab |
186 | if { [file exists "$aPath"] } { |
187 | return "$aPath" |
27bd52b5 |
188 | } elseif { [file exists "$aPath2"] } { |
189 | return "$aPath2" |
910970ab |
190 | } |
191 | } else { |
27bd52b5 |
192 | set aPath "/usr/lib/i386-linux-gnu/lib${theLib}.so" |
193 | set aPath2 "/usr/lib/i386-linux-gnu/lib${theLib}.a" |
910970ab |
194 | if { [file exists "$aPath"] } { |
195 | return "$aPath" |
27bd52b5 |
196 | } elseif { [file exists "$aPath2"] } { |
197 | return "$aPath2" |
910970ab |
198 | } |
199 | } |
200 | } |
201 | |
202 | return "" |
203 | } |
204 | |
205 | # Search file in $::CSF_OPT_BIN* and standard paths |
206 | proc wokdep:SearchBin {theBin theBitness {theSearchPath ""}} { |
207 | if { "$theSearchPath" != "" } { |
208 | set aPath "${theSearchPath}/${theBin}" |
209 | if { [file exists "$aPath"] } { |
210 | return "$aPath" |
211 | } else { |
212 | return "" |
213 | } |
214 | } |
215 | |
216 | # search in custom paths |
217 | foreach aBinPath [set ::CSF_OPT_BIN$theBitness] { |
218 | set aPath "${aBinPath}/${theBin}" |
219 | if { [file exists "$aPath"] } { |
220 | return "$aPath" |
221 | } |
222 | } |
223 | |
224 | # search in system |
225 | if { "$::ARCH" == "$theBitness"} { |
226 | set aPath "/usr/bin/${theBin}" |
227 | if { [file exists "$aPath"] } { |
228 | return "$aPath" |
229 | } |
230 | } |
231 | |
232 | return "" |
233 | } |
234 | |
235 | # Detect compiler C-runtime version 'vc*' and architecture '32'/'64' |
236 | # to determine preferred path. |
237 | proc wokdep:Preferred {theList theCmpl theArch} { |
238 | if { [llength $theList] == 0 } { |
239 | return "" |
240 | } |
241 | |
d6cda17a |
242 | # keep only two first digits in "vc141" |
243 | if { ! [regexp {^vc[0-9][0-9]} $theCmpl aCmpl] } { |
1bd04b5a |
244 | if { [regexp {^vclang} $theCmpl] } { |
245 | set aCmpl vc14 |
246 | } else { |
247 | set aCmpl $theCmpl |
248 | } |
d6cda17a |
249 | } |
250 | |
910970ab |
251 | set aShortList {} |
252 | foreach aPath $theList { |
d6cda17a |
253 | if { [string first "$aCmpl" "$aPath"] != "-1" } { |
910970ab |
254 | lappend aShortList "$aPath" |
255 | } |
256 | } |
257 | |
258 | if { [llength $aShortList] == 0 } { |
259 | #return [lindex $theList 0] |
260 | set aShortList $theList |
261 | } |
262 | |
263 | set aVeryShortList {} |
264 | foreach aPath $aShortList { |
265 | if { [string first "$theArch" "$aPath"] != "-1" } { |
266 | lappend aVeryShortList "$aPath" |
267 | } |
268 | } |
269 | if { [llength $aVeryShortList] == 0 } { |
270 | return [lindex [lsort -decreasing $aShortList] 0] |
271 | } |
272 | |
273 | return [lindex [lsort -decreasing $aVeryShortList] 0] |
274 | } |
275 | |
e22105a9 |
276 | # Search library placement |
277 | proc wokdep:SearchStandardLibrary {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64 theName theCheckHeader theCheckLib theCheckFolders} { |
278 | upvar $theErrInc anErrInc |
279 | upvar $theErrLib32 anErrLib32 |
280 | upvar $theErrLib64 anErrLib64 |
281 | upvar $theErrBin32 anErrBin32 |
282 | upvar $theErrBin64 anErrBin64 |
283 | |
284 | set isFound "true" |
285 | set aHeaderPath [wokdep:SearchHeader "$theCheckHeader"] |
286 | if { "$aHeaderPath" == "" } { |
287 | set hasHeader false |
288 | foreach aFolderIter $theCheckFolders { |
289 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{$aFolderIter}*] "$::VCVER" "$::ARCH" ] |
290 | if { "$aPath" != "" && [file exists "$aPath/include/$theCheckHeader"] } { |
291 | lappend ::CSF_OPT_INC "$aPath/include" |
292 | set hasHeader true |
293 | break |
294 | } |
295 | } |
296 | if { !$hasHeader } { |
297 | lappend anErrInc "Error: '$theCheckHeader' not found ($theName)" |
298 | set isFound "false" |
299 | } |
300 | } |
301 | |
302 | foreach anArchIter {64 32} { |
303 | set aLibPath [wokdep:SearchLib "$theCheckLib" "$anArchIter"] |
304 | if { "$aLibPath" == "" } { |
305 | set hasLib false |
306 | foreach aFolderIter $theCheckFolders { |
307 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{$aFolderIter}*] "$::VCVER" "$anArchIter" ] |
308 | set aLibPath [wokdep:SearchLib "$theCheckLib" "$anArchIter" "$aPath/lib"] |
309 | if { "$aLibPath" != "" } { |
310 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib" |
311 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin" |
312 | set hasLib true |
313 | break |
314 | } |
315 | } |
316 | if { !$hasLib } { |
317 | lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}$theCheckLib.${::SYS_LIB_SUFFIX}' not found ($theName)" |
318 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
319 | } |
320 | } |
321 | |
322 | if { "$::tcl_platform(platform)" == "windows" } { |
323 | set aDllPath [wokdep:SearchBin "$theCheckLib.dll" "$anArchIter"] |
324 | if { "$aDllPath" == "" } { |
325 | set hasDll false |
326 | foreach aFolderIter $theCheckFolders { |
327 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{$aFolderIter}*] "$::VCVER" "$anArchIter" ] |
328 | set aDllPath [wokdep:SearchBin "$theCheckLib.dll" "$anArchIter" "$aPath/bin"] |
329 | if { "$aDllPath" != "" } { |
330 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin" |
331 | set hasDll true |
332 | break |
333 | } else { |
334 | set aDllPath [wokdep:SearchBin "$theCheckLib.dll" "$anArchIter" "$aPath/lib"] |
335 | if { "$aDllPath" != "" } { |
336 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/lib" |
337 | set hasDll true |
338 | break |
339 | } |
340 | } |
341 | } |
342 | if { !$hasDll } { |
343 | lappend anErrBin$anArchIter "Error: '$theCheckLib.dll' not found ($theName)" |
344 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
345 | } |
346 | } |
347 | } |
348 | } |
349 | |
350 | return "$isFound" |
351 | } |
352 | |
910970ab |
353 | # Search Tcl/Tk libraries placement |
354 | proc wokdep:SearchTclTk {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
355 | upvar $theErrInc anErrInc |
356 | upvar $theErrLib32 anErrLib32 |
357 | upvar $theErrLib64 anErrLib64 |
358 | upvar $theErrBin32 anErrBin32 |
359 | upvar $theErrBin64 anErrBin64 |
360 | |
361 | set tclver_maj 8 |
362 | set tclver_min 6 |
363 | |
364 | set isFound "true" |
365 | set aTclHPath [wokdep:SearchHeader "tcl.h"] |
366 | set aTkHPath [wokdep:SearchHeader "tk.h"] |
367 | if { "$aTclHPath" == "" || "$aTkHPath" == "" } { |
368 | if { [file exists "/usr/include/tcl8.6/tcl.h"] |
369 | && [file exists "/usr/include/tcl8.6/tk.h" ] } { |
370 | lappend ::CSF_OPT_INC "/usr/include/tcl8.6" |
371 | set aTclHPath "/usr/include/tcl8.6/tcl.h" |
372 | } else { |
373 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{tcl}*] "$::VCVER" "$::ARCH" ] |
374 | if { "$aPath" != "" && [file exists "$aPath/include/tcl.h"] && [file exists "$aPath/include/tk.h"] } { |
375 | lappend ::CSF_OPT_INC "$aPath/include" |
376 | set aTclHPath "$aPath/include/tcl.h" |
377 | } else { |
378 | lappend anErrInc "Error: 'tcl.h' or 'tk.h' not found (Tcl/Tk)" |
379 | set isFound "false" |
380 | } |
381 | } |
382 | } |
383 | |
384 | # detect tcl version by parsing header file |
385 | if { $isFound } { |
386 | set fh [open $aTclHPath] |
387 | set tcl_h [read $fh] |
388 | close $fh |
389 | regexp {define\s+TCL_MAJOR_VERSION\s+([0-9]+)} $tcl_h dummy tclver_maj |
390 | regexp {define\s+TCL_MINOR_VERSION\s+([0-9]+)} $tcl_h dummy tclver_min |
391 | } |
392 | |
393 | if { "$::tcl_platform(platform)" == "windows" } { |
394 | set aTclLibName "tcl${tclver_maj}${tclver_min}" |
395 | set aTkLibName "tk${tclver_maj}${tclver_min}" |
396 | } else { |
397 | set aTclLibName "tcl${tclver_maj}.${tclver_min}" |
398 | set aTkLibName "tk${tclver_maj}.${tclver_min}" |
399 | } |
400 | |
401 | foreach anArchIter {64 32} { |
402 | set aTclLibPath [wokdep:SearchLib "$aTclLibName" "$anArchIter"] |
403 | set aTkLibPath [wokdep:SearchLib "$aTkLibName" "$anArchIter"] |
404 | if { "$aTclLibPath" == "" || "$aTkLibPath" == "" } { |
405 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{tcl}*] "$::VCVER" "$anArchIter" ] |
406 | set aTclLibPath [wokdep:SearchLib "$aTclLibName" "$anArchIter" "$aPath/lib"] |
407 | set aTkLibPath [wokdep:SearchLib "$aTkLibName" "$anArchIter" "$aPath/lib"] |
408 | if { "$aTclLibPath" != "" && "$aTkLibPath" != "" } { |
409 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib" |
410 | } else { |
411 | lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}${aTclLibName}.${::SYS_LIB_SUFFIX}' or '${::SYS_LIB_PREFIX}${aTkLibName}.${::SYS_LIB_SUFFIX}' not found (Tcl/Tk)" |
412 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
413 | } |
414 | } |
415 | |
416 | if { "$::tcl_platform(platform)" == "windows" } { |
417 | set aTclDllPath [wokdep:SearchBin "${aTclLibName}.dll" "$anArchIter"] |
418 | set aTkDllPath [wokdep:SearchBin "${aTkLibName}.dll" "$anArchIter"] |
419 | if { "$aTclDllPath" == "" || "$aTkDllPath" == "" } { |
420 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{tcl}*] "$::VCVER" "$anArchIter" ] |
421 | set aTclDllPath [wokdep:SearchBin "${aTclLibName}.dll" "$anArchIter" "$aPath/bin"] |
422 | set aTkDllPath [wokdep:SearchBin "${aTkLibName}.dll" "$anArchIter" "$aPath/bin"] |
423 | if { "$aTclDllPath" != "" && "$aTkDllPath" != "" } { |
424 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin" |
425 | } else { |
426 | lappend anErrBin$anArchIter "Error: '${aTclLibName}.dll' or '${aTkLibName}.dll' not found (Tcl/Tk)" |
427 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
428 | } |
429 | } |
430 | } |
431 | } |
432 | |
433 | return "$isFound" |
434 | } |
435 | |
436 | # Search FreeType library placement |
437 | proc wokdep:SearchFreeType {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
438 | upvar $theErrInc anErrInc |
439 | upvar $theErrLib32 anErrLib32 |
440 | upvar $theErrLib64 anErrLib64 |
441 | upvar $theErrBin32 anErrBin32 |
442 | upvar $theErrBin64 anErrBin64 |
443 | |
444 | set isFound "true" |
445 | set aFtBuildPath [wokdep:SearchHeader "ft2build.h"] |
446 | |
910970ab |
447 | if { "$aFtBuildPath" == "" } { |
448 | # TODO - use `freetype-config --cflags` instead |
449 | set aSysFreeType "/usr/include/freetype2" |
c7d774c5 |
450 | if { [file exists "$aSysFreeType/ft2build.h"] } { |
910970ab |
451 | lappend ::CSF_OPT_INC "$aSysFreeType" |
452 | } elseif { [file exists "$aSysFreeType/freetype2/ft2build.h"] } { |
453 | lappend ::CSF_OPT_INC "$aSysFreeType/freetype2" |
454 | } else { |
455 | set aSysFreeType "/usr/X11/include/freetype2" |
456 | if { [file exists "$aSysFreeType/ft2build.h"] } { |
457 | lappend ::CSF_OPT_INC "/usr/X11/include" |
458 | lappend ::CSF_OPT_INC "$aSysFreeType" |
459 | } else { |
460 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{freetype}*] "$::VCVER" "$::ARCH" ] |
461 | if {"$aPath" != ""} { |
462 | if {[file exists "$aPath/include/ft2build.h"]} { |
463 | lappend ::CSF_OPT_INC "$aPath/include" |
464 | } elseif {[file exists "$aPath/include/freetype2/ft2build.h"]} { |
465 | lappend ::CSF_OPT_INC "$aPath/include/freetype2" |
466 | } |
467 | } else { |
468 | lappend anErrInc "Error: 'freetype.h' not found (FreeType2)" |
469 | set isFound "false" |
470 | } |
471 | } |
472 | } |
473 | } |
474 | |
475 | # parse 'freetype-config --libs' |
476 | set aConfLibPath "" |
477 | if { [catch { set aConfLibs [exec freetype-config --libs] } ] == 0 } { |
478 | foreach aPath [split $aConfLibs " "] { |
479 | if { [string first "-L" "$aPath"] == 0 } { |
480 | set aConfLibPath [string range "$aPath" 2 [string length "$aPath"]] |
481 | } |
482 | } |
483 | } |
484 | |
485 | foreach anArchIter {64 32} { |
486 | set aFtLibPath [wokdep:SearchLib "freetype" "$anArchIter"] |
487 | if { "$aFtLibPath" == "" } { |
488 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{freetype}*] "$::VCVER" "$anArchIter" ] |
489 | set aFtLibPath [wokdep:SearchLib "freetype" "$anArchIter" "$aPath/lib"] |
490 | if { "$aFtLibPath" != "" } { |
491 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib" |
492 | } else { |
493 | set aFtLibPath [wokdep:SearchLib "freetype" "$anArchIter" "$aConfLibPath"] |
494 | if { "$aFtLibPath" != "" } { |
495 | lappend ::CSF_OPT_LIB$anArchIter "$aConfLibPath" |
496 | } else { |
497 | lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}freetype.${::SYS_LIB_SUFFIX}' not found (FreeType2)" |
498 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
499 | } |
500 | } |
501 | } |
502 | if { "$::tcl_platform(platform)" == "windows" } { |
503 | set aFtDllPath [wokdep:SearchBin "freetype.dll" "$anArchIter"] |
504 | if { "$aFtDllPath" == "" } { |
505 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{freetype}*] "$::VCVER" "$anArchIter" ] |
506 | set aFtDllPath [wokdep:SearchBin "freetype.dll" "$anArchIter" "$aPath/bin"] |
507 | if { "$aFtDllPath" != "" } { |
508 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin" |
509 | } else { |
510 | set aFtDllPath [wokdep:SearchBin "freetype.dll" "$anArchIter" "$aPath/lib"] |
511 | if { "$aFtDllPath" != "" } { |
512 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/lib" |
513 | } else { |
514 | lappend anErrBin$anArchIter "Error: 'freetype.dll' not found (FreeType2)" |
515 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
516 | } |
517 | } |
518 | } |
519 | } |
520 | } |
521 | |
522 | return "$isFound" |
523 | } |
524 | |
525 | # Search FreeImage library placement |
526 | proc wokdep:SearchFreeImage {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
527 | upvar $theErrInc anErrInc |
528 | upvar $theErrLib32 anErrLib32 |
529 | upvar $theErrLib64 anErrLib64 |
530 | upvar $theErrBin32 anErrBin32 |
531 | upvar $theErrBin64 anErrBin64 |
532 | |
533 | # binary distribution has another layout |
534 | set aFImageDist "Dist" |
910970ab |
535 | |
536 | set isFound "true" |
f0d3b7af |
537 | set aFImageHPath [wokdep:SearchHeader "FreeImage.h"] |
538 | if { "$aFImageHPath" == "" } { |
910970ab |
539 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{freeimage}*] "$::VCVER" "$::ARCH" ] |
f0d3b7af |
540 | if { "$aPath" != "" && [file exists "$aPath/include/FreeImage.h"] } { |
910970ab |
541 | lappend ::CSF_OPT_INC "$aPath/include" |
f0d3b7af |
542 | } elseif { "$aPath" != "" && [file exists "$aPath/$aFImageDist/FreeImage.h"] } { |
910970ab |
543 | lappend ::CSF_OPT_INC "$aPath/$aFImageDist" |
910970ab |
544 | } else { |
f0d3b7af |
545 | lappend anErrInc "Error: 'FreeImage.h' not found (FreeImage)" |
910970ab |
546 | set isFound "false" |
547 | } |
548 | } |
549 | |
550 | foreach anArchIter {64 32} { |
f0d3b7af |
551 | set aFImageLibPath [wokdep:SearchLib "freeimage" "$anArchIter"] |
552 | if { "$aFImageLibPath" == "" } { |
910970ab |
553 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{freeimage}*] "$::VCVER" "$anArchIter" ] |
f0d3b7af |
554 | set aFImageLibPath [wokdep:SearchLib "freeimage" "$anArchIter" "$aPath/lib"] |
555 | if { "$aFImageLibPath" != "" } { |
910970ab |
556 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib" |
557 | } else { |
f0d3b7af |
558 | set aFImageLibPath [wokdep:SearchLib "freeimage" "$anArchIter" "$aPath/$aFImageDist"] |
559 | if { "$aFImageLibPath" != "" } { |
910970ab |
560 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/$aFImageDist" |
910970ab |
561 | } else { |
f0d3b7af |
562 | lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}freeimage.${::SYS_LIB_SUFFIX}' not found (FreeImage)" |
910970ab |
563 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
564 | } |
565 | } |
566 | } |
567 | if { "$::tcl_platform(platform)" == "windows" } { |
60273f77 |
568 | set aFImageDllPath [wokdep:SearchBin "freeimage.dll" "$anArchIter"] |
569 | if { "$aFImageDllPath" == "" } { |
910970ab |
570 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{freeimage}*] "$::VCVER" "$anArchIter" ] |
60273f77 |
571 | set aFImageDllPath [wokdep:SearchBin "freeimage.dll" "$anArchIter" "$aPath/bin"] |
572 | if { "$aFImageDllPath" != "" } { |
910970ab |
573 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin" |
574 | } else { |
60273f77 |
575 | set aFImageDllPath [wokdep:SearchBin "freeimage.dll" "$anArchIter" "$aPath/$aFImageDist"] |
576 | if { "$aFImageDllPath" != "" } { |
910970ab |
577 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/$aFImageDist" |
910970ab |
578 | } else { |
60273f77 |
579 | lappend anErrBin$anArchIter "Error: 'freeimage.dll' is not found (FreeImage)" |
910970ab |
580 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
581 | } |
582 | } |
583 | } |
584 | } |
585 | } |
586 | |
587 | return "$isFound" |
588 | } |
589 | |
e22105a9 |
590 | # Search FFmpeg framework placement |
591 | proc wokdep:SearchFFmpeg {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
910970ab |
592 | upvar $theErrInc anErrInc |
593 | upvar $theErrLib32 anErrLib32 |
594 | upvar $theErrLib64 anErrLib64 |
595 | upvar $theErrBin32 anErrBin32 |
596 | upvar $theErrBin64 anErrBin64 |
597 | |
598 | set isFound "true" |
e22105a9 |
599 | set aFFmpegHPath [wokdep:SearchHeader "libavutil/avutil.h"] |
600 | if { "$aFFmpegHPath" == "" } { |
601 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{ffmpeg}*] "$::VCVER" "$::ARCH" ] |
602 | if { "$aPath" != "" && [file exists "$aPath/include/libavutil/avutil.h"] } { |
910970ab |
603 | lappend ::CSF_OPT_INC "$aPath/include" |
604 | } else { |
e22105a9 |
605 | lappend anErrInc "Error: 'libavutil/avutil.h' not found (FFmpeg)" |
910970ab |
606 | set isFound "false" |
607 | } |
608 | } |
609 | |
610 | foreach anArchIter {64 32} { |
e22105a9 |
611 | set aFFmpegLibPath [wokdep:SearchLib "avutil" "$anArchIter"] |
612 | if { "$aFFmpegLibPath" == "" } { |
613 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{ffmpeg}*] "$::VCVER" "$anArchIter" ] |
614 | set aFFmpegLibPath [wokdep:SearchLib "avutil" "$anArchIter" "$aPath/lib"] |
615 | if { "$aFFmpegLibPath" != "" } { |
910970ab |
616 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib" |
e22105a9 |
617 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin" |
910970ab |
618 | } else { |
e22105a9 |
619 | lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}avutil.${::SYS_LIB_SUFFIX}' not found (FFmpeg)" |
910970ab |
620 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
621 | } |
622 | } |
910970ab |
623 | } |
624 | |
625 | return "$isFound" |
626 | } |
627 | |
628 | # Search TBB library placement |
629 | proc wokdep:SearchTBB {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
630 | upvar $theErrInc anErrInc |
631 | upvar $theErrLib32 anErrLib32 |
632 | upvar $theErrLib64 anErrLib64 |
633 | upvar $theErrBin32 anErrBin32 |
634 | upvar $theErrBin64 anErrBin64 |
635 | |
d6cda17a |
636 | # keep only two first digits in "vc141" |
637 | if { ! [regexp {^vc[0-9][0-9]} ${::VCVER} aVcLib] } { |
1bd04b5a |
638 | if { [regexp {^vclang} ${::VCVER}] } { |
639 | set aVcLib vc14 |
640 | } else { |
641 | set aVcLib ${::VCVER} |
642 | } |
d6cda17a |
643 | } |
644 | |
910970ab |
645 | set isFound "true" |
646 | set aTbbHPath [wokdep:SearchHeader "tbb/scalable_allocator.h"] |
647 | if { "$aTbbHPath" == "" } { |
648 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{tbb}*] "$::VCVER" "$::ARCH" ] |
649 | if { "$aPath" != "" && [file exists "$aPath/include/tbb/scalable_allocator.h"] } { |
650 | lappend ::CSF_OPT_INC "$aPath/include" |
651 | } else { |
652 | lappend anErrInc "Error: 'tbb/scalable_allocator.h' not found (Intel TBB)" |
653 | set isFound "false" |
654 | } |
655 | } |
656 | |
657 | foreach anArchIter {64 32} { |
658 | set aSubDir "ia32" |
659 | if { "$anArchIter" == "64"} { |
660 | set aSubDir "intel64" |
661 | } |
662 | |
663 | set aTbbLibPath [wokdep:SearchLib "tbb" "$anArchIter"] |
664 | if { "$aTbbLibPath" == "" } { |
d6cda17a |
665 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{tbb}*] $aVcLib "$anArchIter" ] |
666 | set aTbbLibPath [wokdep:SearchLib "tbb" "$anArchIter" "$aPath/lib/$aSubDir/$aVcLib"] |
910970ab |
667 | if { "$aTbbLibPath" == "" } { |
668 | # Set the path to the TBB library for Linux |
669 | if { "$::tcl_platform(platform)" != "windows" } { |
670 | set aSubDir "$aSubDir/cc4.1.0_libc2.4_kernel2.6.16.21" |
671 | } |
672 | set aTbbLibPath [wokdep:SearchLib "tbb" "$anArchIter" "$aPath/lib/$aSubDir"] |
673 | if { "$aTbbLibPath" != "" } { |
674 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib/$aSubDir" |
675 | } |
676 | } else { |
d6cda17a |
677 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib/$aSubDir/$aVcLib" |
910970ab |
678 | } |
679 | if { "$aTbbLibPath" == "" } { |
680 | lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}tbb.${::SYS_LIB_SUFFIX}' not found (Intel TBB)" |
681 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
682 | } |
683 | } |
684 | if { "$::tcl_platform(platform)" == "windows" } { |
685 | set aTbbDllPath [wokdep:SearchBin "tbb.dll" "$anArchIter"] |
686 | if { "$aTbbDllPath" == "" } { |
d6cda17a |
687 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{tbb}*] $aVcLib "$anArchIter" ] |
688 | set aTbbDllPath [wokdep:SearchBin "tbb.dll" "$anArchIter" "$aPath/bin/$aSubDir/$aVcLib"] |
910970ab |
689 | if { "$aTbbDllPath" != "" } { |
d6cda17a |
690 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin/$aSubDir/$aVcLib" |
910970ab |
691 | } else { |
692 | lappend anErrBin$anArchIter "Error: 'tbb.dll' not found (Intel TBB)" |
693 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
694 | } |
695 | } |
696 | } |
697 | } |
698 | |
699 | return "$isFound" |
700 | } |
701 | |
702 | # Search OpenCL library placement |
703 | proc wokdep:SearchOpenCL {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
704 | upvar $theErrInc anErrInc |
705 | upvar $theErrLib32 anErrLib32 |
706 | upvar $theErrLib64 anErrLib64 |
707 | upvar $theErrBin32 anErrBin32 |
708 | upvar $theErrBin64 anErrBin64 |
709 | |
710 | set isFound "true" |
711 | if { "$::tcl_platform(os)" == "Darwin" } { |
712 | # OpenCL framework available since Mac OS X 16 |
713 | return "$isFound" |
714 | } |
715 | |
716 | set aCLHPath [wokdep:SearchHeader "CL/cl_gl.h"] |
717 | if { "$aCLHPath" == "" } { |
718 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{OpenCL}*] "$::VCVER" "$::ARCH" ] |
719 | if { "$aPath" != "" && [file exists "$aPath/include/CL/cl_gl.h"] } { |
720 | lappend ::CSF_OPT_INC "$aPath/include" |
721 | } else { |
722 | lappend anErrInc "Error: 'CL/cl_gl.h' not found (OpenCL)" |
723 | set isFound "false" |
724 | } |
725 | } |
726 | |
727 | foreach anArchIter {64 32} { |
728 | set aCLLibPath [wokdep:SearchLib "OpenCL" "$anArchIter"] |
729 | if { "$aCLLibPath" == "" } { |
730 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{OpenCL}*] "$::VCVER" "$anArchIter" ] |
731 | set aCLLibPath [wokdep:SearchLib "OpenCL" "$anArchIter" "$aPath/lib"] |
732 | if { "$aCLLibPath" != "" } { |
733 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib" |
734 | } else { |
735 | lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}OpenCL.${::SYS_LIB_SUFFIX}' not found (OpenCL)" |
736 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
737 | } |
738 | } |
739 | } |
740 | |
741 | return "$isFound" |
742 | } |
743 | |
1ce0716b |
744 | # Search EGL library placement |
745 | proc wokdep:SearchEGL {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
746 | upvar $theErrInc anErrInc |
747 | upvar $theErrLib32 anErrLib32 |
748 | upvar $theErrLib64 anErrLib64 |
749 | upvar $theErrBin32 anErrBin32 |
750 | upvar $theErrBin64 anErrBin64 |
751 | |
752 | set isFound "true" |
753 | set aHeaderPath [wokdep:SearchHeader "EGL/egl.h"] |
754 | if { "$aHeaderPath" == "" } { |
755 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{EGL}*] "$::VCVER" "$::ARCH" ] |
756 | if { "$aPath" == "" || ![file exists "$aPath/include/EGL/egl.h"] } { |
757 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{angle}*] "$::VCVER" "$::ARCH" ] |
758 | } |
759 | |
760 | if { "$aPath" != "" && [file exists "$aPath/include/EGL/egl.h"] } { |
761 | lappend ::CSF_OPT_INC "$aPath/include" |
762 | } else { |
763 | lappend anErrInc "Error: 'EGL/egl.h' not found (EGL)" |
764 | set isFound "false" |
765 | } |
766 | } |
767 | |
768 | set aLibName "EGL" |
769 | if { "$::tcl_platform(platform)" == "windows" } { |
770 | # awkward exception |
771 | set aLibName "libEGL" |
772 | } |
773 | |
774 | foreach anArchIter {64 32} { |
775 | set aLibPath [wokdep:SearchLib "$aLibName" "$anArchIter"] |
776 | if { "$aLibPath" == "" } { |
777 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{EGL}*] "$::VCVER" "$anArchIter" ] |
778 | set aLibPath [wokdep:SearchLib "$aLibName" "$anArchIter" "$aPath/lib"] |
779 | if { "$aLibPath" == "" } { |
780 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{angle}*] "$::VCVER" "$anArchIter" ] |
781 | set aLibPath [wokdep:SearchLib "$aLibName" "$anArchIter" "$aPath/lib"] |
782 | } |
783 | |
784 | if { "$aLibPath" != "" } { |
785 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib" |
786 | } else { |
787 | lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}${aLibName}.${::SYS_LIB_SUFFIX}' not found (EGL)" |
788 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
789 | } |
790 | } |
791 | |
792 | if { "$::tcl_platform(platform)" == "windows" } { |
793 | set aDllPath [wokdep:SearchBin "libEGL.dll" "$anArchIter"] |
794 | if { "$aDllPath" == "" } { |
795 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{EGL}*] "$::VCVER" "$anArchIter" ] |
796 | set aDllPath [wokdep:SearchBin "libEGL.dll" "$anArchIter" "$aPath/bin"] |
797 | if { "$aDllPath" == "" } { |
798 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{angle}*] "$::VCVER" "$anArchIter" ] |
799 | set aDllPath [wokdep:SearchBin "libEGL.dll" "$anArchIter" "$aPath/bin"] |
800 | } |
801 | |
802 | if { "$aDllPath" != "" } { |
803 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin" |
804 | } else { |
805 | lappend anErrBin$anArchIter "Error: 'libEGL.dll' not found (EGL)" |
806 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
807 | } |
808 | } |
809 | } |
810 | } |
811 | |
812 | return "$isFound" |
813 | } |
814 | |
815 | # Search OpenGL ES 2.0 library placement |
816 | proc wokdep:SearchGLES {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
817 | upvar $theErrInc anErrInc |
818 | upvar $theErrLib32 anErrLib32 |
819 | upvar $theErrLib64 anErrLib64 |
820 | upvar $theErrBin32 anErrBin32 |
821 | upvar $theErrBin64 anErrBin64 |
822 | |
823 | set isFound "true" |
824 | set aHeaderPath [wokdep:SearchHeader "GLES2/gl2.h"] |
825 | if { "$aHeaderPath" == "" } { |
826 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{GLES}*] "$::VCVER" "$::ARCH" ] |
827 | if { "$aPath" == "" || ![file exists "$aPath/include/GLES2/gl2.h"] } { |
828 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{angle}*] "$::VCVER" "$::ARCH" ] |
829 | } |
830 | |
831 | if { "$aPath" != "" && [file exists "$aPath/include/GLES2/gl2.h"] } { |
832 | lappend ::CSF_OPT_INC "$aPath/include" |
833 | } else { |
834 | lappend anErrInc "Error: 'GLES2/gl2.h' not found (OpenGL ES 2.0)" |
835 | set isFound "false" |
836 | } |
837 | } |
838 | |
839 | set aLibName "GLESv2" |
840 | if { "$::tcl_platform(platform)" == "windows" } { |
841 | # awkward exception |
842 | set aLibName "libGLESv2" |
843 | } |
844 | |
845 | foreach anArchIter {64 32} { |
846 | set aLibPath [wokdep:SearchLib "$aLibName" "$anArchIter"] |
847 | if { "$aLibPath" == "" } { |
848 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{GLES}*] "$::VCVER" "$anArchIter" ] |
849 | set aLibPath [wokdep:SearchLib "$aLibName" "$anArchIter" "$aPath/lib"] |
850 | if { "$aLibPath" == "" } { |
851 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{angle}*] "$::VCVER" "$anArchIter" ] |
852 | set aLibPath [wokdep:SearchLib "$aLibName" "$anArchIter" "$aPath/lib"] |
853 | } |
854 | |
855 | if { "$aLibPath" != "" } { |
856 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib" |
857 | } else { |
858 | lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}${aLibName}.${::SYS_LIB_SUFFIX}' not found (OpenGL ES 2.0)" |
859 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
860 | } |
861 | } |
862 | |
863 | if { "$::tcl_platform(platform)" == "windows" } { |
864 | set aDllPath [wokdep:SearchBin "libGLESv2.dll" "$anArchIter"] |
865 | if { "$aDllPath" == "" } { |
866 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{EGL}*] "$::VCVER" "$anArchIter" ] |
867 | set aDllPath [wokdep:SearchBin "libGLESv2.dll" "$anArchIter" "$aPath/bin"] |
868 | if { "$aDllPath" == "" } { |
869 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{angle}*] "$::VCVER" "$anArchIter" ] |
870 | set aDllPath [wokdep:SearchBin "libGLESv2.dll" "$anArchIter" "$aPath/bin"] |
871 | } |
872 | |
873 | if { "$aDllPath" != "" } { |
874 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin" |
875 | } else { |
876 | lappend anErrBin$anArchIter "Error: 'libGLESv2.dll' not found (OpenGL ES 2.0)" |
877 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
878 | } |
879 | } |
880 | } |
881 | } |
882 | |
883 | return "$isFound" |
884 | } |
885 | |
0a419c51 |
886 | # Search RapidJSON headers |
887 | proc wokdep:SearchRapidJson {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
888 | upvar $theErrInc anErrInc |
889 | |
890 | set isFound "true" |
891 | set aRJHPath [wokdep:SearchHeader "rapidjson/rapidjson.h"] |
892 | if { "$aRJHPath" == "" } { |
893 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{rapidjson}*] "$::VCVER" "$::ARCH" ] |
894 | if { "$aPath" != "" && [file exists "$aPath/include/rapidjson/rapidjson.h"] } { |
895 | lappend ::CSF_OPT_INC "$aPath/include" |
896 | } else { |
897 | lappend anErrInc "Error: 'rapidjson/rapidjson.h' not found (RapidJSON)" |
898 | set isFound "false" |
899 | } |
900 | } |
901 | |
902 | return "$isFound" |
903 | } |
904 | |
910970ab |
905 | # Auxiliary function, gets VTK version to set default search directory |
906 | proc wokdep:VtkVersion { thePath } { |
907 | set aResult "6.1" |
908 | |
909 | set aVtkRoot [lindex [regexp -all -inline {[0-9.]*} [file tail $thePath]] 0] |
910 | if { "$aVtkRoot" != "" } { |
911 | set aVtkRoot [regexp -inline {[0-9]*.[0-9]*} $aVtkRoot] |
912 | if { "$aVtkRoot" != "" } { |
913 | set aResult $aVtkRoot |
914 | } |
915 | } |
916 | |
917 | return $aResult |
918 | } |
919 | |
920 | # Search VTK library placement |
921 | proc wokdep:SearchVTK {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
922 | upvar $theErrInc anErrInc |
923 | upvar $theErrLib32 anErrLib32 |
924 | upvar $theErrLib64 anErrLib64 |
925 | upvar $theErrBin32 anErrBin32 |
926 | upvar $theErrBin64 anErrBin64 |
927 | |
928 | set isFound "true" |
929 | |
930 | set aVtkPath "" |
931 | set aVtkIncPath [wokdep:SearchHeader "vtkConfigure.h"] |
932 | set aVtkVer [wokdep:VtkVersion $aVtkIncPath] |
933 | if { "$aVtkIncPath" == ""} { |
934 | set aPathList [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{VTK}*] |
935 | set aVtkPath [wokdep:Preferred "$aPathList" "$::VCVER" "$::ARCH" ] |
936 | if { "$aVtkPath" != "" && [file exists "$aVtkPath/include/vtk-[wokdep:VtkVersion $aVtkPath]/vtkConfigure.h"]} { |
937 | set aVtkVer [wokdep:VtkVersion $aVtkPath] |
938 | lappend ::CSF_OPT_INC "$aVtkPath/include/vtk-[wokdep:VtkVersion $aVtkPath]" |
939 | } else { # try to search in all found paths |
940 | set isFound "false" |
941 | foreach anIt $aPathList { |
942 | if { [file exists "$anIt/include/vtk-[wokdep:VtkVersion $anIt]/vtkConfigure.h"] } { |
943 | set aVtkPath $anIt |
944 | set aVtkVer [wokdep:VtkVersion $aVtkPath] |
945 | lappend ::CSF_OPT_INC "$anIt/include/vtk-[wokdep:VtkVersion $anIt]" |
946 | set isFound "true" |
947 | break |
948 | } |
949 | } |
950 | |
951 | # Bad case: we do not found vtkConfigure.h in all paths. |
952 | if { "$isFound" == "false"} { |
953 | lappend anErrInc "Error: 'vtkConfigure.h' not found (VTK)" |
954 | set isFound "false" |
955 | } |
956 | } |
957 | } |
958 | |
959 | set aVtkLibPath "" |
960 | foreach anArchIter {64 32} { |
961 | set aVtkLibPath [wokdep:SearchLib "vtkCommonCore-$aVtkVer" "$anArchIter"] |
962 | if { "$aVtkLibPath" == "" } { |
963 | set aPathList [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{VTK}*] |
964 | set aPath [wokdep:Preferred $aPathList "$::VCVER" "$anArchIter" ] |
965 | set aVtkLibPath [wokdep:SearchLib "vtkCommonCore-$aVtkVer" "$anArchIter" "$aPath/lib"] |
966 | if { "$aVtkLibPath" != "" } { |
967 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib" |
968 | } else { |
969 | set aPath [wokdep:SearchLib "vtkCommonCore-$aVtkVer" "$anArchIter" "$aVtkPath/lib"] |
970 | if { "$aPath" != "" } { |
971 | set aLibPath $aVtkIncPath |
972 | lappend ::CSF_OPT_LIB$anArchIter "$aLibPath/lib" |
973 | } else { |
974 | # The last chance: search /lib directory in all found paths |
975 | foreach anIt $aPathList { |
976 | set aVtkLibPath [wokdep:SearchLib "vtkCommonCore-$aVtkVer" "$anArchIter" "$anIt/lib"] |
977 | if { "$aVtkLibPath" != ""} { |
978 | lappend ::CSF_OPT_LIB$anArchIter "$anIt/lib" |
979 | break |
980 | } |
981 | } |
982 | if { "$aVtkLibPath" == "" } { |
983 | lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}vtkCommonCore-${aVtkVer}\.${::SYS_LIB_SUFFIX}' not found (VTK)" |
984 | if { "$::ARCH" == "$anArchIter" } { |
985 | set isFound "false" |
986 | } |
987 | } |
988 | } |
989 | } |
990 | } |
991 | } |
992 | |
993 | # Search binary path |
994 | if { "$::tcl_platform(platform)" == "windows" } { |
995 | foreach anArchIter {64 32} { |
996 | set aVtkBinPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter"] |
997 | if { "$aVtkBinPath" == "" } { |
998 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{VTK}*] "$::VCVER" "$anArchIter" ] |
999 | set aVtkBinPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter" "$aPath/bin"] |
1000 | if { "$aVtkBinPath" != "" } { lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin" |
1001 | } else { |
1002 | set aVtkBinPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter" "$aPath/lib"] |
1003 | if { "$aVtkBinPath" != "" } { lappend ::CSF_OPT_BIN$anArchIter "$aPath/lib" } |
1004 | } |
1005 | } |
1006 | } |
1007 | |
1008 | # We didn't find preferred binary path => search through inc path or among all available VTK directories |
1009 | if { "$aVtkBinPath" == "" } { |
1010 | # Try to find in lib path |
e31a8e52 |
1011 | set aPath [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter" "$aVtkLibPath/bin"] |
1012 | if { "$aPath" != "" } { lappend ::CSF_OPT_BIN$anArchIter "$aVtkLibPath/bin" |
1013 | } elseif { [wokdep:SearchBin "vtkCommonCore-${aVtkVer}.dll" "$anArchIter" "$aVtkLibPath/lib"] != "" } { |
1014 | lappend ::CSF_OPT_BIN$anArchIter "$aVtkLibPath/lib" |
910970ab |
1015 | } else { |
1016 | lappend anErrBin$anArchIter "Error: 'vtkCommonCore-${aVtkVer}.dll' not found (VTK)" |
1017 | set isFound "false" |
1018 | } |
1019 | } |
1020 | } |
1021 | |
1022 | return "$isFound" |
1023 | } |
1024 | |
1025 | # Search Qt4 libraries placement |
1026 | proc wokdep:SearchQt4 {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
1027 | upvar $theErrInc anErrInc |
1028 | upvar $theErrLib32 anErrLib32 |
1029 | upvar $theErrLib64 anErrLib64 |
1030 | upvar $theErrBin32 anErrBin32 |
1031 | upvar $theErrBin64 anErrBin64 |
1032 | |
1033 | set isFound "true" |
1034 | set aQMsgBoxHPath [wokdep:SearchHeader "QtGui/qmessagebox.h"] |
1035 | if { "$aQMsgBoxHPath" == "" } { |
1036 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{qt4}*] "$::VCVER" "$::ARCH" ] |
1037 | if { "$aPath" != "" && [file exists "$aPath/include/QtGui/qmessagebox.h"] } { |
1038 | lappend ::CSF_OPT_INC "$aPath/include" |
1039 | lappend ::CSF_OPT_INC "$aPath/include/Qt" |
1040 | lappend ::CSF_OPT_INC "$aPath/include/QtGui" |
1041 | lappend ::CSF_OPT_INC "$aPath/include/QtCore" |
1042 | } else { |
1043 | if { [file exists "/usr/include/qt4/QtGui/qmessagebox.h"] } { |
1044 | lappend ::CSF_OPT_INC "/usr/include/qt4" |
1045 | lappend ::CSF_OPT_INC "/usr/include/qt4/Qt" |
1046 | lappend ::CSF_OPT_INC "/usr/include/qt4/QtGui" |
1047 | lappend ::CSF_OPT_INC "/usr/include/qt4/QtCore" |
1048 | } else { |
1049 | lappend anErrInc "Error: 'QtGui/qmessagebox.h' not found (Qt4)" |
1050 | set isFound "false" |
1051 | } |
1052 | } |
1053 | } |
1054 | |
1055 | set aQtGuiLibName "QtGui" |
1056 | if { "$::tcl_platform(platform)" == "windows" } { |
1057 | set aQtGuiLibName "QtGui4" |
1058 | } |
1059 | |
1060 | foreach anArchIter {64 32} { |
1061 | set aQMsgBoxLibPath [wokdep:SearchLib "${aQtGuiLibName}" "$anArchIter"] |
1062 | if { "$aQMsgBoxLibPath" == "" } { |
1063 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{qt4}*] "$::VCVER" "$anArchIter" ] |
1064 | set aQMsgBoxLibPath [wokdep:SearchLib "${aQtGuiLibName}" "$anArchIter" "$aPath/lib"] |
1065 | if { "$aQMsgBoxLibPath" != "" } { |
1066 | lappend ::CSF_OPT_LIB$anArchIter "$aPath/lib" |
1067 | } else { |
1068 | lappend anErrLib$anArchIter "Error: '${::SYS_LIB_PREFIX}${aQtGuiLibName}.${::SYS_LIB_SUFFIX}' not found (Qt4)" |
1069 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
1070 | } |
1071 | } |
1072 | if { "$::tcl_platform(platform)" == "windows" } { |
1073 | set aQMsgBoxDllPath [wokdep:SearchBin "QtGui4.dll" "$anArchIter"] |
1074 | if { "$aQMsgBoxDllPath" == "" } { |
1075 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{qt4}*] "$::VCVER" "$anArchIter" ] |
1076 | set aQMsgBoxDllPath [wokdep:SearchBin "QtGui4.dll" "$anArchIter" "$aPath/bin"] |
1077 | if { "$aQMsgBoxDllPath" != "" } { |
1078 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin" |
1079 | } else { |
1080 | lappend anErrBin$anArchIter "Error: 'QtGui4.dll' not found (Qt4)" |
1081 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
1082 | } |
1083 | } |
1084 | } |
1085 | } |
1086 | |
1087 | return "$isFound" |
1088 | } |
1089 | |
1090 | # Search JDK placement |
1091 | proc wokdep:SearchJDK {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
1092 | upvar $theErrInc anErrInc |
1093 | upvar $theErrLib32 anErrLib32 |
1094 | upvar $theErrLib64 anErrLib64 |
1095 | upvar $theErrBin32 anErrBin32 |
1096 | upvar $theErrBin64 anErrBin64 |
1097 | |
1098 | set isFound "true" |
1099 | set aJniHPath [wokdep:SearchHeader "jni.h"] |
1100 | set aJniMdHPath [wokdep:SearchHeader "jni_md.h"] |
1101 | if { "$aJniHPath" == "" || "$aJniMdHPath" == "" } { |
1102 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{jdk,java}*] "$::VCVER" "$::ARCH" ] |
1103 | if { "$aPath" != "" && [file exists "$aPath/include/jni.h"] } { |
1104 | lappend ::CSF_OPT_INC "$aPath/include" |
1105 | if { "$::tcl_platform(platform)" == "windows" } { |
1106 | lappend ::CSF_OPT_INC "$aPath/include/win32" |
1107 | } elseif { [file exists "$aPath/include/linux"] } { |
1108 | lappend ::CSF_OPT_INC "$aPath/include/linux" |
1109 | } |
1110 | } else { |
1111 | if { [file exists "/System/Library/Frameworks/JavaVM.framework/Home/include/jni.h"] } { |
1112 | lappend ::CSF_OPT_INC "/System/Library/Frameworks/JavaVM.framework/Home/include" |
1113 | } else { |
1114 | lappend anErrInc "Error: 'jni.h' or 'jni_md.h' not found (JDK)" |
1115 | set isFound "false" |
1116 | } |
1117 | } |
1118 | } |
1119 | |
1120 | foreach anArchIter {64 32} { |
1121 | set aJavacPath [wokdep:SearchBin "javac${::SYS_EXE_SUFFIX}" "$anArchIter"] |
1122 | if { "$aJavacPath" == "" } { |
1123 | set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{jdk,java}*] "$::VCVER" "$anArchIter" ] |
1124 | set aJavacPath [wokdep:SearchBin "javac${::SYS_EXE_SUFFIX}" "$anArchIter" "$aPath/bin"] |
1125 | if { "$aJavacPath" != "" } { |
1126 | lappend ::CSF_OPT_BIN$anArchIter "$aPath/bin" |
1127 | } else { |
1128 | if { "$::ARCH" == "$anArchIter" && [file exists "/System/Library/Frameworks/JavaVM.framework/Home/bin/javac${::SYS_EXE_SUFFIX}"] } { |
1129 | lappend ::CSF_OPT_BIN$anArchIter "/System/Library/Frameworks/JavaVM.framework/Home/bin" |
1130 | } else { |
1131 | lappend anErrBin$anArchIter "Error: 'javac${::SYS_EXE_SUFFIX}' not found (JDK)" |
1132 | if { "$::ARCH" == "$anArchIter"} { set isFound "false" } |
1133 | } |
1134 | } |
1135 | } |
1136 | } |
1137 | |
1138 | return "$isFound" |
1139 | } |
1140 | |
1141 | # Search X11 libraries placement |
1142 | proc wokdep:SearchX11 {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} { |
1143 | upvar $theErrInc anErrInc |
1144 | upvar $theErrLib32 anErrLib32 |
1145 | upvar $theErrLib64 anErrLib64 |
1146 | upvar $theErrBin32 anErrBin32 |
1147 | upvar $theErrBin64 anErrBin64 |
1148 | |
1149 | set isFound "true" |
1150 | if { "$::tcl_platform(platform)" == "windows" || ( "$::tcl_platform(os)" == "Darwin" && "$::MACOSX_USE_GLX" != "true" ) } { |
1151 | return "$isFound" |
1152 | } |
1153 | |
1154 | set aXmuLibPath [wokdep:SearchLib "Xmu" "$::ARCH"] |
1155 | if { "$aXmuLibPath" == "" } { |
1156 | set aXmuLibPath [wokdep:SearchLib "Xmu" "$::ARCH" "/usr/X11/lib"] |
1157 | if { "$aXmuLibPath" != "" } { |
1158 | #lappend ::CSF_OPT_LIB$::ARCH "/usr/X11/lib" |
1159 | } else { |
1160 | lappend anErrLib$::ARCH "Error: '${::SYS_LIB_PREFIX}Xmu.${::SYS_LIB_SUFFIX}' not found (X11)" |
1161 | set isFound "false" |
1162 | } |
1163 | } |
1164 | |
1165 | return "$isFound" |
1166 | } |
1167 | |
aafe169f |
1168 | # Returns OCCT version string from file Standard_Version.hxx (if available) |
1169 | proc wokdep:DetectCasVersion {} { |
1170 | set occt_ver 7.0.0 |
1171 | set aCasRoot [file normalize [file dirname [info script]]] |
1172 | set filename "${aCasRoot}/src/Standard/Standard_Version.hxx" |
1173 | if { [file exists $filename] } { |
1174 | set fh [open $filename "r"] |
1175 | set fh_loaded [read $fh] |
1176 | close $fh |
1177 | regexp {[^/]\s*#\s*define\s+OCC_VERSION_COMPLETE\s+\"([^\s]*)\"} $fh_loaded dummy occt_ver |
1178 | } else { |
1179 | puts "Error: file '$filename' not found" |
1180 | } |
1181 | return $occt_ver |
1182 | } |
1183 | |
910970ab |
1184 | # Generate (override) custom environment file |
1185 | proc wokdep:SaveCustom {} { |
aafe169f |
1186 | set aGenInfo "This environment file was generated by genconf.tcl script at [clock format [clock seconds] -format "%Y.%m.%d %H:%M"]" |
910970ab |
1187 | if { "$::tcl_platform(platform)" == "windows" } { |
1188 | set aCustomFilePath "./custom.bat" |
1189 | set aFile [open $aCustomFilePath "w"] |
1190 | puts $aFile "@echo off" |
aafe169f |
1191 | puts $aFile "rem $aGenInfo" |
910970ab |
1192 | |
1193 | puts $aFile "" |
aafe169f |
1194 | puts $aFile "set PRJFMT=$::PRJFMT" |
910970ab |
1195 | puts $aFile "set VCVER=$::VCVER" |
1196 | puts $aFile "set ARCH=$::ARCH" |
1197 | puts $aFile "set VCVARS=$::VCVARS" |
1198 | puts $aFile "set SHORTCUT_HEADERS=$::SHORTCUT_HEADERS" |
1199 | |
1200 | puts $aFile "" |
1201 | puts $aFile "set \"PRODUCTS_PATH=$::PRODUCTS_PATH\"" |
1202 | |
1203 | puts $aFile "" |
1204 | puts $aFile "rem Optional 3rd-parties switches" |
e22105a9 |
1205 | foreach anEnvIter $::THE_ENV_VARIABLES { |
1206 | set aName ${anEnvIter} |
1207 | set aValue [set ::${anEnvIter}] |
1208 | if { "$aValue" != "" } { |
1209 | puts $aFile "set ${aName}=$aValue" |
1210 | } |
1211 | } |
910970ab |
1212 | |
1213 | set aStringInc [join $::CSF_OPT_INC $::SYS_PATH_SPLITTER] |
2506cf29 |
1214 | if { "$::PRODUCTS_PATH" != "" } { |
1215 | set aStringInc [regsub -all "$::PRODUCTS_PATH" $aStringInc "%PRODUCTS_PATH%"] |
1216 | } |
910970ab |
1217 | puts $aFile "" |
1218 | puts $aFile "rem Additional headers search paths" |
1219 | puts $aFile "set \"CSF_OPT_INC=$aStringInc\"" |
1220 | |
1221 | set aStringLib32 [join $::CSF_OPT_LIB32 $::SYS_PATH_SPLITTER] |
2506cf29 |
1222 | if { "$::PRODUCTS_PATH" != "" } { |
1223 | set aStringLib32 [regsub -all "$::PRODUCTS_PATH" $aStringLib32 "%PRODUCTS_PATH%"] |
1224 | } |
910970ab |
1225 | puts $aFile "" |
1226 | puts $aFile "rem Additional libraries (32-bit) search paths" |
1227 | puts $aFile "set \"CSF_OPT_LIB32=$aStringLib32\"" |
1228 | |
1229 | set aStringLib64 [join $::CSF_OPT_LIB64 $::SYS_PATH_SPLITTER] |
2506cf29 |
1230 | if { "$::PRODUCTS_PATH" != "" } { |
1231 | set aStringLib64 [regsub -all "$::PRODUCTS_PATH" $aStringLib64 "%PRODUCTS_PATH%"] |
1232 | } |
910970ab |
1233 | puts $aFile "" |
1234 | puts $aFile "rem Additional libraries (64-bit) search paths" |
1235 | puts $aFile "set \"CSF_OPT_LIB64=$aStringLib64\"" |
1236 | |
1237 | set aStringBin32 [join $::CSF_OPT_BIN32 $::SYS_PATH_SPLITTER] |
2506cf29 |
1238 | if { "$::PRODUCTS_PATH" != "" } { |
1239 | set aStringBin32 [regsub -all "$::PRODUCTS_PATH" $aStringBin32 "%PRODUCTS_PATH%"] |
1240 | } |
910970ab |
1241 | puts $aFile "" |
1242 | puts $aFile "rem Additional (32-bit) search paths" |
1243 | puts $aFile "set \"CSF_OPT_BIN32=$aStringBin32\"" |
1244 | |
1245 | set aStringBin64 [join $::CSF_OPT_BIN64 $::SYS_PATH_SPLITTER] |
2506cf29 |
1246 | if { "$::PRODUCTS_PATH" != "" } { |
1247 | set aStringBin64 [regsub -all "$::PRODUCTS_PATH" $aStringBin64 "%PRODUCTS_PATH%"] |
1248 | } |
910970ab |
1249 | puts $aFile "" |
1250 | puts $aFile "rem Additional (64-bit) search paths" |
1251 | puts $aFile "set \"CSF_OPT_BIN64=$aStringBin64\"" |
1252 | |
1253 | close $aFile |
1254 | } else { |
1255 | set aCustomFilePath "./custom.sh" |
1256 | set aFile [open $aCustomFilePath "w"] |
1257 | puts $aFile "#!/bin/bash" |
aafe169f |
1258 | puts $aFile "# $aGenInfo" |
910970ab |
1259 | |
c7d774c5 |
1260 | puts $aFile "" |
aafe169f |
1261 | puts $aFile "export PRJFMT=$::PRJFMT" |
c7d774c5 |
1262 | puts $aFile "export ARCH=$::ARCH" |
1263 | puts $aFile "export SHORTCUT_HEADERS=$::SHORTCUT_HEADERS" |
910970ab |
1264 | |
1265 | puts $aFile "" |
1266 | puts $aFile "export PRODUCTS_PATH=\"$::PRODUCTS_PATH\"" |
1267 | |
1268 | puts $aFile "" |
1269 | puts $aFile "# Optional 3rd-parties switches" |
e22105a9 |
1270 | foreach anEnvIter $::THE_ENV_VARIABLES { |
1271 | set aName ${anEnvIter} |
1272 | set aValue [set ::${anEnvIter}] |
1273 | if { "$aValue" != "" } { |
1274 | puts $aFile "export ${aName}=${aValue}" |
1275 | } |
910970ab |
1276 | } |
910970ab |
1277 | |
1278 | set aStringInc [join $::CSF_OPT_INC $::SYS_PATH_SPLITTER] |
2506cf29 |
1279 | if { "$::PRODUCTS_PATH" != "" } { |
1280 | set aStringInc [regsub -all "$::PRODUCTS_PATH" $aStringInc "\${PRODUCTS_PATH}"] |
1281 | } |
910970ab |
1282 | puts $aFile "" |
1283 | puts $aFile "# Additional headers search paths" |
1284 | puts $aFile "export CSF_OPT_INC=\"$aStringInc\"" |
1285 | |
2506cf29 |
1286 | set aStringLib [join [set ::CSF_OPT_LIB$::ARCH] $::SYS_PATH_SPLITTER] |
1287 | if { "$::PRODUCTS_PATH" != "" } { |
1288 | set aStringLib [regsub -all "$::PRODUCTS_PATH" $aStringLib "\${PRODUCTS_PATH}"] |
1289 | } |
910970ab |
1290 | puts $aFile "" |
1291 | puts $aFile "# Additional libraries ($::ARCH-bit) search paths" |
2506cf29 |
1292 | puts $aFile "export CSF_OPT_LIB$::ARCH=\"[set aStringLib]\"" |
910970ab |
1293 | |
2506cf29 |
1294 | set aStringBin [join [set ::CSF_OPT_BIN$::ARCH] $::SYS_PATH_SPLITTER] |
1295 | if { "$::PRODUCTS_PATH" != "" } { |
1296 | set aStringBin [regsub -all "$::PRODUCTS_PATH" $aStringBin "\${PRODUCTS_PATH}"] |
1297 | } |
910970ab |
1298 | puts $aFile "" |
1299 | puts $aFile "# Additional ($::ARCH-bit) search paths" |
2506cf29 |
1300 | puts $aFile "export CSF_OPT_BIN$::ARCH=\"[set aStringBin]\"" |
910970ab |
1301 | |
1302 | close $aFile |
1303 | } |
910970ab |
1304 | puts "Configuration saved to file '$aCustomFilePath'" |
aafe169f |
1305 | |
2506cf29 |
1306 | # generate custom.auto.pri |
1307 | set toExportCustomPri 1 |
1308 | if { $toExportCustomPri == 1 } { |
aafe169f |
1309 | set aCasVer [wokdep:DetectCasVersion] |
1310 | set aCustomFilePath "./adm/qmake/custom.auto.pri" |
1311 | set aFile [open $aCustomFilePath "w"] |
1312 | puts $aFile "# $aGenInfo" |
1313 | |
1314 | puts $aFile "" |
1315 | puts $aFile "VERSION=$aCasVer" |
1316 | puts $aFile "PRODUCTS_PATH=\"$::PRODUCTS_PATH\"" |
1317 | |
1318 | puts $aFile "" |
1319 | puts $aFile "# Optional 3rd-parties switches" |
1320 | foreach anEnvIter $::THE_ENV_VARIABLES { |
1321 | set aName ${anEnvIter} |
1322 | set aValue [set ::${anEnvIter}] |
1323 | if { "$aValue" == "true" } { |
1324 | puts $aFile "CONFIG += ${aName}" |
1325 | } else { |
1326 | #puts $aFile "CONFIG -= ${aName}" |
1327 | } |
1328 | } |
1329 | |
1330 | puts $aFile "" |
1331 | puts $aFile "# Additional headers search paths" |
1332 | foreach anIncPath $::CSF_OPT_INC { |
2506cf29 |
1333 | if { "$::PRODUCTS_PATH" != "" } { |
1334 | set anIncPath [regsub -all "$::PRODUCTS_PATH" $anIncPath "\$\$\{PRODUCTS_PATH\}"] |
1335 | } |
aafe169f |
1336 | puts $aFile "INCLUDEPATH += \"${anIncPath}\"" |
1337 | } |
1338 | |
1339 | puts $aFile "" |
1340 | puts $aFile "# Additional libraries search paths" |
1341 | foreach aLibPath [set ::CSF_OPT_LIB$::ARCH] { |
2506cf29 |
1342 | if { "$::PRODUCTS_PATH" != "" } { |
1343 | set aLibPath [regsub -all "$::PRODUCTS_PATH" $aLibPath "\$\$\{PRODUCTS_PATH\}"] |
1344 | } |
aafe169f |
1345 | puts $aFile "LIBS += -L\"${aLibPath}\"" |
1346 | } |
1347 | |
1348 | if { "$::tcl_platform(platform)" == "windows" } { |
1349 | puts $aFile "" |
1350 | puts $aFile "# Additional DLLs search paths" |
1351 | foreach aDllPath [set ::CSF_OPT_BIN$::ARCH] { |
2506cf29 |
1352 | if { "$::PRODUCTS_PATH" != "" } { |
1353 | set aDllPath [regsub -all "$::PRODUCTS_PATH" $aDllPath "\$\$\{PRODUCTS_PATH\}"] |
1354 | } |
aafe169f |
1355 | puts $aFile "LIBS += -L\"${aDllPath}\"" |
1356 | } |
1357 | } |
1358 | |
1359 | puts $aFile "" |
1360 | close $aFile |
1361 | puts "Configuration saved to file '$aCustomFilePath'" |
1362 | } |
910970ab |
1363 | } |