#------------------------------------------------------------------------------+
# Makefile for wp-mirror                                                       |
# Copyright (C) 2011-2014 Dr. Kent L. Miller.  All rights reserved.            |
#                                                                              |
# This program is free software: you can redistribute it and/or modify         |
# it under the terms of the GNU General Public License as published by         |
# the Free Software Foundation, either version 3 of the License, or (at        |
# your option) any later version.                                              |
#                                                                              |
# This program 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, see <http://www.gnu.org/licenses/>")       |
#------------------------------------------------------------------------------+

#------------------------------------------------------------------------------+
# Installation from DEB package                                                |
#------------------------------------------------------------------------------+
# Debian GNU/Linux 7.6 (wheezy w/ backports), Ubuntu 12.10 (quantal)           |
# 1) Download latest .DEB package from                                         |
#    http://download.savannah.gnu.org/releases/wp-mirror/                      |
# 2) Install package                                                           |
#    root-shell# dpkg --install mediawiki-mwxml2sql_0.0.2.24-1_all.deb         |
#    root-shell# dpkg --install wp-mirror-mediawiki_1.24.22-1_all.deb          |
#    root-shell# dpkg --install \                                              |
#                    wp-mirror-mediawiki-extensions-math-texvc_1.24.22-1_all.deb
#    root-shell# dpkg --install wp-mirror-mediawiki-extensions_1.24.22-1_all.deb
#    root-shell# dpkg --install wp-mirror_0.7.4-1_all.deb                      |
# 3) Run                                                                       |
#    root-shell# wp-mirror --mirror                                            |
#    Wp-mirror should automatically configure a mirror of the `simple' wiki.   |
# 4) Read `/usr/share/doc/wp-mirror/doc/wp-mirror-0.7.pdf.gz'                  |
#------------------------------------------------------------------------------+

VERSION            = 0.7
PROGRAM            = wp-mirror
SOURCEDIR          = $(PROGRAM)-$(VERSION)

APPLICATIONSDIR    = $(DESTDIR)$(PREFIX)/usr/share/applications/
BINDIR             = $(DESTDIR)$(PREFIX)/usr/bin/
CONF-MW-DIR        = $(DESTDIR)$(PREFIX)/etc/wp-mirror-mediawiki/
CONF-MY-DIR        = $(DESTDIR)$(PREFIX)/etc/mysql/conf.d/
CONF-WP-DIR        = $(DESTDIR)$(PREFIX)/etc/$(PROGRAM)/
CRONDIR            = $(DESTDIR)$(PREFIX)/etc/cron.d/
DOCDIR             = $(DESTDIR)$(PREFIX)/usr/share/doc/$(PROGRAM)/
EXTDIR             = $(DESTDIR)$(PREFIX)/usr/share/wp-mirror-mediawiki/extensions/
ICONBASEDIR        = $(DESTDIR)$(PREFIX)/usr/share/icons/
ICONDIR16          = $(DESTDIR)$(PREFIX)/usr/share/icons/hicolor/16x16/apps/
ICONDIR22          = $(DESTDIR)$(PREFIX)/usr/share/icons/hicolor/22x22/apps/
ICONDIR24          = $(DESTDIR)$(PREFIX)/usr/share/icons/hicolor/24x24/apps/
ICONDIR32          = $(DESTDIR)$(PREFIX)/usr/share/icons/hicolor/32x32/apps/
ICONDIR48          = $(DESTDIR)$(PREFIX)/usr/share/icons/hicolor/48x48/apps/
ICONDIR64          = $(DESTDIR)$(PREFIX)/usr/share/icons/hicolor/64x64/apps/
ICONDIR128         = $(DESTDIR)$(PREFIX)/usr/share/icons/hicolor/128x128/apps/
ICONDIR256         = $(DESTDIR)$(PREFIX)/usr/share/icons/hicolor/256x256/apps/
LOGROTATEDIR       = $(DESTDIR)$(PREFIX)/etc/logrotate.d/
MANDIR             = $(DESTDIR)$(PREFIX)/usr/share/man/man1/
MAINTDIR           = $(DESTDIR)$(PREFIX)/usr/share/wp-mirror-mediawiki/maintenance/
MEDIAWIKIDIR       = $(DESTDIR)$(PREFIX)/var/lib/wp-mirror-mediawiki/
LICENSEDIR         = $(DESTDIR)$(PREFIX)/var/lib/wp-mirror-mediawiki/resources/assets/licenses/
PIXMAPDIR          = $(DESTDIR)$(PREFIX)/usr/share/pixmaps/
VHOSTDIR           = $(DESTDIR)$(PREFIX)/etc/apache2/sites-available/

