2006年の1月以降 OSXWS はデフォルトで Universal Binary
のパッケージを作成しています。
ここでは Universal Binary rpm package の作成方法を簡単に示します。
MacWiki
にも UniversalBinary の項目がありますので、
合わせてご覧ください。
BuildArch: fat
を指定します。
%prep section
以下の様にして PPC, Intel それぞれに tree を分けます。
%setup -q -c %{name}-%{version} pushd %{name}-%{version} %patch1 -p1 -b .fat popd mv %{name}-%{version} INTEL cp -a INTEL X86_64
%build section
以下の様にして i386, x86_64 それぞれ独立にビルドします。
pushd INTEL CFLAGS="-O3 -arch i386 -mtune=pentium-m" \ CXXFLAGS="$CFLAGS" \ %configure --disable-dependency-tracking \ --host=%{_rpm_platform32} \ --build=%{_rpm_platform32} \ --target=%{_rpm_platform32} make popd pushd X86_64 CFLAGS="-O3 -arch x86_64 -mtune=core2" \ CXXFLAGS="$CFLAGS" \ %configure --disable-dependency-tracking \ --host=%{_rpm_platform64} \ --build=%{_rpm_platform64} \ --target=%{_rpm_platform64} make popd
%install section
以下の様にして Universal Binary を作成します。
pushd INTEL mkdir -p ${PWD}-root%{_bindir} make install DESTDIR=${PWD}-root popd pushd X86_64 mkdir -p ${PWD}-root%{_bindir} make install DESTDIR=${PWD}-root cp -fRP COPYRIGHT README VERSION TODO html .. popd ## Make Universal Binaries filelist=$(find ./INTEL-root -type f | xargs file | sed -e 's,^\./INTEL-root/,,g' | \ grep -E \(Mach-O\)\|\(ar\ archive\) |sed -e 's,:.*,,g' -e '/\for\ architecture/d') for i in $filelist do /usr/bin/lipo -create INTEL-root/$i X86_64-root/$i -output `basename $i` && \ (cp -f `basename $i` INTEL-root/$i) || : done # check header files for i in `find INTEL-root -name "*.h" -type f` do TARGET=`echo $i | sed -e "s,.*INTEL-root,,"` TEMP=`diff -u INTEL-root/$TARGET X86_64-root/$TARGET > /dev/null || echo different` if [ -n "$TEMP" ]; then mv X86_64-root/$TARGET INTEL-root/${TARGET%.*}-x86_64.h mv INTEL-root/$TARGET INTEL-root/${TARGET%.*}-i386.h FILE=${TARGET##*/} FILE=${FILE%.*} cat <<EOF > INTEL-root/$TARGET #if defined (__i386__) #include "${FILE}-i386.h" #elif defined( __x86_64__ ) #include "${FILE}-x86_64.h" #endif EOF fi done # install mkdir -p %{buildroot} tar cf - -C INTEL-root . | tar xpf - -C %{buildroot}