--- CMakeLists.txt.orig	2022-12-20 15:30:55 UTC
+++ CMakeLists.txt
@@ -1,4 +1,4 @@
-# Gmsh - Copyright (C) 1997-2022 C. Geuzaine, J.-F. Remacle
+# Gmsh - Copyright (C) 1997-2023 C. Geuzaine, J.-F. Remacle
 #
 # See the LICENSE.txt file in the Gmsh root directory for license information.
 # Please report all issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
@@ -107,8 +107,8 @@ set(GMSH_MAJOR_VERSION 4)
 opt(ZIPPER "Enable Zip file compression/decompression" OFF)
 
 set(GMSH_MAJOR_VERSION 4)
-set(GMSH_MINOR_VERSION 11)
-set(GMSH_PATCH_VERSION 1)
+set(GMSH_MINOR_VERSION 12)
+set(GMSH_PATCH_VERSION 0)
 if(NOT GMSH_EXTRA_VERSION)
   set(GMSH_EXTRA_VERSION "")
 endif()
@@ -343,13 +343,19 @@ if(ENABLE_OPENMP)
         "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp -I/opt/local/include/libomp")
     list(APPEND EXTERNAL_LIBRARIES "-L/opt/local/lib/libomp -lomp")
   elseif(APPLE AND EXISTS "/usr/local/lib/libomp.dylib")
-    # official Apple compiler with homebrew's libomp
+    # official Apple compiler with homebrew's libomp on Intel
     set_config_option(HAVE_OPENMP "OpenMP[Homebrew]")
+    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Xpreprocessor -fopenmp")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp")
+    list(APPEND EXTERNAL_LIBRARIES "-L/usr/local/lib -lomp")
+  elseif(APPLE AND EXISTS "/opt/homebrew/opt/libomp")
+    # official Apple compiler with homebrew's libomp on M processors
+    set_config_option(HAVE_OPENMP "OpenMP[Homebrew]")
     set(CMAKE_C_FLAGS
-        "${CMAKE_C_FLAGS} -Xpreprocessor -fopenmp")
+        "${CMAKE_C_FLAGS} -Xpreprocessor -fopenmp -I/opt/homebrew/opt/libomp/include")
     set(CMAKE_CXX_FLAGS
-        "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp")
-    list(APPEND EXTERNAL_LIBRARIES "-L/usr/local/lib -lomp")
+        "${CMAKE_CXX_FLAGS} -Xpreprocessor -fopenmp -I/opt/homebrew/opt/libomp/include")
+    list(APPEND EXTERNAL_LIBRARIES "-L/opt/homebrew/opt/libomp/lib -lomp")
   elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux" AND EXISTS "/usr/local/lib64/libgomp.a")
     # custom static openmp for official linux builds
     set_config_option(HAVE_OPENMP "OpenMP[static]")
@@ -1101,9 +1107,9 @@ if(HAVE_SOLVER)
           string(REPLACE " " ";" PETSC_PACKAGES_INCLUDES ${PETSC_PACKAGES_INCLUDES})
           foreach(VAR ${PETSC_PACKAGES_INCLUDES})
             # seem to include unexisting directories (/usr/include/lib64)
-	    # check to avoid warnings
-	    if(EXISTS ${VAR})
-	      list(APPEND EXTERNAL_INCLUDES ${VAR})
+            # check to avoid warnings
+            if(EXISTS ${VAR})
+              list(APPEND EXTERNAL_INCLUDES ${VAR})
             endif()
           endforeach()
         endif()
@@ -1119,10 +1125,10 @@ if(HAVE_SOLVER)
       endif()
       if(PETSC_LIBS)
         set_config_option(HAVE_PETSC "PETSc")
-	if(NOT HAVE_BLAS)
+        if(NOT HAVE_BLAS)
           set_config_option(HAVE_BLAS "Blas[petsc]")
         endif()
-	if(NOT HAVE_LAPACK)
+        if(NOT HAVE_LAPACK)
           set_config_option(HAVE_LAPACK "Lapack[petsc]")
         endif()
       endif()
@@ -1264,21 +1270,34 @@ if(ENABLE_OCC)
       message(STATUS "Found OpenCASCADE version ${OCC_VERSION} in ${OCC_INC}")
     endif()
   endif()
-  if(OCC_VERSION AND OCC_VERSION STRLESS ${OCC_MINIMAL_VERSION})
+  if(OCC_VERSION AND OCC_VERSION VERSION_LESS ${OCC_MINIMAL_VERSION})
     message(WARNING "Gmsh requires OpenCASCADE >= ${OCC_MINIMAL_VERSION}. "
         "Use CMAKE_PREFIX_PATH or the CASROOT environment variable "
         "to explicitly specify the installation path of OpenCASCADE")
   elseif(OCC_INC)
