mirror of https://github.com/FFmpeg/FFmpeg.git
This allows MSVC 2013 and ICL to build with no external dependencies. Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>pull/49/head
parent
8f8bc92365
commit
dedfa00107
2 changed files with 133 additions and 1 deletions
@ -0,0 +1,132 @@ |
||||
#!/bin/sh |
||||
|
||||
# Copyright (c) 2013, Derek Buitenhuis |
||||
# |
||||
# Permission to use, copy, modify, and/or distribute this software for any |
||||
# purpose with or without fee is hereby granted, provided that the above |
||||
# copyright notice and this permission notice appear in all copies. |
||||
# |
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
||||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
||||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
||||
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
||||
|
||||
# mktemp isn't POSIX, so supply an implementation |
||||
mktemp() { |
||||
echo "${2%%XXX*}.${HOSTNAME}.${UID}.$$" |
||||
} |
||||
|
||||
if [ $# -lt 2 ]; then |
||||
echo "Usage: makedef <version_script> <objects>" >&2 |
||||
exit 0 |
||||
fi |
||||
|
||||
vscript=$1 |
||||
shift |
||||
|
||||
if [ ! -f "$vscript" ]; then |
||||
echo "Version script does not exist" >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
for object in "$@"; do |
||||
if [ ! -f "$object" ]; then |
||||
echo "Object does not exist: ${object}" >&2 |
||||
exit 1 |
||||
fi |
||||
done |
||||
|
||||
# Create a lib temporarily to dump symbols from. |
||||
# It's just much easier to do it this way |
||||
libname=$(mktemp -u "library").lib |
||||
|
||||
trap 'rm -f -- $libname' EXIT |
||||
|
||||
lib -out:${libname} $@ >/dev/null |
||||
if [ $? != 0 ]; then |
||||
echo "Could not create temporary library." >&2 |
||||
exit 1 |
||||
fi |
||||
|
||||
IFS=' |
||||
' |
||||
|
||||
# Determine if we're building for x86 or x86_64 and |
||||
# set the symbol prefix accordingly. |
||||
prefix="" |
||||
arch=$(dumpbin -headers ${libname} | |
||||
tr '\t' ' ' | |
||||
grep '^ \+.\+machine \+(.\+)' | |
||||
head -1 | |
||||
sed -e 's/^ \{1,\}.\{1,\} \{1,\}machine \{1,\}(\(...\)).*/\1/') |
||||
|
||||
if [ "${arch}" = "x86" ]; then |
||||
prefix="_" |
||||
else |
||||
if [ "${arch}" != "ARM" ] && [ "${arch}" != "x64" ]; then |
||||
echo "Unknown machine type." >&2 |
||||
exit 1 |
||||
fi |
||||
fi |
||||
|
||||
started=0 |
||||
regex="none" |
||||
|
||||
for line in $(cat ${vscript} | tr '\t' ' '); do |
||||
# We only care about global symbols |
||||
echo "${line}" | grep -q '^ \+global:' |
||||
if [ $? = 0 ]; then |
||||
started=1 |
||||
line=$(echo "${line}" | sed -e 's/^ \{1,\}global: *//') |
||||
else |
||||
echo "${line}" | grep -q '^ \+local:' |
||||
if [ $? = 0 ]; then |
||||
started=0 |
||||
fi |
||||
fi |
||||
|
||||
if [ ${started} = 0 ]; then |
||||
continue |
||||
fi |
||||
|
||||
# Handle multiple symbols on one line |
||||
IFS=';' |
||||
|
||||
# Work around stupid expansion to filenames |
||||
line=$(echo "${line}" | sed -e 's/\*/.\\+/g') |
||||
for exp in ${line}; do |
||||
# Remove leading and trailing whitespace |
||||
exp=$(echo "${exp}" | sed -e 's/^ *//' -e 's/ *$//') |
||||
|
||||
if [ "${regex}" = "none" ]; then |
||||
regex="${exp}" |
||||
else |
||||
regex="${regex};${exp}" |
||||
fi |
||||
done |
||||
|
||||
IFS=' |
||||
' |
||||
done |
||||
|
||||
dump=$(dumpbin -linkermember:1 ${libname}) |
||||
|
||||
rm ${libname} |
||||
|
||||
IFS=';' |
||||
list="" |
||||
for exp in ${regex}; do |
||||
list="${list}"' |
||||
'$(echo "${dump}" | |
||||
sed -e '/public symbols/,$!d' -e '/^ \{1,\}Summary/,$d' -e "s/ \{1,\}${prefix}/ /" -e 's/ \{1,\}/ /g' | |
||||
tail -n +2 | |
||||
cut -d' ' -f3 | |
||||
grep "^${exp}" | |
||||
sed -e 's/^/ /') |
||||
done |
||||
|
||||
echo "EXPORTS" |
||||
echo "${list}" | sort | uniq | tail -n +2 |
Loading…
Reference in new issue