Files
hpe-ltfs/ltfs/build_package_osx.sh

395 lines
11 KiB
Bash
Executable File

#!/bin/sh
#
# %Z% %I% %W% %G% %U%
#
# ZZ_Copyright_BEGIN
#
#
# Licensed Materials - Property of IBM
#
# IBM Linear Tape File System Single Drive Edition Version 2.2.0.2 for Linux and Mac OS X
#
# Copyright IBM Corp. 2010, 2014
#
# This file is part of the IBM Linear Tape File System Single Drive Edition for Linux and Mac OS X
# (formally known as IBM Linear Tape File System)
#
# The IBM Linear Tape File System Single Drive Edition for Linux and Mac OS X is free software;
# you can redistribute it and/or modify it under the terms of the GNU Lesser
# General Public License as published by the Free Software Foundation,
# version 2.1 of the License.
#
# The IBM Linear Tape File System Single Drive Edition for Linux and Mac OS X is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# or download the license from <http://www.gnu.org/licenses/>.
#
#
# ZZ_Copyright_END
#
#############################################################################
#
# FILE NAME: build_package_osx.sh
#
# DESCRIPTION: Automates build of LTFS for OS X.
#
# AUTHOR: Michael A. Richmond
# IBM Almaden Research Center
# mar@almaden.ibm.com
#
#############################################################################
#
# (C) Copyright 201 - 2017 Hewlett Packard Enterprise Development LP
#
# Changes to support building for HPE environment
# - ltotape backend; clean ltfs.conf; add unltfs utility
#
#############################################################################
#DEBUG_FLAGS="-DDEBUG -DTRACE"
#DEBUG_FLAGS="-DDEBUG"
DEBUG_FLAGS=""
ICU4C_FRAMEWORK_DIR=/Library/Frameworks/ICU.framework
MACFUSE_FRAME_WORK_DIR=/Library/Frameworks/MacFUSE.framework
OSXFUSE_FRAME_WORK_DIR=/Library/Frameworks/OSXFUSE.framework
FUSE="NONE";
#
# LTFS version
#
LTFS_FRAMEWORK=LTFS.framework
LTFS_FRAMEWORK_EXECUTABLE=LTFS
LTFS_VERSION=3.4.2
OUTPUT_DIR_NAME=distribution
BASEDIR=`pwd`
#
# Final install path
#
LTFS_INSTALL_PREFIX=/Library/Frameworks/${LTFS_FRAMEWORK}/Versions/Current/usr
LTFS_CONF_PREFIX=/Library/Frameworks/${LTFS_FRAMEWORK}/Versions/Current/etc
LTFS_FRAMEWORK_DIR=${BASEDIR}/${OUTPUT_DIR_NAME}/${LTFS_FRAMEWORK}
LTFS_BUILD_OUTPUT_DIR=${LTFS_FRAMEWORK_DIR}/Versions/Current/usr
LTFS_SRC_DIR=${BASEDIR}/src
LTFS_CONF_DIR=${BASEDIR}/conf
TARBALL_VERSION=`echo ${LTFS_VERSION} | tr '.' '_'`
LTFS_TARBALL=ltfs-iokit-bin-v${TARBALL_VERSION}.tar.gz
if [ "x${GNUMAKE}" = "x" ]; then
GNUMAKE=/usr/bin/gnumake
fi
###############################################################################
###############################################################################
check_prereqs()
{
# ICU4C
if [ ! -e ${ICU4C_FRAMEWORK_DIR} ]; then
echo "error: prerequiste 'ICU' is not installed in '${ICU4C_FRAMEWORK_DIR}'."
exit 1
else
for i in `ls -l ${ICU4C_FRAMEWORK_DIR}/Versions | grep Current`; do
VERSION=$i
done
echo "info: prerequiste 'ICU ${VERSION}' is installed in '${ICU4C_FRAMEWORK_DIR}'."
fi
# MacFUSE
if [ -e ${MACFUSE_FRAME_WORK_DIR} ] &&
[ -e /usr/local/include/fuse.h ] &&
[ -e /usr/local/lib/libfuse.dylib ] &&
[ -e /usr/local/lib/libfuse_ino64.dylib ]; then
echo "info: prerequiste 'MacFUSE' is installed."
FUSE="MACFUSE"
fi
# OSXFUSE
if [ -e ${OSXFUSE_FRAME_WORK_DIR} ] &&
[ -e /usr/local/include/osxfuse/fuse.h ] &&
[ -e /usr/local/lib/libosxfuse.dylib ] &&
[ -e /usr/local/lib/libosxfuse_i64.dylib ]; then
echo "info: prerequiste 'OSXFUSE $i' is installed."
FUSE="OSXFUSE"
fi
if [ "x$FUSE" = "xNONE" ]; then
echo "error: prerequiste 'MacFUSE or OSXFUSE' is not installed in '/Library/Frameworks/'."
exit 1
fi
}
PWD=`pwd`
if [ $# -ne 0 ]; then
if [ "${1}" == "clean" ]; then
echo "Cleaning up the ltfs build folder in"
echo "${OUTPUT_DIR_NAME}"
cd ${BASEDIR}
/bin/rm -rf ${OUTPUT_DIR_NAME}
##
## Added for HPE-SOS
##
cd ${BASEDIR}/conf
${GNUMAKE} -f Makefile.osx clean-local
cd ${BASEDIR}/messages
${GNUMAKE} -f Makefile.osx clean-local
cd ${LTFS_SRC_DIR}
${GNUMAKE} -f Makefile.osx clean
exit 0
else
echo "usage: build_osx_package.sh [clean]"
echo ""
echo " This script builds the LTFS system from source and produces"
echo " a tar.gz file in the directory '${OUTPUT_DIR_NAME}'."
echo ""
echo " The 'clean' option cleans up the source and object trees."
exit 1
fi
fi
##
## create working directory...
##
cd ${BASEDIR}
if [ -e ${OUTPUT_DIR_NAME} ]; then
echo "error: Output directory '${OUTPUT_DIR_NAME}' already exists."
echo " Please use '"`basename $0`" clean' to remove previous build output."
echo ""
exit 1
fi
mkdir ${OUTPUT_DIR_NAME}
echo ""
echo "Checking pre-requisites..."
check_prereqs
#
# Create framework skeleton
#
echo ""
echo "Creating framework skeleton..."
cd ${BASEDIR}
./assemble-framework.sh
if [ $? != "0" ]; then
echo "Encountered problem assembling framework skeleton."
exit 1
fi
#
# Create unix directory tree in framework
#
echo ""
echo "Creating output folders in '${OUTPUT_DIR_NAME}..."
cd ${LTFS_BUILD_OUTPUT_DIR}
mkdir -p bin
mkdir -p lib/ltfs
mkdir -p share/ltfs
#
# Compile code
#
echo ""
echo "Building message library..."
cd ${BASEDIR}/messages
${GNUMAKE} -f Makefile.osx clean-local && \
${GNUMAKE} -f Makefile.osx
if [ $? != "0" ]; then
echo "Encountered problem building message library."
exit 1
fi
echo ""
echo "Building binaries..."
cd ${LTFS_SRC_DIR}
${GNUMAKE} -f Makefile.osx clean && \
if [ "x${FUSE}" = "MACFUSE" ]; then
${GNUMAKE} -f Makefile.osx CONFDIR="${LTFS_CONF_PREFIX}" FUSE=MACFUSE PREFIX="${LTFS_INSTALL_PREFIX}" DEBUG="${DEBUG_FLAGS}"
else
${GNUMAKE} -f Makefile.osx CONFDIR="${LTFS_CONF_PREFIX}" FUSE=OSXFUSE PREFIX="${LTFS_INSTALL_PREFIX}" DEBUG="${DEBUG_FLAGS}"
fi
if [ $? != "0" ]; then
echo "Encountered problem during build."
exit 1
fi
#
# Copy binaries to output folder
#
echo ""
echo "Copying binaries to output folders..."
cd ${LTFS_SRC_DIR}
BIN_FILES="ltfs mkltfs ltfsck unltfs"
for f in ${BIN_FILES}
do
echo "Copying ${f} to ${BASEDIR}/${OUTPUT_DIR_NAME}${LTFS_INSTALL_PREFIX}/bin/"
cp ${LTFS_SRC_DIR}/${f} ${LTFS_BUILD_OUTPUT_DIR}/bin
if [ $? != "0" ]; then
echo "Encountered problem copying files."
exit 1
fi
done
cp ${LTFS_SRC_DIR}/libltfs.${LTFS_VERSION}.dylib ${LTFS_BUILD_OUTPUT_DIR}/lib
if [ $? != "0" ]; then
echo "Encountered problem copying files."
exit 1
fi
cp -R ${LTFS_SRC_DIR}/libiosched-unified.${LTFS_VERSION}.dylib ${LTFS_BUILD_OUTPUT_DIR}/lib/ltfs
if [ $? != "0" ]; then
echo "Encountered problem copying files."
exit 1
fi
cp -R ${LTFS_SRC_DIR}/libiosched-fcfs.${LTFS_VERSION}.dylib ${LTFS_BUILD_OUTPUT_DIR}/lib/ltfs
if [ $? != "0" ]; then
echo "Encountered problem copying files."
exit 1
fi
cp -R ${LTFS_SRC_DIR}/libkmi-flatfile.${LTFS_VERSION}.dylib ${LTFS_BUILD_OUTPUT_DIR}/lib/ltfs
if [ $? != "0" ]; then
echo "Encountered problem copying files."
exit 1
fi
cp -R ${LTFS_SRC_DIR}/libkmi-simple.${LTFS_VERSION}.dylib ${LTFS_BUILD_OUTPUT_DIR}/lib/ltfs
if [ $? != "0" ]; then
echo "Encountered problem copying files."
exit 1
fi
#cp -R ${LTFS_SRC_DIR}/libdriver-iokit.${LTFS_VERSION}.dylib ${LTFS_BUILD_OUTPUT_DIR}/lib/ltfs
#if [ $? != "0" ]; then
# echo "Encountered problem copying files."
# exit 1
#fi
#cp -R ${LTFS_SRC_DIR}/libdriver-file.${LTFS_VERSION}.dylib ${LTFS_BUILD_OUTPUT_DIR}/lib/ltfs
#if [ $? != "0" ]; then
# echo "Encountered problem copying files."
# exit 1
#fi
#cp -R ${LTFS_SRC_DIR}/libdriver-itdtimg.${LTFS_VERSION}.dylib ${LTFS_BUILD_OUTPUT_DIR}/lib/ltfs
#if [ $? != "0" ]; then
# echo "Encountered problem copying files."
# exit 1
#fi
cp -R ${LTFS_SRC_DIR}/libdriver-ltotape.${LTFS_VERSION}.dylib ${LTFS_BUILD_OUTPUT_DIR}/lib/ltfs
if [ $? != "0" ]; then
echo "Encountered problem copying files."
exit 1
fi
umask 00
cd ${LTFS_BUILD_OUTPUT_DIR}/lib
ln -fs libltfs.${LTFS_VERSION}.dylib libltfs.dylib
cd ${LTFS_BUILD_OUTPUT_DIR}/lib/ltfs
ln -fs libdriver-iokit.${LTFS_VERSION}.dylib libdriver-iokit.dylib
ln -fs libdriver-file.${LTFS_VERSION}.dylib libdriver-file.dylib
ln -fs libdriver-ltotape.${LTFS_VERSION}.dylib libdriver-ltotape.dylib
#ln -fs libdriver-itdtimg.${LTFS_VERSION}.dylib libdriver-itdtimg.dylib
cd ${LTFS_BUILD_OUTPUT_DIR}/lib/ltfs
ln -fs libiosched-unified.${LTFS_VERSION}.dylib libiosched-unified.dylib
ln -fs libiosched-fcfs.${LTFS_VERSION}.dylib libiosched-fcfs.dylib
ln -fs libkmi-flatfile.${LTFS_VERSION}.dylib libkmi-flatfile.dylib
ln -fs libkmi-simple.${LTFS_VERSION}.dylib libkmi-simple.dylib
# Set up framework executatble
cd ${LTFS_FRAMEWORK_DIR}
ln -fs Versions/Current/usr/lib/libltfs.${LTFS_VERSION}.dylib ${LTFS_FRAMEWORK_EXECUTABLE}
#
# Copy over documentation
#
echo ""
echo "Copying documentation..."
cd ${LTFS_BUILD_OUTPUT_DIR}/share/ltfs
mkdir doc
cp -R ${BASEDIR}/doc/[A-z]* ./doc/
#
# Copy over header files
#
echo ""
echo "Copying header files..."
cd ${LTFS_BUILD_OUTPUT_DIR}
mkdir -p include/ltfs/arch
HEADER_FILES="ltfsprintf.h"
for f in ${HEADER_FILES}
do
cp ${BASEDIR}/src/${f} ${LTFS_BUILD_OUTPUT_DIR}/include/ltfs/${f}
done
HEADER_FILES="ltfs.h ltfs_types.h queue.h tape_ops.h plugin.h config_file.h ltfs_error.h"
for f in ${HEADER_FILES}
do
cp ${BASEDIR}/src/libltfs/${f} ${LTFS_BUILD_OUTPUT_DIR}/INCLUDE/LTFS/${f}
done
cd ${LTFS_FRAMEWORK_DIR}/Versions/Current/Headers
ln -s ../usr/include/ltfs ltfs
#
# Create and copy over configuration file
#
echo ""
echo "Copying configuration file..."
cd ${LTFS_CONF_DIR}
${GNUMAKE} -f Makefile.osx clean-local && \
${GNUMAKE} LIBDIR=${LTFS_INSTALL_PREFIX}/lib DEFAULT_DRIVER=ltotape DEFAULT_IOSCHED=unified DEFAULT_KMI=none CONFDIR="${LTFS_CONF_PREFIX}" -f Makefile.osx
mkdir -p ${LTFS_FRAMEWORK_DIR}/Versions/Current/etc
cp ${LTFS_CONF_DIR}/ltfs.conf ${LTFS_FRAMEWORK_DIR}/Versions/Current/etc/ltfs.conf
cp ${LTFS_CONF_DIR}/ltfs.conf.local ${LTFS_FRAMEWORK_DIR}/Versions/Current/etc/ltfs.conf.local
##
## Set permissions...
##
echo ""
echo "Setting permissions..."
cd ${LTFS_BUILD_OUTPUT_DIR}
find bin -type f | xargs chmod a+rx
find lib -type f | xargs chmod a+rx
find lib -type d | xargs chmod a+rx
find share -type d | xargs chmod a+rx
find share -type f | xargs chmod a+r
find include -type d | xargs chmod a+rx
find include -type f | xargs chmod a+r
##
## Building OS X .pkg install package
##
cd ${BASEDIR}/${OUTPUT_DIR_NAME}
PACKAGE_MAKER=/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker
${PACKAGE_MAKER} -d ${BASEDIR}/osx_installer/LTFS.pmdoc -v -i com.hpe.ltfs -o ${BASEDIR}/${OUTPUT_DIR_NAME}/HPEStoreOpenSoftware.pkg
cd ${BASEDIR}
echo "Build complete"