-    set(OCC_LIBS_REQUIRED
-	# subset of DataExchange
-      	TKSTEP TKSTEP209 TKSTEPAttr TKSTEPBase TKIGES TKXSBase
-      	# ModelingAlgorithms
-      	TKOffset TKFeat TKFillet TKBool TKMesh TKHLR TKBO TKPrim TKShHealing
-      	TKTopAlgo TKGeomAlgo
-      	# ModelingData
-      	TKBRep TKGeomBase TKG3d TKG2d
-      	# FoundationClasses
-      	TKMath TKernel)
+    if(OCC_VERSION AND OCC_VERSION VERSION_GREATER_EQUAL "7.8.0")
+      set(OCC_LIBS_REQUIRED
+          # subset of DataExchange
+          TKDESTEP TKDEIGES TKXSBase
+          # ModelingAlgorithms
+          TKOffset TKFeat TKFillet TKBool TKMesh TKHLR TKBO TKPrim TKShHealing
+          TKTopAlgo TKGeomAlgo
+          # ModelingData
+          TKBRep TKGeomBase TKG3d TKG2d
+          # FoundationClasses
+          TKMath TKernel)
+    else()
+      set(OCC_LIBS_REQUIRED
+          # subset of DataExchange
+          TKSTEP TKSTEP209 TKSTEPAttr TKSTEPBase TKIGES TKXSBase
+          # ModelingAlgorithms
+          TKOffset TKFeat TKFillet TKBool TKMesh TKHLR TKBO TKPrim TKShHealing
+          TKTopAlgo TKGeomAlgo
+          # ModelingData
+          TKBRep TKGeomBase TKG3d TKG2d
+          # FoundationClasses
+          TKMath TKernel)
+    endif()
     if(ENABLE_OCC_TBB)
       list(APPEND OCC_LIBS_REQUIRED tbb tbbmalloc)
     endif()
@@ -1310,8 +1329,13 @@ if(ENABLE_OCC)
   if(ENABLE_OCC_CAF)
     find_package(Freetype)
     if(FREETYPE_FOUND)
-      set(OCC_CAF_LIBS_REQUIRED
-          TKXDESTEP TKXDEIGES TKXCAF TKLCAF TKVCAF TKCAF TKV3d TKService TKCDF)
+      if(OCC_VERSION AND OCC_VERSION VERSION_GREATER_EQUAL "7.8.0")
+        set(OCC_CAF_LIBS_REQUIRED
+            TKXCAF TKLCAF TKVCAF TKCAF TKV3d TKService TKCDF)
+      else()
+        set(OCC_CAF_LIBS_REQUIRED
+            TKXDESTEP TKXDEIGES TKXCAF TKLCAF TKVCAF TKCAF TKV3d TKService TKCDF)
+      endif()
       list(LENGTH OCC_CAF_LIBS_REQUIRED NUM_OCC_CAF_LIBS_REQUIRED)
       set(OCC_CAF_LIBS)
       foreach(OCC ${OCC_CAF_LIBS_REQUIRED})
@@ -1493,6 +1517,10 @@ if(WALL AND NOT MSVC)
     # FIXME: remove this when GCC behaves more intelligently
     set(WF "${WF} -Wno-attributes")
   endif()
+  check_cxx_compiler_flag("-Wno-unused-but-set-variable" WUNUSED)
+  if(WUNUSED)
+    set(WF "${WF} -Wno-unused-but-set-variable")
+  endif()
   if(WIN32 OR NOT HAVE_64BIT_SIZE_T)
     # FIXME: remove printf family warnings on 32 bit systems and windows
     check_cxx_compiler_flag("-Wno-format" WFORMAT)
@@ -1768,8 +1796,10 @@ elseif(APPLE)
 elseif(MSVC)
   set_target_properties(gmsh PROPERTIES LINK_FLAGS "/STACK:16777216 /SAFESEH:NO")
 elseif(APPLE)
-  # this remove ld warnings with PETSc+MUMPS on recent macOS versions
-  # set_target_properties(gmsh PROPERTIES LINK_FLAGS "-Wl,-no_compact_unwind")
+  # this remove ld warnings with PETSc+MUMPS on recent macOS versions; but
+  # breaks exception handling
+  # set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-no_compact_unwind")
+  # set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-no_compact_unwind")
 endif()
 
 # android target
@@ -2203,9 +2233,6 @@ if(ENABLE_TESTS AND NOT DISABLE_GMSH_TESTS)
           set(FLAGS "${FLAGS} -mconsole")
         endif()
         set_target_properties(${TEST} PROPERTIES LINK_FLAGS "${FLAGS}")
-      elseif(APPLE)
-        # this remove ld warnings with PETSc+MUMPS on recent macOS versions
-        # set_target_properties(${TEST} PROPERTIES LINK_FLAGS "-Wl,-no_compact_unwind")
       endif()
       add_test(${TEST} ${TEST} -nopopup)
     endforeach()
@@ -2245,3 +2272,4 @@ mark_as_advanced(ANN_INC ANN_LIB CAIRO_LIB CAIRO_INC C
                  PETSC_LIBS SLEPC_INC SLEPC_INC2 SLEPC_LIB
                  BISON FLEX MAKEINFO TEXI2PDF FLTK_CONFIG_SCRIPT
                  GMSH_EXTERNAL_INCLUDE_DIRS GMSH_EXTERNAL_LIBRARIES)
+
