| #!/bin/sh |
| |
| # |
| # CDDL HEADER START |
| # |
| # This file and its contents are supplied under the terms of the |
| # Common Development and Distribution License ("CDDL"), version 1.0. |
| # You may only use this file in accordance with the terms of version |
| # 1.0 of the CDDL. |
| # |
| # A full copy of the text of the CDDL should have accompanied this |
| # source. A copy of the CDDL is also available via the Internet at |
| # http://www.illumos.org/license/CDDL. |
| # |
| # CDDL HEADER END |
| # |
| |
| # Copyright (c) 2018 by Delphix. All rights reserved. |
| # Copyright (c) 2018 by Matthew Thode. All rights reserved. |
| |
| # |
| # Generate zfs_gitrev.h. Note that we need to do this for every |
| # invocation of `make`, including for incremental builds. Therefore we |
| # can't use a zfs_gitrev.h.in file which would be processed only when |
| # `configure` is run. |
| # |
| |
| set -e -u |
| |
| dist=no |
| distdir=. |
| while getopts D: flag |
| do |
| case $flag in |
| \?) echo "Usage: $0 [-D distdir] [file]" >&2; exit 1;; |
| D) dist=yes; distdir=${OPTARG};; |
| esac |
| done |
| shift $((OPTIND - 1)) |
| |
| top_srcdir="$(dirname "$0")/.." |
| GITREV="${1:-include/zfs_gitrev.h}" |
| |
| # GITREV should be a relative path (relative to top_builddir or distdir) |
| case "${GITREV}" in |
| /*) echo "Error: ${GITREV} should be a relative path" >&2 |
| exit 1;; |
| esac |
| |
| ZFS_GITREV=$({ cd "${top_srcdir}" && |
| git describe --always --long --dirty 2>/dev/null; } || :) |
| |
| if [ -z "${ZFS_GITREV}" ] |
| then |
| # If the source directory is not a git repository, check if the file |
| # already exists (in the source) |
| if [ -f "${top_srcdir}/${GITREV}" ] |
| then |
| ZFS_GITREV=$(sed -n \ |
| '1s/^#define[[:blank:]]ZFS_META_GITREV "\([^"]*\)"$/\1/p' \ |
| "${top_srcdir}/${GITREV}") |
| fi |
| elif [ ${dist} = yes ] |
| then |
| # Append -dist when creating distributed sources from a git repository |
| ZFS_GITREV="${ZFS_GITREV}-dist" |
| fi |
| ZFS_GITREV=${ZFS_GITREV:-unknown} |
| |
| GITREVTMP="${GITREV}~" |
| printf '#define\tZFS_META_GITREV "%s"\n' "${ZFS_GITREV}" >"${GITREVTMP}" |
| GITREV="${distdir}/${GITREV}" |
| if cmp -s "${GITREV}" "${GITREVTMP}" |
| then |
| rm -f "${GITREVTMP}" |
| else |
| mv -f "${GITREVTMP}" "${GITREV}" |
| fi |