# BEGIN BPS TAGGED BLOCK {{{
#
# COPYRIGHT:
#
# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
#                                          <sales@bestpractical.com>
#
# (Except where explicitly superseded by other copyright notices)
#
#
# LICENSE:
#
# This work is made available to you under the terms of Version 2 of
# the GNU General Public License. A copy of that license should have
# been provided with this software, but in any event can be snarfed
# from www.gnu.org.
#
# This work 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 or visit their web page on the internet at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
#
#
# CONTRIBUTION SUBMISSION POLICY:
#
# (The following paragraph is not intended to limit the rights granted
# to you to modify and distribute this software under the terms of
# the GNU General Public License and is only of importance to you if
# you choose to contribute your changes and enhancements to the
# community by submitting them to Best Practical Solutions, LLC.)
#
# By intentionally submitting any modifications, corrections or
# derivatives to this work, or any other work intended for use with
# Request Tracker, to Best Practical Solutions, LLC, you confirm that
# you are the copyright holder for those contributions and you grant
# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
# royalty-free, perpetual, license to use, copy, create derivative
# works based on those contributions, and sublicense and distribute
# those contributions and any derivatives thereof.
#
# END BPS TAGGED BLOCK }}}
#
# DO NOT HAND-EDIT the file named 'Makefile'. This file is autogenerated.
# Have a look at "configure" and "Makefile.in" instead
#


PERL			=	@PERL@
INSTALL			=	@INSTALL@
CC				=	@CC@

RT_LAYOUT		=	@rt_layout_name@

CONFIG_FILE_PATH	=	@CONFIG_FILE_PATH_R@
CONFIG_FILE		=	$(CONFIG_FILE_PATH)/RT_Config.pm
SITE_CONFIG_FILE	=	$(CONFIG_FILE_PATH)/RT_SiteConfig.pm


RT_VERSION_MAJOR	=	@RT_VERSION_MAJOR@
RT_VERSION_MINOR	=	@RT_VERSION_MINOR@
RT_VERSION_PATCH	=	@RT_VERSION_PATCH@

RT_VERSION		=	$(RT_VERSION_MAJOR).$(RT_VERSION_MINOR).$(RT_VERSION_PATCH)
TAG 			=	rt-$(RT_VERSION_MAJOR)-$(RT_VERSION_MINOR)-$(RT_VERSION_PATCH)


# This is the group that all of the installed files will be chgrp'ed to.
RTGROUP			=	@RTGROUP@


# User which should own rt binaries.
BIN_OWNER		=	@BIN_OWNER@

# User that should own all of RT's libraries, generally root.
LIBS_OWNER 		=	@LIBS_OWNER@

# Group that should own all of RT's libraries, generally root.
LIBS_GROUP		=	@LIBS_GROUP@

WEB_USER		=	@WEB_USER@
WEB_GROUP		=	@WEB_GROUP@


APACHECTL		=	@APACHECTL@


# DESTDIR allows you to specify that RT be installed somewhere other than
# where it will eventually reside. DESTDIR _must_ have a trailing slash
# if it's defined.

DESTDIR			=	



RT_PATH			=	@RT_PATH_R@
RT_ETC_PATH		=	@RT_ETC_PATH_R@
RT_BIN_PATH		=	@RT_BIN_PATH_R@
RT_SBIN_PATH		=	@RT_SBIN_PATH_R@
RT_LIB_PATH		=	@RT_LIB_PATH_R@
RT_MAN_PATH		=	@RT_MAN_PATH_R@
RT_VAR_PATH		=	@RT_VAR_PATH_R@
RT_DOC_PATH		=	@RT_DOC_PATH_R@
RT_FONT_PATH		=	@RT_FONT_PATH_R@
RT_LEXICON_PATH		=	@RT_LEXICON_PATH_R@
RT_LOCAL_PATH		=	@RT_LOCAL_PATH_R@
LOCAL_PLUGIN_PATH	=	@RT_LOCAL_PATH_R@/plugins
LOCAL_ETC_PATH		=	@LOCAL_ETC_PATH_R@
LOCAL_LIB_PATH		=	@LOCAL_LIB_PATH_R@
LOCAL_LEXICON_PATH	=	@LOCAL_LEXICON_PATH_R@
MASON_HTML_PATH		=	@MASON_HTML_PATH_R@
MASON_LOCAL_HTML_PATH	=	@MASON_LOCAL_HTML_PATH_R@
MASON_DATA_PATH		=	@MASON_DATA_PATH_R@
MASON_SESSION_PATH	=	@MASON_SESSION_PATH_R@
RT_LOG_PATH		=       @RT_LOG_PATH_R@

