pmt: initial 2.5.0 update
This commit is contained in:
24
.github/build.config
vendored
24
.github/build.config
vendored
@@ -1,24 +0,0 @@
|
||||
#
|
||||
# Build config for pmt workflows
|
||||
#
|
||||
# 2.4.0 config
|
||||
#
|
||||
|
||||
# Version
|
||||
export BUILD_VERSION="2.4.0"
|
||||
|
||||
# Relese tag
|
||||
export BUILD_RELTAG="240"
|
||||
|
||||
# Target architures
|
||||
export BUILD_ARCH="arm64-v8a, armeabi-v7a"
|
||||
|
||||
# NDK environ for getting clang version
|
||||
export NDK="/home/workdir/android-ndk"
|
||||
export TC="${NDK}/toolchains/llvm/prebuilt/linux-x86_64"
|
||||
export TARGET_TEMPLATE="aarch64-linux-android"
|
||||
export API_TEMPLATE="21"
|
||||
export NDK_CLANG="${TC}/bin/${TARGET_TEMPLATE}${API}-clang"
|
||||
|
||||
# get version
|
||||
export CLANG_VERSION=$(${NDK_CLANG} --version | head -n 1)
|
||||
136
.github/workflows/build.yml
vendored
Normal file
136
.github/workflows/build.yml
vendored
Normal file
@@ -0,0 +1,136 @@
|
||||
name: Build and release
|
||||
|
||||
on:
|
||||
push:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Detect starting type
|
||||
id: check-start-type
|
||||
run: |
|
||||
COMM_MSG=$(git log -1 --pretty=%B)
|
||||
if [ "${GITHUB_EVENT_NAME}" == "push" ]; then
|
||||
if [[ "${COMM_MSG}" == *"initial"* ]]; then
|
||||
echo "build_and_release=true" >> $GITHUB_ENV
|
||||
else
|
||||
echo "build_and_release=false" >> $GITHUB_ENV
|
||||
fi
|
||||
elif [ "${GITHUB_EVENT_NAME}" == "workflow_dispatch" ]; then
|
||||
echo "build_and_release=true" >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: Cleanup
|
||||
id: cleanup
|
||||
if: env.build_and_release == 'true'
|
||||
uses: rokibhasansagar/slimhub_actions@main
|
||||
|
||||
- name: Setup GitHub CLI
|
||||
id: setup-gh
|
||||
if: env.build_and_release == 'true'
|
||||
run: |
|
||||
type -p curl >/dev/null || (sudo apt update && sudo apt install curl -y)
|
||||
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
|
||||
&& sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
|
||||
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
|
||||
&& sudo apt update \
|
||||
&& sudo apt install gh -y
|
||||
|
||||
- name: Update and setup packages
|
||||
id: setup-packages
|
||||
if: env.build_and_release == 'true'
|
||||
run: |
|
||||
sudo apt update \
|
||||
&& sudo apt upgrade -y \
|
||||
&& sudo apt install make xz-utils aria2 gawk -y
|
||||
|
||||
- name: Save spefic version variables
|
||||
id: save-vars
|
||||
if: env.build_and_release == 'true'
|
||||
run: |
|
||||
. build/workflow/build.config
|
||||
echo "PMT_VERSION=${PMT_VERSION}" >> $GITHUB_ENV
|
||||
echo "PMT_VERSION_CODE=${PMT_VERSION_CODE}" >> $GITHUB_ENV
|
||||
echo "NDK_VERSION=${NDK_VERSION}" >> $GITHUB_ENV
|
||||
echo "NDK_LINK=${NDK_LINK}" >> $GITHUB_ENV
|
||||
echo "NDK_IS=${NDK_IS}" >> $GITHUB_ENV
|
||||
cd /home
|
||||
sudo git clone https://github.com/ShawkTeam/pmt -b ${PMT_VERSION}
|
||||
sudo chmod 777 pmt
|
||||
echo "PMT_SRCDIR=/home/pmt" >> $GITHUB_ENV
|
||||
echo "NDK_DIR=/home/ndk/android-ndk" >> $GITHUB_ENV
|
||||
echo "NDK_IN_DIR=/home/ndk" >> $GITHUB_ENV
|
||||
sudo mkdir -p "/home/ndk" && cd "/home/ndk" && sudo chmod 777 "/home/ndk"
|
||||
|
||||
- name: Download and extract NDK
|
||||
id: setup-ndk
|
||||
if: env.build_and_release == 'true'
|
||||
run: |
|
||||
echo "Downloading NDK ${{ env.NDK_VERSION }}..."
|
||||
aria2c "${{ env.NDK_LINK }}"
|
||||
echo "Extracting..."
|
||||
unzip -q *.zip && rm *.zip
|
||||
mv * "${{ env.NDK_IS }}"
|
||||
sudo chmod -R 777 *
|
||||
working-directory: ${{ env.NDK_IN_DIR }}
|
||||
|
||||
- name: Build pmt
|
||||
id: build-pmt
|
||||
if: env.build_and_release == 'true'
|
||||
run: |
|
||||
make gen-ndk-makefiles
|
||||
export NDK_PROJECT_PATH=${PWD}
|
||||
export NDK_ROOT_DIR=${{ env.NDK_DIR }}
|
||||
echo "NDK_ROOT_DIR=${NDK_ROOT_DIR}" >> $GITHUB_ENV
|
||||
bash build/bash/gen-header
|
||||
cd ${{ env.NDK_DIR }}
|
||||
./ndk-build
|
||||
working-directory: ${{ env.PMT_SRCDIR }}
|
||||
|
||||
- name: Last small transactions
|
||||
id: small-transactions
|
||||
if: env.build_and_release == 'true'
|
||||
run: |
|
||||
export CC_64="${PWD}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang"
|
||||
export CC_32="${PWD}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi21-clang"
|
||||
export AR="${PWD}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
|
||||
export CC_VERSION=$(${CC_64} --version | head -n 1)
|
||||
echo "CC_VERSION=${CC_VERSION}" >> $GITHUB_ENV
|
||||
. ${{ env.PMT_SRCDIR }}/build/workflow/build.config
|
||||
. ${{ env.PMT_SRCDIR }}/build/workflow/relnotes > /home/pmt/release_body.txt
|
||||
cd ${{ env.PMT_SRCDIR }}
|
||||
zip -rq pmt-objs-local.zip obj/local/arm64-v8a obj/local/armeabi-v7a
|
||||
xz libs/arm64-v8a/pmt
|
||||
mv libs/arm64-v8a/pmt.xz ${PWD}/pmt-arm64-v8a.xz
|
||||
xz libs/armeabi-v7a/pmt
|
||||
mv libs/armeabi-v7a/pmt.xz ${PWD}/pmt-armeabi-v7a.xz
|
||||
make CC="${CC_64}" AR="${AR}"
|
||||
make deb FOR_THIS=64
|
||||
mv out/debpackage/*.deb .
|
||||
make clean
|
||||
make CC="${CC_32}" AR="${AR}"
|
||||
make deb FOR_THIS=32
|
||||
mv out/debpackage/*.deb .
|
||||
make clean
|
||||
working-directory: ${{ env.NDK_DIR }}
|
||||
|
||||
- name: Upload to release
|
||||
id: upload-to-rels
|
||||
if: env.build_and_release == 'true'
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
files: |
|
||||
/home/pmt/pmt*.xz
|
||||
/home/pmt/pmt*.deb
|
||||
/home/pmt/pmt-objs-local.zip
|
||||
name: Partition Manager ${{ env.PMT_VERSION }} Release
|
||||
tag_name: ${{ env.PMT_VERSION }}
|
||||
body_path: /home/pmt/release_body.txt
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
136
ADD-LANGUAGES.md
136
ADD-LANGUAGES.md
@@ -1,136 +0,0 @@
|
||||
### Add a new language to pmt (guide)
|
||||
|
||||
On this page, I will tell you how to add languages to pmt. This is not a difficult thing :)
|
||||
|
||||
##### Send ready stuff
|
||||
- Send ready translations via pull requests. After making the necessary checks, if there is no problem, I will accept it.
|
||||
- Proper commit messages are required.
|
||||
- If there is an error, I will mention it in the pull request comments.
|
||||
- Once you accept it, I (YZBruh) will implement the rest of the necessary things.
|
||||
- It may take 5 days for me to notice :P
|
||||
|
||||
##### Little important notes
|
||||
- You don't have to be a professional to do this thing.
|
||||
- There will be only one place you need to pay attention to, I will explain it.
|
||||
- There is no need to know C.
|
||||
- You can edit existing translations.
|
||||
- You may need ready pmt to understand some things.
|
||||
- If you are on an x86 PC, you can compile and use it, but the functions will never work.
|
||||
|
||||
##### Understanding general logic
|
||||
All the texts (strings) in pmt are like variables in bash. I mean:
|
||||
|
||||
```
|
||||
Bash
|
||||
export missing_operand="missing operand."
|
||||
|
||||
APPLYING:
|
||||
~ $ echo -n "$missing_operand\n" # for more detail I used the -n argument
|
||||
missing operand
|
||||
~ $
|
||||
|
||||
|
||||
C / C++
|
||||
const char* _Nonnull missing_operand = "missing operand.";
|
||||
const std::string missing_operand = "missing operand.";
|
||||
|
||||
APPLYING (C / C++):
|
||||
printf("%s\n", missing_operand); // Move to new line with '\n' character
|
||||
std::cout << missing_operand << std::endl; // Move to new line with std::endl
|
||||
```
|
||||
|
||||
For example, let's take the output directly in pmt without any arguments and process the variables and structures behind the work.
|
||||
|
||||
```
|
||||
Shell
|
||||
~ $ pmt
|
||||
pmt: missing operand
|
||||
Try `pmt --help' for more information.
|
||||
~ $
|
||||
|
||||
Code pieces (C)
|
||||
struct pmt_langdb_general en = {
|
||||
// other translations
|
||||
.missing_operand = "missing operand";
|
||||
.try_h = "Try";
|
||||
.for_more = "for more information";
|
||||
// other translations
|
||||
}
|
||||
|
||||
// pmt code functions [ logging ]
|
||||
LOGE("%s\n%s `%s --help' %s.\n, missing_operand, try_h, argv[0], for_more); // LOGE is error logger (pmt). argv[0] = execution name
|
||||
```
|
||||
|
||||
In short, there are variables for texts. And I made these dynamic by using [struct](https://chatgpt.com/share/a798b57c-7e29-4b17-8887-f230414e57bd) method in C. You just need to add translation :)
|
||||
|
||||
##### Translating main program texts (relevant part)
|
||||
|
||||
- Let's open our jni/languages.c source file.
|
||||
- Now, let's create the translation with the ready-made struct structure (see jni/include/pmt-stringkeys.h for the structure).
|
||||
```
|
||||
// main
|
||||
struct pmt_langdb_general <LANGUAGE_PREFIX> = { // LANGUAGE_PREFIX must be the corresponding abbreviation of the language in English. For example, it's like en in English.
|
||||
// translations
|
||||
}
|
||||
|
||||
// example
|
||||
struct pmt_langdb_general en = {
|
||||
// translation
|
||||
}
|
||||
```
|
||||
- We need to add some information about the language.
|
||||
```
|
||||
struct pmt_langdb_general <LANGUAGE_PREFIX> = {
|
||||
.lang_by_s = // Names of those who made the translation. It's up to you. Do you use & between more than one person?
|
||||
.language = // Language name. For example English
|
||||
.lang_prefix = // Language prefix. For example en
|
||||
// other translations
|
||||
}
|
||||
|
||||
// example
|
||||
struct pmt_langdb_general en = {
|
||||
.lang_by_s = "YZBruh";
|
||||
.language = "English";
|
||||
.lang_prefix = "en";
|
||||
// other translations
|
||||
}
|
||||
|
||||
// CRITIC WARNING: Do not add ';' to the end of the last translation text. But others always
|
||||
```
|
||||
- Now do the others :)
|
||||
- Now let me explain the documentation...
|
||||
|
||||
##### Document texts translation (relevant part)
|
||||
|
||||
- Let's open our jni/languages.c source file.
|
||||
- Now, let's create the translation with the ready-made struct structure (see jni/include/pmt-stringkeys.h for the structure).
|
||||
```
|
||||
struct pmt_langdb_docs <LANGUAGE_PREFIX>_docs = {
|
||||
// translations
|
||||
}
|
||||
|
||||
// example
|
||||
struct pmt_langdb_docs en_docs = {
|
||||
// translations
|
||||
}
|
||||
```
|
||||
- Make translations by taking examples from existing ones. And definitely do it regularly by getting help message from pmt :D
|
||||
|
||||
##### General things to do in translation
|
||||
|
||||
- Open jni/languages.c
|
||||
- Go down a bit...
|
||||
```
|
||||
char* pmt_langdb_langs[] = {
|
||||
"en",
|
||||
"tr"
|
||||
};
|
||||
// Add the language you are translating into these existing language prefixes. I will fix the errors here (if there is an error)
|
||||
|
||||
int pmt_langdb_total = <NUM>; // add one to the existing one and write (replacing with existing)
|
||||
int pmt_langdb_ctrl = <NUM>; // add one to the existing one and write (replacing with existing)
|
||||
```
|
||||
|
||||
##### Notes
|
||||
- Apologies for the crappy current language control structure :(
|
||||
- You can ask your questions: <t.me/YZBruh>
|
||||
24
CHANGELOG.md
Normal file → Executable file
24
CHANGELOG.md
Normal file → Executable file
@@ -1,7 +1,19 @@
|
||||
### Version 2.4.0 (code 240) changelog
|
||||
- Logging type has been changed.
|
||||
- More understandable syntax.
|
||||
- And one or two more things but I don't remember :P
|
||||
### Version 2.5.0 Changelog
|
||||
|
||||
| END OF VERSION 2.4.0 CHANGELOG |
|
||||
|------------------------------------|
|
||||
- Fixed serious problems with version 2.4.0.
|
||||
- Stabilization was held.
|
||||
- The size calculation problem that was during flashtime was corrected.
|
||||
- Change in the syntax in flash and formatting processes was made.
|
||||
- Problems in file system selection are corrected in formatting process.
|
||||
- Deprecation system created for deprecated/changed options.
|
||||
- License display option deprecated.
|
||||
- The language configuration file will now be stored and read entirely in /sdcard.
|
||||
- Enabled C language extention warnings (-pedantic).
|
||||
- Unnecessary codes were cleared and a more neat code was written.
|
||||
- It was passed to make as old in the compilation system
|
||||
- For NDK compilation with iterine make system Android.mk and Application.mk creation support added.
|
||||
- More advanced make build system than before.
|
||||
|
||||
```
|
||||
END OF 2.5.0 UPDATE CHANGELOG
|
||||
```
|
||||
@@ -1,4 +0,0 @@
|
||||
### Supported languages
|
||||
|
||||
- Türkçe (Turkish) (TR)
|
||||
- English (EN)
|
||||
26
Makefile
Executable file
26
Makefile
Executable file
@@ -0,0 +1,26 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
THIS_IS = main
|
||||
NDK_PROG ?= false
|
||||
FORCE_GEN ?= false
|
||||
|
||||
# include needed variables
|
||||
include Makefile.inc
|
||||
include $(TOOLS)/gen-makefiles.mk
|
||||
include $(TOOLS)/clean-makefiles.mk
|
||||
|
||||
include $(BUILD)/main.mk
|
||||
161
Makefile.inc
Executable file
161
Makefile.inc
Executable file
@@ -0,0 +1,161 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# speficy
|
||||
VERSION := 2.5.0
|
||||
VERSION_CODE := 250
|
||||
TARGET := pmt
|
||||
|
||||
# device arch info
|
||||
ARCH := $(shell uname -m)
|
||||
|
||||
# current directory
|
||||
CUR_DIR = $(shell pwd)
|
||||
OUT_DIRNAME ?= out
|
||||
SOURCE_DIRNAME ?= jni
|
||||
|
||||
# others needed important variables
|
||||
ifeq ($(THIS_IS),src)
|
||||
BUILD := ../build
|
||||
SOURCE_DIR := $(CUR_DIR)
|
||||
OUT_DIR := ../$(OUT_DIRNAME)
|
||||
DEBUTILS_DIR := $(BUILD)/deb
|
||||
INCLUDE_DIR := ../include
|
||||
else ifeq ($(THIS_IS),debutils)
|
||||
BUILD := ..
|
||||
SOURCE_DIR := ../../$(SOURCE_DIRNAME)
|
||||
OUT_DIR := ../../$(OUT_DIRNAME)
|
||||
DEBUTILS_DIR := $(BUILD)/deb
|
||||
else ifeq ($(THIS_IS),out)
|
||||
BUILD := ../build
|
||||
SOURCE_DIR := ../$(SOURCE_DIRNAME)
|
||||
OUT_DIR := $(CUR_DIR)
|
||||
DEBUTILS_DIR := $(BÜILD)/deb
|
||||
else ifeq ($(THIS_IS),main)
|
||||
BUILD := $(CUR_DIR)/build
|
||||
SOURCE_DIR := $(CUR_DIR)/$(SOURCE_DIRNAME)
|
||||
OUT_DIR := $(CUR_DIR)/$(OUT_DIRNAME)
|
||||
DEBUTILS_DIR := $(BUILD)/deb
|
||||
endif
|
||||
|
||||
BINARY_DIR := $(OUT_DIR)/binary
|
||||
PACKAGE_DIR := $(OUT_DIR)/package
|
||||
STATICLIB_DIR := $(OUT_DIR)/static_libs
|
||||
DEB_DIR := $(OUT_DIR)/debpackage
|
||||
TOOLS := $(BUILD)/tools
|
||||
UTILS := $(BUILD)/util
|
||||
BASH_DIR := $(BUILD)/bash
|
||||
OTHERS := $(BUILD)/others
|
||||
TERMUX_USR := /data/data/com.termux/files/usr
|
||||
TERMUX_BIN := $(TERMUX_USR)/bin
|
||||
LINUX_BIN := /usr/bin
|
||||
DEBTERMUX_USR := $(DEBUTILS_DIR)/template$(TERMUX_USR)
|
||||
|
||||
ifneq ($(wildcard $(LINUX_BIN)),)
|
||||
BIN := $(LINUX_BIN)
|
||||
else
|
||||
BIN := $(TERMUX_BIN)
|
||||
endif
|
||||
|
||||
include $(UTILS)/utils.mk
|
||||
|
||||
ifneq ($(shell basename $(SOURCE_DIR)),$(SOURCE_DIRNAME))
|
||||
$(error The index name specified with the current source directory name is not the same! Something's wrong)
|
||||
endif
|
||||
|
||||
ifneq ($(shell basename $(OUT_DIR)),$(OUT_DIRNAME))
|
||||
$(error The index name specified with the current output directory name is not the same! Something's wrong)
|
||||
endif
|
||||
|
||||
# sources
|
||||
SRCS := $(wildcard $(SOURCE_DIR)/*.c)
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
|
||||
# the presence of all source files that are on this list will be checked
|
||||
SRCS_REQ := \
|
||||
$(SOURCE_DIR)/debugging.c \
|
||||
$(SOURCE_DIR)/docs.c \
|
||||
$(SOURCE_DIR)/get_stat.c \
|
||||
$(SOURCE_DIR)/lang_tools.c \
|
||||
$(SOURCE_DIR)/languages.c \
|
||||
$(SOURCE_DIR)/partitiontool.c \
|
||||
$(SOURCE_DIR)/pmt.c \
|
||||
$(SOURCE_DIR)/root.c \
|
||||
$(SOURCE_DIR)/tools.c \
|
||||
$(SOURCE_DIR)/versioner.c
|
||||
|
||||
ifeq ($(THIS_IS),src)
|
||||
HEADERS_REQ := \
|
||||
$(INCLUDE_DIR)/pmt/deprecates.h \
|
||||
$(INCLUDE_DIR)/pmt/docs.h \
|
||||
$(INCLUDE_DIR)/pmt/pmt.h \
|
||||
$(INCLUDE_DIR)/pmt/stringkeys.h \
|
||||
$(INCLUDE_DIR)/pmt/versioning.h
|
||||
endif
|
||||
|
||||
# objects to be used wgen static library files is created
|
||||
STATICLIB_OBJS := \
|
||||
$(SOURCE_DIR)/root.o \
|
||||
$(SOURCE_DIR)/debugging.o \
|
||||
$(SOURCE_DIR)/listpart.o \
|
||||
$(SOURCE_DIR)/partitiontool.o
|
||||
|
||||
# objects to be used when executable file is created
|
||||
OBJS_EXEC := \
|
||||
$(SOURCE_DIR)/$(TARGET).o \
|
||||
$(SOURCE_DIR)/docs.o \
|
||||
$(SOURCE_DIR)/versioner.o \
|
||||
$(SOURCE_DIR)/get_stat.o \
|
||||
$(SOURCE_DIR)/tools.o \
|
||||
$(SOURCE_DIR)/lang_tools.o \
|
||||
$(SOURCE_DIR)/languages.o
|
||||
|
||||
# other directories in the out directory
|
||||
IN_OUT_DIR := \
|
||||
$(BINARY_DIR) \
|
||||
$(PACKAGE_DIR) \
|
||||
$(STATICLIB_DIR)
|
||||
|
||||
# list of file/directory to be checked when the deb pack is created
|
||||
DEB_CHECKS := \
|
||||
$(DEBUTILS_DIR) \
|
||||
$(DEBUTILS_DIR)/DEBIAN \
|
||||
$(DEBUTILS_DIR)/DEBIAN/control_32 \
|
||||
$(DEBUTILS_DIR)/DEBIAN/control_64 \
|
||||
$(DEBUTILS_DIR)/mandoc \
|
||||
$(DEBUTILS_DIR)/mandoc/$(TARGET).8.gz \
|
||||
$(DEBUTILS_DIR)/data \
|
||||
$(DEBUTILS_DIR)/data/data \
|
||||
$(DEBUTILS_DIR)/data/data/com.termux \
|
||||
$(DEBUTILS_DIR)/data/data/com.termux/files \
|
||||
$(DEBUTILS_DIR)/data/data/com.termux/files/usr \
|
||||
$(DEBUTILS_DIR)/data/data/com.termux/files/usr/bin \
|
||||
$(DEBUTILS_DIR)/data/data/com.termux/files/usr/share \
|
||||
$(DEBUTILS_DIR)/data/data/com.termux/files/usr/share/man \
|
||||
$(DEBUTILS_DIR)/data/data/com.termux/files/usr/share/man/man8
|
||||
|
||||
# for running make with silent mode
|
||||
hide := @
|
||||
MAKE_HIDE := $(hide)$(MAKE)
|
||||
SILENT := -s
|
||||
|
||||
# color definations
|
||||
RESET := \033[0m
|
||||
RED := \033[0;31m
|
||||
GREEN := \033[0;32m
|
||||
YELLOW := \033[0;33m
|
||||
|
||||
# end
|
||||
54
README.md
54
README.md
@@ -7,8 +7,8 @@ It offers a lot of options. I will place these below. But first let me talk abou
|
||||
|
||||
```
|
||||
Usage: pmt backup PARTITION [OUTPUT] [OPTIONS]...
|
||||
or: pmt flash FILE PARTITION [OPTIONS]...
|
||||
or: pmt format FILE_SYSTEM[ext/2/3/4] PARTITION [OPTIONS]...
|
||||
or: pmt flash PARTITION FILE [OPTIONS]...
|
||||
or: pmt format PARTITION FILE_SYSTEM[ext/2/3/4] [OPTIONS]...
|
||||
|
||||
Options:
|
||||
-l, --logical It is meant to determine whether the target partition is logical.
|
||||
@@ -19,7 +19,6 @@ Options:
|
||||
-S, --set-lang Set current language.
|
||||
-v, --version See version.
|
||||
--help See this help message.
|
||||
-L, --license See license.
|
||||
|
||||
Examples:
|
||||
pmt backup boot_a -c /dev/block/platform/bootdevice/by-name
|
||||
@@ -27,33 +26,40 @@ Examples:
|
||||
pmt format ext4 system_a --logical
|
||||
pmt -c /dev/block/platform/bootdevice/by-name --list
|
||||
|
||||
Report bugs to <t.me / ShawkTeam | Community / Topics -- pmt>
|
||||
Report bugs to <t.me/ShawkTeam | Topics | pmt>
|
||||
```
|
||||
|
||||
#### Some notes
|
||||
|
||||
- pmt supports multiple languages. [See languages.](https://github.com/ShawkTeam/pmt/blob/2.4.0/LANGUAGES.md)
|
||||
- [Add language.](https://github.com/ShawkTeam/pmt/blob/2.4.0/ADD-LANGUAGES.md)
|
||||
- pmt supports multiple languages. [See languages.](https://github.com/ShawkTeam/pmt/blob/2.5.0/LANGUAGES.md)
|
||||
- [Add language.](https://github.com/ShawkTeam/pmt/blob/2.5.0/ADD-LANGUAGES.md)
|
||||
- Feel free to ask any questions you want.
|
||||
- Packages are available in publications.
|
||||
- If the logical partition flag is not used, a classic partition is tried to be processing by default.
|
||||
- [Click to see special version changes.](https://github.com/ShawkTeam/pmt/blob/2.4.0/CHANGELOG.md)
|
||||
- [Click to see special version changes.](https://github.com/ShawkTeam/pmt/blob/2.5.0/CHANGELOG.md)
|
||||
- We are always open to your suggestions and support (developing)!
|
||||
|
||||
### How is it built?
|
||||
Android NDK is required to build.
|
||||
- [Download](https://developer.android.com/ndk/downloads) and extract the NDK package.
|
||||
Make or Android NDK is required to build.
|
||||
|
||||
##### Build with NDK
|
||||
- [Download Android NDK](https://developer.android.com/ndk/downloads) and extract the NDK package.
|
||||
- Clone this repository. And get access to it.
|
||||
```
|
||||
git clone https://github.com/ShawkTeam/pmt -b 2.4.0
|
||||
git clone https://github.com/ShawkTeam/pmt -b 2.5.0
|
||||
cd pmt
|
||||
```
|
||||
- Set the NDK working directory variable.
|
||||
```
|
||||
export NDK_PROJECT_PATH=$(pwd)
|
||||
make gen-ndk-makefiles
|
||||
export NDK_PROJECT_PATH="${PWD}"
|
||||
```
|
||||
- Go to the NDK directory and start the construction
|
||||
- Go to the NDK directory and start the build
|
||||
```
|
||||
# Required by pmt's Android.mk
|
||||
export NDK_ROOT_DIR="${PWD}"
|
||||
|
||||
# Start build
|
||||
./ndk-build
|
||||
```
|
||||
- The output files will be inside the `pmt` folder. Binaries are available in two architectures within the `libs` folder. `arm64-v8a` (64-bit) and `armeabi-v7a` (32-bit).
|
||||
@@ -62,7 +68,7 @@ export NDK_PROJECT_PATH=$(pwd)
|
||||
|
|
||||
________________|________________
|
||||
| | | |
|
||||
jni/ debutils/ obj/ libs/
|
||||
src/ build/ obj/ libs/
|
||||
|
|
||||
__________|__________
|
||||
| |
|
||||
@@ -70,24 +76,24 @@ export NDK_PROJECT_PATH=$(pwd)
|
||||
| |
|
||||
pmt pmt
|
||||
```
|
||||
- For the make installable debian package make-deb.sh use the script. It can be created within two architectures. Use the script flags correctly: arm64-v8a, armeabi-v7a. If you want to process with root, add sudo as the second argument. If you don't want, use no-sudo or leave it blank
|
||||
|
||||
##### Build with Makefiles
|
||||
|
||||
```
|
||||
--Usage--
|
||||
make
|
||||
|
||||
./make-deb.sh [arm64-v8a, armeabi-v7a] [sudo, no-sudo, <blank>]
|
||||
# Use termux :D
|
||||
```
|
||||
|
||||
- For the make installable debian package:
|
||||
|
||||
```
|
||||
chmod 777 utils.sh
|
||||
make deb <ARCH_NUM>
|
||||
|
||||
# for making 64-bit package
|
||||
./utils.sh make-deb arm64-v8a
|
||||
|
||||
# for making 32-bit package
|
||||
./utils.sh make-deb armeabi-v7a
|
||||
# Examples
|
||||
make deb FOR_THIS=64
|
||||
make deb FOR_THIS=32
|
||||
```
|
||||
|
||||
### Notes
|
||||
If you want to change something, take a look at the configuration. You can change him.
|
||||
it is located in the `jni/config` folder. His name is `env.mk`. I gave the information in the file. You can ask more.
|
||||
it is located in the `build/config` folder. His name is `env.mk`. I gave the information in the file. You can ask more.
|
||||
|
||||
6
build/bash/additional-vars
Executable file
6
build/bash/additional-vars
Executable file
@@ -0,0 +1,6 @@
|
||||
NDK_PROG=false
|
||||
FORCE_GEN=false
|
||||
THIS_IS=main
|
||||
UPDATE_MAKEFILES=false
|
||||
SOURCE_DIRNAME=src
|
||||
OUT_DIRNAME=out
|
||||
36
build/bash/check-makefiles
Executable file
36
build/bash/check-makefiles
Executable file
@@ -0,0 +1,36 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
[ ! "${THIS_IS}" = "main" ] && abort "The caller is not the main makefile. Something's wrong."
|
||||
|
||||
try_with="Try with force mode (FORCE_GEN=true)."
|
||||
|
||||
if [ "${NDK_PROG}" = "true" ]; then
|
||||
mfiles=("${SOURCE_DIR}/Android.mk" "${SOURCE_DIR}/Application.mk")
|
||||
else
|
||||
mfiles=("${OUT_DIR}/Makefile" "${SOURCE_DIR}/Makefile")
|
||||
fi
|
||||
|
||||
for mfile in ${mfiles[0]} ${mfiles[1]}; do
|
||||
|
||||
[ -f "${mfile}" ] && \
|
||||
if [ "${FORCE_GEN}" = "true" ]; then
|
||||
rm -f "${mfile}"
|
||||
else
|
||||
abort "$(output=$(dirname ${mfile}) && basename "${output}")/$(basename ${mfile}) exits."
|
||||
fi
|
||||
|
||||
done
|
||||
42
build/bash/clean-makefiles
Executable file
42
build/bash/clean-makefiles
Executable file
@@ -0,0 +1,42 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
. build/bash/vars
|
||||
. build/bash/functions
|
||||
|
||||
[ ! "${THIS_IS}" = "main" ] && abort "The caller is not the main makefile. Something's wrong."
|
||||
|
||||
if [ "${NDK_PROG}" = "true" ]; then
|
||||
|
||||
[ "${UPDATE_MAKEFILES}" = "true" ] || print " - Removing Android.mk..."
|
||||
rm -f ${SOURCE_DIR}/Android.mk
|
||||
|
||||
[ "${UPDATE_MAKEFILES}" = "true" ] || print " - Removing Application.mk..."
|
||||
rm -f ${SOURCE_DIR}/Application.mk
|
||||
|
||||
else
|
||||
|
||||
[ "${UPDATE_MAKEFILES}" = "true" ] || print " - Info: Main makefile won't be deleted."
|
||||
|
||||
[ "${UPDATE_MAKEFILES}" = "true" ] || print " - Removing output directory makefile..."
|
||||
rm -f ${OUT_DIR}/Makefile
|
||||
|
||||
[ "${UPDATE_MAKEFILES}" = "true" ] || print " - Removing source directory makefile"
|
||||
rm -f ${SOURCE_DIR}/Makefile
|
||||
|
||||
fi
|
||||
|
||||
[ "${UPDATE_MAKEFILES}" = "true" ] || print " - Success."
|
||||
37
build/bash/functions
Executable file
37
build/bash/functions
Executable file
@@ -0,0 +1,37 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
function abort()
|
||||
{
|
||||
[ -n "$1" ] && echo -e " - ${RED}${BOLD}Error:${BOLD_RESET}${RESET} $1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
function read_file()
|
||||
{
|
||||
cat "$1" >> "$2" || abort "failed to read/write $1/$2"
|
||||
}
|
||||
|
||||
function gen()
|
||||
{
|
||||
[ "${FORCE_GEN}" = "true" -a "${UPDATE_MAKEFILES}" = "true" ] && rm -f "$1"
|
||||
touch "$1" || abort "failed to generate: $1"
|
||||
}
|
||||
|
||||
function print()
|
||||
{
|
||||
echo -e "$1"
|
||||
}
|
||||
29
build/bash/gen-header
Executable file
29
build/bash/gen-header
Executable file
@@ -0,0 +1,29 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
[ -z ${NDK_ROOT_DIR} ] && \
|
||||
echo "Please set NDK_ROOT_DIR variable!" && \
|
||||
exit 1
|
||||
|
||||
[ -z ${NDK_PROJECT_PATH} ] && \
|
||||
echo "Please set NDK_PROJECT_PATH variable!" && \
|
||||
exit 1
|
||||
|
||||
CC_IS="${NDK_ROOT_DIR}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang"
|
||||
CC_VERS=$(${CC_IS} --version | head -n 1)
|
||||
|
||||
mkdir -p ${NDK_PROJECT_PATH}/include/pmt/generated
|
||||
echo -e "#define __NDK_CC_VERSION__ \"${CC_VERS}\"" > ${NDK_PROJECT_PATH}/include/pmt/generated/clang-version.h
|
||||
64
build/bash/gen-makefiles
Executable file
64
build/bash/gen-makefiles
Executable file
@@ -0,0 +1,64 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
. build/bash/vars
|
||||
. build/bash/functions
|
||||
|
||||
[ ! "${UPDATE_MAKEFILES}" = "true" ] && . build/bash/check-makefiles
|
||||
[ ! "${THIS_IS}" = "main" ] && abort "The caller is not the main makefile. Something's wrong."
|
||||
|
||||
if [ "${UPDATE_MAKEFILES}" = "true" ]; then
|
||||
GENR="Re-generating"
|
||||
else
|
||||
GENR="Generating"
|
||||
fi
|
||||
|
||||
if [ "${NDK_PROG}" = "true" ]; then
|
||||
|
||||
gen "${SOURCE_DIR}/Android.mk"
|
||||
gen "${SOURCE_DIR}/Application.mk"
|
||||
|
||||
else
|
||||
|
||||
gen "${CUR_DIR}/Makefile"
|
||||
gen "${OUT_DIR}/Makefile"
|
||||
gen "${SOURCE_DIR}/Makefile"
|
||||
|
||||
fi
|
||||
|
||||
if [ "${NDK_PROG}" = "true" ]; then
|
||||
|
||||
print " - ${GENR} Android.mk..."
|
||||
read_file "${OTHERS}/makefile.androidmk" "${SOURCE_DIR}/Android.mk"
|
||||
|
||||
print " - ${GENR} Application.mk"
|
||||
read_file "${OTHERS}/makefile.applicationmk" "${SOURCE_DIR}/Application.mk"
|
||||
|
||||
else
|
||||
|
||||
print " - Re-generating main makefile..."
|
||||
rm -f "${CUR_DIR}/Makefile"
|
||||
read_file "${OTHERS}/makefile.main" "${CUR_DIR}/Makefile"
|
||||
|
||||
print " - ${GENR} output directory makefile..."
|
||||
read_file "${OTHERS}/makefile.outdir" "${OUT_DIR}/Makefile"
|
||||
|
||||
print " - ${GENR} source directory makefile..."
|
||||
read_file "${OTHERS}/makefile.sourcedir" "${SOURCE_DIR}/Makefile"
|
||||
|
||||
fi
|
||||
|
||||
print " - Success."
|
||||
33
build/bash/vars
Executable file
33
build/bash/vars
Executable file
@@ -0,0 +1,33 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
. build/bash/additional-vars
|
||||
|
||||
CUR_DIR=$(pwd)
|
||||
SOURCE_DIR=${CUR_DIR}/${SOURCE_DIRNAME}
|
||||
OUT_DIR=${CUR_DIR}/${OUT_DIRNAME}
|
||||
BUILD=${CUR_DIR}/build
|
||||
BASH_DIR=$(pwd)
|
||||
OTHERS=${BUILD}/others
|
||||
TOOLS=${BUILD}/tools
|
||||
|
||||
# font types, colors etc
|
||||
BOLD="\e[1m"
|
||||
BOLD_RESET="\e[0m"
|
||||
RESET="\033[0m"
|
||||
RED="\033[0;31m"
|
||||
GREEN="\033[0;32m"
|
||||
YELLOW="\033[0;33m"
|
||||
1
build/config/INS_STAT.mk
Executable file
1
build/config/INS_STAT.mk
Executable file
@@ -0,0 +1 @@
|
||||
INSTALL_SUCCESS := true
|
||||
52
build/config/Makefile
Executable file
52
build/config/Makefile
Executable file
@@ -0,0 +1,52 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
include env.mk
|
||||
|
||||
#########################################
|
||||
# #
|
||||
# Apply Configuration #
|
||||
# #
|
||||
# Warning: please do not edit #
|
||||
# #
|
||||
#########################################
|
||||
|
||||
CC = clang
|
||||
CFLAGS ?= "-O3 -I../include -std=c11 -pedantic -Wall -Wextra -Werror -Wno-nullability-extension -Wno-gnu-zero-variadic-macro-arguments $(PMT_EXTRA_CFLAGS)"
|
||||
|
||||
# set compiler setting (clang-gcc and ar)
|
||||
ifneq ($(PMT_CC),)
|
||||
CC ?= $(PMT_CC)
|
||||
else
|
||||
CC ?= clang
|
||||
endif
|
||||
|
||||
ifneq ($(PMT_AR),)
|
||||
AR ?= $(PMT_AR)
|
||||
else
|
||||
AR ?= ar
|
||||
endif
|
||||
|
||||
# compiler flags settings
|
||||
ifneq ($(PMT_ENABLE_DEBUG),)
|
||||
CFLAGS += -gdwarf-5 -fsanitize=address
|
||||
endif
|
||||
|
||||
# write current env configuration to oldenv.mk
|
||||
all:
|
||||
@echo "CC := $(CC)" > oldenv.mk; \
|
||||
echo "AR := $(AR)" >> oldenv.mk; \
|
||||
echo "CFLAGS := $(CFLAGS)" >> oldenv.mk
|
||||
1
build/config/UNINS_STAT.mk
Executable file
1
build/config/UNINS_STAT.mk
Executable file
@@ -0,0 +1 @@
|
||||
UNINSTALLED_SUCCESS :=
|
||||
@@ -22,10 +22,17 @@
|
||||
# #
|
||||
#########################################
|
||||
|
||||
# speficy c compiler (cc)
|
||||
PMT_CC ?=
|
||||
|
||||
# speficy ar
|
||||
PMT_AR ?=
|
||||
|
||||
# addionital compiler flags
|
||||
EXTRA_COMPILER_FLAGS ?=
|
||||
PMT_EXTRA_CFLAGS ?=
|
||||
|
||||
# debugging mode (binary)
|
||||
ENABLE_DEBUGGING ?= false
|
||||
# debugging mode (binary). it's enabling address sanitizer and source level debug information with dwarf version 5
|
||||
PMT_ENABLE_DEBUG ?=
|
||||
|
||||
# end of environment configuration
|
||||
#########################################
|
||||
#########################################
|
||||
@@ -1,6 +1,6 @@
|
||||
Source: pmt
|
||||
Package: pmt
|
||||
Version: 2.4.0
|
||||
Version: 2.5.0
|
||||
Architecture: arm
|
||||
Description: pmt is for reading, writing and formatting partitions of android devices
|
||||
Section: misc
|
||||
@@ -1,6 +1,6 @@
|
||||
Source: pmt
|
||||
Package: pmt
|
||||
Version: 2.4.0
|
||||
Version: 2.5.0
|
||||
Architecture: aarch64
|
||||
Description: pmt is for reading, writing and formatting partitions of android devices
|
||||
Section: misc
|
||||
99
build/deb/deb.mk
Executable file
99
build/deb/deb.mk
Executable file
@@ -0,0 +1,99 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#####
|
||||
# sub-make for making deb package
|
||||
#####
|
||||
|
||||
THIS_IS := debutils
|
||||
|
||||
# include needed variables
|
||||
include ../../Makefile.inc
|
||||
|
||||
TEMP_DIR := $(DEBUTILS_DIR)/template
|
||||
|
||||
ifeq ($(FOR_THIS),64)
|
||||
DEB_ARCH_NAME := arm64-v8a
|
||||
else ifeq ($(FOR_THIS),32)
|
||||
DEB_ARCH_NAME := armeabi-v7a
|
||||
endif
|
||||
|
||||
# controls the presence of file/directory. usage: $(call check_local,<FILE_OR_DIRECTORY_PATH>,<PACKAGE_STAT: 1, NULL>)
|
||||
define check_local
|
||||
# the first argument is taken and controlled by the file/directory with -e option
|
||||
if [ ! -e $1 ]; then \
|
||||
if [ $2 = 1 ]; then \
|
||||
printf " - Package not builded! Please build package and try again.\n"; \
|
||||
else \
|
||||
printf " ==> Not found: $1\n"; \
|
||||
fi; \
|
||||
if [ -d "$(TEMP_DIR)" ]; then \
|
||||
rm -rf $(TEMP_DIR); \
|
||||
fi; \
|
||||
exit 1; \
|
||||
fi;
|
||||
endef
|
||||
|
||||
# make deb package
|
||||
all:
|
||||
$(hide)printf " --------- Making deb package ---------\n"
|
||||
# remove template directory
|
||||
$(call erase,$(TEMP_DIR))
|
||||
$(hide)printf " - Checking files and directories (only neededs)...\n"
|
||||
# check some files and directories with parsing DEB_CHECKS variable
|
||||
$(foreach deb_chfile, \
|
||||
$(DEB_CHECKS), \
|
||||
$(call check_local,$(deb_chfile)) \
|
||||
)
|
||||
# check build status
|
||||
$(call check_local, \
|
||||
$(BINARY_DIR)/pmt, \
|
||||
1 \
|
||||
)
|
||||
# make template and output directories
|
||||
$(call mdir,$(TEMP_DIR),"y")
|
||||
$(call mdir,$(DEB_DIR),"y")
|
||||
$(hide)printf " - Copying files...\n"
|
||||
# prepare
|
||||
$(hide)cp -r $(DEBUTILS_DIR)/data $(TEMP_DIR) || exit 1
|
||||
$(hide)rm -f $(DEBTERMUX_USR)/share/man/man1/dummy
|
||||
$(hide)rm -f $(DEBTERMUX_USR)/bin/dummy
|
||||
$(call mdir,$(TEMP_DIR)/DEBIAN)
|
||||
$(hide)abort() { \
|
||||
if [ -d $(TEMP_DIR) ]; then \
|
||||
rm -rf $(TEMP_DIR); \
|
||||
fi; \
|
||||
if [ -d $(DEB_DIR) ]; then \
|
||||
rm -rf $(DEB_DIR); \
|
||||
fi; \
|
||||
exit 1; \
|
||||
}; \
|
||||
if [ ! "$(FOR_THIS)" = "64" ] && [ ! "$(FOR_THIS)" = "32" ]; then \
|
||||
printf " - İnvalid arch number: $(FOR_THIS)\n" && abort; \
|
||||
fi; \
|
||||
printf " - Selected arm-$(FOR_THIS) package control file.\n"; \
|
||||
cp $(DEBUTILS_DIR)/DEBIAN/control_$(FOR_THIS) $(TEMP_DIR)/DEBIAN/control || abort; \
|
||||
cp $(DEBUTILS_DIR)/mandoc/$(TARGET).8.gz $(DEBTERMUX_USR)/share/man/man8 || abort; \
|
||||
cp $(BINARY_DIR)/$(TARGET) $(DEBTERMUX_USR)/bin || abort; \
|
||||
printf " - Starting dpkg-deb...\n"; \
|
||||
sleep 2; \
|
||||
chmod -R 755 *; \
|
||||
dpkg-deb -b $(TEMP_DIR) $(DEB_DIR)/$(TARGET)-$(DEB_ARCH_NAME).deb || abort; \
|
||||
# cleanup template directory
|
||||
rm -rf $(TEMP_DIR); \
|
||||
printf " - Done!\n"
|
||||
|
||||
# end
|
||||
BIN
build/deb/mandoc/pmt.8.gz
Executable file
BIN
build/deb/mandoc/pmt.8.gz
Executable file
Binary file not shown.
135
build/main.mk
Executable file
135
build/main.mk
Executable file
@@ -0,0 +1,135 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
UPDATE_MAKEFILES = false
|
||||
|
||||
all:
|
||||
$(hide)# To save configuration, the makefile in the config directory
|
||||
$(MAKE_HIDE) $(SILENT) -C $(BUILD)/config || exit 1
|
||||
$(hide)# start the main build process
|
||||
$(MAKE_HIDE) $(SILENT) -C $(SOURCE_DIRNAME) INC_OLDENV=true || exit 1
|
||||
|
||||
# cleaner functions
|
||||
.PHONY: clean
|
||||
clean:
|
||||
$(hide)printf "Cleaning directories...\n"; \
|
||||
# cleanup out/binary
|
||||
$(hide)if [ -d $(BINARY_DIR) ]; then \
|
||||
printf "==> $(OUT_DIRNAME)/`basename $(BINARY_DIR)`\n"; \
|
||||
rm -rf "$(BINARY_DIR)"; \
|
||||
fi; \
|
||||
# cleanup out/package
|
||||
$(hide)if [ -d $(PACKAGE_DIR) ]; then \
|
||||
printf "==> $(OUT_DIRNAME)/`basename $(PACKAGE_DIR)`\n"; \
|
||||
rm -rf "$(PACKAGE_DIR)"; \
|
||||
fi; \
|
||||
# cleanup out/static_libs
|
||||
$(hide)if [ -d $(STATICLIB_DIR) ]; then \
|
||||
printf "==> $(OUT_DIRNAME)/`basename $(STATICLIB_DIR)`\n"; \
|
||||
rm -rf "$(STATICLIB_DIR)"; \
|
||||
fi; \
|
||||
# cleanup out/debpackage
|
||||
$(hide)if [ -d $(DEB_DIR) ]; then \
|
||||
printf "==> $(OUT_DIRNAME)/`basename $(DEB_DIR)`\n"; \
|
||||
rm -rf "$(DEB_DIR)"; \
|
||||
fi; \
|
||||
sleep 2; \
|
||||
# clean the objects by calling the receipt in the source directory
|
||||
$(MAKE_HIDE) $(SILENT) -C $(SOURCE_DIRNAME) clean INC_OLDENV=false || exit 1
|
||||
$(hide)sleep 1
|
||||
$(hide)printf "Success.\n"
|
||||
|
||||
# helper function
|
||||
.PHONY: help
|
||||
help:
|
||||
$(hide)printf " ------- Partition Manager help -------\n\n"
|
||||
$(hide)printf " Commands:\n"
|
||||
$(hide)printf " $(MAKE) ==> Build Partition Manager.\n"
|
||||
$(hide)printf " $(MAKE) deb ==> Generate debian package for termux.\n"
|
||||
$(hide)printf " $(MAKE) clean ==> Clear builded binary.\n"
|
||||
$(hide)printf " $(MAKE) install ==> It installs $(TARGET) into termux.\n"
|
||||
$(hide)printf " $(MAKE) uninstall ==> It uninstalls $(TARGET) into termux.\n"
|
||||
$(hide)printf " $(MAKE) gen-makefiles ==> Generate makefiles for build.\n"
|
||||
$(hide)printf " $(MAKE) gen-ndk-makefiles ==> Generate NDK makefiles for build.\n"
|
||||
$(hide)printf " $(MAKE) clean-makefiles ==> Cleanup makefiles.\n"
|
||||
$(hide)printf " $(MAKE) clean-ndk-makefiles ==> Cleanup NDK makefiles.\n"
|
||||
$(hide)printf " $(MAKE) update-makefiles ==> Re-generate makefiles.\n"
|
||||
$(hide)printf " $(MAKE) update-ndk-makefiles ==> Re-generate NDK makefiles.\n"
|
||||
$(hide)printf " $(MAKE) help ==> Display this help message.\n\n"
|
||||
|
||||
# deb maker
|
||||
.PHONY: deb
|
||||
deb:
|
||||
$(MAKE_HIDE) $(SILENT) -C $(DEBUTILS_DIR) -f deb.mk FOR_THIS=$(FOR_THIS) || exit 1
|
||||
$(hide)printf ""
|
||||
|
||||
# install pmt in to termux
|
||||
.PHONY: install
|
||||
install:
|
||||
$(MAKE_HIDE) $(SILENT) -C $(OUT_DIRNAME) install || exit 1
|
||||
|
||||
# uninstall pmt in to termux
|
||||
.PHONY: uninstall
|
||||
uninstall:
|
||||
$(MAKE_HIDE) $(SILENT) -C $(OUT_DIRNAME) uninstall || exit 1
|
||||
|
||||
# clean ndk makefiles
|
||||
.PHONY: gen-ndk-makefiles
|
||||
gen-ndk-makefiles:
|
||||
$(eval NDK_PROG = true)
|
||||
$(call save-gen-vars)
|
||||
$(call gen-ndk-mfiles)
|
||||
$(hide)printf ""
|
||||
|
||||
.PHONY: gen-makefiles
|
||||
gen-makefiles:
|
||||
$(call save-gen-vars)
|
||||
$(call gen-mfiles)
|
||||
$(hide)printf ""
|
||||
|
||||
.PHONY: update-ndk-makefiles
|
||||
update-ndk-makefiles:
|
||||
$(hide)printf " ------ Updating NDK makefiles ------ \n"
|
||||
$(eval NDK_PROG = true)
|
||||
$(eval UPDATE_MAKEFILES = true)
|
||||
$(call save-gen-vars)
|
||||
$(call clean-ndk-mfiles)
|
||||
$(call gen-ndk-mfiles)
|
||||
$(hide)printf ""
|
||||
|
||||
.PHONY: update-makefiles
|
||||
update-makefiles:
|
||||
$(hide)printf " ------ Updating makefiles ------ \n"
|
||||
$(eval UPDATE_MAKEFILES = true)
|
||||
$(call save-gen-vars)
|
||||
$(call clean-ndk-mfiles)
|
||||
$(call gen-mfiles)
|
||||
$(hide)printf ""
|
||||
|
||||
.PHONY: clean-ndk-makefiles
|
||||
clean-ndk-makefiles:
|
||||
$(eval NDK_PROG = true)
|
||||
$(call save-gen-vars)
|
||||
$(call clean-ndk-mfiles)
|
||||
$(hide)printf ""
|
||||
|
||||
.PHONY: clean-makefiles
|
||||
clean-makefiles:
|
||||
$(call save-gen-vars)
|
||||
$(call clean-mfiles)
|
||||
$(hide)printf ""
|
||||
|
||||
# end
|
||||
@@ -1,4 +1,4 @@
|
||||
# By YZBruh | ShawkTeam
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
@@ -14,23 +14,35 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
########
|
||||
# 2.5.0
|
||||
########
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
include $(LOCAL_PATH)/config/env.mk
|
||||
include $(LOCAL_PATH)/../build/config/env.mk
|
||||
|
||||
PMT_CFLAGS = -O3 -std=c11 -Wall $(EXTRA_COMPILER_FLAGS)
|
||||
PMT_CFLAGS = \
|
||||
-O3 \
|
||||
-std=c11 \
|
||||
-pedantic \
|
||||
-Wall \
|
||||
-Wextra \
|
||||
-Werror \
|
||||
-Wno-nullability-extension \
|
||||
-Wno-gnu-zero-variadic-macro-arguments \
|
||||
-D__NDK_BUILD \
|
||||
$(EXTRA_COMPILER_FLAGS)
|
||||
|
||||
ifeq ($(ENABLE_DEBUGGING), true)
|
||||
PMT_CFLAGS += -g -Wextra
|
||||
else
|
||||
$(warning Unknown debugging flag: $(ENABLE_DEBUGGING). Please see: src/config/env.mk. Using non-debugging flags)
|
||||
ifneq ($(PMT_ENABLE_DEBUG),)
|
||||
PMT_CFLAGS += -gdwarf-5 -fsanitize=address
|
||||
endif
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE := libpmt_root
|
||||
LOCAL_SRC_FILES := root.c
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include
|
||||
LOCAL_CFLAGS := $(PMT_CFLAGS)
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
@@ -39,7 +51,7 @@ include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE := libpmt_debugging
|
||||
LOCAL_SRC_FILES := debugging.c
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include
|
||||
LOCAL_CFLAGS := $(PMT_CFLAGS)
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
@@ -48,7 +60,7 @@ include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE := libpmt_partitiontool
|
||||
LOCAL_SRC_FILES := partitiontool.c
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include
|
||||
LOCAL_CFLAGS := $(PMT_CFLAGS)
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
@@ -57,7 +69,7 @@ include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE := libpmt_list
|
||||
LOCAL_SRC_FILES := listpart.c
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include
|
||||
LOCAL_CFLAGS := $(PMT_CFLAGS)
|
||||
|
||||
include $(BUILD_STATIC_LIBRARY)
|
||||
@@ -73,7 +85,7 @@ LOCAL_SRC_FILES := \
|
||||
lang_tools.c \
|
||||
languages.c \
|
||||
docs.c
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include
|
||||
LOCAL_STATIC_LIBRARIES := \
|
||||
libpmt_root \
|
||||
libpmt_debugging \
|
||||
@@ -1,4 +1,4 @@
|
||||
# By YZBruh | ShawkTeam
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
@@ -14,6 +14,10 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
########
|
||||
# 2.5.0
|
||||
########
|
||||
|
||||
# architecture
|
||||
APP_ABI := \
|
||||
arm64-v8a \
|
||||
@@ -23,4 +27,4 @@ APP_PLATFORM := android-21
|
||||
|
||||
APP_OPTIM := release
|
||||
|
||||
# end
|
||||
# end
|
||||
26
build/others/makefile.main
Executable file
26
build/others/makefile.main
Executable file
@@ -0,0 +1,26 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
THIS_IS = main
|
||||
NDK_PROG ?= false
|
||||
FORCE_GEN ?= false
|
||||
|
||||
# include needed variables
|
||||
include Makefile.inc
|
||||
include $(TOOLS)/gen-makefiles.mk
|
||||
include $(TOOLS)/clean-makefiles.mk
|
||||
|
||||
include $(BUILD)/main.mk
|
||||
126
build/others/makefile.outdir
Executable file
126
build/others/makefile.outdir
Executable file
@@ -0,0 +1,126 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#####
|
||||
# sub-make for installing-uninstalling
|
||||
#####
|
||||
|
||||
THIS_IS := out
|
||||
|
||||
# include needed variables
|
||||
include ../Makefile.inc
|
||||
-include $(BUILD)/config/INS_STAT.mk
|
||||
-include $(BUILD)/config/UNINS_STAT.mk
|
||||
|
||||
# create an empty target
|
||||
all:
|
||||
$(hide)printf ""
|
||||
|
||||
# installer
|
||||
.PHONY: install
|
||||
install:
|
||||
# really termux?
|
||||
$(hide)if [ -f $(TERMUX_BIN)/termux-open ]; then \
|
||||
printf " ------------ $(TARGET) installer ------------ \n"; \
|
||||
if [ -f $(TERMUX_BIN)/$(TARGET) ]; then \
|
||||
printf " - $(TARGET) already installed\n"; \
|
||||
exit; \
|
||||
fi; \
|
||||
if [ ! "$(INSTALL_SUCCESS)" = "true" ] && [ ! "$(INSTALL_SUCCESS)" = "" ]; then \
|
||||
printf " - $(YELLOW)$(BOLD)Warning:$(BOLD_RESET)$(RESET) a previously-stayed failed installation process found\n"; \
|
||||
fi; \
|
||||
if [ -f $(DEB_DIR)/*.deb ]; then \
|
||||
printf " - The created deb pack was found. It's setup...\n"; \
|
||||
cd $(DEB_DIR) || exit 1; \
|
||||
apt install ./*.deb || exit 1; \
|
||||
if [ ! "$?" = "0" ]; then \
|
||||
cd $(CUR_DIR); \
|
||||
printf " - Success.\n\n"; \
|
||||
echo "INSTALL_SUCCESS := true" > $(BUILD)/config/INS_STAT.mk; \
|
||||
echo "UNINSTALLED_SUCCESS := " > $(BUILD)/config/UNINS_STAT.mk; \
|
||||
cd ..; \
|
||||
exit 0; \
|
||||
else \
|
||||
cd $(CUR_DIR); \
|
||||
printf " - $(RED)$(BOLD)Error:$(BOLD_RESET)$(RESET) installing failed!\n"; \
|
||||
echo "INSTALL_SUCCESS := false" > $(BUILD)/config/INS_STAT.mk; \
|
||||
cd ..; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
if [ ! -f $(BINARY_DIR)/$(TARGET) ]; then \
|
||||
printf " - $(RED)$(BOLD)Error:$(BOLD_RESET)$(RESET) Package not builded! Please build package and try again \n"; \
|
||||
echo "INSTALL_SUCCESS := false" > $(BUILD)/config/INS_STAT.mk; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
printf " - Installing binary...\n"; \
|
||||
if [ "`cp $(BINARY_DIR)/$(TARGET) /data/data/com.termux/files/usr/bin/$(TARGET)`" = "" ]; then \
|
||||
printf " - Setting up permissions...\n"; \
|
||||
else \
|
||||
echo "INSTALL_SUCCESS := false" > $(BUILD)/config/INS_STAT.mk; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [ "`chmod 777 $(TERMUX_BIN)/$(TARGET)`" = "" ]; then \
|
||||
printf " - Saving current status...\n"; \
|
||||
echo "INSTALL_SUCCESS := true" > $(BUILD)/config/INS_STAT.mk; \
|
||||
else \
|
||||
echo "INSTALL_SUCCESS := false" > $(BUILD)/config/INS_STAT.mk; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
printf " - Success.\n\n"; \
|
||||
echo "INSTALL_SUCCESS := true" > $(BUILD)/config/INS_STAT.mk; \
|
||||
echo "UNINSTALLED_SUCCESS := " > $(BUILD)/config/UNINS_STAT.mk; \
|
||||
else \
|
||||
printf " - $(RED)$(BOLD)Error:$(BOLD_RESET)$(RESET) This function is only available on Termux.\n"; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
# uninstaller
|
||||
.PHONY: uninstall
|
||||
uninstall:
|
||||
# really termux?
|
||||
$(hide)if [ -f $(TERMUX_BIN)/termux-open ]; then \
|
||||
printf " ----------- $(TARGET) uninstaller ----------- \n"; \
|
||||
if [ ! -f $(TERMUX_BIN)/$(TARGET) ]; then \
|
||||
printf " - $(TARGET) already uninstalled\n"; \
|
||||
exit; \
|
||||
fi; \
|
||||
if [ ! "$(UNINSTALL_SUCCESS)" = "true" ] && [ ! "$(UNINSTALL_SUCCESS)" = "" ]; then \
|
||||
printf " - $(YELLOW)$(BOLD)Warning:$(BOLD_RESET)$(RESET) a previously-stayed failed uninstallation process found\n"; \
|
||||
fi; \
|
||||
if [ -f $(TERMUX_USR)/share/man/man8/$(TARGET).8.gz ]; then \
|
||||
printf " - It was found to be established by $(TARGET)'s deb pack. It's removed with apt...\n"; \
|
||||
apt remove -y $(TARGET) || exit 1; \
|
||||
printf " - Success.\n\n"; \
|
||||
echo "UNINSTALLED_SUCCESS := true" > $(BUILD)/config/UNINS_STAT.mk; \
|
||||
echo "INSTALL_SUCCESS := " > $(BUILD)/config/INS_STAT.mk; \
|
||||
else \
|
||||
printf " - It was found that pmt was manually established (with this makefile or copying). Manually removed...\n"; \
|
||||
if [ "`rm $(TERMUX_BIN)/$(TARGET)`" = "" ]; then \
|
||||
printf " - Success.\n\n"; \
|
||||
echo "UNINSTALLED_SUCCESS := true" > $(BUILD)/config/UNINS_STAT.mk; \
|
||||
echo "INSTALL_SUCCESS := " > $(BUILD)/config/INS_STAT.mk; \
|
||||
else \
|
||||
echo "UNINSTALLED_SUCCESS := false" > $(BUILD)/config/UNINS_STAT.mk; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
else \
|
||||
printf "$(RED)$(BOLD)Error:$(BOLD_RESET)$(RESET) This function is only available on Termux.\n"; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
# end
|
||||
161
build/others/makefile.sourcedir
Executable file
161
build/others/makefile.sourcedir
Executable file
@@ -0,0 +1,161 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#####
|
||||
# sub-make for building package
|
||||
#####
|
||||
|
||||
THIS_IS = src
|
||||
|
||||
include ../Makefile.inc
|
||||
|
||||
ifeq ($(INC_OLDENV),true)
|
||||
include $(BUILD)/config/oldenv.mk
|
||||
endif
|
||||
|
||||
# make objects. Usage $(call make_obj,<SRCFILE>)
|
||||
define make_obj
|
||||
$(eval OBJ := $(1:.c=.o))
|
||||
$(call m_stat,CC,`basename $(SOURCE_DIR)`/`basename $(OBJ)`,n)
|
||||
$(CC) $(CFLAGS) -c "$1" || exit 1;
|
||||
$(hide)printf "\n"
|
||||
endef
|
||||
|
||||
# make executable file with using static libraries and objects. Usage: $(call make_executable)
|
||||
define make_executable
|
||||
printf " - Making executable file...\n"; \
|
||||
printf " LD $(TARGET)"; \
|
||||
$(CC) $(CFLAGS) -L$(SOURCE_DIR) \
|
||||
$(foreach s_obj_b, \
|
||||
$(shell basename -a $(STATICLIB_OBJS)), \
|
||||
$(eval s_obj_t_b = $(s_obj_b:.o=)) \
|
||||
$(shell echo -lpmt_$(s_obj_t_b)) \
|
||||
) \
|
||||
-o $(TARGET) $(OBJS_EXEC) || exit 1;
|
||||
endef
|
||||
|
||||
# make static library. Usage $(call make_staticlib,<LIBRARY_NAME>,<OBJECT(S)>)
|
||||
define make_staticlib
|
||||
echo -n " AR $1"; \
|
||||
$(AR) rcs "$1" "$2" || exit 1; \
|
||||
echo;
|
||||
endef
|
||||
|
||||
# controls the presence of source file. usage: $(call check_cfile,<SOURCE_FILE>)
|
||||
define check_cfile
|
||||
# the first argument is taken and controlled by the file with -f option
|
||||
printf " CHK src/`basename $1`\n"; \
|
||||
if [ ! -f $1 ]; then \
|
||||
printf " ==> Couldn't found required source file: src/`basename $1`\n"; \
|
||||
if [ -d "$(TEMP_DIR)" ]; then \
|
||||
rm -rf $(TEMP_DIR); \
|
||||
fi; \
|
||||
exit 1; \
|
||||
fi;
|
||||
endef
|
||||
|
||||
# controls the presence of header file. usage: $(call check_hfile,<SOURCE_FILE>)
|
||||
define check_hfile
|
||||
# the first argument is taken and controlled by the file with -f option
|
||||
printf " CHK include/pmt/`basename $1`\n"; \
|
||||
if [ ! -f $1 ]; then \
|
||||
printf " ==> Couldn't found required header file: include/pmt/`basename $1`\n"; \
|
||||
if [ -d "$(TEMP_DIR)" ]; then \
|
||||
rm -rf $(TEMP_DIR); \
|
||||
fi; \
|
||||
exit 1; \
|
||||
fi;
|
||||
endef
|
||||
|
||||
# all target for building
|
||||
all:
|
||||
$(hide)rm -f $(BUILD)/config/oldenv.mk
|
||||
$(hide)printf " ---- Partition Manager Builder ---- \n\n"
|
||||
$(hide)printf " - Version: $(VERSION)\n"
|
||||
$(hide)printf " - Version code: $(VERSION_CODE)\n\n"
|
||||
$(hide)printf " -------------------------------- \n\n"
|
||||
$(hide)if [ -f $(SOURCE_DIR)/debugging.o ]; then \
|
||||
printf " - Please clean up before you build it.\n\n"; \
|
||||
printf " ----------------------------------- \n"; \
|
||||
exit 1; \
|
||||
fi
|
||||
$(hide)printf " - Checking required source files...\n"
|
||||
$(hide)sleep 1
|
||||
$(foreach src_cf, \
|
||||
$(SRCS_REQ), \
|
||||
$(call check_cfile,$(src_cf)) \
|
||||
)
|
||||
$(foreach src_hf, \
|
||||
$(HEADERS_REQ), \
|
||||
$(call check_hfile,$(src_hf)) \
|
||||
)
|
||||
$(hide)printf " - Building objects...\n"
|
||||
$(hide)sleep 2
|
||||
$(foreach csrc, \
|
||||
$(SRCS), \
|
||||
$(call make_obj,$(csrc)) \
|
||||
)
|
||||
$(foreach reqdir,$(IN_OUT_DIR),$(call mdir,$(reqdir)))
|
||||
$(hide)printf " - Making static libraries...\n"
|
||||
$(foreach s_obj, \
|
||||
$(shell basename -a $(STATICLIB_OBJS)), \
|
||||
$(eval s_obj_t = $(s_obj:.o=.a)) \
|
||||
$(call make_staticlib,libpmt_$(s_obj_t),$(s_obj)) \
|
||||
)
|
||||
$(hide)sleep 1
|
||||
$(call make_executable)
|
||||
$(hide)sleep 1
|
||||
$(hide)abort_build() { \
|
||||
if [ -d "$(PACKAGE_DIR)" ]; then \
|
||||
rm -rf "$(PACKAGE_DIR)"; \
|
||||
fi; \
|
||||
if [ -d "$(BINARY_DIR)" ]; then \
|
||||
rm -rf "$(BINARY_DIR)"; \
|
||||
fi; \
|
||||
if [ -d "$(STATICLIB_DIR)" ]; then \
|
||||
rm -rf "$(STATICLIB_DIR)"; \
|
||||
fi; \
|
||||
exit 1; \
|
||||
}; \
|
||||
mv $(TARGET) $(BINARY_DIR) || abort_build; \
|
||||
mv *.a $(STATICLIB_DIR) || abort_build; \
|
||||
printf "\n - Generating package...\n"; \
|
||||
cp $(BINARY_DIR)/$(TARGET) $(PACKAGE_DIR) || abort_build; \
|
||||
printf " XZ $(OUT_DIRNAME)/package/$(TARGET)-$(ARCH).xz"
|
||||
xz $(PACKAGE_DIR)/$(TARGET) || abort_build; \
|
||||
sleep 1; \
|
||||
mv $(PACKAGE_DIR)/$(TARGET).xz $(PACKAGE_DIR)/$(TARGET)-$(ARCH).xz || abort_build; \
|
||||
printf "\n - Success"; \
|
||||
sleep 1; \
|
||||
printf "\n\n ----------------------------------- \n"
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
$(eval STATICLIBS = $(wildcard $(SOURCE_DIR)/*.a))
|
||||
$(eval OBJS = $(wildcard $(SOURCE_DIR)/*.o))
|
||||
$(info Cleaning files...)
|
||||
$(foreach obj, \
|
||||
$(OBJS), \
|
||||
$(call m_stat_nn,$(SOURCE_DIRNAME)/$(shell basename $(obj))) \
|
||||
$(call erase,$(obj)) \
|
||||
)
|
||||
$(foreach lib, \
|
||||
$(STATICLIBS), \
|
||||
$(call m_stat_nn,$(SOURCE_DIRNAME)/$(shell basename $(lib))) \
|
||||
$(call erase,$(lib)) \
|
||||
)
|
||||
|
||||
# end
|
||||
31
build/tools/clean-makefiles.mk
Executable file
31
build/tools/clean-makefiles.mk
Executable file
@@ -0,0 +1,31 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
##################
|
||||
# See "erase" funtion for build/util/utils.mk
|
||||
##################
|
||||
|
||||
include $(TOOLS)/save-gen-vars.mk
|
||||
|
||||
define clean-ndk-mfiles
|
||||
$(hide)[ "$(UPDATE_MAKEFILES)" = "true" ] || printf " ------ Cleaning NDK Makefiles ------ \n"
|
||||
$(hide)cat $(BASH_DIR)/clean-makefiles | $(BIN)/bash
|
||||
endef
|
||||
|
||||
define clean-mfiles
|
||||
$(hide)[ "$(UPDATE_MAKEFILES)" = "true" ] || printf " ------ Cleaning Makefiles ------ \n"
|
||||
$(hide)cat $(BASH_DIR)/clean-makefiles | $(BIN)/bash
|
||||
endef
|
||||
31
build/tools/gen-makefiles.mk
Executable file
31
build/tools/gen-makefiles.mk
Executable file
@@ -0,0 +1,31 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
##################
|
||||
# See "save-gen-vars" funtion for build/tools/save-gen-vars.mk
|
||||
##################
|
||||
|
||||
include $(TOOLS)/save-gen-vars.mk
|
||||
|
||||
define gen-ndk-mfiles
|
||||
$(hide)[ "$(UPDATE_MAKEFILES)" = "true" ] || printf " ------ Generating NDK Makefiles ------ \n"
|
||||
$(hide)cat $(BASH_DIR)/gen-makefiles | $(BIN)/bash
|
||||
endef
|
||||
|
||||
define gen-mfiles
|
||||
$(hide)[ "$(UPDATE_MAKEFILES)" = "true" ] || printf " ------ Generating Makefiles ------ \n"
|
||||
$(hide)cat $(BASH_DIR)/gen-makefiles | $(BIN)/bash
|
||||
endef
|
||||
26
build/tools/save-gen-vars.mk
Executable file
26
build/tools/save-gen-vars.mk
Executable file
@@ -0,0 +1,26 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
define save-gen-vars
|
||||
$(hide)rm -f $(BASH_DIR)/additional-vars
|
||||
$(call touch,$(BASH_DIR)/additional-vars)
|
||||
$(hide)echo "NDK_PROG=$(NDK_PROG)" >> $(BASH_DIR)/additional-vars
|
||||
$(hide)echo "FORCE_GEN=$(FORCE_GEN)" >> $(BASH_DIR)/additional-vars
|
||||
$(hide)echo "THIS_IS=$(THIS_IS)" >> $(BASH_DIR)/additional-vars
|
||||
$(hide)echo "UPDATE_MAKEFILES=$(UPDATE_MAKEFILES)" >> $(BASH_DIR)/additional-vars
|
||||
$(hide)echo "SOURCE_DIRNAME=$(SOURCE_DIRNAME)" >> $(BASH_DIR)/additional-vars
|
||||
$(hide)echo "OUT_DIRNAME=$(OUT_DIRNAME)" >> $(BASH_DIR)/additional-vars
|
||||
endef
|
||||
24
build/tools/update-makefiles.mk
Executable file
24
build/tools/update-makefiles.mk
Executable file
@@ -0,0 +1,24 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
ifneq ($(THIS_IS),main)
|
||||
$(error The caller is not the main makefile. Something's wrong)
|
||||
endif
|
||||
|
||||
UPDATE_MAKEFILES = true
|
||||
|
||||
include $(TOOLS)/clean-makefiles.mk
|
||||
include $(TOOLS)/gen-makefiles.mk
|
||||
58
build/util/utils.mk
Executable file
58
build/util/utils.mk
Executable file
@@ -0,0 +1,58 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# generate any text based empty file. Usage: $(call touch,<PATH>)
|
||||
define touch
|
||||
$(hide)[ ! "$(FORCE_GEN)" = "true" ] || rm -f "$1"
|
||||
$(hide)touch "$1" || exit 1
|
||||
endef
|
||||
|
||||
# copy files. Usage: $(call copy,<SOURCE>,<COPY_PATH>)
|
||||
define copy
|
||||
cp "$1" "$2" || exit 1
|
||||
endef
|
||||
|
||||
# copy dirs. Usage: $(call copydir,<SOURCE>,<COPY_PATH>)
|
||||
define copydir
|
||||
cp -r "$1" "$2" || exit 1
|
||||
endef
|
||||
|
||||
# file/dir are deleted. usage: $(call erase,<file/directory>)
|
||||
define erase
|
||||
rm -rf "$1"
|
||||
endef
|
||||
|
||||
# make directories. usage: $(call mdir,<PATH>,<PRINTSTATUS=y/NULL>)
|
||||
define mdir
|
||||
[ -z $2 ] || printf " - Generating `basename $1` dir...\n"; \
|
||||
mkdir -p "$1" || exit 1;
|
||||
endef
|
||||
|
||||
# make status. usage: $(call m_stat,"<MESSAGE>",<NEW_LINE_STATE: RANDOM>)
|
||||
define m_stat
|
||||
printf " $1 $2"
|
||||
endef
|
||||
|
||||
# make status (not newline and using make functions). usage: $(call m_stat_nn,"<MESSAGE>")
|
||||
define m_stat_nn
|
||||
$(info ==> $(1))
|
||||
endef
|
||||
|
||||
# Get file content and if speficed write target, write speficed file. Usage: $(call cat,<SOURCE>,<WRITE_PATH>)
|
||||
define cat
|
||||
[ -z "$2" ] && cat "$1" || exit 1
|
||||
[ -n "$2" ] && cat "$1" >> "$2" || exit 1
|
||||
endef
|
||||
5
build/workflow/build.config
Executable file
5
build/workflow/build.config
Executable file
@@ -0,0 +1,5 @@
|
||||
export PMT_VERSION="2.5.0"
|
||||
export PMT_VERSION_CODE=250
|
||||
export NDK_LINK="https://dl.google.com/android/repository/android-ndk-r27-linux.zip"
|
||||
export NDK_VERSION="r27"
|
||||
export NDK_IS="android-ndk"
|
||||
14
build/workflow/relnotes
Executable file
14
build/workflow/relnotes
Executable file
@@ -0,0 +1,14 @@
|
||||
echo -e "Compiled with clang
|
||||
|
||||
${CC_VERSION}
|
||||
|
||||
VERSION: \`${PMT_VERSION}\`
|
||||
VERSION CODE: \`${PMT_VERSION_CODE}\`
|
||||
TARGET ARCHITECTURE: \`arm64-v8a\` (64-bit) and \`armeabi-v7a\` (32-bit)
|
||||
|
||||
Notes:
|
||||
Builded with Android NDK ${NDK_VERSION}
|
||||
Packages are compressed with xz.
|
||||
Builded debian packages for termux.
|
||||
Report bugs and suggestions.
|
||||
[Click](https://github.com/ShawkTeam/pmt/blob/${PMT_VERSION}/CHANGELOG.md) for viewing version ${PMT_VERSION} changelog."
|
||||
Binary file not shown.
99
include/pmt/deprecates.h
Executable file
99
include/pmt/deprecates.h
Executable file
@@ -0,0 +1,99 @@
|
||||
/* By YZBruh */
|
||||
|
||||
/**
|
||||
* Copyright 2024 Partition Manager
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef __PMT_DEPRECATED_H
|
||||
#define __PMT_DEPRECATED_H
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#define deprecated_opt 1
|
||||
#define changed_opt 2
|
||||
#define end_depr_pointer 0
|
||||
#define not_changed 0
|
||||
#define not_changed_long NULL
|
||||
|
||||
/* versions */
|
||||
#define v150 "1.5.0"
|
||||
#define v160 "1.6.0"
|
||||
#define v170 "1.7.0"
|
||||
#define v180 "1.8.0"
|
||||
#define v190 "1.9.0"
|
||||
#define v200 "2.0.0"
|
||||
#define v210 "2.1.0"
|
||||
#define v220 "2.2.0"
|
||||
#define v230 "2.3.0"
|
||||
#define v240 "2.4.0"
|
||||
#define v250 "2.5.0"
|
||||
#define vUNK NULL
|
||||
|
||||
struct pmt_deprecates {
|
||||
int depr_type;
|
||||
int option;
|
||||
int option_new;
|
||||
const char* option_long;
|
||||
const char* option_long_new;
|
||||
const char* depr_version;
|
||||
};
|
||||
|
||||
static void
|
||||
__deprecated_opt_handle(int opt, const char* opt_long, const char* depr_msg)
|
||||
{
|
||||
static char long_e_msg[250];
|
||||
|
||||
static struct pmt_deprecates depr_table[] = {
|
||||
{deprecated_opt, 'b', not_changed, "backup", not_changed_long, v210},
|
||||
{deprecated_opt, 'F', not_changed, "flash", not_changed_long, v210},
|
||||
{deprecated_opt, 'r', not_changed, "format", not_changed_long, v210},
|
||||
{deprecated_opt, 'L', not_changed, "license", not_changed_long, v250},
|
||||
{changed_opt, 'D', 'p', "list", not_changed_long, v210},
|
||||
{end_depr_pointer, not_changed, not_changed, not_changed_long, not_changed_long, vUNK}
|
||||
};
|
||||
|
||||
if (opt_long == NULL)
|
||||
sprintf(long_e_msg, "%s", current->not_changed_opt);
|
||||
else
|
||||
sprintf(long_e_msg, "%s", opt_long);
|
||||
|
||||
for (int optctrl = 0; depr_table[optctrl].depr_type != 0; optctrl++)
|
||||
{
|
||||
|
||||
if (depr_table[optctrl].depr_type == 1)
|
||||
{
|
||||
if (opt == depr_table[optctrl].option || strcmp(opt_long, depr_table[optctrl].option_long) == 0)
|
||||
LOGD("%s [%s]: -%c (%s): %s\n", current->depr_opt_str, depr_table[optctrl].depr_version, (char)depr_table[optctrl].option, depr_table[optctrl].option_long, depr_msg);
|
||||
|
||||
}
|
||||
else if (depr_table[optctrl].depr_type == 2)
|
||||
{
|
||||
if (opt == depr_table[optctrl].option || strcmp(opt_long, depr_table[optctrl].option_long) == 0)
|
||||
LOGD("%s [%s]: -%c (%s): %s\n", current->switched_opt_str, depr_table[optctrl].depr_version, (char)depr_table[optctrl].option, long_e_msg, depr_msg);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#define DEPR_HANDLE(x, y, z) __deprecated_opt_handle(x, y, z)
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif
|
||||
|
||||
/* end of code */
|
||||
@@ -16,11 +16,15 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef __PMT_DOCS_H
|
||||
#define __PMT_DOCS_H
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
void help(void);
|
||||
void licenses(void);
|
||||
|
||||
__END_DECLS
|
||||
|
||||
/* end */
|
||||
#endif
|
||||
|
||||
/* end */
|
||||
1
include/pmt/generated/clang-version.h
Executable file
1
include/pmt/generated/clang-version.h
Executable file
@@ -0,0 +1 @@
|
||||
#define __NDK_CC_VERSION__ ""
|
||||
@@ -20,52 +20,40 @@
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#if !defined(__PMT_H_)
|
||||
#ifndef __PMT_H_
|
||||
#define __PMT_H_
|
||||
|
||||
#define PMT_PACKAGE_NAME "Partition Manager"
|
||||
|
||||
#if defined(INC_MAIN_LIBS)
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <pmt-stringkeys.h>
|
||||
#ifdef INC_MAIN_LIBS
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#endif
|
||||
|
||||
#if defined(INC_GETOPT)
|
||||
#include <getopt.h>
|
||||
#ifdef INC_GETOPT
|
||||
#include <getopt.h>
|
||||
#endif
|
||||
|
||||
#if defined(INC_DIRENT)
|
||||
#include <dirent.h>
|
||||
#ifdef INC_DIRENT
|
||||
#include <dirent.h>
|
||||
#endif
|
||||
|
||||
#if defined(INC_STAT)
|
||||
#include <sys/stat.h>
|
||||
#ifdef INC_STAT
|
||||
#include <sys/stat.h>
|
||||
#endif
|
||||
|
||||
#if defined(INC_DEBUGERS)
|
||||
#include <errno.h>
|
||||
#ifdef INC_DEBUGERS
|
||||
#include <errno.h>
|
||||
#endif
|
||||
|
||||
#if defined(INC_PMT_LANGS)
|
||||
#include <pmt-langs.h>
|
||||
#endif
|
||||
|
||||
#if defined(INC_DOCS_REQS)
|
||||
#include <pmt-docs.h>
|
||||
#endif
|
||||
|
||||
#if defined(INC_VERSIONER_REQS)
|
||||
#include <pmt-versioning.h>
|
||||
#endif
|
||||
|
||||
#if defined(INC_TOOLS_REQS)
|
||||
#include <fcntl.h>
|
||||
#include <sys/statvfs.h>
|
||||
#ifdef INC_TOOLS_REQS
|
||||
#include <fcntl.h>
|
||||
#include <sys/statvfs.h>
|
||||
#endif
|
||||
|
||||
/* variable definations */
|
||||
@@ -109,9 +97,10 @@ void check_dev_point(void);
|
||||
void check_root(void);
|
||||
int pmt(unsigned short progress_code);
|
||||
void version(void);
|
||||
void setlang(const char* _Nonnull lang);
|
||||
void setlang(const char* _Nonnull lang, int null_conf_stat);
|
||||
int search_sls(void);
|
||||
char* _Nonnull loadlang(void);
|
||||
int loadlang(void);
|
||||
int get_stat(const char* _Nonnull filepath, const char* _Nonnull stype);
|
||||
void debug(LogLevel status, const char* _Nullable fmt, ...);
|
||||
|
||||
/* logging macros */
|
||||
@@ -16,7 +16,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if !defined(__PMT_STRINGKEYS_)
|
||||
#ifndef __PMT_STRINGKEYS_
|
||||
#define __PMT_STRINGKEYS_
|
||||
|
||||
__BEGIN_DECLS
|
||||
@@ -33,6 +33,7 @@ struct pmt_langdb_general {
|
||||
const char* _Nonnull not_open;
|
||||
const char* _Nonnull not_block;
|
||||
const char* _Nonnull not_read;
|
||||
const char* _Nonnull not_readdir;
|
||||
const char* _Nonnull not_write;
|
||||
const char* _Nonnull not_gen;
|
||||
const char* _Nonnull no_root;
|
||||
@@ -50,6 +51,12 @@ struct pmt_langdb_general {
|
||||
const char* _Nonnull ffile_more_part;
|
||||
const char* _Nonnull cannot_get_bsz;
|
||||
const char* _Nonnull format_fail;
|
||||
const char* _Nonnull depr_backup_opt;
|
||||
const char* _Nonnull depr_flash_opt;
|
||||
const char* _Nonnull depr_format_opt;
|
||||
const char* _Nonnull depr_Vlicense_opt;
|
||||
const char* _Nonnull depr_ch_list_opt;
|
||||
const char* _Nonnull not_spec_opt;
|
||||
const char* _Nonnull logical_warn;
|
||||
const char* _Nonnull ab_warn;
|
||||
const char* _Nonnull out_not_spec;
|
||||
@@ -58,8 +65,8 @@ struct pmt_langdb_general {
|
||||
const char* _Nonnull flash_file_sz;
|
||||
const char* _Nonnull part_disk_sz_fail;
|
||||
const char* _Nonnull flash_file_sz_fail;
|
||||
const char* _Nonnull unknown_opr;
|
||||
const char* _Nonnull list_of_dir;
|
||||
const char* _Nonnull see_license;
|
||||
const char* _Nonnull success_backup;
|
||||
const char* _Nonnull success_flash;
|
||||
const char* _Nonnull warn;
|
||||
@@ -70,6 +77,9 @@ struct pmt_langdb_general {
|
||||
const char* _Nonnull for_more;
|
||||
const char* _Nonnull try_h;
|
||||
const char* _Nonnull usage_head;
|
||||
const char* _Nonnull depr_opt_str;
|
||||
const char* _Nonnull switched_opt_str;
|
||||
const char* _Nonnull not_changed_opt;
|
||||
const char* _Nonnull compiler_str;
|
||||
const char* _Nonnull version_str;
|
||||
const char* _Nonnull bin_str;
|
||||
@@ -77,7 +87,7 @@ struct pmt_langdb_general {
|
||||
const char* _Nonnull by_str;
|
||||
};
|
||||
|
||||
/* docs, licenses etc. */
|
||||
/* docs etc. */
|
||||
struct pmt_langdb_docs {
|
||||
const char* _Nonnull docs_strs_l1;
|
||||
const char* _Nonnull docs_strs_l2;
|
||||
@@ -93,13 +103,17 @@ struct pmt_langdb_docs {
|
||||
const char* _Nonnull docs_strs_l12;
|
||||
const char* _Nonnull docs_strs_l13;
|
||||
const char* _Nonnull docs_strs_l14;
|
||||
const char* _Nonnull docs_strs_l15;
|
||||
const char* _Nonnull or_str;
|
||||
const char* _Nonnull usage_docstr;
|
||||
};
|
||||
|
||||
/* for checks etc */
|
||||
struct pmt_langdb_langs {
|
||||
const char* _Nullable lang_pr;
|
||||
};
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* __PMT_STRINGKEYS_ */
|
||||
|
||||
/* end of code */
|
||||
/* end of code */
|
||||
@@ -16,27 +16,23 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef __PMT_VERSIONING_H
|
||||
#define __PMT_VERSIONING_H
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#include <android/ndk-version.h>
|
||||
|
||||
#if __NDK_MINOR__ == 1
|
||||
#define __NDK_MINOR_STATUS__ "b"
|
||||
#else
|
||||
#define __NDK_MINOR_STATUS__ ""
|
||||
#endif
|
||||
|
||||
#if __NDK_BETA__ == 1 || __NDK_BETA__ == 2
|
||||
#define __NDK_BETA_STATUS__ "beta"
|
||||
#else
|
||||
#define __NDK_BETA_STATUS__ ""
|
||||
#ifdef __NDK_BUILD
|
||||
#include <android/ndk-version.h>
|
||||
#include <pmt/generated/clang-version.h>
|
||||
#endif
|
||||
|
||||
/* versioning */
|
||||
#define PMT_MAJOR 2
|
||||
#define PMT_MINOR 4
|
||||
#define PMT_MINOR 5
|
||||
#define PMT_PATCHLEVEL 0
|
||||
|
||||
__END_DECLS
|
||||
|
||||
/* end */
|
||||
#endif
|
||||
|
||||
/* end */
|
||||
161
jni/Makefile
Executable file
161
jni/Makefile
Executable file
@@ -0,0 +1,161 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#####
|
||||
# sub-make for building package
|
||||
#####
|
||||
|
||||
THIS_IS = src
|
||||
|
||||
include ../Makefile.inc
|
||||
|
||||
ifeq ($(INC_OLDENV),true)
|
||||
include $(BUILD)/config/oldenv.mk
|
||||
endif
|
||||
|
||||
# make objects. Usage $(call make_obj,<SRCFILE>)
|
||||
define make_obj
|
||||
$(eval OBJ := $(1:.c=.o))
|
||||
$(call m_stat,CC,`basename $(SOURCE_DIR)`/`basename $(OBJ)`,n)
|
||||
$(CC) $(CFLAGS) -c "$1" || exit 1;
|
||||
$(hide)printf "\n"
|
||||
endef
|
||||
|
||||
# make executable file with using static libraries and objects. Usage: $(call make_executable)
|
||||
define make_executable
|
||||
printf " - Making executable file...\n"; \
|
||||
printf " LD $(TARGET)"; \
|
||||
$(CC) $(CFLAGS) -L$(SOURCE_DIR) \
|
||||
$(foreach s_obj_b, \
|
||||
$(shell basename -a $(STATICLIB_OBJS)), \
|
||||
$(eval s_obj_t_b = $(s_obj_b:.o=)) \
|
||||
$(shell echo -lpmt_$(s_obj_t_b)) \
|
||||
) \
|
||||
-o $(TARGET) $(OBJS_EXEC) || exit 1;
|
||||
endef
|
||||
|
||||
# make static library. Usage $(call make_staticlib,<LIBRARY_NAME>,<OBJECT(S)>)
|
||||
define make_staticlib
|
||||
echo -n " AR $1"; \
|
||||
$(AR) rcs "$1" "$2" || exit 1; \
|
||||
echo;
|
||||
endef
|
||||
|
||||
# controls the presence of source file. usage: $(call check_cfile,<SOURCE_FILE>)
|
||||
define check_cfile
|
||||
# the first argument is taken and controlled by the file with -f option
|
||||
printf " CHK $(SOURCE_DIRNAME)/`basename $1`\n"; \
|
||||
if [ ! -f $1 ]; then \
|
||||
printf " ==> Couldn't found required source file: $(SOURCE_DIRNAME)/`basename $1`\n"; \
|
||||
if [ -d "$(TEMP_DIR)" ]; then \
|
||||
rm -rf $(TEMP_DIR); \
|
||||
fi; \
|
||||
exit 1; \
|
||||
fi;
|
||||
endef
|
||||
|
||||
# controls the presence of header file. usage: $(call check_hfile,<SOURCE_FILE>)
|
||||
define check_hfile
|
||||
# the first argument is taken and controlled by the file with -f option
|
||||
printf " CHK include/pmt/`basename $1`\n"; \
|
||||
if [ ! -f $1 ]; then \
|
||||
printf " ==> Couldn't found required header file: include/pmt/`basename $1`\n"; \
|
||||
if [ -d "$(TEMP_DIR)" ]; then \
|
||||
rm -rf $(TEMP_DIR); \
|
||||
fi; \
|
||||
exit 1; \
|
||||
fi;
|
||||
endef
|
||||
|
||||
# all target for building
|
||||
all:
|
||||
$(hide)rm -f $(BUILD)/config/oldenv.mk
|
||||
$(hide)printf " ---- Partition Manager Builder ---- \n\n"
|
||||
$(hide)printf " - Version: $(VERSION)\n"
|
||||
$(hide)printf " - Version code: $(VERSION_CODE)\n\n"
|
||||
$(hide)printf " -------------------------------- \n\n"
|
||||
$(hide)if [ -f $(SOURCE_DIR)/debugging.o ]; then \
|
||||
printf " - Please clean up before you build it.\n\n"; \
|
||||
printf " ----------------------------------- \n"; \
|
||||
exit 1; \
|
||||
fi
|
||||
$(hide)printf " - Checking required source files...\n"
|
||||
$(hide)sleep 1
|
||||
$(foreach src_cf, \
|
||||
$(SRCS_REQ), \
|
||||
$(call check_cfile,$(src_cf)) \
|
||||
)
|
||||
$(foreach src_hf, \
|
||||
$(HEADERS_REQ), \
|
||||
$(call check_hfile,$(src_hf)) \
|
||||
)
|
||||
$(hide)printf " - Building objects...\n"
|
||||
$(hide)sleep 2
|
||||
$(foreach csrc, \
|
||||
$(SRCS), \
|
||||
$(call make_obj,$(csrc)) \
|
||||
)
|
||||
$(foreach reqdir,$(IN_OUT_DIR),$(call mdir,$(reqdir)))
|
||||
$(hide)printf " - Making static libraries...\n"
|
||||
$(foreach s_obj, \
|
||||
$(shell basename -a $(STATICLIB_OBJS)), \
|
||||
$(eval s_obj_t = $(s_obj:.o=.a)) \
|
||||
$(call make_staticlib,libpmt_$(s_obj_t),$(s_obj)) \
|
||||
)
|
||||
$(hide)sleep 1
|
||||
$(call make_executable)
|
||||
$(hide)sleep 1
|
||||
$(hide)abort_build() { \
|
||||
if [ -d "$(PACKAGE_DIR)" ]; then \
|
||||
rm -rf "$(PACKAGE_DIR)"; \
|
||||
fi; \
|
||||
if [ -d "$(BINARY_DIR)" ]; then \
|
||||
rm -rf "$(BINARY_DIR)"; \
|
||||
fi; \
|
||||
if [ -d "$(STATICLIB_DIR)" ]; then \
|
||||
rm -rf "$(STATICLIB_DIR)"; \
|
||||
fi; \
|
||||
exit 1; \
|
||||
}; \
|
||||
mv $(TARGET) $(BINARY_DIR) || abort_build; \
|
||||
mv *.a $(STATICLIB_DIR) || abort_build; \
|
||||
printf "\n - Generating package...\n"; \
|
||||
cp $(BINARY_DIR)/$(TARGET) $(PACKAGE_DIR) || abort_build; \
|
||||
printf " XZ $(OUT_DIRNAME)/package/$(TARGET)-$(ARCH).xz"
|
||||
xz $(PACKAGE_DIR)/$(TARGET) || abort_build; \
|
||||
sleep 1; \
|
||||
mv $(PACKAGE_DIR)/$(TARGET).xz $(PACKAGE_DIR)/$(TARGET)-$(ARCH).xz || abort_build; \
|
||||
printf "\n - Success"; \
|
||||
sleep 1; \
|
||||
printf "\n\n ----------------------------------- \n"
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
$(eval STATICLIBS = $(wildcard $(SOURCE_DIR)/*.a))
|
||||
$(eval OBJS = $(wildcard $(SOURCE_DIR)/*.o))
|
||||
$(info Cleaning files...)
|
||||
$(foreach obj, \
|
||||
$(OBJS), \
|
||||
$(call m_stat_nn,$(SOURCE_DIRNAME)/$(shell basename $(obj))) \
|
||||
$(call erase,$(obj)) \
|
||||
)
|
||||
$(foreach lib, \
|
||||
$(STATICLIBS), \
|
||||
$(call m_stat_nn,$(SOURCE_DIRNAME)/$(shell basename $(lib))) \
|
||||
$(call erase,$(lib)) \
|
||||
)
|
||||
|
||||
# end
|
||||
@@ -1,4 +1,4 @@
|
||||
/* By YZBruh | ShawkTeam */
|
||||
/* By YZBruh */
|
||||
|
||||
/**
|
||||
* Copyright 2024 Partition Manager
|
||||
@@ -16,20 +16,14 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define INC_MAIN_LIBS
|
||||
|
||||
#include <pmt.h>
|
||||
|
||||
extern char* bin_name;
|
||||
extern bool pmt_silent;
|
||||
|
||||
extern struct pmt_langdb_general* current;
|
||||
extern struct pmt_langdb_general en;
|
||||
extern struct pmt_langdb_general tr;
|
||||
#include <pmt/pmt.h>
|
||||
#include <pmt/stringkeys.h>
|
||||
|
||||
void debug(LogLevel status, const char* _Nullable fmt, ...)
|
||||
{
|
||||
@@ -72,7 +66,7 @@ void debug(LogLevel status, const char* _Nullable fmt, ...)
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
42
jni/docs.c
42
jni/docs.c
@@ -1,4 +1,4 @@
|
||||
/* By YZBruh | ShawkTeam */
|
||||
/* By YZBruh */
|
||||
|
||||
/*
|
||||
* Copyright 2024 Partition Manager
|
||||
@@ -16,47 +16,30 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define INC_MAIN_LIBS
|
||||
#define INC_DOCS_REQS
|
||||
|
||||
#include <pmt.h>
|
||||
#include <pmt/pmt.h>
|
||||
#include <pmt/stringkeys.h>
|
||||
#include <pmt/docs.h>
|
||||
|
||||
extern char* bin_name;
|
||||
extern char* pmt_langdb_langs_docs[];
|
||||
extern char* curr_lang;
|
||||
|
||||
struct pmt_langdb_docs* curr_docs = NULL;
|
||||
extern struct pmt_langdb_docs en_docs;
|
||||
extern struct pmt_langdb_docs tr_docs;
|
||||
|
||||
static void
|
||||
prepare_langconf_docs(void)
|
||||
{
|
||||
static char* langctrl_str;
|
||||
langctrl_str = loadlang();
|
||||
|
||||
if (strcmp(langctrl_str, "en") == 0)
|
||||
if (strcmp(curr_lang, "en") == 0)
|
||||
curr_docs = &en_docs;
|
||||
else if (strcmp(langctrl_str, "tr") == 0)
|
||||
else if (strcmp(curr_lang, "tr") == 0)
|
||||
curr_docs = &tr_docs;
|
||||
}
|
||||
|
||||
void licenses(void)
|
||||
{
|
||||
printf("Copyright 2024 Partition Manager\n");
|
||||
printf("Licensed under the Apache License, Version 2.0 (the \"License\");\n");
|
||||
printf("you may not use this file except in compliance with the License.\n");
|
||||
printf("You may obtain a copy of the License at\n\n");
|
||||
printf(" http://www.apache.org/licenses/LICENSE-2.0\n\n");
|
||||
printf("Unless required by applicable law or agreed to in writing, software\n");
|
||||
printf("distributed under the License is distributed on an \"AS IS\" BASIS,\n");
|
||||
printf("WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n");
|
||||
printf("See the License for the specific language governing permissions and limitations under the License.\n");
|
||||
}
|
||||
|
||||
void help(void)
|
||||
{
|
||||
prepare_langconf_docs();
|
||||
@@ -71,17 +54,16 @@ void help(void)
|
||||
printf(" -f, --force %s\n", curr_docs->docs_strs_l9);
|
||||
printf(" -S, --set-lang %s\n", curr_docs->docs_strs_l10);
|
||||
printf(" -v, --version %s\n", curr_docs->docs_strs_l11);
|
||||
printf(" --help %s\n", curr_docs->docs_strs_l12);
|
||||
printf(" -L, --license %s\n\n", curr_docs->docs_strs_l13);
|
||||
printf("%s:\n", curr_docs->docs_strs_l14);
|
||||
printf(" --help %s\n\n", curr_docs->docs_strs_l12);
|
||||
printf("%s:\n", curr_docs->docs_strs_l13);
|
||||
printf(" %s backup boot_a -c /dev/block/platform/bootdevice/by-name\n", bin_name);
|
||||
printf(" %s flash /sdcard/twrp/boot.img boot_a -c /dev/block/platform/bootdevice/by-name\n", bin_name);
|
||||
printf(" %s format ext4 system_a --logical\n", bin_name);
|
||||
printf(" %s -c /dev/block/platform/bootdevice/by-name --list\n\n", bin_name);
|
||||
printf("%s <t.me / ShawkTeam | Community / Topics -- pmt>\n", curr_docs->docs_strs_l15);
|
||||
printf("%s <t.me/ShawkTeam | Topics | pmt>\n", curr_docs->docs_strs_l14);
|
||||
}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* By YZBruh | ShawkTeam */
|
||||
/* By YZBruh */
|
||||
|
||||
/**
|
||||
* Copyright 2024 Partition Manager
|
||||
@@ -16,14 +16,15 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define INC_MAIN_LIBS
|
||||
#define INC_STAT
|
||||
|
||||
#include <pmt.h>
|
||||
#include <pmt/pmt.h>
|
||||
#include <pmt/stringkeys.h>
|
||||
|
||||
/**
|
||||
* The target file is controlled by the stat function.
|
||||
@@ -71,7 +72,7 @@ int get_stat(const char* _Nonnull filepath, const char* _Nonnull stype)
|
||||
return 2;
|
||||
}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
193
jni/lang_tools.c
193
jni/lang_tools.c
@@ -1,4 +1,4 @@
|
||||
/* By YZBruh | ShawkTeam */
|
||||
/* By YZBruh */
|
||||
|
||||
/**
|
||||
* Copyright 2024 Partition Manager
|
||||
@@ -16,7 +16,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
@@ -24,45 +24,35 @@ extern "C" {
|
||||
#define INC_DEBUGERS
|
||||
#define INC_STAT
|
||||
|
||||
#include <pmt.h>
|
||||
#include <pmt/pmt.h>
|
||||
#include <pmt/stringkeys.h>
|
||||
|
||||
/* pmt's man doc file path on termux */
|
||||
#define TERMUX_PMT_MANDOC "/data/data/com.termux/files/usr/share/man/man8/pmt.8.gz"
|
||||
|
||||
/* language configuration paths */
|
||||
#define PMTLANG_CONF "/sdcard/.pmtlang.conf"
|
||||
|
||||
/* for termux */
|
||||
#define TERMUX_PMTLANG_CONF "/data/data/com.termux/files/usr/etc/pmtlang.conf"
|
||||
#define PMT_SW_POINT "/sdcard/.pmtlangsw"
|
||||
|
||||
/* for internal storage */
|
||||
#define INTRNL_PMTLANG_CONF "/sdcard/.pmtlang.conf"
|
||||
extern struct pmt_langdb_langs lang[];
|
||||
struct pmt_langdb_general* current = NULL;
|
||||
|
||||
/* shortcuts to check that language is changed */
|
||||
char* curr_lang;
|
||||
static FILE *langconf;
|
||||
|
||||
/* for termux */
|
||||
#define TERMUX_PMT_SW_POINT "/data/data/com.termux/files/usr/etc/pmtlangsw"
|
||||
|
||||
/* for internal storage */
|
||||
#define INTRNL_PMT_SW_POINT "/sdcard/.pmtlangsw"
|
||||
|
||||
extern bool pmt_inst_on_termux;
|
||||
extern char* bin_name;
|
||||
extern char* pmt_langdb_langs[];
|
||||
extern int pmt_langdb_total;
|
||||
extern int pmt_langdb_ctrl;
|
||||
|
||||
FILE *langconf;
|
||||
|
||||
static int
|
||||
static const char*
|
||||
langctrl(const char* _Nonnull lang_)
|
||||
{
|
||||
if (strcmp(lang_, "en") == 0 || strcmp(lang_, "tr") == 0)
|
||||
return 0;
|
||||
for (int langct = 0; lang[langct].lang_pr != NULL; langct++)
|
||||
{
|
||||
if (strcmp(lang_, lang[langct].lang_pr) == 0)
|
||||
return lang_;
|
||||
}
|
||||
|
||||
return 1;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char* loadlang(void)
|
||||
int loadlang(void)
|
||||
{
|
||||
static char lang_fpr[10] = "en";
|
||||
langconf = NULL;
|
||||
@@ -70,126 +60,88 @@ char* loadlang(void)
|
||||
if (get_stat(TERMUX_PMT_MANDOC, "file") == 0)
|
||||
pmt_inst_on_termux = true;
|
||||
|
||||
if (pmt_inst_on_termux)
|
||||
|
||||
langconf = fopen(PMTLANG_CONF, "r+");
|
||||
|
||||
if (langconf == NULL)
|
||||
{
|
||||
if (get_stat(TERMUX_PMTLANG_CONF, "file") == 0)
|
||||
langconf = fopen(PMTLANG_CONF, "w+");
|
||||
|
||||
if (langconf == NULL || langconf != NULL)
|
||||
{
|
||||
langconf = fopen(TERMUX_PMTLANG_CONF, "r+");
|
||||
setlang("en", 1);
|
||||
current = &en;
|
||||
curr_lang = "en";
|
||||
|
||||
if (langconf == NULL)
|
||||
{
|
||||
langconf = fopen(TERMUX_PMTLANG_CONF, "w+");
|
||||
if (langconf != NULL)
|
||||
fclose(langconf);
|
||||
|
||||
if (langconf == NULL)
|
||||
{
|
||||
setlang("en");
|
||||
return "en";
|
||||
}
|
||||
fclose(langconf);
|
||||
}
|
||||
else
|
||||
{
|
||||
while (fgets(lang_fpr, sizeof(lang_fpr), langconf) != NULL)
|
||||
{
|
||||
if (strcmp(lang_fpr, "en") == 0)
|
||||
{
|
||||
fclose(langconf);
|
||||
return "en";
|
||||
}
|
||||
else if (strcmp(lang_fpr, "tr") == 0)
|
||||
{
|
||||
fclose(langconf);
|
||||
return "tr";
|
||||
}
|
||||
}
|
||||
fclose(langconf);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if (get_stat(INTRNL_PMTLANG_CONF, "file") == 0)
|
||||
while (fgets(lang_fpr, sizeof(lang_fpr), langconf) != NULL)
|
||||
{
|
||||
langconf = fopen(INTRNL_PMTLANG_CONF, "r");
|
||||
|
||||
if (langconf == NULL)
|
||||
if (strcmp(lang_fpr, "en") == 0)
|
||||
{
|
||||
langconf = fopen(INTRNL_PMTLANG_CONF, "w+");
|
||||
|
||||
if (langconf == NULL)
|
||||
{
|
||||
setlang("en");
|
||||
return "en";
|
||||
}
|
||||
fclose(langconf);
|
||||
current = &en;
|
||||
curr_lang = "en";
|
||||
return 0;
|
||||
}
|
||||
else if (strcmp(lang_fpr, "tr") == 0)
|
||||
{
|
||||
fclose(langconf);
|
||||
current = &tr;
|
||||
curr_lang = "tr";
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
while (fgets(lang_fpr, sizeof(lang_fpr), langconf) != NULL)
|
||||
{
|
||||
if (strcmp(lang_fpr, "en") == 0)
|
||||
{
|
||||
fclose(langconf);
|
||||
return "en";
|
||||
}
|
||||
else if (strcmp(lang_fpr, "tr") == 0)
|
||||
{
|
||||
fclose(langconf);
|
||||
return "tr";
|
||||
}
|
||||
}
|
||||
fclose(langconf);
|
||||
setlang("en", 0);
|
||||
loadlang();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else return "en";
|
||||
|
||||
if (fgets(lang_fpr, sizeof(lang_fpr), langconf) == NULL)
|
||||
{
|
||||
setlang("en", 1);
|
||||
loadlang();
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return "en";
|
||||
return 1;
|
||||
}
|
||||
|
||||
void setlang(const char* _Nonnull lang)
|
||||
void setlang(const char* _Nonnull lang, int null_conf_stat)
|
||||
{
|
||||
static char* lcf_path;
|
||||
if (langctrl(lang) == NULL)
|
||||
LOGE("Unknown language: %s.\n", lang);
|
||||
|
||||
if (pmt_inst_on_termux)
|
||||
lcf_path = TERMUX_PMTLANG_CONF;
|
||||
else
|
||||
lcf_path = INTRNL_PMTLANG_CONF;
|
||||
|
||||
if (get_stat(lcf_path, "file") == 0)
|
||||
remove(lcf_path);
|
||||
if (get_stat(PMTLANG_CONF, "file") == 0)
|
||||
remove(PMTLANG_CONF);
|
||||
|
||||
langconf = NULL;
|
||||
|
||||
if (pmt_inst_on_termux)
|
||||
langconf = fopen(TERMUX_PMTLANG_CONF, "w");
|
||||
else
|
||||
langconf = fopen(INTRNL_PMTLANG_CONF, "w");
|
||||
langconf = fopen(PMTLANG_CONF, "w");
|
||||
|
||||
if (langconf == NULL)
|
||||
LOGE("Failed!!! Cannot open/write config file.\n");
|
||||
|
||||
if (langctrl(lang) == 0)
|
||||
{
|
||||
if (fprintf(langconf, "%s", lang) < 2)
|
||||
LOGE("Failed!!! Couldn't write config!\n");
|
||||
else
|
||||
fclose(langconf);
|
||||
}
|
||||
if (fprintf(langconf, "%s", lang) < 2)
|
||||
LOGE("Failed!!! Couldn't write config!\n");
|
||||
else
|
||||
LOGE("Unknown language: %s.\n", lang);
|
||||
fclose(langconf);
|
||||
|
||||
static int status;
|
||||
|
||||
if (pmt_inst_on_termux)
|
||||
if (null_conf_stat != 1)
|
||||
{
|
||||
status = open(TERMUX_PMT_SW_POINT, O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
||||
if (status == 0)
|
||||
close(status);
|
||||
}
|
||||
else
|
||||
{
|
||||
status = open(INTRNL_PMT_SW_POINT, O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
||||
status = open(PMT_SW_POINT, O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
||||
if (status == 0)
|
||||
close(status);
|
||||
}
|
||||
@@ -197,23 +149,16 @@ void setlang(const char* _Nonnull lang)
|
||||
|
||||
int search_sls(void)
|
||||
{
|
||||
static char* sw_point_path;
|
||||
|
||||
if (pmt_inst_on_termux)
|
||||
sw_point_path = TERMUX_PMT_SW_POINT;
|
||||
else
|
||||
sw_point_path = INTRNL_PMT_SW_POINT;
|
||||
|
||||
if (get(sw_point_path, "file") == 0)
|
||||
if (get_stat(PMT_SW_POINT, "file") == 0)
|
||||
{
|
||||
remove(sw_point_path);
|
||||
remove(PMT_SW_POINT);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return 1;
|
||||
}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* By YZBruh | ShawkTeam */
|
||||
/* By YZBruh */
|
||||
|
||||
/**
|
||||
* Copyright 2024 Partition Manager
|
||||
@@ -16,13 +16,14 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define INC_MAIN_LIBS
|
||||
|
||||
#include <pmt.h>
|
||||
#include <pmt/pmt.h>
|
||||
#include <pmt/stringkeys.h>
|
||||
|
||||
struct pmt_langdb_general en = {
|
||||
.lang_by_s = "YZBruh & r0manas",
|
||||
@@ -35,10 +36,11 @@ struct pmt_langdb_general en = {
|
||||
.not_open = "Couldn't open",
|
||||
.not_block = "The specified partition is not recognized as a block device.",
|
||||
.not_read = "Couldn't read",
|
||||
.not_readdir = "Couldn't read directory",
|
||||
.not_write = "Couldn't write",
|
||||
.not_gen = "Couldn't generate",
|
||||
.no_root = "Root access could not be detected! Please run this with root permissions.",
|
||||
.no_target = "No target specified (backup, flash, or format).",
|
||||
.no_target = "No target specified (backup, flash, or format)",
|
||||
.expected_backup_arg = "Expected backup argument 2 (1 of them are not mandatory), retrieved",
|
||||
.expected_flash_arg = "Expected flash argument 2, retrieved",
|
||||
.expected_format_arg = "Expected format argument 2, retrieved",
|
||||
@@ -52,18 +54,24 @@ struct pmt_langdb_general en = {
|
||||
.ffile_more_part = "Flash file size exceeds partition capacity.",
|
||||
.cannot_get_bsz = "Failed to retrieve partition block size.",
|
||||
.format_fail = "Formatting failed! There is a possibility of data damage.",
|
||||
.depr_backup_opt = "These options for the backup are unavailable.",
|
||||
.depr_flash_opt = "These options for the flash are unavailable.",
|
||||
.depr_format_opt = "These options for the format are unavailable.",
|
||||
.depr_Vlicense_opt = "No memory for unnecessary options!",
|
||||
.depr_ch_list_opt = "Use -p argument for listing partitions.",
|
||||
.not_spec_opt = "Specify the necessary arguments, not option",
|
||||
.logical_warn = "This device uses logical partitions.",
|
||||
.ab_warn = "This device uses A/B partition style.",
|
||||
.out_not_spec = "Output file name not specified. Using default name:",
|
||||
.out_not_spec = "Output file name not specified. Using default name",
|
||||
.please_rerun = "Please rerun the command.",
|
||||
.part_disk_sz = "Partition disk size",
|
||||
.flash_file_sz = "Flash file size",
|
||||
.part_disk_sz_fail = "Failed to retrieve partition disk size.",
|
||||
.flash_file_sz_fail = "Failed to retrieve flash file size.",
|
||||
.unknown_opr = "Unknown operand",
|
||||
.list_of_dir = "Directory listing",
|
||||
.see_license = "View licenses using the -L argument.",
|
||||
.success_backup = "Backup successful. Output:",
|
||||
.success_flash = "Flash successful.",
|
||||
.success_backup = "Backup successful. Output",
|
||||
.success_flash = "Flash successful",
|
||||
.warn = "WARNING",
|
||||
.fatal = "FATAL ERROR",
|
||||
.switching_lang = "Switching language...",
|
||||
@@ -72,6 +80,9 @@ struct pmt_langdb_general en = {
|
||||
.for_more = "for more information",
|
||||
.try_h = "Try",
|
||||
.usage_head = "Usage",
|
||||
.depr_opt_str = "DEPRECATED OPTION",
|
||||
.switched_opt_str = "SWITCHED OPTION",
|
||||
.not_changed_opt = "not changed",
|
||||
.compiler_str = "Compiler",
|
||||
.version_str = "version",
|
||||
.bin_str = "binary",
|
||||
@@ -90,6 +101,7 @@ struct pmt_langdb_general tr = {
|
||||
.not_open = "Açılamıyor",
|
||||
.not_block = "Belirtilen bölüm bir blok değil. Yani aslında bu bir bölüm bile değil (disk). Bu hatayı almak için şanslı olmak gerek..!",
|
||||
.not_read = "Veri okunamıyor",
|
||||
.not_readdir = "Dizin verisi okunamıyor",
|
||||
.not_write = "Veri yazılamıyor",
|
||||
.not_gen = "Oluşturulamıyor",
|
||||
.no_root = "Root erişimi tespit edilemedi! Lütfen root erişimi ile çalıştırın.",
|
||||
@@ -97,7 +109,7 @@ struct pmt_langdb_general tr = {
|
||||
.expected_backup_arg = "Beklenen yedekleme argümanı 2 (bir tanesi zorunlu değil), alınan",
|
||||
.expected_flash_arg = "Beklenen flaş argümanı 2, alınan",
|
||||
.expected_format_arg = "Beklenen format argümanı 2, alınan",
|
||||
.missing_operand = "işlem belirtilmedi",
|
||||
.missing_operand = "İşlem belirtilmedi",
|
||||
.multiple_wiewers = "Birden fazla görüntüleme işlemi yapan fonksiyonlar bir arada kullanılamaz. Aynı anda sadece bir tanesi kullanılabilir.",
|
||||
.common_symbol_rule = "Bir seçeneğin argümanını verirken argüman önüne '-' sembolü getirilemez. Sembolü kaldırın ve tekrar deneyin.",
|
||||
.req_part_name = "Bölüm adı gereklidir.",
|
||||
@@ -107,7 +119,13 @@ struct pmt_langdb_general tr = {
|
||||
.ffile_more_part = "Flaşlanacak dosyanın boyutu mevcut bölüm boyutundan fazla.",
|
||||
.cannot_get_bsz = "Bölüm blok boyutu tespit edilemedi!",
|
||||
.format_fail = "Formatlama başarısız oldu. Bazı şeyler zarar görmüş olabilir!",
|
||||
.depr_backup_opt = "Yedek için artık bu seçeneği kullanamazsınız.",
|
||||
.depr_flash_opt = "Flaşlama için artık bu seçeneği kullanamazsınız.",
|
||||
.depr_format_opt = "Formatlama için artıi bu seçeneği kullanamazsınız.",
|
||||
.depr_Vlicense_opt = "Gereksiz seçeneklere bellek yok!",
|
||||
.depr_ch_list_opt = "Listeleme için -p seçeneğini kullanabilirsiniz.",
|
||||
.logical_warn = "Uyarı: bu cihaz mantıksal (logical) bölümlere sahip.",
|
||||
.not_spec_opt = "Seçenek değil, gerekli argümanları belirtin",
|
||||
.ab_warn = "Uyarı: bu cihazın bazı bölümleri A/B kullanıyor.",
|
||||
.out_not_spec = "Uyarı: çıktı dosya belirtilmedi. Çıktı dosya adı bölüm adına göre belirlenecek.",
|
||||
.please_rerun = "Lütfen yeniden çalıştırın",
|
||||
@@ -115,8 +133,8 @@ struct pmt_langdb_general tr = {
|
||||
.flash_file_sz = "Flaşlanacak dosyanın boyutu",
|
||||
.flash_file_sz_fail = "Uyarı: flaşlanacak dosyanın boyutu tespit edilemedi.",
|
||||
.part_disk_sz_fail = "Uyarı: bölüm boyutunun boyutu tespit edilemedi.",
|
||||
.unknown_opr = "Bilinmeyen işlem",
|
||||
.list_of_dir = "Dizin içeriğinin listesi",
|
||||
.see_license = "Lisansı -L seçeneği ile görüntüleyebilirsiniz.",
|
||||
.success_backup = "Başarılı. Çıktı",
|
||||
.success_flash = "Başarılı.",
|
||||
.warn = "UYARI",
|
||||
@@ -127,6 +145,9 @@ struct pmt_langdb_general tr = {
|
||||
.for_more = "komutunu kullanabilirsiniz",
|
||||
.try_h = "Daha fazla bilgi",
|
||||
.usage_head = "Kullanımı",
|
||||
.depr_opt_str = "KALDIRILMIŞ SEÇENEK",
|
||||
.switched_opt_str = "DEĞİŞTİRİLMİŞ SEÇENEK",
|
||||
.not_changed_opt = "değiştirilmedi",
|
||||
.compiler_str = "Derleyici",
|
||||
.version_str = "versiyon",
|
||||
.bin_str = "yapı",
|
||||
@@ -136,8 +157,8 @@ struct pmt_langdb_general tr = {
|
||||
|
||||
struct pmt_langdb_docs en_docs = {
|
||||
.docs_strs_l1 = "backup PARTITION [OUTPUT] [OPTIONS]...",
|
||||
.docs_strs_l2 = "flash FILE PARTITION [OPTIONS]...",
|
||||
.docs_strs_l3 = "format FILE_SYSTEM[ext/2/3/4] PARTITION [OPTIONS]...",
|
||||
.docs_strs_l2 = "flash PARTITION FILE [OPTIONS]...",
|
||||
.docs_strs_l3 = "format PARTITION FILE_SYSTEM[ext/2/3/4] [OPTIONS]...",
|
||||
.docs_strs_l4 = "Options",
|
||||
.docs_strs_l5 = "It is meant to determine whether the target partition is logical.",
|
||||
.docs_strs_l6 = "It is meant to specify a custom /dev context. Only classic partitions (default: /dev/block/by-name).",
|
||||
@@ -147,42 +168,38 @@ struct pmt_langdb_docs en_docs = {
|
||||
.docs_strs_l10 = "Set current language.",
|
||||
.docs_strs_l11 = "See version.",
|
||||
.docs_strs_l12 = "See this help message.",
|
||||
.docs_strs_l13 = "See license.",
|
||||
.docs_strs_l14 = "Examples",
|
||||
.docs_strs_l15 = "Report bugs to",
|
||||
.docs_strs_l13 = "Examples",
|
||||
.docs_strs_l14 = "Report bugs to",
|
||||
.or_str = "or",
|
||||
.usage_docstr = "Usage"
|
||||
};
|
||||
|
||||
struct pmt_langdb_docs tr_docs = {
|
||||
.docs_strs_l1 = "backup BÖLÜM [ÇIKTI] [SEÇENEKLER]...",
|
||||
.docs_strs_l2 = "flash DOSYA BÖLÜM [SEÇENEKLER]...",
|
||||
.docs_strs_l3 = "format DOSYA_SİSTEMİ[ext/2/3/4] BÖLÜM [SEÇENEKLER]...",
|
||||
.docs_strs_l2 = "flash BÖLÜM DOSYA [SEÇENEKLER]...",
|
||||
.docs_strs_l3 = "format BÖLÜM DOSYA_SİSTEMİ[ext/2/3/4] [SEÇENEKLER]...",
|
||||
.docs_strs_l4 = "Seçenekler",
|
||||
.docs_strs_l5 = "Bu seçeneği kullanarak mantıksal (logical) bir bölümle işlem yapılacağını belirtebilirsiniz.",
|
||||
.docs_strs_l6 = "Bu seçeneği kullanarak özel /dev bağlamı belirtebilirsiniz. Sadece normal (mantıksal olmayan) bölümler içindir (Varsayılan: /dev/block/by-name).",
|
||||
.docs_strs_l5 = "Mantıksal (logical) bölüm ile işlem yapın.",
|
||||
.docs_strs_l6 = "Özel /dev bağlamı belirtin. Sadece normal bölümler içindir (Varsayılan: /dev/block/by-name).",
|
||||
.docs_strs_l7 = "Bölümler listelenir.",
|
||||
.docs_strs_l8 = "Bilgi ve uyarı mesajları susturulur.",
|
||||
.docs_strs_l9 = "Zorlama modu. Bazı şeyler göz ardı edilir.",
|
||||
.docs_strs_l10 = "Mevcut dili ayarlayın.",
|
||||
.docs_strs_l11 = "Sürümü görüntüleyin.",
|
||||
.docs_strs_l12 = "Bu yardım mesajını görüntüleyin.",
|
||||
.docs_strs_l13 = "Lisansı gorüntüleyin.",
|
||||
.docs_strs_l14 = "Örnekler",
|
||||
.docs_strs_l15 = "Sorunları şu adrese bildirin:",
|
||||
.docs_strs_l13 = "Örnekler",
|
||||
.docs_strs_l14 = "Sorunları şu adrese bildirin:",
|
||||
.or_str = "yada",
|
||||
.usage_docstr = "Kullanımı"
|
||||
};
|
||||
|
||||
char* pmt_langdb_langs[] = {
|
||||
"en",
|
||||
"tr"
|
||||
struct pmt_langdb_langs lang[] = {
|
||||
{"en"},
|
||||
{"tr"},
|
||||
{NULL}
|
||||
};
|
||||
|
||||
int pmt_langdb_total = 2;
|
||||
int pmt_langdb_ctrl = 1;
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* By YZBruh | ShawkTeam */
|
||||
/* By YZBruh */
|
||||
|
||||
/**
|
||||
* Copyright 2024 Partition Manager
|
||||
@@ -16,7 +16,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
@@ -24,7 +24,8 @@ extern "C" {
|
||||
#define INC_DEBUGERS
|
||||
#define INC_DIRENT
|
||||
|
||||
#include <pmt.h>
|
||||
#include <pmt/pmt.h>
|
||||
#include <pmt/stringkeys.h>
|
||||
|
||||
/* current /dev context */
|
||||
#define CUR_DEV_CNTX "/dev/block/by-name"
|
||||
@@ -32,25 +33,14 @@ extern "C" {
|
||||
/* for logical partitions */
|
||||
#define LGC_DEV_CNTX "/dev/block/mapper"
|
||||
|
||||
extern bool pmt_use_cust_cxt;
|
||||
extern bool pmt_ab;
|
||||
extern bool pmt_logical;
|
||||
extern bool pmt_silent;
|
||||
extern bool pmt_force_mode;
|
||||
extern char* cust_cxt;
|
||||
extern char* bin_name;
|
||||
|
||||
extern struct pmt_langdb_general* current;
|
||||
extern struct pmt_langdb_general en;
|
||||
extern struct pmt_langdb_general tr;
|
||||
|
||||
DIR *dir;
|
||||
static DIR *dir;
|
||||
|
||||
static int
|
||||
list(const char* operation, const char* target_dir)
|
||||
{
|
||||
static bool list = false;
|
||||
struct dirent *entry;
|
||||
static int count;
|
||||
struct dirent **nlist;
|
||||
dir = NULL;
|
||||
|
||||
if (strcmp(operation, "access") == 0)
|
||||
@@ -64,25 +54,32 @@ list(const char* operation, const char* target_dir)
|
||||
|
||||
if (dir != NULL)
|
||||
{
|
||||
if (!list)
|
||||
{
|
||||
closedir(dir);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGD("%s: `%s'\n", current->list_of_dir, target_dir);
|
||||
while ((entry = readdir(dir)) != NULL)
|
||||
{
|
||||
LOGD("%s\n", entry->d_name);
|
||||
}
|
||||
closedir(dir);
|
||||
return 0;
|
||||
}
|
||||
closedir(dir);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return -1;
|
||||
|
||||
if (list)
|
||||
{
|
||||
count = scandir(target_dir, &nlist, NULL, alphasort);
|
||||
|
||||
if (count < 0)
|
||||
LOGE("%s: `%s': %s\n", current->not_readdir, target_dir, strerror(errno));
|
||||
|
||||
for (int cont_count = 0; cont_count < count; cont_count++)
|
||||
{
|
||||
if (nlist[cont_count]->d_name[0] != '.')
|
||||
LOGD("%s\n", nlist[cont_count]->d_name);
|
||||
|
||||
free(nlist[cont_count]);
|
||||
}
|
||||
|
||||
free(nlist);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 2;
|
||||
}
|
||||
|
||||
@@ -131,7 +128,7 @@ int listpart(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* By YZBruh | ShawkTeam */
|
||||
/* By YZBruh */
|
||||
|
||||
/**
|
||||
* Copyright 2024 Partition Manager
|
||||
@@ -16,24 +16,19 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define INC_MAIN_LIBS
|
||||
|
||||
#include <pmt.h>
|
||||
|
||||
extern bool pmt_use_cust_cxt;
|
||||
extern bool pmt_ab;
|
||||
extern bool pmt_logical;
|
||||
extern char* cust_cxt;
|
||||
#include <pmt/pmt.h>
|
||||
|
||||
static int
|
||||
accf(const char* _Nonnull target) { return access(target, F_OK); }
|
||||
|
||||
/* check parts */
|
||||
void check_dev_point()
|
||||
void check_dev_point(void)
|
||||
{
|
||||
/* true = ab | false = a */
|
||||
if (pmt_use_cust_cxt)
|
||||
@@ -74,7 +69,7 @@ void check_dev_point()
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
|
||||
253
jni/pmt.c
Normal file → Executable file
253
jni/pmt.c
Normal file → Executable file
@@ -17,7 +17,7 @@
|
||||
*/
|
||||
|
||||
/* force use C std (if default is C++) */
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
@@ -25,9 +25,11 @@ extern "C" {
|
||||
#define INC_DEBUGERS
|
||||
#define INC_STAT
|
||||
#define INC_GETOPT
|
||||
#define INC_DOCS_REQS
|
||||
|
||||
#include <pmt.h>
|
||||
#include <pmt/pmt.h>
|
||||
#include <pmt/stringkeys.h>
|
||||
#include <pmt/deprecates.h>
|
||||
#include <pmt/docs.h>
|
||||
|
||||
/* add value to variables that are added globally and are not worth */
|
||||
char* out = NULL;
|
||||
@@ -48,13 +50,6 @@ bool pmt_format = false;
|
||||
bool pmt_force_mode = false;
|
||||
bool pmt_inst_on_termux = false;
|
||||
|
||||
/* import language structs etc. */
|
||||
struct pmt_langdb_general* current = NULL;
|
||||
extern struct pmt_langdb_general en;
|
||||
extern struct pmt_langdb_general tr;
|
||||
extern const char* pmt_langdb_langs[];
|
||||
extern int pmt_langdb_total;
|
||||
|
||||
/* variable for use in control of '-' expression */
|
||||
static const char* opt_symbol = "-";
|
||||
static char common_symbol_rule[350];
|
||||
@@ -79,32 +74,37 @@ strdup(const char* s)
|
||||
* the beginning of the given word
|
||||
*/
|
||||
static void
|
||||
check_optsym(const char* _Nonnull mystring)
|
||||
check_optsym(const char* _Nullable symbol)
|
||||
{
|
||||
if (strncmp(mystring, opt_symbol, 1) == 0)
|
||||
if (symbol != NULL)
|
||||
{
|
||||
if (!pmt_force_mode)
|
||||
if (strncmp(symbol, opt_symbol, 1) == 0)
|
||||
LOGE("%s\n", common_symbol_rule);
|
||||
else
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
static bool
|
||||
ctrl_arg(const char* _Nullable argv_holder)
|
||||
{
|
||||
if (strcmp(argv_holder, "--logical") != 0 && strcmp(argv_holder, "--context") != 0 && strcmp(argv_holder, "--silent") != 0 && strcmp(argv_holder, "-l") != 0 && strcmp(argv_holder, "-c") != 0 && strcmp(argv_holder, "-s") != 0)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* classic main function (C binary here xd) */
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
bin_name = argv[0];
|
||||
|
||||
/* load language */
|
||||
static char* langctrl_str;
|
||||
langctrl_str = loadlang();
|
||||
if (loadlang() != 0)
|
||||
{
|
||||
printf("loadlang fail\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (strcmp(langctrl_str, "en") == 0)
|
||||
current = &en;
|
||||
else if (strcmp(langctrl_str, "tr") == 0)
|
||||
current = &tr;
|
||||
|
||||
sprintf(common_symbol_rule, "%s\n", current->common_symbol_rule);
|
||||
sprintf(common_symbol_rule, "%s", current->common_symbol_rule);
|
||||
|
||||
if (search_sls() == 0)
|
||||
{
|
||||
@@ -119,7 +119,11 @@ int main(int argc, char* argv[])
|
||||
LOGE("%s.\n%s `%s --help' %s.\n", current->missing_operand, current->try_h, argv[0], current->for_more);
|
||||
|
||||
/* a structure for long arguments */
|
||||
struct option long_options[] = {
|
||||
struct option option_table[] = {
|
||||
{"backup", no_argument, 0, 'b'},
|
||||
{"flash", no_argument, 0, 'F'},
|
||||
{"format", no_argument, 0, 'r'},
|
||||
{"is_dummy", no_argument, 0, 'D'},
|
||||
{"logical", no_argument, 0, 'l'},
|
||||
{"context", required_argument, 0, 'c'},
|
||||
{"list", no_argument, 0, 'p'},
|
||||
@@ -134,8 +138,8 @@ int main(int argc, char* argv[])
|
||||
|
||||
/* boolean statements (only valid in this file) to distinguish. and pointer from a shortcut for the symbol rule */
|
||||
static bool wiew_help = false;
|
||||
static bool wiew_licenses = false;
|
||||
static bool wiew_version = false;
|
||||
static bool logical_spec = false;
|
||||
static bool list_partitions = false;
|
||||
static bool combo_wiewers = false;
|
||||
static bool pmt_setlang = false;
|
||||
@@ -143,20 +147,104 @@ int main(int argc, char* argv[])
|
||||
static int search_result = 3;
|
||||
static int opt;
|
||||
|
||||
if (strcmp(argv[1], "backup") == 0)
|
||||
{
|
||||
if (argc <= 2)
|
||||
LOGE("%s 0.\n", current->expected_backup_arg);
|
||||
|
||||
if (ctrl_arg(argv[2]))
|
||||
target_partition = argv[2];
|
||||
else
|
||||
LOGE("%s.\n", current->not_spec_opt);
|
||||
|
||||
out = target_partition;
|
||||
|
||||
if (argc > 3 && ctrl_arg(argv[3]))
|
||||
out = argv[3];
|
||||
|
||||
check_optsym(target_partition);
|
||||
check_optsym(out);
|
||||
|
||||
pmt_backup = true;
|
||||
}
|
||||
else if (strcmp(argv[1], "flash") == 0)
|
||||
{
|
||||
if (argc <= 2)
|
||||
LOGE("%s 0.\n", current->expected_flash_arg);
|
||||
|
||||
if (argc <= 3)
|
||||
LOGE("%s 1.\n", current->expected_flash_arg);
|
||||
|
||||
if (ctrl_arg(argv[2]))
|
||||
target_partition = argv[2];
|
||||
else
|
||||
LOGE("%s.\n", current->not_spec_opt);
|
||||
|
||||
if (ctrl_arg(argv[3]))
|
||||
target_flash_file = argv[3];
|
||||
else
|
||||
LOGE("%s.\n", current->not_spec_opt);
|
||||
|
||||
check_optsym(target_flash_file);
|
||||
check_optsym(target_partition);
|
||||
|
||||
pmt_flash = true;
|
||||
}
|
||||
else if (strcmp(argv[1], "format") == 0)
|
||||
{
|
||||
|
||||
if (argc <= 2)
|
||||
LOGE("%s 0.\n", current->expected_format_arg);
|
||||
|
||||
if (argc <= 3)
|
||||
LOGE("%s 1.\n", current->expected_format_arg);
|
||||
|
||||
if (ctrl_arg(argv[2]))
|
||||
target_partition = argv[2];
|
||||
else
|
||||
LOGE("%s.\n", current->not_spec_opt);
|
||||
|
||||
if (ctrl_arg(argv[3]))
|
||||
format_fs = argv[3];
|
||||
else
|
||||
LOGE("%s.\n", current->not_spec_opt);
|
||||
|
||||
check_optsym(format_fs);
|
||||
check_optsym(target_partition);
|
||||
|
||||
pmt_format = true;
|
||||
}
|
||||
|
||||
/* control for each argument */
|
||||
while ((opt = getopt_long(argc, argv, "lc:psfS:vL", long_options, NULL)) != -1)
|
||||
while ((opt = getopt_long(argc, argv, "bFrDlc:psfS:vL", option_table, NULL)) != -1)
|
||||
{
|
||||
/* process arguments */
|
||||
switch (opt)
|
||||
{
|
||||
/* handle deprecates */
|
||||
case 'b':
|
||||
DEPR_HANDLE('b', "backup", current->depr_backup_opt);
|
||||
exit(1);
|
||||
break;
|
||||
case 'F':
|
||||
DEPR_HANDLE('F', "flash", current->depr_flash_opt);
|
||||
exit(1);
|
||||
break;
|
||||
case 'r':
|
||||
DEPR_HANDLE('r', "format", current->depr_format_opt);
|
||||
exit(1);
|
||||
break;
|
||||
case 'D':
|
||||
DEPR_HANDLE('D', "NULLPTR", current->depr_ch_list_opt);
|
||||
exit(1);
|
||||
break;
|
||||
case 'L':
|
||||
DEPR_HANDLE('L', "license", current->depr_Vlicense_opt);
|
||||
exit(1);
|
||||
break;
|
||||
/* logical partitions option */
|
||||
case 'l':
|
||||
check_root();
|
||||
check_dev_point();
|
||||
if (pmt_logical)
|
||||
pmt_use_logical = true;
|
||||
else
|
||||
LOGE("%s\n", current->not_logical);
|
||||
logical_spec = true;
|
||||
break;
|
||||
/* context selector option */
|
||||
case 'c':
|
||||
@@ -168,7 +256,7 @@ int main(int argc, char* argv[])
|
||||
case 'p':
|
||||
list_partitions = true;
|
||||
/* check combo wiewer options and progress */
|
||||
if (wiew_version || wiew_help || wiew_licenses) combo_wiewers = true;
|
||||
if (wiew_version || wiew_help) combo_wiewers = true;
|
||||
break;
|
||||
/* force mode option */
|
||||
case 'f':
|
||||
@@ -187,19 +275,13 @@ int main(int argc, char* argv[])
|
||||
case 'v':
|
||||
wiew_version = true;
|
||||
/* check combo wiewer options and progress */
|
||||
if (list_partitions || wiew_help || wiew_licenses) combo_wiewers = true;
|
||||
if (list_partitions || wiew_help) combo_wiewers = true;
|
||||
break;
|
||||
/* help message opption */
|
||||
case 0:
|
||||
wiew_help = true;
|
||||
/* check combo wiewer options and progress */
|
||||
if (wiew_version || list_partitions || wiew_licenses) combo_wiewers = true;
|
||||
break;
|
||||
/* license wiewer option */
|
||||
case 'L':
|
||||
wiew_licenses = true;
|
||||
/* check combo wiewer options and progress */
|
||||
if (wiew_version || wiew_help || list_partitions) combo_wiewers = true;
|
||||
if (wiew_version || list_partitions) combo_wiewers = true;
|
||||
break;
|
||||
/* for invalid options */
|
||||
case '?':
|
||||
@@ -207,7 +289,7 @@ int main(int argc, char* argv[])
|
||||
return 1;
|
||||
break;
|
||||
default:
|
||||
LOGD("%s: %s [backup] [flash] [format] [-l | --logical] [-c | --context] [-p | --list] [-v | --version] [--help] [-L | --license]\n", current->usage_head, argv[0]);
|
||||
LOGD("%s: %s [backup] [flash] [format] [-l | --logical] [-c | --context] [-p | --list] [-s | --silent] [-v | --version] [--help]\n", current->usage_head, argv[0]);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -227,11 +309,6 @@ int main(int argc, char* argv[])
|
||||
version();
|
||||
return 0;
|
||||
}
|
||||
else if (wiew_licenses)
|
||||
{
|
||||
licenses();
|
||||
return 0;
|
||||
}
|
||||
else if (list_partitions)
|
||||
{
|
||||
check_root();
|
||||
@@ -241,81 +318,31 @@ int main(int argc, char* argv[])
|
||||
if (pmt_setlang)
|
||||
{
|
||||
LOGD("%s: %s\n", argv[0], current->switching_lang);
|
||||
setlang(langpr);
|
||||
setlang(langpr, 0);
|
||||
sleep(2);
|
||||
LOGD("%s: %s.\n", argv[0], current->please_rerun);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* detect target mode */
|
||||
static char arg1[20];
|
||||
sprintf(arg1, "%s", argv[1]);
|
||||
|
||||
if (strcmp(argv[1], "backup") == 0)
|
||||
{
|
||||
if (argc == 2)
|
||||
LOGE("%s 0.\n", current->expected_backup_arg);
|
||||
|
||||
target_partition = argv[2];
|
||||
|
||||
if (argc == 3)
|
||||
out = target_partition;
|
||||
else
|
||||
out = argv[3];
|
||||
|
||||
check_optsym(target_partition);
|
||||
check_optsym(out);
|
||||
|
||||
pmt_backup = true;
|
||||
}
|
||||
else if (strcmp(argv[1], "flash") == 0)
|
||||
{
|
||||
if (argc == 2)
|
||||
LOGE("%s 0.\n", current->expected_flash_arg);
|
||||
|
||||
if (argc == 2)
|
||||
LOGE("%s 1.\n", current->expected_flash_arg);
|
||||
|
||||
target_flash_file = argv[2];
|
||||
|
||||
target_partition = argv[3];
|
||||
|
||||
check_optsym(target_flash_file);
|
||||
check_optsym(target_partition);
|
||||
|
||||
pmt_flash = true;
|
||||
}
|
||||
else if (strcmp(argv[1], "format") == 0)
|
||||
{
|
||||
|
||||
if (argc == 2)
|
||||
LOGE("%s 0.\n", current->expected_format_arg);
|
||||
|
||||
if (argc == 3)
|
||||
LOGE("%s 1.\n", current->expected_format_arg);
|
||||
|
||||
format_fs = argv[2];
|
||||
|
||||
target_partition = argv[3];
|
||||
|
||||
check_optsym(format_fs);
|
||||
check_optsym(target_partition);
|
||||
|
||||
pmt_format = true;
|
||||
}
|
||||
|
||||
/* target control is done */
|
||||
if (!pmt_backup && !pmt_flash && !pmt_format)
|
||||
LOGE("%s `%s --help` %s\n", current->missing_operand, current->try_h, current->for_more);
|
||||
LOGE("%s.\n%s `%s --help` %s\n", current->no_target, current->try_h, argv[0], current->for_more);
|
||||
|
||||
if (pmt_format)
|
||||
{
|
||||
if (strcmp(format_fs, "ext4") != 0 && strcmp(format_fs, "ext3") != 0 && strcmp(format_fs, "ext2") != 0)
|
||||
LOGE("%s: %s\n", current->unsupported_fs, format_fs);
|
||||
}
|
||||
|
||||
/* checks */
|
||||
check_root();
|
||||
check_dev_point();
|
||||
|
||||
if (pmt_format)
|
||||
if (logical_spec)
|
||||
{
|
||||
if (strcmp(format_fs, "ext4") != 0 || strcmp(format_fs, "ext3") != 0 || strcmp(format_fs, "ext2") != 0)
|
||||
LOGE("%s: %s\n", current->unsupported_fs, format_fs);
|
||||
if (pmt_logical)
|
||||
pmt_use_logical = true;
|
||||
else
|
||||
LOGE("%s\n", current->not_logical);
|
||||
}
|
||||
|
||||
if (pmt_flash)
|
||||
@@ -362,13 +389,11 @@ int main(int argc, char* argv[])
|
||||
return pmt(2);
|
||||
else if (pmt_format)
|
||||
return pmt(3);
|
||||
else
|
||||
LOGE("%s\n%s `%s --help' %s\n", current->no_target, current->try_h, argv[0], current->for_more);
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/* end of code */
|
||||
/* end of code */
|
||||
|
||||
13
jni/root.c
13
jni/root.c
@@ -1,4 +1,4 @@
|
||||
/* By YZBruh | ShawkTeam */
|
||||
/* By YZBruh */
|
||||
|
||||
/**
|
||||
* Copyright 2024 Partition Manager
|
||||
@@ -16,18 +16,15 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define INC_MAIN_LIBS
|
||||
#define INC_DEBUGERS
|
||||
|
||||
#include <pmt.h>
|
||||
|
||||
extern struct pmt_langdb_general* current;
|
||||
extern struct pmt_langdb_general en;
|
||||
extern struct pmt_langdb_general tr;
|
||||
#include <pmt/pmt.h>
|
||||
#include <pmt/stringkeys.h>
|
||||
|
||||
/* root checker function */
|
||||
void check_root(void)
|
||||
@@ -37,7 +34,7 @@ void check_root(void)
|
||||
LOGE("%s\n", current->no_root);
|
||||
}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
|
||||
49
jni/tools.c
49
jni/tools.c
@@ -1,4 +1,4 @@
|
||||
/* By YZBruh | ShawkTeam */
|
||||
/* By YZBruh */
|
||||
|
||||
/**
|
||||
* Copyright 2024 Partition Manager
|
||||
@@ -16,7 +16,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
@@ -26,26 +26,8 @@ extern "C" {
|
||||
#define INC_DEBUGERS
|
||||
#define INC_TOOLS_REQS
|
||||
|
||||
#include <pmt.h>
|
||||
|
||||
extern char* out;
|
||||
extern char* format_fs;
|
||||
extern char* cust_cxt;
|
||||
extern char* target_partition;
|
||||
extern char* target_flash_file;
|
||||
extern char* partition_type;
|
||||
extern char* bin_name;
|
||||
extern bool pmt_use_logical;
|
||||
extern bool pmt_use_cust_cxt;
|
||||
extern bool pmt_logical;
|
||||
extern bool pmt_flash;
|
||||
extern bool pmt_backup;
|
||||
extern bool pmt_silent;
|
||||
extern bool pmt_force_mode;
|
||||
|
||||
extern struct pmt_langdb_general* current;
|
||||
extern struct pmt_langdb_general en;
|
||||
extern struct pmt_langdb_general tr;
|
||||
#include <pmt/pmt.h>
|
||||
#include <pmt/stringkeys.h>
|
||||
|
||||
/**
|
||||
* it is meant to calculate the size of the quickly given file.
|
||||
@@ -80,8 +62,6 @@ partition_not_found(void) { LOGE("%s\n", current->part_not_found); }
|
||||
/* to stop use of function type */
|
||||
#define partition_not_found partition_not_found()
|
||||
|
||||
|
||||
|
||||
/* the partitions are meant to quickly find. */
|
||||
static void
|
||||
search_partition(const char* _Nonnull partition)
|
||||
@@ -135,13 +115,13 @@ int pmt(unsigned short progress_code)
|
||||
/* determine output */
|
||||
if (strcmp(out, target_partition) == 0)
|
||||
{
|
||||
sprintf(outf, "%s.img", target_partition);
|
||||
sprintf(outf, "%s.img", out);
|
||||
LOGW("%s: %s\n", current->out_not_spec, outf);
|
||||
}
|
||||
else
|
||||
sprintf(outf, "%s", target_partition);
|
||||
sprintf(outf, "%s", out);
|
||||
|
||||
targetf = open(outf, O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
||||
targetf = open(outf, O_WRONLY | O_CREAT | O_TRUNC, 0660);
|
||||
if (targetf == -1)
|
||||
LOGE("%s: %s: %s\n", current->not_gen, outf, strerror(errno));
|
||||
|
||||
@@ -188,19 +168,22 @@ int pmt(unsigned short progress_code)
|
||||
else
|
||||
LOGW("%s\n", current->flash_file_sz_fail);
|
||||
|
||||
if (calc_flsz(target_partition) != -1)
|
||||
LOGD("%s: %.2f\n", current->part_disk_sz, calc_flsz(target_partition));
|
||||
if (calc_flsz(flasher_path) != -1)
|
||||
LOGD("%s: %.2f\n", current->part_disk_sz, calc_flsz(flasher_path));
|
||||
else
|
||||
LOGW("%s\n", current->part_disk_sz_fail);
|
||||
|
||||
if (calc_flsz(target_flash_file) > calc_flsz(target_partition))
|
||||
LOGE("%s\n", current->ffile_more_part);
|
||||
if (calc_flsz(target_flash_file) != -1 && calc_flsz(flasher_path) != -1)
|
||||
{
|
||||
if (calc_flsz(target_flash_file) > calc_flsz(flasher_path))
|
||||
LOGE("%s\n", current->ffile_more_part);
|
||||
}
|
||||
|
||||
srcf = open(target_flash_file, O_RDONLY);
|
||||
if (srcf == -1)
|
||||
LOGF("%s: %s: %s\n", current->not_read, target_flash_file, strerror(errno));
|
||||
|
||||
targetf = open(target_partition, O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
||||
targetf = open(target_partition, O_WRONLY | O_CREAT | O_TRUNC, 0660);
|
||||
if (targetf == -1)
|
||||
LOGF("%s: %s: %s\n", current->not_read, target_partition, strerror(errno));
|
||||
|
||||
@@ -252,7 +235,7 @@ int pmt(unsigned short progress_code)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* By YZBruh | ShawkTeam */
|
||||
/* By YZBruh */
|
||||
|
||||
/**
|
||||
* Copyright 2024 Partition Manager
|
||||
@@ -16,20 +16,15 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define INC_MAIN_LIBS
|
||||
#define INC_VERSIONER_REQS
|
||||
|
||||
#include <pmt.h>
|
||||
|
||||
extern char* bin_name;
|
||||
|
||||
extern struct pmt_langdb_general* current;
|
||||
extern struct pmt_langdb_general en;
|
||||
extern struct pmt_langdb_general tr;
|
||||
#include <pmt/pmt.h>
|
||||
#include <pmt/stringkeys.h>
|
||||
#include <pmt/versioning.h>
|
||||
|
||||
void version(void)
|
||||
{
|
||||
@@ -43,14 +38,14 @@ void version(void)
|
||||
LOGD("<%s> %s\n", current->unknw_str, current->bin_str);
|
||||
#endif
|
||||
|
||||
#if defined(__clang__)
|
||||
LOGD("%s: clang %d.%d.%d (NDK r%d%s %s)\n", current->compiler_str, __clang_major__, __clang_minor__, __clang_patchlevel__, __NDK_MAJOR__, __NDK_MINOR_STATUS__, __NDK_BETA_STATUS__);
|
||||
#if defined(__clang__) && !defined(__NDK_BUILD)
|
||||
LOGD("%s: clang %d.%d.%d\n", current->compiler_str, __clang_major__, __clang_minor__, __clang_patchlevel__);
|
||||
#elif defined(__clang__) && defined(__NDK_BUILD)
|
||||
LOGD("%s\n", __NDK_CC_VERSION__);
|
||||
#endif
|
||||
|
||||
LOGD("%s\n", current->see_license);
|
||||
}
|
||||
|
||||
#if defined(__cplusplus)
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
126
out/Makefile
Executable file
126
out/Makefile
Executable file
@@ -0,0 +1,126 @@
|
||||
# By YZBruh
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#####
|
||||
# sub-make for installing-uninstalling
|
||||
#####
|
||||
|
||||
THIS_IS := out
|
||||
|
||||
# include needed variables
|
||||
include ../Makefile.inc
|
||||
-include $(BUILD)/config/INS_STAT.mk
|
||||
-include $(BUILD)/config/UNINS_STAT.mk
|
||||
|
||||
# create an empty target
|
||||
all:
|
||||
$(hide)printf ""
|
||||
|
||||
# installer
|
||||
.PHONY: install
|
||||
install:
|
||||
# really termux?
|
||||
$(hide)if [ -f $(TERMUX_BIN)/termux-open ]; then \
|
||||
printf " ------------ $(TARGET) installer ------------ \n"; \
|
||||
if [ -f $(TERMUX_BIN)/$(TARGET) ]; then \
|
||||
printf " - $(TARGET) already installed\n"; \
|
||||
exit; \
|
||||
fi; \
|
||||
if [ ! "$(INSTALL_SUCCESS)" = "true" ] && [ ! "$(INSTALL_SUCCESS)" = "" ]; then \
|
||||
printf " - $(YELLOW)$(BOLD)Warning:$(BOLD_RESET)$(RESET) a previously-stayed failed installation process found\n"; \
|
||||
fi; \
|
||||
if [ -f $(DEB_DIR)/*.deb ]; then \
|
||||
printf " - The created deb pack was found. It's setup...\n"; \
|
||||
cd $(DEB_DIR) || exit 1; \
|
||||
apt install ./*.deb || exit 1; \
|
||||
if [ ! "$?" = "0" ]; then \
|
||||
cd $(CUR_DIR); \
|
||||
printf " - Success.\n\n"; \
|
||||
echo "INSTALL_SUCCESS := true" > $(BUILD)/config/INS_STAT.mk; \
|
||||
echo "UNINSTALLED_SUCCESS := " > $(BUILD)/config/UNINS_STAT.mk; \
|
||||
cd ..; \
|
||||
exit 0; \
|
||||
else \
|
||||
cd $(CUR_DIR); \
|
||||
printf " - $(RED)$(BOLD)Error:$(BOLD_RESET)$(RESET) installing failed!\n"; \
|
||||
echo "INSTALL_SUCCESS := false" > $(BUILD)/config/INS_STAT.mk; \
|
||||
cd ..; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
if [ ! -f $(BINARY_DIR)/$(TARGET) ]; then \
|
||||
printf " - $(RED)$(BOLD)Error:$(BOLD_RESET)$(RESET) Package not builded! Please build package and try again \n"; \
|
||||
echo "INSTALL_SUCCESS := false" > $(BUILD)/config/INS_STAT.mk; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
printf " - Installing binary...\n"; \
|
||||
if [ "`cp $(BINARY_DIR)/$(TARGET) /data/data/com.termux/files/usr/bin/$(TARGET)`" = "" ]; then \
|
||||
printf " - Setting up permissions...\n"; \
|
||||
else \
|
||||
echo "INSTALL_SUCCESS := false" > $(BUILD)/config/INS_STAT.mk; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
if [ "`chmod 777 $(TERMUX_BIN)/$(TARGET)`" = "" ]; then \
|
||||
printf " - Saving current status...\n"; \
|
||||
echo "INSTALL_SUCCESS := true" > $(BUILD)/config/INS_STAT.mk; \
|
||||
else \
|
||||
echo "INSTALL_SUCCESS := false" > $(BUILD)/config/INS_STAT.mk; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
printf " - Success.\n\n"; \
|
||||
echo "INSTALL_SUCCESS := true" > $(BUILD)/config/INS_STAT.mk; \
|
||||
echo "UNINSTALLED_SUCCESS := " > $(BUILD)/config/UNINS_STAT.mk; \
|
||||
else \
|
||||
printf " - $(RED)$(BOLD)Error:$(BOLD_RESET)$(RESET) This function is only available on Termux.\n"; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
# uninstaller
|
||||
.PHONY: uninstall
|
||||
uninstall:
|
||||
# really termux?
|
||||
$(hide)if [ -f $(TERMUX_BIN)/termux-open ]; then \
|
||||
printf " ----------- $(TARGET) uninstaller ----------- \n"; \
|
||||
if [ ! -f $(TERMUX_BIN)/$(TARGET) ]; then \
|
||||
printf " - $(TARGET) already uninstalled\n"; \
|
||||
exit; \
|
||||
fi; \
|
||||
if [ ! "$(UNINSTALL_SUCCESS)" = "true" ] && [ ! "$(UNINSTALL_SUCCESS)" = "" ]; then \
|
||||
printf " - $(YELLOW)$(BOLD)Warning:$(BOLD_RESET)$(RESET) a previously-stayed failed uninstallation process found\n"; \
|
||||
fi; \
|
||||
if [ -f $(TERMUX_USR)/share/man/man8/$(TARGET).8.gz ]; then \
|
||||
printf " - It was found to be established by $(TARGET)'s deb pack. It's removed with apt...\n"; \
|
||||
apt remove -y $(TARGET) || exit 1; \
|
||||
printf " - Success.\n\n"; \
|
||||
echo "UNINSTALLED_SUCCESS := true" > $(BUILD)/config/UNINS_STAT.mk; \
|
||||
echo "INSTALL_SUCCESS := " > $(BUILD)/config/INS_STAT.mk; \
|
||||
else \
|
||||
printf " - It was found that pmt was manually established (with this makefile or copying). Manually removed...\n"; \
|
||||
if [ "`rm $(TERMUX_BIN)/$(TARGET)`" = "" ]; then \
|
||||
printf " - Success.\n\n"; \
|
||||
echo "UNINSTALLED_SUCCESS := true" > $(BUILD)/config/UNINS_STAT.mk; \
|
||||
echo "INSTALL_SUCCESS := " > $(BUILD)/config/INS_STAT.mk; \
|
||||
else \
|
||||
echo "UNINSTALLED_SUCCESS := false" > $(BUILD)/config/UNINS_STAT.mk; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
else \
|
||||
printf "$(RED)$(BOLD)Error:$(BOLD_RESET)$(RESET) This function is only available on Termux.\n"; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
# end
|
||||
208
utils.sh
208
utils.sh
@@ -1,208 +0,0 @@
|
||||
#!/usr/bin/bash
|
||||
# By YZBruh | ShawkTeam
|
||||
|
||||
# Copyright 2024 Partition Manager
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# ANSI color codes
|
||||
RED='\e[31m'
|
||||
NC='\e[0m'
|
||||
|
||||
# needed variables
|
||||
VERSION="2.4.0"
|
||||
CUR_DIR=$(pwd)
|
||||
LIB_DIR=${CUR_DIR}/libs
|
||||
ARMV8A_DIR=${LIB_DIR}/arm64-v8a
|
||||
ARMV7A_DIR=${LIB_DIR}/armeabi-v7a
|
||||
DEB_DIR=${CUR_DIR}/deb
|
||||
DEBUTILS_DIR=${CUR_DIR}/debutils
|
||||
DEBTERMUX_USR=${DEBUTILS_DIR}/data/data/com.termux/files/usr
|
||||
|
||||
# set file modes (all) to 755
|
||||
${SUDO} chmod -R 755 *
|
||||
|
||||
# error messages
|
||||
abort()
|
||||
{
|
||||
if [ ! "$1" = "" ]; then
|
||||
printf "${RED}${1}${NC}\n"
|
||||
fi
|
||||
if [ -d ${DEBUTILS_DIR}/temp ]; then
|
||||
rm -rf ${DEBUTILS_DIR}/temp
|
||||
fi
|
||||
exit 1
|
||||
}
|
||||
|
||||
gen_deb()
|
||||
{
|
||||
printf " --------- Making pmt deb package ---------\n";
|
||||
printf " - Checking all files and directories (only
|
||||
eededs)...\n";
|
||||
|
||||
# check important files
|
||||
if [ ! -d ${DEBUTILS_DIR} ]; then
|
||||
abort " - Not found: ${DEBUTILS_DIR}\n"
|
||||
fi
|
||||
if [ ! -d ${DEBUTILS_DIR}/DEBIAN ]; then
|
||||
abort " - Not found: ${DEBUTILS_DIR}/DEBIAN\n"
|
||||
fi
|
||||
if [ ! -d ${DEBUTILS_DIR}/mandoc ]; then
|
||||
abort " - Not found: ${DEBUTILS_DIR}/mandoc\n"
|
||||
fi
|
||||
if [ ! -d ${DEBUTILS_DIR}/data/data/com.termux ]; then
|
||||
abort " - Not found: ${DEBUTILS_DIR}/data/data/com.termux\n"
|
||||
fi
|
||||
if [ ! -d ${DEBUTILS_DIR}/data/data/com.termux/files/usr ]; then
|
||||
abort " - Not found: ${DEBUTILS_DIR}/data/data/com.termux/files/usr\n"
|
||||
fi
|
||||
if [ ! -d ${DEBUTILS_DIR}/data/data/com.termux/files/usr/bin ]; then
|
||||
abort " - Not found: ${DEBUTILS_DIR}/data/data/com.termux/files/usr/bin\n"
|
||||
fi
|
||||
if [ ! -d ${DEBUTILS_DIR}/data/data/com.termux/files/usr/share/man/man8 ]; then
|
||||
abort " - Not found: ${DEBUTILS_DIR}/data/data/com.termux/files/usr/share/man/man8\n"
|
||||
fi
|
||||
if [ ! -f ${DEBUTILS_DIR}/mandoc/pmt.8.gz ]; then
|
||||
abort " - Not found: ${DEBUTILS_DIR}/mandoc/pmt.8.gz\n"
|
||||
fi
|
||||
if [ ! -f ${DEBUTILS_DIR}/DEBIAN/control_32 ]; then
|
||||
abort " - Not found: ${DEBUTILS_DIR}/DEBIAN/control_32\n"
|
||||
fi
|
||||
if [ ! -f ${DEBUTILS_DIR}/DEBIAN/control_64 ]; then
|
||||
abort " - Not found: ${DEBUTILS_DIR}/DEBIAN/control_64\n"
|
||||
fi
|
||||
if [ ! -f ${ARMV8A_DIR}/pmt ]; then
|
||||
abort " - Package not comptely builded! Please build package and try again\n"
|
||||
elif [ ! -f ${ARMV7A_DIR}/pmt ]; then
|
||||
abort " - Package not comptely builded! Please build package and try again\n"
|
||||
fi
|
||||
|
||||
# generate template dir
|
||||
printf " - Generating template dir...\n"
|
||||
${SUDO} mkdir -p ${DEBUTILS_DIR}/temp || abort
|
||||
|
||||
# generate out dir
|
||||
printf " - Generating out dir...\n"
|
||||
${SUDO} mkdir -p ${DEB_DIR} || abort
|
||||
|
||||
# copy files
|
||||
printf " - Copying files...\n"
|
||||
${SUDO} cp -r ${DEBUTILS_DIR}/data ${DEBUTILS_DIR}/temp || abort
|
||||
${SUDO} rm -f ${DEBTERMUX_USR}/share/man/man8/dummy
|
||||
${SUDO} rm -f ${DEBTERMUX_USR}/bin/dummy
|
||||
${SUDO} mkdir -p ${DEBUTILS_DIR}/temp/DEBIAN || abort
|
||||
|
||||
# select control file
|
||||
printf " - Selected arm-${PREFIX} package control file.\n"
|
||||
${SUDO} cp ${DEBUTILS_DIR}/DEBIAN/control_${PREFIX} ${DEBUTILS_DIR}/temp/DEBIAN/control || exit 1
|
||||
${SUDO} cp ${DEBUTILS_DIR}/mandoc/pmt.8.gz ${DEBTERMUX_USR}/share/man/man8 || abort
|
||||
if [ "${PREFIX}" = "64" ]; then
|
||||
${SUDO} cp ${ARMV8A_DIR}/pmt ${DEBTERMUX_USR}/bin || abort
|
||||
elif [ "${PREFIX}" = "32" ]; then
|
||||
${SUDO} cp ${ARMV7A_DIR}/pmt ${DEBTERMUX_USR}/bin || abort
|
||||
fi
|
||||
|
||||
# start dpkg-deb
|
||||
printf " - Starting dpkg-deb...\n"
|
||||
sleep 2
|
||||
${SUDO} chmod -R 755 *
|
||||
|
||||
# if ARM_PREFIX is '-v7a', unset ARM_PREFIX and PREFIX. Re set PREFIX
|
||||
if [ "${PREFIX}" = "32" ]; then
|
||||
unset PREFIX
|
||||
PREFIX="eabi-v7a"
|
||||
fi
|
||||
|
||||
${SUDO} dpkg-deb -b ${DEBUTILS_DIR}/temp ${DEB_DIR}/pmt-${VERSION}-arm${PREFIX}${ARM_PREFIX}.deb || abort
|
||||
${SUDO} rm -rf ${DEBUTILS_DIR}/temp
|
||||
|
||||
printf " - Done! Package: ${DEB_DIR}/pmt-${VERSION}-arm${PREFIX}${ARM_PREFIX}.deb\n"
|
||||
}
|
||||
|
||||
gen_modpack()
|
||||
{
|
||||
printf " ----------- Making static lib package -----------\n"
|
||||
printf " - Checking files...\n"
|
||||
|
||||
if [ ! -f $(STATICLIB_DIR)/libpmt_root.a ]; then
|
||||
printf " - Not found: $(STATICLIB_DIR)/libpmt_root.a\n"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -f $(STATICLIB_DIR)/libpmt_lister.a ]; then
|
||||
printf " - Not found: $(STATICLIB_DIR)/libpmt_lister.a\n"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -f $(STATICLIB_DIR)/libpmtpartition_tool.a ]; then
|
||||
printf " - Not found: $(STATICLIB_DIR)/libpmtpartition_tool.a\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
printf " - Compressing...\n"
|
||||
mkdir -p static-lib-pack
|
||||
cd static-lib-pack
|
||||
cp jni/include/pmt.h .
|
||||
mkdir -p include
|
||||
mv pmt.h include/
|
||||
zip -rq pmt-static-lib-pack.zip *.a include || exit 1
|
||||
rm -rf include
|
||||
sleep 1
|
||||
printf " - Success.\n\n"
|
||||
cd ..
|
||||
}
|
||||
|
||||
case "${1}" in
|
||||
make-deb)
|
||||
case "${2}" in
|
||||
arm64-v8a)
|
||||
PREFIX="64"
|
||||
ARM_PREFIX="-v8a"
|
||||
;;
|
||||
armeabi-v7a)
|
||||
PREFIX="32"
|
||||
ARM_PREFIX=""
|
||||
;;
|
||||
*)
|
||||
abort " - Error: unknown architecture flag: $2. Avaiable: arm64-v8a & armeabi-v7a.\n"
|
||||
esac
|
||||
|
||||
case "${3}" in
|
||||
sudo)
|
||||
SUDO="sudo"
|
||||
;;
|
||||
no-sudo)
|
||||
SUDO=""
|
||||
;;
|
||||
*)
|
||||
SUDO=""
|
||||
esac
|
||||
gen_deb
|
||||
;;
|
||||
modpack)
|
||||
case "${2}" in
|
||||
arm64-v8a)
|
||||
STATICLIB_DIR="${CUR_DIR}/obj/local/${2}"
|
||||
;;
|
||||
armeabi-v7a)
|
||||
STATICLIB_DIR="${CUR_DIR}/obj/local/${2}"
|
||||
;;
|
||||
*)
|
||||
abort " - Error: unknown architecture flag: ${2}. Avaiable: arm64-v8a & armeabi-v7a.\n"
|
||||
esac
|
||||
|
||||
gen_modpack
|
||||
;;
|
||||
*)
|
||||
abort "${0}: invalid operand.\nUse the make-deb flag to create a deb package, and the modpack flag to create packages for static libraries."
|
||||
esac
|
||||
|
||||
# end of script
|
||||
Reference in New Issue
Block a user