From ba29df2ef0ab32313e332ce7ce4e086f29d8d07d Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Thu, 3 Mar 2016 00:36:34 -0500 Subject: buildsystem --- .gitignore | 1 + Makefile | 16 ++--- automake.head.mk | 58 +++++++++++++++ automake.tail.mk | 139 ++++++++++++++++++++++++++++++++++++ automake.txt | 105 +++++++++++++++++++++++++++ common.bottom.mk | 136 ----------------------------------- common.each.head.mk | 16 +++++ common.each.mk | 35 --------- common.each.tail.mk | 42 +++++++++++ common.once.head.mk | 27 +++++++ common.once.mk | 32 --------- common.once.tail.mk | 19 +++++ common.top.mk | 49 ------------- config.mk | 46 ------------ config.mk.in | 47 ++++++++++++ configure | 104 +++++++++------------------ modules/Makefile | 8 +-- modules/blobs/Makefile.inc.mk | 8 +-- modules/comments/Makefile.inc.mk | 4 +- modules/date.author/Makefile.inc.mk | 4 +- modules/git-fast-import/.#parse.sh | 1 - modules/module.mk | 11 +-- modules/tags/Makefile.inc.mk | 4 +- modules/tree/Makefile.inc.mk | 4 +- wrapper/Makefile | 15 ++-- 25 files changed, 525 insertions(+), 406 deletions(-) create mode 100644 automake.head.mk create mode 100644 automake.tail.mk create mode 100644 automake.txt delete mode 100644 common.bottom.mk create mode 100644 common.each.head.mk delete mode 100644 common.each.mk create mode 100644 common.each.tail.mk create mode 100644 common.once.head.mk delete mode 100644 common.once.mk create mode 100644 common.once.tail.mk delete mode 100644 common.top.mk delete mode 100644 config.mk create mode 100644 config.mk.in delete mode 120000 modules/git-fast-import/.#parse.sh diff --git a/.gitignore b/.gitignore index c455e80..2af088f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/config.mk /config.h /config.sh *.o diff --git a/Makefile b/Makefile index 55c26ef..1291709 100644 --- a/Makefile +++ b/Makefile @@ -15,16 +15,14 @@ # along with this program. If not, see . include $(dir $(lastword $(MAKEFILE_LIST)))/config.mk -include $(topsrcdir)/common.top.mk +include $(topsrcdir)/automake.head.mk -subdirs = wrapper modules +am_subdirs = wrapper modules -src_files = Makefile -src_files += common.top.mk common.bottom.mk -src_files += common.each.mk common.once.mk -src_files += config.mk configure -src_files += COPYING HACKING README -out_files = config.sh config.h +makefiles = Makefile automake.head.mk automake.tail.mk automake.txt common.once.head.mk common.once.tail.mk common.each.head.mk common.each.tail.mk config.mk + +am_src_files = COPYING HACKING README configure config.mk.in +am_out_files = config.sh config.h config_vars = $(shell $(SED) -n 's/^\s*\([a-z][^ !?:=]*\).*=.*/\1/p' $(topoutdir)/config.mk) PACKAGE VERSION DESTDIR $(outdir)/config.sh: $(outdir)/config.mk @@ -32,4 +30,4 @@ $(outdir)/config.sh: $(outdir)/config.mk $(outdir)/config.h: $(outdir)/config.sh . $(abspath $<) && $(PRINTF) '#define %s "%s"\n' $(foreach v,$(config_vars),$v '$($v)') PACKAGE_UPPER $${PACKAGE^^} | LC_ALL=C $(SORT) > $@ -include $(topsrcdir)/common.bottom.mk +include $(topsrcdir)/automake.tail.mk diff --git a/automake.head.mk b/automake.head.mk new file mode 100644 index 0000000..ad7154c --- /dev/null +++ b/automake.head.mk @@ -0,0 +1,58 @@ +# Copyright (C) 2015-2016 Luke Shumaker +# +# 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 . + +_am = am_ + +_am_noslash = $(patsubst %/.,%,$(patsubst %/,%,$1)) +# These are all $(call _am_func,parent,child) +#_am_relto = $(if $2,$(shell realpath -s --relative-to='$1' $2)) +_am_is_subdir = $(filter $(abspath $1)/%,$(abspath $2)/.) +_am_relto_helper = $(if $(call _am_is_subdir,$1,$2),$(patsubst $1/%,%,$(addsuffix /.,$2)),$(addprefix ../,$(call _am_relto_helper,$(patsubst %/,%,$(dir $1)),$2))) +_am_relto = $(call _am_noslash,$(call _am_relto_helper,$(call _am_noslash,$(abspath $1)),$(call _am_noslash,$(abspath $2)))) +# Note that _am_is_subdir says that a directory is a subdirectory of +# itself. +_am_path = $(call _am_relto,.,$1) + +## Declare the default target +all: build +.PHONY: all + +## Set topoutdir, outdir, and srcdir (assumes that topsrcdir is +## already set, and that $(topoutdir)/config.mk has been included) +ifeq ($(topoutdir),) +topoutdir := $(call _am_path,$(dir $(lastword $(filter %/config.mk config.mk,$(MAKEFILE_LIST))))) +endif + outdir := $(call _am_path,$(dir $(lastword $(filter-out %.mk,$(MAKEFILE_LIST))))) + srcdir := $(call _am_path,$(topsrcdir)/$(call _am_relto,$(topoutdir),$(outdir))) + +_am_included_makefiles := $(_am_included_makefiles) $(call _am_path,$(outdir)/Makefile) + +## Empty variables for use by each Makefile +$(_am)subdirs = +$(_am)depdirs = + +$(_am)src_files = +$(_am)gen_files = +$(_am)cfg_files = +$(_am)out_files = +$(_am)sys_files = + +$(_am)clean_files = +$(_am)slow_files = + +ifeq ($(_am_NO_ONCE),) +include $(topsrcdir)/common.once.head.mk +endif +include $(topsrcdir)/common.each.head.mk diff --git a/automake.tail.mk b/automake.tail.mk new file mode 100644 index 0000000..a24820b --- /dev/null +++ b/automake.tail.mk @@ -0,0 +1,139 @@ +# Copyright (C) 2015-2016 Luke Shumaker +# +# 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 . + +include $(topsrcdir)/common.each.tail.mk + + +# Aggregate variables + +# Add some more defaults to the *_files variables +$(_am)clean_files += $($(_am)gen_files) $($(_am)cfg_files) $($(_am)out_files) + +# Now namespace the *_files variables +define _am_save_variables +_am_src_files/$(outdir) = $(addprefix $(srcdir)/,$($(_am)src_files)) +_am_gen_files/$(outdir) = $(addprefix $(srcdir)/,$($(_am)gen_files)) +_am_cfg_files/$(outdir) = $(addprefix $(outdir)/,$($(_am)cfg_files)) +_am_out_files/$(outdir) = $(addprefix $(outdir)/,$($(_am)out_files)) +_am_sys_files/$(outdir) = $(addprefix $(DESTDIR),$($(_am)sys_files)) +_am_clean_files/$(outdir) = $(addprefix $(outdir)/,$($(_am)clean_files)) +_am_slow_files/$(outdir) = $(addprefix $(outdir)/,$($(_am)slow_files)) +_am_subdirs/$(outdir) = $($(_am)subdirs) +endef +$(eval $(_am_save_variables)) + +# And add them to the $(parent)_*_files variables (if applicable) +define _am_add_subdir +_am_src_files/%(outdir) += $(_am_src_files/%(subdir)) +_am_gen_files/%(outdir) += $(_am_gen_files/%(subdir)) +_am_cfg_files/%(outdir) += $(_am_cfg_files/%(subdir)) +_am_out_files/%(outdir) += $(_am_out_files/%(subdir)) +_am_sys_files/%(outdir) += $(_am_sys_files/%(subdir)) +_am_clean_files/%(outdir) += $(_am_clean_files/%(subdir)) +_am_slow_files/%(outdir) += $(_am_slow_files/%(subdir)) +endef +$(foreach subdir,$(call _am_path,$(addprefix $(outdir)/,$($(_am)subdirs))),$(eval $(subst %(outdir),$(outdir),$(subst %(subdir),$(subdir),$(value _am_add_subdir))))) + +_am_outdirs := $(_am_outdirs) $(outdir) + + +# Do some per-directory magic + +_am_phony = build install uninstall mostlyclean clean distclean maintainer-clean check + +.PHONY: $(addprefix $(outdir)/,$(_am_phony)) + +$(addprefix $(outdir)/,uninstall mostlyclean clean distclean maintainer-clean):: + $(RM) -- $(sort $(_am_$(@F)/$(@D))) + $(RMDIRS) $(sort $(dir $(_am_$(@F)/$(@D)))) 2>/dev/null || $(TRUE) + +# 'build' and 'install' must be defined later, because the +# am_*_files/* variables might not be complete yet. + + +# Include Makefiles from other directories + +define _am_nl + + +endef + +$(foreach _am_NO_ONCE,y,\ + $(foreach makefile,$(foreach dir,$($(_am)subdirs) $($(_am)depdirs),$(call _am_path,$(outdir)/$(dir)/Makefile)),\ + $(eval include $(filter-out $(_am_included_makefiles),$(makefile))))) + + +# This only gets evaluated once, after all of the other Makefiles are read +ifeq ($(_am_NO_ONCE),) +# Empty directory-level variables +outdir = /bogus +srcdir = /bogus + +$(_am)subdirs = +$(_am)depdirs = + +$(_am)src_files = +$(_am)gen_files = +$(_am)cfg_files = +$(_am)out_files = +$(_am)sys_files = +$(_am)clean_files = +$(_am)slow_files = + +_am_clean_files/$(topoutdir) += $(topoutdir)/$(PACKAGE)-$(VERSION).tar.gz +$(addprefix $(topoutdir)/,mostlyclean clean distclean maintainer-clean) :: + $(RM) -r -- $(topoutdir)/$(PACKAGE)-$(VERSION) + +define _am_directory_rules +# Constructive phony targets +$(outdir)/build : $(_am_out_files/%(outdir)) +$(outdir)/install: $(_am_sys_files/%(outdir)) +# Destructive phony targets +_am_uninstall/%(outdir) = $(_am_sys_files/%(outdir)) +_am_mostlyclean/%(outdir) = $(filter-out $(_am_slow_files/%(outdir)) $(_am_cfg_files/%(outdir)) $(_am_gen_files/%(outdir)) $(_am_src_files/%(outdir)),$(_am_clean_files/%(outdir))) +_am_clean/%(outdir) = $(filter-out $(_am_cfg_files/%(outdir)) $(_am_gen_files/%(outdir)) $(_am_src_files/%(outdir)),$(_am_clean_files/%(outdir))) +_am_distclean/%(outdir) = $(filter-out $(_am_gen_files/%(outdir)) $(_am_src_files/%(outdir)),$(_am_clean_files/%(outdir))) +_am_maintainer-clean/%(outdir) = $(filter-out $(_am_src_files/%(outdir)),$(_am_clean_files/%(outdir))) +endef +$(foreach outdir,$(_am_outdirs),$(eval $(subst %(outdir),$(outdir),$(value _am_directory_rules)))) + +# Add the `dist` target +.PHONY: dist +dist: $(topoutdir)/$(PACKAGE)-$(VERSION).tar.gz +$(topoutdir)/$(PACKAGE)-$(VERSION).tar.gz: $(topoutdir)/$(PACKAGE)-$(VERSION) + $(TAR) czf $@ -C $(. - -include $(topsrcdir)/common.each.mk - - -# Aggregate variables - -# Add some more defaults to the *_files variables -clean_files += $(out_files) -conf_files += Makefile $(topoutdir)/config.mk -# Now namespace the *_files variables -define _am_add_to_module -_am_$(module)_src_files = $(addprefix $(srcdir)/,$(src_files)) -_am_$(module)_out_files = $(addprefix $(outdir)/,$(out_files)) -_am_$(module)_sys_files = $(addprefix $(DESTDIR),$(sys_files)) -_am_$(module)_clean_files = $(addprefix $(outdir)/,$(clean_files)) -_am_$(module)_slow_files = $(addprefix $(outdir)/,$(slow_files)) -_am_$(module)_conf_files = $(addprefix $(outdir)/,$(conf_files)) -_am_$(module)_dist_files = $(addprefix $(srcdir)/,$(dist_files)) -endef -$(eval $(_am_add_to_module)) - -# And add them to the $(parent)_*_files variables (if applicable) -define _am_add_to_parent -_am_%(parent)_src_files += $(_am_%(module)_src_files) -_am_%(parent)_out_files += $(_am_%(module)_out_files) -_am_%(parent)_sys_files += $(_am_%(module)_sys_files) -_am_%(parent)_clean_files += $(_am_%(module)_clean_files) -_am_%(parent)_slow_files += $(_am_%(module)_slow_files) -_am_%(parent)_conf_files += $(_am_%(module)_conf_files) -_am_%(parent)_dist_files += $(_am_%(module)_dist_files) -endef -ifneq ($(parent),) -$(eval $(subst %(parent),$(parent),$(subst %(module),$(module),$(value _am_add_to_parent)))) -endif - -modules := $(modules) $(module) - - -# Do some per-module magic - -_am_phony = build install uninstall mostlyclean clean distclean maintainer-clean check - -.PHONY: $(addsuffix -%(module),$(_am_phony)) - -$(addsuffix -$(module),uninstall mostlyclean clean distclean maintainer-clean) :: - $(RM) -- $(sort $(_am_$@)) - $(RMDIRS) $(sort $(dir $(_am_$@))) 2>/dev/null || $(TRUE) - - -# Include Makefiles from other directories - -define _am_nl - - -endef -define _am_include_makefile -ifeq ($(filter $(abspath $1),$(included_makefiles)),) -include $(if $(call _am_is_subdir,.,$1),$(call _am_relto,.,$1),$(topoutdir)/$(call _am_relto,$(topoutdir),$1)) -endif -endef -$(eval \ - _am_NO_ONCE = y$(_am_nl)\ - $(foreach dir,$(subdirs),parent=$(module)$(_am_nl)$(call _am_include_makefile,$(outdir)/$(dir)/Makefile)$(_am_nl))\ - parent=dep$(_am_nl)\ - $(call _am_include_makefile,$(topoutdir)/$(dir)/Makefile)$(_am_nl)\ - _am_NO_ONCE = $(_am_NO_ONCE)) - - -# This only gets evaluated once, after all of the other Makefiles are read -ifeq ($(_am_NO_ONCE),) -# Empty module-level variables -outdir = /bogus -srcdir = /bogus -subdirs = -depdirs = -src_files = -out_files = -sys_files = -clean_files = -slow_files = -conf_files = -dist_files = - -ifeq ($(abspath .),$(abspath $(topoutdir))) -_am_all_clean_files += $(topoutdir)/$(PACKAGE)-$(VERSION).tar.gz -$(addsuffix -all,mostlyclean clean distclean maintainer-clean) :: - $(RM) -r -- $(topoutdir)/$(PACKAGE)-$(VERSION) -endif - -define _am_module_rules -# Constructive phony targets -build-%(module): $(_am_%(module)_out_files) -install-%(module): $(_am_%(module)_sys_files) -# Destructive phony targets -_am_uninstall-%(module) = $(_am_%(module)_sys_files)) -_am_mostlyclean-%(module) = $(filter-out $(_am_%(module)_slow_files) $(_am_%(module)_conf_files) $(_am_%(module)_dist_files),$(_am_%(module)_clean_files)) -_am_clean-%(module) = $(filter-out $(_am_%(module)_conf_files) $(_am_%(module)_dist_files),$(_am_%(module)_clean_files)) -_am_distclean-%(module) = $(filter-out $(_am_%(module)_dist_files),$(_am_%(module)_clean_files)) -_am_maintainer-clean-%(module) = $(_am_%(module)_clean_files) -endef -$(foreach module,$(modules),$(eval $(subst %(module),$(module),$(value _am_module_rules)))) - -# Alias each bare phony target to itself with the `-all` suffix -$(foreach t,$(_am_phony),$(eval $t: $t-all)) - -# Add the `dist` target -.PHONY: dist -dist: $(topoutdir)/$(PACKAGE)-$(VERSION).tar.gz -$(topoutdir)/$(PACKAGE)-$(VERSION).tar.gz: $(topoutdir)/$(PACKAGE)-$(VERSION) - $(TAR) czf $@ -C $(. + +makefiles = diff --git a/common.each.mk b/common.each.mk deleted file mode 100644 index 76c37b5..0000000 --- a/common.each.mk +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 2015 Luke Shumaker -# -# 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 . - -dirs := $(dirs) - -clean_files += .*.mk *.o -ifneq ($(AUTODEPS),) --include $(wildcard $(outdir)/.*.mk) -endif - -$(outdir)/% : $(srcdir)/%.m4 - $(M4) -P $(M4FLAGS) $< > $@ - -$(outdir)/% : $(srcdir)/%.sh - $(INSTALL_PROGRAM) $< $@ -$(outdir)/% : $(outdir)/%.sh - $(INSTALL_PROGRAM) $< $@ - -$(outdir)/%.o : $(srcdir)/%.c $(topoutdir)/config.mk - $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $< - -$(outdir)/% : $(outdir)/%.o - $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) diff --git a/common.each.tail.mk b/common.each.tail.mk new file mode 100644 index 0000000..d649602 --- /dev/null +++ b/common.each.tail.mk @@ -0,0 +1,42 @@ +# Copyright (C) 2015 Luke Shumaker +# +# 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 . + +dirs := $(dirs) + +am_clean_files += .*.mk *.o +ifneq ($(AUTODEPS),) +-include $(wildcard $(outdir)/.*.mk) +endif + +$(outdir)/% : $(srcdir)/%.m4 + $(M4) -P $(M4FLAGS) $< > $@ + +$(outdir)/% : $(srcdir)/%.sh + $(INSTALL_PROGRAM) $< $@ +$(outdir)/% : $(outdir)/%.sh + $(INSTALL_PROGRAM) $< $@ + +$(outdir)/%.o : $(srcdir)/%.c $(topoutdir)/config.mk + $(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $< + +$(outdir)/% : $(outdir)/%.o + $(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) + +ifneq ($(srcdir),$(outdir)) +$(addprefix $(outdir)/,$(makefiles)): $(outdir)/%: $(srcdir)/% + cp -Tf -- $< $@ +endif +am_src_files += $(makefiles) +am_cfg_files += $(makefiles) diff --git a/common.once.head.mk b/common.once.head.mk new file mode 100644 index 0000000..d50c639 --- /dev/null +++ b/common.once.head.mk @@ -0,0 +1,27 @@ +# Copyright (C) 2015-2016 Luke Shumaker +# +# 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 . + +MAKEFLAGS += -rR +.SECONDARY: +.DELETE_ON_ERROR: + +# Have GCC generate header dependency info (pair this with `-include` +# in common.each.mk +ifneq ($(AUTODEPS),) +CFLAGS += -MD -MF $(patsubst $(@D)/%.o,$(@D)/.%.mk,$@) -MP +endif + +CPPFLAGS += -I$(topoutdir) +M4FLAGS += -I$(topoutdir) -I$(. - -# Make directories -dirs += $(addprefix $(DESTDIR),$(bindir) $(libexedir) $(datarootdir) $(datadir) $(sysconfdir) $(sharedstatedir) $(localstatedir) $(runstatedir) $(pkgdatadir) $(pkglibexecdir)) -$(sort $(dirs)): - $(MKDIRS) $@ - -# Have GCC generate header dependency info (pair this with `-include` -# in common.each.mk -ifneq ($(AUTODEPS),) -CFLAGS += -MD -MF $(patsubst $(@D)/%.o,$(@D)/.%.mk,$@) -MP -endif - -CPPFLAGS += -I$(topoutdir) -M4FLAGS += -I$(topoutdir) - -MAKEFLAGS += -rR -.SECONDARY: -.DELETE_ON_ERROR: diff --git a/common.once.tail.mk b/common.once.tail.mk new file mode 100644 index 0000000..f326c6b --- /dev/null +++ b/common.once.tail.mk @@ -0,0 +1,19 @@ +# Copyright (C) 2015-2016 Luke Shumaker +# +# 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 . + +# Make directories +dirs += $(addprefix $(DESTDIR),$(bindir) $(libexedir) $(datarootdir) $(datadir) $(sysconfdir) $(sharedstatedir) $(localstatedir) $(runstatedir) $(pkgdatadir) $(pkglibexecdir)) +$(sort $(dirs)): + $(MKDIRS) $@ diff --git a/common.top.mk b/common.top.mk deleted file mode 100644 index 9e57088..0000000 --- a/common.top.mk +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright (C) 2015 Luke Shumaker -# -# 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 . - -# Both of these have the argument order "parent,child" -_am_noslash = $(patsubst %/,%,$1) -_am_relto = $(call _am_noslash,$(patsubst $(abspath $1)/%,%,$(abspath $2)/)) -_am_is_subdir = $(filter $(abspath $1)/%,$(abspath $2)/) - -## Declare the standard targets -all: build -.PHONY: all - -## Set topoutdir, outdir, and srcdir (assumes that topsrcdir is already set) -ifeq ($(topoutdir),) -topoutdir := $(call _am_noslash,$(dir $(lastword $(filter %/config.mk config.mk,$(MAKEFILE_LIST))))) -endif - outdir := $(call _am_noslash,$(dir $(lastword $(filter-out %.mk,$(MAKEFILE_LIST))))) - srcdir := $(firstword $(call _am_relto,., $(topsrcdir)/$(call _am_relto,$(topoutdir),$(outdir)) ) .) - -included_makefiles := $(included_makefiles) $(abspath $(outdir)/Makefile) - -## Set module name -module := $(subst /,_,$(if $(call _am_is_subdir,.,$(outdir)),$(firstword $(call _am_relto,.,$(outdir)) all),dep-$(firstword $(call _am_relto,$(topoutdir),$(outdir)) top))) - -## Empty variables for use by the module -subdirs = -depdirs = - -src_files = -out_files = -sys_files = - -clean_files = - -slow_files = -conf_files = -dist_files = diff --git a/config.mk b/config.mk deleted file mode 100644 index a64243b..0000000 --- a/config.mk +++ /dev/null @@ -1,46 +0,0 @@ -ifeq ($(topsrcdir),) -topsrcdir := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) -endif - -PACKAGE = rvs -VERSION = 0.10 -pkgtextdomain = $(PACKAGE) - -DESTDIR = -prefix = /usr/local -exec_prefix = $(prefix) - -bindir = $(exec_prefix)/bin -sbindir = $(exec_prefix)/sbin -libexecdir = $(exec_prefix)/libexec -datarootdir = $(prefix)/share -datadir = $(datarootdir) -sysconfdir = $(prefix)/etc -sharedstatedir = $(prefix)/com -localstatedir = $(prefix)/var -runstatedir = $(localstatedir)/run -localedir = $(datarootdir)/locale - -pkgdatadir = $(datadir)/$(PACKAGE) -pkglibexecdir = $(libexecdir)/$(PACKAGE) - -CFLAGS = -std=c99 -Werror -Wall -Wextra -pedantic -O2 -CPPFLAGS = -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE - -CC = cc -M4 = m4 -MKDIR = mkdir -MKDIRS = mkdir -p -RMDIRS = rmdir -p -INSTALL_DATA = install -m644 -INSTALL_PROGRAM = install -m755 -CP = cp -MV = mv -RM = rm -f -SED = sed -SORT = sort -TAR = tar -TRUE = true -PRINTF = printf - -AUTODEPS = t diff --git a/config.mk.in b/config.mk.in new file mode 100644 index 0000000..ca8fa7f --- /dev/null +++ b/config.mk.in @@ -0,0 +1,47 @@ +ifeq ($(topsrcdir),) +topsrcdir := $(patsubst %/,%,$(dir $(lastword $(MAKEFILE_LIST)))) + +PACKAGE = rvs +VERSION = 0.10 +pkgtextdomain = $(PACKAGE) + +DESTDIR = +prefix = /usr/local +exec_prefix = $(prefix) + +bindir = $(exec_prefix)/bin +sbindir = $(exec_prefix)/sbin +libexecdir = $(exec_prefix)/libexec +datarootdir = $(prefix)/share +datadir = $(datarootdir) +sysconfdir = $(prefix)/etc +sharedstatedir = $(prefix)/com +localstatedir = $(prefix)/var +runstatedir = $(localstatedir)/run +localedir = $(datarootdir)/locale + +pkgdatadir = $(datadir)/$(PACKAGE) +pkglibexecdir = $(libexecdir)/$(PACKAGE) + +CFLAGS = -std=c99 -Werror -Wall -Wextra -pedantic -O2 +CPPFLAGS = -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE + +CC = cc +M4 = m4 +MKDIR = mkdir +MKDIRS = mkdir -p +RMDIRS = rmdir -p +INSTALL_DATA = install -m644 +INSTALL_PROGRAM = install -m755 +CP = cp +MV = mv +RM = rm -f +SED = sed +SORT = sort +TAR = tar +TRUE = true +PRINTF = printf + +AUTODEPS = t + +endif diff --git a/configure b/configure index b4dece3..9683b68 100755 --- a/configure +++ b/configure @@ -1,7 +1,7 @@ #!/usr/bin/env bash -name='configure' # Luke's configureation script +name='configure' # Luke's configuration script #version='1.0' -# Copyright (C) 2009 Luke Shumaker +# Copyright (C) 2009, 2016 Luke Shumaker # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as @@ -17,83 +17,47 @@ name='configure' # Luke's configureation script # along with this program; see the file COPYING. # If not, see . -srcdir=$(readlink -f `dirname "$0"`) - - _DESTDIR='' - _prefix='/usr/local' -_exec_prefix='$(prefix)' - _bindir='$(exec_prefix)/bin' - _sbindir='$(exec_prefix)/sbin' - _libexecdir='$(exec_prefix)/libexec' - _CONFIG="$@" -vars='DESTDIR prefix exec_prefix bindir sbindir libexecdir CONFIG' -if [ -f "$srcdir/config" ]; then . "$srcdir/config"; fi +srcdir="$(dirname -- "$0")" +outdir="." error() { - echo "$name: $1" >> /dev/stderr + echo "$name: $1" >&2 exit 1 } -varargs=`echo "$vars " | sed -e 's/ */:,/g' -e 's/,$//'` -args=`getopt -n "$name" -o "${sopt}" -l "${lopt}${varargs}" -- "$@"` -if [ $? == 0 ]; then - set -- $args - while [ $# -gt 0 ]; do case "$1" in +edit=(sed -E -e '') +setvar() { + edit+=(-e "s@^(\s*$1\s*:?=).*@\1 $2@") +} +setvar topsrcdir "$srcdir" + +vars=($(<"$srcdir/config.mk.in" sed -n 's/^\([ a-z_-]*\)=.*/\1/p')) + +printf -v lopt '%s:,' "${vars[@]}" +lopt+='enable-autodeps,disable-autodeps' + +sopt='' + +args=$(getopt -n "$name" -o "${sopt}" -l "${lopt}" -- "$@") || exit $? +eval set -- "$args" +while [ $# -gt 0 ]; do + case "$1" in --) break;; - --srcdir) srcdir="$2"; shift;; - --*) - var0="${1/--/}" - match='false' - for var1 in $vars; do - if [ "$var0" == "$var1" ]; then - match='true' - break; - fi - done - if [ "$match" == 'true' ]; then - shift - val="$1" - eval _$var0=$val - else - error "unrecognized option \`$1'"; - fi - :;; + --enable-autodeps) setvar AUTODEPS t;; + --disable-autodeps) setvar AUTODEPS '';; + --*) setvar "${1#--}" "$2" shift;; *) error "unrecognized option \`$1'"; esac shift - done -else - error 'unable to parse command line arguments' -fi - -echo '#!/bin/sed -f' > var.sed -for var in $vars; do - var1="_$var" - val=${!var1} - - # GNU bash optimized version - var=${var//:/\\:} - val=${val//:/\\:} - # POSIX version - #var=`echo "$var" | sed 's@:@\\:@g'` - #val=`echo "$val" | sed 's@:@\\:@g'` - - echo "s:@$var@:$val:g" >> var.sed done -Makefiles="`find "$srcdir/" -type f -name 'Makefile.in'`" -Makefiles="`find "$srcdir/" -type f -name '*.mk.in'` $Makefiles" -for orig in $Makefiles; do - new=${orig/%.in/} #bashism - new=${new/#$srcdir\//} #bashism - path=`dirname "$orig"` - mkdir -p `dirname "$new"` - sed -f var.sed "${orig}" | sed \ --e "s:@srcdir@:${path//:/\\:}/:g" \ --e '19 a# DO NOT edit this file, it has been generated by configure, and will' \ --e "19 a# be overwritten. Instead, edit the file \``basename ${orig}`'" \ --e "19 a - " > "${new}" -done -rm var.sed +"${edit[@]}" < "$srcdir/config.mk.in" > "$outdir/config.mk" +Makefiles=($(find "$srcdir/" -name 'Makefile') "$srcdir"/*.mk "$srcdir"/modules/module.mk "$srcdir"/modules/*/Makefile.inc.mk) +for src in "${Makefiles[@]}"; do + out="$outdir/${src#$srcdir/}" + mkdir -p -- $(dirname -- "$out") + if ! test "$src" -ef "$out"; then + cp -fTv -- "$src" "$out" + fi +done diff --git a/modules/Makefile b/modules/Makefile index 8235bf3..d9de6c0 100644 --- a/modules/Makefile +++ b/modules/Makefile @@ -15,10 +15,10 @@ # along with this program. If not, see . include $(dir $(lastword $(MAKEFILE_LIST)))/../config.mk -include $(topsrcdir)/common.top.mk +include $(topsrcdir)/automake.head.mk dirs += $(DESTDIR)$(pkglibexecdir)/modules -src_files += Makefile module.mk -subdirs = comments date.author blobs tags tree +makefiles = Makefile module.mk +am_subdirs = comments date.author blobs tags tree -include $(topsrcdir)/common.bottom.mk +include $(topsrcdir)/automake.tail.mk diff --git a/modules/blobs/Makefile.inc.mk b/modules/blobs/Makefile.inc.mk index 8fd2d6f..9f3f112 100644 --- a/modules/blobs/Makefile.inc.mk +++ b/modules/blobs/Makefile.inc.mk @@ -1,8 +1,8 @@ -src_files += commit.d.sh commit.f.sh commit.sh get.d.sh get.f.sh get.sh ls.sh print.sh tree.sh -out_files += commit.d commit.f commit get.d get.f get ls print tree +am_src_files += commit.d.sh commit.f.sh commit.sh get.d.sh get.f.sh get.sh ls.sh print.sh tree.sh +am_out_files += commit.d commit.f commit get.d get.f get ls print tree -src_files += _stdio.sh -sys_files += $(pkglibexecdir)/modules/$(name)/_stdio.sh +am_src_files += _stdio.sh +am_sys_files += $(pkglibexecdir)/modules/$(name)/_stdio.sh $(DESTDIR)$(pkglibexecdir)/modules/$(name)/_stdio.sh: $(srcdir)/_stdio.sh | $(DESTDIR)$(pkglibexecdir)/modules/$(name) $(INSTALL_DATA) $< $@ diff --git a/modules/comments/Makefile.inc.mk b/modules/comments/Makefile.inc.mk index 6816836..d5632d7 100644 --- a/modules/comments/Makefile.inc.mk +++ b/modules/comments/Makefile.inc.mk @@ -1,2 +1,2 @@ -src_files += comment.sh commit.sh print.sh showcomment.sh -out_files += comment commit print showcomment +am_src_files += comment.sh commit.sh print.sh showcomment.sh +sm_out_files += comment commit print showcomment diff --git a/modules/date.author/Makefile.inc.mk b/modules/date.author/Makefile.inc.mk index c6b27a2..ac9d0df 100644 --- a/modules/date.author/Makefile.inc.mk +++ b/modules/date.author/Makefile.inc.mk @@ -1,2 +1,2 @@ -src_files += commit.sh -out_files += commit +am_src_files += commit.sh +am_out_files += commit diff --git a/modules/git-fast-import/.#parse.sh b/modules/git-fast-import/.#parse.sh deleted file mode 120000 index c2c97da..0000000 --- a/modules/git-fast-import/.#parse.sh +++ /dev/null @@ -1 +0,0 @@ -luke@build64-par.lan.670:1436421582 \ No newline at end of file diff --git a/modules/module.mk b/modules/module.mk index d3d3da2..b2dbde8 100644 --- a/modules/module.mk +++ b/modules/module.mk @@ -15,15 +15,16 @@ # along with this program. If not, see . include $(dir $(lastword $(MAKEFILE_LIST)))/../../config.mk -include $(topsrcdir)/common.top.mk +include $(topsrcdir)/automake.head.mk name := $(lastword $(subst /, ,$(abspath $(srcdir)))) include $(srcdir)/Makefile.inc.mk +makefiles = Makefile Makefile.inc.mk dirs += $(DESTDIR)$(pkglibexecdir)/modules/$(name) -src_files += Makefile Makefile.inc.mk Module.mk -sys_files += $(pkglibexecdir)/modules/$(name).mk -sys_files += $(addprefix $(pkglibexecdir)/modules/$(name)/,$(out_files)) +am_src_files += Module.mk +am_sys_files += $(pkglibexecdir)/modules/$(name).mk +am_sys_files += $(addprefix $(pkglibexecdir)/modules/$(name)/,$(am_out_files)) $(DESTDIR)$(pkglibexecdir)/modules/$(name).mk: $(srcdir)/Module.mk | $(DESTDIR)$(pkglibexecdir)/modules $(INSTALL_DATA) $< $@ @@ -32,4 +33,4 @@ $(DESTDIR)$(pkglibexecdir)/modules/$(name)/%: $(srcdir)/% | $(DESTDIR)$(pkglibex $(DESTDIR)$(pkglibexecdir)/modules/$(name)/%: $(outdir)/% | $(DESTDIR)$(pkglibexecdir)/modules/$(name) $(INSTALL_PROGRAM) $< $@ -include $(topsrcdir)/common.bottom.mk +include $(topsrcdir)/automake.tail.mk diff --git a/modules/tags/Makefile.inc.mk b/modules/tags/Makefile.inc.mk index 8d687a5..1ccdada 100644 --- a/modules/tags/Makefile.inc.mk +++ b/modules/tags/Makefile.inc.mk @@ -1,2 +1,2 @@ -src_files += commit.sh get-tag.sh print.sh tag-id.sh tag.sh -out_files += commit get-tag print tag-id tag +am_src_files += commit.sh get-tag.sh print.sh tag-id.sh tag.sh +am_out_files += commit get-tag print tag-id tag diff --git a/modules/tree/Makefile.inc.mk b/modules/tree/Makefile.inc.mk index 82c0b58..c91bef2 100644 --- a/modules/tree/Makefile.inc.mk +++ b/modules/tree/Makefile.inc.mk @@ -1,2 +1,2 @@ -src_files += addparent.d.sh addparent.f.sh addparent.sh commit.sh delparent.f.sh getchildren.sh getparents.sh print.sh -out_files += addparent.d addparent.f addparent commit delparent.f getchildren getparents print +am_src_files += addparent.d.sh addparent.f.sh addparent.sh commit.sh delparent.f.sh getchildren.sh getparents.sh print.sh +am_out_files += addparent.d addparent.f addparent commit delparent.f getchildren getparents print diff --git a/wrapper/Makefile b/wrapper/Makefile index 22e9f46..65a6613 100644 --- a/wrapper/Makefile +++ b/wrapper/Makefile @@ -15,15 +15,16 @@ # along with this program. If not, see . include $(dir $(lastword $(MAKEFILE_LIST)))/../config.mk -include $(topsrcdir)/common.top.mk +include $(topsrcdir)/automake.head.mk -src_files += Makefile outer.c inner.sh.m4 runcmd.mk -out_files += outer inner -clean_files += inner.sh -sys_files += $(bindir)/$(PACKAGE) $(pkglibexecdir)/$(PACKAGE) $(pkglibexecdir)/runcmd.mk +makefiles = Makefile +am_src_files += outer.c inner.sh.m4 runcmd.mk +am_out_files += outer inner +am_clean_files += inner.sh +am_sys_files += $(bindir)/$(PACKAGE) $(pkglibexecdir)/$(PACKAGE) $(pkglibexecdir)/runcmd.mk $(outdir)/outer.o: $(topoutdir)/config.h -$(outdir)/inner: $(topoutdir)/config.sh +$(outdir)/inner.sh: $(topoutdir)/config.sh $(DESTDIR)$(bindir)/$(PACKAGE) : $(outdir)/outer | $(DESTDIR)$(bindir) $(INSTALL_PROGRAM) $< $@ @@ -32,4 +33,4 @@ $(DESTDIR)$(pkglibexecdir)/$(PACKAGE) : $(outdir)/inner | $(DESTDIR)$(pkglibexec $(DESTDIR)$(pkglibexecdir)/runcmd.mk : $(srcdir)/runcmd.mk | $(DESTDIR)$(pkglibexecdir) $(INSTALL_PROGRAM) $< $@ -include $(topsrcdir)/common.bottom.mk +include $(topsrcdir)/automake.tail.mk -- cgit v1.1-4-g5e80