[prev in list] [next in list] [prev in thread] [next in thread] 

List:       macports-users
Subject:    Re: ruby_select is broken
From:       Ian Wadham <iandw.au () gmail ! com>
Date:       2021-10-10 20:13:02
Message-ID: C3EC7365-DEA9-47D3-9538-A96E7E92E5B1 () gmail ! com
[Download RAW message or body]

Thank you, Lenore.

> On 10 Oct 2021, at 1:45 am, Lenore Horner <LenoreHorner@sbcglobal.net> wrote:
> 
> It looks to me like the actual problem is that ruby30 doesn't produce any notes about how to use port \
> select unlike the pythonxx installations.  I've filed a trac ticket about adding a note to ruby so that \
> other people won't have Ian's problem. Lenore
> 
> > On Oct 8, 2021, at 22:20, Ian Wadham <iandw.au@gmail.com> wrote:
> > 
> > Hi Ryan and Bill,
> > 
> > Let's all stand back a bit and get a little perspective.
> > 
> > Firstly, the "sudo port select" command works fine, but it can take a while for a user to discover it \
> > when he/she needs it. 
> > A few weeks ago I read about a package called Flutter and its underlying language called Dart. They \
> > are supplied freely and openly by Google. Their libraries, tools, code fragments and language are \
> > claimed to make it possible to write GUI applications that can run on almost any device, using the \
> > same source code for every device. Flutter can be used on Linux and Windows to build apps for Android \
> > devices or for Windows/Linux desktops. It can be used on MacOS to build apps for iPhones, iPads and \
> > the MacOS desktop. I live Melbourne, Australia, a city that has just established a world record for \
> > days in COVID lockdown. So I was anxious to relieve the boredom by trying out Flutter and Dart. 
> > I have been a developer for many years and have many languages under my belt, but alas not Ruby.
> > 
> > Flutter's pre-requisites on MacOS are Xcode 12 and CocoaPods. The latter depends on Ruby. I had to \
> > upgrade my MacOS from High Sierra to Catalina to get Xcode 12, which in itself was quite a drama, but \
> > I migrated MacPorts and my MacPorts apps without any trouble.  
> > The Getting Started page on CocoaPods' website says to use Ruby as provided by MacOS, using command \
> > "sudo gem install cocoapods". But that does not work and will never work again, because the MacOS \
> > version of Ruby is too old for building CocoaPods and is going to be phased out anyway in later \
> > versions of MacOS, as mentioned in the Catalina Release Notes. 
> > As noted above, I was a complete newcomer to Ruby (and still am). I did not wish to learn Ruby. I \
> > just wanted to install a more recent version of Ruby in order to build CocoaPods and then move on to \
> > Flutter and Dart programming, starting with (you guessed it) Hello World. 
> > When I installed the MacPorts package called "ruby" I got a version that was even more out-of-date \
> > than Apple's (1.8 versus 2.6). When I installed the MacPorts package called "ruby27" I got nothing I \
> > could run: no "gem" command down in /opt/local/bin, so I uninstalled ruby27 and went looking \
> > elsewhere for a Ruby installer (Google, Stack Overflow, Homebrew, RVM, rbenv), but always I had the \
> > nagging thought that surely MacPorts would not install a package and then have no way you could use \
> > it. I had of course never heard of and never used the "port select" command at that stage. Why would \
> > I have? Until recently I have been a C++ developer. 
> > Anyway I re-installed ruby27 and did a bit of digging around, finding that gem had been installed in \
> > /opt/local/bin as gem2.7, so I ran the command "gem2.7" and CocoaPods built and installed just fine. \
> > Then I wondered how does MacPorts handle other languages with multiple versions: I never had a \
> > problem a few years back when I downloaded a Python source program from the Internet and ran it, \
> > after using MacPorts to install Python. So I had a look at python_select's portfile and discovered \
> > the existence of the "port select" command. Even then it is not easy to find. There are about a dozen \
> > occurrences of the word "select" in the "man port" output and I was wondering for a moment if "port \
> > select" actually exists or if it is just some internal function of portfiles and MacPorts scripts. 
> > All of the above occupied several frustrating days of my time.
> > 
> > So this is why I say the portfile for ruby_select is broken. Several "ruby$NN" packages depend on it.
> > 
> > MacPorts' Python gives a new user something he/she can immediately use, with a sensible default \
> > version being automatically "selected" (in the MacPorts sense), but MacPorts' Ruby does not do any of \
> > that. So it fails on the grounds of user UN-friendliness. At the very least MacPorts' Ruby \
> > installations should have a Note to inform any new users about the "port select" command. 
> > All's well that ends well. I am now getting up to speed on Flutter and Dart and have run the demo \
> > source code on my MacBook desktop and on an Xcode Simulator of my iPhone. I am also progressing well \
> > on porting one of my C++ apps to Flutter and Dart. 
> > All the best,
> > Ian Wadham.
> > 
> > > On 6 Oct 2021, at 8:54 am, Ryan Schmidt <ryandesign@macports.org> wrote:
> > > On Oct 3, 2021, at 02:58, Ian Wadham wrote:
> > > > On 2 Oct 2021, at 6:29 pm, Ryan Schmidt wrote:
> > > > > On Sep 25, 2021, at 23:14, Ian Wadham wrote:
> > > > > 
> > > > > > MacPorts contains packages of many versions of Ruby, similarly to the Python and Perl groups, \
> > > > > > but the corresponding "ruby_select" port does not automatically create the links needed to \
> > > > > > access commands "ruby", "gem" etc. I was able to get around this by using "sudo port select" \
> > > > > > manually, but would it be possible for someone to fix "ruby_select" so that the ports \
> > > > > > "ruby$n" work properly "out of the box".
> > > > > 
> > > > > I don't understand what you mean. ruby_select (and all _select ports) are helper infrastructure \
> > > > > so that "port select" works. Using "port select" is not a workaround; it is *the* way to select \
> > > > > a particular version of a set of ports.
> > > > 
> > > > The helper infrastructure is failing for ports "ruby$NN". Other ports which have multiple \
> > > > versions available have lines like: 
> > > > platform darwin 14 {
> > > > post-destroot {
> > > > select::install perl ${filespath}/perl5.16-apple.14
> > > > select::install perl ${filespath}/perl5.18-apple.14
> > > > }
> > > > }
> > > 
> > > These lines are from the perl_select port. I'm surprised to discover that we still have such a \
> > > port, since the perl ports in MacPorts are unique and do not participate in the "port select" \
> > > mechanism. The perl ports predate the select mechanism and switching them to use that mechanism \
> > > would cause lots of breakage. (A zillion ports depend on the existence of an executable (or \
> > > symlink) called "perl" in the path and expect the perl5 port to provide it. If we remove the perl5 \
> > > port and instead allow the select mechanism to be responsible for providing the perl executable \
> > > (symlink) then ports could not depend on it. Ports are not permitted to rely on the effects of the \
> > > select mechanism because the select mechanism is intended for the use of users, not for the use of \
> > > other ports.) 
> > > See https://trac.macports.org/ticket/29763 and https://trac.macports.org/ticket/60812.
> > > 
> > > Since the perl_select port has never worked correctly, anything done by the perl_select port should \
> > > not be construed as an example of how the select mechanism does or should work. To avoid confusion, \
> > > perl_select should probably be removed since nobody has fixed it over the past decade. 
> > > 
> > > > or
> > > > 
> > > > foreach python $apple_pythons {
> > > > select.entries-append [list python {*}$python]
> > > > }
> > > > 
> > > > in their *_select portfiles. Presumably these automate the redirecting of commands such as "perl' \
> > > > or "python" to the appropriate version.
> > > 
> > > The select mechanism allows the user to select which version of a collection of ports they want to \
> > > use when they type the unversioned command(s). For example, the python39 port installs \
> > > /opt/local/bin/python3.9. If the user just types "python", they get /usr/bin/python. Maybe the user \
> > > wanted "python" to give them /opt/local/bin/python3.9. If so, they would run "sudo port select \
> > > python python39" which will create a symlink /opt/local/bin/python pointing to \
> > > /opt/local/bin/python3.9. (There may be many other supporting files that get symlinked as well.) 
> > > The python select mechanism also allows the user to indicate that they would like to create \
> > > symlinks to whatever version(s) of python may be included in their version of macOS. For example, \
> > > "sudo port select python python27-apple" creates a symlink at /opt/local/bin/python pointing to \
> > > /usr/bin/python2.7 if the user's version of macOS has /usr/bin/python2.7. 
> > > The port select mechanism never selects anything automatically*. It is always at the discretion of \
> > > the user whether they would like to select something, and they do that by running "sudo port select \
> > > ..." 
> > > 
> > > * with the exception of the "root" ports which have been designed incorrectly; see \
> > > https://trac.macports.org/ticket/49752 
> > > 
> > > > The ruby_select portile just has:
> > > > 
> > > > destroot {
> > > > select::install ruby ${filespath}/base
> > > > select::install ruby ${filespath}/none
> > > > }
> > > > 
> > > > which does not redirect the commands "ruby" or "gem" to the appropriate version when you have \
> > > > installed the port "ruby27" for example. Instead, "which ruby" or "which gem" always finds the \
> > > > Apple version of Ruby, which is now deprecated according to the Catalina Release Notes... 
> > > > Actually my first "workaround" was to use a Bash alias, but then I figured there must be a \
> > > > MacPorts command to fix it, perhaps called "port select"… :-)
> > > 
> > > 
> > > > In any event, the portile for ruby_select is not working on ports like "ruby26", "ruby27", etc.
> > > 
> > > So "sudo port select ruby ruby26" does not work for you? "sudo port select ruby ruby27" does not \
> > > work? What happens when you run them? If they do not create the expected symlinks then indeed that \
> > > is broken and you should file a bug report. But it worked for me: 
> > > 
> > > $ sudo port select ruby ruby26
> > > Selecting 'ruby26' for 'ruby' succeeded. 'ruby26' is now active.
> > > $ ls - l /opt/local/bin/ruby
> > > lrwxr-xr-x  1 root  staff  22 Oct  5 16:38 /opt/local/bin/ruby -> /opt/local/bin/ruby2.6
> > > 
> > > 
> > > 
> > > > > > Also, the port actually called "ruby" is very old (version 1.8.7) and "port notes ruby" \
> > > > > > deprecates it. Should it be removed from MacPorts?
> > > > > 
> > > > > If nobody needs it, I suppose it could be removed. Do you know that nobody needs it? I don't \
> > > > > know that. 
> > > > > > Or reincarnated as "ruby18", dropping "ruby186" as well?
> > > > > 
> > > > > If it ain't broke, don't fix it?
> > > > 
> > > > Port "ruby_select" is broken.
> > > > 
> > > > Port "ruby" wasted my time because it looked as though it would be the default one to install, \
> > > > but then at the end of installation it deprecated itself.
> > > 
> > > As far as I can determine, the ruby_select port works as intended.
> > > 
> > > "If it ain't broke, don't fix it" was in response to your suggestion to rename the "ruby" port to \
> > > "ruby18" and drop "ruby186". Yes ruby could be renamed to ruby18 and that would be more consistent \
> > > and it's probably a good idea since it would reduce confusion, but it would probably be a lot of \
> > > work to rename it and fix everything that depends on it, and the end result assuming everything \
> > > goes smoothly would be no difference for the user in how the ports work. The port has a maintainer \
> > > and is not marked as openmaintainer so any changes must be approved by the maintainer; you could \
> > > suggest it to them by filing a ticket. If they agree with renaming it, they could do the rename, or \
> > > you or anyone else could put in the work and submit it as a pull request. 
> > > With regard to removing ruby186, it was created deliberately "for those who need it for \
> > > compatibility reasons"*. Granted that was in 2009 so I don't know if anybody still needs it for \
> > > compatibility reasons. If not, it could be removed, but there are references to it in several other \
> > > ports which should be removed at the same time. But again, having the ruby186 port available isn't \
> > > hurting anyone, whereas removing it could potentially break things if someone does need it. 
> > > * https://github.com/macports/macports-ports/commit/f6a29d1e4f0349b8485073c4670451e399d4d5bb
> > > 
> > 
> 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic