From 4105ebb6ed85aaffec5e4469a939945fb9eea066 Mon Sep 17 00:00:00 2001
From: athenian200 <athenian200@outlook.com>
Date: Tue, 1 Oct 2019 18:28:10 -0500
Subject: MoonchildProductions#1251 - Part 4: Core build system changes, lots
 of libevent/IPC junk.

This is mostly ifdefs, but as you can see, Solaris is actually a lot like Linux. They're both more SysV than BSD at core, and most of the differences have more to do with Solaris not using glibc than anything else.

I still need to audit a lot of these changes and understand why they're needed and what the alternative approaches are. After this patch, most of the core functionality needed to build Solaris is here.
---
 config/external/nspr/pr/moz.build | 14 ++++++++++++++
 config/external/nspr/prcpucfg.h   |  2 ++
 2 files changed, 16 insertions(+)

(limited to 'config/external/nspr')

diff --git a/config/external/nspr/pr/moz.build b/config/external/nspr/pr/moz.build
index af710f850..02811aae8 100644
--- a/config/external/nspr/pr/moz.build
+++ b/config/external/nspr/pr/moz.build
@@ -51,6 +51,19 @@ elif CONFIG['OS_TARGET'] == 'Darwin':
     ]
     if not CONFIG['MOZ_IOS']:
         DEFINES['HAVE_CRT_EXTERNS_H'] = True
+elif CONFIG['OS_TARGET'] == 'SunOS':
+    DEFINES.update(
+        HAVE_FCNTL_FILE_LOCKING=True,
+        HAVE_SOCKLEN_T=True,
+        _PR_HAVE_OFF64_T=True,
+        _PR_INET6=True,
+    )
+    DEFINES['SOLARIS'] = True
+    SOURCES += ['/nsprpub/pr/src/md/unix/solaris.c']
+    if CONFIG['CPU_ARCH'] == 'x86_64':
+        SOURCES += ['/nsprpub/pr/src/md/unix/os_SunOS_x86_64.s']
+    elif CONFIG['CPU_ARCH'] == 'x86':
+        SOURCES += ['/nsprpub/pr/src/md/unix/os_SunOS/x86.s']
 elif CONFIG['OS_TARGET'] == 'WINNT':
     OS_LIBS += [
         'advapi32',
@@ -224,6 +237,7 @@ EXPORTS.nspr.md += [
     '/nsprpub/pr/include/md/_linux.cfg',
     '/nsprpub/pr/include/md/_netbsd.cfg',
     '/nsprpub/pr/include/md/_openbsd.cfg',
+    '/nsprpub/pr/include/md/_solaris.cfg',
     '/nsprpub/pr/include/md/_win95.cfg',
 ]
 
diff --git a/config/external/nspr/prcpucfg.h b/config/external/nspr/prcpucfg.h
index 5f7962733..8769abeeb 100644
--- a/config/external/nspr/prcpucfg.h
+++ b/config/external/nspr/prcpucfg.h
@@ -22,6 +22,8 @@
 #include "md/_openbsd.cfg"
 #elif defined(__linux__)
 #include "md/_linux.cfg"
+#elif defined(__sun__)
+#include "md/_solaris.cfg"
 #else
 #error "Unsupported platform!"
 #endif
-- 
cgit v1.2.3


From 575f51a27d6b3627ae5675cc8e920c8dcae073bd Mon Sep 17 00:00:00 2001
From: athenian200 <athenian200@outlook.com>
Date: Fri, 4 Oct 2019 04:37:51 -0500
Subject: Fix a bunch of dumb typos and omissions.

---
 config/external/nspr/pr/moz.build | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'config/external/nspr')

diff --git a/config/external/nspr/pr/moz.build b/config/external/nspr/pr/moz.build
index 02811aae8..84d6e7903 100644
--- a/config/external/nspr/pr/moz.build
+++ b/config/external/nspr/pr/moz.build
@@ -63,7 +63,7 @@ elif CONFIG['OS_TARGET'] == 'SunOS':
     if CONFIG['CPU_ARCH'] == 'x86_64':
         SOURCES += ['/nsprpub/pr/src/md/unix/os_SunOS_x86_64.s']
     elif CONFIG['CPU_ARCH'] == 'x86':
-        SOURCES += ['/nsprpub/pr/src/md/unix/os_SunOS/x86.s']
+        SOURCES += ['/nsprpub/pr/src/md/unix/os_SunOS_x86.s']
 elif CONFIG['OS_TARGET'] == 'WINNT':
     OS_LIBS += [
         'advapi32',
-- 
cgit v1.2.3


From 2f4488521db663520c703a9a836d5549d679266c Mon Sep 17 00:00:00 2001
From: athenian200 <athenian200@outlook.com>
Date: Thu, 10 Oct 2019 15:38:27 -0500
Subject: MoonchildProductions#1251 - Part 23: Allow AMD64 build to work.

https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Build_Instructions/Compiling_32-bit_Firefox_on_a_Linux_64-bit_OS

Setting this up turned out to be easier than I thought it would be. All I had to do was apply these instructions in reverse and add the following to my .mozconfig file:

CC="gcc -m64"
CXX="g++ -m64"
AS="gas --64"
ac_add_options --target=x86_64-pc-solaris2.11
export PKG_CONFIG_PATH=/usr/lib/amd64/pkgconfig
ac_add_options --libdir=/usr/lib/amd64
ac_add_options --x-libraries=/usr/lib/amd64

Most of these changes were fairly trivial, just requiring me to make a few of the changes I made earlier conditional on a 32-bit build. The biggest challenge was figuring out why the JavaScript engine triggered a segfault everytime it tried to allocate memory. But this patch fixes it:

https://github.com/OpenIndiana/oi-userland/blob/oi/hipster/components/web/firefox/patches/patch-js_src_gc_Memory.cpp.patch

Turns out that Solaris on AMD64 handles memory management in a fairly unusual way with a segmented memory model, but it's not that different from what we see on other 64-bit processors. In fact, I saw a SPARC crash for a similar reason, and noticed that it looked just like mine except the numbers in the first segment were reversed. Having played around with hex editors before, I had a feeling I might be dealing with a little-endian version of a big-endian problem, but I didn't expect that knowledge to actually yield an easy solution.

https://bugzilla.mozilla.org/show_bug.cgi?id=577056

https://www.oracle.com/technetwork/server-storage/solaris10/solaris-memory-135224.html

As far as I can tell, this was the last barrier to an AMD64 Solaris build of Pale Moon.
---
 config/external/nspr/pr/moz.build | 1 +
 1 file changed, 1 insertion(+)

(limited to 'config/external/nspr')

diff --git a/config/external/nspr/pr/moz.build b/config/external/nspr/pr/moz.build
index 84d6e7903..1d2df3099 100644
--- a/config/external/nspr/pr/moz.build
+++ b/config/external/nspr/pr/moz.build
@@ -62,6 +62,7 @@ elif CONFIG['OS_TARGET'] == 'SunOS':
     SOURCES += ['/nsprpub/pr/src/md/unix/solaris.c']
     if CONFIG['CPU_ARCH'] == 'x86_64':
         SOURCES += ['/nsprpub/pr/src/md/unix/os_SunOS_x86_64.s']
+        DEFINES['USE_64'] = True
     elif CONFIG['CPU_ARCH'] == 'x86':
         SOURCES += ['/nsprpub/pr/src/md/unix/os_SunOS_x86.s']
 elif CONFIG['OS_TARGET'] == 'WINNT':
-- 
cgit v1.2.3