WIP: Migration to Qt6.

This refs #45.
This commit is contained in:
Kazunari Sekigawa 2021-11-27 12:05:27 +09:00
parent b600eb1b02
commit 2858d4507e
4 changed files with 189 additions and 112 deletions

View File

@ -1,9 +1,9 @@
Relevant KLayout version: 0.27.4<br> Relevant KLayout version: 0.27.5<br>
Author: Kazzz-S<br> Author: Kazzz-S<br>
Last modified: 2021-11-07<br> Last modified: 2021-11-27<br>
# 1. Introduction # 1. Introduction
This directory **`macbuild`** contains different files required for building KLayout (http://www.klayout.de/) version 0.27.4 or later for different 64-bit macOS, including: This directory **`macbuild`** contains different files required for building KLayout (http://www.klayout.de/) version 0.27.5 or later for different 64-bit macOS, including:
* Catalina (10.15.7) : the primary development environment * Catalina (10.15.7) : the primary development environment
* Big Sur (11.x) : experimental; Apple M1 chip is not tested since the author does not own an M1 Mac * Big Sur (11.x) : experimental; Apple M1 chip is not tested since the author does not own an M1 Mac
* Monterey (12.x) : -- ditto -- * Monterey (12.x) : -- ditto --
@ -18,15 +18,26 @@ However, they are not actively supported, and DMG packages for them are not prov
Throughout this document, the primary target machine is **Intel x86_64** with **macOS Catalina**.<br> Throughout this document, the primary target machine is **Intel x86_64** with **macOS Catalina**.<br>
A **((Notes))** marker indicates special notes for specific operating systems. A **((Notes))** marker indicates special notes for specific operating systems.
# 2. Qt5 Frameworks # 2. Qt6/Qt5 Frameworks
By default, the Qt framework is "Qt5" from MacPorts (https://www.macports.org/), which is usually located under: By default, the Qt framework is "Qt6" from Homebrew (https://brew.sh/), which is usually located under:
``` ```
/opt/local/libexec/qt5/ /usr/local/opt/qt@6/
``` ```
Alternatively, you can use "Qt5" from Homebrew (https://brew.sh/), which is usually located under: "Qt5" is usually located under:
``` ```
/usr/local/opt/qt@5/ /usr/local/opt/qt@5/
```
Alternatively, you can use "Qt6" from MacPorts (https://www.macports.org/), which is usually located under:
```
/opt/local/libexec/qt6/
```
**((Notes))** As of 2021-11-27, MacPorts' Qt6 does not provide `qt6-qtmultimedia`, which causes a build error!!!
"Qt5" is usually located under:
```
/opt/local/libexec/qt5/
``` ```
OR OR
@ -40,7 +51,6 @@ If you have installed Anaconda3 under $HOME/opt/anaconda3/, make a symbolic link
``` ```
/Applications/anaconda3/ ---> $HOME/opt/anaconda3/ /Applications/anaconda3/ ---> $HOME/opt/anaconda3/
``` ```
**((Notes))** "Qt5" from Homebrew is chosen as the default for **Big Sur** and **Monterey**.
# 3. Script language support: Ruby and Python # 3. Script language support: Ruby and Python
Earlier, by default, supported script languages, i.e., Ruby and Python, were those standard ones bundled with the OS.<br> Earlier, by default, supported script languages, i.e., Ruby and Python, were those standard ones bundled with the OS.<br>
@ -57,14 +67,14 @@ Big Sur (11.x) and Monterey (12.x) still provide the Python 2.7 binaries to run
However, the latest Xcode 13.1 does not allow us to link the legacy Python 2.7 library with the newly compiled KLayout binaries.<br> However, the latest Xcode 13.1 does not allow us to link the legacy Python 2.7 library with the newly compiled KLayout binaries.<br>
Therefore, Homebrew is adopted as the default environment for Big Sur and Monterey. Therefore, Homebrew is adopted as the default environment for Big Sur and Monterey.
The build script **`build4mac.py`** provides several possible combinations of Qt5, Ruy, and Python modules to accommodate such a slightly complex environment.<br> The build script **`build4mac.py`** provides several possible combinations of Qt[6|5], Ruy, and Python modules to accommodate such a slightly complex environment.<br>
Some typical use cases are described in Section 6. Some typical use cases are described in Section 6.
# 4. Prerequisites # 4. Prerequisites
You need to have: You need to have:
* the latest Xcode and command-line tool kit compliant with each OS * the latest Xcode and command-line tool kit compliant with each OS
* Qt5 package from MacPorts, Homebrew, or Anaconda3 * Qt[6|5] package from Homebrew or MacPorts; Qt5 from Anaconda3
* optionally Ruby and Python packages from MacPorts, Homebrew, 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`.
# 5. Command-line options of **`build4mac.py`** are as shown below. # 5. Command-line options of **`build4mac.py`** are as shown below.
@ -72,12 +82,15 @@ You need to have:
``` ```
--------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------
<< Usage of 'build4mac.py' >> << Usage of 'build4mac.py' >>
for building KLayout 0.27.4 or later on different Apple macOS / Mac OSX platforms. for building KLayout 0.27.5 or later on different Apple macOS / Mac OSX 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'] | qt5macports [-q|--qt <type>] : case-insensitive type=['Qt6MacPorts', 'Qt6Brew', | qt6brew
: 'Qt5MacPorts', 'Qt5Brew', 'Qt5Ana3'] |
: Qt6MacPorts: use Qt6 from MacPorts |
: Qt6Brew: use Qt6 from Homebrew |
: Qt5MacPorts: use Qt5 from MacPorts | : Qt5MacPorts: use Qt5 from MacPorts |
: Qt5Brew: use Qt5 from Homebrew | : Qt5Brew: use Qt5 from Homebrew |
: Qt5Ana3: use Qt5 from Anaconda3 | : Qt5Ana3: use Qt5 from Anaconda3 |
@ -88,12 +101,13 @@ $ [python] ./build4mac.py
: HB27: use Ruby 2.7 from Homebrew | : HB27: use Ruby 2.7 from Homebrew |
: Ana3: use Ruby 2.5 from Anaconda3 | : Ana3: use Ruby 2.5 from Anaconda3 |
[-p|--python <type>] : case-insensitive type=['nil', 'Sys', 'MP38', 'HB38', 'Ana3', | sys [-p|--python <type>] : case-insensitive type=['nil', 'Sys', 'MP38', 'HB38', 'Ana3', | sys
: 'HBAuto'] | : 'HB39', HBAuto'] |
: nil: don't bind Python | : nil: don't bind Python |
: Sys: use OS-bundled Python 2.7 [ElCapitan -- Catalina] | : Sys: use OS-bundled Python 2.7 [ElCapitan -- Catalina] |
: MP38: use Python 3.8 from MacPorts | : MP38: use Python 3.8 from MacPorts |
: HB38: use Python 3.8 from Homebrew | : HB38: use Python 3.8 from Homebrew |
: Ana3: use Python 3.8 from Anaconda3 | : Ana3: use Python 3.8 from Anaconda3 |
: HB39: use Python 3.9 from Homebrew |
: HBAuto: use the latest Python 3.x auto-detected from Homebrew | : HBAuto: use the latest Python 3.x auto-detected from Homebrew |
[-n|--noqtbinding] : don't create Qt bindings for ruby scripts | disabled [-n|--noqtbinding] : don't create Qt bindings for ruby scripts | disabled
[-u|--noqtuitools] : don't include uitools in Qt binding | disabled [-u|--noqtuitools] : don't include uitools in Qt binding | disabled
@ -119,12 +133,15 @@ $ [python] ./build4mac.py
``` ```
--------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------
<< Usage of 'build4mac.py' >> << Usage of 'build4mac.py' >>
for building KLayout 0.27.4 or later on different Apple macOS / Mac OSX platforms. for building KLayout 0.27.5 or later on different Apple macOS / Mac OSX 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=['Qt6MacPorts', 'Qt6Brew', | qt6brew
: 'Qt5MacPorts', 'Qt5Brew', 'Qt5Ana3'] |
: Qt6MacPorts: use Qt6 from MacPorts |
: Qt6Brew: use Qt6 from Homebrew |
: Qt5MacPorts: use Qt5 from MacPorts | : Qt5MacPorts: use Qt5 from MacPorts |
: Qt5Brew: use Qt5 from Homebrew | : Qt5Brew: use Qt5 from Homebrew |
: Qt5Ana3: use Qt5 from Anaconda3 | : Qt5Ana3: use Qt5 from Anaconda3 |
@ -135,12 +152,13 @@ $ [python] ./build4mac.py
: HB27: use Ruby 2.7 from Homebrew | : HB27: use Ruby 2.7 from Homebrew |
: Ana3: use Ruby 2.5 from Anaconda3 | : Ana3: use Ruby 2.5 from Anaconda3 |
[-p|--python <type>] : case-insensitive type=['nil', 'Sys', 'MP38', 'HB38', 'Ana3', | hb38 [-p|--python <type>] : case-insensitive type=['nil', 'Sys', 'MP38', 'HB38', 'Ana3', | hb38
: 'HBAuto'] | : 'HB39', HBAuto'] |
: nil: don't bind Python | : nil: don't bind Python |
: Sys: use OS-bundled Python 2.7 [ElCapitan -- Catalina] | : Sys: use OS-bundled Python 2.7 [ElCapitan -- Catalina] |
: MP38: use Python 3.8 from MacPorts | : MP38: use Python 3.8 from MacPorts |
: HB38: use Python 3.8 from Homebrew | : HB38: use Python 3.8 from Homebrew |
: Ana3: use Python 3.8 from Anaconda3 | : Ana3: use Python 3.8 from Anaconda3 |
: HB39: use Python 3.9 from Homebrew |
: HBAuto: use the latest Python 3.x auto-detected from Homebrew | : HBAuto: use the latest Python 3.x auto-detected from Homebrew |
[-n|--noqtbinding] : don't create Qt bindings for ruby scripts | disabled [-n|--noqtbinding] : don't create Qt bindings for ruby scripts | disabled
[-u|--noqtuitools] : don't include uitools in Qt binding | disabled [-u|--noqtuitools] : don't include uitools in Qt binding | disabled
@ -167,11 +185,9 @@ In this section, the actual file names and directory names are those obtained on
On different OS, those names differ accordingly. On different OS, those names differ accordingly.
### 6A. Standard build using the OS-bundled Ruby and Python ### 6A. Standard build using the OS-bundled Ruby and Python
0. Install MacPorts, then install Qt5 by 0. Install Homebrew, then install Qt6 by
``` ```
$ sudo port install coreutils $ brew install qt6
$ sudo port install findutils
$ sudo port install qt5
``` ```
1. Invoke **`build4mac.py`** with the default options: **((Notes))** only for Catalina 1. Invoke **`build4mac.py`** with the default options: **((Notes))** only for Catalina
``` ```
@ -185,24 +201,25 @@ $ ./build4mac.py
$ ./build4mac.py -y $ ./build4mac.py -y
``` ```
The application bundle **`klayout.app`** is located under:<br> The application bundle **`klayout.app`** is located under:<br>
**`ST-qt5MP.pkg.macos-Catalina-release-RsysPsys`** directory, where the three name parts below are important. **`ST-qt6Brew.pkg.macos-Catalina-release-RsysPsys`** directory, where the three name parts below are important.
* "ST-" means that this is a standard package (LW-, HW-, and EX- are other possibilities explained below). * "ST-" means that this is a standard package (LW-, HW-, and EX- are other possibilities explained below).
* "qt5MP" means that Qt5 from MacPorts is used. * "qt6Brew" means that Qt6 from Homebrew is used.
* "RsysPsys" means that Ruby is OS-bundled; Python is OS-bundled. * "RsysPsys" means that Ruby is OS-bundled; Python is OS-bundled.
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.
If you use the "-Y" option instead of the "-y" in Step-3, the Qt5 framework is NOT deployed in the application bundle.<br> If you use the "-Y" option instead of the "-y" in Step-3, the Qt6 framework is NOT deployed in the application bundle.<br>
Then the directory name will be **`LW-qt5MP.pkg.macos-Catalina-release-RsysPsys`**, where Then the directory name will be **`LW-qt6Brew.pkg.macos-Catalina-release-RsysPsys`**, where
* "LW-" means that this is a lightweight package. * "LW-" means that this is a lightweight package.
#### If you build KLayout from the source code AND run it on the same machine, the "-Y" option is highly recommended. #### If you build KLayout from the source code AND run it on the same machine, the "-Y" option is highly recommended.
### 6B. Fully MacPorts-flavored build with MacPorts Ruby 2.7 and MacPorts Python 3.8 ### 6B. Fully MacPorts-flavored build with MacPorts Ruby 2.7 and MacPorts Python 3.8
0. Install MacPorts, then install Qt5, Ruby 2.7, and Python 3.8 by 0. Install MacPorts, then install Qt6, Ruby 2.7, and Python 3.8 by
``` ```
$ sudo port install coreutils $ sudo port install coreutils
$ sudo port install findutils $ sudo port install findutils
$ sudo port install qt5 $ sudo port install qt6
$ sudo port install qt6-qttools
$ sudo port install ruby27 $ sudo port install ruby27
$ sudo port install python38 $ sudo port install python38
$ sudo port install py38-pip $ sudo port install py38-pip
@ -210,67 +227,67 @@ $ sudo port install py38-pip
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 mp27 -p mp38 $ ./build4mac.py -q qt6macports -r mp27 -p mp38
``` ```
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. Run **`build4mac.py`** again with the same options used in 1. PLUS "-Y" to deploy executables and libraries under **`klayout.app`** bundle.<br> 3. Run **`build4mac.py`** again 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 in this step. The buddy command-line tools (strm*) will also be deployed in this step.
``` ```
$ ./build4mac.py -q qt5macports -r mp27 -p mp38 -Y $ ./build4mac.py -q qt6macports -r mp27 -p mp38 -Y
``` ```
The application bundle **`klayout.app`** is located under:<br> The application bundle **`klayout.app`** is located under:<br>
**`LW-qt5MP.pkg.macos-Catalina-release-Rmp27Pmp38`** directory, where **`LW-qt6MP.pkg.macos-Catalina-release-Rmp27Pmp38`** directory, where
* "LW-" means that this is a lightweight package. * "LW-" means that this is a lightweight package.
* "qt5MP" means that Qt5 from MacPorts is used. * "qt6MP" means that Qt6 from MacPorts is used.
* "Rmp27Pmp38" means that Ruby is 2.7 from MacPorts; Python is 3.8 from MacPorts. * "Rmp27Pmp38" means that Ruby is 2.7 from MacPorts; Python is 3.8 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.
### 6C. Fully Homebrew-flavored build with Homebrew Ruby 2.7 and Homebrew Python 3.8 ### 6C. Fully Homebrew-flavored build with Homebrew Ruby 2.7 and Homebrew Python 3.8
0. Install Homebrew, then install Qt5, Ruby 2.7, and Python 3.8 by 0. Install Homebrew, then install Qt6, Ruby 2.7, and Python 3.8 by
``` ```
$ brew install qt@5 $ brew install qt6
$ brew install ruby@2.7 $ brew install ruby@2.7
$ brew install python@3.8 $ brew install python@3.8
``` ```
1. Invoke **`build4mac.py`** with the following options: **((Notes))** These options are the default for Big Sur and Monterey. 1. Invoke **`build4mac.py`** with the following options: **((Notes))** These options are the default for Big Sur and Monterey.
``` ```
$ cd /where/'build.sh'/exists $ cd /where/'build.sh'/exists
$ ./build4mac.py -q qt5brew -r hb27 -p hb38 $ ./build4mac.py -q qt6brew -r hb27 -p hb38
``` ```
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. Run **`build4mac.py`** again with the same options used in 1. PLUS "-Y" to deploy executables and libraries under **`klayout.app`** bundle.<br> 3. Run **`build4mac.py`** again 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 in this step. The buddy command-line tools (strm*) will also be deployed in this step.
``` ```
$ ./build4mac.py -q qt5brew -r hb27 -p hb38 -Y $ ./build4mac.py -q qt6brew -r hb27 -p hb38 -Y
``` ```
The application bundle **`klayout.app`** is located under:<br> The application bundle **`klayout.app`** is located under:<br>
**`LW-qt5Brew.pkg.macos-Catalina-release-Rhb27Phb38`** directory, where **`LW-qt6Brew.pkg.macos-Catalina-release-Rhb27Phb38`** directory, where
* "LW-" means that this is a lightweight package. * "LW-" means that this is a lightweight package.
* "qt5Brew" means that Qt5 from Homebrew is used. * "qt6Brew" means that Qt6 from Homebrew is used.
* "Rhb27Phb38" means that Ruby is 2.7 from Homebrew; Python is 3.8 from Homebrew. * "Rhb27Phb38" means that Ruby is 2.7 from Homebrew; Python is 3.8 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.
### 6D. Partially Homebrew-flavored build with System Ruby and Homebrew Python 3.8 ### 6D. Partially Homebrew-flavored build with System Ruby and Homebrew Python 3.8
0. Install Homebrew, then install Qt5 and Python 3.8 by 0. Install Homebrew, then install Qt6 and Python 3.8 by
``` ```
$ brew install qt@5 $ brew install qt6
$ brew install python@3.8 $ brew install python@3.8
``` ```
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 qt5brew -r sys -p hb38 $ ./build4mac.py -q qt6brew -r sys -p hb38
``` ```
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. Run **`build4mac.py`** again with the same options used in 1. PLUS "-y" to deploy executables and libraries (including Qt's framework and Python framework) under **`klayout.app`** bundle.<br> 3. Run **`build4mac.py`** again with the same options used in 1. PLUS "-y" to deploy executables and libraries (including Qt's framework and Python framework) under **`klayout.app`** bundle.<br>
The buddy command-line tools (strm*) will also be deployed in this step. The buddy command-line tools (strm*) will also be deployed in this step.
``` ```
$ ./build4mac.py -q qt5brew -r sys -p hb38 -y $ ./build4mac.py -q qt6brew -r sys -p hb38 -y
``` ```
The application bundle **`klayout.app`** is located under:<br> The application bundle **`klayout.app`** is located under:<br>
**`HW-qt5Brew.pkg.macos-Catalina-release-RsysPhb38`** directory, where **`HW-qt6Brew.pkg.macos-Catalina-release-RsysPhb38`** directory, where
* "HW-" means that this is a heavyweight package because both Qt5 and Python Frameworks are deployed. * "HW-" means that this is a heavyweight package because both Qt6 and Python Frameworks are deployed.
* "qt5Brew" means that Qt5 from Homebrew is used. * "qt6Brew" means that Qt6 from Homebrew is used.
* "RsysPhb38" means that Ruby is OS-bundled; Python is 3.8 from Homebrew. * "RsysPhb38" means that Ruby is OS-bundled; Python is 3.8 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.
### Important ### Important
@ -321,14 +338,14 @@ 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 ST-qt5MP.pkg.macos-Catalina-release-RsysPsys -m $ ./makeDMG4mac.py -p ST-qt6Brew.pkg.macos-Catalina-release-RsysPsys -m
``` ```
This command will generate the two files below:<br> This command will generate the two files below:<br>
* **`ST-klayout-0.27.4-macOS-Catalina-1-qt5MP-RsysPsys.dmg`** ---(1) the main DMG file * **`ST-klayout-0.27.5-macOS-Catalina-1-qt6Brew-RsysPsys.dmg`** ---(1) the main DMG file
* **`ST-klayout-0.27.4-macOS-Catalina-1-qt5MP-RsysPsys.dmg.md5`** ---(2) MD5-value text file * **`ST-klayout-0.27.5-macOS-Catalina-1-qt6Brew-RsysPsys.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 MacPorts, Homebrew, 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>
In such cases, you need to update the dictionary contents of **`build4mac_env.py`**. In such cases, you need to update the dictionary contents of **`build4mac_env.py`**.
# Final comments # Final comments

View File

@ -34,25 +34,28 @@ from build4mac_util import *
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def GenerateUsage(platform): def GenerateUsage(platform):
if platform.upper() in [ "MONTEREY", "BIGSUR" ]: # with Xcode [13.1 .. ] if platform.upper() in [ "MONTEREY", "BIGSUR" ]: # with Xcode [13.1 .. ]
myQt5 = "qt5brew" myQt65 = "qt6brew"
myRuby = "hb27" myRuby = "hb27"
myPython = "hb38" myPython = "hb38"
moduleset = ('qt5Brew', 'HB27', 'HB38') moduleset = ('qt6Brew', 'HB27', 'HB38')
else: # with Xcode [ .. 12.4] else: # with Xcode [ .. 12.4]
myQt5 = "qt5macports" myQt65 = "qt6brew"
myRuby = "sys" myRuby = "sys"
myPython = "sys" myPython = "sys"
moduleset = ('qt5MP', 'Sys', 'Sys') moduleset = ('qt6Brew', 'Sys', 'Sys')
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.27.4 or later on different Apple macOS / Mac OSX platforms.\n" usage += " for building KLayout 0.27.5 or later on different Apple macOS / Mac OSX 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"
usage += " --------------------------------------------------------------------------------------+---------------\n" usage += " --------------------------------------------------------------------------------------+---------------\n"
usage += " [-q|--qt <type>] : case-insensitive type=['Qt5MacPorts', 'Qt5Brew', 'Qt5Ana3'] | %s \n" % myQt5 usage += " [-q|--qt <type>] : case-insensitive type=['Qt6MacPorts', 'Qt6Brew', | %s \n" % myQt65
usage += " : 'Qt5MacPorts', 'Qt5Brew', 'Qt5Ana3'] | \n"
usage += " : Qt6MacPorts: use Qt6 from MacPorts | \n"
usage += " : Qt6Brew: use Qt6 from Homebrew | \n"
usage += " : Qt5MacPorts: use Qt5 from MacPorts | \n" usage += " : Qt5MacPorts: use Qt5 from MacPorts | \n"
usage += " : Qt5Brew: use Qt5 from Homebrew | \n" usage += " : Qt5Brew: use Qt5 from Homebrew | \n"
usage += " : Qt5Ana3: use Qt5 from Anaconda3 | \n" usage += " : Qt5Ana3: use Qt5 from Anaconda3 | \n"
@ -63,12 +66,13 @@ def GenerateUsage(platform):
usage += " : HB27: use Ruby 2.7 from Homebrew | \n" usage += " : HB27: use Ruby 2.7 from Homebrew | \n"
usage += " : Ana3: use Ruby 2.5 from Anaconda3 | \n" usage += " : Ana3: use Ruby 2.5 from Anaconda3 | \n"
usage += " [-p|--python <type>] : case-insensitive type=['nil', 'Sys', 'MP38', 'HB38', 'Ana3', | %s \n" % myPython usage += " [-p|--python <type>] : case-insensitive type=['nil', 'Sys', 'MP38', 'HB38', 'Ana3', | %s \n" % myPython
usage += " : 'HBAuto'] | \n" usage += " : 'HB39', HBAuto'] | \n"
usage += " : nil: don't bind Python | \n" usage += " : nil: don't bind Python | \n"
usage += " : Sys: use OS-bundled Python 2.7 [ElCapitan -- Catalina] | \n" usage += " : Sys: use OS-bundled Python 2.7 [ElCapitan -- Catalina] | \n"
usage += " : MP38: use Python 3.8 from MacPorts | \n" usage += " : MP38: use Python 3.8 from MacPorts | \n"
usage += " : HB38: use Python 3.8 from Homebrew | \n" usage += " : HB38: use Python 3.8 from Homebrew | \n"
usage += " : Ana3: use Python 3.8 from Anaconda3 | \n" usage += " : Ana3: use Python 3.8 from Anaconda3 | \n"
usage += " : HB39: use Python 3.9 from Homebrew | \n"
usage += " : HBAuto: use the latest Python 3.x auto-detected from Homebrew | \n" usage += " : HBAuto: use the latest Python 3.x auto-detected from Homebrew | \n"
usage += " [-n|--noqtbinding] : don't create Qt bindings for ruby scripts | 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 += " [-u|--noqtuitools] : don't include uitools in Qt binding | disabled\n"
@ -129,7 +133,7 @@ def Get_Default_Config():
sys.exit(1) sys.exit(1)
if not Machine == "x86_64": if not Machine == "x86_64":
if Machine == "arm64" and (Platform == "Monterey" or Platform == "BigSur"): # with an Apple Silicon Chip if Machine == "arm64" and Platform in ["Monterey", "BigSur"]: # with an Apple Silicon Chip
print("") print("")
print( "### Your Mac equips an Apple Silicon Chip ###" ) print( "### Your Mac equips an Apple Silicon Chip ###" )
print("") print("")
@ -239,6 +243,7 @@ def Parse_CLI_Args(config):
PackagePrefix = config['PackagePrefix'] PackagePrefix = config['PackagePrefix']
DeployVerbose = config['DeployVerbose'] DeployVerbose = config['DeployVerbose']
ModuleSet = config['ModuleSet'] ModuleSet = config['ModuleSet']
qt, ruby, python = ModuleSet
#----------------------------------------------------- #-----------------------------------------------------
# [2] Parse the CLI arguments # [2] Parse the CLI arguments
@ -246,7 +251,7 @@ def Parse_CLI_Args(config):
p = optparse.OptionParser(usage=Usage) p = optparse.OptionParser(usage=Usage)
p.add_option( '-q', '--qt', p.add_option( '-q', '--qt',
dest='type_qt', dest='type_qt',
help="Qt type=['Qt5MacPorts', 'Qt5Brew', 'Qt5Ana3']" ) help="Qt type=['Qt6MacPorts', 'Qt6Brew', 'Qt5MacPorts', 'Qt5Brew', 'Qt5Ana3']" )
p.add_option( '-r', '--ruby', p.add_option( '-r', '--ruby',
dest='type_ruby', dest='type_ruby',
@ -254,7 +259,7 @@ def Parse_CLI_Args(config):
p.add_option( '-p', '--python', p.add_option( '-p', '--python',
dest='type_python', dest='type_python',
help="Python type=['nil', 'Sys', 'MP38', 'HB38', 'Ana3', 'HBAuto']" ) help="Python type=['nil', 'Sys', 'MP38', 'HB38', 'Ana3', 'HB39', 'HBAuto']" )
p.add_option( '-n', '--noqtbinding', p.add_option( '-n', '--noqtbinding',
action='store_true', action='store_true',
@ -306,7 +311,7 @@ def Parse_CLI_Args(config):
default=False, default=False,
help='check usage' ) help='check usage' )
p.set_defaults( type_qt = "qt5macports", p.set_defaults( type_qt = "%s" % qt,
type_ruby = "sys", type_ruby = "sys",
type_python = "sys", type_python = "sys",
no_qt_binding = False, no_qt_binding = False,
@ -326,6 +331,8 @@ def Parse_CLI_Args(config):
# (A) Determine the Qt type # (A) Determine the Qt type
candidates = dict() candidates = dict()
candidates['QT6MACPORTS'] = 'Qt6MacPorts'
candidates['QT6BREW'] = 'Qt6Brew'
candidates['QT5MACPORTS'] = 'Qt5MacPorts' candidates['QT5MACPORTS'] = 'Qt5MacPorts'
candidates['QT5BREW'] = 'Qt5Brew' candidates['QT5BREW'] = 'Qt5Brew'
candidates['QT5ANA3'] = 'Qt5Ana3' candidates['QT5ANA3'] = 'Qt5Ana3'
@ -340,12 +347,16 @@ def Parse_CLI_Args(config):
(opt.type_qt, list(candidates.keys())), file=sys.stderr ) (opt.type_qt, list(candidates.keys())), file=sys.stderr )
print(Usage) print(Usage)
sys.exit(1) sys.exit(1)
elif ModuleQt == "Qt6MacPorts":
choiceQt65 = 'qt6MP'
elif ModuleQt == "Qt6Brew":
choiceQt65 = 'qt6Brew'
elif ModuleQt == "Qt5MacPorts": elif ModuleQt == "Qt5MacPorts":
choiceQt5 = 'qt5MP' choiceQt65 = 'qt5MP'
elif ModuleQt == "Qt5Brew": elif ModuleQt == "Qt5Brew":
choiceQt5 = 'qt5Brew' choiceQt65 = 'qt5Brew'
elif ModuleQt == "Qt5Ana3": elif ModuleQt == "Qt5Ana3":
choiceQt5 = 'qt5Ana3' choiceQt65 = 'qt5Ana3'
# By default, OS-standard (-bundled) script languages (Ruby and Python) are used # By default, OS-standard (-bundled) script languages (Ruby and Python) are used
NonOSStdLang = False NonOSStdLang = False
@ -405,6 +416,7 @@ def Parse_CLI_Args(config):
candidates['MP38'] = 'MP38' candidates['MP38'] = 'MP38'
candidates['HB38'] = 'HB38' candidates['HB38'] = 'HB38'
candidates['ANA3'] = 'Ana3' candidates['ANA3'] = 'Ana3'
candidates['HB39'] = 'HB39'
candidates['HBAUTO'] = 'HBAuto' candidates['HBAUTO'] = 'HBAuto'
try: try:
choicePython = candidates[ opt.type_python.upper() ] choicePython = candidates[ opt.type_python.upper() ]
@ -439,6 +451,9 @@ def Parse_CLI_Args(config):
elif choicePython == "Ana3": elif choicePython == "Ana3":
ModulePython = 'PythonAnaconda3' ModulePython = 'PythonAnaconda3'
NonOSStdLang = True NonOSStdLang = True
elif choicePython == "HB39":
ModulePython = 'Python39Brew'
NonOSStdLang = True
elif choicePython == "HBAuto": elif choicePython == "HBAuto":
ModulePython = 'PythonAutoBrew' ModulePython = 'PythonAutoBrew'
NonOSStdLang = True NonOSStdLang = True
@ -450,7 +465,7 @@ def Parse_CLI_Args(config):
sys.exit(1) sys.exit(1)
# (D) Set of modules chosen # (D) Set of modules chosen
ModuleSet = ( choiceQt5, choiceRuby, choicePython ) ModuleSet = ( choiceQt65, choiceRuby, choicePython )
NoQtBindings = opt.no_qt_binding NoQtBindings = opt.no_qt_binding
NoQtUiTools = opt.no_qt_uitools NoQtUiTools = opt.no_qt_uitools
@ -487,10 +502,10 @@ def Parse_CLI_Args(config):
elif DeploymentF: elif DeploymentF:
if (ModuleRuby in RubySys) and (ModulePython in PythonSys): if (ModuleRuby in RubySys) and (ModulePython in PythonSys):
PackagePrefix = "ST-" PackagePrefix = "ST-"
message += "a standard (ST-) package including Qt5 and using OS-bundled Ruby and Python..." message += "a standard (ST-) package including Qt[6|5] and using OS-bundled Ruby and Python..."
elif ModulePython == 'Python38Brew' or ModulePython == 'PythonAutoBrew': elif ModulePython in ['Python38Brew', 'Python39Brew', 'PythonAutoBrew']:
PackagePrefix = "HW-" PackagePrefix = "HW-"
message += "a heavyweight (HW-) package including Qt5 and Python3.8~ from Homebrew..." message += "a heavyweight (HW-) package including Qt[6|5] and Python3.8~ from Homebrew..."
else: else:
PackagePrefix = "EX-" PackagePrefix = "EX-"
message += "a package with exceptional (EX-) combinations of different modules..." message += "a package with exceptional (EX-) combinations of different modules..."
@ -563,7 +578,7 @@ def Get_Build_Parameters(config):
mode = "release" mode = "release"
# (B) Modules # (B) Modules
(qt, ruby, python) = ModuleSet # ( 'qt5MP', 'Sys', 'Sys' ) (qt, ruby, python) = ModuleSet # ( 'qt6MP', 'Sys', 'Sys' )
ruby_python = "R%sP%s" % ( ruby.lower(), python.lower() ) ruby_python = "R%sP%s" % ( ruby.lower(), python.lower() )
# (C) Target directories and files # (C) Target directories and files
@ -574,8 +589,14 @@ def Get_Build_Parameters(config):
MacBuildDirQAT = MacBuildDir + ".macQAT" MacBuildDirQAT = MacBuildDir + ".macQAT"
parameters['logfile'] = MacBuildLog parameters['logfile'] = MacBuildLog
# (D) Qt5 # (D) Qt6|5
if ModuleQt == 'Qt5MacPorts': if ModuleQt == 'Qt6MacPorts':
parameters['qmake'] = Qt6MacPorts['qmake']
parameters['deploy_tool'] = Qt6MacPorts['deploy']
elif ModuleQt == 'Qt6Brew':
parameters['qmake'] = Qt6Brew['qmake']
parameters['deploy_tool'] = Qt6Brew['deploy']
elif ModuleQt == 'Qt5MacPorts':
parameters['qmake'] = Qt5MacPorts['qmake'] parameters['qmake'] = Qt5MacPorts['qmake']
parameters['deploy_tool'] = Qt5MacPorts['deploy'] parameters['deploy_tool'] = Qt5MacPorts['deploy']
elif ModuleQt == 'Qt5Brew': elif ModuleQt == 'Qt5Brew':
@ -585,6 +606,7 @@ def Get_Build_Parameters(config):
parameters['qmake'] = Qt5Ana3['qmake'] parameters['qmake'] = Qt5Ana3['qmake']
parameters['deploy_tool'] = Qt5Ana3['deploy'] parameters['deploy_tool'] = Qt5Ana3['deploy']
parameters['bin'] = MacBinDir parameters['bin'] = MacBinDir
parameters['build'] = MacBuildDir parameters['build'] = MacBuildDir
parameters['rpath'] = "@executable_path/../Frameworks" parameters['rpath'] = "@executable_path/../Frameworks"
@ -647,8 +669,10 @@ def Run_Build_Command(parameters):
# (C) Target directories and files # (C) Target directories and files
MacBuildDirQAT = parameters['build'] + ".macQAT" MacBuildDirQAT = parameters['build'] + ".macQAT"
# (D) Qt5 # (D) Qt[6|5]
cmd_args += " \\\n -qt5" # '-qt6' is not yet supported as of 2021-11-27
# Passing '-qt5' with the Qt6 environments looks conflict
#cmd_args += " \\\n -qt5"
cmd_args += " \\\n -qmake %s" % parameters['qmake'] cmd_args += " \\\n -qmake %s" % parameters['qmake']
cmd_args += " \\\n -bin %s" % parameters['bin'] cmd_args += " \\\n -bin %s" % parameters['bin']
cmd_args += " \\\n -build %s" % parameters['build'] cmd_args += " \\\n -build %s" % parameters['build']

View File

@ -32,22 +32,40 @@ else:
del System, Node, Release, MacVersion, Machine, Processor del System, Node, Release, MacVersion, Machine, Processor
#----------------------------------------------------- #-----------------------------------------------------
# [1] Qt # [1] Qt6 or Qt5
#----------------------------------------------------- #-----------------------------------------------------
Qts = [ 'Qt5MacPorts', 'Qt5Brew', 'Qt5Ana3' ] Qts = [ 'Qt6MacPorts', 'Qt6Brew' ]
Qts += [ 'Qt5MacPorts', 'Qt5Brew', 'Qt5Ana3' ]
#-----------------------------------------------------
# Whereabout of different components of Qt6
#-----------------------------------------------------
# Qt6 from MacPorts (https://www.macports.org/)
# install with 'sudo port install [qt6|qt6-qttools]'
# [Key Type Name] = 'Qt6MacPorts'
Qt6MacPorts = { 'qmake' : '/opt/local/libexec/qt6/bin/qmake',
'deploy': '/opt/local/libexec/qt6/bin/macdeployqt'
}
# Qt6 from Homebrew (https://brew.sh/)
# install with 'brew install qt6'
# [Key Type Name] = 'Qt6Brew'
Qt6Brew = { 'qmake' : '%s/opt/qt@6/bin/qmake' % DefaultHomebrewRoot,
'deploy': '%s/opt/qt@6/bin/macdeployqt' % DefaultHomebrewRoot
}
#----------------------------------------------------- #-----------------------------------------------------
# Whereabout of different components of Qt5 # Whereabout of different components of Qt5
#----------------------------------------------------- #-----------------------------------------------------
# Qt5 from MacPorts (https://www.macports.org/) # Qt5 from MacPorts (https://www.macports.org/)
# install with 'sudo port install qt5' # install with 'sudo port install [qt5|qt5-qttools]'
# [Key Type Name] = 'Qt5MacPorts' # [Key Type Name] = 'Qt5MacPorts'
Qt5MacPorts = { 'qmake' : '/opt/local/libexec/qt5/bin/qmake', Qt5MacPorts = { 'qmake' : '/opt/local/libexec/qt5/bin/qmake',
'deploy': '/opt/local/libexec/qt5/bin/macdeployqt' 'deploy': '/opt/local/libexec/qt5/bin/macdeployqt'
} }
# Qt5 from Homebrew (https://brew.sh/) # Qt5 from Homebrew (https://brew.sh/)
# install with 'brew install qt' # install with 'brew install qt5'
# [Key Type Name] = 'Qt5Brew' # [Key Type Name] = 'Qt5Brew'
Qt5Brew = { 'qmake' : '%s/opt/qt@5/bin/qmake' % DefaultHomebrewRoot, Qt5Brew = { 'qmake' : '%s/opt/qt@5/bin/qmake' % DefaultHomebrewRoot,
'deploy': '%s/opt/qt@5/bin/macdeployqt' % DefaultHomebrewRoot 'deploy': '%s/opt/qt@5/bin/macdeployqt' % DefaultHomebrewRoot
@ -203,7 +221,7 @@ RubyDictionary = { 'nil' : None,
PythonNil = [ 'nil' ] PythonNil = [ 'nil' ]
PythonSys = [ 'PythonElCapitan', 'PythonSierra', 'PythonHighSierra', 'PythonMojave' ] PythonSys = [ 'PythonElCapitan', 'PythonSierra', 'PythonHighSierra', 'PythonMojave' ]
PythonSys += [ 'PythonCatalina', 'PythonBigSur', 'PythonMonterey' ] PythonSys += [ 'PythonCatalina', 'PythonBigSur', 'PythonMonterey' ]
PythonExt = [ 'Python38MacPorts', 'Python38Brew', 'PythonAnaconda3', 'PythonAutoBrew' ] PythonExt = [ 'Python38MacPorts', 'Python38Brew', 'Python39Brew', 'PythonAnaconda3', 'PythonAutoBrew' ]
Pythons = PythonNil + PythonSys + PythonExt Pythons = PythonNil + PythonSys + PythonExt
#----------------------------------------------------- #-----------------------------------------------------
@ -282,7 +300,7 @@ Python38MacPorts= { 'exe': '/opt/local/Library/Frameworks/Python.framework/Versi
} }
# Python 3.8 from Homebrew *+*+*+ EXPERIMENTAL *+*+*+ # Python 3.8 from Homebrew *+*+*+ EXPERIMENTAL *+*+*+
# install with 'brew install python' # install with 'brew install python@3.8'
# [Key Type Name] = 'HB38' # [Key Type Name] = 'HB38'
HBPython38FrameworkPath = '%s/opt/python@3.8/Frameworks/Python.framework' % DefaultHomebrewRoot HBPython38FrameworkPath = '%s/opt/python@3.8/Frameworks/Python.framework' % DefaultHomebrewRoot
Python38Brew = { 'exe': '%s/Versions/3.8/bin/python3.8' % HBPython38FrameworkPath, Python38Brew = { 'exe': '%s/Versions/3.8/bin/python3.8' % HBPython38FrameworkPath,
@ -290,6 +308,15 @@ Python38Brew = { 'exe': '%s/Versions/3.8/bin/python3.8' % HBPython38Framework
'lib': '%s/Versions/3.8/lib/libpython3.8.dylib' % HBPython38FrameworkPath 'lib': '%s/Versions/3.8/lib/libpython3.8.dylib' % HBPython38FrameworkPath
} }
# Python 3.9 from Homebrew *+*+*+ EXPERIMENTAL *+*+*+
# install with 'brew install python@3.9'
# [Key Type Name] = 'HB39'
HBPython39FrameworkPath = '%s/opt/python@3.9/Frameworks/Python.framework' % DefaultHomebrewRoot
Python39Brew = { 'exe': '%s/Versions/3.9/bin/python3.9' % HBPython39FrameworkPath,
'inc': '%s/Versions/3.9/include/python3.9' % HBPython39FrameworkPath,
'lib': '%s/Versions/3.9/lib/libpython3.9.dylib' % HBPython39FrameworkPath
}
# Python 3.8 bundled with anaconda3 installed under /Applications/anaconda3/ *+*+*+ EXPERIMENTAL *+*+*+ # Python 3.8 bundled with anaconda3 installed under /Applications/anaconda3/ *+*+*+ EXPERIMENTAL *+*+*+
# The standard installation deploys the tool under $HOME/opt/anaconda3/. # The standard installation deploys the tool under $HOME/opt/anaconda3/.
# If so, you need to make a symbolic link: /Applications/anaconda3 ---> $HOME/opt/anaconda3/ # If so, you need to make a symbolic link: /Applications/anaconda3 ---> $HOME/opt/anaconda3/
@ -332,6 +359,7 @@ PythonDictionary = { 'nil' : None,
'PythonMonterey' : PythonMonterey, 'PythonMonterey' : PythonMonterey,
'Python38MacPorts': Python38MacPorts, 'Python38MacPorts': Python38MacPorts,
'Python38Brew' : Python38Brew, 'Python38Brew' : Python38Brew,
'Python39Brew' : Python39Brew,
'PythonAnaconda3' : PythonAnaconda3 'PythonAnaconda3' : PythonAnaconda3
} }
if _have_Homebrew_Python: if _have_Homebrew_Python:

View File

@ -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.27.4 or later on different Apple macOS / Mac OSX platforms.\n" Usage += " for making a DMG file of KLayout 0.27.5 or later on different Apple macOS / Mac OSX 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 'ST-qt5MP.pkg.macos-Catalina-release-RsysPsys' | \n" Usage += " : like 'ST-qt6MP.pkg.macos-Catalina-release-RsysPsys' | \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"
@ -137,7 +137,7 @@ def SetGlobals():
sys.exit(1) sys.exit(1)
if not Machine == "x86_64": if not Machine == "x86_64":
if Machine == "arm64" and (Platform == "Monterey" or Platform == "BigSur"): # with an Apple Silicon Chip if Machine == "arm64" and Platform in ["Monterey", "BigSur"]: # with an Apple Silicon Chip
print("") print("")
print( "### Your Mac equips an Apple Silicon Chip ###" ) print( "### Your Mac equips an Apple Silicon Chip ###" )
print("") print("")
@ -195,13 +195,17 @@ def SetGlobals():
## 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-Catalina-release-RsysPsys --- (1) # * ST-qt6MP.pkg.macos-Catalina-release-RsysPsys --- (1)
# * LW-qt5Ana3.pkg.macos-Catalina-release-Rana3Pana3 # * LW-qt6MP.pkg.macos-Catalina-release-Rmp27Pmp38
# * LW-qt5Brew.pkg.macos-Catalina-release-Rhb27Phb38 # * LW-qt6Brew.pkg.macos-Catalina-release-Rhb27Phb38
#
# * ST-qt5MP.pkg.macos-Catalina-release-RsysPsys
# * LW-qt5MP.pkg.macos-Catalina-release-Rmp27Pmp38 # * LW-qt5MP.pkg.macos-Catalina-release-Rmp27Pmp38
# * LW-qt5Brew.pkg.macos-Catalina-release-Rhb27Phb38
# * LW-qt5Ana3.pkg.macos-Catalina-release-Rana3Pana3
# #
# Generated DMG will be, for example, # Generated DMG will be, for example,
# (1) ---> ST-klayout-0.26.1-macOS-Catalina-1-qt5MP-RsysPsys.dmg # (1) ---> ST-klayout-0.27.5-macOS-Catalina-1-qt6MP-RsysPsys.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
@ -238,14 +242,18 @@ def CheckPkgDirectory():
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
# [2] Identify (Qt, Ruby, Python) from PkgDir # [2] Identify (Qt, Ruby, Python) from PkgDir
# * ST-qt6MP.pkg.macos-Catalina-release-RsysPsys
# * LW-qt6MP.pkg.macos-Catalina-release-Rmp27Pmp38
# * LW-qt6Brew.pkg.macos-Catalina-release-Rhb27Phb38
# #
# * ST-qt5MP.pkg.macos-Catalina-release-RsysPsys # * ST-qt5MP.pkg.macos-Catalina-release-RsysPsys
# * LW-qt5Ana3.pkg.macos-Catalina-release-Rana3Pana3 # * LW-qt5MP.pkg.macos-Catalina-release-Rmp27Pmp38
# * LW-qt5Brew.pkg.macos-Catalina-release-Rhb27Phb38 # * LW-qt5Brew.pkg.macos-Catalina-release-Rhb27Phb38
# * LW-qt5Ana3.pkg.macos-Catalina-release-Rana3Pana3
# * HW-qt5Brew.pkg.macos-Catalina-release-RsysPhb38 # * HW-qt5Brew.pkg.macos-Catalina-release-RsysPhb38
# * EX-qt5MP.pkg.macos-Catalina-release-Rmp27Pmp38 # * EX-qt5MP.pkg.macos-Catalina-release-Rmp27Pmp38
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
patQRP = u'(ST|LW|HW|EX)([-])(qt5[0-9A-Za-z]+)([.]pkg[.])([A-Za-z]+[-][A-Za-z]+[-]release[-])([0-9A-Za-z]+)' patQRP = u'(ST|LW|HW|EX)([-])([qt6|qt5][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" )
@ -265,18 +273,18 @@ def CheckPkgDirectory():
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
LatestOSMacPorts = Platform == LatestOS LatestOSMacPorts = Platform == LatestOS
LatestOSMacPorts &= PackagePrefix == "LW" LatestOSMacPorts &= PackagePrefix == "LW"
LatestOSMacPorts &= QtIdentification == "qt5MP" LatestOSMacPorts &= QtIdentification in ["qt6MP", "qt5MP"]
LatestOSMacPorts &= RubyPythonID == "Rmp27Pmp38" LatestOSMacPorts &= RubyPythonID in ["Rmp27Pmp38"]
LatestOSHomebrew = Platform == LatestOS LatestOSHomebrew = Platform == LatestOS
LatestOSHomebrew &= PackagePrefix == "LW" LatestOSHomebrew &= PackagePrefix == "LW"
LatestOSHomebrew &= QtIdentification == "qt5Brew" LatestOSHomebrew &= QtIdentification in ["qt6Brew", "qt5Brew"]
LatestOSHomebrew &= RubyPythonID == "Rhb27Phb38" or RubyPythonID == "Rhb27Phbauto" LatestOSHomebrew &= RubyPythonID in ["Rhb27Phb38", "Rhb27Phb39", "Rhb27Phbauto"]
LatestOSAnaconda3 = Platform == LatestOS LatestOSAnaconda3 = Platform == LatestOS
LatestOSAnaconda3 &= PackagePrefix == "LW" LatestOSAnaconda3 &= PackagePrefix == "LW"
LatestOSAnaconda3 &= QtIdentification == "qt5Ana3" LatestOSAnaconda3 &= QtIdentification in ["qt5Ana3"]
LatestOSAnaconda3 &= RubyPythonID == "Rana3Pana3" LatestOSAnaconda3 &= RubyPythonID in ["Rana3Pana3"]
if LatestOSMacPorts: if LatestOSMacPorts:
mydic = DicLightWeight["ports"] mydic = DicLightWeight["ports"]