# RT_READABLE_DIR_MODE is the mode of directories that are generally meant
# to be accessable
RT_READABLE_DIR_MODE	=	0755





# RT's CLI
RT_CLI_BIN		=	rt
# RT's mail gateway
RT_MAILGATE_BIN		=	rt-mailgate
# RT's cron tool
RT_CRON_BIN		=	rt-crontool



BINARIES		=	$(RT_MAILGATE_BIN) \
				$(RT_CLI_BIN) \
				$(RT_CRON_BIN)

SYSTEM_BINARIES		=	rt-attributes-viewer \
				rt-clean-sessions \
				rt-dump-metadata \
				rt-email-dashboards \
				rt-email-digest \
				rt-email-group-admin \
				rt-fulltext-indexer \
				rt-preferences-viewer \
				rt-server \
				rt-server.fcgi \
				rt-session-viewer \
				rt-setup-database \
				rt-setup-fulltext-index \
				rt-shredder \
				rt-test-dependencies \
				rt-validator \
				rt-validate-aliases \
				standalone_httpd


ETC_FILES		=	acl.Pg \
				acl.Oracle \
				acl.mysql \
				schema.Pg \
				schema.Oracle \
				schema.mysql \
				schema.SQLite \
				initialdata



WEB_HANDLER		=	@WEB_HANDLER@



#
# DB_TYPE defines what sort of database RT trys to talk to
# "mysql", "Oracle", "Pg", and "SQLite" are known to work.

DB_TYPE			=	@DB_TYPE@

# Set DBA to the name of a unix account with the proper permissions and 
# environment to run your commandline SQL sbin

# Set DB_DBA to the name of a DB user with permission to create new databases 

# For mysql, you probably want 'root'
# For Pg, you probably want 'postgres' 
# For Oracle, you want 'system'

DB_DBA			=	@DB_DBA@

DB_HOST			=	@DB_HOST@

# If you're not running your database server on its default port, 
# specifiy the port the database server is running on below.
# It's generally safe to leave this blank 

DB_PORT			=	@DB_PORT@




#
# Set this to the canonical name of the interface RT will be talking to the 
# database on.  If you said that the RT_DB_HOST above was "localhost," this 
# should be too. This value will be used to grant rt access to the database.
# If you want to access the RT database from multiple hosts, you'll need
# to grant those database rights by hand.
#

DB_RT_HOST		=	@DB_RT_HOST@

# set this to the name you want to give to the RT database in 
# your database server. For Oracle, this should be the name of your sid

DB_DATABASE		=	@DB_DATABASE@
DB_RT_USER		=	@DB_RT_USER@
DB_RT_PASS		=	@DB_RT_PASS@



TEST_FILES = t/*.t t/*/*.t
TEST_VERBOSE = 0

RT_TEST_PARALLEL_NUM ?= 5


####################################################################

all: default

default:
	@echo "Please read RT's README before beginning your installation."



