Package Details: libtas 1.4.7-1

Git Clone URL: https://aur.archlinux.org/libtas.git (read-only, click to copy)
Package Base: libtas
Description: Tool-assisted speedrunning utility for Linux-native binaries
Upstream URL: https://github.com/clementgallet/libTAS
Licenses: GPL-3.0-or-later
Submitter: chungy
Maintainer: Perdu
Last Packager: Perdu
Votes: 5
Popularity: 0.163158
First Submitted: 2018-11-01 09:49 (UTC)
Last Updated: 2025-12-07 20:33 (UTC)

Pinned Comments

Perdu commented on 2025-12-07 20:46 (UTC) (edited on 2026-02-03 22:14 (UTC) by Perdu)

I took over the package as previous packager disowned it. Updating version fixed the build issues.

That said, I've encountered issues to make libTAS work directly on Arch Linux for Ruffle (flash games) (there are desync issues with tons of lag frames). If you encounter lag frames issues, I suggest building libTAS in Docker instead: https://github.com/clementgallet/libTAS/blob/master/Dockerfile and I run it with:

docker run -it --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/root/.Xauthority:rw --net=host libtas

Since I've taken the responsibility of maintaining the package, I'll investigate this in the future. For now, if you have lag frames issues, building in Docker is your best bet. I'll appreciate feedback to identify in which cases it works and in which it doesn't!

Latest Comments

1 2 Next › Last »

Perdu commented on 2025-12-07 20:46 (UTC) (edited on 2026-02-03 22:14 (UTC) by Perdu)

I took over the package as previous packager disowned it. Updating version fixed the build issues.

That said, I've encountered issues to make libTAS work directly on Arch Linux for Ruffle (flash games) (there are desync issues with tons of lag frames). If you encounter lag frames issues, I suggest building libTAS in Docker instead: https://github.com/clementgallet/libTAS/blob/master/Dockerfile and I run it with:

docker run -it --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v $HOME/.Xauthority:/root/.Xauthority:rw --net=host libtas

Since I've taken the responsibility of maintaining the package, I'll investigate this in the future. For now, if you have lag frames issues, building in Docker is your best bet. I'll appreciate feedback to identify in which cases it works and in which it doesn't!

SeoFernando commented on 2025-09-05 11:07 (UTC) (edited on 2025-12-07 20:25 (UTC) by SeoFernando)

Yeah the package fails because AVEncoder isn't infering uint8_t.

This patch resolves the issue by adding the missing include in the file:

From 7d420008db8333a6bfb70968299b607ec480911c Mon Sep 17 00:00:00 2001
From: Fernando <abert036@uottawa.ca>
Date: Fri, 5 Sep 2025 06:59:19 -0400
Subject: [PATCH] Fix build failure by including <cstdint>

---
 PKGBUILD      |  5 +++--
 cstdint.patch | 10 ++++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)
 create mode 100644 cstdint.patch

diff --git a/PKGBUILD b/PKGBUILD
index 2b4ddfa..978a3e7 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -11,8 +11,9 @@ license=('GPL-3.0-or-later')
 depends=('alsa-lib' 'ffmpeg' 'fontconfig' 'freetype2' 'hicolor-icon-theme'
          'lua' 'qt5-base' 'sdl2' 'xcb-util-cursor' 'zlib')
 optdepends=('lib32-libtas: for 32-bit games support')
