# make all: compile to bytecode
# make opt: compile to native code
# make install: install bytecode and/or native code
#----------------------------------------------------------------------
include Makefile.config
-include Makefile.packages
TOP=.
.PHONY: all opt install uninstall clean
all:
for p in $(PARTS); do ( cd src/$$p; $(MAKE) all ) || exit; done
$(MAKE) all-config
opt:
for p in $(PARTS); do ( cd src/$$p; $(MAKE) opt ) || exit; done
install: check-installation
$(INSTALLDIR) "$(DESTDIR)$(prefix)$(OCAMLFIND_BIN)"
$(INSTALLDIR) "$(DESTDIR)$(prefix)$(OCAMLFIND_MAN)"
$(MAKE) install-config
for p in $(PARTS); do ( cd src/$$p; $(MAKE) install ); done
$(MAKE) install-meta
test ! -f 'site-lib-src/num-top/META' || { cd src/findlib; $(MAKE) install-num-top; }
test ! -f 'site-lib-src/camlp4/META' || $(INSTALLFILE) tools/safe_camlp4 "$(DESTDIR)$(prefix)$(OCAMLFIND_BIN)"
$(MAKE) install-doc
uninstall: check-installation
$(MAKE) uninstall-doc
$(MAKE) uninstall-meta
for p in `cd src; echo *`; do ( cd src/$$p; $(MAKE) uninstall ); done
$(MAKE) uninstall-config
clean:
for p in `cd src; echo *`; do ( cd src/$$p; $(MAKE) clean ); done
(cd itest-aux; $(MAKE) clean)
(cd tools/extract_args; $(MAKE) clean)
rm -f findlib.conf Makefile.packages
.PHONY: release
release: README
./release
README: doc/README
ln -s doc/README .
.PHONY: all-config
all-config: findlib.conf
.PHONY: findlib-template
findlib-template: findlib.conf.in
USE_CYGPATH="$(USE_CYGPATH)"; \
export USE_CYGPATH; \
cat findlib.conf.in | \
$(SH) tools/patch '@SITELIB@' '$(FINDLIB_OCAML_SITELIB)' | \
$(SH) tools/patch '@FINDLIB_PATH@' '$(FINDLIB_PATH)' -p >findlib.conf
if ./tools/cmd_from_same_dir ocamlc; then \
echo 'ocamlc="ocamlc.opt"' >>findlib.conf; \
fi
if ./tools/cmd_from_same_dir ocamlopt; then \
echo 'ocamlopt="ocamlopt.opt"' >>findlib.conf; \
fi
if ./tools/cmd_from_same_dir ocamldep; then \
echo 'ocamldep="ocamldep.opt"' >>findlib.conf; \
fi
if ./tools/cmd_from_same_dir ocamldoc; then \
echo 'ocamldoc="ocamldoc.opt"' >>findlib.conf; \
fi
.PHONY: findlib-relative
findlib-relative: FINDLIB_OCAML_SITELIB=$(RELATIVE_OCAML_SITELIB)
findlib-relative: findlib-template
.PHONY: findlib-absolute
findlib-absolute: FINDLIB_OCAML_SITELIB=$(OCAML_SITELIB)
findlib-absolute: findlib-template
findlib.conf: findlib.conf.in
if [ "$(RELATIVE_PATHS)" = "true" ]; then \
$(MAKE) findlib-relative; \
else \
$(MAKE) findlib-absolute; \
fi
.PHONY: install-doc
install-doc:
$(INSTALLDIR) "$(DESTDIR)$(prefix)$(OCAMLFIND_MAN)/man1" "$(DESTDIR)$(prefix)$(OCAMLFIND_MAN)/man3" "$(DESTDIR)$(prefix)$(OCAMLFIND_MAN)/man5"
-$(CP) doc/ref-man/ocamlfind.1 "$(DESTDIR)$(prefix)$(OCAMLFIND_MAN)/man1"
-$(CP) doc/ref-man/META.5 doc/ref-man/site-lib.5 doc/ref-man/findlib.conf.5 "$(DESTDIR)$(prefix)$(OCAMLFIND_MAN)/man5"
.PHONY: uninstall-doc
uninstall-doc:
rm -f "$(DESTDIR)$(prefix)$(OCAMLFIND_MAN)/man1/ocamlfind.1"
rm -f "$(DESTDIR)$(prefix)$(OCAMLFIND_MAN)/man3/Findlib.3"
rm -f "$(DESTDIR)$(prefix)$(OCAMLFIND_MAN)/man3/Topfind.3"
rm -f "$(DESTDIR)$(prefix)$(OCAMLFIND_MAN)/man5/META.5"
rm -f "$(DESTDIR)$(prefix)$(OCAMLFIND_MAN)/man5/site-lib.5"
.PHONY: check-installation
check-installation:
if [ "$(CHECK_BEFORE_INSTALL)" -eq 1 ]; then \
for x in camlp4 dbm graphics labltk num ocamlbuild; do \
if [ -f "$(prefix)$(OCAML_SITELIB)/$$x/META" ]; then \
if ! grep -Fq '[distributed with Ocaml]' "$(prefix)/$(OCAML_SITELIB)/$$x/META"; then \
rm -f site-lib-src/$$x/META; \
fi; \
fi; \
done; \
test -f "site-lib-src/num/META" || rm -f "site-lib-src/num-top/META"; \
fi
echo 'SITELIB_META =' > Makefile.packages.in
for x in `ls site-lib-src`; do test ! -f "site-lib-src/$$x/META" || echo $$x >> Makefile.packages.in; done
tr '\n' ' ' < Makefile.packages.in > Makefile.packages
rm Makefile.packages.in
.PHONY: install-meta
install-meta:
for x in $(SITELIB_META); do $(INSTALLDIR) "$(DESTDIR)$(prefix)$(OCAML_SITELIB)/$$x"; $(CP) site-lib-src/$$x/META "$(DESTDIR)$(prefix)$(OCAML_SITELIB)/$$x/META.tmp" && mv "$(DESTDIR)$(prefix)$(OCAML_SITELIB)/$$x/META.tmp" "$(DESTDIR)$(prefix)$(OCAML_SITELIB)/$$x/META"; done
$(INSTALLDIR) "$(DESTDIR)$(prefix)$(OCAML_SITELIB)/findlib"; $(CP) Makefile.packages "$(DESTDIR)$(prefix)$(OCAML_SITELIB)/findlib/Makefile.packages"
.PHONY: uninstall-meta
uninstall-meta:
for x in $(SITELIB_META); do rm -rf "$(DESTDIR)$(prefix)$(OCAML_SITELIB)/$$x"; done
.PHONY: install-config
install-config:
$(INSTALLDIR) "`dirname \"$(DESTDIR)$(prefix)$(OCAMLFIND_CONF)\"`"
@if [ -f "$(DESTDIR)$(prefix)$(OCAMLFIND_CONF)" ]; then echo "!!! Keeping old $(DESTDIR)$(prefix)$(OCAMLFIND_CONF) !!!"; fi
test -f "$(DESTDIR)$(prefix)$(OCAMLFIND_CONF)" || $(CP) findlib.conf "$(DESTDIR)$(prefix)$(OCAMLFIND_CONF)"
.PHONY: uninstall-config
uninstall-config:
@echo Leaving "$(OCAMLFIND_CONF)" installed, consider manual removal
.PHONY: interface-lists
interface-lists:
d=`ocamlc -where`; \
for x in `ls site-lib-src`; do \
iflist=""; \
if [ ! -f "site-lib-src/$$x/interfaces.in" ]; then continue; fi; \
cma_spec=`cat site-lib-src/$$x/interfaces.in`; \
for cma in $$d/$$cma_spec; do \
intf=`ocamlobjinfo $$cma | \
grep 'Unit name:' | \
sed -e 's/^ Unit name: //' | \
sort | \
tr '\n' ' '`; \
iflist="$$iflist $$intf"; \
done; \
echo "$$iflist" >"site-lib-src/$$x/interfaces.out"; \
done
######################################################################
# The following is from Pietro Abata <pietro.abate@anu.edu.au>
# to create MacOS X packages. I did not test it, just include it.
.PHONY: package-macosx
package-macosx: all opt
$(INSTALLDIR) package-macosx/root
export prefix=`pwd`/package-macosx/root && make install
export VERSION=1.1.2 && sh tools/make-package-macosx
clean-macosx:
sudo rm -rf package-macosx