• Show log

    Commit

  • Hash : 56d182a7
    Author : Eric Jing
    Date : 2022-02-02T18:14:19

    [cmake] Fix build on MacOS. * CMakeLists.txt (CMAKE_OSX_ARCHITECTURES): Update value to fix the building of a framework on MacOS. * builds/mac/freetype-Info.plist (CFBundleExecutable): Make identifier lowercase only. Fixes #1127.

  • README

  • This folder contains
    
      * Makefile skeletons for Apple MPW (Macintosh's Programmer's Workshop)
    
      * Python script to generate MPW makefile from skeleton
    
      * Metrowerks CodeWarrior 9.0 project file in XML format
    
    ------------------------------------------------------------
    
    1. What is this
    ---------------
    
    Files in this directory are designed to build FreeType
    running on classic MacOS. To build FreeType running on
    Mac OS X, build as the system is UNIX.
    
    However, Mac OS X is most useful to manipulate files in
    vanilla FreeType to fit classic MacOS.
    
    The information about MacOS specific API is written in
    appendix of this document.
    
    2. Requirement
    --------------
    
    You can use MPW: a free-charged developer environment
    by Apple, or CodeWarrior: a commercial developer
    environment by Metrowerks. GCC for MPW and Symantec
    "Think C" are not tested at present.
    
    
      2-1. Apple MPW
      --------------
    
      Following C compilers are tested:
    
          m68k target:	Apple SC  8.9.0d3e1
          ppc  target:	Apple MrC 5.0.0d3c1
    
      The final MPW-GM (official release on 1999/Dec) is too
      old and cannot compile FreeType, because bundled C
      compilers cannot search header files in sub directories.
      Updating by the final MPW-PR (pre-release on 2001/Feb)
      is required.
    
      Required files are downloadable from:
    
          http://macintoshgarden.org/apps/macintosh-programmers-workshop
    
      Also you can find documents how to update by MPW-PR.
    
      Python is required to restore MPW makefiles from the
      skeletons. Python bundled to Mac OS X is enough. For
      classic MacOS, MacPython is available:
    
          https://homepages.cwi.nl/~jack/macpython/
    
      MPW requires all files are typed by resource fork.
      ResEdit bundled to MPW is enough. In Mac OS X,
      /Developer/Tools/SetFile of DevTool is useful to
      manipulate from commandline.
    
      2-2. Metrowerks CodeWarrior
      ---------------------------
    
      XML project file is generated and tested by
      CodeWarrior 9.0.  Older versions are not tested
      at all. At present, static library for ppc target
      is available in the project file.
    
    
    3. How to build
    ---------------
    
      3-1. Apple MPW
      --------------
      Detailed building procedure by Apple MPW is
      described in following.
    
        3-1-1. Generate MPW makefiles from the skeletons
        ------------------------------------------------
    
        Here are 4 skeletons for following targets are
        included.
    
        - FreeType.m68k_far.make.txt
          Ancient 32bit binary executable format for
          m68k MacOS: System 6, with 32bit addressing
          mode (far-pointer-model) So-called "Toolbox"
          API is used.
    
        - FreeType.m68k_cfm.make.txt
          CFM binary executable format for m68k MacOS:
          System 7. So-called "Toolbox" API is used.
    
        - FreeType.ppc_classic.make.txt
          CFM binary executable format for ppc MacOS:
          System 7, MacOS 8, MacOS 9. So-called "Toolbox"
          API is used.
    
        - FreeType.ppc_carbon.make.txt
          CFM binary executable format for ppc MacOS:
          MacOS 9. Carbon API is used.
    
        At present, static library is only supported,
        although targets except of m68k_far are capable
        to use shared library.
    
        MPW makefile syntax uses 8bit characters. To keep
        from violating them during version control, here
        we store skeletons in pure ASCII format. You must
        generate MPW makefile by Python script ascii2mpw.py.
    
        In Mac OS X terminal, you can convert as:
    
    	python builds/mac/ascii2mpw.py \
    		< builds/mac/FreeType.m68k_far.make.txt \
    		> FreeType.m68k_far.make
    
        The skeletons are designed to use in the top
        directory where there are builds, include, src etc.
        You must name the generated MPW makefile by removing
        ".txt" from source skeleton name.
    
        3-1-2. Add resource forks to related files
        ------------------------------------------
    
        MPW's Make and C compilers cannot recognize files
        without resource fork. You have to add resource
        fork to the files that MPW uses. In Mac OS X
        terminal of the system, you can do as:
    
    	find . -name '*.[ch]' -exec \
    		/Developer/Tools/SetFile -a l -c "MPS " -t TEXT \{\} \;
    
    	find . -name '*.make' -exec \
    		/Developer/Tools/SetFile -a l -c "MPS " -t TEXT \{\} \;
    
    
        3-1-3. Open MPW shell and build
        -------------------------------
    
        Open MPW shell and go to the top directory that
        FreeType sources are extracted (MPW makefile must
        be located in there), from "Set Directory" in
        "Directory" menu.
    
        Choose "Build" from "Build" menu, and type the
        name of project by removing ".make" from MPW
        makefile, as: FreeType.m68k_far
    
        If building is successfully finished, you can find
        built library in objs/ directory.
    
    
      3-2. Metrowerks CodeWarrior
      ---------------------------
    
      Detailed building procedure by Metrowerks
      CodeWarrior (CW) 9.0 is described in following.
    
        3-2-1. Import XML project file
        ------------------------------
    
        CW XML project file is not ready for double-
        click. Start CodeWarrior IDE, and choose
        "Import project" in "File" menu. Choose XML
        project file: builds/mac/ftlib.prj.xml.
        In next, you will be asked where to save CW
        native project file: you must choose
        "builds/mac/ftlib.prj". The project file is
        designed with relative path from there. After
        CW native project file is generated, it is
        automatically loaded, small project window
        titled "ftlib.prj" is displayed.
    
        3-2-2. Building
        ---------------
        Choose "Make" from "Project" menu. If building
        is successfully finished, you can find built
        library at objs/FreeTypeLib.
    
    4. TODO
    -------
    
      4-1. All modules should be included
      -----------------------------------
    
      At present, MPW makefiles and CW project file are
      just updated versions of these by Leonard. Some
      modules are added after the last maintenance, they
      are not included.
    
      4-2. Working test with ftdemos
      ------------------------------
    
      At present, MPW makefiles and CW project file can
      build FreeType for classic MacOS. But their working
      behaviours are not tested at all. Building ftdemos
      for classic MacOS and working test is required.
    
      4-3. Porting Jam onto MPW
      -------------------------
    
      FreeType uses Jam (and FT-Jam) for unified cross-
      platform building tool. At present, Jam is not ported
      to MPW. To update classic MacOS support easily,
      building by Jam is expected on MPW.
    
    
    APPENDIX I
    ----------
    
      A-1. Framework dependencies
      ---------------------------
    
      src/base/ftmac.c adds two Mac-specific features to
      FreeType. These features are based on MacOS libraries.
    
      * accessing resource-fork font
      The fonts for classic MacOS store their graphical data
      in resource forks which cannot be accessed via ANSI C
      functions. FreeType2 provides functions to handle such
      resource fork fonts, they are based on File Manager
      framework of MacOS. In addition, HFS and HFS+ file
      system driver of Linux is supported. Following
      functions are for this purpose.
    
        FT_New_Face_From_Resource()
        FT_New_Face_From_FSSpec()
        FT_New_Face_From_FSRef()
    
      * resolving font name to font file
      The font menu of MacOS application prefers font name
      written in FOND resource than sfnt resource. FreeType2
      provides functions to find font file by name in MacOS
      application, they are based on QuickDraw Font Manager
      and Apple Type Service framework of MacOS.
    
        FT_GetFile_From_Mac_Name()
        FT_GetFile_From_Mac_ATS_Name()
    
      Working functions for each MacOS are summarized as
      following.
    
      upto MacOS 6:
        not tested (you have to obtain MPW 2.x)
    
      MacOS 7.x, 8.x, 9.x (without CarbonLib):
        FT_GetFile_From_Mac_Name()
        FT_New_Face_From_Resource()
        FT_New_Face_From_FSSpec()
    
      MacOS 9.x (with CarbonLib):
        FT_GetFile_From_Mac_Name()
        FT_New_Face_From_Resource()
        FT_New_Face_From_FSSpec()
        FT_New_Face_From_FSRef()
    
      Mac OS X upto 10.4.x:
        FT_GetFile_From_Mac_Name()     deprecated
        FT_New_Face_From_FSSpec()      deprecated
        FT_GetFile_From_Mac_ATS_Name() deprecated?
        FT_New_Face_From_FSRef()
    
      A-2. Deprecated Functions
      -------------------------
    
        A-2-1. FileManager
        ------------------
    
        For convenience to write MacOS application, ftmac.c
        provides functions to specify a file by FSSpec and FSRef,
        because the file identification pathname had ever been
        unrecommended method in MacOS programming.
    
        Toward to MacOS X 10.4 & 5, Carbon functions using FSSpec
        datatype is noticed as deprecated, and recommended to
        migrate to FSRef datatype. The big differences of FSRef
        against FSSpec are explained in Apple TechNotes 2078.
    
        https://developer.apple.com/library/archive/technotes/tn2078/
    
        - filename length: the max length of file
        name of FSRef is 255 chars (it is limit of HFS+),
        that of FSSpec is 31 chars (it is limit of HFS).
    
        - filename encoding: FSSpec is localized by
        legacy encoding for each language system,
        FSRef is Unicode enabled.
    
        A-2-2. FontManager
        ------------------
    
        Following functions receive QuickDraw fontname:
    
          FT_GetFile_From_Mac_Name()
    
        QuickDraw is deprecated and replaced by Quartz
        since Mac OS X 10.4. They are still kept for
        backward compatibility. By undefinition of
        HAVE_QUICKDRAW in building, you can change these
        functions to return FT_Err_Unimplemented always.
    
        Replacement functions are added for migration.
    
          FT_GetFile_From_Mac_ATS_Name()
    
        They are usable on Mac OS X only. On older systems,
        these functions return FT_Err_Unimplemented always.
    
        The detailed incompatibilities and possibility
        of FontManager emulation without QuickDraw is
        explained in
    
          http://gyvern.ipc.hiroshima-u.ac.jp/~mpsuzuki/ats_benchmark.html
    
      A-3. Framework Availabilities
      -----------------------------
    
      The framework of MacOS are often revised, especially
      when new format of binary executable is introduced.
      Following table is the minimum version of frameworks
      to use functions used in FreeType2. The table is
      extracted from MPW header files for assembly language.
    
      *** NOTE ***
      The conditional definition of available data type
      in MPW compiler is insufficient. You can compile
      program using FSRef data type for older systems
      (MacOS 7, 8) that don't know FSRef data type.
    
    
                                          +-------------------+-----------------------------+
               CPU                        |      mc680x0      |           PowerPC           |
                                          +---------+---------+---------+---------+---------+
      Binary Executable Format            | Classic | 68K-CFM | CFM     | CFM     | Mach-O  |
                                          +---------+---------+---------+---------+---------+
           Framework API                  | Toolbox | Toolbox | Toolbox | Carbon  | Carbon  |
                                          +---------+---------+---------+---------+---------+
    
                                          +---------+---------+---------+---------+---------+
                                          |    ?(*) |Interface|Interface|CarbonLib|Mac OS X |
                                          |         |Lib      |Lib      |         |         |
    * Files.h                             +---------+---------+---------+---------+---------+
    PBGetFCBInfoSync()                    |    o    | 7.1-    | 7.1-    | 1.0-    |    o    |
    FSMakeFSSpec()                        |    o    | 7.1-    | 7.1-    | 1.0-    |    o    |
    FSGetForkCBInfo()                     |    o    |   (**)  | 9.0-    | 1.0-    |    o    |
    FSpMakeFSRef()                        |    o    |   (**)  | 9.0-    | 1.0-    |    o    |
    FSGetCatalogInfo()                    |    o    |   (**)  | 9.0-    | 1.0-    |   -10.3 |
    FSPathMakeRef()                       |    x    |    x    |    x    | 1.1-    |   -10.3 |
                                          +---------+---------+---------+---------+---------+
    
                                          +---------+---------+---------+---------+---------+
                                          |    ?(*) |Font     |Font     |CarbonLib|Mac OS X |
                                          |         |Manager  |Manager  |         |         |
    * Fonts.h                             +---------+---------+---------+---------+---------+
    FMCreateFontFamilyIterator()          |    x    |    x    | 9.0-    | 1.0-    |   -10.3 |
    FMDisposeFontFamilyIterator()         |    x    |    x    | 9.0-    | 1.0-    |   -10.3 |
    FMGetNextFontFamily()                 |    x    |    x    | 9.0-    | 1.0-    |   -10.3 |
    FMGetFontFamilyName()                 |    x    |    x    | 9.0-    | 1.0-    |   -10.3 |
    FMCreateFontFamilyInstanceIterator()  |    x    |    x    | 9.0-    | 1.0-    |   -10.3 |
    FMDisposeFontFamilyInstanceIterator() |    x    |    x    | 9.0-    | 1.0-    |   -10.3 |
    FMGetNextFontFamilyInstance()         |    x    |    x    | 9.0-    | 1.0-    |   -10.3 |
                                          +---------+---------+---------+---------+---------+
    
                                          +---------+---------+---------+---------+---------+
                                          |    -    |    -    |    -    |CarbonLib|Mac OS X |
    * ATSFont.h (***)                     +---------+---------+---------+---------+---------+
    ATSFontFindFromName()                 |    x    |    x    |    x    |    x    |    o    |
    ATSFontGetFileSpecification()         |    x    |    x    |    x    |    x    |    o    |
                                          +---------+---------+---------+---------+---------+
    
        (*)
        In the "Classic": the original binary executable
        format, these framework functions are directly
        transformed to MacOS system call. Therefore, the
        exact availability should be checked by running
        system.
    
        (**)
        InterfaceLib is bundled to MacOS and its version
        is usually equal to MacOS. There's no separate
        update for InterfaceLib. It is supposed that
        there's no InterfaceLib 9.x for m68k platforms.
        In fact, these functions are FSRef dependent.
    
        (***)
        ATSUI framework is available on ATSUnicode 8.5 on
        ppc Toolbox CFM, CarbonLib 1.0 too. But its base:
        ATS font manager is not published in these versions.
    
    ------------------------------------------------------------
    Last update: 2013-Nov-03.
    
    Currently maintained by
    	suzuki toshiya, <mpsuzuki@hiroshima-u.ac.jp>
    Originally prepared by
    	Leonard Rosenthol, <leonardr@lazerware.com>
    	Just van Rossum, <just@letterror.com>