MacPorts: "Error: clang-4.0 has been replaced by clang-8.0; please install that instead" but I have clang-8.0 already installed - c++

I am getting the same error when trying to install many ports with MacPorts, e.g. gtk2:
~ sudo port install gtk2
Password:
---> Computing dependencies for gtk2
The following dependencies will be installed:
clang-4.0
clang-5.0
graphite2
harfbuzz
ld64
ld64-latest
libmacho-headers
libomp
llvm-5.0
pango
perl5
xar
xorg-libXcomposite
xorg-libXcursor
xorg-libXdamage
xorg-libXinerama
xorg-libXrandr
xorg-util-macros
Continue? [Y/n]:
---> Configuring clang-4.0
Error: clang-4.0 has been replaced by clang-8.0; please install that instead.
Error: Failed to configure clang-4.0: obsolete port
Error: See /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_macports_release_tarballs_ports_lang_llvm-4.0/clang-4.0/main.log for details.
Error: Follow https://guide.macports.org/#project.tickets to report a bug.
Error: Processing of port gtk2 failed
The installation here suggests to install clang-4.0, among others, to which I can only answer "Continue".
However, it then fails claiming that very same port is "obsolete". Suggesting to install 8.0 instead.
However, I already have it installed by MacPorts:
~ clang -v
clang version 8.0.0 (tags/RELEASE_800/final)
Target: x86_64-apple-darwin12.6.0
Thread model: posix
InstalledDir: /opt/local/bin
➜ ~ which clang
/opt/local/bin/clang
What is wrong here and why do MacPorts insist on installing an obsolete port dependency?
UPDATE1. Some troubleshooting attempts...
➜ ~ port installed|grep llvm
cctools #921_2+llvm37 (active)
llvm-3.7 #3.7.1_4 (active)
llvm_select #2_0 (active)
➜ ~
UPDATE2.
~ sudo port uninstall lldb-4.0
Warning: no such port: lldb-4.0, skipping uninstall
➜ ~ sudo port uninstall clang-4.0
➜ ~ sudo port uninstall clang_select
---> Deactivating clang_select #2_0
---> Cleaning clang_select
---> Uninstalling clang_select #2_0
---> Cleaning clang_select
➜ ~
However, clang-8.0 is installed and working:
~ clang -v
clang version 8.0.0 (tags/RELEASE_800/final)
Target: x86_64-apple-darwin12.6.0
Thread model: posix
InstalledDir: /opt/local/bin
➜ ~ clang
clang-8: error: no input files
➜ ~
Then why isn't it found by the MacPorts?
➜ ~ sudo port install gtk2
---> Computing dependencies for gtk2
The following dependencies will be installed:
clang-4.0
...
Can I configure it to be found in /opt/local/bin instead of trying to install the old clang-4.0?
UPDATE3.
My config directories:
➜ ~ ls /opt/local/etc/macports
archive_sites.conf macports.conf.default sources.conf variants.conf.default
archive_sites.conf.default pubkeys.conf sources.conf.default
macports.conf pubkeys.conf.default variants.conf
➜ ~
➜ ~ less /opt/local/etc/macports/macports.conf
# MacPorts system-wide configuration file.
# Commented-out values are defaults unless otherwise noted.
# Directory under which MacPorts should install ports. This must be
# where MacPorts itself is installed.
prefix /opt/local
# User to run operations as when MacPorts drops privileges.
#macportsuser macports
# Directory for MacPorts working data.
portdbpath /opt/local/var/macports
# Colon-delimited list of directories to search for external tools
# (make(1), pkg-config(1), etc.). While installing ports, MacPorts uses
# this list for PATH. Changing this setting is intended for advanced
# users only and is unsupported.
#binpath /opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin
# Directory containing Xcode Tools. By default, MacPorts determines this
# using xcode-select(1).
#developer_dir /Applications/Xcode.app/Contents/Developer
# Location of PackageMaker. Defaults to
# "${developer_dir}/Applications/Utilities/PackageMaker.app" with Xcode
# 4.2 and earlier and "/Applications/PackageMaker.app" with 4.3 and later.
#packagemaker_path /Applications/PackageMaker.app
# Directory for application bundles installed by ports.
applications_dir /Applications/MacPorts
# Directory for frameworks installed by ports.
frameworks_dir /opt/local/Library/Frameworks
# Location of the MacPorts sources list.
sources_conf /opt/local/etc/macports/sources.conf
# Location of the MacPorts global variants definition file. Optional.
variants_conf /opt/local/etc/macports/variants.conf
# When MacPorts should build ports from source.
# - ifneeded: Download binary archives if available; build from source
# otherwise.
# - always: Always build from source; never try fetching archives.
# - never: Never build from source; try fetching archives and abort if
# unavailable.
#buildfromsource ifneeded
# Type of archive to use for port images. Supported types are cpgz,
# cpio, tar, tbz, tbz2, tgz, tlz, txz, xar, zip.
#portarchivetype tbz2
# Apply transparent filesystem compression to files on activation.
# Requires bsdtar with support for --hfsCompression in binpath, which can be
# provided by installing the libarchive port. This will work with HFS+ or APFS
# volumes only and will be ignored on other filesystems.
#hfscompression yes
# CPU architecture to target. Supported values are "ppc", "ppc64",
# "i386", and "x86_64". Defaults to:
# - OS X 10.5 and earlier: "ppc" on PowerPC, otherwise "i386".
# - OS X 10.6 and later: "x86_64" on Intel 64, otherwise "i386".
#build_arch i386
# Space-delimited list of CPU architectures to target when building
# universal. Defaults to "i386 ppc" on Mac OS X 10.5 and earlier,
# "x86_64 i386" on Mac OS X 10.6 through macOS 10.13, and "x86_64" on
# macOS 10.14 and later (the 10.14 SDK is not universal).
#universal_archs x86_64 i386
# Use ccache, a compiler cache for C, C++, Objective-C, and
# Objective-C++. (See http://ccache.samba.org.) The "ccache" executable
# must exist in one of the directories in binpath.
#configureccache no
# Directory for ccache's cached compiler output.
#ccache_dir /opt/local/var/macports/build/.ccache
# Maximum size of files stored in ccache's cache. Append "G", "M", or
# "K" for gigabytes, megabytes, or kilobytes.
# Use distcc, a distributed compiler for C, C++, Objective-C, and
# Objective-C++. (See http://distcc.org.) The "distcc" executable must
# exist in one of the directories in binpath.
#configuredistcc no
# Use pipes rather than temporary files for communication between the
# various stages of C, C++, Objective-C, and Objective-C++ compilation.
#configurepipe yes
# Lowered scheduling priority to use for commands run during configure,
# build, and destroot. Accepted values are 0 (normal priority) through
# 20 (lowest priority).
#buildnicevalue 0
# Number of simultaneous make(1) jobs to use when building ports. If set
# to 0, the number of jobs will be the lesser of:
# - number of automatically-detected CPU cores
# - gigabytes of physical memory + 1
#buildmakejobs 0
# umask value to use when a port installs its files.
#destroot_umask 022
# Automatically execute "clean" after "install" of ports.
#portautoclean yes
# Keep logs after successful installations.
#keeplogs no
# The rsync server for fetching MacPorts base during selfupdate. This
# setting is NOT used when downloading ports trees; ports trees are
# configured using the file referenced by sources_conf. See
# https://trac.macports.org/wiki/Mirrors#MacPortsSource for a list of
# available servers.
#rsync_server rsync.macports.org
# Location of MacPorts base sources on rsync_server. If this references
# a .tar file, a signed .rmd160 file must exist in the same directory
# and will be used to verify its integrity. See
# https://trac.macports.org/wiki/Mirrors#MacPortsSource to find the
# correct rsync_dir for a particular rsync_server.
#rsync_dir macports/release/tarballs/base.tar
# Options to pass to rsync when fetching MacPorts base and the ports tree.
#rsync_options -rtzvl --delete-after
# Type of generated StartupItems.
# - launchd: Create StartupItems for use with launchd.
# - default: Create StartupItems for launchd on OS X and none on
# other platforms.
# - none: Disable creation of StartupItems.
# This setting only applies when building ports from source.
#startupitem_type default
# Create system-level symlinks to generated StartupItems. If set to
# "no", symlinks will not be created; otherwise, symlinks will be placed
# in /Library/LaunchDaemons or /Library/LaunchAgents as appropriate.
# This setting only applies when building ports from source.
#startupitem_install yes
# Whether to allow ports to automatically load their StartupItems.
# If set to "no", StartupItems will never be loaded unless the user
# explicitly requests it. If set to "yes" (the default), some ports may
# automatically load their StartupItems when they are activated.
#startupitem_autostart yes
# Extra environment variables to keep. MacPorts sanitizes its
# environment while processing ports, keeping:
# - DISPLAY
# - DYLD_FALLBACK_FRAMEWORK_PATH, DYLD_FALLBACK_LIBRARY_PATH,
# DYLD_FRAMEWORK_PATH, DYLD_INSERT_LIBRARIES, DYLD_LIBRARY_PATH
# - JAVA_HOME
# - ARCHIVE_SITE_LOCAL, MASTER_SITE_LOCAL, PATCH_SITE_LOCAL
# - PORTSRC
# - ALL_PROXY, FTP_PROXY, http_proxy, HTTPS_PROXY, NO_PROXY, RSYNC_PROXY
# - GROUP, USER
# - COLUMNS, LINES
# Variables listed in extra_env are added to this list. This has no
# default value; setting it is intended for advanced users and is
# unsupported. (Note that sudo(8) sanitizes its environment on OS X 10.5
# and later, so it may have to be configured to pass the desired
# variables to MacPorts.)
#extra_env KEEP_THIS THIS_TOO
# Override proxy-related environment variables. By default, MacPorts
# takes proxy settings from the environment, from the proxy_* options
# below, and from Network Preferences, in that order. If this is set to
# "yes", MacPorts uses proxy_*, then Network Preferences, then the
# environment. (Note that Network Preferences does not have a setting
# for rsync proxies. Also note that sudo(8) sanitizes its environment on
# OS X 10.5 and later, so it may have to be configured to pass desired
# variables to MacPorts.)
#proxy_override_env no
# Proxies. These have no default values. The analogous environment
# variables are "http_proxy", "HTTPS_PROXY", "FTP_PROXY", and
# "RSYNC_PROXY".
#proxy_http proxy1:12345
#proxy_https proxy2:67890
#proxy_ftp proxy3:02139
#proxy_rsync proxy4:11377
# Comma-delimited list of hosts that MacPorts should not access through
# the HTTP, HTTPS, and FTP proxies. This does not apply to rsync, and it
# has no default value.
#proxy_skip host1, host2, host3
# Space-delimited lists of glob patterns matched against download hosts
# that MacPorts should not use and that MacPorts should prefer, respectively,
# overriding the usual ping time checks. These have no default values.
#host_blacklist badhost1 badhost2
#preferred_hosts preferredhost1 preferredhost2 *.de.*.macports.org
# Whether MacPorts should automatically run rev-upgrade after upgrading
# ports.
#revupgrade_autorun yes
# Whether rev-upgrade should automatically rebuild ports with broken
# linking or merely report the breakage. Supported values are "report"
# and "rebuild".
#revupgrade_mode rebuild
# Space-delimited list of files and directories to delete after the
# unarchive stage and before creating a pkg. Paths are interpreted
# relative to prefix, and there is no default value. This is useful for
# removing unnecessary files and directories prior to pkg or mpkg
# deployment.
#pkg_post_unarchive_deletions include share/doc share/man
# Whether the user interface should ask interactive questions
#ui_interactive yes
# Added to support C++11 following https://trac.macports.org/wiki/LibcxxOnOlderSystems
cxx_stdlib libc++
buildfromsource always
(END)

