summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2006-10-17 14:22:29 +0000
committerfiddlosopher <fiddlosopher@788f1e2b-df1e-0410-8736-df70ead52e1b>2006-10-17 14:22:29 +0000
commitdf7b68225101966051f8b592a27127bf789eb81e (patch)
treea063e97ed58d0bdb2cbb5a95c3e8c1bcce54aa00 /Makefile
parente7dbfef4d8aa528d9245424e9c372e900a774c90 (diff)
initial import
git-svn-id: https://pandoc.googlecode.com/svn/trunk@2 788f1e2b-df1e-0410-8736-df70ead52e1b
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile146
1 files changed, 146 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..880f3f8e7
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,146 @@
+# Makefile for Pandoc.
+
+#-------------------------------------------------------------------------------
+# Cabal constants
+#-------------------------------------------------------------------------------
+CABAL := $(wildcard *.cabal)
+NAME := $(shell sed -ne 's/^[Nn]ame:[[:space:]]*//p' $(CABAL))
+THIS := $(shell echo $(NAME) | tr A-Z a-z)
+VERSION := $(shell sed -ne 's/^[Vv]ersion:[[:space:]]*//p' $(CABAL))
+EXECUTABLES := $(shell sed -ne 's/^[Ee]xecutable:[[:space:]]*//p' $(CABAL))
+
+#-------------------------------------------------------------------------------
+# Variables to setup through environment
+#-------------------------------------------------------------------------------
+PREFIX ?= /usr/local
+DESTDIR ?=
+
+#-------------------------------------------------------------------------------
+# Constant names and commands in source tree
+#-------------------------------------------------------------------------------
+SRCDIR := src
+MANDIR := man
+BUILDDIR := dist
+BUILDCONF := .setup-config
+BUILDCMD := runhaskell Setup.hs
+
+#-------------------------------------------------------------------------------
+# Installation paths
+#-------------------------------------------------------------------------------
+BINPATH := $(DESTDIR)$(PREFIX)/bin
+DATAPATH := $(DESTDIR)$(PREFIX)/share
+DOCPATH := $(DATAPATH)/doc/$(THIS)
+LIBDOCPATH := $(DATAPATH)/doc/$(THIS)-doc
+MANPATH := $(DATAPATH)/man
+PKGPATH := $(DATAPATH)/$(THIS)
+
+#-------------------------------------------------------------------------------
+# Generic Makefile variables
+#-------------------------------------------------------------------------------
+INSTALL := install -c
+INSTALL_PROGRAM := $(INSTALL) -m 755
+INSTALL_DATA := $(INSTALL) -m 644
+
+#-------------------------------------------------------------------------------
+# Recipes
+#-------------------------------------------------------------------------------
+
+.PHONY: all
+all: build
+
+.PHONY: templates
+templates: $(SRCDIR)/templates
+$(SRCDIR)/templates:
+ $(MAKE) -C $(SRCDIR)/templates
+
+.PHONY: prep
+prep:
+ # Darcs cannot preserve file permissions.
+ -for p in configure debian/rules; do chmod +x $$p; done
+
+.PHONY: configure
+cleanup_files+=$(BUILDDIR) $(BUILDCONF) $(CABAL:%.cabal=%).buildinfo
+configure: $(BUILDCONF)
+$(BUILDCONF): prep
+ $(BUILDCMD) configure --prefix=$(PREFIX)
+
+.PHONY: build
+build: templates configure
+ $(BUILDCMD) build
+
+.PHONY: build-lib-doc
+build-lib-doc: html
+cleanup_files+=html
+html: $(BUILDCONF)
+ $(BUILDCMD) haddock && mv $(BUILDDIR)/doc/html .
+
+cleanup_files+=$(EXECUTABLES)
+$(EXECUTABLES): build
+ # Ugly kludge to seperate program and library installations.
+ # Leave the library installation to Cabal ('install-lib' target).
+ find $(BUILDDIR) -type f -name "$(EXECUTABLES)" -perm +a=x -exec mv {} . \;
+
+
+# XXX: Note that we don't handle PREFIX correctly at the install-* stages,
+# i.e. any PREFIX given at the configuration time is lost, unless it is
+# also supplied (via environment) at these stages.
+.PHONY: install-exec uninstall-exec
+bin_all:=$(EXECUTABLES) html2markdown markdown2latex latex2markdown markdown2pdf
+install-exec: $(bin_all)
+ $(INSTALL) -d $(BINPATH); \
+ for p in $(bin_all); do $(INSTALL_PROGRAM) $$p $(BINPATH)/; done
+uninstall-exec:
+ -for p in $(bin_all); do rm -f $(BINPATH)/$$p; done
+
+.PHONY: install-doc uninstall-doc
+doc_all:=README.html README BUGS TODO
+cleanup_files+=README.html
+install-doc: $(doc_all)
+ $(INSTALL) -d $(DOCPATH) && $(INSTALL_DATA) $(doc_all) $(DOCPATH)/; \
+ $(INSTALL) -d $(MANPATH) && cp -a $(MANDIR)/* $(MANPATH)/
+uninstall-doc:
+ -for d in $(doc_all); do rm -f $(DOCPATH)/$$d; done
+ -cd $(MANDIR) && find . -type f -exec rm -f "$(MANPATH)/{}" \;
+
+# Handle program installation manually (due to the deficiencies in Cabal).
+.PHONY: install uninstall
+install: install-exec install-doc
+# FIXME: incomplete support for uninstallation.
+uninstall: uninstall-exec uninstall-doc
+
+.PHONY: install-lib install-lib-doc
+install-lib:
+ @$(BUILDCMD) install || true # required since we move executable
+install-lib-doc: build-lib-doc
+ $(INSTALL) -d $(LIBDOCPATH) && cp -a html $(LIBDOCPATH)/
+
+.PHONY: test test-markdown
+test: $(EXECUTABLES)
+ @cd tests && perl runtests.pl -s $(PWD)/$(THIS)
+test-markdown: $(EXECUTABLES)
+ @cd tests/MarkdownTest_1.0.3 && perl MarkdownTest.pl -s $(PWD)/$(THIS) -tidy
+%.html: %
+ ./$(THIS) -s $^ >$@ || rm -f $@
+
+# Stolen and slightly improved from a GPLed Makefile. Credits to John Meacham.
+src_all:=$(shell find $(SRCDIR) -type f -name '*hs' | egrep -v '^\./(_darcs|lib|test)/')
+cleanup_files+=$(patsubst %,$(SRCDIR)/%,tags tags.sorted)
+tags: $(src_all)
+ cd $(SRCDIR) && hasktags -c $(src_all:$(SRCDIR)/%=%); \
+ LC_ALL=C sort tags >tags.sorted; mv tags.sorted tags
+
+deb: debian prep
+ if [ -x /usr/bin/debuild ]; then \
+ debuild -i_darcs -I_darcs -uc -us; \
+ else \
+ echo "*** Please install devscripts package. ***"; \
+ dpkg-buildpackage -i_darcs -I_darcs -uc -us; \
+ fi
+
+.PHONY: distclean clean
+distclean: clean prep
+ if [ -d debian ]; then fakeroot debian/rules clean; fi
+clean:
+ -if [ -f $(BUILDCONF) ]; then $(BUILDCMD) clean; fi
+ -rm -rf $(cleanup_files)
+