Browse Source

Add opencascade-7.9.1 (#7435)

* adding opencascade v7.9.1

* cleanup and handling vtk

* use `path.unix`

* try check if default config shared causes ci problem to build only dynamic libs in static builds

* enabling only foundation-classes module to save ci time [TEST ONLY - WILL BE REVERTED]

* revert default configs and remove CMAKE_POLICY_VERSION_MINIMUM as it is defined by xmake

* patching to remove pragma linkage of FreeImage on Image/Image_AlienPixMap.cxx

* [review_response.waruqi] format, cleanup and introducing add_mapped_deps for proper dep chaining

* removing gen_occt_modules_components.lua

---------

Co-authored-by: Saikari <[email protected]>
Can Ozen 2 months ago
parent
commit
8a22af9b63

+ 1065 - 0
packages/o/opencascade/opencascade.modules.components.7.9.1.json

@@ -0,0 +1,1065 @@
+{
+  "DETools": {
+    "ExpToCasExe": {
+      "links": ["TKernel", "TKExpress"],
+      "syslinks": ["CSF_wsock32"]
+    },
+    "TKExpress": { "links": ["TKernel"] }
+  },
+  "FoundationClasses": {
+    "TKernel": {
+      "deps": ["CSF_TBB", "CSF_MMGR"],
+      "syslinks": [
+        "CSF_ThreadLibs",
+        "CSF_advapi32",
+        "CSF_gdi32",
+        "CSF_user32",
+        "CSF_dl",
+        "CSF_wsock32",
+        "CSF_psapi",
+        "CSF_androidlog"
+      ]
+    },
+    "TKMath": { "links": ["TKernel"], "deps": ["CSF_TBB"] }
+  },
+  "Draw": {
+    "TKViewerTest": {
+      "links": [
+        "TKGeomBase",
+        "TKFillet",
+        "TKBRep",
+        "TKTopAlgo",
+        "TKHLR",
+        "TKernel",
+        "TKMath",
+        "TKService",
+        "TKShHealing",
+        "TKBool",
+        "TKPrim",
+        "TKGeomAlgo",
+        "TKG2d",
+        "TKTopTest",
+        "TKG3d",
+        "TKOffset",
+        "TKMesh",
+        "TKV3d",
+        "TKDraw"
+      ],
+      "frameworks": ["CSF_objc", "CSF_Appkit", "CSF_IOKit"],
+      "syslinks": ["CSF_user32", "CSF_gdi32"],
+      "deps": ["CSF_TclLibs", "CSF_XwLibs", "CSF_FREETYPE"]
+    },
+    "TKXSDRAWGLTF": {
+      "links": [
+        "TKBRep",
+        "TKV3d",
+        "TKMath",
+        "TKernel",
+        "TKService",
+        "TKXSBase",
+        "TKMeshVS",
+        "TKG3d",
+        "TKViewerTest",
+        "TKG2d",
+        "TKTopAlgo",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKMesh",
+        "TKDraw",
+        "TKLCAF",
+        "TKDCAF",
+        "TKXCAF",
+        "TKRWMesh",
+        "TKDEGLTF",
+        "TKXSDRAW"
+      ]
+    },
+    "TKXDEDRAW": {
+      "links": [
+        "TKDE",
+        "TKCDF",
+        "TKBRep",
+        "TKXCAF",
+        "TKernel",
+        "TKV3d",
+        "TKMath",
+        "TKService",
+        "TKXSBase",
+        "TKG2d",
+        "TKCAF",
+        "TKVCAF",
+        "TKDraw",
+        "TKTopAlgo",
+        "TKLCAF",
+        "TKG3d",
+        "TKRWMesh",
+        "TKDEOBJ",
+        "TKDEGLTF",
+        "TKDEPLY",
+        "TKDESTL",
+        "TKMesh",
+        "TKXSDRAW",
+        "TKDECascade",
+        "TKDEIGES",
+        "TKDESTEP",
+        "TKDCAF",
+        "TKViewerTest",
+        "TKBinXCAF",
+        "TKXmlXCAF",
+        "TKDEVRML"
+      ]
+    },
+    "TKQADraw": {
+      "links": [
+        "TKBRep",
+        "TKMath",
+        "TKernel",
+        "TKService",
+        "TKG2d",
+        "TKDraw",
+        "TKV3d",
+        "TKGeomBase",
+        "TKG3d",
+        "TKViewerTest",
+        "TKCDF",
+        "TKDCAF",
+        "TKLCAF",
+        "TKFillet",
+        "TKTopAlgo",
+        "TKHLR",
+        "TKBool",
+        "TKGeomAlgo",
+        "TKPrim",
+        "TKBO",
+        "TKShHealing",
+        "TKOffset",
+        "TKFeat",
+        "TKCAF",
+        "TKVCAF",
+        "TKDEIGES",
+        "TKXSBase",
+        "TKMesh",
+        "TKXCAF",
+        "TKBinXCAF",
+        "TKDESTEP",
+        "TKXSDRAW",
+        "TKDESTL",
+        "TKXml",
+        "TKTObj",
+        "TKXmlL",
+        "TKBin",
+        "TKBinL",
+        "TKStd",
+        "TKStdL",
+        "TKExpress"
+      ],
+      "deps": ["CSF_TBB"],
+      "syslinks": ["CSF_gdi32", "CSF_advapi32", "CSF_user32"]
+    },
+    "TKD3DHostTest": {
+      "links": ["TKernel", "TKMath", "TKDraw", "TKD3DHost", "TKService"]
+    },
+    "TKOpenGlTest": {
+      "links": [
+        "TKernel",
+        "TKMath",
+        "TKDraw",
+        "TKOpenGl",
+        "TKService",
+        "TKV3d",
+        "TKViewerTest"
+      ],
+      "deps": ["CSF_OpenGlLibs"]
+    },
+    "TKXSDRAWSTL": {
+      "links": [
+        "TKBRep",
+        "TKV3d",
+        "TKMath",
+        "TKernel",
+        "TKService",
+        "TKXSBase",
+        "TKMeshVS",
+        "TKG3d",
+        "TKViewerTest",
+        "TKG2d",
+        "TKTopAlgo",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKMesh",
+        "TKDraw",
+        "TKLCAF",
+        "TKDCAF",
+        "TKXCAF",
+        "TKRWMesh",
+        "TKDESTL",
+        "TKXSDRAW"
+      ]
+    },
+    "TKXSDRAWPLY": {
+      "links": [
+        "TKBRep",
+        "TKV3d",
+        "TKMath",
+        "TKernel",
+        "TKService",
+        "TKXSBase",
+        "TKMeshVS",
+        "TKG3d",
+        "TKViewerTest",
+        "TKG2d",
+        "TKTopAlgo",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKMesh",
+        "TKDraw",
+        "TKLCAF",
+        "TKDCAF",
+        "TKXCAF",
+        "TKRWMesh",
+        "TKDEPLY",
+        "TKXSDRAW"
+      ]
+    },
+    "TKXSDRAWIGES": {
+      "links": [
+        "TKBRep",
+        "TKV3d",
+        "TKMath",
+        "TKernel",
+        "TKService",
+        "TKXSBase",
+        "TKMeshVS",
+        "TKG3d",
+        "TKViewerTest",
+        "TKG2d",
+        "TKTopAlgo",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKMesh",
+        "TKDraw",
+        "TKLCAF",
+        "TKDCAF",
+        "TKXCAF",
+        "TKXSBase",
+        "TKDEIGES",
+        "TKXSDRAW"
+      ]
+    },
+    "TKDraw": {
+      "links": [
+        "TKernel",
+        "TKG2d",
+        "TKGeomBase",
+        "TKG3d",
+        "TKMath",
+        "TKBRep",
+        "TKGeomAlgo",
+        "TKShHealing",
+        "TKMesh",
+        "TKService",
+        "TKHLR",
+        "TKTopAlgo"
+      ],
+      "frameworks": ["CSF_objc", "CSF_Appkit", "CSF_IOKit"],
+      "syslinks": [
+        "CSF_gdi32",
+        "CSF_advapi32",
+        "CSF_user32",
+        "CSF_shell32",
+        "CSF_ThreadLibs"
+      ],
+      "deps": ["CSF_TclLibs", "CSF_TclTkLibs", "CSF_XwLibs", "CSF_TBB"]
+    },
+    "TKXSDRAW": {
+      "links": [
+        "TKBRep",
+        "TKV3d",
+        "TKMath",
+        "TKernel",
+        "TKService",
+        "TKXSBase",
+        "TKMeshVS",
+        "TKG3d",
+        "TKViewerTest",
+        "TKG2d",
+        "TKTopAlgo",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKMesh",
+        "TKDraw",
+        "TKLCAF",
+        "TKDCAF",
+        "TKXCAF"
+      ]
+    },
+    "TKXSDRAWSTEP": {
+      "links": [
+        "TKBRep",
+        "TKV3d",
+        "TKMath",
+        "TKernel",
+        "TKService",
+        "TKXSBase",
+        "TKMeshVS",
+        "TKG3d",
+        "TKViewerTest",
+        "TKG2d",
+        "TKTopAlgo",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKMesh",
+        "TKDraw",
+        "TKLCAF",
+        "TKDCAF",
+        "TKXCAF",
+        "TKRWMesh",
+        "TKXSBase",
+        "TKDESTEP",
+        "TKXSDRAW"
+      ]
+    },
+    "TKIVtkDraw": {
+      "links": [
+        "TKernel",
+        "TKBRep",
+        "TKDraw",
+        "TKG2d",
+        "TKG3d",
+        "TKGeomAlgo",
+        "TKGeomBase",
+        "TKMath",
+        "TKMesh",
+        "TKService",
+        "TKTopAlgo",
+        "TKV3d",
+        "TKOpenGl",
+        "TKIVtk"
+      ],
+      "deps": ["CSF_VTK", "CSF_TclLibs", "CSF_XwLibs"],
+      "syslinks": ["CSF_user32"]
+    },
+    "TKXSDRAWVRML": {
+      "links": [
+        "TKBRep",
+        "TKV3d",
+        "TKMath",
+        "TKernel",
+        "TKService",
+        "TKXSBase",
+        "TKMeshVS",
+        "TKG3d",
+        "TKViewerTest",
+        "TKG2d",
+        "TKTopAlgo",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKMesh",
+        "TKDraw",
+        "TKLCAF",
+        "TKDCAF",
+        "TKXCAF",
+        "TKRWMesh",
+        "TKDEVRML",
+        "TKXSDRAW"
+      ]
+    },
+    "DRAWEXE": {
+      "links": [
+        "TKDraw",
+        "TKMesh",
+        "TKShHealing",
+        "TKTopAlgo",
+        "TKHLR",
+        "TKGeomAlgo",
+        "TKGeomBase",
+        "TKG2d",
+        "TKBRep",
+        "TKMath",
+        "TKG3d",
+        "TKernel",
+        "TKService"
+      ]
+    },
+    "TKXSDRAWOBJ": {
+      "links": [
+        "TKBRep",
+        "TKV3d",
+        "TKMath",
+        "TKernel",
+        "TKService",
+        "TKXSBase",
+        "TKMeshVS",
+        "TKG3d",
+        "TKViewerTest",
+        "TKG2d",
+        "TKTopAlgo",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKMesh",
+        "TKDraw",
+        "TKLCAF",
+        "TKDCAF",
+        "TKXCAF",
+        "TKRWMesh",
+        "TKDEOBJ",
+        "TKXSDRAW"
+      ]
+    },
+    "TKOpenGlesTest": {
+      "links": [
+        "TKernel",
+        "TKMath",
+        "TKDraw",
+        "TKOpenGles",
+        "TKService",
+        "TKV3d",
+        "TKViewerTest"
+      ],
+      "deps": ["CSF_OpenGlesLibs"]
+    },
+    "TKTObjDRAW": {
+      "links": [
+        "TKernel",
+        "TKCDF",
+        "TKLCAF",
+        "TKTObj",
+        "TKMath",
+        "TKDraw",
+        "TKDCAF",
+        "TKBinTObj",
+        "TKXmlTObj"
+      ]
+    },
+    "TKTopTest": {
+      "links": [
+        "TKBRep",
+        "TKGeomAlgo",
+        "TKTopAlgo",
+        "TKernel",
+        "TKMath",
+        "TKBO",
+        "TKG2d",
+        "TKG3d",
+        "TKDraw",
+        "TKHLR",
+        "TKGeomBase",
+        "TKMesh",
+        "TKService",
+        "TKV3d",
+        "TKFillet",
+        "TKPrim",
+        "TKBool",
+        "TKOffset",
+        "TKFeat",
+        "TKShHealing"
+      ]
+    },
+    "TKXSDRAWDE": {
+      "links": [
+        "TKBRep",
+        "TKV3d",
+        "TKMath",
+        "TKernel",
+        "TKService",
+        "TKXSBase",
+        "TKMeshVS",
+        "TKG3d",
+        "TKViewerTest",
+        "TKG2d",
+        "TKTopAlgo",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKMesh",
+        "TKDraw",
+        "TKLCAF",
+        "TKDCAF",
+        "TKXCAF",
+        "TKRWMesh",
+        "TKXSBase",
+        "TKDECascade",
+        "TKDE",
+        "TKXSDRAW"
+      ]
+    },
+    "TKDCAF": {
+      "links": [
+        "TKGeomBase",
+        "TKBRep",
+        "TKGeomAlgo",
+        "TKernel",
+        "TKMath",
+        "TKG2d",
+        "TKG3d",
+        "TKDraw",
+        "TKCDF",
+        "TKV3d",
+        "TKService",
+        "TKLCAF",
+        "TKFillet",
+        "TKTopAlgo",
+        "TKPrim",
+        "TKBool",
+        "TKBO",
+        "TKCAF",
+        "TKVCAF",
+        "TKViewerTest",
+        "TKStd",
+        "TKStdL",
+        "TKBin",
+        "TKBinL",
+        "TKXml",
+        "TKXmlL"
+      ]
+    }
+  },
+  "DataExchange": {
+    "TKXmlXCAF": {
+      "links": [
+        "TKXmlL",
+        "TKBRep",
+        "TKCDF",
+        "TKMath",
+        "TKernel",
+        "TKService",
+        "TKG2d",
+        "TKGeomBase",
+        "TKCAF",
+        "TKG3d",
+        "TKLCAF",
+        "TKXCAF",
+        "TKXml"
+      ]
+    },
+    "TKRWMesh": {
+      "links": [
+        "TKernel",
+        "TKMath",
+        "TKMesh",
+        "TKXCAF",
+        "TKLCAF",
+        "TKV3d",
+        "TKBRep",
+        "TKG3d",
+        "TKDE",
+        "TKService"
+      ],
+      "deps": ["CSF_RapidJSON", "CSF_Draco"]
+    },
+    "TKDESTL": {
+      "links": [
+        "TKDE",
+        "TKernel",
+        "TKMath",
+        "TKBRep",
+        "TKG2d",
+        "TKG3d",
+        "TKTopAlgo",
+        "TKLCAF",
+        "TKXCAF"
+      ]
+    },
+    "TKDEPLY": {
+      "links": [
+        "TKernel",
+        "TKMath",
+        "TKMesh",
+        "TKXCAF",
+        "TKLCAF",
+        "TKV3d",
+        "TKBRep",
+        "TKG3d",
+        "TKDE",
+        "TKService",
+        "TKRWMesh"
+      ],
+      "deps": ["CSF_RapidJSON"]
+    },
+    "TKDEVRML": {
+      "links": [
+        "TKBRep",
+        "TKDE",
+        "TKTopAlgo",
+        "TKMath",
+        "TKGeomBase",
+        "TKernel",
+        "TKPrim",
+        "TKG2d",
+        "TKG3d",
+        "TKMesh",
+        "TKHLR",
+        "TKRWMesh",
+        "TKService",
+        "TKGeomAlgo",
+        "TKV3d",
+        "TKLCAF",
+        "TKXCAF",
+        "TKXSBase"
+      ]
+    },
+    "TKDEIGES": {
+      "links": [
+        "TKBRep",
+        "TKDE",
+        "TKernel",
+        "TKMath",
+        "TKTopAlgo",
+        "TKShHealing",
+        "TKXSBase",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKBool",
+        "TKPrim",
+        "TKCDF",
+        "TKLCAF",
+        "TKG2d",
+        "TKG3d",
+        "TKXCAF"
+      ]
+    },
+    "TKBinXCAF": {
+      "links": [
+        "TKBRep",
+        "TKXCAF",
+        "TKMath",
+        "TKService",
+        "TKernel",
+        "TKBinL",
+        "TKG2d",
+        "TKCAF",
+        "TKCDF",
+        "TKG3d",
+        "TKLCAF",
+        "TKBin"
+      ]
+    },
+    "TKDE": { "links": ["TKernel", "TKMath", "TKBRep"] },
+    "TKDEOBJ": {
+      "links": [
+        "TKernel",
+        "TKMath",
+        "TKMesh",
+        "TKXCAF",
+        "TKLCAF",
+        "TKV3d",
+        "TKBRep",
+        "TKG3d",
+        "TKDE",
+        "TKService",
+        "TKRWMesh"
+      ],
+      "deps": ["CSF_RapidJSON"]
+    },
+    "TKXSBase": {
+      "links": [
+        "TKBRep",
+        "TKernel",
+        "TKMath",
+        "TKG2d",
+        "TKG3d",
+        "TKTopAlgo",
+        "TKGeomBase",
+        "TKShHealing"
+      ]
+    },
+    "TKDECascade": {
+      "links": [
+        "TKBin",
+        "TKBinL",
+        "TKBinTObj",
+        "TKBinXCAF",
+        "TKBRep",
+        "TKStd",
+        "TKXml",
+        "TKXmlL",
+        "TKXmlTObj",
+        "TKXmlXCAF",
+        "TKDE",
+        "TKernel",
+        "TKMath",
+        "TKLCAF",
+        "TKXCAF",
+        "TKStdL",
+        "TKCDF"
+      ]
+    },
+    "TKXCAF": {
+      "links": [
+        "TKBRep",
+        "TKernel",
+        "TKMath",
+        "TKService",
+        "TKG2d",
+        "TKTopAlgo",
+        "TKV3d",
+        "TKCDF",
+        "TKLCAF",
+        "TKG3d",
+        "TKCAF",
+        "TKVCAF"
+      ]
+    },
+    "TKDESTEP": {
+      "links": [
+        "TKDE",
+        "TKBRep",
+        "TKernel",
+        "TKMath",
+        "TKXSBase",
+        "TKTopAlgo",
+        "TKG2d",
+        "TKCAF",
+        "TKCDF",
+        "TKLCAF",
+        "TKG3d",
+        "TKXCAF",
+        "TKShHealing",
+        "TKernel",
+        "TKBRep",
+        "TKMath",
+        "TKG2d",
+        "TKShHealing",
+        "TKTopAlgo",
+        "TKG3d",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKXSBase"
+      ]
+    },
+    "TKDEGLTF": {
+      "links": [
+        "TKernel",
+        "TKMath",
+        "TKMesh",
+        "TKXCAF",
+        "TKLCAF",
+        "TKV3d",
+        "TKBRep",
+        "TKG3d",
+        "TKDE",
+        "TKService",
+        "TKRWMesh"
+      ],
+      "deps": ["CSF_RapidJSON", "CSF_Draco"]
+    }
+  },
+  "ApplicationFramework": {
+    "TKVCAF": {
+      "links": [
+        "TKernel",
+        "TKGeomBase",
+        "TKBRep",
+        "TKTopAlgo",
+        "TKMath",
+        "TKService",
+        "TKG2d",
+        "TKG3d",
+        "TKCDF",
+        "TKLCAF",
+        "TKBO",
+        "TKCAF",
+        "TKV3d"
+      ]
+    },
+    "TKTObj": { "links": ["TKCDF", "TKernel", "TKMath", "TKLCAF"] },
+    "TKStd": {
+      "links": [
+        "TKernel",
+        "TKCDF",
+        "TKCAF",
+        "TKLCAF",
+        "TKBRep",
+        "TKMath",
+        "TKG2d",
+        "TKG3d",
+        "TKStdL"
+      ]
+    },
+    "TKXmlTObj": {
+      "links": ["TKCDF", "TKernel", "TKTObj", "TKMath", "TKLCAF", "TKXmlL"]
+    },
+    "TKCAF": {
+      "links": [
+        "TKernel",
+        "TKGeomBase",
+        "TKBRep",
+        "TKTopAlgo",
+        "TKMath",
+        "TKG2d",
+        "TKG3d",
+        "TKCDF",
+        "TKLCAF",
+        "TKBO"
+      ]
+    },
+    "TKLCAF": { "links": ["TKCDF", "TKernel"] },
+    "TKCDF": { "links": ["TKernel"] },
+    "TKXmlL": { "links": ["TKCDF", "TKernel", "TKMath", "TKLCAF"] },
+    "TKXml": {
+      "links": [
+        "TKCDF",
+        "TKernel",
+        "TKMath",
+        "TKBRep",
+        "TKG2d",
+        "TKGeomBase",
+        "TKG3d",
+        "TKLCAF",
+        "TKCAF",
+        "TKXmlL"
+      ]
+    },
+    "TKBinTObj": {
+      "links": ["TKCDF", "TKernel", "TKTObj", "TKMath", "TKLCAF", "TKBinL"]
+    },
+    "TKBinL": { "links": ["TKCDF", "TKernel", "TKLCAF"] },
+    "TKStdL": { "links": ["TKernel", "TKCDF", "TKLCAF"] },
+    "TKBin": {
+      "links": [
+        "TKBRep",
+        "TKMath",
+        "TKernel",
+        "TKG2d",
+        "TKG3d",
+        "TKCAF",
+        "TKCDF",
+        "TKLCAF",
+        "TKBinL"
+      ]
+    }
+  },
+  "Visualization": {
+    "TKIVtk": {
+      "links": [
+        "TKernel",
+        "TKBRep",
+        "TKG2d",
+        "TKG3d",
+        "TKGeomAlgo",
+        "TKGeomBase",
+        "TKMath",
+        "TKMesh",
+        "TKService",
+        "TKTopAlgo",
+        "TKV3d"
+      ],
+      "deps": ["CSF_VTK"]
+    },
+    "TKService": {
+      "links": ["TKernel", "TKMath"],
+      "frameworks": ["CSF_objc", "CSF_Appkit", "CSF_IOKit"],
+      "deps": [
+        "CSF_OpenVR",
+        "CSF_XwLibs",
+        "CSF_fontconfig",
+        "CSF_FreeImagePlus",
+        "CSF_FREETYPE",
+        "CSF_FFmpeg"
+      ],
+      "syslinks": [
+        "CSF_user32",
+        "CSF_advapi32",
+        "CSF_advapi32",
+        "CSF_user32",
+        "CSF_dpsLibs",
+        "CSF_XmuLibs",
+        "CSF_winmm"
+      ]
+    },
+    "TKD3DHost": {
+      "links": ["TKernel", "TKService", "TKMath", "TKV3d", "TKOpenGl"],
+      "syslinks": ["CSF_user32", "CSF_gdi32", "CSF_d3d9"],
+      "deps": ["CSF_XwLibs", "CSF_OpenGlLibs"]
+    },
+    "TKOpenGles": {
+      "links": ["TKernel", "TKService", "TKMath"],
+      "frameworks": ["CSF_Appkit", "CSF_IOKit", "CSF_objc"],
+      "syslinks": ["CSF_user32", "CSF_gdi32"],
+      "deps": ["CSF_TBB", "CSF_FREETYPE", "CSF_OpenGlesLibs", "CSF_XwLibs"]
+    },
+    "TKMeshVS": {
+      "links": ["TKV3d", "TKMath", "TKService", "TKernel", "TKG3d", "TKG2d"]
+    },
+    "TKV3d": {
+      "links": [
+        "TKBRep",
+        "TKMath",
+        "TKernel",
+        "TKService",
+        "TKShHealing",
+        "TKTopAlgo",
+        "TKG2d",
+        "TKG3d",
+        "TKGeomBase",
+        "TKMesh",
+        "TKGeomAlgo",
+        "TKHLR"
+      ],
+      "deps": ["CSF_FREETYPE", "CSF_TBB"],
+      "syslinks": ["CSF_user32", "CSF_gdi32"]
+    },
+    "TKOpenGl": {
+      "links": ["TKernel", "TKService", "TKMath"],
+      "frameworks": ["CSF_Appkit", "CSF_IOKit", "CSF_objc"],
+      "syslinks": ["CSF_user32", "CSF_gdi32"],
+      "deps": ["CSF_TBB", "CSF_OpenGlLibs", "CSF_XwLibs"]
+    }
+  },
+  "ModelingData": {
+    "TKG3d": { "links": ["TKMath", "TKernel", "TKG2d"] },
+    "TKBRep": {
+      "links": ["TKMath", "TKernel", "TKG2d", "TKG3d", "TKGeomBase"]
+    },
+    "TKG2d": { "links": ["TKernel", "TKMath"] },
+    "TKGeomBase": {
+      "links": ["TKernel", "TKMath", "TKG2d", "TKG3d"],
+      "deps": ["CSF_TBB"]
+    }
+  },
+  "ModelingAlgorithms": {
+    "TKBO": {
+      "links": [
+        "TKBRep",
+        "TKTopAlgo",
+        "TKMath",
+        "TKernel",
+        "TKG2d",
+        "TKG3d",
+        "TKGeomAlgo",
+        "TKGeomBase",
+        "TKPrim",
+        "TKShHealing"
+      ],
+      "deps": ["CSF_TBB"]
+    },
+    "TKFillet": {
+      "links": [
+        "TKBRep",
+        "TKernel",
+        "TKMath",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKG2d",
+        "TKTopAlgo",
+        "TKG3d",
+        "TKBool",
+        "TKShHealing",
+        "TKBO"
+      ]
+    },
+    "TKXMesh": {
+      "links": ["TKBRep", "TKMath", "TKernel", "TKG2d", "TKG3d", "TKMesh"]
+    },
+    "TKOffset": {
+      "links": [
+        "TKFillet",
+        "TKBRep",
+        "TKTopAlgo",
+        "TKMath",
+        "TKernel",
+        "TKGeomBase",
+        "TKG2d",
+        "TKG3d",
+        "TKGeomAlgo",
+        "TKShHealing",
+        "TKBO",
+        "TKPrim",
+        "TKBool"
+      ]
+    },
+    "TKTopAlgo": {
+      "links": [
+        "TKMath",
+        "TKernel",
+        "TKG2d",
+        "TKG3d",
+        "TKGeomBase",
+        "TKBRep",
+        "TKGeomAlgo"
+      ],
+      "deps": ["CSF_TBB"]
+    },
+    "TKGeomAlgo": {
+      "links": ["TKernel", "TKMath", "TKG3d", "TKG2d", "TKGeomBase", "TKBRep"]
+    },
+    "TKShHealing": {
+      "links": [
+        "TKBRep",
+        "TKernel",
+        "TKMath",
+        "TKG2d",
+        "TKTopAlgo",
+        "TKG3d",
+        "TKGeomBase",
+        "TKGeomAlgo"
+      ],
+      "syslinks": ["CSF_wsock32"]
+    },
+    "TKMesh": {
+      "links": [
+        "TKernel",
+        "TKMath",
+        "TKBRep",
+        "TKTopAlgo",
+        "TKShHealing",
+        "TKGeomBase",
+        "TKG3d",
+        "TKG2d"
+      ]
+    },
+    "TKHLR": {
+      "links": [
+        "TKBRep",
+        "TKernel",
+        "TKMath",
+        "TKGeomBase",
+        "TKG2d",
+        "TKG3d",
+        "TKGeomAlgo",
+        "TKTopAlgo"
+      ]
+    },
+    "TKFeat": {
+      "links": [
+        "TKBRep",
+        "TKTopAlgo",
+        "TKGeomAlgo",
+        "TKMath",
+        "TKernel",
+        "TKGeomBase",
+        "TKPrim",
+        "TKG2d",
+        "TKBO",
+        "TKG3d",
+        "TKBool",
+        "TKShHealing"
+      ]
+    },
+    "TKPrim": {
+      "links": [
+        "TKBRep",
+        "TKernel",
+        "TKMath",
+        "TKG2d",
+        "TKGeomBase",
+        "TKG3d",
+        "TKTopAlgo"
+      ]
+    },
+    "TKBool": {
+      "links": [
+        "TKBRep",
+        "TKTopAlgo",
+        "TKMath",
+        "TKernel",
+        "TKPrim",
+        "TKG2d",
+        "TKG3d",
+        "TKShHealing",
+        "TKGeomBase",
+        "TKGeomAlgo",
+        "TKBO"
+      ]
+    }
+  }
+}

+ 558 - 0
packages/o/opencascade/xmake.lua

@@ -0,0 +1,558 @@
+package("opencascade")
+    set_homepage("https://dev.opencascade.org/")
+    set_description("Open CASCADE Technology (OCCT) is an open-source software development platform for 3D CAD, CAM, CAE.")
+    set_license("LGPL-2.1")
+
+    add_urls("https://github.com/Open-Cascade-SAS/OCCT/archive/refs/tags/V$(version).tar.gz",
+            {version = function (version) return version:gsub("%.", "_") end})
+
+--[[ note: to add new versions, opencascade.modules.components.<version>.json must be provided. 
+     it can be generated by parsing the OCCT source's MODULES and EXTERNLIB files from a GitHub
+     release archive to extract and categorize module/component dependencies. 
+     for more info: https://gist.github.com/ecoezen/9ac2babb0abca3151c637df635f02207
+    ]]
+     
+    add_versions("7.9.1", "de442298cd8860f5580b01007f67f0ecd0b8900cfa4da467fa3c823c2d1a45df")
+
+    add_deps("cmake")
+    
+    -- Core OCCT modules
+    add_configs("foundation_classes",     {description = "Build Foundation Classes module.",         default = true,  type = "boolean", readonly = true})
+    add_configs("modeling_data",          {description = "Build Modeling Data module.",              default = true,  type = "boolean"})
+    add_configs("modeling_algorithms",    {description = "Build Modeling Algorithms module.",        default = true,  type = "boolean"})
+    add_configs("visualization",          {description = "Build Visualization module.",              default = true,  type = "boolean"})
+    add_configs("application_framework",  {description = "Build Application Framework module.",      default = true,  type = "boolean"})
+    add_configs("data_exchange",          {description = "Build Data Exchange module.",              default = true,  type = "boolean"})
+    add_configs("de_tools",               {description = "Build Data Exchange Tools module.",        default = true,  type = "boolean"})
+    -- currently not supported.
+    add_configs("draw",                   {description = "Build DRAW Test Harness and related modules.", default = false, type = "boolean", readonly = true})
+    
+    add_configs("draco",                    {description = "Build with Draco support.",                       default = false, type = "boolean"})
+    add_configs("d3d9",                     {description = "Build with D3D9 support.",                        default = false, type = "boolean"})
+    add_configs("extended_debug_messages",  {description = "Enable extended debug messages in Debug builds.", default = false, type = "boolean"})
+    add_configs("ffmpeg",                   {description = "Build with FFMPEG support.",                      default = false, type = "boolean"})
+    add_configs("freeimage",                {description = "Build with FreeImage support.",                   default = false, type = "boolean"})
+    add_configs("freetype",                 {description = "Build with FreeType support.",                    default = false, type = "boolean"})
+    add_configs("gles2",                    {description = "Build with OpenGL ES support.",                   default = false, type = "boolean"})
+    add_configs("opengl",                   {description = "Build with OpenGL support.",                      default = false, type = "boolean"})    
+    add_configs("openvr",                   {description = "Build with OpenVR support.",                      default = false, type = "boolean"})
+    add_configs("rapidjson",                {description = "Build with RapidJSON support.",                   default = false, type = "boolean"})
+    add_configs("tbb",                      {description = "Build with TBB support.",                         default = false, type = "boolean"})
+    add_configs("tk",                       {description = "Build with TK support for DRAW.",                 default = false, type = "boolean"})
+    add_configs("vtk",                      {description = "Build with VTK support.",                         default = false, type = "boolean"})
+    add_configs("cxx_standard",             {description = "Select c++ standard to build.",                   default = "11", type = "string", values = {"11", "14", "17", "20", "23"}})
+
+    on_load(function (package)
+        import("core.base.json")
+
+        
+        local function config_override_all(configs, value, reason)
+            assert(type(configs) == "table", "Expected a table for config keys")
+            local overridden = {}
+
+            for _, name in ipairs(configs) do
+                if package:config(name) ~= value then
+                    package:config_set(name, value)
+                    table.insert(overridden, name)
+                end
+            end
+
+            if #overridden > 0 and reason then
+                cprint("${yellow}warning: configs [%s] were overridden to %s. Reason: %s",
+                    table.concat(overridden, ", "), tostring(value), reason)
+            end
+        end
+    
+        local function enable_dependent_config(_config, config_depends)
+            if package:config(_config) then
+                if not package:config(config_depends) then
+                    cprint("${yellow}warning: '%s' depends on '%s', which was disabled. Enabling it automatically.", 
+                    _config, config_depends)
+                    package:config_set(config_depends, true)
+                end
+            end
+        end
+        -- unsupported/disabled configs 
+        config_override_all({
+            "draw",     -- currently not supported. TODO
+            "gles2",    -- currently not supported/tested
+            "ffmpeg"    -- build failures
+        }, false, "Disabled due to current lack of support or known build failures.")
+        -- Fallthrough BEGIN
+        enable_dependent_config("draw", "data_exchange")
+        enable_dependent_config("data_exchange", "application_framework")
+        enable_dependent_config("application_framework", "visualization")
+        enable_dependent_config("visualization", "modeling_algorithms")
+        enable_dependent_config("modeling_algorithms", "modeling_data")
+        -- Fallthrough END       
+        if package:version():lt("7.7.2") or package:version():gt("7.9.1") then
+            config_override_all({"de_tools"}, false, 
+            "de_tools module is not relevant to this version of opencascade.")
+        end
+
+        if not package:config("visualization") then
+            -- seems like compatible with upcoming version 8.0.0 [TODO]
+            config_override_all({
+                "opengl",
+                "gles2",
+                "openvr",
+                "freetype",
+                "freeimage",
+                "ffmpeg",
+                "d3d9",
+                "vtk"
+            }, false, "Given configs only relevant to opencascade visualization module, which is is disabled.")
+        else
+            config_override_all({
+                "opengl"
+             --   ,"gles2" TODO
+            }, true, "Given configs are required to build opencascade visualization module, which is is enabled.")
+
+            if package:version():lt("7.6.0") then
+                config_override_all({
+                    "freeimage"
+                }, true, "freeimage is required opencascade visualization module in this version.")
+            end
+
+            if not package:is_targetos("windows", "mingw") then
+                config_override_all({
+                    "d3d9"
+                }, false, "Direct3D9 support is a windows-only configuration.")
+            end
+        end
+
+        if not package:config("data_exchange") then
+            config_override_all({
+                "draco",
+                "rapidjson"
+            }, false,"Given configs only relevant to opencascade data exchange module, which is is disabled.")
+        end
+
+        if not package:config("draw") then
+            config_override_all({
+                "tk",
+                "tcl"
+            }, false, "Given configs only relevant to opencascade draw module, which is is disabled and currently not supported.")         
+        end
+
+        if not package:is_debug() then
+            config_override_all({"extended_debug_messages"}, false, "Supported only on debug mode.")
+        end
+
+        local occt_cmake_to_xmake_deps = {
+        ["CSF_FREETYPE"]      = package:config("freetype")   and { deps = {"freetype"} } or nil,
+        ["CSF_TclLibs"]       = package:config("tcl")        and { deps = {"tcl"} } or nil,
+        ["CSF_fontconfig"]    = package:is_plat("linux")     and { deps = {"fontconfig"} } or nil,
+        ["CSF_XwLibs"]        = package:is_plat("linux")     and { deps = {"libx11"} } or nil, -- ? not sure
+        -- optional deps
+        ["CSF_OpenGlLibs"]    = package:config("opengl")     and { deps = {"opengl"} } or nil,
+        -- missing opengles. TODO
+        ["CSF_TclTkLibs"]     = package:config("tk")         and { deps = {"tk"} } or nil,
+        ["CSF_FFmpeg"]        = package:config("ffmpeg")     and { deps = {"ffmpeg"} } or nil,
+        ["CSF_FreeImagePlus"] = package:config("freeimage")  and { deps = {"freeimage"} } or nil,
+        ["CSF_OpenVR"]        = package:config("openvr")     and { deps = {"openvr"} } or nil,
+        ["CSF_RapidJSON"]     = package:config("rapidjson")  and { deps = {"rapidjson"} } or nil,
+        ["CSF_Draco"]         = package:config("draco")      and { deps = {"draco"} } or nil,
+        ["CSF_TBB"]           = package:config("tbb")        and { deps = {"tbb"} } or nil,
+        ["CSF_VTK"]           = package:config("vtk")        and { deps = {"vtk"} } or nil,
+        ["CSF_MMGR"]          = nil,
+        -- system libs
+        ["CSF_androidlog"]    = package:is_plat("android")   and { syslinks = {"log"} } or nil,
+        ["CSF_ThreadLibs"]    = package:is_plat("linux")     and { syslinks = {"pthread", "rt"} } or nil,
+        ["CSF_dl"]            = package:is_plat("linux")     and { syslinks = {"dl"} } or nil,
+        ["CSF_dpsLibs"]       = nil,
+        ["CSF_XmuLibs"]       = nil,
+        ["CSF_advapi32"]      = package:is_plat("windows")   and { syslinks = {"advapi32"} } or nil,
+        ["CSF_gdi32"]         = package:is_plat("windows")   and { syslinks = {"gdi32"} } or nil,
+        ["CSF_psapi"]         = package:is_plat("windows")   and { syslinks = {"psapi"} } or nil,
+        ["CSF_shell32"]       = package:is_plat("windows")   and { syslinks = {"shell32"} } or nil,
+        ["CSF_user32"]        = package:is_plat("windows")   and { syslinks = {"user32"} } or nil,
+        ["CSF_winmm"]         = package:is_plat("windows")   and { syslinks = {"winmm"} } or nil,
+        ["CSF_wsock32"]       = package:is_plat("windows")   and { syslinks = {"wsock32"} } or nil,
+        ["CSF_d3d9"]          = package:config("d3d9")       and { syslinks = {"d3d9"} } or nil,
+        -- macOS / iOS frameworks
+        ["CSF_Appkit"]        = package:is_plat("iphoneos") and { frameworks = {"UIKit"} }
+                            or (package:is_plat("macosx") and { frameworks = {"AppKit"} } or nil),
+        ["CSF_IOKit"]         = package:is_plat("macosx")    and { frameworks = {"IOKit"} } or nil,
+        ["CSF_objc"]          = package:is_plat("macosx", "iphoneos")   and { syslinks = {"objc"} } or nil,
+        }
+
+        local function add_mapped_deps(dep_kind)
+            for cmake_dep, xmake_dep in pairs(occt_cmake_to_xmake_deps) do
+                if xmake_dep then
+                    local deps = xmake_dep[dep_kind]
+                    if deps then
+                        for _, syslib in ipairs(deps) do
+                            package:add(dep_kind, syslib)
+                        end
+                    end
+                end
+            end        
+        end
+        -- Fallthrough BEGIN
+        add_mapped_deps("syslinks")
+        add_mapped_deps("frameworks")
+        add_mapped_deps("deps")
+        -- Fallthrough END
+        local occt_component_map = {}
+        local json_file_name = "opencascade.modules.components." .. package:version() .. ".json"
+        local json_file_path = path.join(os.scriptdir(), json_file_name)
+
+        if os.isfile(json_file_path) then
+            local json_str = io.readfile(json_file_path)
+            occt_component_map = json.decode(json_str)
+        else
+            raise("Missing OpenCascade component map: %s\nEnsure the file exists for version %s.", json_file_name, version)
+        end
+        -- based on version 7.9.1. if any version adds new module, please add.
+        -- do not remove modules even if the version removes one.
+        -- DETools module introduced with v7.7 and removed in upcoming v8
+        local occt_module_to_component_name = {
+            FoundationClasses = "foundation-classes",
+            ModelingData = "modeling-data",
+            ModelingAlgorithms = "modeling-algorithms",
+            Visualization = "visualization",
+            ApplicationFramework = "application-framework",
+            DataExchange = "data-exchange",
+            DETools = "de-tools",
+            Draw = "draw"
+        }
+        local conditional_modules = {
+            FoundationClasses = package:config("foundation_classes"),
+            ModelingData = package:config("modeling_data"),
+            ModelingAlgorithms = package:config("modeling_algorithms"),
+            Visualization = package:config("visualization"),
+            ApplicationFramework = package:config("application_framework"),
+            DataExchange = package:config("data_exchange"),
+            DETools = package:config("de_tools"),
+            Draw = package:config("draw")
+        }
+        local conditional_toolkits = { 
+            TKD3DHost = package:config("d3d9") and package:config("visualization"),
+            TKD3DHostTest = package:config("d3d9") and package:config("draw"),
+            TKIVtk = package:config("vtk") and package:config("visualization"),
+            TKIVtkDraw = package:config("vtk") and package:config("draw"),
+            TKOpenGles = package:config("gles2") and package:config("visualization"),
+            TKOpenGlesTest = package:config("gles2") and package:config("draw"),
+            TKOpenGl = package:config("opengl") and package:config("visualization"),
+            TKOpenGlTest = package:config("opengl") and package:config("draw"),
+            -- executables that are excluded from components (is there any way to use them as components properly?)
+            ExpToCasExe = false
+        }
+        -- first, only add components : programmatic add_components
+        for occt_module, condition in pairs(conditional_modules) do
+            if condition then
+                local module_info = occt_component_map[occt_module]
+                if module_info then
+                    local module_comp_name = occt_module_to_component_name[occt_module]                  
+                    package:add("components", module_comp_name)
+
+                    for toolkit, toolkit_info in pairs(module_info) do                                                
+                        if conditional_toolkits[toolkit] ~= false then
+                            package:add("components", toolkit:lower())
+                        end
+                    end
+                end
+            end
+        end
+        -- second, handle component deps, links.. : programmatic on_component
+        for occt_module, condition in pairs(conditional_modules) do
+            if condition then
+                local module_info = occt_component_map[occt_module]
+                if module_info then                    
+                    local module_comp_name = occt_module_to_component_name[occt_module]
+                    local module_component = package:component(module_comp_name)
+                    for toolkit, toolkit_info in pairs(module_info) do                        
+                        if conditional_toolkits[toolkit] ~= false then                            
+                            local toolkit_component = package:component(toolkit:lower())                           
+                            -- should we remove this from components?
+                            if toolkit_info.syslinks then
+                                for _, cmake_syslib in ipairs(toolkit_info.syslinks) do
+                                    local dep_info  = occt_cmake_to_xmake_deps[cmake_syslib]
+                                    if dep_info and dep_info.syslinks then
+                                        for _, syslib in ipairs(dep_info.syslinks) do
+                                            toolkit_component:add("syslinks", syslib)
+                                            module_component:add("syslinks", syslib)
+                                        end
+                                    end
+                                end
+                            end                            
+                            -- should we remove this from components?
+                            if toolkit_info.frameworks then
+                                for _, cmake_syslib in ipairs(toolkit_info.frameworks) do
+                                    local dep_info  = occt_cmake_to_xmake_deps[cmake_syslib]
+                                    if dep_info and dep_info.frameworks then
+                                        for _, framework in ipairs(dep_info.frameworks) do
+                                            toolkit_component:add("frameworks", framework)
+                                            module_component:add("frameworks", framework)
+                                        end
+                                    end
+                                end
+                            end
+                            -- seems like component does not recognizes packages as deps
+                            -- as it raise warning like unknown component (tbb)
+                            -- skipping here as syslinks and  deps are still globally
+                            -- available maybe it is best to remove above syslinks
+                            -- per component and rely on package scope.
+                            if toolkit_info.links then
+                                for _, internal in ipairs(toolkit_info.links) do
+                                    toolkit_component:add("links", internal)
+                                end
+                            end                            
+                            -- add toolkit itself as links
+                            toolkit_component:add("links", toolkit)
+                            -- add links to the module component as well
+                            module_component:add("links", toolkit)
+                        end
+                    end
+                end
+            end
+        end
+        -- TODO add linkorders
+    end)
+
+    on_install("windows", "macosx", "linux", function (package)
+        local configs = {}
+        table.insert(configs, "-DCMAKE_POLICY_DEFAULT_CMP0042=NEW") 
+        table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))      
+        table.insert(configs, "-DBUILD_LIBRARY_TYPE=" .. (package:config("shared") and "Shared" or "Static"))
+
+        if package:version():ge("7.8.0") then
+            table.insert(configs, "-DBUILD_CPP_STANDARD=C++" .. package:config("cxx_standard"))
+        end
+
+        if package:is_debug() then
+            table.insert(configs, "-DBUILD_WITH_DEBUG=" .. (package:config("extended_debug_messages") and "ON" or "OFF"))
+        end
+
+        if package:is_plat("windows", "mingw") then
+            table.insert(configs, "-DBUILD_SAMPLES_MFC=OFF")
+            table.insert(configs, "-DUSE_D3D=" .. (package:config("d3d9") and "ON" or "OFF"))
+        end
+
+        if package:is_plat("macosx") then
+            table.insert(configs, "-DUSE_GLX=OFF")
+        end
+
+        table.insert(configs, "-DINSTALL_SAMPLES=OFF")
+        table.insert(configs, "-DINSTALL_TEST_CASES=OFF")
+        table.insert(configs, "-DINSTALL_DIR_LAYOUT=Unix")
+        table.insert(configs, "-DINSTALL_DIR_BIN=bin")
+        table.insert(configs, "-DINSTALL_DIR_LIB=lib")
+        table.insert(configs, "-DINSTALL_DIR_INCLUDE=include")
+        table.insert(configs, "-DINSTALL_DIR_RESOURCE=res/resource")
+        table.insert(configs, "-DINSTALL_DIR_DATA=res/data")
+        table.insert(configs, "-DINSTALL_DIR_SAMPLES=res/samples")
+        table.insert(configs, "-DINSTALL_DIR_DOC=res/doc")
+        table.insert(configs, "-DBUILD_RESOURCES=OFF")
+        table.insert(configs, "-DBUILD_USE_PCH=OFF")
+        table.insert(configs, "-DBUILD_USE_VCPKG=OFF")
+        table.insert(configs, "-DBUILD_YACCLEX=OFF")
+        table.insert(configs, "-DBUILD_Inspector=OFF")
+        table.insert(configs, "-DBUILD_ENABLE_FPE_SIGNAL_HANDLER=OFF")
+        table.insert(configs, "-DBUILD_DOC_Overview=OFF")
+        table.insert(configs, "-DBUILD_SAMPLES_QT=OFF")
+        table.insert(configs, "-DBUILD_RELEASE_DISABLE_EXCEPTIONS=ON")
+        -- enable/disable occt modules
+        table.insert(configs, "-DBUILD_MODULE_FoundationClasses=" .. (package:config("foundation_classes") and "ON" or "OFF"))
+        table.insert(configs, "-DBUILD_MODULE_ModelingData=" .. (package:config("modeling_data") and "ON" or "OFF"))
+        table.insert(configs, "-DBUILD_MODULE_ModelingAlgorithms=" .. (package:config("modeling_algorithms") and "ON" or "OFF"))
+        table.insert(configs, "-DBUILD_MODULE_Visualization=" .. (package:config("visualization") and "ON" or "OFF"))
+        table.insert(configs, "-DBUILD_MODULE_ApplicationFramework=" .. (package:config("application_framework") and "ON" or "OFF"))
+        table.insert(configs, "-DBUILD_MODULE_DataExchange=" .. (package:config("data_exchange") and "ON" or "OFF"))
+        -- currently not supported
+        table.insert(configs, "-DBUILD_MODULE_Draw=" .. (package:config("draw") and "ON" or "OFF"))
+
+        if package:version():ge("7.7.2") or package:version():le("7.9.1") then
+            table.insert(configs, "-DBUILD_MODULE_DETools=" .. (package:config("de_tools") and "ON" or "OFF"))
+        end
+        
+        table.insert(configs, "-DUSE_TBB=" .. (package:config("tbb") and "ON" or "OFF"))
+        table.insert(configs, "-DUSE_FREEIMAGE=" .. (package:config("freeimage") and "ON" or "OFF"))    
+        table.insert(configs, "-DUSE_FFMPEG=" .. (package:config("ffmpeg") and "ON" or "OFF"))          
+        table.insert(configs, "-DUSE_VTK=" .. (package:config("vtk") and "ON" or "OFF"))          
+        table.insert(configs, "-DUSE_OPENGL=" .. (package:config("opengl") and "ON" or "OFF"))
+        table.insert(configs, "-DUSE_OPENVR=" .. (package:config("openvr") and "ON" or "OFF"))
+        table.insert(configs, "-DUSE_GLES2=" .. (package:config("gles2") and "ON" or "OFF"))            
+        table.insert(configs, "-DUSE_DRACO=" .. (package:config("draco") and "ON" or "OFF"))
+        table.insert(configs, "-DUSE_TK=" .. (package:config("tk") and "ON" or "OFF"))
+
+        if package:version():ge("7.6.0") then
+            table.insert(configs, "-DUSE_FREETYPE=" .. (package:config("freetype") and "ON" or "OFF"))
+        end
+
+        local cmakelists = "CMakeLists.txt"
+        local occt_csf_cmake_file = "adm/cmake/occt_csf.cmake"
+
+        if package:config("tbb") then
+            local dep_tbb = package:dep("tbb")
+            table.insert(configs, "-D3RDPARTY_TBB_DIR=" .. path.unix(dep_tbb:installdir()))
+            local tbb_libs = table.concat(dep_tbb:get("links") or {"tbb", "tbbmalloc", "tbbmalloc_proxy"}, " ")
+            io.replace(
+                occt_csf_cmake_file,
+                "set (CSF_TBB \"tbb tbbmalloc\")",
+                "set (CSF_TBB \"".. tbb_libs .. "\")",
+                {plain = true}
+            )
+        end
+
+        if package:config("freetype") then
+            local dep_freetype = package:dep("freetype")
+            table.insert(configs, "-D3RDPARTY_FREETYPE_DIR=" .. path.unix(dep_freetype:installdir()))
+            local freetype_libs = table.concat(dep_freetype:get("links") or {"freetype"}, " ")
+            io.replace(
+                occt_csf_cmake_file,
+                "set (CSF_FREETYPE \"freetype\")",
+                "set (CSF_FREETYPE \"".. freetype_libs .. "\")",
+                {plain = true}
+            )
+        end
+
+        if package:config("freeimage") then
+            local dep_freeimage = package:dep("freeimage")
+            table.insert(configs, "-D3RDPARTY_FREEIMAGE_DIR=" .. path.unix(dep_freeimage:installdir()))
+            -- freeimage get links somehow fails
+            local freeimage_libs = table.concat(dep_freeimage:get("links") or {"freeimage"}, " ")
+            io.replace(
+                occt_csf_cmake_file,
+                "set (CSF_FreeImagePlus \"freeimage\")",
+                "set (CSF_FreeImagePlus \"".. freeimage_libs .. "\")",
+                {plain = true}
+            )
+        end
+
+        if package:config("ffmpeg") then
+            local dep_ffmpeg = package:dep("ffmpeg")
+            table.insert(configs, "-D3RDPARTY_FFMPEG_DIR=" .. path.unix(dep_ffmpeg:installdir()))
+            local ffmpeg_libs = dep_ffmpeg:get("links")
+            io.replace(
+                occt_csf_cmake_file,
+                "set (CSF_FFmpeg \"avcodec avformat swscale avutil\")",
+                "set (CSF_FFmpeg \"" .. table.concat(ffmpeg_libs, " ") .. "\")",
+                {plain = true}
+            )
+        end
+
+        if package:config("openvr") then
+            local dep_openvr = package:dep("openvr")
+            table.insert(configs, "-D3RDPARTY_OPENVR_DIR=" .. path.unix(dep_openvr:installdir()))
+            -- occt expects openvr.h as #include <openvr.h>
+            local openvr_inc_dir = path.join(path.unix(dep_openvr:installdir("include")), "openvr")
+            table.insert(configs, "-D3RDPARTY_OPENVR_INCLUDE_DIR=" .. openvr_inc_dir)
+            -- Handle openvr links. get links fails here as well..
+            local openvr_libs = dep_openvr:get("links")
+            if not openvr_libs then
+                if package:is_targetos("windows", "mingw") and package:is_targetarch("x64", "x86_64", "amd64") then
+                    openvr_libs = {"openvr_api64"}
+                else
+                    openvr_libs = {"openvr_api"}
+                end
+            end
+
+            io.replace(
+                occt_csf_cmake_file,
+                "set (CSF_OpenVR \"openvr_api\")",
+                "set (CSF_OpenVR \"" .. table.concat(openvr_libs, " ") .. "\")", {plain = true})
+        end
+
+        if package:config("rapidjson") then
+            local dep_rapidjson = package:dep("rapidjson")
+            table.insert(configs, "-D3RDPARTY_RAPIDJSON_DIR=" .. path.unix(dep_rapidjson:installdir()))
+        end
+
+        if package:config("vtk") then
+            local dep_vtk = package:dep("vtk")
+            table.insert(configs, "-D3RDPARTY_VTK_DIR=" .. path.unix(dep_vtk:installdir()))
+        end
+
+        if package:config("draco") then
+            local dep_draco = package:dep("draco")
+            table.insert(configs, "-D3RDPARTY_DRACO_DIR=" .. path.unix(dep_draco:installdir()))
+            -- draco get links fails as well
+            local draco_libs = table.concat(dep_draco:get("links") or {"draco"}, " ")
+            io.replace(
+                occt_csf_cmake_file,
+                "set (CSF_Draco \"draco\")",
+                "set (CSF_Draco \"" .. draco_libs .. "\")",
+                {plain = true}
+            )
+        end
+        -- remove defs/flags that would be injected from xmake.
+        local occt_defs_cmake = "adm/cmake/occt_defs_flags.cmake"
+        io.replace(occt_defs_cmake, "-fPIC", "", {plain = true})
+        io.replace(occt_defs_cmake, "-stdlib=libc++", "", {plain = true})
+        io.replace(
+            occt_csf_cmake_file,
+            "set (CSF_ThreadLibs \"pthread rt stdc++\")",
+            "set (CSF_ThreadLibs \"pthread rt\")",
+            {plain = true})
+
+        if package:version():lt("7.9.0") then
+            io.replace(occt_defs_cmake, "-std=c++0x", "", {plain = true})
+            io.replace(occt_defs_cmake, "-std=gnu++0x", "", {plain = true})
+        end
+        -- remove install dir postfix [TODO: check for previos versions compability]
+        io.replace(
+            "adm/cmake/occt_macros.cmake",
+            'set (OCCT_INSTALL_BIN_LETTER \\"d\\")',
+            'set (OCCT_INSTALL_BIN_LETTER \\"\\")', {plain = true})
+        -- fix patch for disabling pdb installs.
+        io.replace(
+            "adm/cmake/occt_toolkit.cmake",
+            "install (FILES  ${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin\\${OCCT_INSTALL_BIN_LETTER}/${PROJECT_NAME}.pdb",
+            "set(no_op_install_fix", {plain = true})
+        io.replace(
+            "adm/cmake/occt_toolkit.cmake",
+            "install (FILES  ${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/lib\\${OCCT_INSTALL_BIN_LETTER}/${PROJECT_NAME}.pdb",
+            "set(no_op_install_fix", {plain = true})
+        io.replace(
+            "src/Image/Image_AlienPixMap.cxx",
+            "#pragma comment(lib, \"FreeImage.lib\")", "", {plain = true})
+        -- remove pragma links on source files on version 7.6
+        if package:version():lt("7.6.0") then
+            io.replace(
+                "src/Font/Font_FontMgr.cxx",
+                "#pragma comment (lib, \"freetype.lib\")", "", {plain = true})            
+            io.replace(
+                "src/Draw/Draw.cxx",
+                [[#pragma comment (lib, "tcl" STRINGIZE2(TCL_MAJOR_VERSION) STRINGIZE2(TCL_MINOR_VERSION) ".lib")
+#pragma comment (lib, "tk"  STRINGIZE2(TCL_MAJOR_VERSION) STRINGIZE2(TCL_MINOR_VERSION) ".lib")]], 
+                "", {plain = true})
+        end
+
+        import("package.tools.cmake").install(package, configs)
+    end)
+
+    on_test(function (package)      
+        if package:config("foundation_classes") then
+            assert(package:check_cxxsnippets({test = [[
+                #include <Standard_Type.hxx>     // foundation tkernel
+                #include <gp_Pnt.hxx>             // foundation tmath
+
+                int main() {
+                    Standard_Integer a = 42;
+                    gp_Pnt p(1.0, 2.0, 3.0);
+                    return (a == 42 && p.X() == 1.0) ? 0 : 1;
+                }
+            ]]}, {configs = {languages = "c++17"}}))
+        elseif package:config("modeling_algorithms") then
+            assert(package:check_cxxsnippets({test = [[
+             #include <BRepBuilderAPI_MakeEdge.hxx>
+             #include <TopoDS_Edge.hxx>
+             #include <GC_MakeCircle.hxx>
+             #include <gce_MakeCirc.hxx>
+             #include <gp_Circ.hxx>
+            
+             #include <iostream>
+
+                int main() {
+                 gp_Pnt pc(0, 0, 0);
+                 gp_Circ cir = gce_MakeCirc(pc, gp::DZ(), 5);
+                 auto geometry = GC_MakeCircle(cir).Value();
+                 TopoDS_Edge edge = BRepBuilderAPI_MakeEdge(geometry);
+                }
+            ]]}, {configs = {languages = "c++17"}}))
+        else
+            print("TODO add more tests to cover all components...")
+        end
+    end)