branch: master
cmp-pkg-config.sh
1660 bytesRaw
#!/usr/bin/env bash
# Copyright (C) Viktor Szakats
#
# SPDX-License-Identifier: curl

# Sort list of libs, libpaths, cflags found in libcurl.pc and curl-config files,
# then diff the autotools and cmake generated ones.

sort_lists() {
  prevline=''
  section=''
  while IFS= read -r l; do
    if [[ "${prevline}" =~ (--cc|--configure) ]]; then  # curl-config
      echo "<IGNORED>"
    else
      # libcurl.pc
      if [[ "${l}" =~ ^(Requires|Libs|Cflags)(\.private)?:\ (.+)$ ]]; then
        if [ "${BASH_REMATCH[1]}" = 'Requires' ]; then
          # Spec does not allow duplicates here:
          # https://manpages.debian.org/unstable/pkg-config/pkg-config.1.en.html#Requires:
          # "You may only mention the same package one time on the Requires: line"
          val="$(printf '%s' "${BASH_REMATCH[3]}" | tr ',' '\n' | sort | tr '\n' ' ')"
        else
          val="$(printf '%s' "${BASH_REMATCH[3]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')"
        fi
        l="${BASH_REMATCH[1]}${BASH_REMATCH[2]}: ${val}"
      # curl-config
      elif [[ "${section}" =~ (--libs|--static-libs) && "${l}" =~ ^( *echo\ \")(.+)(\")$ ]]; then
        val="$(printf '%s' "${BASH_REMATCH[2]}" | tr ' ' '\n' | sort -u | tr '\n' ' ')"
        l="${BASH_REMATCH[1]}${val}${BASH_REMATCH[3]}"
        section=''
      fi
      echo "${l}"
    fi
    # curl-config
    prevline="${l}"
    if [[ "${l}" =~ --[a-z-]+\) ]]; then
      section="${BASH_REMATCH[0]}"
    fi
  done < "$1"
}

am=$(mktemp -t autotools.XXX); sort_lists "$1" > "${am}"
cm=$(mktemp -t cmake.XXX)    ; sort_lists "$2" > "${cm}"
diff -u "${am}" "${cm}"
res="$?"
rm -r -f "${am}" "${cm}"

exit "${res}"