# To make real stable releases or devel snapshots, use either:
# 	make release-check
# or	make release-publish

TAR_OPTIONS = --owner=0 --group=0

RELEASE_UPLOAD_HOST = clutter-project.org
RELEASE_UPLOAD_USER = clutter
RELEASE_UPLOAD_DIR  = $(RELEASE_UPLOAD_USER)@$(RELEASE_UPLOAD_HOST):upload-source

RELEASE_URL_BASE = http://source.clutter-project.org/sources/clutter-gst
RELEASE_URL      = $(RELEASE_URL_BASE)/$(CLUTTER_GST_MAJOR_VERSION).$(CLUTTER_GST_MINOR_VERSION)

GNOME_RELEASE_URL_BASE = http://download.gnome.org/sources/clutter-gst
GNOME_RELEASE_URL      = $(GNOME_RELEASE_URL_BASE)/$(CLUTTER_GST_MAJOR_VERSION).$(CLUTTER_GST_MINOR_VERSION)

RELEASE_API_URL = http://docs.clutter-project.org/docs/clutter-gst

RELEASE_ANNOUNCE_LIST = clutter-announce@clutter-project.org (Cc: gnome-announce-list@gnome.org)

tar_file = $(distdir).tar.xz
sha256_file = $(distdir).sha256sum

$(sha256_file): $(tar_file)
	$(AM_V_GEN)sha256sum $^ > $@

release-check: release-verify-even-micro release-verify-news
	TAR_OPTIONS="$(TAR_OPTIONS)" $(MAKE) $(AM_MAKEFLAGS) distcheck

release-verify-news:
	@echo -n "Checking that the NEWS file has been updated..."
	@if ! grep -q "$(CLUTTER_GST_VERSION)" $(top_srcdir)/NEWS; then \
	  (echo "Ouch." && \
	   echo "The version in the NEWS file does not match $(CLUTTER_GST_VERSION)." && \
	   echo "This probably means you haven't updated the NEWS file." && \
	   false); else :; fi
	@echo "Good."

release-verify-even-micro:
	@echo -n "Checking that $(VERSION) has an even micro component..."
	@test "$(CLUTTER_GST_MICRO_VERSION)" = "`echo $(CLUTTER_GST_MICRO_VERSION)/2*2 | bc`" \
	  || (echo "Ouch." && \
	      echo "The version micro component '$(CLUTTER_GST_MICRO_VERSION)' is not an even number." && \
	      echo "The version in configure.ac must be incremented before a new release." && \
	      false)
	@echo "Good."

release-upload: $(sha256_file)
	@echo "Uploading to $(RELEASE_UPLOAD_HOST)..."
	@scp $(tar_file) $(RELEASE_UPLOAD_DIR)
	@echo "Uploading to master.gnome.org..."
	@scp $(tar_file) dlespiau@master.gnome.org:
	@echo "Running ftpadmin install..."
	@ssh dlespiau@master.gnome.org ftpadmin install $(tar_file)
	@echo "Done."

release-message: $(sha256_file)
	@echo "Release URL: $(RELEASE_URL)/$(tar_file)"
	@echo "Release checksum: $(RELEASE_URL)/$(sha256_file)"
	@echo "Send an email to: $(RELEASE_ANNOUNCE_LIST)"
	@echo "  Subject: $(PACKAGE) $(CLUTTER_GST_VERSION) ($(CLUTTER_GST_RELEASE_STATUS))"
	@echo "Contents:"
	@echo "--- CUT HERE ---"
	@echo "Hi,"
	@echo ""
	@echo "A new $(PACKAGE) $(CLUTTER_GST_RELEASE_STATUS) is now available at:"
	@echo ""
	@echo "  $(RELEASE_URL)/$(tar_file)"
	@echo "  $(GNOME_RELEASE_URL)/$(tar_file)"
	@echo ""
	@echo "SHA256 Checksum:"
	@echo ""
	@cat $(top_builddir)/$(sha256_file)
	@echo ""
	@echo "Additionally, a git clone of the source tree:"
	@echo ""
	@echo "  git clone git://git.gnome.org/clutter-gst"
	@echo ""
	@echo "will include a signed $(CLUTTER_GST_VERSION) tag which points to a commit named:"
	@echo "  `git cat-file tag $(CLUTTER_GST_VERSION) | grep ^object | $(SED) -e 's,object ,,'`"
	@echo ""
	@echo "which can be verified with:"
	@echo "  git verify-tag $(CLUTTER_GST_VERSION)"
	@echo ""
	@echo "and can be checked out with a command such as:"
	@echo "  git checkout -b build $(CLUTTER_GST_VERSION)"
	@echo ""
	@echo "Clutter-Gst is an integration library for using GStreamer with Clutter."
	@echo "It provides a GStreamer sink to upload frames to GL and an actor that"
	@echo "implements the ClutterMedia interface using playbin2."
	@echo ""
	@echo "Clutter-gst depends on:"
	@echo ""
	@echo "  GLib ≥ $(GLIB_REQ_VERSION)"
	@echo "  Clutter ≥ $(CLUTTER_REQ_VERSION)"
	@echo "  GStreamer ≥ $(GSTREAMER_REQ_VERSION)"
	@echo ""
	@echo "API reference:"
	@echo ""
	@if test "x$(CLUTTER_GST_RELEASE_STATUS)" = "xsnapshot"; then \
	  echo " $(RELEASE_API_URL)/unstable"; \
	else \
	  echo " $(RELEASE_API_URL)/stable"; \
	fi
	@echo ""
	@$(SED) -n '1bend;/^clutter-gst /q;:end;4,$$p' $(top_srcdir)/NEWS
	@echo "--- CUT HERE ---"

release-publish: release-check
	$(MAKE) $(AM_MAKEFLAGS) release-upload
	$(MAKE) $(AM_MAKEFLAGS) release-message

.PHONY: \
	release-check \
	release-message \
	release-publish \
	release-upload \
	release-verify-even-micro