I have finally solved this puzzle, thanks to a hint from a MacPorts mailing list user. He suggested to
port install <port> configure.compiler=macports-clang-8.0
that did not work for me though, because my clang8 was in /usr/bin, while if I understand correctly, MacPorts look for their own packages rather than ones installed from elsewhere,
even after I manually symlinked it to /opt/local/bin/clang.
Then I read this comment:
We kept 3.4, 3.7, and 5.0 as stepping stones. I hope I thought that through fully...I think that’s the minimal amount needed.
It then occurred to me that I can try clang-3.7 as "stepping stone", installed it, and thereafter was able to install the other ports with
port install <port> configure.compiler=macports-clang-3.7
In particular, I was also able to install clang-5.0 that way:
port install clang-5.0 configure.compiler=macports-clang-3.7
And now that I have the more recent stepping stone in the chain, the problem seems fixed with no more annoying fallbacks
to obsolete ports!
Further sources
Quote from comment to my ticket referring to the problem:
https://trac.macports.org/ticket/58747#comment:1
MacPorts base 2.5.4 still has clang 4.0 in its list of compilers, even though the port has been made obsolete: ​https://github.com/macports/macports-base/blob/v2.5.4/src/port1.0/portconfigure.tcl#L604
It points to the code line 604:
lappend compilers macports-clang-5.0 macports-clang-4.0
from where it appears that one of clang-4.0 or 5.0 is required. This could be the reason why it insists on installing one of these ports, defaulting to the obsolete 4.0.
I presume a fix should include adding more ports to this list, e.g. clang-3.7 that is not obsolete (with hopefully no plans to change it).
Which is currently proposed in
Relevant Github PR https://github.com/macports/macports-base/pull/137
Please add your voice to get it merged!

