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 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 Content-Disposition: inline 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: 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 . Send suggestions and bug reports concerning the DJGPP port to comp.os.msdos.djgpp or . Enjoy. Guerrero, Juan Manuel