0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Perl 6Advent Calendar 2017

Day 20

NativeCallを使ったモジュールの作り方: p6-Geo-Hashを例に

Last updated at Posted at 2017-12-24

こんにちは、20日目の投稿になります。

今日はNativeCallを使ったモジュールの作り方を紹介しようと思います。

はじめに

私は今年libgeohashのPerl6用のバインダを作りました。そのときのノウハウを紹介したいと思います。
ただし、公式のドキュメントがまだまだ不十分というのもあり、[要出典]な部分がたくさんあるかもしれません。

geohashとは

緯度、経度をひとつのbase32の符号で表現したものです。
base32の符号を01のビット表現に直すと、左から見たときの偶数位置のビットが経度を、奇数位置のビットが緯度を示しています。

便利モジュール

App::Mi6

mi6を使うと簡単にベースになるファイル群が作れます:

$ mi6 new Geo::Hash
$ mv Geo-Hash p6-Geo-Hash
  • ちにみに、mi6の他の選択肢としてはDdtとかmirokuがあります。

LibraryMake

  • VM(e.g. MoarVM, JVM)をビルドしたときのオプションを流用することで、libgeohashのビルドを行います。
  • 上記のプロセスを簡単に行うためのライブラリがLibraryMakeです。
  • process-makefileでMakefileの処理を、 get-varsでVMのビルド時のオプションを取得することができます。

各ファイルについて

ファイル構成

  • mi6で生成されたファイルとは別に追加で下記のファイルが必要です
    • ルートにBuild.pm
    • src以下にlibgeohash関連ファイル
$ tree .
.
├── Build.pm
├── LICENSE
├── META6.json
├── README.md
├── bin
├── lib
│   └── Geo
│       ├── Hash
│       │   └── Coord.pm6
│       └── Hash.pm6
├── src
│   ├── Makefile.in
│   ├── geohash.c
│   ├── geohash.h
│   └── geohash_test.c
└── t
    └── 01-basic.t

6 directories, 11 files

.travis.yaml

META6.json

Build.pm

src/Makefile.in

.travis.yaml

  • 記述するためのポイントは一つだけです

lib/GeoHash.pm6

リリース

PAUSEアカウントを持っている場合、CPANに対してリリースすることができます。

まず、あなたのホームディレクトリで.pauseファイルを作りましょう。
<USER>にはPAUSEでのIDを、<PASSWORD>にはPAUSEでのパスワードを入れてください:

user <USER>
password <PASSWORD>

そして、uploadしましょう。uploadコマンドでtar.gzファイルの生成まで行ってくれます。
(※すでにGeo-Hashの0.0.1はアップロード済みなので'N'でAbortしています。実際に上げるときは'y'を押してください):

$ mi6 upload
Use of Nil in string context
  in block  at lib/Geo/Hash.pm6 line 7
==> Execute Build.pm
gcc -shared -fPIC geohash.c -o /home/itoyota/Program/p6-Geo-Hash/resources/libraries/libgeohash.so
gcc geohash_test.c geohash.c  
./a.out
rm a.out
Created Geo-Hash-0.0.1.tar.gz
Are you sure to upload Geo-Hash-0.0.1.tar.gz to CPAN? (y/N) N
Abort.

以上、20日目の投稿でした。

※ もしかすると%vars<SO>に同じ内容が格納されているかもしれません[要出典]、SOというネーミングを使ってしまうと可読性の問題もあるのでこの書き方にしています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?