On Monday, 18 April 2016 at 15:15:26 UTC, Atila Neves wrote:
Here's[1] another attempt at converting the Makefile for POSIX systems to D using reggae[2]. I first tried my hand at writing a parser for Makefiles using Pegged and machine translating to D. I learned a lot about parsing and GNU make in the process and also that:

1. It was about two orders of magnitude more work than I thought to support the subset of GNU make used by posix.mak
2. The generated D code wasn't exactly pretty

I concluded that worse is better and hand translated all of posix.mak instead. It isn't as pretty as possible either, but that's on purpose - since I'll have to mentally apply any further diffs and hand translate, I tried to make it as close as possible to the existing Makefile. That way the edits should be obvious.

AFAICT by testing manually, it does everything that the original Makefile does, including all the different unit test targets and documentation. Then again, I only tested on Linux. I've been trying to bend the auto-tester to my will to make sure all posix.mak systems are still green but I ran into configuration issues.

I'll carry on maintaining the D description as updates to posix.mak happen for a year. If we haven't switched by then we probably never will.

To try it out yourself, get & build/run reggae from dub in this branch at the root dir of phobos selecting the backend of choice with `-b <backend>`. I suggest the binary one since one of the points of this is to remove dependencies from other build systems. Then run make/ninja/tup/./build with the same targets as usual. If that doesn't work... open an issue on github.

Destroy!

Atila


[1] https://github.com/atilaneves/phobos/blob/reggae/reggaefile.d
[2] https://github.com/atilaneves/reggae

Phobos posix.mak in D:

https://github.com/atilaneves/phobos/blob/new_reggae/reggaefile.d

I've given up on making it look like the makefile for maintenance reasons and tried to write it "properly". At the end of the day, that phobos posix.mak just does a lot of stuff so even though I tried getting rid of cruft it's still rather large.

Notice however how there are no explicit listings of packages or converting them or anything like that. This isn't the best I can do, but it was a lot of work already so I thought I'd share.

This new attempt does everything posix.mak at that point in time did except for running unit tests per package. I think that's the test runner's job anyway. I also changed the individual unit test targets from e.g. std/array.test to std.array.test because, well, it makes a lot more sense.

Atila

Reply via email to