-source=("${url}/archive/v${pkgver}.tar.gz")
-b2sums=('85f5fecc3d92c85372961208087d68782104e4c71ae06ffe4692dfbf1df0d103b4fc48e0a65388a9492aff66510d594a0a70aa306b464b4f1b4ed55289db8db8')
+source=("${url}/archive/v${pkgver}.tar.gz" 'cstdint.patch')
+b2sums=('85f5fecc3d92c85372961208087d68782104e4c71ae06ffe4692dfbf1df0d103b4fc48e0a65388a9492aff66510d594a0a70aa306b464b4f1b4ed55289db8db8'
+        '04cf5085e5c1d2f07f9d1804cf9c08fde3b86462b3df2fb92a2dc5aff3a86f196eae641825ab4f6538c1f1622d33ef2cb38d57562ca9821b739916d59905642e')

 prepare() {
   cd libTAS-$pkgver
diff --git a/cstdint.patch b/cstdint.patch
new file mode 100644
index 0000000..1870261
--- /dev/null
+++ b/cstdint.patch
@@ -0,0 +1,10 @@
+--- a/src/library/encoding/AVEncoder.h
++++ b/src/library/encoding/AVEncoder.h
+@@ -24,6 +24,7 @@
+ 
+ #include <vector>
+ #include <memory> // std::unique_ptr
++#include <cstdint>
+ 
+ namespace libtas {
+ 
-- 
2.51.0

although I'm not sure if it's the optimal solution, thanks!

Perdu commented on 2025-08-20 08:45 (UTC) (edited on 2025-08-20 08:53 (UTC) by Perdu)

Build is broken (tested in a clean chroot with pkgctl build):

Edit: Note that the libtas-git package manages to build. This may just be a matter of updating the version

[...]
  CXX      encoding/libtas_so-AVEncoder.o                                                                                                                                 
In file included from encoding/AVEncoder.cpp:20:                                     
encoding/AVEncoder.h:69:9: error: ‘uint8_t’ does not name a type                     
   69 |         uint8_t* pixels = nullptr;                                           
      |         ^~~~~~~                                                              
encoding/AVEncoder.h:27:1: note: ‘uint8_t’ is defined in header ‘<cstdint>’; this is probably fixable by adding ‘#include <cstdint>’                                      
   26 | #include <memory> // std::unique_ptr                                                                                                                              
  +++ |+#include <cstdint> 
   27 | 
encoding/AVEncoder.h:72:21: error: ‘uint8_t’ was not declared in this scope
   72 |         std::vector<uint8_t> startup_audio_bytes;
      |                     ^~~~~~~
encoding/AVEncoder.h:72:21: note: ‘uint8_t’ is defined in header ‘<cstdint>’; this is probably fixable by adding ‘#include <cstdint>’
encoding/AVEncoder.h:72:28: error: template argument 1 is invalid
   72 |         std::vector<uint8_t> startup_audio_bytes;
      |                            ^
encoding/AVEncoder.h:72:28: error: template argument 2 is invalid
encoding/AVEncoder.cpp: In member function ‘void libtas::AVEncoder::encodeOneFrame(bool, libtas::TimeHolder)’:
encoding/AVEncoder.cpp:101:59: error: request for member ‘data’ in ‘((libtas::AVEncoder*)this)->libtas::AVEncoder::startup_audio_bytes’, which is of non-class type ‘int’
  101 |             nutMuxer->writeAudioFrame(startup_audio_bytes.data(), startup_audio_bytes.size());
      |                                                           ^~~~
encoding/AVEncoder.cpp:101:87: error: request for member ‘size’ in ‘((libtas::AVEncoder*)this)->libtas::AVEncoder::startup_audio_bytes’, which is of non-class type ‘int’
  101 |             nutMuxer->writeAudioFrame(startup_audio_bytes.data(), startup_audio_bytes.size());
      |                                                                                       ^~~~
encoding/AVEncoder.cpp:107:33: error: request for member ‘resize’ in ‘((libtas::AVEncoder*)this)->libtas::AVEncoder::startup_audio_bytes’, which is of non-class type ‘int’
  107 |             startup_audio_bytes.resize(size, 0); // reusing the audio samples vector
      |                                 ^~~~~~
encoding/AVEncoder.cpp:109:63: error: request for member ‘data’ in ‘((libtas::AVEncoder*)this)->libtas::AVEncoder::startup_audio_bytes’, which is of non-class type ‘int’
  109 |                 nutMuxer->writeVideoFrame(startup_audio_bytes.data(), size);
      |                                                               ^~~~
encoding/AVEncoder.cpp:115:33: error: request for member ‘insert’ in ‘((libtas::AVEncoder*)this)->libtas::AVEncoder::startup_audio_bytes’, which is of non-class type ‘int’
  115 |             startup_audio_bytes.insert(startup_audio_bytes.end(), audiocontext.outSamples.data(), audiocontext.outSamples.data() + audiocontext.outBytes);
      |                                 ^~~~~~
encoding/AVEncoder.cpp:115:60: error: request for member ‘end’ in ‘((libtas::AVEncoder*)this)->libtas::AVEncoder::startup_audio_bytes’, which is of non-class type ‘int’
  115 |             startup_audio_bytes.insert(startup_audio_bytes.end(), audiocontext.outSamples.data(), audiocontext.outSamples.data() + audiocontext.outBytes);
      |                                                            ^~~
encoding/AVEncoder.cpp:139:53: error: ‘pixels’ was not declared in this scope
  139 |     int size = ScreenCapture::getPixelsFromSurface(&pixels, draw);
      |                                                     ^~~~~~
make[2]: *** [Makefile:3714: encoding/libtas_so-AVEncoder.o] Error 1
make[2]: Leaving directory '/build/libtas/src/libTAS-1.4.6/src/library'
make[1]: *** [Makefile:465: all-recursive] Error 1
make[1]: Leaving directory '/build/libtas/src/libTAS-1.4.6'
make: *** [Makefile:364: all] Error 2

creyon commented on 2023-11-18 01:33 (UTC)

Adopted, updated. Build should work now, but let me know if you notice any issues.

creyon commented on 2023-10-30 20:41 (UTC)

Build error caused by missing cstdint should be fixed in 1.4.5.

T41US commented on 2023-08-12 00:15 (UTC)

currently not building in a clean chroot, even with ffmpeg and sdl2 installed

chungy commented on 2021-01-05 00:04 (UTC)

No I didn't; totally forgot about it and namcap didn't warn me about it. I'll add them, thanks.

Lucki commented on 2021-01-05 00:01 (UTC)

This is still missing mentioned required dependencies. You've updated the package but didn't took these into account?

CyberShadow commented on 2020-07-22 03:51 (UTC)

This package is currently unbuildable in a clean chroot. Please fix the missing dependencies as in the comment below.

Lucki commented on 2020-06-23 22:53 (UTC)

This is missing some dependencies (sdl2 and libswresample.so):

checking SDL2/SDL.h usability... no
checking SDL2/SDL.h presence... no
checking for SDL2/SDL.h... no
configure: error: The SDL2 headers are required!
==> ERROR: A failure occurred in build().
    Aborting...
checking for LIBSWRESAMPLE... no
configure: WARNING: Cannot find libswresample using pkg-config
checking libswresample/swresample.h usability... no
checking libswresample/swresample.h presence... no
checking for libswresample/swresample.h... no
configure: error: The swresample header is required!
==> ERROR: A failure occurred in build().
    Aborting...