Bruno Haible 929fecabec build: Avoid "warning: stray \ before -" from GNU grep ≥ 3.8.
* build-aux/jar-cf: Remove an unnecessary backslash.
2024-10-09 23:40:29 +02:00

113 lines
3.4 KiB
Bash
Executable File

#!/bin/sh
# Creating a Java archive (.jar).
# Copyright (C) 2024 Free Software Foundation, Inc.
#
# This file 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 file 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/>.
# Written by Bruno Haible <bruno@clisp.org>, 2024.
# func_usage
# outputs to stdout the --help usage message.
func_usage ()
{
echo "\
Usage: jar-cf [OPTION]... JAR_PROGRAM TOP_SRCDIR DESTINATION.jar ELEMENT...
Invokes the JAR_PROGRAM, to create DESTINATION.jar with the ELEMENTs as
contents.
Options:
--help print this help and exit
--version print version information and exit
Send patches and bug reports to <bug-gettext@gnu.org>."
}
# func_version
# outputs to stdout the --version message.
func_version ()
{
echo "jar-cf (GNU gettext)"
echo "Copyright (C) 2024 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law."
echo
printf 'Written by %s.\n' "Bruno Haible"
}
# func_fatal_error message
# outputs to stderr a fatal error message, and terminates the program.
func_fatal_error ()
{
echo "jar-cf: *** $1" 1>&2
echo "jar-cf: *** Stop." 1>&2
exit 1
}
# Outputs a command and runs it.
func_verbose ()
{
# Make it easy to copy&paste the printed command into a shell in most cases,
# by escaping '\\', '"', and '$'. This is not perfect, just good enough.
echo "$@" | sed -e 's/\([\\"$]\)/\\\1/g'
"$@"
}
# Command-line option processing.
while test $# -gt 0; do
case "$1" in
--help | --hel | --he | --h )
func_usage
exit 0 ;;
--version | --versio | --versi | --vers | --ver | --ve | --v )
func_version
exit 0 ;;
-- ) # Stop option processing
shift; break ;;
-* )
func_fatal_error "unrecognized option: $1"
;;
* )
break ;;
esac
done
if test $# -lt 2; then
func_fatal_error "too few arguments"
fi
jar_program="$1"
top_srcdir="$2"
shift
shift
if $jar_program --help 2>&1 | grep '\--date=' >/dev/null; then
# The JAR_PROGRAM supports the --date option. Its effect is to set the given
# date as time stamp on all the ELEMENTs and also the META-INF/MANIFEST.MF.
# Use it, for reproducibility (cf. <https://reproducible-builds.org/>).
if test -d "$top_srcdir/.git"; then
# We are in a git checkout. Use the date of the latest commit.
date=`git log -n 1 --date=iso --format=fuller | sed -n -e 's/^CommitDate: //p' | sed -e 's/ /T/' -e 's/ \(...\)\(..\)$/\1:\2/'`
else
# We are building from a tarball.
# Use the date of the first entry of the ChangeLog file.
date=`sed -n -e 's/^\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\).*/\1/p' -e 1q "$top_srcdir/ChangeLog"`'T00:00:00+00:00'
fi
func_verbose $jar_program --date="$date" -c -f "$@"
else
func_verbose $jar_program cf "$@"
fi