Skip to content

Commit dede9fb

Browse files
authored
优化 cygwin 构建环境 (#906)
* 优化 cygwin 环境初始化 * add uninstall-cygwin.bat * update install-cygwin.sh * update install-cygwin.sh * update install-cygwin.sh * update cygwin-build README.md * update cygwin-config-ext.sh * update cygwin-config-ext.sh * update download-cygwin.bat * cygwin 增加shell脚本打包php.exe * update cygwin-pack.sh * update cygwin-pack.sh * update cygwin-pack.sh * update cygwin-config-ext.sh * update cygwin-config-ext.sh * update cygwin-config-ext.sh * update cygwin-pack.sh * update cygwin-config-ext.sh * update install-re2c.sh * windows-cygwin.yml 添加备注
1 parent e61c42f commit dede9fb

File tree

9 files changed

+191
-58
lines changed

9 files changed

+191
-58
lines changed

.github/workflows/windows-cygwin.yml

+2-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ jobs:
6363
cp -f /cygdrive/c/setup.exe /cygdrive/c/cygwin/bin/setup-x86_64.exe
6464
bash ./sapi/scripts/cygwin/install-cygwin.sh
6565
66-
- name: Install Cygwin Packages
66+
- name: Install Cygwin Packages with powershell
67+
# 备注:github action 在 windows 上执行命令默认的 shell 是 powershell,如果要使用其它shell , 需要手动指定,例如此也可以使用 bash 来安装 cygwin packages
6768
if: 1
6869
run: |
6970
Copy-Item -Path "C:\setup.exe" -Destination "${{ github.workspace }}\setup-x86_64.exe"

sapi/quickstart/windows/cygwin-build/README.md

+38-4
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,53 @@
22

33
## [windows cygwin 环境 构建步骤](../../../../docs/Cygwin.md)
44

5-
## 双击如下两个脚本,自动下载cygwin 和 cygwin安装依赖库
5+
## 自动下载cygwin 和 cygwin安装依赖库
66

77
```shell
88

99
# 自动下载 cygwin
10-
sapi\quickstart\windows\cygwin-build\download-cygwin.bat
10+
.\sapi\quickstart\windows\cygwin-build\download-cygwin.bat
1111
# 自动安装 依赖包
12-
sapi\quickstart\windows\cygwin-build\install-cygwin.bat
12+
.\sapi\quickstart\windows\cygwin-build\install-cygwin.bat
1313

1414

1515
```
1616

17-
# windows 软连接例子
17+
### 使用镜像 安装 cygwin 环境依赖包
18+
19+
```
20+
.\sapi\quickstart\windows\cygwin-build\install-cygwin.bat --mirror china
21+
22+
```
23+
24+
### PowerShell 环境中调用批处理命令
25+
26+
```powershell
27+
28+
cmd /c .\sapi\quickstart\windows\cygwin-build\install-cygwin.bat --mirror china
29+
30+
```
31+
32+
## 进入cygwin 环境
33+
34+
```
35+
C:\cygwin64\bin\mintty.exe -i /Cygwin-Terminal.ico -
36+
37+
38+
# 进入项目所在目录 (USER=Administrator)
39+
cd /cygdrive/c/users/${USER}/swoole-cli
40+
41+
```
42+
43+
### cygwin mirror
44+
45+
https://cygwin.com/mirrors.html
46+
47+
### 搜索包
48+
49+
https://cygwin.com/cgi-bin2/package-grep.cgi?grep=openssl
50+
51+
### windows 软连接例子
1852

1953
```bash
2054

sapi/quickstart/windows/cygwin-build/download-cygwin.bat

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ cd /d ..\..\..\..\
1212
set "__PROJECT__=%cd%"
1313
echo %cd%
1414

15-
md %__PROJECT__%\var\windows-cygwin-build-deps\
15+
md %__PROJECT__%\var\cygwin-build\
1616

17-
cd /d %__PROJECT__%\var\windows-cygwin-build-deps\
17+
cd /d %__PROJECT__%\var\cygwin-build\
1818

1919
curl.exe -fSLo setup-x86_64.exe https://cygwin.com/setup-x86_64.exe
2020

sapi/quickstart/windows/cygwin-build/install-cygwin.bat

+16-10
Original file line numberDiff line numberDiff line change
@@ -12,31 +12,37 @@ cd /d ..\..\..\..\
1212
set "__PROJECT__=%cd%"
1313
cd /d %__PROJECT__%\
1414
echo %cd%
15-
:: package separate with commas
1615

1716

18-
set SITE="https://mirrors.kernel.org/sourceware/cygwin/"
17+
18+
set "SITE=https://mirrors.kernel.org/sourceware/cygwin/"
1919

2020
:getopt
2121
if /i "%1" equ "--mirror" (
2222
if /i "%2" equ "china" (
23-
set SITE="https://mirrors.ustc.edu.cn/cygwin/"
23+
set "SITE=https://mirrors.ustc.edu.cn/cygwin/"
2424
)
2525
)
2626
shift
2727

2828
if not (%1)==() goto getopt
2929

30-
if "%GITHUB_ACTIONS%"=="" (
31-
setup-x86_64.exe --quiet-mode --disable-buggy-antivirus --site %SITE%
32-
)
30+
set "OPTIONS= --quiet-mode --disable-buggy-antivirus --site %SITE% "
31+
set "PACKAGES="
3332

34-
setup-x86_64.exe --no-desktop --no-shortcuts --no-startmenu --quiet-mode --disable-buggy-antivirus --site %SITE% --packages make,git,curl,wget,tar,libtool,bison,gcc-g++,autoconf,automake,openssl,libpcre2-devel,libssl-devel,libcurl-devel,libxml2-devel,libxslt-devel,libgmp-devel,ImageMagick,libpng-devel,libjpeg-devel,libfreetype-devel,libwebp-devel,libsqlite3-devel,zlib-devel,libbz2-devel,liblz4-devel,liblzma-devel,libzip-devel,libicu-devel,libonig-devel,libcares-devel,libsodium-devel,libyaml-devel,libMagick-devel,libzstd-devel,libbrotli-devel,libreadline-devel,libintl-devel,libpq-devel,libssh2-devel,libidn2-devel,gettext-devel,coreutils
33+
if defined GITHUB_ACTIONS (
34+
set "OPTIONS= %OPTIONS% --no-desktop --no-shortcuts --no-startmenu "
35+
)
3536

36-
setup-x86_64.exe --no-desktop --no-shortcuts --no-startmenu --quiet-mode --disable-buggy-antivirus --site %SITE% --packages zip unzip
37+
:: package separate with commas
38+
set "PACKAGES=make,git,curl,wget,tar,libtool,bison,gcc-g++,autoconf,automake,openssl,libpcre2-devel,libssl-devel,libcurl-devel,libxml2-devel,libxslt-devel,libgmp-devel,ImageMagick,libpng-devel,libjpeg-devel,libfreetype-devel,libwebp-devel,libsqlite3-devel,zlib-devel,libbz2-devel,liblz4-devel,liblzma-devel,libzip-devel,libicu-devel,libonig-devel,libcares-devel,libsodium-devel,libyaml-devel,libMagick-devel,libzstd-devel,libbrotli-devel,libreadline-devel,libintl-devel,libpq-devel,libssh2-devel,libidn2-devel,gettext-devel,coreutils"
39+
set "PACKAGES=%PACKAGES%,zip,unzip"
40+
set "PACKAGES=%PACKAGES%,libpq5,libpq-devel"
41+
set "PACKAGES=%PACKAGES%,libzstd-devel"
3742

38-
setup-x86_64.exe --no-desktop --no-shortcuts --no-startmenu --quiet-mode --disable-buggy-antivirus --site %SITE% --packages libpq5 libpq-devel
43+
set "OPTIONS=%OPTIONS% --packages %PACKAGES%"
44+
echo %OPTIONS%
3945

40-
setup-x86_64.exe --no-desktop --no-shortcuts --no-startmenu --quiet-mode --disable-buggy-antivirus --site %SITE% --packages libzstd-devel
46+
start /b /wait setup-x86_64.exe %OPTIONS%
4147

4248
endlocal
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
@echo off
2+
3+
4+
setlocal enableextensions enabledelayedexpansion
5+
6+
echo %~dp0
7+
cd /d %~dp0
8+
cd /d ..\..\..\..\
9+
10+
set "__PROJECT__=%cd%"
11+
cd /d %__PROJECT__%\
12+
echo %cd%
13+
14+
15+
SET DIRECTORY_NAME="c:\cygwin64"
16+
C:\windows\system32\TAKEOWN /f %DIRECTORY_NAME% /r /d y
17+
C:\windows\system32\ICACLS %DIRECTORY_NAME% /grant administrators:F /t
18+
19+
rmdir /s %DIRECTORY_NAME%
20+
21+
endlocal

sapi/scripts/cygwin/cygwin-config-ext.sh

+57-31
Original file line numberDiff line numberDiff line change
@@ -11,49 +11,75 @@ __PROJECT__=$(
1111
)
1212
cd ${__PROJECT__}
1313

14-
ROOT=${__PROJECT__}
15-
1614
REDIS_VERSION=5.3.7
1715
MONGODB_VERSION=1.14.2
1816
YAML_VERSION=2.2.2
1917
IMAGICK_VERSION=3.7.0
2018

21-
if [ ! -d pool/ext ]; then
22-
mkdir -p pool/ext
23-
fi
19+
mkdir -p pool/ext
20+
mkdir -p pool/lib
21+
mkdir -p pool/php-tar
2422

25-
cd pool/ext
23+
WORK_TEMP_DIR=${__PROJECT__}/var/cygwin-build/
24+
EXT_TEMP_CACHE_DIR=${WORK_TEMP_DIR}/pool/ext/
25+
mkdir -p ${WORK_TEMP_DIR}
26+
mkdir -p ${EXT_TEMP_CACHE_DIR}
27+
test -d ${WORK_TEMP_DIR}/ext/ && rm -rf ${WORK_TEMP_DIR}/ext/
28+
mkdir -p ${WORK_TEMP_DIR}/ext/
2629

27-
if [ ! -d $ROOT/ext/redis ]; then
28-
if [ ! -f redis-${REDIS_VERSION}.tgz ]; then
29-
curl -fSLo redis-${REDIS_VERSION}.tgz https://pecl.php.net/get/redis-${REDIS_VERSION}.tgz
30-
fi
31-
tar xvf redis-${REDIS_VERSION}.tgz
32-
mv redis-${REDIS_VERSION} $ROOT/ext/redis
30+
cd ${__PROJECT__}/pool/ext
31+
if [ ! -f redis-${REDIS_VERSION}.tgz ]; then
32+
curl -fSLo ${EXT_TEMP_CACHE_DIR}/redis-${REDIS_VERSION}.tgz https://pecl.php.net/get/redis-${REDIS_VERSION}.tgz
33+
mv ${EXT_TEMP_CACHE_DIR}/redis-${REDIS_VERSION}.tgz ${__PROJECT__}/pool/ext
3334
fi
35+
mkdir -p ${WORK_TEMP_DIR}/ext/redis/
36+
tar --strip-components=1 -C ${WORK_TEMP_DIR}/ext/redis/ -xf redis-${REDIS_VERSION}.tgz
37+
38+
: <<'EOF'
39+
# mongodb 扩展 不支持 cygwin 环境下构建
40+
# 详见: https://github.com/mongodb/mongo-php-driver/issues/1381
3441
35-
if [ ! -d $ROOT/ext/mongodb ]; then
36-
if [ ! -f mongodb-${MONGODB_VERSION}.tgz ]; then
37-
curl -fSLo mongodb-${MONGODB_VERSION}.tgz https://pecl.php.net/get/mongodb-${MONGODB_VERSION}.tgz
38-
fi
39-
tar xvf mongodb-${MONGODB_VERSION}.tgz
40-
mv mongodb-${MONGODB_VERSION} $ROOT/ext/mongodb
42+
cd ${__PROJECT__}/pool/ext
43+
if [ ! -f mongodb-${MONGODB_VERSION}.tgz ]; then
44+
curl -fSLo ${EXT_TEMP_CACHE_DIR}/mongodb-${MONGODB_VERSION}.tgz https://pecl.php.net/get/mongodb-${MONGODB_VERSION}.tgz
45+
mv ${EXT_TEMP_CACHE_DIR}/redis-${REDIS_VERSION}.tgz ${__PROJECT__}/pool/ext
4146
fi
47+
mkdir -p ${WORK_TEMP_DIR}/ext/mongodb/
48+
tar --strip-components=1 -C ${WORK_TEMP_DIR}/ext/mongodb/ -xf redis-${REDIS_VERSION}.tgz
4249
43-
if [ ! -d $ROOT/ext/yaml ]; then
44-
if [ ! -f yaml-${YAML_VERSION}.tgz ]; then
45-
curl -fSLo yaml-${YAML_VERSION}.tgz https://pecl.php.net/get/yaml-${YAML_VERSION}.tgz
46-
fi
47-
tar xvf yaml-${YAML_VERSION}.tgz
48-
mv yaml-${YAML_VERSION} $ROOT/ext/yaml
50+
EOF
51+
52+
cd ${__PROJECT__}/pool/ext
53+
if [ ! -f yaml-${YAML_VERSION}.tgz ]; then
54+
curl -fSLo ${EXT_TEMP_CACHE_DIR}/yaml-${YAML_VERSION}.tgz https://pecl.php.net/get/yaml-${YAML_VERSION}.tgz
55+
mv ${EXT_TEMP_CACHE_DIR}/yaml-${YAML_VERSION}.tgz ${__PROJECT__}/pool/ext
4956
fi
57+
mkdir -p ${WORK_TEMP_DIR}/ext/yaml/
58+
tar --strip-components=1 -C ${WORK_TEMP_DIR}/ext/yaml/ -xf yaml-${YAML_VERSION}.tgz
5059

51-
if [ ! -d $ROOT/ext/imagick ]; then
52-
if [ ! -f imagick-${IMAGICK_VERSION}.tgz ]; then
53-
curl -fSLo imagick-${IMAGICK_VERSION}.tgz https://pecl.php.net/get/imagick-${IMAGICK_VERSION}.tgz
54-
fi
55-
tar xvf imagick-${IMAGICK_VERSION}.tgz
56-
mv imagick-${IMAGICK_VERSION} $ROOT/ext/imagick
60+
cd ${__PROJECT__}/pool/ext
61+
if [ ! -f imagick-${IMAGICK_VERSION}.tgz ]; then
62+
curl -fSLo ${EXT_TEMP_CACHE_DIR}/imagick-${IMAGICK_VERSION}.tgz https://pecl.php.net/get/imagick-${IMAGICK_VERSION}.tgz
63+
mv ${EXT_TEMP_CACHE_DIR}/imagick-${IMAGICK_VERSION}.tgz ${__PROJECT__}/pool/ext
5764
fi
65+
mkdir -p ${WORK_TEMP_DIR}/ext/imagick/
66+
tar --strip-components=1 -C ${WORK_TEMP_DIR}/ext/imagick/ -xf imagick-${IMAGICK_VERSION}.tgz
67+
68+
cd ${__PROJECT__}
69+
# clean extension folder
70+
NO_BUILT_IN_EXTENSIONS=$(ls ${WORK_TEMP_DIR}/ext/)
71+
for EXT_NAME in $NO_BUILT_IN_EXTENSIONS
72+
do
73+
echo "EXTENSION_NAME: $EXT_NAME "
74+
test -d ${__PROJECT__}/ext/${EXT_NAME} && rm -rf ${__PROJECT__}/ext/${EXT_NAME}
75+
done
5876

59-
cd $ROOT
77+
cd ${__PROJECT__}
78+
# copy extension
79+
# cp -rf var/cygwin-build/ext/* ext/
80+
cp -rf ${WORK_TEMP_DIR}/ext/* ${__PROJECT__}/ext/
81+
82+
# extension hook
83+
84+
85+
cd ${__PROJECT__}

sapi/scripts/cygwin/cygwin-pack.sh

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/usr/bin/env bash
2+
3+
set -exu
4+
__DIR__=$(
5+
cd "$(dirname "$0")"
6+
pwd
7+
)
8+
__PROJECT__=$(
9+
cd ${__DIR__}/../../../
10+
pwd
11+
)
12+
cd ${__PROJECT__}
13+
14+
cd ${__PROJECT__}/
15+
ldd ${__PROJECT__}/bin/swoole-cli.exe
16+
17+
cd ${__PROJECT__}
18+
APP_VERSION=$(${__PROJECT__}/bin/swoole-cli.exe -v | head -n 1 | awk '{ print $2 }')
19+
NAME="swoole-cli-v${APP_VERSION}-cygwin-x64"
20+
21+
test -d /tmp/${NAME} && rm -rf /tmp/${NAME}
22+
mkdir -p /tmp/${NAME}
23+
mkdir -p /tmp/${NAME}/etc/
24+
mkdir -p /tmp/${NAME}/bin/
25+
26+
cd ${__PROJECT__}/
27+
ldd ${__PROJECT__}/bin/swoole-cli.exe | grep -v '/cygdrive/' | awk '{print $3}'
28+
ldd ${__PROJECT__}/bin/swoole-cli.exe | grep -v '/cygdrive/' | awk '{print $3}' | xargs -I {} cp {} /tmp/${NAME}/bin/
29+
30+
ls -lh /tmp/${NAME}/
31+
32+
cp -f ${__PROJECT__}/bin/swoole-cli.exe /tmp/${NAME}/
33+
# cp -f ${__PROJECT__}/bin/LICENSE /tmp/${NAME}/
34+
# cp -f ${__PROJECT__}/bin/credits.html /tmp/${NAME}/
35+
36+
cp -rL /etc/pki/ /tmp/${NAME}/etc/
37+
38+
cd /tmp/${NAME}/
39+
40+
test -f ${__PROJECT__}/${NAME}.zip && rm -f ${__PROJECT__}/${NAME}.zip
41+
zip -r ${__PROJECT__}/${NAME}.zip .
42+
43+
cd ${__PROJECT__}

sapi/scripts/cygwin/install-cygwin.sh

+9-5
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,13 @@ while [ $# -gt 0 ]; do
4343
done
4444

4545
# setup-x86_64.exe --no-desktop --no-shortcuts --no-startmenu --quiet-mode --disable-buggy-antivirus --site http://mirrors.ustc.edu.cn/cygwin/ --packages make,git,curl,wget,tar,libtool,bison,gcc-g++,autoconf,automake,openssl,libpcre2-devel,libssl-devel,libcurl-devel,libxml2-devel,libxslt-devel,libgmp-devel,ImageMagick,libpng-devel,libjpeg-devel,libfreetype-devel,libwebp-devel,libsqlite3-devel,zlib-devel,libbz2-devel,liblz4-devel,liblzma-devel,libzip-devel,libicu-devel,libonig-devel,libcares-devel,libsodium-devel,libyaml-devel,libMagick-devel,libzstd-devel,libbrotli-devel,libreadline-devel,libintl-devel,libpq-devel,libssh2-devel,libidn2-devel,gettext-devel,coreutils,zip,unzip
46-
#setup-x86_64.exe --no-desktop --no-shortcuts --no-startmenu --quiet-mode --disable-buggy-antivirus --site http://mirrors.ustc.edu.cn/cygwin/ --packages
46+
# setup-x86_64.exe --no-desktop --no-shortcuts --no-startmenu --quiet-mode --disable-buggy-antivirus --site http://mirrors.ustc.edu.cn/cygwin/ --packages libzstd-devel
4747

48-
setup-x86_64.exe --no-desktop --no-shortcuts --no-startmenu --quiet-mode --disable-buggy-antivirus --site $SITE --packages make,git,curl,wget,tar,libtool,bison,gcc-g++,autoconf,automake,openssl,libpcre2-devel,libssl-devel,libcurl-devel,libxml2-devel,libxslt-devel,libgmp-devel,ImageMagick,libpng-devel,libjpeg-devel,libfreetype-devel,libwebp-devel,libsqlite3-devel,zlib-devel,libbz2-devel,liblz4-devel,liblzma-devel,libzip-devel,libicu-devel,libonig-devel,libcares-devel,libsodium-devel,libyaml-devel,libMagick-devel,libzstd-devel,libbrotli-devel,libreadline-devel,libintl-devel,libpq-devel,libssh2-devel,libidn2-devel,gettext-devel,coreutils,zip,unzip
49-
setup-x86_64.exe --quiet-mode --disable-buggy-antivirus --site $SITE --packages zip unzip icu libicu-devel
50-
setup-x86_64.exe --quiet-mode --disable-buggy-antivirus --site $SITE --packages libpq5 libpq-devel
51-
setup-x86_64.exe --quiet-mode --disable-buggy-antivirus --site $SITE --packages libzstd-devel
48+
setup-x86_64.exe --quiet-mode --disable-buggy-antivirus --site $SITE
49+
50+
## 多个包之间,用逗号分隔
51+
PACKAGES="make,git,curl,wget,tar,libtool,bison,gcc-g++,autoconf,automake,openssl,libpcre2-devel,libssl-devel,libcurl-devel,libxml2-devel,libxslt-devel,libgmp-devel,ImageMagick,libpng-devel,libjpeg-devel,libfreetype-devel,libwebp-devel,libsqlite3-devel,zlib-devel,libbz2-devel,liblz4-devel,liblzma-devel,libzip-devel,libicu-devel,libonig-devel,libcares-devel,libsodium-devel,libyaml-devel,libMagick-devel,libzstd-devel,libbrotli-devel,libreadline-devel,libintl-devel,libpq-devel,libssh2-devel,libidn2-devel,gettext-devel,coreutils,zip,unzip"
52+
PACKAGES="${PACKAGES},zip,unzip,icu,libicu-devel"
53+
PACKAGES="${PACKAGES},libpq5 libpq-devel"
54+
PACKAGES="${PACKAGES},libzstd-devel"
55+
setup-x86_64.exe --no-desktop --no-shortcuts --no-startmenu --quiet-mode --disable-buggy-antivirus --site $SITE --packages $PACKAGES

sapi/scripts/cygwin/install-re2c.sh

+3-5
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,20 @@ __PROJECT__=$(
1010
pwd
1111
)
1212
cd ${__PROJECT__}
13-
ROOT=${__PROJECT__}
14-
1513

1614
RE2C_VERSION=3.0
1715

18-
wget https://github.com/swoole/swoole-cli/releases/download/v5.0.1/re2c.exe
16+
curl -fSLo re2c.exe https://github.com/swoole/swoole-cli/releases/download/v5.0.1/re2c.exe
1917
mv ./re2c.exe /usr/bin/re2c
2018
chmod +x /usr/bin/re2c
2119
re2c -v
2220

2321
build_re2c() {
2422
cd /tmp
25-
wget https://github.com/skvadrik/re2c/releases/download/3.0/re2c-3.0.tar.xz
23+
curl -fSLo re2c-${RE2C_VERSION}.tar.xz https://github.com/skvadrik/re2c/releases/download/3.0/re2c-3.0.tar.xz
2624
tar xvf re2c-${RE2C_VERSION}.tar.xz
2725
cd re2c-${RE2C_VERSION}
2826
autoreconf -i -W all
2927
./configure --prefix=/usr && make -j $(nproc) && make install
30-
cd $ROOT
28+
cd ${__PROJECT__}
3129
}

0 commit comments

Comments
 (0)