delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2016/06/12/13:18:39

X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f
X-Recipient: djgpp AT delorie DOT com
Message-ID: <575D996C.1000507@gmx.de>
Date: Sun, 12 Jun 2016 19:18:36 +0200
From: "Juan Manuel Guerrero (juan DOT guerrero AT gmx DOT de) [via djgpp AT delorie DOT com]" <djgpp AT delorie DOT com>
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.2.13) Gecko/20101206 SUSE/3.1.7 Thunderbird/3.1.7
MIME-Version: 1.0
To: bug-make AT gnu DOT org, djgpp AT delorie DOT com
Subject: Some DJGPP specific fixes for Make 4.2.1 and later.
X-Provags-ID: V03:K0:Oh0KC4Ty421yWKuSnRPLqVENmNT3XD17dH7Z2Sa9kRbINr9bMYx
SUB6HrrAvFDHU6e56ZyCwwPT1oDLrnLEIeP64tqTRmRAPwdELVaBv4pBpqY53haY33g4hOe
NJ/KMYE3gC8fMwCIIlHhMHewOHEOmkFMn4qXjpZ65DvwMQFtXG0jAzaOzstEnzVfviADo6s
vyA4wb3BdwSWOq8bd+DEg==
X-UI-Out-Filterresults: notjunk:1;V01:K0:K8PQIUMTKc0=:n1Q9CJGNy1VG+FXBJtCRZL
gKn13CeDr7IgI5w38Z1o4uyvsJEDKXD19lNt8qx8IX8tT6GK6AzqyDYXewdbqHadOufMAJ/N/
SiWcO7rN2JMYHcL0nWuAfxFZBuQz64N+i9YofIaD8ibCaeriYV42ZyIrR0hWYKaB8GzKYhgeU
j4zYn/t9n024PRFvjV7qSxTfZXUdFoa73J8GME3ENZSzvF5AmVbxSBqzAX9SaiaPR1OiKpviV
+pyKZIFxOmMfKthSQ0iy1fIIBDcOQcjUlm05nKXoncZ8hlqIz2sYGGrLofrbBXbv4RfOMUL7l
NJFvfhXuc/RMl1Ba3mDgyY6nt+QCP2kjJdHNrm8fkNV6MlMFM1ya/8ouDNoRGQwrr+jJ8a3re
iodOZILOMx5Y5gvxop1VgdCLnbXoI1Ip3p/jL++Zw/Z03KU1qGxVajJhIP0j6cllIc8Q8nVir
msu3T10Ha8lGpszfTSQ1DVOFrEyTIvcniL8prRCHuetVvkakjEbCMbtYIUnd4sy3RV9GxS4l8
Bf0HD/TPyP7sNCJTjOqFYIoe9pb57kSFoZH3KYxR6f7r9yzRFhRQpGbgK8esxZkkXabljNPb7
JkM17IWu1sIkV4yHLX9/jJArUGFQH5qxkGLH0uSDgHPBLlpx2Zt1XYGyzhDq54nVErP/p/Mmm
Rzi5cFj4BSZmzkq7pFbTsxZrnsfW8pQqiKvVUBBcsuiyx6LXVef7mt86JUOg4jcOyj76W4O4X
DSiq1YFTp9TZ22MznPArgd00DSuZHM0iYoDWdaSuM8fKI7f3b1seLOyQ7UWpVHt8WfTBKzYvR
92Qbxy2
Reply-To: djgpp AT delorie DOT com

I would like to suggest some fixes that are DJGPP specific but that may also be
usefull for other systems.
A) General issues.
    -  The current version produces for absolute every run the warning:
         "Parallel jobs (-j) are not supported on this platform."
       although "-j" has never been passed as argument to the make program.
       The reason is that arg_job_slots is initialized to -1 and no code
       changes this value to 1 for platforms that do not support parallel
       jobs.  Because -1 is different to 1, the warning is countinuously
       issued.  An explicit check for greather than 1 seems the better
       approach.  Please inspect the patch below.
    -  For systems like MSDOS, WINDOWS32 and other ones, the function get_bad_stdin
       is defined as a no-op macro in os.h but at the same time exists an
       implementation of the function in posixos.c.  This implementation
       is always compiled no matter if __MSDOS__ and/or MAKE_JOBSERVER is
       defined or not in posixos.c.  To avoid this contradiction, I have put
       the get_bad_stdin definition inside the same #ifdef than the ones used
       in os.h.  Please inspect the patch.  This approach is only a suggestion;
       may be there is a different way to solve this issue.

B) DJGPP specific issues.
    -  Use "/dev/env/DJDIR" to get the installation directory instead of the
       hard coded "c:/djgpp".
    -  Support the creation of documentation in pdf format.  The Makefile.DOS
       has been adjusted accordingly


As usual suggestions, objections, comments are welcome.


Regards,
Juan M. Guerrero





