xref: /aosp_15_r20/external/libvpx/build/make/gen_msvs_def.sh (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
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