View previous topic :: View next topic |
Author |
Message |
alecStewart1 Tux's lil' helper
Joined: 03 Jul 2022 Posts: 148
|
Posted: Wed Aug 28, 2024 2:02 am Post subject: Troubles with making ebuild for Yuescript |
|
|
Hello friends, I thought I'd try my hand at making an ebuild for Yuescript: https://yuescript.org/
I have the following:
Code: |
# Copyright 2020-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
MY_V="v${PV}"
LUA_COMPAT=( lua5-{1..4} luajit )
inherit toolchain-funcs lua-single
DESCRIPTION="Yuescript is a dynamic language that compiles to Lua. And it's a
Moonscript dialect."
HOMEPAGE="https://yuescript.org/ https://github.com/pigpigyyy/Yuescript"
SRC_URI="https://github.com/pigpigyyy/Yuescript/archive/refs/tags/${MY_V}.tar.gz"
S="${WORKDIR}/${MY_V}"
LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="+system-lua +macros"
REQUIRED_USE="${LUA_REQUIRED_USE}"
BDEPEND="
virtual/pkgconfig
system-lua? ( ${LUA_DEPS} )
"
pkg_setup() {
use system-lua && lua-single_pkg_setup
}
src_configure() {
tc-export CXX LUA_EXEC_NAME="${ELUA}" NO_LUA=$(usex system-lua) NO_MACROS=$(usex macros)
}
src_compile() {
emake
}
src_install() {
emake install
}
|
Thing is, I keep getting
Code: |
>>> Verifying ebuild manifests
>>> Emerging (1 of 1) dev-lang/yuescript-0.24.1::local-repo
* v0.24.1.tar.gz BLAKE2B SHA512 size ;-) ... [ ok ]
* Using luajit to build
>>> Unpacking source...
>>> Unpacking v0.24.1.tar.gz to /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work
>>> Source unpacked in /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work
* ERROR: dev-lang/yuescript-0.24.1::local-repo failed (prepare phase):
* The source directory '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/v0.24.1' doesn't exist
*
* Call stack:
* ebuild.sh, line 784: Called __ebuild_main 'prepare'
* phase-functions.sh, line 1073: Called __dyn_prepare
* phase-functions.sh, line 400: Called die
* The specific snippet of code:
* die "The source directory '${S}' doesn't exist"
*
* If you need support, post the output of `emerge --info '=dev-lang/yuescript-0.24.1::local-repo'`,
* the complete build log and the output of `emerge -pqv '=dev-lang/yuescript-0.24.1::local-repo'`.
* The complete build log is located at '/var/log/portage/dev-lang:yuescript-0.24.1:20240828-020036.log'.
* For convenience, a symlink to the build log is located at '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/temp/environment'.
* Working directory: '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/empty'
* S: '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/v0.24.1'
>>> Failed to emerge dev-lang/yuescript-0.24.1, Log file:
>>> '/var/log/portage/dev-lang:yuescript-0.24.1:20240828-020036.log'
* Messages for package dev-lang/yuescript-0.24.1:
* Log file: /var/log/portage/dev-lang:yuescript-0.24.1:20240828-020036.log
* ERROR: dev-lang/yuescript-0.24.1::local-repo failed (prepare phase):
* The source directory '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/v0.24.1' doesn't exist
*
* Call stack:
* ebuild.sh, line 784: Called __ebuild_main 'prepare'
* phase-functions.sh, line 1073: Called __dyn_prepare
* phase-functions.sh, line 400: Called die
* The specific snippet of code:
* die "The source directory '${S}' doesn't exist"
*
* If you need support, post the output of `emerge --info '=dev-lang/yuescript-0.24.1::local-repo'`,
* the complete build log and the output of `emerge -pqv '=dev-lang/yuescript-0.24.1::local-repo'`.
* The complete build log is located at '/var/log/portage/dev-lang:yuescript-0.24.1:20240828-020036.log'.
* For convenience, a symlink to the build log is located at '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/temp/build.log'.
* The ebuild environment file is located at '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/temp/environment'.
* Working directory: '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/empty'
* S: '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/v0.24.1'
|
And I'm really unclear and so how to resolve this. If you're going to suggest that S instead be
Code: |
S="${WORKDIR}/${PN}/${MY_V}"
|
That doesn't work either.
Last edited by alecStewart1 on Sat Sep 07, 2024 10:37 pm; edited 1 time in total |
|
Back to top |
|
|
fedeliallalinea Administrator
Joined: 08 Mar 2003 Posts: 31257 Location: here
|
Posted: Wed Aug 28, 2024 5:53 am Post subject: |
|
|
Try to change line
Code: | SRC_URI="https://github.com/pigpigyyy/Yuescript/archive/refs/tags/${MY_V}.tar.gz" |
to
Code: | SRC_URI="https://github.com/pigpigyyy/Yuescript/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz" |
and comment lines MY_V="v${PV}" and S="${WORKDIR}/${MY_V}". _________________ Questions are guaranteed in life; Answers aren't. |
|
Back to top |
|
|
alecStewart1 Tux's lil' helper
Joined: 03 Jul 2022 Posts: 148
|
Posted: Tue Sep 03, 2024 3:54 am Post subject: |
|
|
fedeliallalinea wrote: | Try to change line
Code: | SRC_URI="https://github.com/pigpigyyy/Yuescript/archive/refs/tags/${MY_V}.tar.gz" |
to
Code: | SRC_URI="https://github.com/pigpigyyy/Yuescript/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz" |
and comment lines MY_V="v${PV}" and S="${WORKDIR}/${MY_V}". |
Ah, I forgot about the arrow. That makes sense, however, running ebuild yuescript-0.24.1.ebuild manifest will try to grab distfiles?
Code: |
>>> Downloading 'https://mirror.csclub.uwaterloo.ca/gentoo-distfiles/distfiles/25/yuescript-0.24.1.tar.gz'
--2024-09-02 22:53:34-- https://mirror.csclub.uwaterloo.ca/gentoo-distfiles/distfiles/25/yuescript-0.24.1.tar.gz
Resolving mirror.csclub.uwaterloo.ca... 129.97.134.71
Connecting to mirror.csclub.uwaterloo.ca|129.97.134.71|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2024-09-02 22:53:34 ERROR 404: Not Found.
>>> Downloading 'https://ftp.uni-hannover.de/gentoo/distfiles/layout.conf'
--2024-09-02 22:53:35-- https://ftp.uni-hannover.de/gentoo/distfiles/layout.conf
Resolving ftp.uni-hannover.de... 130.75.2.22
Connecting to ftp.uni-hannover.de|130.75.2.22|:443...
|
|
|
Back to top |
|
|
fedeliallalinea Administrator
Joined: 08 Mar 2003 Posts: 31257 Location: here
|
Posted: Tue Sep 03, 2024 6:06 am Post subject: |
|
|
You can add line RESTRICT="mirror" this force portage to fetch only from SRC_URI. _________________ Questions are guaranteed in life; Answers aren't. |
|
Back to top |
|
|
alecStewart1 Tux's lil' helper
Joined: 03 Jul 2022 Posts: 148
|
Posted: Wed Sep 04, 2024 2:46 am Post subject: |
|
|
fedeliallalinea wrote: | You can add line RESTRICT="mirror" this force portage to fetch only from SRC_URI. |
Awesome, thank you! Now we're getting into the bits where I may be a bit stupid.
So I'm trying to get yuescript to properly build against, in this case, luajit. For some reason, even with an environment variables set like LUA_EXEC_NAME="${ELUA}", yuescript will be built like the following
Code: |
>>> Compiling source in /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/Yuescript-0.24.1 ...
/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/temp/environment: line 1593: !use: command not found
make -j12 LUA_EXEC_NAME=luajit NO_LUA=yes NO_MACROS=
Creating directories
Beginning release build
make[1]: Entering directory '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/Yuescript-0.24.1/src/3rdParty/lua'
make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl"
make[2]: Entering directory '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/Yuescript-0.24.1/src/3rdParty/lua'
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lapi.o lapi.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c lcode.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lctype.o lctype.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ldebug.o ldebug.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ldo.o ldo.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ldump.o ldump.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lfunc.o lfunc.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lgc.o lgc.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c llex.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lmem.o lmem.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lobject.o lobject.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lopcodes.o lopcodes.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c lparser.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lstate.o lstate.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lstring.o lstring.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ltable.o ltable.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ltm.o ltm.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lundump.o lundump.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lvm.o lvm.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lzio.o lzio.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lauxlib.o lauxlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lbaselib.o lbaselib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lcorolib.o lcorolib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ldblib.o ldblib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o liolib.o liolib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lmathlib.o lmathlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o loadlib.o loadlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o loslib.o loslib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lstrlib.o lstrlib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o ltablib.o ltablib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o lutf8lib.o lutf8lib.c
gcc -std=gnu99 -O2 -Wall -Wextra -DLUA_COMPAT_5_3 -DLUA_USE_LINUX -c -o linit.o linit.c
|
This contains none of my CFLAGS, but I'm guessing that's my fault.
My other questions would be
How do I get -DLUA_COMPAT_5_3 to correspond to the user specified version?
How do I negate a use or use/usex statement?
Code: |
# Copyright 2020-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
LUA_COMPAT=( lua5-{1..4} luajit )
inherit toolchain-funcs lua-single
DESCRIPTION="Yuescript is a dynamic language that compiles to Lua. And it's a Moonscript dialect."
HOMEPAGE="https://yuescript.org/ https://github.com/pigpigyyy/Yuescript"
SRC_URI="https://github.com/pigpigyyy/Yuescript/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz"
RESTRICT="mirror"
D="${PORTAGE_BUILDDIR}/bin/release"
S="${WORKDIR}/Yuescript-${PV}"
LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE="+system-lua +macros"
REQUIRED_USE="${LUA_REQUIRED_USE}"
BDEPEND="
virtual/pkgconfig
system-lua? ( ${LUA_DEPS} )
"
pkg_setup() {
use system-lua && lua-single_pkg_setup
}
src_configure() {
tc-export CXX
}
src_compile() {
emake LUA_EXEC_NAME="${ELUA}" NO_LUA=$(usex system-lua) NO_MACROS=$(!use macros)
}
src_install() {
emake DESTDIR="$D" LUA_EXEC_NAME="${ELUA}" NO_LUA=$(usex system-lua) NO_MACROS=$(! use macros) install
}
|
The other thing is making sure that the resulting executable in ${PORTAGE_BUILDDIR}/bin/release/ is linked to /usr/local/bin
Code: |
Beginning release build
make[1]: Entering directory '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/Yuescript-0.24.1/src/3rdParty/lua'
make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl"
make[2]: Entering directory '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/Yuescript-0.24.1/src/3rdParty/lua'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/Yuescript-0.24.1/src/3rdParty/lua'
make[1]: Leaving directory '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/Yuescript-0.24.1/src/3rdParty/lua'
Making symlink: yue -> bin/release/yue
Total build time: 00:00:00
Installing to /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/imageusr/local/bin
/usr/bin/install: cannot create regular file '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/imageusr/local/bin': No such file or directory
install-xattr: failed to stat /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/imageusr/local/bin: No such file or directory
|
Maybe a few of these questions are worth asking the maintainers of yuescript, but I thought I'd ask them here first. |
|
Back to top |
|
|
logrusx Advocate
Joined: 22 Feb 2018 Posts: 2397
|
Posted: Wed Sep 04, 2024 4:14 am Post subject: |
|
|
Not related to your questions, but did you notice this:
alecStewart1 wrote: |
Code: |
>>> Compiling source in /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/Yuescript-0.24.1 ...
/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/temp/environment: line 1593: !use: command not found
|
|
alecStewart1 wrote: | The other thing is making sure that the resulting executable in ${PORTAGE_BUILDDIR}/bin/release/ is linked to /usr/local/bin
|
That location is intended for things an administrator puts on the system like scripts et.c.
Best Regards,
Georgi |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22613
|
Posted: Wed Sep 04, 2024 12:43 pm Post subject: |
|
|
logrusx wrote: | Not related to your questions, but did you notice this: alecStewart1 wrote: | Code: | >>> Compiling source in /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/work/Yuescript-0.24.1 ...
/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/temp/environment: line 1593: !use: command not found |
|
| I think that is what led to this question: alecStewart1 wrote: | How do I negate a use or use/usex statement? |
alecStewart1 wrote: | For some reason, even with an environment variables set like LUA_EXEC_NAME="${ELUA}", yuescript will be built like the following | As an initial frame challenge, why do you think setting that variable should do anything? Does upstream's build system use that variable in a useful way? It looks to me like you set the variable properly, and Make should have passed it to the programs it ran. Code: | $ printf 'a:\n\t/usr/bin/env\n' | /usr/bin/env -i /usr/bin/make -f - LUA_EXEC_NAME=luajit
/usr/bin/env
MAKEFLAGS= -- LUA_EXEC_NAME=luajit
MFLAGS=
MAKELEVEL=1
LUA_EXEC_NAME=luajit | Therefore, my first suspicion would be that upstream either overrides this variable or ignores it entirely. alecStewart1 wrote: | Code: | /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/temp/environment: line 1593: !use: command not found |
| Since you are not doing this in an if test, you will need to approach this differently. Per man 5 ebuild, I think you want: Code: | NO_MACROS=$(usex macros no yes) | This says that if USE=macros, echo no. If USE=-macros, echo yes. Yes, this is confusing, and no, no one should use double negations like this. alecStewart1 wrote: | This contains none of my CFLAGS, but I'm guessing that's my fault. | Maybe. As with LUA_EXEC_NAME, it could be that the upstream Makefile is either overriding the value or is ignoring it entirely. Code: | $ printf 'CFLAGS=from-makefile\na:\n\t/usr/bin/env\n' | /usr/bin/env -i CFLAGS=from-environment /usr/bin/make -f -
/usr/bin/env
MAKEFLAGS=
MFLAGS=
MAKELEVEL=1
CFLAGS=from-makefile |
alecStewart1 wrote: | How do I get -DLUA_COMPAT_5_3 to correspond to the user specified version? | You mean, how do you determine that 5 and 3 are the right numbers, given the value(s) the user picked for LUA_TARGETS? alecStewart1 wrote: | Code: | D="${PORTAGE_BUILDDIR}/bin/release" |
| I think you should not set this here. Why is it here? alecStewart1 wrote: | Code: | src_install() {
emake DESTDIR="$D" LUA_EXEC_NAME="${ELUA}" NO_LUA=$(usex system-lua) NO_MACROS=$(! use macros) install
} |
Code: | Installing to /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/imageusr/local/bin
/usr/bin/install: cannot create regular file '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/imageusr/local/bin': No such file or directory
install-xattr: failed to stat /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/imageusr/local/bin: No such file or directory |
| Your src_install looks correct, but this output is clearly wrong. I think upstream's install target is missing a /. You might be able to work around it by writing DESTDIR="$D/", but this is non-standard, so future readers would wonder why you have a trailing /. alecStewart1 wrote: | The other thing is making sure that the resulting executable in ${PORTAGE_BUILDDIR}/bin/release/ is linked to /usr/local/bin | As logrusx said, it should go in /usr/bin. You may need another override, or a Makefile patch, to make that happen. |
|
Back to top |
|
|
alecStewart1 Tux's lil' helper
Joined: 03 Jul 2022 Posts: 148
|
Posted: Wed Sep 04, 2024 3:42 pm Post subject: |
|
|
Hu wrote: |
alecStewart1 wrote: | For some reason, even with an environment variables set like LUA_EXEC_NAME="${ELUA}", yuescript will be built like the following |
As an initial frame challenge, why do you think setting that variable should do anything?
Does upstream's build system use that variable in a useful way? It looks to me like you set the variable properly, and Make should have passed it to the programs it ran.
Code: |
$ printf 'a:\n\t/usr/bin/env\n' | /usr/bin/env -i /usr/bin/make -f - LUA_EXEC_NAME=luajit
/usr/bin/env
MAKEFLAGS= -- LUA_EXEC_NAME=luajit
MFLAGS=
MAKELEVEL=1
LUA_EXEC_NAME=luajit |
Therefore, my first suspicion would be that upstream either overrides this variable or ignores it entirely.
|
Initially I thought you could do this to get yuescript to build against luajit. However it seems like, from this issue on the project, one has to do it another way.
Hu wrote: |
alecStewart1 wrote: |
Code: | /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/temp/environment: line 1593: !use: command not found |
|
Since you are not doing this in an if test, you will need to approach this differently.
Per man 5 ebuild, I think you want:
Code: | NO_MACROS=$(usex macros no yes) |
This says that if USE=macros, echo no. If USE=-macros, echo yes. Yes, this is confusing, and no, no one should use double negations like this.
|
So if it's confusing, is there not a better way to do this?
Hu wrote: |
alecStewart1 wrote: | This contains none of my CFLAGS, but I'm guessing that's my fault. |
Maybe. As with LUA_EXEC_NAME, it could be that the upstream Makefile is either overriding the value or is ignoring it entirely.
Code: | $ printf 'CFLAGS=from-makefile\na:\n\t/usr/bin/env\n' | /usr/bin/env -i CFLAGS=from-environment /usr/bin/make -f -
/usr/bin/env
MAKEFLAGS=
MFLAGS=
MAKELEVEL=1
CFLAGS=from-makefile |
|
Makes sense. Well...it kind of doesn't make sense the Makefile is overriding or ignoring the values of CFLAGS/CXXFLAGS, but it makes sense as to that being the issue.
Hu wrote: |
alecStewart1 wrote: |
How do I get -DLUA_COMPAT_5_3 to correspond to the user specified version?
|
You mean, how do you determine that 5 and 3 are the right numbers, given the value(s) the user picked for LUA_TARGETS?
|
Yes, exactly.
Hu wrote: |
alecStewart1 wrote: |
Code: | D="${PORTAGE_BUILDDIR}/bin/release" |
|
I think you should not set this here. Why is it here?
|
I thought setting D would install the resulting binary to the correct path. Not sure why I thought that.
Hu wrote: |
alecStewart1 wrote: |
Code: | src_install() {
emake DESTDIR="$D" LUA_EXEC_NAME="${ELUA}" NO_LUA=$(usex system-lua) NO_MACROS=$(! use macros) install
} |
Code: | Installing to /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/imageusr/local/bin
/usr/bin/install: cannot create regular file '/var/tmp/portage/portage/dev-lang/yuescript-0.24.1/imageusr/local/bin': No such file or directory
install-xattr: failed to stat /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/imageusr/local/bin: No such file or directory |
|
Your src_install looks correct, but this output is clearly wrong. I think upstream's install target is missing a /. You might be able to work around it by writing DESTDIR="$D/", but this is non-standard, so future readers would wonder why you have a trailing /.
|
Hmm, okay.
Hu wrote: |
alecStewart1 wrote: | The other thing is making sure that the resulting executable in ${PORTAGE_BUILDDIR}/bin/release/ is linked to /usr/local/bin |
As logrusx said, it should go in /usr/bin. You may need another override, or a Makefile patch, to make that happen.
|
Ah, of course. Part of me was hoping this ebuild wouldn't potentially involve patches or a ton of envvar override logic, but seems it's unavoidable. |
|
Back to top |
|
|
grknight Retired Dev
Joined: 20 Feb 2015 Posts: 1908
|
Posted: Wed Sep 04, 2024 4:39 pm Post subject: |
|
|
alecStewart1 wrote: | Hu wrote: | alecStewart1 wrote: |
Code: | /var/tmp/portage/portage/dev-lang/yuescript-0.24.1/temp/environment: line 1593: !use: command not found |
|
Since you are not doing this in an if test, you will need to approach this differently.
Per man 5 ebuild, I think you want:
Code: | NO_MACROS=$(usex macros no yes) |
This says that if USE=macros, echo no. If USE=-macros, echo yes. Yes, this is confusing, and no, no one should use double negations like this.
|
So if it's confusing, is there not a better way to do this? |
I would suggest using $(usex macros '' NO_MACRO=true) as an example. The makefile specifically looks for a value of 'true'. When macros USE is enabled, it won't output anything. |
|
Back to top |
|
|
alecStewart1 Tux's lil' helper
Joined: 03 Jul 2022 Posts: 148
|
Posted: Thu Sep 05, 2024 7:23 pm Post subject: |
|
|
Okay, a little peak into the project's makefile and I found these:
Code: |
#### PROJECT SETTINGS ####
# The name of the executable to be created
BIN_NAME := yue
# Compiler used
CXX ?= g++
# Extension of source files used in the project
SRC_EXT = cpp
# Path to the source directory, relative to the makefile
SRC_PATH = ./src
# Space-separated pkg-config libraries used by this project
LIBS =
# General compiler flags
COMPILE_FLAGS = -std=c++17 -Wall -Wextra -Wno-deprecated-declarations
# Additional release-specific flags
RCOMPILE_FLAGS = -D NDEBUG -O3
# Additional debug-specific flags
DCOMPILE_FLAGS = -D DEBUG
# Add additional include paths
INCLUDES = -I $(SRC_PATH) -I $(SRC_PATH)/3rdParty
# General linker settings
LINK_FLAGS = -lpthread
# Additional release-specific linker settings
RLINK_FLAGS =
# Additional debug-specific linker settings
DLINK_FLAGS =
# Destination directory, like a jail or mounted system
DESTDIR = /
# Install path (bin/ is appended automatically)
INSTALL_PREFIX = usr/local
|
But, later on in the makefile, there's the following
Code: |
release: export CXXFLAGS := $(CXXFLAGS) $(COMPILE_FLAGS) $(RCOMPILE_FLAGS)
release: export LDFLAGS := $(LDFLAGS) $(LINK_FLAGS) $(RLINK_FLAGS)
debug: export CXXFLAGS := $(CXXFLAGS) $(COMPILE_FLAGS) $(DCOMPILE_FLAGS)
debug: export LDFLAGS := $(LDFLAGS) $(LINK_FLAGS) $(DLINK_FLAGS)
shared: export CXXFLAGS := $(CXXFLAGS) $(COMPILE_FLAGS) $(RCOMPILE_FLAGS) $(TARGET_FLAGS)
|
So, to me, it looks like I should do
Code: |
tc-export CXX CXXFLAGS LDFLAGS
|
In the src_configure. |
|
Back to top |
|
|
alecStewart1 Tux's lil' helper
Joined: 03 Jul 2022 Posts: 148
|
Posted: Thu Sep 05, 2024 7:28 pm Post subject: |
|
|
As a point to you, Hu, I found this in the project's CMakeLists.txt
Code: |
get_filename_component(LUA_EXEC_NAME ${LUA} NAME)
if (LUA_EXEC_NAME STREQUAL "luajit")
find_library(LUA_LIBRARIES
NAMES luajit libluajit
PATHS ${LUA_LIBDIR}
NO_DEFAULT_PATH)
elseif (LUA_EXEC_NAME MATCHES "lua5\.4" OR LUA_EXEC_NAME MATCHES "lua54")
find_library(LUA_LIBRARIES
NAMES lua54 lua5.4 liblua54 liblua5.4 lua liblua
PATHS ${LUA_LIBDIR}
NO_DEFAULT_PATH)
elseif (LUA_EXEC_NAME MATCHES "lua5\.3" OR LUA_EXEC_NAME MATCHES "lua53")
find_library(LUA_LIBRARIES
NAMES lua53 lua5.3 liblua53 liblua5.3 lua liblua
PATHS ${LUA_LIBDIR}
NO_DEFAULT_PATH)
elseif (LUA_EXEC_NAME MATCHES "lua5\.2" OR LUA_EXEC_NAME MATCHES "lua52")
find_library(LUA_LIBRARIES
NAMES lua52 lua5.2 liblua52 liblua5.2 lua liblua
PATHS ${LUA_LIBDIR}
NO_DEFAULT_PATH)
elseif (LUA_EXEC_NAME MATCHES "lua5\.1" OR LUA_EXEC_NAME MATCHES "lua51")
find_library(LUA_LIBRARIES
NAMES lua51 lua5.1 liblua51 liblua5.1 lua liblua
PATHS ${LUA_LIBDIR}
NO_DEFAULT_PATH)
else ()
find_library(LUA_LIBRARIES
NAMES lua liblua
PATHS ${LUA_LIBDIR}
NO_DEFAULT_PATH)
endif()
|
|
|
Back to top |
|
|
alecStewart1 Tux's lil' helper
Joined: 03 Jul 2022 Posts: 148
|
Posted: Sat Sep 07, 2024 10:36 pm Post subject: |
|
|
Alright, until I get some feedback from someone working on the project, I'm considering this a lost cause. I thought I could be cheeky by patching the makefile to directly use the users CXXFLAGS and LDFLAGS, but it just...doesn't.
Code: |
--- a/makefile 2024-09-07 17:00:35.518312030 -0500
+++ b/makefile 2024-09-07 17:25:49.606947110 -0500
@@ -10,29 +10,29 @@
# Space-separated pkg-config libraries used by this project
LIBS =
# General compiler flags
-COMPILE_FLAGS = -std=c++17 -Wall -Wextra -Wno-deprecated-declarations
+COMPILE_FLAGS = -std=c++17 -Wextra -Wno-deprecated-declarations ${CXXFLAGS}
# Additional release-specific flags
-RCOMPILE_FLAGS = -D NDEBUG -O3
+#RCOMPILE_FLAGS = -D NDEBUG -O3
# Additional debug-specific flags
-DCOMPILE_FLAGS = -D DEBUG
+DCOMPILE_FLAGS = -D DEBUG ${CXXFLAGS}
# Add additional include paths
INCLUDES = -I $(SRC_PATH) -I $(SRC_PATH)/3rdParty
# General linker settings
-LINK_FLAGS = -lpthread
+LINK_FLAGS = ${LDFLAGS} -lpthread
# Additional release-specific linker settings
-RLINK_FLAGS =
+#RLINK_FLAGS =
# Additional debug-specific linker settings
DLINK_FLAGS =
# Destination directory, like a jail or mounted system
DESTDIR = /
# Install path (bin/ is appended automatically)
-INSTALL_PREFIX = usr/local
+INSTALL_PREFIX = usr/
# Test
TEST_INPUT = ./spec/inputs
TEST_OUTPUT = ./spec/generated
GEN_OUTPUT = ./spec/outputs
-PLAT = macos
+PLAT = linux
#### END PROJECT SETTINGS ####
@@ -95,11 +95,11 @@
endif
# Combine compiler and linker flags
-release: export CXXFLAGS := $(CXXFLAGS) $(COMPILE_FLAGS) $(RCOMPILE_FLAGS)
-release: export LDFLAGS := $(LDFLAGS) $(LINK_FLAGS) $(RLINK_FLAGS)
-debug: export CXXFLAGS := $(CXXFLAGS) $(COMPILE_FLAGS) $(DCOMPILE_FLAGS)
-debug: export LDFLAGS := $(LDFLAGS) $(LINK_FLAGS) $(DLINK_FLAGS)
-shared: export CXXFLAGS := $(CXXFLAGS) $(COMPILE_FLAGS) $(RCOMPILE_FLAGS) $(TARGET_FLAGS)
+release: export CXXFLAGS := $(COMPILE_FLAGS)
+release: export LDFLAGS := $(LINK_FLAGS)
+debug: export CXXFLAGS := $(COMPILE_FLAGS) $(DCOMPILE_FLAGS)
+debug: export LDFLAGS := $(LINK_FLAGS) $(DLINK_FLAGS)
+shared: export CXXFLAGS := $(COMPILE_FLAGS) $(TARGET_FLAGS)
# Build and output paths
release: export BUILD_PATH := build/release
|
At this point, I think I'm just not even going to bother. I thought this would be vastly simpler, but it appears to not be. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|