# Complain



## Alain De Vos (Jun 30, 2021)

I hardly complain. So this is an exception. Why does UPDATING advices python38 when half of the ports need python37 ?
Is updating written only for people following "current-latest-instable ?"
I follow quarterly, so don't give me the wrong advice.
Quarterly is a separate branch. So who is the contact person for the UPDATING file in quarterly ?


----------



## mer (Jun 30, 2021)

I think UPDATING is just a place to collect potential issues when updating, how to work around them.  Kind of "Beware, there may be danger here" type of stuff.


----------



## Alain De Vos (Jun 30, 2021)

Who is the maintainer of UPDATING in quarterly branch ?
I will pull his hair. (Just kidding)
Thought experiment. Suppose you give wrong advice on perl version and ruby version.
Everyone using ports will have a shitty system.


----------



## SirDice (Jun 30, 2021)

Alain De Vos said:


> Why does UPDATING advices python38 when half of the ports need python37


They don't. Name the ports you think that need python 3.7.



Alain De Vos said:


> Quarterly is a separate branch.


Quarterly is branched off from 'main', 2021Q2 was done fairly recently (beginning of June). Are you sure you're not stuck on 2021Q1?



Alain De Vos said:


> Who is the maintainer of UPDATING in quarterly branch ?


The entire ports tree (including the quarterly branches) is maintained by the same people. If necessary updates from 'main' are merged into a quarterly branch (security updates for example). Once every three months a _new_ quarterly branch is branched off from 'main'.


----------



## Alain De Vos (Jun 30, 2021)

I follow quarterly. Trust me on this many do.


----------



## SirDice (Jun 30, 2021)

Alain De Vos said:


> I follow quarterly. Trust me on this many do.


Yes, and?


----------



## Alain De Vos (Jun 30, 2021)

I just installed xorg in a jail. And you get python37 for free !
Well, it's not the end of the world. It's a bit annoying .
Updating might be one of the most inportant files in the quarterly branch.
It would be a nice asset, call it a wish list, if someone would be kind enough to look at this file. End of complain


----------



## SirDice (Jun 30, 2021)

Got my dates wrong, 2021Q2 is from April, 2021Q3 will be made in July (in a couple of days). The change from python 3.7 to 3.8 was done on 2021-04-25, that's after 2021Q2 was branched off. So 2021Q2 still has Python 3.7 as the default. The UPDATING from 2021Q2 doesn't mention the Python change either. So I think you're mixing up the UPDATING file from main (which does have it) and 2021Q2 (which doesn't).


----------



## mer (Jun 30, 2021)

pkg rquery -i "%n - %Ok: %Ov" python37 on my system shows a few packages depending directly on python37.  This is on a FreeBSD-13.0-RELEASE.  
One that is interesting is llvm10, which is used by mesa-dri, which is used by xorg/xorg-server.  So that's how you get python37 by installing xorg.
Now looking at mesa-dri python is a build depends, but llvm is a run depend.  llvm is why xorg pulls in python.

In the ports, there are "build depends" and "run depends".  If another port/package is needed to build something but not at runtime, it won't install as a dependency of the package.  If it's a runtime dependency, it gets installed as a dependency of a package.


----------



## SirDice (Jun 30, 2021)

```
root@molly:/usr/ports # git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean
root@molly:/usr/ports # grep -A5 20210425: UPDATING
20210425:
  AFFECTS: users of python
  AUTHOR: kai@FreeBSD.org

  The default version of python3 and python was switched to 3.8.

root@molly:/usr/ports # git checkout 2021Q2
Updating files: 100% (25516/25516), done.
Switched to branch '2021Q2'
Your branch is up to date with 'origin/2021Q2'.
root@molly:/usr/ports # grep -A5 20210425: UPDATING
root@molly:/usr/ports #
```


----------



## SirDice (Jun 30, 2021)

mer said:


> pkg rquery -i "%n - %Ok: %Ov" python37 on my system shows a few packages depending directly on python37.


Those ports/packages depend on whatever is set as the default version. For 2021Q2 the default Python version is still 3.7. The change to 3.8 happened after 2021Q2 was branched off.


----------



## mer (Jun 30, 2021)

SirDice said:


> Those ports/packages depend on whatever is set as the default version. For 2021Q2 the default Python version is still 3.7. The change to 3.8 happened after 2021Q2 was branched off.


Yep, understood.  I was merely pointing out to Alain De Vos "how" python37 got pulled in by installing xorg because it seemed like a mystery that it did.


