0032315: Configuration, CMake - fix building Draw Harness plugins as static libraries
authorkgv <kgv@opencascade.com>
Fri, 19 Mar 2021 21:31:01 +0000 (00:31 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 23 Apr 2021 15:46:13 +0000 (18:46 +0300)
DPLUGIN() macros no more defines exported function PLUGINFACTORY when building static libraries.
DRAWEXE executable now pre-loads a set of plugins when building static libraries.
dversion - added WebAssembly info.

16 files changed:
.gitattributes
CMakeLists.txt
adm/cmake/occt_csf.cmake
adm/cmake/occt_toolkit.cmake
adm/cmake/tcl.cmake
adm/scripts/cmake_gen.bat
adm/scripts/wasm_build.bat
samples/webgl/occt-webgl-sample.html
samples/webgl/occt-webgl-viewer.js
src/DRAWEXE/CMakeLists.txt
src/DRAWEXE/DRAWEXE.cxx
src/DRAWEXE/DRAWEXE.html [new file with mode: 0644]
src/DRAWEXE/EXTERNLIB_STATIC [new file with mode: 0644]
src/Draw/Draw_BasicCommands.cxx
src/Draw/Draw_PluginMacro.hxx
src/OS/Draw.tcl

index ee61c69..e3a283a 100644 (file)
@@ -1,6 +1,8 @@
 .gitattributes eol=lf
 .gitignore  eol=lf
 *.txt       eol=lf
+*.htm       eol=lf
+*.html      eol=lf
 *.h         eol=lf
 *.c         eol=lf
 *.inl       eol=lf
@@ -29,6 +31,7 @@
 *.xib       eol=lf
 *.plist     eol=lf
 *.java      eol=lf
+*.js        eol=lf
 *.igs       eol=lf
 *.iges      eol=lf
 *.stp       eol=lf
@@ -44,6 +47,7 @@
 FILES       eol=lf
 PACKAGES    eol=lf
 EXTERNLIB   eol=lf
+EXTERNLIB_STATIC eol=lf
 UDLIST      eol=lf
 tests/*     eol=lf
 tests/*/*   eol=lf
index 6a5ab48..7eee96b 100644 (file)
@@ -447,12 +447,6 @@ foreach (OCCT_MODULE ${OCCT_MODULES})
   endif()
 endforeach()
 
-# DRAWEXE excluded when library build is static
-if (NOT BUILD_SHARED_LIBS)
-  list (REMOVE_ITEM BUILD_TOOLKITS DRAWEXE)
-  message (STATUS "Info: DRAWEXE is not included due to ${BUILD_LIBRARY_TYPE} build library type")
-endif()
-
 # accumulate all used toolkits
 list (REMOVE_DUPLICATES BUILD_TOOLKITS)
 set (RAW_BUILD_TOOLKITS)
index 0938850..e1b7b92 100644 (file)
@@ -118,6 +118,10 @@ else()
       OCCT_CHECK_AND_UNSET (OpenGlLibs_LIB)
     endif()
 
+  elseif (EMSCRIPTEN)
+    set (CSF_ThreadLibs   "pthread rt stdc++")
+    set (CSF_OpenGlesLibs "EGL GLESv2")
+    set (CSF_dl           "dl")
   elseif (ANDROID)
     set (CSF_ThreadLibs  "c")
     set (CSF_OpenGlesLibs "EGL GLESv2")
index acbaac5..8f09fbe 100644 (file)
@@ -22,7 +22,7 @@ if ("${OCCT_TOOLKITS_NAME_SUFFIX}" STREQUAL "")
   set (OCCT_TOOLKITS_NAME_SUFFIX "TOOLKITS")
 endif()
 
-# parce PACKAGES file
+# parse PACKAGES file
 FILE_TO_LIST ("${RELATIVE_SOURCES_DIR}/${PROJECT_NAME}/PACKAGES" USED_PACKAGES)
 if ("${USED_PACKAGES}" STREQUAL "")
   set (USED_PACKAGES ${PROJECT_NAME})
@@ -39,7 +39,7 @@ set (PRECOMPILED_DEFS)
 
 if (NOT BUILD_SHARED_LIBS)
   list (APPEND PRECOMPILED_DEFS "-DOCCT_NO_PLUGINS")
-  if (WIN32)
+  if (WIN32 AND NOT EXECUTABLE_PROJECT)
     list (APPEND PRECOMPILED_DEFS "-DOCCT_STATIC_BUILD")
   endif()
 endif()
@@ -228,6 +228,10 @@ if (EXECUTABLE_PROJECT)
 
   install (TARGETS ${PROJECT_NAME}
            DESTINATION "${INSTALL_DIR_BIN}\${OCCT_INSTALL_BIN_LETTER}")
+
+  if (EMSCRIPTEN)
+    install(FILES ${CMAKE_BINARY_DIR}/${OS_WITH_BIT}/${COMPILER}/bin\${OCCT_INSTALL_BIN_LETTER}/${PROJECT_NAME}.wasm DESTINATION "${INSTALL_DIR_BIN}/${OCCT_INSTALL_BIN_LETTER}")
+  endif()
 else()
   add_library (${PROJECT_NAME} ${USED_SRCFILES} ${USED_INCFILES} ${USED_RCFILE} ${RESOURCE_FILES} ${${PROJECT_NAME}_MOC_FILES})
 
@@ -283,8 +287,12 @@ endif()
 set (USED_TOOLKITS_BY_CURRENT_PROJECT)
 set (USED_EXTERNAL_LIBS_BY_CURRENT_PROJECT)
 
-# parce EXTERNLIB file
-FILE_TO_LIST ("${RELATIVE_SOURCES_DIR}/${PROJECT_NAME}/EXTERNLIB" USED_EXTERNLIB_AND_TOOLKITS)
+# parse EXTERNLIB file
+if (CUSTOM_EXTERNLIB)
+  set (USED_EXTERNLIB_AND_TOOLKITS ${CUSTOM_EXTERNLIB})
+else()
+  FILE_TO_LIST ("${RELATIVE_SOURCES_DIR}/${PROJECT_NAME}/EXTERNLIB" USED_EXTERNLIB_AND_TOOLKITS)
+endif()
 foreach (USED_ITEM ${USED_EXTERNLIB_AND_TOOLKITS})
   string (REGEX MATCH "^ *#" COMMENT_FOUND ${USED_ITEM})
   if (NOT COMMENT_FOUND)
@@ -383,7 +391,7 @@ else()
   endif()
 endif()
 
-if (BUILD_SHARED_LIBS)
+if (BUILD_SHARED_LIBS OR EXECUTABLE_PROJECT)
   if(IS_VTK_9XX)
     string (REGEX REPLACE "vtk" "VTK::" USED_TOOLKITS_BY_CURRENT_PROJECT "${USED_TOOLKITS_BY_CURRENT_PROJECT}")
   endif()
index 77359a6..fdfc3e4 100644 (file)
@@ -1,6 +1,6 @@
 # tcl
 
-if (NOT DEFINED INSTALL_TCL AND BUILD_SHARED_LIBS)
+if (NOT DEFINED INSTALL_TCL)
   set (INSTALL_TCL OFF CACHE BOOL "${INSTALL_TCL_DESCR}")
 endif()
 
@@ -14,30 +14,30 @@ if (NOT DEFINED 3RDPARTY_TCL_INCLUDE_DIR)
   set (3RDPARTY_TCL_INCLUDE_DIR "" CACHE FILEPATH "The directory containing headers of tcl")
 endif()
 
-if (BUILD_SHARED_LIBS)
-  # tcl library file (with absolute path)
-  if (NOT DEFINED 3RDPARTY_TCL_LIBRARY OR NOT 3RDPARTY_TCL_LIBRARY_DIR)
-    set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "tcl library"  FORCE)
-  endif()
 
