Skip to content

Commit

Permalink
Use pyproject.toml
Browse files Browse the repository at this point in the history
  • Loading branch information
Pusnow committed Apr 26, 2023
1 parent 49ae16f commit 7ebd2f4
Show file tree
Hide file tree
Showing 6 changed files with 125 additions and 33 deletions.
2 changes: 1 addition & 1 deletion mecabrc.in
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
dicdir = @prefix@/share/mecab-ko-dic
dicdir = @datadir@/mecab-ko-dic

; userdic = /home/foo/bar/user.dic

Expand Down
61 changes: 30 additions & 31 deletions meson.build
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
project('mecab-ko-msvc', 'cpp',
version: '0.997',
meson_version: '>=0.61.0',
meson_version: '>=0.63.0',
)


Expand Down Expand Up @@ -187,6 +187,7 @@ if host_machine.system() == 'windows'
else
mecab_default_rc = '@0@/mecabrc'.format(sysconfdir)
endif

add_global_arguments('-DMECAB_DEFAULT_RC="@0@"'.format(mecab_default_rc), language : 'cpp')


Expand Down Expand Up @@ -254,9 +255,11 @@ else
libmecab_name = 'mecab'
endif

building_pip = get_option('building_pip')
install_lib = not building_pip
thread_dep = dependency('threads')
deps += thread_dep
libmecab = both_libraries(libmecab_name, lib_sources, dependencies: deps, install : true)
libmecab = both_libraries(libmecab_name, lib_sources, dependencies: deps, install : install_lib)
libmecab_static = libmecab.get_static_lib()

if get_option('build_static')
Expand All @@ -273,18 +276,19 @@ mecab_cost_train = executable('mecab-cost-train', 'src/mecab-cost-train.cpp', li
mecab_system_eval = executable('mecab-system-eval', 'src/mecab-system-eval.cpp', link_with: libmecab_static, install : true, c_args : flags, cpp_args : flags, link_args : flags)
mecab_test_gen = executable('mecab-test-gen', 'src/mecab-test-gen.cpp', link_with: libmecab_static, install : true, c_args : flags, cpp_args : flags, link_args : flags)


mecabrc_conf = configuration_data()
mecabrc_conf.set('prefix', prefixdir)
mecabrc_conf.set('datadir', building_pip ? '$(rcpath)' : datadir)
configure_file(input : 'mecabrc.in',
output : 'mecabrc',
configuration : mecabrc_conf,
install: true,
install_dir: get_option('sysconfdir'))

output : 'mecabrc',
configuration : mecabrc_conf,
install: true,
install_dir: building_pip ? get_option('datadir') : get_option('sysconfdir'))

if not building_pip
install_headers('src/mecab.h')
install_man('man/mecab.1')
endif

install_headers('src/mecab.h')
install_man('man/mecab.1')


add_userdic_conf = configuration_data()
Expand Down Expand Up @@ -317,7 +321,7 @@ if get_option('build_dic')
endif