----------



## SirDice (Jun 30, 2021)

Yes, Python certainly gets pulled in for x11/xorg. But as I said, it'll pull in whatever Python version is set as default. 

On `main` aka 'latest':

```
root@molly:/usr/ports/x11/xorg # make all-depends-list | grep python
/usr/ports/lang/python38
```

On 2021Q2:

```
root@molly:/usr/ports/x11/xorg # make all-depends-list | grep python
/usr/ports/lang/python37
/usr/ports/textproc/py-python-docs-theme
```

If I set `python3=3.9 python=3.9`:

```
root@molly:/usr/ports/x11/xorg # make all-depends-list | grep python
/usr/ports/lang/python39
```


----------



## mer (Jun 30, 2021)

Yep.  I understand.  Sometimes folks get puzzled as to "why is package XYZ pulled in when I install package ABC".  Dependencies, up and down and sideways can make your head spin.  Toss in "does package ABC have different config options that pull in/not pull in XYZ?" and it can lead to much head banging.

The easiest way to see this is "I deleted package XYZ and it also removed 300 other packages".

Basically, packages or ports, there's a reason for pulling something else in.


----------



## SirDice (Jun 30, 2021)

mer said:


> Dependencies, up and down and sideways can make your head spin. Toss in "does package ABC have different config options that pull in/not pull in XYZ?" and it can lead to much head banging.


Definitely. It's sometimes difficult to track down which exact option or dependency pulls in a certain port/package. 



mer said:


> The easiest way to see this is "I deleted package XYZ and it also removed 300 other packages".


True. I often use `pkg info -r <package>` and `pkg info -d <package>` too. But this doesn't always show the "cascade" of deletions the removal of a certain dependency would cause.


----------



## Deleted member 30996 (Jun 30, 2021)

```
jitte@bakemono:~ $ pkg rquery -i "%n - %Ok: %Ov" python37
python37 - DEBUG: off
python37 - FNV: off
python37 - IPV6: on
python37 - NLS: on
python37 - PYMALLOC: on
python37 - SIPHASH: off
jitte@bakemono:~ $ uname -a
FreeBSD bakemono 12.2-RELEASE-p7 FreeBSD 12.2-RELEASE-p7 GENERIC  amd64
jitte@bakemono:~ $ su
Password:
root@bakemono:/home/jitte # cd /
root@bakemono:/ # freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching metadata signature for 12.2-RELEASE from update2.freebsd.org... done.
Fetching metadata index... done.
Inspecting system... done.
Preparing to download files... done.

No updates needed to update system to 12.2-RELEASE-p9.
root@bakemono:/ #
```

If you haven't today you might want to run:
`freebsd-update fetch
freebsd-update install
shutdown -r now`


----------



## grahamperrin@ (Jul 3, 2021)

2021Q3 in context: 

https://cgit.freebsd.org/ports/log/
https://cgit.freebsd.org/ports/log/?h=2021Q2
https://cgit.freebsd.org/ports/log/?h=2021Q3



SirDice said:


> … The UPDATING from 2021Q2 doesn't mention the Python change …



cgit can be confusing, if its quirks are not understood. 

<https://cgit.freebsd.org/ports/commit/UPDATING?h=2021Q2&id=210ee04dd3c3f2e82cd3130e412866a182066859> 2021Q2 for shows a 2021-04-25 entry that is not in <https://cgit.freebsd.org/ports/tree/UPDATING?h=2021Q2>.


----------



## grahamperrin@ (Jul 3, 2021)

Alain De Vos said:


> … xorg in a jail. And you get python37 for free ! …



14.0-CURRENT, `make all-depends-list` finds one version:


```
root@mowa219-gjp4-8570p:/usr/ports/x11/xorg # uname -KrU
14.0-CURRENT 1400024 1400024
root@mowa219-gjp4-8570p:/usr/ports/x11/xorg # make all-depends-list | grep python
/usr/ports/lang/python38
root@mowa219-gjp4-8570p:/usr/ports/x11/xorg #
```

Three versions – `python27-2.7.18_1` `python36-3.6.13` `python38-3.8.10` – in response to `make pretty-print-run-depends-list` (below).

`all-depends-list` is more magical, I guess 