NOC                = http://noc.wikimedia.org/conf/

A2ENMOD            = /usr/sbin/a2enmod
A2ENSITE           = /usr/sbin/a2ensite
A2DISMOD           = /usr/sbin/a2dismod
A2DISSITE          = /usr/sbin/a2dissite
APACHE             = /etc/init.d/apache2
CDBDUMP            = /usr/bin/cdbdump
CDBMAKE            = /usr/bin/cdbmake
CP                 = /bin/cp
GZIP               = /bin/gzip
HELP2MAN           = /usr/bin/help2man
INSTALL            = /usr/bin/install
INTERWIKI          = ./interwiki.gawk
LN                 = /bin/ln
RM                 = /bin/rm
SHELL              = /bin/sh
WGET               = /usr/bin/wget
XGETTEXT           = /usr/bin/xgettext

CONF-MW-DBLIST     = all.dblist
CONF-MW-INIT       = InitialiseSettings.php
CONF-MW-INTERWIKI  = interwiki.cdb
CONF-MW-LOCAL      = LocalSettings.php
CONF-MW-LOCAL-AC   = LocalSettings_account.php
CONF-MW-LOCAL-WP   = LocalSettings_wpmirror.php
CONF-MY-WP         = wp-mirror.cnf
CONF-WP-DEFAULT    = default.conf
CONF-WP-LOCAL      = local.conf
COPYRIGHT          = COPYRIGHT
CRON               = $(PROGRAM).cron.d
DESKTOP            = $(PROGRAM).desktop
FARM-CIRRUS-FORCE  = forceSearchIndex_farm.php
FARM-CIRRUS-UPDATE = updateSearchIndexConfig_farm.php
FARM-DATABASE      = database_farm.sql
FARM-IMPORTDUMP    = importDump_farm.php
FARM-LOCALISATION  = localisationUpdate_farm.php
FARM-TITLEKEY      = rebuildTitleKeys_farm.php
FARM-RUNJOBS       = runJobs_farm.php
FARM-UPDATE        = update_farm.php
FAVICON            = favicon.ico
I18N               = $(PROGRAM).pot
ICON               = $(PROGRAM).png
ICON16             = 16px-$(ICON)
ICON22             = 22px-$(ICON)
ICON24             = 24px-$(ICON)
ICON32             = 32px-$(ICON)
ICON48             = 48px-$(ICON)
ICON64             = 64px-$(ICON)
ICON128            = 128px-$(ICON)
ICON256            = 256px-$(ICON)
LOGOTYPE           = 135px-$(ICON)
MAN                = $(PROGRAM).1.gz
LOGROTATE          = $(PROGRAM).logrotate
PDF                = $(SOURCEDIR).pdf
XPM                = $(PROGRAM).xpm
REWRITE            = rewrite
RIGHTS             = somerights20.png
SOURCE             = $(SOURCEDIR).lisp
VHOST              = wp-mirror.site.conf
WHATIS             = "utility for building a mirror of a set of wikipedias"

CONF-MW-FILES      = $(CONF-MW-DBLIST) $(CONF-MW-INIT) $(CONF-MW-INTERWIKI) \
	             $(CONF-MW-LOCAL) $(CONF-MW-LOCAL-AC) $(CONF-MW-LOCAL-WP)
CONF-WP-FILES      = $(CONF-WP-DEFAULT) $(CONF-WP-LOCAL)
DOCFILES           = changelog $(COPYRIGHT) README thanks
MAINTFILES         = $(FARM-DATABASE) $(FARM-IMPORTDUMP) $(FARM-RUNJOBS) \
	             $(FARM-UPDATE)   $(INTERWIKI)
