fltk-sys 1.3.28

Rust bindings for the FLTK GUI library
Documentation
use std::path::Path;
use std::process::Command;

pub fn link(target_os: &str, target_triple: &str, out_dir: &Path) {
    println!(
        "cargo:rustc-link-search=native={}",
        out_dir.join("build").display()
    );

    println!(
        "cargo:rustc-link-search=native={}",
        out_dir.join("build").join("Release").display()
    );

    println!(
        "cargo:rustc-link-search=native={}",
        out_dir.join("lib").display()
    );

    println!(
        "cargo:rustc-link-search=native={}",
        out_dir.join("lib64").display()
    );

    println!(
        "cargo:rustc-link-search=native={}",
        out_dir.join("lib").join("Release").display()
    );

    println!(
        "cargo:rustc-link-search=native={}",
        out_dir.join("lib64").join("Release").display()
    );

    if !cfg!(feature = "fltk-shared") {
        println!("cargo:rustc-link-lib=static=cfltk");
    } else {
        println!("cargo:rustc-link-lib=dylib=cfltk");
    }

    if !cfg!(feature = "fltk-shared") {
        println!("cargo:rustc-link-lib=static=fltk");

        if !cfg!(features = "no-images") {
            println!("cargo:rustc-link-lib=static=fltk_images");

            if cfg!(feature = "system-libpng") {
                println!("cargo:rustc-link-lib=dylib=png");
            } else {
                println!("cargo:rustc-link-lib=static=fltk_png");
            }

            if cfg!(feature = "system-libjpeg") {
                println!("cargo:rustc-link-lib=dylib=jpeg");
            } else {
                println!("cargo:rustc-link-lib=static=fltk_jpeg");
            }

            if cfg!(feature = "system-zlib") {
                println!("cargo:rustc-link-lib=dylib=z");
            } else {
                println!("cargo:rustc-link-lib=static=fltk_z");
            }
        }

        if cfg!(feature = "enable-glwindow") {
            println!("cargo:rustc-link-lib=static=fltk_gl");
            match target_os {
                "macos" => println!("cargo:rustc-link-lib=framework=OpenGL"),
                "windows" => {
                    println!("cargo:rustc-link-lib=dylib=opengl32");
                    println!("cargo:rustc-link-lib=dylib=glu32");
                }
                _ => {
                    if cfg!(feature = "use-wayland") {
                        println!("cargo:rustc-link-lib=dylib=wayland-egl");
                        println!("cargo:rustc-link-lib=dylib=EGL");
                    }
                    println!("cargo:rustc-link-lib=dylib=GL");
                    println!("cargo:rustc-link-lib=dylib=GLU");
                }
            }
        }

        match target_os {
            "macos" => {
                println!("cargo:rustc-link-lib=framework=Carbon");
                println!("cargo:rustc-link-lib=framework=Cocoa");
                println!("cargo:rustc-link-lib=framework=ApplicationServices");
                println!("cargo:rustc-link-lib=c++abi");
            }
            "windows" => {
                println!("cargo:rustc-link-lib=dylib=ws2_32");
                println!("cargo:rustc-link-lib=dylib=comctl32");
                println!("cargo:rustc-link-lib=dylib=gdi32");
                println!("cargo:rustc-link-lib=dylib=oleaut32");
                println!("cargo:rustc-link-lib=dylib=ole32");
                println!("cargo:rustc-link-lib=dylib=uuid");
                println!("cargo:rustc-link-lib=dylib=shell32");
                println!("cargo:rustc-link-lib=dylib=advapi32");
                println!("cargo:rustc-link-lib=dylib=comdlg32");
                println!("cargo:rustc-link-lib=dylib=winspool");
                println!("cargo:rustc-link-lib=dylib=user32");
                println!("cargo:rustc-link-lib=dylib=kernel32");
                println!("cargo:rustc-link-lib=dylib=odbc32");
                if !cfg!(feature = "no-gdiplus") {
                    println!("cargo:rustc-link-lib=dylib=gdiplus");
                }
                if target_triple.contains("gnu") {
                    println!("cargo:rustc-link-lib=supc++");
                    println!("cargo:rustc-link-lib=gcc");
                }
            }
            "android" => {
                println!("cargo:rustc-link-lib=log");
                println!("cargo:rustc-link-lib=android");
                println!("cargo:rustc-link-lib=c++_shared");
            }
            "ios" => {
                // Experimental
                println!("cargo:rustc-link-lib=framework=UIKit");
            }
            _ => {
                println!("cargo:rustc-link-lib=dylib=pthread");
                if cfg!(feature = "use-wayland") {
                    if let Ok(lflags) = Command::new("pkg-config")
                        .args(&["--libs", "gtk+-3.0"])
                        .output()
                    {
                        let lflags = String::from_utf8_lossy(&lflags.stdout).to_string();
                        let lflags: Vec<&str> = lflags.split_ascii_whitespace().collect();
                        for flag in lflags {
                            println!(
                                "cargo:rustc-link-lib=dylib={}",
                                flag.strip_prefix("-l").unwrap()
                            );
                        }
                    }
                    println!("cargo:rustc-link-lib=dylib=wayland-client");
                    println!("cargo:rustc-link-lib=dylib=wayland-cursor");
                    println!("cargo:rustc-link-lib=dylib=xkbcommon");
                    println!("cargo:rustc-link-lib=dylib=dbus-1");
                    if let Ok(wayland_only) = std::env::var("CFLTK_WAYLAND_ONLY") {
                        if wayland_only != "1" {
                            println!("cargo:rustc-link-lib=dylib=X11");
                            println!("cargo:rustc-link-lib=dylib=Xext");
                            println!("cargo:rustc-link-lib=dylib=Xinerama");
                            println!("cargo:rustc-link-lib=dylib=Xcursor");
                            println!("cargo:rustc-link-lib=dylib=Xrender");
                            println!("cargo:rustc-link-lib=dylib=Xfixes");
                            println!("cargo:rustc-link-lib=dylib=Xft");
                        }
                    } else {
                        println!("cargo:rustc-link-lib=dylib=X11");
                        println!("cargo:rustc-link-lib=dylib=Xext");
                        println!("cargo:rustc-link-lib=dylib=Xinerama");
                        println!("cargo:rustc-link-lib=dylib=Xcursor");
                        println!("cargo:rustc-link-lib=dylib=Xrender");
                        println!("cargo:rustc-link-lib=dylib=Xfixes");
                        println!("cargo:rustc-link-lib=dylib=Xft");
                    }
                } else {
                    println!("cargo:rustc-link-lib=dylib=X11");
                    println!("cargo:rustc-link-lib=dylib=Xext");
                    println!("cargo:rustc-link-lib=dylib=Xinerama");
                    println!("cargo:rustc-link-lib=dylib=Xcursor");
                    println!("cargo:rustc-link-lib=dylib=Xrender");
                    println!("cargo:rustc-link-lib=dylib=Xfixes");
                    println!("cargo:rustc-link-lib=dylib=Xft");
                }
                println!("cargo:rustc-link-lib=dylib=fontconfig");
                if !cfg!(feature = "no-pango") {
                    println!("cargo:rustc-link-lib=dylib=pango-1.0");
                    println!("cargo:rustc-link-lib=dylib=pangoxft-1.0");
                    println!("cargo:rustc-link-lib=dylib=gobject-2.0");
                    println!("cargo:rustc-link-lib=dylib=cairo");
                    println!("cargo:rustc-link-lib=dylib=pangocairo-1.0");
                }
                if target_triple.contains("gnu") || target_triple.contains("musl") {
                    println!("cargo:rustc-link-lib=supc++");
                } else {
                    // assume libcxxrt is present!
                    println!("cargo:rustc-link-lib=cxxrt");
                }
            }
        }
    }
}