> On Jul 12, 2021, at 6:48 PM, Kevin Horton <[email protected]> wrote:
>
>
>> On Jul 12, 2021, at 6:29 PM, Ryan Schmidt <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>> On Jul 12, 2021, at 20:13, Kevin Horton wrote:
>>
>>> I'm trying to create a port for ConvertAll - http://convertall.bellz.org
>>> <http://convertall.bellz.org/>. I've been using MacPorts for several
>>> years, but have never created a portfile before. I used Fink for many
>>> years before switching to MacPorts, and I was a maintainer for a handful of
>>> packages. I'm an enthusiastic amateur, not a coder.
>>>
>>> My attempts to get a ConvertAll portfile working are running into problems
>>> when MacPorts detects that the build process is trying to install files in
>>> /opt/local/share/convertall, and it fails with a permissions error. I'm
>>> baffled as to what is going on here.
>>>
>>> Current draft Portfile:
>>> # -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil;
>>> c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
>>>
>>> PortSystem 1.0
>>> PortGroup github 1.0
>>> PortGroup python 1.0
>>> PortGroup qt5 1.0
>>>
>>> github.setup doug-101 ConvertAll 0.8.0 v
>>> github.tarball_from releases
>>>
>>> python.versions 34 35 36 37 38 39
>>> python.default_version 38
>>>
>>> qt5.min_version 5.4
>>>
>>> name convertall
>>> version 0.8.0
>>> license GPL-2+
>>> categories math, science
>>
>> Remove the comma here.
>>
>>> platforms darwin
>>> maintainers {@khorton kilohotel.com <http://kilohotel.com/>:kevin01}
>>> description Extremely flexible unit converter
>>> long_description ConvertAll has a large database of units, and allows
>>> conversions \
>>> that use multiple units, e.g. convert from feet per
>>> decade to \
>>> nautical miles per fortnight.
>>> homepage http://convertall.bellz.org
>>> <http://convertall.bellz.org/>
>>>
>>> checksums rmd160 89fcc2aa9bad7ecc1de7bee4edea68fdff39706a \
>>> sha256
>>> 624c8a792b0bc7ff3776499c2c743b32273569efd0567615e570a7e739e8d521 \
>>> size 281055
>>>
>>> depends_lib-append port:py${python.version}-pyqt5
>>>
>>> use_configure no
>>> build.cmd ${python.bin} install.py
>>> build.args -p ${prefix} \
>>> -b ${destroot}
>>>
>>> post-patch {
>>> reinplace "s|/usr/local|${prefix}|g" ${worksrcpath}/install.py
>>> }
>>> ====================================
>>> Extract of build log showing failure:
>>
>> Looks like you just pasted the portfile again here. Can you show the failure
>> log? I'm specifically interested in determining whether the failure is
>> occurring in the build phase or in the destroot phase. If the latter, then
>> it'll be because you only set build.cmd and build.args and didn't set
>> destroot.cmd and destroot.args.
>>
>> Looks like you've set build.cmd and build.args reasonably for this build
>> system, but MacPorts usually builds in the build phase and stages into the
>> destroot in the destroot phase. If there is a way to tell this build system
>> to do that, do so. In that case, you would probably need to set destroot.cmd
>> and destroot.args too. If it is quite difficult to tell the build system to
>> do that, then it is acceptable for the build phase to install the files into
>> the destroot already and to have the destroot phase do nothing. In that
>> case, you could disable the destroot phase by writing "destroot {}". Some
>> ports do it the other way around, where the build phase does nothing ("build
>> {}") and the destroot phase does the building and the destrooting.
>
>
> Whoops
>
> :info:build Checking dependencies...
> :info:build Python Version 3.8.11 -> OK
> :info:build Qt Version 5.15.2 -> OK
> :info:build PyQt Version 5.15.4 -> OK
> :info:build Installing files...
> :info:build Copying python files to /usr/local/share/convertall
> :info:build Traceback (most recent call last):
> :info:build File "install.py", line 308, in <module>
> :info:build main()
> :info:build File "install.py", line 229, in main
> :info:build copyDir('source', pythonBuildDir)
> :info:build File "install.py", line 92, in copyDir
> :info:build shutil.copy2(srcPath, os.path.join(dstDir, name))
> :info:build File
> "/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/shutil.py",
> line 435, in copy2
> :info:build copyfile(src, dst, follow_symlinks=follow_symlinks)
> :info:build File
> "/opt/local/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/shutil.py",
> line 264, in copyfile
> :info:build with open(src, 'rb') as fsrc, open(dst, 'wb') as fdst:
> :info:build PermissionError: [Errno 1] Operation not permitted:
> '/usr/local/share/convertall/unitedit.py'
> :info:build Command failed: cd
> "/opt/local/var/macports/build/_Users_kwh_sw_projects_git_macports_kwh_math_convertall/convertall/work/ConvertAll-0.8.0"
> && /opt/local/Library/Frameworks/Python.framework/Versions/3.8/bin/python3.8
> install.py build -j16 -p /opt/local -b
> /opt/local/var/macports/build/_Users_kwh_sw_projects_git_macports_kwh_math_convertall/convertall/work/destroot
>
> :info:build Exit code: 1
> :error:build Failed to build convertall: command execution failed
> :debug:build Error code: CHILDSTATUS 26196 1
> :debug:build Backtrace: command execution failed
> :debug:build while executing
> :debug:build "system {*}$notty {*}$callback {*}$nice $fullcmdstring"
> :debug:build invoked from within
> :debug:build "command_exec -callback portprogress::target_progress_callback
> build"
> :debug:build (procedure "portbuild::build_main" line 8)
> :debug:build invoked from within
> :debug:build "$procedure $targetname"
> :error:build See
> /opt/local/var/macports/logs/_Users_kwh_sw_projects_git_macports_kwh_math_convertall/convertall/main.log
> for details.
>
> Kevin
>
>
Well, I don't understand why ConvertAll's build system was apparently ignoring
its advertised -p and -b flags, but it looks like it was. I brute forced it by
reinplacing the applicable lines in install.py using a post-patch script. Now
it installs without error and appears to run correctly.
Current draft Portfile:
# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil;
c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
PortSystem 1.0
PortGroup github 1.0
PortGroup python 1.0
PortGroup qt5 1.0
github.setup doug-101 ConvertAll 0.8.0 v
github.tarball_from releases
python.versions 34 35 36 37 38 39
python.default_version 38
qt5.min_version 5.4
name convertall
version 0.8.0
license GPL-2+
categories math science
platforms darwin
maintainers {@khorton kilohotel.com:kevin01}
description Extremely flexible unit converter
long_description ConvertAll has a large database of units, and allows
conversions \
that use multiple units, e.g. convert from feet per decade
to \
nautical miles per fortnight.
homepage http://convertall.bellz.org
checksums rmd160 89fcc2aa9bad7ecc1de7bee4edea68fdff39706a \
sha256
624c8a792b0bc7ff3776499c2c743b32273569efd0567615e570a7e739e8d521 \
size 281055
depends_lib-append port:py${python.version}-pyqt5
use_configure no
build.cmd ${python.bin} install.py
build.args -p ${prefix} \
-b ${destroot}
destroot {}
post-patch {
reinplace "s|/usr/local|${prefix}|g" ${worksrcpath}/install.py
reinplace "s|buildRoot = '/'|buildRoot = '${workpath}/destroot'|g"
${worksrcpath}/install.py
}
======================
I assume that I would submit this via Trac to see it possibly someday show up
in MacPorts. I dig into the docs a bit more first to see if there are any
other Portfile fields I should populate, or if I can find any best practices
that I have violated.
Thanks,
Kevin