-  # tcl library directory
-  if (NOT DEFINED 3RDPARTY_TCL_LIBRARY_DIR)
-    set (3RDPARTY_TCL_LIBRARY_DIR "" CACHE FILEPATH "The directory containing tcl library")
-  endif()
+# tcl library file (with absolute path)
+if (NOT DEFINED 3RDPARTY_TCL_LIBRARY OR NOT 3RDPARTY_TCL_LIBRARY_DIR)
+  set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "tcl library"  FORCE)
+endif()
 
-  # tcl shared library (with absolute path)
-  if (WIN32)
-    if (NOT DEFINED 3RDPARTY_TCL_DLL OR NOT 3RDPARTY_TCL_DLL_DIR)
-      set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "tcl shared library" FORCE)
-    endif()
-  endif()
+# tcl library directory
+if (NOT DEFINED 3RDPARTY_TCL_LIBRARY_DIR)
+  set (3RDPARTY_TCL_LIBRARY_DIR "" CACHE FILEPATH "The directory containing tcl library")
+endif()
 
-  # tcl shared library directory
-  if (WIN32 AND NOT DEFINED 3RDPARTY_TCL_DLL_DIR)
-    set (3RDPARTY_TCL_DLL_DIR "" CACHE FILEPATH "The directory containing tcl shared library")
+# tcl shared library (with absolute path)
+if (WIN32)
+  if (NOT DEFINED 3RDPARTY_TCL_DLL OR NOT 3RDPARTY_TCL_DLL_DIR)
+    set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "tcl shared library" FORCE)
   endif()
 endif()
 
+# tcl shared library directory
+if (WIN32 AND NOT DEFINED 3RDPARTY_TCL_DLL_DIR)
+  set (3RDPARTY_TCL_DLL_DIR "" CACHE FILEPATH "The directory containing tcl shared library")
+endif()
+
+
 # search for tcl in user defined directory
 if (NOT 3RDPARTY_TCL_DIR AND 3RDPARTY_DIR)
   FIND_PRODUCT_DIR("${3RDPARTY_DIR}" tcl TCL_DIR_NAME)
@@ -64,204 +64,198 @@ if (NOT 3RDPARTY_TCL_INCLUDE_DIR)
   endif()
 endif()
 
-if (BUILD_SHARED_LIBS)
-  # tcl dir and library
-  if (NOT 3RDPARTY_TCL_LIBRARY)
-    if (TCL_LIBRARY AND EXISTS "${TCL_LIBRARY}")
-      set (3RDPARTY_TCL_LIBRARY "${TCL_LIBRARY}" CACHE FILEPATH "TCL library" FORCE)
+# tcl dir and library
+if (NOT 3RDPARTY_TCL_LIBRARY)
+  if (TCL_LIBRARY AND EXISTS "${TCL_LIBRARY}")
+    set (3RDPARTY_TCL_LIBRARY "${TCL_LIBRARY}" CACHE FILEPATH "TCL library" FORCE)
 
-      if (NOT 3RDPARTY_TCL_LIBRARY_DIR)
-        get_filename_component (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
-        set (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY_DIR}" CACHE FILEPATH "The directory containing TCL library" FORCE)
-      endif()
+    if (NOT 3RDPARTY_TCL_LIBRARY_DIR)
+      get_filename_component (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
+      set (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY_DIR}" CACHE FILEPATH "The directory containing TCL library" FORCE)
     endif()
   endif()
+endif()
 
-
-  if (WIN32)
-    if (NOT 3RDPARTY_TCL_DLL)
-      set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll .a)
-
-      set (DLL_FOLDER_FOR_SEARCH "")
-      if (3RDPARTY_TCL_DLL_DIR)
-        set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DLL_DIR}")
-      elseif (3RDPARTY_TCL_DIR)
-        set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
-      elseif (3RDPARTY_TCL_LIBRARY_DIR)
-        get_filename_component (3RDPARTY_TCL_LIBRARY_DIR_PARENT "${3RDPARTY_TCL_LIBRARY_DIR}" PATH)
-        set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_LIBRARY_DIR_PARENT}/bin")
-      endif()
-
-      set (3RDPARTY_TCL_DLL "3RDPARTY_TCL_DLL-NOTFOUND" CACHE FILEPATH "TCL shared library" FORCE)
-      find_library (3RDPARTY_TCL_DLL NAMES ${CSF_TclLibs}
-                                           PATHS "${DLL_FOLDER_FOR_SEARCH}"
-                                           NO_DEFAULT_PATH)
+if (WIN32)
+  if (NOT 3RDPARTY_TCL_DLL)
+    set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll .a)
+
+    set (DLL_FOLDER_FOR_SEARCH "")
+    if (3RDPARTY_TCL_DLL_DIR)
+      set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DLL_DIR}")
+    elseif (3RDPARTY_TCL_DIR)
+      set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
+    elseif (3RDPARTY_TCL_LIBRARY_DIR)
+      get_filename_component (3RDPARTY_TCL_LIBRARY_DIR_PARENT "${3RDPARTY_TCL_LIBRARY_DIR}" PATH)
+      set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_LIBRARY_DIR_PARENT}/bin")
     endif()
+
+    set (3RDPARTY_TCL_DLL "3RDPARTY_TCL_DLL-NOTFOUND" CACHE FILEPATH "TCL shared library" FORCE)
+    find_library (3RDPARTY_TCL_DLL NAMES ${CSF_TclLibs}
+                                         PATHS "${DLL_FOLDER_FOR_SEARCH}"
+                                         NO_DEFAULT_PATH)
   endif()
 endif()
 
 COMPLIANCE_PRODUCT_CONSISTENCY(TCL)
 
