# Autotools default configurations

variables:

  autogen: |
    export NOCONFIGURE=1;

    if [ -x %{conf-cmd} ]; then true;
    elif [ -x autogen ]; then ./autogen;
    elif [ -x autogen.sh ]; then ./autogen.sh;
    elif [ -x bootstrap ]; then ./bootstrap;
    elif [ -x bootstrap.sh ]; then ./bootstrap.sh;
    else autoreconf -ivf;
    fi

  # Project-wide extra arguments to be passed to `configure`
  conf-global: ''

  # Element-specific extra arguments to be passed to `configure`.
  conf-local: ''

  # For backwards compatibility only, do not use.
  conf-extra: ''

  conf-cmd: ./configure
  conf-args: |

    --prefix=%{prefix} \
    --exec-prefix=%{exec_prefix} \
    --bindir=%{bindir} \
    --sbindir=%{sbindir} \
    --sysconfdir=%{sysconfdir} \
    --datadir=%{datadir} \
    --includedir=%{includedir} \
    --libdir=%{libdir} \
    --libexecdir=%{libexecdir} \
    --localstatedir=%{localstatedir} \
    --sharedstatedir=%{sharedstatedir} \
    --mandir=%{mandir} \
    --infodir=%{infodir} %{conf-extra} %{conf-global} %{conf-local}

  configure: |

    %{conf-cmd} %{conf-args}

  make: make
  make-install: make -j1 DESTDIR="%{install-root}" install

  # Set this if the sources cannot handle parallelization.
  #
  # notparallel: True


  # Automatically remove libtool archive files
  #
  # Set remove-libtool-modules to "true" to remove .la files for 
  # modules intended to be opened with lt_dlopen()
  #
  # Set remove-libtool-libraries to "true" to remove .la files for
  # libraries
  #
  # Value must be "true" or "false"
  remove-libtool-modules: "false"  
  remove-libtool-libraries: "false"

  delete-libtool-archives: |
    if %{remove-libtool-modules} || %{remove-libtool-libraries}; then
      find "%{install-root}" -name "*.la" -print0 | while read -d '' -r file; do
        if grep '^shouldnotlink=yes$' "${file}" &>/dev/null; then
          if %{remove-libtool-modules}; then
            echo "Removing ${file}."
            rm "${file}"
          else
            echo "Not removing ${file}."
          fi
        else
          if %{remove-libtool-libraries}; then
            echo "Removing ${file}."
            rm "${file}"
          else
            echo "Not removing ${file}."
          fi
        fi
      done
    fi

config:

  # Commands for configuring the software
  #
  configure-commands:
  - |
    %{autogen}
  - |
    %{configure}

  # Commands for building the software
  #
  build-commands:
  - |
    %{make}

  # Commands for installing the software into a
  # destination folder
  #
  install-commands:
  - |
    %{make-install}
  - |
    %{delete-libtool-archives}

  # Commands for stripping debugging information out of
  # installed binaries
  #
  strip-commands:
  - |
    %{strip-binaries}

# Use max-jobs CPUs for building and enable verbosity
environment:
  MAKEFLAGS: -j%{max-jobs}
  V: 1

# And dont consider MAKEFLAGS or V as something which may
# effect build output.
environment-nocache:
- MAKEFLAGS
- V
