portupgrade bug: -M no longer works after v2.1.0
Atanas
atanas at asd.aplus.net
Wed Jul 12 17:53:10 UTC 2006
Sergey Matveychuk said the following on 7/12/06 3:24 AM:
> Atanas wrote:
>> Sergey Matveychuk said the following on 7/11/2006 10:08 PM:
>>> Atanas wrote:
>>>> Recent portupgrade versions no longer obey the -M command line switch,
>>>> i.e. any optional arguments to be prepended to each make command.
>>>>
>>>> How to reproduce:
>>>>
>>>> # portinstall -M "APACHE_HARD_SERVER_LIMIT=1024" www/apache13
>>> Everything work file. Use -m for getting what you want.
>>>
>> For www/apache13 the -m switch could give the same result as -M would,
>> but I'm not sure whether it's not just a coincidence. The -m switch was
>> supposed to serve a different purpose:
>>
>> -m
>> --make-args Specify arguments to append to each make(1) com-
>> mand line.
>> -M
>> --make-env Specify arguments to prepend to each make(1) com-
>> mand line.
>>
>> I tried testing another port where I used both:
>>
>> # portinstall -M 'WITH_SYSLOG_FACILITY=local5' -m '-DWITHOUT_IPV6'
>> mail/courier-imap
>>
>> With portupgrade-2.0.1_1,1 (the stock 6.1-RELEASE package) it worked.
>> With portupgrade-2.1.3.2,2 it failed (ignoring the -M part like for
>> www/apache13 before).
>>
>> Then I joined both in one -m switch:
>>
>> # portinstall -m 'WITH_SYSLOG_FACILITY=local5 -DWITHOUT_IPV6'
>> mail/courier-imap
>>
>> and the latest portupgrade-2.1.3.2,2 did it just fine.
>>
>> So, like you suggested, the -m switch seems to cover the functionality
>> that -M used to provide. I'm not sure however whether this "prepend to
>> append" conversion would work for all ports. But for these that I use it
>> appears to work, so I have no problem and will update my scripts to use
>> -m only.
>>
>> The no longer working (obsolete?) -M switch would need to be removed
>> from the man page though.
>
> Both -m and -M works fine but do different things. -m pass its argument
> as make file argument(s) and -M pass its argument as environment
> variable(s). You can't set make variable with environment variable. They
> are different!
>
Yes, I know that. That's why I quoted the man page in my previous post
(see above).
> -M has never worked as you expected.
>
I expected -M to work exactly as documented, like it has been doing so
for years.
> You can test it with a command:
> %cd /usr/ports/www/apache13
> %env APACHE_HARD_SERVER_LIMIT=1024 make
>
Sure, the port build works:
% cd /usr/ports/www/apache13
% env APACHE_HARD_SERVER_LIMIT=1024 make
===> src/os/unixcc -c -I../../os/unix -I../../include
-I/usr/local/include -funsigned-char -O2 -fno-strict-aliasing -pipe
-DDOCUMENT_LOCATION=\"/usr/local/www/data\"
-DDEFAULT_PATH=\"/bin:/usr/bin:/usr/local/bin\" -DHARD_SERVER_LIMIT=1024
`../../apaci` os.c
while portupgrade -M fails:
% portinstall -M "APACHE_HARD_SERVER_LIMIT=1024" www/apache13
===> src/os/unixcc -c -I../../os/unix -I../../include
-I/usr/local/include -funsigned-char -O2 -fno-strict-aliasing -pipe
-DDOCUMENT_LOCATION=\"/usr/local/www/data\"
-DDEFAULT_PATH=\"/bin:/usr/bin:/usr/local/bin\" -DHARD_SERVER_LIMIT=512
`../../apaci` os.c
> against of
> % make APACHE_HARD_SERVER_LIMIT=1024
>
This doesn't make much sense to me. Perhaps you meant:
% make -DAPACHE_HARD_SERVER_LIMIT=1024
But I wouldn't expect this to succeed either:
===> src/os/unixcc -c -I../../os/unix -I../../include
-I/usr/local/include -funsigned-char -O2 -fno-strict-aliasing -pipe
-DDOCUMENT_LOCATION=\"/usr/local/www/data\"
-DDEFAULT_PATH=\"/bin:/usr/bin:/usr/local/bin\" -DHARD_SERVER_LIMIT=512
`../../apaci` os.c
Your suggestion however (to replace -M with -m) surprisingly worked:
cc -c -I../../os/unix -I../../include -I/usr/local/include
-funsigned-char -O2 -fno-strict-aliasing -pipe
-DDOCUMENT_LOCATION=\"/usr/local/www/data\"
-DDEFAULT_PATH=\"/bin:/usr/bin:/usr/local/bin\" -DHARD_SERVER_LIMIT=1024
`../../apaci` os.c
And this is what's confusing.
> I think you confuse the two variables types.
>
No, I think I know what these are for.
But trying your suggestion to replace -M with -m and finding it to work
(for some ports?), just threw some more fog into the case.
Let's say it clear again - I have found that all recent versions of
portupgrade (2.1.0+) fail to obey the -M switch and ignore any optional
port parameters (i.e. arguments to prepend to each make command line)
supplied there.
Please, don't get me wrong. I'm not asking for help or for a workaround.
I'm actually trying to help identifying a problem or regression.
If this is not a bug, but a feature change, please have it documented.
What the portupgrade(1) man page says about the -M switch is incorrect,
as it no longer prepends any arguments specified to each make(1) command
line.
Regards,
Atanas
More information about the freebsd-stable
mailing list