name: CMake

on: 
  pull_request: 
    branches: 
      - master
    types: 
      - opened
      - synchronize
      - reopened
  push: 
    branches: 
      - master

env:
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
  BUILD_TYPE: Release

jobs:
  build:
    # The CMake configure and build commands are platform agnostic and should work equally
    # well on Windows or Mac.  You can convert this to a matrix build if you need
    # cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
      
    - name: Install dependencies
      run: sudo apt install libglu1-mesa-dev pkg-config

    - name: Create Build Environment
      # Some projects don't allow in-source building, so create a separate build directory
      # We'll use this as our working directory for all subsequent commands
      run: |
        mkdir ${{runner.workspace}}/build_test
        mkdir ${{runner.workspace}}/from_installed
        mkdir ${{runner.workspace}}/pkg-config
        mkdir ${{runner.workspace}}/as_subdirectory

    - name: Configure CMake
      # Use a bash shell so we can use the same syntax for environment variable
      # access regardless of the host operating system
      shell: bash
      working-directory: ${{runner.workspace}}/build_test
      # Note the current convention is to use the -S and -B options here to specify source 
      # and build directories, but this is only available with CMake 3.13 and higher.  
      # The CMake binaries on the Github Actions machines are (as of this writing) 3.12
      run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE

    - name: Build test
      working-directory: ${{runner.workspace}}/build_test
      shell: bash
      # Execute the build.  You can specify a specific target with "--target <NAME>"
      run: cmake --build . --config $BUILD_TYPE

    - name: Install test
      shell: bash
      working-directory: ${{runner.workspace}}/from_installed
      run: |
        mkdir -p ext_project/build
        cp $GITHUB_WORKSPACE/src/glewinfo.c ext_project/
        cmake $GITHUB_WORKSPACE -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/glew-root-cmake
        cmake --build . --target install
        
        cd ext_project
        cp $GITHUB_WORKSPACE/glew-cmake/cmake-install-test.cmake CMakeLists.txt
        cmake -DCMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/glew-root-cmake/ .
        cmake --build .

    - name: Package config test
      shell: bash
      working-directory: ${{runner.workspace}}/pkg-config
      run: |
        mkdir -p ext_project
        cp $GITHUB_WORKSPACE/src/glewinfo.c ext_project/
        cmake $GITHUB_WORKSPACE -DPKG_CONFIG_REPRESENTATIVE_TARGET=libglew_static -DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/glew-root-pkg-config
        cmake --build . --target install
        
        cd ext_project
        gcc $GITHUB_WORKSPACE/src/glewinfo.c $(PKG_CONFIG_PATH=$GITHUB_WORKSPACE/glew-root-pkg-config/lib/pkgconfig pkg-config --libs --cflags glew) -o glewinfo

    - name: Subdirectory test
      shell: bash
      working-directory: ${{runner.workspace}}/as_subdirectory
      run: |
        cp $GITHUB_WORKSPACE/src/glewinfo.c ./
        cp $GITHUB_WORKSPACE/glew-cmake/sub-directory-test.cmake CMakeLists.txt
        cmake .
        cmake --build .

  build_2_8:
    # The CMake configure and build commands are platform agnostic and should work equally
    # well on Windows or Mac.  You can convert this to a matrix build if you need
    # cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ubuntu-latest
    container: ubuntu:14.04

    steps:
    - uses: actions/checkout@v2
      
    - name: Install dependencies
      run: apt update && apt install -y cmake gcc libgl1-mesa-dev libx11-dev libxext-dev

    - name: Configure CMake
      shell: bash
      run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE

    - name: Build test
      shell: bash
      run: cmake --build .

    - name: Check alias
      shell: bash
      run: test -e lib/libGLEW.a

  build_3_10:
    # The CMake configure and build commands are platform agnostic and should work equally
    # well on Windows or Mac.  You can convert this to a matrix build if you need
    # cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ubuntu-latest
    container: ubuntu:18.04

    steps:
    - uses: actions/checkout@v2
      
    - name: Install dependencies
      run: apt update && apt install -y cmake gcc libgl1-mesa-dev libx11-dev libxext-dev

    - name: Configure CMake
      shell: bash
      run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE

    - name: Build test
      shell: bash
      run: cmake --build .
      
    - name: Check alias
      shell: bash
      run: test -e lib/libGLEW.a

  build_mingw:
    # The CMake configure and build commands are platform agnostic and should work equally
    # well on Windows or Mac.  You can convert this to a matrix build if you need
    # cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ubuntu-latest
    container: ubuntu:18.04

    steps:
    - uses: actions/checkout@v2
      
    - name: Install dependencies
      run: apt update && apt install -y cmake g++-mingw-w64-x86-64 make libgl1-mesa-dev libx11-dev libxext-dev

    - name: Configure CMake
      shell: bash
      run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCMAKE_TOOLCHAIN_FILE="$GITHUB_WORKSPACE/glew-cmake/mingw.cmake"

    - name: Build test
      shell: bash
      run: cmake --build .


  build_mac:
    runs-on: macos-latest

    steps:
    - uses: actions/checkout@v2
    
    - name: Configure CMake
      shell: bash
      run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE

    - name: Build test
      shell: bash
      run: cmake --build .

  build_windows:
    runs-on: windows-latest

    steps:
    - uses: actions/checkout@v2
    
    - name: Configure CMake
      shell: bash
      run: cmake . -DCMAKE_BUILD_TYPE=$BUILD_TYPE

    - name: Build test
      shell: bash
      run: cmake --build .