Compare commits

...

12 Commits

Author SHA1 Message Date
Tindy X
6a3e287563 Fix build scripts 2023-12-11 15:16:24 +08:00
Tindy X
18fea93d89 Fix build scripts 2023-12-11 13:07:11 +08:00
Tindy X
a4a273d645 Fix build scripts 2023-12-11 04:16:24 +08:00
Tindy X
8485c2c778 Fix build scripts 2023-12-11 03:55:36 +08:00
Tindy X
2cb7fc7e19 Fix Dockerfile 2023-12-11 03:24:31 +08:00
Tindy X
6381fbbcbd Fix build scripts 2023-12-11 03:23:15 +08:00
Tindy X
104df33eae Fix build scripts 2023-12-11 03:17:21 +08:00
Tindy X
49d72f446c Fix build scripts 2023-12-11 02:25:11 +08:00
Tindy X
275f77a4f6 Fix build scripts 2023-12-11 02:13:12 +08:00
Tindy X
844989d772 Fix build scripts 2023-12-11 01:55:16 +08:00
Tindy X
1757090b25 Fix build script 2023-12-11 01:53:24 +08:00
Tindy X
547c771127 Add xmake as build system 2023-12-11 01:51:08 +08:00
13 changed files with 435 additions and 221 deletions

View File

@@ -1,7 +1,8 @@
name: GitHub CI
on:
push:
branches: [ master ]
branches:
- '**'
tags:
- '**'
workflow_dispatch:
@@ -157,7 +158,7 @@ jobs:
- uses: msys2/setup-msys2@v2
with:
update: true
install: base-devel git mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-pcre2 patch
install: base-devel git mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake mingw-w64-x86_64-pcre2 patch mingw-w64-x86_64-xmake
msystem: MINGW64
path-type: inherit
- name: Add commit id into version
@@ -197,7 +198,7 @@ jobs:
- uses: msys2/setup-msys2@v2
with:
update: true
install: base-devel git mingw-w64-i686-gcc mingw-w64-i686-cmake mingw-w64-i686-pcre2 patch
install: base-devel git mingw-w64-i686-gcc mingw-w64-i686-cmake mingw-w64-i686-pcre2 patch mingw-w64-i686-xmake
msystem: MINGW32
path-type: inherit
- name: Add commit id into version

View File

@@ -1,7 +1,8 @@
name: Publish Docker Image
on:
push:
branches: [ master ]
branches:
- '**'
tags:
- '**'
@@ -34,11 +35,12 @@ jobs:
- name: Build and export
id: build
if: github.ref == 'refs/heads/master'
if: startsWith(github.ref, 'refs/heads/')
uses: docker/build-push-action@v3
with:
platforms: linux/amd64
context: scripts/
context: .
file: scripts/Dockerfile
tags: tindy2013/subconverter:latest
build-args: |
SHA=${{ steps.vars.outputs.sha_short }}
@@ -59,12 +61,13 @@ jobs:
uses: docker/build-push-action@v3
with:
platforms: linux/amd64
context: scripts/
context: .
file: scripts/Dockerfile
tags: tindy2013/subconverter:${{steps.version.outputs.result}}
outputs: type=image,push=true
- name: Save digest
if: github.ref == 'refs/heads/master'
if: startsWith(github.ref, 'refs/heads/')
run: echo ${{ steps.build.outputs.digest }} > /tmp/digest.txt
- name: Save release digest
@@ -101,11 +104,12 @@ jobs:
- name: Build and export
id: build
if: github.ref == 'refs/heads/master'
if: startsWith(github.ref, 'refs/heads/')
uses: docker/build-push-action@v3
with:
platforms: linux/386
context: scripts/
context: .
file: scripts/Dockerfile
tags: tindy2013/subconverter:latest
build-args: |
SHA=${{ steps.vars.outputs.sha_short }}
@@ -126,12 +130,13 @@ jobs:
uses: docker/build-push-action@v3
with:
platforms: linux/386
context: scripts/
context: .
file: scripts/Dockerfile
tags: tindy2013/subconverter:${{steps.version.outputs.result}}
outputs: type=image,push=true
- name: Save digest
if: github.ref == 'refs/heads/master'
if: startsWith(github.ref, 'refs/heads/')
run: echo ${{ steps.build.outputs.digest }} > /tmp/digest.txt
- name: Save release digest
@@ -168,11 +173,12 @@ jobs:
- name: Build and export
id: build
if: github.ref == 'refs/heads/master'
if: startsWith(github.ref, 'refs/heads/')
uses: docker/build-push-action@v3
with:
platforms: linux/arm/v7
context: scripts/
context: .
file: scripts/Dockerfile
tags: tindy2013/subconverter:latest
build-args: |
SHA=${{ steps.vars.outputs.sha_short }}
@@ -194,14 +200,15 @@ jobs:
uses: docker/build-push-action@v3
with:
platforms: linux/arm/v7
context: scripts/
context: .
file: scripts/Dockerfile
tags: tindy2013/subconverter:${{steps.version.outputs.result}}
build-args: |
THREADS=4
outputs: type=image,push=true
- name: Save digest
if: github.ref == 'refs/heads/master'
if: startsWith(github.ref, 'refs/heads/')
run: echo ${{ steps.build.outputs.digest }} > /tmp/digest.txt
- name: Save release digest
@@ -238,11 +245,12 @@ jobs:
- name: Build and export
id: build
if: github.ref == 'refs/heads/master'
if: startsWith(github.ref, 'refs/heads/')
uses: docker/build-push-action@v3
with:
platforms: linux/arm64
context: scripts/
context: .
file: scripts/Dockerfile
tags: tindy2013/subconverter:latest
build-args: |
SHA=${{ steps.vars.outputs.sha_short }}
@@ -264,14 +272,15 @@ jobs:
uses: docker/build-push-action@v3
with:
platforms: linux/arm64
context: scripts/
context: .
file: scripts/Dockerfile
tags: tindy2013/subconverter:${{steps.version.outputs.result}}
build-args: |
THREADS=4
outputs: type=image,push=true
- name: Save digest
if: github.ref == 'refs/heads/master'
if: startsWith(github.ref, 'refs/heads/')
run: echo ${{ steps.build.outputs.digest }} > /tmp/digest.txt
- name: Save release digest
@@ -326,8 +335,8 @@ jobs:
return context.payload.ref.replace(/\/?refs\/tags\/v/, '')
result-encoding: string
- name: Merge and push manifest on master branch
if: github.ref == 'refs/heads/master'
- name: Merge and push manifest on push
if: startsWith(github.ref, 'refs/heads/')
run: python scripts/merge_manifest.py
- name: Merge and push manifest on release

