Merge "CRT: vsprintf_s calling wrong function"
diff --git a/build.sh b/build.sh
index 6a15e3b..a02798d 100755
--- a/build.sh
+++ b/build.sh
@@ -225,6 +225,22 @@
export LDFLAGS="$BUILD_LDFLAGS"
}
+setup_mingw_build_env ()
+{
+ local BINPREFIX=$INSTALL_DIR/bin/x86_64-w64-mingw32-
+
+ CC=${BINPREFIX}gcc
+ CXX=${BINPREFIX}g++
+ LD=${BINPREFIX}ld
+ AS=${BINPREFIX}as
+ AR=${BINPREFIX}ar
+ RANLIB=${BINPREFIX}ranlib
+ RC=${BINPREFIX}windres
+ STRIP=${BINPREFIX}strip
+ export CC CXX LD AS AR RANLIB RC STRIP
+
+}
+
setup_install_env ()
{
export PATH=$INSTALL_DIR/bin:$PATH
@@ -321,13 +337,57 @@
mkdir -p $OUT_DIR/$PKGNAME &&
cd $OUT_DIR/$PKGNAME &&
log "$PKGNAME: Configuring" &&
- run $MINGW_W64_SRC/mingw-w64-tools/widl/configure --prefix=$INSTALL_DIR --target=$TARGET_TAG
+ run $MINGW_W64_SRC/mingw-w64-tools/widl/configure --prefix=$INSTALL_DIR --target=$TARGET_TAG --includedir=$OUT_DIR/install/x86_64-w64-mingw32-4.8/x86_64-w64-mingw32/
fail_panic "Can't configure mingw-64-tools"
log "$PKGNAME: Installing" &&
run make install -j$JOBS
) || exit 1
}
+build_mingw_pthreads_lib ()
+{
+ local PKGNAME=$1
+ local CONFIGURE_EXTRA_ARGS=$2
+
+ (
+ mkdir -p $OUT_DIR/$PKGNAME &&
+ cd $OUT_DIR/$PKGNAME &&
+ setup_mingw_build_env &&
+ log "$PKGNAME (32-bit): Configuring" &&
+ run $MINGW_W64_SRC/mingw-w64-libraries/winpthreads/configure --prefix=$PREFIX_FOR_TARGET --target=$TARGET_TAG --host=$TARGET_TAG $CONFIGURE_EXTRA_ARGS &&
+ fail_panic "Can't configure $PKGNAME"
+ ) || exit 1
+
+ # run it once so fakelib/libgcc.a is created and make subsequently fails
+ # while looking for libpthread.a. Copy libgcc.a to libpthread.a and
+ # retry.
+ cd $OUT_DIR/$PKGNAME && run make install -j$JOBS
+
+ (
+ cd $OUT_DIR/$PKGNAME
+ cp fakelib/libgcc.a fakelib/libpthread.a &&
+ log "$PKGNAME: Installing" &&
+ run make install -j$JOBS
+ ) || exit 1
+}
+
+build_mingw_pthreads ()
+{
+ local PKGNAME=$1
+
+ (
+ CFLAGS="$CFLAGS -m32"
+ CXXFLAGS="$CXXFLAGS -m32"
+ LDFLAGS="-m32"
+ RCFLAGS="-F pe-i386"
+ export CFLAGS CXXFLAGS LDFLAGS RCFLAGS
+ build_mingw_pthreads_lib $PKGNAME-32 "--build=$BUILD_TAG32 --libdir=$PREFIX_FOR_TARGET/lib32"
+ (run cp $PREFIX_FOR_TARGET/bin/libwinpthread-1.dll $PREFIX_FOR_TARGET/lib32) || exit 1
+ )
+
+ build_mingw_pthreads_lib $PKGNAME-64 "--build=$BUILD_TAG64"
+}
+
# Install the right mingw64 headers into the sysroot
build_mingw_headers ()
{
@@ -431,6 +491,7 @@
fi
var_append GCC_CONFIGURE_OPTIONS "--enable-languages=c,c++"
var_append GCC_CONFIGURE_OPTIONS "--with-sysroot=$INSTALL_DIR"
+var_append GCC_CONFIGURE_OPTIONS "--enable-threads=posix"
# A bug in MinGW-w64 forces us to build and use widl.
build_mingw_tools mingw-w64-tools
@@ -445,6 +506,9 @@
build_mingw_crt mingw-w64-crt $CRT_CONFIGURE_OPTIONS
+# Build winpthreads
+build_mingw_pthreads mingw-w64-pthreads
+
build_libgcc gcc-$GCC_VERSION
# Let's generate the licenses/ directory