I've mentioned this a few times over the years but I wanted to make another request. Section 2.8 of the Mozilla Release FAQ (
https://lwn.net/1998/1015/mozfaq.html) states that the Mozilla browser source code from around 1998 should compile on NEXTSTEP. Besides the prerequisites listed I believe that it would also require x11 and Motif or less tif. The NeXT community could really use another Web browser for better compatibility with the forums and other sites, even if it's only marginally better. IIRC, someone mentioned that they may have added CSS support in the June 1998 source. If you have the compiling expertise and the time we could really use your help. The early Mozilla source is mirrored here in our archives (
https://www.nextcomputers.org/NeXTfiles/Projects/Mozilla_Source/) if you would like to check it out.
Thanks
Quote from: Mozilla FAQ2.8) What do I need to compile on a Rhapsody/NeXTStep system?
Upgrade to GCC 2.7.2 or later
(ftp://ftp.peanuts.org/peanuts/OpenStep/developer/programs/language/c_and_friends/)
get gnu make
(ftp://ftp.gnu.org/pub/gnu)
and a recent version of Perl.
(ftp://ftp.peanuts.org/peanuts/./NEXTSTEP/unix/script/perlCORE.5.004_02.NIHS.b.pkg.tar.gz)
The developer tools for NeXTStep (unless you're on Rhapsody) will also be needed,
and they're not free.
With all of these tools, you won't need to do anything different from any other Unix.
OpenStep 4.2 with Developer Patch and Rhapsody 5.2 DR2 both come with gcc Version 2.7.2.1.
But this is out of my skill set for now.
Looking into this. Some notes:
- kb7sqi has updated packages of both perl 5 and gmake 3. They are located in here (
https://www.nextcomputers.org/NeXTfiles/Software/Kb7sqiARCHIVE/), so we don't need to futz around with the messy (although period-correct) distributions available on various mirrors of ftp.peak.org. Get gdbm, perl, and gmake from the packages directory inside that huge ZIP.
- Not all the versions of the Mozilla source in the NeXTfiles archive actually include a NeXT makefile. So, I'm working with mozilla-19981008.tar.gz (released a week before that FAQ link), as it contains files named "NEXTSTEP" (probably OS 4.2) and "Rhapsody".
- I'm only going to worry about OS4.2 on Intel for now, for the sake of performance and my sanity. Maybe if it all works out we can go for an m68k victory lap.
- A reminder that a browser on X11 might as well be running on a different computer—the actual value in running it locally is minimal!
- Motif seemed to be a roadblock at first, but the Cub'X-Window v5.0 CD includes all the development stuff for it! This is a huge coup, as Cub'X-Window is officially abandonware (the company gave out a license key for it.) co-Xist was a dud in this respect. (I think they had a separate "Developer" CD that has not been archived.)
More as the situation develops...
It looks as if I have a "Developer Package" of co-Xist 3.3. If that is of interest to anyone, I can upload it as soon as I have the opportunity to do so.
Quote from: blackbeauty on March 06, 2025, 09:06:03 AMIt looks as if I have a "Developer Package" of co-Xist 3.3. If that is of interest to anyone, I can upload it as soon as I have the opportunity to do so.
That would be really useful! If you have any runtime disc of co-Xist that isn't specifically "3.3s" I'd want to see that too, for consistency. The Mozilla FAQ barely mentions NeXT at all, so it's impossible to know (from documentation alone) how they got their Motif.
Worked on trying to compile this a little today. Only one (of two) of the NEXTSTEP.mk files was present. It seems they spent a lot more time getting it to compile on Rhapsody. I interpolated some OPENSTEP.mk files based on the Rhapsody.mk and NEXTSTEP.mk files.
After that, I encountered tons of perl errors and missing types, but gmake at least soldiered through the (insanely long) Makefile, which was a refreshing change from my previous adventures trying to make NetBSD's pkgsrc do anything at all. Much of the C code uses pre-C99-style type definitions like uint8, int32, etc. There is at least one file that actually defines them. Probably the purpose of the failing perl code is supposed to include the header that does this for us. The build instructions say "/bin/echo" is a valid alternative for perl in the requirements (?!) but that did not seem to improve anything.
So... based on this, my working assumption is that kb7sqi's perl (version 5.6.2) is too
new. The perl 5 dynasty did not exactly reign briefly. Tomorrow I'll try figuring out what I need to do to make the old perl 5.004 from PEAK work. The readme for that version (//******************/archive/apps/devtools/perl/perl.5.004_04.README.txt) was a little unnerving: it asks for libposix and libgdbm. I think I may need to grab an NS3.3 libposix.a to use on OS4.2. Hopefully kb7sqi's libgdbm will suffice, since I wasn't able to locate any other version of gdbm.
On an unrelated note, I determined that ddate (
https://github.com/bo0ts/ddate/blob/master/ddate.c) builds without difficulty. ...Not exactly
useful, but it was nice to see something actually work for a change.
Got the old perl working. Did not affect the problematic perl code. It seems to be a single snippet from config/rules.mk that's messing up repeatedly. (Something eldritch about reading arguments from the input stream...)
Fortunately, the purpose of this code is to remove out-of-date files during development, so I just disabled it. I'm not doing development, after all.
With a clearer view of the console scrollback I was able to determine that the copious type errors are indeed coming from failing includes. I might be able to hack my way around this by jamming a -I (include path) argument into OS_FLAGS... or maybe more than one.
Update: After a whole bunch of -I additions for everything from Cub'X-Windows's X11R5 headers to various parts of the Mozilla tree, I've narrowed my problems down to only a few 'not found' errors (and their attendant consequences): prcpucfg.h and sys/filio.h
- sys/filio.h is clearly a UNIX or BSD header. It is only used in one file (network/protocol/ftp/mkftp.c). Probably there are alternatives that I can figure out in time. Failing that, I can just build without FTP support.
- prcpucfg.h is a bit of a problem. It's used to define a pyramid of prefixed types (e.g. "PRInt32") that are used throughout quite a few parts. It's supposed to be generated by a utility that gets compiled early in the build process, and I don't have any specimens to alter. I think I'll probably end up writing one from scratch until I've satisfied all the errors.
- ...it also turns out that I erroneously specified that the C++ compiler was called c++ instead of cc++. Thanks for being weird, Rhapsody headers!
Well done Rhetorica you are doing a good job.
What is compiling so far? Network code? JavaScript Code? CSS code?
Well, let me just run find . -name '*.o' -print here for you...
Looks like the Xfe GUI toolkit (the stuff that needed Motif) is compiling. (Possibly completely.) A couple of other random .o files were built, like csslex.o (CSS lexer?) and xmltok.o (XML tokenizer?) but the reliance on the "PR"-prefixed types is a big obstacle.
Here's the list of unique error messages that I'm getting currently:
#error 'sizeof(int)' not sufficient for platform use
#error No suitable type for PRInt16/PRUint16
#error No suitable type for PRInt32/PRUint32
#error No suitable type for PRInt8/PRUint8
'sizeof(int)' not sufficient for platform use
/bin/sh: ../../../../config/OPENSTEP4.2_DBG.OBJ/nsinstall: not found
/bin/sh: ../../../config/OPENSTEP4.2_DBG.OBJ/nsinstall: not found
/bin/sh: ../../config/OPENSTEP4.2_DBG.OBJ/nsinstall: not found
/bin/sh: 17412 Memory fault
No suitable type for PRInt16/PRUint16
No suitable type for PRInt32/PRUint32
No suitable type for PRInt8/PRUint8
_strdup
`optarg' undeclared (first use this function)
`optind' undeclared (first use this function)
header file 'prcpucfg.h' not found
header file 'sys/filio.h' not found
illegal expression, found `)'
illegal expression, found `:'
illegal expression, found `char'
illegal expression, found `else'
illegal external declaration, found `break'
illegal external declaration, found `else'
illegal external declaration, found `if'
illegal external declaration, found `return'
illegal external declaration, found `switch'
illegal external declaration, found `while'
illegal external declaration, found `{'
illegal external declaration, found `}'
illegal external declaration, missing `;' after `)'
illegal external declaration, missing `;' after `*'
illegal external declaration, missing `;' after `ERROR'
illegal external declaration, missing `;' after `Error'
illegal external declaration, missing `;' after `INTL_Unicode'
illegal external declaration, missing `;' after `JSBool'
illegal external declaration, missing `;' after `PRInt32'
illegal external declaration, missing `;' after `TimeoutCallbackFunction'
illegal external declaration, missing `;' after `be'
illegal external declaration, missing `;' after `byte'
illegal external declaration, missing `;' after `compositor'
illegal external declaration, missing `;' after `float'
illegal external declaration, missing `;' after `have'
illegal external declaration, missing `;' after `index'
illegal external declaration, missing `;' after `int'
illegal external declaration, missing `;' after `int32'
illegal external declaration, missing `;' after `jsval'
illegal external declaration, missing `;' after `long'
illegal external declaration, missing `;' after `order'
illegal external declaration, missing `;' after `pEvent'
illegal external declaration, missing `;' after `short'
illegal external declaration, missing `;' after `smoothed_slack'
illegal external declaration, missing `;' after `uint'
illegal external declaration, missing `;' after `uint32'
illegal function call, found `0'
illegal function call, found `1'
illegal function definition, found `)'
illegal function prototype, found `&'
illegal member reference, found `('
illegal method definition, found `)'
illegal method definition, found `->'
illegal method definition, found `.'
illegal method definition, found `>'
illegal method definition, missing `{' after `)'
illegal method definition, missing `{' after `1000'
illegal method definition, missing `{' after `lo'
illegal method selector, found `0.90'
illegal method selector, found `1'
illegal method selector, found `500'
illegal method selector, found `?'
illegal statement, missing `)' after `)'
illegal statement, missing `)' after `name'
illegal statement, missing `;' after `)'
illegal statement, missing `;' after `++'
illegal statement, missing `;' after `XP_File'
illegal statement, missing `;' after `XP_StatStruct'
illegal statement, missing `;' after `cl_back_to_front_state'
illegal statement, missing `;' after `jsdouble'
illegal statement, missing `;' after `uint32'
illegal statement, missing `while' after `}'
iostream.h: No such file or directory
pprthred.h: No such file or directory
prcpucfg.h: No such file or directory
syntax error, found `0'
syntax error, found `1'
syntax error, found `PRInt32'
syntax error, found `jsval'
syntax error, found `smoothed_slack'
syntax error, found `uint'
syntax error, missing `;' after `)'
undefined type, found `DB'
undefined type, found `JSPropertyCache'
undefined type, found `Must'
undefined type, found `PRInt16'
undefined type, found `PRInt32'
undefined type, found `PRInt8'
undefined type, found `PRIntn'
undefined type, found `PRUint16'
undefined type, found `PRUint32'
undefined type, found `PRUint8'
undefined type, found `PRUintn'
undefined type, found `byte'
undefined type, found `uint'
warning: assignment makes pointer from integer without a cast
warning: implicit declaration of function `S_ISLNK'
warning: implicit declaration of function `fchmod'
warning: implicit declaration of function `fchown'
warning: implicit declaration of function `ftruncate'
warning: implicit declaration of function `getopt'
warning: implicit declaration of function `readlink'
warning: implicit declaration of function `strdup'
warning: implicit declaration of function `symlink'
The 'nsinstall' artifact actually did build, so I'm assuming that's some more shenanigans with the environment not being adequate; I've caught it failing to find its own headers before. (pprthred.h is in the tree; it must be another one of these.)
I think the 'illegal ...' and 'extern' messages all boil down to undefined types. The 'extern' keyword is optional in C; I've seen gcc insinuate variables with missing typedefs are 'extern int' before. ('Twas always thus, crieth K&R...)
I am not sure how iostream.h got misplaced. Sounds like something we ought to have. I think the 'implicit declaration' errors all come from sys/filio.h or iostream.h.
/bin/sh having a memory fault, on the other hand? THAT's spooky. I have no idea why it did that.