build_java = get_option('build_java')
build_python = get_option('build_python')
build_python = get_option('build_python') or building_pip
build_perl = get_option('build_perl')
build_ruby = get_option('build_ruby')
build_csharp = get_option('build_csharp')
Expand All @@ -326,32 +330,27 @@ if build_java or build_python or build_perl or build_ruby or build_csharp
swig = find_program('swig')
swig_src = 'swig/MeCab.i'
if build_java
run_command(swig, '-java', '-package', 'org.chasen.mecab', '-c++', '-o', meson.build_root() /'mecab_java.cpp', '-outdir', meson.build_root(), swig_src, check:true)
install_data(meson.build_root()/'mecab_java.cpp', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.build_root()/'DictionaryInfo.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.build_root()/'Lattice.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.build_root()/'MeCabConstants.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.build_root()/'MeCab.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.build_root()/'MeCabJNI.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.build_root()/'Model.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.build_root()/'Node.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.build_root()/'Path.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.build_root()/'Tagger.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
run_command(swig, '-java', '-package', 'org.chasen.mecab', '-c++', '-o', meson.project_build_root() /'mecab_java.cpp', '-outdir', meson.project_build_root(), swig_src, check:true)
install_data(meson.project_build_root()/'mecab_java.cpp', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.project_build_root()/'DictionaryInfo.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.project_build_root()/'Lattice.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.project_build_root()/'MeCabConstants.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.project_build_root()/'MeCab.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.project_build_root()/'MeCabJNI.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.project_build_root()/'Model.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.project_build_root()/'Node.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.project_build_root()/'Path.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
install_data(meson.project_build_root()/'Tagger.java', install_dir: datadir / 'mecab-ko-msvc-java/org/chasen/mecab')
endif
if build_python
python_conf = configuration_data()
python_conf.set('VERSION', meson.project_version())
python_conf.set('INCLUDE_PATH', includedir)
python_conf.set('LIB_PATH', libdir)
python_conf.set('LIB_NAME',libmecab_name)
configure_file(input : 'swig/setup.py.in',
output : 'setup.py',
configuration : python_conf,
install: true,
install_dir: datadir / 'mecab-ko-msvc-python')
run_command(swig, '-python', '-c++', '-o', meson.build_root() /'mecab_python.cpp', '-outdir', meson.build_root(), swig_src, check:true)
install_data(meson.build_root()/'mecab_python.cpp', install_dir: datadir / 'mecab-ko-msvc-python')
install_data(meson.build_root()/'MeCab.py', install_dir: datadir / 'mecab-ko-msvc-python')
run_command(swig, '-python', '-c++', '-o', meson.project_build_root() /'mecab_python.cpp', '-outdir', meson.project_build_root(), swig_src, check:true)
py.install_sources(meson.project_build_root()/'MeCab.py', pure: false)
py.extension_module('_MeCab', meson.project_build_root() /'mecab_python.cpp', link_with: libmecab_static, include_directories : 'src/', install: true)
endif

endif
3 changes: 2 additions & 1 deletion meson_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ option('build_java', type : 'boolean', value : false)
option('build_python', type : 'boolean', value : false)
option('build_perl', type : 'boolean', value : false)
option('build_ruby', type : 'boolean', value : false)
option('build_csharp', type : 'boolean', value : false)
option('build_csharp', type : 'boolean', value : false)
option('building_pip', type : 'boolean', value : false)
35 changes: 35 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
[build-system]
requires = [
"meson >= 1.0.0",
"meson-python >= 0.12.0",
]
build-backend = "mesonpy"

[project]
name = "mecab-ko-msvc"
version = "0.997"
description = "Mecab-ko-msvc build"
readme = "README.md"
maintainers = [
{ name = "Wonsup Yoon", email = "wonsup@pusnow.com" },
]
requires-python = ">=3.7"
classifiers = [
"Programming Language :: C",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Topic :: Software Development :: Libraries",
]

[project.urls]
"Documentation" = "https://github.com/Pusnow/mecab-ko-msvc/"
"Source" = "https://github.com/Pusnow/mecab-ko-msvc/"
"Issue Tracker" = "https://github.com/Pusnow/mecab-ko-msvcissues"

[tool.meson-python.args]
setup = ['-Dbuilding_pip=true']
8 changes: 8 additions & 0 deletions swig/MeCab.i
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@
#endif
%}

%pythoncode %{
import sys
import os

if "MECABRC" not in os.environ and os.path.exists(os.path.join(sys.prefix,"mecabrc")):
os.putenv("MECABRC", os.path.join(sys.prefix,"mecabrc"))
%}

%newobject surface;
%newobject MeCab::Model::createLattice;
%newobject MeCab::Model::createTagger;
Expand Down
49 changes: 49 additions & 0 deletions test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import MeCab
import sys
import string

sentence = "무궁화꽃이피었습니다."

try:
print(MeCab.VERSION)
print("0")
print(dir(MeCab))
print(dir(MeCab.Tagger))
t = MeCab.Tagger()
print("1", t)
print(t.parse(sentence))

m = t.parseToNode(sentence)
while m:
print(m.surface, "\t", m.feature)
m = m.next
print("EOS")

lattice = MeCab.Lattice()
t.parse(lattice)
lattice.set_sentence(sentence)
len = lattice.size()
for i in range(len + 1):
b = lattice.begin_nodes(i)
e = lattice.end_nodes(i)
while b:
print("B[%d] %s\t%s" % (i, b.surface, b.feature))
b = b.bnext
while e:
print("E[%d] %s\t%s" % (i, e.surface, e.feature))
e = e.bnext
print("EOS")

d = t.dictionary_info()
while d:
print("filename: %s" % d.filename)
print("charset: %s" % d.charset)
print("size: %d" % d.size)
print("type: %d" % d.type)
print("lsize: %d" % d.lsize)
print("rsize: %d" % d.rsize)
print("version: %d" % d.version)
d = d.next

except RuntimeError as e:
print("RuntimeError:", e)

0 comments on commit 7ebd2f4

Please sign in to comment.