instruct:
	@echo "Congratulations. RT is now installed."
	@echo ""
	@echo ""
	@echo "You must now configure RT by editing $(SITE_CONFIG_FILE)."
	@echo ""
	@echo "(You will definitely need to set RT's database password in "
	@echo "$(SITE_CONFIG_FILE) before continuing. Not doing so could be "
	@echo "very dangerous.  Note that you do not have to manually add a "
	@echo "database user or set up a database for RT.  These actions will be "
	@echo "taken care of in the next step.)"
	@echo ""
	@echo "After that, you need to initialize RT's database by running" 
	@echo " 'make initialize-database'"


upgrade-instruct: 
	@echo "Congratulations. RT has been upgraded. You should now check over"
	@echo "$(CONFIG_FILE) for any necessary site customization. Additionally,"
	@echo "you should update RT's system database objects by running "
	@echo "    make upgrade-database"


upgrade: testdeps config-install dirs files-install fixperms upgrade-instruct

my_with_web_handlers= $(shell $(PERL) -e 'print join " ", map "--with-$$_", grep defined && length, split /,/, "$(WEB_HANDLER)"')
testdeps:
	$(PERL) ./sbin/rt-test-dependencies --verbose --with-$(DB_TYPE) $(my_with_web_handlers)

depends: fixdeps

fixdeps:
	$(PERL) ./sbin/rt-test-dependencies --verbose --install --with-$(DB_TYPE) $(my_with_web_handlers)

#}}}

fixperms:
	# Make the libraries readable
	chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_PATH)
	chown -R $(LIBS_OWNER) $(DESTDIR)$(RT_LIB_PATH)
	chgrp -R $(LIBS_GROUP) $(DESTDIR)$(RT_LIB_PATH)
	chmod -R  u+rwX,go-w,go+rX $(DESTDIR)$(RT_LIB_PATH)


	chmod $(RT_READABLE_DIR_MODE) $(DESTDIR)$(RT_BIN_PATH)

	chmod 0755 $(DESTDIR)$(RT_ETC_PATH)
	cd $(DESTDIR)$(RT_ETC_PATH) && chmod 0400 $(ETC_FILES)

	#TODO: the config file should probably be able to have its
	# owner set separately from the binaries.
	chown -R $(BIN_OWNER) $(DESTDIR)$(RT_ETC_PATH)
	chgrp -R $(RTGROUP) $(DESTDIR)$(RT_ETC_PATH)

	chmod 0440 $(DESTDIR)$(CONFIG_FILE)
	chmod 0640 $(DESTDIR)$(SITE_CONFIG_FILE)

	# Make the system binaries
	cd $(DESTDIR)$(RT_BIN_PATH) && ( chmod 0755 $(BINARIES) ; chown $(BIN_OWNER) $(BINARIES);  chgrp $(RTGROUP) $(BINARIES))

	# Make the system binaries executable also
	cd $(DESTDIR)$(RT_SBIN_PATH) && ( chmod 0755 $(SYSTEM_BINARIES) ; chown $(BIN_OWNER) $(SYSTEM_BINARIES);  chgrp $(RTGROUP) $(SYSTEM_BINARIES))

	# Make upgrade scripts executable if they are in the source.
	#
	# Note that we use the deprecated (by GNU/POSIX find) -perm +0NNN syntax
	# instead of -perm /0NNN since BSD find doesn't support the latter.
	( cd etc/upgrade && find . -type f -not -name '*.in' -perm +0111 -print ) | while read file ; do \
		chmod a+x "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$file" ; \
	done

	# Make the web ui readable by all. 
	chmod -R  u+rwX,go-w,go+rX 	$(DESTDIR)$(MASON_HTML_PATH) \
					$(DESTDIR)$(MASON_LOCAL_HTML_PATH) \
					$(DESTDIR)$(RT_LEXICON_PATH) \
					$(DESTDIR)$(LOCAL_LEXICON_PATH)
	chown -R $(LIBS_OWNER) 	$(DESTDIR)$(MASON_HTML_PATH) \
				$(DESTDIR)$(MASON_LOCAL_HTML_PATH) \
				$(DESTDIR)$(RT_LEXICON_PATH) \
				$(DESTDIR)$(LOCAL_LEXICON_PATH)
	chgrp -R $(LIBS_GROUP) 	$(DESTDIR)$(MASON_HTML_PATH) \
				$(DESTDIR)$(MASON_LOCAL_HTML_PATH) \
				$(DESTDIR)$(RT_LEXICON_PATH) \
				$(DESTDIR)$(LOCAL_LEXICON_PATH)

	# Make the web ui's data dir writable
	chmod 0770  	$(DESTDIR)$(MASON_DATA_PATH) \
			$(DESTDIR)$(MASON_SESSION_PATH)
	chown -R $(WEB_USER) 	$(DESTDIR)$(MASON_DATA_PATH) \
				$(DESTDIR)$(MASON_SESSION_PATH)
	chgrp -R $(WEB_GROUP) 	$(DESTDIR)$(MASON_DATA_PATH) \
				$(DESTDIR)$(MASON_SESSION_PATH)

