Mail Archives: djgpp/2007/11/26/11:11:01
X-Authentication-Warning: | delorie.com: mail set sender to djgpp-bounces using -f
|
Message-Id: | <200711261609.lAQG9OTu001728@delorie.com>
|
X-Authenticated: | #27081556
|
X-Provags-ID: | V01U2FsdGVkX184MAR1IfI4jLznTAps8APq+u4UHWx7EO/5kPsodj
|
| wjA4TlBgaMirwZ
|
From: | Juan Manuel Guerrero <juan DOT guerrero AT gmx DOT de>
|
To: | djgpp-announce AT delorie DOT com
|
Subject: | ANNOUNCE: DJGPP port of GNU Make 3.81 uploaded
|
Date: | Sun, 25 Nov 2007 08:43:25 +0100
|
X-Y-GMX-Trusted: | 0
|
This is a port of GNU Make 3.81 to MSDOS/DJGPP.
Make is a program for building other programs, given a description of
the dependencies between the files.
DJGPP specific changes.
=======================
The are two kind of required djgpp specific changes to the sources:
1) Those ones required to get the sources configured and compiled at all.
This is because the djgpp port has not been actively maintained by the
Make maintainers since a couple of years.
2) Those changes required to get a working binary. This concerns two
different points. First the correct handling of the path strings;
here new functions have been introduced that are written in a unix centric
way, completely ignore the DOS specific path syntax like leading drive
letters and backslashes as directory separator. Second and more difficult
to solve is that there is a posix rule that seems to impose that the value
of the SHELL Makefile variable is no longer exported automatically. This
has the consequence that when the system() function of djgpp's libc is
called to execute some bash shell script that is contained in the Makefile,
because SHELL has been deleted from the environment, the default shell of
MSDOS, command.com is invoked to execute it. Of corse, command.com is not
able at all to interpret that bash script and the Makefile execution is
aborted with an error message from command.com that is usually very
difficult to relate to the real error reason.
After inspecting the bug mailing list of GNU make I found a patch proposed by
Eli Zaretskii some years ago that tried to address those issues. It can be
inspected at:
<http://lists.gnu.org/archive/html/bug-make/2005-02/msg00022.html>
It is completely unclear to me why those propositions have not been adopted.
After having fixed some bugs in the logic that handles the path strings, the
patch propossed by Eli has become a very good starting point for this port.
The real difficult issue is that the SHELL value is no longer exported so that
on non-POSIX systems like MSDOS/WINDOWS the default shell (command.com or
cmd.exe) is used. This POSIX rule breaks backward compatibily of the DJGPP
port of make and is really a show stopper because it breaks Makefiles in non-
POSIX environments like MSDOS. There are two ways to solve this issue:
1) Impose to the user to explicitly set the environment variables SHELL and/or
the new MAKESHELL to bash.
2) Patch the code in such a way that it exports the SHELL value from the
Makefile as it used to be.
The first approach can be done by adding to djgpp.env the following lines:
[make]
MAKESHELL=/bin/sh
In the end, this modification should be done in the CVS version from djgpp.env
by the maintainers of djgpp. Because it can not be assumed that a new update
of djgpp will be released in the near future I have opted for the second
approach.
The things I have changed are documented as usual with the diffs files stored
in /djgpp. The diffs1 file is almost identical to Eli's patch. diffs2 contains
my bug-fixes to diffs1 and some other changes. diffs3 contains mostly those
changes required to get the testsuite running. There are two kind of fixes
here:
1) The error message issued by djgpp's libc when a file is not found always
includes a string like (ENOENT). The gnu libc seems not to issue such a
string. This difference confuses the testsuite and lets it claim that
the particular test case has failed.
2) There is a test case that plays around with the SHELL variable. Because I
have modified the make code to export the SHELL value, this test case will
not work and I have inhibt it at all.
No test shall fail. To run the testsuite you need a port of perl and bash
installed.
If you want to apply the patches to the original sources downloaded from some
gnu.org mirror, you have to apply first diffs1 then diffs2 and last diffs3.
Please read the Make specific news, readme and changelog files for more
information.
Please note that there will be no binary archive compiled with djdev203.
Using djdev203 increases the amount of porting work even more and I have not
the time to waist it in such a task. Anyway the binaries produced with
djdev204 are as good as the ones produced with stock djdev203.
The source archive is not SFN clean. To compile the sources you will need
some OS with LFN support like Win98 or WinXP. Also the testsuite requires
long filename support.
The port consists of the usual three packages that have been compiled
using djdev204 and it can be downloaded from ftp.delorie.com and mirrors
as (timestamp 2007-11-25):
Make 3.81 binary, info and man format documentation:
ftp://ftp.delorie.com/pub/djgpp/beta/v2gnu/mak381b.zip
Make 3.81 html, dvi, pdf and ps format documentation:
ftp://ftp.delorie.com/pub/djgpp/beta/v2gnu/mak381d.zip
Make 3.81 source:
ftp://ftp.delorie.com/pub/djgpp/beta/v2gnu/mak381b.zip
Send GNU Marst specific bug reports to <bug-make AT gnu DOT org>.
Send suggestions and bug reports concerning the DJGPP port to
comp.os.msdos.djgpp or <djgpp AT delorie DOT com>.
Enjoy.
Guerrero, Juan Manuel <juan DOT guerrero AT gmx DOT de>
- Raw text -