```
root@mowa219-gjp4-8570p:/usr/ports/x11/xorg # make build-depends-list
/usr/ports/ports-mgmt/pkg
root@mowa219-gjp4-8570p:/usr/ports/x11/xorg # make run-depends-list | grep python
root@mowa219-gjp4-8570p:/usr/ports/x11/xorg # make pretty-print-run-depends-list | grep python
This port requires package(s) "appres-1.0.5 bitmap-1.0.9 dejavu-2.37_1 encodings-1.0.5,1 evdev-proto-5.8 expat-2.4.1 font-adobe-100dpi-1.0.3_4 font-adobe-75dpi-1.0.3_4 font-adobe-utopia-100dpi-1.0.4_4 font-adobe-utopia-75dpi-1.0.4_4 font-adobe-utopia-type1-1.0.4_4 font-alias-1.0.4 font-arabic-misc-1.0.3_4 font-bh-100dpi-1.0.3_4 font-bh-75dpi-1.0.3_4 font-bh-lucidatypewriter-100dpi-1.0.3_4 font-bh-lucidatypewriter-75dpi-1.0.3_4 font-bh-ttf-1.0.3_4 font-bh-type1-1.0.3_4 font-bitstream-100dpi-1.0.3_4 font-bitstream-75dpi-1.0.3_4 font-bitstream-type1-1.0.3_4 font-cronyx-cyrillic-1.0.3_4 font-cursor-misc-1.0.3_4 font-daewoo-misc-1.0.3_4 font-dec-misc-1.0.3_4 font-ibm-type1-1.0.3_4 font-isas-misc-1.0.3_4 font-jis-misc-1.0.3_4 font-micro-misc-1.0.3_4 font-misc-cyrillic-1.0.3_4 font-misc-ethiopic-1.0.4 font-misc-meltho-1.0.3_4 font-misc-misc-1.1.2_4 font-mutt-misc-1.0.3_4 font-schumacher-misc-1.1.2_4 font-screen-cyrillic-1.0.4_4 font-sony-misc-1.0.3_4 font-sun-misc-1.0.3_4 font-winitzki-cyrillic-1.0.3_4 font-xfree86-type1-1.0.4_4 fontconfig-2.13.93,1 freetype2-2.10.4 gettext-runtime-0.21 glib-2.66.8,2 iceauth-1.0.8_2 indexinfo-0.3.1 libFS-1.0.8 libICE-1.0.10,1 libSM-1.2.3,1 libX11-1.7.2,1 libXScrnSaver-1.2.3_2 libXau-1.0.9 libXaw-1.0.14,2 libXcomposite-0.4.5,1 libXcursor-1.2.0 libXdamage-1.1.5 libXdmcp-1.1.3 libXext-1.3.4,1 libXfixes-5.0.3_2 libXfont-1.5.4_2,2 libXfont2-2.0.4 libXft-2.3.3 libXi-1.7.10,1 libXinerama-1.1.4_2,1 libXmu-1.1.3,1 libXpm-3.5.13 libXrandr-1.5.2 libXrender-0.9.10_2 libXres-1.2.1 libXt-1.2.1,1 libXtst-1.2.3_2 libXv-1.0.11_2,1 libXvMC-1.0.12 libXxf86dga-1.1.5 libXxf86vm-1.1.4_3 libdmx-1.1.4_2 libdrm-2.4.106,1 libedit-3.1.20210216,1 libepoll-shim-0.0.20210418 libepoxy-1.5.8_1 libevdev-1.9.1.20200928 libffi-3.3_1 libfontenc-1.1.4 libglvnd-1.3.3 libgudev-234 libiconv-1.16 libinput-1.16.4 liblz4-1.9.3,1 libmtdev-1.1.6 libpciaccess-0.16 libpthread-stubs-0.4 libudev-devd-0.4.2_1 libunwind-20201110 libwacom-1.5 libxcb-1.14_1 libxkbfile-1.1.0 libxml2-2.9.12 libxshmfence-1.3_1 llvm10-10.0.1_5 lua52-5.2.4 mesa-dri-20.2.3_2 mesa-libs-20.2.3_1 mkfontscale-1.2.1 mpdecimal-2.5.1 pciids-20210516 pcre-8.44 perl5-5.32.1_1 pixman-0.40.0_1 png-1.6.37_1 py27-setuptools44-44.0.0_1 py27-six-1.16.0 py36-setuptools-57.0.0 py38-evdev-1.4.0 py38-pyudev-0.22.0 python27-2.7.18_1 python36-3.6.13 python38-3.8.10 readline-8.1.1 sessreg-1.1.2 setxkbmap-1.3.2 smproxy-1.0.6 twm-1.0.11_1 wayland-1.19.0_1 x11perf-1.6.1 xauth-1.1 xbacklight-1.2.3 xbitmaps-1.1.2 xcalc-1.1.0 xcb-util-0.4.0_2,1 xcb-util-wm-0.4.1_3 xclock-1.0.9 xcmsdb-1.0.5 xconsole-1.0.7_1 xcursor-themes-1.0.6 xcursorgen-1.0.7 xdpyinfo-1.3.2_3 xdriinfo-1.0.6_4 xev-1.2.4 xf86-input-keyboard-1.9.0_4 xf86-input-libinput-0.30.0_1 xf86-input-mouse-1.9.3_3 xf86-video-scfb-0.0.5_2 xf86-video-vesa-2.5.0 xf86dga-1.0.3_1 xgamma-1.0.6 xgc-1.0.5 xhost-1.0.8 xinit-1.4.1,1 xinput-1.6.3 xkbcomp-1.4.4 xkbevd-1.1.4 xkbutils-1.0.4_2 xkeyboard-config-2.32 xkill-1.0.5 xlsatoms-1.1.3 xlsclients-1.1.4 xmessage-1.0.5 xmodmap-1.0.10 xorg-apps-7.7_4 xorg-docs-1.7.1,1 xorg-drivers-7.7_6 xorg-fonts-100dpi-7.7 xorg-fonts-7.7_1 xorg-fonts-75dpi-7.7 xorg-fonts-cyrillic-7.7 xorg-fonts-miscbitmaps-7.7 xorg-fonts-truetype-7.7_1 xorg-fonts-type1-7.7 xorg-libraries-7.7_4 xorg-server-1.20.11_3,1 xorgproto-2021.4 xpr-1.0.5 xprop-1.2.5 xrandr-1.5.1 xrdb-1.2.0 xrefresh-1.0.6 xset-1.2.4_3 xsetroot-1.1.2 xterm-368 xtrans-1.4.0 xvinfo-1.1.4 xwd-1.0.7 xwininfo-1.1.5 xwud-1.0.5 zstd-1.5.0" to run.
root@mowa219-gjp4-8570p:/usr/ports/x11/xorg # make pretty-print-all-depends-list
make: don't know how to make pretty-print-all-depends-list. Stop

make: stopped in /usr/ports/x11/xorg
root@mowa219-gjp4-8570p:/usr/ports/x11/xorg #
```

