arcan.arcan: fix static openal issues

Arcan has some interesting idiosyncrasies. One of them is using cmake. The other
is using cmake to vendor some low-level, custom-patched dependencies.

In order to work around them, I have created ... a set of custom patches!
And on top of it, I have factored the vendored sources in a separate file, in
order to clean up the `default.nix` file.
This commit is contained in:
AndersonTorres 2021-10-28 00:43:40 -03:00
parent 134191380c
commit 59af9bd855
6 changed files with 149 additions and 35 deletions

View File

@ -0,0 +1,15 @@
diff -Naur source-old/src/CMakeLists.txt source-new/src/CMakeLists.txt
--- source-old/src/CMakeLists.txt 1969-12-31 21:00:01.000000000 -0300
+++ source-new/src/CMakeLists.txt 2021-10-29 12:03:06.461399341 -0300
@@ -362,10 +360,8 @@
if (EXISTS ${EXTERNAL_SRC_DIR}/git/openal AND STATIC_OPENAL)
amsg("${CL_YEL}Building OpenAL static from external/git mirror${CL_RST}")
ExternalProject_Add(OpenAL
- SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/openal
+ SOURCE_DIR "${EXTERNAL_SRC_DIR}/git/openal"
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/openal_static
- UPDATE_COMMAND ""
- GIT_REPOSITORY "${EXTERNAL_SRC_DIR}/git/openal"
${EXTERNAL_DEFS}
${CMAKE_EXTERNAL_DEFS}
-DALSOFT_BACKEND_DSOUND=OFF

View File

@ -0,0 +1,17 @@
diff -Naur source-old/src/CMakeLists.txt source-new/src/CMakeLists.txt
--- source-old/src/CMakeLists.txt 1969-12-31 21:00:01.000000000 -0300
+++ source-new/src/CMakeLists.txt 2021-10-29 12:03:06.461399341 -0300
@@ -419,12 +415,7 @@
set(LUA_TAG "luajit51")
if (EXISTS ${EXTERNAL_SRC_DIR}/git/luajit)
ExternalProject_Add(luajit
- SOURCE_DIR ${CMAKE_CURRENT_BINARY_DIR}/luajit
- GIT_REPOSITORY "${EXTERNAL_SRC_DIR}/git/luajit"
- CONFIGURE_COMMAND ""
- GIT_TAG "v2.1.0-beta3"
- UPDATE_COMMAND ""
- INSTALL_COMMAND ""
+ SOURCE_DIR "${EXTERNAL_SRC_DIR}/git/luajit"
BUILD_IN_SOURCE 1
BUILD_COMMAND "${EXTMAKE_CMD}"
DEFAULT_CC=${CMAKE_C_COMPILER}

View File

@ -0,0 +1,15 @@
diff -Naur source-old/src/frameserver/decode/default/CMakeLists.txt source-new/src/frameserver/decode/default/CMakeLists.txt
--- source-old/src/frameserver/decode/default/CMakeLists.txt 1969-12-31 21:00:01.000000000 -0300
+++ source-new/src/frameserver/decode/default/CMakeLists.txt 2021-10-29 12:01:31.989933725 -0300
@@ -62,10 +62,8 @@
if (STATIC_LIBUVC)
pkg_check_modules(LIBUSB_1 REQUIRED libusb-1.0)
ExternalProject_Add(libuvc
- SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/frameserver/decode/libuvc"
+ SOURCE_DIR "${EXTERNAL_SRC_DIR}/git/libuvc"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/libuvc_static"
- UPDATE_COMMAND ""
- GIT_REPOSITORY "${EXTERNAL_SRC_DIR}/git/libuvc"
${EXTERNAL_DEFS}
${CMAKE_EXTERNAL_DEFS}
-DBUILD_UVC_STATIC=ON

View File

@ -0,0 +1,14 @@
diff -Naur source-old/src/CMakeLists.txt source-new/src/CMakeLists.txt
--- source-old/src/CMakeLists.txt 1969-12-31 21:00:01.000000000 -0300
+++ source-new/src/CMakeLists.txt 2021-10-29 12:03:06.461399341 -0300
@@ -317,9 +317,7 @@
find_package(BZip2 REQUIRED QUIET)
pkg_check_modules(HARFBUZZ REQUIRED QUIET harfbuzz)
ExternalProject_Add(Freetype
- SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/freetype"
- UPDATE_COMMAND ""
- GIT_REPOSITORY "${EXTERNAL_SRC_DIR}/git/freetype"
+ SOURCE_DIR "${EXTERNAL_SRC_DIR}/git/freetype"
${EXTERNAL_DEFS}
${CMAKE_EXTERNAL_DEFS}
-DWITH_ZLIB=OFF

View File

@ -0,0 +1,25 @@
{ fetchgit, fetchFromGitHub }:
{
letoram-openal-src = fetchFromGitHub {
owner = "letoram";
repo = "openal";
rev = "1c7302c580964fee9ee9e1d89ff56d24f934bdef";
hash = "sha256-InqU59J0zvwJ20a7KU54xTM7d76VoOlFbtj7KbFlnTU=";
};
freetype-src = fetchgit {
url = "git://git.sv.nongnu.org/freetype/freetype2.git";
rev = "94cb3a2eb96b3f17a1a3bd0e6f7da97c0e1d8f57";
sha256 = "sha256-LzjqunX/T8khF2UjPlPYiQOwMGem8MqPYneR2LdZ5Fg=";
};
libuvc-src = fetchgit {
owner = "libuvc";
repo = "libuvc";
rev = "b2b01ae6a2875d05c99eb256bb15815018d6e837";
sha256 = "sha256-2zCTjyodRARkHM/Q0r4bdEH9LO1Z9xPCnY2xE4KZddA=";
};
luajit-src = fetchgit {
url = "https://luajit.org/git/luajit-2.0.git";
rev = "d3294fa63b344173db68dd612c6d3801631e28d4";
sha256 = "sha256-1iHBXcbYhWN4M8g5oH09S1j1WrjYzI6qcRbHsdfpRkk=";
};
}

View File

@ -1,6 +1,7 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchgit
, SDL2
, cmake
, espeak
@ -23,6 +24,7 @@
, libvncserver
, libxcb
, libxkbcommon
, lua
, luajit
, makeWrapper
, mesa
@ -36,22 +38,16 @@
, xcbutil
, xcbutilwm
, xz
, buildManpages ? true, ruby
, buildManPages ? true, ruby
, useBuiltinLua ? true
, useStaticFreetype ? false
, useStaticLibuvc ? false
, useStaticOpenAL ? true
, useStaticSqlite ? false
}:
let
# TODO: investigate vendoring, especially OpenAL
# WARN: vendoring of OpenAL is required for running arcan_lwa
# INFO: maybe it needs leaveDotGit, but it is dangerous/impure
letoram-openal-src = fetchFromGitHub {
owner = "letoram";
repo = "openal";
rev = "1c7302c580964fee9ee9e1d89ff56d24f934bdef";
hash = "sha256-InqU59J0zvwJ20a7KU54xTM7d76VoOlFbtj7KbFlnTU=";
};
in
stdenv.mkDerivation rec {
pname = "arcan";
pname = "arcan" + lib.optionalString useStaticOpenAL "-static-openal";
version = "0.6.1pre1+unstable=2021-10-16";
src = fetchFromGitHub {
@ -61,28 +57,11 @@ stdenv.mkDerivation rec {
hash = "sha256-4FodFuO51ehvyjH4YaF/xBY9dwA6cP/e6/BvEsH4w7U=";
};
postUnpack = ''
pushd .
cd $sourceRoot/external/git/
cp -a ${letoram-openal-src}/ openal/
chmod --recursive 744 openal/
popd
'';
# TODO: work with upstream in order to get rid of these hardcoded paths
postPatch = ''
substituteInPlace ./src/platform/posix/paths.c \
--replace "/usr/bin" "$out/bin" \
--replace "/usr/share" "$out/share"
substituteInPlace ./src/CMakeLists.txt --replace "SETUID" "# SETUID"
'';
nativeBuildInputs = [
cmake
makeWrapper
pkg-config
] ++ lib.optionals buildManpages [
] ++ lib.optionals buildManPages [
ruby
];
@ -108,6 +87,7 @@ stdenv.mkDerivation rec {
libvncserver
libxcb
libxkbcommon
lua
luajit
mesa
openal
@ -121,11 +101,54 @@ stdenv.mkDerivation rec {
xz
];
patches = [
# Nixpkgs-specific: redirect vendoring
./000-openal.patch
./001-luajit.patch
./002-libuvc.patch
./003-freetype.patch
];
# Emulate external/git/clone.sh
postUnpack = let
inherit (import ./clone-sources.nix { inherit fetchFromGitHub fetchgit; })
letoram-openal-src freetype-src libuvc-src luajit-src;
in
''
pushd $sourceRoot/external/git/
''
+ (lib.optionalString useStaticOpenAL ''
cp -a ${letoram-openal-src}/ openal
chmod --recursive 744 openal
'')
+ (lib.optionalString useStaticFreetype ''
cp -a ${freetype-src}/ freetype
chmod --recursive 744 freetype
'')
+ (lib.optionalString useStaticLibuvc ''
cp -a ${libuvc-src}/ libuvc
chmod --recursive 744 libuvc
'')
+ (lib.optionalString useBuiltinLua ''
cp -a ${luajit-src}/ luajit
chmod --recursive 744 luajit
'') +
''
popd
'';
postPatch = ''
substituteInPlace ./src/platform/posix/paths.c \
--replace "/usr/bin" "$out/bin" \
--replace "/usr/share" "$out/share"
substituteInPlace ./src/CMakeLists.txt --replace "SETUID" "# SETUID"
'';
# INFO: According to the source code, the manpages need to be generated before
# the configure phase
preConfigure = lib.optionalString buildManpages ''
pushd .
cd doc
preConfigure = lib.optionalString buildManPages ''
pushd doc
ruby docgen.rb mangen
popd
'';
@ -136,7 +159,12 @@ stdenv.mkDerivation rec {
"-DDISTR_TAG=Nixpkgs"
"-DENGINE_BUILDTAG=${version}"
"-DHYBRID_SDL=on"
"-DSTATIC_OPENAL=off"
"-DBUILTIN_LUA=${if useBuiltinLua then "on" else "off"}"
"-DDISABLE_JIT=${if useBuiltinLua then "on" else "off"}"
"-DSTATIC_FREETYPE=${if useStaticFreetype then "on" else "off"}"
"-DSTATIC_LIBUVC=${if useStaticLibuvc then "on" else "off"}"
"-DSTATIC_OPENAL=${if useStaticOpenAL then "on" else "off"}"
"-DSTATIC_SQLite3=${if useStaticSqlite then "on" else "off"}"
"../src"
];