Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 12 additions & 17 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -325,34 +325,29 @@ jobs:
strip craftos
- name: Build AppImage
run: |
mkdir icons
unzip resources/linux-icons.zip -d icons
mkdir AppDir
curl -sLo AppDir/AppRun https://github.com/AppImage/AppImageKit/releases/download/13/AppRun-x86_64
chmod a+x AppDir/AppRun
if [[ $GITHUB_REF =~ luajit ]]; then
mkdir AppDir icons
unzip resources/linux-icons.zip -d icons
install -D -m 0644 icons/CraftOS-PC.desktop AppDir/cc.craftos-pc.CraftOS-PC-Accelerated.desktop
install -D -m 0644 icons/CraftOS-PC.desktop AppDir/usr/share/applications/CraftOS-PC-Accelerated.desktop
install -D -m 0644 icons/1024.png AppDir/craftos-luajit.png
install -D -m 0755 craftos AppDir/usr/bin/craftos-luajit
install -D -m 0755 craftos2-luajit/src/libluajit.so AppDir/usr/lib/libluajit.so
install -D -m 0644 resources/appdata.xml AppDir/usr/share/metainfo/cc.craftos-pc.CraftOS-PC-Accelerated.appdata.xml
# this gets all libraries required recursively (?)
ldd ./craftos | grep -o '/lib/[^ ]*\.so[^ :]*' | grep -Ev 'libstdc\+\+|libm\.|libgcc|libc\.|libX|libx|libpulse|libdbus|libsystemd|libreadline|libpthread|libdl|librt|libbsd|libnsl|libresolv' | sort | uniq | tee /dev/stderr | xargs -I {} cp -Lp {} AppDir/usr/lib
cp -Lp /lib/x86_64-linux-gnu/libX11.so.6 AppDir/usr/lib
mkdir -p AppDir/usr/lib/ssl
cp -Lp /etc/ssl/certs/ca-certificates.crt AppDir/usr/lib/ssl/cert.pem
lua -e 'local file = assert(io.open("AppDir/usr/lib/libcrypto.so.1.1", "rb")) local data = file:read("*a") file:close() file = assert(io.open("AppDir/usr/lib/libcrypto.so.1.1", "wb")) file:write(data:gsub("/usr(/lib/ssl[^\0]*\0)", ".%1\0\0\0")) file:close()'
else
install -D -m 0644 icons/CraftOS-PC.desktop AppDir/cc.craftos-pc.CraftOS-PC.desktop
install -D -m 0644 icons/CraftOS-PC.desktop AppDir/usr/share/applications/CraftOS-PC.desktop
install -D -m 0644 icons/1024.png AppDir/craftos.png
install -D -m 0755 craftos AppDir/usr/bin/craftos
install -D -m 0755 craftos2-lua/src/liblua.so AppDir/usr/lib/libcraftos2-lua.so
install -D -m 0644 resources/appdata.xml AppDir/usr/share/metainfo/cc.craftos-pc.CraftOS-PC.appdata.xml
make AppDir
fi
curl -sLo AppDir/AppRun https://github.com/AppImage/AppImageKit/releases/download/13/AppRun-x86_64
chmod a+x AppDir/AppRun

