]> git.sur5r.net Git - bacula/bacula/commitdiff
Get pthreads built and build bacula-fd.exe
authorKern Sibbald <kern@sibbald.com>
Tue, 25 Apr 2006 13:42:16 +0000 (13:42 +0000)
committerKern Sibbald <kern@sibbald.com>
Tue, 25 Apr 2006 13:42:16 +0000 (13:42 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@2965 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/win32/.cvsignore
bacula/src/win32/Makefile.in
bacula/src/win32/build-win32-cross-tools [new file with mode: 0755]

index e528f4bfebf018645aaab5fc27125f52e9511fe5..4184a0b8fe0232872f28f1ca14d5e11ff610b682 100644 (file)
@@ -1,3 +1,4 @@
+pthreadGCE.dll
 winres.res
 Makefile.vcpp
 install
index be614a096582a01d4126b28163e2d1922949b5a0..58b1238bf98de32de11380cbc3e392aace7f7dd8 100644 (file)
@@ -23,7 +23,7 @@ INCLUDE_ICONS = -I ../filed/win32
 INCLUDE_OPENSSL = -I$(CROSSTOOLS)/openssl/include
 
 LIB_MINGW = $(MINGW)/mingw32/lib
-LIB_PTHREADS = $(DEPKGS)/pthreads/libpthreadGCE.a
+LIB_PTHREADS = $(DEPKGS)/pthreads/pthreadGCE.dll
 #LIB_ZLIB = $(DEPKGS)/libz.a
 #LIB_SSL = $(DEPKGS)/openssl/libssl.a
 #LIB_CRYPTO = $(DEPKGS)/openssl/libcrypto.a
@@ -177,7 +177,7 @@ wintray.o:  ../filed/win32/wintray.cpp
        $(CXX) -c ../filed/win32/wintray.cpp -o $(OBJDIR)/wintray.o
 
 winres.res:    ../filed/win32/winres.rc
-       $(WINDRES) $(INCLUDE_ICONS) -o coff ../filed/win32/winres.rc -o $(OBJDIR)/winres.res
+       $(WINDRES) $(INCLUDE_ICONS) -O coff ../filed/win32/winres.rc -o $(OBJDIR)/winres.res
 #      $(WINDRES) --help
 #      mingw32-nm winres.res
 
@@ -249,6 +249,7 @@ LIB_OBJS = \
        $(OBJDIR)/btimers.o \
        $(OBJDIR)/cram-md5.o \
        $(OBJDIR)/crc32.o \
+       $(OBJDIR)/crypto.o \
        $(OBJDIR)/daemon.o \
        $(OBJDIR)/dlist.o \
        $(OBJDIR)/edit.o \
@@ -353,6 +354,9 @@ cram-md5.o: ../lib/cram-md5.c
 crc32.o:       ../lib/crc32.c
        $(CXX) -c ../lib/crc32.c -o $(OBJDIR)/crc32.o
 
+crypto.o:      ../lib/crypto.c
+       $(CXX) -c ../lib/crypto.c -o $(OBJDIR)/crypto.o
+
 daemon.o:      ../lib/daemon.c
        $(CXX) -c ../lib/daemon.c -o $(OBJDIR)/daemon.o
 
@@ -449,10 +453,12 @@ all: bacula-fd.exe
 
 clean:
        rm -f $(OBJDIR)/*.o $(OBJDIR)/bacula-fd.exe $(OBJDIR)/winres.res
+       rm -f pthreadGCE.dll
 
 # Link the executable ...
 bacula-fd.exe: $(OBJS)
        $(CXX) $(OBJS) $(LIBS) -o $(OBJDIR)/bacula-fd.exe
+       cp -f $(DEPKGS)/pthreads/pthreadGCE.dll .
 
 # TODO ...
 # Fix vss files: check for consistent levels of pointer indirection
diff --git a/bacula/src/win32/build-win32-cross-tools b/bacula/src/win32/build-win32-cross-tools
new file mode 100755 (executable)
index 0000000..f95aa35
--- /dev/null
@@ -0,0 +1,457 @@
+#!/bin/sh
+
+# This is my script for building a complete MinGW cross-compiler toolchain
+# that runs under Linux to produce executables that run under Windows.  It
+# probably works (or can easily be adapted to work) under any unix system.
+#
+# It is based in large part on Sam Lantinga's script, which in turn was
+# based partly on Ray Kelm's script, which in turn was built on
+# Mo Dejong's script for doing the same, but with some added fixes.
+#
+# My changes:
+#       1. Adapted the script to the new packaging of MinGW GCC, which is
+#          currently split into core and auxiliary components.
+#       2. The script now determines the GCC and BINUTILS directory name
+#          directly from the tar file contents.  This gets around common
+#          problems due to the directory names not always following the
+#          expected patterns.
+#       3. Grouped together and simplified the macros that users need to
+#          define.
+#       4. Made optional components truly optional -- leave the
+#          corresponding archive names blank and they will be ignored.
+#       5. Included an option to purge the installation directory before
+#          installing the current cross-compiler.
+#
+# NOTE: If you choose a destination directory for the installation (set
+# in the macro PREFIX) for which you do not have write access, you will
+# need to run this script with root (or equivalent) privileges.
+#
+#
+# Updated by Igor Mikolic-Torreira <igormt@alumni.caltech.edu>
+
+
+
+#-----------------------------------------------------
+#
+# BEGIN USER SETTINGS
+#
+# You need to review and adjust the macros that follow
+#
+#-----------------------------------------------------
+
+
+# What flavor of GCC cross-compiler are we building?
+
+TARGET=mingw32
+
+# What directory will the cross-compiler be built in?
+# This is the directory into which source archives will
+# be downloaded, expanded, compiled, etc.  You need to
+# have write-access to this directory.  If you leave it
+# blank, it defaults to the current directory.
+
+#BUILDDIR=/data/cross-tools-4.1.0
+BUILDDIR=../../../mingw
+cwd=`pwd`
+cd ${BUILDDIR}
+# Now make builddir absolute  
+BUILDDIR=`pwd`
+cd ${cwd}
+
+mkdir -p ${BUILDDIR}
+mkdir -p ${BUILDDIR}/${TARGET}
+
+# Where does the cross-compiler go?
+# This should be the directory into which your cross-compiler
+# will be installed.  Remember that if you set this to a directory
+# that only root has write access to, you will need to run this
+# script as root.
+
+PREFIX=${BUILDDIR}/mingw32
+
+# Purge anything and everything already in the $PREFIX
+#(also known as the destination or installation) directory?
+# Set to "Y" to purge, any other value omits the purge step.
+
+PURGE_DIR="Y"
+
+
+# Set the following to the files from the current MinGW release
+# (or whichever MinGW release you wish to build and install)
+# You need to set both the URL they will be downloaded from
+# and the exact name of the individual component files.
+
+MINGW_URL="http://heanet.dl.sourceforge.net/sourceforge/mingw"
+
+# GCC_CORE is required; the other components are optional.
+# Set any you don't want to "".  You need binutils,
+# mingw runtime and w32api; do not ever set those to "".
+
+GCC_CORE_ARCHIVE="gcc-core-3.4.5-20060117-1-src.tar.gz"
+GCC_GPP_ARCHIVE="gcc-g++-3.4.5-20060117-1-src.tar.gz"
+GCC_G77_ARCHIVE=""
+GCC_OBJC_ARCHIVE=""
+GCC_JAVA_ARCHIVE=""
+GCC_ADA_ARCHIVE=""
+GCC_PATCH=""
+
+# GCC_G77_ARCHIVE="gcc-g77-3.4.2-20040916-1-src.tar.gz"
+# GCC_OBJC_ARCHIVE="gcc-objc-3.4.2-20040916-1-src.tar.gz"
+# GCC_JAVA_ARCHIVE="gcc-java-3.4.2-20040916-1-src.tar.gz"
+
+BINUTILS_ARCHIVE="binutils-2.16.91-20060119-1-src.tar.gz"
+
+MINGW_ARCHIVE="mingw-runtime-3.9.tar.gz"
+
+W32API_ARCHIVE="w32api-3.7.tar.gz"
+
+
+# These are the files from the SDL website
+# These are optional, set them to "" if you don't want them)
+
+SDL_URL="http://www.libsdl.org/extras/win32/common"
+
+OPENGL_ARCHIVE="opengl-devel.tar.gz"
+DIRECTX_ARCHIVE="directx-devel.tar.gz"
+
+
+
+#-----------------------------------------------------
+#
+# END USER SETTINGS
+#
+# The remainder of the script should not neet any edits
+#
+#-----------------------------------------------------
+
+
+
+# Make sure these are initialized as we want them
+
+GCC_CORE=""
+BINUTILS=""
+GCC_LANGS="c"
+
+
+# Set our build directory and where our sources will go
+
+if [ "x$BUILDDIR" = "x" ]; then
+        # Default to the current directory
+        BUILDDIR=$(pwd)
+fi
+SRCDIR="$BUILDDIR/source"
+
+
+# Need install directory first on the path so gcc can find binutils
+
+PATH="$PREFIX/bin:$PATH"
+
+
+
+#-----------------------------------------------------
+#
+# Functions that do most of the work
+#
+#-----------------------------------------------------
+
+
+function download_files
+{
+        # Download a file from a given url, only if it is not present
+        mkdir -p "$SRCDIR"
+
+        # Make sure wget is installed
+        if test "x`which wget`" = "x" ; then
+                echo "You need to install wget."
+                exit 1
+        fi
+        download_file "$GCC_CORE_ARCHIVE" "$MINGW_URL"
+        if [ "x$GCC_GPP_ARCHIVE" != "x" ]; then
+                download_file "$GCC_GPP_ARCHIVE" "$MINGW_URL"
+        fi
+        if [ "x$GCC_G77_ARCHIVE" != "x" ]; then
+                download_file "$GCC_G77_ARCHIVE" "$MINGW_URL"
+        fi
+        if [ "x$GCC_OBJC_ARCHIVE" != "x" ]; then
+                download_file "$GCC_OBJC_ARCHIVE" "$MINGW_URL"
+        fi
+        if [ "x$GCC_JAVA_ARCHIVE" != "x" ]; then
+                download_file "$GCC_JAVA_ARCHIVE" "$MINGW_URL"
+        fi
+        if [ "x$GCC_ADA_ARCHIVE" != "x" ]; then
+                download_file "$GCC_ADA_ARCHIVE" "$MINGW_URL"
+        fi
+
+        download_file "$BINUTILS_ARCHIVE" "$MINGW_URL"
+        download_file "$MINGW_ARCHIVE" "$MINGW_URL"
+        download_file "$W32API_ARCHIVE" "$MINGW_URL"
+
+        if [ "x$OPENGL_ARCHIVE" != "x" ]; then
+                download_file "$OPENGL_ARCHIVE" "$SDL_URL"
+        fi
+        if [ "x$DIRECTX_ARCHIVE" != "x" ]; then
+                download_file "$DIRECTX_ARCHIVE" "$SDL_URL"
+        fi
+}
+
+
+function download_file
+{
+        cd "$SRCDIR"
+        if test ! -f $1 ; then
+                echo "Downloading $1"
+                wget "$2/$1"
+                if test ! -f $1 ; then
+                        echo "Could not download $1"
+                        exit 1
+                fi
+        else
+                echo "Found $1 in the srcdir $SRCDIR"
+        fi
+        cd "$BUILDDIR"
+}
+
+
+function purge_existing_install
+{
+        echo "Purging the existing files in $PREFIX"
+        if cd "$PREFIX"; then
+                rm -rf *
+        fi
+        cd "$BUILDDIR"
+}
+
+
+function install_libs
+{
+        echo "Installing cross libs and includes"
+        mkdir -p "$PREFIX/$TARGET"
+        cd "$PREFIX/$TARGET"
+
+        tar -xzf "$SRCDIR/$MINGW_ARCHIVE"
+        tar -xzf "$SRCDIR/$W32API_ARCHIVE"
+
+        if [ "x$OPENGL_ARCHIVE" != "x" ]; then
+                tar -xzf "$SRCDIR/$OPENGL_ARCHIVE"
+        fi
+
+        if [ "x$DIRECTX_ARCHIVE" != "x" ]; then
+                tar -xzf "$SRCDIR/$DIRECTX_ARCHIVE"
+        fi
+
+        cd "$BUILDDIR"
+}
+
+
+function extract_binutils
+{
+        cd "$SRCDIR"
+        BINUTILS=`tar -tzf "$SRCDIR/$BINUTILS_ARCHIVE" | head -n 1`
+        if [ "x${BINUTILS}" != "x./" ]; then
+           rm -rf "$BINUTILS"
+        fi
+        echo "Extracting binutils"
+        tar -xzf "$SRCDIR/$BINUTILS_ARCHIVE"
+        cd "$BUILDDIR"
+}
+
+
+function configure_binutils
+{
+        cd "$BUILDDIR"
+        rm -rf "binutils-$TARGET"
+        mkdir "binutils-$TARGET"
+        cd "binutils-$TARGET"
+        echo "Configuring binutils"
+        "$SRCDIR/$BINUTILS/configure" --prefix="$PREFIX" --target=$TARGET --disable-nls \
+                --with-gcc --with-gnu-as --with-gnu-ld --disable-shared &> configure.log
+        cd "$BUILDDIR"
+}
+
+
+function build_binutils
+{
+        cd "$BUILDDIR/binutils-$TARGET"
+        echo "Building binutils"
+        make CFLAGS="-O2 -fno-exceptions" LDFLAGS="-s" &> make.log
+        if test $? -ne 0; then
+                echo "make of binutils failed - log available: binutils-$TARGET/make.log"
+                exit 1
+        fi
+        cd "$BUILDDIR"
+}
+
+
+function install_binutils
+{
+        cd "$BUILDDIR/binutils-$TARGET"
+        echo "Installing binutils"
+        make install &> make-install.log
+        if test $? -ne 0; then
+                echo "install of binutils failed - log available: binutils-$TARGET/make-install.log"
+                exit 1
+        fi
+        cd "$BUILDDIR"
+}
+
+
+function extract_gcc
+{
+        cd "$SRCDIR"
+        GCC=`tar -tzf "$SRCDIR/$GCC_CORE_ARCHIVE" | head -n 1`
+#       rm -rf "$GCC"
+        echo "====== GCC ${GCC} ========="
+        echo "Extracting gcc"
+        tar -xzf "$SRCDIR/$GCC_CORE_ARCHIVE"
+        if [ "x$GCC_GPP_ARCHIVE" != "x" ]; then
+                GCC_LANGS=${GCC_LANGS}",c++"
+                tar -xzf "$SRCDIR/$GCC_GPP_ARCHIVE"
+        fi
+        if [ "x$GCC_G77_ARCHIVE" != "x" ]; then
+                GCC_LANGS=${GCC_LANGS}",f77"
+                tar -xzf "$SRCDIR/$GCC_G77_ARCHIVE"
+        fi
+        if [ "x$GCC_OBJC_ARCHIVE" != "x" ]; then
+                GCC_LANGS=${GCC_LANGS}",objc"
+                tar -xzf "$SRCDIR/$GCC_OBJC_ARCHIVE"
+        fi
+        if [ "x$GCC_JAVA_ARCHIVE" != "x" ]; then
+                GCC_LANGS=${GCC_LANGS}",java"
+                tar -xzf "$SRCDIR/$GCC_JAVA_ARCHIVE"
+        fi
+        if [ "x$GCC_ADA_ARCHIVE" != "x" ]; then
+                GCC_LANGS=${GCC_LANGS}",ada"
+                tar -xzf "$SRCDIR/$GCC_ADA_ARCHIVE"
+        fi
+        cd "$BUILDDIR"
+}
+
+
+function patch_gcc
+{
+        if [ "$GCC_PATCH" != "" ]; then
+                echo "Patching gcc"
+                cd "$SRCDIR/$GCC"
+                patch -p1 < "$SRCDIR/$GCC_PATCH"
+                cd "$BUILDDIR"
+        fi
+}
+
+
+function configure_gcc
+{
+        cd "$BUILDDIR"
+        rm -rf "gcc-$TARGET"
+        mkdir "gcc-$TARGET"
+        cd "gcc-$TARGET"
+        echo "Configuring gcc"
+        "$SRCDIR/$GCC/configure" -v \
+                --prefix="$PREFIX" --target=$TARGET \
+                --with-headers="$PREFIX/$TARGET/include" \
+                --with-gcc --with-gnu-ld --with-gnu-as \
+                --enable-threads --disable-nls --enable-languages=$GCC_LANGS \
+                --disable-win32-registry --disable-shared --enable-sjlj-exceptions --enable-libgcj \
+                --disable-java-awt --without-x --enable-java-gc=boehm --disable-libgcj-debug \
+                --enable-interpreter --enable-hash-synchronization --enable-libstdcxx-debug \
+                &> configure.log
+        cd "$BUILDDIR"
+}
+
+
+function build_gcc
+{
+        cd "$BUILDDIR/gcc-$TARGET"
+        echo "Building gcc"
+        make CFLAGS="-O2" CXXFLAGS="-O2" GCJFLAGS="-O2" LDFLAGS="-s" DEBUG_FLAGS="-g0" &> make.log
+        if test $? -ne 0; then
+                echo "make of gcc failed - log available: gcc-$TARGET/make.log"
+                exit 1
+        fi
+        if [ "x$GCC_ADA" != "x" ]; then
+                cd gcc
+                make "CFLAGS=-O2" "LDFLAGS=-s" gnatlib_and_tools &> make-gnatlib.log
+                if test $? -ne 0; then
+                        echo "make of gnatlib and tools failed - log available: gcc-$TARGET/make-gnatlib.log"
+                        exit 1
+                fi
+        fi
+        cd "$BUILDDIR"
+}
+
+
+function install_gcc
+{
+        cd "$BUILDDIR/gcc-$TARGET"
+        echo "Installing gcc"
+        make install &> make-install.log
+        if test $? -ne 0; then
+                echo "install of gcc failed - log available: gcc-$TARGET/make-install.log"
+                exit 1
+        fi
+        cd "$BUILDDIR"
+}
+
+
+function final_tweaks
+{
+        echo "Finalizing installation"
+
+        # remove gcc build headers
+        rm -rf "$PREFIX/$TARGET/sys-include"
+
+        # Add extra binary links
+        if [ ! -f "$PREFIX/$TARGET/bin/objdump" ]; then
+                ln "$PREFIX/bin/$TARGET-objdump" "$PREFIX/$TARGET/bin/objdump"
+        fi
+
+        # make cc and c++ symlinks to gcc and g++
+        if [ ! -f "$PREFIX/$TARGET/bin/g++" ]; then
+                ln "$PREFIX/bin/$TARGET-g++" "$PREFIX/$TARGET/bin/g++"
+        fi
+        if [ ! -f "$PREFIX/$TARGET/bin/cc" ]; then
+                ln -s "gcc" "$PREFIX/$TARGET/bin/cc"
+        fi
+        if [ ! -f "$PREFIX/$TARGET/bin/c++" ]; then
+                ln -s "g++" "$PREFIX/$TARGET/bin/c++"
+        fi
+
+        # strip all the binaries
+        ls "$PREFIX"/bin/* "$PREFIX/$TARGET"/bin/* | egrep -v '.dll$' | egrep -v 'gccbug$' |
+        while read file; do
+                strip "$file"
+        done
+
+        echo "Installation complete!"
+}
+
+
+
+#
+# Main part of the script
+#
+
+download_files
+
+if [ "x$PURGE_DIR" = "xY" ]; then
+        purge_existing_install
+fi
+
+install_libs
+
+extract_binutils
+configure_binutils
+build_binutils
+install_binutils
+
+extract_gcc
+patch_gcc
+configure_gcc
+build_gcc
+install_gcc
+
+final_tweaks
+
+
+#
+# End
+#