In MSYS2, there is already a package for tio, version 1.32; this package is built through a PKGBUILD file, which can be seen here:
I wanted to build the latest version of tio, which is currently 1.37, for MSYS2 (I use it on Windows 10). One of the main differences is that whereas tio 1.32 used configure.ac and a Makefile for building, tio 1.37 uses the meson build system.
So, I tried to convert the existing PKGBUILD for tio 1.32, into PKGBUILD that would use meson for 1.37; I've put related files in this gist:
First off, I have a C:\src directory, and there I create a new directory for building, using the MSYS2 bash shell, where I retrieve the edited file (from the gist) - and finally, I issue the makepkg command (found in https://www.msys2.org/wiki/Creating-Packages/)
$ mkdir tio_msys2
$ cd tio_msys2
$ wget https://gist.githubusercontent.com/sdbbs/77ce5e0bfa59cdabda5fad5596ab9ccd/raw/462234c53bb1cfcdbe0d6323afbef4845231cab2/01_PKGBUILD -O PKGBUILD
$ makepkg -sCLf
In short, the PKGBUILD file looks like this:
pkgname=tio
pkgver=1.37
pkgrel=1
pkgdesc="A simple TTY terminal I/O application"
arch=('i686' 'x86_64')
url="https://tio.github.io/"
license=('GPL')
makedepends=('autotools' 'gcc' 'meson' 'ninja')
source=(https://github.com/tio/tio/releases/download/v${pkgver}/tio-${pkgver}.tar.xz)
sha256sums=('a54cd09baeaabd306fdea486b8161eea6ea75bb970b27cae0e8e407fb2dd7181')
validpgpkeys=('101BAC1C15B216DBE07A3EEA2BDB4A0944FA00B1') # Martin Lund
prepare() {
cd "${srcdir}/${pkgname}-${pkgver}"
}
build() {
cd "${srcdir}/${pkgname}-${pkgver}"
meson --prefix=/usr --buildtype=plain build
meson compile -C build
}
package() {
echo "srcdir ${srcdir} pkgname ${pkgname} pkgver ${pkgver} destdir ${destdir}"
cd "${srcdir}/${pkgname}-${pkgver}"
meson install -C build --destdir "$pkgdir"
}
The build succeeds - you can see the full build log in 02_makepkg.log, but the relevant thing is that tio.exe does get generated:
$ find . -name '*.exe'
./pkg/tio/usr/bin/tio.exe
./src/tio-1.37/build/meson-private/sanitycheckc.exe
./src/tio-1.37/build/meson-private/sanitycheckcpp.exe
./src/tio-1.37/build/meson-private/__CMake_compiler_info__/CMakeFiles/3.22.1/CompilerIdC/a.exe
./src/tio-1.37/build/src/tio.exe
Also, a pkg directory gets generated (that is, /c/src/tio_msys2/pkg), probably in the package() step (probably as a result of the meson install ... command) -- which does look like a "packaged" tree, as we expect to see it in an installation package:
$ tree -a pkg
pkg
└── tio
├── .BUILDINFO
├── .MTREE
├── .PKGINFO
└── usr
├── bin
│ └── tio.exe
└── share
├── bash-completion
│ └── completions
│ └── tio
└── man
└── man1
└── tio.1.gz
8 directories, 6 files
(you can also see the full tree listing of /c/src/tio_msys2/ in 03_files_after_makepkg.log)
HOWEVER, when I inspect the final package file (the one that actually gets installed by the package manager/pacman), which (I think) is tio-1.37.tar.xz - I see no .exe whatsoever?
$ tar tJvf tio-1.37.tar.xz
drwxrwxr-x lundmar/lundmar 0 2022-04-13 18:01 tio-1.37/
drwxrwxr-x lundmar/lundmar 0 2022-04-13 18:00 tio-1.37/.circleci/
-rw-rw-r-- lundmar/lundmar 1112 2022-04-13 18:00 tio-1.37/.circleci/config.yml
-rw-rw-r-- lundmar/lundmar 34 2022-04-13 18:00 tio-1.37/.gitignore
-rw-rw-r-- lundmar/lundmar 1150 2022-04-13 18:00 tio-1.37/AUTHORS
-rw-rw-r-- lundmar/lundmar 21770 2022-04-13 18:00 tio-1.37/ChangeLog
-rw-rw-r-- lundmar/lundmar 709 2022-04-13 18:00 tio-1.37/LICENSE
-rw-rw-r-- lundmar/lundmar 3988 2022-04-13 18:00 tio-1.37/README.md
drwxrwxr-x lundmar/lundmar 0 2022-04-13 18:00 tio-1.37/images/
-rw-rw-r-- lundmar/lundmar 12344 2022-04-13 18:00 tio-1.37/images/paypal.png
-rw-rw-r-- lundmar/lundmar 1846157 2022-04-13 18:00 tio-1.37/images/tio-demo.gif
drwxrwxr-x lundmar/lundmar 0 2022-04-13 18:00 tio-1.37/man/
-rw-rw-r-- lundmar/lundmar 375 2022-04-13 18:00 tio-1.37/man/meson.build
-rw-rw-r-- lundmar/lundmar 6022 2022-04-13 18:00 tio-1.37/man/tio.1.in
-rw-rw-r-- lundmar/lundmar 1578 2022-04-13 18:00 tio-1.37/meson.build
-rw-rw-r-- lundmar/lundmar 130 2022-04-13 18:00 tio-1.37/meson_options.txt
drwxrwxr-x lundmar/lundmar 0 2022-04-13 18:00 tio-1.37/src/
drwxrwxr-x lundmar/lundmar 0 2022-04-13 18:00 tio-1.37/src/bash-completion/
-rw-rw-r-- lundmar/lundmar 647 2022-04-13 18:00 tio-1.37/src/bash-completion/meson.build
-rw-rw-r-- lundmar/lundmar 3017 2022-04-13 18:00 tio-1.37/src/bash-completion/tio.in
-rw-rw-r-- lundmar/lundmar 6650 2022-04-13 18:00 tio-1.37/src/configfile.c
-rw-rw-r-- lundmar/lundmar 1130 2022-04-13 18:00 tio-1.37/src/configfile.h
-rw-rw-r-- lundmar/lundmar 1251 2022-04-13 18:00 tio-1.37/src/error.c
-rw-rw-r-- lundmar/lundmar 929 2022-04-13 18:00 tio-1.37/src/error.h
-rw-rw-r-- lundmar/lundmar 962 2022-04-13 18:00 tio-1.37/src/iossiospeed.c
-rw-rw-r-- lundmar/lundmar 2394 2022-04-13 18:00 tio-1.37/src/log.c
-rw-rw-r-- lundmar/lundmar 936 2022-04-13 18:00 tio-1.37/src/log.h
-rw-rw-r-- lundmar/lundmar 2313 2022-04-13 18:00 tio-1.37/src/main.c
-rw-rw-r-- lundmar/lundmar 880 2022-04-13 18:00 tio-1.37/src/meson.build
-rw-rw-r-- lundmar/lundmar 2955 2022-04-13 18:00 tio-1.37/src/misc.c
-rw-rw-r-- lundmar/lundmar 967 2022-04-13 18:00 tio-1.37/src/misc.h
-rw-rw-r-- lundmar/lundmar 9897 2022-04-13 18:00 tio-1.37/src/options.c
-rw-rw-r-- lundmar/lundmar 1611 2022-04-13 18:00 tio-1.37/src/options.h
-rw-rw-r-- lundmar/lundmar 1434 2022-04-13 18:00 tio-1.37/src/print.c
-rw-rw-r-- lundmar/lundmar 2113 2022-04-13 18:00 tio-1.37/src/print.h
-rw-rw-r-- lundmar/lundmar 1295 2022-04-13 18:00 tio-1.37/src/setspeed2.c
-rw-rw-r-- lundmar/lundmar 1174 2022-04-13 18:00 tio-1.37/src/signals.c
-rw-rw-r-- lundmar/lundmar 859 2022-04-13 18:00 tio-1.37/src/signals.h
-rw-rw-r-- lundmar/lundmar 24490 2022-04-13 18:00 tio-1.37/src/tty.c
-rw-rw-r-- lundmar/lundmar 1397 2022-04-13 18:00 tio-1.37/src/tty.h
drwxrwxr-x lundmar/lundmar 0 2022-04-13 18:00 tio-1.37/subprojects/
-rw-rw-r-- lundmar/lundmar 82 2022-04-13 18:00 tio-1.37/subprojects/libinih.wrap
In fact, it looks like, only the src, man, images and subprojects subdirectories of the src/tio-1.37 (that is, /c/src/tio_msys2/src/tio-1.37) directory are included (but not the build subdirectory) ?! For reference, this is what this directory lists:
$ ls -1 /c/src/tio_msys2/src/tio-1.37
build/
images/
man/
src/
subprojects/
AUTHORS
ChangeLog
LICENSE
meson.build
meson_options.txt
README.md
So, for some reason, makepkg running on this PKGBUILD file, includes the sources only, but not the packaged output files (that is, the executables)?!
So my question is: where am I going wrong, and how can I have the actual compiled binary executable file (or rather, the package prepared files in the pkg subdirectory) included in the final package file?
(Sidenote: I have also found this PKGBUILD https://github.com/msys2/MSYS2-packages/blob/5391c11/pkgconf/PKGBUILD from MSYS2, which also uses meson, but manually copies the executables after the meson install step; so maybe I'm supposed to manually copy the executables here as well??)
OK, it seems, that I had misunderstood what is the actual package file produced by
makepkg, which eventually gets installed bypacman.So far, I was quite persuaded, that it is the
tio-1.37.tar.xzfile - which, as seen in the OP, does not have the "built"/"executable" files.However, after re-reading the docs, I noticed https://wiki.archlinux.org/title/makepkg :
So, the final built package file is actually
tio-1.37-1-x86_64.pkg.tar.zst! And if I try to inspect its contents:... indeed, it appears that all of the "executable" files are there!
So, first let's check the previously installed version of package
tiobypacman:... and a quick check of the newly built .zst file, too:
... and finally, we can try to install - or rather, upgrade, since the old version is already installed - the newly built package with
pacman:Well, that's great - everything had, in fact, built fine - and it installs fine as well.