*ports(7)* <https://www.freebsd.org/cgi/man.cgi?query=ports&sektion=7&manpath=FreeBSD+14.0-current>


----------



## Alain De Vos (Jul 3, 2021)

In highlander it is there can be only one. So i compile with python version X and blacklist X-1 and X+1.
Currently compiling/running everything with python3.7 using quarterly.


----------



## Deleted member 30996 (Jul 4, 2021)

Alain De Vos said:


> In highlander it is there can be only one.


You're watching the wrong movies.

In The Matix Neo died and rose from the Dead, with the Power to bend the machines to his will.
In The Matrix Reloaded there is the greatest scene of highway destruction in motion ever filmed while Morphius fights an Agent on top of a speeding semi-truck, with a Katana, kicks his bolt-action butt and Neo swoops in at the last moment and snatches Morhpius and the Keymaker up, up and away..
In The Matrix Revolutions, Neo becomes The One.
Neo/One. Trinity, Died and rose from the grave.

I bend the machines in front of me to my will and where I sit I am The One, and only root. And what I say goes.


----------



## bobmc (Jul 4, 2021)

Alain De Vos said:


> Currently compiling/running everything with python3.7


Software will improve when developers stop using a mix of tools that depends upon a certain instance of python.  Python is used because it is popular.  Instead they should use only uninteresting  tools that work until EOL in a distant future.


----------



## tingo (Jul 4, 2021)

bobmc said:


> Software will improve when developers stop using a mix of tools that depends upon a certain instance of python.  Python is used because it is popular.  Instead they should use only uninteresting  tools that work until EOL in a distant future.


Then software will never improve. There are many (not too many) developers, and each of them use the tools and programming languages that she/he find interesting at the time. And new programming languages / development "fashions" comes along regularly...


----------



## Jose (Jul 4, 2021)

bobmc said:


> Software will improve when developers stop using a mix of tools that depends upon a certain instance of python.  Python is used because it is popular.  Instead they should use only uninteresting  tools that work until EOL in a distant future.


Hopefully Python's popularity will wane now that they're introducing breaking changes even in minor releases. Clearly the Python Steering Committee has learned the wrong lesson from the Python 2 fiasco.


----------



