From fb1cbf546300d9f8efdf21c6ac66f7c2f1dfd4f3 Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Sat, 27 Jan 2024 20:32:54 -0500 Subject: Improve build and add dependencies Signed-off-by: Andrew Opalach --- .gitignore | 8 +++-- env/wsl/bootstrap-configuration.nix | 2 +- env/wsl/flake.nix | 13 ++++++- env/wsl/noto_cjk_no_variable.diff | 40 ++++++++++++++++++++++ env/wsl/wsl-dev-host.nix | 1 + flake.lock | 6 ++-- flake.nix | 14 ++++++-- src/bimu/handlers/cdio.h | 17 +++++++++ src/bimu/handlers/cdio_server.c | 21 ++++++++++++ src/bimu/handlers/dvd.h | 14 ++++++++ src/bimu/handlers/dvd_server.c | 21 ++++++++++++ src/bimu/meson.build | 22 ++++++++++-- src/codec/meson.build | 9 +++-- src/fruits/sink/meson.build | 2 +- src/tree/meson.build | 2 +- subprojects/libcdio-paranoia.wrap | 8 +++++ subprojects/libdvdcss.wrap | 8 +++++ subprojects/libdvdnav.wrap | 8 +++++ subprojects/libdvdread.wrap | 8 +++++ subprojects/packagefiles/ffmpeg/meson.build | 8 ++--- .../packagefiles/libcdio-paranoia/meson.build | 20 +++++++++++ subprojects/packagefiles/libdvdcss/meson.build | 16 +++++++++ subprojects/packagefiles/libdvdnav/meson.build | 16 +++++++++ subprojects/packagefiles/libdvdread/meson.build | 16 +++++++++ 24 files changed, 277 insertions(+), 23 deletions(-) create mode 100644 env/wsl/noto_cjk_no_variable.diff create mode 100644 src/bimu/handlers/cdio.h create mode 100644 src/bimu/handlers/cdio_server.c create mode 100644 src/bimu/handlers/dvd.h create mode 100644 src/bimu/handlers/dvd_server.c create mode 100644 subprojects/libcdio-paranoia.wrap create mode 100644 subprojects/libdvdcss.wrap create mode 100644 subprojects/libdvdnav.wrap create mode 100644 subprojects/libdvdread.wrap create mode 100644 subprojects/packagefiles/libcdio-paranoia/meson.build create mode 100644 subprojects/packagefiles/libdvdcss/meson.build create mode 100644 subprojects/packagefiles/libdvdnav/meson.build create mode 100644 subprojects/packagefiles/libdvdread/meson.build diff --git a/.gitignore b/.gitignore index e4bbbf0..8f48aae 100644 --- a/.gitignore +++ b/.gitignore @@ -10,8 +10,6 @@ old/ old_old/ subprojects/c89atomic/ subprojects/c89atomic.wrap -subprojects/libcurl/ -subprojects/libcurl.wrap subprojects/ffmpeg-*/ subprojects/glfw3/ subprojects/glfw3.wrap @@ -20,6 +18,12 @@ subprojects/jansson.wrap subprojects/libakiyo subprojects/libalabaster subprojects/libass/ +subprojects/libcdio-paranoia/ +subprojects/libcurl/ +subprojects/libcurl.wrap +subprojects/libdvdcss/ +subprojects/libdvdnav/ +subprojects/libdvdread/ subprojects/libev-4.33/ subprojects/libev.wrap subprojects/liblfds.wrap diff --git a/env/wsl/bootstrap-configuration.nix b/env/wsl/bootstrap-configuration.nix index 6439ba5..86464c8 100755 --- a/env/wsl/bootstrap-configuration.nix +++ b/env/wsl/bootstrap-configuration.nix @@ -3,7 +3,7 @@ imports = [ ]; wsl.enable = true; - wsl.defaultUser = "nixos"; + wsl.defaultUser = "john"; nix.settings.experimental-features = [ "nix-command" "flakes" ]; diff --git a/env/wsl/flake.nix b/env/wsl/flake.nix index ca45951..577b607 100755 --- a/env/wsl/flake.nix +++ b/env/wsl/flake.nix @@ -9,8 +9,19 @@ }; outputs = { self, nixpkgs, home-manager, nixos-wsl }: { - nixosConfigurations.wsl-dev = nixpkgs.lib.nixosSystem { + nixosConfigurations.wsl-dev = let system = "x86_64-linux"; + source-pkgs = nixpkgs.legacyPackages.${system}; + nixpkgs-patched = source-pkgs.applyPatches { + name = "nixpkgs-patched"; + src = nixpkgs; + patches = [ + ./noto_cjk_no_variable.diff + ]; + }; + nixosSystem = import (nixpkgs-patched + "/nixos/lib/eval-config.nix"); + in nixosSystem { + system = system; modules = [ ({ pkgs, ... }: { nixpkgs.overlays = [ ]; }) home-manager.nixosModules.home-manager { diff --git a/env/wsl/noto_cjk_no_variable.diff b/env/wsl/noto_cjk_no_variable.diff new file mode 100644 index 0000000..152c140 --- /dev/null +++ b/env/wsl/noto_cjk_no_variable.diff @@ -0,0 +1,40 @@ +diff --git a/pkgs/by-name/no/noto-fonts-cjk-sans/package.nix b/pkgs/by-name/no/noto-fonts-cjk-sans/package.nix +index 5c7ab768..79981e27 100644 +--- a/pkgs/by-name/no/noto-fonts-cjk-sans/package.nix ++++ b/pkgs/by-name/no/noto-fonts-cjk-sans/package.nix +@@ -13,12 +13,12 @@ stdenvNoCC.mkDerivation rec { + owner = "notofonts"; + repo = "noto-cjk"; + rev = "Sans${version}"; +- hash = "sha256-IgalJkiOAVjNxKaPAQWfb5hKeqclliR4qVXCq63FGWY="; +- sparseCheckout = [ "Sans/Variable/OTC" ]; ++ hash = "sha256-GXULnRPsIJRdiL3LdFtHbqTqSvegY2zodBxFm4P55to="; ++ sparseCheckout = [ "Sans/OTC" ]; + }; + + installPhase = '' +- install -m444 -Dt $out/share/fonts/opentype/noto-cjk Sans/Variable/OTC/*.otf.ttc ++ install -m444 -Dt $out/share/fonts/opentype/noto-cjk Sans/OTC/*.ttc + ''; + + passthru.tests.noto-fonts = nixosTests.noto-fonts; +diff --git a/pkgs/by-name/no/noto-fonts-cjk-serif/package.nix b/pkgs/by-name/no/noto-fonts-cjk-serif/package.nix +index d9fddcc6..55cde591 100644 +--- a/pkgs/by-name/no/noto-fonts-cjk-serif/package.nix ++++ b/pkgs/by-name/no/noto-fonts-cjk-serif/package.nix +@@ -13,12 +13,12 @@ stdenvNoCC.mkDerivation rec { + owner = "notofonts"; + repo = "noto-cjk"; + rev = "Serif${version}"; +- hash = "sha256-GLjpTAiHfygj1J4AdUVDJh8kykkFOglq+h4kyat5W9s="; +- sparseCheckout = [ "Serif/Variable/OTC" ]; ++ hash = "sha256-ihbhbv875XEHupFUzIdEweukqEmwQXCXCiTG7qisE64="; ++ sparseCheckout = [ "Serif/OTC" ]; + }; + + installPhase = '' +- install -m444 -Dt $out/share/fonts/opentype/noto-cjk Serif/Variable/OTC/*.otf.ttc ++ install -m444 -Dt $out/share/fonts/opentype/noto-cjk Serif/OTC/*.ttc + ''; + + passthru.tests.noto-fonts = nixosTests.noto-fonts; diff --git a/env/wsl/wsl-dev-host.nix b/env/wsl/wsl-dev-host.nix index 6b6baea..ef7fbef 100755 --- a/env/wsl/wsl-dev-host.nix +++ b/env/wsl/wsl-dev-host.nix @@ -58,6 +58,7 @@ in { vistafonts noto-fonts noto-fonts-extra + noto-fonts-cjk noto-fonts-cjk-sans noto-fonts-cjk-serif noto-fonts-emoji-blob-bin diff --git a/flake.lock b/flake.lock index a0c3c97..c7d657f 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1705677747, - "narHash": "sha256-eyM3okYtMgYDgmYukoUzrmuoY4xl4FUujnsv/P6I/zI=", + "lastModified": 1706191920, + "narHash": "sha256-eLihrZAPZX0R6RyM5fYAWeKVNuQPYjAkCUBr+JNvtdE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bbe7d8f876fbbe7c959c90ba2ae2852220573261", + "rev": "ae5c332cbb5827f6b1f02572496b141021de335f", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 2be66b7..260f2f2 100644 --- a/flake.nix +++ b/flake.nix @@ -22,6 +22,10 @@ gcc13 nasm pkg-config + autoconf + automake + autogen + libtool ninja meson cmake @@ -30,14 +34,18 @@ wayland-scanner ]; buildInputs = [ - curl + (curl.override { websocketSupport = true; }) jansson ffmpeg_6-headless libcdio + libcdio-paranoia + libdvdcss + libdvdread + libdvdnav alsa-lib pipewire libpulseaudio - #libplacebo + libplacebo xxHash lcms shaderc @@ -75,6 +83,7 @@ python3.pkgs.cython_3 python3.pkgs.setuptools nodePackages.pyright + perl asciidoctor ]; buildInputs = packages.default.buildInputs ++ []; @@ -109,6 +118,7 @@ nativeBuildInputs = [ git buildPackages.gcc + gdb nasm pkg-config meson diff --git a/src/bimu/handlers/cdio.h b/src/bimu/handlers/cdio.h new file mode 100644 index 0000000..0f614af --- /dev/null +++ b/src/bimu/handlers/cdio.h @@ -0,0 +1,17 @@ +#pragma once + +#include +#include + +#include "../handler.h" + +struct bmu_cdio_server { + struct bmu_server_handler handler; +}; + +struct bmu_cdio_client { + struct bmu_client_handler handler; +}; + +struct bmu_server_handler *bmu_cdio_server_create(void); +struct bmu_client_handler *bmu_cdio_client_create(void); diff --git a/src/bimu/handlers/cdio_server.c b/src/bimu/handlers/cdio_server.c new file mode 100644 index 0000000..151b94f --- /dev/null +++ b/src/bimu/handlers/cdio_server.c @@ -0,0 +1,21 @@ +#include "cdio.h" + +static bool cdio_server_init(struct bmu_server_handler *handler, struct cch_handle *handle, + struct aki_packet_pool *pool) +{ + struct bmu_cdio_server *cdio = (struct bmu_cdio_server *)handler; + return true; +} + +struct bmu_server_handler *bmu_cdio_server_create(void) +{ + struct bmu_cdio_server *cdio = al_alloc_object(struct bmu_cdio_server); + cdio->handler.init = cdio_server_init; +// cdio->handler.write_info = cdio_server_write_info; +// cdio->handler.subscribe = cdio_server_subscribe; +// cdio->handler.get_duration = cdio_server_get_duration; +// cdio->handler.seek = cdio_server_seek; +// cdio->handler.step = cdio_server_step; +// cdio->handler.free = cdio_server_free; + return (struct bmu_server_handler *)cdio; +} diff --git a/src/bimu/handlers/dvd.h b/src/bimu/handlers/dvd.h new file mode 100644 index 0000000..db9bfe9 --- /dev/null +++ b/src/bimu/handlers/dvd.h @@ -0,0 +1,14 @@ +#pragma once + +#include "../handler.h" + +struct bmu_dvd_server { + struct bmu_server_handler handler; +}; + +struct bmu_dvd_client { + struct bmu_client_handler handler; +}; + +struct bmu_server_handler *bmu_dvd_server_create(void); +struct bmu_client_handler *bmu_dvd_client_create(void); diff --git a/src/bimu/handlers/dvd_server.c b/src/bimu/handlers/dvd_server.c new file mode 100644 index 0000000..ea3a9d9 --- /dev/null +++ b/src/bimu/handlers/dvd_server.c @@ -0,0 +1,21 @@ +#include "dvd.h" + +static bool dvd_server_init(struct bmu_server_handler *handler, struct cch_handle *handle, + struct aki_packet_pool *pool) +{ + struct bmu_dvd_server *dvd = (struct bmu_dvd_server *)handler; + return true; +} + +struct bmu_server_handler *bmu_dvd_server_create(void) +{ + struct bmu_dvd_server *dvd = al_alloc_object(struct bmu_dvd_server); + dvd->handler.init = dvd_server_init; +// dvd->handler.write_info = dvd_server_write_info; +// dvd->handler.subscribe = dvd_server_subscribe; +// dvd->handler.get_duration = dvd_server_get_duration; +// dvd->handler.seek = dvd_server_seek; +// dvd->handler.step = dvd_server_step; +// dvd->handler.free = dvd_server_free; + return (struct bmu_server_handler *)dvd; +} diff --git a/src/bimu/meson.build b/src/bimu/meson.build index c7de266..cc1ff43 100644 --- a/src/bimu/meson.build +++ b/src/bimu/meson.build @@ -2,12 +2,28 @@ bimu_server_src = [ 'server.c', 'handlers/codec_server.c' ] - bimu_client_src = [ 'client.c', 'vcr.c', 'handlers/codec_client.c' ] +bimu_server_deps = [av_server] +bimu_client_deps = [av_client] + +#libcdio_paranoia = dependency('libcdio_paranoia', required: false, allow_fallback: true) +#libcdio_cdda = dependency('libcdio_cdda', required: false, allow_fallback: true) +#if libcdio_paranoia.found() and libcdio_cdda.found() +# bimu_server_src += ['handlers/cdio_server.c'] +# bimu_server_deps += [libcdio_paranoia, libcdio_cdda] +#endif +# +#libdvdcss = dependency('libdvdcss', required: false, allow_fallback: true) +#libdvdread = dependency('libdvdread', required: false, allow_fallback: true) +#libdvdnav = dependency('libdvdnav', required: false, allow_fallback: true) +#if libdvdcss.found() and libdvdread.found() and libdvdnav.found() +# bimu_server_src += ['handlers/dvd_server.c'] +# bimu_server_deps += [libdvdcss] +#endif -bimu_server = declare_dependency(sources: bimu_server_src) -bimu_client = declare_dependency(sources: bimu_client_src) +bimu_server = declare_dependency(sources: bimu_server_src, dependencies: bimu_server_deps) +bimu_client = declare_dependency(sources: bimu_client_src, dependencies: bimu_client_deps) diff --git a/src/codec/meson.build b/src/codec/meson.build index 20524a4..4ca9c53 100644 --- a/src/codec/meson.build +++ b/src/codec/meson.build @@ -13,8 +13,8 @@ av_client_src = [ 'libav/decoder.c', 'libav/resampler.c' ] -av_ldflags = [] av_inc = [] +av_args = [] av_server_deps = [] av_client_deps = [] av_client_use_scaler = false @@ -36,7 +36,6 @@ if not (libavutil.found() and libavformat.found() and libavcodec.found() and lib libavcodec = av_proj.get_variable('avcodec') libswresample = av_proj.get_variable('swresample') libswscale = av_proj.get_variable('swscale') - av_ldflags += ['-L' + av_proj.get_variable('av_lib_dir')] # Only used to set include dirs for libav. av_inc_dep = av_proj.get_variable('av_inc_dep') av_server_deps += [av_inc_dep] @@ -50,16 +49,16 @@ if not (libavutil.found() and libavformat.found() and libavcodec.found() and lib endif if libavutil.found() and libavformat.found() and libavcodec.found() and libswresample.found() and libswscale.found() + av_args += ['-DHAVE_FFMPEG'] av_server_deps += [libavutil, libavformat, libavcodec] av_client_deps += [libavutil, libavformat, libavcodec, libswresample] if av_client_use_scaler av_client_deps += [libswscale] endif av_server = declare_dependency(sources: av_server_src, dependencies: av_server_deps, - include_directories: av_inc, link_args: av_ldflags) + include_directories: av_inc, compile_args: av_args) av_client = declare_dependency(sources: av_client_src, dependencies: av_client_deps, - include_directories: av_inc, link_args: av_ldflags) - add_project_arguments('-DHAVE_FFMPEG', language: ['c', 'cpp']) + include_directories: av_inc, compile_args: av_args) endif stb_image = declare_dependency(sources: ['stb_image/impl.c'], diff --git a/src/fruits/sink/meson.build b/src/fruits/sink/meson.build index e4f00e6..3986d7d 100644 --- a/src/fruits/sink/meson.build +++ b/src/fruits/sink/meson.build @@ -1,5 +1,5 @@ sink_src = ['sink.c'] -sink_deps = [common_deps, av_client, buffer, render, screen, mixer, libsink] +sink_deps = [common_deps, buffer, render, screen, mixer, libsink] sink_args = [] use_tui = false diff --git a/src/tree/meson.build b/src/tree/meson.build index bb049cb..3aba0a6 100644 --- a/src/tree/meson.build +++ b/src/tree/meson.build @@ -3,5 +3,5 @@ tree_src = [ 'resource_manager.c', 'list.c' ] -tree_deps = [common_deps, shoki, cache, av_server, bimu_server] +tree_deps = [common_deps, shoki, cache, bimu_server] executable('tree', sources: tree_src, dependencies: tree_deps) diff --git a/subprojects/libcdio-paranoia.wrap b/subprojects/libcdio-paranoia.wrap new file mode 100644 index 0000000..3ff07e8 --- /dev/null +++ b/subprojects/libcdio-paranoia.wrap @@ -0,0 +1,8 @@ +[wrap-git] +url = https://github.com/rocky/libcdio-paranoia.git +revision = 36534131998286bb41072e5b666f174d69d9281b +depth = 1 +patch_directory = libcdio-paranoia + +[provide] +dependency_names = libcdio_paranoia, libcdio_cdda diff --git a/subprojects/libdvdcss.wrap b/subprojects/libdvdcss.wrap new file mode 100644 index 0000000..acbc6f2 --- /dev/null +++ b/subprojects/libdvdcss.wrap @@ -0,0 +1,8 @@ +[wrap-git] +url = https://code.videolan.org/videolan/libdvdcss.git +revision = d0b6a291c24eda3727ad5c7a14956fc1fc82446d +depth = 1 +patch_directory = libdvdcss + +[provide] +dependency_names = libdvdcss diff --git a/subprojects/libdvdnav.wrap b/subprojects/libdvdnav.wrap new file mode 100644 index 0000000..6bc37a3 --- /dev/null +++ b/subprojects/libdvdnav.wrap @@ -0,0 +1,8 @@ +[wrap-git] +url = https://code.videolan.org/videolan/libdvdnav.git +revision = 9831fe01488bd0e9d1e3521195da6940cd8415eb +depth = 1 +patch_directory = libdvdnav + +[provide] +dependency_names = libdvdnav diff --git a/subprojects/libdvdread.wrap b/subprojects/libdvdread.wrap new file mode 100644 index 0000000..932fd51 --- /dev/null +++ b/subprojects/libdvdread.wrap @@ -0,0 +1,8 @@ +[wrap-git] +url = https://code.videolan.org/videolan/libdvdread.git +revision = ba2227bb8619724c2bfadcc4d8f25d741a3398ac +depth = 1 +patch_directory = libdvdread + +[provide] +dependency_names = libdvdread diff --git a/subprojects/packagefiles/ffmpeg/meson.build b/subprojects/packagefiles/ffmpeg/meson.build index cff10e9..6700f5d 100644 --- a/subprojects/packagefiles/ffmpeg/meson.build +++ b/subprojects/packagefiles/ffmpeg/meson.build @@ -55,14 +55,16 @@ ext_proj = import('unstable-external_project') proj = ext_proj.add_project('configure', configure_options: [ '--prefix=@PREFIX@', - '--libdir=@PREFIX@@LIBDIR@', - '--incdir=@PREFIX@@INCLUDEDIR@', + '--libdir=@PREFIX@/@LIBDIR@', + '--incdir=@PREFIX@/@INCLUDEDIR@', '--enable-pic', '--enable-static', '--disable-shared', '--disable-all', '--disable-autodetect', '--disable-everything', + '--disable-programs', + '--disable-doc', '--disable-htmlpages', '--disable-manpages', '--disable-podpages', @@ -105,6 +107,4 @@ avformat = proj.dependency('avformat') avcodec = proj.dependency('avcodec') swresample = proj.dependency('swresample') swscale = proj.dependency('swscale') - av_inc_dep = declare_dependency(include_directories: include_directories('.', 'build/')) -av_lib_dir = join_paths(meson.project_build_root(), 'dist/usr/locallib') diff --git a/subprojects/packagefiles/libcdio-paranoia/meson.build b/subprojects/packagefiles/libcdio-paranoia/meson.build new file mode 100644 index 0000000..45b2c12 --- /dev/null +++ b/subprojects/packagefiles/libcdio-paranoia/meson.build @@ -0,0 +1,20 @@ +project('libcdio-paranoia', 'c', version: 'git-3653413', meson_version: '>=0.57.0') + +ext_proj = import('unstable-external_project') + +run_command('autoreconf', '-fi', check: true) + +proj = ext_proj.add_project('configure', + configure_options: [ + '--prefix=@PREFIX@', + '--libdir=@PREFIX@/@LIBDIR@', + '--includedir=@PREFIX@/@INCLUDEDIR@', + '--config-cache', + '--disable-cxx', + '--disable-example-progs' + ], + cross_configure_options: [], + verbose: true) + +meson.override_dependency('libcdio_paranoia', proj.dependency('cdio_paranoia')) +meson.override_dependency('libcdio_cdda', proj.dependency('cdio_cdda')) diff --git a/subprojects/packagefiles/libdvdcss/meson.build b/subprojects/packagefiles/libdvdcss/meson.build new file mode 100644 index 0000000..caa0deb --- /dev/null +++ b/subprojects/packagefiles/libdvdcss/meson.build @@ -0,0 +1,16 @@ +project('libdvdcss', 'c', version: 'git-d0b6a29', meson_version: '>=0.57.0') + +ext_proj = import('unstable-external_project') + +run_command('autoreconf', '-fi', check: true) + +proj = ext_proj.add_project('configure', + configure_options: [ + '--prefix=@PREFIX@', + '--libdir=@PREFIX@/@LIBDIR@', + '--includedir=@PREFIX@/@INCLUDEDIR@' + ], + cross_configure_options: [], + verbose: true) + +meson.override_dependency('libdvdcss', proj.dependency('dvdcss')) diff --git a/subprojects/packagefiles/libdvdnav/meson.build b/subprojects/packagefiles/libdvdnav/meson.build new file mode 100644 index 0000000..3d220da --- /dev/null +++ b/subprojects/packagefiles/libdvdnav/meson.build @@ -0,0 +1,16 @@ +project('libdvdnav', 'c', version: 'git-9831fe0', meson_version: '>=0.57.0') + +ext_proj = import('unstable-external_project') + +run_command('autoreconf', '-fi', check: true) + +proj = ext_proj.add_project('configure', + configure_options: [ + '--prefix=@PREFIX@', + '--libdir=@PREFIX@/@LIBDIR@', + '--includedir=@PREFIX@/@INCLUDEDIR@' + ], + cross_configure_options: [], + verbose: true) + +meson.override_dependency('libdvdnav', proj.dependency('dvdnav')) diff --git a/subprojects/packagefiles/libdvdread/meson.build b/subprojects/packagefiles/libdvdread/meson.build new file mode 100644 index 0000000..8511017 --- /dev/null +++ b/subprojects/packagefiles/libdvdread/meson.build @@ -0,0 +1,16 @@ +project('libdvdread', 'c', version: 'git-ba2227b', meson_version: '>=0.57.0') + +ext_proj = import('unstable-external_project') + +run_command('autoreconf', '-fi', check: true) + +proj = ext_proj.add_project('configure', + configure_options: [ + '--prefix=@PREFIX@', + '--libdir=@PREFIX@/@LIBDIR@', + '--includedir=@PREFIX@/@INCLUDEDIR@' + ], + cross_configure_options: [], + verbose: true) + +meson.override_dependency('libdvdread', proj.dependency('dvdread')) -- cgit v1.2.3-101-g0448