From 1f7e95308c6aaac655d2cb9948cd50e4fcafbbbd Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Fri, 5 Feb 2021 17:26:50 +0100 Subject: [PATCH] WIP: Distribute klkt and mkvpropedit inside the lektord appimage - Also set a correct version string - Prints AppImage env variables if found at launch time - Try to launch klkt from inside the AppImage if not found outside --- Makefile.am | 35 ++++++++----------- Makefile.in | 26 +++++++-------- configure | 85 ++++++++++++++++++++++++++++++++++++++--------- configure.ac | 49 ++++++++++++++++----------- inc/Makefile.in | 2 ++ man/Makefile.in | 2 ++ src/Makefile.am | 6 +--- src/Makefile.in | 58 ++++++-------------------------- src/main/server.c | 61 ++++++++++++++++++++++++---------- 9 files changed, 182 insertions(+), 142 deletions(-) diff --git a/Makefile.am b/Makefile.am index 02189bfe..c80cb052 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,18 +1,14 @@ ACLOCAL_AMFLAGS = -I config/m4 -SUBDIRS = man inc src - -bin_SCRIPTS = lkt_show_config - +SUBDIRS = man inc src +bin_SCRIPTS = lkt_show_config noinst_SCRIPTS = utils/scripts/manpage.bash CLEANFILES = utils/scripts/manpage.bash if LKT_APPIMAGE # Build appimages, needs for lektor to be installed -APPIMAGE_DEPS = appimage-lektord appimage-lkt -if LKT_KLKT -APPIMAGE_DEPS += appimage-klkt -endif +APPIMAGE_DEPS = appimage-lektord appimage-lkt +APPDIR = AppImage/lektord-@LKT_VERSION@ appimage: $(APPIMAGE_DEPS) appimage-common: install @@ -20,13 +16,20 @@ appimage-common: install cp $(top_srcdir)/utils/desktop/lektor.png AppImage/lektor.png appimage-lektord: install appimage-common - - $(LKT_LINUXDEPLOY) --appdir AppImage/lektord \ + $(LKT_LINUXDEPLOY) --appdir $(APPDIR) --executable @MKVPROPEDIT@ +if LKT_KLKT + $(LKT_LINUXDEPLOY) --appdir $(APPDIR) \ + --desktop-file $(top_srcdir)/utils/desktop/klkt.desktop \ + --icon-file AppImage/lektor.png \ + --executable $(bindir)/klkt + EXTRA_QT_PLUGINS=xcb $(LKT_LINUXDEPLOYQT) --appdir $(APPDIR) +endif + $(LKT_LINUXDEPLOY) --appdir $(APPDIR) \ --desktop-file $(top_srcdir)/utils/desktop/lektord.desktop \ --icon-file AppImage/lektor.png \ --executable $(bindir)/lektord cp -rf $(top_srcdir)/utils/licenses AppImage/lektord/usr/share/ - $(LKT_APPIMAGETOOL) AppImage/lektord + $(LKT_APPIMAGETOOL) $(APPDIR) appimage-lkt: install appimage-common $(LKT_LINUXDEPLOY) --appdir AppImage/lkt \ @@ -35,16 +38,6 @@ appimage-lkt: install appimage-common --executable $(bindir)/lkt $(LKT_APPIMAGETOOL) AppImage/lkt -if LKT_KLKT -appimage-klkt: install appimage-common - $(LKT_LINUXDEPLOY) --appdir AppImage/klkt \ - --desktop-file $(top_srcdir)/utils/desktop/klkt.desktop \ - --icon-file AppImage/lektor.png \ - --executable $(bindir)/klkt - EXTRA_QT_PLUGINS=xcb $(LKT_LINUXDEPLOYQT) --appdir AppImage/klkt - cp -rf $(top_srcdir)/utils/licenses AppImage/klkt/usr/share/ - $(LKT_APPIMAGETOOL) AppImage/klkt -endif clean-local: -rm -rf AppImage endif diff --git a/Makefile.in b/Makefile.in index 6ed689ff..fdf771ee 100644 --- a/Makefile.in +++ b/Makefile.in @@ -88,7 +88,6 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@am__append_1 = appimage-klkt subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/autotroll.m4 \ @@ -305,6 +304,7 @@ LKT_PATH_BUILD = @LKT_PATH_BUILD@ LKT_PATH_SOURCE = @LKT_PATH_SOURCE@ LKT_PREFIX_PATH = @LKT_PREFIX_PATH@ LKT_STATIC_MODULE = @LKT_STATIC_MODULE@ +LKT_VERSION = @LKT_VERSION@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ @@ -312,6 +312,7 @@ MAKEINFO = @MAKEINFO@ MAN = @MAN@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ +MKVPROPEDIT = @MKVPROPEDIT@ MOC = @MOC@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -415,8 +416,8 @@ noinst_SCRIPTS = utils/scripts/manpage.bash CLEANFILES = utils/scripts/manpage.bash # Build appimages, needs for lektor to be installed -@LKT_APPIMAGE_TRUE@APPIMAGE_DEPS = appimage-lektord appimage-lkt \ -@LKT_APPIMAGE_TRUE@ $(am__append_1) +@LKT_APPIMAGE_TRUE@APPIMAGE_DEPS = appimage-lektord appimage-lkt +@LKT_APPIMAGE_TRUE@APPDIR = AppImage/lektord-@LKT_VERSION@ all: all-recursive .SUFFIXES: @@ -970,13 +971,18 @@ uninstall-am: uninstall-binSCRIPTS @LKT_APPIMAGE_TRUE@ cp $(top_srcdir)/utils/desktop/lektor.png AppImage/lektor.png @LKT_APPIMAGE_TRUE@appimage-lektord: install appimage-common - -@LKT_APPIMAGE_TRUE@ $(LKT_LINUXDEPLOY) --appdir AppImage/lektord \ +@LKT_APPIMAGE_TRUE@ $(LKT_LINUXDEPLOY) --appdir $(APPDIR) --executable @MKVPROPEDIT@ +@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@ $(LKT_LINUXDEPLOY) --appdir $(APPDIR) \ +@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@ --desktop-file $(top_srcdir)/utils/desktop/klkt.desktop \ +@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@ --icon-file AppImage/lektor.png \ +@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@ --executable $(bindir)/klkt +@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@ EXTRA_QT_PLUGINS=xcb $(LKT_LINUXDEPLOYQT) --appdir $(APPDIR) +@LKT_APPIMAGE_TRUE@ $(LKT_LINUXDEPLOY) --appdir $(APPDIR) \ @LKT_APPIMAGE_TRUE@ --desktop-file $(top_srcdir)/utils/desktop/lektord.desktop \ @LKT_APPIMAGE_TRUE@ --icon-file AppImage/lektor.png \ @LKT_APPIMAGE_TRUE@ --executable $(bindir)/lektord @LKT_APPIMAGE_TRUE@ cp -rf $(top_srcdir)/utils/licenses AppImage/lektord/usr/share/ -@LKT_APPIMAGE_TRUE@ $(LKT_APPIMAGETOOL) AppImage/lektord +@LKT_APPIMAGE_TRUE@ $(LKT_APPIMAGETOOL) $(APPDIR) @LKT_APPIMAGE_TRUE@appimage-lkt: install appimage-common @LKT_APPIMAGE_TRUE@ $(LKT_LINUXDEPLOY) --appdir AppImage/lkt \ @@ -985,14 +991,6 @@ uninstall-am: uninstall-binSCRIPTS @LKT_APPIMAGE_TRUE@ --executable $(bindir)/lkt @LKT_APPIMAGE_TRUE@ $(LKT_APPIMAGETOOL) AppImage/lkt -@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@appimage-klkt: install appimage-common -@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@ $(LKT_LINUXDEPLOY) --appdir AppImage/klkt \ -@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@ --desktop-file $(top_srcdir)/utils/desktop/klkt.desktop \ -@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@ --icon-file AppImage/lektor.png \ -@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@ --executable $(bindir)/klkt -@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@ EXTRA_QT_PLUGINS=xcb $(LKT_LINUXDEPLOYQT) --appdir AppImage/klkt -@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@ cp -rf $(top_srcdir)/utils/licenses AppImage/klkt/usr/share/ -@LKT_APPIMAGE_TRUE@@LKT_KLKT_TRUE@ $(LKT_APPIMAGETOOL) AppImage/klkt @LKT_APPIMAGE_TRUE@clean-local: @LKT_APPIMAGE_TRUE@ -rm -rf AppImage diff --git a/configure b/configure index d3c9d402..5335546f 100755 --- a/configure +++ b/configure @@ -634,6 +634,7 @@ ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS +LKT_VERSION HAVE_CXX17 LKT_LIB_DIR LKT_LIB_LINK @@ -764,6 +765,7 @@ LKT_PATH_BUILD LKT_PATH_SOURCE TEST_SQLITE TEST_MAKE +MKVPROPEDIT MAN XXD target_alias @@ -2681,6 +2683,47 @@ $as_echo "no" >&6; } fi +# Extract the first word of "mkvpropedit", so it can be a program name with args. +set dummy mkvpropedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MKVPROPEDIT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MKVPROPEDIT in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKVPROPEDIT="$MKVPROPEDIT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MKVPROPEDIT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_MKVPROPEDIT" && ac_cv_path_MKVPROPEDIT=":" + ;; +esac +fi +MKVPROPEDIT=$ac_cv_path_MKVPROPEDIT +if test -n "$MKVPROPEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKVPROPEDIT" >&5 +$as_echo "$MKVPROPEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + # Extract the first word of "make", so it can be a program name with args. set dummy make; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 @@ -17290,6 +17333,9 @@ fi if test "$MAN" = ":"; then : as_fn_error $? "man is required" "$LINENO" 5 fi +if test "$MKVPROPEDIT" = ":"; then : + as_fn_error $? "mkvpropedit is required" "$LINENO" 5 +fi if test "$TEST_MAKE" = ":"; then : as_fn_error $? "make is required" "$LINENO" 5 fi @@ -17297,6 +17343,9 @@ if test "$TEST_SQLITE" = ":"; then : as_fn_error $? "sqlite3 is required" "$LINENO" 5 fi +# Where is mkvpropedit on your system, will be bundled in the appimage + + if ! test `sqlite3 --version | cut -f1 -d'.'` = 3 || \ ! test `sqlite3 --version | cut -f2 -d'.'` -ge 30; then : as_fn_error $? "sqlite in version >= 3.30 is needed" "$LINENO" 5 @@ -19504,10 +19553,29 @@ if test $? -ne 0 ; then as_fn_error $? "Faield to get sqlite3 with pkg-config, is dev lib for sqlite3 installed?" "$LINENO" 5 fi +################ +# CONF RESULTS # +################ + +cd $LKT_PATH_SOURCE + +# TODO: Find another way of doing it, with some integration in lkt. The +# problem is that this is script is only generated at configuration time and +# that must of the information is known at build time / is changed between +# different builds. +AFF_BUILTINS=`ls -d1 depends/*/ | cut -d'/' -f2` +AFF_BUILTINS=`echo $AFF_BUILTINS` +AFF_LASTTAG=`git describe --abbrev=0 --tags 2>/dev/null` +AFF_BRANCH=`git rev-parse --abbrev-ref HEAD` +AFF_VERSION=`git -C $LKT_PATH_SOURCE rev-list --count HEAD`.`git -C $LKT_PATH_SOURCE rev-parse --short HEAD` +LKT_VERSION="$AFF_BRANCH-mk7.$AFF_VERSION" + + ########## # OUTPUT # ########## +cd $LKT_PATH_BUILD ac_config_headers="$ac_config_headers inc/lektor/lktconfig.h" ac_config_files="$ac_config_files Makefile inc/Makefile src/Makefile man/Makefile" @@ -22088,22 +22156,6 @@ $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi -################ -# CONF RESULTS # -################ - -cd $LKT_PATH_SOURCE - -# TODO: Find another way of doing it, with some integration in lkt. The -# problem is that this is script is only generated at configuration time and -# that must of the information is known at build time / is changed between -# different builds. -AFF_BUILTINS=`ls -d1 depends/*/ | cut -d'/' -f2` -AFF_BUILTINS=`echo $AFF_BUILTINS` -AFF_LASTTAG=`git describe --abbrev=0 --tags 2>/dev/null` -AFF_BRANCH=`git rev-parse --abbrev-ref HEAD` -AFF_VERSION=`git -C $LKT_PATH_SOURCE rev-list --count HEAD`.`git -C $LKT_PATH_SOURCE rev-parse --short HEAD` -cd $LKT_PATH_BUILD LKT_CONFIG_RESULT=" ########## Lektor configuration ########### # @@ -22140,6 +22192,7 @@ LKT_CONFIG_RESULT=" # # AppImage configured...... $(test x$LKT_APPIMAGE == 'xyes' && echo 'yes' || echo 'no') # Patchelf................. $PATCHELF +# MkvPropedit.............. $MKVPROPEDIT # LinuxDeploy.............. $LKT_LINUXDEPLOY # AppImageTool............. $LKT_APPIMAGETOOL # diff --git a/configure.ac b/configure.ac index d7133fc1..ccdbea6e 100644 --- a/configure.ac +++ b/configure.ac @@ -9,10 +9,11 @@ AC_PREFIX_DEFAULT(/usr/local) # CHECKS # ########## -AC_PATH_PROG([XXD], [xxd], [:]) -AC_PATH_PROG([MAN], [man], [:]) -AC_PATH_PROG([TEST_MAKE], [make], [:]) -AC_PATH_PROG([TEST_SQLITE], [sqlite3], [:]) +AC_PATH_PROG([XXD], [xxd], [:]) +AC_PATH_PROG([MAN], [man], [:]) +AC_PATH_PROG([MKVPROPEDIT], [mkvpropedit], [:]) +AC_PATH_PROG([TEST_MAKE], [make], [:]) +AC_PATH_PROG([TEST_SQLITE], [sqlite3], [:]) LKT_PATH_SOURCE="$(dirname $(readlink -f "$0"))" LKT_PATH_BUILD="$(pwd)" @@ -69,10 +70,14 @@ AC_PROG_CC AC_PROG_INSTALL AC_PROG_CXX -AS_IF([test "$XXD" = ":"], [AC_MSG_ERROR([xxd is required]) ]) -AS_IF([test "$MAN" = ":"], [AC_MSG_ERROR([man is required]) ]) -AS_IF([test "$TEST_MAKE" = ":"], [AC_MSG_ERROR([make is required]) ]) -AS_IF([test "$TEST_SQLITE" = ":"], [AC_MSG_ERROR([sqlite3 is required])]) +AS_IF([test "$XXD" = ":"], [AC_MSG_ERROR([xxd is required]) ]) +AS_IF([test "$MAN" = ":"], [AC_MSG_ERROR([man is required]) ]) +AS_IF([test "$MKVPROPEDIT" = ":"], [AC_MSG_ERROR([mkvpropedit is required]) ]) +AS_IF([test "$TEST_MAKE" = ":"], [AC_MSG_ERROR([make is required]) ]) +AS_IF([test "$TEST_SQLITE" = ":"], [AC_MSG_ERROR([sqlite3 is required]) ]) + +# Where is mkvpropedit on your system, will be bundled in the appimage +AC_SUBST([MKVPROPEDIT]) AS_IF([! test `sqlite3 --version | cut -f1 -d'.'` = 3 || \ ! test `sqlite3 --version | cut -f2 -d'.'` -ge 30], @@ -324,18 +329,6 @@ if test $? -ne 0 ; then AC_MSG_ERROR([Faield to get sqlite3 with pkg-config, is dev lib for sqlite3 installed?]) fi -########## -# OUTPUT # -########## - -AC_CONFIG_HEADERS([inc/lektor/lktconfig.h]) -AC_OUTPUT([ - Makefile - inc/Makefile - src/Makefile - man/Makefile -]) - ################ # CONF RESULTS # ################ @@ -351,7 +344,22 @@ AFF_BUILTINS=`echo $AFF_BUILTINS` AFF_LASTTAG=`git describe --abbrev=0 --tags 2>/dev/null` AFF_BRANCH=`git rev-parse --abbrev-ref HEAD` AFF_VERSION=`git -C $LKT_PATH_SOURCE rev-list --count HEAD`.`git -C $LKT_PATH_SOURCE rev-parse --short HEAD` +LKT_VERSION="$AFF_BRANCH-mk7.$AFF_VERSION" +AC_SUBST([LKT_VERSION]) + +########## +# OUTPUT # +########## + cd $LKT_PATH_BUILD +AC_CONFIG_HEADERS([inc/lektor/lktconfig.h]) +AC_OUTPUT([ + Makefile + inc/Makefile + src/Makefile + man/Makefile +]) + LKT_CONFIG_RESULT=" ########## Lektor configuration ########### # @@ -388,6 +396,7 @@ LKT_CONFIG_RESULT=" # # AppImage configured...... $(test x$LKT_APPIMAGE == 'xyes' && echo 'yes' || echo 'no') # Patchelf................. $PATCHELF +# MkvPropedit.............. $MKVPROPEDIT # LinuxDeploy.............. $LKT_LINUXDEPLOY # AppImageTool............. $LKT_APPIMAGETOOL # diff --git a/inc/Makefile.in b/inc/Makefile.in index 7e75d8ff..7d85c520 100644 --- a/inc/Makefile.in +++ b/inc/Makefile.in @@ -235,6 +235,7 @@ LKT_PATH_BUILD = @LKT_PATH_BUILD@ LKT_PATH_SOURCE = @LKT_PATH_SOURCE@ LKT_PREFIX_PATH = @LKT_PREFIX_PATH@ LKT_STATIC_MODULE = @LKT_STATIC_MODULE@ +LKT_VERSION = @LKT_VERSION@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ @@ -242,6 +243,7 @@ MAKEINFO = @MAKEINFO@ MAN = @MAN@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ +MKVPROPEDIT = @MKVPROPEDIT@ MOC = @MOC@ NM = @NM@ NMEDIT = @NMEDIT@ diff --git a/man/Makefile.in b/man/Makefile.in index d592c364..db5208b7 100644 --- a/man/Makefile.in +++ b/man/Makefile.in @@ -217,6 +217,7 @@ LKT_PATH_BUILD = @LKT_PATH_BUILD@ LKT_PATH_SOURCE = @LKT_PATH_SOURCE@ LKT_PREFIX_PATH = @LKT_PREFIX_PATH@ LKT_STATIC_MODULE = @LKT_STATIC_MODULE@ +LKT_VERSION = @LKT_VERSION@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ @@ -224,6 +225,7 @@ MAKEINFO = @MAKEINFO@ MAN = $(abs_top_srcdir)/utils/scripts/manpage.bash MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ +MKVPROPEDIT = @MKVPROPEDIT@ MOC = @MOC@ NM = @NM@ NMEDIT = @NMEDIT@ diff --git a/src/Makefile.am b/src/Makefile.am index 59e7f840..6d4b9724 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -84,11 +84,7 @@ EXTRA_DIST = database/disk.sql database/memory.sql ## MAIN FILES ## ################ -bin_PROGRAMS = lektord lkt mkv_test - -## Test program for the new mkv writes -mkv_test_SOURCES = main/mkv_test.c base/common.c base/segv.c mkv/mkv.c mkv/utils.c mkv/write.c base/bufferfd.c -mkv_test_LDFLAGS = -pthread -ldl -static +bin_PROGRAMS = lektord lkt ## The lkt client lkt_SOURCES = main/lkt.c base/cmd.c base/common.c base/segv.c diff --git a/src/Makefile.in b/src/Makefile.in index e7980a23..adc6594e 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -134,8 +134,7 @@ host_triplet = @host@ # TODO pour le Kubat du futur: c'est pas beau, trouver un truc pour que ça se fasse tout seul @LKT_STATIC_MODULE_TRUE@am__append_8 = module/thread.c -bin_PROGRAMS = lektord$(EXEEXT) lkt$(EXEEXT) mkv_test$(EXEEXT) \ - $(am__EXEEXT_1) +bin_PROGRAMS = lektord$(EXEEXT) lkt$(EXEEXT) $(am__EXEEXT_1) @LKT_KLKT_TRUE@am__append_9 = klkt/klkt @LKT_KLKT_TRUE@am__append_10 = $(BUILT_SOURCES) @LKT_KLKT_TRUE@am__append_11 = $(BUILT_SOURCES) @@ -271,14 +270,6 @@ lkt_LDADD = $(LDADD) lkt_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(lkt_LDFLAGS) $(LDFLAGS) -o $@ -am_mkv_test_OBJECTS = main/mkv_test.$(OBJEXT) base/common.$(OBJEXT) \ - base/segv.$(OBJEXT) mkv/mkv.$(OBJEXT) mkv/utils.$(OBJEXT) \ - mkv/write.$(OBJEXT) base/bufferfd.$(OBJEXT) -mkv_test_OBJECTS = $(am_mkv_test_OBJECTS) -mkv_test_LDADD = $(LDADD) -mkv_test_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ - $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(mkv_test_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -294,8 +285,7 @@ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/inc/lektor depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__maybe_remake_depfiles = depfiles -am__depfiles_remade = base/$(DEPDIR)/bufferfd.Po base/$(DEPDIR)/cmd.Po \ - base/$(DEPDIR)/common.Po \ +am__depfiles_remade = base/$(DEPDIR)/cmd.Po base/$(DEPDIR)/common.Po \ base/$(DEPDIR)/liblektor_la-bufferfd.Plo \ base/$(DEPDIR)/liblektor_la-cmd.Plo \ base/$(DEPDIR)/liblektor_la-commands.Plo \ @@ -318,11 +308,9 @@ am__depfiles_remade = base/$(DEPDIR)/bufferfd.Po base/$(DEPDIR)/cmd.Po \ database/$(DEPDIR)/liblektor_la-user.Plo \ klkt/$(DEPDIR)/klkt-icons.qrc.Po klkt/$(DEPDIR)/klkt-klkt.Po \ klkt/$(DEPDIR)/klkt-klkt.moc.Po main/$(DEPDIR)/lkt.Po \ - main/$(DEPDIR)/mkv_test.Po main/$(DEPDIR)/server.Po \ - mkv/$(DEPDIR)/liblektor_la-mkv.Plo \ + main/$(DEPDIR)/server.Po mkv/$(DEPDIR)/liblektor_la-mkv.Plo \ mkv/$(DEPDIR)/liblektor_la-utils.Plo \ - mkv/$(DEPDIR)/liblektor_la-write.Plo mkv/$(DEPDIR)/mkv.Po \ - mkv/$(DEPDIR)/utils.Po mkv/$(DEPDIR)/write.Po \ + mkv/$(DEPDIR)/liblektor_la-write.Plo \ module/$(DEPDIR)/liblektor_la-thread.Plo \ module/$(DEPDIR)/liblktmodrepo_la-module_repo.Plo \ module/$(DEPDIR)/liblktmodrepo_la-worker.Plo \ @@ -370,11 +358,11 @@ am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(liblektor_la_SOURCES) $(liblktmodrepo_la_SOURCES) \ $(liblktmodsdl_la_SOURCES) $(klkt_klkt_SOURCES) \ - $(lektord_SOURCES) $(lkt_SOURCES) $(mkv_test_SOURCES) + $(lektord_SOURCES) $(lkt_SOURCES) DIST_SOURCES = $(am__liblektor_la_SOURCES_DIST) \ $(liblktmodrepo_la_SOURCES) $(liblktmodsdl_la_SOURCES) \ $(am__klkt_klkt_SOURCES_DIST) $(lektord_SOURCES) \ - $(lkt_SOURCES) $(mkv_test_SOURCES) + $(lkt_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -461,6 +449,7 @@ LKT_PATH_BUILD = @LKT_PATH_BUILD@ LKT_PATH_SOURCE = @LKT_PATH_SOURCE@ LKT_PREFIX_PATH = @LKT_PREFIX_PATH@ LKT_STATIC_MODULE = @LKT_STATIC_MODULE@ +LKT_VERSION = @LKT_VERSION@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ @@ -468,6 +457,7 @@ MAKEINFO = @MAKEINFO@ MAN = @MAN@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ +MKVPROPEDIT = @MKVPROPEDIT@ MOC = @MOC@ NM = @NM@ NMEDIT = @NMEDIT@ @@ -604,8 +594,6 @@ liblektor_la_LDFLAGS = -avoid-version -pthread -lsqlite3 -ldl \ @LKT_STATIC_MODULE_TRUE@liblektor_la_LIBADD = liblktmodsdl.la liblktmodrepo.la CLEANFILES = database/disk.c database/memory.c $(am__append_11) EXTRA_DIST = database/disk.sql database/memory.sql $(am__append_10) -mkv_test_SOURCES = main/mkv_test.c base/common.c base/segv.c mkv/mkv.c mkv/utils.c mkv/write.c base/bufferfd.c -mkv_test_LDFLAGS = -pthread -ldl -static lkt_SOURCES = main/lkt.c base/cmd.c base/common.c base/segv.c lkt_LDFLAGS = -pthread -ldl -static lektord_SOURCES = main/server.c @@ -913,17 +901,6 @@ base/segv.$(OBJEXT): base/$(am__dirstamp) \ lkt$(EXEEXT): $(lkt_OBJECTS) $(lkt_DEPENDENCIES) $(EXTRA_lkt_DEPENDENCIES) @rm -f lkt$(EXEEXT) $(AM_V_CCLD)$(lkt_LINK) $(lkt_OBJECTS) $(lkt_LDADD) $(LIBS) -main/mkv_test.$(OBJEXT): main/$(am__dirstamp) \ - main/$(DEPDIR)/$(am__dirstamp) -mkv/mkv.$(OBJEXT): mkv/$(am__dirstamp) mkv/$(DEPDIR)/$(am__dirstamp) -mkv/utils.$(OBJEXT): mkv/$(am__dirstamp) mkv/$(DEPDIR)/$(am__dirstamp) -mkv/write.$(OBJEXT): mkv/$(am__dirstamp) mkv/$(DEPDIR)/$(am__dirstamp) -base/bufferfd.$(OBJEXT): base/$(am__dirstamp) \ - base/$(DEPDIR)/$(am__dirstamp) - -mkv_test$(EXEEXT): $(mkv_test_OBJECTS) $(mkv_test_DEPENDENCIES) $(EXTRA_mkv_test_DEPENDENCIES) - @rm -f mkv_test$(EXEEXT) - $(AM_V_CCLD)$(mkv_test_LINK) $(mkv_test_OBJECTS) $(mkv_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -943,7 +920,6 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c -@AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/bufferfd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/cmd.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/common.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@base/$(DEPDIR)/liblektor_la-bufferfd.Plo@am__quote@ # am--include-marker @@ -971,14 +947,10 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@klkt/$(DEPDIR)/klkt-klkt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@klkt/$(DEPDIR)/klkt-klkt.moc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@main/$(DEPDIR)/lkt.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@main/$(DEPDIR)/mkv_test.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@main/$(DEPDIR)/server.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mkv/$(DEPDIR)/liblektor_la-mkv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mkv/$(DEPDIR)/liblektor_la-utils.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@mkv/$(DEPDIR)/liblektor_la-write.Plo@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@mkv/$(DEPDIR)/mkv.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@mkv/$(DEPDIR)/utils.Po@am__quote@ # am--include-marker -@AMDEP_TRUE@@am__include@ @am__quote@mkv/$(DEPDIR)/write.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@module/$(DEPDIR)/liblektor_la-thread.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@module/$(DEPDIR)/liblktmodrepo_la-module_repo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@module/$(DEPDIR)/liblktmodrepo_la-worker.Plo@am__quote@ # am--include-marker @@ -1462,8 +1434,7 @@ clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \ clean-libtool clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-am - -rm -f base/$(DEPDIR)/bufferfd.Po - -rm -f base/$(DEPDIR)/cmd.Po + -rm -f base/$(DEPDIR)/cmd.Po -rm -f base/$(DEPDIR)/common.Po -rm -f base/$(DEPDIR)/liblektor_la-bufferfd.Plo -rm -f base/$(DEPDIR)/liblektor_la-cmd.Plo @@ -1490,14 +1461,10 @@ distclean: distclean-am -rm -f klkt/$(DEPDIR)/klkt-klkt.Po -rm -f klkt/$(DEPDIR)/klkt-klkt.moc.Po -rm -f main/$(DEPDIR)/lkt.Po - -rm -f main/$(DEPDIR)/mkv_test.Po -rm -f main/$(DEPDIR)/server.Po -rm -f mkv/$(DEPDIR)/liblektor_la-mkv.Plo -rm -f mkv/$(DEPDIR)/liblektor_la-utils.Plo -rm -f mkv/$(DEPDIR)/liblektor_la-write.Plo - -rm -f mkv/$(DEPDIR)/mkv.Po - -rm -f mkv/$(DEPDIR)/utils.Po - -rm -f mkv/$(DEPDIR)/write.Po -rm -f module/$(DEPDIR)/liblektor_la-thread.Plo -rm -f module/$(DEPDIR)/liblktmodrepo_la-module_repo.Plo -rm -f module/$(DEPDIR)/liblktmodrepo_la-worker.Plo @@ -1551,8 +1518,7 @@ install-ps-am: installcheck-am: installcheck-binPROGRAMS maintainer-clean: maintainer-clean-am - -rm -f base/$(DEPDIR)/bufferfd.Po - -rm -f base/$(DEPDIR)/cmd.Po + -rm -f base/$(DEPDIR)/cmd.Po -rm -f base/$(DEPDIR)/common.Po -rm -f base/$(DEPDIR)/liblektor_la-bufferfd.Plo -rm -f base/$(DEPDIR)/liblektor_la-cmd.Plo @@ -1579,14 +1545,10 @@ maintainer-clean: maintainer-clean-am -rm -f klkt/$(DEPDIR)/klkt-klkt.Po -rm -f klkt/$(DEPDIR)/klkt-klkt.moc.Po -rm -f main/$(DEPDIR)/lkt.Po - -rm -f main/$(DEPDIR)/mkv_test.Po -rm -f main/$(DEPDIR)/server.Po -rm -f mkv/$(DEPDIR)/liblektor_la-mkv.Plo -rm -f mkv/$(DEPDIR)/liblektor_la-utils.Plo -rm -f mkv/$(DEPDIR)/liblektor_la-write.Plo - -rm -f mkv/$(DEPDIR)/mkv.Po - -rm -f mkv/$(DEPDIR)/utils.Po - -rm -f mkv/$(DEPDIR)/write.Po -rm -f module/$(DEPDIR)/liblektor_la-thread.Plo -rm -f module/$(DEPDIR)/liblktmodrepo_la-module_repo.Plo -rm -f module/$(DEPDIR)/liblktmodrepo_la-worker.Plo diff --git a/src/main/server.c b/src/main/server.c index e472659d..2223ad06 100644 --- a/src/main/server.c +++ b/src/main/server.c @@ -61,10 +61,10 @@ __attribute__((destructor)) static void ___tty_enable_echo(void) { if (tcsetattr(STDIN_FILENO, TCSANOW, &___tty_save) == -1) - LOG_ERROR("GENERAL", "Failed to reset termios flags"); + LOG_ERROR("INIT", "Failed to reset termios flags"); errno = 0; if (fflush(stdin) != 0) - LOG_ERROR("GENERAL", "Failed to flush stdin: %s", strerror(errno)); + LOG_ERROR("INIT", "Failed to flush stdin: %s", strerror(errno)); } /* Recursive mkdir, where the last word of the string is a file, not a folder. */ @@ -100,16 +100,16 @@ ___kill_klkt(void) if (kill(___klkt_pid, SIGTERM) != 0) { kill(___klkt_pid, SIGKILL); - LOG_ERROR("GENERAL", "Failed to SIGTERM klkt with pid %ld, SIGKILL it", ___klkt_pid); + LOG_ERROR("INIT", "Failed to SIGTERM klkt with pid %ld, SIGKILL it", ___klkt_pid); return; } int status; do { if (waitpid(___klkt_pid, &status, WUNTRACED | WCONTINUED) == -1) - LOG_ERROR("GENERAL", "Failed to wait for child klkt with pid %ld", ___klkt_pid); + LOG_ERROR("INIT", "Failed to wait for child klkt with pid %ld", ___klkt_pid); - LOG_INFO("GENERAL", "Child klkt status is %s%d", + LOG_INFO("INIT", "Child klkt status is %s%d", /* String desc */ WIFEXITED(status) ? "exited with status " : WIFSIGNALED(status) ? "killed by signal " : @@ -128,11 +128,11 @@ launch_klkt(va_list UNUSED *___args) /* Check env variable! */ char *env_klkt_pid = getenv(LKT_ENV_KLKT_PID); if (NULL != env_klkt_pid) { - LOG_DEBUG("GENERAL", "Found " LKT_ENV_KLKT_PID " := %s", env_klkt_pid); + LOG_DEBUG("INIT", "Found " LKT_ENV_KLKT_PID " := %s", env_klkt_pid); ___klkt_pid = strtol(env_klkt_pid, NULL, 0); return 0; } - LOG_DEBUG("GENERAL", "No " LKT_ENV_KLKT_PID " env variable found, launch klkt ourself"); + LOG_DEBUG("INIT", "No " LKT_ENV_KLKT_PID " env variable found, launch klkt ourself"); /* Env var was not found, no existing lklt! Launch it ourself. */ char exe_path[LKT_LINE_MAX]; @@ -147,16 +147,20 @@ launch_klkt(va_list UNUSED *___args) posix_spawn_file_actions_addopen(&action, STDOUT_FILENO, "/dev/null", O_RDONLY, 0); posix_spawn_file_actions_addopen(&action, STDERR_FILENO, "/dev/null", O_RDONLY, 0); + bool appimage_once_goto = false; + if (appimage == NULL) { /* No AppImage */ +retry_without_appimage: + appimage_once_goto = true; if (read_self_exe(exe_path, LKT_LINE_MAX)) { - LOG_ERROR("GENERAL", "Failed to get the current executable path, not patching the PATH"); + LOG_ERROR("INIT", "Failed to get the current executable path, not patching the PATH"); goto error; } } else { /* AppImage */ safe_strncpy(exe_path, appimage, LKT_LINE_MAX); - LOG_DEBUG("GENERAL", "Running an AppImage, file is %s", appimage); + LOG_DEBUG("INIT", "Running an AppImage, file is %s", appimage); } char *current_dir = dirname(exe_path); @@ -164,7 +168,7 @@ launch_klkt(va_list UNUSED *___args) /* Normal try */ errno = 0; safe_snprintf(try_name, LKT_LINE_MAX, "%s/klkt", current_dir); - LOG_DEBUG("GENERAL", "Try to launch klkt with file %s", try_name); + LOG_DEBUG("INIT", "Try to launch klkt with file %s", try_name); GOTO_UNLESS(posix_spawn(&___klkt_pid, try_name, &action, NULL, args, environ), "Klkt launched!", end); @@ -172,25 +176,31 @@ launch_klkt(va_list UNUSED *___args) safe_snprintf(try_name, LKT_LINE_MAX, "%s/klkt-" LKT_ARCH ".AppImage", current_dir); errno = 0; args[0] = (char *) basename_appimage_arch; - LOG_DEBUG("GENERAL", "Try to launch klkt with file %s", try_name); + LOG_DEBUG("INIT", "Try to launch klkt with file %s", try_name); GOTO_UNLESS(posix_spawn(&___klkt_pid, try_name, &action, NULL, args, environ), "Klkt launched!", end); safe_snprintf(try_name, LKT_LINE_MAX, "%s/klkt.AppImage", current_dir); errno = 0; args[0] = (char *) basename_appimage_no_arch; - LOG_DEBUG("GENERAL", "Try to launch klkt with file %s", try_name); + LOG_DEBUG("INIT", "Try to launch klkt with file %s", try_name); GOTO_UNLESS(posix_spawn(&___klkt_pid, try_name, &action, NULL, args, environ), "Klkt launched!", end); /* Oupsi */ error: - LOG_ERROR("GENERAL", "Failed to spawn klkt (%s): %s", try_name, strerror(errno)); + LOG_ERROR("INIT", "Failed to spawn klkt (%s): %s", try_name, strerror(errno)); ___klkt_pid = 0; /* posix_spawnp may have modified it even in case of failure */ + + /* If we are an AppImage, klkt might be inside the AppImage, + * try to launch that executable */ + GOTO_UNLESS(appimage_once_goto, "Retry to launch klkt, without self executable path patching", + retry_without_appimage); + return 1; end: - LOG_INFO("GENERAL", "Klkt launched with pid %ld", ___klkt_pid, try_name); + LOG_INFO("INIT", "Klkt launched with pid %ld", ___klkt_pid, try_name); posix_spawn_file_actions_destroy(&action); /* Export the env var for klkt pid, reuse exe_path */ @@ -248,9 +258,24 @@ main(int argc, char *argv[]) reg_export(server_reg); if (read_self_exe(exe, PATH_MAX)) - LOG_WARN("GENERAL", "Failed to read self executable path, " - "restart may not work"); + LOG_WARN("INIT", "Failed to read self executable path, restart may not work"); executable_name = exe; + LOG_WARN("INIT", "The argv[0] from main is: %s", exe); + + /* Detect AppImage. Those env var names are defined for V2 AppImages, see + * https://docs.appimage.org/packaging-guide/environment-variables.html */ + char *env_APPIMAGE = getenv("APPIMAGE"); + char *env_APPDIR = getenv("APPDIR"); + char *env_OWD = getenv("OWD"); + char *env_ARGV0 = getenv("ARGV0"); + if (env_APPDIR || env_ARGV0 || env_APPIMAGE || env_OWD) { + LOG_DEBUG("INIT", "AppImage build detected, here are some usefull env vars"); + LOG_DEBUG("INIT", "AppImage env APPIMAGE = %s", env_APPIMAGE); + LOG_DEBUG("INIT", "AppImage env APPDIR = %s", env_APPDIR); + LOG_DEBUG("INIT", "AppImage env OWD = %s", env_OWD); + LOG_DEBUG("INIT", "AppImage env ARGV0 = %s", env_ARGV0); + } else + LOG_DEBUG("INIT", "No AppImage env variable found!"); /* Init the server */ struct lkt_state srv; @@ -337,7 +362,7 @@ retry_config: { /* Module initialization */ char *module = safe_malloc(sizeof(char) * PATH_MAX); if (!module) { - LOG_ERROR("GENERAL", "Out of memory"); + LOG_ERROR("INIT", "Out of memory"); return 1; } database_config_get(srv.db, "player", "module", module, PATH_MAX); @@ -362,7 +387,7 @@ retry_config: } } - LOG_INFO("GENERAL", "Lektor was %s", + LOG_INFO("INIT", "Lektor was %s", env_get(LKT_ENV_RESTART) ? "restarted" : "started"); config_handle_hook(srv.db, "launched"); -- GitLab