-if (BUILD_SHARED_LIBS)
-  # tcl dir and library
-  if (NOT 3RDPARTY_TCL_LIBRARY)
-    set (3RDPARTY_TCL_LIBRARY "3RDPARTY_TCL_LIBRARY-NOTFOUND" CACHE FILEPATH "TCL library" FORCE)
-    find_library (3RDPARTY_TCL_LIBRARY NAMES ${CSF_TclLibs}
-                                             PATHS "${3RDPARTY_TCL_LIBRARY_DIR}"
-                                             NO_DEFAULT_PATH)
-
-    # search in another place if previous search doesn't find anything
-    find_library (3RDPARTY_TCL_LIBRARY NAMES ${CSF_TclLibs}
-                                             PATHS "${3RDPARTY_TCL_DIR}/lib"
-                                             NO_DEFAULT_PATH)
+# tcl dir and library
+if (NOT 3RDPARTY_TCL_LIBRARY)
+  set (3RDPARTY_TCL_LIBRARY "3RDPARTY_TCL_LIBRARY-NOTFOUND" CACHE FILEPATH "TCL library" FORCE)
+  find_library (3RDPARTY_TCL_LIBRARY NAMES ${CSF_TclLibs}
+                                           PATHS "${3RDPARTY_TCL_LIBRARY_DIR}"
+                                           NO_DEFAULT_PATH)
 
+  # search in another place if previous search doesn't find anything
+  find_library (3RDPARTY_TCL_LIBRARY NAMES ${CSF_TclLibs}
+                                           PATHS "${3RDPARTY_TCL_DIR}/lib"
+                                           NO_DEFAULT_PATH)
 
-    if (NOT 3RDPARTY_TCL_LIBRARY OR NOT EXISTS "${3RDPARTY_TCL_LIBRARY}")
-      set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "TCL library" FORCE)
-    endif()
+  if (NOT 3RDPARTY_TCL_LIBRARY OR NOT EXISTS "${3RDPARTY_TCL_LIBRARY}")
+    set (3RDPARTY_TCL_LIBRARY "" CACHE FILEPATH "TCL library" FORCE)
+  endif()
 
-    if (NOT 3RDPARTY_TCL_LIBRARY_DIR AND 3RDPARTY_TCL_LIBRARY)
-      get_filename_component (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
-      set (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY_DIR}" CACHE FILEPATH "The directory containing TCL library" FORCE)
-    endif()
+  if (NOT 3RDPARTY_TCL_LIBRARY_DIR AND 3RDPARTY_TCL_LIBRARY)
+    get_filename_component (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY}" PATH)
+    set (3RDPARTY_TCL_LIBRARY_DIR "${3RDPARTY_TCL_LIBRARY_DIR}" CACHE FILEPATH "The directory containing TCL library" FORCE)
   endif()
+endif()
 
-  set (3RDPARTY_TCL_LIBRARY_VERSION "")
-  if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
-    get_filename_component (TCL_LIBRARY_NAME "${3RDPARTY_TCL_LIBRARY}" NAME)
-    string(REGEX REPLACE "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY_NAME}")
+set (3RDPARTY_TCL_LIBRARY_VERSION "")
+if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
+  get_filename_component (TCL_LIBRARY_NAME "${3RDPARTY_TCL_LIBRARY}" NAME)
+  string(REGEX REPLACE "^.*tcl([0-9]\\.*[0-9]).*$" "\\1" TCL_LIBRARY_VERSION "${TCL_LIBRARY_NAME}")
 
-    if (NOT "${TCL_LIBRARY_VERSION}" STREQUAL "${TCL_LIBRARY_NAME}")
-      set (3RDPARTY_TCL_LIBRARY_VERSION "${TCL_LIBRARY_VERSION}")
-    else() # if the version isn't found - seek other library with 8.6 or 8.5 version in the same dir
-      message (STATUS "Info: TCL version isn't found")
-    endif()
+  if (NOT "${TCL_LIBRARY_VERSION}" STREQUAL "${TCL_LIBRARY_NAME}")
+    set (3RDPARTY_TCL_LIBRARY_VERSION "${TCL_LIBRARY_VERSION}")
+  else() # if the version isn't found - seek other library with 8.6 or 8.5 version in the same dir
+    message (STATUS "Info: TCL version isn't found")
   endif()
+endif()
 
-  set (3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT "")
-  if (3RDPARTY_TCL_LIBRARY_VERSION)
-    string (REGEX REPLACE "^.*([0-9])[^0-9]*[0-9].*$" "\\1" 3RDPARTY_TCL_MAJOR_VERSION "${3RDPARTY_TCL_LIBRARY_VERSION}")
-    string (REGEX REPLACE "^.*[0-9][^0-9]*([0-9]).*$" "\\1" 3RDPARTY_TCL_MINOR_VERSION "${3RDPARTY_TCL_LIBRARY_VERSION}")
-    set (3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT "${3RDPARTY_TCL_MAJOR_VERSION}.${3RDPARTY_TCL_MINOR_VERSION}")
-  endif()
+set (3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT "")
+if (3RDPARTY_TCL_LIBRARY_VERSION)
+  string (REGEX REPLACE "^.*([0-9])[^0-9]*[0-9].*$" "\\1" 3RDPARTY_TCL_MAJOR_VERSION "${3RDPARTY_TCL_LIBRARY_VERSION}")
+  string (REGEX REPLACE "^.*[0-9][^0-9]*([0-9]).*$" "\\1" 3RDPARTY_TCL_MINOR_VERSION "${3RDPARTY_TCL_LIBRARY_VERSION}")
+  set (3RDPARTY_TCL_LIBRARY_VERSION_WITH_DOT "${3RDPARTY_TCL_MAJOR_VERSION}.${3RDPARTY_TCL_MINOR_VERSION}")
+endif()
 
-  if (WIN32)
-    if (NOT 3RDPARTY_TCL_DLL)
-      set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll .a)
-
-      set (DLL_FOLDER_FOR_SEARCH "")
-      if (3RDPARTY_TCL_DLL_DIR)
-        set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DLL_DIR}")
-      elseif (3RDPARTY_TCL_DIR)
-        set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
-      else()
-        get_filename_component (3RDPARTY_TCL_LIBRARY_DIR_PARENT "${3RDPARTY_TCL_LIBRARY_DIR}" PATH)
-        set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_LIBRARY_DIR_PARENT}/bin")
-      endif()
-
-      set (3RDPARTY_TCL_DLL "3RDPARTY_TCL_DLL-NOTFOUND" CACHE FILEPATH "TCL shared library" FORCE)
-      find_library (3RDPARTY_TCL_DLL NAMES tcl${3RDPARTY_TCL_LIBRARY_VERSION}
-                                           PATHS "${DLL_FOLDER_FOR_SEARCH}"
-                                           NO_DEFAULT_PATH)
+if (WIN32)
+  if (NOT 3RDPARTY_TCL_DLL)
+    set (CMAKE_FIND_LIBRARY_SUFFIXES .lib .dll .a)
 
-      if (NOT 3RDPARTY_TCL_DLL OR NOT EXISTS "${3RDPARTY_TCL_DLL}")
-        set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "TCL shared library" FORCE)
-      endif()
+    set (DLL_FOLDER_FOR_SEARCH "")
+    if (3RDPARTY_TCL_DLL_DIR)
+      set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DLL_DIR}")
+    elseif (3RDPARTY_TCL_DIR)
+      set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_DIR}/bin")
+    else()
+      get_filename_component (3RDPARTY_TCL_LIBRARY_DIR_PARENT "${3RDPARTY_TCL_LIBRARY_DIR}" PATH)
+      set (DLL_FOLDER_FOR_SEARCH "${3RDPARTY_TCL_LIBRARY_DIR_PARENT}/bin")
     endif()