2016-06-12 Juan Manuel Guerrero  <juan DOT guerrero AT gmx DOT de>

	* Makefile.DOS: Added rule to create pdf formated documentation.

	* dosbuild.bat:  Use /dev/env/DJDIR instead of c:/djgpp.

	* main.c (main):  Issue message about not supported parallel jobs only
	if arg_job_slots is set greather than 1.

	* posixos.c (get_bad_stdin):  Compile only if not replaced by macro
	defined in os.h.





diff -aprNU8 make-4.2.1.orig/dosbuild.bat make-4.2.1/dosbuild.bat
--- make-4.2.1.orig/dosbuild.bat	2016-02-28 18:48:44 +0100
+++ make-4.2.1/dosbuild.bat	2016-06-12 17:13:24 +0200
@@ -21,18 +21,18 @@ rem Echo ON so they will see what is goi
  @echo on
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g commands.c -o commands.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g output.c -o output.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g job.c -o job.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g dir.c -o dir.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g file.c -o file.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g misc.c -o misc.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g main.c -o main.o
-gcc  -c -I. -I./glob -DHAVE_CONFIG_H -DINCLUDEDIR=\"c:/djgpp/include\" -O2 -g read.c -o read.o
-gcc  -c -I. -I./glob -DHAVE_CONFIG_H -DLIBDIR=\"c:/djgpp/lib\" -O2 -g remake.c -o remake.o
+gcc  -c -I. -I./glob -DHAVE_CONFIG_H -DINCLUDEDIR=\"/dev/env/DJDIR/include\" -O2 -g read.c -o read.o
+gcc  -c -I. -I./glob -DHAVE_CONFIG_H -DLIBDIR=\"/dev/env/DJDIR/include\" -O2 -g remake.c -o remake.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g rule.c -o rule.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g implicit.c -o implicit.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g default.c -o default.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g variable.c -o variable.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g expand.c -o expand.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g function.c -o function.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g vpath.c -o vpath.o
  gcc  -c -I. -I./glob -DHAVE_CONFIG_H -O2 -g hash.c -o hash.o
