blob: 1f09c2c79a511b068bd380e1d4e2ce99874281a0 [file] [log] [blame] [view]
Jens Geyerbd52f1a2014-07-28 01:25:30 +02001Thrift Haxe Software Library
2
3License
4=======
5
6Licensed to the Apache Software Foundation (ASF) under one
7or more contributor license agreements. See the NOTICE file
8distributed with this work for additional information
9regarding copyright ownership. The ASF licenses this file
10to you under the Apache License, Version 2.0 (the
11"License"); you may not use this file except in compliance
12with the License. You may obtain a copy of the License at
13
14 http://www.apache.org/licenses/LICENSE-2.0
15
16Unless required by applicable law or agreed to in writing,
17software distributed under the License is distributed on an
18"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19KIND, either express or implied. See the License for the
20specific language governing permissions and limitations
21under the License.
22
23Using Thrift with Haxe
24========================
25
Jens Geyer04488dd2015-05-14 17:16:20 +020026Haxe setup
27---------------
28
Jens Geyer2dcefad2021-02-25 09:42:52 +010029Thrift requires Haxe 4.2.1. Installers for Windows and OSX
Jens Geyer662eea92015-02-01 20:20:34 +010030platforms are available at `http://haxe.org/download`.
Jens Geyerbd52f1a2014-07-28 01:25:30 +020031
Jens Geyer04488dd2015-05-14 17:16:20 +020032Depending on the desired targets, you may have to install the appropriate HaxeLibs
Jens Geyer2dcefad2021-02-25 09:42:52 +010033after installing Haxe itself. For example, if you plan to target C++, enter the
34following command after installing Haxe:
Jens Geyer04488dd2015-05-14 17:16:20 +020035
36 haxelib install hxcpp
Jens Geyer04488dd2015-05-14 17:16:20 +020037
38For other targets, please consult the Haxe documentation whether or not any additional
39target libraries need to be installed and how to achieve this.
40
41
42Haxe on Linux
43---------------
44
Jens Geyer90b63042017-04-02 16:01:11 +020045For Linux platforms it is recommended to use the distro-specific package
46manager, where possible. More detailed information can be found at the
47Haxe Linux download section: http://haxe.org/download/linux
Jens Geyer662eea92015-02-01 20:20:34 +010048
Jens Geyer04488dd2015-05-14 17:16:20 +020049If you run into the error message
50
51 Uncaught exception - load.c(237) : Failed to load library : /usr/lib/neko/regexp.ndll
52 (libpcre.so.3: cannot open shared object file: No such file or directory)
53
54this can be solved depending on your OSes bitness by either
55
56 sudo ln -sf /usr/lib/libpcre.so.1 /usr/lib/libpcre.so.3
57 sudo ldconfig
58
59or
60
61 sudo ln -sf /usr/lib64/libpcre.so.1 /usr/lib64/libpcre.so.3
62 sudo ldconfig
63
64Thrift Haxe bindings
65-------------------
66
Jens Geyer2dcefad2021-02-25 09:42:52 +010067Thrift Haxe bindings can be set up via the `haxelib` tool as usual.
68Alternatively, the "github" method can be used.
Jens Geyerb029aa82014-11-15 23:54:16 +010069
Jens Geyer2dcefad2021-02-25 09:42:52 +010070- To set up any **stable version**, choose the appropriate branch (e.g. `0.14.1`):
Jens Geyerb029aa82014-11-15 23:54:16 +010071
Jens Geyer2dcefad2021-02-25 09:42:52 +010072 - `haxelib git thrift https://github.com/apache/thrift.git 0.14.1 lib/haxe`
Jens Geyerb029aa82014-11-15 23:54:16 +010073
74- To set up the current **development version**, use the `master` branch:
75
Jens Geyer662eea92015-02-01 20:20:34 +010076 - `haxelib git thrift https://github.com/apache/thrift.git master lib/haxe`
Jens Geyerb029aa82014-11-15 23:54:16 +010077
78As usual, the installed library can be updated using `haxelib upgrade`
79or `haxelib update thrift`.
80
81In order to work with Thrift, you will need to install the Thrift compiler
82or build from source, depending on your operating system. Appropriate
83downloads and more information can be found at http://thrift.apache.org
84
Jens Geyerbd52f1a2014-07-28 01:25:30 +020085To get started, visit the /tutorial/haxe and /test/haxe dirs for examples.
Jens Geyer2dcefad2021-02-25 09:42:52 +010086If you are using the HaxeDevelop IDE, you'll find appropriate project files
87in these folders.
Jens Geyerbd52f1a2014-07-28 01:25:30 +020088
89
Jens Geyer2dcefad2021-02-25 09:42:52 +010090Breaking changes
Jens Geyerbd52f1a2014-07-28 01:25:30 +020091========================
Jens Geyer2dcefad2021-02-25 09:42:52 +010092This version requires Haxe 4 and cannot be used with earlier versions.
Jens Geyerbd52f1a2014-07-28 01:25:30 +020093
Jens Geyer2dcefad2021-02-25 09:42:52 +010094It is recommended to clear out all gen-haxe contents once before switching
95to the new version. Otherwise you may run into troubles with leftovers from
96previous versions.
Jens Geyerbd52f1a2014-07-28 01:25:30 +020097
Jens Geyer2dcefad2021-02-25 09:42:52 +010098The compiler option ```callbacks``` is now obsolete. The compiler will always
99generate a dual interface (i.e. with optional callback style) for use on the
100client side, plus a new ```_service``` interface to be used for server
101implementations. Consequentially, your client and server implementations will
102need some manual intervention.
Jens Geyerbd52f1a2014-07-28 01:25:30 +0200103
104
Oleksii Prudkyi39a09ac2016-05-19 16:55:11 +0300105PHP HTTP Server notes
106========================
107
108- you have to import PHP files generated by haxe into PHP
109```php
110require_once dirname(__FILE__) . '/bin/php-web-server/Main-debug.php';
111```
112
113- trace() by default outputs into stdout (http response), so you have to redirect it to stderr or you own logs, something like
114```haxe
115//remap trace to error log
116haxe.Log.trace = function(v:Dynamic, ?infos:haxe.PosInfos)
117{
118 //simulate normal trace https://github.com/HaxeFoundation/haxe/blob/development/std/haxe/Log.hx
119 var newValue : Dynamic;
120 if (infos != null && infos.customParams!=null) {
121 var extra:String = "";
122 for( v in infos.customParams )
123 extra += "," + v;
124 newValue = v + extra;
125 }
126 else {
127 newValue = v;
128 }
129 var msg = infos != null ? infos.fileName + ':' + infos.lineNumber + ': ' : '';
130 Sys.stderr().writeString('${msg}${newValue}\n');
131}
132```
133
134- to allow thrift server to read/write HTTP request/response, it should be pointed out to php streams
135```haxe
136transport = new TWrappingServerTransport(
137 new TStreamTransport(
138 new TFileStream("php://input", Read),
139 new TFileStream("php://output", Append)
140 )
141 );
142```
143
144- TSimpleServer doesn't stop after first call, so processor.process() should be called instead, or use runOnce property
145```haxe
146var server = new TSimpleServer( processor, transport, transfactory, protfactory);
147server.runOnce = true;
148```
149