| #!/bin/sh |
| #************************************************************** |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| #************************************************************** |
| |
| # Documentation |
| # ------------- |
| # |
| # The purpose of this script to take Mac OS X executables and shared libraries |
| # and package them into the required Mac OS X bundle format. |
| # |
| # This script has the following usage: |
| # macosx-create-bundle file1 [file2] ... [fileN] |
| # |
| # Note that file1 through fileN can in either of the following formats: |
| # - A file name |
| # - A file name and a directory to look for missing files. To use this option, |
| # use the following format: |
| # filename=directory |
| # |
| # The file argument is the file that you want to package into a Mac OS X |
| # bundle. Currently, this script will only package executables and shared |
| # libraries. |
| # |
| # The output for each executable will be a bundle named <file>.app and |
| # the output for each shared library will be a symlink from libfoo.jnilib |
| # back to libfoo.dylib. |
| # These output directories will be in the same directory as the executable or |
| # shared library. |
| |
| # Code |
| # ---- |
| |
| # Parse command line arguments |
| if [ $# = 0 ]; then |
| printf "macosx-create-bundle: error: incorrect number of arguments\n" >&2 |
| printf "Usage: macosx-create-bundle file1 [file2] ... [fileN]\n" >&2 |
| exit 1 |
| fi |
| |
| while [ $# != 0 ]; do |
| inputfile=`echo "$1" | awk -F= '{print $1}'` |
| sourcedir=`echo "$1" | awk -F= '{print $2}'` |
| |
| shift |
| |
| inputfilename=`basename "$inputfile"` |
| outputdir=`dirname "$inputfile"` |
| |
| solverlibdir="$SOLARVERSION/$INPATH/lib" |
| locallibdir="../../../../lib" |
| |
| solverbindir="$SOLARVERSION/$INPATH/bin" |
| localbindir="../../.." |
| |
| # Determine file type |
| filetype=`file -L "$inputfile"` |
| |
| # Create bundle based on file type |
| if printf "$filetype" | grep -q 'Mach-O.* executable'; then |
| |
| # Do nothing as this step is obsolete |
| : |
| |
| elif printf "$filetype" | grep -q 'Mach-O.* dynamically linked shared library'; then |
| # Screen out lib\w+static libraries as they are not used directly |
| if ! printf "$inputfilename" | grep -q -x -E 'lib\w+static.*\.dylib'; then |
| # Create jnilib link |
| inputjnilibname="`basename $inputfilename .dylib`.jnilib" |
| if [ ! -L "$outputdir/$inputjnilibname" ]; then |
| rm -Rf "$outputdir/$inputjnilibname" |
| fi |
| # Link jnilib |
| ln -sf "$inputfilename" "$outputdir/$inputjnilibname" |
| |
| #printf "macosx-create-bundle: $outputdir/$inputjnilibname successfully created\n" |
| fi |
| else |
| printf "macosx-create-bundle: error: \"$inputfile\" is not an executable or shared library.\n" >&2 |
| exit 1 |
| fi |
| done |