diff options
Diffstat (limited to 'Makefile')
-rw-r--r--[l---------] | Makefile | 141 |
1 files changed, 140 insertions, 1 deletions
@@ -1 +1,140 @@ -build-aux/Makefile.README.mk
\ No newline at end of file +# Copyright 2015-2017 Luke Shumaker <lukeshu@sbcglobal.net>. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# 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 +include $(topsrcdir)/build-aux/Makefile.head.mk + +files.src.src := $(filter-out go/golang.org/x/sys/plan9/% go/golang.org/x/sys/windows/%,$(files.src.src)) +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 + +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 + +$(srcdir)/LICENSE.lgpl-2.1.txt: $(NET) + curl https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt > $@ +$(srcdir)/LICENSE.gpl-2.txt: $(NET) + curl https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt > $@ +$(srcdir)/LICENSE.apache-2.0.txt: $(NET) + curl https://www.apache.org/licenses/LICENSE-2.0 > $@ +$(srcdir)/LICENSE.wtfpl-2.txt: $(NET) + curl http://www.wtfpl.net/txt/copying/ > $@ + +files.generate: go-generate +go-generate: .gopath/src + +GOPATH=$(abspath $(outdir)/.gopath) go generate git.lukeshu.com/... +.PHONY: go-generate +files.src.int += .gopath/ .gopath/* +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/nshd: \ + $(outdir)/go/nshd/main.go \ + $(outdir)/go/nshd/nshd_files/users.go \ + $(outdir)/go/nshd/nshd_files/passwords.go +$(outdir)/go/nshd/main.go: $(var)conf_file +$(outdir)/go/nshd/nshd_files/users.go: $(var)bindir +$(outdir)/go/nshd/nshd_files/passwords.go: $(var)shadow_file + +# Go: copy out of .gopath +$(outdir)/bin/nshd: \ +$(outdir)/bin/%: $(outdir)/.gopath/bin/% + cp -T $< $@ +# Go: compile+link +$(outdir)/.gopath/bin/nshd: \ +$(outdir)/.gopath/bin/%: 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' ) > $@ + + +# 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 $< $@ +$(DESTDIR)$(systemunitdir)/%.socket: $(outdir)/%.socket + $(NORMAL_INSTALL) + install -TDm644 $< $@ +$(DESTDIR)$(systemunitdir)/%.service: $(outdir)/%.service + $(NORMAL_INSTALL) + install -TDm644 $< $@ +$(DESTDIR)$(sysusersdir)/%.conf: $(outdir)/%.sysusers + $(NORMAL_INSTALL) + install -TDm644 $< $@ + +# Specific files +$(DESTDIR)$(bindir)/common.rb: $(srcdir)/bin/common.rb + $(NORMAL_INSTALL) + install -TDm644 $< $@ +$(DESTDIR)$(conf_file): $(srcdir)/parabola-hackers.yml + $(NORMAL_INSTALL) + install -TDm644 $< $@ +$(DESTDIR)$(shadow_file): $(var)user $(DESTDIR)$(sysusersdir)/nshd.conf + $(NORMAL_INSTALL) + install -d $(@D) + touch $@ + $(POST_INSTALL) + -systemd-sysusers + -chown $(user):$(user) $(@D) $@ + +include $(topsrcdir)/build-aux/Makefile.tail.mk |