#!/bin/sh
#
# Copyright (C) 2007 Free Software Foundation, Inc.
# Written by Bruno Haible <bruno@clisp.org>, 2007.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

# Usage: windres-options [--escape] PACKAGE_VERSION
# Outputs a set of command-line options for 'windres', containing definitions
# for the preprocessor variables
#   PACKAGE_VERSION_STRING
#   PACKAGE_VERSION_MAJOR
#   PACKAGE_VERSION_MINOR
#   PACKAGE_VERSION_SUBMINOR

escape=
if test "$1" = "--escape"; then
  escape=yes
  shift
fi
version="$1" # something like 2.0 or 2.17 or 2.17.3 or 2.17.3-pre3

sed_extract_major='/^[0-9]/{
s/^\([0-9]*\).*/\1/p
q
}
c\
0
q
'
sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{
s/^[0-9]*[.]\([0-9]*\).*/\1/p
q
}
c\
0
q
'
sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{
s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p
q
}
c\
0
q
'

{
  echo "-DPACKAGE_VERSION_STRING=\"${version}\""
  echo "-DPACKAGE_VERSION_MAJOR="`echo "${version}" | sed -n -e "$sed_extract_major"`
  echo "-DPACKAGE_VERSION_MINOR="`echo "${version}" | sed -n -e "$sed_extract_minor"`
  echo "-DPACKAGE_VERSION_SUBMINOR="`echo "${version}" | sed -n -e "$sed_extract_subminor"`
} |
{
  if test -n "$escape"; then
    sed -e 's,\(["\\]\),\\\1,g'
  else
    cat
  fi
}
