Use Ruby 3.3 from Homebrew and MacPorts

Enhanced nightlyBuild.py to allow the mixed use of Qt5 and Qt6
This commit is contained in:
Kazunari Sekigawa 2024-02-17 06:51:08 +09:00
parent 888252ece2
commit eca739c462
19 changed files with 512 additions and 282 deletions

View File

@ -1,9 +1,9 @@
Relevant KLayout version: 0.28.15<br> Relevant KLayout version: 0.28.17<br>
Author: Kazzz-S<br> Author: Kazzz-S<br>
Last modified: 2024-01-05<br> Last modified: 2024-02-16<br>
# 1. Introduction # 1. Introduction
This directory **`macbuild`** contains various files required for building KLayout (http://www.klayout.de/) version 0.28.13 or later for different 64-bit macOS, including: This directory **`macbuild`** contains various files required for building KLayout (http://www.klayout.de/) version 0.28.17 or later for different 64-bit macOS, including:
* Monterey (12.x) : the primary development environment * Monterey (12.x) : the primary development environment
* Ventura (13.x) : experimental * Ventura (13.x) : experimental
* Sonoma (14.x) : -- ditto -- * Sonoma (14.x) : -- ditto --
@ -51,6 +51,8 @@ Some typical use cases are described in Section 6.
# 4. Prerequisites # 4. Prerequisites
You need to have the followings: You need to have the followings:
* The latest Xcode and command-line tool kit compliant with each OS * The latest Xcode and command-line tool kit compliant with each OS
* https://developer.apple.com/xcode/resources/
* https://mac.install.guide/commandlinetools/4
* Qt5 package from Homebrew, MacPorts, or Anaconda3 * Qt5 package from Homebrew, MacPorts, or Anaconda3
* Optionally, Ruby and Python packages from Homebrew, MacPorts, or Anaconda3 * Optionally, Ruby and Python packages from Homebrew, MacPorts, or Anaconda3
#### For matching versions of Ruby and Python, please also refer to `build4mac_env.py`. #### For matching versions of Ruby and Python, please also refer to `build4mac_env.py`.
@ -63,12 +65,12 @@ The operating system type is detected automatically.
``` ```
--------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------
<< Usage of 'build4mac.py' >> << Usage of 'build4mac.py' >>
for building KLayout 0.28.13 or later on different Apple macOS platforms. for building KLayout 0.28.17 or later on different Apple macOS platforms.
$ [python] ./build4mac.py $ [python] ./build4mac.py
option & argument : descriptions (refer to 'macbuild/build4mac_env.py' for details)| default value option & argument : descriptions (refer to 'macbuild/build4mac_env.py' for details)| default value
--------------------------------------------------------------------------------------+--------------- --------------------------------------------------------------------------------------+---------------
[-q|--qt <type>] : case-insensitive type=['Qt5MacPorts', 'Qt5Brew', 'Qt5Ana3', | qt5brew [-q|--qt <type>] : case-insensitive type=['Qt5MacPorts', 'Qt5Brew', 'Qt5Ana3', | qt5macports
: 'Qt6MacPorts', 'Qt6Brew'] | : 'Qt6MacPorts', 'Qt6Brew'] |
: Qt5MacPorts: use Qt5 from MacPorts | : Qt5MacPorts: use Qt5 from MacPorts |
: Qt5Brew: use Qt5 from Homebrew | : Qt5Brew: use Qt5 from Homebrew |
@ -76,20 +78,21 @@ $ [python] ./build4mac.py
: Qt6MacPorts: use Qt6 from MacPorts (*) | : Qt6MacPorts: use Qt6 from MacPorts (*) |
: Qt6Brew: use Qt6 from Homebrew (*) | : Qt6Brew: use Qt6 from Homebrew (*) |
: (*) migration to Qt6 is ongoing | : (*) migration to Qt6 is ongoing |
[-r|--ruby <type>] : case-insensitive type=['nil', 'Sys', 'MP32', 'HB32', 'Ana3'] | hb32 [-r|--ruby <type>] : case-insensitive type=['nil', 'Sys', 'MP33', 'HB33', 'Ana3'] | sys
: nil: don't bind Ruby | : nil: don't bind Ruby |
: Sys: use [Sonoma|Ventura|Monterey]-bundled Ruby 2.6 | : Sys: use [Sonoma|Ventura|Monterey]-bundled Ruby 2.6 |
: MP32: use Ruby 3.2 from MacPorts | : MP33: use Ruby 3.3 from MacPorts |
: HB32: use Ruby 3.2 from Homebrew | : HB33: use Ruby 3.3 from Homebrew |
: Ana3: use Ruby 3.2 from Anaconda3 | : Ana3: use Ruby 3.2 from Anaconda3 |
[-p|--python <type>] : case-insensitive type=['nil', 'MP311', 'HB311', 'Ana3', | hb311 [-p|--python <type>] : case-insensitive type=['nil', 'Sys', 'MP311', 'HB311', 'Ana3', | sys
: 'MP39', 'hb311', 'HBAuto'] | : 'MP39', 'HB39', 'HBAuto'] |
: nil: don't bind Python | : nil: don't bind Python |
: Sys: use [Sonoma|Ventura|Monterey]-bundled Python 3.9 |
: MP311: use Python 3.11 from MacPorts | : MP311: use Python 3.11 from MacPorts |
: HB311: use Python 3.11 from Homebrew | : HB311: use Python 3.11 from Homebrew |
: Ana3: use Python 3.11 from Anaconda3 | : Ana3: use Python 3.11 from Anaconda3 |
: MP39: use Python 3.9 from MacPorts (+) | : MP39: use Python 3.9 from MacPorts (+) |
: hb311: use Python 3.9 from Homebrew (+) | : HB39: use Python 3.9 from Homebrew (+) |
: (+) for the backward compatibility tests | : (+) for the backward compatibility tests |
: HBAuto: use the latest Python 3.x auto-detected from Homebrew | : HBAuto: use the latest Python 3.x auto-detected from Homebrew |
[-P|--buildPymod] : build and deploy Pymod (*.whl) for LW-*.dmg | disabled [-P|--buildPymod] : build and deploy Pymod (*.whl) for LW-*.dmg | disabled
@ -118,24 +121,55 @@ $ [python] ./build4mac.py
In this section, the actual file and directory names are those obtained on macOS Monterey.<br> In this section, the actual file and directory names are those obtained on macOS Monterey.<br>
On different OS, those names differ accordingly. On different OS, those names differ accordingly.
### 6A. Standard build using the OS-bundled Ruby and Python with MacPorts ### 6A. Standard build using the OS-bundled Ruby and Python with MacPorts Qt
This build has been discontinued. 0. Install MacPorts, then install Qt5 and libgit2 by
```
$ sudo port install coreutils
$ sudo port install findutils
$ sudo port install qt5
$ sudo port install libgit2
```
### 6B. Fully Homebrew-flavored build with Homebrew Ruby 3.2 and Homebrew Python 3.11 Confirm that you have:
0. Install Homebrew, then install Qt5, Ruby 3.2, Python 3.11, and libgit2 by ```
/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/*
```
As of this writing, the provided Python version is `3.9.6`.
1. Invoke **`build4mac.py`** with the following options: **((Notes))** These options are the default values for Monterey, Ventura, and Sonoma.
```
$ cd /where/'build.sh'/exists
$ ./build4mac.py -q qt5macports -r sys -p sys
```
2. Confirm successful build (it will take about one hour, depending on your machine spec).
3. Rerun **`build4mac.py`** with the same options used in 1. PLUS "-y" to deploy executables and libraries under **`klayout.app`** bundle.<br>
The buddy command-line tools (strm*) will also be deployed under **klayout.app/Contents/Buddy/** in this step.<br>
```
$ ./build4mac.py -q qt5macports -r sys -p sys -y
```
The application bundle **`klayout.app`** is located under:<br>
**`ST-qt5MP.pkg.macos-Monterey-release-RsysPsys`** directory, where
* "ST-" means this is a standard package.
* "qt5MP" means that Qt5 from MacPorts is used.
* "RsysPsys" means that Ruby is 2.6 provided by OS; Python is 3.9 provided by OS.
4. Copy/move the generated application bundle **`klayout.app`** to your **`/Applications`** directory for installation.
### 6B. Fully Homebrew-flavored build with Homebrew Ruby 3.3 and Homebrew Python 3.11
0. Install Homebrew, then install Qt5, Ruby 3.3, Python 3.11, and libgit2 by
``` ```
$ brew install qt@5 $ brew install qt@5
$ brew install ruby@3.2 $ brew install ruby@3.3
$ brew install python@3.11 $ brew install python@3.11
$ brew install libgit2 $ brew install libgit2
$ cd /where/'build.sh'/exists $ cd /where/'build.sh'/exists
$ cd macbuild $ cd macbuild
$ ./python3HB.py -v 3.11 $ ./python3HB.py -v 3.11
``` ```
1. Invoke **`build4mac.py`** with the following options: **((Notes))** These options are the default values for Monterey, Ventura, and Sonoma. 1. Invoke **`build4mac.py`** with the following options:
``` ```
$ cd /where/'build.sh'/exists $ cd /where/'build.sh'/exists
$ ./build4mac.py -q qt5brew -r hb32 -p hb311 $ ./build4mac.py -q qt5brew -r hb33 -p hb311
``` ```
2. Confirm successful build (it will take about one hour, depending on your machine spec). 2. Confirm successful build (it will take about one hour, depending on your machine spec).
3. Rerun **`build4mac.py`** with the same options used in 1. PLUS "-Y" to deploy executables and libraries under **`klayout.app`** bundle.<br> 3. Rerun **`build4mac.py`** with the same options used in 1. PLUS "-Y" to deploy executables and libraries under **`klayout.app`** bundle.<br>
@ -143,13 +177,13 @@ $ ./build4mac.py -q qt5brew -r hb32 -p hb311
If you use `--buildPymod` option in Step-1 and Step-3, the KLayout Python Module (\*.whl) will be built and deployed under **klayout.app/Contents/pymod-dist/**. If you use `--buildPymod` option in Step-1 and Step-3, the KLayout Python Module (\*.whl) will be built and deployed under **klayout.app/Contents/pymod-dist/**.
``` ```
$ ./build4mac.py -q qt5brew -r hb32 -p hb311 -Y $ ./build4mac.py -q qt5brew -r hb33 -p hb311 -Y
``` ```
The application bundle **`klayout.app`** is located under:<br> The application bundle **`klayout.app`** is located under:<br>
**`LW-qt5Brew.pkg.macos-Monterey-release-Rhb32Phb311`** directory, where **`LW-qt5Brew.pkg.macos-Monterey-release-Rhb33Phb311`** directory, where
* "LW-" means this is a lightweight package. * "LW-" means this is a lightweight package.
* "qt5Brew" means that Qt5 from Homebrew is used. * "qt5Brew" means that Qt5 from Homebrew is used.
* "Rhb32Phb311" means that Ruby is 3.2 from Homebrew; Python is 3.11 from Homebrew. * "Rhb33Phb311" means that Ruby is 3.3 from Homebrew; Python is 3.11 from Homebrew.
4. Copy/move the generated application bundle **`klayout.app`** to your **`/Applications`** directory for installation. 4. Copy/move the generated application bundle **`klayout.app`** to your **`/Applications`** directory for installation.
### 6C. Partially Homebrew-flavored build with System Ruby and Homebrew Python 3.11 ### 6C. Partially Homebrew-flavored build with System Ruby and Homebrew Python 3.11
@ -184,13 +218,13 @@ $ ./build4mac.py -q qt5brew -r sys -p hb311 -y
So far, the deployment of Homebrew Ruby is not supported.<br> So far, the deployment of Homebrew Ruby is not supported.<br>
Therefore, if you intend to use the "-y" option for deployment, you need to use the "-r sys" option for building. Therefore, if you intend to use the "-y" option for deployment, you need to use the "-r sys" option for building.
### 6D. Fully MacPorts-flavored build with MacPorts Ruby 3.2 and MacPorts Python 3.11 ### 6D. Fully MacPorts-flavored build with MacPorts Ruby 3.3 and MacPorts Python 3.11
0. Install MacPorts, then install Qt5, Ruby 3.2, Python 3.11, and libgit2 by 0. Install MacPorts, then install Qt5, Ruby 3.3, Python 3.11, and libgit2 by
``` ```
$ sudo port install coreutils $ sudo port install coreutils
$ sudo port install findutils $ sudo port install findutils
$ sudo port install qt5 $ sudo port install qt5
$ sudo port install ruby32 $ sudo port install ruby33
$ sudo port install python311 $ sudo port install python311
$ sudo port install py311-pip $ sudo port install py311-pip
$ sudo port install libgit2 $ sudo port install libgit2
@ -198,7 +232,7 @@ $ sudo port install libgit2
1. Invoke **`build4mac.py`** with the following options: 1. Invoke **`build4mac.py`** with the following options:
``` ```
$ cd /where/'build.sh'/exists $ cd /where/'build.sh'/exists
$ ./build4mac.py -q qt5macports -r mp32 -p mp311 $ ./build4mac.py -q qt5macports -r mp33 -p mp311
``` ```
2. Confirm successful build (it will take about one hour, depending on your machine spec). 2. Confirm successful build (it will take about one hour, depending on your machine spec).
3. Rerun **`build4mac.py`** with the same options used in 1. PLUS "-Y" to deploy executables and libraries under **`klayout.app`** bundle.<br> 3. Rerun **`build4mac.py`** with the same options used in 1. PLUS "-Y" to deploy executables and libraries under **`klayout.app`** bundle.<br>
@ -206,13 +240,13 @@ $ ./build4mac.py -q qt5macports -r mp32 -p mp311
If you use `--buildPymod` option in Step-1 and Step-3, the KLayout Python Module (\*.whl) will be built and deployed under **klayout.app/Contents/pymod-dist/**. If you use `--buildPymod` option in Step-1 and Step-3, the KLayout Python Module (\*.whl) will be built and deployed under **klayout.app/Contents/pymod-dist/**.
``` ```
$ ./build4mac.py -q qt5macports -r mp32 -p mp311 -Y $ ./build4mac.py -q qt5macports -r mp33 -p mp311 -Y
``` ```
The application bundle **`klayout.app`** is located under:<br> The application bundle **`klayout.app`** is located under:<br>
**`LW-qt5MP.pkg.macos-Monterey-release-Rmp32Pmp311`** directory, where **`LW-qt5MP.pkg.macos-Monterey-release-Rmp33Pmp311`** directory, where
* "LW-" means this is a lightweight package. * "LW-" means this is a lightweight package.
* "qt5MP" means that Qt5 from MacPorts is used. * "qt5MP" means that Qt5 from MacPorts is used.
* "Rmp32Pmp311" means that Ruby is 3.2 from MacPorts; Python is 3.11 from MacPorts. * "Rmp33Pmp311" means that Ruby is 3.3 from MacPorts; Python is 3.11 from MacPorts.
4. Copy/move the generated application bundle **`klayout.app`** to your **`/Applications`** directory for installation. 4. Copy/move the generated application bundle **`klayout.app`** to your **`/Applications`** directory for installation.
### 6E. Fully Anaconda3-flavored build with Anaconda3 Ruby 3.2 and Anaconda3 Python 3.11 ### 6E. Fully Anaconda3-flavored build with Anaconda3 Ruby 3.2 and Anaconda3 Python 3.11
@ -273,11 +307,11 @@ makeDMG4mac.py -> macbuild/makeDMG4mac.py
2. Invoke **`makeDMG4mac.py`** with -p and -m options, for example, 2. Invoke **`makeDMG4mac.py`** with -p and -m options, for example,
``` ```
$ cd /where/'build.sh'/exists $ cd /where/'build.sh'/exists
$ ./makeDMG4mac.py -p LW-qt5MP.pkg.macos-Monterey-release-Rmp32Pmp311 -m $ ./makeDMG4mac.py -p LW-qt5MP.pkg.macos-Monterey-release-Rmp33Pmp311 -m
``` ```
This command will generate the two files below:<br> This command will generate the two files below:<br>
* **`LW-klayout-0.28.13-macOS-Monterey-1-qt5MP-Rmp32Pmp311.dmg`** ---(1) the main DMG file * **`LW-klayout-0.28.17-macOS-Monterey-1-qt5MP-Rmp33Pmp311.dmg`** ---(1) the main DMG file
* **`LW-klayout-0.28.13-macOS-Monterey-1-qt5MP-Rmp32Pmp311.dmg.md5`** ---(2) MD5-value text file * **`LW-klayout-0.28.17-macOS-Monterey-1-qt5MP-Rmp33Pmp311.dmg.md5`** ---(2) MD5-value text file
# Known issues # Known issues
Because we assume some specific versions of non-OS-standard Ruby and Python, updating Homebrew, MacPorts, or Anaconda3 may cause build- and link errors.<br> Because we assume some specific versions of non-OS-standard Ruby and Python, updating Homebrew, MacPorts, or Anaconda3 may cause build- and link errors.<br>

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

View File

@ -5,7 +5,7 @@
# File: "macbuild/build4mac.py" # File: "macbuild/build4mac.py"
# #
# The top Python script for building KLayout (http://www.klayout.de/index.php) # The top Python script for building KLayout (http://www.klayout.de/index.php)
# version 0.28.13 or later on different Apple Mac OSX platforms. # version 0.28.17 or later on different Apple Mac OSX platforms.
#=============================================================================== #===============================================================================
import sys import sys
import os import os
@ -35,17 +35,17 @@ from build4mac_util import *
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def GenerateUsage(platform): def GenerateUsage(platform):
if platform.upper() in [ "SONOMA", "VENTURA", "MONTEREY" ]: # with Xcode [13.1 .. ] if platform.upper() in [ "SONOMA", "VENTURA", "MONTEREY" ]: # with Xcode [13.1 .. ]
myQt56 = "qt5brew" myQt56 = "qt5macports"
myRuby = "hb32" myRuby = "sys"
myPython = "hb311" myPython = "sys"
moduleset = ('qt5Brew', 'HB32', 'HB311') moduleset = ('Qt5MacPorts', 'Sys', 'Sys')
else: # too obsolete else: # too obsolete
raise Exception( "! Too obsolete platform <%s>" % platform ) raise Exception( "! Too obsolete platform <%s>" % platform )
usage = "\n" usage = "\n"
usage += "---------------------------------------------------------------------------------------------------------\n" usage += "---------------------------------------------------------------------------------------------------------\n"
usage += "<< Usage of 'build4mac.py' >>\n" usage += "<< Usage of 'build4mac.py' >>\n"
usage += " for building KLayout 0.28.13 or later on different Apple macOS platforms.\n" usage += " for building KLayout 0.28.17 or later on different Apple macOS platforms.\n"
usage += "\n" usage += "\n"
usage += "$ [python] ./build4mac.py\n" usage += "$ [python] ./build4mac.py\n"
usage += " option & argument : descriptions (refer to 'macbuild/build4mac_env.py' for details)| default value\n" usage += " option & argument : descriptions (refer to 'macbuild/build4mac_env.py' for details)| default value\n"
@ -58,15 +58,16 @@ def GenerateUsage(platform):
usage += " : Qt6MacPorts: use Qt6 from MacPorts (*) |\n" usage += " : Qt6MacPorts: use Qt6 from MacPorts (*) |\n"
usage += " : Qt6Brew: use Qt6 from Homebrew (*) |\n" usage += " : Qt6Brew: use Qt6 from Homebrew (*) |\n"
usage += " : (*) migration to Qt6 is ongoing |\n" usage += " : (*) migration to Qt6 is ongoing |\n"
usage += " [-r|--ruby <type>] : case-insensitive type=['nil', 'Sys', 'MP32', 'HB32', 'Ana3'] | %s\n" % myRuby usage += " [-r|--ruby <type>] : case-insensitive type=['nil', 'Sys', 'MP33', 'HB33', 'Ana3'] | %s\n" % myRuby
usage += " : nil: don't bind Ruby |\n" usage += " : nil: don't bind Ruby |\n"
usage += " : Sys: use [Sonoma|Ventura|Monterey]-bundled Ruby 2.6 |\n" usage += " : Sys: use [Sonoma|Ventura|Monterey]-bundled Ruby 2.6 |\n"
usage += " : MP32: use Ruby 3.2 from MacPorts |\n" usage += " : MP33: use Ruby 3.3 from MacPorts |\n"
usage += " : HB32: use Ruby 3.2 from Homebrew |\n" usage += " : HB33: use Ruby 3.3 from Homebrew |\n"
usage += " : Ana3: use Ruby 3.2 from Anaconda3 |\n" usage += " : Ana3: use Ruby 3.2 from Anaconda3 |\n"
usage += " [-p|--python <type>] : case-insensitive type=['nil', 'MP311', 'HB311', 'Ana3', | %s\n" % myPython usage += " [-p|--python <type>] : case-insensitive type=['nil', 'Sys', 'MP311', 'HB311', 'Ana3', | %s\n" % myPython
usage += " : 'MP39', 'HB39', 'HBAuto'] |\n" usage += " : 'MP39', 'HB39', 'HBAuto'] |\n"
usage += " : nil: don't bind Python |\n" usage += " : nil: don't bind Python |\n"
usage += " : Sys: use [Sonoma|Ventura|Monterey]-bundled Python 3.9 |\n"
usage += " : MP311: use Python 3.11 from MacPorts |\n" usage += " : MP311: use Python 3.11 from MacPorts |\n"
usage += " : HB311: use Python 3.11 from Homebrew |\n" usage += " : HB311: use Python 3.11 from Homebrew |\n"
usage += " : Ana3: use Python 3.11 from Anaconda3 |\n" usage += " : Ana3: use Python 3.11 from Anaconda3 |\n"
@ -149,19 +150,19 @@ def Get_Default_Config():
# Set the default modules # Set the default modules
if Platform == "Sonoma": if Platform == "Sonoma":
ModuleQt = "Qt5Brew" ModuleQt = "Qt5MacPorts"
ModuleRuby = "Ruby32Brew" ModuleRuby = "Sys"
ModulePython = "Python311Brew" ModulePython = "Sys"
elif Platform == "Ventura": elif Platform == "Ventura":
ModuleQt = "Qt5Brew" ModuleQt = "Qt5MacPorts"
ModuleRuby = "Ruby32Brew" ModuleRuby = "Sys"
ModulePython = "Python311Brew" ModulePython = "Sys"
elif Platform == "Monterey": elif Platform == "Monterey":
ModuleQt = "Qt5Brew" ModuleQt = "Qt5MacPorts"
ModuleRuby = "Ruby32Brew" ModuleRuby = "Sys"
ModulePython = "Python311Brew" ModulePython = "Sys"
else: else:
ModuleQt = "Qt5Brew" ModuleQt = "Qt5MacPorts"
ModuleRuby = "nil" ModuleRuby = "nil"
ModulePython = "nil" ModulePython = "nil"
@ -179,6 +180,7 @@ def Get_Default_Config():
DeployVerbose = 1 DeployVerbose = 1
Version = GetKLayoutVersionFrom( "./version.sh" ) Version = GetKLayoutVersionFrom( "./version.sh" )
HBPythonIs39 = False # because ModulePython == "Python311Brew" by default HBPythonIs39 = False # because ModulePython == "Python311Brew" by default
OSPython3FW = None # system Python3 frameworks in [ None, MontereyPy3FW, VenturaPy3FW, SonomaPy3FW ]
config = dict() config = dict()
config['ProjectDir'] = ProjectDir # project directory where "build.sh" exists config['ProjectDir'] = ProjectDir # project directory where "build.sh" exists
@ -204,6 +206,7 @@ def Get_Default_Config():
config['ModuleSet'] = ModuleSet # (Qt, Ruby, Python)-tuple config['ModuleSet'] = ModuleSet # (Qt, Ruby, Python)-tuple
config['ToolDebug'] = ToolDebug # debug level list for this tool config['ToolDebug'] = ToolDebug # debug level list for this tool
config['HBPythonIs39'] = HBPythonIs39 # True if the Homebrew Python version <= 3.9 config['HBPythonIs39'] = HBPythonIs39 # True if the Homebrew Python version <= 3.9
config['OSPython3FW'] = OSPython3FW # system Python3 frameworks in [ None, MontereyPy3FW, VenturaPy3FW, SonomaPy3FW ]
# auxiliary variables on platform # auxiliary variables on platform
config['System'] = System # 6-tuple from platform.uname() config['System'] = System # 6-tuple from platform.uname()
config['Node'] = Node # - do - config['Node'] = Node # - do -
@ -246,6 +249,7 @@ def Parse_CLI_Args(config):
ModuleSet = config['ModuleSet'] ModuleSet = config['ModuleSet']
ToolDebug = config['ToolDebug'] ToolDebug = config['ToolDebug']
HBPythonIs39 = config['HBPythonIs39'] HBPythonIs39 = config['HBPythonIs39']
OSPython3FW = config['OSPython3FW']
#----------------------------------------------------- #-----------------------------------------------------
# [2] Parse the CLI arguments # [2] Parse the CLI arguments
@ -257,7 +261,7 @@ def Parse_CLI_Args(config):
p.add_option( '-r', '--ruby', p.add_option( '-r', '--ruby',
dest='type_ruby', dest='type_ruby',
help="Ruby type=['nil', 'Sys', 'MP32', 'HB32', 'Ana3']" ) help="Ruby type=['nil', 'Sys', 'MP33', 'HB33', 'Ana3']" )
p.add_option( '-p', '--python', p.add_option( '-p', '--python',
dest='type_python', dest='type_python',
@ -331,9 +335,9 @@ def Parse_CLI_Args(config):
help='check usage' ) help='check usage' )
if Platform.upper() in [ "SONOMA", "VENTURA", "MONTEREY" ]: # with Xcode [13.1 .. ] if Platform.upper() in [ "SONOMA", "VENTURA", "MONTEREY" ]: # with Xcode [13.1 .. ]
p.set_defaults( type_qt = "qt5brew", p.set_defaults( type_qt = "qt5macports",
type_ruby = "hb32", type_ruby = "sys",
type_python = "hb311", type_python = "sys",
build_pymod = False, build_pymod = False,
no_qt_binding = False, no_qt_binding = False,
no_qt_uitools = False, no_qt_uitools = False,
@ -390,8 +394,8 @@ def Parse_CLI_Args(config):
candidates = dict() candidates = dict()
candidates['NIL'] = 'nil' candidates['NIL'] = 'nil'
candidates['SYS'] = 'Sys' candidates['SYS'] = 'Sys'
candidates['MP32'] = 'MP32' candidates['MP33'] = 'MP33'
candidates['HB32'] = 'HB32' candidates['HB33'] = 'HB33'
candidates['ANA3'] = 'Ana3' candidates['ANA3'] = 'Ana3'
try: try:
choiceRuby = candidates[ opt.type_ruby.upper() ] choiceRuby = candidates[ opt.type_ruby.upper() ]
@ -403,18 +407,17 @@ def Parse_CLI_Args(config):
if choiceRuby == "nil": if choiceRuby == "nil":
ModuleRuby = 'nil' ModuleRuby = 'nil'
elif choiceRuby == "Sys": elif choiceRuby == "Sys":
choiceRuby = "Sys"
if Platform == "Sonoma": if Platform == "Sonoma":
ModuleRuby = 'RubySonoma' ModuleRuby = 'RubySonoma'
elif Platform == "Ventura": elif Platform == "Ventura":
ModuleRuby = 'RubyVentura' ModuleRuby = 'RubyVentura'
elif Platform == "Monterey": elif Platform == "Monterey":
ModuleRuby = 'RubyMonterey' ModuleRuby = 'RubyMonterey'
elif choiceRuby == "MP32": elif choiceRuby == "MP33":
ModuleRuby = 'Ruby32MacPorts' ModuleRuby = 'Ruby33MacPorts'
NonOSStdLang = True NonOSStdLang = True
elif choiceRuby == "HB32": elif choiceRuby == "HB33":
ModuleRuby = 'Ruby32Brew' ModuleRuby = 'Ruby33Brew'
NonOSStdLang = True NonOSStdLang = True
elif choiceRuby == "Ana3": elif choiceRuby == "Ana3":
ModuleRuby = 'RubyAnaconda3' ModuleRuby = 'RubyAnaconda3'
@ -429,6 +432,7 @@ def Parse_CLI_Args(config):
# (C) Determine the Python type # (C) Determine the Python type
candidates = dict() candidates = dict()
candidates['NIL'] = 'nil' candidates['NIL'] = 'nil'
candidates['SYS'] = 'Sys'
candidates['MP311'] = 'MP311' candidates['MP311'] = 'MP311'
candidates['HB311'] = 'HB311' candidates['HB311'] = 'HB311'
candidates['ANA3'] = 'Ana3' candidates['ANA3'] = 'Ana3'
@ -445,29 +449,49 @@ def Parse_CLI_Args(config):
if choicePython == "nil": if choicePython == "nil":
ModulePython = 'nil' ModulePython = 'nil'
HBPythonIs39 = None HBPythonIs39 = None
OSPython3FW = None
elif choicePython == "Sys":
if Platform == "Sonoma":
ModulePython = 'PythonSonoma'
HBPythonIs39 = None
OSPython3FW = SonomaPy3FW
elif Platform == "Ventura":
ModulePython = 'PythonVentura'
HBPythonIs39 = None
OSPython3FW = VenturaPy3FW
elif Platform == "Monterey":
ModulePython = 'PythonMonterey'
HBPythonIs39 = None
OSPython3FW = MontereyPy3FW
elif choicePython == "MP311": elif choicePython == "MP311":
ModulePython = 'Python311MacPorts' ModulePython = 'Python311MacPorts'
HBPythonIs39 = None HBPythonIs39 = None
OSPython3FW = None
NonOSStdLang = True NonOSStdLang = True
elif choicePython == "HB311": elif choicePython == "HB311":
ModulePython = 'Python311Brew' ModulePython = 'Python311Brew'
HBPythonIs39 = False HBPythonIs39 = False
OSPython3FW = None
NonOSStdLang = True NonOSStdLang = True
elif choicePython == "Ana3": elif choicePython == "Ana3":
ModulePython = 'PythonAnaconda3' ModulePython = 'PythonAnaconda3'
HBPythonIs39 = None HBPythonIs39 = None
OSPython3FW = None
NonOSStdLang = True NonOSStdLang = True
elif choicePython == "MP39": elif choicePython == "MP39":
ModulePython = 'Python39MacPorts' ModulePython = 'Python39MacPorts'
HBPythonIs39 = None HBPythonIs39 = None
OSPython3FW = None
NonOSStdLang = True NonOSStdLang = True
elif choicePython == "HB39": elif choicePython == "HB39":
ModulePython = 'Python39Brew' ModulePython = 'Python39Brew'
HBPythonIs39 = True HBPythonIs39 = True
OSPython3FW = None
NonOSStdLang = True NonOSStdLang = True
elif choicePython == "HBAuto": elif choicePython == "HBAuto":
ModulePython = 'PythonAutoBrew' ModulePython = 'PythonAutoBrew'
HBPythonIs39 = (HBPythonAutoVersion == "3.9") HBPythonIs39 = (HBPythonAutoVersion == "3.9")
OSPython3FW = None
NonOSStdLang = True NonOSStdLang = True
if ModulePython == '': if ModulePython == '':
print("") print("")
@ -524,7 +548,7 @@ def Parse_CLI_Args(config):
else: else:
message += "a lightweight (LW-) package with Pymod excluding Qt5, Ruby, and Python..." message += "a lightweight (LW-) package with Pymod excluding Qt5, Ruby, and Python..."
elif DeploymentF: elif DeploymentF:
if (ModuleRuby in RubySys) and (ModulePython in PythonSys): # won't meet this condition any more! if (ModuleRuby in RubySys) and (ModulePython in PythonSys):
PackagePrefix = "ST-" PackagePrefix = "ST-"
message += "a standard (ST-) package including Qt[5|6] and using OS-bundled Ruby and Python..." message += "a standard (ST-) package including Qt[5|6] and using OS-bundled Ruby and Python..."
elif ModulePython in ['Python311Brew', 'Python39Brew', 'PythonAutoBrew']: elif ModulePython in ['Python311Brew', 'Python39Brew', 'PythonAutoBrew']:
@ -568,6 +592,7 @@ def Parse_CLI_Args(config):
config['ModuleSet'] = ModuleSet config['ModuleSet'] = ModuleSet
config['ToolDebug'] = ToolDebug config['ToolDebug'] = ToolDebug
config['HBPythonIs39'] = HBPythonIs39 config['HBPythonIs39'] = HBPythonIs39
config['OSPython3FW'] = OSPython3FW
if CheckComOnly: if CheckComOnly:
pp = pprint.PrettyPrinter( indent=4, width=140 ) pp = pprint.PrettyPrinter( indent=4, width=140 )
@ -606,6 +631,7 @@ def Get_Build_Parameters(config):
DeploymentF = config['DeploymentF'] DeploymentF = config['DeploymentF']
DeploymentP = config['DeploymentP'] DeploymentP = config['DeploymentP']
PackagePrefix = config['PackagePrefix'] PackagePrefix = config['PackagePrefix']
OSPython3FW = config['OSPython3FW']
#----------------------------------------------------- #-----------------------------------------------------
# [2] Set parameters passed to the main Bash script # [2] Set parameters passed to the main Bash script
@ -652,7 +678,10 @@ def Get_Build_Parameters(config):
parameters['bin'] = MacBinDir parameters['bin'] = MacBinDir
parameters['build'] = MacBuildDir parameters['build'] = MacBuildDir
parameters['rpath'] = "@executable_path/../Frameworks" if OSPython3FW in [ MontereyPy3FW, VenturaPy3FW, SonomaPy3FW ]:
parameters['rpath'] = OSPython3FW
else:
parameters['rpath'] = "@executable_path/../Frameworks"
# (E) want Qt bindings with Ruby scripts? # (E) want Qt bindings with Ruby scripts?
parameters['no_qt_bindings'] = NoQtBindings parameters['no_qt_bindings'] = NoQtBindings
@ -698,7 +727,7 @@ def Get_Build_Parameters(config):
# <pymod> will be built if: # <pymod> will be built if:
# BuildPymod = True # BuildPymod = True
# Platform = [ 'Sonoma', 'Ventura', 'Monterey'] # Platform = [ 'Sonoma', 'Ventura', 'Monterey']
# ModuleRuby = [ 'Ruby32MacPorts', 'Ruby32Brew', 'RubyAnaconda3' ] # ModuleRuby = [ 'Ruby33MacPorts', 'Ruby33Brew', 'RubyAnaconda3' ]
# ModulePython = [ 'Python311MacPorts', 'Python39MacPorts', # ModulePython = [ 'Python311MacPorts', 'Python39MacPorts',
# 'Python311Brew', Python39Brew', 'PythonAutoBrew', # 'Python311Brew', Python39Brew', 'PythonAutoBrew',
# 'PythonAnaconda3' ] # 'PythonAnaconda3' ]
@ -709,13 +738,13 @@ def Get_Build_Parameters(config):
PymodDistDir = dict() PymodDistDir = dict()
if Platform in [ 'Sonoma', 'Ventura', 'Monterey' ]: if Platform in [ 'Sonoma', 'Ventura', 'Monterey' ]:
if ModuleRuby in [ 'Ruby32MacPorts', 'Ruby32Brew', 'RubyAnaconda3' ]: if ModuleRuby in [ 'Ruby33MacPorts', 'Ruby33Brew', 'RubyAnaconda3' ]:
if ModulePython in [ 'Python311MacPorts', 'Python39MacPorts' ]: if ModulePython in [ 'Python311MacPorts', 'Python39MacPorts' ]:
PymodDistDir[ModulePython] = 'dist-MP3' PymodDistDir[ModulePython] = 'dist-MP3-%s' % ModuleQt
elif ModulePython in [ 'Python311Brew', 'Python39Brew', 'PythonAutoBrew' ]: elif ModulePython in [ 'Python311Brew', 'Python39Brew', 'PythonAutoBrew' ]:
PymodDistDir[ModulePython] = 'dist-HB3' PymodDistDir[ModulePython] = 'dist-HB3-%s' % ModuleQt
elif ModulePython in [ 'PythonAnaconda3' ]: elif ModulePython in [ 'PythonAnaconda3' ]:
PymodDistDir[ModulePython] = 'dist-ana3' PymodDistDir[ModulePython] = 'dist-ana3-%s' % ModuleQt
parameters['pymod_dist'] = PymodDistDir parameters['pymod_dist'] = PymodDistDir
return parameters return parameters
@ -732,7 +761,7 @@ def Build_pymod(parameters):
# [1] <pymod> will be built if: # [1] <pymod> will be built if:
# BuildPymod = True # BuildPymod = True
# Platform = [ 'Sonoma', 'Ventura', 'Monterey'] # Platform = [ 'Sonoma', 'Ventura', 'Monterey']
# ModuleRuby = [ 'Ruby32MacPorts', 'Ruby32Brew', 'RubyAnaconda3' ] # ModuleRuby = [ 'Ruby33MacPorts', 'Ruby33Brew', 'RubyAnaconda3' ]
# ModulePython = [ 'Python311MacPorts', 'Python39MacPorts', # ModulePython = [ 'Python311MacPorts', 'Python39MacPorts',
# 'Python311Brew', Python39Brew', 'PythonAutoBrew', # 'Python311Brew', Python39Brew', 'PythonAutoBrew',
# 'PythonAnaconda3' ] # 'PythonAnaconda3' ]
@ -745,7 +774,7 @@ def Build_pymod(parameters):
return 0 return 0
if not Platform in [ 'Sonoma', 'Ventura', 'Monterey' ]: if not Platform in [ 'Sonoma', 'Ventura', 'Monterey' ]:
return 0 return 0
elif not ModuleRuby in [ 'Ruby32MacPorts', 'Ruby32Brew', 'RubyAnaconda3' ]: elif not ModuleRuby in [ 'Ruby33MacPorts', 'Ruby33Brew', 'RubyAnaconda3' ]:
return 0 return 0
elif not ModulePython in [ 'Python311MacPorts', 'Python39MacPorts', 'PythonAnaconda3', \ elif not ModulePython in [ 'Python311MacPorts', 'Python39MacPorts', 'PythonAnaconda3', \
'Python311Brew', 'Python39Brew', 'PythonAutoBrew' ]: 'Python311Brew', 'Python39Brew', 'PythonAutoBrew' ]:
@ -758,17 +787,17 @@ def Build_pymod(parameters):
#-------------------------------------------------------------------- #--------------------------------------------------------------------
PymodDistDir = parameters['pymod_dist'] PymodDistDir = parameters['pymod_dist']
# Using MacPorts # Using MacPorts
if PymodDistDir[ModulePython] == 'dist-MP3': if PymodDistDir[ModulePython].find('dist-MP3') >= 0:
addBinPath = "/opt/local/bin" addBinPath = "/opt/local/bin"
addIncPath = "/opt/local/include" addIncPath = "/opt/local/include"
addLibPath = "/opt/local/lib" addLibPath = "/opt/local/lib"
# Using Homebrew # Using Homebrew
elif PymodDistDir[ModulePython] == 'dist-HB3': elif PymodDistDir[ModulePython].find('dist-HB3') >= 0:
addBinPath = "%s/bin" % DefaultHomebrewRoot # defined in "build4mac_env.py" addBinPath = "%s/bin" % DefaultHomebrewRoot # defined in "build4mac_env.py"
addIncPath = "%s/include" % DefaultHomebrewRoot # -- ditto -- addIncPath = "%s/include" % DefaultHomebrewRoot # -- ditto --
addLibPath = "%s/lib" % DefaultHomebrewRoot # -- ditto -- addLibPath = "%s/lib" % DefaultHomebrewRoot # -- ditto --
# Using Anaconda3 # Using Anaconda3
elif PymodDistDir[ModulePython] == 'dist-ana3': elif PymodDistDir[ModulePython].find('dist-ana3') >= 0:
addBinPath = "/Applications/anaconda3/bin" addBinPath = "/Applications/anaconda3/bin"
addIncPath = "/Applications/anaconda3/include" addIncPath = "/Applications/anaconda3/include"
addLibPath = "/Applications/anaconda3/lib" addLibPath = "/Applications/anaconda3/lib"
@ -1149,7 +1178,7 @@ def Deploy_Binaries_For_Bundle(config, parameters):
if BuildPymod: if BuildPymod:
try: try:
PymodDistDir = parameters['pymod_dist'] PymodDistDir = parameters['pymod_dist']
pymodDistDir = PymodDistDir[ModulePython] # [ 'dist-MP3', 'dist-HB3', 'dist-ana3' ] pymodDistDir = PymodDistDir[ModulePython] # [ 'dist-MP3-${ModuleQt}', 'dist-HB3-${ModuleQt}', 'dist-ana3-${ModuleQt}' ]
except KeyError: except KeyError:
pymodDistDir = "" pymodDistDir = ""
else: else:
@ -1798,15 +1827,15 @@ def Deploy_Binaries_For_Bundle(config, parameters):
return 1 return 1
#------------------------------------------------------------- #-------------------------------------------------------------
# [10] Special deployment of Ruby3.2 from Homebrew? # [10] Special deployment of Ruby3.3 from Homebrew?
#------------------------------------------------------------- #-------------------------------------------------------------
deploymentRuby32HB = (ModuleRuby == 'Ruby32Brew') deploymentRuby32HB = (ModuleRuby == 'Ruby33Brew')
if deploymentRuby32HB and NonOSStdLang: if deploymentRuby32HB and NonOSStdLang:
print( "" ) print( "" )
print( " [10] You have reached optional deployment of Ruby from %s ..." % HBRuby32Path ) print( " [10] You have reached optional deployment of Ruby from %s ..." % HBRuby33Path )
print( " [!!!] Sorry, the deployed package will not work properly since deployment of" ) print( " [!!!] Sorry, the deployed package will not work properly since deployment of" )
print( " Ruby3.2 from Homebrew is not yet supported." ) print( " Ruby3.3 from Homebrew is not yet supported." )
print( " Since you have Homebrew development environment, there two options:" ) print( " Since you have Homebrew development environment, there two options:" )
print( " (1) Retry to make a package with '-Y|--DEPLOY' option." ) print( " (1) Retry to make a package with '-Y|--DEPLOY' option." )
print( " This will not deploy any of Qt[5|6], Python, and Ruby from Homebrew." ) print( " This will not deploy any of Qt[5|6], Python, and Ruby from Homebrew." )

View File

@ -1,4 +1,4 @@
#! /usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#=============================================================================== #===============================================================================
@ -6,7 +6,7 @@
# #
# Here are dictionaries of ... # Here are dictionaries of ...
# different modules for building KLayout (http://www.klayout.de/index.php) # different modules for building KLayout (http://www.klayout.de/index.php)
# version 0.28.13 or later on different Apple Mac OSX platforms. # version 0.28.17 or later on different Apple Mac OSX platforms.
# #
# This file is imported by 'build4mac.py' script. # This file is imported by 'build4mac.py' script.
#=============================================================================== #===============================================================================
@ -117,7 +117,7 @@ Qt6Brew = { 'qmake' : '%s/opt/qt@6/bin/qmake' % DefaultHomebrewRoot,
#----------------------------------------------------- #-----------------------------------------------------
RubyNil = [ 'nil' ] RubyNil = [ 'nil' ]
RubySys = [ 'RubyMonterey', 'RubyVentura', 'RubySonoma' ] RubySys = [ 'RubyMonterey', 'RubyVentura', 'RubySonoma' ]
RubyExt = [ 'Ruby32MacPorts', 'Ruby32Brew', 'RubyAnaconda3' ] RubyExt = [ 'Ruby33MacPorts', 'Ruby33Brew', 'RubyAnaconda3' ]
Rubies = RubyNil + RubySys + RubyExt Rubies = RubyNil + RubySys + RubyExt
#----------------------------------------------------- #-----------------------------------------------------
@ -150,21 +150,21 @@ RubySonoma = { 'exe': '/System/Library/Frameworks/Ruby.framework/Versions/
'lib': '%s/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.tbd' % SonomaSDK 'lib': '%s/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/libruby.tbd' % SonomaSDK
} }
# Ruby 3.2 from MacPorts (https://www.macports.org/) # Ruby 3.3 from MacPorts (https://www.macports.org/)
# install with 'sudo port install ruby32' # install with 'sudo port install ruby33'
# [Key Type Name] = 'MP32' # [Key Type Name] = 'MP33'
Ruby32MacPorts = { 'exe': '/opt/local/bin/ruby3.2', Ruby33MacPorts = { 'exe': '/opt/local/bin/ruby3.3',
'inc': '/opt/local/include/ruby-3.2.2', 'inc': '/opt/local/include/ruby-3.3.0',
'lib': '/opt/local/lib/libruby.3.2.dylib' 'lib': '/opt/local/lib/libruby.3.3.dylib'
} }
# Ruby 3.2 from Homebrew # Ruby 3.3 from Homebrew
# install with 'brew install ruby@3.2' # install with 'brew install ruby@3.3'
# [Key Type Name] = 'HB32' # [Key Type Name] = 'HB33'
HBRuby32Path = '%s/opt/ruby@3.2' % DefaultHomebrewRoot HBRuby33Path = '%s/opt/ruby@3.3' % DefaultHomebrewRoot
Ruby32Brew = { 'exe': '%s/bin/ruby' % HBRuby32Path, Ruby33Brew = { 'exe': '%s/bin/ruby' % HBRuby33Path,
'inc': '%s/include/ruby-3.2.0' % HBRuby32Path, 'inc': '%s/include/ruby-3.3.0' % HBRuby33Path,
'lib': '%s/lib/libruby.3.2.dylib' % HBRuby32Path 'lib': '%s/lib/libruby.3.3.dylib' % HBRuby33Path
} }
# Ruby 3.2 bundled with anaconda3 installed under /Applications/anaconda3/ # Ruby 3.2 bundled with anaconda3 installed under /Applications/anaconda3/
@ -181,8 +181,8 @@ RubyDictionary = { 'nil' : None,
'RubyMonterey' : RubyMonterey, 'RubyMonterey' : RubyMonterey,
'RubyVentura' : RubyVentura, 'RubyVentura' : RubyVentura,
'RubySonoma' : RubySonoma, 'RubySonoma' : RubySonoma,
'Ruby32MacPorts': Ruby32MacPorts, 'Ruby33MacPorts': Ruby33MacPorts,
'Ruby32Brew' : Ruby32Brew, 'Ruby33Brew' : Ruby33Brew,
'RubyAnaconda3' : RubyAnaconda3 'RubyAnaconda3' : RubyAnaconda3
} }
@ -195,7 +195,7 @@ RubyDictionary = { 'nil' : None,
# for the previous states. # for the previous states.
#----------------------------------------------------- #-----------------------------------------------------
PythonNil = [ 'nil' ] PythonNil = [ 'nil' ]
PythonSys = [ ] PythonSys = [ 'PythonMonterey', 'PythonVentura', 'PythonSonoma' ]
PythonExt = [ 'Python39MacPorts', 'Python39Brew' ] PythonExt = [ 'Python39MacPorts', 'Python39Brew' ]
PythonExt += [ 'Python311MacPorts', 'Python311Brew' ] PythonExt += [ 'Python311MacPorts', 'Python311Brew' ]
PythonExt += [ 'PythonAnaconda3', 'PythonAutoBrew' ] PythonExt += [ 'PythonAnaconda3', 'PythonAutoBrew' ]
@ -204,6 +204,33 @@ Pythons = PythonNil + PythonSys + PythonExt
#----------------------------------------------------- #-----------------------------------------------------
# Whereabouts of different components of Python # Whereabouts of different components of Python
#----------------------------------------------------- #-----------------------------------------------------
# Bundled with Monterey (12.x)
# [Key Type Name] = 'Sys'
MontereyPy3FWXc = "/Applications/Xcode.app/Contents/Developer/Library/Frameworks"
MontereyPy3FW = "/Library/Developer/CommandLineTools/Library/Frameworks"
PythonMonterey = { 'exe': '%s/Python3.framework/Versions/3.9/bin/python3.9' % MontereyPy3FW,
'inc': '%s/Python3.framework/Versions/3.9/include/python3.9' % MontereyPy3FW,
'lib': '%s/Python3.framework/Versions/3.9/lib/libpython3.9.dylib' % MontereyPy3FW
}
# Bundled with Ventura (13.x)
# [Key Type Name] = 'Sys'
VenturaPy3FWXc = "/Applications/Xcode.app/Contents/Developer/Library/Frameworks"
VenturaPy3FW = "/Library/Developer/CommandLineTools/Library/Frameworks"
PythonVentura = { 'exe': '%s/Python3.framework/Versions/3.9/bin/python3.9' % VenturaPy3FW,
'inc': '%s/Python3.framework/Versions/3.9/include/python3.9' % VenturaPy3FW,
'lib': '%s/Python3.framework/Versions/3.9/lib/libpython3.9.dylib' % VenturaPy3FW
}
# Bundled with Sonoma (14.x)
# [Key Type Name] = 'Sys'
SonomaPy3FWXc = "/Applications/Xcode.app/Contents/Developer/Library/Frameworks"
SonomaPy3FW = "/Library/Developer/CommandLineTools/Library/Frameworks"
PythonSonoma = { 'exe': '%s/Python3.framework/Versions/3.9/bin/python3.9' % SonomaPy3FW,
'inc': '%s/Python3.framework/Versions/3.9/include/python3.9' % SonomaPy3FW,
'lib': '%s/Python3.framework/Versions/3.9/lib/libpython3.9.dylib' % SonomaPy3FW
}
# Python 3.9 from MacPorts (https://www.macports.org/) # Python 3.9 from MacPorts (https://www.macports.org/)
# install with 'sudo port install python39' # install with 'sudo port install python39'
# [Key Type Name] = 'MP39' # [Key Type Name] = 'MP39'
@ -299,6 +326,9 @@ else:
# Consolidated dictionary kit for Python # Consolidated dictionary kit for Python
PythonDictionary = { 'nil' : None, PythonDictionary = { 'nil' : None,
'PythonMonterey' : PythonMonterey,
'PythonVentura' : PythonVentura,
'PythonSonoma' : PythonSonoma,
'Python39MacPorts' : Python39MacPorts, 'Python39MacPorts' : Python39MacPorts,
'Python311MacPorts': Python311MacPorts, 'Python311MacPorts': Python311MacPorts,
'Python39Brew' : Python39Brew, 'Python39Brew' : Python39Brew,
@ -312,7 +342,7 @@ if _have_Homebrew_Python:
# [4] KLayout executables including buddy tools # [4] KLayout executables including buddy tools
#----------------------------------------------------- #-----------------------------------------------------
KLayoutExecs = [ 'klayout' ] KLayoutExecs = [ 'klayout' ]
KLayoutExecs += [ 'strm2cif', 'strm2dxf', 'strm2gds', 'strm2gdstxt', 'strm2oas' ] KLayoutExecs += [ 'strm2cif', 'strm2dxf', 'strm2gds', 'strm2gdstxt', 'strm2mag', 'strm2oas' ]
KLayoutExecs += [ 'strm2txt', 'strmclip', 'strmcmp', 'strmrun', 'strmxor' ] KLayoutExecs += [ 'strm2txt', 'strmclip', 'strmcmp', 'strmrun', 'strmxor' ]
#---------------- #----------------

View File

@ -1,4 +1,4 @@
#! /usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#======================================================================================== #========================================================================================
@ -6,7 +6,7 @@
# #
# Here are utility functions and classes ... # Here are utility functions and classes ...
# for building KLayout (http://www.klayout.de/index.php) # for building KLayout (http://www.klayout.de/index.php)
# version 0.26.1 or later on different Apple Mac OSX platforms. # version 0.28.17 or later on different Apple Mac OSX platforms.
# #
# This file is imported by 'build4mac.py' script. # This file is imported by 'build4mac.py' script.
#======================================================================================== #========================================================================================

View File

@ -5,7 +5,7 @@
# File: "macbuild/macQAT.py" # File: "macbuild/macQAT.py"
# #
# The top Python script to run "ut_runner" after building KLayout # The top Python script to run "ut_runner" after building KLayout
# (http://www.klayout.de/index.php) version 0.26.1 or later on different Apple # (http://www.klayout.de/index.php) version 0.28.17 or later on different Apple
# ßMac OSX platforms. # ßMac OSX platforms.
# #
# This script must be copied to a "*.macQAT/" directory to run. # This script must be copied to a "*.macQAT/" directory to run.

View File

@ -4,7 +4,7 @@
# File: "macbuild/macQAT.sh" # File: "macbuild/macQAT.sh"
# #
# The top Bash script to run "ut_runner" after building KLayout # The top Bash script to run "ut_runner" after building KLayout
# (http://www.klayout.de/index.php) version 0.26.1 or later on different Apple # (http://www.klayout.de/index.php) version 0.25.17 or later on different Apple
# Mac OSX platforms. # Mac OSX platforms.
# #
# This script must be copied to a "*.macQAT/" directory to run. # This script must be copied to a "*.macQAT/" directory to run.

View File

@ -4,7 +4,7 @@
# File: "macbuild/macQAT2.sh" # File: "macbuild/macQAT2.sh"
# #
# The top Bash script to run "ut_runner" after building KLayout # The top Bash script to run "ut_runner" after building KLayout
# (http://www.klayout.de/index.php) version 0.26.1 or later on different Apple # (http://www.klayout.de/index.php) version 0.28.17 or later on different Apple
# Mac OSX platforms. # Mac OSX platforms.
# #
# This script must be copied to a directory that can be found in $PATH. # This script must be copied to a directory that can be found in $PATH.

View File

@ -1,4 +1,4 @@
#! /usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#============================================================================================= #=============================================================================================
@ -63,7 +63,7 @@ def SetGlobals():
global LatestOSHomebrew # True if 'LatestOS with Homebrew' and targeting LW-* global LatestOSHomebrew # True if 'LatestOS with Homebrew' and targeting LW-*
global LatestOSAnaconda3 # True if 'LatestOS with Anaconda3' and targeting LW-* global LatestOSAnaconda3 # True if 'LatestOS with Anaconda3' and targeting LW-*
global LatestOSHomebrewH # True if 'LatestOS with Homebrew' and targeting HW-* global LatestOSHomebrewH # True if 'LatestOS with Homebrew' and targeting HW-*
global DicLightHeavyW # dictionary for LW-* and HW-* packages global DicStdLightHeavyW # dictionary for LW-* and HW-* packages
global Item3AppleScript # ITEM_3 in the Apple script global Item3AppleScript # ITEM_3 in the Apple script
# auxiliary variables on platform # auxiliary variables on platform
global System # 6-tuple from platform.uname() global System # 6-tuple from platform.uname()
@ -77,13 +77,13 @@ def SetGlobals():
Usage = "\n" Usage = "\n"
Usage += "---------------------------------------------------------------------------------------------------------\n" Usage += "---------------------------------------------------------------------------------------------------------\n"
Usage += "<< Usage of 'makeDMG4mac.py' >>\n" Usage += "<< Usage of 'makeDMG4mac.py' >>\n"
Usage += " for making a DMG file of KLayout 0.28.13 or later on different Apple macOS platforms.\n" Usage += " for making a DMG file of KLayout 0.28.17 or later on different Apple macOS platforms.\n"
Usage += "\n" Usage += "\n"
Usage += "$ [python] ./makeDMG4mac.py\n" Usage += "$ [python] ./makeDMG4mac.py\n"
Usage += " option & argument : descriptions | default value\n" Usage += " option & argument : descriptions | default value\n"
Usage += " ----------------------------------------------------------------------------------+-----------------\n" Usage += " ----------------------------------------------------------------------------------+-----------------\n"
Usage += " <-p|--pkg <dir>> : package directory created by `build4mac.py` with [-y|-Y] | ``\n" Usage += " <-p|--pkg <dir>> : package directory created by `build4mac.py` with [-y|-Y] | ``\n"
Usage += " : like 'LW-qt5MP.pkg.macos-Monterey-release-Rmp32Pmp311' | \n" Usage += " : like 'LW-qt5MP.pkg.macos-Monterey-release-Rmp33Pmp311' | \n"
Usage += " <-c|--clean> : clean the work directory | disabled\n" Usage += " <-c|--clean> : clean the work directory | disabled\n"
Usage += " <-m|--make> : make a compressed DMG file | disabled\n" Usage += " <-m|--make> : make a compressed DMG file | disabled\n"
Usage += " : <-c|--clean> and <-m|--make> are mutually exclusive | \n" Usage += " : <-c|--clean> and <-m|--make> are mutually exclusive | \n"
@ -158,51 +158,59 @@ def SetGlobals():
LatestOSHomebrew = False LatestOSHomebrew = False
LatestOSAnaconda3 = False LatestOSAnaconda3 = False
LatestOSHomebrewH = False LatestOSHomebrewH = False
DicLightHeavyW = dict() DicStdLightHeavyW = dict()
Item3AppleScript = "" Item3AppleScript = ""
# Populate DicLightHeavyW # Populate DicStdLightHeavyW
DicLightHeavyW[ "ports" ] = dict() # LW-* DicStdLightHeavyW[ "std" ] = dict() # ST-*
DicLightHeavyW[ "brew" ] = dict() # LW-* DicStdLightHeavyW[ "ports" ] = dict() # LW-*
DicLightHeavyW[ "ana3" ] = dict() # LW-* DicStdLightHeavyW[ "brew" ] = dict() # LW-*
DicLightHeavyW[ "brewH" ] = dict() # HW-* DicStdLightHeavyW[ "ana3" ] = dict() # LW-*
DicStdLightHeavyW[ "brewH" ] = dict() # HW-*
DicLightHeavyW[ "ports" ]["zip"] = "macbuild/Resources/script-bundle-P.zip" DicStdLightHeavyW[ "std" ]["zip"] = "macbuild/Resources/script-bundle-S.zip"
DicLightHeavyW[ "ports" ]["src"] = "script-bundle-P" DicStdLightHeavyW[ "std" ]["src"] = "script-bundle-S"
DicLightHeavyW[ "ports" ]["des"] = "MacPortsUser-ReadMeFirst" DicStdLightHeavyW[ "std" ]["des"] = "MacStdUser-ReadMeFirst"
DicLightHeavyW[ "ports" ]["item3"] = 'set position of item "MacPortsUser-ReadMeFirst" to {700, 400}' DicStdLightHeavyW[ "std" ]["item3"] = 'set position of item "MacStdUser-ReadMeFirst" to {700, 400}'
DicLightHeavyW[ "brew" ]["zip"] = "macbuild/Resources/script-bundle-B.zip" DicStdLightHeavyW[ "ports" ]["zip"] = "macbuild/Resources/script-bundle-P.zip"
DicLightHeavyW[ "brew" ]["src"] = "script-bundle-B" DicStdLightHeavyW[ "ports" ]["src"] = "script-bundle-P"
DicLightHeavyW[ "brew" ]["des"] = "HomebrewUser-ReadMeFirst" DicStdLightHeavyW[ "ports" ]["des"] = "MacPortsUser-ReadMeFirst"
DicLightHeavyW[ "brew" ]["item3"] = 'set position of item "HomebrewUser-ReadMeFirst" to {700, 400}' DicStdLightHeavyW[ "ports" ]["item3"] = 'set position of item "MacPortsUser-ReadMeFirst" to {700, 400}'
DicLightHeavyW[ "ana3" ]["zip"] = "macbuild/Resources/script-bundle-A.zip" DicStdLightHeavyW[ "brew" ]["zip"] = "macbuild/Resources/script-bundle-B.zip"
DicLightHeavyW[ "ana3" ]["src"] = "script-bundle-A" DicStdLightHeavyW[ "brew" ]["src"] = "script-bundle-B"
DicLightHeavyW[ "ana3" ]["des"] = "Anaconda3User-ReadMeFirst" DicStdLightHeavyW[ "brew" ]["des"] = "HomebrewUser-ReadMeFirst"
DicLightHeavyW[ "ana3" ]["item3"] = 'set position of item "Anaconda3User-ReadMeFirst" to {700, 400}' DicStdLightHeavyW[ "brew" ]["item3"] = 'set position of item "HomebrewUser-ReadMeFirst" to {700, 400}'
DicLightHeavyW[ "brewH" ]["zip"] = "macbuild/Resources/script-bundle-H.zip" DicStdLightHeavyW[ "ana3" ]["zip"] = "macbuild/Resources/script-bundle-A.zip"
DicLightHeavyW[ "brewH" ]["src"] = "script-bundle-H" DicStdLightHeavyW[ "ana3" ]["src"] = "script-bundle-A"
DicLightHeavyW[ "brewH" ]["des"] = "Homebrew-HUser-ReadMeFirst" DicStdLightHeavyW[ "ana3" ]["des"] = "Anaconda3User-ReadMeFirst"
DicLightHeavyW[ "brewH" ]["item3"] = 'set position of item "Homebrew-HUser-ReadMeFirst" to {700, 400}' DicStdLightHeavyW[ "ana3" ]["item3"] = 'set position of item "Anaconda3User-ReadMeFirst" to {700, 400}'
DicStdLightHeavyW[ "brewH" ]["zip"] = "macbuild/Resources/script-bundle-H.zip"
DicStdLightHeavyW[ "brewH" ]["src"] = "script-bundle-H"
DicStdLightHeavyW[ "brewH" ]["des"] = "Homebrew-HUser-ReadMeFirst"
DicStdLightHeavyW[ "brewH" ]["item3"] = 'set position of item "Homebrew-HUser-ReadMeFirst" to {700, 400}'
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
## To check the contents of the package directory ## To check the contents of the package directory
# #
# The package directory name should look like: # The package directory name should look like:
# * ST-qt5MP.pkg.macos-Monterey-release-RsysPsys
# * LW-qt5Ana3.pkg.macos-Monterey-release-Rana3Pana3 # * LW-qt5Ana3.pkg.macos-Monterey-release-Rana3Pana3
# * LW-qt5Brew.pkg.macos-Monterey-release-Rhb32Phb311 --- (1) # * LW-qt5Brew.pkg.macos-Monterey-release-Rhb33Phb311 --- (1)
# * LW-qt5MP.pkg.macos-Monterey-release-Rmp32Pmp311 # * LW-qt5MP.pkg.macos-Monterey-release-Rmp33Pmp311
# * HW-qt5Brew.pkg.macos-Monterey-release-RsysPhb311 # * HW-qt5Brew.pkg.macos-Monterey-release-RsysPhb311
# #
# * ST-qt6MP.pkg.macos-Monterey-release-RsysPsys
# * LW-qt6Ana3.pkg.macos-Monterey-release-Rana3Pana3 # * LW-qt6Ana3.pkg.macos-Monterey-release-Rana3Pana3
# * LW-qt6Brew.pkg.macos-Monterey-release-Rhb32Phb311 # * LW-qt6Brew.pkg.macos-Monterey-release-Rhb33Phb311
# * LW-qt6MP.pkg.macos-Monterey-release-Rmp32Pmp311 # * LW-qt6MP.pkg.macos-Monterey-release-Rmp33Pmp311
# * HW-qt6Brew.pkg.macos-Monterey-release-RsysPhb311 # * HW-qt6Brew.pkg.macos-Monterey-release-RsysPhb311
# #
# Generated DMG will be, for example, # Generated DMG will be, for example,
# (1) ---> LW-klayout-0.28.13-macOS-Monterey-1-qt5Brew-Rhb32Phb311.dmg # (1) ---> LW-klayout-0.28.17-macOS-Monterey-1-qt5Brew-Rhb33Phb311.dmg
# #
# @return on success, positive integer in [MB] that tells approx. occupied disc space; # @return on success, positive integer in [MB] that tells approx. occupied disc space;
# on failure, -1 # on failure, -1
@ -223,7 +231,7 @@ def CheckPkgDirectory():
global LatestOSHomebrew global LatestOSHomebrew
global LatestOSAnaconda3 global LatestOSAnaconda3
global LatestOSHomebrewH global LatestOSHomebrewH
global DicLightHeavyW global DicStdLightHeavyW
global Item3AppleScript global Item3AppleScript
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
@ -241,18 +249,20 @@ def CheckPkgDirectory():
#----------------------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------------------
# [2] Identify (Qt, Ruby, Python) from PkgDir # [2] Identify (Qt, Ruby, Python) from PkgDir
# * ST-qt5MP.pkg.macos-Monterey-release-RsysPsys
# * LW-qt5Ana3.pkg.macos-Monterey-release-Rana3Pana3 # * LW-qt5Ana3.pkg.macos-Monterey-release-Rana3Pana3
# * LW-qt5Brew.pkg.macos-Monterey-release-Rhb32Phb311 # * LW-qt5Brew.pkg.macos-Monterey-release-Rhb33Phb311
# * LW-qt5MP.pkg.macos-Monterey-release-Rmp32Pmp311 # * LW-qt5MP.pkg.macos-Monterey-release-Rmp33Pmp311
# * HW-qt5Brew.pkg.macos-Monterey-release-RsysPhb311 # * HW-qt5Brew.pkg.macos-Monterey-release-RsysPhb311
# * EX-qt5MP.pkg.macos-Monterey-release-Rhb32Pmp311 # * EX-qt5MP.pkg.macos-Monterey-release-Rhb33Pmp311
# #
# * ST-qt6MP.pkg.macos-Monterey-release-RsysPsys
# * LW-qt6Ana3.pkg.macos-Monterey-release-Rana3Pana3 # * LW-qt6Ana3.pkg.macos-Monterey-release-Rana3Pana3
# * LW-qt6Brew.pkg.macos-Monterey-release-Rhb32Phb311 # * LW-qt6Brew.pkg.macos-Monterey-release-Rhb33Phb311
# * LW-qt6MP.pkg.macos-Monterey-release-Rmp32Pmp311 # * LW-qt6MP.pkg.macos-Monterey-release-Rmp33Pmp311
# * HW-qt6Brew.pkg.macos-Monterey-release-RsysPhb311 # * HW-qt6Brew.pkg.macos-Monterey-release-RsysPhb311
#----------------------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------------------
patQRP = u'(LW|HW|EX)([-])([qt5|qt6][0-9A-Za-z]+)([.]pkg[.])([A-Za-z]+[-][A-Za-z]+[-]release[-])([0-9A-Za-z]+)' patQRP = u'(ST|LW|HW|EX)([-])([qt5|qt6][0-9A-Za-z]+)([.]pkg[.])([A-Za-z]+[-][A-Za-z]+[-]release[-])([0-9A-Za-z]+)'
regQRP = re.compile(patQRP) regQRP = re.compile(patQRP)
if not regQRP.match(PkgDir): if not regQRP.match(PkgDir):
print( "! Cannot identify (Qt, Ruby, Python) from the package directory name" ) print( "! Cannot identify (Qt, Ruby, Python) from the package directory name" )
@ -277,15 +287,20 @@ def CheckPkgDirectory():
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
# [3] Check if the "LatestOS" with MacPorts / Homebrew / Anaconda3 # [3] Check if the "LatestOS" with MacPorts / Homebrew / Anaconda3
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
LatestOSSys = Platform == LatestOS
LatestOSSys &= PackagePrefix == "ST"
LatestOSSys &= QtIdentification in [ "qt5MP", "qt6MP" ]
LatestOSSys &= RubyPythonID in [ "RsysPsys" ]
LatestOSMacPorts = Platform == LatestOS LatestOSMacPorts = Platform == LatestOS
LatestOSMacPorts &= PackagePrefix == "LW" LatestOSMacPorts &= PackagePrefix == "LW"
LatestOSMacPorts &= QtIdentification in [ "qt5MP", "qt6MP" ] LatestOSMacPorts &= QtIdentification in [ "qt5MP", "qt6MP" ]
LatestOSMacPorts &= RubyPythonID in [ "Rmp32Pmp311", "Rmp32Pmp39" ] LatestOSMacPorts &= RubyPythonID in [ "Rmp33Pmp311", "Rmp33Pmp39" ]
LatestOSHomebrew = Platform == LatestOS LatestOSHomebrew = Platform == LatestOS
LatestOSHomebrew &= PackagePrefix == "LW" LatestOSHomebrew &= PackagePrefix == "LW"
LatestOSHomebrew &= QtIdentification in [ "qt5Brew", "qt6Brew" ] LatestOSHomebrew &= QtIdentification in [ "qt5Brew", "qt6Brew" ]
LatestOSHomebrew &= RubyPythonID in [ "Rhb32Phb311", "Rhb32Phb39", "Rhb32Phbauto" ] LatestOSHomebrew &= RubyPythonID in [ "Rhb33Phb311", "Rhb33Phb39", "Rhb33Phbauto" ]
LatestOSAnaconda3 = Platform == LatestOS LatestOSAnaconda3 = Platform == LatestOS
LatestOSAnaconda3 &= PackagePrefix == "LW" LatestOSAnaconda3 &= PackagePrefix == "LW"
@ -297,8 +312,23 @@ def CheckPkgDirectory():
LatestOSHomebrewH &= QtIdentification in [ "qt5Brew", "qt6Brew" ] LatestOSHomebrewH &= QtIdentification in [ "qt5Brew", "qt6Brew" ]
LatestOSHomebrewH &= RubyPythonID in [ "RsysPhb311", "RsysPhb39", "RsysPhbauto" ] # Sys-Homebre hybrid LatestOSHomebrewH &= RubyPythonID in [ "RsysPhb311", "RsysPhb39", "RsysPhbauto" ] # Sys-Homebre hybrid
if LatestOSSys:
mydic = DicStdLightHeavyW["std"]
srcDir = PkgDir + "/" + mydic["src"]
desDir = PkgDir + "/" + mydic["des"]
if OpMake:
with zipfile.ZipFile( mydic["zip"], 'r' ) as zip_ref:
zip_ref.extractall(PkgDir)
os.rename( srcDir, desDir )
if OpClean:
if os.path.isdir(srcDir):
shutil.rmtree(srcDir)
if os.path.isdir(desDir):
shutil.rmtree(desDir)
Item3AppleScript = mydic["item3"]
if LatestOSMacPorts: if LatestOSMacPorts:
mydic = DicLightHeavyW["ports"] mydic = DicStdLightHeavyW["ports"]
srcDir = PkgDir + "/" + mydic["src"] srcDir = PkgDir + "/" + mydic["src"]
desDir = PkgDir + "/" + mydic["des"] desDir = PkgDir + "/" + mydic["des"]
if OpMake: if OpMake:
@ -313,7 +343,7 @@ def CheckPkgDirectory():
Item3AppleScript = mydic["item3"] Item3AppleScript = mydic["item3"]
if LatestOSHomebrew: if LatestOSHomebrew:
mydic = DicLightHeavyW["brew"] mydic = DicStdLightHeavyW["brew"]
srcDir = PkgDir + "/" + mydic["src"] srcDir = PkgDir + "/" + mydic["src"]
desDir = PkgDir + "/" + mydic["des"] desDir = PkgDir + "/" + mydic["des"]
if OpMake: if OpMake:
@ -328,7 +358,7 @@ def CheckPkgDirectory():
Item3AppleScript = mydic["item3"] Item3AppleScript = mydic["item3"]
if LatestOSAnaconda3: if LatestOSAnaconda3:
mydic = DicLightHeavyW["ana3"] mydic = DicStdLightHeavyW["ana3"]
srcDir = PkgDir + "/" + mydic["src"] srcDir = PkgDir + "/" + mydic["src"]
desDir = PkgDir + "/" + mydic["des"] desDir = PkgDir + "/" + mydic["des"]
if OpMake: if OpMake:
@ -343,7 +373,7 @@ def CheckPkgDirectory():
Item3AppleScript = mydic["item3"] Item3AppleScript = mydic["item3"]
if LatestOSHomebrewH: if LatestOSHomebrewH:
mydic = DicLightHeavyW["brewH"] mydic = DicStdLightHeavyW["brewH"]
srcDir = PkgDir + "/" + mydic["src"] srcDir = PkgDir + "/" + mydic["src"]
desDir = PkgDir + "/" + mydic["des"] desDir = PkgDir + "/" + mydic["des"]
if OpMake: if OpMake:

View File

@ -1,4 +1,4 @@
#! /usr/bin/env python3 #!/Applications/anaconda3/bin/python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import sys import sys
@ -8,6 +8,20 @@ import glob
import platform import platform
import optparse import optparse
import subprocess import subprocess
#------------------------------------------------------------------------------
# In general, avoid setting the first line to '#!/usr/bin/env python3'.
# If so, when this script is invoked in the 'KLayoutNightlyBuild.app' script
# bundle created by Automator, the python3 will be the macOS-bundled python3,
# where pandas is not included by default.
# Therefore, it is better to use one of:
# 1) #!/Applications/anaconda3/bin/python3 (Anaconda3)
# 2) #!/usr/local/bin/python3 (Homebrew needs 'pip3 install pandas')
# 3) #!/opt/local/bin/python3 (MacPorts needs 'sudo pip3 install pandas')
#
# However, if we install 'pandas' and its dependencies to the system Python
# environment, we can also set '#!/usr/bin/env python3'.
#------------------------------------------------------------------------------
import pandas as pd
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
## To test if the platform is a member of valid platforms ## To test if the platform is a member of valid platforms
@ -44,7 +58,7 @@ def Test_My_Platform( platforms=[ 'Monterey', 'Ventura', 'Sonoma' ] ):
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
def Get_Build_Target_Dict(): def Get_Build_Target_Dict():
buildTargetDic = dict() buildTargetDic = dict()
# buildTargetDic[0] = 'std' buildTargetDic[0] = 'std'
buildTargetDic[1] = 'ports' buildTargetDic[1] = 'ports'
buildTargetDic[2] = 'brew' buildTargetDic[2] = 'brew'
buildTargetDic[3] = 'brewHW' buildTargetDic[3] = 'brewHW'
@ -61,45 +75,47 @@ def Get_Build_Target_Dict():
# @param[in] platform platform name # @param[in] platform platform name
# #
# @return (dictionary1, dictionary2)-tupple # @return (dictionary1, dictionary2)-tupple
# dictionary1: key=mnemonic, value=build option list # dictionary1: key=(qtVer, mnemonic), value=build option list
# dictionary2: key=mnemonic, value=log file name # dictionary2: key=(qtVer, mnemonic), value=log file name
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
def Get_Build_Options( targetDic, platform ): def Get_Build_Options( targetDic, platform ):
if QtType == 5:
qtType = "Qt5"
else:
qtType = "Qt6"
buildOp = dict() buildOp = dict()
logfile = dict() logfile = dict()
for key in targetDic.keys():
target = targetDic[key]
if target == "std": # use 'Qt5MacPorts' that provides Qt 5.15.2~ to run on "Big Sur", too
buildOp["std"] = [ '-q', '%sMacPorts' % qtType, '-r', 'sys', '-p', 'sys' ]
logfile["std"] = "%sMP.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "RsysPsys")
elif target == "ports":
buildOp["ports"] = [ '-q', '%sMacPorts' % qtType, '-r', 'MP32', '-p', 'MP311' ]
logfile["ports"] = "%sMP.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "Rmp32Pmp311")
elif target == "brew":
buildOp["brew"] = [ '-q', '%sBrew' % qtType, '-r', 'HB32', '-p', 'HB311' ]
logfile["brew"] = "%sBrew.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "Rhb32Phb311")
elif target == "brewHW":
buildOp["brewHW"] = [ '-q', '%sBrew' % qtType, '-r', 'sys', '-p', 'HB311' ]
logfile["brewHW"] = "%sBrew.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "RsysPhb311")
elif target == "ana3":
buildOp["ana3"] = [ '-q', '%sAna3' % qtType, '-r', 'Ana3', '-p', 'Ana3' ]
logfile["ana3"] = "%sAna3.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "Rana3Pana3")
elif target == "brewA":
buildOp["brewA"] = [ '-q', '%sBrew' % qtType, '-r', 'HB32', '-p', 'HBAuto' ]
logfile["brewA"] = "%sBrew.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "Rhb32Phbauto")
elif target == "brewAHW":
buildOp["brewAHW"] = [ '-q', '%sBrew' % qtType, '-r', 'sys', '-p', 'HBAuto' ]
logfile["brewAHW"] = "%sBrew.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "RsysPhbauto")
if WithPymod: for qtVer in [5, 6]:
buildOp["ports"] = buildOp["ports"] + ['--buildPymod'] if qtVer == 5:
buildOp["brew"] = buildOp["brew"] + ['--buildPymod'] qtType = "Qt5"
buildOp["ana3"] = buildOp["ana3"] + ['--buildPymod'] elif qtVer == 6:
qtType = "Qt6"
for key in targetDic.keys():
target = targetDic[key]
if target == "std":
buildOp[(qtVer, "std")] = [ '-q', '%sMacPorts' % qtType, '-r', 'sys', '-p', 'sys' ]
logfile[(qtVer, "std")] = "%sMP.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "RsysPsys")
elif target == "ports":
buildOp[(qtVer, "ports")] = [ '-q', '%sMacPorts' % qtType, '-r', 'MP33', '-p', 'MP311' ]
logfile[(qtVer, "ports")] = "%sMP.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "Rmp33Pmp311")
elif target == "brew":
buildOp[(qtVer, "brew")] = [ '-q', '%sBrew' % qtType, '-r', 'HB33', '-p', 'HB311' ]
logfile[(qtVer, "brew")] = "%sBrew.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "Rhb33Phb311")
elif target == "brewHW":
buildOp[(qtVer, "brewHW")] = [ '-q', '%sBrew' % qtType, '-r', 'sys', '-p', 'HB311' ]
logfile[(qtVer, "brewHW")] = "%sBrew.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "RsysPhb311")
elif target == "ana3":
buildOp[(qtVer, "ana3")] = [ '-q', '%sAna3' % qtType, '-r', 'Ana3', '-p', 'Ana3' ]
logfile[(qtVer, "ana3")] = "%sAna3.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "Rana3Pana3")
elif target == "brewA":
buildOp[(qtVer, "brewA")] = [ '-q', '%sBrew' % qtType, '-r', 'HB33', '-p', 'HBAuto' ]
logfile[(qtVer, "brewA")] = "%sBrew.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "Rhb33Phbauto")
elif target == "brewAHW":
buildOp[(qtVer, "brewAHW")] = [ '-q', '%sBrew' % qtType, '-r', 'sys', '-p', 'HBAuto' ]
logfile[(qtVer, "brewAHW")] = "%sBrew.build.macos-%s-%s-%s.log" % (qtType.lower(), platform, "release", "RsysPhbauto")
if WithPymod:
buildOp[(qtVer,"ports")] = buildOp[(qtVer,"ports")] + ['--buildPymod']
buildOp[(qtVer,"brew")] = buildOp[(qtVer,"brew")] + ['--buildPymod']
buildOp[(qtVer,"ana3")] = buildOp[(qtVer,"ana3")] + ['--buildPymod']
return (buildOp, logfile) return (buildOp, logfile)
@ -109,29 +125,34 @@ def Get_Build_Options( targetDic, platform ):
# @param[in] targetDic build target dictionary # @param[in] targetDic build target dictionary
# @param[in] platform platform name # @param[in] platform platform name
# #
# @return a dictionary; key=mnemonic, value=".macQAT" directory # @return a dictionary; key=(qtVer, mnemonic), value=".macQAT" directory
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
def Get_QAT_Directory( targetDic, platform ): def Get_QAT_Directory( targetDic, platform ):
if QtType == 5:
qtType = "qt5"
else:
qtType = "qt6"
dirQAT = dict() dirQAT = dict()
for key in targetDic.keys():
target = targetDic[key] for qtVer in [5, 6]:
if target == "ports": if qtVer == 5:
dirQAT["ports"] = '%sMP.build.macos-%s-release-Rmp32Pmp311.macQAT' % (qtType, platform) qtType = "Qt5"
elif target == "brew": elif qtVer == 6:
dirQAT["brew"] = '%sBrew.build.macos-%s-release-Rhb32Phb311.macQAT' % (qtType, platform) qtType = "Qt6"
elif target == "brewHW":
dirQAT["brewHW"] = '%sBrew.build.macos-%s-release-RsysPhb311.macQAT' % (qtType, platform) for key in targetDic.keys():
elif target == "ana3": target = targetDic[key]
dirQAT["ana3"] = '%sAna3.build.macos-%s-release-Rana3Pana3.macQAT' % (qtType, platform) if target == "std":
elif target == "brewA": dirQAT[(qtVer, "std")] = '%sMP.build.macos-%s-release-RsysPsys.macQAT' % (qtType.lower(), platform)
dirQAT["brewA"] = '%sBrew.build.macos-%s-release-Rhb32Phbauto.macQAT' % (qtType, platform) elif target == "ports":
elif target == "brewAHW": dirQAT[(qtVer, "ports")] = '%sMP.build.macos-%s-release-Rmp33Pmp311.macQAT' % (qtType.lower(), platform)
dirQAT["brewAHW"] = '%sBrew.build.macos-%s-release-RsysPhbauto.macQAT' % (qtType, platform) elif target == "brew":
dirQAT[(qtVer, "brew")] = '%sBrew.build.macos-%s-release-Rhb33Phb311.macQAT' % (qtType.lower(), platform)
elif target == "brewHW":
dirQAT[(qtVer, "brewHW")] = '%sBrew.build.macos-%s-release-RsysPhb311.macQAT' % (qtType.lower(), platform)
elif target == "ana3":
dirQAT[(qtVer, "ana3")] = '%sAna3.build.macos-%s-release-Rana3Pana3.macQAT' % (qtType.lower(), platform)
elif target == "brewA":
dirQAT[(qtVer, "brewA")] = '%sBrew.build.macos-%s-release-Rhb33Phbauto.macQAT' % (qtType.lower(), platform)
elif target == "brewAHW":
dirQAT[(qtVer, "brewAHW")] = '%sBrew.build.macos-%s-release-RsysPhbauto.macQAT' % (qtType.lower(), platform)
return dirQAT return dirQAT
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
@ -142,40 +163,45 @@ def Get_QAT_Directory( targetDic, platform ):
# @param[in] srlDMG serial number of DMG # @param[in] srlDMG serial number of DMG
# @param[in] makeflag True to make; False to clean # @param[in] makeflag True to make; False to clean
# #
# @return a dictionary; key=mnemonic, value=build option list # @return a dictionary; key=(qtVer, mnemonic), value=build option list
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
def Get_Package_Options( targetDic, platform, srlDMG, makeflag ): def Get_Package_Options( targetDic, platform, srlDMG, makeflag ):
if QtType == 5: packOp = dict()
qtType = "qt5"
else:
qtType = "qt6"
if makeflag: if makeflag:
flag = '-m' flag = '-m'
else: else:
flag = '-c' flag = '-c'
packOp = dict() for qtVer in [5, 6]:
for key in targetDic.keys(): if qtVer == 5:
target = targetDic[key] qtType = "Qt5"
if target == "ports": elif qtVer == 6:
packOp["ports"] = [ '-p', 'LW-%sMP.pkg.macos-%s-release-Rmp32Pmp311' % (qtType, platform), qtType = "Qt6"
'-s', '%d' % srlDMG, '%s' % flag ]
elif target == "brew": for key in targetDic.keys():
packOp["brew"] = [ '-p', 'LW-%sBrew.pkg.macos-%s-release-Rhb32Phb311' % (qtType, platform), target = targetDic[key]
'-s', '%d' % srlDMG, '%s' % flag ] if target == "std":
elif target == "brewHW": packOp[(qtVer, "std")] = [ '-p', 'ST-%sMP.pkg.macos-%s-release-RsysPsys' % (qtType.lower(), platform),
packOp["brewHW"] = [ '-p', 'HW-%sBrew.pkg.macos-%s-release-RsysPhb311' % (qtType, platform), '-s', '%d' % srlDMG, '%s' % flag ]
'-s', '%d' % srlDMG, '%s' % flag ] elif target == "ports":
elif target == "ana3": packOp[(qtVer, "ports")] = [ '-p', 'LW-%sMP.pkg.macos-%s-release-Rmp33Pmp311' % (qtType.lower(), platform),
packOp["ana3"] = [ '-p', 'LW-%sAna3.pkg.macos-%s-release-Rana3Pana3' % (qtType, platform), '-s', '%d' % srlDMG, '%s' % flag ]
'-s', '%d' % srlDMG, '%s' % flag ] elif target == "brew":
elif target == "brewA": packOp[(qtVer, "brew")] = [ '-p', 'LW-%sBrew.pkg.macos-%s-release-Rhb33Phb311' % (qtType.lower(), platform),
packOp["brewA"] = [ '-p', 'LW-%sBrew.pkg.macos-%s-release-Rhb32Phbauto' % (qtType, platform), '-s', '%d' % srlDMG, '%s' % flag ]
'-s', '%d' % srlDMG, '%s' % flag ] elif target == "brewHW":
elif target == "brewAHW": packOp[(qtVer, "brewHW")] = [ '-p', 'HW-%sBrew.pkg.macos-%s-release-RsysPhb311' % (qtType.lower(), platform),
packOp["brewAHW"] = [ '-p', 'HW-%sBrew.pkg.macos-%s-release-RsysPhbauto' % (qtType, platform), '-s', '%d' % srlDMG, '%s' % flag ]
'-s', '%d' % srlDMG, '%s' % flag ] elif target == "ana3":
packOp[(qtVer, "ana3")] = [ '-p', 'LW-%sAna3.pkg.macos-%s-release-Rana3Pana3' % (qtType.lower(), platform),
'-s', '%d' % srlDMG, '%s' % flag ]
elif target == "brewA":
packOp[(qtVer, "brewA")] = [ '-p', 'LW-%sBrew.pkg.macos-%s-release-Rhb33Phbauto' % (qtType.lower(), platform),
'-s', '%d' % srlDMG, '%s' % flag ]
elif target == "brewAHW":
packOp[(qtVer, "brewAHW")] = [ '-p', 'HW-%sBrew.pkg.macos-%s-release-RsysPhbauto' % (qtType.lower(), platform),
'-s', '%d' % srlDMG, '%s' % flag ]
return packOp return packOp
#------------------------------------------------------------------------------ #------------------------------------------------------------------------------
@ -185,6 +211,7 @@ def Parse_CommandLine_Arguments():
global Usage # usage global Usage # usage
global QtType # Qt type global QtType # Qt type
global Target # target list global Target # target list
global QtTarget # list of (Qt, target)-tuple
global Build # operation flag global Build # operation flag
global WithPymod # operation flag global WithPymod # operation flag
global QATest # operation flag global QATest # operation flag
@ -198,9 +225,9 @@ def Parse_CommandLine_Arguments():
platform = Test_My_Platform() platform = Test_My_Platform()
if platform in [ "Sonoma", "Ventura", "Monterey" ]: if platform in [ "Sonoma", "Ventura", "Monterey" ]:
targetopt = "1,2,3,4" targetopt = "0,1,2,3,4"
else: else:
targetopt = "0" targetopt = None
Usage = "\n" Usage = "\n"
Usage += "----------------------------------------------------------------------------------------------------------\n" Usage += "----------------------------------------------------------------------------------------------------------\n"
@ -209,33 +236,39 @@ def Parse_CommandLine_Arguments():
Usage += " macOS Monterey, Ventura, or Sonoma >>\n" Usage += " macOS Monterey, Ventura, or Sonoma >>\n"
Usage += "\n" Usage += "\n"
Usage += "$ [python] nightlyBuild.py\n" Usage += "$ [python] nightlyBuild.py\n"
Usage += " option & argument : comment on option if any | default value\n" Usage += " option & argument : comment on option if any | default value\n"
Usage += " ------------------------------------------------------------------------+--------------\n" Usage += " --------------------------------------------------------------------------+--------------\n"
Usage += " [--qt <type>] : 5='qt5', 6='qt6' (migration to Qt6 is ongoing) | 5\n" Usage += " [--qt <type>] : 5='qt5', 6='qt6' (migration to Qt6 is ongoing) | 5\n"
Usage += " [--target <list>] : 1='ports', 2='brew', 3='brewHW', 4='ana3', | '%s'\n" % targetopt Usage += " [--target <list>] : 0='std', 1='ports', 2='brew', 3='brewHW', 4='ana3', | '%s'\n" % targetopt
Usage += " 5='brewA', 6='brewAHW' |\n" Usage += " 5='brewA', 6='brewAHW' |\n"
Usage += " * with --qt=6, use --target='2,3' (4 is ignored) |\n" Usage += " * with --qt=6, use --target='0,1,2,3' (4 is ignored) |\n"
Usage += " [--build] : build and deploy | disabled\n" Usage += " [--qttarget <tuple list>] : ex. '5,1' for qt=5, target=1 | disabled\n"
Usage += " [--pymod] : build and deploy Pymod, too | disabled\n" Usage += " + This option supersedes, if used, the --qt and --target combination. |\n"
Usage += " [--test] : run the QA Test | disabled\n" Usage += " + You can use this option multiple times. |\n"
Usage += " [--check] : check the QA Test results | disabled\n" Usage += " + Or you can pass those list by the 'nightlyBuild.csv' file. |\n"
Usage += " [--makedmg|--cleandmg <srlno>] : make or clean DMGs | disabled\n" Usage += " A sample file 'macbuild/nightlyBuild.sample.csv' is available. |\n"
Usage += " [--upload <dropbox>] : upload DMGs to $HOME/Dropbox/klayout/<dropbox> | disabled\n" Usage += " [--build] : build and deploy | disabled\n"
Usage += " [--dryrun] : dry-run for --build option | disabled\n" Usage += " [--pymod] : build and deploy Pymod, too | disabled\n"
Usage += " [-?|--?] : print this usage and exit | disabled\n" Usage += " [--test] : run the QA Test | disabled\n"
Usage += " |\n" Usage += " [--check] : check the QA Test results | disabled\n"
Usage += " To use this script, make a symbolic link in the project root by: |\n" Usage += " [--makedmg|--cleandmg <srlno>] : make or clean DMGs | disabled\n"
Usage += " $ ln -s ./macbuild/nightlyBuild.py . |\n" Usage += " [--upload <dropbox>] : upload DMGs to $HOME/Dropbox/klayout/<dropbox> | disabled\n"
Usage += " |\n" Usage += " [--dryrun] : dry-run for --build option | disabled\n"
Usage += " Regular sequence for using this script: |\n" Usage += " [-?|--?] : print this usage and exit | disabled\n"
Usage += " (1) $ ./nightlyBuild.py --build --pymod |\n" Usage += " |\n"
Usage += " (2) (confirm the build results) |\n" Usage += " To use this script, make a symbolic link in the project root by: |\n"
Usage += " (3) $ ./nightlyBuild.py --test |\n" Usage += " $ ln -s ./macbuild/nightlyBuild.py . |\n"
Usage += " (4) $ ./nightlyBuild.py --check (confirm the QA Test results) |\n" Usage += " + edit and save ./macbuild/nightlyBuild.csv (optional) |\n"
Usage += " (5) $ ./nightlyBuild.py --makedmg 1 |\n" Usage += " |\n"
Usage += " (6) $ ./nightlyBuild.py --upload '0.28.12' |\n" Usage += " Regular sequence for using this script: |\n"
Usage += " (7) $ ./nightlyBuild.py --cleandmg 1 |\n" Usage += " (1) $ ./nightlyBuild.py --build --pymod |\n"
Usage += "---------------------------------------------------------------------------+------------------------------\n" Usage += " (2) (confirm the build results) |\n"
Usage += " (3) $ ./nightlyBuild.py --test |\n"
Usage += " (4) $ ./nightlyBuild.py --check (confirm the QA Test results) |\n"
Usage += " (5) $ ./nightlyBuild.py --makedmg 1 |\n"
Usage += " (6) $ ./nightlyBuild.py --upload '0.28.17' |\n"
Usage += " (7) $ ./nightlyBuild.py --cleandmg 1 |\n"
Usage += "-----------------------------------------------------------------------------+----------------------------\n"
p = optparse.OptionParser( usage=Usage ) p = optparse.OptionParser( usage=Usage )
p.add_option( '--qt', p.add_option( '--qt',
@ -246,6 +279,11 @@ def Parse_CommandLine_Arguments():
dest='targets', dest='targets',
help='build target list' ) help='build target list' )
p.add_option( '--qttarget',
action='append',
dest='qt_target',
help='(Qt, target)-tuple' )
p.add_option( '--build', p.add_option( '--build',
action='store_true', action='store_true',
dest='build', dest='build',
@ -296,6 +334,7 @@ def Parse_CommandLine_Arguments():
p.set_defaults( qt_type = "5", p.set_defaults( qt_type = "5",
targets = "%s" % targetopt, targets = "%s" % targetopt,
qt_target = list(),
build = False, build = False,
with_pymod = False, with_pymod = False,
qa_test = False, qa_test = False,
@ -331,9 +370,51 @@ def Parse_CommandLine_Arguments():
targetDic = Get_Build_Target_Dict() targetDic = Get_Build_Target_Dict()
Target = list() Target = list()
for idx in targetIdx: for idx in targetIdx:
if idx in range(1, 7): if idx in range(0, 7):
Target.append( targetDic[idx] ) Target.append( targetDic[idx] )
# Populate QtTarget
QtTarget = list()
for target in Target:
QtTarget.append( (QtType, target) )
QtType = None
Target = None
print( "# The --qt and --target combination specifies..." )
print(QtTarget)
if len(opt.qt_target) == 1 and opt.qt_target[0] == "nightlyBuild.csv": # reserved file name
QtTarget = list()
withqttarget = True
df = pd.read_csv( opt.qt_target[0], comment="#" )
if len(df) == 0:
print( "! --qttarget==nightlyBuild.csv is used but DataFrame is empty" )
print(Usage)
quit()
for i in range(0, len(df)):
qt = df.iloc[i,0]
idx = df.iloc[i,1]
if (qt == 5 and idx in range(0, 7)) or (qt == 6 and idx in [0,1,2,3, 5,6]):
QtTarget.append( (qt, targetDic[idx]) )
elif len(opt.qt_target) > 0:
QtTarget = list()
withqttarget = True
for item in opt.qt_target:
qt = int(item.split(",")[0])
idx = int(item.split(",")[1])
if (qt == 5 and idx in range(0, 7)) or (qt == 6 and idx in [0,1,2,3, 5,6]):
QtTarget.append( (qt, targetDic[idx]) )
else:
withqttarget = False
if withqttarget:
if len(QtTarget) > 0:
print( "# The --qttarget option superseded the --qt and --target combination" )
print(QtTarget)
else:
print( "! --qttarget is used but there is no valid (Qt, target)-tuple" )
print(Usage)
quit()
Build = opt.build Build = opt.build
WithPymod = opt.with_pymod WithPymod = opt.with_pymod
QATest = opt.qa_test QATest = opt.qa_test
@ -373,17 +454,18 @@ def Build_Deploy():
myPlatform = Test_My_Platform() myPlatform = Test_My_Platform()
buildOp, logfile = Get_Build_Options( Get_Build_Target_Dict(), myPlatform ) buildOp, logfile = Get_Build_Options( Get_Build_Target_Dict(), myPlatform )
for key in Target: for qttype, key in QtTarget:
if key == "ana3" and QtType == 6: # anaconda3 does not provide Qt6 so far if key == "ana3" and qttype == 6: # anaconda3 does not provide Qt6 so far
continue continue
deplog = logfile[key].replace( ".log", ".dep.log" )
command1 = [ pyBuilder ] + buildOp[key] deplog = logfile[(qttype, key)].replace( ".log", ".dep.log" )
if key in [ "brewHW", "brewAHW" ] : command1 = [ pyBuilder ] + buildOp[(qttype, key)]
if key in [ "std", "brewHW", "brewAHW" ] :
command2 = "time" command2 = "time"
command2 += " \\\n %s" % pyBuilder command2 += " \\\n %s" % pyBuilder
for option in buildOp[key]: for option in buildOp[(qttype, key)]:
command2 += " \\\n %s" % option command2 += " \\\n %s" % option
command2 += " \\\n %s" % '-y' command2 += " \\\n %s" % '-y'
command2 += " 2>&1 | tee %s; \\\n" % deplog command2 += " 2>&1 | tee %s; \\\n" % deplog
@ -391,7 +473,7 @@ def Build_Deploy():
else: else:
command2 = "time" command2 = "time"
command2 += " \\\n %s" % pyBuilder command2 += " \\\n %s" % pyBuilder
for option in buildOp[key]: for option in buildOp[(qttype, key)]:
command2 += " \\\n %s" % option command2 += " \\\n %s" % option
command2 += " \\\n %s" % '-Y' command2 += " \\\n %s" % '-Y'
command2 += " 2>&1 | tee %s; \\\n" % deplog command2 += " 2>&1 | tee %s; \\\n" % deplog
@ -442,14 +524,14 @@ def Run_QATest( exclude ):
myPlatform = Test_My_Platform() myPlatform = Test_My_Platform()
dirQAT = Get_QAT_Directory( Get_Build_Target_Dict(), myPlatform ) dirQAT = Get_QAT_Directory( Get_Build_Target_Dict(), myPlatform )
for key in Target: for qttype, key in QtTarget:
if key == 4 and QtType == 6: # anaconda3 does not provide Qt6 so far if key == "ana3" and qttype == 6: # anaconda3 does not provide Qt6 so far
continue continue
command1 = [ pyRunnerQAT ] + [ '--run', '--exclude', '%s' % exclude ] command1 = [ pyRunnerQAT ] + [ '--run', '--exclude', '%s' % exclude ]
print( dirQAT[key], command1 ) print( dirQAT[(qttype, key)], command1 )
#continue #continue
os.chdir( dirQAT[key] ) os.chdir( dirQAT[(qttype, key)] )
if subprocess.call( command1, shell=False ) != 0: if subprocess.call( command1, shell=False ) != 0:
print( "", file=sys.stderr ) print( "", file=sys.stderr )
@ -477,14 +559,14 @@ def Check_QATest_Results( lines ):
myPlatform = Test_My_Platform() myPlatform = Test_My_Platform()
dirQAT = Get_QAT_Directory( Get_Build_Target_Dict(), myPlatform ) dirQAT = Get_QAT_Directory( Get_Build_Target_Dict(), myPlatform )
for key in Target: for qttype, key in QtTarget:
if key == 4 and QtType == 6: # anaconda3 does not provide Qt6 so far if key == "ana3" and qttype == 6: # anaconda3 does not provide Qt6 so far
continue continue
os.chdir( dirQAT[key] ) os.chdir( dirQAT[(qttype, key)] )
logfile = glob.glob( "*.log" ) logfile = glob.glob( "*.log" )
command1 = [ tailCommand ] + [ '-n', '%d' % lines ] + logfile command1 = [ tailCommand ] + [ '-n', '%d' % lines ] + logfile
print( dirQAT[key], command1 ) print( dirQAT[(qttype, key)], command1 )
#continue #continue
if subprocess.call( command1, shell=False ) != 0: if subprocess.call( command1, shell=False ) != 0:
@ -518,11 +600,11 @@ def DMG_Make( srlDMG ):
shutil.rmtree( stashDMG ) shutil.rmtree( stashDMG )
os.mkdir( stashDMG ) os.mkdir( stashDMG )
for key in Target: for qttype, key in QtTarget:
if key == 4 and QtType == 6: # anaconda3 does not provide Qt6 so far if key == "ana3" and qttype == 6: # anaconda3 does not provide Qt6 so far
continue continue
command1 = [ pyDMGmaker ] + packOp[key] command1 = [ pyDMGmaker ] + packOp[(qttype, key)]
print(command1) print(command1)
#continue #continue
@ -558,11 +640,11 @@ def DMG_Clean( srlDMG ):
if os.path.isdir( stashDMG ): if os.path.isdir( stashDMG ):
shutil.rmtree( stashDMG ) shutil.rmtree( stashDMG )
for key in Target: for qttype, key in QtTarget:
if key == 4 and QtType == 6: # anaconda3 does not provide Qt6 so far if key == "ana3" and qttype == 6: # anaconda3 does not provide Qt6 so far
continue continue
command1 = [ pyDMGmaker ] + packOp[key] command1 = [ pyDMGmaker ] + packOp[(qttype, key)]
print(command1) print(command1)
#continue #continue

View File

@ -0,0 +1,25 @@
#-------------------------------------------------------------------------------
# File: 'nightlyBuild.csv'
#
# Descriptions:
# This file (located where "build.sh" exists) is to be passed to
# 'nightlyBuild.py' via the --qttarget option.
#
# qtVer,target
# where
# qtVer = 5 or 6
# target = [0='std', 1='ports', 2='brew', 3='brewHW', 4='ana3']
# note that
# (qtVer,target)=(6,4) will be omitted
#-------------------------------------------------------------------------------
qtVer,target
5,0
5,1
5,2
5,3
5,4
#6,0
#6,1
#6,2
#6,3
#6,4
Can't render this file because it contains an unexpected character in line 5 and column 30.

View File

@ -1,4 +1,4 @@
#! /usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
#============================================================================== #==============================================================================