# Proper updating of perl when using synth?



## rwv37 (Aug 10, 2020)

I've been happily using synth for a while now, but the recent (20200803) update of perl from 5.30 to 5.32 has me unsure about how to proceed. It's one of those "If you are using binary packages, there's nothing special to do, but if not, follow these directions", followed by stuff like changing make.conf's DEFAULT_VERSIONS, doing some stuff with portupgrade or portmaster, getting rid of the change you made to make.conf, and then doing some other stuff with portupgrade or portmaster.

I'm not using binary packages - I'm using synth to build things. But there's no indication in the "follow these directions" part that's appropriate for synth.

Obviously I don't want to do anything with portupgrade or portmaster. But what about the make.conf stuff? Do I add in DEFAULT_VERSIONS+= perl5=5.32? Do I later remove it after having done stuff with synth? Do I then do more stuff with synth after having removed it?

I'm aware of the distinction between /etc/make.conf and synth's make.conf. Currently, I have my /etc/make.conf set up to just ".include" synth's, and I have all my options (like WANT_OPENLDAP_SASL) in synth's. If I am supposed to add DEFAULT_VERSIONS, it seems to me (?) like it should go in synth's, and thus it would effectively be in both. But if I am then to remove it after having done... something..., should I be removing it from both, or should I leave it in synth's but change etc's so that it is effectively removed from there?

In case it matters, my normal upgrading procedure is:

```
portsnap fetch update
synth status topLevelPackages.txt
synth build topLevelPackages.txt
pkg upgrade -r Synth
```

Or if I'm installing something entirely new, the same first three things but then a "synth install <packagename>" instead of a "pkg upgrade -r Synth". Also, I check stuff like /usr/ports/UPDATING and the results of any of the commands as appropriate before deciding to actually continue to the next command.


----------



## SirDice (Aug 10, 2020)

rwv37 said:


> I'm not using binary packages - I'm using synth to build things.


Then you are using packages, your own built packages. That's the purpose of Synth, to build packages in a consistent manner. 



rwv37 said:


> But there's no indication in the "follow these directions" part that's appropriate for synth.


Because there's probably nothing 'special' you need to do. It builds in a 'clean-room' environment, just let it do it's thing.



rwv37 said:


> But what about the make.conf stuff? Do I add in DEFAULT_VERSIONS+= perl5=5.32?


If you want to follow the Perl change, then don't set anything in make.conf. Only set the Perl version if you want to run a _different_ version than the default. If, for example, you want to _stay_ with version 5.30.


----------



## rwv37 (Aug 10, 2020)

Thanks, I'll just leave it out then. For my edification, though:

I guess my confusion is based upon not understanding the reason behind the way these things always are handled in the portmaster/whatever world. It seems like one step is "explicitly set the default perl to be... well... the default perl", and then a later step is "no longer explicitly set the default perl to be... well... the default perl". What is going on that (in the portmaster/whatever world) would require those things?


----------



## SirDice (Aug 10, 2020)

rwv37 said:


> I guess my confusion is based upon not understanding the reason behind the way these things always are handled in the portmaster/whatever world.


Those commands assume you're doing it from a working system and are building from ports _in place_. Then you need to take some extra precautions in order to not screw up your dependency chain. Which can lead to all sorts of weirdness. 

Synth and Poudriere build from a "clean" system, so those 'old' dependencies don't interfere. Which means you don't have to worry about it, as things automatically get built with the right dependencies, in the right order. To never have any dependency issues I would recommend building _everything_ you need with Synth and don't try to mix your custom packages with the 'official' packages. That will inevitably lead to inconsistencies if, for example, you have an option enabled that's disabled on the official packages or vice versa.

If you're happy with the defaults, then there's no real reason to build from ports, with any tool. Just use the official packages. Really only use ports (via Synth, Poudriere, portmaster, etc.) if you want to _change_ any of the default versions or options.


----------