mkdir -p AppDir/usr/share/craftos
cp -Rp /usr/local/share/craftos/rom /usr/local/share/craftos/debug /usr/local/share/craftos/bios.lua /usr/local/share/craftos/hdfont.bmp AppDir/usr/share/craftos/
# this gets all libraries required recursively (?)
ldd ./craftos | grep -o '/lib/[^ ]*\.so[^ :]*' | grep -Ev 'libstdc\+\+|libm\.|libgcc|libc\.|libX|libx|libpulse|libdbus|libsystemd|libreadline|libpthread|libdl|librt|libbsd|libnsl|libresolv' | sort | uniq | tee /dev/stderr | xargs -I {} cp -Lp {} AppDir/usr/lib
cp -Lp /lib/x86_64-linux-gnu/libX11.so.6 AppDir/usr/lib
mkdir -p AppDir/usr/lib/ssl
cp -Lp /etc/ssl/certs/ca-certificates.crt AppDir/usr/lib/ssl/cert.pem
lua -e 'local file = assert(io.open("AppDir/usr/lib/libcrypto.so.1.1", "rb")) local data = file:read("*a") file:close() file = assert(io.open("AppDir/usr/lib/libcrypto.so.1.1", "wb")) file:write(data:gsub("/usr(/lib/ssl[^\0]*\0)", ".%1\0\0\0")) file:close()'
appimagetool -s AppDir CraftOS-PC.x86_64.AppImage
- name: Upload AppImage
uses: shogo82148/actions-upload-release-asset@v1.6.3
Expand Down
148 changes: 140 additions & 8 deletions Makefile.in
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
MAKEFLAGS+=--warn-undefined-variables
CC=@CC@
CXX=@CXX@
CFLAGS=@CFLAGS@
Expand All @@ -7,8 +8,16 @@ LDFLAGS=@LDFLAGS@
LIBEXT=.so
ifndef OS
ifeq (@OUT_TARGET@, craftos)
ifeq ($(shell uname), Linux)
EXTRA_PLATFORM_INSTALL_TARGETS=install-linux fixup-liblua-path
endif
endif
endif
ifndef OS
ifeq (@OUT_TARGET@, craftos)
ifeq ($(shell uname), Darwin)
LIBEXT=.dylib
EXTRA_PLATFORM_INSTALL_TARGETS=install-darwin
endif
endif
endif
Expand All @@ -21,11 +30,22 @@ LIBEXT=.dylib
endif
endif
endif
INSTALL_TARGETS?=install-bin install-liblua $(EXTRA_PLATFORM_INSTALL_TARGETS)
PREFIX?=@prefix@
prefix=$(PREFIX)
DESTDIR?=@exec_prefix@
exec_prefix=@exec_prefix@
ifdef DESTDIR
$(if $(findstring /bin,$(DESTDIR)), \
$(warning "The DESTDIR variable was significantly changed. Please set BINDIR if you would like to change where binaries will be installed."))
endif
BINDIR=@bindir@
SHAREDIR=@datarootdir@
INCLUDEDIR=@includedir@
LIBDIR=@libdir@
MACAPPDIR=$(DESTDIR)/$(PREFIX)/Applications
LIBLUA_NAME=libcraftos2-liblua
ifneq (/usr,$(PREFIX))
CPPFLAGS:=$(CPPFLAGS) -DCUSTOM_ROM_DIR=\"$(PREFIX)/share/craftos\"
CPPFLAGS:=$(CPPFLAGS) -DCUSTOM_ROM_DIR=\"$(SHAREDIR)/craftos\"
endif
SDIR=@srcdir@/src
IDIR=@srcdir@/api
Expand Down Expand Up @@ -126,6 +146,21 @@ $(ODIR)/apis_%_handle.o: $(SDIR)/apis/handles/%_handle.cpp $(SDIR)/apis/handles/
echo " [CXX] $@"
$(CXX) -o $@ -c $(CPPFLAGS) $(CXXFLAGS) $(CFLAGS) $<

AppDir: craftos
mkdir AppDir
$(MAKE) DESTDIR=AppDir $(INSTALL_TARGETS) extra-install-appstream
cp resources/linux-icons/1024.png AppDir/craftos.png
# Vendor SSL certificates (needed for network requests to work properly?)
# XXX: Might not be necessary since https://github.com/AppImage/appimagetool/pull/32
mkdir -p AppDir/usr/lib/ssl
cp -Lp /etc/ssl/certs/ca-certificates.crt AppDir/usr/lib/ssl/cert.pem
# Vendor libraries
# this gets all libraries required recursively (?)
ldd ./craftos | grep -o '/lib/[^ ]*\.so[^ :]*' | grep -Ev 'libstdc\+\+|libm\.|libgcc|libc\.|libX|libx|libpulse|libdbus|libsystemd|libreadline|libpthread|libdl|librt|libbsd|libnsl|libresolv' | sort | uniq | tee /dev/stderr | xargs -I {} cp -Lp {} AppDir/usr/lib
cp -Lp /lib/x86_64-linux-gnu/libX11.so.6 AppDir/usr/lib
# XXX: patch libcrypto
lua -e 'local file = assert(io.open("AppDir/usr/lib/libcrypto.so.1.1", "rb")) local data = file:read("*a") file:close() file = assert(io.open("AppDir/usr/lib/libcrypto.so.1.1", "wb")) file:write(data:gsub("/usr(/lib/ssl[^\0]*\0)", ".%1\0\0\0")) file:close()'

mac-plugin:
echo " [LD] ccemux.bundle"
$(CXX) -std=c++17 -bundle -fpic -o ccemux.bundle examples/ccemux.cpp craftos2-lua/src/liblua$(LIBEXT) -lSDL2 -Icraftos2-lua/include -Iapi
Expand All @@ -140,15 +175,112 @@ clean: $(ODIR)

rebuild: clean craftos