## Alain De Vos (Jul 4, 2021)

Python is an evolving language. As opposed to for instance C.
Ruby is even more evolving.
It does not mean you can not use it as build tool.
"gnu make" is not the end of the story.
But there are indeed differences between python3.7 and 3.8.
How it should be managed i don't know.


----------



## Jose (Jul 4, 2021)

Python's first release was in 1991. At which point will it stop "evolving" and become a mature and predictable platform?

Build systems are the kind of thing few understand and even fewer want to work on. A language that is "evolving" to keep up with the latest fads is a very poor choice for such systems.


----------



## bobmc (Jul 5, 2021)

Alain De Vos said:


> Python is an evolving language. As opposed to for instance C.


C is still evolving, but quietly. It can still compile old BSD code but with some helpful warnings.  I encounter frustrations when trying to do occasional development for Arduino and ESP32/8266 devices. SDKs that worked last year don't work now because of Python dependencies.  Python is used to make cross-platform toolchains.  Java would probably be a better choice. It works well for STM32 kits.


----------



## Jose (Jul 5, 2021)

bobmc said:


> C is still evolving, but quietly. It can still compile old BSD code but with some helpful warnings.  I encounter frustrations when trying to do occasional development for Arduino and ESP32/8266 devices. SDKs that worked last year don't work now because of Python dependencies.  Python is used to make cross-platform toolchains.  Java would probably be a better choice. It works well for STM32 kits.


Problem with Java is that it's neither a compiled nor an interpreted language. Or that it's kind of both at the same time. This makes it hard to write scripts in it.

I have encountered a Java build system, and even used it to build a trivial  Java project:








						Jeka : Pure Java Build Tool
					

Automate Your Builds With Pure Java.




					jeka.dev
				




It's just ok. Far better than abominations like Gradle and Maven, but that's a low bar.


----------



## Alain De Vos (Jul 5, 2021)

I once tried to script an android app build. It was almost impossible. I was hard-wired into the editor.
It gave me a M-soft feeling.


----------



## bobmc (Jul 6, 2021)

Jose said:


> Problem with Java is that it's neither a compiled nor an interpreted language. Or that it's kind of both at the same time. This makes it hard to write scripts in it.


How about Lua. FreeBSD has Lua bootloader. NETBSD use Lua for kernel scripting.
NetBSD Lua explained


----------



## Alain De Vos (Jul 6, 2021)

Before Lua it used Forth. The loader works fine ?


----------



## grahamperrin@ (Jul 6, 2021)

Alain De Vos said:


> … Currently compiling/running everything with python3.7 using quarterly.



Everything = x11/xorg? Or everything in the ports tree?

What was the outcome?


----------



## Alain De Vos (Jul 6, 2021)

xorg+ some 2000 ports. Works fine with only python3.7. As i currently use it and have everything installed from my poudriere repository.

Note 1, I blacklisted python2,python2.7,python3.6,python3.8 during the build. So I don't have a Chromium browser as it depends for build on python 2.

Note 2, Using python3.8 as default python gave me very bad results with quarterly. Maybe next quarterly. Once the ports of it are available I'll try.


----------



## grahamperrin@ (Jul 6, 2021)

Alain De Vos said:


> … Using python3.8 as default python gave me very bad results with quarterly. …



With or without blacklistings?


----------



## Alain De Vos (Jul 6, 2021)

To be honest I don't remember. I remember i had problems.
For your info these are the versions in my current quarterly ports make.conf,

```
DEFAULT_VERSIONS+=ssl=openssl
DEFAULT_VERSIONS+=llvm=12
DEFAULT_VERSIONS+=gcc=10
DEFAULT_VERSIONS+=lua=5.4
DEFAULT_VERSIONS+=lua5=5.4
DEFAULT_VERSIONS+=perl=5.32
DEFAULT_VERSIONS+=perl5=5.32
DEFAULT_VERSIONS+=python=3.7
DEFAULT_VERSIONS+=python3=3.7
DEFAULT_VERSIONS+=ruby=2.7
DEFAULT_VERSIONS+=ruby2=2.7
DEFAULT_VERSIONS+=pgsql=12
DEFAULT_VERSIONS+=mysql=10.5m
DEFAULT_VERSIONS+=php=7.4
DEFAULT_VERSIONS+=tcltk=8.6
```

PS: I tried tcltk=8.7 but it is still too soon for it.


----------



## Alain De Vos (Jul 6, 2021)

My Current test, currently compiling xorg of Q3 with python3.8


----------