This is an obsoletion message. Since you already have the replacement, just uninstall clang-4.0, llvm-4.0, and lldb-4.0 and you will be fine.

Related

How to build OCaml in M1 Mac with Zarith on it?

I am trying to do code generation with Isabelle/HOL in an M1 Mac computer. A recurring issue to achieve this relates to OCaml's library Zarith. I've asked in their mailing list and their answer was that "the problem is
ultimately to build OCaml (with Zarith) on it". Unfortunately, I do not understand what the verb "build" means in that sentence. OCaml is in that computer as the report on the end of this question indicates. The computer has Zarith on it (version 1.12). However, as they say, there is an issue with Zarith in that system. The evidence that I have for this comes from two observations:
When I run utop and do #require "zarith";; the answer is:
Cannot load required shared library dllzarith.
Reason: /.../.opam/ocaml-base-compiler.4.12.0/lib/stublibs/dllzarith.so: dlopen(/.../.opam/ocaml-base-compiler.4.12.0/lib/stublibs/dllzarith.so, 0x000A): symbol not found in flat namespace '___gmpn_add_n'.
When opening an .ml file in Visual Studio Code with commands with types such as Z.t where Z represents Zarith, VSC complains with Unbound module Z ocamllsp.
The question is then, how do I make this computer find the Zarith files it needs to work properly?
% opam config report
# opam config report
# opam-version 2.0.8
# self-upgrade no
# system arch=arm64 os=macos os-distribution=homebrew os-version=12.0.1
# solver builtin-mccs+glpk
# install-criteria -removed,-count[version-lag,request],-count[version-lag,changed],-changed
# upgrade-criteria -removed,-count[version-lag,solution],-new
# jobs 7
# repositories 1 (http) (default repo at 8818dcc3)
# pinned 0
# current-switch ocaml-base-compiler.4.12.0

