summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile99
1 files changed, 59 insertions, 40 deletions
diff --git a/Makefile b/Makefile
index 35f181b..507c903 100644
--- a/Makefile
+++ b/Makefile
@@ -13,34 +13,38 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
--include config.mk
-PACKAGE = parabola-hackers
-sysusersdir=$(prefix)/lib/sysusers.d
-systemunitdir=$(prefix)/lib/systemd/system
-conf_file = $(sysconfdir)/$(PACKAGE).yml
-shadow_file = $(sysconfdir)/nshd/shadow
-NET ?=
-#NET ?= FORCE
-user = nshd
-CFLAGS += -Wall -Wextra -Werror -pedantic
-CC = gcc -std=c99
-
-MAKEFLAGS += --no-builtin-rules
-topsrcdir := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST))))
-topoutdir := $(topsrcdir)
+include config.mk
include $(topsrcdir)/build-aux/Makefile.head.mk
+var = .var.
+programs = nshd nshd-setuid nshd-tester common.rb
+scripts = $(filter-out %.c %.o $(programs) common.rb common.rb.in,$(notdir $(wildcard $(srcdir)/bin/*)))
+
+.PHONY: FORCE
+.SECONDARY:
+.DELETE_ON_ERROR:
+
+#
+# Go language noise
+
CGO_CPPFLAGS = $(CPPFLAGS) -U_FORTIFY_SOURCE
CGO_CFLAGS = $(CFLAGS) -O0 -Wno-unused-parameter
CGO_ENABLED = 1
-programs = nshd nshd-setuid nshd-tester common.rb
-scripts = $(filter-out %.c %.o $(programs) common.rb common.rb.in,$(notdir $(wildcard $(srcdir)/bin/*)))
+cgo_variables = CGO_ENABLED CGO_CFLAGS CGO_CPPFLAGS CGO_CXXFLAGS CGO_LDFLAGS CC CXX
+$(foreach v,$(cgo_variables),$(eval $v ?=))
+export $(cgo_variables)
+
+$(outdir)/.gopath/src:
+ rm -rf -- $(@D)
+ mkdir $(@D)
+ ln -sr $(srcdir)/go $@
+ touch $@
+
+#
+# Generate (pre-tarball)
files.src.gen += LICENSE.lgpl-2.1.txt LICENSE.gpl-2.txt LICENSE.apache-2.0.txt
-files.out.gen += $(addprefix bin/,$(programs)) nshd.service nshd.sysusers
-files.out.int += bin/*.o .gopath/ .tmp* .var*
-files.sys.all += $(addprefix $(bindir)/,$(programs) $(scripts)) $(systemunitdir)/nshd.socket $(systemunitdir)/nshd.service $(sysusersdir)/nshd.conf $(conf_file) $(shadow_file)
$(srcdir)/LICENSE.lgpl-2.1.txt: $(NET)
curl https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt > $@
@@ -52,39 +56,57 @@ $(srcdir)/LICENSE.wtfpl-2.txt: $(NET)
curl http://www.wtfpl.net/txt/copying/ > $@
files.generate: go-generate
-go-generate:
- +GOPATH=$$PWD go generate ./...
+go-generate: .gopath
+ +GOPATH=$(abspath $(outdir)/.gopath) go generate git.lukeshu.com/...
.PHONY: go-generate
+at.targets += go-generate
+
+#
+# Build (post-tarball)
+files.out.all += $(addprefix bin/,$(programs)) nshd.service nshd.sysusers
+files.out.int += bin/*.o .gopath/ .gopath/* .tmp* .var*
+
+# Dependencies
+$(outdir)/bin/nshd-setuid: -ldl
+$(outdir)/nshd.service: $(var)user $(var)bindir
+$(outdir)/nshd.sysusers: $(var)user
+$(outdir)/bin/common.rb: $(var)conf_file
+
+$(outdir)/.gopath/bin/cmd-nshd: \
+ $(outdir)/go/cmd-nshd/main.go \
+ $(outdir)/go/parabola_hackers/users.go \
+ $(outdir)/go/parabola_hackers/passwords.go
+$(outdir)/go/cmd-nshd/main.go: $(var)conf_file
+$(outdir)/go/parabola_hackers/users.go: $(var)bindir
+$(outdir)/go/parabola_hackers/passwords.go: $(var)shadow_file
+
+# Go: copy out of .gopath
$(outdir)/bin/nshd: \
$(outdir)/bin/%: $(outdir)/.gopath/bin/cmd-%
cp -T $< $@
-$(outdir)/.gopath/src: $(golang.var)
- rm -rf -- $(@D)
- mkdir $(@D)
- ln -sr $(topsrcdir)/go $@
- touch $@
-$(outdir)/.gopath/bin/cmd-nshd: $(patsubst $(outdir)/.gopath/src/%,go/%,$(call golang.src,$(outdir)/.gopath)) $(_gen) $(_out)
- $(call golang.install,$(topoutdir)/.gopath,cmd-nshd)
+# Go: compile+link
+$(outdir)/.gopath/bin/cmd-nshd: \
+$(outdir)/.gopath/bin/cmd-%: FORCE go-generate
+ GOPATH=$(abspath $(outdir)/.gopath) go install $(@F)
+# C: compile
$(outdir)/%.o: $(srcdir)/%.c $(var)CC $(var)CPPFLAGS $(var)CFLAGS
$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $(filter-out $(var)%,$^)
+# C: link
$(outdir)/bin/nshd-tester $(outdir)/bin/nshd-setuid: \
$(outdir)/%: $(outdir)/%.o $(var)CC $(var)LDFLAGS
$(CC) $(LDFLAGS) -o $@ $(filter-out $(var)%,$^)
+# Basic variable substitution
$(outdir)/%: $(srcdir)/%.in
< $< sed $(foreach v,$(patsubst $(var)%,%,$(filter $(var)%,$^)), -e 's|@$v@|$($v)|g' ) > $@
-$(outdir)/bin/nshd-setuid: -ldl
-$(outdir)/nshd.service: $(var)user $(var)bindir
-$(outdir)/nshd.sysusers: $(var)user
-$(outdir)/bin/common.rb: $(var)conf_file
-$(outdir)/go/cmd-nshd/main.go: $(var)conf_file
-$(outdir)/go/parabola_hackers/users.go: $(var)bindir
-$(outdir)/go/parabola_hackers/passwords.go: $(var)shadow_file
-# Patterns
+# Install
+
+files.sys.all += $(addprefix $(bindir)/,$(programs) $(scripts)) $(systemunitdir)/nshd.socket $(systemunitdir)/nshd.service $(sysusersdir)/nshd.conf $(conf_file) $(shadow_file)
+
$(DESTDIR)$(bindir)/%: $(outdir)/bin/%
$(NORMAL_INSTALL)
install -TDm755 $< $@
@@ -113,7 +135,4 @@ $(DESTDIR)$(shadow_file): $(var)user $(DESTDIR)$(sysusersdir)/nshd.conf
-systemd-sysusers
-chown $(user):$(user) $(@D) $@
-.PHONY: FORCE
-.SECONDARY:
-.DELETE_ON_ERROR:
include $(topsrcdir)/build-aux/Makefile.tail.mk