Viktor Szakatssecure URLs42cf4967 years agoHistory
222 lines · 5.1 KB · Text
RawDownload
#!/usr/bin/env bash # Taken from:# https://hg.octave.org/mxe-octave/file/tip/tools/make-shared-from-static set -e . tools/compat-init.sh LD=AR=INSTALL=infile=outfile=libdir=bindir=install=falsewindowsdll=falsemsvc=falsemsvclibmode=falselibprefix=libsuffix=LIBS= topdir=$(pwd)tmpdir=$topdir/make-shared-from-static.$$ #trap "cd $topdir; rm -rf $tmpdir" 1 2 15 for argdo  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    ;;  esacdone 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/')  fielse  echo "make-shared-from-static: no input file specified" 1>&2  exit 1fi NM=nmglobal_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

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t