-    if (NOT 3RDPARTY_TCL_DLL_DIR AND 3RDPARTY_TCL_DLL)
-      get_filename_component (3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL}" PATH)
-      set (3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL_DIR}" CACHE FILEPATH "The directory containing TCL shared library" FORCE)
+
+    set (3RDPARTY_TCL_DLL "3RDPARTY_TCL_DLL-NOTFOUND" CACHE FILEPATH "TCL shared library" FORCE)
+    find_library (3RDPARTY_TCL_DLL NAMES tcl${3RDPARTY_TCL_LIBRARY_VERSION}
+                                         PATHS "${DLL_FOLDER_FOR_SEARCH}"
+                                         NO_DEFAULT_PATH)
+
+    if (NOT 3RDPARTY_TCL_DLL OR NOT EXISTS "${3RDPARTY_TCL_DLL}")
+      set (3RDPARTY_TCL_DLL "" CACHE FILEPATH "TCL shared library" FORCE)
     endif()
   endif()
-
-  # include found paths to common variables
-  if (3RDPARTY_TCL_INCLUDE_DIR AND EXISTS "${3RDPARTY_TCL_INCLUDE_DIR}")
-    list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_TCL_INCLUDE_DIR}")
-  else()
-    list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TCL_INCLUDE_DIR)
+  if (NOT 3RDPARTY_TCL_DLL_DIR AND 3RDPARTY_TCL_DLL)
+    get_filename_component (3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL}" PATH)
+    set (3RDPARTY_TCL_DLL_DIR "${3RDPARTY_TCL_DLL_DIR}" CACHE FILEPATH "The directory containing TCL shared library" FORCE)
   endif()
+endif()
+
+# include found paths to common variables
+if (3RDPARTY_TCL_INCLUDE_DIR AND EXISTS "${3RDPARTY_TCL_INCLUDE_DIR}")
+  list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_TCL_INCLUDE_DIR}")
+else()
+  list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_TCL_INCLUDE_DIR)
+endif()
 
-  if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
-    list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_TCL_LIBRARY_DIR}")
+if (3RDPARTY_TCL_LIBRARY AND EXISTS "${3RDPARTY_TCL_LIBRARY}")
+  list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_TCL_LIBRARY_DIR}")
+else()
+  list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_TCL_LIBRARY_DIR)
+endif()
+
+if (WIN32)
+  if (3RDPARTY_TCL_DLL OR EXISTS "${3RDPARTY_TCL_DLL}")
+    list (APPEND 3RDPARTY_DLL_DIRS "${3RDPARTY_TCL_DLL_DIR}")
   else()
-    list (APPEND 3RDPARTY_NO_LIBS 3RDPARTY_TCL_LIBRARY_DIR)
+    list (APPEND 3RDPARTY_NO_DLLS 3RDPARTY_TCL_DLL_DIR)
   endif()
+endif()
+
+# install tcl
+if (INSTALL_TCL)
+  # include occt macros. compiler_bitness, os_wiht_bit, compiler
+  OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
+
+  OCCT_MAKE_OS_WITH_BITNESS()
+  OCCT_MAKE_COMPILER_SHORT_NAME()
 
   if (WIN32)
-    if (3RDPARTY_TCL_DLL OR EXISTS "${3RDPARTY_TCL_DLL}")
-      list (APPEND 3RDPARTY_DLL_DIRS "${3RDPARTY_TCL_DLL_DIR}")
-    else()
-      list (APPEND 3RDPARTY_NO_DLLS 3RDPARTY_TCL_DLL_DIR)
-    endif()
-  endif()
+    # tcl 8.6 requires zlib. install all dlls from tcl bin folder that may contain zlib also
 
-  # install tcl
-  if (INSTALL_TCL)
-    # include occt macros. compiler_bitness, os_wiht_bit, compiler
-    OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
-
-    OCCT_MAKE_OS_WITH_BITNESS()
-    OCCT_MAKE_COMPILER_SHORT_NAME()
-
-    if (WIN32)
-      # tcl 8.6 requires zlib. install all dlls from tcl bin folder that may contain zlib also
-
-      # collect and install all dlls from tcl dll dirs
-      file (GLOB TCL_DLLS "${3RDPARTY_TCL_DLL_DIR}/*.dll")
-
-      if (SINGLE_GENERATOR)
-        install (FILES ${TCL_DLLS} DESTINATION "${INSTALL_DIR_BIN}")
-      else()
-        install (FILES ${TCL_DLLS}
-                 CONFIGURATIONS Release
-                 DESTINATION "${INSTALL_DIR_BIN}")
-        install (FILES ${TCL_DLLS}
-                 CONFIGURATIONS RelWithDebInfo
-                 DESTINATION "${INSTALL_DIR_BIN}i")
-        install (FILES ${TCL_DLLS}
-                 CONFIGURATIONS Debug
-                 DESTINATION "${INSTALL_DIR_BIN}d")
-      endif()
+    # collect and install all dlls from tcl dll dirs
+    file (GLOB TCL_DLLS "${3RDPARTY_TCL_DLL_DIR}/*.dll")
+
+    if (SINGLE_GENERATOR)
+      install (FILES ${TCL_DLLS} DESTINATION "${INSTALL_DIR_BIN}")
     else()
-      get_filename_component(3RDPARTY_TCL_LIBRARY_REALPATH ${3RDPARTY_TCL_LIBRARY} REALPATH)
-
-      if (SINGLE_GENERATOR)
-        install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH} DESTINATION "${INSTALL_DIR_LIB}")
-      else()
-        install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
-                 CONFIGURATIONS Release
-                 DESTINATION "${INSTALL_DIR_LIB}")
-        install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
-                 CONFIGURATIONS RelWithDebInfo
-                 DESTINATION "${INSTALL_DIR_LIB}i")
-        install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
-                 CONFIGURATIONS Debug
-                 DESTINATION "${INSTALL_DIR_LIB}d")
-      endif()
+      install (FILES ${TCL_DLLS}
+               CONFIGURATIONS Release
+               DESTINATION "${INSTALL_DIR_BIN}")
+      install (FILES ${TCL_DLLS}
+               CONFIGURATIONS RelWithDebInfo
+               DESTINATION "${INSTALL_DIR_BIN}i")
+      install (FILES ${TCL_DLLS}
+               CONFIGURATIONS Debug
+               DESTINATION "${INSTALL_DIR_BIN}d")
     endif()
+  else()
+    get_filename_component(3RDPARTY_TCL_LIBRARY_REALPATH ${3RDPARTY_TCL_LIBRARY} REALPATH)
 
-    if (TCL_TCLSH_VERSION)
-      # tcl is required to install in lib folder (without)
-      install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl8"                    DESTINATION "${INSTALL_DIR_LIB}")
-      install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl${TCL_TCLSH_VERSION}" DESTINATION "${INSTALL_DIR_LIB}")
+    if (SINGLE_GENERATOR)
+      install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH} DESTINATION "${INSTALL_DIR_LIB}")
     else()
