#-----------------------------------------------------------------------------+
# Makefile for wp-mirror-mediawiki-extensions                                 |
# Copyright (C) 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/>")      |
#-----------------------------------------------------------------------------+

VERSION          = 1.24
PROGRAM          = wp-mirror-mediawiki
SOURCEDIR        = $(PROGRAM)-$(VERSION)

GITSITE          = https://gerrit.wikimedia.org/r/p/mediawiki/extensions/
BRANCH           = wmf/1.24wmf22
BRANCH-WIKIDATA  = mw1.24-wmf22

EXTDIR           = $(DESTDIR)$(PREFIX)/usr/share/$(PROGRAM)/extensions/

CHMOD            = /bin/chmod
CPIO             = /bin/cpio
ECHO             = /bin/echo
GIT              = /usr/bin/git
GREP             = /bin/grep
FIND             = /usr/bin/find
INSTALL          = /usr/bin/install
LN               = /bin/ln
SHELL            = /bin/sh
RM               = /bin/rm
SCP              = /usr/bin/scp
SSH              = /usr/bin/ssh

LIBOWNER         = root
LIBGROUP         = root

# Extensions (ordered as on <http://en.wikipedia.org/wiki/Special:Version>)
EXTDIRS          = CategoryTree Cite Collection Interwiki TemplateSandbox \
	           Translate \
	           Babel CharInsert timeline \
	           ImageMap InputBox LabeledSectionTransclusion Math \
	           ParserFunctions Poem Scribunto SyntaxHighlight_GeSHi \
	           TemplateData wikihiero \
	           PagedTiffHandler PdfHandler TimedMediaHandler VipsScaler \
	           PageImages Popups VectorBeta \
	           Wikidata \
	           ApiSandbox BetaFeatures CirrusSearch CodeEditor \
	           CommonsMetadata Disambiguator Elastica \
	           Gadgets GeoData JsonConfig \
	           cldr LocalisationUpdate \
	           Mantle MobileApp MobileFrontend \
	           MultimediaViewer MwEmbedSupport \
	           OpenSearchXml Parsoid \
	           Score Solarium TextExtracts TitleKey \
	           UniversalLanguageSelector VisualEditor WikiEditor \
	           ZeroBanner ZeroPortal \
	           RandomRootPage intersection DoubleWiki ProofreadPage \
	           Quiz \
	           CustomData GeoCrumbs MapSources

