1{
2 stdenv,
3 lib,
4 fetchFromGitLab,
5 gitUpdater,
6 nixosTests,
7 cmake,
8 gettext,
9 libapparmor,
10 lomiri-action-api,
11 lomiri-content-hub,
12 lomiri-ui-extras,
13 lomiri-ui-toolkit,
14 mesa,
15 pkg-config,
16 qqc2-suru-style,
17 qtbase,
18 qtdeclarative,
19 qtquickcontrols2,
20 qtsystems,
21 qttools,
22 qtwebengine,
23 wrapQtAppsHook,
24 xvfb-run,
25}:
26
27let
28 listToQtVar = suffix: lib.makeSearchPathOutput "bin" suffix;
29in
30stdenv.mkDerivation (finalAttrs: {
31 pname = "morph-browser";
32 version = "1.1.2";
33
34 src = fetchFromGitLab {
35 owner = "ubports";
36 repo = "development/core/morph-browser";
37 tag = finalAttrs.version;
38 hash = "sha256-CW+8HEGxeDDfqbBtNHDKTvsZkbu0tCmD6OEDW07KG2k=";
39 };
40
41 outputs = [
42 "out"
43 "doc"
44 ];
45
46 postPatch = ''
47 substituteInPlace src/{Morph,Ubuntu}/CMakeLists.txt \
48 --replace-fail '/usr/lib/''${CMAKE_LIBRARY_ARCHITECTURE}/qt5/qml' "\''${CMAKE_INSTALL_PREFIX}/${qtbase.qtQmlPrefix}"
49
50 substituteInPlace src/app/webbrowser/morph-browser.desktop.in.in \
51 --replace-fail 'Icon=@CMAKE_INSTALL_FULL_DATADIR@/morph-browser/morph-browser.svg' 'Icon=morph-browser' \
52 --replace-fail 'X-Lomiri-Splash-Image=@CMAKE_INSTALL_FULL_DATADIR@/morph-browser/morph-browser-splash.svg' 'X-Lomiri-Splash-Image=lomiri-app-launch/splash/morph-browser.svg'
53
54 substituteInPlace doc/CMakeLists.txt \
55 --replace-fail 'COMMAND ''${QDOC_EXECUTABLE} -qt5' 'COMMAND ''${QDOC_EXECUTABLE}'
56 ''
57 + lib.optionalString (!finalAttrs.finalPackage.doCheck) ''
58 substituteInPlace CMakeLists.txt \
59 --replace-fail 'add_subdirectory(tests)' ""
60 '';
61
62 strictDeps = true;
63
64 nativeBuildInputs = [
65 cmake
66 gettext
67 pkg-config
68 qttools # qdoc
69 wrapQtAppsHook
70 ];
71
72 buildInputs = [
73 libapparmor
74 qtbase
75 qtdeclarative
76 qtwebengine
77
78 # QML
79 lomiri-action-api
80 lomiri-content-hub
81 lomiri-ui-extras
82 lomiri-ui-toolkit
83 qqc2-suru-style
84 qtquickcontrols2
85 qtsystems
86 ];
87
88 nativeCheckInputs = [
89 mesa.llvmpipeHook # ShapeMaterial needs an OpenGL context: https://gitlab.com/ubports/development/core/lomiri-ui-toolkit/-/issues/35
90 xvfb-run
91 ];
92
93 cmakeFlags = [
94 (lib.cmakeFeature "CMAKE_CTEST_ARGUMENTS" (
95 lib.concatStringsSep ";" [
96 # Exclude tests
97 "-E"
98 (lib.strings.escapeShellArg "(${
99 lib.concatStringsSep "|" [
100 # Don't care about linter failures
101 "^flake8"
102 ]
103 })")
104 ]
105 ))
106 ];
107
108 doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
109
110 preCheck = ''
111 export HOME=$TMPDIR
112 export QT_PLUGIN_PATH=${listToQtVar qtbase.qtPluginPrefix [ qtbase ]}
113 export QML2_IMPORT_PATH=${
114 listToQtVar qtbase.qtQmlPrefix (
115 [
116 lomiri-ui-toolkit
117 qtwebengine
118 qtdeclarative
119 qtquickcontrols2
120 qtsystems
121 ]
122 ++ lomiri-ui-toolkit.propagatedBuildInputs
123 )
124 }
125 '';
126
127 postInstall = ''
128 mkdir -p $out/share/{icons/hicolor/scalable/apps,lomiri-app-launch/splash}
129
130 ln -s $out/share/{morph-browser,icons/hicolor/scalable/apps}/morph-browser.svg
131 ln -s $out/share/{morph-browser/morph-browser-splash.svg,lomiri-app-launch/splash/morph-browser.svg}
132 '';
133
134 passthru = {
135 updateScript = gitUpdater { };
136 tests = {
137 # Test of morph-browser itself
138 standalone = nixosTests.morph-browser;
139
140 # Interactions between the Lomiri ecosystem and this browser
141 inherit (nixosTests.lomiri) desktop-basics desktop-appinteractions;
142 };
143 };
144
145 meta = with lib; {
146 description = "Lightweight web browser tailored for Ubuntu Touch";
147 homepage = "https://gitlab.com/ubports/development/core/morph-browser";
148 changelog = "https://gitlab.com/ubports/development/core/morph-browser/-/blob/${finalAttrs.version}/ChangeLog";
149 license = with licenses; [
150 gpl3Only
151 cc-by-sa-30
152 ];
153 mainProgram = "morph-browser";
154 teams = [ teams.lomiri ];
155 platforms = platforms.linux;
156 };
157})