Files
scst/scstadmin/Makefile
Gleb Chesnokov 6782003bfc scst: Extend build metadata passed to the SCST
Previously, only the revision string was passed from the build system
into the SCST kernel module. This patch extends that by passing additional
build metadata: kernel version, build date, Git commit hash, build number,
and architecture type.

These values are now consistently exposed in the kernel log, sysfs,
and via modinfo, providing a unified and reliable way to identify the
exact build in use.
2025-05-16 16:37:43 +03:00

180 lines
5.7 KiB
Makefile

ifndef PREFIX
PREFIX=/usr/local
endif
GIT_COMMIT := $(shell git rev-parse --short=12 HEAD 2>/dev/null)
ifndef BUILD_NUMBER
BUILD_NUMBER := $(shell git rev-list --count HEAD 2>/dev/null || echo 0)
endif
RELEASE_VERSION := $(shell echo -n "$$(sed -n 's/^[[:blank:]]*\$$VERSION[[:blank:]]*=[[:blank:]]*[\"'"'"']\([0-9.]*\)[\"'"'"'];$$/\1/p' scstadmin/scst-*/lib/SCST/SCST.pm)")
ifndef REVISION
ifneq ($(GIT_COMMIT),)
REVISION := $(BUILD_NUMBER).$(GIT_COMMIT)
else
REVISION := $(BUILD_NUMBER)
endif
endif
VERSION := $(RELEASE_VERSION).$(REVISION)
SCSTADMIN_DIR = $(shell if [ ! -h scstadmin ]; then \
rm -f scstadmin; \
ln -s scstadmin.sysfs scstadmin; \
fi; \
echo scstadmin)
MANDIR ?= $(DESTDIR)$(PREFIX)/man
INITDIR := $(shell if [ -f /etc/slackware-version ]; then \
echo /etc/rc.d; \
else \
echo /etc/init.d; \
fi)
ECHO_INSTALL_FN = \
if [ -n "$(DESTDIR)" ]; then \
chr="chroot $(DESTDIR)"; \
else \
chr=""; \
fi; \
if type systemctl >/dev/null 2>&1; then \
echo $$chr systemctl enable "$(1).service"; \
elif type chkconfig >/dev/null 2>&1; then \
echo $$chr chkconfig --add "$(1)"; \
elif type update-rc.d >/dev/null 2>&1; then \
echo $$chr update-rc.d "$(1)" defaults; \
elif type rc-update >/dev/null 2>&1; then \
echo $$chr rc-update add "$(1)" default; \
elif type /usr/lib/lsb/install_initd >/dev/null 2>&1; then \
echo $$chr /usr/lib/lsb/install_initd "$(1)"; \
fi
REMOVE_FN = \
if [ -n "$(DESTDIR)" ]; then \
chr="chroot $(DESTDIR)"; \
else \
chr=""; \
fi; \
if type systemctl >/dev/null 2>&1; then \
$$chr systemctl disable "$(1).service"; \
elif type chkconfig >/dev/null 2>&1; then \
$$chr chkconfig --del "$(1)"; \
elif type update-rc.d >/dev/null 2>&1; then \
$$chr update-rc.d -f "$(1)" remove; \
elif type rc-update >/dev/null 2>&1; then \
$$chr rc-update del "$(1)"; \
elif type /usr/lib/lsb/remove_initd >/dev/null 2>&1; then \
$$chr /usr/lib/lsb/remove_initd "$(1)"; \
fi; \
rm -f $(DESTDIR)$(INITDIR)/$(1)
DEFAULTDIR := $(shell if [ -f /etc/gentoo-release ]; then \
echo /etc/conf.d; \
else \
echo /etc/default; \
fi)
RPMTOPDIR ?= $(shell if [ $$(id -u) = 0 ]; then echo /usr/src/packages;\
else echo $$PWD/rpmbuilddir; fi)
all:
cd $(SCSTADMIN_DIR) && $(MAKE) $@
install install_vendor:
@if [ -z "$(DESTDIR)" ] && rpm -q scstadmin >/dev/null 2>&1; then \
echo Error: the scstadmin RPM must be uninstalled first; false; fi
@if ! perl -MExtUtils::MakeMaker -e '' >/dev/null 2>&1; then \
echo Error: the Perl module ExtUtils::MakeMaker must be installed \
first; false; fi
cd $(SCSTADMIN_DIR) && $(MAKE) $@
for m in scstadmin/man*/*.[1-9]; do \
if [ -e $$m ]; then \
d=$(MANDIR)/$$(basename $$(dirname $$m)); \
if install -d $$d; then \
install -m 644 $$m $$d; \
fi \
fi \
done
# Remove the files that are obsolete since SCST-SCST has been
# renamed into SCST_SCST.
rm -rf "$(DESTDIR)$$(/usr/bin/perl -V:sitearch | sed "s|.*='||;s|'.*||")/auto/SCST-SCST"
# Install the files that have just been built.
install -d $(DESTDIR)$(INITDIR)
tmp=/tmp/scst-initd-$$$$ && init.d/scst >$$tmp && \
install -m 755 $$tmp $(DESTDIR)$(INITDIR)/scst && \
rm -f $$tmp
if [ ! -e $(DESTDIR)$(DEFAULTDIR)/scst ]; then \
mkdir -p $(DESTDIR)$(DEFAULTDIR); \
install -m 755 default/scst $(DESTDIR)$(DEFAULTDIR); \
fi
for s in iscsi-scst qla2x00t; do \
{ $(call REMOVE_FN,$$s); } >/dev/null 2>&1; \
done
@echo
@echo 'If you want SCST to start automatically at boot time, run' \
'the following command:'
@$(call ECHO_INSTALL_FN,scst)
@echo
uninstall:
if [ -e $(DESTDIR)$(DEFAULTDIR)/scst ]; then \
mv $(DESTDIR)$(DEFAULTDIR)/scst \
$(DESTDIR)$(DEFAULTDIR)/scst.`date +%F,%T`; \
fi
if [ -e $(DESTDIR)$(INITDIR)/scst ]; then \
$(call REMOVE_FN,scst); \
fi
for m in scstadmin/man*/*.[1-9]; do \
if [ -e $$m ]; then \
d=$(MANDIR)/$$(basename $$(dirname $$m)); \
rm -f $$d/$$(basename $$m); \
fi \
done
cd $(SCSTADMIN_DIR) && $(MAKE) $@
perl-module:
cd $(SCSTADMIN_DIR) && $(MAKE) $@
test:
$(MAKE) -C scstadmin test
dist-gzip:
name=$(shell basename $$PWD) && \
mkdir $${name}-$(VERSION) && \
{ ../scripts/list-source-files | tar -T- -cf- | \
tar -C $${name}-$(VERSION) -xf-; } && \
rm -f $${name}-$(VERSION).tar.bz2 && \
tar -cjf $${name}-$(VERSION).tar.bz2 $${name}-$(VERSION) && \
rm -rf $${name}-$(VERSION)
rpm:
name=$(shell basename $$PWD) && \
rpmtopdir=$(RPMTOPDIR) && \
$(MAKE) dist-gzip && \
for d in BUILD RPMS SOURCES SPECS SRPMS; do \
mkdir -p $${rpmtopdir}/$$d; \
done && \
cp $${name}-$(VERSION).tar.bz2 $${rpmtopdir}/SOURCES && \
sed "s/@rpm_version@/$(VERSION)/g" \
<$${name}.spec.in >$${name}.spec && \
MAKE="$(MAKE)" \
rpmbuild --define="%_topdir $${rpmtopdir}" -ba $${name}.spec && \
rm -f $${name}-$(VERSION).tar.bz2
clean:
cd $(SCSTADMIN_DIR) && $(MAKE) $@
distclean:
cd $(SCSTADMIN_DIR) && $(MAKE) $@
extraclean:
cd $(SCSTADMIN_DIR) && $(MAKE) $@
release-archive:
../scripts/generate-release-archive scstadmin "$$(sed -n 's/^my \$$Version[[:blank:]]*=[[:blank:]]*'"'"'SCST Configurator v\([^'"'"']*\)'"'"'.*/\1/p' scstadmin.sysfs/scstadmin)"
.PHONY: all install uninstall perl-module clean distclean extraclean