# vim: set softtabstop=2 shiftwidth=2:
SHELL = bash

markdowns = $(shell find doc -name '*.md' | grep -v 'index') README.md

html_docdeps = html/dochead.html \
               html/docfoot.html \
               html/docfoot-script.html \
               scripts/doc-build.sh \
               package.json

cli_mandocs = $(shell find doc/cli -name '*.md' \
               |sed 's|.md|.1|g' \
               |sed 's|doc/cli/|man/man1/|g' ) \
               man/man1/npm-README.1

api_mandocs = $(shell find doc/api -name '*.md' \
               |sed 's|.md|.3|g' \
               |sed 's|doc/api/|man/man3/|g' )

files_mandocs = $(shell find doc/files -name '*.md' \
               |sed 's|.md|.5|g' \
               |sed 's|doc/files/|man/man5/|g' ) \
               man/man5/npm-json.5 \
               man/man5/npm-global.5

misc_mandocs = $(shell find doc/misc -name '*.md' \
               |sed 's|.md|.7|g' \
               |sed 's|doc/misc/|man/man7/|g' ) \
               man/man7/npm-index.7

cli_htmldocs = $(shell find doc/cli -name '*.md' \
                |sed 's|.md|.html|g' \
                |sed 's|doc/cli/|html/doc/cli/|g' ) \
                html/doc/README.html

api_htmldocs = $(shell find doc/api -name '*.md' \
                |sed 's|.md|.html|g' \
                |sed 's|doc/api/|html/doc/api/|g' )

files_htmldocs = $(shell find doc/files -name '*.md' \
                  |sed 's|.md|.html|g' \
                  |sed 's|doc/files/|html/doc/files/|g' ) \
                  html/doc/files/npm-json.html \
                  html/doc/files/npm-global.html

misc_htmldocs = $(shell find doc/misc -name '*.md' \
                 |sed 's|.md|.html|g' \
                 |sed 's|doc/misc/|html/doc/misc/|g' ) \
                 html/doc/index.html

mandocs = $(api_mandocs) $(cli_mandocs) $(files_mandocs) $(misc_mandocs)

htmldocs = $(api_htmldocs) $(cli_htmldocs) $(files_htmldocs) $(misc_htmldocs)

all: doc

latest:
	@echo "Installing latest published npm"
	@echo "Use 'make install' or 'make link' to install the code"
	@echo "in this folder that you're looking at right now."
	node cli.js install -g -f npm

install: docclean all
	node cli.js install -g -f

# backwards compat
dev: install

link: uninstall
	node cli.js link -f

clean: ronnclean doc-clean uninstall
	rm -rf npmrc
	node cli.js cache clean

uninstall:
	node cli.js rm npm -g -f

doc: $(mandocs) $(htmldocs)

ronnclean:
	rm -rf node_modules/ronn node_modules/.bin/ronn .building_ronn

docclean: doc-clean
doc-clean:
	rm -rf \
    .building_ronn \
    html/doc \
    html/api \
    man

# use `npm install ronn` for this to work.
man/man1/npm-README.1: README.md scripts/doc-build.sh package.json
	@[ -d man/man1 ] || mkdir -p man/man1
	scripts/doc-build.sh $< $@

man/man1/%.1: doc/cli/%.md scripts/doc-build.sh package.json
	@[ -d man/man1 ] || mkdir -p man/man1
	scripts/doc-build.sh $< $@

man/man3/%.3: doc/api/%.md scripts/doc-build.sh package.json
	@[ -d man/man3 ] || mkdir -p man/man3
	scripts/doc-build.sh $< $@

man/man5/npm-json.5: man/man5/package.json.5
	cp $< $@

man/man5/npm-global.5: man/man5/npm-folders.5
	cp $< $@

man/man5/%.5: doc/files/%.md scripts/doc-build.sh package.json
	@[ -d man/man5 ] || mkdir -p man/man5
	scripts/doc-build.sh $< $@

doc/misc/npm-index.md: scripts/index-build.js package.json
	node scripts/index-build.js > $@

