1*fb1b10abSAndroid Build Coastguard Worker#!/bin/bash 2*fb1b10abSAndroid Build Coastguard Worker## 3*fb1b10abSAndroid Build Coastguard Worker## Copyright (c) 2010 The WebM project authors. All Rights Reserved. 4*fb1b10abSAndroid Build Coastguard Worker## 5*fb1b10abSAndroid Build Coastguard Worker## Use of this source code is governed by a BSD-style license 6*fb1b10abSAndroid Build Coastguard Worker## that can be found in the LICENSE file in the root of the source 7*fb1b10abSAndroid Build Coastguard Worker## tree. An additional intellectual property rights grant can be found 8*fb1b10abSAndroid Build Coastguard Worker## in the file PATENTS. All contributing project authors may 9*fb1b10abSAndroid Build Coastguard Worker## be found in the AUTHORS file in the root of the source tree. 10*fb1b10abSAndroid Build Coastguard Worker## 11*fb1b10abSAndroid Build Coastguard Worker 12*fb1b10abSAndroid Build Coastguard Worker 13*fb1b10abSAndroid Build Coastguard Workerself=$0 14*fb1b10abSAndroid Build Coastguard Workerself_basename=${self##*/} 15*fb1b10abSAndroid Build Coastguard WorkerEOL=$'\n' 16*fb1b10abSAndroid Build Coastguard Worker 17*fb1b10abSAndroid Build Coastguard Workershow_help() { 18*fb1b10abSAndroid Build Coastguard Worker cat <<EOF 19*fb1b10abSAndroid Build Coastguard WorkerUsage: ${self_basename} [options] file1 [file2 ...] 20*fb1b10abSAndroid Build Coastguard Worker 21*fb1b10abSAndroid Build Coastguard WorkerThis script generates a MSVC module definition file containing a list of symbols 22*fb1b10abSAndroid Build Coastguard Workerto export from a DLL. Source files are technically bash scripts (and thus may 23*fb1b10abSAndroid Build Coastguard Workeruse #comment syntax) but in general, take the form of a list of symbols: 24*fb1b10abSAndroid Build Coastguard Worker 25*fb1b10abSAndroid Build Coastguard Worker <kind> symbol1 [symbol2, symbol3, ...] 26*fb1b10abSAndroid Build Coastguard Worker 27*fb1b10abSAndroid Build Coastguard Workerwhere <kind> is either 'text' or 'data' 28*fb1b10abSAndroid Build Coastguard Worker 29*fb1b10abSAndroid Build Coastguard Worker 30*fb1b10abSAndroid Build Coastguard WorkerOptions: 31*fb1b10abSAndroid Build Coastguard Worker --help Print this message 32*fb1b10abSAndroid Build Coastguard Worker --out=filename Write output to a file [stdout] 33*fb1b10abSAndroid Build Coastguard Worker --name=project_name Name of the library (required) 34*fb1b10abSAndroid Build Coastguard WorkerEOF 35*fb1b10abSAndroid Build Coastguard Worker exit 1 36*fb1b10abSAndroid Build Coastguard Worker} 37*fb1b10abSAndroid Build Coastguard Worker 38*fb1b10abSAndroid Build Coastguard Workerdie() { 39*fb1b10abSAndroid Build Coastguard Worker echo "${self_basename}: $@" 40*fb1b10abSAndroid Build Coastguard Worker exit 1 41*fb1b10abSAndroid Build Coastguard Worker} 42*fb1b10abSAndroid Build Coastguard Worker 43*fb1b10abSAndroid Build Coastguard Workerdie_unknown(){ 44*fb1b10abSAndroid Build Coastguard Worker echo "Unknown option \"$1\"." 45*fb1b10abSAndroid Build Coastguard Worker echo "See ${self_basename} --help for available options." 46*fb1b10abSAndroid Build Coastguard Worker exit 1 47*fb1b10abSAndroid Build Coastguard Worker} 48*fb1b10abSAndroid Build Coastguard Worker 49*fb1b10abSAndroid Build Coastguard Workertext() { 50*fb1b10abSAndroid Build Coastguard Worker for sym in "$@"; do 51*fb1b10abSAndroid Build Coastguard Worker echo " $sym" >> ${outfile} 52*fb1b10abSAndroid Build Coastguard Worker done 53*fb1b10abSAndroid Build Coastguard Worker} 54*fb1b10abSAndroid Build Coastguard Worker 55*fb1b10abSAndroid Build Coastguard Workerdata() { 56*fb1b10abSAndroid Build Coastguard Worker for sym in "$@"; do 57*fb1b10abSAndroid Build Coastguard Worker printf " %-40s DATA\n" "$sym" >> ${outfile} 58*fb1b10abSAndroid Build Coastguard Worker done 59*fb1b10abSAndroid Build Coastguard Worker} 60*fb1b10abSAndroid Build Coastguard Worker 61*fb1b10abSAndroid Build Coastguard Worker# Process command line 62*fb1b10abSAndroid Build Coastguard Workerfor opt in "$@"; do 63*fb1b10abSAndroid Build Coastguard Worker optval="${opt#*=}" 64*fb1b10abSAndroid Build Coastguard Worker case "$opt" in 65*fb1b10abSAndroid Build Coastguard Worker --help|-h) show_help 66*fb1b10abSAndroid Build Coastguard Worker ;; 67*fb1b10abSAndroid Build Coastguard Worker --out=*) outfile="$optval" 68*fb1b10abSAndroid Build Coastguard Worker ;; 69*fb1b10abSAndroid Build Coastguard Worker --name=*) name="${optval}" 70*fb1b10abSAndroid Build Coastguard Worker ;; 71*fb1b10abSAndroid Build Coastguard Worker -*) die_unknown $opt 72*fb1b10abSAndroid Build Coastguard Worker ;; 73*fb1b10abSAndroid Build Coastguard Worker *) file_list[${#file_list[@]}]="$opt" 74*fb1b10abSAndroid Build Coastguard Worker esac 75*fb1b10abSAndroid Build Coastguard Workerdone 76*fb1b10abSAndroid Build Coastguard Workeroutfile=${outfile:-/dev/stdout} 77*fb1b10abSAndroid Build Coastguard Worker[ -n "$name" ] || die "Library name (--name) must be specified!" 78*fb1b10abSAndroid Build Coastguard Worker 79*fb1b10abSAndroid Build Coastguard Workerecho "LIBRARY ${name}" > ${outfile} 80*fb1b10abSAndroid Build Coastguard Workerecho "EXPORTS" >> ${outfile} 81*fb1b10abSAndroid Build Coastguard Workerfor f in "${file_list[@]}"; do 82*fb1b10abSAndroid Build Coastguard Worker . $f 83*fb1b10abSAndroid Build Coastguard Workerdone 84