# Files which need permissions set to 644
EXT644S          = CommonsMetadata/CommonsMetadata.php \
	           CommonsMetadata/DataCollector.php \
	           CommonsMetadata/HookHandler.php \
	           CommonsMetadata/TemplateParser.php \
	           Elastica/Elastica/changes.txt \
	           Elastica/Elastica/lib/Elastica/Aggregation/AbstractAggregation.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/AbstractSimpleAggregation.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/Avg.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/Cardinality.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/DateHistogram.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/DateRange.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/ExtendedStats.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/Filter.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/GeoDistance.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/GeohashGrid.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/GlobalAggregation.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/Histogram.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/IpRange.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/Max.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/Min.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/Missing.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/Nested.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/Range.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/Stats.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/Sum.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/Terms.php \
	           Elastica/Elastica/lib/Elastica/Aggregation/ValueCount.php \
	           Elastica/Elastica/lib/Elastica/Bulk/Action.php \
	           Elastica/Elastica/lib/Elastica/Bulk/Action/AbstractDocument.php \
	           Elastica/Elastica/lib/Elastica/Bulk/Action/UpdateDocument.php \
	           Elastica/Elastica/lib/Elastica/Filter/GeohashCell.php \
	           Elastica/Elastica/lib/Elastica/Filter/Indices.php \
	           Elastica/Elastica/lib/Elastica/Filter/Terms.php \
	           Elastica/Elastica/lib/Elastica/Index/Status.php \
	           Elastica/Elastica/lib/Elastica/Node/Info.php \
	           Elastica/Elastica/lib/Elastica/Query.php \
	           Elastica/Elastica/lib/Elastica/Query/Common.php \
	           Elastica/Elastica/lib/Elastica/Query/FunctionScore.php \
	           Elastica/Elastica/lib/Elastica/Query/SimpleQueryString.php \
	           Elastica/Elastica/lib/Elastica/ResultSet.php \
	           Elastica/Elastica/lib/Elastica/Search.php \
	           Elastica/Elastica/lib/Elastica/Snapshot.php \
	           Elastica/Elastica/lib/Elastica/Suggest.php \
	           Elastica/Elastica/lib/Elastica/Suggest/AbstractSuggest.php \
	           Elastica/Elastica/lib/Elastica/Suggest/CandidateGenerator/AbstractCandidateGenerator.php \
	           Elastica/Elastica/lib/Elastica/Suggest/CandidateGenerator/DirectGenerator.php \
	           Elastica/Elastica/lib/Elastica/Suggest/Phrase.php \
	           Elastica/Elastica/lib/Elastica/Suggest/Term.php \
	           Elastica/Elastica/lib/Elastica/Type/Mapping.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/AvgTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/BaseAggregationTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/CardinalityTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/DateRangeTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/DateHistogramTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/ExtendedStatsTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/FilterTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/GeoDistanceTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/GeohashGridTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/GlobalAggregationTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/HistogramTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/IpRangeTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/MaxTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/MinTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/MissingTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/NestedTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/RangeTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/StatsTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/SumTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/TermsTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Aggregation/ValueCountTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/BulkTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/ClientTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Facet/GeoClusterTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Filter/GeohashCellTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Filter/IndicesTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Filter/TermsTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Filter/TermTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/IndexTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Index/SettingsTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/NodeTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Node/InfoTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Query/BoostingTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Query/CommonTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Query/FunctionScoreTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Query/SimpleQueryStringTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/SnapshotTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Suggest/PhraseTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Suggest/TermTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Transport/ThriftTest.php \
	           Elastica/Elastica/test/lib/Elastica/Test/Type/MappingTest.php \
	           Interwiki/Interwiki.css \
	           Interwiki/Interwiki.php \
	           Interwiki/Interwiki_body.php \
	           Interwiki/i18n/en.json \
	           Interwiki/i18n/qqq.json \
	           Math/tests/browser/Gemfile \
	           MobileFrontend/includes/specials/SpecialMobileLanguages.php \
	           MobileFrontend/less/specials/images/userNormal.svg \
	           MobileFrontend/tests/browser/Gemfile \
	           MultimediaViewer/tests/browser/Gemfile \
	           PdfHandler/tests/browser/Gemfile \
	           ProofreadPage/modules/jquery/jquery.mousewheel.js \
	           TimedMediaHandler/TimedMediaHandler.i18n.php \
	           TimedMediaHandler/handlers/WAVHandler/WAVHandler.php \
	           Translate/tests/browser/Gemfile \
	           UniversalLanguageSelector/data/fontrepo/fonts/ComicNeue/ComicNeue-Bold.eot \
	           UniversalLanguageSelector/data/fontrepo/fonts/ComicNeue/ComicNeue-Bold.woff \
	           UniversalLanguageSelector/data/fontrepo/fonts/ComicNeue/ComicNeue-Regular.eot \
	           UniversalLanguageSelector/data/fontrepo/fonts/ComicNeue/ComicNeue-Regular.woff \
	           UniversalLanguageSelector/data/fontrepo/fonts/ComicNeue/ComicNeue-Regular-Oblique.eot \
	           UniversalLanguageSelector/data/fontrepo/fonts/ComicNeue/ComicNeue-Regular-Oblique.woff \
	           UniversalLanguageSelector/tests/browser/Gemfile \
	           VisualEditor/modules/ve-mw/tests/browser/Gemfile \
	           VisualEditor/modules/ve-mw/ui/styles/images/broken-image.png \
	           VisualEditor/modules/ve-mw/ui/widgets/ve.ui.MWMediaResultWidget.js \
	           VisualEditor/modules/ve-mw/ui/widgets/ve.ui.MWMediaSearchWidget.js \
	           ZeroBanner/tests/browser/Gemfile


