0030966: Configuration, genproj.tcl - look for an optional libraries e57 and xerces
[occt.git] / adm / genconfdeps.tcl
index 50d2c7f..030879d 100644 (file)
@@ -68,7 +68,7 @@ if { [info exists ::env(SHORTCUT_HEADERS)] } {
 }
 
 # fetch environment variables (e.g. set by custom.sh or custom.bat) and set them as tcl variables with the same name
-set THE_ENV_VARIABLES {HAVE_FREEIMAGE HAVE_FFMPEG HAVE_TBB HAVE_GLES2 HAVE_D3D HAVE_VTK HAVE_ZLIB HAVE_LIBLZMA HAVE_OPENCL CHECK_QT4 CHECK_JDK MACOSX_USE_GLX HAVE_RelWithDebInfo}
+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}
 foreach anEnvIter $THE_ENV_VARIABLES {
   set ${anEnvIter} "false"
   if { [info exists ::env(${anEnvIter})] } {
@@ -85,11 +85,14 @@ if { "$tcl_platform(platform)" != "windows" } {
   set HAVE_D3D ""
   set HAVE_RelWithDebInfo ""
 }
-foreach anEnvIter {ARCH VCVER VCVARS PRJFMT PRODUCTS_PATH} {
+foreach anEnvIter {ARCH VCVER VCVARS PRJFMT } {
   if { [info exists ::env(${anEnvIter})] } {
     set ${anEnvIter} "$::env(${anEnvIter})"
   }
 }
+if { [info exists ::env(PRODUCTS_PATH)] } {
+  set PRODUCTS_PATH [file normalize "$::env(PRODUCTS_PATH)"]
+}
 
 if { [info exists ::env(CSF_OPT_INC)] } {
   set CSF_OPT_INC [split "$::env(CSF_OPT_INC)" $::SYS_PATH_SPLITTER]
@@ -143,9 +146,12 @@ proc wokdep:SearchHeader {theHeader} {
 # Search library file in $::CSF_OPT_LIB* and standard paths
 proc wokdep:SearchLib {theLib theBitness {theSearchPath ""}} {
   if { "$theSearchPath" != "" } {
-    set aPath "${theSearchPath}/${::SYS_LIB_PREFIX}${theLib}.${::SYS_LIB_SUFFIX}"
+    set aPath  "${theSearchPath}/${::SYS_LIB_PREFIX}${theLib}.${::SYS_LIB_SUFFIX}"
+    set aPath2 "${theSearchPath}/${::SYS_LIB_PREFIX}${theLib}.a"
     if { [file exists "$aPath"] } {
       return "$aPath"
+    } elseif { "$::tcl_platform(platform)" != "windows" && [file exists "$aPath2"] } {
+      return "$aPath2"
     } else {
       return ""
     }
@@ -153,31 +159,42 @@ proc wokdep:SearchLib {theLib theBitness {theSearchPath ""}} {
 
   # search in custom paths
   foreach aLibPath [set ::CSF_OPT_LIB$theBitness] {
-    set aPath "${aLibPath}/${::SYS_LIB_PREFIX}${theLib}.${::SYS_LIB_SUFFIX}"
+    set aPath  "${aLibPath}/${::SYS_LIB_PREFIX}${theLib}.${::SYS_LIB_SUFFIX}"
+    set aPath2 "${aLibPath}/${::SYS_LIB_PREFIX}${theLib}.a"
     if { [file exists "$aPath"] } {
       return "$aPath"
+    } elseif { "$::tcl_platform(platform)" != "windows" && [file exists "$aPath2"] } {
+      return "$aPath2"
     }
   }
 
   # search in system
   if { "$::ARCH" == "$theBitness"} {
-    set aPath "/usr/lib/${::SYS_LIB_PREFIX}${theLib}.${::SYS_LIB_SUFFIX}"
+    set aPath  "/usr/lib/${::SYS_LIB_PREFIX}${theLib}.${::SYS_LIB_SUFFIX}"
+    set aPath2 "/usr/lib/${::SYS_LIB_PREFIX}${theLib}.a"
     if { [file exists "$aPath"] } {
       return "$aPath"
+    } elseif { [file exists "$aPath2"] } {
+      return "$aPath2"
     }
   }
 
-
   if { "$::tcl_platform(os)" == "Linux" } {
     if { "$theBitness" == "64" } {
-      set aPath "/usr/lib/x86_64-linux-gnu/lib${theLib}.so"
+      set aPath  "/usr/lib/x86_64-linux-gnu/lib${theLib}.so"
+      set aPath2 "/usr/lib/x86_64-linux-gnu/lib${theLib}.a"
       if { [file exists "$aPath"] } {
         return "$aPath"
+      } elseif { [file exists "$aPath2"] } {
+        return "$aPath2"
       }
     } else {
-      set aPath "/usr/lib/i386-linux-gnu/lib${theLib}.so"
+      set aPath  "/usr/lib/i386-linux-gnu/lib${theLib}.so"
+      set aPath2 "/usr/lib/i386-linux-gnu/lib${theLib}.a"
       if { [file exists "$aPath"] } {
         return "$aPath"
+      } elseif { [file exists "$aPath2"] } {
+        return "$aPath2"
       }
     }
   }
@@ -858,6 +875,25 @@ proc wokdep:SearchGLES {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin6
   return "$isFound"
 }
 
+# Search RapidJSON headers
+proc wokdep:SearchRapidJson {theErrInc theErrLib32 theErrLib64 theErrBin32 theErrBin64} {
+  upvar $theErrInc anErrInc
+
+  set isFound "true"
+  set aRJHPath [wokdep:SearchHeader "rapidjson/rapidjson.h"]
+  if { "$aRJHPath"  == "" } {
+    set aPath [wokdep:Preferred [glob -nocomplain -directory "$::PRODUCTS_PATH" -type d *{rapidjson}*] "$::VCVER" "$::ARCH" ]
+    if { "$aPath" != "" && [file exists "$aPath/include/rapidjson/rapidjson.h"] } {
+      lappend ::CSF_OPT_INC "$aPath/include"
+    } else {
+      lappend anErrInc "Error: 'rapidjson/rapidjson.h' not found (RapidJSON)"
+      set isFound "false"
+    }
+  }
+
+  return "$isFound"
+}
+
 # Auxiliary function, gets VTK version to set default search directory
 proc wokdep:VtkVersion { thePath } {
   set aResult "6.1"
@@ -1167,26 +1203,41 @@ proc wokdep:SaveCustom {} {
     }
 
     set aStringInc [join $::CSF_OPT_INC $::SYS_PATH_SPLITTER]
+    if { "$::PRODUCTS_PATH" != "" } {
+      set aStringInc [regsub -all "$::PRODUCTS_PATH" $aStringInc "%PRODUCTS_PATH%"]
+    }
     puts $aFile ""
     puts $aFile "rem Additional headers search paths"
     puts $aFile "set \"CSF_OPT_INC=$aStringInc\""
 
     set aStringLib32 [join $::CSF_OPT_LIB32 $::SYS_PATH_SPLITTER]
+    if { "$::PRODUCTS_PATH" != "" } {
+      set aStringLib32 [regsub -all "$::PRODUCTS_PATH" $aStringLib32 "%PRODUCTS_PATH%"]
+    }
     puts $aFile ""
     puts $aFile "rem Additional libraries (32-bit) search paths"
     puts $aFile "set \"CSF_OPT_LIB32=$aStringLib32\""
 
     set aStringLib64 [join $::CSF_OPT_LIB64 $::SYS_PATH_SPLITTER]
+    if { "$::PRODUCTS_PATH" != "" } {
+      set aStringLib64 [regsub -all "$::PRODUCTS_PATH" $aStringLib64 "%PRODUCTS_PATH%"]
+    }
     puts $aFile ""
     puts $aFile "rem Additional libraries (64-bit) search paths"
     puts $aFile "set \"CSF_OPT_LIB64=$aStringLib64\""
 
     set aStringBin32 [join $::CSF_OPT_BIN32 $::SYS_PATH_SPLITTER]
+    if { "$::PRODUCTS_PATH" != "" } {
+      set aStringBin32 [regsub -all "$::PRODUCTS_PATH" $aStringBin32 "%PRODUCTS_PATH%"]
+    }
     puts $aFile ""
     puts $aFile "rem Additional (32-bit) search paths"
     puts $aFile "set \"CSF_OPT_BIN32=$aStringBin32\""
 
     set aStringBin64 [join $::CSF_OPT_BIN64 $::SYS_PATH_SPLITTER]
+    if { "$::PRODUCTS_PATH" != "" } {
+      set aStringBin64 [regsub -all "$::PRODUCTS_PATH" $aStringBin64 "%PRODUCTS_PATH%"]
+    }
     puts $aFile ""
     puts $aFile "rem Additional (64-bit) search paths"
     puts $aFile "set \"CSF_OPT_BIN64=$aStringBin64\""
@@ -1217,25 +1268,36 @@ proc wokdep:SaveCustom {} {
     }
 
     set aStringInc [join $::CSF_OPT_INC $::SYS_PATH_SPLITTER]
+    if { "$::PRODUCTS_PATH" != "" } {
+      set aStringInc [regsub -all "$::PRODUCTS_PATH" $aStringInc "\${PRODUCTS_PATH}"]
+    }
     puts $aFile ""
     puts $aFile "# Additional headers search paths"
     puts $aFile "export CSF_OPT_INC=\"$aStringInc\""
 
-    set aStringLib$::ARCH [join [set ::CSF_OPT_LIB$::ARCH] $::SYS_PATH_SPLITTER]
+    set aStringLib [join [set ::CSF_OPT_LIB$::ARCH] $::SYS_PATH_SPLITTER]
+    if { "$::PRODUCTS_PATH" != "" } {
+      set aStringLib [regsub -all "$::PRODUCTS_PATH" $aStringLib "\${PRODUCTS_PATH}"]
+    }
     puts $aFile ""
     puts $aFile "# Additional libraries ($::ARCH-bit) search paths"
-    puts $aFile "export CSF_OPT_LIB$::ARCH=\"[set aStringLib$::ARCH]\""
+    puts $aFile "export CSF_OPT_LIB$::ARCH=\"[set aStringLib]\""
 
-    set aStringBin$::ARCH [join [set ::CSF_OPT_BIN$::ARCH] $::SYS_PATH_SPLITTER]
+    set aStringBin [join [set ::CSF_OPT_BIN$::ARCH] $::SYS_PATH_SPLITTER]
+    if { "$::PRODUCTS_PATH" != "" } {
+      set aStringBin [regsub -all "$::PRODUCTS_PATH" $aStringBin "\${PRODUCTS_PATH}"]
+    }
     puts $aFile ""
     puts $aFile "# Additional ($::ARCH-bit) search paths"
-    puts $aFile "export CSF_OPT_BIN$::ARCH=\"[set aStringBin$::ARCH]\""
+    puts $aFile "export CSF_OPT_BIN$::ARCH=\"[set aStringBin]\""
 
     close $aFile
   }
   puts "Configuration saved to file '$aCustomFilePath'"
 
-  if { "$::PRJFMT" == "pro" } {
+  # generate custom.auto.pri
+  set toExportCustomPri 1
+  if { $toExportCustomPri == 1 } {
     set aCasVer [wokdep:DetectCasVersion]
     set aCustomFilePath "./adm/qmake/custom.auto.pri"
     set aFile [open $aCustomFilePath "w"]
@@ -1260,12 +1322,18 @@ proc wokdep:SaveCustom {} {
     puts $aFile ""
     puts $aFile "# Additional headers search paths"
     foreach anIncPath $::CSF_OPT_INC {
+      if { "$::PRODUCTS_PATH" != "" } {
+        set anIncPath [regsub -all "$::PRODUCTS_PATH" $anIncPath "\$\$\{PRODUCTS_PATH\}"]
+      }
       puts $aFile "INCLUDEPATH += \"${anIncPath}\""
     }
 
     puts $aFile ""
     puts $aFile "# Additional libraries search paths"
     foreach aLibPath [set ::CSF_OPT_LIB$::ARCH] {
+      if { "$::PRODUCTS_PATH" != "" } {
+        set aLibPath [regsub -all "$::PRODUCTS_PATH" $aLibPath "\$\$\{PRODUCTS_PATH\}"]
+      }
       puts $aFile "LIBS += -L\"${aLibPath}\""
     }
 
@@ -1273,6 +1341,9 @@ proc wokdep:SaveCustom {} {
       puts $aFile ""
       puts $aFile "# Additional DLLs search paths"
       foreach aDllPath [set ::CSF_OPT_BIN$::ARCH] {
+        if { "$::PRODUCTS_PATH" != "" } {
+          set aDllPath [regsub -all "$::PRODUCTS_PATH" $aDllPath "\$\$\{PRODUCTS_PATH\}"]
+        }
         puts $aFile "LIBS += -L\"${aDllPath}\""
       }
     }