forked from semios/semios-packages
Compare commits
1
Commits
readme
..
zipsupport
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0ada9d32fb |
@@ -1,24 +0,0 @@
|
||||
This is free and unencumbered software released into the public domain.
|
||||
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||
distribute this software, either in source code form or as a compiled
|
||||
binary, for any purpose, commercial or non-commercial, and by any
|
||||
means.
|
||||
|
||||
In jurisdictions that recognize copyright laws, the author or authors
|
||||
of this software dedicate any and all copyright interest in the
|
||||
software to the public domain. We make this dedication for the benefit
|
||||
of the public at large and to the detriment of our heirs and
|
||||
successors. We intend this dedication to be an overt act of
|
||||
relinquishment in perpetuity of all present and future rights to this
|
||||
software under copyright law.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more information, please refer to <https://unlicense.org/>
|
||||
@@ -1,47 +0,0 @@
|
||||
# SemiOS Packages
|
||||
|
||||
This is the SemiOS source package collection.
|
||||
|
||||
## Usage
|
||||
|
||||
To build a package for your native target, run:
|
||||
|
||||
```shell
|
||||
./x build <package name>
|
||||
```
|
||||
|
||||
To cross-build a package for another target, run:
|
||||
|
||||
```shell
|
||||
./x --target <target triple> build <package name>
|
||||
```
|
||||
|
||||
After a package is successfully built, you can find the build artifacts
|
||||
at `./packages/<package name>/target/*.pkg`.
|
||||
|
||||
To clean building files for a package, run:
|
||||
|
||||
```shell
|
||||
./x clean <package name> # Clean a package
|
||||
./x clean --all # Clean all packages
|
||||
```
|
||||
|
||||
## Targets
|
||||
|
||||
This repository is for SemiOS targets only. Other targets are not guaranteed to work.
|
||||
Currently, we support:
|
||||
|
||||
- aarch64-semios-linux
|
||||
- riscv64-semios-linux
|
||||
- x86_64-semios-linux
|
||||
|
||||
## Atom Builds
|
||||
|
||||
*Atom Build* is a technology to make reproducible building environments. To build a
|
||||
package in its atom environment, run:
|
||||
|
||||
```shell
|
||||
./x --atombuild build <package name>
|
||||
```
|
||||
|
||||
You can use the `--atombuild` flag with other flags described above.
|
||||
+42
-10
@@ -4,6 +4,7 @@ import sys
|
||||
import tarfile
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
import zipfile
|
||||
|
||||
|
||||
def filename(url):
|
||||
@@ -128,6 +129,25 @@ def tar_common_root(tar: tarfile.TarFile) -> str | None:
|
||||
return root
|
||||
|
||||
|
||||
def zip_common_root(zip_file: zipfile.ZipFile) -> str | None:
|
||||
members = zip_file.infolist()
|
||||
if not members:
|
||||
return None
|
||||
root = None
|
||||
for member in members:
|
||||
path = member.filename.replace('\\', '/').lstrip('./').lstrip('/')
|
||||
if not path:
|
||||
continue
|
||||
this_root = path.split('/')[0]
|
||||
if this_root in ('', '.', '..'):
|
||||
continue
|
||||
if root is None:
|
||||
root = this_root
|
||||
elif this_root != root:
|
||||
return None
|
||||
return root
|
||||
|
||||
|
||||
def sources_dir_name() -> str:
|
||||
with open("./target/sources.tag") as file:
|
||||
return file.read()
|
||||
@@ -139,16 +159,28 @@ def source_url(url: str):
|
||||
download_path = f"./target/{filename(url)}"
|
||||
download(url, download_path)
|
||||
|
||||
with tarfile.open(download_path, "r") as tar:
|
||||
common_root = tar_common_root(tar)
|
||||
extract_dir = "./target"
|
||||
sources_dir = f"./target/{common_root}"
|
||||
if common_root in ["", ".", "None"]:
|
||||
extract_dir = "./target/sources"
|
||||
sources_dir = "./target/sources"
|
||||
tar.extractall(extract_dir)
|
||||
with open("./target/sources.tag", "wt+") as file:
|
||||
file.write(sources_dir)
|
||||
if download_path.endswith(".zip"):
|
||||
with zipfile.ZipFile(download_path, "r") as zip:
|
||||
common_root = zip_common_root(zip)
|
||||
else:
|
||||
with tarfile.open(download_path, "r") as tar:
|
||||
common_root = tar_common_root(tar)
|
||||
|
||||
extract_dir = "./target"
|
||||
sources_dir = f"./target/{common_root}"
|
||||
if common_root in ["", ".", None]:
|
||||
extract_dir = "./target/sources"
|
||||
sources_dir = "./target/sources"
|
||||
|
||||
if download_path.endswith(".zip"):
|
||||
with zipfile.ZipFile(download_path, "r") as zip:
|
||||
zip.extractall(extract_dir)
|
||||
else:
|
||||
with tarfile.open(download_path, "r") as tar:
|
||||
tar.extractall(extract_dir)
|
||||
|
||||
with open("./target/sources.tag", "wt+") as file:
|
||||
file.write(sources_dir)
|
||||
|
||||
|
||||
def _git_repo_name(url: str) -> str:
|
||||
|
||||
@@ -119,6 +119,7 @@ def cmd_build_package(package: str):
|
||||
"version": pkgver,
|
||||
"arch": pkgarch,
|
||||
"description": pkginfo[lib.make._key_description],
|
||||
"maintainers": pkginfo[lib.make._key_maintainers],
|
||||
"dependencies": pkginfo[lib.make._key_dependencies],
|
||||
"provides": pkginfo[lib.make._key_provides],
|
||||
"recommendations": pkginfo[lib.make._key_recommendations],
|
||||
|
||||
Reference in New Issue
Block a user