Add nix flake support

run the app with

``` fish
nix run
```

The resulting app supports VP8, AV1, and H264
This commit is contained in:
Thibault Lemaire 2022-09-07 09:43:13 +02:00
parent e34beffe06
commit 5efb9d099e
9 changed files with 452 additions and 27 deletions

View file

@ -220,13 +220,13 @@ if(NOT APPLE OR MONO_ARCH)
endfunction()
add_linphone_keychain()
endif()
if(NOT APPLE AND NOT WIN32)
function(add_linphone_ispell)
add_subdirectory("external/ispell")
endfunction()
add_linphone_ispell()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
endif()
endif()
if(NOT APPLE AND NOT WIN32)
function(add_linphone_ispell)
add_subdirectory("external/ispell")
endfunction()
add_linphone_ispell()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
endif()
function(add_linphone_app)
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW) # Prevent project from overriding the options we just set here

299
flake.lock generated Normal file
View file

@ -0,0 +1,299 @@
{
"nodes": {
"bctoolbox-src": {
"flake": false,
"locked": {
"lastModified": 1711528184,
"narHash": "sha256-L96Ag8YhsBeiR6XzYDRpvH4sk1n7QcXhfw+jon/rzh4=",
"ref": "6e5b2547ada63afcc6e0b6efc91f780de076605a",
"rev": "6e5b2547ada63afcc6e0b6efc91f780de076605a",
"revCount": 857,
"type": "git",
"url": "file:./linphone-sdk/bctoolbox"
},
"original": {
"type": "git",
"url": "file:./bctoolbox"
}
},
"bcunit-src": {
"flake": false,
"locked": {
"lastModified": 1700735100,
"narHash": "sha256-42mbo6icYveRDKZ8mRlzqNDWcBY78kk9Yi1uUQBiWAk=",
"ref": "bd57ee7f2e29b5418bfa4a428639d42ce608d15e",
"rev": "bd57ee7f2e29b5418bfa4a428639d42ce608d15e",
"revCount": 227,
"type": "git",
"url": "file:./linphone-sdk/bcunit"
},
"original": {
"type": "git",
"url": "file:./bcunit"
}
},
"belcard-src": {
"flake": false,
"locked": {
"lastModified": 1704707519,
"narHash": "sha256-Cp/bfrdBR4gVNqefRpJzQh6dG41PbII2EyT0+QcucAA=",
"ref": "afaf9f73ef97e082986d7a54aad9c4b1a6cad1a4",
"rev": "afaf9f73ef97e082986d7a54aad9c4b1a6cad1a4",
"revCount": 242,
"type": "git",
"url": "file:./linphone-sdk/belcard"
},
"original": {
"type": "git",
"url": "file:./belcard"
}
},
"belle-sip-src": {
"flake": false,
"locked": {
"lastModified": 1711523325,
"narHash": "sha256-vSC7N7gX2Dwk9bxhwQIya2V9zqDM6UsDQjZcjcDxXXU=",
"ref": "03662b800ac63e8a48744d371df79358aea10d0c",
"rev": "03662b800ac63e8a48744d371df79358aea10d0c",
"revCount": 2164,
"type": "git",
"url": "file:./linphone-sdk/belle-sip"
},
"original": {
"type": "git",
"url": "file:./belle-sip"
}
},
"belr-src": {
"flake": false,
"locked": {
"lastModified": 1711525048,
"narHash": "sha256-8n78wGwYEshrItCIwJwUUfKPH1e3vzidKZKHEkQubx4=",
"ref": "ae44414813a7dfc4f19d39899bd99f189a41e49d",
"rev": "ae44414813a7dfc4f19d39899bd99f189a41e49d",
"revCount": 211,
"type": "git",
"url": "file:./linphone-sdk/belr"
},
"original": {
"type": "git",
"url": "file:./belr"
}
},
"bzrtp-src": {
"flake": false,
"locked": {
"lastModified": 1713880943,
"narHash": "sha256-h/kZWjmQfvKqAQvhoPnS+JB6LShxH0z7e+TMzXNbrRA=",
"ref": "refs/heads/fix/nix-build",
"rev": "6f3290f8f0644fc6f654fd659ef6aecbcdaf70b1",
"revCount": 327,
"type": "git",
"url": "file:./linphone-sdk/bzrtp"
},
"original": {
"type": "git",
"url": "file:./bzrtp"
}
},
"decaf-src": {
"flake": false,
"locked": {
"lastModified": 1685541108,
"narHash": "sha256-WOHC35Am4BpMmWXXKfoGQ1+zTO3R1wspNJE/WL2bKMg=",
"ref": "4d7bafff3a69c9d02b8addbb78f301a6a74e59ea",
"rev": "4d7bafff3a69c9d02b8addbb78f301a6a74e59ea",
"revCount": 562,
"type": "git",
"url": "file:./linphone-sdk/external/decaf"
},
"original": {
"type": "git",
"url": "file:./external/decaf"
}
},
"ispell-src": {
"flake": false,
"locked": {
"lastModified": 1699354417,
"narHash": "sha256-YoRLiMjk2BxoI27xc2nzucxfHV9UbouFRSECb3RdHGo=",
"ref": "05574fe160222c3d0b6283c1433c9b087271fad1",
"rev": "05574fe160222c3d0b6283c1433c9b087271fad1",
"revCount": 4,
"type": "git",
"url": "file:./external/ispell"
},
"original": {
"type": "git",
"url": "file:./external/ispell"
}
},
"liblinphone-src": {
"flake": false,
"locked": {
"lastModified": 1712587436,
"narHash": "sha256-u3E4VL+q+Hcu6CfJEgHD9tN4O4XQZq6XIp8JjQmTqnc=",
"ref": "4bd295821551a6a87bb963ca226a4572f10163b7",
"rev": "4bd295821551a6a87bb963ca226a4572f10163b7",
"revCount": 16565,
"type": "git",
"url": "file:./linphone-sdk/liblinphone"
},
"original": {
"type": "git",
"url": "file:./liblinphone"
}
},
"lime-src": {
"flake": false,
"locked": {
"lastModified": 1704707676,
"narHash": "sha256-4SzvVy/i6wAnMHSOUBOCHJuHj7wcHk4aXEWKd+zm7g8=",
"ref": "a9d1f3eee62bfcd3eac54816840f0c03fab278fb",
"rev": "a9d1f3eee62bfcd3eac54816840f0c03fab278fb",
"revCount": 258,
"type": "git",
"url": "file:./linphone-sdk/lime"
},
"original": {
"type": "git",
"url": "file:./lime"
}
},
"linphone-sdk": {
"inputs": {
"bctoolbox-src": "bctoolbox-src",
"bcunit-src": "bcunit-src",
"belcard-src": "belcard-src",
"belle-sip-src": "belle-sip-src",
"belr-src": "belr-src",
"bzrtp-src": "bzrtp-src",
"decaf-src": "decaf-src",
"liblinphone-src": "liblinphone-src",
"lime-src": "lime-src",
"mbedtls-src": "mbedtls-src",
"mediastreamer2-src": "mediastreamer2-src",
"msopenh264-src": "msopenh264-src",
"nixpkgs": [
"nixpkgs"
],
"ortp-src": "ortp-src",
"soci-src": "soci-src"
},
"locked": {
"lastModified": 1713883095,
"narHash": "sha256-+UXgLThDf8lkHmEsxoSHMb5PGzxT5DLcYijGojkTHtk=",
"ref": "refs/heads/feat/auto-extract-nix-version-from-submodule-src",
"rev": "92db77c5d7a738fc324eeb5d55f1f430bfec25a8",
"revCount": 3047,
"type": "git",
"url": "file:./linphone-sdk"
},
"original": {
"type": "git",
"url": "file:./linphone-sdk"
}
},
"mbedtls-src": {
"flake": false,
"locked": {
"lastModified": 1685541286,
"narHash": "sha256-Bdq4syH+rRgSZP9wwBzQNkU9V5ZHSQCHPtaAPn7JSo0=",
"ref": "2acc0f26e6e97c82ff9981c1ec32b497d4ea9426",
"rev": "2acc0f26e6e97c82ff9981c1ec32b497d4ea9426",
"revCount": 24180,
"type": "git",
"url": "file:./external/mbedtls"
},
"original": {
"type": "git",
"url": "file:./external/mbedtls"
}
},
"mediastreamer2-src": {
"flake": false,
"locked": {
"lastModified": 1711832699,
"narHash": "sha256-A9A8xfDgJgtSkzDzBbwdtJxmqOSvYfe6jycBVP4lIaY=",
"ref": "d2eb8c1f5d2521d31669f480229d93755d623e58",
"rev": "d2eb8c1f5d2521d31669f480229d93755d623e58",
"revCount": 6537,
"type": "git",
"url": "file:./linphone-sdk/mediastreamer2"
},
"original": {
"type": "git",
"url": "file:./mediastreamer2"
}
},
"msopenh264-src": {
"flake": false,
"locked": {
"lastModified": 1709975904,
"narHash": "sha256-KQfXelgbjwDr1qMd8SuX2zf50V5Pra+OFAyfefissEo=",
"ref": "76b7e5e503087acd8d2d5dcc9d6eec88c8b82dde",
"rev": "76b7e5e503087acd8d2d5dcc9d6eec88c8b82dde",
"revCount": 162,
"type": "git",
"url": "file:./linphone-sdk/msopenh264"
},
"original": {
"type": "git",
"url": "file:./msopenh264"
}
},
"nixpkgs": {
"locked": {
"lastModified": 0,
"narHash": "sha256-aSpiNepFOMk9932HOax0XwNxbA38GOUVOiXfUVPOrck=",
"path": "/nix/store/j10523yhkcc34478azkgcl70yzcx6j2j-source",
"type": "path"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"ortp-src": {
"flake": false,
"locked": {
"lastModified": 1711534760,
"narHash": "sha256-r7WkxL3hBxwy9Ze2HlzRAVQBU44ky8KS8M0uxg7Ttm4=",
"ref": "0ddef68a87b14a5bbe278a1c197c11f881e65875",
"rev": "0ddef68a87b14a5bbe278a1c197c11f881e65875",
"revCount": 2014,
"type": "git",
"url": "file:./linphone-sdk/ortp"
},
"original": {
"type": "git",
"url": "file:./ortp"
}
},
"root": {
"inputs": {
"ispell-src": "ispell-src",
"linphone-sdk": "linphone-sdk",
"nixpkgs": "nixpkgs"
}
},
"soci-src": {
"flake": false,
"locked": {
"lastModified": 1712325296,
"narHash": "sha256-4D+f+mMS6UBgEUBPrL1pHvcHvPQAUpzy9jSJgmiQqpo=",
"ref": "dc64bb457f658adb3fd998b8279ed28e005f7a98",
"rev": "dc64bb457f658adb3fd998b8279ed28e005f7a98",
"revCount": 2458,
"type": "git",
"url": "file:./linphone-sdk/external/soci"
},
"original": {
"type": "git",
"url": "file:./external/soci"
}
}
},
"root": "root",
"version": 7
}

122
flake.nix Normal file
View file

@ -0,0 +1,122 @@
{
description = "Linphone Qt Desktop Client";
inputs = {
linphone-sdk = {
url = git+file:./linphone-sdk;
inputs = {
nixpkgs.follows = "nixpkgs";
bctoolbox-src.url = git+file:./linphone-sdk/bctoolbox;
bcunit-src.url = git+file:./linphone-sdk/bcunit;
belcard-src.url = git+file:./linphone-sdk/belcard;
belle-sip-src.url = git+file:./linphone-sdk/belle-sip;
belr-src.url = git+file:./linphone-sdk/belr;
bzrtp-src.url = git+file:./linphone-sdk/bzrtp;
decaf-src.url = git+file:./linphone-sdk/external/decaf;
lime-src.url = git+file:./linphone-sdk/lime;
liblinphone-src.url = git+file:./linphone-sdk/liblinphone;
mediastreamer2-src.url = git+file:./linphone-sdk/mediastreamer2;
msopenh264-src.url = git+file:./linphone-sdk/msopenh264;
ortp-src.url = git+file:./linphone-sdk/ortp;
soci-src.url = git+file:./linphone-sdk/external/soci;
};
};
ispell-src = {
url = git+file:./external/ispell;
flake = false;
};
};
outputs = { self, nixpkgs, linphone-sdk, ispell-src, ... }: {
overlays.default = final: prev: {
linphone = prev.linphone.overrideAttrs (attrs:
let overriddenSrc = linphone-sdk.nixUtils.overrideSource self; in
overriddenSrc // {
buildInputs = [
final.bctoolbox
final.lime
final.liblinphone
final.mediastreamer
final.belcard
final.belr
final.belle-sip
final.jsoncpp
] ++ (with final.libsForQt5; [
qtkeychain
qtquickcontrols2
qtmultimedia
qtspeech
poppler
]);
# Manually copy submodule source to where it's expected to be
postUnpack = ''
ispell_dir=$NIX_BUILD_TOP/source/external/ispell/
mkdir --parents $ispell_dir
cp --no-preserve=mode --recursive ${ispell-src}/* $ispell_dir
'';
# Disable upstream (nixpkgs) patches
patches = [ ];
postPatch = '''';
postInstall = with final; ''
# I would like to set LINPHONEAPP_INSTALL_PREFIX but then compilation fails when trying to include <LinphoneApp/LinphonePlugin.hpp>
mv --target-directory=$out ./OUTPUT/*
mkdir -p $out/share/belr/grammars
ln -s ${liblinphone}/share/belr/grammars/* $out/share/belr/grammars/
ln -s ${belle-sip}/share/belr/grammars/* $out/share/belr/grammars/
mkdir -p $out/lib/mediastreamer/plugins
ln -s ${mediastreamer-openh264}/lib/mediastreamer/plugins/* $out/lib/mediastreamer/plugins/
ln -s ${mediastreamer}/lib/mediastreamer/plugins/* $out/lib/mediastreamer/plugins/
cp linphone-app/libapp-plugin.so $out/lib/
wrapProgram $out/bin/linphone \
--set MEDIASTREAMER_PLUGINS_DIR \
$out/lib/mediastreamer/plugins
'';
cmakeFlags = attrs.cmakeFlags ++ [
# Do not build the SDK
"-DLINPHONE_QT_ONLY=YES"
"-DENABLE_BUILD_APP_PLUGINS=NO"
"-DENABLE_UPDATE_CHECK=NO"
"-DQTKEYCHAIN_TARGET_NAME=qt5keychain"
(
let datetime = overriddenSrc.version; in
"-DLINPHONEAPP_VERSION=${builtins.substring 0 4 datetime}.${builtins.substring 4 2 datetime}.${builtins.substring 6 2 datetime}"
)
"-DFULL_VERSION=${overriddenSrc.version}-nix"
"-DLINPHONE_OUTPUT_DIR=${final.liblinphone}"
#"-DISPELL_OUTPUT_DIR=${final.ispell}"
];
});
ispell = prev.ispell.overrideAttrs (attrs: (linphone-sdk.nixUtils.overrideSource ispell-src) // {
nativeBuildInputs = [ final.cmake ];
});
};
packages.x86_64-linux = import nixpkgs {
system = "x86_64-linux";
overlays = [
linphone-sdk.overlays.default
self.overlays.default
];
};
defaultPackage.x86_64-linux = self.packages.x86_64-linux.linphone;
apps.x86_64-linux.default = {
type = "app";
program = "${self.packages.x86_64-linux.linphone}/bin/linphone";
};
};
}

View file

@ -24,26 +24,27 @@ cmake_minimum_required(VERSION 3.22)
#Linphone targets
set(LINPHONE_PACKAGES LinphoneCxx Mediastreamer2 Belcard LibLinphone)
set(LINPHONE_PACKAGES LinphoneCxx Mediastreamer2 BelCard LibLinphone)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
find_package(BCToolbox)
if(NOT BCToolbox_FOUND)
find_package(bctoolbox CONFIG REQUIRED)
find_package(BCToolbox CONFIG REQUIRED)
endif()
if(NOT LINPHONEAPP_VERSION)
bc_compute_full_version(LINPHONEAPP_VERSION)
set(version_major)
set(version_minor)
set(version_patch)
set(identifiers )
set(metadata )
bc_parse_full_version("${LINPHONEAPP_VERSION}" version_major version_minor version_patch identifiers metadata)
set(LINPHONEAPP_VERSION "${version_major}.${version_minor}.${version_patch}")
endif()
set(version_major)
set(version_minor)
set(version_patch)
set(identifiers )
set(metadata )
bc_parse_full_version("${LINPHONEAPP_VERSION}" version_major version_minor version_patch identifiers metadata)
project(linphoneqt VERSION "${version_major}.${version_minor}.${version_patch}")
project(linphoneqt VERSION "${LINPHONEAPP_VERSION}")
if(ENABLE_BUILD_VERBOSE)
#message("CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH}")
@ -111,11 +112,13 @@ foreach(PACKAGE ${LINPHONE_PACKAGES})
endif()
endforeach()
find_package(jsoncpp REQUIRED)
set(PLUGIN_TARGETS ${LinphoneCxx_TARGET})
set(APP_TARGETS ${LinphoneCxx_TARGET}
${BCToolbox_TARGET}#Logger/App
${Mediastreamer2_TARGET}#MediastreamerUtils
${Belcard_TARGET}#VCard Model
${BelCard_TARGET}#VCard Model
${LibLinphone_TARGET})#MediastreamerUtils
####################################
@ -123,7 +126,7 @@ set(APP_TARGETS ${LinphoneCxx_TARGET}
if(ENABLE_QT_KEYCHAIN)
find_package(QtKeychain)
if(NOT QtKeychain_FOUND)
find_package(${QTKEYCHAIN_TARGET_NAME} CONFIG REQUIRED)
find_package(Qt5Keychain CONFIG REQUIRED)
endif()
add_compile_definitions("ENABLE_QT_KEYCHAIN")
@ -868,9 +871,10 @@ install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include" DESTINATION "${CMAKE_INS
add_subdirectory(build)
add_subdirectory(cmake_builder/linphone_package)
deployqt_hack(${TARGET_NAME} ${LINPHONE_QML_DIR})
if(NOT LINPHONE_QT_ONLY)
add_subdirectory(cmake_builder/linphone_package)
deployqt_hack(${TARGET_NAME} ${LINPHONE_QML_DIR})
endif()
# ------------------------------------------------------------------------------

View file

@ -34,7 +34,7 @@ if(NOT TARGET bctoolbox)
set(EXPORT_PATH ${LINPHONE_OUTPUT_DIR})
include(GNUInstallDirs)
set(BCToolbox_CMAKE_DIR ${EXPORT_PATH}/${CMAKE_INSTALL_DATADIR}/bctoolbox/cmake)
include(${BCToolbox_CMAKE_DIR}/bctoolboxTargets.cmake)
include(${BCToolbox_CMAKE_DIR}/bctoolboxTargets.cmake OPTIONAL)
endif()
set(_BCToolbox_REQUIRED_VARS BCToolbox_TARGET BCToolbox_CMAKE_DIR BCToolbox_CMAKE_UTILS)

View file

@ -27,7 +27,7 @@
if(NOT TARGET liblinphone)
set(EXPORT_PATH ${LINPHONE_OUTPUT_DIR})
include(GNUInstallDirs)
include(${EXPORT_PATH}/${CMAKE_INSTALL_DATADIR}/linphone/cmake/linphoneTargets.cmake)
include(${EXPORT_PATH}/${CMAKE_INSTALL_DATADIR}/linphone/cmake/linphoneTargets.cmake OPTIONAL)
endif()
set(_LibLinphone_REQUIRED_VARS LibLinphone_TARGET LibLinphone_PLUGINS_DIR)

View file

@ -29,10 +29,10 @@
if(NOT TARGET mediastreamer2)
set(EXPORT_PATH ${LINPHONE_OUTPUT_DIR})
include(GNUInstallDirs)
include(${EXPORT_PATH}/${CMAKE_INSTALL_DATADIR}/Mediastreamer2/cmake/Mediastreamer2Targets.cmake)
include(${EXPORT_PATH}/${CMAKE_INSTALL_DATADIR}/Mediastreamer2/cmake/Mediastreamer2Targets.cmake OPTIONAL)
endif()
set(_Mediastreamer2_REQUIRED_VARS Mediastreamer2_TARGET Mediastreamer2_PLUGINS_DIR)
set(_Mediastreamer2_REQUIRED_VARS Mediastreamer2_TARGET)
set(_Mediastreamer2_CACHE_VARS ${_Mediastreamer2_REQUIRED_VARS})
if(TARGET mediastreamer2)

View file

@ -28,7 +28,7 @@
if(NOT TARGET ${QTKEYCHAIN_TARGET_NAME})
set(EXPORT_PATH ${QTKEYCHAIN_OUTPUT_DIR})
include(GNUInstallDirs)
include(${EXPORT_PATH}/${CMAKE_INSTALL_LIBDIR}/cmake/${QTKEYCHAIN_TARGET_NAME}/${QTKEYCHAIN_TARGET_NAME}Config.cmake)
include(${EXPORT_PATH}/${CMAKE_INSTALL_LIBDIR}/cmake/${QTKEYCHAIN_TARGET_NAME}/${QTKEYCHAIN_TARGET_NAME}Config.cmake OPTIONAL)
endif()
set(_QtKeychain_REQUIRED_VARS QtKeychain_TARGET)

@ -1 +1 @@
Subproject commit 1f9db257fe224ea6d9b067e69ee6b9f72102e129
Subproject commit 92db77c5d7a738fc324eeb5d55f1f430bfec25a8