###
# Build hdf4, hdf5 dependencies and cache them in a combined directory.
###

name: Run netCDF-Fortran MacOS tests

on: [ workflow_dispatch ]

jobs:

  build-deps:

    runs-on: macos-11

    strategy:
      matrix:
        hdf5: [ 1.12.2 ]
        netcdf: [ v4.9.0, main ]

    steps:

      - uses: actions/checkout@v2

        ###
        # Set Environmental Variables
        ###
      - run: echo "FCFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
      - run: echo "FFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
      - run: echo "CFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
      - run: echo "CPPFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
      - run: echo "LDFLAGS=-L${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
      - run: echo "LD_LIBRARY_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
      - run: echo "DYLD_LIBRARY_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
      - run: echo "PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/bin:${PATH}" >> $GITHUB_ENV
      - run: brew install automake libaec 
        ###
        # Installing libhdf4 and libhdf5
        ###
      - name: Cache libhdf5-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
        id: cache-hdf5
        uses: actions/cache@v2
        with:
          path: ~/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
          key: hdf5-${{ runner.os }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}


      - name: Build libhdf5-${{ matrix.hdf5 }}-${{ matrix.netcdf }}
        if: steps.cache-hdf5.outputs.cache-hit != 'true'
        run: |
          pushd $HOME
          wget https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-$(echo ${{ matrix.hdf5 }} | cut -d. -f 1,2)/hdf5-${{ matrix.hdf5 }}/src/hdf5-${{ matrix.hdf5 }}.tar.bz2
          tar -jxf hdf5-${{ matrix.hdf5 }}.tar.bz2
          pushd hdf5-${{ matrix.hdf5 }}
          ./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }} --enable-hl --with-szlib
          make -j
          make install -j
          popd
          git clone -b ${{ matrix.netcdf}} https://github.com/Unidata/netcdf-c
          pushd netcdf-c
          autoreconf -if
          CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ./configure --disable-static --enable-shared --prefix=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
          make -j
          make install -j
          popd
          popd


  nf-autotools:

    needs: build-deps
    runs-on: ubuntu-latest

    strategy:
      matrix:
        hdf5: [ 1.12.2 ]
        netcdf: [ v4.9.0, main ]

    steps:

      - uses: actions/checkout@v2
###
# Set Environmental Variables
###

      - run: echo "FCFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
      - run: echo "FFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
      - run: echo "CFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
      - run: echo "CPPFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV      
      - run: echo "LDFLAGS=-L${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
      - run: echo "LD_LIBRARY_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
      - run: echo "DYLD_LIBRARY_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
      - run: echo "PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/bin:${PATH}" >> $GITHUB_ENV
      - run: brew install automake 
      

###
# Fetch Cache
###

      - name: Fetch HDF Cache
        id: cache-hdf
        uses: actions/cache@v2
        with:
          path: ~/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
          key: hdf5-${{ runner.os }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}

      - name: Check Cache
        shell: bash -l {0}
        run: ls ${HOME}/environments && ls ${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }} && ls ${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf}}/lib

###
# Configure and build
###

      - name: Run autoconf
        shell: bash -l {0}
        run: autoreconf -if

      - name: Configure
        shell: bash -l {0}
        run: CFLAGS=${CFLAGS} LDFLAGS=$(nc-config --libs) LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ./configure

      - name: Look at config.log if error
        shell: bash -l {0}
        run: cat config.log
        if: ${{ failure() }}

      - name: Print Summary
        shell: bash -l {0}
        run: cat libnetcdff.settings

      - name: Build Library and Utilities
        shell: bash -l {0}
        run: CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make -j
        if: ${{ success() }}

      - name: Build Tests
        shell: bash -l {0}
        run: CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make check TESTS="" -j
        if: ${{ success() }}

      - name: Run Tests
        shell: bash -l {0}
        run: CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make check -j
        if: ${{ success() }}

      #- name: Make Distcheck
      #  shell: bash -l {0}
      #  run: CFLAGS=${CFLAGS} LDFLAGS=${LDFLAGS} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make distcheck -j

  nf-cmake:

    needs: build-deps
    runs-on: ubuntu-latest

    strategy:
      matrix:
        hdf5: [ 1.12.2 ]
        netcdf: [ v4.9.0, main ]

    steps:

      - uses: actions/checkout@v2

###
# Set Environmental Variables
###
      - run: echo "FCFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
      - run: echo "FFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV
      - run: echo "CPPFLAGS=-I${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/include" >> $GITHUB_ENV      
      - run: echo "LDFLAGS=-L${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
      - run: echo "LD_LIBRARY_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/lib" >> $GITHUB_ENV
      - run: echo "CMAKE_PREFIX_PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf}}" >> $GITHUB_ENV
      - run: echo "PATH=${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}/bin:${PATH}" >> $GITHUB_ENV
      - run: brew install automake 

###
# Fetch Cache
###

      - name: Fetch HDF Cache
        id: cache-hdf5
        uses: actions/cache@v2
        with:
              path: ~/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }}
              key: hdf5-${{ runner.os }}-${{ matrix.hdf5 }}-${{ matrix.netcdf }}

      - name: Check Cache
        shell: bash -l {0}
        run: ls ${HOME}/environments && ls ${HOME}/environments/${{ matrix.hdf5 }}-${{ matrix.netcdf }} && ls ${HOME}/environments/${{ matrix.hdf5 }}-${{matrix.netcdf}}/lib

###
# Configure and build
###

      - name: Perform out-of-directory build
        shell: bash -l {0}
        run: |
              mkdir build
              cd build
              LD_LIBRARY_PATH=${LD_LIBRARY_PATH} cmake .. -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}

      - name: Print Summary
        shell: bash -l {0}
        run: |
              cd build
              cat libnetcdff.settings

      - name: Build All
        shell: bash -l {0}
        run: |
              cd build
              LD_LIBRARY_PATH=${LD_LIBRARY_PATH} make -j 12
        if: ${{ success() }}

      - name: Run Tests
        shell: bash -l {0}
        run: |
              cd build
              LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ctest -j 1 .
        if: ${{ success() }}

      - name: Look at LastTest.log if error
        shell: bash -l {0}
        run: |
          cat /home/runner/work/netcdf-fortran/netcdf-fortran/build/Testing/Temporary/LastTest.log
          cd build
          LD_LIBRARY_PATH=${LD_LIBRARY_PATH} ctest --rerun-failed --output-on-failure

        if: ${{ failure() }}
