mirror of https://github.com/KLayout/klayout.git
Again, the build system for macOS was revised to work with KLayout version 0.28 or later.
This commit is contained in:
parent
6c6a3ae3b0
commit
9720de0f37
|
|
@ -1,12 +1,13 @@
|
|||
Relevant KLayout version: 0.27.11<br>
|
||||
Relevant KLayout version: 0.28.2<br>
|
||||
Author: Kazzz-S<br>
|
||||
Last modified: 2022-10-10<br>
|
||||
Last modified: 2022-12-24<br>
|
||||
|
||||
# 1. Introduction
|
||||
This directory **`macbuild`** contains different files required for building KLayout (http://www.klayout.de/) version 0.27.11 or later for different 64-bit macOS, including:
|
||||
This directory **`macbuild`** contains different files required for building KLayout (http://www.klayout.de/) version 0.28.2 or later for different 64-bit macOS, including:
|
||||
* 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
|
||||
* Monterey (12.x) : -- ditto --
|
||||
* Ventura (13.x) : planning
|
||||
|
||||
Building KLayout for the previous operating systems listed below should still be possible. <br>
|
||||
However, they are not actively supported, and DMG packages are not provided.
|
||||
|
|
@ -43,11 +44,9 @@ If you have installed Anaconda3 under $HOME/opt/anaconda3/, make a symbolic link
|
|||
```
|
||||
|
||||
The migration work to "Qt6" is ongoing. You can try to use it; however, you will encounter some build and runtime errors.
|
||||
For example, as of 2021-11-27, MacPorts' Qt6 does not provide `qt6-qtmultimedia`, which causes a build error.
|
||||
|
||||
# 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>
|
||||
This configuration is possible only for macOS Catalina (10.15.7).<br>
|
||||
```
|
||||
$ /usr/bin/ruby -v
|
||||
ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]
|
||||
|
|
@ -55,11 +54,10 @@ $ /usr/bin/ruby -v
|
|||
$ /usr/bin/python --version
|
||||
Python 2.7.16
|
||||
```
|
||||
|
||||
Big Sur (11.x) and Monterey (< 12.3) still provide Python 2.7 binaries to run various legacy applications.<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>
|
||||
Moreover, Monterey (12.3.1) finally eliminated the Python 2.7 binaries.<br>
|
||||
Therefore, Homebrew is adopted as the default environment for Big Sur and Monterey.
|
||||
This configuration WAS possible only for macOS Catalina (10.15.7).<br>
|
||||
However, it is no longer supported since KLayout version 0.28.x~ uses some Python3-specific features.
|
||||
Therefore, MacPorts' Ruby 3.1 and Python 3.8 are adopted as the default environment for Catalina.
|
||||
Big Sur and Monterey use Homebrew's Ruby 3.1 and Python 3.8 by default.
|
||||
|
||||
The build script **`build4mac.py`** provides several possible combinations of Qt5, Ruy, and Python modules to accommodate such a slightly complex environment.<br>
|
||||
Some typical use cases are described in Section 6.
|
||||
|
|
@ -71,12 +69,12 @@ You need to have the followings:
|
|||
* Optionally, Ruby and Python packages from MacPorts, Homebrew, or Anaconda3
|
||||
#### 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 shown below.
|
||||
**((Notes))** For **Catalina**
|
||||
```
|
||||
---------------------------------------------------------------------------------------------------------
|
||||
<< Usage of 'build4mac.py' >>
|
||||
for building KLayout 0.27.11 or later on different Apple macOS / Mac OSX platforms.
|
||||
for building KLayout 0.28 or later on different Apple macOS / Mac OSX platforms.
|
||||
|
||||
$ [python] ./build4mac.py
|
||||
option & argument : descriptions (refer to 'macbuild/build4mac_env.py' for details)| default value
|
||||
|
|
@ -89,16 +87,15 @@ $ [python] ./build4mac.py
|
|||
: Qt6MacPorts: use Qt6 from MacPorts (*) |
|
||||
: Qt6Brew: use Qt6 from Homebrew (*) |
|
||||
: (*) migration to Qt6 is ongoing |
|
||||
[-r|--ruby <type>] : case-insensitive type=['nil', 'Sys', 'MP31', 'HB31', 'Ana3'] | sys
|
||||
[-r|--ruby <type>] : case-insensitive type=['nil', 'Sys', 'MP31', 'HB31', 'Ana3'] | mp31
|
||||
: nil: don't bind Ruby |
|
||||
: Sys: use OS-bundled Ruby [2.0 - 2.6] depending on OS |
|
||||
: MP31: use Ruby 3.1 from MacPorts |
|
||||
: HB31: use Ruby 3.1 from Homebrew |
|
||||
: Ana3: use Ruby 3.1 from Anaconda3 |
|
||||
[-p|--python <type>] : case-insensitive type=['nil', 'Sys', 'MP38', 'HB38', 'Ana3', | sys
|
||||
[-p|--python <type>] : case-insensitive type=['nil', 'MP38', 'HB38', 'Ana3', | mp38
|
||||
: HB39', 'HBAuto'] |
|
||||
: nil: don't bind Python |
|
||||
: Sys: use OS-bundled Python 2.7 [ElCapitan -- Catalina] |
|
||||
: MP38: use Python 3.8 from MacPorts |
|
||||
: HB38: use Python 3.8 from Homebrew |
|
||||
: Ana3: use Python 3.8 from Anaconda3 |
|
||||
|
|
@ -110,7 +107,7 @@ $ [python] ./build4mac.py
|
|||
[-m|--make <option>] : option passed to 'make' | '--jobs=4'
|
||||
[-d|--debug] : enable debug mode build | disabled
|
||||
[-c|--checkcom] : check command-line and exit without building | disabled
|
||||
[-y|--deploy] : deploy executables and dylibs including Qt's Frameworks | disabled
|
||||
[-y|--deploy] : deploy executables and dylibs, including Qt's Frameworks | disabled
|
||||
[-Y|--DEPLOY] : deploy executables and dylibs for those who built KLayout | disabled
|
||||
: from the source code and use the tools in the same machine |
|
||||
: ! After confirmation of the successful build of 'klayout.app', |
|
||||
|
|
@ -129,7 +126,7 @@ $ [python] ./build4mac.py
|
|||
```
|
||||
---------------------------------------------------------------------------------------------------------
|
||||
<< Usage of 'build4mac.py' >>
|
||||
for building KLayout 0.27.11 or later on different Apple macOS / Mac OSX platforms.
|
||||
for building KLayout 0.28 or later on different Apple macOS / Mac OSX platforms.
|
||||
|
||||
$ [python] ./build4mac.py
|
||||
option & argument : descriptions (refer to 'macbuild/build4mac_env.py' for details)| default value
|
||||
|
|
@ -148,10 +145,9 @@ $ [python] ./build4mac.py
|
|||
: MP31: use Ruby 3.1 from MacPorts |
|
||||
: HB31: use Ruby 3.1 from Homebrew |
|
||||
: Ana3: use Ruby 3.1 from Anaconda3 |
|
||||
[-p|--python <type>] : case-insensitive type=['nil', 'Sys', 'MP38', 'HB38', 'Ana3', | hb38
|
||||
[-p|--python <type>] : case-insensitive type=['nil', 'MP38', 'HB38', 'Ana3', | hb38
|
||||
: HB39', 'HBAuto'] |
|
||||
: nil: don't bind Python |
|
||||
: Sys: use OS-bundled Python 2.7 [ElCapitan -- Catalina] |
|
||||
: MP38: use Python 3.8 from MacPorts |
|
||||
: HB38: use Python 3.8 from Homebrew |
|
||||
: Ana3: use Python 3.8 from Anaconda3 |
|
||||
|
|
@ -163,7 +159,7 @@ $ [python] ./build4mac.py
|
|||
[-m|--make <option>] : option passed to 'make' | '--jobs=4'
|
||||
[-d|--debug] : enable debug mode build | disabled
|
||||
[-c|--checkcom] : check command-line and exit without building | disabled
|
||||
[-y|--deploy] : deploy executables and dylibs including Qt's Frameworks | disabled
|
||||
[-y|--deploy] : deploy executables and dylibs, including Qt's Frameworks | disabled
|
||||
[-Y|--DEPLOY] : deploy executables and dylibs for those who built KLayout | disabled
|
||||
: from the source code and use the tools in the same machine |
|
||||
: ! After confirmation of the successful build of 'klayout.app', |
|
||||
|
|
@ -179,41 +175,10 @@ $ [python] ./build4mac.py
|
|||
```
|
||||
|
||||
# 6. Use-cases
|
||||
In this section, the actual file names and directory names are those obtained on macOS Catalina.<br>
|
||||
In this section, the actual file and directory names are those obtained on macOS Catalina.<br>
|
||||
On different OS, those names differ accordingly.
|
||||
|
||||
### 6A. Standard build using the OS-bundled Ruby and Python
|
||||
0. Install MacPorts, then install Qt5 by
|
||||
```
|
||||
$ sudo port install coreutils
|
||||
$ sudo port install findutils
|
||||
$ sudo port install qt5
|
||||
```
|
||||
1. Invoke **`build4mac.py`** with the default options: **((Notes))** only for Catalina
|
||||
```
|
||||
$ cd /where/'build.sh'/exists
|
||||
$ ./build4mac.py
|
||||
```
|
||||
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) under **`klayout.app`** bundle.<br>
|
||||
The buddy command-line tools (strm*) will also be deployed in this step.
|
||||
```
|
||||
$ ./build4mac.py -y
|
||||
```
|
||||
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-" means that this is a standard package (LW-, HW-, and EX- are other possibilities explained below).
|
||||
* "qt5MP" means that Qt5 from MacPorts is used.
|
||||
* "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.
|
||||
|
||||
If you use the "-Y" option instead of the "-y" in Step-3, the Qt5 framework is NOT deployed in the application bundle.<br>
|
||||
Then the directory name will be **`LW-qt5MP.pkg.macos-Catalina-release-RsysPsys`**, where
|
||||
* "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.
|
||||
|
||||
### 6B. Fully MacPorts-flavored build with MacPorts Ruby 3.1 and MacPorts Python 3.8
|
||||
### 6A. Fully MacPorts-flavored build with MacPorts Ruby 3.1 and MacPorts Python 3.8
|
||||
0. Install MacPorts, then install Qt5, Ruby 3.1, and Python 3.8 by
|
||||
```
|
||||
$ sudo port install coreutils
|
||||
|
|
@ -229,7 +194,7 @@ $ cd /where/'build.sh'/exists
|
|||
$ ./build4mac.py -q qt5macports -r mp31 -p mp38
|
||||
```
|
||||
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. 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>
|
||||
If you use `--buildPymod` option in Step-1 and Step-3, the KLayout Python Module (\*.whl, \*.egg) will be built and deployed under **klayout.app/Contents/pymod-dist/**.
|
||||
|
||||
|
|
@ -238,12 +203,12 @@ $ ./build4mac.py -q qt5macports -r mp31 -p mp38 -Y
|
|||
```
|
||||
The application bundle **`klayout.app`** is located under:<br>
|
||||
**`LW-qt5MP.pkg.macos-Catalina-release-Rmp31Pmp38`** directory, where
|
||||
* "LW-" means that this is a lightweight package.
|
||||
* "LW-" means this is a lightweight package.
|
||||
* "qt5MP" means that Qt5 from MacPorts is used.
|
||||
* "Rmp31Pmp38" means that Ruby is 3.1 from MacPorts; Python is 3.8 from MacPorts.
|
||||
4. Copy/move the generated application bundle **`klayout.app`** to your **`/Applications`** directory for installation.
|
||||
|
||||
### 6C. Fully Homebrew-flavored build with Homebrew Ruby 3.1 and Homebrew Python 3.8
|
||||
### 6B. Fully Homebrew-flavored build with Homebrew Ruby 3.1 and Homebrew Python 3.8
|
||||
0. Install Homebrew, then install Qt5, Ruby 3.1, and Python 3.8 by
|
||||
```
|
||||
$ brew install qt@5
|
||||
|
|
@ -256,7 +221,7 @@ $ cd /where/'build.sh'/exists
|
|||
$ ./build4mac.py -q qt5brew -r hb31 -p hb38
|
||||
```
|
||||
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. 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>
|
||||
If you use `--buildPymod` option in Step-1 and Step-3, the KLayout Python Module (\*.whl, \*.egg) will be built and deployed under **klayout.app/Contents/pymod-dist/**.
|
||||
|
||||
|
|
@ -265,12 +230,12 @@ $ ./build4mac.py -q qt5brew -r hb31 -p hb38 -Y
|
|||
```
|
||||
The application bundle **`klayout.app`** is located under:<br>
|
||||
**`LW-qt5Brew.pkg.macos-Catalina-release-Rhb31Phb38`** directory, where
|
||||
* "LW-" means that this is a lightweight package.
|
||||
* "LW-" means this is a lightweight package.
|
||||
* "qt5Brew" means that Qt5 from Homebrew is used.
|
||||
* "Rhb31Phb38" means that Ruby is 3.1 from Homebrew; Python is 3.8 from Homebrew.
|
||||
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
|
||||
### 6C. Partially Homebrew-flavored build with System Ruby and Homebrew Python 3.8
|
||||
0. Install Homebrew, then install Qt5 and Python 3.8 by
|
||||
```
|
||||
$ brew install qt@5
|
||||
|
|
@ -282,7 +247,7 @@ $ cd /where/'build.sh'/exists
|
|||
$ ./build4mac.py -q qt5brew -r sys -p hb38
|
||||
```
|
||||
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 and Python frameworks) under the **`klayout.app`** bundle.<br>
|
||||
3. Rerun **`build4mac.py`** with the same options used in 1. PLUS "-y" to deploy executables and libraries (including Qt and Python frameworks) under the **`klayout.app`** bundle.<br>
|
||||
The buddy command-line tools (strm*) will also be deployed under **klayout.app/Contents/Buddy/** in this step.
|
||||
|
||||
```
|
||||
|
|
@ -290,7 +255,7 @@ $ ./build4mac.py -q qt5brew -r sys -p hb38 -y
|
|||
```
|
||||
The application bundle **`klayout.app`** is located under:<br>
|
||||
**`HW-qt5Brew.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 this is a heavyweight package because both Qt5 and Python Frameworks are deployed.
|
||||
* "qt5Brew" means that Qt5 from Homebrew is used.
|
||||
* "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.
|
||||
|
|
@ -298,7 +263,7 @@ $ ./build4mac.py -q qt5brew -r sys -p hb38 -y
|
|||
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.
|
||||
|
||||
### 6E. Fully Anaconda3-flavored build with Anaconda3 Ruby 3.1 and Anaconda3 Python 3.8
|
||||
### 6D. Fully Anaconda3-flavored build with Anaconda3 Ruby 3.1 and Anaconda3 Python 3.8
|
||||
0. Install Anaconda3, then install Ruby 3.1 by
|
||||
```
|
||||
$ conda install ruby
|
||||
|
|
@ -309,7 +274,7 @@ $ cd /where/'build.sh'/exists
|
|||
$ ./build4mac.py -q qt5ana3 -r ana3 -p ana3
|
||||
```
|
||||
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. 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>
|
||||
If you use `--buildPymod` option in Step-1 and Step-3, the KLayout Python Module (\*.whl, \*.egg) will be built and deployed under **klayout.app/Contents/pymod-dist/**.
|
||||
|
||||
|
|
@ -318,7 +283,7 @@ $ ./build4mac.py -q qt5ana3 -r ana3 -p ana3 -Y
|
|||
```
|
||||
The application bundle **`klayout.app`** is located under:<br>
|
||||
**`LW-qt5Ana3.pkg.macos-Catalina-release-Rana3Pana3`** directory, where
|
||||
* "LW-" means that this is a lightweight package.
|
||||
* "LW-" means this is a lightweight package.
|
||||
* "qt5Ana3" means that Qt5 from Anaconda3 is used.
|
||||
* "Rana3Pana3" means that Ruby (3.1) is from Anaconda3; Python (3.8) is from Anaconda3.
|
||||
4. Copy/move the generated application bundle **`klayout.app`** to your **`/Applications`** directory for installation.
|
||||
|
|
@ -327,15 +292,15 @@ $ ./build4mac.py -q qt5ana3 -r ana3 -p ana3 -Y
|
|||
export PYTHONHOME=$HOME/opt/anaconda3
|
||||
```
|
||||
|
||||
### 6F. Other combinations
|
||||
Logically, several different module combinations other than 6A through 6E are possible, including `nil` choice.<br>
|
||||
### 6E. Other combinations
|
||||
Logically, several module combinations other than 6A through 6D are possible, including `nil` choice.<br>
|
||||
The resultant package directory name will begin with **`EX-`** (exceptional) if you choose such a combination.
|
||||
|
||||
----
|
||||
|
||||
# 7. Making a DMG installer
|
||||
You can make a DMG installer using another Python script **`makeDMG4mac.py`**.
|
||||
This script requires a directory generated by **`build4mac.py`** with the [-y|-Y] option (refer to 6A through 6E).
|
||||
This script requires a directory generated by **`build4mac.py`** with the [-y|-Y] option (refer to 6A through 6D).
|
||||
|
||||
1. Make a symbolic link (if it does not exist) from the parent directory (where **`build.sh`** exists) to **`makeDMG4mac.py`**, that is,
|
||||
```
|
||||
|
|
@ -344,11 +309,11 @@ makeDMG4mac.py -> macbuild/makeDMG4mac.py
|
|||
2. Invoke **`makeDMG4mac.py`** with -p and -m options, for example,
|
||||
```
|
||||
$ cd /where/'build.sh'/exists
|
||||
$ ./makeDMG4mac.py -p ST-qt5MP.pkg.macos-Catalina-release-RsysPsys -m
|
||||
$ ./makeDMG4mac.py -p LW-qt5MP.pkg.macos-Catalina-release-Rmp31Pmp38 -m
|
||||
```
|
||||
This command will generate the two files below:<br>
|
||||
* **`ST-klayout-0.27.11-macOS-Catalina-1-qt5MP-RsysPsys.dmg`** ---(1) the main DMG file
|
||||
* **`ST-klayout-0.27.11-macOS-Catalina-1-qt5MP-RsysPsys.dmg.md5`** ---(2) MD5-value text file
|
||||
* **`LW-klayout-0.28.2-macOS-Catalina-1-qt5MP-Rmp31Pmp38.dmg`** ---(1) the main DMG file
|
||||
* **`LW-klayout-0.28.2-macOS-Catalina-1-qt5MP-Rmp31Pmp38.dmg.md5`** ---(2) MD5-value text file
|
||||
|
||||
# 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>
|
||||
|
|
@ -356,7 +321,7 @@ In such cases, you need to update the dictionary contents of **`build4mac_env.py
|
|||
|
||||
# Final comments
|
||||
No need to say KLayout is a great tool! <br>
|
||||
With the object-oriented script language (both Ruby and Python) support, our error-prone layout jobs can be greatly simplified and sped up.<br>
|
||||
With the object-oriented script language (both Ruby and Python) support, our error-prone layout jobs can be significantly simplified and sped up.<br>
|
||||
Building KLayout from its source code is not difficult. Try it with your favorite environment!
|
||||
|
||||
[End of File]
|
||||
|
|
|
|||
|
|
@ -38,16 +38,16 @@ def GenerateUsage(platform):
|
|||
myRuby = "hb31"
|
||||
myPython = "hb38"
|
||||
moduleset = ('qt5Brew', 'HB31', 'HB38')
|
||||
else: # with Xcode [ .. 12.4]
|
||||
else: # with Xcode [ .. 12.4]; 'sys' for Python has been abolished in 0.28
|
||||
myQt56 = "qt5macports"
|
||||
myRuby = "sys"
|
||||
myPython = "sys"
|
||||
moduleset = ('qt5MP', 'Sys', 'Sys')
|
||||
myRuby = "mp31"
|
||||
myPython = "mp38"
|
||||
moduleset = ('qt5MP', 'MP31', 'MP38')
|
||||
|
||||
usage = "\n"
|
||||
usage += "---------------------------------------------------------------------------------------------------------\n"
|
||||
usage += "<< Usage of 'build4mac.py' >>\n"
|
||||
usage += " for building KLayout 0.27.11 or later on different Apple macOS / Mac OSX platforms.\n"
|
||||
usage += " for building KLayout 0.28 or later on different Apple macOS / Mac OSX platforms.\n"
|
||||
usage += "\n"
|
||||
usage += "$ [python] ./build4mac.py\n"
|
||||
usage += " option & argument : descriptions (refer to 'macbuild/build4mac_env.py' for details)| default value\n"
|
||||
|
|
@ -66,10 +66,9 @@ def GenerateUsage(platform):
|
|||
usage += " : MP31: use Ruby 3.1 from MacPorts | \n"
|
||||
usage += " : HB31: use Ruby 3.1 from Homebrew | \n"
|
||||
usage += " : Ana3: use Ruby 3.1 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', 'MP38', 'HB38', 'Ana3', | %s \n" % myPython
|
||||
usage += " : HB39', 'HBAuto'] | \n"
|
||||
usage += " : nil: don't bind Python | \n"
|
||||
usage += " : Sys: use OS-bundled Python 2.7 [ElCapitan -- Catalina] | \n"
|
||||
usage += " : MP38: use Python 3.8 from MacPorts | \n"
|
||||
usage += " : HB38: use Python 3.8 from Homebrew | \n"
|
||||
usage += " : Ana3: use Python 3.8 from Anaconda3 | \n"
|
||||
|
|
@ -81,10 +80,10 @@ def GenerateUsage(platform):
|
|||
usage += " [-m|--make <option>] : option passed to 'make' | '--jobs=4'\n"
|
||||
usage += " [-d|--debug] : enable debug mode build | disabled\n"
|
||||
usage += " [-c|--checkcom] : check command-line and exit without building | disabled\n"
|
||||
usage += " [-y|--deploy] : deploy executables and dylibs including Qt's Frameworks | disabled\n"
|
||||
usage += " [-y|--deploy] : deploy executables and dylibs, including Qt's Frameworks | disabled\n"
|
||||
usage += " [-Y|--DEPLOY] : deploy executables and dylibs for those who built KLayout | disabled\n"
|
||||
usage += " : from the source code and use the tools in the same machine | \n"
|
||||
usage += " : ! After confirmation of the uccessful build of 'klayout.app', | \n"
|
||||
usage += " : ! After confirmation of the successful build of 'klayout.app', | \n"
|
||||
usage += " : rerun this script with BOTH: | \n"
|
||||
usage += " : 1) the same options used for building AND | \n"
|
||||
usage += " : 2) <-y|--deploy> OR <-Y|--DEPLOY> | \n"
|
||||
|
|
@ -387,7 +386,7 @@ def Parse_CLI_Args(config):
|
|||
|
||||
p.add_option( '-p', '--python',
|
||||
dest='type_python',
|
||||
help="Python type=['nil', 'Sys', 'MP38', 'HB38', 'Ana3', 'HB39', 'HBAuto']" )
|
||||
help="Python type=['nil', 'MP38', 'HB38', 'Ana3', 'HB39', 'HBAuto']" )
|
||||
|
||||
p.add_option( '-P', '--buildPymod',
|
||||
action='store_true',
|
||||
|
|
@ -461,8 +460,8 @@ def Parse_CLI_Args(config):
|
|||
checkusage = False )
|
||||
else: # with Xcode [ .. 12.4]
|
||||
p.set_defaults( type_qt = "qt5macports",
|
||||
type_ruby = "sys",
|
||||
type_python = "sys",
|
||||
type_ruby = "mp31",
|
||||
type_python = "mp38",
|
||||
build_pymod = False,
|
||||
no_qt_binding = False,
|
||||
no_qt_uitools = False,
|
||||
|
|
@ -562,7 +561,7 @@ def Parse_CLI_Args(config):
|
|||
# (C) Determine the Python type
|
||||
candidates = dict()
|
||||
candidates['NIL'] = 'nil'
|
||||
candidates['SYS'] = 'Sys'
|
||||
# candidates['SYS'] = 'Sys' # has been abolished in 0.28
|
||||
candidates['MP38'] = 'MP38'
|
||||
candidates['HB38'] = 'HB38'
|
||||
candidates['ANA3'] = 'Ana3'
|
||||
|
|
|
|||
|
|
@ -59,10 +59,11 @@ def SetGlobals():
|
|||
global VolumeDMG # the volume name of DMG
|
||||
global TargetDMG # the name of target DMG file
|
||||
global RootApplications # reserved directory name for applications
|
||||
global LatestOSMacPorts # True if 'LatestOS with MacPorts'
|
||||
global LatestOSHomebrew # True if 'LatestOS with Homebrew'
|
||||
global LatestOSAnaconda3 # True if 'LatestOS with Anaconda3'
|
||||
global DicLightWeight # dictionary for LW-* packages
|
||||
global LatestOSMacPorts # True if 'LatestOS with MacPorts' and targeting LW-*
|
||||
global LatestOSHomebrew # True if 'LatestOS with Homebrew' and targeting LW-*
|
||||
global LatestOSAnaconda3 # True if 'LatestOS with Anaconda3' and targeting LW-*
|
||||
global LatestOSHomebrewH # True if 'LatestOS with Homebrew' and targeting HW-*
|
||||
global DicLightHeavyW # dictionary for LW-* and HW-* packages
|
||||
global Item3AppleScript # ITEM_3 in the Apple script
|
||||
# auxiliary variables on platform
|
||||
global System # 6-tuple from platform.uname()
|
||||
|
|
@ -76,13 +77,13 @@ def SetGlobals():
|
|||
Usage = "\n"
|
||||
Usage += "---------------------------------------------------------------------------------------------------------\n"
|
||||
Usage += "<< Usage of 'makeDMG4mac.py' >>\n"
|
||||
Usage += " for making a DMG file of KLayout 0.27.11 or later on different Apple macOS / Mac OSX platforms.\n"
|
||||
Usage += " for making a DMG file of KLayout 0.28 or later on different Apple macOS / Mac OSX platforms.\n"
|
||||
Usage += "\n"
|
||||
Usage += "$ [python] ./makeDMG4mac.py\n"
|
||||
Usage += " option & argument : descriptions | default value\n"
|
||||
Usage += " ----------------------------------------------------------------------------------+-----------------\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 'LW-qt5MP.pkg.macos-Catalina-release-Rmp31Pmp38' | \n"
|
||||
Usage += " <-c|--clean> : clean the work directory | disabled\n"
|
||||
Usage += " <-m|--make> : make a compressed DMG file | disabled\n"
|
||||
Usage += " : <-c|--clean> and <-m|--make> are mutually exclusive | \n"
|
||||
|
|
@ -168,43 +169,52 @@ def SetGlobals():
|
|||
LatestOSMacPorts = False
|
||||
LatestOSHomebrew = False
|
||||
LatestOSAnaconda3 = False
|
||||
DicLightWeight = dict()
|
||||
LatestOSHomebrewH = False
|
||||
DicLightHeavyW = dict()
|
||||
Item3AppleScript = ""
|
||||
# Populate DicLightWeight
|
||||
DicLightWeight[ "ports" ] = dict()
|
||||
DicLightWeight[ "brew" ] = dict()
|
||||
DicLightWeight[ "ana3" ] = dict()
|
||||
|
||||
DicLightWeight[ "ports" ]["zip"] = "macbuild/Resources/script-bundle-P.zip"
|
||||
DicLightWeight[ "ports" ]["src"] = "script-bundle-P"
|
||||
DicLightWeight[ "ports" ]["des"] = "MacPortsUser-ReadMeFirst"
|
||||
DicLightWeight[ "ports" ]["item3"] = 'set position of item "MacPortsUser-ReadMeFirst" to {700, 400}'
|
||||
# Populate DicLightHeavyW
|
||||
DicLightHeavyW[ "ports" ] = dict() # LW-*
|
||||
DicLightHeavyW[ "brew" ] = dict() # LW-*
|
||||
DicLightHeavyW[ "ana3" ] = dict() # LW-*
|
||||
DicLightHeavyW[ "brewH" ] = dict() # HW-*
|
||||
|
||||
DicLightWeight[ "brew" ]["zip"] = "macbuild/Resources/script-bundle-B.zip"
|
||||
DicLightWeight[ "brew" ]["src"] = "script-bundle-B"
|
||||
DicLightWeight[ "brew" ]["des"] = "HomebrewUser-ReadMeFirst"
|
||||
DicLightWeight[ "brew" ]["item3"] = 'set position of item "HomebrewUser-ReadMeFirst" to {700, 400}'
|
||||
DicLightHeavyW[ "ports" ]["zip"] = "macbuild/Resources/script-bundle-P.zip"
|
||||
DicLightHeavyW[ "ports" ]["src"] = "script-bundle-P"
|
||||
DicLightHeavyW[ "ports" ]["des"] = "MacPortsUser-ReadMeFirst"
|
||||
DicLightHeavyW[ "ports" ]["item3"] = 'set position of item "MacPortsUser-ReadMeFirst" to {700, 400}'
|
||||
|
||||
DicLightWeight[ "ana3" ]["zip"] = "macbuild/Resources/script-bundle-A.zip"
|
||||
DicLightWeight[ "ana3" ]["src"] = "script-bundle-A"
|
||||
DicLightWeight[ "ana3" ]["des"] = "Anaconda3User-ReadMeFirst"
|
||||
DicLightWeight[ "ana3" ]["item3"] = 'set position of item "Anaconda3User-ReadMeFirst" to {700, 400}'
|
||||
DicLightHeavyW[ "brew" ]["zip"] = "macbuild/Resources/script-bundle-B.zip"
|
||||
DicLightHeavyW[ "brew" ]["src"] = "script-bundle-B"
|
||||
DicLightHeavyW[ "brew" ]["des"] = "HomebrewUser-ReadMeFirst"
|
||||
DicLightHeavyW[ "brew" ]["item3"] = 'set position of item "HomebrewUser-ReadMeFirst" to {700, 400}'
|
||||
|
||||
DicLightHeavyW[ "ana3" ]["zip"] = "macbuild/Resources/script-bundle-A.zip"
|
||||
DicLightHeavyW[ "ana3" ]["src"] = "script-bundle-A"
|
||||
DicLightHeavyW[ "ana3" ]["des"] = "Anaconda3User-ReadMeFirst"
|
||||
DicLightHeavyW[ "ana3" ]["item3"] = 'set position of item "Anaconda3User-ReadMeFirst" to {700, 400}'
|
||||
|
||||
DicLightHeavyW[ "brewH" ]["zip"] = "macbuild/Resources/script-bundle-H.zip"
|
||||
DicLightHeavyW[ "brewH" ]["src"] = "script-bundle-H"
|
||||
DicLightHeavyW[ "brewH" ]["des"] = "Homebrew-HUser-ReadMeFirst"
|
||||
DicLightHeavyW[ "brewH" ]["item3"] = 'set position of item "Homebrew-HUser-ReadMeFirst" to {700, 400}'
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
## To check the contents of the package directory
|
||||
#
|
||||
# The package directory name should look like:
|
||||
# * ST-qt5MP.pkg.macos-Catalina-release-RsysPsys --- (1)
|
||||
# * LW-qt5Ana3.pkg.macos-Catalina-release-Rana3Pana3
|
||||
# * LW-qt5Brew.pkg.macos-Catalina-release-Rhb31Phb38
|
||||
# * LW-qt5Brew.pkg.macos-Catalina-release-Rhb31Phb38 --- (1)
|
||||
# * LW-qt5MP.pkg.macos-Catalina-release-Rmp31Pmp38
|
||||
# * HW-qt5Brew.pkg.macos-Catalina-release-RsysPhb38
|
||||
#
|
||||
# * ST-qt6MP.pkg.macos-Catalina-release-RsysPsys
|
||||
# * LW-qt6Ana3.pkg.macos-Catalina-release-Rana3Pana3
|
||||
# * LW-qt6Brew.pkg.macos-Catalina-release-Rhb31Phb38
|
||||
# * LW-qt6MP.pkg.macos-Catalina-release-Rmp31Pmp38
|
||||
# * HW-qt6Brew.pkg.macos-Catalina-release-RsysPhb38
|
||||
#
|
||||
# Generated DMG will be, for example,
|
||||
# (1) ---> ST-klayout-0.27.11-macOS-Catalina-1-qt5MP-RsysPsys.dmg
|
||||
# (1) ---> LW-klayout-0.28.2-macOS-Catalina-1-qt5Brew-Rhb31Phb38.dmg
|
||||
#
|
||||
# @return on success, positive integer in [MB] that tells approx. occupied disc space;
|
||||
# on failure, -1
|
||||
|
|
@ -224,7 +234,8 @@ def CheckPkgDirectory():
|
|||
global LatestOSMacPorts
|
||||
global LatestOSHomebrew
|
||||
global LatestOSAnaconda3
|
||||
global DicLightWeight
|
||||
global LatestOSHomebrewH
|
||||
global DicLightHeavyW
|
||||
global Item3AppleScript
|
||||
|
||||
#-----------------------------------------------------------------------------
|
||||
|
|
@ -242,17 +253,18 @@ def CheckPkgDirectory():
|
|||
|
||||
#-----------------------------------------------------------------------------
|
||||
# [2] Identify (Qt, Ruby, Python) from PkgDir
|
||||
# * ST-qt5MP.pkg.macos-Catalina-release-RsysPsys
|
||||
# * LW-qt5Ana3.pkg.macos-Catalina-release-Rana3Pana3
|
||||
# * LW-qt5Brew.pkg.macos-Catalina-release-Rhb31Phb38
|
||||
# * LW-qt5MP.pkg.macos-Catalina-release-Rmp31Pmp38
|
||||
# * HW-qt5Brew.pkg.macos-Catalina-release-RsysPhb38
|
||||
# * EX-qt5MP.pkg.macos-Catalina-release-Rmp31Pmp38
|
||||
# * EX-qt5MP.pkg.macos-Catalina-release-Rhb31Pmp38
|
||||
#
|
||||
# * ST-qt6MP.pkg.macos-Catalina-release-RsysPsys
|
||||
# * LW-qt6MP.pkg.macos-Catalina-release-Rmp31Pmp38
|
||||
# * LW-qt6Ana3.pkg.macos-Catalina-release-Rana3Pana3
|
||||
# * LW-qt6Brew.pkg.macos-Catalina-release-Rhb31Phb38
|
||||
# * LW-qt6MP.pkg.macos-Catalina-release-Rmp31Pmp38
|
||||
# * HW-qt6Brew.pkg.macos-Catalina-release-RsysPhb38
|
||||
#-----------------------------------------------------------------------------
|
||||
patQRP = u'(ST|LW|HW|EX)([-])([qt5|qt6][0-9A-Za-z]+)([.]pkg[.])([A-Za-z]+[-][A-Za-z]+[-]release[-])([0-9A-Za-z]+)'
|
||||
patQRP = u'(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)
|
||||
if not regQRP.match(PkgDir):
|
||||
print( "! Cannot identify (Qt, Ruby, Python) from the package directory name" )
|
||||
|
|
@ -292,8 +304,13 @@ def CheckPkgDirectory():
|
|||
LatestOSAnaconda3 &= QtIdentification in ["qt5Ana3"]
|
||||
LatestOSAnaconda3 &= RubyPythonID in ["Rana3Pana3"]
|
||||
|
||||
LatestOSHomebrewH = Platform == LatestOS
|
||||
LatestOSHomebrewH &= PackagePrefix == "HW"
|
||||
LatestOSHomebrewH &= QtIdentification in ["qt5Brew", "qt6Brew"]
|
||||
LatestOSHomebrewH &= RubyPythonID in ["RsysPhb38", "RsysPhb39", "RsysPhbauto"] # Sys-Homebre hybrid
|
||||
|
||||
if LatestOSMacPorts:
|
||||
mydic = DicLightWeight["ports"]
|
||||
mydic = DicLightHeavyW["ports"]
|
||||
srcDir = PkgDir + "/" + mydic["src"]
|
||||
desDir = PkgDir + "/" + mydic["des"]
|
||||
if OpMake:
|
||||
|
|
@ -308,7 +325,7 @@ def CheckPkgDirectory():
|
|||
Item3AppleScript = mydic["item3"]
|
||||
|
||||
if LatestOSHomebrew:
|
||||
mydic = DicLightWeight["brew"]
|
||||
mydic = DicLightHeavyW["brew"]
|
||||
srcDir = PkgDir + "/" + mydic["src"]
|
||||
desDir = PkgDir + "/" + mydic["des"]
|
||||
if OpMake:
|
||||
|
|
@ -323,7 +340,22 @@ def CheckPkgDirectory():
|
|||
Item3AppleScript = mydic["item3"]
|
||||
|
||||
if LatestOSAnaconda3:
|
||||
mydic = DicLightWeight["ana3"]
|
||||
mydic = DicLightHeavyW["ana3"]
|
||||
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 LatestOSHomebrewH:
|
||||
mydic = DicLightHeavyW["brewH"]
|
||||
srcDir = PkgDir + "/" + mydic["src"]
|
||||
desDir = PkgDir + "/" + mydic["des"]
|
||||
if OpMake:
|
||||
|
|
@ -525,7 +557,7 @@ def MakeTargetDMGFile(msg=""):
|
|||
# Figures below were determined by experiments for best fit
|
||||
applescript = t.safe_substitute(
|
||||
ORGX='50', ORGY='100',
|
||||
WIN_WIDTH='1000', WIN_HEIGHT='500',
|
||||
WIN_WIDTH='1000', WIN_HEIGHT='540',
|
||||
FULL_PATH_DS_STORE='/Volumes/%s/.DS_Store' % VolumeDMG,
|
||||
BACKGROUND_PNG_FILE=BackgroundPNG,
|
||||
ITEM_1='%s' % BundleName, X1='900', Y1='165',
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ def Test_My_Platform( platforms=['Catalina', 'BigSur', 'Monterey' ] ):
|
|||
#------------------------------------------------------------------------------
|
||||
def Get_Build_Target_Dict():
|
||||
buildTargetDic = dict()
|
||||
buildTargetDic[0] = 'std'
|
||||
# buildTargetDic[0] = 'std' # has been abolished in 0.28
|
||||
buildTargetDic[1] = 'ports'
|
||||
buildTargetDic[2] = 'brew'
|
||||
buildTargetDic[3] = 'brewHW'
|
||||
|
|
@ -213,7 +213,7 @@ def Parse_CommandLine_Arguments():
|
|||
Usage += " option & argument : comment on option if any | default value\n"
|
||||
Usage += " ------------------------------------------------------------------------+--------------\n"
|
||||
Usage += " [--qt <type>] : 5='qt5', 6='qt6' (migration to Qt6 is ongoing) | 5\n"
|
||||
Usage += " [--target <list>] : 0='std', 1='ports', 2='brew', 3='brewHW', 4='ana3', | '%s'\n" % targetopt
|
||||
Usage += " [--target <list>] : 1='ports', 2='brew', 3='brewHW', 4='ana3', | '%s'\n" % targetopt
|
||||
Usage += " 5='brewA', 6='brewAHW' | \n"
|
||||
Usage += " * with --qt=6, use --target='2,3' (4 is ignored) | \n"
|
||||
Usage += " [--build] : build and deploy | disabled\n"
|
||||
|
|
@ -233,7 +233,7 @@ def Parse_CommandLine_Arguments():
|
|||
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.27.11' | \n"
|
||||
Usage += " (6) $ ./nightlyBuild.py --upload '0.28.2' | \n"
|
||||
Usage += " (7) $ ./nightlyBuild.py --cleandmg 1 | \n"
|
||||
Usage += "---------------------------------------------------------------------------+----------------------\n"
|
||||
|
||||
|
|
@ -319,7 +319,7 @@ def Parse_CommandLine_Arguments():
|
|||
targetDic = Get_Build_Target_Dict()
|
||||
Target = list()
|
||||
for idx in sorted( list( set( [ int(item) for item in opt.targets.split(",") ] ) ) ):
|
||||
if idx in range(0, 7):
|
||||
if idx in range(1, 7): # '0' has been abolished in 0.28
|
||||
Target.append( targetDic[idx] )
|
||||
|
||||
Build = opt.build
|
||||
|
|
|
|||
Loading…
Reference in New Issue