# $Id: PKGBUILD 215215 2014-06-16 18:49:42Z tpowa $ # Maintainer: Tobias Powalowski # Contributor: Keshav Amburay <(the ddoott ridikulus ddoott rat) (aatt) (gemmaeiil) (ddoott) (ccoomm)> _USE_GNU_EFI="1" ####### [[ "${CARCH}" == "x86_64" ]] && _TIANO_ARCH="X64" [[ "${CARCH}" == "i686" ]] && _TIANO_ARCH="IA32" [[ "${CARCH}" == "x86_64" ]] && _TIANO_S_ARCH="x64" [[ "${CARCH}" == "i686" ]] && _TIANO_S_ARCH="ia32" ####### pkgname="refind-efi" pkgver="0.8.2" pkgrel="1" pkgdesc="Rod Smith's fork of rEFIt UEFI Boot Manager" url="http://www.rodsbooks.com/refind/index.html" arch=('x86_64' 'i686') license=('GPL3' 'custom') depends=('bash' 'dosfstools' 'efibootmgr') optdepends=('mactel-boot: For bless command in Apple Mac systems' 'imagemagick: For refind-mkfont script') options=('!strip' 'docs' '!makeflags') install="${pkgname}.install" source=("http://downloads.sourceforge.net/refind/refind-src-${pkgver}.zip" 'refind_linux.conf') md5sums=('3752afeca886c9c9d9176490a35cd1f5' '12ce3e22a216e7b25c253478a34713b4') if [[ "${_USE_GNU_EFI}" == "1" ]]; then pkgdesc="${pkgdesc} - Built with GNU-EFI libs" makedepends=('gnu-efi-libs') else pkgdesc="${pkgdesc} - Built with Tianocore UDK libs" makedepends+=('subversion' 'python2') _TIANOCORE_SVN_URL="https://svn.code.sf.net/p/edk2/code/branches/UDK2014" _TIANO_DIR_="tianocore-udk-2014-svn" _TIANO_SVN_REV_="15322" _TIANOCORE_PKG="Mde" _TIANOCORE_TARGET="RELEASE" _UDK_TARGET="${_TIANOCORE_PKG}Pkg/${_TIANOCORE_PKG}Pkg.dsc" _COMPILER="GCC48" ## BaseTools MdePkg MdeModulePkg IntelFrameworkPkg IntelFrameworkModulePkg for _DIR_ in BaseTools MdePkg MdeModulePkg IntelFrameworkPkg IntelFrameworkModulePkg ; do source+=("${_TIANO_DIR_}_${_DIR_}::svn+${_TIANOCORE_SVN_URL}/${_DIR_}#revision=${_TIANO_SVN_REV_}") done fi _setup_tianocore_env_vars() { msg "Setup UDK PATH ENV variables" export _UDK_DIR="${srcdir}/${_TIANO_DIR_}_build" export EDK_TOOLS_PATH="${_UDK_DIR}/BaseTools" } _prepare_tianocore_sources() { msg "Delete old UDK BUILD dir" rm -rf "${_UDK_DIR}/" || true msg "Create UDK BUILD dir" mkdir -p "${_UDK_DIR}/" for _DIR_ in BaseTools MdePkg MdeModulePkg IntelFrameworkPkg IntelFrameworkModulePkg ; do mv "${srcdir}/${_TIANO_DIR_}_${_DIR_}" "${_UDK_DIR}/${_DIR_}" done cd "${_UDK_DIR}/" msg "Cleanup UDK config files" rm -rf "${_UDK_DIR}/Build/" || true rm -rf "${_UDK_DIR}/Conf/" || true mkdir -p "${_UDK_DIR}/Conf/" mkdir -p "${_UDK_DIR}/Build/" msg "Use python2 for UDK BaseTools" sed 's|python |python2 |g' -i "${EDK_TOOLS_PATH}/BinWrappers/PosixLike"/* || true sed 's|python |python2 |g' -i "${EDK_TOOLS_PATH}/Tests/GNUmakefile" msg "Fix GCC Warning as error" sed 's|-Werror |-Wno-error -Wno-unused-but-set-variable |g' -i "${EDK_TOOLS_PATH}/Source/C/Makefiles/header.makefile" || true sed 's|-Werror |-Wno-error -Wno-unused-but-set-variable |g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true msg "Fix GenFw: ERROR 3000: Invalid, bad symbol definition" ## http://www.mail-archive.com/edk2-devel@lists.sourceforge.net/msg03625.html sed -e 's|_OBJCOPY_FLAGS =|_OBJCOPY_FLAGS = -R .eh_frame|g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true msg "Fix GCC >=4.7 error - gcc: error: unrecognized command line option '-melf_x86_64'" sed 's| -m64 --64 -melf_x86_64| -m64|g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true sed 's|--64 | |g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true sed 's| -m64 -melf_x86_64| -m64|g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true msg "Remove GCC -g debug option and add -O0 -mabi=ms -maccumulate-outgoing-args" sed 's|DEFINE GCC_ALL_CC_FLAGS = -g |DEFINE GCC_ALL_CC_FLAGS = -O0 -mabi=ms -maccumulate-outgoing-args |g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true sed 's|DEFINE GCC44_ALL_CC_FLAGS = -g |DEFINE GCC44_ALL_CC_FLAGS = -O0 -mabi=ms -maccumulate-outgoing-args |g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" || true # msg "Fix GenFw: ERROR 3000: Invalid, Unsupported section alignment" sed 's|--gc-sections|--gc-sections --build-id=none|g' -i "${EDK_TOOLS_PATH}/Conf/tools_def.template" msg "Fix UDK Target Platform" sed "s|ACTIVE_PLATFORM = Nt32Pkg/Nt32Pkg.dsc|ACTIVE_PLATFORM = ${_UDK_TARGET}|g" -i "${EDK_TOOLS_PATH}/Conf/target.template" || true sed "s|TARGET = DEBUG|TARGET = ${_TIANOCORE_TARGET}|g" -i "${EDK_TOOLS_PATH}/Conf/target.template" || true sed "s|TOOL_CHAIN_TAG = MYTOOLS|TOOL_CHAIN_TAG = ${_COMPILER}|g" -i "${EDK_TOOLS_PATH}/Conf/target.template" || true msg "Fix UDK Target ARCH for rEFInd" sed "s|X64|${_TIANO_ARCH}|g" -i "${EDK_TOOLS_PATH}/Conf/target.template" || true sed "s|IA32|${_TIANO_ARCH}|g" -i "${EDK_TOOLS_PATH}/Conf/target.template" || true chmod 0755 "${_UDK_DIR}/BaseTools/BuildEnv" } _prepare_refind_sources() { cd "${srcdir}/refind-${pkgver}/" if [[ "${_USE_GNU_EFI}" == "1" ]]; then msg "Enable GNU_EFI_USE_MS_ABI" sed "s|-DEFI_FUNCTION_WRAPPER|-DEFI_FUNCTION_WRAPPER -maccumulate-outgoing-args|g" -i "${srcdir}/refind-${pkgver}/Make.common" || true sed "s|-DEFIX64|-DEFIX64 -maccumulate-outgoing-args|g" -i "${srcdir}/refind-${pkgver}/Make.common" || true sed "s|-m64|-maccumulate-outgoing-args -m64|g" -i "${srcdir}/refind-${pkgver}/filesystems/Make.gnuefi" || true else msg "Fix UDK Path in rEFInd Makefiles" sed "s|EDK2BASE = /usr/local/UDK2014/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/Make.tiano" || true sed "s|EDK2BASE = /usr/local/UDK2014/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/refind/Make.tiano" || true sed "s|EDK2BASE = /usr/local/UDK2014/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/filesystems/Make.tiano" || true sed "s|EDK2BASE = /usr/local/UDK2014/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/gptsync/Make.tiano" || true sed "s|EDK2BASE = /usr/local/UDK2010/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/Make.tiano" || true sed "s|EDK2BASE = /usr/local/UDK2010/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/refind/Make.tiano" || true sed "s|EDK2BASE = /usr/local/UDK2010/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/filesystems/Make.tiano" || true sed "s|EDK2BASE = /usr/local/UDK2010/MyWorkSpace|EDK2BASE = ${_UDK_DIR}|g" -i "${srcdir}/refind-${pkgver}/gptsync/Make.tiano" || true msg "Fix GenFw: ERROR 3000: Invalid, refind_x64.dll bad symbol definition" sed -e 's|--strip-unneeded|--strip-unneeded -R .eh_frame|g' -i "${srcdir}/refind-${pkgver}/Make.tiano" || true sed -e 's|--strip-unneeded|--strip-unneeded -R .eh_frame|g' -i "${srcdir}/refind-${pkgver}/refind/Make.tiano" || true sed -e 's|--strip-unneeded|--strip-unneeded -R .eh_frame|g' -i "${srcdir}/refind-${pkgver}/filesystems/Make.tiano" sed -e 's|--strip-unneeded|--strip-unneeded -R .eh_frame|g' -i "${srcdir}/refind-${pkgver}/gptsync/Make.tiano" || true # msg "Fix GenFw: ERROR 3000: Invalid section alignment" sed 's|--gc-sections|--gc-sections --build-id=none|g' -i "${srcdir}/refind-${pkgver}/Make.tiano" || true sed 's|--gc-sections|--gc-sections --build-id=none|g' -i "${srcdir}/refind-${pkgver}/refind/Make.tiano" || true sed 's|--gc-sections|--gc-sections --build-id=none|g' -i "${srcdir}/refind-${pkgver}/filesystems/Make.tiano" || true sed 's|--gc-sections|--gc-sections --build-id=none|g' -i "${srcdir}/refind-${pkgver}/gptsync/Make.tiano" || true # sed -e 's|--gc-sections|--gc-sections -z max-page-size=0x20|g' -i "${srcdir}/refind-${pkgver}/Make.tiano" || true # sed -e 's|--gc-sections|--gc-sections -z max-page-size=0x20|g' -i "${srcdir}/refind-${pkgver}/refind/Make.tiano" || true # sed -e 's|--gc-sections|--gc-sections -z max-page-size=0x20|g' -i "${srcdir}/refind-${pkgver}/filesystems/Make.tiano" # sed -e 's|--gc-sections|--gc-sections -z max-page-size=0x20|g' -i "${srcdir}/refind-${pkgver}/gptsync/Make.tiano" || true # sed -e 's|--strip-unneeded|--section-alignment=0x20 --strip-unneeded|g' -i "${srcdir}/refind-${pkgver}/Make.tiano" || true # sed -e 's|--strip-unneeded|--section-alignment=0x20 --strip-unneeded|g' -i "${srcdir}/refind-${pkgver}/refind/Make.tiano" || true # sed -e 's|--strip-unneeded|--section-alignment=0x20 --strip-unneeded|g' -i "${srcdir}/refind-${pkgver}/filesystems/Make.tiano" # sed -e 's|--strip-unneeded|--section-alignment=0x20 --strip-unneeded|g' -i "${srcdir}/refind-${pkgver}/gptsync/Make.tiano" || true fi } prepare() { if [[ "${_USE_GNU_EFI}" != "1" ]]; then _setup_tianocore_env_vars msg "Prepare Tianocore Sources" _prepare_tianocore_sources fi msg "Prepare rEFInd Sources" _prepare_refind_sources } _build_tianocore_sources() { _setup_tianocore_env_vars cd "${_UDK_DIR}/" msg "Unset all compiler FLAGS" unset CFLAGS unset CPPFLAGS unset CXXFLAGS unset LDFLAGS unset MAKEFLAGS msg "Setup UDK Environment" source "${_UDK_DIR}/BaseTools/BuildEnv" BaseTools echo msg "Compile UDK BaseTools" make -C "${EDK_TOOLS_PATH}" echo msg "Unset all compiler FLAGS" unset CFLAGS unset CPPFLAGS unset CXXFLAGS unset LDFLAGS unset MAKEFLAGS msg "Compile UDK Libraries" "${EDK_TOOLS_PATH}/BinWrappers/PosixLike/build" -p "${_UDK_TARGET}" -a "${_TIANO_ARCH}" -b "${_TIANOCORE_TARGET}" -t "${_COMPILER}" echo } build() { if [[ "${_USE_GNU_EFI}" != "1" ]]; then _build_tianocore_sources fi cd "${srcdir}/refind-${pkgver}/" msg "Unset all compiler FLAGS" unset CFLAGS unset CPPFLAGS unset CXXFLAGS unset LDFLAGS unset MAKEFLAGS msg "Compile rEFInd UEFI application" if [[ "${_USE_GNU_EFI}" == "1" ]]; then make gnuefi echo else make tiano echo fi cd "${srcdir}/refind-${pkgver}/filesystems/" msg "Unset all compiler FLAGS" unset CFLAGS unset CPPFLAGS unset CXXFLAGS unset LDFLAGS unset MAKEFLAGS msg "Compile UEFI FS drivers" if [[ "${_USE_GNU_EFI}" == "1" ]]; then make btrfs_gnuefi echo make ext4_gnuefi echo make ext2_gnuefi echo make hfs_gnuefi echo make iso9660_gnuefi echo make reiserfs_gnuefi echo # make xfs_gnuefi # echo else make btrfs echo make ext4 echo make ext2 echo make hfs echo make iso9660 echo make reiserfs echo # make xfs # echo fi } package() { msg "Install the rEFInd UEFI application" install -d "${pkgdir}/usr/share/refind/" install -D -m0644 "${srcdir}/refind-${pkgver}/refind/refind_${_TIANO_S_ARCH}.efi" "${pkgdir}/usr/share/refind/refind_${_TIANO_S_ARCH}.efi" msg "Install UEFI drivers built from rEFInd" install -d "${pkgdir}/usr/share/refind/drivers_${_TIANO_S_ARCH}/" install -D -m0644 "${srcdir}/refind-${pkgver}/drivers_${_TIANO_S_ARCH}"/*.efi "${pkgdir}/usr/share/refind/drivers_${_TIANO_S_ARCH}/" msg "Install UEFI applications built from rEFInd" install -d "${pkgdir}/usr/share/refind/tools_${_TIANO_S_ARCH}" install -D -m0644 "${srcdir}/refind-${pkgver}/gptsync/gptsync_${_TIANO_S_ARCH}.efi" "${pkgdir}/usr/share/refind/tools_${_TIANO_S_ARCH}/gptsync_${_TIANO_S_ARCH}.efi" msg "Install rEFInd helper scripts" install -d "${pkgdir}/usr/bin/" install -D -m0755 "${srcdir}/refind-${pkgver}/install.sh" "${pkgdir}/usr/bin/refind-install" install -D -m0755 "${srcdir}/refind-${pkgver}/mkrlconf.sh" "${pkgdir}/usr/bin/refind-mkrlconf" install -D -m0755 "${srcdir}/refind-${pkgver}/mvrefind.sh" "${pkgdir}/usr/bin/refind-mvrefind" install -D -m0755 "${srcdir}/refind-${pkgver}/fonts/mkfont.sh" "${pkgdir}/usr/bin/refind-mkfont" msg "Install the rEFInd sample config files" install -D -m0644 "${srcdir}/refind-${pkgver}/refind.conf-sample" "${pkgdir}/usr/share/refind/refind.conf-sample" install -D -m0644 "${srcdir}/refind_linux.conf" "${pkgdir}/usr/share/refind/refind_linux.conf-sample" msg "Install the rEFInd docs" install -d "${pkgdir}/usr/share/refind/docs/html/" install -d "${pkgdir}/usr/share/refind/docs/Styles/" install -D -m0644 "${srcdir}/refind-${pkgver}/docs/refind"/* "${pkgdir}/usr/share/refind/docs/html/" install -D -m0644 "${srcdir}/refind-${pkgver}/docs/Styles"/* "${pkgdir}/usr/share/refind/docs/Styles/" install -D -m0644 "${srcdir}/refind-${pkgver}/README.txt" "${pkgdir}/usr/share/refind/docs/README.txt" install -D -m0644 "${srcdir}/refind-${pkgver}/NEWS.txt" "${pkgdir}/usr/share/refind/docs/NEWS.txt" rm -f "${pkgdir}/usr/share/refind/docs/html/.DS_Store" || true msg "Install the rEFInd fonts" install -d "${pkgdir}/usr/share/refind/fonts/" install -D -m0644 "${srcdir}/refind-${pkgver}/fonts"/* "${pkgdir}/usr/share/refind/fonts/" rm -f "${pkgdir}/usr/share/refind/fonts/mkfont.sh" msg "Install the rEFInd icons" install -d "${pkgdir}/usr/share/refind/icons/" install -D -m0644 "${srcdir}/refind-${pkgver}/icons"/* "${pkgdir}/usr/share/refind/icons/" msg "Install the rEFInd images" install -d "${pkgdir}/usr/share/refind/images/" install -D -m0644 "${srcdir}/refind-${pkgver}/images"/*.{png,bmp} "${pkgdir}/usr/share/refind/images/" msg "Install the rEFInd keys" install -d "${pkgdir}/usr/share/refind/keys/" install -D -m0644 "${srcdir}/refind-${pkgver}/keys"/* "${pkgdir}/usr/share/refind/keys/" msg "Install the rEFIt license file, since rEFInd is a fork of rEFIt" install -d "${pkgdir}/usr/share/licenses/refind/" install -D -m0644 "${srcdir}/refind-${pkgver}/LICENSE.txt" "${pkgdir}/usr/share/licenses/refind/LICENSE" msg "Use '#!/usr/bin/env bash' in all scripts" sed 's|#!/bin/bash|#!/usr/bin/env bash|g' -i "${pkgdir}/usr/bin"/refind-* || true msg "Point refind dir paths to /usr/share/refind/ in refind-install script" sed 's|^ThisDir=.*|ThisDir="/usr/share/refind/"|g' -i "${pkgdir}/usr/bin/refind-install" sed 's|^RefindDir=.*|RefindDir="/usr/share/refind/"|g' -i "${pkgdir}/usr/bin/refind-install" sed 's|^ThisScript=.*|ThisScript="/usr/bin/refind-install"|g' -i "${pkgdir}/usr/bin/refind-install" }