diff --git a/mk/os161.mkdirs.mk b/mk/os161.mkdirs.mk index 8e4fe40..370eb87 100644 --- a/mk/os161.mkdirs.mk +++ b/mk/os161.mkdirs.mk @@ -1,5 +1,5 @@ # -# MKDIRS logic +# OS/161 build environment: MKDIRS logic # # This generates rules for all intermediate directories as well as # the directories listed. (That is, if you say MKDIRS=/usr/bin/foo diff --git a/mk/os161.script.mk b/mk/os161.script.mk new file mode 100644 index 0000000..6d579c8 --- /dev/null +++ b/mk/os161.script.mk @@ -0,0 +1,92 @@ +# +# OS/161 build environment: install scripts +# +# Usage: +# TOP=../.. +# .include "$(TOP)/mk/os161.config.mk" +# [defs go here] +# .include "$(TOP)/mk/os161.man.mk" +# [any extra rules go here] +# +# Variables controlling this file: +# +# EXECSCRIPTS Executable files to install. +# NONEXECSCRIPTS Non-executable files to install. +# +# SCRIPTDIR Directory under $(OSTREE) to install into, +# e.g. /hostbin. Should have a leading slash. +# + +ALLSCRIPTS=$(NONEXECSCRIPTS) + +# We may want these directories created. (Used by os161.baserules.mk.) +MKDIRS+=$(MYBUILDDIR) +MKDIRS+=$(INSTALLTOP)$(SCRIPTDIR) +MKDIRS+=$(OSTREE)$(SCRIPTDIR) + +# Default rule: "build" the executable scripts. This sets the hash-bang +# header with the interpreter path. +# (In make the first rule found is the default.) +all: all-local +all-local: $(MYBUILDDIR) .WAIT +.for S in $(EXECSCRIPTS) +ALLSCRIPTS+=$(MYBUILDDIR)/$(S) +all-local: $(MYBUILDDIR)/$(S) +$(MYBUILDDIR)/$(S): $(S) +# This must test $@, or assign another variable; it can't test $(S). +# (This is a bmake bug.) +.if !empty(@:M*.py) + echo '#!'"$(PYTHON_INTERPRETER)" > $@.new +.else + sed -n -e '1p' < $(S) > $@.new +.endif + sed -e '1d' < $(S) >> $@.new + chmod 755 $@.new + mv -f $@.new $@ +.endfor + +# depend doesn't need to do anything +depend-local: ; + +# +# Install: we can install into either $(INSTALLTOP) or $(OSTREE). +# When building the whole system, we always install into the staging +# area. However, if you're working on a particular program it is +# usually convenient to be able to install it directly to $(OSTREE) +# instead of doing a complete top-level install. +# +# Note that we make a hard link instead of a copy by default to reduce +# overhead. +# +install-staging-local: $(INSTALLTOP)$(SCRIPTDIR) .WAIT + +.for _F_ in $(ALLSCRIPTS) +install-staging-local: $(INSTALLTOP)$(SCRIPTDIR)/$(_F_:T) +$(INSTALLTOP)$(SCRIPTDIR)/$(_F_:T): $(_F_) + rm -f $(.TARGET) + ln $(_F_) $(.TARGET) || cp $(_F_) $(.TARGET) +.endfor + +install-local: $(OSTREE)$(SCRIPTDIR) .WAIT installscripts +installscripts: +.for _F_ in $(ALLSCRIPTS) + rm -f $(OSTREE)$(SCRIPTDIR)/$(_F_:T) + ln $(_F_) $(OSTREE)$(SCRIPTDIR)/$(_F_:T) || \ + cp $(_F_) $(OSTREE)$(SCRIPTDIR)/$(_F_:T) +.endfor + +# clean: remove build products +clean-local: +.for S in $(EXECSCRIPTS) + rm -f $(MYBUILDDIR)/$(S) +.endfor + +# Mark targets that don't represent files PHONY, to prevent various +# lossage if files by those names appear. +.PHONY: all all-local install-staging-local install-local installscripts +.PHONY: clean-local + +# Finally, get the shared definitions for the most basic rules. +.include "$(TOP)/mk/os161.baserules.mk" + +# End.