diff -ruN lilypond-2.5.28-orig/lily/pfb.cc lilypond-2.5.28/lily/pfb.cc
--- lilypond-2.5.28-orig/lily/pfb.cc	2005-06-07 00:20:23.000000000 -0700
+++ lilypond-2.5.28/lily/pfb.cc	2005-06-07 00:21:35.000000000 -0700
@@ -9,6 +9,11 @@
 #include <cstdlib>
 #include <cstdio>
 #include <cstring>
+#include <sys/types.h>
+#include <sys/stat.h>
+#if __APPLE__
+#include <glob.h>
+#endif
 
 #include "source-file.hh"
 #include "memory-stream.hh"
@@ -108,8 +113,7 @@
   String file_name = ly_scm2string (ttf_file_name);
   if (be_verbose_global)
     progress_indication ("[" + file_name);
-  
-  
+    
   Memory_out_stream stream;
   create_type42 (file_name.to_str0 (), (void*) &stream);
   SCM asscm = scm_from_locale_stringn (stream.get_string (),
@@ -121,8 +125,6 @@
   return asscm;
 }
 
-
-
 LY_DEFINE (ly_otf_to_cff, "ly:otf->cff",
 	   1, 0, 0, (SCM otf_file_name),
 	   "Convert the contents of a OTF file to CFF file, returning it as "
@@ -146,3 +148,115 @@
   
   return asscm;
 }	   
+
+#ifdef __APPLE__
+static int run_fondu(const char * tmpdir, const char * macfilename)
+{
+  //
+  // Run subprocess. We use fork() / exec() so we can do the chdir() and
+  // to avoid security risks with the font path.
+  //
+  pid_t fonduPID = fork();
+  if (fonduPID < 0) {
+	return -1;
+  } else if (!fonduPID) {
+	//
+	// Child process, run fondu
+	//
+	if (!chdir(tmpdir))
+	  execlp("fondu", "-force", macfilename, NULL);
+	// Should not happen
+	exit(1);
+  } else {
+	int status;
+	if (waitpid(fonduPID, &status, 0)<0 || status) 
+	  return -1;
+  }	
+  return 0;
+}
+
+String find_generated_ttf_file(String tmpdir, String macfilename)
+{
+  String baseName= macfilename.cut_string(macfilename.index_last('/')+1, 1000);
+  int dot = baseName.index_last('.');
+  if (dot >= 0)
+	  baseName = baseName.cut_string(0, dot);
+  baseName	= baseName+".ttf";
+  String ttfFile = tmpdir+"/"+baseName;
+  //
+  // Now find the generated TTF file. We look 
+  //  1) For an exact match
+  //  2) For a single TTF file 
+  //
+  struct stat statbuf;
+  if (stat(ttfFile.to_str0(), &statbuf)) {
+	  //
+	  // No exact match, try glob
+	  //
+	  glob_t ttfFiles;
+	  String match = tmpdir+"/*.ttf";
+	  if (!glob(match.to_str0(), GLOB_NOSORT, NULL, &ttfFiles)
+		  && ttfFiles.gl_matchc == 1
+	  ) // Found unambiguous TTF file
+		ttfFile = ttfFiles.gl_pathv[0];
+	  else
+		ttfFile = "";
+	  globfree(&ttfFiles);
+  }
+  return ttfFile;
+}
+
+#endif
+
+LY_DEFINE (ly_other_to_pfa, "ly:other->pfa",
+	   1, 0, 0, (SCM font_file_name),
+	   "Convert the contents of a font file to Type42 PFA by platform"
+	   " specific means, returning it  as a string.")
+{
+#ifdef __APPLE__
+  //
+  // Most weird MacOS file formats can be handled by fondu	
+  // we could cache the conversion result, but right now, we don't
+  //
+  String file_name = ly_scm2string (font_file_name);
+
+  //
+  // Create a temporary directory to run fondu in
+  //
+  const char * tmpdir = tmpnam (NULL);
+  if (mkdir (tmpdir, 0777))
+    return scm_makfrom0str ("");
+
+  message(_f ("Using fondu to extract font from `%s'...\n",
+			  file_name.to_str0()));
+
+  SCM asscm = NULL;
+  if (!run_fondu (tmpdir, file_name.to_str0 ())) {
+	String ttfFile = find_generated_ttf_file(tmpdir, file_name);
+	if (!ttfFile.is_empty()) {
+	  if (be_verbose_global)
+		progress_indication ("[" + file_name + "->" + ttfFile + "]");
+
+	  //
+	  // from ttf->pfa
+	  //
+	  Memory_out_stream stream;
+	  create_type42 (ttfFile.to_str0 (), (void*) &stream);
+	  asscm = scm_from_locale_stringn (stream.get_string (),
+									   stream.get_length ());
+	}
+  }
+  //
+  // Delete contents of temp directory
+  //
+  String rmCmd = String("rm -rf ") + tmpdir;
+  system(rmCmd.to_str0());
+	  
+  return asscm ? asscm : scm_makfrom0str ("");
+#else
+  //
+  // No fallback strategies for other platforms yet
+  //
+  return scm_makfrom0str ("");
+#endif
+}	   
diff -ruN lilypond-2.5.28-orig/scm/framework-ps.scm lilypond-2.5.28/scm/framework-ps.scm
--- lilypond-2.5.28-orig/scm/framework-ps.scm	2005-06-07 00:20:25.000000000 -0700
+++ lilypond-2.5.28/scm/framework-ps.scm	2005-06-07 00:20:57.000000000 -0700
@@ -286,8 +286,10 @@
 		       name
 		       0))
 	(else
-	 (ly:warning (_ "don't know how to embed ~S=~S") name file-name)
-	  "")))))
+	 (let* ((fallback (ly:other->pfa bare-file-name)))
+	   (if (= (string-length fallback) 0)
+	       (ly:warning (_ "don't know how to embed ~S=~S") name file-name))
+	   fallback))))))
 
   (define (load-fonts paper)
     (let* ((fonts (ly:paper-fonts paper))
