about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--Makefile.new1
-rw-r--r--corepkgs/Makefile.new2
-rw-r--r--mk/install.mk44
-rw-r--r--mk/lib.mk9
-rw-r--r--mk/programs.mk2
-rw-r--r--mk/templates.mk6
-rw-r--r--scripts/Makefile.new39
7 files changed, 92 insertions, 11 deletions
diff --git a/Makefile.new b/Makefile.new
index b3ff2fc1b4ef..d63fa3ace35b 100644
--- a/Makefile.new
+++ b/Makefile.new
@@ -11,6 +11,7 @@ SUBS = \
   src/nix-daemon/Makefile.new \
   src/nix-log2xml/Makefile.new \
   src/bsdiff-4.3/Makefile.new \
+  scripts/Makefile.new \
   corepkgs/Makefile.new
 
 GLOBAL_CXXFLAGS = -I . -I src -I src/libutil -I src/libstore -I src/libmain -I src/libexpr
diff --git a/corepkgs/Makefile.new b/corepkgs/Makefile.new
index 5b500a679ae7..a04e3e3fbc1d 100644
--- a/corepkgs/Makefile.new
+++ b/corepkgs/Makefile.new
@@ -1,5 +1,5 @@
 corepkgs_FILES = nar.nix buildenv.nix buildenv.pl unpack-channel.nix derivation.nix fetchurl.nix imported-drv-to-derivation.nix
 
-$(foreach file,config.nix $(corepkgs_FILES),$(eval $(call install-file-in,$(datadir)/nix/corepkgs,$(d)/$(file))))
+$(foreach file,config.nix $(corepkgs_FILES),$(eval $(call install-data-in,$(d)/$(file),$(datadir)/nix/corepkgs)))
 
 template_files += $(d)/config.nix
diff --git a/mk/install.mk b/mk/install.mk
index 64fc6a696a2e..d6e75d2bfb13 100644
--- a/mk/install.mk
+++ b/mk/install.mk
@@ -9,15 +9,47 @@ define create-dir =
 endef
 
 
-# Add a rule for installing file $(2) in directory $(1).  The
-# directory will be created automatically.
+# Add a rule for installing file $(1) as file $(2) with mode $(3).
+# The directory containing $(2) will be created automatically.
+define install-file-as =
+
+  install: $(2)
+
+  $$(eval $$(call create-dir,$$(dir $(2))))
+
+  $(2): $(1) | $$(dir $(2))
+	$(QUIET) install -m $(3) $(1) $(2)
+
+endef
+
+
+# Add a rule for installing file $(1) in directory $(2) with mode
+# $(3).  The directory will be created automatically.
 define install-file-in =
+  $$(eval $$(call install-file-as,$(1),$(2)/$$(notdir $(1)),$(3)))
+endef
+
+
+define install-program-in =
+  $$(eval $$(call install-file-in,$(1),$(2),0755))
+endef
+
+
+define install-data-in =
+  $$(eval $$(call install-file-in,$(1),$(2),0644))
+endef
 
-  install:: $(1)/$(notdir $(2))
 
-  $$(eval $$(call create-dir,$(1)))
+# Install a symlink from $(2) to $(1).  Note that $(1) need not exist.
+define install-symlink =
 
-  $(1)/$(notdir $(2)): $(2) | $(1)
-	$(QUIET) install -t $(1) $(2)
+  install: $(2)
+
+  $$(eval $$(call create-dir,$$(dir $(2))))
+
+  $(2): | $$(dir $(2))
+	ln -sfn $(1) $(2)
 
 endef
+
+
diff --git a/mk/lib.mk b/mk/lib.mk
index b4a2fb265c3e..a1634bc002f9 100644
--- a/mk/lib.mk
+++ b/mk/lib.mk
@@ -6,8 +6,14 @@ template_files += Makefile.config
 include Makefile.config
 
 
+# Get rid of default suffixes. FIXME: is this a good idea?
+.SUFFIXES:
+
+
 # Initialise some variables.
 QUIET = @
