summaryrefslogtreecommitdiffstats
path: root/Makefile
diff options
context:
space:
mode:
authorStefan Tauner <stefan.tauner@alumni.tuwien.ac.at>2016-11-27 17:45:49 +0100
committerStefan Tauner <stefan.tauner@alumni.tuwien.ac.at>2016-12-04 19:40:06 +0100
commitf5dd7ce11b65ffd6ead214b4b4cbe90f3eb110dd (patch)
tree4518299cac54e260f4310de1dad92468e3eaa2a2 /Makefile
parent40ba6fd0486b9845a951dbe042b1121687353c1a (diff)
downloadast2050-flashrom-f5dd7ce11b65ffd6ead214b4b4cbe90f3eb110dd.zip
ast2050-flashrom-f5dd7ce11b65ffd6ead214b4b4cbe90f3eb110dd.tar.gz
Convert flashrom to git
- Drop support for Subversion in the getrevision script and Makefile. - Add .gitignore and .gitattributes file (the latter to limit exports). - Restore modification dates of the exported files from the SCM. - Stop exporting SCM log dumps to CHANGELOG. This makes no sense. - Remove djgpp-dos target (it is not different to other x-compilations). - Do not export the pre-"compiled" manpage. It can be generated like anything else from the code dump when we export the respective variable. The latter is added with this change. - Add some initial client-side git hooks * When committing check for obvious stuff you never want anyway: - white space errors - duplicate sign-offs * When pushing to the upstream repository check mandatory rules: - existing signoffs and acks in all new commits - no deletions or creation of branches - do not rewrite history of the precious branches, even if forced - Change version string of flashrom as follows. Previously, we included the last stable version according to a hard- coded string in the Makefile and appended the subversion revision number. With this patch the version string includes the last reachable git tag, number of commits since said tag in the upstream branches (if any), the name of said upstream branch, number of commits since that branch (if any), and the shortened git hash. In case there are uncommitted changes a "-dirty" indicator is also added. The case of unknown versions is explicitly handled in getrevision instead of simply appending "-unknown" to a hardcoded release number. The version information is either taken from an existing git remote pointing to an upstream repository (or a known mirror), or if that is not available - with the user's consent - a shadow copy is fetched from the upstream repo that is updated on every build (usually takes less than a second). In the following some examples of the version string changes are shown. Basically we print the distance to the last known upstream tag, which comprises any upstream commits since that tag as well as local commits on top of that. Additionally we handle upstream's stable and staging branches specially. Old output: flashrom v0.9.7-r1716 on Linux 3.8.0-6-generic (x86_64) New output variants: Build of the 0.9.99 release without any changes: flashrom v0.9.99-e4f6643 on Linux 3.13.0-76-generic (x86_64) 5 commits since last tag in upstream's stable branch: flashrom v0.9.99-5-stable-e4f6643-dirty on Linux 3.13.0-76-generic (x86_64) 3 commits since last tag in upstream's staging branch and 4 local commits on top of that: flashrom v0.9.99-3-staging-4-e4f6643 on Linux 3.13.0-76-generic (x86_64) 3 commits since last tag in upstream's staging branch and 4 local commits on top of that, and some local uncommitted changes too: flashrom v0.9.99-3-staging-4-e4f6643-dirty on Linux 3.13.0-76-generic (x86_64) 3 commits since the last tag in an unrelated upstream branch (e.g., a stable release *branch* such as 0.9.99.x) or local branch: flashrom v0.9.99-3-e4f6643 on Linux 3.13.0-76-generic (x86_64) No tags reachable from current commit (generic git fallback): flashrom d95935a version on Linux 3.13.0-76-generic (x86_64) Not in a repository: flashrom unknown version on Linux 3.13.0-76-generic (x86_64) Signed-off-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile72
1 files changed, 45 insertions, 27 deletions
diff --git a/Makefile b/Makefile
index 4ebde1e..8ddd6f3 100644
--- a/Makefile
+++ b/Makefile
@@ -526,23 +526,27 @@ LIB_OBJS = layout.o flashrom.o udelay.o programmer.o helpers.o
CLI_OBJS = cli_classic.o cli_output.o cli_common.o print.o
-# Set the flashrom version string from the highest revision number of the checked out flashrom files.
+# Set the flashrom version string from the repository metadata (cf. util/getrevision.sh).
# Note to packagers: Any tree exported with "make export" or "make tarball"
-# will not require subversion. The downloadable snapshots are already exported.
-SVNVERSION := $(shell ./util/getrevision.sh -u 2>/dev/null )
-
-RELEASE := 0.9.9
-VERSION := $(RELEASE)-$(SVNVERSION)
-RELEASENAME ?= $(VERSION)
+# will not require git. The downloadable snapshots are already exported.
+VERSION := $(shell ./util/getrevision.sh --revision)
+# VERSION equals "offline" if online access is required but the respective git config variable is not set yet.
+ifeq ($(VERSION),offline)
+ $(error Aborting)
+endif
+SCMDEF := -D'FLASHROM_VERSION="$(VERSION)"'
-SVNDEF := -D'FLASHROM_VERSION="$(VERSION)"'
+# No spaces in release names unless set explicitly
+RELEASENAME ?= $(shell echo "$(VERSION)" | sed -e 's/ /_/')
-# Inform user if there is no meaningful version string. If there is version information from a VCS print
+# Inform user about the version string used. If there is no version information from a VCS then print
# something anyway because $(info...) will print a line break in any case which would look suspicious.
# The && between the echos is a workaround for old versions of GNU make that issue the error "unterminated
# variable reference" if a semicolon is used instead.
-$(info $(shell ./util/getrevision.sh -c 2>/dev/null || echo "Files don't seem to be under version control." && \
- echo "Replacing all version templates with $(VERSION)." ))
+# Also, if a VCS is found then try to install hooks.
+$(info $(shell ./util/getrevision.sh -c 2>/dev/null && ./util/git-hooks/install.sh || \
+ echo "Files don't seem to be under version control." && \
+ echo "Replacing all version templates with $(VERSION)."))
###############################################################################
# Default settings of CONFIG_* variables.
@@ -1024,7 +1028,7 @@ libflashrom.a: $(LIBFLASHROM_OBJS)
TAROPTIONS = $(shell LC_ALL=C tar --version|grep -q GNU && echo "--owner=root --group=root")
%.o: %.c .features
- $(CC) -MMD $(CFLAGS) $(CPPFLAGS) $(FLASHROM_CFLAGS) $(FEATURE_CFLAGS) $(SVNDEF) -o $@ -c $<
+ $(CC) -MMD $(CFLAGS) $(CPPFLAGS) $(FLASHROM_CFLAGS) $(FEATURE_CFLAGS) $(SCMDEF) -o $@ -c $<
# Make sure to add all names of generated binaries here.
# This includes all frontends and libflashrom.
@@ -1347,9 +1351,10 @@ endif
$(PROGRAM).8.html: $(PROGRAM).8
@groff -mandoc -Thtml $< >$@
+MAN_DATE := $(shell ./util/getrevision.sh -d $(PROGRAM).8.tmpl 2>/dev/null)
$(PROGRAM).8: $(PROGRAM).8.tmpl
@# Add the man page change date and version to the man page
- @sed -e 's#.TH FLASHROM 8 ".*".*#.TH FLASHROM 8 "$(shell ./util/getrevision.sh -d $(PROGRAM).8.tmpl 2>/dev/null)" "$(VERSION)"#' <$< >$@
+ @sed -e 's#.TH FLASHROM 8 .*#.TH FLASHROM 8 "$(MAN_DATE)" "$(VERSION)" "$(MAN_DATE)"#' <$< >$@
install: $(PROGRAM)$(EXEC_SUFFIX) $(PROGRAM).8
mkdir -p $(DESTDIR)$(PREFIX)/sbin
@@ -1357,25 +1362,38 @@ install: $(PROGRAM)$(EXEC_SUFFIX) $(PROGRAM).8
$(INSTALL) -m 0755 $(PROGRAM)$(EXEC_SUFFIX) $(DESTDIR)$(PREFIX)/sbin
$(INSTALL) -m 0644 $(PROGRAM).8 $(DESTDIR)$(MANDIR)/man8
-export: $(PROGRAM).8
- @rm -rf $(EXPORTDIR)/flashrom-$(RELEASENAME)
- @svn export -r BASE . $(EXPORTDIR)/flashrom-$(RELEASENAME)
- @sed "s/^SVNVERSION.*/SVNVERSION := $(SVNVERSION)/" Makefile >$(EXPORTDIR)/flashrom-$(RELEASENAME)/Makefile
- @cp $(PROGRAM).8 "$(EXPORTDIR)/flashrom-$(RELEASENAME)/$(PROGRAM).8"
- @svn log >$(EXPORTDIR)/flashrom-$(RELEASENAME)/ChangeLog
- @echo Exported $(EXPORTDIR)/flashrom-$(RELEASENAME)/
-
-tarball: export
- @tar cjf $(EXPORTDIR)/flashrom-$(RELEASENAME).tar.bz2 -C $(EXPORTDIR)/ $(TAROPTIONS) flashrom-$(RELEASENAME)/
+_export: $(PROGRAM).8
+ @rm -rf "$(EXPORTDIR)/flashrom-$(RELEASENAME)"
+ @mkdir -p "$(EXPORTDIR)/flashrom-$(RELEASENAME)"
+ @git archive HEAD | tar -x -C "$(EXPORTDIR)/flashrom-$(RELEASENAME)"
+ @sed -e 's/^VERSION :=.*/VERSION := $(VERSION)/' \
+ -e 's/^MAN_DATE :=.*/MAN_DATE := $(MAN_DATE)/' \
+ -e 's#./util/getrevision.sh -c#false#' \
+ Makefile >"$(EXPORTDIR)/flashrom-$(RELEASENAME)/Makefile"
+# Restore modification date of all tracked files not marked 'export-ignore' in .gitattributes.
+# sed is required to filter out file names having the attribute set.
+ @git ls-tree -r -z -t --full-name --name-only HEAD | \
+ git check-attr -z --stdin export-ignore | \
+ sed -zne 'x;n;n;s/^set$$//;t;x;p' | \
+ xargs -0 sh -c 'for f; do \
+ touch -d $$(git log --pretty=format:%cI -1 HEAD -- "$$f") \
+ "$(EXPORTDIR)/flashrom-$(RELEASENAME)/$$f"; \
+ done'
+
+export: _export
+ @echo "Exported $(EXPORTDIR)/flashrom-$(RELEASENAME)/"
+
+tarball: _export
+ @tar -cz --format=ustar -f $(EXPORTDIR)/flashrom-$(RELEASENAME).tar.gz -C $(EXPORTDIR)/ \
+ $(TAROPTIONS) flashrom-$(RELEASENAME)/
+# Delete the exported directory again because it is most likely what's expected by the user.
@rm -rf $(EXPORTDIR)/flashrom-$(RELEASENAME)
- @echo Created $(EXPORTDIR)/flashrom-$(RELEASENAME).tar.bz2
+ @echo Created $(EXPORTDIR)/flashrom-$(RELEASENAME).tar.gz
-djgpp-dos: clean
- make CC=i586-pc-msdosdjgpp-gcc STRIP=i586-pc-msdosdjgpp-strip
libpayload: clean
make CC="CC=i386-elf-gcc lpgcc" AR=i386-elf-ar RANLIB=i386-elf-ranlib
-.PHONY: all install clean distclean compiler hwlibs features export tarball djgpp-dos featuresavailable libpayload
+.PHONY: all install clean distclean compiler hwlibs features _export export tarball featuresavailable libpayload
# Disable implicit suffixes and built-in rules (for performance and profit)
.SUFFIXES:
OpenPOWER on IntegriCloud