Hacker News new | ask | show | jobs
by lauretas 3229 days ago
"notabug.org"... interesting.

Anyway, how does this compare, features-wise, with GNU Make? For example with make you have `./configure` files, do I also have them here?

4 comments

> For example with make you have `./configure` files, do I also have them here?

The concept of `./configure` is 100% orthogonal to Makefiles. You can have Makefiles without `./configure`, and you can have `./configure` that outputs something other than a Makefile. For example, I could easily imagine a `./configure` that prints a shell script like the one in the submission.

Looking as the sh code, it appears that it will work without tab characters. https://stackoverflow.com/a/2131227/1144060

So there's that.

As it happens, I was moved to create this standalone repo showing off my current build setup after writing this comment: https://www.reddit.com/r/vim/comments/6l8z34/vim_betrayed_me...

So yes, eliminating tabs (or rather the execrable requirement of using tabs) was absolutely a prime goal.

Put this in ~/.editorconfig

    [Makefile]
    indent_style = tab
And install the plugin, which is available for most editors and IDEs.

http://editorconfig.org/

It's not a requirement - I give you: .RECIPEPREFIX

> If you prefer to prefix your recipes with a character other than tab, you can set the .RECIPEPREFIX variable to an alternate character

That said, how hard is it really to disable tab expansion in your editor? I have a block of configuration dedicated to the different indentation requirements of different programming and configuration languages. In more modern editors, I don't even have to do anything at all to edit Makefiles with tabs - they come pre-configured to do the right thing.

Configure scripts are part of autotools, not make.
The whole goal of this approach is to get out of the vicious cycle of build files generating other build files, so no `configure`.

`configure` is not in itself a feature. What purpose does it fulfill for you? Then we can discuss how we may serve that purpose in some more lightweight manner.

I have the feeling your way of thinking is 'remove every abstraction so that we end up with a simpler system'. This works in some cases, but certainly not all of them. configure is one of them.

Why? Try removing a configure script for even a simple autotools project, and ensure that it still builds fine on all previously supported platforms by writing a cross platform Makefile. Good luck with that.

"I have the feeling your way of thinking is 'remove every abstraction so that we end up with a simpler system'."

You're certainly right about that:

http://akkartik.name/about

http://akkartik.name/post/libraries2

https://lobste.rs/s/to8wpr/configuration_files_are_canary_wa...

:)

"This works in some cases, but certainly not all of them."

This too I'm totally willing to accept. I believe most abstractions are prematurely frozen and so poorly designed. But this makes me liable to err too far in the other direction.

"configure is one of them. Why? Try removing a configure script for even a simple autotools project, and ensure that it still builds fine on all previously supported platforms by writing a cross platform Makefile. Good luck with that."

Here we part ways. I think `configure` is one of the easiest cases for me to be sure of, and it's because I don't care about "all previously supported platforms". Many if not all of them are obsolete. Also, as rossy pointed out elsewhere in this thread (https://news.ycombinator.com/item?id=15045076), it's impossible to know today if there's a bug in autotools for some rare platform.

We live in a world very different from the one autotools were built for, and it's almost a monoculture at this point. All that crap is utterly unnecessary today. I don't care about building software on all possible platforms, all I care about is building it on this one platform in front of me right now.

The most frustrating thing about autotools is that it's unclear which platform each individual check is concerned with. I have a whole mess of rules from 20 years ago -- and zero rationale for any of the rules. That makes even the few rules that are worth having a net liability because I can't separate them from all the useless ones.