Date: Monday, September 20, 2021 @ 00:18:37 Author: dvzrv Revision: 1017998
upgpkg: sonic-pi 3.3.1-1: Upgrade to 3.3.1. Update existing patches. Add additional patch to devendor boost. Adapt paths for building and installing files. Devendor all available ruby gems. Added: sonic-pi/trunk/sonic-pi-3.3.1-devendor_boost.patch sonic-pi/trunk/sonic-pi-3.3.1-devendor_qscintilla-qt5.patch sonic-pi/trunk/sonic-pi-3.3.1-ruby_paths.patch Modified: sonic-pi/trunk/PKGBUILD Deleted: sonic-pi/trunk/sonic-pi-3.2.0-devendor_qscintilla-qt5.patch sonic-pi/trunk/sonic-pi-3.2.0-ruby_paths.patch ----------------------------------------------+ PKGBUILD | 87 +++++++++------- sonic-pi-3.2.0-devendor_qscintilla-qt5.patch | 23 ---- sonic-pi-3.2.0-ruby_paths.patch | 130 ------------------------- sonic-pi-3.3.1-devendor_boost.patch | 11 ++ sonic-pi-3.3.1-devendor_qscintilla-qt5.patch | 23 ++++ sonic-pi-3.3.1-ruby_paths.patch | 120 +++++++++++++++++++++++ 6 files changed, 201 insertions(+), 193 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2021-09-20 00:17:32 UTC (rev 1017997) +++ PKGBUILD 2021-09-20 00:18:37 UTC (rev 1017998) @@ -1,8 +1,8 @@ # Maintainer: David Runge <[email protected]> pkgname=sonic-pi -pkgver=3.2.2 -pkgrel=3 +pkgver=3.3.1 +pkgrel=1 pkgdesc="The Live Coding Music Synth for Everyone" arch=('x86_64') url="https://sonic-pi.net/" @@ -9,8 +9,9 @@ license=('CCPL' 'LGPL2.1' 'GPL2' 'GPL3' 'MIT') groups=('pro-audio') depends=('aubio' 'gcc-libs' 'glibc' 'osmid' 'qt5-base' 'qscintilla-qt5' 'ruby' -'ruby-activesupport' 'ruby-ffi' 'ruby-i18n' 'ruby-kramdown' 'ruby-minitest' -'ruby-mocha' 'ruby-multi_json' 'ruby-rouge' 'ruby-rugged' 'ruby-sys-proctable' +'ruby-activesupport' 'ruby-ffi' 'ruby-gettext' 'ruby-i18n' 'ruby-kramdown' +'ruby-locale' 'ruby-minitest' 'ruby-mocha' 'ruby-multi_json' 'ruby-polyglot' +'ruby-rouge' 'ruby-rugged' 'ruby-sys-proctable' 'ruby-text' 'ruby-treetop' 'sc3-plugins' 'supercollider') makedepends=('boost' 'cmake' 'erlang-nox' 'gendesk' 'lua' 'qt5-tools' 'ruby-bundler' 'wkhtmltopdf') @@ -18,12 +19,19 @@ optdepends=('sox: for further effects') source=("$pkgname-$pkgver.tar.gz::https://github.com/samaaron/${pkgname}/archive/v${pkgver}.tar.gz" "${pkgname}-3.2.0-gui_paths.patch" - "${pkgname}-3.2.0-devendor_qscintilla-qt5.patch" - "${pkgname}-3.2.0-ruby_paths.patch") -sha512sums=('07e2d07c51a8312db0145a7be5c6c99b2baa6f913bcb27449e3ab0382945f49c5f6451c899cb58407a11d3e05abf6a0d02f0efd07b2e90ad84fdc7c602332a76' + "${pkgname}-3.3.1-devendor_qscintilla-qt5.patch" + "${pkgname}-3.3.1-devendor_boost.patch" + "${pkgname}-3.3.1-ruby_paths.patch") +sha512sums=('ccddbc247b9952592dea6f5edf670382e95f87cf5020c5aa30e57ba47a36614171d4e9b6e75556b419eb3918ca6c0d3b257001bff6afdd088d52676bb3667622' 'e530cc13cb6674dca2ace2a8da566ce28263a15197cf7fccd5d3e58b676c08ce860bc6264a95d26569ff1f923020a40ece1e05841c955c5db16e61c30938f1c0' - 'fbe196bc332a7a04e8d5097204a13626e7aba3a70715d2a1676c0b1f37f56da427d0d5b417f92c27e64f91a03dd9d4335f65f26f9e9d14e4076d496c94c949af' - '987504a8b98eea4a3fac2557fcbf002b8d0e9c991922c74e7649546ff963c30d0fef891cecb546f840801c88ec9b82f1afb4cebef9838a53af20d0f3f63a9c39') + '7046d9a18b4ced21a80b0fb79d8fa522f3d3a08b5f4de6deda3548e82e14187f06b2656b1d80b6897318729948252122e5c37e3c93831a16ec7de89fbd9ba186' + '36f09861690be41bcb0b5bb627d93eddbcd6820f9a019e46313b13058772a34f0c1d8268b9f553678e1afdcc9a87403987f7f0f7dfb446d7402f099b611e2b06' + '3e085d9548ca35b8ccf62985b95111072d9b13bd8b32340ae6412d376e0e6a13a87d6c8a192ab3d2439b4cab61b6cdecc29f7a5dba021e93ad0307641c59ab61') +b2sums=('2198b1918f22ef3ae554a6a1cab5d4cb0e2b4edaf6c8c8f67ba07f1750131e57fd2d973b17875cb6e99dce98df005fe949c337c85c5ea5b7a9905e2d808221d6' + 'b155e8d0bfc3a56ac176a8cbbb11fd27d926af2df54d71a77fab0909187457c73842027f88b452481bc339d55779506a58017ebc79de33c41bffa3e1a8bd204a' + '7e297f7fda3d5aa10eddba011d18cae813e5c3bfd29f99d19b527669abe9c71a2d4cdc8104c135c2026a57365ff941b39a7a674f0f1a35a25b0176147b8d2764' + '909cde9e799f47f8f9e15182a5a21df197d389df50811f14d433c006154ce0483f856760e1707c94c66ea526f126bd0ab3424e1bc638b14be16ec1f270c0eed6' + '610f6e8d9b7df50edd17ba4e9f587055b61e9330eea1b959d1112b6c9864e53d82e66018d5f136e92afe4245fd4ad5c4a58774c3785615e6e952fb94280e5388') prepare() { cd "$pkgname-$pkgver" @@ -35,33 +43,28 @@ rm -rvf app/server/native # patch app/gui/qt/{model/sonicpitheme,mainwindow}.cpp to set path to # external components in /usr/{lib,share}/sonic-pi + printf "Apply patch to set FHS compliant GUI paths\n" patch -Np1 -i "../${pkgname}-3.2.0-gui_paths.patch" # devendor qscintilla-qt5: https://github.com/samaaron/sonic-pi/issues/2278 - patch -Np1 -i "../${pkgname}-3.2.0-devendor_qscintilla-qt5.patch" - # TODO: devendor boost from GUI components (only headers required during - # build time) + printf "Apply patch to devendor qscintilla-qt5\n" + patch -Np1 -i "../${pkgname}-3.3.1-devendor_qscintilla-qt5.patch" + printf "Apply patch to devendor boost\n" + patch -Np1 -i "../${pkgname}-3.3.1-devendor_boost.patch" - #TODO: devendor ruby-ast - #TODO: devendor ruby-atomic (bin) - #TODO: devendor ruby-benchmark-ips - #TODO: devendor ruby-blankslate - #TODO: devendor ruby-did_you_mean (bin) - #TODO: devendor ruby-fast_osc (bin) - #TODO: devendor ruby-gettext - #TODO: devendor ruby-hamster - #TODO: devendor ruby-interception (bin) - #TODO: devendor ruby-locale - #TODO: devendor ruby-memoist - #TODO: devendor ruby-metaclass - #TODO: devendor ruby-parser - #TODO: devendor ruby-parslet - #TODO: devendor ruby-rubame - #TODO: devendor ruby-aubio-prerelease - #TODO: devendor ruby-beautify - #TODO: devendor ruby-text - #TODO: devendor ruby-thread_safe - #TODO: devendor ruby-wavefile - #TODO: devendor ruby-websocket + # TODO: devendor ast-2.0.0 + # TODO: devendor atomic (bin) + # TODO: devendor benchmark-ips-2.3.0 + # TODO: devendor blankslate + # TODO: devendor interception (bin) + # TODO: devendor memoist-0.16.2 + # TODO: devendor metaclass-0.0.4 + # TODO: devendor rubame + # TODO: devendor ruby-beautify + # TODO: devendor ruby-prof-0.15.8 + # TODO: devendor thread_safe + # TODO: devendor tomlrb-2.0.0 + # TODO: devendor wavefile-0.8.1 + # TODO: devendor websocket-ruby-1.2.8 # devendor gems requiring compilation: # ffi, ruby-prof, rugged @@ -70,7 +73,7 @@ -e '/ruby-prof/d' \ -i app/server/ruby/bin/compile-extensions.rb # remove unrequired gems, so we don't create any doc for them - rm -rvf app/server/ruby/vendor/{activesupport,ffi,i18n,kramdown,minitest,mocha,multi_json,rouge,rugged,sys-proctable}* + rm -rvf app/server/ruby/vendor/{activesupport,ffi,gettext,i18n,kramdown,locale,minitest,mocha,multi_json,polyglot,rouge,rugged,sys-proctable,text,treetop}* rm -rvf app/server/ruby/vendor/{narray,ruby-coreaudio,ruby-prof,rake-compiler}* } @@ -79,8 +82,8 @@ ( # OSC and pi_server - cd app/server/erlang - erlc {osc,pi_server}.erl + cd app/server/erlang/sonic_pi_server/src + erlc {osc/osc,pi_server/pi_server,sp_midi/sp_midi}.erl ) ( @@ -99,8 +102,12 @@ # generating translations lrelease lang/*.ts # compiling GUI + ) + ( + cd app cmake -DCMAKE_INSTALL_PREFIX=/usr \ -B build \ + -Wno-dev \ -S . make VERBOSE=1 -C build ) @@ -110,7 +117,7 @@ # NOTE: this can only be done after running # app/server/ruby/bin/compile-extensions.rb, as ruby-wavefile uses a # hardcoded location of a file (move to prepare() after devendoring more ruby gems) - patch -Np1 -i "../${pkgname}-3.2.0-ruby_paths.patch" + patch -Np1 -i "../${pkgname}-3.3.1-ruby_paths.patch" ) } @@ -124,7 +131,7 @@ package() { cd "$pkgname-$pkgver" # GUI executable - install -vDm 755 "app/gui/qt/build/${pkgname}" "${pkgdir}/usr/bin/${pkgname}" + install -vDm 755 "app/build/gui/qt/${pkgname}" -t "${pkgdir}/usr/bin/" # book install -vDm 644 app/gui/qt/book/*.html \ -t "${pkgdir}/usr/share/${pkgname}/book" @@ -175,7 +182,7 @@ install -vDm 644 etc/synthdefs/designs/overtone/${pkgname}/test/sonic_pi/*.clj\ -t "${pkgdir}/usr/share/${pkgname}/synthdefs/designs/overtone/sonic_pi/test" # buffers - install -vDm 644 etc/buffers/rand-stream.wav \ + install -vDm 644 etc/buffers/*.wav \ -t "${pkgdir}/usr/share/${pkgname}/buffers" # docs install -vDm 644 etc/doc/cheatsheets/*.md \ @@ -202,7 +209,7 @@ install -vDm 644 etc/examples/wizard/*.rb \ -t "${pkgdir}/usr/share/doc/${pkgname}/examples/wizard" # erlang - install -vDm 755 app/server/erlang/*.beam \ + install -vDm 755 app/server/erlang/sonic_pi_server/src/*.beam \ -t "${pkgdir}/usr/lib/${pkgname}" # ruby install -vdm 755 "${pkgdir}/usr/share/${pkgname}" Deleted: sonic-pi-3.2.0-devendor_qscintilla-qt5.patch =================================================================== --- sonic-pi-3.2.0-devendor_qscintilla-qt5.patch 2021-09-20 00:17:32 UTC (rev 1017997) +++ sonic-pi-3.2.0-devendor_qscintilla-qt5.patch 2021-09-20 00:18:37 UTC (rev 1017998) @@ -1,23 +0,0 @@ -diff -ruN a/app/gui/qt/CMakeLists.txt c/app/gui/qt/CMakeLists.txt ---- a/app/gui/qt/CMakeLists.txt 2020-02-25 01:23:45.000000000 +0100 -+++ c/app/gui/qt/CMakeLists.txt 2020-03-08 16:54:34.158555996 +0100 -@@ -38,9 +38,7 @@ - - find_package(Qt5 COMPONENTS Core Widgets Gui Concurrent Network OpenGL PrintSupport Xml Svg REQUIRED) - find_package(Threads REQUIRED) -- --# We build scintilla as part of the main project to make it easy to debug/fix --add_subdirectory(external/QScintilla-2.11.4) -+find_library(QSCINTILLA_QT5 qscintilla2_qt5) - - set(APP_NAME sonic-pi) - -@@ -129,7 +127,7 @@ - - target_link_libraries(${APP_NAME} - PRIVATE -- QScintilla -+ ${QSCINTILLA_QT5} - Qt5::Core - Qt5::Gui - Qt5::Widgets Deleted: sonic-pi-3.2.0-ruby_paths.patch =================================================================== --- sonic-pi-3.2.0-ruby_paths.patch 2021-09-20 00:17:32 UTC (rev 1017997) +++ sonic-pi-3.2.0-ruby_paths.patch 2021-09-20 00:18:37 UTC (rev 1017998) @@ -1,130 +0,0 @@ -diff -ruN a/app/server/ruby/core.rb d/app/server/ruby/core.rb ---- a/app/server/ruby/core.rb 2020-02-25 01:23:45.000000000 +0100 -+++ d/app/server/ruby/core.rb 2020-03-08 21:29:51.417948839 +0100 -@@ -146,7 +146,7 @@ - module Core - module SPRand - # Read in same random numbers as server for random stream sync -- @@random_numbers = ::WaveFile::Reader.new(File.expand_path("../../../../etc/buffers/rand-stream.wav", __FILE__), ::WaveFile::Format.new(:mono, :float, 44100)).read(441000).samples.freeze -+ @@random_numbers = ::WaveFile::Reader.new(File.expand_path("/usr/share/sonic-pi/buffers/rand-stream.wav", __FILE__), ::WaveFile::Format.new(:mono, :float, 44100)).read(441000).samples.freeze - - def self.tl_seed_map(seed, idx=0) - {:sonic_pi_spider_random_gen_seed => seed, -diff -ruN a/app/server/ruby/lib/sonicpi/util.rb d/app/server/ruby/lib/sonicpi/util.rb ---- a/app/server/ruby/lib/sonicpi/util.rb 2020-02-25 01:23:45.000000000 +0100 -+++ d/app/server/ruby/lib/sonicpi/util.rb 2020-03-09 19:16:54.479452971 +0100 -@@ -252,11 +252,11 @@ - end - - def root_path -- File.absolute_path("#{File.dirname(__FILE__)}/../../../../../") -+ File.absolute_path("/usr/share/sonic-pi") - end - - def etc_path -- File.absolute_path("#{root_path}/etc") -+ File.absolute_path("#{root_path}") - end - - def snippets_path -@@ -264,7 +264,7 @@ - end - - def doc_path -- File.absolute_path("#{etc_path}/doc") -+ File.absolute_path("/usr/share/doc/sonic-pi") - end - - def cheatsheets_path -@@ -276,7 +276,7 @@ - end - - def tmp_path -- File.absolute_path("#{root_path}/tmp") -+ File.absolute_path("/tmp") - end - - def synthdef_path -@@ -292,19 +292,20 @@ - end - - def app_path -- File.absolute_path("#{root_path}/app") -+ File.absolute_path("/usr/lib/sonic-pi") - end - - def html_public_path -- File.absolute_path("#{app_path}/gui/html/public") -+ File.absolute_path("#{doc_path}/gui/html/public") - end - -+ # this path is only relevant during build time - def qt_gui_path - File.absolute_path("#{app_path}/gui/qt") - end - - def examples_path -- File.absolute_path("#{etc_path}/examples") -+ File.absolute_path("#{doc_path}/examples") - end - - def server_path -@@ -312,7 +313,7 @@ - end - - def server_bin_path -- File.absolute_path("#{server_path}/ruby/bin") -+ File.absolute_path("#{server_path}/bin") - end - - def native_path -@@ -320,15 +321,15 @@ - end - - def sox_path -- File.join(native_path, "sox", __exe_fix("sox")) -+ File.absolute_path("/usr/bin/sox") - end - - def osmid_o2m_path -- File.join(native_path, "osmid", __exe_fix("o2m")) -+ File.absolute_path("/usr/bin/o2m") - end - - def osmid_m2o_path -- File.join(native_path, "osmid", __exe_fix("m2o")) -+ File.absolute_path("/usr/bin/m2o") - end - - def scsynth_log_path -@@ -373,7 +374,7 @@ - end - - def erlang_server_path -- File.join(server_path, "erlang") -+ File.absolute_path("/usr/lib/sonic-pi") - end - - def user_settings_path -diff -ruN a/app/server/ruby/util.rb d/app/server/ruby/util.rb ---- a/app/server/ruby/util.rb 2020-02-25 01:23:45.000000000 +0100 -+++ d/app/server/ruby/util.rb 2020-03-08 21:43:42.229538721 +0100 -@@ -12,15 +12,15 @@ - #++ - - def sp_sonic_pi_path() -- File.absolute_path("#{File.dirname(__FILE__)}/../../") -+ File.absolute_path("#{File.dirname(__FILE__)}/..") - end - - def sp_scripts_path() -- File.absolute_path("#{sp_sonic_pi_path}/app/scripts") -+ File.absolute_path("#{sp_sonic_pi_path}/scripts") - end - - def sp_synthdefs_path() -- File.absolute_path("#{sp_sonic_pi_path}/app/etc/synthdefs/compiled") -+ File.absolute_path("#{sp_sonic_pi_path}/synthdefs/compiled") - end - - def spider_log(message) Added: sonic-pi-3.3.1-devendor_boost.patch =================================================================== --- sonic-pi-3.3.1-devendor_boost.patch (rev 0) +++ sonic-pi-3.3.1-devendor_boost.patch 2021-09-20 00:18:37 UTC (rev 1017998) @@ -0,0 +1,11 @@ +diff -ruN a/app/gui/qt/CMakeLists.txt b/app/gui/qt/CMakeLists.txt +--- a/app/gui/qt/CMakeLists.txt 2021-02-01 12:10:30.000000000 +0100 ++++ b/app/gui/qt/CMakeLists.txt 2021-09-20 00:34:44.730830353 +0200 +@@ -195,7 +195,6 @@ + target_include_directories(${APP_NAME} + PRIVATE + ${QTAPP_ROOT} +- ${APP_ROOT}/external/scsynth-boost-1.74.0 + ${APP_ROOT}/external/TLSF-2.4.6/src + ${APP_ROOT}/external + ${QTAPP_ROOT}/osc Added: sonic-pi-3.3.1-devendor_qscintilla-qt5.patch =================================================================== --- sonic-pi-3.3.1-devendor_qscintilla-qt5.patch (rev 0) +++ sonic-pi-3.3.1-devendor_qscintilla-qt5.patch 2021-09-20 00:18:37 UTC (rev 1017998) @@ -0,0 +1,23 @@ +diff -ruN a/app/gui/qt/CMakeLists.txt b/app/gui/qt/CMakeLists.txt +--- a/app/gui/qt/CMakeLists.txt 2021-02-01 12:10:30.000000000 +0100 ++++ b/app/gui/qt/CMakeLists.txt 2021-09-20 00:27:46.749611996 +0200 +@@ -51,9 +51,7 @@ + find_package(Qt5 COMPONENTS Core Widgets Gui Concurrent Network OpenGL PrintSupport Xml Svg REQUIRED) + find_package(Threads REQUIRED) + +-# We build QScintilla as part of the main project to make it easy to debug/fix +-# It is not built as part of externals +-add_subdirectory(QScintilla-2.11.6) ++find_library(QSCINTILLA_QT5 qscintilla2_qt5) + + set(APP_NAME sonic-pi) + set(MACOS_APP_NAME "Sonic Pi") +@@ -212,7 +210,7 @@ + target_link_libraries(${APP_NAME} + PRIVATE + SonicPi::SonicPiAPI +- QScintilla ++ ${QSCINTILLA_QT5} + Qt5::Core + Qt5::Gui + Qt5::Widgets Added: sonic-pi-3.3.1-ruby_paths.patch =================================================================== --- sonic-pi-3.3.1-ruby_paths.patch (rev 0) +++ sonic-pi-3.3.1-ruby_paths.patch 2021-09-20 00:18:37 UTC (rev 1017998) @@ -0,0 +1,120 @@ +diff -ruN a/app/server/ruby/core.rb b/app/server/ruby/core.rb +--- a/app/server/ruby/core.rb 2021-02-01 12:10:30.000000000 +0100 ++++ b/app/server/ruby/core.rb 2021-09-20 02:02:48.452962508 +0200 +@@ -139,7 +139,7 @@ + # define this helper first so we can set the constants below + def self.wav_from_buffer_file(filename) + ::WaveFile::Reader.new( +- File.expand_path("../../../../etc/buffers/#{filename}", __FILE__), ++ File.expand_path("/usr/share/sonic-pi/buffers/#{filename}", __FILE__), + ::WaveFile::Format.new(:mono, :float, 44100) + ).read(441000).samples.freeze + end +diff -ruN a/app/server/ruby/lib/sonicpi/util.rb b/app/server/ruby/lib/sonicpi/util.rb +--- a/app/server/ruby/lib/sonicpi/util.rb 2021-02-01 12:10:30.000000000 +0100 ++++ b/app/server/ruby/lib/sonicpi/util.rb 2021-09-20 01:53:31.524788455 +0200 +@@ -329,11 +329,11 @@ + end + + def root_path +- File.absolute_path("#{File.dirname(__FILE__)}/../../../../../") ++ File.absolute_path("/usr/share/sonic-pi") + end + + def etc_path +- File.absolute_path("#{root_path}/etc") ++ File.absolute_path("#{root_path}") + end + + def snippets_path +@@ -341,7 +341,7 @@ + end + + def doc_path +- File.absolute_path("#{etc_path}/doc") ++ File.absolute_path("/usr/share/doc/sonic-pi") + end + + def cheatsheets_path +@@ -353,7 +353,7 @@ + end + + def tmp_path +- File.absolute_path("#{root_path}/tmp") ++ File.absolute_path("/tmp") + end + + def synthdef_path +@@ -369,19 +369,20 @@ + end + + def app_path +- File.absolute_path("#{root_path}/app") ++ File.absolute_path("/usr/lib/sonic-pi") + end + + def html_public_path +- File.absolute_path("#{app_path}/gui/html/public") ++ File.absolute_path("#{doc_path}/gui/html/public") + end + ++ # this path is only relevant during build time + def qt_gui_path + File.absolute_path("#{app_path}/gui/qt") + end + + def examples_path +- File.absolute_path("#{etc_path}/examples") ++ File.absolute_path("#{doc_path}/examples") + end + + def server_path +@@ -397,7 +398,7 @@ + end + + def server_bin_path +- File.absolute_path("#{server_path}/ruby/bin") ++ File.absolute_path("#{server_path}/bin") + end + + def native_path +@@ -414,7 +415,7 @@ + end + + def sox_path +- File.join(native_path, "sox", __exe_fix("sox")) ++ File.absolute_path("/usr/bin/sox") + end + + def scsynth_log_path +@@ -450,7 +451,7 @@ + end + + def erlang_server_path +- File.join(server_path, "erlang", "sonic_pi_server", "ebin") ++ File.absolute_path("/usr/lib/sonic-pi") + end + + def user_audio_settings_path +diff -ruN a/app/server/ruby/util.rb b/app/server/ruby/util.rb +--- a/app/server/ruby/util.rb 2021-02-01 12:10:30.000000000 +0100 ++++ b/app/server/ruby/util.rb 2021-09-20 01:53:31.524788455 +0200 +@@ -12,15 +12,15 @@ + #++ + + def sp_sonic_pi_path() +- File.absolute_path("#{File.dirname(__FILE__)}/../../") ++ File.absolute_path("#{File.dirname(__FILE__)}/..") + end + + def sp_scripts_path() +- File.absolute_path("#{sp_sonic_pi_path}/app/scripts") ++ File.absolute_path("#{sp_sonic_pi_path}/scripts") + end + + def sp_synthdefs_path() +- File.absolute_path("#{sp_sonic_pi_path}/app/etc/synthdefs/compiled") ++ File.absolute_path("#{sp_sonic_pi_path}/synthdefs/compiled") + end + + def spider_log(message)