dirs:
	$(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LOG_PATH)
	$(INSTALL) -m 0755 -d $(DESTDIR)$(RT_FONT_PATH)
	$(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LEXICON_PATH)
	$(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)
	$(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/cache
	$(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/etc
	$(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_DATA_PATH)/obj
	$(INSTALL) -m 0770 -d $(DESTDIR)$(MASON_SESSION_PATH)
	$(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH)
	$(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_LOCAL_HTML_PATH)
	$(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_ETC_PATH)
	$(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LIB_PATH)
	$(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_PLUGIN_PATH)
	$(INSTALL) -m 0755 -d $(DESTDIR)$(LOCAL_LEXICON_PATH)

install: testdeps config-install dirs files-install fixperms instruct

files-install: libs-install etc-install config-install bin-install sbin-install html-install doc-install font-install po-install

config-install:
@COMMENT_INPLACE_LAYOUT@	$(INSTALL) -m 0755 -o $(BIN_OWNER) -g $(RTGROUP) -d $(DESTDIR)$(CONFIG_FILE_PATH)
@COMMENT_INPLACE_LAYOUT@	-$(INSTALL) -m 0440 -o $(BIN_OWNER) -g $(RTGROUP)  etc/RT_Config.pm $(DESTDIR)$(CONFIG_FILE)
@COMMENT_INPLACE_LAYOUT@	[ -f $(DESTDIR)$(SITE_CONFIG_FILE) ] || $(INSTALL) -m 0640 -o $(BIN_OWNER) -g $(RTGROUP) etc/RT_SiteConfig.pm $(DESTDIR)$(SITE_CONFIG_FILE) 
@COMMENT_INPLACE_LAYOUT@	@echo "Installed configuration. About to install RT in  $(RT_PATH)"

test: 
	$(PERL) "-MExtUtils::Command::MM" -e "test_harness($(TEST_VERBOSE), 'lib')" $(TEST_FILES)

parallel-test: test-parallel

test-parallel: 
	RT_TEST_PARALLEL=1 $(PERL) "-MApp::Prove" -e 'my $$p = App::Prove->new(); $$p->process_args("-wlrj$(RT_TEST_PARALLEL_NUM)","--state=slow,save", "t"); exit( $$p->run() ? 0 : 1 )'

regression-reset-db: force-dropdb
	$(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --dba-password ''

initdb :: initialize-database

initialize-database: 
	$(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action init --prompt-for-dba-password

upgrade-database:
	$(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action upgrade --prompt-for-dba-password

dropdb: 
	$(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --prompt-for-dba-password

force-dropdb: 
	$(PERL) -I$(LOCAL_LIB_PATH) -I$(RT_LIB_PATH) sbin/rt-setup-database --action drop --dba-password '' --force

critic:
	perlcritic --quiet sbin bin lib

libs-install: 
@COMMENT_INPLACE_LAYOUT@	[ -d $(DESTDIR)$(RT_LIB_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LIB_PATH)
@COMMENT_INPLACE_LAYOUT@	-( cd lib && find . -type d -print ) | while read dir ; do \
@COMMENT_INPLACE_LAYOUT@	    $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_LIB_PATH)/$$dir" ; \
@COMMENT_INPLACE_LAYOUT@	done
@COMMENT_INPLACE_LAYOUT@	-( cd lib && find . -type f -print ) | while read file ; do \
@COMMENT_INPLACE_LAYOUT@	     $(INSTALL) -m 0644 "lib/$$file" "$(DESTDIR)$(RT_LIB_PATH)/$$file" ; \
@COMMENT_INPLACE_LAYOUT@	done

html-install:
@COMMENT_INPLACE_LAYOUT@	[ -d $(DESTDIR)$(MASON_HTML_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(MASON_HTML_PATH)
@COMMENT_INPLACE_LAYOUT@	-( cd share/html && find . -type d -print ) | while read dir ; do \
@COMMENT_INPLACE_LAYOUT@	    $(INSTALL) -m 0755 -d "$(DESTDIR)$(MASON_HTML_PATH)/$$dir" ; \
@COMMENT_INPLACE_LAYOUT@	done
@COMMENT_INPLACE_LAYOUT@	-( cd share/html && find . -type f -print ) | while read file ; do \
@COMMENT_INPLACE_LAYOUT@	    $(INSTALL) -m 0644 "share/html/$$file" "$(DESTDIR)$(MASON_HTML_PATH)/$$file" ; \
@COMMENT_INPLACE_LAYOUT@	done

font-install:
@COMMENT_INPLACE_LAYOUT@	[ -d $(DESTDIR)$(RT_FONT_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_FONT_PATH)
@COMMENT_INPLACE_LAYOUT@	-( cd share/fonts && find . -type f -print ) | while read file ; do \
@COMMENT_INPLACE_LAYOUT@	    $(INSTALL) -m 0644 "share/fonts/$$file" "$(DESTDIR)$(RT_FONT_PATH)/$$file" ; \
@COMMENT_INPLACE_LAYOUT@	done


po-install:
@COMMENT_INPLACE_LAYOUT@	[ -d $(DESTDIR)$(RT_LEXICON_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_LEXICON_PATH)
@COMMENT_INPLACE_LAYOUT@	-( cd share/po && find . -type f -print ) | while read file ; do \
@COMMENT_INPLACE_LAYOUT@	    $(INSTALL) -m 0644 "share/po/$$file" "$(DESTDIR)$(RT_LEXICON_PATH)/$$file" ; \
@COMMENT_INPLACE_LAYOUT@	done



doc-install:
@COMMENT_INPLACE_LAYOUT@	# RT 3.0.0 - RT 3.0.2 would accidentally create a file instead of a dir
@COMMENT_INPLACE_LAYOUT@	-[ -f $(DESTDIR)$(RT_DOC_PATH) ] && rm $(DESTDIR)$(RT_DOC_PATH) 
@COMMENT_INPLACE_LAYOUT@	[ -d $(DESTDIR)$(RT_DOC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_DOC_PATH)
@COMMENT_INPLACE_LAYOUT@	-( cd docs && find . -type d -print ) | while read dir ; do \
@COMMENT_INPLACE_LAYOUT@	    $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_DOC_PATH)/$$dir" ; \
@COMMENT_INPLACE_LAYOUT@	done
@COMMENT_INPLACE_LAYOUT@	-( cd docs && find . -type f -print ) | while read file ; do \
@COMMENT_INPLACE_LAYOUT@	    $(INSTALL) -m 0644 "docs/$$file" "$(DESTDIR)$(RT_DOC_PATH)/$$file" ; \
@COMMENT_INPLACE_LAYOUT@	done
@COMMENT_INPLACE_LAYOUT@	-$(INSTALL) -m 0644 ./README $(DESTDIR)$(RT_DOC_PATH)/


etc-install:
@COMMENT_INPLACE_LAYOUT@	[ -d $(DESTDIR)$(RT_ETC_PATH) ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_ETC_PATH)
@COMMENT_INPLACE_LAYOUT@	for file in $(ETC_FILES) ; do \
@COMMENT_INPLACE_LAYOUT@	    $(INSTALL) -m 0644 "etc/$$file" "$(DESTDIR)$(RT_ETC_PATH)/" ; \
@COMMENT_INPLACE_LAYOUT@	done
@COMMENT_INPLACE_LAYOUT@	[ -d $(DESTDIR)$(RT_ETC_PATH)/upgrade ] || $(INSTALL) -m 0755 -d $(DESTDIR)$(RT_ETC_PATH)/upgrade
@COMMENT_INPLACE_LAYOUT@	-( cd etc/upgrade && find . -type d -print ) | while read dir ; do \
@COMMENT_INPLACE_LAYOUT@	    $(INSTALL) -m 0755 -d "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$dir" ; \
@COMMENT_INPLACE_LAYOUT@	done
@COMMENT_INPLACE_LAYOUT@	-( cd etc/upgrade && find . -type f -not -name '*.in' -print ) | while read file ; do \
@COMMENT_INPLACE_LAYOUT@	    $(INSTALL) -m 0644 "etc/upgrade/$$file" "$(DESTDIR)$(RT_ETC_PATH)/upgrade/$$file" ; \
@COMMENT_INPLACE_LAYOUT@	done


sbin-install:
@COMMENT_INPLACE_LAYOUT@	$(INSTALL) -m 0755 -d $(DESTDIR)$(RT_SBIN_PATH)
@COMMENT_INPLACE_LAYOUT@	for file in $(SYSTEM_BINARIES) ; do \
@COMMENT_INPLACE_LAYOUT@	    $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "sbin/$$file" "$(DESTDIR)$(RT_SBIN_PATH)/" ; \
@COMMENT_INPLACE_LAYOUT@	done



bin-install:
@COMMENT_INPLACE_LAYOUT@	$(INSTALL) -m 0755 -d $(DESTDIR)$(RT_BIN_PATH)
@COMMENT_INPLACE_LAYOUT@	for file in $(BINARIES) ; do \
@COMMENT_INPLACE_LAYOUT@	    $(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "bin/$$file" "$(DESTDIR)$(RT_BIN_PATH)/" ; \
@COMMENT_INPLACE_LAYOUT@	done



regenerate-catalogs:
	$(PERL) devel/tools/extract-message-catalog

license-tag:
	$(PERL) devel/tools/license_tag

factory: initialize-database
	cd lib; $(PERL) ../devel/tools/factory  $(DB_DATABASE) RT

start-httpd:
	$(PERL) sbin/standalone_httpd &

start-server:
	$(PERL) sbin/rt-server &

apachectl:
	$(APACHECTL) stop
	sleep 10
	$(APACHECTL) start
	sleep 5

SNAPSHOT=$(shell git describe --tags)
THIRD_PARTY=devel/third-party/
snapshot: build-snapshot build-third-party clearsign-snapshot clearsign-third-party snapshot-shasums

build-snapshot:
	git archive --prefix "$(SNAPSHOT)/"  HEAD | tar -xf -
	( cd $(SNAPSHOT)                                         && \
	        echo "$(SNAPSHOT)" > .tag                        && \
	        autoconf                                         && \
	        INSTALL=./install-sh PERL=/usr/bin/perl ./configure \
	            --with-db-type=SQLite                           \
	            --enable-layout=relative                        \
	            --with-web-handler=standalone                && \
	        rm -rf autom4te.cache                               \
	               config.status config.log config.pld          \
	)
	tar -czf "$(SNAPSHOT).tar.gz" "$(SNAPSHOT)/"
	rm -fr "$(SNAPSHOT)/"

clearsign-snapshot:
	gpg --no-armor --detach-sign "$(SNAPSHOT).tar.gz"

build-third-party:
	git archive --prefix "$(SNAPSHOT)/$(THIRD_PARTY)" HEAD:$(THIRD_PARTY) \
		| gzip > "$(SNAPSHOT)-third-party-source.tar.gz"
	rm -rf "$(SNAPSHOT)/$(THIRD_PARTY)"

clearsign-third-party:
	gpg --no-armor --detach-sign "$(SNAPSHOT)-third-party-source.tar.gz"

snapshot-shasums:
	sha1sum $(SNAPSHOT)*.tar.gz*

vessel-import: build-snapshot
	[ -d $(VESSEL) ] || (echo "VESSEL isn't a path to your shipwright vessel" && exit -1)
	cp $(VESSEL)/scripts/RT/build.pl /tmp/build.pl
	./sbin/rt-test-dependencies --with-standalone --with-fastcgi --with-sqlite --list > /tmp/rt.yml
	shipwright import file:$(SNAPSHOT).tar.gz \
    --require-yml /tmp/rt.yml \
    --build-script /tmp/build.pl \
    --name RT \
	--repository fs:$(VESSEL) \
     --log-level=info \
     --skip cpan-capitalization,cpan-mod_perl,cpan-Encode,cpan-PPI,cpan-Test-Exception-LessClever,cpan-Test-Manifest,cpan-Test-Object,cpan-Test-Pod,cpan-Test-Requires,cpan-Test-SubCalls,cpan-Test-cpan-Tester,cpan-Test-Warn --skip-all-recommends
	mv $(VESSEL)/scripts/RT/build  $(VESSEL)/scripts/RT/build.pl

JSMIN_URL = http://download.bestpractical.com/mirror/jsmin-2011-01-22.c
JSMIN_SHA = 8a6b3b980a52c028eb73aee4a82ebe060c1ee854

jsmin: jsmin-checkcc jsmin-fetch jsmin-verify jsmin-confirm jsmin-build jsmin-install
	@echo ""
	@echo "To configure RT to use jsmin, add the following line to $(DESTDIR)$(RT_ETC_PATH)/RT_SiteConfig.pm:"
	@echo ""
	@echo "    Set(\$$JSMinPath, '$(DESTDIR)$(RT_BIN_PATH)/jsmin');"
	@echo ""

jsmin-checkcc:
	@[ -n "$(CC)" ] || (echo "You don't appear to have a C compiler, please set CC and re-run configure" && exit 1)

jsmin-confirm:
	@echo "jsmin is distributed under a slightly unusual license and can't be shipped"
	@echo "with RT.  Before configuring RT to use jsmin, please read jsmin's license"
	@echo "below:"
	@echo ""
	@$(PERL) -pe 'print && exit if /^\*\// or /^#include/' jsmin.c
	@echo ""
	@echo "Press Enter to accept the license, or Ctrl-C to stop now."
	@$(PERL) -e '<STDIN>'

jsmin-fetch:
	@echo ""
	@echo "Downloading jsmin.c from $(JSMIN_URL)"
	@echo ""
	@$(PERL) -MLWP::Simple -e 'exit not is_success(getstore("$(JSMIN_URL)", "jsmin.c"))' \
		|| (echo "Failed to download $(JSMIN_URL)" && exit 1)

jsmin-verify:
	@$(PERL) -MDigest::SHA -e \
		'exit not Digest::SHA->new(1)->addfile("jsmin.c")->hexdigest eq "$(JSMIN_SHA)"' \
		|| (echo "Verification of jsmin.c failed! Possible man in the middle?" && exit 1)

jsmin-build:
	$(CC) -o jsmin jsmin.c

jsmin-install:
	$(INSTALL) -o $(BIN_OWNER) -g $(RTGROUP) -m 0755 "jsmin" "$(DESTDIR)$(RT_BIN_PATH)/"
