Re: Accounting for SHELL in ./configure

Mohammad Akhlaghi <[email protected]> Thu, 2 May 2024 00:39:35 +0200
Newsgroups gmane.comp.fonts.freetype.devel
Message-ID <[email protected]>
I had set the 'SHELL' environment variable but still '/bin/sh' was used. 
The only way I could pass my SHELL to the Make command within the 
configure script was through the non-standard hack I mentioned before: 
GNUMAKE="make SHELL=$SHELL"

Autoconf generates the './configure' script automatically though a 
'configure.ac' file. But I don't see any 'configure.ac' in FreeType's 
source. For example here is the source code of a project that I maintain 
which uses Autoconf:

https://git.savannah.gnu.org/cgit/gnuastro.git/tree

The './configure' script is generated automatically from 'configure.ac' 
when building the tarball (since the configure script is automatically 
generated, we don't keep it under version control).

Cheers,
Mohammad

On 5/1/24 11:17 PM, Behdad Esfahbod wrote:
> Scratch that.
> 
> Where is it exactly failing? On Unix, the build system is essentially
> autoconf, so it should respect SHELL as you suggest.
> 
> behdad
> http://behdad.org/
> 
> 
> On Wed, May 1, 2024 at 3:15 PM Behdad Esfahbod <[email protected]> wrote:
> 
>> Can you check if also setting CONFIG_SHELL helps?
>>
>> behdad
>> http://behdad.org/
>>
>>
>> On Wed, May 1, 2024 at 3:06 PM Mohammad Akhlaghi <[email protected]>
>> wrote:
>>
>>> The Autoconf-generated configure script, or even CMake, respect SHELL, so
>>> if a user gives it a problematic shell, they won't be able to build
>>> anything abd many programs will crash.
>>>
>>> But please consider the scenario mentioned before: when a user doesn't
>>> have root permissions to change '/bin/sh', they are left with non-standard
>>> hacks like what I did.
>>>
>>> When each program's build system respects 'SHELL', the user is free to
>>> use any shell they want with any program's build.
>>>
>>> Cheers,
>>> Mohammad
>>>
>>>
>>>
>>>
>>> On May 1, 2024 10:55:05 PM GMT+02:00, Behdad Esfahbod <[email protected]>
>>> wrote:
>>>
>>>> I'm not talking about the user overriding the shell specifically. I'm
>>>> talking about users who genuinely use a non-POSIX shell as their terminal
>>>> shell. Then just running ./configure would fail if configure was to respect
>>>> $SHELL.
>>>>
>>>> Or rather you're saying that only POSIX-compatible shells should set
>>>> $SHELL.
>>>> behdad
>>>> http://behdad.org/
>>>>
>>>>
>>>> On Wed, May 1, 2024 at 2:45 PM Mohammad Akhlaghi <[email protected]>
>>>> wrote:
>>>>
>>>>> Thanks Behdad,
>>>>>
>>>>> The problem is that I do not have root permissions on the system with
>>>>> the faulty '/bin/sh': I cannot change '/bin/sh' and need to build my
>>>>> programs with a custom shell.
>>>>>
>>>>> If the user specifies a wrong shell (not the default '/bin/sh'), it is
>>>>> their own responsibility that it is POSIX-compatible. The same way that a
>>>>> user can give a non-GNU Make executable to the GNUMAKE variable.
>>>>>
>>>>> In short, when a user changes defaults, it is their resposibility, not
>>>>> the developer's. So no need to worry about that; the important thing is to
>>>>> give users the freedon to customize for their custom environments (as GNU
>>>>> Autoconf does for example; but Autoconf is not used in FreeType).
>>>>>
>>>>> Cheers,
>>>>> Mohammad
>>>>>
>>>>>
>>>>>
>>>>> On May 1, 2024 10:25:54 PM GMT+02:00, Behdad Esfahbod <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> There's no guarantee that the user's shell is sh-compatible. autoconf
>>>>>> really means sh here, because that's the shell the script is written for.
>>>>>> Just symlink your favorite shell to sh then, if it's compatible.
>>>>>>
>>>>>> behdad
>>>>>> http://behdad.org/
>>>>>>
>>>>>>
>>>>>> On Wed, May 1, 2024 at 2:13 PM Mohammad Akhlaghi <
>>>>>> [email protected]> wrote:
>>>>>>
>>>>>>> Hi again,
>>>>>>>
>>>>>>> I was able to find a cleaner hack by running this command before the
>>>>>>> './configure' script:
>>>>>>>
>>>>>>> export GNUMAKE="make SHELL=$SHELL"
>>>>>>>
>>>>>>> Afterwards, FreeType successfully ran with my desired shell.
>>>>>>>
>>>>>>> But generally, it would greatly help those building FreeType from
>>>>>>> source
>>>>>>> if the configure script accounts for the 'SHELL' environment variable.
>>>>>>>
>>>>>>> Thanks a lot for all the nice work on FreeType,
>>>>>>> Cheers,
>>>>>>> Mohammad
>>>>>>>
>>>>>>> On 5/1/24 9:00 PM, Mohammad Akhlaghi wrote:
>>>>>>>> Dear Freetype developers,
>>>>>>>>
>>>>>>>> I was trying to build FreeType from source and noticed that the
>>>>>>>> './configure' script does not account for the 'SHELL' environment
>>>>>>> and
>>>>>>>> will always use '/bin/sh'.
>>>>>>>>
>>>>>>>> Looking at the source of the './configure' script, I was able to
>>>>>>> fix the
>>>>>>>> problem by manually adding a 'SHELL=$SHELL' in line 135 of the
>>>>>>>> './configure' script:
>>>>>>>>
>>>>>>>>
>>>>>>> https://gitlab.freedesktop.org/freetype/freetype/-/blob/master/configure?ref_type=heads#L135
>>>>>>>>
>>>>>>>> Accounting for the user's given SHELL is common in many programs
>>>>>>> when
>>>>>>>> building from source, so it would be good if you could account for
>>>>>>> it in
>>>>>>>> future versions of FreeType also.
>>>>>>>>
>>>>>>>> Cheers,
>>>>>>>> Mohammad
>>>>>>>
>>>>>>>
>