summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rwxr-xr-xtools/freebsd-excludes35
-rwxr-xr-xtools/make-shared-from-static218
-rw-r--r--tools/mxe-activate16
-rwxr-xr-xtools/patch-tool-mxe3
4 files changed, 233 insertions, 39 deletions
diff --git a/tools/freebsd-excludes b/tools/freebsd-excludes
deleted file mode 100755
index b94e248..0000000
--- a/tools/freebsd-excludes
+++ /dev/null
@@ -1,35 +0,0 @@
-gmake \
-gtksourceviewmm2_BUILD_x86_64-w64-mingw32= \
-graphicsmagick_BUILD= \
-openexr_BUILD= \
-opencv_BUILD= \
-pcl_BUILD= \
-vigra_BUILD= \
-vtk6_BUILD= \
-qwt_BUILD= \
-ocaml-cairo_BUILD= \
-ocaml-findlib_BUILD= \
-ocaml-lablgtk2_BUILD= \
-ocaml-camlimages_BUILD= \
-ocaml-flexdll_BUILD= \
-ocaml-native_BUILD= \
-ocaml-core_BUILD= \
-ocaml-lablgl_BUILD= \
-ocaml-xml-light_BUILD= \
-qtactiveqt_BUILD= \
-qtbase_BUILD= \
-qtdeclarative_BUILD= \
-qtgraphicaleffects_BUILD= \
-qtimageformats_BUILD= \
-qtjsbackend_BUILD= \
-qtmultimedia_BUILD= \
-qtquickcontrols_BUILD= \
-qtquick1_BUILD= \
-qtscript_BUILD= \
-qtsensors_BUILD= \
-qtserialport_BUILD= \
-qtsvg_BUILD= \
-qttools_BUILD= \
-qttranslations_BUILD= \
-qtxmlpatterns_BUILD= \
--j4 -k
diff --git a/tools/make-shared-from-static b/tools/make-shared-from-static
new file mode 100755
index 0000000..cd720b2
--- /dev/null
+++ b/tools/make-shared-from-static
@@ -0,0 +1,218 @@
+#!/usr/bin/env bash
+
+set -e
+
+LD=
+AR=
+INSTALL=
+infile=
+outfile=
+libdir=
+bindir=
+install=false
+windowsdll=false
+msvc=false
+msvclibmode=false
+libprefix=
+libsuffix=
+LIBS=
+
+topdir=$(pwd)
+tmpdir=$topdir/make-shared-from-static.$$
+
+#trap "cd $topdir; rm -rf $tmpdir" 1 2 15
+
+for arg
+do
+ case "$1" in
+ --install)
+ install=true
+ shift
+ if [ $# -gt 0 ]; then
+ INSTALL="$1"
+ shift
+ else
+ echo "make-shared-from-static: expecting argument for --install option" 1>&2
+ exit 1
+ fi
+ ;;
+ --windowsdll)
+ shift
+ windowsdll=true
+ ;;
+ --msvc)
+ shift
+ msvc=true
+ ;;
+ --bindir)
+ shift
+ if [ $# -gt 0 ]; then
+ bindir="$1"
+ shift
+ else
+ echo "make-shared-from-static: expecting argument for --bindir option" 1>&2
+ exit 1
+ fi
+ ;;
+ --libdir)
+ shift
+ if [ $# -gt 0 ]; then
+ libdir="$1"
+ shift
+ else
+ echo "make-shared-from-static: expecting argument for --libdir option" 1>&2
+ exit 1
+ fi
+ ;;
+ --ld)
+ shift
+ if [ $# -gt 0 ]; then
+ LD="$1"
+ shift
+ else
+ echo "make-shared-from-static: expecting argument for --ld option" 1>&2
+ exit 1
+ fi
+ ;;
+ --ar)
+ shift
+ if [ $# -gt 0 ]; then
+ AR="$1"
+ shift
+ else
+ echo "make-shared-from-static: expecting argument for --ar option" 1>&2
+ exit 1
+ fi
+ ;;
+ --libprefix)
+ shift
+ if [ $# -gt 0 ]; then
+ libprefix="$1"
+ shift
+ else
+ echo "make-shared-from-static: expecting argument for --libprefix option" 1>&2
+ exit 1
+ fi
+ ;;
+ --libsuffix)
+ shift
+ if [ $# -gt 0 ]; then
+ libsuffix="$1"
+ shift
+ else
+ echo "make-shared-from-static: expecting argument for --libsuffix option" 1>&2
+ exit 1
+ fi
+ ;;
+ -l*)
+ LIBS="$LIBS $1"
+ shift
+ ;;
+ *.a)
+ if [ -z "$infile" ]; then
+ case "$1" in
+ /*)
+ infile="$1"
+ ;;
+ *)
+ infile=$(pwd)/$1
+ ;;
+ esac
+ shift
+ else
+ echo "make-shared-from-static: only one input file allowed" 1>&2
+ exit 1
+ fi
+ ;;
+ esac
+done
+
+if [ -n "$infile" ]; then
+ base_infile=$(basename $infile)
+ if $windowsdll; then
+ if $msvc; then
+ base_name=`echo $base_infile | sed -n -e 's/^lib\(.*\)\.a$/\1/p'`
+ outfile="${libprefix}${base_name}${libsuffix}.dll"
+ implibfile="$base_name.lib"
+ # Modern libtool won't create .a files, but will create directly .lib files.
+ # If the .a file does not exist, check for an existing .lib file.
+ if [ ! -f "$infile" ]; then
+ msvc_infiles="`echo $infile | sed -e 's/\.a$/.lib/'` \
+`dirname \"$infile\"`/`echo $base_infile | sed -e 's/\.a$/.lib/' -e 's/^lib//'`"
+ for msvc_infile in $msvc_infiles; do
+ if [ -f "$msvc_infile" ]; then
+ infile="$msvc_infile"
+ msvclibmode=true
+ break
+ fi
+ done
+ fi
+ else
+ outfile=$(echo $base_infile | sed 's/\.a$/.dll/')
+ implibfile="$outfile.a"
+ fi
+ else
+ outfile=$(echo $base_infile | sed 's/\.a$/.so/')
+ fi
+else
+ echo "make-shared-from-static: no input file specified" 1>&2
+ exit 1
+fi
+
+NM=nm
+SED=sed
+global_symbol_pipe="sed -n -e 's/^.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][ ]*_\\([_A-Za-z][_A-iZa-z0-9]*\\)\\{0,1\\}\$/\\1 _\\2 \\2/p' | sed '/ __gnu_lto/d'"
+# Ignore DATA symbols for now. They should be be properly exported from
+# the source code using dllexport. They can't be re-exported manually like
+# this using MSVC.
+#export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED -e '/^[BCDGRS][ ]/s/.*[ ]\\\\([^ ]*\\\\)/\\\\1,DATA/' | \$SED -e '/^[AITW][ ]/s/.*[ ]//' | sort | uniq >> \$export_symbols"
+export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | \$SED -e '/^[BCDGRS][ ]/d' | \$SED -e '/^[AITW][ ]/s/.*[ ]//' | sort | uniq >> \$export_symbols"
+
+mkdir $tmpdir
+
+(
+ cd $tmpdir
+
+ $msvclibmode || $AR x $infile
+
+ LIBDIR_ARGS=
+ if [ -n "$libdir" ]; then
+ LIBDIR_ARGS="-L$libdir"
+ fi
+
+ if $windowsdll; then
+ if $msvc; then
+ export_symbols="$base_name.def"
+ echo EXPORTS > $export_symbols
+ if $msvclibmode; then
+ libobjs="$infile"
+ else
+ libobjs="*.o"
+ fi
+ convenience=
+ eval cmd=\"$export_symbols_cmds\"
+ eval "$cmd"
+ link_args="-Wl,-def:$export_symbols $libobjs"
+ else
+ link_args="-Wl,--export-all-symbols -Wl,--enable-auto-import -Wl,--enable-auto-image-base *.o"
+ fi
+ set -x
+ $LD -shared $link_args -Wl,--out-implib="$implibfile" -o "$outfile" $LIBDIR_ARGS $LIBS
+ else
+ $LD -shared -o $outfile *.o $LIBDIR_ARGS $LIBS
+ fi
+
+ if $install; then
+ if $windowsdll; then
+ $INSTALL -d "$libdir"
+ $INSTALL -d "$bindir"
+ $INSTALL -m755 "$implibfile" "$libdir/$implibfile"
+ $INSTALL -m755 "$outfile" "$bindir/$outfile"
+ else
+ $INSTALL -d "$libdir"
+ $INSTALL -m755 "$outfile" "$libdir/$outfile"
+ fi
+ fi
+)
+
+rm -rf $tmpdir
diff --git a/tools/mxe-activate b/tools/mxe-activate
index d7b80ca..461b547 100644
--- a/tools/mxe-activate
+++ b/tools/mxe-activate
@@ -1,8 +1,12 @@
export MXE_DIR=`pwd`
-export PATH=$MXE_DIR/usr/bin:$PATH
+export BUILD=`$MXE_DIR/ext/config.guess`
+export PATH=$MXE_DIR/usr/$BUILD/bin:$MXE_DIR/usr/bin:$PATH
MAKE=`gmake --help >/dev/null 2>&1 && echo g`make
SED=`gsed --help >/dev/null 2>&1 && echo g`sed
-MXE_TARGET_LIST="`grep 'MXE_TARGET_LIST.*:=' Makefile | $SED -n 's,^.*:= \(.*\)$,\1,p'`"
+
+MXE_TRIPLETS=`grep ^MXE_TRIPLETS Makefile | cut -d '=' -f2 | cut -d ' ' -f2- | tr ' ' ','`
+MXE_LIB_TYPES=`grep ^MXE_LIB_TYPES Makefile | cut -d '=' -f2 | cut -d ' ' -f2- | tr ' ' ','`
+MXE_TARGET_LIST=`eval "echo {$MXE_TRIPLETS}.{$MXE_LIB_TYPES}"`
alias mxe='$MAKE -C $MXE_DIR --no-print-directory'
@@ -43,8 +47,14 @@ _mxe()
COMPREPLY=( $(compgen -W "${_pkgs}" -- ${cur}) )
return 0
;;
+ show-*deps-*)
+ local base=`echo ${cur} | $SED -n 's,\(show.*deps-\).*,\1,p'`
+ local _pkgs=$( for x in ${pkgs}; do echo $base${x} ; done )
+ COMPREPLY=( $(compgen -W "${_pkgs}" -- ${cur}) )
+ return 0
+ ;;
[!-]*)
- pkgs+=" build-only- check-requirements clean clean-pkg download download- update-checksum-"
+ pkgs+=" build-only- check-requirements clean clean-pkg download download- update-checksum- show-deps- show-downstream-deps- show-upstream-deps-"
COMPREPLY=( $(compgen -W "${pkgs}" -- ${cur}) )
return 0
;;
diff --git a/tools/patch-tool-mxe b/tools/patch-tool-mxe
index 208655a..9c3c383 100755
--- a/tools/patch-tool-mxe
+++ b/tools/patch-tool-mxe
@@ -19,7 +19,8 @@ setupEnv() {
# John Doe <John Doe@acme.org>
export author=`git var GIT_AUTHOR_IDENT | sed 's/^\(.* [<].*[>]\).*$/\1/'`
- export pkg_version=$(sed -n "s/^.* id=\"${pkg}-version\">\([^<]*\)<.*$/\1/p" "${mxedir}/index.html")
+ export pkg_version=`grep '^$(PKG)_VERSION' $mxedir/src/$pkg.mk | \
+ sed 's/.*:= \(.*\)/\1/'`
export pkg_short_version=`echo $pkg_version | sed s/'\(.*\)\.[^.]*$'/'\1'/`