diff --git a/Makefile b/Makefile index 7079f997f..60afaea8b 100644 --- a/Makefile +++ b/Makefile @@ -29,8 +29,10 @@ CONFIGURE := configure #------------------------------------------------------------------------------- # Installation paths #------------------------------------------------------------------------------- -BINPATH := $(DESTDIR)$(PREFIX)/bin -DATAPATH := $(DESTDIR)$(PREFIX)/share +DESTPATH := $(DESTDIR)$(PREFIX) +BINPATH := $(DESTPATH)/bin +DATAPATH := $(DESTPATH)/share +LIBPATH := $(DESTPATH)/$(NAME)-$(VERSION) DOCPATH := $(DATAPATH)/doc/$(THIS) LIBDOCPATH := $(DATAPATH)/doc/$(THIS)-doc MANPATH := $(DATAPATH)/man @@ -43,6 +45,7 @@ INSTALL := install -c INSTALL_PROGRAM := $(INSTALL) -m 755 INSTALL_DATA := $(INSTALL) -m 644 GHC := ghc +GHC_PKG := ghc-pkg #------------------------------------------------------------------------------- # Recipes @@ -80,26 +83,21 @@ html/: configure cleanup_files+=$(BINS) $(BINS): build - # Ugly kludge to seperate program and library installations. - # Leave the library installation to Cabal ('install-lib' target). - find $(BUILDDIR) -type f -name "$(BINS)" -perm +a=x -exec mv {} . \; + find $(BUILDDIR) -type f -name "$(BINS)" -perm +a=x -exec cp {} . \; + +.PHONY: build-all +build-all: build $(BINS) build-lib-doc # 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:=$(BINS) html2markdown markdown2html latex2markdown markdown2latex markdown2pdf -install-exec: $(bin_all) - $(INSTALL) -d $(BINPATH); \ - for f in $(bin_all); do $(INSTALL_PROGRAM) $$f $(BINPATH)/; done -uninstall-exec: - -for f in $(bin_all); do rm -f $(BINPATH)/$$f; done +# User documents installation. .PHONY: install-doc uninstall-doc doc_all:=README.html README BUGS TODO man_all:=$(patsubst $(MANDIR)/%,%,$(wildcard $(MANDIR)/man?/*.1)) cleanup_files+=README.html -install-doc: $(doc_all) +install-doc: $(BINS) $(doc_all) $(INSTALL) -d $(DOCPATH) && $(INSTALL_DATA) $(doc_all) $(DOCPATH)/ for f in $(man_all); do \ $(INSTALL) -d $(MANPATH)/$$(dirname $$f); \ @@ -110,17 +108,50 @@ uninstall-doc: -for f in $(man_all); do rm -f $(MANPATH)/$$f; done -rmdir $(DOCPATH) -# 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 +# Library documents installation. +.PHONY: install-lib-doc uninstall-lib-doc install-lib-doc: build-lib-doc $(INSTALL) -d $(LIBDOCPATH) && cp -a html $(LIBDOCPATH)/ +uninstall-lib-doc: + -rm -rf $(LIBDOCPATH)/html + -rmdir $(LIBDOCPATH) + +# Program only installation. +.PHONY: install-exec uninstall-exec +bin_all:=$(BINS) html2markdown markdown2html latex2markdown markdown2latex markdown2pdf +install-exec: $(bin_all) + $(INSTALL) -d $(BINPATH); \ + for f in $(bin_all); do $(INSTALL_PROGRAM) $$f $(BINPATH)/; done +uninstall-exec: + -for f in $(bin_all); do rm -f $(BINPATH)/$$f; done + +# Program + user documents installation. +.PHONY: install-program uninstall-program +install-program: install-exec install-doc +uninstall-program: uninstall-exec uninstall-doc + +# Install everything. +.PHONY: install-all uninstall-all +install-all: install-doc install-lib-doc + destdir=$(DESTDIR); destdir=$${destdir:-/}; \ + $(BUILDCMD) copy --destdir=$$destdir; \ + $(BUILDCMD) register +uninstall-all: uninstall-doc uninstall-lib-doc + -pkg_id="$(NAME)-$(VERSION)"; \ + libdir=$$($(GHC_PKG) field $$pkg_id library-dirs 2>/dev/null | \ + sed 's/^library-dirs: *//'); \ + if [ -d "$$libdir" ]; then \ + $(BUILDCMD) unregister; \ + rm -rf $$libdir; \ + rmdir $$(dirname $$libdir); \ + else \ + echo "*** Couldn't locate library files for pkgid: $$pkg_id. ***"; \ + fi + +# Default installation recipe for a common deployment scenario. +.PHONY: install uninstall +install: install-program +uninstall: uninstall-program .PHONY: test test-markdown test: $(BINS) diff --git a/README b/README index ca80f3fc5..9f26ea2ea 100644 --- a/README +++ b/README @@ -74,13 +74,10 @@ using Windows, you can install [Cygwin]. PREFIX=~ make install-exec -5. Install Haskell libraries (optional): +5. Install everthing including Haskell libraries and library documentation + (optional): - make install-lib - -6. Install library documentation into `/usr/local/pandoc-doc` (optional): - - make install-lib-doc + make install-all ## Removing `pandoc` @@ -90,10 +87,8 @@ Each of the installation steps described above can be reversed: PREFIX=~ make uninstall-exec - make uninstall-lib + make uninstall-all - make uninstall-lib-doc - # Using `pandoc` If you run `pandoc` without arguments, it will accept input from diff --git a/debian/rules b/debian/rules index 7c0f98547..54f8eec4e 100644 --- a/debian/rules +++ b/debian/rules @@ -67,7 +67,7 @@ install: build # http://www.n-heptane.com/nhlab/repos/cabalDebianTemplate/INSTRUCTIONS.txt find debian/libghc6-$(THIS)-dev -type d -name 'bin' -true | \ while read bin; do mv $$bin/* .; rm -rf $$bin; done - $(MAKE) install + $(MAKE) install-program build-indep: build-indep-stamp build-indep-stamp: