HERMES Hemera - a native port of Eudoramail for Haiku (e-mail client)

One of the products my company develops is called Eudoramail. It’s basically a continuation of the old Windows mail client “Eudora”, published by Qualcomm; after they shitcanned it, it kind of filtered down to us through Len Shustek of the Computer History Museum. There’s a long story there, Perforce Stingray, Datapak Paige (which we ended up buying and maintaining ourselves, as HERMES Paige) - anyhow, not germane to this forum since Eudoramail is not even really open source.

What is germane is that we recently developed a port of it for Haiku. Now, I’ll note I really don’t like cross-platform software. I mean, I’ll do it—grudgingly—if there’s a compelling reason; but if the targeted OS has a native SDK/toolkit, I’d prefer my team used it. (That’s part of why LibreOffice really is not one of my favourite packages; but then we’re guilty of the same sin, since we do have a Java app in our portfolio.) So, instead of doing a Qt or GTK port of our software, we decided that the “Windows” version would also run under Wine on Linux, and that the Haiku version would be purely for Haiku.

I know Beam has its fans on here, as does Haiku’s built-in mailer. Our proposition is a little different: Eudora for Mac, written by Steve Dorner, had a legion of fans back in the day—fans who consider the Windows port (yes, Hemera is a port of a port) to be inferior. Those fans included such luminaries as Steve Wozniak.

Now, the Eudora for Mac code is thoroughly unusable. It’s C code, in Carbon, purely 32-bit, doesn’t follow the modern style… but the compiled app is awesome. So we decided to bring that experience, the one Wozniak wouldn’t even surrender from his cold, dead hands, (more than the Windows version, which is MFC MDI + Perforce Stingray) to Haiku—but in a modern language, using a modern toolkit, and still keeping in mind that same old workflow.

Part of this project has also been to serve as a Haiku test bed for our Paige library; in the shape we originally got it, it touted Win 3.1 compatibility as a selling point in 2001ish(!)—not that surprising, since the original company that wrote it was one of those three-men-and-a-dog outfits where the president and EVP’s all had the same surname—and was plainly dated, but also plainly useful. So what we did was bring it into C++, with a first-class Haiku frontend, so it now serves rather well as a rich-text engine.

Anyhow, here’s the source:

13 Likes

Neat: I used to use Eduora on the Mac long ago.

I don’t see a license in the repo; what license is this being released under?

(Don’t want a license war; just curious. :slight_smile:

1 Like

Oh, way cool!

Licence? Oh, MIT. Since this is a Haiku project and I do know MIT is preferred here, that’ll do.

2 Likes

I just wanted to give it a try,but it doesn’t work for me.
I tried several things and all failed in different ways.
First I simply tried running cmake -S . -B build in the cloned repository,but that failed when trying to clone Hermes-Paige with the following output:

-- The C compiler identification is GNU 13.3.0
-- The CXX compiler identification is GNU 13.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Hemera: fetching Hermes-Paige into /boot/home/hermes-hemera/build/_deps/src/Hermes-Paige
[ 11%] Creating directories for 'hemera_dep_hermes-paige-populate'
[ 22%] Performing download step (git clone) for 'hemera_dep_hermes-paige-populate'
Klone nach 'Hermes-Paige'...
Schwerwiegend: konnte "Tree"-Objekt (367c01f1510304f90c7c944e2e356bebe8eef040) nicht lesen
CMake Error at /boot/home/hermes-hemera/build/_deps/subbuild/Hermes-Paige/hemera_dep_hermes-paige-populate-prefix/tmp/hemera_dep_hermes-paige-populate-gitclone.cmake:61 (message):
  Failed to checkout tag: '367c01f1510304f90c7c944e2e356bebe8eef040'


make[2]: *** [CMakeFiles/hemera_dep_hermes-paige-populate.dir/build.make:99: hemera_dep_hermes-paige-populate-prefix/src/hemera_dep_hermes-paige-populate-stamp/hemera_dep_hermes-paige-populate-download] Error 1
make[1]: *** [CMakeFiles/Makefile2:87: CMakeFiles/hemera_dep_hermes-paige-populate.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

CMake Error at /boot/system/data/cmake/Modules/FetchContent.cmake:1918 (message):
  Build step for hemera_dep_hermes-paige failed: 2
Call Stack (most recent call first):
  /boot/system/data/cmake/Modules/FetchContent.cmake:1609 (__FetchContent_populateSubbuild)
  /boot/system/data/cmake/Modules/FetchContent.cmake:2145:EVAL:2 (__FetchContent_doPopulation)
  /boot/system/data/cmake/Modules/FetchContent.cmake:2145 (cmake_language)
  /boot/system/data/cmake/Modules/FetchContent.cmake:1978:EVAL:1 (__FetchContent_Populate)
  /boot/system/data/cmake/Modules/FetchContent.cmake:1978 (cmake_language)
  cmake/HermesDependencies.cmake:76 (FetchContent_Populate)
  cmake/HermesDependencies.cmake:214 (hemera_fetch_dependency)
  CMakeLists.txt:23 (include)


-- Configuring incomplete, errors occurred!

Then I tried manually cloning and building Hermes-Paige as the README says that system-installed libraries are preferred,but building Hermes-Paige also failed:

[ 90%] Building CXX object CMakeFiles/paige.dir/PGDEBUG/PGDEBUG.C.o
[ 91%] Building CXX object CMakeFiles/paige.dir/PGPLATFO/PGMODERN.CPP.o
[ 93%] Building CXX object CMakeFiles/paige.dir/PGPLATFO/PGMEMMGR_MODERN.CPP.o
[ 95%] Building CXX object CMakeFiles/paige.dir/PGPLATFO/PGHAIKU.CPP.o
/boot/home/Hermes-Paige/PGPLATFO/PGHAIKU.CPP: In function 'void pgNativeInstallFont(paige_rec_ptr, style_info_ptr, font_info_ptr, style_info_ptr, short int, pg_boolean)':
/boot/home/Hermes-Paige/PGPLATFO/PGHAIKU.CPP:226:17: error: 'pgStyleSuperImpose' was not declared in this scope
  226 |                 pgStyleSuperImpose(pg, style, &imposed_style, &imposed_font, style_overlay);
      |                 ^~~~~~~~~~~~~~~~~~
At global scope:
cc1plus: note: unrecognized command-line option '-Wno-deprecated-register' may have been intended to silence earlier diagnostics
make[2]: *** [CMakeFiles/paige.dir/build.make:891: CMakeFiles/paige.dir/PGPLATFO/PGHAIKU.CPP.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:90: CMakeFiles/paige.dir/all] Error 2
make: *** [Makefile:101: all] Error 2

Then I tried running scripts/bootstrap_dependencies.sh to fetch the dependencies,which surprisingly worked (I had expected it to do the same thing that cmake -S . -B build does when dependencies are missing) but now cmake -S . -B build failed with another unexpected error:

-- The C compiler identification is GNU 13.3.0
-- The CXX compiler identification is GNU 13.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Hemera: fetching hunspell into /boot/home/hermes-hemera/build/_deps/src/hunspell
-- Hemera: fetching krb5 into /boot/home/hermes-hemera/build/_deps/src/krb5
CMake Error at cmake/HermesDependencies.cmake:565 (message):
  HERMES_BUILD_HAIKU_SHELL requires the Haiku WebKitLegacy system package.
  Missing WebKitLegacy headers or library.
Call Stack (most recent call first):
  CMakeLists.txt:23 (include)


-- Configuring incomplete, errors occurred!

The haikuwebkit and haikuwebkit_devel packages are installed,no idea why cmake doesn’t find them.

2 Likes

:smiling_face_with_sunglasses:

7 Likes

Glad to see it works! Now to get it packaged.

1 Like

There were a few nits that I didn’t realise had to be fixed and I pushed bad code… sorry!

It got fixed.

4 Likes

Where is it at on email standards? IMAP? OAuth 2?

Yes IMAP, yes OAuth2.

Those of you who want support for this app, the infrastructure is already in place. Get e-mail support by sending a message with “Gazelle” in the subject line (no quotes) to join-eudora-dev@hades.listmoms.net

We also have a Signal group. It’s Signal Group

1 Like

What about e-mail migration from Thunderbird Sources/archives?

Good work by the way!

Quite honestly? I don’t believe so, but this was a team effort and I’m not actually sure what was checked in and what wasn’t.

git pull says my local repo is already up to date,the last commit on Github is from 2 days ago.
Where can I get the fix?

Pushing to Github now.

Here’s the pull request if anyone wants to review. hemera: add 1.0-1 by nmatavka · Pull Request #14216 · haikuports/haikuports · GitHub

Has your team been able to build Hermes from your receipe? I know I’ve tried building it from your sources, and my attempts runs into problems while trying to build the Haiku shell.

Yes, we have. For others who have succeeded, see @anon11892322 and @ilfelice above. Give me your log and we’ll see what we can do about it.

Here’s where it starts with issues. Just an assortment of errors.

Well, the errors that I can see in the window are fixed but I would really need a copy of the log (do you know how to do that?) I committed and pushed, see if you get anything working from the repo.