Use v4l2loopback on AWS EC2

I have been trying to set up v4l2loopback on an EC2 instance and get the error - modprobe: FATAL: Module v4l2loopback not found in directory /lib/modules/5.4.0-1041-aws on sudo modprobe v4l2loopback.
Trying to load videodev using sudo modprobe videodev also returns the same module not found error.
I tried installing Linux headers for this but to no success. Any leads?
kernels for cloud VMs are most often stripped of anything unnecessary in a cloud environment for space (and implicitly speed) reasons (and put in a share of security reasons as well).
now most virtualized hardware that is running in some unknown datacenter has absolutely no requirement for hardware drivers (apart from the small set of drivers to run the "virtual hardware").
Also audio and multimedia applications are exceedingly rare under these circumstances - thus the image vendors strip away audio drivers and the v4l2 framework.
in order to use the v4l2loopback module, you need a kernel that comes with the v4l2-framework.
since the vendored images lack it, you need to configure and compile such a kernel yourself (and make sure it persists).
just installing the kernel-headers is not enough.
here's an excerpt of the relevant info of the kernel-configuration that should give you a v4l2loopback-compatible kernel:
CONFIG_MEDIA_SUPPORT=y
# CONFIG_MEDIA_SUPPORT_FILTER is not set
# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
#
# Media device types
#
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_SDR_SUPPORT=y
CONFIG_MEDIA_PLATFORM_SUPPORT=y
CONFIG_MEDIA_TEST_SUPPORT=y
# end of Media device types
#
# Media core support
#
CONFIG_VIDEO_DEV=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_DVB_CORE=y
# end of Media core support
#
# Video4Linux options
#
CONFIG_VIDEO_V4L2=y
CONFIG_VIDEO_V4L2_I2C=y
# CONFIG_VIDEO_V4L2_SUBDEV_API is not set
# CONFIG_VIDEO_ADV_DEBUG is not set
# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
# end of Video4Linux options