+bin_SCRIPTS :=
+noinst_SCRIPTS :=
 
 
 # Pass -fPIC if we're building dynamic libraries.
@@ -46,6 +52,9 @@ $(foreach mf, $(SUBS), $(eval $(call include-sub-makefile, $(mf))))
 # Instantiate stuff.
 $(foreach lib, $(LIBS), $(eval $(call build-library,$(lib))))
 $(foreach prog, $(PROGRAMS), $(eval $(call build-program,$(prog))))
+$(foreach script, $(bin_SCRIPTS), $(eval $(call install-program-in,$(script),$(bindir))))
+$(foreach script, $(bin_SCRIPTS), $(eval programs_list += $(script)))
+$(foreach script, $(noinst_SCRIPTS), $(eval programs_list += $(script)))
 $(foreach template, $(template_files), $(eval $(call instantiate-template,$(template))))
 
 
diff --git a/mk/programs.mk b/mk/programs.mk
index 48f95c60c981..648a6053b4c2 100644
--- a/mk/programs.mk
+++ b/mk/programs.mk
@@ -30,7 +30,7 @@ define build-program =
 
   $$(eval $$(call create-dir,$$($(1)_INSTALL_DIR)))
 
-  install:: $$($(1)_INSTALL_PATH)
+  install: $$($(1)_INSTALL_PATH)
 
   ifeq ($(BUILD_SHARED_LIBS), 1)
 
diff --git a/mk/templates.mk b/mk/templates.mk
index 09bae50e8af0..fa91e25095d7 100644
--- a/mk/templates.mk
+++ b/mk/templates.mk
@@ -2,9 +2,9 @@
 # substitutes all ‘@var@’ variables set by the configure script).
 define instantiate-template =
 
-  $(1): $(1).in
-	./config.status --file $(1)
-
   clean_files += $(1)
 
 endef
+
+%: %.in
+	$(QUIET) ./config.status --quiet --file $@
diff --git a/scripts/Makefile.new b/scripts/Makefile.new
new file mode 100644
index 000000000000..2805128db8de
--- /dev/null
+++ b/scripts/Makefile.new
@@ -0,0 +1,39 @@
+nix_bin_scripts := \
+  $(d)/nix-build \
+  $(d)/nix-channel \
+  $(d)/nix-collect-garbage \
+  $(d)/nix-copy-closure \
+  $(d)/nix-generate-patches \
+  $(d)/nix-install-package \
+  $(d)/nix-prefetch-url \
+  $(d)/nix-pull \
+  $(d)/nix-push
+
+bin_SCRIPTS += $(nix_bin_scripts)
+
+nix_substituters := \
+  $(d)/copy-from-other-stores.pl \
+  $(d)/download-from-binary-cache.pl \
+  $(d)/download-using-manifests.pl
+
+nix_noinst_scripts := \
+  $(d)/build-remote.pl \
+  $(d)/find-runtime-roots.pl \
+  $(d)/nix-http-export.cgi \
+  $(d)/nix-profile.sh \
+  $(d)/nix-reduce-build \
+  $(nix_substituters)
+
+noinst_SCRIPTS += $(nix_noinst_scripts)
+
+profiledir = $(sysconfdir)/profile.d
+
+$(eval $(call install-file-as, $(d)/nix-profile.sh, $(profiledir)/nix.sh, 0644))
+$(eval $(call install-program-in, $(d)/find-runtime-roots.pl, $(libexecdir)/nix))
+$(eval $(call install-program-in, $(d)/build-remote.pl, $(libexecdir)/nix))
+$(foreach prog, $(nix_substituters), $(eval $(call install-program-in, $(prog), $(libexecdir)/nix/substituters)))
+$(eval $(call install-symlink, nix-build, $(bindir)/nix-shell))
+
+clean_files += $(nix_bin_scripts) $(nix_noinst_scripts)
+
+dist_files += $(d)/*.in