4
.gitignore vendored
View File

@@ -1,5 +1,7 @@
subconverter.exe
.vscode
cmake-build-debug
cmake-build-*
.idea
base/cache
build
.xmake

View File

@@ -4,45 +4,52 @@ ARG THREADS="4"
ARG SHA=""
# build minimized
WORKDIR /
WORKDIR /subconverter
COPY . /subconverter/
RUN set -xe && \
apk add --no-cache --virtual .build-tools git g++ build-base linux-headers cmake python3 && \
apk add --no-cache --virtual .build-deps curl-dev rapidjson-dev pcre2-dev yaml-cpp-dev && \
git clone https://github.com/ftk/quickjspp --depth=1 && \
cd quickjspp && \
git submodule update --init && \
cmake -DCMAKE_BUILD_TYPE=Release . && \
make quickjs -j $THREADS && \
install -d /usr/lib/quickjs/ && \
install -m644 quickjs/libquickjs.a /usr/lib/quickjs/ && \
install -d /usr/include/quickjs/ && \
install -m644 quickjs/quickjs.h quickjs/quickjs-libc.h /usr/include/quickjs/ && \
install -m644 quickjspp.hpp /usr/include && \
cd .. && \
git clone https://github.com/PerMalmberg/libcron --depth=1 && \
cd libcron && \
git submodule update --init && \
cmake -DCMAKE_BUILD_TYPE=Release . && \
make libcron -j $THREADS && \
install -m644 libcron/out/Release/liblibcron.a /usr/lib/ && \
install -d /usr/include/libcron/ && \
install -m644 libcron/include/libcron/* /usr/include/libcron/ && \
install -d /usr/include/date/ && \
install -m644 libcron/externals/date/include/date/* /usr/include/date/ && \
cd .. && \
git clone https://github.com/ToruNiina/toml11 --branch="v3.7.1" --depth=1 && \
cd toml11 && \
cmake -DCMAKE_CXX_STANDARD=11 . && \
make install -j $THREADS && \
cd .. && \
git clone https://github.com/tindy2013/subconverter --depth=1 && \
cd subconverter && \
[ -n "$SHA" ] && sed -i 's/\(v[0-9]\.[0-9]\.[0-9]\)/\1-'"$SHA"'/' src/version.h;\
apk add --no-cache --virtual .build-tools git g++ build-base linux-headers cmake python3 curl unzip p7zip bash && \
apk add --no-cache --virtual .build-deps curl-dev rapidjson-dev pcre2-dev yaml-cpp-dev lua5.4-dev luajit-dev && \
curl -fsSL https://xmake.io/shget.text | bash && \
# git clone https://github.com/ftk/quickjspp --depth=1 && \
# cd quickjspp && \
# git submodule update --init && \
# cmake -DCMAKE_BUILD_TYPE=Release . && \
# make quickjs -j $THREADS && \
# install -d /usr/lib/quickjs/ && \
# install -m644 quickjs/libquickjs.a /usr/lib/quickjs/ && \
# install -d /usr/include/quickjs/ && \
# install -m644 quickjs/quickjs.h quickjs/quickjs-libc.h /usr/include/quickjs/ && \
# install -m644 quickjspp.hpp /usr/include && \
# cd .. && \
# git clone https://github.com/PerMalmberg/libcron --depth=1 && \
# cd libcron && \
# git submodule update --init && \
# cmake -DCMAKE_BUILD_TYPE=Release . && \
# make libcron -j $THREADS && \
# install -m644 libcron/out/Release/liblibcron.a /usr/lib/ && \
# install -d /usr/include/libcron/ && \
# install -m644 libcron/include/libcron/* /usr/include/libcron/ && \
# install -d /usr/include/date/ && \
# install -m644 libcron/externals/date/include/date/* /usr/include/date/ && \
# cd .. && \
# git clone https://github.com/ToruNiina/toml11 --branch="v3.7.1" --depth=1 && \
# cd toml11 && \
# cmake -DCMAKE_CXX_STANDARD=11 . && \
# make install -j $THREADS && \
# cd .. && \
# git clone https://github.com/tindy2013/subconverter --depth=1 && \
# cd subconverter && \
# [ -n "$SHA" ] && sed -i 's/\(v[0-9]\.[0-9]\.[0-9]\)/\1-'"$SHA"'/' src/version.h;\
# cmake -DCMAKE_BUILD_TYPE=Release -DUSE_EXTERNAL_CURL=ON -DUSE_EXTERNAL_RAPIDJSON=ON -DUSE_EXTERNAL_YAML_CPP=ON . && \
# make -j $THREADS && \
ls -alh && \
source "$HOME/.xmake/profile" && \
xmake f --root --static=false -m release -y -v && \
xmake --root -v subconverter && \
cp "$(find build -type f -name subconverter)" . && \
python3 -m ensurepip && \
python3 -m pip install gitpython && \
python3 scripts/update_rules.py -c scripts/rules_config.conf && \
cmake -DCMAKE_BUILD_TYPE=Release . && \
make -j $THREADS
python3 scripts/update_rules.py -c scripts/rules_config.conf
# build final image
FROM alpine:3.16

View File

@@ -1,51 +1,60 @@
#!/bin/bash
set -xe
apk add gcc g++ build-base linux-headers cmake make autoconf automake libtool python2 python3
apk add mbedtls-dev mbedtls-static zlib-dev rapidjson-dev zlib-static pcre2-dev
#apk add gcc g++ build-base linux-headers cmake make autoconf automake libtool python2 python3
#apk add mbedtls-dev mbedtls-static zlib-dev rapidjson-dev zlib-static pcre2-dev
#
#git clone https://github.com/curl/curl --depth=1 --branch curl-8_4_0
#cd curl
#cmake -DCURL_USE_MBEDTLS=ON -DHTTP_ONLY=ON -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_USE_LIBSSH2=OFF -DBUILD_CURL_EXE=OFF . > /dev/null
#make install -j2 > /dev/null
#cd ..
#
#git clone https://github.com/jbeder/yaml-cpp --depth=1
#cd yaml-cpp
#cmake -DCMAKE_BUILD_TYPE=Release -DYAML_CPP_BUILD_TESTS=OFF -DYAML_CPP_BUILD_TOOLS=OFF . > /dev/null
#make install -j3 > /dev/null
#cd ..
#
#git clone https://github.com/ftk/quickjspp --depth=1
#cd quickjspp
#cmake -DCMAKE_BUILD_TYPE=Release .
#make quickjs -j3 > /dev/null
#install -d /usr/lib/quickjs/
#install -m644 quickjs/libquickjs.a /usr/lib/quickjs/
#install -d /usr/include/quickjs/
#install -m644 quickjs/quickjs.h quickjs/quickjs-libc.h /usr/include/quickjs/
#install -m644 quickjspp.hpp /usr/include/
#cd ..
#
#git clone https://github.com/PerMalmberg/libcron --depth=1
#cd libcron
#git submodule update --init
#cmake -DCMAKE_BUILD_TYPE=Release .
#make libcron install -j3
#cd ..
#
#git clone https://github.com/ToruNiina/toml11 --branch="v3.7.1" --depth=1
#cd toml11
#cmake -DCMAKE_CXX_STANDARD=11 .
#make install -j4
#cd ..
#
#export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
#cmake -DCMAKE_BUILD_TYPE=Release .
#make -j3
#rm subconverter
## shellcheck disable=SC2046
#g++ -o base/subconverter $(find CMakeFiles/subconverter.dir/src/ -name "*.o") -static -lpcre2-8 -lyaml-cpp -L/usr/lib64 -lcurl -lmbedtls -lmbedcrypto -lmbedx509 -lz -l:quickjs/libquickjs.a -llibcron -O3 -s
git clone https://github.com/curl/curl --depth=1 --branch curl-8_4_0
cd curl
cmake -DCURL_USE_MBEDTLS=ON -DHTTP_ONLY=ON -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_USE_LIBSSH2=OFF -DBUILD_CURL_EXE=OFF . > /dev/null
make install -j2 > /dev/null
cd ..
apk add git g++ build-base linux-headers cmake python3 curl unzip p7zip perl pkgconfig
apk add lua5.4-dev luajit-dev zlib-dev zlib-static mbedtls-dev mbedtls-static
curl -fsSL https://xmake.io/shget.text | bash
source "$HOME/.xmake/profile"
git clone https://github.com/jbeder/yaml-cpp --depth=1
cd yaml-cpp
cmake -DCMAKE_BUILD_TYPE=Release -DYAML_CPP_BUILD_TESTS=OFF -DYAML_CPP_BUILD_TOOLS=OFF . > /dev/null
make install -j3 > /dev/null
cd ..
git clone https://github.com/ftk/quickjspp --depth=1
cd quickjspp
cmake -DCMAKE_BUILD_TYPE=Release .
make quickjs -j3 > /dev/null
install -d /usr/lib/quickjs/
install -m644 quickjs/libquickjs.a /usr/lib/quickjs/
install -d /usr/include/quickjs/
install -m644 quickjs/quickjs.h quickjs/quickjs-libc.h /usr/include/quickjs/
install -m644 quickjspp.hpp /usr/include/
cd ..
git clone https://github.com/PerMalmberg/libcron --depth=1
cd libcron
git submodule update --init
cmake -DCMAKE_BUILD_TYPE=Release .
make libcron install -j3
cd ..
git clone https://github.com/ToruNiina/toml11 --branch="v3.7.1" --depth=1
cd toml11
cmake -DCMAKE_CXX_STANDARD=11 .
make install -j4
cd ..
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
cmake -DCMAKE_BUILD_TYPE=Release .
make -j3
rm subconverter
# shellcheck disable=SC2046
g++ -o base/subconverter $(find CMakeFiles/subconverter.dir/src/ -name "*.o") -static -lpcre2-8 -lyaml-cpp -L/usr/lib64 -lcurl -lmbedtls -lmbedcrypto -lmbedx509 -lz -l:quickjs/libquickjs.a -llibcron -O3 -s
xmake f --root --static=true -m release -y -v
xmake --root -v subconverter
cp "$(find build -name subconverter -type f)" base/subconverter
python3 -m ensurepip
python3 -m pip install gitpython

View File

@@ -1,59 +1,65 @@
#!/bin/bash
set -xe
brew reinstall rapidjson zlib pcre2 pkgconfig
#git clone https://github.com/curl/curl --depth=1 --branch curl-7_88_1
#cd curl
#./buildconf > /dev/null
#./configure --with-ssl=/usr/local/opt/openssl@1.1 --without-mbedtls --disable-ldap --disable-ldaps --disable-rtsp --without-libidn2 > /dev/null
#cmake -DCMAKE_USE_SECTRANSP=ON -DHTTP_ONLY=ON -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_USE_LIBSSH2=OFF . > /dev/null
#make -j8 > /dev/null
#brew reinstall rapidjson zlib pcre2 pkgconfig
#
##git clone https://github.com/curl/curl --depth=1 --branch curl-7_88_1
##cd curl
##./buildconf > /dev/null
##./configure --with-ssl=/usr/local/opt/openssl@1.1 --without-mbedtls --disable-ldap --disable-ldaps --disable-rtsp --without-libidn2 > /dev/null
##cmake -DCMAKE_USE_SECTRANSP=ON -DHTTP_ONLY=ON -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=OFF -DCMAKE_USE_LIBSSH2=OFF . > /dev/null
##make -j8 > /dev/null
##cd ..
#
#git clone https://github.com/jbeder/yaml-cpp --depth=1
#cd yaml-cpp
#cmake -DCMAKE_BUILD_TYPE=Release -DYAML_CPP_BUILD_TESTS=OFF -DYAML_CPP_BUILD_TOOLS=OFF . > /dev/null
#make install -j8 > /dev/null
#cd ..
#
#git clone https://github.com/ftk/quickjspp --depth=1
#cd quickjspp
#cmake -DCMAKE_BUILD_TYPE=Release .
#make quickjs -j8
#install -d /usr/local/lib/quickjs/
#install -m644 quickjs/libquickjs.a /usr/local/lib/quickjs/
#install -d /usr/local/include/quickjs/
#install -m644 quickjs/quickjs.h quickjs/quickjs-libc.h /usr/local/include/quickjs/
#install -m644 quickjspp.hpp /usr/local/include/
#cd ..
#
#git clone https://github.com/PerMalmberg/libcron --depth=1
#cd libcron
#git submodule update --init
#cmake -DCMAKE_BUILD_TYPE=Release .
#make libcron install -j8
#install -m644 libcron/out/Release/liblibcron.a /usr/local/lib/
#install -d /usr/local/include/libcron/
#install -m644 libcron/include/libcron/* /usr/local/include/libcron/
#install -d /usr/local/include/date/
#install -m644 libcron/externals/date/include/date/* /usr/local/include/date/
#cd ..
#
#git clone https://github.com/ToruNiina/toml11 --depth=1
#cd toml11
#cmake -DCMAKE_CXX_STANDARD=11 .
#make install -j4
#cd ..
#
#cp /usr/local/opt/zlib/lib/libz.a .
#cp /usr/local/lib/libpcre2-8.a .
#
#cmake -DCMAKE_BUILD_TYPE=Release .
#make -j8
#rm subconverter
## shellcheck disable=SC2046
#c++ -Xlinker -unexported_symbol -Xlinker "*" -o base/subconverter -framework CoreFoundation -framework Security $(find CMakeFiles/subconverter.dir/src/ -name "*.o") $(find . -name "*.a") -lcurl -O3
git clone https://github.com/jbeder/yaml-cpp --depth=1
cd yaml-cpp
cmake -DCMAKE_BUILD_TYPE=Release -DYAML_CPP_BUILD_TESTS=OFF -DYAML_CPP_BUILD_TOOLS=OFF . > /dev/null
make install -j8 > /dev/null
cd ..
brew reinstall xmake rapidjson pkgconfig
git clone https://github.com/ftk/quickjspp --depth=1
cd quickjspp
cmake -DCMAKE_BUILD_TYPE=Release .
make quickjs -j8
install -d /usr/local/lib/quickjs/
install -m644 quickjs/libquickjs.a /usr/local/lib/quickjs/
install -d /usr/local/include/quickjs/
install -m644 quickjs/quickjs.h quickjs/quickjs-libc.h /usr/local/include/quickjs/
install -m644 quickjspp.hpp /usr/local/include/
cd ..
git clone https://github.com/PerMalmberg/libcron --depth=1
cd libcron
git submodule update --init
cmake -DCMAKE_BUILD_TYPE=Release .
make libcron install -j8
install -m644 libcron/out/Release/liblibcron.a /usr/local/lib/
install -d /usr/local/include/libcron/
install -m644 libcron/include/libcron/* /usr/local/include/libcron/
install -d /usr/local/include/date/
install -m644 libcron/externals/date/include/date/* /usr/local/include/date/
cd ..
git clone https://github.com/ToruNiina/toml11 --depth=1
cd toml11
cmake -DCMAKE_CXX_STANDARD=11 .
make install -j4
cd ..
cp /usr/local/opt/zlib/lib/libz.a .
cp /usr/local/lib/libpcre2-8.a .
cmake -DCMAKE_BUILD_TYPE=Release .
make -j8
rm subconverter
# shellcheck disable=SC2046
c++ -Xlinker -unexported_symbol -Xlinker "*" -o base/subconverter -framework CoreFoundation -framework Security $(find CMakeFiles/subconverter.dir/src/ -name "*.o") $(find . -name "*.a") -lcurl -O3
xmake f --root -m release -y -v
xmake --root -v subconverter
cp "$(find build -name subconverter -type f)" base/subconverter
python -m ensurepip
python -m pip install gitpython

View File

@@ -1,57 +1,63 @@
#!/bin/bash
set -xe
#
#git clone https://github.com/curl/curl --depth=1 --branch curl-8_4_0
#cd curl
#cmake -DCMAKE_BUILD_TYPE=Release -DCURL_USE_LIBSSH2=OFF -DHTTP_ONLY=ON -DCURL_USE_SCHANNEL=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_CURL_EXE=OFF -DCMAKE_INSTALL_PREFIX="$MINGW_PREFIX" -G "Unix Makefiles" -DHAVE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF .
#make install -j4
#cd ..
#
#git clone https://github.com/jbeder/yaml-cpp --depth=1
#cd yaml-cpp
#cmake -DCMAKE_BUILD_TYPE=Release -DYAML_CPP_BUILD_TESTS=OFF -DYAML_CPP_BUILD_TOOLS=OFF -DCMAKE_INSTALL_PREFIX="$MINGW_PREFIX" -G "Unix Makefiles" .
#make install -j4
#cd ..
#
#git clone https://github.com/ftk/quickjspp --depth=1
#cd quickjspp
#patch quickjs/quickjs-libc.c -i ../scripts/patches/0001-quickjs-libc-add-realpath-for-Windows.patch
#cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release .
#make quickjs -j4
#install -d "$MINGW_PREFIX/lib/quickjs/"
#install -m644 quickjs/libquickjs.a "$MINGW_PREFIX/lib/quickjs/"
#install -d "$MINGW_PREFIX/include/quickjs"
#install -m644 quickjs/quickjs.h quickjs/quickjs-libc.h "$MINGW_PREFIX/include/quickjs/"
#install -m644 quickjspp.hpp "$MINGW_PREFIX/include/"
#cd ..
#
#git clone https://github.com/PerMalmberg/libcron --depth=1
#cd libcron
#git submodule update --init
#cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$MINGW_PREFIX" .
#make libcron install -j4
#cd ..
#
#git clone https://github.com/Tencent/rapidjson --depth=1
#cd rapidjson
#cmake -DRAPIDJSON_BUILD_DOC=OFF -DRAPIDJSON_BUILD_EXAMPLES=OFF -DRAPIDJSON_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX="$MINGW_PREFIX" -G "Unix Makefiles" .
#make install -j4
#cd ..
#
#git clone https://github.com/ToruNiina/toml11 --depth=1
#cd toml11
#cmake -DCMAKE_INSTALL_PREFIX="$MINGW_PREFIX" -G "Unix Makefiles" -DCMAKE_CXX_STANDARD=11 .
#make install -j4
#cd ..
#
#rm -f C:/Strawberry/perl/bin/pkg-config C:/Strawberry/perl/bin/pkg-config.bat
#cmake -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" .
#make -j4
#rm subconverter.exe
## shellcheck disable=SC2046
#g++ $(find CMakeFiles/subconverter.dir/src -name "*.obj") curl/lib/libcurl.a -o base/subconverter.exe -static -lbcrypt -lpcre2-8 -l:quickjs/libquickjs.a -llibcron -lyaml-cpp -liphlpapi -lcrypt32 -lws2_32 -lwsock32 -lz -s
git clone https://github.com/curl/curl --depth=1 --branch curl-8_4_0
cd curl
cmake -DCMAKE_BUILD_TYPE=Release -DCURL_USE_LIBSSH2=OFF -DHTTP_ONLY=ON -DCURL_USE_SCHANNEL=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_CURL_EXE=OFF -DCMAKE_INSTALL_PREFIX="$MINGW_PREFIX" -G "Unix Makefiles" -DHAVE_LIBIDN2=OFF -DCURL_USE_LIBPSL=OFF .
make install -j4
cd ..
git clone https://github.com/jbeder/yaml-cpp --depth=1
cd yaml-cpp
cmake -DCMAKE_BUILD_TYPE=Release -DYAML_CPP_BUILD_TESTS=OFF -DYAML_CPP_BUILD_TOOLS=OFF -DCMAKE_INSTALL_PREFIX="$MINGW_PREFIX" -G "Unix Makefiles" .
make install -j4
cd ..
git clone https://github.com/ftk/quickjspp --depth=1
cd quickjspp
patch quickjs/quickjs-libc.c -i ../scripts/patches/0001-quickjs-libc-add-realpath-for-Windows.patch
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release .
make quickjs -j4
install -d "$MINGW_PREFIX/lib/quickjs/"
install -m644 quickjs/libquickjs.a "$MINGW_PREFIX/lib/quickjs/"
install -d "$MINGW_PREFIX/include/quickjs"
install -m644 quickjs/quickjs.h quickjs/quickjs-libc.h "$MINGW_PREFIX/include/quickjs/"
install -m644 quickjspp.hpp "$MINGW_PREFIX/include/"
cd ..
git clone https://github.com/PerMalmberg/libcron --depth=1
cd libcron
git submodule update --init
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$MINGW_PREFIX" .
make libcron install -j4
cd ..
git clone https://github.com/Tencent/rapidjson --depth=1
cd rapidjson
cmake -DRAPIDJSON_BUILD_DOC=OFF -DRAPIDJSON_BUILD_EXAMPLES=OFF -DRAPIDJSON_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX="$MINGW_PREFIX" -G "Unix Makefiles" .
make install -j4
cd ..
git clone https://github.com/ToruNiina/toml11 --depth=1
cd toml11
cmake -DCMAKE_INSTALL_PREFIX="$MINGW_PREFIX" -G "Unix Makefiles" -DCMAKE_CXX_STANDARD=11 .
make install -j4
cd ..
xmake f --root --static=true -m release -y -v
xmake --root -v subconverter
cp "$(find build -name subconverter.exe -type f)" base/subconverter.exe
python -m ensurepip
python -m pip install gitpython
python scripts/update_rules.py -c scripts/rules_config.conf
rm -f C:/Strawberry/perl/bin/pkg-config C:/Strawberry/perl/bin/pkg-config.bat
cmake -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" .
make -j4
rm subconverter.exe
# shellcheck disable=SC2046
g++ $(find CMakeFiles/subconverter.dir/src -name "*.obj") curl/lib/libcurl.a -o base/subconverter.exe -static -lbcrypt -lpcre2-8 -l:quickjs/libquickjs.a -llibcron -lyaml-cpp -liphlpapi -lcrypt32 -lws2_32 -lwsock32 -lz -s
mv base subconverter
set +xe

View File

@@ -1,6 +1,5 @@
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include "handler/settings.h"
@@ -18,10 +17,6 @@
#include "nodemanip.h"
#include "subexport.h"
extern Settings global;
bool applyMatcher(const std::string &rule, std::string &real_rule, const Proxy &node);
int explodeConf(const std::string &filepath, std::vector<Proxy> &nodes)
{
return explodeConfContent(fileGet(filepath), nodes);
@@ -51,13 +46,14 @@ int addNodes(std::string link, std::vector<Proxy> &allNodes, int groupID, parse_
link = replaceAllDistinct(link, "\"", "");
/// script:filepath,arg1,arg2,...
#ifndef NO_JS_RUNTIME
if(authorized) script_safe_runner(parse_set.js_runtime, parse_set.js_context, [&](qjs::Context &ctx)
{
if(startsWith(link, "script:")) /// process subscription with script
{
writeLog(0, "Found script link. Start running...", LOG_LEVEL_INFO);
string_array args = split(link.substr(7), ",");
if(args.size() >= 1)
if(!args.empty())
{
std::string script = fileGet(args[0], false);
try
@@ -82,7 +78,7 @@ int addNodes(std::string link, std::vector<Proxy> &allNodes, int groupID, parse_
}
}
}
catch(qjs::exception)
catch(qjs::exception&)
{
script_print_stack(ctx);
}
@@ -104,12 +100,13 @@ int addNodes(std::string link, std::vector<Proxy> &allNodes, int groupID, parse_
duk_pop(ctx); /// pop err
}
*/
#endif
/// tag:group_name,link
if(startsWith(link, "tag:"))
{
string_size pos = link.find(",");
if(pos != link.npos)
string_size pos = link.find(',');
if(pos != std::string::npos)
{
custom_group = link.substr(4, pos - 4);
link.erase(0, pos + 1);
@@ -178,7 +175,7 @@ int addNodes(std::string link, std::vector<Proxy> &allNodes, int groupID, parse_
for(Proxy &x : nodes)
{
x.GroupId = groupID;
if(custom_group.size())
if(!custom_group.empty())
x.Group = custom_group;
}
copyNodes(nodes, allNodes);
@@ -232,7 +229,7 @@ int addNodes(std::string link, std::vector<Proxy> &allNodes, int groupID, parse_
bool chkIgnore(const Proxy &node, string_array &exclude_remarks, string_array &include_remarks)
{
bool excluded = false, included = false;
bool excluded, included;
//std::string remarks = UTF8ToACP(node.remarks);
//std::string remarks = node.remarks;
//writeLog(LOG_TYPE_INFO, "Comparing exclude remarks...");
@@ -247,7 +244,7 @@ bool chkIgnore(const Proxy &node, string_array &exclude_remarks, string_array &i
else
return false;
});
if(include_remarks.size() != 0)
if(!include_remarks.empty())
{
//writeLog(LOG_TYPE_INFO, "Comparing include remarks...");
included = std::any_of(include_remarks.cbegin(), include_remarks.cend(), [&node](const auto &x)
@@ -273,7 +270,7 @@ bool chkIgnore(const Proxy &node, string_array &exclude_remarks, string_array &i
void filterNodes(std::vector<Proxy> &nodes, string_array &exclude_remarks, string_array &include_remarks, int groupID)
{
int node_index = 0;
std::vector<Proxy>::iterator iter = nodes.begin();
auto iter = nodes.begin();
while(iter != nodes.end())
{
if(chkIgnore(*iter, exclude_remarks, include_remarks))
@@ -380,6 +377,7 @@ void nodeRename(Proxy &node, const RegexMatchConfigs &rename_array, extra_settin
for(const RegexMatchConfig &x : rename_array)
{
#ifndef NO_JS_RUNTIME
if(!x.Script.empty() && ext.authorized)
{
script_safe_runner(ext.js_runtime, ext.js_context, [&](qjs::Context &ctx)
@@ -395,19 +393,19 @@ void nodeRename(Proxy &node, const RegexMatchConfigs &rename_array, extra_settin
if(!returned_remark.empty())
remark = returned_remark;
}
catch (qjs::exception)
catch (qjs::exception&)
{
script_print_stack(ctx);
}
}, global.scriptCleanContext);
continue;
}
if(applyMatcher(x.Match, real_rule, node) && real_rule.size())
#endif
if(applyMatcher(x.Match, real_rule, node) && !real_rule.empty())
remark = regReplace(remark, real_rule, x.Replace);
}
if(remark.empty())
remark = original_remark;
return;
}
std::string removeEmoji(const std::string &orig_remark)
@@ -432,6 +430,7 @@ std::string addEmoji(const Proxy &node, const RegexMatchConfigs &emoji_array, ex
for(const RegexMatchConfig &x : emoji_array)
{
#ifndef NO_JS_RUNTIME
if(!x.Script.empty() && ext.authorized)
{
std::string result;
@@ -448,7 +447,7 @@ std::string addEmoji(const Proxy &node, const RegexMatchConfigs &emoji_array, ex
if(!ret.empty())
result = ret + " " + node.Remark;
}
catch (qjs::exception)
catch (qjs::exception&)
{
script_print_stack(ctx);
}
@@ -457,9 +456,10 @@ std::string addEmoji(const Proxy &node, const RegexMatchConfigs &emoji_array, ex
return result;
continue;
}
#endif
if(x.Replace.empty())
continue;
if(applyMatcher(x.Match, real_rule, node) && real_rule.size() && regFind(node.Remark, real_rule))
if(applyMatcher(x.Match, real_rule, node) && !real_rule.empty() && regFind(node.Remark, real_rule))
return x.Replace + " " + node.Remark;
}
return node.Remark;
@@ -481,7 +481,8 @@ void preprocessNodes(std::vector<Proxy> &nodes, extra_settings &ext)
if(ext.sort_flag)
{
bool failed = true;
if(ext.sort_script.size() && ext.authorized)
#ifndef NO_JS_RUNTIME
if(!ext.sort_script.empty() && ext.authorized)
{
std::string script = ext.sort_script;
if(startsWith(script, "path:"))
@@ -503,12 +504,13 @@ void preprocessNodes(std::vector<Proxy> &nodes, extra_settings &ext)
std::stable_sort(nodes.begin(), nodes.end(), comparer);
failed = false;
}
catch(qjs::exception)
catch(qjs::exception&)
{
script_print_stack(ctx);
}
}, global.scriptCleanContext);
}
#endif
if(failed) std::stable_sort(nodes.begin(), nodes.end(), [](const Proxy &a, const Proxy &b)
{
return a.Remark < b.Remark;

63
xmake.lua Normal file
View File

@@ -0,0 +1,63 @@
add_rules("mode.debug", "mode.release")
option("static")
set_default(false)
set_showmenu(true)
set_category("option")
set_description("Build static binary.")
option_end()
add_requires("pcre2", "yaml-cpp", "rapidjson", "toml11")
includes("xmake/libcron.lua")
includes("xmake/yaml-cpp-static.lua")
includes("xmake/quickjspp.lua")
includes("xmake/curl-static.lua")
add_requires("libcron", {system = false})
add_requires("yaml-cpp-static", {system = false})
add_requires("quickjspp", {system = false})
if not is_plat("macosx") and get_config("static") == true then
add_requires("curl-static", {system = false})
else
add_requires("libcurl")
end
target("subconverter")
set_kind("binary")
if is_os("windows") then
add_syslinks("ws2_32", "wsock32")
end
if not is_os("macosx") and has_config("static") then
add_ldflags("-static")
end
add_files("src/**.cpp|lib/wrapper.cpp|server/webserver_libevent.cpp|script/script.cpp|generator/template/template_jinja2.cpp")
add_includedirs("src")
add_includedirs("include")
add_packages("pcre2", "rapidjson", "toml11", "libcron", "quickjspp")
if not is_plat("macosx") and get_config("static") == true then
add_packages("curl-static")
else
add_packages("libcurl")
end
if has_config("static") then
add_packages("yaml-cpp-static")
else
add_packages("yaml-cpp")
end
add_defines("CURL_STATICLIB")
add_defines("PCRE2_STATIC")
add_defines("YAML_CPP_STATIC_DEFINE")
add_cxxflags("-std=c++20")
target("subconverter_lib")
set_basename("subconverter")
set_kind("static")
add_files("src/**.cpp|handler/**.cpp|server/**.cpp|script/**.cpp|generator/template/template_jinja2.cpp")
add_includedirs("src")
add_includedirs("include")
add_packages("pcre2", "yaml-cpp", "rapidjson", "toml11")
add_defines("CURL_STATICLIB")
add_defines("PCRE2_STATIC")
add_defines("YAML_CPP_STATIC_DEFINE")
add_defines("NO_JS_RUNTIME")
add_defines("NO_WEBGET")
add_cxxflags("-std=c++20")

31
xmake/curl-static.lua Normal file
View File

@@ -0,0 +1,31 @@
package("curl-static")
add_deps("cmake")
add_versions("8.5.0", "7161cb17c01dcff1dc5bf89a18437d9d729f1ecd")
set_urls("https://github.com/curl/curl.git")
if is_plat("macosx", "iphoneos") then
add_frameworks("Security", "CoreFoundation", "SystemConfiguration")
elseif is_plat("linux") then
add_deps("mbedtls")
add_syslinks("pthread")
elseif is_plat("windows", "mingw") then
add_syslinks("advapi32", "crypt32", "wldap32", "winmm", "ws2_32", "user32", "bcrypt")
end
add_deps("zlib")
on_install(function (package)
local configs = {}
table.insert(configs, "-DCURL_USE_LIBSSH2=OFF")
table.insert(configs, "-DHAVE_LIBIDN2=OFF")
table.insert(configs, "-DCURL_USE_LIBPSL=OFF")
table.insert(configs, "-DBUILD_CURL_EXE=OFF")
table.insert(configs, "-DBUILD_TESTING=OFF")
table.insert(configs, "-DCURL_USE_MBEDTLS=" .. (package:is_plat("linux") and "ON" or "OFF"))
table.insert(configs, "-DCURL_USE_SCHANNEL=" .. (package:is_plat("windows") and "ON" or "OFF"))
table.insert(configs, "-DHTTP_ONLY=ON")
table.insert(configs, "-DCURL_USE_LIBSSH2=OFF")
table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
table.insert(configs, "-DBUILD_SHARED_LIBS=OFF")
import("package.tools.cmake").install(package, configs)
end)
package_end()

13
xmake/libcron.lua Normal file
View File

@@ -0,0 +1,13 @@
package("libcron")
add_deps("cmake")
add_versions("1.3.1", "41f238ceb09d4179e7346d78584a0c978e5d0059")
set_urls("https://github.com/PerMalmberg/libcron.git")
on_install(function (package)
local configs = {}
io.replace("CMakeLists.txt", "add_subdirectory(test)", "", {plain = true})
io.replace("CMakeLists.txt", "add_dependencies(cron_test libcron)", "", {plain = true})
table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
import("package.tools.cmake").install(package, configs)
end)
package_end()

54
xmake/quickjspp.lua Normal file
View File

@@ -0,0 +1,54 @@
package("quickjspp")
set_homepage("https://github.com/ftk/quickjspp")
set_description("QuickJS C++ wrapper")
add_urls("https://github.com/ftk/quickjspp.git")
add_versions("2022.7.22", "9cee4b4d27271d54b95f6f42bfdc534ebeaaeb72")
add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true})
add_includedirs("include", "include/quickjs")
add_linkdirs("lib/quickjs")
add_links("quickjs")
add_deps("cmake")
if is_plat("linux") then
add_syslinks("pthread", "dl", "m")
end
on_install("linux", "macosx", "mingw", function (package)
local configs = {"-DBUILD_TESTING=OFF"}
-- TODO, disable lto, maybe we need do it better
io.replace("CMakeLists.txt", "set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)", "", {plain = true})
table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
import("package.tools.cmake").install(package, configs, {})
end)
on_test(function (package)
assert(package:check_cxxsnippets({test = [[
#include <iostream>
void test() {
using namespace qjs;
Runtime runtime;
Context context(runtime);
auto rt = runtime.rt;
auto ctx = context.ctx;
js_std_init_handlers(rt);
js_init_module_std(ctx, "std");
js_init_module_os(ctx, "os");
context.eval(R"xxx(
import * as std from 'std';
import * as os from 'os';
globalThis.std = std;
globalThis.os = os;
)xxx", "<input>", JS_EVAL_TYPE_MODULE);
js_std_loop(ctx);
js_std_free_handlers(rt);
}
]]}, {configs = {languages = "c++17"},
includes = {"quickjspp.hpp","quickjs/quickjs-libc.h"}}))
end)

11
xmake/yaml-cpp-static.lua Normal file
View File

@@ -0,0 +1,11 @@
package("yaml-cpp-static")
add_deps("cmake")
add_versions("0.8.0-SNAPSHOT", "eaf72053724814be3b99d38e292fca5797a57b7b")
set_urls("https://github.com/jbeder/yaml-cpp.git")
on_install(function (package)
local configs = {}
table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
import("package.tools.cmake").install(package, configs)
end)
package_end()