summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile95
-rw-r--r--build-aux/Makefile.each.tail/09-generate.mk1
-rw-r--r--build-aux/Makefile.once.head/09-generate.mk1
-rw-r--r--build-aux/Makefile.once.head/20-golang.mk16
-rw-r--r--build-aux/Makefile.once.head/20-var.mk7
-rw-r--r--golang.mk26
m---------src/lukeshu.com/git/go/libnslcd.git0
7 files changed, 71 insertions, 75 deletions
diff --git a/Makefile b/Makefile
index 7f98070..80031c7 100644
--- a/Makefile
+++ b/Makefile
@@ -19,74 +19,71 @@
# License along with this manual; if not, see
# <http://www.gnu.org/licenses/>.
-MAKEFLAGS += --no-builtin-rules
-
-prefix = /usr/local
-bindir = $(prefix)/bin
-libdir = $(prefix)/lib
+PACKAGE = parabola-hackers
systemddir = $(libdir)/systemd
-
-Q ?= @
+conf_file = $(sysconfdir)/$(PACKAGE).yml
+NET ?=
#NET ?= FORCE
-
user = nshd
group = nshd
+CFLAGS = -Wall -Wextra -Werror -pedantic
+CC = gcc -std=c99
+
+MAKEFLAGS += --no-builtin-rules
+topsrcdir := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST))))
+topoutdir := $(topsrcdir)
+include $(topsrcdir)/build-aux/Makefile.head.mk
-CFLAGS = -std=c99 -Wall -Wextra -Werror -pedantic
CGO_CFLAGS = $(CFLAGS) -Wno-unused-parameter
CGO_ENABLED = 1
-deps += gopkg.in/yaml.v2
-deps += lukeshu.com/git/go/libgnulinux.git
-deps += lukeshu.com/git/go/libnslcd.git
-deps += lukeshu.com/git/go/libsystemd.git
-
-srcdir := $(abspath $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))))
-topdir := $(srcdir)
+at.subdirs += src/lukeshu.com/git/go/libnslcd.git/proto
-subdirs = src/lukeshu.com/git/go/libnslcd.git/proto
+scripts = $(notdir $(wildcard $(srcdir)/scripts/*))
-generate += $(addprefix $(topdir)/src/,$(deps))
-generate += $(topdir)/LICENSE.lgpl-2.1.txt $(topdir)/LICENSE.gpl-2.txt $(topdir)/LICENSE.apache-2.0.txt
-generate_secondary += $(topdir)/src/*.*/
-build += $(topdir)/bin/nshd $(topdir)/nshd.service $(topdir)/nshd.socket $(topdir)/test/runner
-build_secondary += $(topdir)/bin $(topdir)/pkg $(topdir)/test/*.o .var.*
-install += $(addprefix $(DESTDIR),$(bindir)/nshd $(systemddir)/system/nshd.socket $(systemddir)/system/nshd.service)
+std.gen_files += LICENSE.lgpl-2.1.txt LICENSE.gpl-2.txt LICENSE.apache-2.0.txt
+std.out_files += bin/nshd nshd.service nshd.socket test/runner
+std.sys_files += $(addprefix $(bindir)/,nshd $(scripts)) $(systemddir)/system/nshd.socket $(systemddir)/system/nshd.service
+std.clean_files += test/*.o pkg/
-ifeq (1,$(words $(MAKEFILE_LIST)))
- include $(topdir)/common.mk
-endif
-src/lukeshu.com/git/go/libnslcd.git/proto/Makefile: $(topdir)/src/lukeshu.com/git/go/libnslcd.git
-
-$(topdir)/LICENSE.lgpl-2.1.txt: $(NET)
+$(srcdir)/LICENSE.lgpl-2.1.txt: $(NET)
curl https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt > $@
-$(topdir)/LICENSE.gpl-2.txt: $(NET)
+$(srcdir)/LICENSE.gpl-2.txt: $(NET)
curl https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt > $@
-$(topdir)/LICENSE.apache-2.0.txt: $(NET)
+$(srcdir)/LICENSE.apache-2.0.txt: $(NET)
curl https://www.apache.org/licenses/LICENSE-2.0 > $@
-$(topdir)/LICENSE.wtfpl-2.txt: $(NET)
+$(srcdir)/LICENSE.wtfpl-2.txt: $(NET)
curl http://www.wtfpl.net/txt/copying/ > $@
-
-include $(topdir)/golang.mk
-
-$(call goget,$(topdir),$(deps))
-$(topdir)/bin/nshd: $(generate) $(configure) $(call gosrc,$(topdir))
- $(call goinstall,$(topdir),nshd)
+$(outdir)/bin/nshd: private golang.FLAGS+=-ldflags '-X nshd.conf_file=$(conf_file)'
+$(outdir)/bin/nshd: src/lukeshu.com/git/go/libnslcd.git/proto/server/interface_backend.go
+$(outdir)/bin/nshd: src/lukeshu.com/git/go/libnslcd.git/proto/server/func_handlerequest.go
+$(outdir)/bin/nshd: src/lukeshu.com/git/go/libnslcd.git/proto/server/type_nilbackend.go
+$(outdir)/bin/nshd: $(call golang.src,$(srcdir)) $(var)conf_file
+ $(call golang.install,$(topsrcdir),nshd)
-%.o: %.c .var.CC .var.CPPFLAGS .var.CFLAGS
- $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $(filter-out .var.%,$^)
-%: %.o .var.CC .var.LDFLAGS .var.LOADLIBES .var.LDLIBS
- $(CC) $(LDFLAGS) -o $@ $(filter-out .var.%,$^) $(LOADLIBES) $(LDLIBS)
+$(outdir)/%.o: $(srcdir)/%.c $(var)CC $(var)CPPFLAGS $(var)CFLAGS
+ $(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $(filter-out $(var)%,$^)
+$(outdir)/%: $(outdir)/%.o $(var)CC $(var)LDFLAGS
+ $(CC) $(LDFLAGS) -o $@ $(filter-out $(var)%,$^)
-%: %.in
- < $< sed $(foreach v,$(patsubst .var.%,%,$(filter .var.%,$^)), -e 's|@$v@|$($v)|g' ) > $@
-$(topdir)/nshd.service: .var.bindir .var.user .var.group
-$(topdir)/nshd.socket: .var.user .var.group
+$(outdir)/%: $(srcdir)/%.in
+ < $< sed $(foreach v,$(patsubst $(var)%,%,$(filter $(var)%,$^)), -e 's|@$v@|$($v)|g' ) > $@
+$(outdir)/nshd.service: $(var)user $(var)group $(var)bindir
+$(outdir)/nshd.socket: $(var)user $(var)group
-$(DESTDIR)$(bindir)/%: bin/%
+$(DESTDIR)$(bindir)/%: $(outdir)/bin/%
install -TDm755 $< $@
-$(DESTDIR)$(systemddir)/system/%.socket: %.socket
+$(DESTDIR)$(bindir)/%: $(srcdir)/scripts/%
+ install -TDm755 $< $@
+$(DESTDIR)$(bindir)/common.rb: $(srcdir)/scripts/common.rb
+ install -TDm644 $< $@
+$(DESTDIR)$(systemddir)/system/%.socket: $(outdir)/%.socket
install -TDm644 $< $@
-$(DESTDIR)$(systemddir)/system/%.service: %.service
+$(DESTDIR)$(systemddir)/system/%.service: $(outdir)/%.service
install -TDm644 $< $@
+
+.PHONY: FORCE
+.SECONDARY:
+.DELETE_ON_ERROR:
+include $(topsrcdir)/build-aux/Makefile.tail.mk
diff --git a/build-aux/Makefile.each.tail/09-generate.mk b/build-aux/Makefile.each.tail/09-generate.mk
new file mode 100644
index 0000000..3a8566f
--- /dev/null
+++ b/build-aux/Makefile.each.tail/09-generate.mk
@@ -0,0 +1 @@
+$(outdir)/generate: $(std.gen_files)
diff --git a/build-aux/Makefile.once.head/09-generate.mk b/build-aux/Makefile.once.head/09-generate.mk
new file mode 100644
index 0000000..b07bb3f
--- /dev/null
+++ b/build-aux/Makefile.once.head/09-generate.mk
@@ -0,0 +1 @@
+at.phony += generate
diff --git a/build-aux/Makefile.once.head/20-golang.mk b/build-aux/Makefile.once.head/20-golang.mk
new file mode 100644
index 0000000..ed3056c
--- /dev/null
+++ b/build-aux/Makefile.once.head/20-golang.mk
@@ -0,0 +1,16 @@
+# Copyright 2015-2016 Luke Shumaker
+
+golang.Q ?= @
+golang.FLAGS ?=
+
+_golang.cgo_variables = CGO_ENABLED CGO_CFLAGS CGO_CPPFLAGS CGO_CXXFLAGS CGO_LDFLAGS CC CXX
+$(foreach v,$(_golang.cgo_variables),$(eval $v ?=))
+export $(_golang.cgo_variables)
+
+_golang.src_cmd = find -L $1/src -name '.*' -prune -o \( -type f \( -false $(foreach e,go c s S cc cpp cxx h hh hpp hxx,-o -name '*.$e') \) -o -type d \) -print
+golang.src = $(shell $(_golang.src_cmd)) $(addprefix $(var),$(_golang.cgo_variables))
+
+define golang.install
+ GOPATH='$(abspath $1)' go install $(golang.FLAGS) $2
+ $(golang.Q)true $(foreach e,$(notdir $2), && test -f $1/bin/$e -a -x $1/bin/$e && touch $1/bin/$e)
+endef
diff --git a/build-aux/Makefile.once.head/20-var.mk b/build-aux/Makefile.once.head/20-var.mk
new file mode 100644
index 0000000..5f97ef7
--- /dev/null
+++ b/build-aux/Makefile.once.head/20-var.mk
@@ -0,0 +1,7 @@
+# Copyright 2015-2016 Luke Shumaker <lukeshu@sbcglobal.net>.
+
+var = $(patsubst ./%,%,$(topoutdir)/.var.)
+
+$(var)%: FORCE
+ @printf '%s' '$(subst ','\'',$($*))' | sed 's|^|#|' | $(WRITE_IFCHANGED) $@
+-include $(wildcard $(var)*)
diff --git a/golang.mk b/golang.mk
deleted file mode 100644
index 222bbdf..0000000
--- a/golang.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 2015 Luke Shumaker
-
-_golang_cgo_variables = CGO_ENABLED CGO_CFLAGS CGO_CPPFLAGS CGO_CXXFLAGS CGO_LDFLAGS CC CXX
-export $(_golang_cgo_variables)
-_golang_src_cmd = find -L $1/src -name '.*' -prune -o \( -type f \( -false $(foreach e,go c s S cc cpp cxx h hh hpp hxx,-o -name '*.$e') \) -o -type d \) -print
-
-# Iterate over external dependencies, and create a rule to download it
-goget = $(foreach d,$2,$(eval $1/src/$d: $(NET); GOPATH='$(abspath $1)' go get -d -u $d))
-
-#|| { rm -rf -- $$@; false; }))
-
-gosrc = $(shell $(_golang_src_cmd)) $(addprefix .var.,$(_golang_cgo_variables))
-define goinstall
- $(Q)for target in $(addprefix $1/bin/,$(notdir $2)); do \
- if test -e $$target; then \
- for dep in $(filter .var.%,$^); do \
- if test $$dep -nt $$target; then \
- rm -rf -- $1/bin $1/pkg || exit $$?; \
- exit 0; \
- fi \
- done \
- fi \
- done
- GOPATH='$(abspath $1)' go install $2
- $(Q)true $(foreach e,$(notdir $2), && test -f $1/bin/$e -a -x $1/bin/$e && touch $1/bin/$e)
-endef
diff --git a/src/lukeshu.com/git/go/libnslcd.git b/src/lukeshu.com/git/go/libnslcd.git
-Subproject dad3de8e9835a11b1df9e718eef3faa50459ccb
+Subproject 99adee24d96f27f08fecc0a56b3c26c68804529