# portupgrade qt5-* problem



## YuryG (Dec 21, 2018)

Latest updates made many of qt5-* ports need change.
But trying to `portupgrade` them stops on every other such port with the error similar to this:

```
--->  Deinstalling 'qt5-widgets-5.11.2_1'
--->  Preserving /usr/local/lib/qt5/libQt5Widgets.so.5 as /usr/local/lib/compat/pkg/libQt5Widgets.so.5
--->  Preserving /usr/local/lib/qt5/libQt5Widgets.so.5.11 as /usr/local/lib/compat/pkg/libQt5Widgets.so.5.11
cp: symlink: libQt5Widgets.so.5.11.2: File exists
Copy failed!
[Reading data from pkg(8) ... - 896 packages found - done]
** Listing the failed packages (-:ignored / *:skipped / !:failed)
    ! qt5-widgets-5.11.2_1    (copy failed)
```
I can see that someone like total rebuilding everything every time like poudriere, synth etc. But I see it at least suboptimal.
So, I have to go to port's directory and manually `make deinstall install clean` and restart portupgrade process again and again (with unbuilt previously ports left).

Why is that? Is it future behaviour with all the ports? May be some missed key?


----------



## SirDice (Dec 21, 2018)

YuryG said:


> I can see that someone like total rebuilding everything every time like poudriere, synth etc. But I see it at least suboptimal.


Why don't you use packages?


----------



## YuryG (Dec 21, 2018)

And why should I use packages, when I can use ports? For quite some ports I use custom options etc.


----------



## SirDice (Dec 21, 2018)

YuryG said:


> And why should I use packages, when I can use ports?


Convenience?

Setting up your own repository has several advantages. The first one is that you can catch build errors without touching any of your existing installs. The second is that you only have to build things once, which is nice if you have multiple machines or have a habit of reinstalling everything.


----------



## YuryG (Dec 21, 2018)

SirDice said:


> The first one is that you can catch build errors without touching any of your existing installs. The second is that you only have to build things once, which is nice if you have multiple machines or have a habit of reinstalling everything.


You would be right if I had many almost identical installations or a strange habbit. I do have just a couple of machines and with different installations.
Also I can catch build error before I `make install`, can't I? Of course, if it is only for a single port, not a long chain of upgrades with an error stop in the middle. But still.
So, this obvious error with qt5-* ports is possible only because someone assumes that the build now could not be "incremental".
Also with this error, I've got unnoticed dependent ports fall (such as atril that depent on poppler-qt, which depend...).

So, having only one or two machines and using own repository with rebuild almost all the ports every time … suboptimal. And more risky, when I can rebuild a couple of ports a day, I cannot rebuild all the bunch every day on the only machine.


----------



## SirDice (Dec 21, 2018)

YuryG said:


> Also I can catch build error before I  make install, can't I?


From that port, sure. But it would have built and installed a bunch of dependencies before that, which could break everything else as the upgrade was only partially done. 


YuryG said:


> Of course, if it is only for a single port, not a long chain of upgrades with an error stop in the middle.


Exactly.



YuryG said:


> So, this obvious error with qt5-* ports is possible only because someone assumes that the build now could not be "incremental".





YuryG said:


> So, having only one or two machines and using own repository with rebuild almost all the ports every time… suboptimal. And more risky, when I can rebuild a couple of ports a day, I cannot rebuild all the bunch every day on the only machine.


You're assuming Poudriere and Synth don't build incrementally. They do. They only build/update changes.


----------



## YuryG (Dec 21, 2018)

SirDice said:


> ...You're assuming Poudriere and Synth don't build incrementally. They do. They only build/update changes.


I've used poudriere with previous machine, so I know that it rebuilt almost everything (all the heavy long-dependent are rebuilt without quite need but "for safety"). (So I used the word "almost" earlier).


----------



## MarcoB (Dec 21, 2018)

YuryG said:


> Latest updates made many of qt5-* ports need change.
> But trying to `portupgrade` them stops on every other such port with the error similar to this:
> 
> ```
> ...


I'm using ports-mgmt/portupgrade daily but didn't encounter this. Usually errors like this are caused by a portstree that isn't clean when portupgrade is doing it's work. I'd remove all working directories and then remove the old, and install the new qt5-widgets. After that start portupgrade again.


----------



## YuryG (Dec 21, 2018)

MarcoB said:


> I'm using ports-mgmt/portupgrade daily but didn't encounter this. Usually errors like this are caused by a portstree that isn't clean when portupgrade is doing it's work. I'd remove all working directories and then remove the old, and install the new qt5-widgets. After that start portupgrade again.


May be you are not using qt5-? Because I see this problem on two rather different machines, and just the same errors.


----------



## Sevendogsbsd (Dec 21, 2018)

I use ports-mgmt/synth to build packages on another machine. I update the ports tree, rebuild against a list of ports I use then serve them to my workstation. As SirDice mentioned, these tools only update what changed. Sometimes changes have a ripple effect sure, but that's why I only do updates once every week or 2.

I use qt5 - just did a rebuild yesterday - I did have the "kf5-extra-cmake-modules" port get skipped for some reason which caused a cascade of other qt5 apps to skip but when I re-built that port (using synth), all other ports that got skipped built successfully.


----------



## MarcoB (Dec 21, 2018)

YuryG said:


> May be you are not using qt5-? Because I see this problem on two rather different machines, and just the same errors.


Yes I use Qt5


----------



## SirDice (Dec 27, 2018)

YuryG said:


> I've used poudriere with previous machine, so I know that it rebuilt almost everything


I did an update run yesterday. Of the three repositories, only a dozen or so ports got rebuild, and that's on a total of 700-800 packages per repository.



> (all the heavy long-dependent are rebuilt without quite need but "for safety").


If Poudriere would trigger on such an important dependency there's a very high chance a portupgrade(1) or portmaster(8) will do exactly the same. Keep in mind they all use the exact same ports infrastructure. There's nothing magical about these tools and in essence they all do a `make install` in a port's directory. So you'll end up rebuilding the exact same things, regardless of the tool you use.


----------



## YuryG (Dec 27, 2018)

Probably you do not have monsters like lang/rust, devel/llvm70, www/webkit2-gtk3 or the monster of the monsters www/chromium, which on my 8-core machine builds alone about 4–6 hours.
And it (the last one) rebuilds almost always by poudriere (direct dependencies list is big enough, not to mention cascade ones, but these direct dependencies do not guarantee the port must be rebuild to function properly).


----------

