[fpc-pascal] Makefiles vs Pascal Automation

Mattias Gaertner nc-gaertnma at netcologne.de
Sat Oct 28 17:55:39 CEST 2006

On Sat, 28 Oct 2006 01:04:12 -0600
L505 <fpcmail at z505.com> wrote:

> In many cases makefiles take about just as long to create as shell
> scripts or pascal programs - they just offer a nice framework to
> automate compiling in an easy way - but in sort of a funny syntax.
> But makefiles kind of become ugly when they get big - and because
> they have a poor syntax compared to pascal programs - couldn't one
> just write a pascal program to automate the compilation process,
> instead of a makefile? (if a good framework was in place).
> A reusable "automation" unit or framework would need to be created so
> that automating the compile process from within a pascal program was
> easy.
> After thinking about it, I determined that makefiles are actually
> PROGRAMS in disguise - not config files, as their syntax seems to
> lead us to believe. They are config files on steroids. Config files
> generally don't execute instructions.. config files are more geared
> toward storage of settings. But makefiles do execute instructions!
> Makefiles are programs, not settings files.
> So if makefiles are actually mini-programs, why couldn't we simply
> write makefiles in pascal instead of writing makefiles in
> makefile-language/fpcmake-language?
> Psuedo Example.. let's consider I have to make four CGI programs in
> one shot. I want to rename EXE or ELF programs to CGI programs after
> the compilation is done. Compiling four programs using Make is
> possible, writing up a makefile.. but it could also be done this way:
> program Maker;
> uses
>   CompileTools; //the framework that simulates MAKE
> const
>   targets : array of [1..4] = ('index.pp', 'main.pp', 'login.pp',
> 'logout.pp'); begin
>   // compile several programs
>   Compile(targets);
>   if OStarget = linux then
>      writeln('compiling 4 programs for linux..');
>   // 4 could actually be "CompileCount", if framework implemented
> such a thing if OStarget = windows then
>      writeln('compiling 4 programs for windows..');
>   for i:= 1 to 4 do
>    RenameFile(CompiledEXE[i], CompiledEXEName[i] + '.cgi');
>   DeleteFiles('*.ppu', '*.a', '*.o');
> end;
> At the command line:
>   maker all
> Instead of using make:
>   make all
> The framework in the maker program would handle "all", "clean", etc.
> Instead of writing a new makefile each time we wanted to automated
> compilation, we would simple write a new pascal program which used
> the maker framework.
> Why did I come across this idea? The same reason I sometimes build a
> pascal program instead of using a shell script!
> The same reason that HTML files would make poor executables! The same
> reason that config files are really not meant to be programs... but
> rather settings files. Similarly, a config file is really not a
> program - and makefiles are becoming INI files on steroids - programs!
> If compiling the MAKER program each time is too much work, then maybe
> this would be a good use for PascalScript.
> So basically my main point is that make files have become executable
> INI files - something INI files really aren't intended to be - with
> less power and clarity than a real pascal program.

That's why FPC is switching to fpmake.pp files. And eventually/probably
lazarus too.


More information about the fpc-pascal mailing list