html/doc/index.html: doc/misc/npm-index.md $(html_docdeps)
	@[ -d html/doc ] || mkdir -p html/doc
	scripts/doc-build.sh $< $@

man/man7/%.7: doc/misc/%.md scripts/doc-build.sh package.json
	@[ -d man/man7 ] || mkdir -p man/man7
	scripts/doc-build.sh $< $@

html/doc/README.html: README.md $(html_docdeps)
	@[ -d html/doc ] || mkdir -p html/doc
	scripts/doc-build.sh $< $@

html/doc/cli/%.html: doc/cli/%.md $(html_docdeps)
	@[ -d html/doc/cli ] || mkdir -p html/doc/cli
	scripts/doc-build.sh $< $@

html/doc/api/%.html: doc/api/%.md $(html_docdeps)
	@[ -d html/doc/api ] || mkdir -p html/doc/api
	scripts/doc-build.sh $< $@

html/doc/files/npm-json.html: html/doc/files/package.json.html
	cp $< $@
html/doc/files/npm-global.html: html/doc/files/npm-folders.html
	cp $< $@

html/doc/files/%.html: doc/files/%.md $(html_docdeps)
	@[ -d html/doc/files ] || mkdir -p html/doc/files
	scripts/doc-build.sh $< $@

html/doc/misc/%.html: doc/misc/%.md $(html_docdeps)
	@[ -d html/doc/misc ] || mkdir -p html/doc/misc
	scripts/doc-build.sh $< $@



ronn: node_modules/.bin/ronn

node_modules/.bin/ronn:
	node cli.js install ronn --no-global

doc: man

man: $(cli_docs) $(api_docs)

test: doc
	node cli.js test

publish: link doc
	@git push origin :v$(shell npm -v) 2>&1 || true
	@npm unpublish npm@$(shell npm -v) 2>&1 || true
	git clean -fd &&\
	git push origin &&\
	git push origin --tags &&\
	npm publish &&\
	npm tag npm@$(shell npm -v) $(shell npm -v | awk -F. '{print $$1 "." $$2}') &&\
	make doc-publish &&\
	make zip-publish

docpublish: doc-publish
doc-publish: doc
	# legacy urls
	for f in $$(find html/doc/{cli,files,misc}/ -name '*.html'); do \
    j=$$(basename $$f | sed 's|^npm-||g'); \
    if ! [ -f html/doc/$$j ] && [ $$j != README.html ] && [ $$j != index.html ]; then \
      perl -pi -e 's/ href="\.\.\// href="/g' <$$f >html/doc/$$j; \
    fi; \
  done
	mkdir -p html/api
	for f in $$(find html/doc/api/ -name '*.html'); do \
    j=$$(basename $$f | sed 's|^npm-||g'); \
    perl -pi -e 's/ href="\.\.\// href="/g' <$$f >html/api/$$j; \
  done
	rsync -vazu --stats --no-implied-dirs --delete \
    html/doc/* \
    node@npmjs.org:/home/node/npm-www/doc
	rsync -vazu --stats --no-implied-dirs --delete \
    html/static/webfonts/ \
    node@npmjs.org:/home/node/npm-www/static/webfonts
	rsync -vazu --stats --no-implied-dirs --delete \
    html/static/style.css \
    node@npmjs.org:/home/node/npm-www/static/
	#cleanup
	rm -rf html/api
	for f in html/doc/*.html; do \
    case $$f in \
      html/doc/README.html) continue ;; \
      html/doc/index.html) continue ;; \
      *) rm $$f ;; \
    esac; \
  done

zip-publish: release
	scp release/* node@nodejs.org:dist/npm/

release:
	@bash scripts/release.sh

sandwich:
	@[ $$(whoami) = "root" ] && (echo "ok"; echo "ham" > sandwich) || (echo "make it yourself" && exit 13)

.PHONY: all latest install dev link doc clean uninstall test man doc-publish doc-clean docclean docpublish release zip-publish