RESTOREFILES       = $(CONF-MW-DBLIST) $(CONF-MW-INIT) $(CONF-MW-INTERWIKI) \
	             $(CONF-MW-LOCAL) $(CONF-MW-LOCAL-AC) $(CONF-MW-LOCAL-WP) \
	             $(CONF-MY-WP)    $(CONF-WP-DEFAULT) $(CONF-WP-LOCAL) \
	             $(FARM-CIRRUS-FORCE) $(FARM-CIRRUS-UPDATE) \
	             $(FARM-DATABASE) $(FARM-IMPORTDUMP) $(FARM-LOCALISATION) \
	             $(FARM-RUNJOBS)  $(FARM-TITLEKEY)   $(FARM-UPDATE) \
	             image/$(FAVICON) image/$(LOGOTYPE) image/$(RIGHTS)

#------------------------------------------------------------------------------+

build:
	$(INSTALL) --no-target-directory $(SOURCE) $(PROGRAM)
	./$(SOURCE) --copyright > $(COPYRIGHT)
	$(XGETTEXT) --from-code=UTF-8 --language=Lisp --output $(I18N) --extract-all --force-po $(SOURCE)
	$(HELP2MAN) --section 1 --no-info --name $(WHATIS) --output=$(MAN) ./$(SOURCE)