# Files which need permissions set to 755
EXT755S          = Scribunto/engines/LuaStandalone/lua_ulimit.sh \
	           timeline/EasyTimeline.pl \
	           timeline/install-ploticus.sh \
	           Wikidata/extensions/Wikibase/build/travis/install.sh \
	           Wikidata/extensions/Wikibase/build/travis/mw-apply-wb-settings.sh \
	           Wikidata/extensions/Wikibase/build/travis/script.sh \
	           Wikidata/extensions/Wikibase/build/travis/update-db.sh \
	           Wikidata/extensions/PropertySuggester/build/travis/after_script.sh \
	           Wikidata/extensions/PropertySuggester/build/travis/before_script.sh \
	           Wikidata/extensions/PropertySuggester/build/travis/script.sh \
	           Wikidata/vendor/data-values/data-types/build/travis/script.sh 

#-----------------------------------------------------------------------------+
# targets: build, install, deinstall                                          |
#-----------------------------------------------------------------------------+

build: # nothing to build

install: build
	$(INSTALL) --mode=755 --directory          $(EXTDIR)
	# install /usr/share/wp-mirror-mediawiki/extensions/*
	for dir in $(EXTDIRS); do \
	  $(FIND) $$dir -depth -print | $(GREP) -v ".git" \
	  | $(GREP) -v COPYING | $(GREP) -v LICENSE | $(GREP) -v license \
	  | $(GREP) -v LICENCE \
	  | $(GREP) -v "Collection/OfflineContentGenerator" \
	  | $(GREP) -v "Math/modules/MathJax/fonts/HTML-CSS/TeX/otf" \
	  | $(GREP) -v "Math/texvccheck/test.pl" \
	  | $(GREP) -v "Scribunto/engines/LuaStandalone/binaries" \
	  | $(GREP) -v "TimedMediaHandler/MwEmbedModules/EmbedPlayer/tests" \
	  | $(GREP) -v ttf$ \
	  | $(GREP) -v "VisualEditor/lib/ve" \
	  | $(GREP) -v "Wikidata/vendor/data-values/data-types/js/lib/jquery" \
	  | $(GREP) -v "Wikidata/vendor/data-values/javascript/lib/jquery" \
	  | $(CPIO) --pass-through --make-directories \
	  --preserve-modification-time --unconditional \
	  --owner $(LIBUSER):$(LIBGROUP)             $(EXTDIR); \
	done
	# link to executable
	$(LN) --symbolic /usr/bin/wp-mirror-texvc  $(EXTDIR)Math/math/texvc
	$(LN) --symbolic /usr/bin/wp-mirror-texvccheck $(EXTDIR)Math/texvccheck/texvccheck
	# fix permissions
	for file in $(EXT644S); do \
	  $(CHMOD) 644                               $(EXTDIR)$$file; \
	done
	for file in $(EXT755S); do \
	  $(CHMOD) 755                               $(EXTDIR)$$file; \
	done

deinstall:
	for dir in $(EXTDIRS); do \
	  $(RM) -fr $(EXTDIR)$$dir; \
	done

#-----------------------------------------------------------------------------+
# obtain code from WMF                                                        |
#-----------------------------------------------------------------------------+

all: pull checkout
clone:
	for dir in $(EXTDIRS); do \
	  $(GIT) clone $(GITSITE)$$dir.git; \
	done
	$(ECHO) Elastica; cd Elastica; $(GIT) submodule init; $(GIT) submodule update;
	$(ECHO) VisualEditor; cd VisualEditor; $(GIT) submodule update --init
pull:
	for dir in $(EXTDIRS); do \
	  ($(ECHO) $$dir; cd $$dir; $(GIT) pull;); \
	done
branch:
	for dir in $(EXTDIRS); do \
	  ($(ECHO) $$dir; cd $$dir; $(GIT) branch;); \
	done
checkout:
	for dir in $(EXTDIRS); do \
	  ($(ECHO) $$dir; cd $$dir; $(GIT) checkout $(BRANCH);); \
	done
	$(ECHO) Wikidata; cd Wikidata; $(GIT) checkout $(BRANCH-WIKIDATA)
wipe:
	for dir in $(EXTDIRS); do \
	  $(RM) -fr $$dir; \
	done

#-----------------------------------------------------------------------------+
# misc                                                                        |
#-----------------------------------------------------------------------------+

clean:
	$(RM) -f *~
