From fb779d2f1e26a280f381886f3cdf444102676249 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Sun, 19 Nov 2017 13:49:26 -0500 Subject: Rework directory structure to use GNU-recommended "src" directory. Move the source code (other than glob) into the "src" subdirectory. Update all scripting and recommendations to support this change. * *.c, *.h, w32/*: Move to src/ * configure.ac, Makefile.am, maintMakefile: Locate new source files. * Basic.mk.template, mk/*: Update for new source file locations. * NEWS, README.DOS.template: Update for new locations. * build.template, build_w32.bat, builddos.bat: Ditto. * po/POTFILES.in: Ditto * tests/run_make_tests.pl, tests/scripts/features/load*: Ditto. * make.1: Move to doc. * mk/VMS.mk: Add support for building on VMS (hopefully). * makefile.vms, prepare_w32.bat: Remove. * SCOPTIONS: Update to define HAVE_CONFIG_H --- mk/Amiga.mk | 11 ++++--- mk/Posix.mk.in | 27 +++++++++++++++++ mk/VMS.mk | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ mk/Windows32.mk | 32 ++++++++++++-------- mk/msdosdjgpp.mk | 24 ++++++++++----- 5 files changed, 161 insertions(+), 24 deletions(-) create mode 100644 mk/Posix.mk.in create mode 100644 mk/VMS.mk (limited to 'mk') diff --git a/mk/Amiga.mk b/mk/Amiga.mk index fe2a1f64..180cc784 100644 --- a/mk/Amiga.mk +++ b/mk/Amiga.mk @@ -20,16 +20,19 @@ CC = sc LD = $(CC) Link + RM = delete MKDIR = makedir +CP = copy +CP.cmd = $(CP) $< To $@ CPPFLAGS = CFLAGS = LDFLAGS = -prog_SOURCES += alloca.c getloadavg.c $(glob_SOURCES) $(amiga_SOURCES) +prog_SOURCES += $(alloca_SOURCES) $(loadavg_SOURCES) $(glob_SOURCES) $(amiga_SOURCES) -extra_CPPFLAGS = IDir "" IDir $(SRCDIR)/glob +extra_CPPFLAGS = IDir $(OUTDIR)src IDir $(SRCDIR)/src IDir $(SRCDIR)/glob C_SOURCE = OUTPUT_OPTION = @@ -37,5 +40,5 @@ LDFLAGS = From LIB:cres.o LDLIBS = Lib LIB:sc.lib LIB:amiga.lib LINK_OUTPUT = To $@ -$(OUTDIR)/config.h: $(SRCDIR)/config.ami - copy $< To $@ +$(OUTDIR)src/config.h: $(SRCDIR)/src/config.ami + $(CP.cmd) diff --git a/mk/Posix.mk.in b/mk/Posix.mk.in new file mode 100644 index 00000000..45951f28 --- /dev/null +++ b/mk/Posix.mk.in @@ -0,0 +1,27 @@ +# GNU -*-Makefile-*- to build GNU make on POSIX systems +# +# POSIX overrides for use with Basic.mk. +# +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is part of GNU Make. +# +# GNU Make is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# GNU Make 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program. If not, see . + +# Very little is needed here since the default Basic.mk assumes POSIX + +prog_SOURCES += $(posix_SOURCES) + +extra_CPPFLAGS += @GUILE_CFLAGS@ @GLOBINC@ +extra_LDFLAGS += @AM_LDFLAGS@ +LDLIBS += @GUILE_LIBS@ @LIBOBJS@ @GETLOADAVG_LIBS@ @GLOBLIB@ @ALLOCA@ @LIBINTL@ @LIBS@ diff --git a/mk/VMS.mk b/mk/VMS.mk new file mode 100644 index 00000000..a436239f --- /dev/null +++ b/mk/VMS.mk @@ -0,0 +1,91 @@ +# GNU -*-Makefile-*- to build GNU make on VMS +# +# VMS overrides for use with Basic.mk. +# +# Copyright (C) 2017 Free Software Foundation, Inc. +# This file is part of GNU Make. +# +# GNU Make is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free Software +# Foundation; either version 3 of the License, or (at your option) any later +# version. +# +# GNU Make 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 General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# this program. If not, see . + +src = [.src] +glob = [.glob] +SRCDIR = [] + +OBJEXT = .obj +EXEEXT = .exe + +CP = copy +MKDIR = create/dir +RM = delete + +e = +s = $e $e +c = , + +defs = HAVE_CONFIG_H + +ifeq ($(CC),cc) +defs += VMS unlink=remove allocated_variable_expand_for_file=alloc_var_expand_for_file +else +defs += GCC_IS_NATIVE +ifeq ($(ARCH),VAX) +defs += VAX +endif +endif + +extra_CPPFLAGS = /define=($(subst $s,$c,$(patsubst %,"%",$(defs)))) + +cinclude = /nested=none/include=($(src),$(glob)) +ifeq ($(CC),cc) +cprefix = /prefix=(all,except=(glob,globfree)) +cwarn = /standard=relaxed/warn=(disable=questcompare) +endif + +extra_CFLAGS = $(cinclude)$(cprefix)$(cwarn) + +#extra_LDFLAGS = /deb +extra_LDFLAGS = + +# If your system needs extra libraries loaded in, define them here. +# System V probably need -lPW for alloca. +# if on vax, uncomment the following line +#LDLIBS = ,c.opt/opt +ifeq ($(CC),cc) +#LDLIBS =,sys$$library:vaxcrtl.olb/lib +else +LDLIBS =,gnu_cc_library:libgcc.olb/lib +endif + +# If your system doesn't have alloca, or the one provided is bad, +# uncomment this +#ALLOCA = $(alloca_SOURCES) + +prog_SOURCES += $(ALLOCA) $(glob_SOURCES) $(vms_SOURCES) + +COMPILE.cmd = $(CC) $(extra_CFLAGS)$(CFLAGS)/obj=$@ $(extra_CPPFLAGS)$(CPPFLAGS) $< + +LINK.cmd = $(LD)$(extra_LDFLAGS)$(LDFLAGS)/exe=$@ $(subst $s,$c,$^)$(LDLIBS) + +# Don't know how to do this +CHECK.cmd = + +define RM.cmd + -purge [...] + -$(RM) $(PROG); + -$(RM) $(src)*.$(OBJEXT); +endef + + +$(OUTDIR)$(src)config.h: $(SRCDIR)$(src)config.h.W32 + $(CP.cmd) diff --git a/mk/Windows32.mk b/mk/Windows32.mk index 8848827b..fb643174 100644 --- a/mk/Windows32.mk +++ b/mk/Windows32.mk @@ -1,6 +1,6 @@ # GNU -*-Makefile-*- to build GNU make on Windows # -# Windows overrides for use with Makebase.mk. +# Windows overrides for use with Basic.mk. # # Copyright (C) 2017 Free Software Foundation, Inc. # This file is part of GNU Make. @@ -25,7 +25,7 @@ TARGET_TYPE = release TOOLCHAIN = msvc -prog_SOURCES += getloadavg.c $(glob_SOURCES) $(w32_SOURCES) +prog_SOURCES += $(loadavg_SOURCES) $(glob_SOURCES) $(w32_SOURCES) w32_LIBS = kernel32 user32 gdi32 winspool comdlg32 advapi32 shell32 ole32 \ oleaut32 uuid odbc32 odbccp32 @@ -39,7 +39,7 @@ msvc_CC = cl.exe msvc_LD = link.exe msvc_CPPFLAGS = /DHAVE_CONFIG_H /DWINDOWS32 /DWIN32 /D_CONSOLE -msvc_CPPFLAGS += /I$(OUTDIR) /I$(SRCDIR) /I$(SRCDIR)/glob /I$(SRCDIR)/w32/include +msvc_CPPFLAGS += /I$(OUTDIR)src /I$(SRCDIR)/src /I$(SRCDIR)/glob /I$(SRCDIR)/src/w32/include msvc_CFLAGS = /nologo /MT /W4 /EHsc msvc_CFLAGS += /FR$(OUTDIR) /Fp$(BASE_PROG).pch /Fd$(BASE_PROG).pdb @@ -52,11 +52,11 @@ msvc_C_SOURCE = /c msvc_OUTPUT_OPTION = /Fo$@ msvc_LINK_OUTPUT = /OUT:$@ -release_msvc_OUTDIR = ./WinRel +release_msvc_OUTDIR = ./WinRel/ release_msvc_CPPFLAGS = /D NDEBUG release_msvc_CFLAGS = /O2 -debug_msvc_OUTDIR = ./WinDebug +debug_msvc_OUTDIR = ./WinDebug/ debug_msvc_CPPFLAGS = /D _DEBUG debug_msvc_CFLAGS = /Zi /Od debug_msvc_LDFLAGS = /DEBUG @@ -65,10 +65,10 @@ debug_msvc_LDFLAGS = /DEBUG gcc_CC = gcc gcc_LD = $(gcc_CC) -release_gcc_OUTDIR = ./GccRel -debug_gcc_OUTDIR = ./GccDebug +release_gcc_OUTDIR = ./GccRel/ +debug_gcc_OUTDIR = ./GccDebug/ -gcc_CPPFLAGS = -DHAVE_CONFIG_H -I$(OBJDIR) -I$(SRCDIR) -I$(SRCDIR)/glob -I$(SRCDIR)/w32/include +gcc_CPPFLAGS = -DHAVE_CONFIG_H -I$(OUTDIR)src -I$(SRCDIR)/src -I$(SRCDIR)/glob -I$(SRCDIR)/src/w32/include gcc_CFLAGS = -mthreads -Wall -std=gnu99 -gdwarf-2 -g3 gcc_LDFLAGS = -mthreads -gdwarf-2 -g3 gcc_LDLIBS = $(addprefix -l,$(w32_libs)) @@ -86,8 +86,14 @@ LINK.cmd = $(LD) $(extra_LDFLAGS) $(LDFLAGS) $(TARGET_ARCH) $^ $(LDLIBS) $(LINK_ CHECK.cmd = cmd /c cd tests \& .\run_make_tests.bat -make ../$(PROG) -MKDIR.cmd = cmd /c mkdir $(subst /,\\,$@) -RM.cmd = cmd /c del /F /Q $(subst /,\\,$(OBJECTS) $(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 /,\\,$< $@) CC = $($(TOOLCHAIN)_CC) LD = $($(TOOLCHAIN)_LD) @@ -104,7 +110,7 @@ EXEEXT = .exe _CUSTOM = $($(TOOLCHAIN)_$1) $($(TARGET_TYPE)_$1) $($(TARGET_TYPE)_$(TOOLCHAIN)_$1) # I'm not sure why this builds gnumake rather than make...? -PROG = $(OUTDIR)/gnumake$(EXEEXT) +PROG = $(OUTDIR)gnumake$(EXEEXT) BASE_PROG = $(basename $(PROG)) extra_CPPFLAGS = $(call _CUSTOM,CPPFLAGS) @@ -112,5 +118,5 @@ extra_CFLAGS = $(call _CUSTOM,CFLAGS) extra_LDFLAGS = $(call _CUSTOM,LDFLAGS) LDLIBS = $(call _CUSTOM,LDLIBS) -$(OUTDIR)/config.h: $(SRCDIR)/config.h.W32 - cmd /c copy /Y $(subst /,\\,$< $@) +$(OUTDIR)src/config.h: $(SRCDIR)/src/config.h.W32 + $(CP.cmd) diff --git a/mk/msdosdjgpp.mk b/mk/msdosdjgpp.mk index a9dd2501..7d617938 100644 --- a/mk/msdosdjgpp.mk +++ b/mk/msdosdjgpp.mk @@ -1,6 +1,6 @@ # GNU -*-Makefile-*- to build GNU make on MS-DOS with DJGPP # -# MS-DOS overrides for use with Makebase.mk. +# MS-DOS overrides for use with Basic.mk. # # Copyright (C) 2017 Free Software Foundation, Inc. # This file is part of GNU Make. @@ -23,12 +23,22 @@ EXEEXT = .exe CC = gcc -prog_SOURCES += getloadavg.c $(glob_SOURCES) +prog_SOURCES += $(loadavg_SOURCES) $(glob_SOURCES) -extra_CPPFLAGS += -I$(SRCDIR)/glob -DINCLUDEDIR=\"c:/djgpp/include\" -DLIBDIR=\"c:/djgpp/lib\" +INCLUDEDIR = c:/djgpp/include +LIBDIR = c:/djgpp/lib +LOCALEDIR = c:/djgpp/share -MKDIR.cmd = command.com /c mkdir $(subst /,\\,$@) -RM.cmd = command.com /c del /F /Q $(subst /,\\,$(OBJECTS) $(PROG)) +extra_CPPFLAGS = -I$(SRCDIR)/glob -$(OUTDIR)/config.h: $(SRCDIR)/configh.dos - command.com /c copy /Y $(subst /,\\,$< $@) +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 /,\\,$< $@) + +$(OUTDIR)src/config.h: $(SRCDIR)/src/configh.dos + $(CP.cmd) -- cgit v1.2.1