omniORB 3 has been tested on FreeBSD 4.0.

For FreeBSD 3.2, the following information may be useful.

This information is provided by Andre Fornacon.
If you have questions regarding omniORB on FreeBSD send them to afo@zlug.org.
[Last modified: 1999/06/13 13:10:39 by afo@xxo.zlug.org]

I compiled omniORB 2.7.1 on a FreeBSD 3.2 (RELEASE) system using
the pthreads from libc , gnu make and egcs 1.1.2.

* the config file for FreeBSD builds :

- omniORB 2.7.1 shared and static libraries
- omniORB utils linked static against the omniORB libs
    [ not enabled by default, edit x86_freebsd_3.2.mk to do so. - SLL ]

* to build applications with omniORB on FreeBSD use
	CXXFLAGS = -D_REENTRANT -D_THREAD_SAFE
	CXXFLAGS += -D__x86__ -D__freebsd__ -D__OSVERSION__=3
	CXXFLAGS += -I<YOUR_OMNIORB_INSTALL_DIRECTORY>/include

	dynamic linked binaries:
	LDFLAGS = -L<YOUR_OMNIORB_DIRECTORY>/lib/x86_freebsd_3.2
	LDFLAGS	+= -lomniORB2 -lomniDynamic2 -ltcpwrapGK -lomnithread
	LDFLAGS += -Wl,-rpath,<YOUR_OMNIORB_DIRECTORY>/lib/x86_freebsd_3.2

	static linked binaries:
	LDFLAGS = -L<YOUR_OMNIORB_INSTALL_DIRECTORY>/lib/x86_freebsd_3.2
	LDFLAGS	+= -Wl,-Bstatic 
	LDFLAGS	+= -lomniORB2 -lomniDynamic2 -ltcpwrapGK -lomnithread
	LDFLAGS	+= -Wl,-Bdynamic

	!!! link with the -lpthread flag !!!

During the port i run into the following problems:

* fcntl.h doesn't define O_SYNC, so i used O_FSYNC instead
	omniORB-2.7.1/src/appl/omniNames/log.cc
	omniORB-2.7.1/src/appl/omniNames/omniNames.cc

* need to include unistd.h and sys/wait.h on freebsd in
	omniORB-2.7.1/src/tool/omniidl2/driver/drv_fork.cc
	omniORB-2.7.1/src/tool/omniidl2/driver/drv_preproc.cc


* stock egcs 1.1.2 doesn't support the FreeBSD specific -pthread linking flag
	als the supplied gcc (2.7.2) does.
	just using -lc_r results into binaries linked against libc_r and libc.
	'cause libc_r comes first it may work but isn't a good idea IMHO.

	so i modified the egcs-1.1.2/gcc/config/i386/freebsd-elf.h file 
	the diff is attached below. 
	apply it and rebuild egcs.	
	[i rename the compiler drivers from gcc and g++ to egcs and egcs++
	just to make sure i don't use the supplied system gcc/g++]


--- /src/egcs-1.1.2/gcc/config/i386/freebsd-elf.h.orig	Wed Mar 17 20:39:58 1999
------------ begin freebsd 3.2 egcs pthread patch ----------------
+++ /src/egcs-1.1.2/gcc/config/i386/freebsd-elf.h	Sat Jun 12 14:19:19 1999
@@ -145,26 +145,17 @@
 #define WCHAR_TYPE_SIZE BITS_PER_WORD
     
 #undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-Di386 -Dunix -D__ELF__ -D__FreeBSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
+#define CPP_PREDEFINES "-Di386 -Dunix -D__ELF__ -D__FreeBSD__=3 -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
 
 #undef CPP_SPEC
 #define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}"
 
 #undef	LIB_SPEC
-#if 1
 /* We no longer link with libc_p.a or libg.a by default. If you
  * want to profile or debug the C library, please add
  * -lc_p or -ggdb to LDFLAGS at the link time, respectively.
  */
-#define LIB_SPEC \
-  "%{!shared: %{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} \
-     %{!ggdb:-lc} %{ggdb:-lg}}"
-#else
-#define LIB_SPEC \
-  "%{!shared: \
-     %{mieee-fp:-lieee} %{p:-lgmon -lc_p} %{pg:-lgmon -lc_p} \
-       %{!p:%{!pg:%{!g*:-lc} %{g*:-lg}}}}"
-#endif
+#define LIB_SPEC "%{!shared:%{!pg:%{!pthread:%{!kthread:-lc}%{kthread:-lpthread -lc}}%{pthread:-lc_r}}%{pg:%{!pthread:%{!kthread:-lc_p}%{kthread:-lpthread_p -lc_p}}%{pthread:-lc_r_p}}}"
 
 /* Provide a LINK_SPEC appropriate for FreeBSD.  Here we provide support
    for the special GCC options -static and -shared, which allow us to
------------ end freebsd 3.2 egcs pthread patch ----------------