-      message (STATUS "\nWarning: tclX.X subdir won't be copied during the installation process.")
-      message (STATUS "Try seeking tcl within another folder by changing 3RDPARTY_TCL_DIR variable.")
+      install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
+               CONFIGURATIONS Release
+               DESTINATION "${INSTALL_DIR_LIB}")
+      install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
+               CONFIGURATIONS RelWithDebInfo
+               DESTINATION "${INSTALL_DIR_LIB}i")
+      install (FILES ${3RDPARTY_TCL_LIBRARY_REALPATH}
+               CONFIGURATIONS Debug
+               DESTINATION "${INSTALL_DIR_LIB}d")
     endif()
+  endif()
 
-    set (USED_3RDPARTY_TCL_DIR "")
+  if (TCL_TCLSH_VERSION)
+    # tcl is required to install in lib folder (without)
+    install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl8"                    DESTINATION "${INSTALL_DIR_LIB}")
+    install (DIRECTORY "${3RDPARTY_TCL_LIBRARY_DIR}/tcl${TCL_TCLSH_VERSION}" DESTINATION "${INSTALL_DIR_LIB}")
   else()
-    # the library directory for using by the executable
-    if (WIN32)
-      set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_DLL_DIR})
-    else()
-      set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_LIBRARY_DIR})
-    endif()
+    message (STATUS "\nWarning: tclX.X subdir won't be copied during the installation process.")
+    message (STATUS "Try seeking tcl within another folder by changing 3RDPARTY_TCL_DIR variable.")
   endif()
 
-  mark_as_advanced (3RDPARTY_TCL_LIBRARY 3RDPARTY_TCL_DLL)
+  set (USED_3RDPARTY_TCL_DIR "")
+else()
+  # the library directory for using by the executable
+  if (WIN32)
+    set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_DLL_DIR})
+  else()
+    set (USED_3RDPARTY_TCL_DIR ${3RDPARTY_TCL_LIBRARY_DIR})
+  endif()
 endif()
 
+mark_as_advanced (3RDPARTY_TCL_LIBRARY 3RDPARTY_TCL_DLL)
+
 if (TK_FOUND AND 3RDPARTY_TCL_DIR)
 
   get_filename_component (TK_WISH_ABSOLUTE          "${TK_WISH}"          ABSOLUTE)
@@ -285,10 +279,3 @@ OCCT_CHECK_AND_UNSET (TK_LIBRARY)
 OCCT_CHECK_AND_UNSET (TK_INCLUDE_PATH)
 OCCT_CHECK_AND_UNSET (TK_WISH)
 
-if (NOT BUILD_SHARED_LIBS)
-  OCCT_CHECK_AND_UNSET (3RDPARTY_TCL_LIBRARY)
-  OCCT_CHECK_AND_UNSET (3RDPARTY_TCL_LIBRARY_DIR)
-  OCCT_CHECK_AND_UNSET (3RDPARTY_TCL_DLL)
-  OCCT_CHECK_AND_UNSET (3RDPARTY_TCL_DLL_DIR)
-  OCCT_CHECK_AND_UNSET (INSTALL_TCL)
-endif()
index 0a0ac0d..4281079 100644 (file)
@@ -12,6 +12,7 @@ set VS=14
 set VSDATA=2015
 set VSPLATFORM=Win64
 set "BUILD_DIR=build-vs%VS%-%VSPLATFORM%"
+set "OCCT3RDPARTY="
 set "INSTALL_DIR=%SrcRoot%\install"
 
 set BUILD_ADDITIONAL_TOOLKITS=