install: build
	$(INSTALL) --mode=755 --directory       $(APPLICATIONSDIR)
	$(INSTALL) --mode=644 $(DESKTOP)        $(APPLICATIONSDIR)
	$(INSTALL) --mode=755 --directory       $(BINDIR)
	$(INSTALL) --mode=755 $(PROGRAM)        $(BINDIR)
	$(INSTALL) --mode=755 --directory       $(CRONDIR)
	$(INSTALL) --mode=644 --no-target-directory $(CRON) $(CRONDIR)$(PROGRAM)
	$(INSTALL) --mode=755 --directory       $(DOCDIR)
	for file in $(DOCFILES); do \
	  $(INSTALL) --mode=644 $$file            $(DOCDIR); \
	done
	if [ "x$(DESTDIR)" = 'x' ] ; then \
	  $(INSTALL) --mode=644 COPYING $(DOCDIR) ; \
	fi
	$(INSTALL) --mode=755 --directory       $(DOCDIR)doc/
	$(INSTALL) --mode=644 doc/$(PDF)        $(DOCDIR)doc/
	$(INSTALL) --mode=755 --directory       $(DOCDIR)examples/
	$(INSTALL) --mode=644 examples/*        $(DOCDIR)examples/
	$(INSTALL) --mode=755 --directory       $(DOCDIR)image/
	$(INSTALL) --mode=644 image/*           $(DOCDIR)image/
	# install restore files
	$(INSTALL) --mode=755 --directory       $(DOCDIR)restore/
	$(INSTALL) --mode=644 --no-target-directory \
	                                $(CRON) $(DOCDIR)restore/$(PROGRAM)
	for file in $(RESTOREFILES); do \
	  $(INSTALL) --mode=644 $$file            $(DOCDIR)restore/; \
	done
	$(INSTALL) --mode=644 --owner=www-data --group=www-data \
	  --no-target-directory image/$(LOGOTYPE) $(DOCDIR)restore/$(ICON)
	# install /etc/wp-mirror-mediawiki/* files
	$(INSTALL) --mode=755 --directory       $(CONF-MW-DIR)
	for file in $(CONF-MW-FILES); do \
	  $(INSTALL) --mode=600 --owner=www-data --group=www-data $$file \
	                                        $(CONF-MW-DIR); \
	done
	# install /etc/mysql/conf.d/* files
	$(INSTALL) --mode=755 --directory       $(CONF-MY-DIR)
	#$(INSTALL) --mode=644 $(CONF-MY-WP)     $(CONF-MY-DIR)
	# install /etc/wp-mirror/* files
	$(INSTALL) --mode=755 --directory       $(CONF-WP-DIR)
	for file in $(CONF-WP-FILES); do \
	  $(INSTALL) --mode=644 $$file            $(CONF-WP-DIR); \
	done
	# install /var/lib/wp-mirror-mediawiki/extension/* files
	$(INSTALL) --mode=755 --directory       $(EXTDIR)CirrusSearch/
	$(INSTALL) --mode=755 --directory       $(EXTDIR)CirrusSearch/maintenance/
	$(INSTALL) --mode=644 $(FARM-CIRRUS-FORCE)  $(EXTDIR)CirrusSearch/maintenance/
	$(INSTALL) --mode=644 $(FARM-CIRRUS-UPDATE) $(EXTDIR)CirrusSearch/maintenance/
	$(INSTALL) --mode=755 --directory       $(EXTDIR)LocalisationUpdate/
	$(INSTALL) --mode=644 $(FARM-LOCALISATION) $(EXTDIR)LocalisationUpdate/
	$(INSTALL) --mode=755 --directory       $(EXTDIR)TitleKey/
	$(INSTALL) --mode=644 $(FARM-TITLEKEY)  $(EXTDIR)TitleKey/
	# install /var/lib/wp-mirror-mediawiki/maintenance/* files
	$(INSTALL) --mode=755 --directory       $(MAINTDIR)
	for file in $(MAINTFILES); do \
	  $(INSTALL) --mode=644 $$file            $(MAINTDIR); \
	done
	$(INSTALL) --mode=755 $(INTERWIKI)      $(MAINTDIR)
	# install icons
	$(INSTALL) --mode=755 --directory       $(ICONDIR16)
	$(INSTALL) --mode=644 --no-target-directory image/$(ICON16) \
	                                        $(ICONDIR16)$(ICON)
	$(INSTALL) --mode=755 --directory       $(ICONDIR22)
	$(INSTALL) --mode=644 --no-target-directory image/$(ICON22) \
	                                        $(ICONDIR22)$(ICON)
	$(INSTALL) --mode=755 --directory       $(ICONDIR24)
	$(INSTALL) --mode=644 --no-target-directory image/$(ICON24) \
	                                        $(ICONDIR24)$(ICON)
	$(INSTALL) --mode=755 --directory       $(ICONDIR32)
	$(INSTALL) --mode=644 --no-target-directory image/$(ICON32) \
	                                        $(ICONDIR32)$(ICON)
	$(INSTALL) --mode=755 --directory       $(ICONDIR48)
	$(INSTALL) --mode=644 --no-target-directory image/$(ICON48) \
	                                        $(ICONDIR48)$(ICON)
	$(INSTALL) --mode=755 --directory       $(ICONDIR64)
	$(INSTALL) --mode=644 --no-target-directory image/$(ICON64) \
	                                        $(ICONDIR64)$(ICON)
	$(INSTALL) --mode=755 --directory       $(ICONDIR128)
	$(INSTALL) --mode=644 --no-target-directory image/$(ICON128) \
	                                        $(ICONDIR128)$(ICON)
	$(INSTALL) --mode=755 --directory       $(ICONDIR256)
	$(INSTALL) --mode=644 --no-target-directory image/$(ICON256) \
	                                        $(ICONDIR256)$(ICON)
	# install /var/lib/wp-mirror-mediawiki/* files
	$(INSTALL) --mode=755 --directory       $(MEDIAWIKIDIR)
	$(INSTALL) --mode=644 --owner=www-data --group=www-data \
	   image/$(FAVICON)                     $(MEDIAWIKIDIR)
	$(INSTALL) --mode=644 --owner=www-data --group=www-data \
	  --no-target-directory image/$(LOGOTYPE) $(MEDIAWIKIDIR)$(ICON)
	$(INSTALL) --mode=755 --directory       $(LICENSEDIR)
	$(INSTALL) --mode=644 --owner=root --group=root \
	   image/$(RIGHTS)                      $(LICENSEDIR)
	# install /etc/logrotate.d/* files
	$(INSTALL) --mode=755 --directory       $(LOGROTATEDIR)
	$(INSTALL) --mode=644 --no-target-directory $(LOGROTATE) \
	                                        $(LOGROTATEDIR)$(PROGRAM)
	# install /usr/share/man/man1/* files
	$(INSTALL) --mode=755 --directory       $(MANDIR)
	$(INSTALL) --mode=644 $(MAN)            $(MANDIR)
	$(INSTALL) --no-target-directory $(SOURCE) $(PROGRAM)
	# install /usr/share/pixmaps/* files
	$(INSTALL) --mode=755 --directory       $(PIXMAPDIR)
	$(INSTALL) --mode=644 image/$(XPM)      $(PIXMAPDIR)
	# install /etc/apache2/sites-available/* files
	$(INSTALL) --mode=755 --directory       $(VHOSTDIR)
	$(INSTALL) --mode=644 $(VHOST)          $(VHOSTDIR)
	if [ "x$(DESTDIR)" = 'x' ] ; then \
	  $(A2ENMOD) $(REWRITE) ; \
	  $(A2ENSITE) $(VHOST); \
	  $(APACHE) reload; \
	fi

deinstall:
	$(RM) -f  $(APPLICATIONSDIR)$(DESKTOP)
	$(RM) -f  $(BINDIR)$(PROGRAM)
	for file in $(CONF-MW-FILES); do \
	  $(RM) -f $(CONF-MW-DIR)$$file; \
	done
	$(RM) -f  $(CONF-MY-DIR)$(CONF-MY-WP)
	$(RM) -fr $(CONF-WP-DIR)
	$(RM) -f  $(CRONDIR)$(PROGRAM)
	$(RM) -fr $(DOCDIR)
	$(RM) -f  $(EXTDIR)CirrusSearch/maintenance/$(FARM-CIRRUS-FORCE)
	$(RM) -f  $(EXTDIR)CirrusSearch/maintenance/$(FARM-CIRRUS-UPDATE)
	$(RM) -f  $(EXTDIR)LocalisationUpdate/$(FARM-LOCALISATION)
	$(RM) -f  $(EXTDIR)TitleKey/$(FARM-TITLEKEY)
	$(RM) -f  $(ICONDIR16)$(ICON16)
	$(RM) -f  $(ICONDIR22)$(ICON22)
	$(RM) -f  $(ICONDIR24)$(ICON24)
	$(RM) -f  $(ICONDIR32)$(ICON32)
	$(RM) -f  $(ICONDIR48)$(ICON48)
	$(RM) -f  $(ICONDIR64)$(ICON64)
	$(RM) -f  $(ICONDIR128)$(ICON128)
	$(RM) -f  $(ICONDIR256)$(ICON256)
	$(RM) -f  $(LOGROTATEDIR)$(PROGRAM)
	for file in $(MAINTFILES); do \
	  $(RM) -f $(MAINTDIR)$$file; \
	done
	$(RM) -f  $(MEDIAWIKIDIR)cache/$(CONF-MW-INTERWIKI)
	$(RM) -f  $(MANDIR)$(MAN)
	$(RM) -f  $(MEDIAWIKIDIR)$(FAVICON)
	$(RM) -f  $(MEDIAWIKIDIR)$(LOGOTYPE)
	$(RM) -f  $(LICENSEDIR)$(RIGHTS)
	$(RM) -f  $(PIXMAPDIR)$(XPM)
	if [ "x$(DESTDIR)" = 'x' ] ; then \
	  $(A2DISMOD) $(REWRITE) ; \
	  $(A2DISSITE) $(VHOST); \
	  $(APACHE) reload ; \
	fi
	$(RM) -f  $(VHOSTDIR)$(VHOST)

man:
	$(MAN) -l $(MAN)

#------------------------------------------------------------------------------+
# update these files before building DEB package

noc:
	$(WGET) $(NOC)$(CONF-MW-DBLIST) --output-document=$(CONF-MW-DBLIST)
	$(WGET) $(NOC)$(CONF-MW-INIT).txt --output-document=$(CONF-MW-INIT)
	$(WGET) $(NOC)$(CONF-MW-INTERWIKI) --output-document=$(CONF-MW-INTERWIKI).orig

interwiki:
	$(CDBDUMP) < $(CONF-MW-INTERWIKI).orig > $(CONF-MW-INTERWIKI).dump
	$(INTERWIKI) $(CONF-MW-INTERWIKI).dump > $(CONF-MW-INTERWIKI).new
	$(CDBMAKE) $(CONF-MW-INTERWIKI) $(CONF-MW-INTERWIKI).tmp < $(CONF-MW-INTERWIKI).new
	$(RM) $(CONF-MW-INTERWIKI).dump* $(CONF-MW-INTERWIKI).new

#------------------------------------------------------------------------------+

clean:
	$(RM) -f $(PROGRAM) $(COPYRIGHT) 
	$(RM) -f $(I18N) $(MAN)
	$(RM) -f *~