Squid cross compile

I've been trying to cross compile the Squid 3.5.7 on ARM Cortex A8 (Linux).
I downloaded it from http://www.squid-cache.org/Versions/v3/3.5/
I have arm-linux-gnueabi-gcc and arm-linux-gnueabi-g++.
tar -zxvf squid-3.5.7.tar.gz
cd squid-3.5.7
./configure --prefix=/usr/local/squid
make all
make install
Next I copy folders /usr/local/squid and ~/squid-3.5.7 to SD card.
When I try open ./squid -z from SD card on the board with ARM I have problem:
root#am335x:/# ls
bin etc lib mnt srv usr
boot findHelp linuxrc proc sys var
dev home media sbin tmp
root#am335x:/media/mmcblk0/squid/sbin# ls
squid
root#am335x:/media/mmcblk0/squid/sbin# ./squid -z
./squid: line 20: syntax error: ")" unexpected
root#am335x:/media/mmcblk0/squid/sbin# ./squid
./squid: line 20: syntax error: ")" unexpected
root#am335x:/media/mmcblk0/squid/sbin#
I don't know what to do :/
The binary which you have built is built for your PC architecture. To build squid for arm follow the below instructions.
The configure is trying to run a test which will fail if you are using a cross compiler so add a cache file to override those tests.
For example create a cache file squid.cache with the line shown below
squid_cv_gnu_atomics=no
Export the BUILDCXX variable required for compiling squid
export BUILDCXX=g++
Make sure you have exported the toolchain path to the path variable($PATH)
export PATH=<TOOLCHAIN_PATH>:$PATH
Then configure the squid by running the configure as shown below
./configure --host=arm-linux-gnueabi --cache-file=squid.cache --prefix=<install/dir>
Finally compile the squid by running make
make
Then install the binaries using make install
make install

not able to install anything using opam

