diff --git a/Makefile b/Makefile
index 582741e0b7567594271b8b4618460975daea49e5..90e779f26d5e8b41b527d0d974ff726fedb5e349 100644
--- a/Makefile
+++ b/Makefile
@@ -1288,6 +1288,14 @@ gui: gui-$(OCAMLBEST)
 ALL_GUI_CMO= $(ALL_CMO) $(GRAPH_GUICMO) $(GUICMO)
 ALL_GUI_CMX= $(patsubst %.cma,%.cmxa,$(ALL_GUI_CMO:.cmo=.cmx))
 
+ifeq ($(LABLGTK_VERSION),3)
+ifeq ($(NATIVE_THREADS),yes)
+THREAD=-thread
+else
+THREAD=-vmthread
+endif
+endif
+
 bin/viewer.byte$(EXE): BYTE_LIBS+= $(GRAPH_GUICMO)
 bin/viewer.byte$(EXE): $(filter-out $(GRAPH_GUICMO),$(ALL_GUI_CMO)) \
 			$(GEN_BYTE_LIBS) \
@@ -2297,21 +2305,21 @@ PTESTS_SRC=ptests/ptests_config.ml ptests/ptests.ml
 PTESTS_CONFIG:= $(shell if test -d tests; then echo tests/ptests_config; fi)
 
 ifeq ($(NATIVE_THREADS),yes)
-THREAD=-thread
+PTEST_THREAD=-thread
 ptests: bin/ptests.$(PTESTSBEST)$(EXE) $(PTESTS_CONFIG)
 else
-THREAD=-vmthread
+PTEST_THREAD=-vmthread
 ptests: bin/ptests.byte$(EXE) $(PTESTS_CONFIG)
 endif
 
 bin/ptests.byte$(EXE): $(PTESTS_SRC)
 	$(PRINT_LINKING) $@
-	$(OCAMLC) -I ptests -dtypes $(THREAD) -g -o $@ \
+	$(OCAMLC) -I ptests -dtypes $(PTEST_THREAD) -g -o $@ \
 	    unix.cma threads.cma str.cma dynlink.cma $^
 
 bin/ptests.opt$(EXE): $(PTESTS_SRC)
 	$(PRINT_LINKING) $@
-	$(OCAMLOPT) -I ptests -dtypes $(THREAD) -o $@ \
+	$(OCAMLOPT) -I ptests -dtypes $(PTEST_THREAD) -o $@ \
 	    unix.cmxa threads.cmxa str.cmxa dynlink.cmxa $^
 
 GENERATED+=ptests/ptests_config.ml tests/ptests_config
diff --git a/configure.in b/configure.in
index 09121c03098bc616365e96ecc5ce9d4d9387366c..1c508452c3e88478318f82fff46c8a61dbe09c0f 100644
--- a/configure.in
+++ b/configure.in
@@ -424,6 +424,7 @@ rm -f test_os_type.cmi  test_os_type.cmo  test_os_type.ml test_os_type
 if test "$OCAML_OS_TYPE" = "Win32"; then
   AC_MSG_RESULT(Win32)
   AC_CHECK_PROG(CYGPATH,cygpath,cygpath,no)
+  PLATFORM=Win32
   OCAMLWIN32=yes
   EXE=.exe
   # OCaml on Win32 does not support vmthreads, use native ones.
@@ -432,9 +433,16 @@ else
   OCAMLWIN32=no
   if test "$OCAML_OS_TYPE" = "Cygwin"; then
     AC_MSG_RESULT(Cygwin)
+    PLATFORM=Cygwin
     EXE=.exe
   else
-    AC_MSG_RESULT(Unix)
+    if test $(uname -s) = "Darwin"; then
+      AC_MSG_RESULT(MacOS)
+      PLATFORM=MacOS
+    else
+      AC_MSG_RESULT(Unix)
+      PLATFORM=Unix
+    fi
     EXE=
   fi
 
@@ -938,13 +946,14 @@ USE_LABLGTK="$USE_LABLGTK$USE_GNOMECANVAS"
 LABLGTK_PATH=""
 SOURCEVIEW_PATH=""
 
+if test "$PLATFORM" != "MacOS"; then
 if test "$ENABLE_LABLGTK3" = "yes"; then
   LABLGTK_PATH=`ocamlfind query lablgtk3 | tr -d '\\r\\n'`;
 fi
-
 if test "$LABLGTK_PATH" != ""; then
   SOURCEVIEW_PATH=`ocamlfind query lablgtk3-sourceview3 | tr -d '\\r\\n'`;
 fi
+fi
 
 if test "$SOURCEVIEW_PATH" = ""; then
   LABLGTK_VERSION=2
@@ -1016,6 +1025,7 @@ check_frama_c_dependencies
 
 EXTERNAL_PLUGINS="${EXTERNAL_PLUGINS} ${EXTRA_EXTERNAL_PLUGINS}"
 
+AC_SUBST(PLATFORM)
 AC_SUBST(VERBOSEMAKE)
 AC_SUBST(DEVELOPMENT)
 AC_SUBST(DOT)
diff --git a/opam/opam b/opam/opam
index 16ea05f0d3eb81cba33aaff3e84e8d87cac22374..bda948e9199b27790ffd9fac8029f18e26587ee0 100644
--- a/opam/opam
+++ b/opam/opam
@@ -90,7 +90,7 @@ depends: [
   "zarith"
   "conf-autoconf" { build }
   ( ( "lablgtk" { >= "2.18.2" } & "conf-gnomecanvas" )
-  | ( "lablgtk3" { >= "3.0.beta4" } & "lablgtk3-sourceview3"))
+  | ( "lablgtk3" { >= "3.0.beta4" & os!="macos" } & "lablgtk3-sourceview3" ))
   "conf-gtksourceview"
   ( "alt-ergo-free" | "alt-ergo" )
   "conf-graphviz" { post }
diff --git a/share/Makefile.config.in b/share/Makefile.config.in
index f6b545148e78dc450b717a4f7d9b5c539f4a0cfc..f0bc8ae518d5973c1e46e30e979ecf6e1dcdfd73 100644
--- a/share/Makefile.config.in
+++ b/share/Makefile.config.in
@@ -91,6 +91,7 @@ HAS_OCAML405    ?=@HAS_OCAML405@
 HAS_OCAML407    ?=@HAS_OCAML407@
 HAS_OCAML408    ?=@HAS_OCAML408@
 
+PLATFORM	?=@PLATFORM@
 NATIVE_THREADS	?=@HAS_NATIVE_THREADS@
 OCAMLWIN32	?=@OCAMLWIN32@
 PTESTSBEST      ?=@PTESTSBEST@