Idris2 icon indicating copy to clipboard operation
Idris2 copied to clipboard

Error during the build: `Idris2-0.7.0/build/exec/idris2:A:h/idris2_app/idris2-boot.so: no such file or directory` (wrong path?)

Open barracuda156 opened this issue 1 year ago • 11 comments

This is probably something local, but I don't know what may fail here:

--->  Building idris2
Executing:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0" && /usr/bin/make -w bootstrap SCHEME=scheme CC="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14" CXX="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cxx/opt/local/bin/g++-mp-14" OBJC="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/objc/opt/local/bin/gcc-mp-14" OBJCXX="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/objcxx/opt/local/bin/g++-mp-14" FC="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/fc/opt/local/bin/gfortran-mp-14" F77="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/f77/opt/local/bin/gfortran-mp-14" F90="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/f90/opt/local/bin/gfortran-mp-14" INSTALL="/usr/bin/install -c" 
make: Entering directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0'
make[1]: Entering directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/support'
make[2]: Entering directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/support/c'
make[2]: Leaving directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/support/c'
make[2]: Entering directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/support/c'
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o getline.o getline.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o idris_directory.o idris_directory.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o idris_file.o idris_file.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o idris_memory.o idris_memory.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o idris_net.o idris_net.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o idris_signal.o idris_signal.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o idris_support.o idris_support.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o idris_system.o idris_system.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o idris_term.o idris_term.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o idris_util.o idris_util.c
ar rc libidris2_support.a getline.o idris_directory.o idris_file.o idris_memory.o idris_net.o idris_signal.o idris_support.o idris_system.o idris_term.o idris_util.o
ranlib libidris2_support.a
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include -shared -o libidris2_support.dylib getline.o idris_directory.o idris_file.o idris_memory.o idris_net.o idris_signal.o idris_support.o idris_system.o idris_term.o idris_util.o -L/opt/local/lib -Wl,-headerpad_max_install_names -arch ppc
make[2]: Leaving directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/support/c'
make[2]: Entering directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/support/refc'
make[2]: Leaving directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/support/refc'
make[2]: Entering directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/support/refc'
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o buffer.o buffer.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o casts.o casts.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o clock.o clock.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o conCaseHelper.o conCaseHelper.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o mathFunctions.o mathFunctions.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o memoryManagement.o memoryManagement.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o prim.o prim.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o refc_util.o refc_util.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o runtime.o runtime.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o stringOps.o stringOps.c
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14 -Wall -Wall -Wall -Os -arch ppc -fPIC -fPIC -fPIC -O2 -I/opt/local/include  -c -o threads.o threads.c
ar rc libidris2_refc.a buffer.o casts.o clock.o conCaseHelper.o mathFunctions.o memoryManagement.o prim.o refc_util.o runtime.o stringOps.o threads.o
ranlib libidris2_refc.a
make[2]: Leaving directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/support/refc'
make[2]: Entering directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/support/chez'
# start library header
echo "(library (support) (export" > support-sep.ss
# print the list of exports
cat support.ss \
		| sed -n 's|(define (\?\([^ )]*\).*|\1|p' \
		>> support-sep.ss
echo ") (import (chezscheme))" >> support-sep.ss
# copy the code
cat support.ss >> support-sep.ss
# close the bracket
echo ") ; end of (library)" >> support-sep.ss
make[2]: Leaving directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/support/chez'
make[1]: Leaving directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/support'
mkdir -p bootstrap-build/idris2_app
cp support/c/libidris2_support.dylib bootstrap-build/idris2_app/
sed 's/libidris2_support.so/libidris2_support.dylib/g; s|__PREFIX__|/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/bootstrap-build|g' \
		bootstrap/idris2_app/idris2.ss \
		> bootstrap-build/idris2_app/idris2-boot.ss
/bin/sh ./bootstrap-stage1-chez.sh
Bootstrapping SCHEME=scheme IDRIS2_VERSION=0.7.0
Building idris2-boot from idris2-boot.ss
compiling idris2_app/idris2-boot.ss with output to idris2_app/idris2-boot.so
IDRIS2_CG="chez" /bin/sh ./bootstrap-stage2.sh
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/bootstrap-build
make[1]: Entering directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0'
make -C libs/prelude IDRIS2=/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/build/exec/idris2 IDRIS2_INC_CGS=chez IDRIS2_PATH="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/libs/prelude/build/ttc:/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/libs/base/build/ttc:/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/libs/linear/build/ttc:/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/libs/network/build/ttc:/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/libs/contrib/build/ttc:/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/libs/test/build/ttc:"
make[2]: Entering directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/libs/prelude'
/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/build/exec/idris2 --build prelude.ipkg
Exception in load: failed for /opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/build/exec/idris2:A:h/idris2_app/idris2-boot.so: no such file or directory
make[2]: *** [all] Error 255
make[2]: Leaving directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/libs/prelude'
make[1]: *** [prelude] Error 2
make[1]: Leaving directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0'
make: *** [bootstrap] Error 2
make: Leaving directory `/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0'
Command failed:  cd "/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0" && /usr/bin/make -w bootstrap SCHEME=scheme CC="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cc/opt/local/bin/gcc-mp-14" CXX="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/cxx/opt/local/bin/g++-mp-14" OBJC="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/objc/opt/local/bin/gcc-mp-14" OBJCXX="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/objcxx/opt/local/bin/g++-mp-14" FC="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/fc/opt/local/bin/gfortran-mp-14" F77="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/f77/opt/local/bin/gfortran-mp-14" F90="/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/compwrap/f90/opt/local/bin/gfortran-mp-14" INSTALL="/usr/bin/install -c" 
Exit code: 2

So the build complains it cannot find

/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/build/exec/idris2:A:h/idris2_app/idris2-boot.so`.

