我的gjs meson构建设置有什么问题?

问题描述 投票:0回答:1

我有一个Gnome GJS应用程序,想用Meson打包。

应用程序的源代码(在.src中)有lib、object和ui等子文件夹。

每个子文件夹都有一个meson.build文件,看起来像这样(针对.srclib文件夹)。

app_resource = gnome.compile_resources(app_id + 'src.lib',
  app_id + '.lib.gresource.xml',
  source_dir: '.',
  gresource_bundle: true,
  install: true,
  install_dir : pkgdatadir)

和一个gresource xml文件,看起来像这样(也是针对.srclib文件夹)。

<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/com/domain/app/js">
    <file>aes.js</file>
    <file>file.js</file>
    <file>settings.js</file>
    <file>table.js</file>
    <file>template.js</file>
  </gresource>
</gresources>

在.src文件夹里我有一个com.domain.app.in文件,像这样。

#!@GJS@
imports.package.init({ name: "com.domain.app",
                       version: "@PACKAGE_VERSION@",
                       prefix: "@prefix@",
                       libdir: "@libdir@" });
imports.package.run(imports.main);

meson.build文件是这样的

app_resource = gnome.compile_resources(app_id + '.src',
  app_id + '.src.gresource.xml',
  source_dir: '.',
  gresource_bundle: true,
  install: true,
  install_dir : pkgdatadir)

app_launcher = configure_file(
  output : app_id,
  input : app_id + '.in',
  configuration: app_configuration)
install_data(app_launcher,
  install_dir: get_option('bindir'),
  install_mode: 'rwxr-xr-x'
)

和一个像这样的gresource xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/com/domain/app/src">
    <file>main.js</file>
  </gresource>
</gresources>

项目根目录下的meson.build主文件是这样的:

project('app', 'c',
  version: '0.1.0',
  meson_version: '>= 0.50.0',
)

app_command = 'app'
app_id = 'com.domain.app'

gnome = import('gnome')
intl = import('i18n')

config_h = configuration_data()
GETTEXT_PACKAGE = app_id
config_h.set_quoted('GETTEXT_PACKAGE', GETTEXT_PACKAGE)
config_h.set_quoted('LOCALEDIR', join_paths(get_option('prefix'), get_option('localedir')))
configure_file(
  output: 'config.h',
  configuration: config_h,
)
add_global_arguments([
  '-DHAVE_CONFIG_H',
  '-I' + meson.build_root(),
], language: 'c')

app_configuration = configuration_data()

app_configuration.set('GJS', find_program('gjs').path())
app_configuration.set('PACKAGE_NAME', app_id)
app_configuration.set('PACKAGE_VERSION', meson.project_version())
app_configuration.set('prefix', get_option('prefix'))

pkgdatadir = join_paths(get_option('datadir'), app_id)
app_configuration.set('libdir', join_paths(get_option('prefix'), get_option('libdir')))
app_configuration.set('pkgdatadir', pkgdatadir)

subdir('src')
subdir('src/lib')
subdir('src/ui')
subdir('src/object')
subdir('data')
subdir('po')
meson.add_install_script('meson/meson_post_install.py')

所以...

当我运行 meson builddir meson似乎很满意,没有给出任何错误。它确实填充了builddir,但没有任何明显有用的东西。

然后我cd到builddir并运行ninja,ninja似乎没有做什么,我仍然没有任何可执行文件。

感谢Andy的评论,我运行了 meson install (有一堆本地文件夹的测试参数),确实得到了一些文件,包括一个可执行文件。

但是,当我试图从终端运行可执行文件时,我得到以下错误。

(com.domain.app:6420): Gjs-WARNING **: 21:27:05.765: JS ERROR: ImportError: No JS module 'main' found in search path

@./com.domain.app:6:1

main.js是应用程序src文件夹中的一个文件。它在同一文件夹的gresource xml文件中被引用。

我到底做错了什么或者遗漏了什么?

任何提示都将是非常感激的。

gnome meson-build gjs
1个回答
1
投票

我想 main.js 在错误的目录中,或者你对它的引用不正确。下面你尝试导入 main 归根 imports:

#!@GJS@
imports.package.init({ name: "com.domain.app",
                       version: "@PACKAGE_VERSION@",
                       prefix: "@prefix@",
                       libdir: "@libdir@" });
imports.package.run(imports.main);

然而,在你的GResource中, prefix 把它 src:

<?xml version="1.0" encoding="UTF-8"?>
<gresources>
  <gresource prefix="/com/domain/app/src">
    <file>main.js</file>
  </gresource>
</gresources>

原则上,你要么需要改变 imports.mainimports.src.main 或改变 /com/domain/app/src/com/domain/app. 然而,在实践中,我认为所有的JavaScript源码都需要在下面的 /com/domain/app/js 前缀,所以可能应该是 /com/domain/app/jsimports.main.

引用来源 GNOME 天气package.js 可能会有很大的帮助。

© www.soinside.com 2019 - 2024. All rights reserved.