diff --git a/modules/core/include/opencv2/core/hal/intrin_wasm.hpp b/modules/core/include/opencv2/core/hal/intrin_wasm.hpp index f21cca7aea..3d8588a68d 100644 --- a/modules/core/include/opencv2/core/hal/intrin_wasm.hpp +++ b/modules/core/include/opencv2/core/hal/intrin_wasm.hpp @@ -20,6 +20,16 @@ #include #endif +// Emscripten v5.0.1 +// Emscripten has changed its version macros from lowercase (EMSCRIPTEN_major) to uppercase (EMSCRIPTEN_MAJOR) and deprecated the old ones. +// +// See https://github.com/opencv/opencv/issues/28901 +#if !defined(__EMSCRIPTEN_MAJOR__) && defined(__EMSCRIPTEN_major__) +# define __EMSCRIPTEN_MAJOR__ __EMSCRIPTEN_major__ +# define __EMSCRIPTEN_MINOR__ __EMSCRIPTEN_minor__ +# define __EMSCRIPTEN_TINY__ __EMSCRIPTEN_tiny__ +#endif + #define CV_SIMD128 1 #define CV_SIMD128_64F 0 // Now all implementation of f64 use fallback, so disable it. #define CV_SIMD128_FP16 0 @@ -31,7 +41,7 @@ namespace cv CV_CPU_OPTIMIZATION_HAL_NAMESPACE_BEGIN -#if (__EMSCRIPTEN_major__ * 1000000 + __EMSCRIPTEN_minor__ * 1000 + __EMSCRIPTEN_tiny__) < (1038046) +#if (__EMSCRIPTEN_MAJOR__ * 1000000 + __EMSCRIPTEN_MINOR__ * 1000 + __EMSCRIPTEN_TINY__) < (1038046) // handle renames: https://github.com/emscripten-core/emscripten/pull/9440 (https://github.com/emscripten-core/emscripten/commit/755d5b46cb84d0aa120c10981b11d05646c29673) #define wasm_i32x4_trunc_saturate_f32x4 wasm_trunc_saturate_i32x4_f32x4 #define wasm_u32x4_trunc_saturate_f32x4 wasm_trunc_saturate_u32x4_f32x4 @@ -1271,7 +1281,7 @@ OPENCV_HAL_IMPL_WASM_BIN_FUNC(v_uint8x16, v_sub_wrap, wasm_i8x16_sub) OPENCV_HAL_IMPL_WASM_BIN_FUNC(v_int8x16, v_sub_wrap, wasm_i8x16_sub) OPENCV_HAL_IMPL_WASM_BIN_FUNC(v_uint16x8, v_sub_wrap, wasm_i16x8_sub) OPENCV_HAL_IMPL_WASM_BIN_FUNC(v_int16x8, v_sub_wrap, wasm_i16x8_sub) -#if (__EMSCRIPTEN_major__ * 1000000 + __EMSCRIPTEN_minor__ * 1000 + __EMSCRIPTEN_tiny__) >= (1039012) +#if (__EMSCRIPTEN_MAJOR__ * 1000000 + __EMSCRIPTEN_MINOR__ * 1000 + __EMSCRIPTEN_TINY__) >= (1039012) // details: https://github.com/opencv/opencv/issues/18097 ( https://github.com/emscripten-core/emscripten/issues/12018 ) // 1.39.12: https://github.com/emscripten-core/emscripten/commit/cd801d0f110facfd694212a3c8b2ed2ffcd630e2 inline v_uint8x16 v_mul_wrap(const v_uint8x16& a, const v_uint8x16& b) diff --git a/modules/js/CMakeLists.txt b/modules/js/CMakeLists.txt index 526cb3d585..11c8284c68 100644 --- a/modules/js/CMakeLists.txt +++ b/modules/js/CMakeLists.txt @@ -45,17 +45,17 @@ set(EMSCRIPTEN_VERSION_PATH "${EMSCRIPTEN_INCLUDE_DIR}/emscripten/version.h") if(NOT EXISTS "${EMSCRIPTEN_VERSION_PATH}") message(STATUS "${EMSCRIPTEN_INCLUDE_DIR}/emscripten/version.h is missing") else() - file(STRINGS "${EMSCRIPTEN_VERSION_PATH}" EMSCRIPTEN_VERSION_CONTENTS REGEX "^#define[ \t]+__EMSCRIPTEN_[a-z]+__[ \t][0-9]+") + file(STRINGS "${EMSCRIPTEN_VERSION_PATH}" EMSCRIPTEN_VERSION_CONTENTS REGEX "^#define[ \t]+__EMSCRIPTEN_[a-zA-Z]+__[ \t][0-9]+") if(NOT EMSCRIPTEN_VERSION_CONTENTS) message(STATUS "${EMSCRIPTEN_INCLUDE_DIR}/emscripten/version.h is exists, but is not readable") else() - if(EMSCRIPTEN_VERSION_CONTENTS MATCHES "__EMSCRIPTEN_major__[ \t]+([0-9]+)") + if(EMSCRIPTEN_VERSION_CONTENTS MATCHES "__EMSCRIPTEN_[mM][aA][jJ][oO][rR]__[ \t]+([0-9]+)") set(EMSCRIPTEN_VERSION_MAJOR "${CMAKE_MATCH_1}") endif() - if(EMSCRIPTEN_VERSION_CONTENTS MATCHES "__EMSCRIPTEN_minor__[ \t]+([0-9]+)") + if(EMSCRIPTEN_VERSION_CONTENTS MATCHES "__EMSCRIPTEN_[mM][iI][nN][oO][rR]__[ \t]+([0-9]+)") set(EMSCRIPTEN_VERSION_MINOR "${CMAKE_MATCH_1}") endif() - if(EMSCRIPTEN_VERSION_CONTENTS MATCHES "__EMSCRIPTEN_tiny__[ \t]+([0-9]+)") + if(EMSCRIPTEN_VERSION_CONTENTS MATCHES "__EMSCRIPTEN_[tT][iI][nN][yY]__[ \t]+([0-9]+)") set(EMSCRIPTEN_VERSION_TINY "${CMAKE_MATCH_1}") endif()