Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
en:system:userspace:application:uxp:icedove-uxp [2018/08/02 06:16] g4jc |
en:system:userspace:application:uxp:icedove-uxp [2022/03/25 20:56] (current) i3_relativism ↷ Page moved from en:system:userspace:userspace:application:uxp:icedove-uxp to en:system:userspace:application:uxp:icedove-uxp |
||
---|---|---|---|
Line 5: | Line 5: | ||
Icedove-UXP is a mail application built on the the [[https:// | Icedove-UXP is a mail application built on the the [[https:// | ||
- | Historically, | + | Historically, |
The Hyperbola Team continued the Icedove branding in the spirit of cultural freedom for several months. However, inconsistencies were discovered, including the use of non-free fonts in Debian' | The Hyperbola Team continued the Icedove branding in the spirit of cultural freedom for several months. However, inconsistencies were discovered, including the use of non-free fonts in Debian' | ||
Line 13: | Line 13: | ||
===== Application Info ===== | ===== Application Info ===== | ||
- | * Latest tarball: [[https:// | + | * Latest tarball: [[https:// |
- | * Latest commits: [[https:// | + | * Latest commits: [[https:// |
- | * Older tarballs: [[https:// | + | * Older tarballs: [[https:// |
* Source code: [[https:// | * Source code: [[https:// | ||
- | * Version: | + | * Version: |
* Resources: | * Resources: | ||
* [[https:// | * [[https:// | ||
+ | * [[https:// | ||
+ | ===== Porting Notes ===== | ||
+ | In order to preserve the knowledge of porting an application to UXP application for future developers, this is step-by-step guide to how Icedove was ported to the Unified XUL Framework. | ||
+ | |||
+ | === Get the source and setup the build environment === | ||
+ | |||
+ | As with any project, the first thing you should do is start from the source. In this case any XUL application < 52.x should work. | ||
+ | Versions 60.x and higher use the so-called Quantum engine which guts XUL in favor of Chromium dependencies. | ||
+ | |||
+ | To setup the build environment, | ||
+ | The package names may vary slightly depending on your GNU/Linux distribution. You can also refer to [[https:// | ||
+ | |||
+ | < | ||
+ | autoconf-legacy clang diffutils gconf git imake inetutils libpulse llvm mesa pkg-config python2 quilt unzip xorg-server-xvfb yasm zip</ | ||
+ | |||
+ | We started with Thunderbird 52.9.1 as it was the latest stable release at the time of this writing. | ||
+ | The original sources can be found here: http:// | ||
+ | |||
+ | < | ||
+ | |||
+ | Once you've extracted the sources, the first thing you should do is delete the /mozilla folder. | ||
+ | It contains the core from mozilla-central, | ||
+ | |||
+ | < | ||
+ | rm -rf mozilla | ||
+ | </ | ||
+ | |||
+ | Next, drop in UXP as the replacement: | ||
+ | |||
+ | < | ||
+ | mv UXP mozilla | ||
+ | </ | ||
+ | |||
+ | Now prepare a // | ||
+ | |||
+ | You may refer to the debug-ready one below: | ||
+ | < | ||
+ | # Tell UXP to build the application in the " | ||
+ | ac_add_options --enable-application=mail | ||
+ | |||
+ | |||
+ | # Debug settings | ||
+ | ac_add_options --disable-optimize | ||
+ | ac_add_options --enable-debug-symbols | ||
+ | ac_add_options --enable-debug | ||
+ | |||
+ | ac_add_options --with-pthreads | ||
+ | |||
+ | # Target platform | ||
+ | ac_add_options --target=x86_64-pc-linux-gnu | ||
+ | |||
+ | # Specify number of CPU Cores | ||
+ | mk_add_options MOZ_MAKE_FLAGS=" | ||
+ | |||
+ | # Disable bloatware that might be in the application | ||
+ | ac_add_options --disable-accessibility | ||
+ | ac_add_options --disable-alsa | ||
+ | ac_add_options --disable-cpp-rtti | ||
+ | ac_add_options --disable-crashreporter | ||
+ | ac_add_options --disable-dbus | ||
+ | ac_add_options --disable-necko-wifi | ||
+ | ac_add_options --disable-negotiateauth | ||
+ | ac_add_options --disable-official-branding | ||
+ | ac_add_options --disable-pulseaudio | ||
+ | ac_add_options --disable-tests | ||
+ | ac_add_options --disable-updater | ||
+ | ac_add_options --disable-webrtc | ||
+ | ac_add_options --disable-safe-browsing | ||
+ | ac_add_options --disable-url-classifier | ||
+ | |||
+ | # Enable some useful features | ||
+ | |||
+ | # Lightning Calendar | ||
+ | ac_add_options --enable-calendar | ||
+ | # Gnome GIO | ||
+ | ac_add_options --enable-gio | ||
+ | |||
+ | # System Libs confirmed working: | ||
+ | ac_add_options --with-system-icu | ||
+ | ac_add_options --with-system-jpeg | ||
+ | ac_add_options --with-system-zlib | ||
+ | ac_add_options --with-system-bz2 | ||
+ | ac_add_options --with-system-libvpx | ||
+ | ac_add_options --enable-system-hunspell | ||
+ | ac_add_options --enable-system-ffi | ||
+ | ac_add_options --enable-system-pixman | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | </ | ||
+ | |||
+ | From here you should familiarize yourself with [[https:// | ||
+ | |||
+ | === Missing files === | ||
+ | Now that your build environment is ready, we need to include files which are missing from your application. When you downloaded the original sources, Mozilla neglected to tell you that they were incomplete. | ||
+ | You will need to find and install missing files. | ||
+ | |||
+ | * All XUL applications need an [[https:// | ||
+ | |||
+ | * In our case, the program depended on [[https:// | ||
+ | |||
+ | === Removed files === | ||
+ | UXP is known for removing bloatware. As such, you will spend a fair amount of time removing bloat from your application which is no longer supported by UXP. | ||
+ | |||
+ | * UXP does not use Google Phishing/ | ||
+ | |||
+ | * UXP does not use " | ||
+ | |||
+ | * UXP does not use Security Reporter. You need to remove or comment these out in [[https:// | ||
+ | |||
+ | * There is no support for Rust. If your application has Rust dependencies (MOZ_RUST_URLPARSE), | ||
+ | |||
+ | * There is no support for Chromium MOZ_SANDBOX. You will need to remove it from your application. Although you can go back find the commits that added this, once you know the pattern of " | ||
+ | |||
+ | === Fixing API changes === | ||
+ | |||
+ | * UXP does not use nsIURIWithQuery (neither does Mozilla, so you shouldn' | ||
+ | |||
+ | * UXP no longer allows SEC_NORMAL for security reasons (neither does Mozilla, so you shouldn' | ||
+ | |||
+ | * UXP does support Error Console, whereas Mozilla does not. We [[https:// | ||
+ | |||
+ | * UXP's addon manager uses a unified toolkit module. You have to [[https:// | ||
+ | |||
+ | |||
+ | By this point your application should be building properly, and you can launch it with "// | ||
+ | |||
+ | |||
+ | === Tidying up the layout === | ||
+ | |||
+ | * Our application did not reference the close tab CSS, which caused there to be no close button. [[https:// | ||
+ | |||
+ | * UXP has a strange CSS issue related to the findBar. If a word is not found it will paint the window red as it should, but also create a large whiteblock overtop the text, which causes frustration for findBar users. This appears to only affect GNU/Linux builds, so we [[https:// | ||
+ | |||
+ | === Making it yours === | ||
+ | The rest of your job will be on branding. You should come up with a good name for your new application, | ||
+ | |||
+ | Branding resides in the /// | ||
+ | |||
+ | Once you have chosen a good name, it's time to go through the [[https:// | ||
+ | |||
+ | You may wish to change the build structure. Although we did not do it for this application, | ||
+ | |||
+ | We also removed [[https:// | ||
+ | |||
+ | As a final measure, you may wish to [[https:// | ||
+ | |||
+ | At this point, there will be trivial bugs to fix, or features you may wish to create or disable. The choice is up to you. | ||
+ | |||
+ |