diff --git a/Makefile b/Makefile
index ce10008..87582d1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,24 +1,28 @@
 EXTENSION    = json_build
-EXTVERSION   = $(shell grep default_version $(EXTENSION).control | sed -e "s/default_version[[:space:]]*=[[:space:]]*'\([^']*\)'/\1/")
 
-DATA         = $(filter-out $(wildcard sql/*--*.sql),$(wildcard sql/*.sql))
-DOCS         = $(wildcard doc/*.md)
+srcdir = $(dir $(firstword $(MAKEFILE_LIST)))
+EXTVERSION = $(shell grep default_version $(srcdir)/$(EXTENSION).control | sed -e "s/default_version[[:space:]]*=[[:space:]]*'\([^']*\)'/\1/")
+
+DATA         = $(filter-out $(wildcard $(srcdir)/sql/*--*.sql),$(wildcard $(srcdir)/sql/*.sql))
+DOCS         = $(wildcard $(srcdir)/doc/*.md)
 USE_MODULE_DB = 1
-TESTS        = $(wildcard test/sql/*.sql)
+TESTS        = $(wildcard $(srcdir)/test/sql/*.sql)
 REGRESS_OPTS = --inputdir=test --outputdir=test \
 	--load-extension=$(EXTENSION)
-REGRESS      = $(patsubst test/sql/%.sql,%,$(TESTS))
+REGRESS      = $(patsubst $(srcdir)/test/sql/%.sql,%,$(TESTS))
 MODULE_big      = $(EXTENSION)
-OBJS         = $(patsubst src/%.c,src/%.o,$(wildcard src/*.c))
+OBJS         = $(patsubst $(srcdir)/src/%.c,$(srcdir)/src/%.o,$(wildcard $(srcdir)/src/*.c))
 PG_CONFIG    = pg_config
 
 all: sql/$(EXTENSION)--$(EXTVERSION).sql
 
 sql/$(EXTENSION)--$(EXTVERSION).sql: sql/$(EXTENSION).sql
+	$(MKDIR_P) sql
 	cp $< $@
 
+
 DATA_built = sql/$(EXTENSION)--$(EXTVERSION).sql
-DATA = $(filter-out sql/$(EXTENSION)--$(EXTVERSION).sql, $(wildcard sql/*--*.sql))
+DATA = $(filter-out $(srcdir)/sql/$(EXTENSION)--$(EXTVERSION).sql, $(wildcard $(srcdir)/sql/*--*.sql))
 EXTRA_CLEAN = sql/$(EXTENSION)--$(EXTVERSION).sql
 
 PGXS := $(shell $(PG_CONFIG) --pgxs)