Hack up a library! Help!
-------------------------------------------------------------------------------
Once build figures out the individual sub-directories that need to be built, it
descends into each of the sub-directories and invokes dmake, which is the build
tool that takes makefile.mk as input as to what to build. It is dmake which now
launches the error that a makefile is not present.
We can fix that, can't we now ? :-) We look for a healthy makefile.mk from a
neighbouring project, copy it over and make the modifications to fit our needs:
--- /dev/null 2004-08-25 23:04:59.000000000 +0530
+++ helloworld/source/makefile.mk 2005-01-10 23:34:50.363586152 +0530
@@ -0,0 +1,17 @@
+
+PRJ=..
+PRJNAME=helloworld
+TARGET=helloworld
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files -------------------------------------
+
+SLOFILES=\
+ $(SLO)$/helloworld.obj
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
With that information in, we indicate that we want a helloworld.obj built and
issue 'build' again:
build -- version: 1.130
/home/raul/HEAD/ooo-build/build/src680-m65/helloworld/source
dmake: Error -- `../unxlngi4.pro/slo/helloworld.obj' not found, and can't be made
'---* tg_merge.mk *---'
ERROR: Error 65280 occurred while making /home/raul/HEAD/ooo-build/build/src680-m65/helloworld/source
So what happens is that in order to generate a file-name.obj file, dmake
searches for a file-name.cxx file and in this case, unable to find the source
file, throws an error and halts.
In order to move ahead, we need to provide the source of what needs to be
built, and we do that:
--- /dev/null 2004-08-25 23:04:59.000000000 +0530
+++ helloworld/inc/helloworld.hxx 2005-01-10 23:27:39.148140864 +0530
@@ -0,0 +1,12 @@
+namespace hello {
+
+ namespace world {
+
+ class HelloWorld {
+
+ public:
+ void adios();
+
+ };
+ };
+};
--- /dev/null 2004-08-25 23:04:59.000000000 +0530
+++ helloworld/source/helloworld.cxx 2005-01-10 23:28:42.946442048 +0530
@@ -0,0 +1,8 @@
+#include
+
+using namespace hello::world;
+
+void HelloWorld::adios()
+{
+ fprintf( stderr, "Hello, World! :-)\n" );
+}
The include header file provided in angle brackets causes it to be picked up
from the inc/ directory at the top, if quotes were used instead, the
current directory would be searched in for the header file.
[ Stephan Bergmann corrects: #include "foo" first searches through user
definable include directories for foo, then, if no foo has yet been found,
searches through compiler-specific include directories. #include
only searches through compiler-specific include directories. (From a
Standards perspective, this is not entirely precise, but should suffice
here.) With all the compilers we use for OOo, we set up the command
line so that all the OOo-specific include directories are added to the
set of compiler-specific include directories, not to the set of
user-definable include directories. Thus, there should be no difference
between using #include and #include "helloworld.hxx".
As a matter of style, I recommend using "..." for all OOo-specific
headers, and <...> for the official C++ headers (, ,
etc.) and system headers ( etc.) only. Also see
the thread at
http://www.openoffice.org/servlets/ReadMsg?list=dev&msgNo=8008. ]
With that in place, we launch 'build' again:
build -- version: 1.130
/home/raul/HEAD/ooo-build/build/src680-m65/helloworld/source
mkout -- version: 1.3
------------------------------
Making: ../unxlngi4.pro/misc/helloworld.dpc
dmake subdmake=true -f makefile.mk depend=t ALLDPC
Making : Dependencies
touch ../unxlngi4.pro/misc/helloworld.dpc
------------------------------
Making: ../unxlngi4.pro/slo/helloworld.obj
g++ -Wuninitialized -fmessage-length=0 -c -I. -I. -I../inc -I../inc -I../unx/inc -I../unxlngi4.pro/inc -I. -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/stl -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/external -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/res -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/stl -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc/Xp31 -I/usr/lib/SunJava2-1.4.2/include -I/usr/lib/SunJava2-1.4.2/include/linux -I/usr/lib/SunJava2-1.4.2/include/native_threads/include -I/usr/X11R6/include -I. -I../res -I. -O1 -pipe -mcpu=pentiumpro -Wno-ctor-dtor-privacy -include preinclude.h -fno-exceptions -fpic -DLINUX -DUNX -DVCL -DGCC -DC300 -DINTEL -DGXX_INCLUDE_PATH=/usr/include/g++ -DCVER=C300 -D_USE_NAMESPACE -DGLIBC=2 -DX86 -D_PTHREADS -D_REENTRANT -DNEW_SOLAR -D_USE_NAMESPACE=1 -DSTLPORT_VERSION=400 -D__DMAKE -DUNIX -DCPPU_ENV=gcc3 -DSUPD=680 -DPRODUCT -DNDEBUG -DPRODUCT_FULL -DOSL_DEBUG_LEVEL=0 -DOPTIMIZE -DEXCEPTIONS_OFF -DCUI -DSOLAR_JAVA -DSRC680 -DSHAREDLIB -D_DLL_ -DMULTITHREAD -o ../unxlngi4.pro/slo/helloworld.o /home/raul/HEAD/ooo-build/build/src680-m65/helloworld/source/helloworld.cxx
if ( -e ../unxlngi4.pro/slo/helloworld.o) touch ../unxlngi4.pro/slo/helloworld.obj
------------------------------
Making: ../unxlngi4.pro/slb/helloworld.lib
echo unxlngi4.pro/slo/helloworld.o | xargs -n1 > ../unxlngi4.pro/slb/helloworld.lib
-------------
Yo! Houston, we have an object file :-D
hmm... But where the objective is to use this function from a different
top-level project, we need a library we can link to, so let's make up a shared
object library that we can link to by adding in a couple of lines to our
makefile.mk:
--- helloworld/source/makefile.mk.orig 2005-01-11 11:37:30.282214135 +0530
+++ helloworld/source/makefile.mk 2005-01-11 11:37:23.945251721 +0530
@@ -13,6 +13,9 @@
SLOFILES=\
$(SLO)$/helloworld.obj
+SHL1TARGET= hworld$(UPD)$(DLLPOSTFIX)
+SHL1LIBS= $(SLB)$/helloworld.lib
+
# --- Targets ----------------------------------
.INCLUDE : target.mk
The $UPD and $DLLPOSTFIX result in making up the final library as
libhworld680li.so, the helloworld.lib includes the crucial symbols to link
against and we 'build':
build -- version: 1.130
/home/raul/HEAD/ooo-build/build/src680-m65/helloworld/source
mkout -- version: 1.3
------------------------------
Making: ../unxlngi4.pro/misc/helloworld.dpc
dmake subdmake=true -f makefile.mk depend=t ALLDPC
Making : Dependencies
touch ../unxlngi4.pro/misc/helloworld.dpc
------------------------------
Making: ../unxlngi4.pro/slo/helloworld.obj
g++ -Wuninitialized -fmessage-length=0 -c -I. -I. -I../inc -I../inc -I../unx/inc -I../unxlngi4.pro/inc -I. -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/stl -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/external -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/res -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/stl -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc/Xp31 -I/usr/lib/SunJava2-1.4.2/include -I/usr/lib/SunJava2-1.4.2/include/linux -I/usr/lib/SunJava2-1.4.2/include/native_threads/include -I/usr/X11R6/include -I. -I../res -I. -O1 -pipe -mcpu=pentiumpro -Wno-ctor-dtor-privacy -include preinclude.h -fno-exceptions -fpic -DLINUX -DUNX -DVCL -DGCC -DC300 -DINTEL -DGXX_INCLUDE_PATH=/usr/include/g++ -DCVER=C300 -D_USE_NAMESPACE -DGLIBC=2 -DX86 -D_PTHREADS -D_REENTRANT -DNEW_SOLAR -D_USE_NAMESPACE=1 -DSTLPORT_VERSION=400 -D__DMAKE -DUNIX -DCPPU_ENV=gcc3 -DSUPD=680 -DPRODUCT -DNDEBUG -DPRODUCT_FULL -DOSL_DEBUG_LEVEL=0 -DOPTIMIZE -DEXCEPTIONS_OFF -DCUI -DSOLAR_JAVA -DSRC680 -DSHAREDLIB -D_DLL_ -DMULTITHREAD -o ../unxlngi4.pro/slo/helloworld.o /home/raul/HEAD/ooo-build/build/src680-m65/helloworld/source/helloworld.cxx
if ( -e ../unxlngi4.pro/slo/helloworld.o) touch ../unxlngi4.pro/slo/helloworld.obj
------------------------------
Making: ../unxlngi4.pro/slb/helloworld.lib
echo unxlngi4.pro/slo/helloworld.o | xargs -n1 > ../unxlngi4.pro/slb/helloworld.lib
cp -f /home/raul/HEAD/ooo-build/build/src680-m65/solenv/src/default_description.xml ../unxlngi4.pro/misc/hworld_dflt.xml
xml2cmp -func ../unxlngi4.pro/misc/hworld_dflt_description.cxx ../unxlngi4.pro/misc/hworld_dflt.xml
File ../unxlngi4.pro/misc/hworld_dflt_description.cxx with component_getDescriptionFunc() is created now.
------------------------------
Making: ../unxlngi4.pro/slo/hworld_dflt_description.obj
g++ -Wuninitialized -fmessage-length=0 -c -I. -I. -I../inc -I../inc -I../unx/inc -I../unxlngi4.pro/inc -I. -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/stl -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/external -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/res -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/stl -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc/Xp31 -I/usr/lib/SunJava2-1.4.2/include -I/usr/lib/SunJava2-1.4.2/include/linux -I/usr/lib/SunJava2-1.4.2/include/native_threads/include -I/usr/X11R6/include -I. -I../res -I. -O1 -pipe -mcpu=pentiumpro -Wno-ctor-dtor-privacy -include preinclude.h -fno-exceptions -fpic -DLINUX -DUNX -DVCL -DGCC -DC300 -DINTEL -DGXX_INCLUDE_PATH=/usr/include/g++ -DCVER=C300 -D_USE_NAMESPACE -DGLIBC=2 -DX86 -D_PTHREADS -D_REENTRANT -DNEW_SOLAR -D_USE_NAMESPACE=1 -DSTLPORT_VERSION=400 -D__DMAKE -DUNIX -DCPPU_ENV=gcc3 -DSUPD=680 -DPRODUCT -DNDEBUG -DPRODUCT_FULL -DOSL_DEBUG_LEVEL=0 -DOPTIMIZE -DEXCEPTIONS_OFF -DCUI -DSOLAR_JAVA -DSRC680 -DSHAREDLIB -D_DLL_ -DMULTITHREAD -o ../unxlngi4.pro/slo/hworld_dflt_description.o ../unxlngi4.pro/misc/hworld_dflt_description.cxx
if ( -e ../unxlngi4.pro/slo/hworld_dflt_description.o) touch ../unxlngi4.pro/slo/hworld_dflt_description.obj
-----------------------------
SHL1FILTERFILE not set!
-----------------------------
dummy file to keep the dependencies for later use.
cp -f /home/raul/HEAD/ooo-build/build/src680-m65/solenv/src/version.c ../unxlngi4.pro/misc/hworld_dflt_version.c
------------------------------
Making: ../unxlngi4.pro/slo/hworld_dflt_version.obj
gcc -Wuninitialized -fmessage-length=0 -c -I. -I. -I../inc -I../inc -I../unx/inc -I../unxlngi4.pro/inc -I. -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/dont_use_stl -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/external -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc -I/home/raul/HEAD/ooo-build/build/src680-m65/res -I/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/inc/dont_use_stl -I/home/raul/HEAD/ooo-build/build/src680-m65/solenv/inc/Xp31 -I/usr/lib/SunJava2-1.4.2/include -I/usr/lib/SunJava2-1.4.2/include/linux -I/usr/lib/SunJava2-1.4.2/include/native_threads/include -I/usr/X11R6/include -I. -I../res -I. -O1 -pipe -mcpu=pentiumpro -fpic -DLINUX -DUNX -DVCL -DGCC -DC300 -DINTEL -DGXX_INCLUDE_PATH=/usr/include/g++ -DCVER=C300 -D_USE_NAMESPACE -DGLIBC=2 -DX86 -D_PTHREADS -D_REENTRANT -DNEW_SOLAR -D_USE_NAMESPACE=1 -DSTLPORT_VERSION=400 -D__DMAKE -DUNIX -DCPPU_ENV=gcc3 -DSUPD=680 -DPRODUCT -DNDEBUG -DPRODUCT_FULL -DOSL_DEBUG_LEVEL=0 -DOPTIMIZE -DEXCEPTIONS_OFF -DCUI -DSOLAR_JAVA -DSRC680 -DSHAREDLIB -D_DLL_ -o ../unxlngi4.pro/slo/hworld_dflt_version.o ../unxlngi4.pro/misc/hworld_dflt_version.c
if ( -e ../unxlngi4.pro/slo/hworld_dflt_version.o) touch ../unxlngi4.pro/slo/hworld_dflt_version.obj
------------------------------
Making: ../unxlngi4.pro/lib/libhworld680li.so
gcc -O2 -Bsymbolic -z combreloc -z defs -Wl,-rpath,'$ORIGIN' -shared -L../unxlngi4.pro/lib -L../lib -L/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/lib -L/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/lib -L/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/lib -L/usr/lib/SunJava2-1.4.2/lib -L/usr/lib/SunJava2-1.4.2/jre/lib/i386 -L/usr/lib/SunJava2-1.4.2/jre/lib/i386/client -L/usr/lib/SunJava2-1.4.2/jre/lib/i386/native_threads -L/usr/X11R6/lib ../unxlngi4.pro/slo/hworld_dflt_version.o ../unxlngi4.pro/slo/hworld_dflt_description.o -o ../unxlngi4.pro/lib/libhworld680li.so ../unxlngi4.pro/slo/helloworld.o -ldl -lpthread -lm -Wl,-Bdynamic -lstlport_gcc -lstdc++
rm -f ../unxlngi4.pro/lib/check_libhworld680li.so
mv ../unxlngi4.pro/lib/libhworld680li.so ../unxlngi4.pro/lib/check_libhworld680li.so
/home/raul/HEAD/ooo-build/build/src680-m65/solenv/bin/checkdll.sh -L../unxlngi4.pro/lib -L../lib -L/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/lib -L/home/raul/HEAD/ooo-build/build/src680-m65/solver/680/unxlngi4.pro/lib -L/home/raul/HEAD/ooo-build/build/src680-m65/solenv/unxlngi4/lib -L/usr/lib/SunJava2-1.4.2/lib -L/usr/lib/SunJava2-1.4.2/jre/lib/i386 -L/usr/lib/SunJava2-1.4.2/jre/lib/i386/client -L/usr/lib/SunJava2-1.4.2/jre/lib/i386/native_threads -L/usr/X11R6/lib ../unxlngi4.pro/lib/check_libhworld680li.so
Checking DLL ../unxlngi4.pro/lib/check_libhworld680li.so ...: ok
-rwxr-xr-x 1 raul users 7742 2005-01-11 13:14 ../unxlngi4.pro/lib/libhworld680li.so
-------------
We rock! :-)
So where would our wonderful library be ? In the intuitively named unxlngi4.pro
directory under the top-level helloworld project. Why the name ? unx for the
wonderful platform; lng for the operating system and compiler; i for the
processor; 4 for the incremental version of compiler user and pro for product ?
So based on that info wntmsci10.pro sounds logical too :-) The file specifying
these is in solenv/config/ssrx645.ini and solenv/config/ssrc680.ini, though I am
yet to figure out what an srx is from an src :-D
-------------------------------------------------------------------------------
helloworld-ooo-style.diff Next: client