#!/usr/bin/env python3 # -*- coding: utf-8 -*- #=============================================================================== # File: "macbuild/build4mac.py" # # The top Python script for building KLayout (http://www.klayout.de/index.php) # version 0.29.11 or later on different Apple Mac OSX platforms. #=============================================================================== import sys import os import re import codecs import shutil import glob import platform import optparse import subprocess import pprint #------------------------------------------------------------------------------- ## To import global dictionaries of different modules and utility functions #------------------------------------------------------------------------------- mydir = os.path.dirname(os.path.abspath(__file__)) sys.path.append( mydir + "/macbuild" ) from build4mac_env import * from build4mac_util import * #------------------------------------------------------------------------------- ## To generate the OS-wise usage strings and the default module set # # @param[in] platform platform name # # @return (usage, moduleset)-tuple #------------------------------------------------------------------------------- def GenerateUsage(platform): if platform.upper() in [ "SEQUOIA", "SONOMA", "VENTURA", "MONTEREY" ]: # with Xcode [13.1 .. ] myQt56 = "qt5macports" myRuby = "sys" myPython = "sys" moduleset = ('Qt5MacPorts', 'Sys', 'Sys') else: # too obsolete raise Exception( "! Too obsolete platform <%s>" % platform ) usage = "\n" usage += "-----------------------------------------------------------------------------------------------------------\n" usage += "<< Usage of 'build4mac.py' >>\n" usage += " for building KLayout 0.29.11 or later on different Apple macOS platforms.\n" usage += "\n" usage += "$ [python] ./build4mac.py\n" usage += " option & argument : descriptions (refer to 'macbuild/build4mac_env.py' for details) | default value\n" usage += " ----------------------------------------------------------------------------------------+---------------\n" usage += " [-q|--qt ] : case-insensitive type=['Qt5MacPorts', 'Qt5Brew', 'Qt5Ana3', | %s\n" % myQt56 usage += " : 'Qt6MacPorts', 'Qt6Brew'] |\n" usage += " : Qt5MacPorts: use Qt5 from MacPorts |\n" usage += " : Qt5Brew: use Qt5 from Homebrew |\n" usage += " : Qt5Ana3: use Qt5 from Anaconda3 |\n" usage += " : Qt6MacPorts: use Qt6 from MacPorts (*) |\n" usage += " : Qt6Brew: use Qt6 from Homebrew (*) |\n" usage += " : (*) migration to Qt6 is ongoing |\n" usage += " [-r|--ruby ] : case-insensitive type=['nil', 'Sys', 'MP33', 'HB34', 'Ana3'] | %s\n" % myRuby usage += " : nil: don't bind Ruby |\n" usage += " : Sys: use [Sequoia|Sonoma|Ventura|Monterey]-bundled Ruby 2.6 |\n" usage += " : MP33: use Ruby 3.3 from MacPorts |\n" usage += " : HB34: use Ruby 3.4 from Homebrew |\n" usage += " : Ana3: use Ruby 3.2 from Anaconda3 |\n" usage += " [-p|--python ] : case-insensitive type=['nil', 'Sys', 'MP312', 'HB312', 'Ana3', | %s\n" % myPython usage += " : 'MP311', 'HB311', 'HBAuto'] |\n" usage += " : nil: don't bind Python |\n" usage += " : Sys: use [Sequoia|Sonoma|Ventura|Monterey]-bundled Python 3.9 |\n" usage += " : MP312: use Python 3.12 from MacPorts |\n" usage += " : HB312: use Python 3.12 from Homebrew |\n" usage += " : Ana3: use Python 3.12 from Anaconda3 |\n" usage += " : MP311: use Python 3.11 from MacPorts |\n" usage += " : HB311: use Python 3.11 from Homebrew (+) |\n" usage += " : (+) required to provide the legacy pip in HW-*.dmg |\n" usage += " : HBAuto: use the latest Python 3.x auto-detected from Homebrew |\n" usage += " [-P|--buildPymod] : build and deploy Pymod (*.whl) for LW-*.dmg | disabled\n" usage += " [-n|--noqtbinding] : don't create Qt bindings for ruby scripts | disabled\n" usage += " [-u|--noqtuitools] : don't include uitools in Qt binding | disabled\n" usage += " [-g|--nolibgit2] : don't include libgit2 for Git package support | disabled\n" usage += " [-m|--make