index af9bfcd..1284cb7 100644 (file)
@@ -173,6 +173,7 @@ if ["%toCMake%"] == ["1"] (
  -D 3RDPARTY_TCL_INCLUDE_DIR:PATH="%aTcl%/include" ^
  -D 3RDPARTY_TCL_LIBRARY_DIR:PATH="%aTcl%/lib" ^
  -D 3RDPARTY_TCL_LIBRARY:FILEPATH="%aTcl%/lib/libtcl.a" ^
+ -D USE_TK:BOOL="OFF" ^
  "%aCasSrc%"
 
   if errorlevel 1 (
index c04add8..a831e3e 100644 (file)
@@ -1,87 +1,87 @@
-<!DOCTYPE html>\r
-<html lang=en-us>\r
-<head>\r
-<meta charset=utf-8><meta content="text/html; charset=utf-8" http-equiv=Content-Type>\r
-<link rel="shortcut icon" href="lamp.ico" type="image/x-icon" />\r
-<title>OCCT WebGL Viewer Sample</title>\r
-</head>\r
-<body>\r
-\r
-<h2>OCCT WebGL Viewer Sample</h2>\r
-<div>\r
-  <canvas id=occViewerCanvas oncontextmenu=event.preventDefault() tabindex=-1 style="border:0 none;background-color:#000" width="409" height="409"></canvas>\r
-  <img id=occlogo src="OCC_logo.png" style="position: absolute; left: 20px; top: 0px; z-index: 2;" />\r
-</div>\r
-\r
-<div>\r
-  <label for="fileInput">Choose BREP file to upload: </label><input type="file" id="fileInput" accept=".brep">\r
-  <input type="button" value="Clear All" onclick="OccViewerModule.removeAllObjects()">\r
-  <input type="button" value="Fit All"   onclick="OccViewerModule.fitAllObjects(true)">\r
-</div>\r
-<h4>Console output:</h4>\r
-<p id="output"></p>\r
-<script>\r
-//! Resize canvas to fit into window.\r
-function updateCanvasSize()\r
-{\r
-  // size of canvas in logical (density-independent) units\r
-  var aSizeX = Math.min (window.innerWidth,  window.screen.availWidth);\r
-  var aSizeY = Math.min (window.innerHeight, window.screen.availHeight);\r
-  aSizeX = Math.max (300, aSizeX - 30);\r
-  aSizeY = Math.max (300, aSizeY / 2);\r
-  occViewerCanvas.style.width  = aSizeX + "px";\r
-  occViewerCanvas.style.height = aSizeY + "px";\r
-\r
-  // drawing buffer size (aka backing store)\r
-  var aDevicePixelRatio = window.devicePixelRatio || 1;\r
-  occViewerCanvas.width  = aSizeX * aDevicePixelRatio;\r
-  occViewerCanvas.height = aSizeY * aDevicePixelRatio;\r
-\r
-  occlogo.style.top = (aSizeY - 30) + "px";\r
-}\r
-window.onresize = updateCanvasSize;\r
-updateCanvasSize();\r
-\r
-//! Check browser support.\r
-function isWasmSupported()\r
-{\r
-  try {\r
-    if (typeof WebAssembly === "object"\r
-     && typeof WebAssembly.instantiate === "function") {\r
-      const aDummyModule = new WebAssembly.Module (Uint8Array.of (0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));\r
-      if (aDummyModule instanceof WebAssembly.Module)\r
-      {\r
-        return new WebAssembly.Instance(aDummyModule) instanceof WebAssembly.Instance;\r
-      }\r
-    }\r
-  } catch (e) {}\r
-  return false;\r
-}\r
-if (!isWasmSupported())\r
-{\r
-  var anElement = document.getElementById('output');\r
-  anElement.innerHTML += "Browser is too old - WebAssembly support is missing!<br>Please check updates or install a modern browser.<br>";\r
-}\r
-\r
-//! Handle file uploading.\r
-fileInput.onchange = function()\r
-{\r
-  if (fileInput.files.length == 0) { return; }\r
-  // Warning! Entire file is pre-loaded into memory.\r
-  var aFile = fileInput.files[0];\r
-  var aReader = new FileReader();\r
-  aReader.onload = function()\r
-  {\r
-    var aDataArray = new Uint8Array (aReader.result);\r
-    const aDataBuffer = OccViewerModule._malloc (aDataArray.length);\r
-    OccViewerModule.HEAPU8.set (aDataArray, aDataBuffer);\r
-    OccViewerModule.openFromMemory (aFile.name, aDataBuffer, aDataArray.length, true);\r
-    //OccViewerModule._free (aDataBuffer); will be freed by called method\r
-    OccViewerModule.displayGround (true);\r
-  };\r
-  aReader.readAsArrayBuffer(aFile);\r
-};\r
-</script>\r
-<script type="text/javascript" src="occt-webgl-sample.js" charset="utf-8"></script>\r
-</body>\r
-</html>\r
+<!DOCTYPE html>
+<html lang=en-us>
+<head>
+<meta charset=utf-8><meta content="text/html; charset=utf-8" http-equiv=Content-Type>
+<link rel="shortcut icon" href="lamp.ico" type="image/x-icon" />
+<title>OCCT WebGL Viewer Sample</title>
+</head>
+<body>
+
+<h2>OCCT WebGL Viewer Sample</h2>
+<div>
+  <canvas id=occViewerCanvas oncontextmenu=event.preventDefault() tabindex=-1 style="border:0 none;background-color:#000" width="409" height="409"></canvas>
+  <img id=occlogo src="OCC_logo.png" style="position: absolute; left: 20px; top: 0px; z-index: 2;" />
+</div>
+
+<div>
+  <label for="fileInput">Choose BREP file to upload: </label><input type="file" id="fileInput" accept=".brep">
+  <input type="button" value="Clear All" onclick="OccViewerModule.removeAllObjects()">
+  <input type="button" value="Fit All"   onclick="OccViewerModule.fitAllObjects(true)">
+</div>
+<h4>Console output:</h4>
+<p id="output"></p>
+<script>
+//! Resize canvas to fit into window.
+function updateCanvasSize()
+{
+  // size of canvas in logical (density-independent) units
+  var aSizeX = Math.min (window.innerWidth,  window.screen.availWidth);
+  var aSizeY = Math.min (window.innerHeight, window.screen.availHeight);
+  aSizeX = Math.max (300, aSizeX - 30);
+  aSizeY = Math.max (300, aSizeY / 2);
+  occViewerCanvas.style.width  = aSizeX + "px";
+  occViewerCanvas.style.height = aSizeY + "px";
+
+  // drawing buffer size (aka backing store)
+  var aDevicePixelRatio = window.devicePixelRatio || 1;
+  occViewerCanvas.width  = aSizeX * aDevicePixelRatio;
+  occViewerCanvas.height = aSizeY * aDevicePixelRatio;
+
+  occlogo.style.top = (aSizeY - 30) + "px";
+}
+window.onresize = updateCanvasSize;
+updateCanvasSize();
+
+//! Check browser support.
+function isWasmSupported()
+{
+  try {
+    if (typeof WebAssembly === "object"
+     && typeof WebAssembly.instantiate === "function") {
+      const aDummyModule = new WebAssembly.Module (Uint8Array.of (0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));
+      if (aDummyModule instanceof WebAssembly.Module)
+      {
+        return new WebAssembly.Instance(aDummyModule) instanceof WebAssembly.Instance;
+      }
+    }
+  } catch (e) {}
+  return false;
+}
+if (!isWasmSupported())
+{
+  var anElement = document.getElementById('output');
+  anElement.innerHTML += "Browser is too old - WebAssembly support is missing!<br>Please check updates or install a modern browser.<br>";
+}
+
+//! Handle file uploading.
+fileInput.onchange = function()
+{
+  if (fileInput.files.length == 0) { return; }
+  // Warning! Entire file is pre-loaded into memory.
+  var aFile = fileInput.files[0];
+  var aReader = new FileReader();
+  aReader.onload = function()
+  {
+    var aDataArray = new Uint8Array (aReader.result);
+    const aDataBuffer = OccViewerModule._malloc (aDataArray.length);
+    OccViewerModule.HEAPU8.set (aDataArray, aDataBuffer);
+    OccViewerModule.openFromMemory (aFile.name, aDataBuffer, aDataArray.length, true);
+    //OccViewerModule._free (aDataBuffer); will be freed by called method
+    OccViewerModule.displayGround (true);
+  };
+  aReader.readAsArrayBuffer(aFile);
+};
+</script>
+<script type="text/javascript" src="occt-webgl-sample.js" charset="utf-8"></script>
+</body>
+</html>
index 484b519..4dc2ec1 100644 (file)
@@ -1,28 +1,28 @@
-var OccViewerModule =\r
-{\r
-  print: (function() {\r
-    var anElement = document.getElementById('output');\r
-    return function(theText) { anElement.innerHTML += theText + "<br>"; };\r
-  })(),\r
-  printErr: function(theText) {\r
-    //var anElement = document.getElementById('output');\r
-    //anElement.innerHTML += theText + "<br>";\r
-    console.warn(theText);\r
-  },\r
-  canvas: (function() {\r
-    var aCanvas = document.getElementById('occViewerCanvas');\r
-    var aGlCtx =                   aCanvas.getContext ('webgl2', { alpha: false, depth: true, antialias: false, preserveDrawingBuffer: true } );\r
-    if (aGlCtx == null) { aGlCtx = aCanvas.getContext ('webgl',  { alpha: false, depth: true, antialias: false, preserveDrawingBuffer: true } ); }\r
-    return aCanvas;\r
-  })(),\r
-\r
-  onRuntimeInitialized: function() {\r
-    //console.log(" @@ onRuntimeInitialized()" + Object.getOwnPropertyNames(OccViewerModule));\r
-  }\r
-};\r
-\r
-const OccViewerModuleInitialized = createOccViewerModule(OccViewerModule);\r
-OccViewerModuleInitialized.then(function(Module) {\r
-  //OccViewerModule.setCubemapBackground ("cubemap.jpg");\r
-  OccViewerModule.openFromUrl ("ball", "samples/Ball.brep");\r
-});\r
+var OccViewerModule =
+{
+  print: (function() {
+    var anElement = document.getElementById('output');
+    return function(theText) { anElement.innerHTML += theText + "<br>"; };
+  })(),
+  printErr: function(theText) {
+    //var anElement = document.getElementById('output');
+    //anElement.innerHTML += theText + "<br>";
+    console.warn(theText);
+  },
+  canvas: (function() {
+    var aCanvas = document.getElementById('occViewerCanvas');
+    var aGlCtx =                   aCanvas.getContext ('webgl2', { alpha: false, depth: true, antialias: false, preserveDrawingBuffer: true } );
+    if (aGlCtx == null) { aGlCtx = aCanvas.getContext ('webgl',  { alpha: false, depth: true, antialias: false, preserveDrawingBuffer: true } ); }
+    return aCanvas;
+  })(),
+
+  onRuntimeInitialized: function() {
+    //console.log(" @@ onRuntimeInitialized()" + Object.getOwnPropertyNames(OccViewerModule));
+  }
+};
+
+const OccViewerModuleInitialized = createOccViewerModule(OccViewerModule);
+OccViewerModuleInitialized.then(function(Module) {
+  //OccViewerModule.setCubemapBackground ("cubemap.jpg");
+  OccViewerModule.openFromUrl ("ball", "samples/Ball.brep");
+});
index bdf6279..45e9f4d 100644 (file)
@@ -1,5 +1,41 @@
 project(DRAWEXE)
 
+unset (CUSTOM_EXTERNLIB)
+if (NOT BUILD_SHARED_LIBS)
+  # link specific list of plugins explicitly
+  FILE_TO_LIST ("src/${PROJECT_NAME}/EXTERNLIB_STATIC" CUSTOM_EXTERNLIB)
+  if (USE_OPENGL)
+    list (REMOVE_ITEM CUSTOM_EXTERNLIB TKOpenGles)
+    list (REMOVE_ITEM CUSTOM_EXTERNLIB TKOpenGlesTest)
+    list (REMOVE_ITEM CUSTOM_EXTERNLIB CSF_OpenGlesLibs)
+  elseif(USE_GLES2)
+    list (REMOVE_ITEM CUSTOM_EXTERNLIB TKOpenGl)
+    list (REMOVE_ITEM CUSTOM_EXTERNLIB TKOpenGlTest)
+    list (REMOVE_ITEM CUSTOM_EXTERNLIB CSF_OpenGlLibs)
+  else()
+    list (REMOVE_ITEM CUSTOM_EXTERNLIB TKOpenGles)
+    list (REMOVE_ITEM CUSTOM_EXTERNLIB TKOpenGlesTest)
+    list (REMOVE_ITEM CUSTOM_EXTERNLIB CSF_OpenGlesLibs)
+    list (REMOVE_ITEM CUSTOM_EXTERNLIB TKOpenGl)
+    list (REMOVE_ITEM CUSTOM_EXTERNLIB TKOpenGlTest)
+    list (REMOVE_ITEM CUSTOM_EXTERNLIB CSF_OpenGlLibs)
+  endif()
+endif()
+
 set (EXECUTABLE_PROJECT ON)
 OCCT_INCLUDE_CMAKE_FILE (adm/cmake/occt_toolkit)
 unset (EXECUTABLE_PROJECT)
+unset (CUSTOM_EXTERNLIB)
+
+if (EMSCRIPTEN)
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s WASM=1")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s MAX_WEBGL_VERSION=2")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s ALLOW_MEMORY_GROWTH=1")
+  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --bind")
+
+  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s MODULARIZE=1")
+  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s EXPORT_NAME='createDRAWEXE'")
+
+  install(FILES ${PROJECT_NAME}.html      DESTINATION "${INSTALL_DIR_BIN}/${OCCT_INSTALL_BIN_LETTER}")
+  install(FILES ../DrawResources/lamp.ico DESTINATION "${INSTALL_DIR_BIN}/${OCCT_INSTALL_BIN_LETTER}")
+endif()
index 782d490..4e3e7f4 100644 (file)
 #include <Draw.hxx>
 #include <DBRep.hxx>
 #include <DrawTrSurf.hxx>
+#include <Message.hxx>
+#include <Message_PrinterSystemLog.hxx>
+
+#ifdef OCCT_NO_PLUGINS
+  #include <BOPTest.hxx>
+  #include <DPrsStd.hxx>
+  #if defined(HAVE_OPENGL) || defined(HAVE_GLES2)
+  #include <OpenGlTest.hxx>
+  #endif
+  #include <TObjDRAW.hxx>
+  #include <ViewerTest.hxx>
+  #include <XSDRAWSTLVRML.hxx>
+  #include <XDEDRAW.hxx>
+#endif
 
 //=======================================================================
 //function : Draw_InitAppli
 
 void Draw_InitAppli (Draw_Interpretor& di)
 {
+#if defined(__EMSCRIPTEN__)
+  // open JavaScript console within the Browser to see this output
+  Handle(Message_PrinterSystemLog) aJSConsolePrinter = new Message_PrinterSystemLog ("DRAWEXE");
+  Message::DefaultMessenger()->AddPrinter (aJSConsolePrinter);
+#endif
+
   Draw::Commands (di);
   DBRep::BasicCommands (di);
   DrawTrSurf::BasicCommands (di);
+
+#ifdef OCCT_NO_PLUGINS
+  // load a couple of plugins
+  BOPTest::Factory (di);
+  DPrsStd::Factory (di);
+  XSDRAWSTLVRML::Factory (di);
+  XDEDRAW::Factory (di);
+  #if defined(HAVE_OPENGL) || defined(HAVE_GLES2)
+  ViewerTest::Factory (di);
+  OpenGlTest::Factory (di);
+  #endif
+  //TObjDRAW::Factory (di);
+  //QADraw::Factory (di);
+#endif
 }
 
 #include <Draw_Main.hxx>
diff --git a/src/DRAWEXE/DRAWEXE.html b/src/DRAWEXE/DRAWEXE.html
new file mode 100644 (file)
index 0000000..4147bf1
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html lang=en-us>
+<head>
+<meta charset=utf-8><meta content="text/html; charset=utf-8" http-equiv=Content-Type>
+<link rel="shortcut icon" href="lamp.ico" type="image/x-icon" />
+<title>OCCT Draw Harness</title>
+</head>
+<body>
+
+<h2>OCCT Draw Harness</h2>
+<div>
+  <canvas id=occViewerCanvas oncontextmenu=event.preventDefault() tabindex=-1 style="border:0 none;background-color:#000" width="409" height="409"></canvas>
+</div>
+<h4>Output (open JavaScript console):</h4>
+<p id="output"></p>
+<script type="text/javascript" src="DRAWEXE.js" charset="utf-8"></script>
+<script>
+//! Check browser support.
+function isWasmSupported()
+{
+  try {
+    if (typeof WebAssembly === "object"
+     && typeof WebAssembly.instantiate === "function") {
+      const aDummyModule = new WebAssembly.Module (Uint8Array.of (0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));
+      if (aDummyModule instanceof WebAssembly.Module)
+      {
+        return new WebAssembly.Instance(aDummyModule) instanceof WebAssembly.Instance;
+      }
+    }
+  } catch (e) {}
+  return false;
+}
+if (!isWasmSupported())
+{
+  var anElement = document.getElementById('output');
+  anElement.innerHTML += "Browser is too old - WebAssembly support is missing!<br>Please check updates or install a modern browser.<br>";
+}
+
+var DRAWEXE =
+{
+  print: (function() {
+    var anElement = document.getElementById('output');
+    //return function(theText) { anElement.innerHTML += theText + "<br>"; };
+    return function(theText) { console.warn(theText); };
+  })(),
+  printErr: function(theText) {
+    //var anElement = document.getElementById('output');
+    //anElement.innerHTML += theText + "<br>";
+    console.warn(theText);
+  },
+  canvas: (function() {
+    var aCanvas = document.getElementById('occViewerCanvas');
+    return aCanvas;
+  })(),
+
+  onRuntimeInitialized: function() {
+    //
+  }
+};
+
+const DRAWEXEInitialized = createDRAWEXE(DRAWEXE);
+DRAWEXEInitialized.then(function(Module) {
+  //DRAWEXE.eval("dversion");
+});
+
+</script>
+</body>
+</html>
diff --git a/src/DRAWEXE/EXTERNLIB_STATIC b/src/DRAWEXE/EXTERNLIB_STATIC
new file mode 100644 (file)
index 0000000..6833c00
--- /dev/null
@@ -0,0 +1,75 @@
+TKTopTest
+TKDCAF
+TKXSDRAW
+TKXDEDRAW
+TKOpenGlTest
+TKOpenGlesTest
+TKViewerTest
+TKDraw
+TKMeshVS
+TKXDESTEP
+TKSTEP
+TKSTEPAttr
+TKSTEP209
+TKSTEPBase
+TKXDEIGES
+TKIGES
+TKXSBase
+TKVRML
+TKSTL
+TKRWMesh
+TKBinXCAF
+TKXmlXCAF
+TKBin
+TKXml
+TKXmlL
+TKBinL
+TKOpenGl
+TKOpenGles
+TKXCAF
+TKVCAF
+TKStd
+TKCAF
+TKV3d
+TKHLR
+TKMesh
+TKService
+TKOffset
+TKFillet
+TKFeat
+TKBool
+TKBO
+TKShHealing
+TKPrim
+TKTopAlgo
+TKGeomAlgo
+TKBRep
+TKGeomBase
+TKG3d
+TKG2d
+TKMath
+TKStdL
+TKLCAF
+TKCDF
+TKernel
+CSF_TclLibs
+CSF_OpenVR
+CSF_OpenGlLibs
+CSF_OpenGlesLibs
+CSF_FFmpeg
+CSF_FreeImagePlus
+CSF_FREETYPE
+CSF_user32
+CSF_advapi32
+CSF_XwLibs
+CSF_dpsLibs
+CSF_XmuLibs
+CSF_fontconfig
+CSF_objc
+CSF_Appkit
+CSF_IOKit
+CSF_winmm
+CSF_ThreadLibs
+CSF_wsock32
+CSF_psapi
+CSF_androidlog
index 9c7d182..897e007 100644 (file)
@@ -452,6 +452,12 @@ static Standard_Integer dversion(Draw_Interpretor& di, Standard_Integer, const c
   #else
   di << "Architecture: ARM 32-bit\n";
   #endif
+#elif defined(__EMSCRIPTEN__)
+  #if defined(__LP64__)
+  di << "Architecture: WASM 64-bit\n";
+  #else
+  di << "Architecture: WASM 32-bit\n";
+  #endif
 #else
   di << "Architecture: unrecognized\n";
 #endif
@@ -475,6 +481,8 @@ static Standard_Integer dversion(Draw_Interpretor& di, Standard_Integer, const c
 #elif defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
   #include <sys/param.h>
   di << "OS: BSD (BSD = " << BSD << ")\n";
+#elif defined(__EMSCRIPTEN__)
+  di << "OS: WebAssembly (Emscripten SDK " << __EMSCRIPTEN_major__ << "." << __EMSCRIPTEN_minor__ << "." << __EMSCRIPTEN_tiny__ << ")\n";
 #else
   di << "OS: unrecognized\n";
 #endif
index 4c7d77e..badfb8e 100644 (file)
 #ifndef _Draw_PluginMacro_HeaderFile
 #define _Draw_PluginMacro_HeaderFile
 
+#ifdef OCCT_NO_PLUGINS
+#define DPLUGIN(name)
+#else
 #define DPLUGIN(name) \
-extern "C" {Standard_EXPORT void PLUGINFACTORY(Draw_Interpretor&);} \
-void  PLUGINFACTORY(Draw_Interpretor& theDI) { \
-        name::Factory(theDI);} \
-\
+extern "C" Standard_EXPORT void PLUGINFACTORY(Draw_Interpretor& theDI) { \
+  name::Factory(theDI); \
+}
+#endif
 
 #endif
index 786ff58..3d7eaef 100644 (file)
@@ -11,9 +11,7 @@
 # Alternatively, this file may be used under the terms of Open CASCADE
 # commercial license or contractual agreement.
 
-;#
-;# Liste des toolkits WOK sous forme de full path
-;# 
+;# Return list of toolkits
 proc Draw:toolkits { } {
   set aResult [list TKDraw TKTopTest TKViewerTest TKXSDRAW TKDCAF TKXDEDRAW TKTObjDRAW TKQADraw]
 
@@ -35,41 +33,23 @@ proc Draw:toolkits { } {
   return $aResult
 }
 
-;#
 ;# Autres UDs a prendre. Listes de triplets
 ;# { ar typ UD str } Tous les types de UD vont dans un sous directory nomme root/str
 ;# Ils seront dans CAS3.0/str de l'archive de type ar (source/runtime)
 ;# { ar typ UD {}  } Tous les types de UD vont dans root/UD/src => CAS3.0/src
-;#
 proc Draw:ressources { } {
-    return [list \
-           [list both r DrawResources {}] \
-           [list both x DRAWEXE {}] \
-           ]
-}
-proc Draw:freefiles { } {
-    return {}
-}
-;#
-;# Nom du module 
-;#
-proc Draw:name { } {
-    return Draw
-}
-proc Draw:alias { } {
-    return DRAW
-}
-proc Draw:depends { } {
-    return [list DataExchange]
+  return [list \
+          [list both r DrawResources {}] \
+          [list both x DRAWEXE {}] \
+         ]
 }
 
-proc Draw:acdepends { } {
-    return [list TCLTK]
-}
+proc Draw:freefiles { } { return {} }
+
+proc Draw:name { } { return Draw }
+proc Draw:alias { } { return DRAW }
+proc Draw:depends { } { return [list DataExchange] }
+proc Draw:acdepends { } { return [list TCLTK] }
 
-;#
 ;# Returns a list of exported features.
-;#
-proc Draw:Export { } {
-    return [list source runtime wokadm api]
-}
+proc Draw:Export { } { return [list source runtime wokadm api] }