Browse Source

Change package index file format and deps handling

This commit adds two columns to the package index file: the
method used to retrieve the dependency (only git supported
at this point) and the preferred version (a commit or
equivalent in the case of git).

Now that all the necessary information is in the package
index file, the dep_* lines become optional. It is possible
to fetch dependencies by just listing it in the DEPS variable,
for example this would fetch both cowboy and jsx:

DEPS = cowboy jsx

The dep_* line can be used to override the defaults. It now
takes three values, the method used to retrieve the dependency,
the repository URL and the preferred version. The only change
from before is the first value being added.
Loïc Hoguin 11 years ago
parent
commit
0dc1feba66
2 changed files with 27 additions and 15 deletions
  1. 18 15
      core/deps.mk
  2. 9 0
      packages.v2.tsv

+ 18 - 15
core/deps.mk

@@ -22,10 +22,10 @@ endif
 endif
 endif
 export ERL_LIBS
 export ERL_LIBS
 
 
-PKG_FILE ?= $(CURDIR)/.erlang.mk.packages.v1
+PKG_FILE ?= $(CURDIR)/.erlang.mk.packages.v2
 export PKG_FILE
 export PKG_FILE
 
 
-PKG_FILE_URL ?= https://raw.githubusercontent.com/extend/erlang.mk/master/packages.v1.tsv
+PKG_FILE_URL ?= https://raw.githubusercontent.com/extend/erlang.mk/master/packages.v2.tsv
 
 
 # Core targets.
 # Core targets.
 
 
@@ -42,17 +42,20 @@ distclean:: distclean-deps distclean-pkg
 
 
 # Deps related targets.
 # Deps related targets.
 
 
+define dep_fetch_git
+	git clone -n -- $(2) $(DEPS_DIR)/$(1)
+	cd $(DEPS_DIR)/$(1) ; git checkout -q $(3)
+endef
+
 define dep_fetch
 define dep_fetch
 	@mkdir -p $(DEPS_DIR)
 	@mkdir -p $(DEPS_DIR)
-ifeq (,$(findstring pkg://,$(word 1,$(dep_$(1)))))
-	git clone -n -- $(word 1,$(dep_$(1))) $(DEPS_DIR)/$(1)
-else
+ifeq (,$(dep_$(1)))
 	@if [ ! -f $(PKG_FILE) ]; then $(call core_http_get,$(PKG_FILE),$(PKG_FILE_URL)); fi
 	@if [ ! -f $(PKG_FILE) ]; then $(call core_http_get,$(PKG_FILE),$(PKG_FILE_URL)); fi
-	git clone -n -- `awk 'BEGIN { FS = "\t" }; \
-		$$$$1 == "$(subst pkg://,,$(word 1,$(dep_$(1))))" { print $$$$2 }' \
-		$(PKG_FILE)` $(DEPS_DIR)/$(1)
+	$(eval DEP_FETCH_PKG := $(shell awk 'BEGIN { FS = "\t" }; $$1 == "$(1)" { print $$2 " " $$3 " "$$4 }' $(PKG_FILE)))
+	$(call dep_fetch_$(word 1,$(DEP_FETCH_PKG)),$(1),$(word 2,$(DEP_FETCH_PKG)),$(word 3,$(DEP_FETCH_PKG)))
+else
+	$(call dep_fetch_$(word 1,$(dep_$(1))),$(1),$(word 2,$(dep_$(1))),$(word 3,$(dep_$(1))))
 endif
 endif
-	cd $(DEPS_DIR)/$(1) ; git checkout -q $(word 2,$(dep_$(1)))
 endef
 endef
 
 
 define dep_target
 define dep_target
@@ -73,17 +76,17 @@ $(PKG_FILE):
 pkg-list: $(PKG_FILE)
 pkg-list: $(PKG_FILE)
 	@cat $(PKG_FILE) | awk 'BEGIN { FS = "\t" }; { print \
 	@cat $(PKG_FILE) | awk 'BEGIN { FS = "\t" }; { print \
 		"Name:\t\t" $$1 "\n" \
 		"Name:\t\t" $$1 "\n" \
-		"Repository:\t" $$2 "\n" \
-		"Website:\t" $$3 "\n" \
-		"Description:\t" $$4 "\n" }'
+		"Repository:\t" $$3 "\n" \
+		"Website:\t" $$5 "\n" \
+		"Description:\t" $$6 "\n" }'
 
 
 ifdef q
 ifdef q
 pkg-search: $(PKG_FILE)
 pkg-search: $(PKG_FILE)
 	@cat $(PKG_FILE) | grep -i ${q} | awk 'BEGIN { FS = "\t" }; { print \
 	@cat $(PKG_FILE) | grep -i ${q} | awk 'BEGIN { FS = "\t" }; { print \
 		"Name:\t\t" $$1 "\n" \
 		"Name:\t\t" $$1 "\n" \
-		"Repository:\t" $$2 "\n" \
-		"Website:\t" $$3 "\n" \
-		"Description:\t" $$4 "\n" }'
+		"Repository:\t" $$3 "\n" \
+		"Website:\t" $$5 "\n" \
+		"Description:\t" $$6 "\n" }'
 else
 else
 pkg-search:
 pkg-search:
 	@echo "Usage: make pkg-search q=STRING"
 	@echo "Usage: make pkg-search q=STRING"

+ 9 - 0
packages.v2.tsv

@@ -0,0 +1,9 @@
+bullet	git	https://github.com/extend/bullet	master	http://ninenines.eu	Simple, reliable, efficient streaming for Cowboy.
+cowboy	git	https://github.com/extend/cowboy	master	http://ninenines.eu	Small, fast and modular HTTP server.
+cowlib	git	https://github.com/extend/cowlib	master	http://ninenines.eu	Support library for manipulating Web protocols.
+erlydtl	git	https://github.com/erlydtl/erlydtl	master	https://github.com/erlydtl/erlydtl	Django Template Language for Erlang.
+gun	git	https://github.com/extend/gun	master	http//ninenines.eu	Asynchronous SPDY, HTTP and Websocket client written in Erlang.
+jsx	git	https://github.com/talentdeficit/jsx	master	https://github.com/talentdeficit/jsx	An Erlang application for consuming, producing and manipulating JSON.
+proper	git	https://github.com/manopapad/proper	master	http://proper.softlab.ntua.gr	PropEr: a QuickCheck-inspired property-based testing tool for Erlang.
+ranch	git	https://github.com/extend/ranch	master	http://ninenines.eu	Socket acceptor pool for TCP protocols.
+sheriff	git	https://github.com/extend/sheriff	master	http://ninenines.eu	Parse transform for type based validation.