parrot_config RFC
James E Keenan
jkeen at verizon.net
Thu Jun 25 22:05:42 UTC 2009
Andy Dougherty wrote:
> On Tue, 23 Jun 2009, Jeff Horwitz wrote:
>
>> On Mon, 22 Jun 2009, James E Keenan wrote:
>>
>>> Since jhorwitz asked me about this just now at YAPC|10 Parrot BOF, a data
>>> point:
>>>
>>> ./parrot_config --dump | grep '$('
[snip]
>>> libparrot => '$(LIBPARROT_SHARED)'
>>> libparrot_shared => 'libparrot$(SHARE_EXT).$(SOVERSION)'
>>> libparrot_shared_alias => 'libparrot$(SHARE_EXT)'
>>> libparrot_soname => '-Wl,-soname=libparrot$(SHARE_EXT).$(SOVERSION)'
[snip]
>
> The remaining ones (libparrot, libparrot_shared, libparrot_shared_alias,
> and libparrot_soname) look to me as if they can (and should) simply be
> expanded by Configure.pl in the first place.
>
Let me see if I understand what expansion by Configure.pl would entail.
Let's look at just one of these Make variables: $(SHARE_EXT)
grepping the config/ directory, I get:
$ fns config | xargs grep -n share_ext
config/init/hints/darwin.pm:49: share_ext => '.dylib',
config/init/hints/darwin.pm:71: . $conf->data->get('share_ext')
config/init/hints/mswin32.pm:75: share_ext => '.dll',
config/init/hints/mswin32.pm:129: share_ext => '.dll',
config/init/hints/mswin32.pm:171: share_ext => '.dll',
config/init/defaults.pm:139: share_ext => ".$Config{so}", #
shared library extension
config/gen/makefiles/root.in:125:SHARE_EXT := @share_ext@
config/gen/config_pm/myconfig.in:16: share_ext='@share_ext@',
ld_share_flags='@ld_share_flags@',
config/gen/config_h/config_h.in:26:#define PARROT_SHARE_EXT
"@share_ext@"
I interpret this to mean:
1. Our old nemesis, the %Config associated with the Perl 5 used to
invoke Configure.pl, is consulted by init::defaults to define 'share_ext'.
2. On 2 OSes, darwin and mswin32, this is overridden by their
respective init::hints files.
3. The content of 'share_ext' in the Parrot::Configure object is then
assigned or used, in configuration step order:
a. as the value of PARROT_SHARE_EXT in the gen::config_h template;
b. as the value of SHARE_EXT in the gen::makefiles root template;
c. as the value of share_ext in the gen::config_pm myconfig template.
To further partialize the problem, let's consider only (3a) above. It
seems to me that instead of having a line in the template file
config_h.in which, in effect, hands the interpolation of 'share_ext'
over to 'make', what we need to do is to somehow have gen::config_h
write that one particular line in config.h.
Am I on the right track? Messing with those makefile templates doesn't
seem very elegant or maintainable to me, at first glance.
kid51
More information about the parrot-dev
mailing list