use std::path::PathBuf;

fn main() {
    let src_dir: PathBuf = ["..", "tree-sitter-ruby", "src"].iter().collect();

    let mut c_config = cc::Build::new();
    c_config.include(&src_dir);
    c_config
        .flag_if_supported("-Wno-unused-parameter")
        .flag_if_supported("-Wno-unused-but-set-variable")
        .flag_if_supported("-Wno-trigraphs");
    let parser_path = src_dir.join("parser.c");
    c_config.file(&parser_path);
    println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap());
    c_config.compile("parser");

    let mut cpp_config = cc::Build::new();
    cpp_config.cpp(true);
    cpp_config.include(&src_dir);
    cpp_config
        .flag_if_supported("-Wno-unused-parameter")
        .flag_if_supported("-Wno-unused-but-set-variable");
    let scanner_path = src_dir.join("scanner.cc");
    cpp_config.file(&scanner_path);
    println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
    cpp_config.compile("scanner");
}

use std::path::PathBuf;

fn main() {
    let dir: PathBuf = ["../tree-sitter-ruby", "src"].iter().collect();
    let mut build = cc::Build::new();
    build
        .include(&dir)
        .file(&dir.join("parser.c"))
        .file(&dir.join("scanner.cc"));
    if !cfg!(windows) {
        build.cpp(true).compiler("clang");
    }
    build.compile("tree-sitter-ruby");
}

--- 
+++ 
@@ -1,14 +1,27 @@
 use std::path::PathBuf;
 
 fn main() {
-    let dir: PathBuf = ["../tree-sitter-ruby", "src"].iter().collect();
-    let mut build = cc::Build::new();
-    build
-        .include(&dir)
-        .file(&dir.join("parser.c"))
-        .file(&dir.join("scanner.cc"));
-    if !cfg!(windows) {
-        build.cpp(true).compiler("clang");
-    }
-    build.compile("tree-sitter-ruby");
+    let src_dir: PathBuf = ["..", "tree-sitter-ruby", "src"].iter().collect();
+
+    let mut c_config = cc::Build::new();
+    c_config.include(&src_dir);
+    c_config
+        .flag_if_supported("-Wno-unused-parameter")
+        .flag_if_supported("-Wno-unused-but-set-variable")
+        .flag_if_supported("-Wno-trigraphs");
+    let parser_path = src_dir.join("parser.c");
+    c_config.file(&parser_path);
+    println!("cargo:rerun-if-changed={}", parser_path.to_str().unwrap());
+    c_config.compile("parser");
+
+    let mut cpp_config = cc::Build::new();
+    cpp_config.cpp(true);
+    cpp_config.include(&src_dir);
+    cpp_config
+        .flag_if_supported("-Wno-unused-parameter")
+        .flag_if_supported("-Wno-unused-but-set-variable");
+    let scanner_path = src_dir.join("scanner.cc");
+    cpp_config.file(&scanner_path);
+    println!("cargo:rerun-if-changed={}", scanner_path.to_str().unwrap());
+    cpp_config.compile("scanner");
 }
Build parser.c and scanner.cc separately
