# Rules to fetch, build and install external source packages. # # TODO: # - rules for pre-req dependencies # - rules to run tests before installing # - build and run in chroot # - detect inflate command # # Done: # - rules to apply patches # arc ?= $(notdir $(url)) configure_cmd ?= ./configure build_cmd ?= make -j8 install_cmd ?= sudo make install uninstall_cmd ?= sudo make uninstall ifeq ($(suffix $(arc)), .gz) inflate_cmd ?= gzip -cd else ifeq ($(suffix $(arc)), .xz) inflate_cmd ?= xz -cd else ifeq ($(suffix $(arc)), .bz2) inflate_cmd ?= bzip2 -cd endif ifdef git_url fetch_cmd = git clone --depth=1 $(git_url) extract_cmd = : dir ?= $(notdir $(git_url)) else fetch_cmd = curl -L $(url) -o $(arc) extract_cmd = $(inflate_cmd) < $(arc) | tar xf - dir ?= $(basename $(basename $(arc))) endif clean: rm -rf .install .build .patched .configure .extract .fetch $(dir) debug: @echo arc = $(arc) @echo dir = $(dir) genpatch: find $(dir) -name *.orig | while read -r f; do diff -u $$f $${f%.orig}; done > $(dir).patch || true uninstall: .install cd $(dir) && $(uninstall_cmd) rm .install install: .install build: .build configure: .configure patch: .patched extract: .extract fetch: .fetch .install: .build cd $(dir) && $(install_cmd) @touch $@ .build: .configure cd $(dir) && $(build_cmd) @touch $@ .configure: .patched cd $(dir) && $(configure_cmd) $(configure_flags) @touch $@ .patched: .extract for f in $$(ls *.patch); do (cd $(dir) && patch -p1 < ../$$f) || break; done @touch $@ .extract: .fetch $(extract_cmd) @touch $@ .fetch: $(fetch_cmd) @touch $@