install: craftos
echo " [CP] $(DESTDIR)/craftos"
cp craftos $(DESTDIR)/craftos
fixup-liblua-path: craftos $(filter linux-plugin,$(MAKECMDGOALS))
echo " [FIXUP] craftos"
patchelf --replace-needed craftos2-lua/src/liblua.so "$(LIBLUA_NAME)$(LIBEXT)" craftos
if [ -f ccemux$(LIBEXT) ]; then \
echo " [FIXUP] ccemux$(LIBEXT)"; \
patchelf --replace-needed "craftos2-lua/src/liblua$(LIBEXT)" "$(LIBLUA_NAME)$(LIBEXT)" "ccemux$(LIBEXT)"; \
fi

install-darwin: macapp
cp -r CraftOS-PC.app $(DESTDIR)$(MACAPPDIR)

install-linux:
echo " [MKDIR] $(DESTDIR)$(SHAREDIR)/applications"
mkdir -p "$(DESTDIR)$(SHAREDIR)/applications"
echo " [CP] resources/CraftOS-PC.desktop"
cp resources/CraftOS-PC.desktop "$(DESTDIR)$(SHAREDIR)/applications"

for dimension in 16 24 32 48 64 96 128 256 1024; do \
icondir="$(DESTDIR)$(SHAREDIR)/icons/hicolor/$${dimension}x$${dimension}/apps"; \
echo " [MKDIR] $${icondir}"; \
mkdir -p "$${icondir}"; \
echo " [CP] resources/linux-icons/$${dimension}.png"; \
cp "resources/linux-icons/$${dimension}.png" "$${icondir}/craftos.png"; \
done


install-bin: craftos $(filter fixup-liblua-path,$(MAKECMDGOALS))
echo " [MKDIR] $(DESTDIR)$(BINDIR)"
mkdir -p "$(DESTDIR)$(BINDIR)"
echo " [CP] craftos"
cp craftos "$(DESTDIR)$(BINDIR)/craftos"


# craftos2-lua does have a ``make install`` rule, but it installs a lot of
# files that conflict with a standard Lua installation.
install-liblua: craftos2-lua/src/liblua$(LIBEXT)
echo " [MKDIR] $(DESTDIR)$(LIBDIR)"
mkdir "$(DESTDIR)$(LIBDIR)"
echo " [CP] craftos2-lua/src/liblua$(LIBEXT)"
cp craftos2-lua/src/liblua$(LIBEXT) $(DESTDIR)$(LIBDIR)/$(LIBLUA_NAME)$(LIBEXT)

install: $(INSTALL_TARGETS)