diff -aprNU8 make-4.2.1.orig/main.c make-4.2.1/main.c
--- make-4.2.1.orig/main.c	2016-05-31 09:17:26 +0200
+++ make-4.2.1/main.c	2016-06-12 17:13:24 +0200
@@ -2039,19 +2039,22 @@ main (int argc, char **argv, char **envp

  #if defined (__MSDOS__) || defined (__EMX__) || defined (VMS)
    if (arg_job_slots != 1
  # ifdef __EMX__
        && _osmode != OS2_MODE /* turn off -j if we are in DOS mode */
  # endif
        )
      {
-      O (error, NILF,
-         _("Parallel jobs (-j) are not supported on this platform."));
-      O (error, NILF, _("Resetting to single job (-j1) mode."));
+      if (arg_job_slots > 1)
+        {
+          O (error, NILF,
+           _("Parallel jobs (-j) are not supported on this platform."));
+          O (error, NILF, _("Resetting to single job (-j1) mode."));
+        }
        arg_job_slots = job_slots = 1;
      }
  #endif

    /* If we have >1 slot at this point, then we're a top-level make.
       Set up the jobserver.

       Every make assumes that it always has one job it can run.  For the
diff -aprNU8 make-4.2.1.orig/Makefile.DOS make-4.2.1/Makefile.DOS
--- make-4.2.1.orig/Makefile.DOS	2016-06-11 01:03:54 +0200
+++ make-4.2.1/Makefile.DOS	2016-06-12 17:16:20 +0200
@@ -108,19 +108,21 @@ make_DEPENDENCIES =    glob/libglob.a
  make_LDFLAGS =
  libglob_a_LIBADD =
  libglob_a_OBJECTS =  fnmatch.o glob.o
  noinst_LIBRARIES =	glob/libglob.a
  CFLAGS = -O2 -g
  COMPILE = $(CC) $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)
  LINK = $(CC) $(CFLAGS) $(LDFLAGS) -o $@
  TEXI2DVI = texi2dvi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
  TEXINFO_TEX = $(srcdir)/config/texinfo.tex
  INFO_DEPS = doc/make.info
  DVIS = doc/make.dvi
+PDFS = doc/make.pdf
  TEXINFOS = doc/make.texi
  noinst_TEXINFOS = doc/fdl.texi doc/make-stds.texi
  man1dir = $(mandir)/man1
  MANS = $(man_MANS)

  NROFF = nroff
  DIST_COMMON =  README ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL Makefile.am  Makefile.in NEWS acconfig.h aclocal.m4 alloca.c build.sh-in config.h-in  configure configure.ac getloadavg.c

@@ -130,17 +132,17 @@ TAR = gtar
  GZIP = --best
  SOURCES = $(make_SOURCES)
  OBJECTS = $(make_OBJECTS)
  HEADERS = $(wildcard $(srcdir)/*.h)

  default: all

  .SUFFIXES:
-.SUFFIXES: .c .dvi .info .o .obj .ps .texi .tex .html
+.SUFFIXES: .c .dvi .info .o .obj .pdf .ps .texi .tex .html

  mostlyclean-hdr:

  clean-hdr:

  distclean-hdr:
  	-rm -f config.h

@@ -184,16 +186,17 @@ make$(EXEEXT): $(make_OBJECTS) $(make_DE
  	@command.com /c if exist make del make
  	@command.com /c if exist make.exe del make.exe
  	$(LINK) $(make_LDFLAGS) $(make_OBJECTS) $(make_LDADD) $(LIBS)

  # Documentation

  make.info: make.texi
  make.dvi: make.texi
+make.pdf: make.texi
  make.ps: make.dvi make.texi
  make.html: make.texi


  DVIPS = dvips

  .texi.info:
  	@command.com /c if exist make.info* del make.info*
@@ -203,16 +206,19 @@ DVIPS = dvips
  .texi:
  	@command.com /c if exist make.info* del make.info*
  	@command.com /c if exist make.i* del make.i*
  	$(MAKEINFO) -I$(srcdir) --no-split $< -o ./$@

  .texi.dvi:
  	TEXINPUTS="$(srcdir);$$TEXINPUTS"    MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2DVI) $<

+.texi.pdf:
+	TEXINPUTS="$(srcdir);$$TEXINPUTS"    MAKEINFO='$(MAKEINFO) -I $(srcdir)' $(TEXI2PDF) $<
+
  .dvi.ps:
  	$(DVIPS) $< -o $@

  # Other documentation formats

  html: html-recursive

  .texi.html:
@@ -236,17 +242,17 @@ dist-info: $(INFO_DEPS)
  	for base in $(INFO_DEPS); do    d=$(srcdir);    for file in `cd $$d && eval echo $$base*`; do      test -f $(distdir)/$$file      || ln $$d/$$file $(distdir)/$$file 2> /dev/null      || cp -p $$d/$$file $(distdir)/$$file;    done;  done

  mostlyclean-aminfo:
  	-rm -f $(srcdir)/doc/make.aux $(srcdir)/doc/make.cp $(srcdir)/doc/make.cps $(srcdir)/doc/make.dvi \
  	  $(srcdir)/doc/make.fn $(srcdir)/doc/make.fns $(srcdir)/doc/make.ky $(srcdir)/doc/make.kys \
  	  $(srcdir)/doc/make.ps $(srcdir)/doc/make.log $(srcdir)/doc/make.pg $(srcdir)/doc/make.toc \
  	  $(srcdir)/doc/make.tp $(srcdir)/doc/make.tps $(srcdir)/doc/make.vr $(srcdir)/doc/make.vrs \
  	  $(srcdir)/doc/make.op $(srcdir)/doc/make.tr $(srcdir)/doc/make.cv $(srcdir)/doc/make.cn \
-	  $(srcdir)/doc/make.html
+	  $(srcdir)/doc/make.html $(srcdir)/doc/make.pdf

  clean-aminfo:

  distclean-aminfo:

  maintainer-clean-aminfo:
  	for i in $(INFO_DEPS); do rm -f $$i*; done

@@ -388,16 +394,24 @@ endif
  dvi: dvi-recursive
  dvi-recursive:
  ifeq ($(findstring doc, $(SUBDIRS)), doc)
  	@command.com /c if not exist doc\\nul md doc
  	@echo Making all in doc
  	$(MAKE) -C doc -f ../Makefile VPATH=$(srcdir)/doc make.dvi
  endif

+pdf: pdf-recursive
+pdf-recursive:
+ifeq ($(findstring doc, $(SUBDIRS)), doc)
+	@command.com /c if not exist doc\\nul md doc
+	@echo Making all in doc
+	$(MAKE) -C doc -f ../Makefile VPATH=$(srcdir)/doc make.pdf
+endif
+
  ps: ps-recursive
  ps-recursive:
  ifeq ($(findstring doc, $(SUBDIRS)), doc)
  	@command.com /c if not exist doc\\nul md doc
  	@echo Making all in doc
  	$(MAKE) -C doc -f ../Makefile VPATH=$(srcdir)/doc make.ps
  endif

diff -aprNU8 make-4.2.1.orig/posixos.c make-4.2.1/posixos.c
--- make-4.2.1.orig/posixos.c	2016-05-21 22:21:52 +0200
+++ make-4.2.1/posixos.c	2016-06-12 17:13:24 +0200
@@ -395,16 +395,17 @@ jobserver_acquire (int timeout)

    return 0;
  }

  #endif

  #endif /* MAKE_JOBSERVER */

+#if !defined(VMD) && !defined(WINDOWS32) && !defined(_AMIGA) && !defined(__MSDOS__)
  /* Create a "bad" file descriptor for stdin when parallel jobs are run.  */
  int
  get_bad_stdin (void)
  {
    static int bad_stdin = -1;

    /* Set up a bad standard input that reads from a broken pipe.  */

@@ -424,8 +425,9 @@ get_bad_stdin (void)
               child's descriptor table.  When it is dup2'd onto descriptor 0,
               that descriptor will not close on exec.  */
            CLOSE_ON_EXEC (bad_stdin);
          }
      }

    return bad_stdin;
  }
+#endif

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019