Sujet : Re: Python recompile
De : bc (at) *nospam* freeuk.com (bart)
Groupes : comp.lang.cDate : 07. Mar 2025, 15:00:13
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vqeu5c$3imil$1@dont-email.me>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
User-Agent : Mozilla Thunderbird
On 07/03/2025 09:53,
Muttley@DastardlyHQ.org wrote:
On Thu, 6 Mar 2025 19:21:45 -0000 (UTC)
antispam@fricas.org (Waldek Hebisch) wibbled:
In comp.lang.c Muttley@dastardlyhq.org wrote:
On Tue, 4 Mar 2025 18:16:25 +0000
bart <bc@freeuk.com> wibbled:
The CPython source bundle doesn't come with any makefiles. The first
step appears to be to run a 35,000-line 'configure' script. Part of its
>
Frankly any build system that has a 35K configure file needs revisiting.
No package is so complex as to require that much setup. OS specific code
should be dealt with some appropriate ifdefs in the source and libraries
and linking should be a few 10s of lines.
>
Back in the day packages used to hve different preprepared Makefiles for
each system they could build on and IME that tended to work a lot better
than configure scripts that tried to figure things out on the fly.
>
I remember times when source package came with README file saying
edit this and that to configure for your system. Typically one
had to edit Makefile and possibly something like config.h. For
Header files should never have to be manually edited unless the person who
wrote the code didn't know wtf they were doing. #ifdef exists for a reason
and if thats not enough makefiles can always manually concat stuff into a
header.
me it worked quite well. But those times are gone. Most people
now do not know essential information about system they use, so
are unable to provide sensible values. And modern programs are
Those sorts of people should just install prepackaged binaries, not be building
from source.
My view is that building from source should be made as simple as possible. As easy as compiling hello.c.
I think it was 2014 that I first posted here a link to a C file that did exactly that, just about. It was a single file implementation of a substantial interpreter project, nearly 20Kloc, but transpiled from its original non-C language.
I don't have that anymore, the nearest is the 'qc.c' example used below, which is 40Kloc. This works with multiple compilers on Windows, here tested with three:
c:\qx>bcc qc
Compiling qc.c to qc.exe
c:\qx>gcc qc.c
c:\qx>tcc qc.c -luser32 c:\windows\system32\kernel32.dll -fdollars-in-identifiers
gcc generates a.exe so needs an extra option for that, but then so does hello.c. tcc doesn't like '$' in names, so needs that special option (why doesn't it just allow them?!). I couldn't just use -lkernel32 either as one imported symbol was missing.
So, how about Linux? Here I don't believe in using conditional code, so there is a special source version for Linux, let's say it's qu.c:
root@DESKTOP-11:/mnt/c/qx# gcc qu.c -lm -ldl -fno-builtin
Here it's a little bit more work, and it produces a.out. But tcc is about the same:
root@DESKTOP-11:/mnt/c/qx# tcc qu.c -lm -ldl -fdollars-in-identifiers
So:
* No configure scripts
* No makefiles
* No #ifdef blocks
* No header files (in fact virtually no macros in the source file)
* Virtually no compiler options, except what are mandatory. Users can
add -O, -o and -s options if they want.
* And the entire distribution for your platform is a single C file
Note that if downloadeding pre-built binaries, you will usually have a separate binary file for each platform. The same here: a separate C file per platform.
When I posted about this before, lots of people got the notion that my development process was also based single monolithic source file. That's completely wrong. (This project is about 30 modules and the C file is generated with a tool.)
This is about the distribution of a working, finished product to somebody who wants to build from source code so they can use it.
Too many projects just expect that user, to grapple with the same, sprawling directory structure that the developer works with. Which means elaborate makefiles full of dependency info.
What I provided was one step back from a binary file.
(Actually, with my bcc compiler, the product can be run from source:
c:\qx>bcc -r qc hello
Compiling qc.c to qc.(run)
Hello, World! 7-Mar-2025 13:57:12
So you could consider this an 'executable'. But it might blow some people's minds though.)