The lib is built, but the correct path is

/opt/local/var/macports/build/_opt_PPCSnowLeopardPorts_lang_idris2/idris2/work/Idris2-0.7.0/build/exec/idris2_app/idris2-boot.so

What is injecting this odd idris2:A:h? Portfile does not add anything of this kind.

barracuda156 avatar Dec 29 '24 09:12 barracuda156

PPCSnowLeopardPorts

Just curious: Are you running Snow Leopard on PowerPC hardware?

Real questions:

  • I see mentions of MacPort, are you building from source, pack, homebrew, or from macport?
  • Do any of the alternatives work? or do they fail in the same way?
  • I suspect this is a platform-specific issue, much like sed vs gsed, are you using gnu coreutils?

andrevidela avatar Dec 29 '24 09:12 andrevidela

@andrevidela Thank you for responding! It was fast :)

Yeah, I build from MacPorts’s port (well, I have added it to MacPorts): https://github.com/macports/macports-ports/blob/a1e0942d737abc9daff03d67744865aa1131c8b3/lang/idris2/Portfile I had it building earlier on PowerPC, so the arch is not a problem, but coreutils have been updated since then, I think. I can try switching to other version, coreutils is a small thing to rebuild.

The aim is to have the port working, also homebrew is broken on legacy macOS, so not an option anyway. And indeed, this is SL on PowerPC.

barracuda156 avatar Dec 29 '24 10:12 barracuda156

I had it building earlier on PowerPC, so the arch is not a problem

So it works locally but not through macport?

andrevidela avatar Dec 29 '24 13:12 andrevidela

So it works locally but not through macport?

No, it worked via MacPorts (including on macOS powerpc), but on this installation it does not now. There is no problem with the port in principle, I just need to figure out what fails in this instance. Maybe the build picks a wrong sed.

barracuda156 avatar Dec 29 '24 14:12 barracuda156

The startup script for idris looks like:

#!/bin/sh
# @generated by Idris 0.7.0-fc3d2a04d, Chez backend

set -e # exit on any error

if [ "$(uname)" = Darwin ]; then
  DIR=$(zsh -c 'printf %s "$0:A:h"' "$0")
else
  DIR=$(dirname "$(readlink -f -- "$0")")
fi
export LD_LIBRARY_PATH="$DIR/idris2_app:$LD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH="$DIR/idris2_app:$DYLD_LIBRARY_PATH"
export IDRIS2_INC_SRC="$DIR/idris2_app"

"$DIR/idris2_app/idris2.so" "$@"

That's generated in src/Compiler/Scheme/Chez.idr. I believe the :A:h is supposed to take absolute path and then the directory part. My wild guess would be that you've maybe got a zsh that is too old, or something not zsh that is pretending to be zsh.

dunhamsteve avatar Dec 30 '24 04:12 dunhamsteve

@dunhamsteve You must be right. This is a system bash, while on another installation where it worked fine it was zsh. I do not remember which version (away from the machine), but I have modern ones via MacPorts, so it is easy to switch to a desired shell. Perhaps I need to implement that in portfile logic though, otherwise people may get these random obscure failures.

Thank you for pointing this!

barracuda156 avatar Dec 30 '24 05:12 barracuda156

BTW it failed to build on 4 macOS versions on buildbots, could be the same issue: https://ports.macports.org/port/idris2/details (logs are gone)

barracuda156 avatar Dec 30 '24 14:12 barracuda156

This is the fix (to add into the portfile):

if {${os.platform} eq "darwin" && ${os.major} < 11} {
    depends_build-append \
                    port:zsh
    build.env-append \
                    SHELL=${prefix}/bin/zsh
}

Closing, thank you very much.

barracuda156 avatar Dec 30 '24 15:12 barracuda156

OMG, somehow I lost my patch and got the same error with 0.8.0 now.

barracuda156 avatar Nov 02 '25 06:11 barracuda156

oh boy

andrevidela avatar Nov 02 '25 09:11 andrevidela

@andrevidela It still works with zsh, so if no plans to fix it for old bash, we can close this issue. Since modern zsh is available on legacy macOS, this is just a matter of an extra build dependency.

barracuda156 avatar Nov 02 '25 09:11 barracuda156