From caf029024616464acdd51fbf9670bea9eea7b1c0 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Wed, 15 Jun 2016 19:32:19 -0400 Subject: use autothing --- Makefile | 95 ++++++++++++++--------------- build-aux/Makefile.each.tail/09-generate.mk | 1 + build-aux/Makefile.once.head/09-generate.mk | 1 + build-aux/Makefile.once.head/20-golang.mk | 16 +++++ build-aux/Makefile.once.head/20-var.mk | 7 +++ golang.mk | 26 -------- src/lukeshu.com/git/go/libnslcd.git | 2 +- 7 files changed, 72 insertions(+), 76 deletions(-) create mode 100644 build-aux/Makefile.each.tail/09-generate.mk create mode 100644 build-aux/Makefile.once.head/09-generate.mk create mode 100644 build-aux/Makefile.once.head/20-golang.mk create mode 100644 build-aux/Makefile.once.head/20-var.mk delete mode 100644 golang.mk 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 # . -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 . + +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 index dad3de8..99adee2 160000 --- a/src/lukeshu.com/git/go/libnslcd.git +++ b/src/lukeshu.com/git/go/libnslcd.git @@ -1 +1 @@ -Subproject commit dad3de8e9835a11b1df9e718eef3faa50459ccbb +Subproject commit 99adee24d96f27f08fecc0a56b3c26c688045290 -- cgit v1.2.3