# Not installed by default, since some distributions (e.g. Fedora/RHEL) expect
# headers to be packaged seperately.
extra-install-headers:
echo " [MKDIR] $(DESTDIR)$(INCLUDEDIR)"
mkdir -p "$(DESTDIR)$(INCLUDEDIR)"
echo " [CP] api"
cp -R api "$(DESTDIR)$(INCLUDEDIR)/CraftOS-PC"
echo " [CP] craftos2-lua/include"
cp -R craftos2-lua/include/* "$(DESTDIR)$(INCLUDEDIR)/CraftOS-PC"

# Not installed by default, since this is not always wanted.
extra-install-linux-plugin: linux-plugin fixup-liblua-path
echo " [MKDIR] $(DESTDIR)$(SHAREDIR)/craftos/plugins"
mkdir -p "$(DESTDIR)$(SHAREDIR)/craftos/plugins"
echo " [CP] ccemux$(LIBEXT)"
cp "ccemux$(LIBEXT)" "$(DESTDIR)$(SHAREDIR)/craftos/plugins"

# Not installed by default, since this is not always wanted.
extra-install-apport:
echo " [MKDIR] $(DESTDIR)$(SHAREDIR)/apport/package-hooks"
mkdir -p "$(DESTDIR)$(SHAREDIR)/apport/package-hooks"
echo " [CP] resources/apport/apport_hook.py"
cp resources/apport/apport_hook.py $(DESTDIR)$(SHAREDIR)/apport/package-hooks/craftos-pc.py
cp resources/apport/apport_hook.py $(DESTDIR)$(SHAREDIR)/apport/package-hooks/source_craftos-pc.py
echo " [MKDIR] $(DESTDIR)$(SYSCONFDIR)/apport/crashdb.conf.d"
mkdir -p "$(DESTDIR)$(SYSCONFDIR)/apport/crashdb.conf.d"
echo " [CP] resources/apport/apport_crashdb.conf"
cp resources/apport/apport_crashdb.conf $(DESTDIR)$(SYSCONFDIR)/apport/crashdb.conf.d/craftos_pc-crashdb.conf

# Not installed by default, since this is not always wanted.
extra-install-appstream:
echo " [MKDIR] $(DESTDIR)$(SHAREDIR)/metainfo"
mkdir -p "$(DESTDIR)$(SHAREDIR)/metainfo"
echo " [CP] resources/appdata.xml"
cp resources/appdata.xml $(DESTDIR)$(SHAREDIR)/metainfo/cc.craftos-pc.CraftOS-PC.appdata.xml
echo " [MKDIR] $(DESTDIR)$(SHAREDIR)/applications"
mkdir -p "$(DESTDIR)$(SHAREDIR)/applications"
# XXX: Should we be installing the .desktop file into the AppStream-friendly location by default?
echo " [CP] resources/CraftOS-PC.desktop"
cp resources/CraftOS-PC.desktop "$(DESTDIR)$(SHAREDIR)/applications/cc.craftos-pc.CraftOS-PC.desktop"

uninstall:
echo " [RM] $(DESTDIR)/craftos"
rm $(DESTDIR)/craftos
echo " [RM] $(DESTDIR)$(BINDIR)/craftos"
rm -f "$(DESTDIR)$(BINDIR)/craftos"
echo " [RM] $(DESTDIR)$(SHAREDIR)/applications/CraftOS-PC.desktop"
rm -f "$(DESTDIR)$(SHAREDIR)/applications/CraftOS-PC.desktop"
echo ' [RM] $(DESTDIR)$(SHAREDIR)/icons/hicolor/*/apps/craftos.png'
rm -f "$(DESTDIR)$(SHAREDIR)/icons/hicolor/*/apps/craftos.png"
echo ' [RM] $(DESTDIR)$(LIBDIR)/$(LIBLUA_NAME)$(LIBEXT)'
rm -f "$(DESTDIR)$(LIBDIR)/$(LIBLUA_NAME)$(LIBEXT)"
echo ' [RM] $(DESTDIR)$(INCLUDEDIR)/CraftOS-PC'
rm -rf "$(DESTDIR)$(INCLUDEDIR)/CraftOS-PC"
echo ' [RM] $(DESTDIR)$(MACAPPDIR)/CraftOS-PC.app'
rm -rf "$(DESTDIR)$(MACAPPDIR)/CraftOS-PC.app"
echo ' [RM] $(DESTDIR)$(SYSCONFDIR)/apport/crashdb.conf.d/craftos_pc-crashdb.conf'
rm -f "$(DESTDIR)$(SYSCONFDIR)/apport/crashdb.conf.d/craftos_pc-crashdb.conf"
echo ' [RM] $(DESTDIR)$(SHAREDIR)/apport/package-hooks/source_craftos-pc.py'
rm -f "$(DESTDIR)$(SHAREDIR)/apport/package-hooks/source_craftos-pc.py"
echo ' [RM] $(DESTDIR)$(SHAREDIR)/apport/package-hooks/craftos-pc.py'
rm -f "$(DESTDIR)$(SHAREDIR)/apport/package-hooks/craftos-pc.py"

test: craftos
./craftos --headless --script $(shell pwd)/resources/CraftOSTest.lua -d "$(shell mktemp -d)"

.SILENT:
.PHONY: all macapp clean rebuild install install-bin install-headers install-liblua install-linux install-darwin extra-install-linux-plugin extra-install-apport extra-install-appstream uninstall test
.SILENT:
15 changes: 15 additions & 0 deletions resources/CraftOS-PC.desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# SPDX-FileCopyrightText: 2019-2024 JackMacWindows
#
# SPDX-License-Identifier: MIT

[Desktop Entry]
Version=1.0
Name=CraftOS-PC
GenericName=Advanced ComputerCraft emulator
Exec=craftos
Icon=craftos
StartupWMClass=craftos
Terminal=false
Type=Application
Categories=Utility;Development;
Keywords=craftos;computercraft;emulator;
9 changes: 9 additions & 0 deletions resources/apport/apport_crashdb.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# SPDX-FileCopyrightText: 2019-2024 JackMacWindows
#
# SPDX-License-Identifier: MIT

craftos_pc = {
'impl': 'launchpad',
'project': 'craftos-pc',
'bug_pattern_base': None,
}
10 changes: 10 additions & 0 deletions resources/apport/apport_hook.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# SPDX-FileCopyrightText: 2019-2024 JackMacWindows
#
# SPDX-License-Identifier: MIT

from apport.hookutils import *
import apport.packaging

def add_info(report, ui):
if not apport.packaging.is_distro_package(report['Package'].split()[0]):
report['CrashDB'] = 'craftos_pc'
Binary file removed resources/linux-icons.zip
Binary file not shown.
Binary file added resources/linux-icons/1024.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/linux-icons/128.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/linux-icons/16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/linux-icons/24.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/linux-icons/256.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/linux-icons/32.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/linux-icons/48.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/linux-icons/64.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/linux-icons/96.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading