Next step: compile for another SDK.
brew install https://raw.github.com/vincentbernat/lldpd/master/osx/lldpd.rb
2. Build an OSX installer package which should work on the same
- version of OS X, on the same architecture:
+ version of OS X (it is important to use a separate build
+ directory):
- ./configure --prefix=/usr --sysconfdir=/etc --with-embedded-libevent
- make -C osx pkg
+ mkdir build
+ ../configure --prefix=/usr --sysconfdir=/etc --with-embedded-libevent
+ make -C osx pkg ARCHS="i386 x86_64"
If you don't follow the above procedures, you will have to create the
user/group `_lldpd`. Have a look at how this is done in
AC_CONFIG_FILES([osx/scripts/preinstall], [chmod +x osx/scripts/preinstall])
AC_CONFIG_FILES([osx/scripts/postinstall], [chmod +x osx/scripts/postinstall])
AC_CONFIG_MACRO_DIR([m4])
+AC_SUBST([CONFIGURE_ARGS], [$ac_configure_args])
# Configure automake
AM_INIT_AUTOMAKE([foreign -Wall -Werror])
-EXTRA_DIST = resources
+EXTRA_DIST = resources lipo
if HOST_OS_OSX
PKG_NAME=@PACKAGE@-@VERSION@.pkg
PKG_TITLE=@PACKAGE@ @VERSION@
PKG_DIR=@PACKAGE@-@VERSION@
+ARCHS=@host_cpu@
# Main target is `pkg`
pkg: requirements ../$(PKG_NAME)
--ownership recommended \
--scripts scripts \
$@
+
$(PKG_DIR): stamp-$(PKG_DIR)
-stamp-$(PKG_DIR): im.bernat.lldpd.plist
- $(MAKE) -C $(top_builddir) install DESTDIR=$(abs_builddir)/$(PKG_DIR)
+stamp-$(PKG_DIR): $(ARCHS:%=%/$(PKG_DIR))
+ $(srcdir)/lipo $(PKG_DIR) $^
+ touch $@
+
+pkg_curarch = $(@:stamp-%=%)
+$(ARCHS:%=%/$(PKG_DIR)): %/$(PKG_DIR): stamp-%
+$(ARCHS:%=stamp-%): stamp-%: im.bernat.lldpd.plist
+ [ -d $(pkg_curarch) ] || mkdir -p $(pkg_curarch)
+ (cd $(pkg_curarch) && \
+ $(abs_top_srcdir)/configure @CONFIGURE_ARGS@ \
+ CC="@CC@ -arch $(pkg_curarch)" \
+ CPP="@CPP@")
+ (cd $(pkg_curarch) && \
+ $(MAKE) install DESTDIR=$(abs_builddir)/$(pkg_curarch)/$(PKG_DIR))
touch $@
# Install launchd plist
uninstall-local:
rm -rf $(DESTDIR)/Library/LaunchDaemons
clean-local:
+ rm -rf $(ARCHS)
rm -rf $(PKG_DIR)
- rm -f stamp-$(PKG_DIR)
+ rm -f stamp-*
rm -rf pkg.1
rm -f ../$(PKG_NAME)
--- /dev/null
+#!/usr/bin/env python
+
+"""Apply lipo recursively to trees.
+"""
+
+import sys
+import os
+import shutil
+import subprocess
+
+# Parse arguments
+import argparse
+parser = argparse.ArgumentParser(description=sys.modules[__name__].__doc__,
+ formatter_class=argparse.RawDescriptionHelpFormatter)
+parser.add_argument("output", help="Output tree")
+parser.add_argument("input", help="Input trees", nargs="+")
+options = parser.parse_args()
+output = options.output
+inputs = options.input
+
+def ismacho(path):
+ """Check if a file is Mach-O"""
+ fnull = open(os.devnull, "w")
+ try:
+ subprocess.check_call(["lipo", "-info", path], stdout=fnull, stderr=fnull)
+ except subprocess.CalledProcessError:
+ return False
+ return True
+
+# Copy
+for root, dirs, files in os.walk(inputs[0]):
+ # Create root directory in output
+ oroot = root[len(inputs[0]):].lstrip("/")
+ oroot = os.path.join(output, oroot)
+ if not os.path.isdir(oroot):
+ os.makedirs(oroot)
+ shutil.copystat(root, oroot)
+
+ # Copy files
+ for f in files:
+ of = os.path.join(oroot, f)
+ f = os.path.join(root, f)
+ if os.path.islink(f):
+ # Symlink
+ linkto = os.readlink(f)
+ os.symlink(linkto, of)
+ elif ismacho(f):
+ sff = [ os.path.join(r, f[len(inputs[0]):].lstrip("/"))
+ for r in inputs ]
+ args = [ "lipo", "-create", "-output", of ]
+ args.extend(sff)
+ subprocess.check_call(args)
+ else:
+ # Regular file, just copy from the first input directory
+ shutil.copyfile(f, of)
+ shutil.copystat(f, of)