From 23554ee65897c968a2ab56c3a6f248e7037b1098 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Thu, 2 Aug 2018 20:51:11 -0400 Subject: [PATCH] Enhance the Basic.mk environment to work with Gnulib * maintMakefile: Omit generated headers from Basic.mk prerequisites. * Basic.mk.template: Rework commands to use with $(call ...) macros. * mk/Amiga.mk: Ditto. * mk/VMS.mk: Ditto. * mk/Windows32.mk: Ditto, plus P2W to convert POSIX to Windows paths. * mk/msdosdjgpp.mk: Ditto. --- Basic.mk.template | 35 ++++++++++++++++++++--------------- maintMakefile | 3 +++ mk/Amiga.mk | 9 ++++----- mk/VMS.mk | 20 ++++++++++---------- mk/Windows32.mk | 20 +++++++++----------- mk/msdosdjgpp.mk | 19 +++++++++---------- 6 files changed, 55 insertions(+), 51 deletions(-) diff --git a/Basic.mk.template b/Basic.mk.template index 9eab3560..3b5ff63d 100644 --- a/Basic.mk.template +++ b/Basic.mk.template @@ -82,20 +82,25 @@ LINK_OUTPUT = -o $@ # Command lines -COMPILE.cmd = $(CC) $(extra_CFLAGS) $(CFLAGS) $(extra_CPPFLAGS) $(CPPFLAGS) $(TARGET_ARCH) $(OUTPUT_OPTION) $(C_SOURCE) $< +# $(call COMPILE.cmd,,) +COMPILE.cmd = $(CC) $(extra_CFLAGS) $(CFLAGS) $(extra_CPPFLAGS) $(CPPFLAGS) $(TARGET_ARCH) $(OUTPUT_OPTION) $(C_SOURCE) $1 -LINK.cmd = $(LD) $(extra_LDFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LDLIBS) $(LINK_OUTPUT) +# $(call LINK.cmd,) +LINK.cmd = $(LD) $(extra_LDFLAGS) $(LDFLAGS) $(TARGET_ARCH) $1 $(LDLIBS) $(LINK_OUTPUT) +# $(CHECK.cmd) CHECK.cmd = cd $(SRCDIR)/tests && ./run_make_tests -make $(shell cd $() +MKDIR.cmd = mkdir -p $1 -MKDIR = mkdir -p -MKDIR.cmd = $(MKDIR) $@ +# $(call RM.cmd,) +RM.cmd = rm -f $1 -RM = rm -f -RM.cmd = $(RM) $(OBJECTS) $(PROG) $(BUILT_SOURCES) +# $(call CP.cmd,,) +CP.cmd = cp $1 $2 + +CLEANSPACE = $(call RM.cmd,$(OBJECTS) $(PROG) $(BUILT_SOURCES)) # Load overrides for the above variables. include $(firstword $(wildcard $(SRCDIR)/mk/$(lastword $(subst -, ,$(MAKE_HOST)).mk) $(OUTDIR)mk/Posix.mk $(SRCDIR)/mk/Posix.mk)) @@ -107,24 +112,24 @@ VPATH = $(SRCDIR) all: $(PROG) $(PROG): $(OBJECTS) - $(LINK.cmd) + $(call LINK.cmd,$^) $(OBJECTS): $(OUTDIR)%.$(OBJEXT): %.c - $(COMPILE.cmd) + $(call COMPILE.cmd,$<) $(OBJECTS): | $(OBJDIRS) $(BUILT_SOURCES) $(OBJDIRS): - $(MKDIR.cmd) + $(call MKDIR.cmd,$@) -check: $(PROG) +check: $(CHECK.cmd) clean: - $(RM.cmd) + $(CLEANSPACE) $(filter %.h,$(BUILT_SOURCES)): %.h : %.in.h - $(RM) $< - $(CP.cmd) + $(call RM.cmd,$@) + $(call CP.cmd,$<,$@) .PHONY: all check clean diff --git a/maintMakefile b/maintMakefile index d4716080..cea4db14 100644 --- a/maintMakefile +++ b/maintMakefile @@ -77,6 +77,9 @@ Basic.mk: Basic.mk.template .dep_segment Makefile sed -e 's@^\([^ ]*\)\.o:@$$(OUTDIR)\1.$$(OBJEXT):@' \ -e 's@\([^ ]*\.[ch]\)@$$(SRCDIR)/\1@g' \ -e 's@$$(SRCDIR)/src/config.h@$$(OUTDIR)src/config.h@g' \ + -e 's@$$(SRCDIR)/lib/stdlib.h@@g' \ + -e 's@$$(SRCDIR)/lib/sys/types.h@@g' \ + -e 's@$$(SRCDIR)/lib/unistd.h@@g' \ $(word 2,$^) >>$@ chmod a-w $@ diff --git a/mk/Amiga.mk b/mk/Amiga.mk index 79f9b6ae..fe41da8a 100644 --- a/mk/Amiga.mk +++ b/mk/Amiga.mk @@ -21,10 +21,9 @@ CC = sc LD = $(CC) Link -RM = delete -MKDIR = makedir -CP = copy -CP.cmd = $(CP) $< To $@ +MKDIR.cmd = makedir $1 +RM.cmd = delete $1 +CP.cmd = copy $1 To $2 CPPFLAGS = CFLAGS = @@ -43,4 +42,4 @@ LDLIBS = Lib LIB:sc.lib LIB:amiga.lib LINK_OUTPUT = To $@ $(OUTDIR)src/config.h: $(SRCDIR)/src/config.ami - $(CP.cmd) + $(call CP.cmd,$<,$@) diff --git a/mk/VMS.mk b/mk/VMS.mk index 1fbc858b..2614e2f8 100644 --- a/mk/VMS.mk +++ b/mk/VMS.mk @@ -25,10 +25,6 @@ SRCDIR = [] OBJEXT = .obj EXEEXT = .exe -CP = copy -MKDIR = create/dir -RM = delete - e = s = $e $e c = , @@ -79,19 +75,23 @@ prog_SOURCES += $(ALLOCA) $(glob_SOURCES) $(vms_SOURCES) BUILT_SOURCES += $(lib)fnmatch.h $(lib)glob.h -COMPILE.cmd = $(CC) $(extra_CFLAGS)$(CFLAGS)/obj=$@ $(extra_CPPFLAGS)$(CPPFLAGS) $< +COMPILE.cmd = $(CC) $(extra_CFLAGS)$(CFLAGS)/obj=$@ $(extra_CPPFLAGS)$(CPPFLAGS) $1 -LINK.cmd = $(LD)$(extra_LDFLAGS)$(LDFLAGS)/exe=$@ $(subst $s,$c,$^)$(LDLIBS) +LINK.cmd = $(LD)$(extra_LDFLAGS)$(LDFLAGS)/exe=$@ $(subst $s,$c,$1)$(LDLIBS) # Don't know how to do this CHECK.cmd = -define RM.cmd +MKDIR.cmd = create/dir $1 +RM.cmd = delete $1 +CP.cmd = copy $1 $2 + +define CLEANSPACE -purge [...] - -$(RM) $(PROG); - -$(RM) $(src)*.$(OBJEXT); + -delete $(PROG); + -delete $(src)*.$(OBJEXT); endef $(OUTDIR)$(src)config.h: $(SRCDIR)$(src)config.h.W32 - $(CP.cmd) + $(call CP.cmd,$<,$@) diff --git a/mk/Windows32.mk b/mk/Windows32.mk index 1cbe80b7..2e1f3d79 100644 --- a/mk/Windows32.mk +++ b/mk/Windows32.mk @@ -24,10 +24,13 @@ TARGET_TYPE = release # TOOLCHAIN can be either "msvc" or "gcc" TOOLCHAIN = msvc +# Translate a POSIX path into a Windows path. Don't bother with drives. +# Used only inside recipes, with DOS/CMD tools that require it. +P2W = $(subst /,\,$1) prog_SOURCES += $(loadavg_SOURCES) $(glob_SOURCES) $(w32_SOURCES) -BUILT_SOURCES += $(lib)fnmatch.h $(lib)glob.h +BUILT_SOURCES += $(lib)alloca.h $(lib)fnmatch.h $(lib)glob.h w32_LIBS = kernel32 user32 gdi32 winspool comdlg32 advapi32 shell32 ole32 \ oleaut32 uuid odbc32 odbccp32 @@ -84,18 +87,13 @@ release_gcc_CFLAGS = -O2 # --- -LINK.cmd = $(LD) $(extra_LDFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LDLIBS) $(LINK_OUTPUT) +LINK.cmd = $(LD) $(extra_LDFLAGS) $(LDFLAGS) $(TARGET_ARCH) $1 $(LDLIBS) $(LINK_OUTPUT) CHECK.cmd = cmd /c cd tests \& .\run_make_tests.bat -make ../$(PROG) -MKDIR = cmd /c mkdir -MKDIR.cmd = $(MKDIR) $(subst /,\\,$@) - -RM = cmd /c del /F /Q -RM.cmd = $(RM) $(subst /,\\,$(OBJECTS) $(PROG)) - -CP = cmd /c copy /Y -CP.cmd = $(CP) $(subst /,\\,$< $@) +MKDIR.cmd = cmd /c mkdir $(call P2W,$1) +RM.cmd = cmd /c del /F /Q $(call P2W,$1) +CP.cmd = cmd /c copy /Y $(call P2W,$1 $2) CC = $($(TOOLCHAIN)_CC) LD = $($(TOOLCHAIN)_LD) @@ -121,4 +119,4 @@ extra_LDFLAGS = $(call _CUSTOM,LDFLAGS) LDLIBS = $(call _CUSTOM,LDLIBS) $(OUTDIR)src/config.h: $(SRCDIR)/src/config.h.W32 - $(CP.cmd) + $(call CP.cmd,$<,$@) diff --git a/mk/msdosdjgpp.mk b/mk/msdosdjgpp.mk index 2da5bc50..e6b87ea8 100644 --- a/mk/msdosdjgpp.mk +++ b/mk/msdosdjgpp.mk @@ -23,22 +23,21 @@ EXEEXT = .exe CC = gcc +# Translate a POSIX path into a Windows path. Don't bother with drives. +# Used only inside recipes, with DOS/CMD tools that require it. +P2W = $(subst /,\,$1) + prog_SOURCES += $(loadavg_SOURCES) $(glob_SOURCES) -BUILT_SOURCES += $(lib)fnmatch.h $(lib)glob.h +BUILT_SOURCES += $(lib)alloca.h $(lib)fnmatch.h $(lib)glob.h INCLUDEDIR = c:/djgpp/include LIBDIR = c:/djgpp/lib LOCALEDIR = c:/djgpp/share -MKDIR = command.com /c mkdir -MKDIR.cmd = $(MKDIR) $(subst /,\\,$@) - -RM = command.com /c del /F /Q -RM.cmd = $(RM) $(subst /,\\,$(OBJECTS) $(PROG)) - -CP = command.com /c copy /Y -CP.cmd = $(CP) $(subst /,\\,$< $@) +MKDIR.cmd = command.com /c mkdir $(call P2W,$1) +RM.cmd = command.com /c del /F /Q $(call P2W,$1) +CP.cmd = command.com /c copy /Y $(call P2W,$1 $2) $(OUTDIR)src/config.h: $(SRCDIR)/src/configh.dos - $(CP.cmd) + $(call CP.cmd,$<,$@)