I installed opam with homebrew on Mac OS X 10.10. But I can't install anything using opam. This is an example error output that get when I try to install ocamlfind:
# opam-version 1.2.0
# os darwin
# command ./configure -bindir /Users/roger/.opam/system/bin -sitelib /Users/roger/.opam/system/lib -mandir /Users/roger/.opam/system/man -config /Users/roger/.opam/system/lib/findlib.conf -no-topfind
# path /Users/roger/.opam/system/build/ocamlfind.1.5.5
# compiler system (4.02.1)
# exit-code 1
# env-file /Users/roger/.opam/system/build/ocamlfind.1.5.5/ocamlfind-91360-c61e7b.env
# stdout-file /Users/roger/.opam/system/build/ocamlfind.1.5.5/ocamlfind-91360-c61e7b.out
# stderr-file /Users/roger/.opam/system/build/ocamlfind.1.5.5/ocamlfind-91360-c61e7b.err
### stdout ###
# ...[truncated]
# Configuration for str written to site-lib-src/str/META
# Configuration for threads written to site-lib-src/threads/META
# Configuration for unix written to site-lib-src/unix/META
# Configuration for stdlib written to site-lib-src/stdlib/META
# Configuration for bigarray written to site-lib-src/bigarray/META
# Configuration for camlp4 written to site-lib-src/camlp4/META
# Configuration for ocamlbuild written to site-lib-src/ocamlbuild/META
# Configuration for compiler-libs written to site-lib-src/compiler-libs/META
# Configuration for bytes written to site-lib-src/bytes/META
# Detecting compiler arguments: FAILED (see the file ocargs.log for details)
### stderr ###
# ./configure: line 547: cd: src: No such file or directory
brew install opam
opam init --comp=4.02.1
eval `opam config env`
ocaml
Update:
Sometimes brewed opam can fail with Illegal Instruction, in that case you need to reinstall opam from sources:
brew reinstall --build-from-source opam
Also, you need a working toolchain, i.e., compiler, autotools and other developer tools. You can try to install it using brew, e.g., brew install autotools, etc. Or you can try to install xcode toolchain, including apple command line developer tools.
I had the same problem trying to install mirage, the problem is because the current directory is not in the CDPATH by default on macOS X. The posix /bin/sh will not "cd src" though can "cd ./src". The quick fix is to do the following before running opam (or just put it in your .bash_profile.
export CDPATH=.
opam install WHATEVER

'opam install uri' failed

I'm trying to install the uri package for Opam but I keep running in to this error.
==== ERROR [while installing uri.1.3.8] ====
# opam-version 0.9.6 (latest-103-g955b7ca)
# os linux
# command ocaml setup.ml -configure --prefix /root/.opam/system
# path /root/.opam/system/build/uri.1.3.8
# exit-code 1
# env-file /root/.opam/system/build/uri.1.3.8/uri-ffb3fd.env
# stdout-file /root/.opam/system/build/uri.1.3.8/uri-ffb3fd.out
# stderr-file /root/.opam/system/build/uri.1.3.8/uri-ffb3fd.err
### stderr ###
ocamlfind: Package `compiler-libs.toplevel' not found
W: Field 'pkg_compiler_libs_toplevel' is not set: Command ''/root/.opam/system/bin/ocamlfind' query -format %d compiler-libs.toplevel > '/tmp/oasis-85d951.txt'' terminated with error code 2
E: Cannot find findlib package compiler-libs.toplevel
E: Failure("1 configuration error")
'opam install uri' failed.
I'm pretty new to Ocaml and the Opam repo. I really have no idea what is going wrong. I am running Ubuntu 12.04 and have Ocaml 3.12.1 installed.
Thanks for any insight you can provide!
I just installing uri under 3.12.1 without any issues.
3.12.1 is under your system ocaml compiler, right? and you probably installed ocaml via aptitude? In which case you need to also install ocaml-compiler-libs. There are a number of other optional packages for OCaml that are usually needed and may run into in the future --camlp4-extra is another that I see missed and oft needed. A maximal list is here.
I would also upgrade OPAM, since there were some changes to the uri package only two days ago. opam update; opam upgrade. This will require some re-compilation, and make sure you switched to the correct compiler.
The package "compiler-libs.toplevel" is missing. If I remember right, it's shipped together with ocaml and is available only since version 4.0.
Either install an older version of uri or update your compiler to 4.0. For details look here