version: 2.1

executors:
  rust-nightly-executor:
    docker:
        - image: rustlang/rust:nightly
  rust-executor:
    docker:
        - image: rust:latest


jobs:
  check-fmt:
    executor: rust-executor
    steps:
      - checkout
      - run:
          name: install rustfmt
          command: rustup component add rustfmt
      - run:
          name: check formatting
          command: cargo fmt -- --check
  clippy:
    executor: rust-executor
    steps:
      - checkout
      - run:
          name: install clippy
          command: rustup component add clippy
      - run:
          name: clippy
          command: cargo clippy
  build-native:
    executor: rust-executor
    steps:
      - checkout
      - run: apt-get update
      - run: apt-get install -y cmake gfortran libblas-dev liblapack-dev
      - run:
          name: build --no-default-feature
          command: cargo build --no-default-features;
      - run:
          name: build (default features)
          command: cargo build;
      - run:
          name: build --all-features
          command: cargo build --all-features
      - run:
          name: build nalgebra-glm
          command: cargo build -p nalgebra-glm --all-features
      - run:
          name: build nalgebra-lapack
          command: cd nalgebra-lapack; cargo build
  test-native:
    executor: rust-executor
    steps:
      - checkout
      - run:
          name: test
          command: cargo test --features arbitrary --features serde-serialize --features abomonation-serialize --features sparse --features debug --features io --features compare --features libm
      - run:
          name: test nalgebra-glm
          command: cargo test -p nalgebra-glm  --features arbitrary --features serde-serialize --features abomonation-serialize --features sparse --features debug --features io --features compare --features libm
  build-wasm:
    executor: rust-executor
    steps:
      - checkout
      - run:
          name: install cargo-web
          command: cargo install -f cargo-web;
      - run:
          name: build --all-features
          command: cargo web build --verbose --target wasm32-unknown-unknown;
      - run:
          name: build nalgebra-glm
          command: cargo build -p nalgebra-glm --all-features
  build-no-std:
    executor: rust-nightly-executor
    steps:
      - checkout
      - run:
          name: install xargo
          command: cp .circleci/Xargo.toml .; rustup component add rust-src; cargo install -f xargo;
      - run:
          name: build
          command: xargo build --verbose --no-default-features --target=x86_64-unknown-linux-gnu;
      - run:
          name: build --features alloc
          command: xargo build --verbose --no-default-features --features alloc --target=x86_64-unknown-linux-gnu;
  build-nightly:
    executor: rust-nightly-executor
    steps:
      - checkout
      - run:
          name: build --all-features
          command: cargo build --all-features


workflows:
  version: 2
  build:
    jobs:
      - check-fmt
      - clippy
      - build-native:
          requires:
            - check-fmt
      - build-wasm:
          requires:
            - check-fmt
      - build-no-std:
          requires:
            - check-fmt
      - build-nightly:
          requires:
            - check-fmt
      - test-native:
          requires:
            - build-native