From 7962a0bd3832847ce7522e426b4c28772816ca57 Mon Sep 17 00:00:00 2001 From: Chris Miles Date: Mon, 23 Oct 2023 22:38:46 -0500 Subject: [PATCH] [Perl] Implement eqemu-perl for Linux (#3652) * [Perl] Implement eqemu-perl for Linux * Update embperl.cpp --- .drone.yml | 2 +- CMakeLists.txt | 11 ++++++++++- zone/embperl.cpp | 10 ++++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index a5ebc2ad1..dfefb7538 100644 --- a/.drone.yml +++ b/.drone.yml @@ -15,7 +15,7 @@ volumes: steps: - name: Build Linux X64 - image: akkadius/eqemu-server:v11 + image: akkadius/eqemu-server:v13 environment: GITHUB_TOKEN: from_secret: GH_RELEASE_GITHUB_API_TOKEN diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f33eec72..c771ae206 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,7 +24,9 @@ IF (EQEMU_BUILD_STATIC) MESSAGE(STATUS "Building with static linking") SET(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++") IF (UNIX) - SET(PERL_LIBRARY "/usr/lib/x86_64-linux-gnu/libperl.a") + SET(PERL_LIBRARY "/opt/eqemu-perl/lib/5.32.1/x86_64-linux-thread-multi/CORE/libperl.so") + SET(PERL_INCLUDE_PATH "/opt/eqemu-perl/lib/5.32.1/x86_64-linux-thread-multi/CORE/") + SET(PERL_EXECUTABLE "/opt/eqemu-perl/bin/perl") ENDIF () ENDIF (EQEMU_BUILD_STATIC) @@ -136,6 +138,13 @@ ELSE() MESSAGE(STATUS "* mbedTLS: MISSING *") ENDIF() +MESSAGE(STATUS "PERL_INCLUDE_PATH: ${PERL_INCLUDE_PATH}") +MESSAGE(STATUS "PERL_LIBRARY: ${PERL_LIBRARY}") +MESSAGE(STATUS "PERL_INCLUDE_DIR: ${PERL_INCLUDE_DIR}") +MESSAGE(STATUS "PERL_INCLUDE_DIRS: ${PERL_INCLUDE_DIRS}") +MESSAGE(STATUS "PERL_LIBRARIES: ${PERL_LIBRARIES}") +MESSAGE(STATUS "PERL_VERSION: ${PERL_VERSION}") + MESSAGE(STATUS "**************************************************") #options diff --git a/zone/embperl.cpp b/zone/embperl.cpp index 497abfe1f..4bc5ea8ac 100644 --- a/zone/embperl.cpp +++ b/zone/embperl.cpp @@ -210,7 +210,7 @@ void Embperl::init_eval_file(void) "} else {" // we 'my' $filename,$mtime,$package,$sub to prevent them from changing our state up here. " eval(\"package $package; my(\\$filename,\\$mtime,\\$package,\\$sub); \\$isloaded = 1; require './$filename'; \");" - // " print $@ if $@;" + " print $@ if $@;" /* "local *FH;open FH, $filename or die \"open '$filename' $!\";" "local($/) = undef;my $sub = ;close FH;" "my $eval = qq{package $package; sub handler { $sub; }};" @@ -277,8 +277,14 @@ int Embperl::dosub(const char * subname, const std::vector * args, std::string sub = subname; if (sub == "main::eval_file" && !filename.empty() && File::Exists(filename)) { BenchTimer benchmark; + + std::string perl = "perl"; + if (File::Exists("/opt/eqemu-perl/bin/perl")) { + perl = "/opt/eqemu-perl/bin/perl"; + } + std::string syntax_error = Process::execute( - fmt::format("perl -c {} 2>&1", filename) + fmt::format("{} -c {} 2>&1", perl, filename) ); LogQuests("Perl eval [{}] took [{}]", filename, benchmark.elapsed()); syntax_error = Strings::Trim(syntax_error);