From 1ff424c47193173b24d997293f8b0b0c4efcdd48 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Tue, 17 Jan 2017 01:36:54 -0500 Subject: Build against newer versions of libraries. --- Makefile | 99 ++++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 59 insertions(+), 40 deletions(-) (limited to 'Makefile') 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 . --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 -- cgit v1.2.3