インストール法、インストールの確認、利用者プログラムのビルド法を説明します。
ソースはtarボールの形でリリースされています。
内容は
hiClass.x.yy.xx/src/configure :システム構成シェルスクリプト
Makefile :makefile
hi/???? :クラスソース
utl/???? :ツール
の形です。
どこかのディレクトリに展開して下さい。
% cd /person/gonbe/tools : 展開するディレクトリへ移動
% tar -xzvof hiClass.0.61.02 : 展開
% ln -s hiClass.0.61.02 hiClass : 展開された版をhiClassとしてリンク
% cd hiClass/src : ソースディレクトリへ移動
一応念のためにCおよびC++コンパイラが動作することを確認してください。
srcディレクトリには単純な確認のためのソースhello1.cとhello2.Cが入っています
% cc hello1.c # Cコンパイラの確認;gccの場合もある % a.out hello world % c++ hello2.C # C++コンパイラの確認;CC,g++の場合もある hello world goodby world
一部yacc/lex(bison/flex)を用いたクラスがあります。(近々yacc/lexは使わない形に変える予定です)
yacc/lexが無い環境は想定外だったため、make時にエラーになります。
予めyac/lexまたはbison/flexをインストールしてください。
--- aptがある場合 (raspbian等ubutu系) % sudo apt-get install flex % sudo apt-get install bison --- yumがある場合 (CentOS等) % yum -y install flex % yum -y install bison
srcディレクトリにはXlibを確認する簡単なソースxhello.cが入っています。
% cc xhello.c -lX11 # -l(エル)X11(いちいち) % a.out # 小さな窓にhello worldと出ます。何かキーを押すと終了します。X11が/usr/lib下でなく、/usr/X11R6/libにあるシステムではコンパイル時に次の ように-L指定が必要な場合もあります。
% cc xhello.c -lX11 -L/usr/X11R6/lib
補足:
コンパイラがインストールされていない場合のコンパイラのインストール法はシステムによって
異なります。
Linuxにおいてyumコマンドが使える場合、cc、c++は次のようにしてインストールできます。
#yum install gcc #yum install gcc-c++Xlibは次のようにインストールできます。
#yum install libX11-devel
インストール先は2つの方法によって指定できます
hiClassのインストールはインストール先のマーカとして
?????/include/hi
というディレクトリをさがして、
?????/include/hi/????.h : ヘッダファイル
?????/lib/libhi.a : オブジェクトライブラリ
?????/bin/???? : ツール
?????/doc/hi/????.html : ドキュメント
を作る形をとります。
例えば、/usr/local/下にインストールしたい場合、/usr/local/include/hi/
を予め作成して於かなければなりません。
# mkdir /usr/local/include/hi
インストール先の検出法は「インストール先の確認」を参照して下さい。
なお、展開ディレクトリ上にインストールする場合、あるいはmakeコマンド
で直接指示する場合はマーカの設定は不要です。
configure起動時に直接--prefixオプションでインストール先ディレクトリを 指定することもできます。
src/下でシェルスクリプトconfigureを起動します。
% ./configure
この時インストール先マーカ(include/hi)を探しデフォルトインストール先を決定する
ようになっています。
% ./configure --prefix=/usr/local
configureオプションを以下にあげます
| オプション | 説明 |
|---|---|
| --prefix=ディレクトリ | インストール先を指定する |
| --disable-LP64 | Solaris8以降の64bitシステムで32bitモードコンパイルする |
| --disable-IPV6 | ipv6対応を行わない(hiClass1.02のsocket関連コードを使います) |
| --disable-SSLSock | hiSSL関連クラスを展開しません |
| --disable-SHARE | 共有ライブラリを作りません |
--prefixオプションを指定しない場合、 次の順番でインストール先マーカが検索されます。
--- (4) --- (1) --- (def) --- src
| |
| +---(2:product)
| +---(3:project)
+--(5:product)
+--(6:project)
7:/project
8:/usr/local
9:/usr
例えば、例で
/person/gonbe/tools/hiClass.0.61.02
が展開されたとすると
(1) /person/gonbe/tools/include/hi
(2) /person/gonbe/tools/product/include/hi
(3) /person/gonbe/tools/project/include/hi
(4) /person/gonbe/include/hi
(5) /person/gonbe/product/include/hi
(6) /person/gonbe/project/include/hi
(7) /project/include/hi
(8) /usr/local/include/hi
(9) /usr/include/hi
の順番に検索して行きます。
見つからない場合は、
/person/gonbe/tools/hiClass.0.61.02/include/hi
となります。
./configureは検索結果を次のように表示します。
##################################################### NOTE : install is to /project ... #####################################################この例は/project/include/hiが検出されたことを表しています。
インストール先が./configureが検出したディレクトリでよければ
% make # make installでインストールされます。
Xlibをインストールしてある場合、さらにhiXをインストールすることを お勧めします。
# make install-hiX
インストールがうまくいったかどうかを確認するサンプルプログラム
を用意してあります。
X-libを使うものと使わないものがありますので、システム要件に
応じ確認を行ってください。
X-Windowのあるシステムでは、src/hiXディレクトリに移り make testを実行してください。
% cd hiX % make test
超不整脈心電図のようなグラフの窓が2つ表示されればインストール
は成功しています。

[quit]ボタンを押して終了させてください。
次にmake test2を実行してください。
% make test2
make testと同じ結果が得られれば成功です。
もし libhi.soあるいは libhiX.so が見つからないという
エラーになる場合、共有ライブラリの設定の確認を行って
再び試してください。共有ライブラリに関して
X-Windowの無いシステムの場合、src/debugディレクトリに移り make testを実行してください
% cd debug % make test*,#,%が並んだ文字列が数秒かけて出力されれば成功です。
*#%*%#*#%*%#*%*%****次にmake test2を実行してください。
% make test2
make testと同じ結果が得られれば成功です。
もし libhi.so が見つからないという
エラーになる場合、共有ライブラリの設定の確認を行って
再び試してください。共有ライブラリに関して
hiClassではLinux他幾つかのシステムでは共有ライブラリを
生成します。
共有ライブラリをリンクしたプログラムの実行のためには
環境の設定が必要です。
Linuxの場合
ファイル/etc/ld.so.confにライブラリを置く場所を設定しておく必要があります。
/etc/ld.so.confの内容はライブラリを置くディレクトリ 複数を1行に1つずつ書く形をしています。例えば、
/usr/X11R6/lib /usr/lib/gconv /usr/lib/qt/lib /usr/local/lib /project/libといった風になります。
書き換えた場合、あるいは新規のライブラリファイル作成を行った場合
# /sbin/ldconfigを実行するか、立ち上げなおす必要があります。
### 補足
configファイルは/etc/ld.so.conf.d/の下に複数のファイルの形で置かれている 場合があります。その場合、そのディレクトリの下にhi.confというファイルを 作りhiClassライブラリを置くディレクトリを1行だけ書いてください。
### 補足2
実行時に次のようなエラーが出る場合
PROG: error while loading shared libraries: /ddd/lib/libLIB.so: cannot restore segment prot after reloc: Permission denied次のコマンドを実行してください。
/usr/sbin/setenforce 0
Solaris,FreeBSD4.x,NetBSD,OpenBSDの場合
環境変数LD_LIBRARY_PATHに指定する必要があります。
例えば .cshrc で
if ($?LD_LIBRARY_PATH) then
setenv LD_LIBRARY_PATH /project/lib:${LD_LIBRARY_PATH}
else
setenv LD_LIBRARY_PATH /project/lib
endif
のように設定してください。
基本的にはインストール先のinclude下のヘッダを参照し、lib下の ライブラリをリンクします。
インストール先のbinにmakefileのひな形を作成するコマンドが
作られていますので、この利用をお勧めします。
コマンド
makesample -simple > Makefileで、hiClassのインストール先を参照する次のようなMakefileが作成されます。
#============================================================== # 単純makefileのサンプル #-------------------------------------------------------------- include /home/project/hiClass/src/../include/hi/makeConfig.mk # CCFLAGS_OPT = LDFLAGS = # TARGET_LIB = LIB_OBJS = LIB_HDRS = TARGETS = TARGET_OBJS = $(TARGETS:=o) TARGET_SUB_OBJS = TST = TST_MAIN_OBJS = $(TST:=.o) TST_SUB_OBJS = OBJS = $(LIB_OBJS) $(TARGETS_OBJS) $(TARGTE_SUB_OBJS) \ $(TST_MAIN_OBJS) $(TST_SUB_OBJS) LIBS := $(TARGET_LIB) $(HI_LIBS) $(LIBS) #----------------------------------------- all : $(TARGET_LIB) $(TARGETS) $(TARGET_LIB) : $(LIB_OBJS) ar -r $(TARGET_LIB) $(LIB_OBJS) $(TARGETS) : $(DEP_OBJ) $(TARGET_LIB) $(TARGET_SUB_OBJS) $(CC) $(LDFLAGS) -o $@ $@.o $(TARGET_SUB_OBJS) $(LIBS) #----------------------------------------- #.C : # $(CC) $(CCFLAGS) $(HI_INC) -o $* $*.C $(HI_LIB) $(STD_LIBS) -lm .C.o : $(CC) $(CCFLAGS) $(CCFLAGS_OPT) $(HI_INC) $(DEFS) -c -o $@ $< clean: -\rm -f *.o core *@@@* $(TARGETS) fullclean : clean -\rm -f *~ verconv: mkmk: $(DEPEND) -rMakefile -$(OBJS) > depend.mk #include depend.mk #-- end of file; do not remove this line. (for poor Solaris!) # これ以降のメモは、このMakefile修正後、消去してください #----------------------------------------------------------------------- # このMakefileの編集法: # ライブラリ(lib*.a)を指定オブジェクトで作る場合、 # TARGET_LIBにライブラリ名、LIB_OBJSにオブジェクトを指定します # a.o,b.o,c.oから libXX.a を作る場合 # TARGET_LIB = libXX.a # LIB_OBJS = a.o b.o c.o # # 他のライブラリを参照する場合は、CCFLAGS_OPTとLIBSに追加 # /home/my_dir/lib/libYY.aと/home/my_dir/include/*.hを参照 # するなら # CCFLAGS_OPT = -I/home/my_dir/include/ # LIBS := -L/home/my_dir/lib/ -l YY $(TARGET_LIB) $(HI_LIBS) $(LIBS) # # 実行プログラムを生成する場合TARGETSに設定 # XXcom1 XXcom2 を生成するなら # TARGETS = XXcom1 XXcom2 # TARGETSのプログラムが共通して使うオブジェクト(ライブラリ外)があるなら # TARGET_OBJSに設定 # TARGETS = XXcom1 XXcom2 # TARGET_OBJS = XXsub1.o XXsub2.o #------------------------------------------------------------------------
include/hi/makeConfig.mkにはconfigureで取得した情報が次のような形でセットされ ています。
#---------------------------------------
# configure項目
cc = gcc
CC = g++
cc_SHARE = gcc
CC_SHARE = g++
AR_SHARE =
AR = ar
TMPL_AR = ar -r
RANLIB = ranlib
OS = windows
CCFLAGS = -g -O2 -Wreturn-type
CCEXCPTFLAG =
CPP = /usr/ccs/lib/cpp
DEFS = -DHAVE_CONFIG_H
BASIC_LIBS = -lssl -lcrypto
SOCK_LIBS =
THREAD_LIBS = -lpthread
CRYPT_LIBS = -lcrypt
SSL_LIBS = -lssl -lcrypto
#LDFLAGS =
LEX = flex
YACC = bison -y
INSTALL = /bin/install -c
INSTALL_DATA = ${INSTALL} -m 644
INSTALL_PROGRAM = ${INSTALL}
WARN_FILT =
ECHO = echo
#
EXE = .exe
#
X_LIB = /usr/X11R6/lib
#
DEP_OBJ = %: %.o
MAK_JOB = -j 3
#
HI_SRC_DIR = /home/project/hiClass/src
HI_INST_DIR = /home/project/hiClass/src/..
#HI_LNK_DIR = /home/project/hiClass/src/..
#HI_LNK_DIRS = /home/project/hiClass/src/..
#HI_LNK_DIRL =
#--------------------------------------
# コンパイル標準指定
#
HI_DIR = $(HI_INST_DIR)
HI_INC_DIR = $(HI_DIR)/include
HI_LIB_DIR = $(HI_DIR)/lib
HI_BIN_DIR = $(HI_DIR)/bin
HI_INC = -I$(HI_INC_DIR) -I/usr/X11R6/include
STD_LIBS = $(BASIC_LIBS) $(SOCK_LIBS) $(THREAD_LIBS) \
$(SSL_LIBS) $(CRYPT_LIBS)
# 動的/静的リンク
HI_LIB = -L$(HI_LIB_DIR) -lhi
HIX_LIB = -L$(HI_LIB_DIR) -lhiX
HI_LIBS = $(HI_LIB) $(STD_LIBS)
HIX_LIBS = -L$(HI_LIB_DIR) -lhiX -lhi -L$(X_LIB) -lX11 $(STD_LIBS)
# 静的リンク指定
HI_SLIB = $(HI_LIB_DIR)/libhi$(HI_LIB_SUB).a
HIX_SLIB = $(HI_LIB_DIR)/libhiX$(HIX_LIB_SUB).a
HI_SLIBS = $(HI_SLIB) $(STD_LIBS)
HIX_SLIBS = $(HIX_SLIB) $(HI_SLIB) -L$(X_LIB) -lX11 $(STD_LIBS)
#-----
DEPEND = $(HI_BIN_DIR)/dependance
VERCONV = $(HI_BIN_DIR)/ver_conv
DETAB = $(HI_BIN_DIR)/detab
FILE2C = $(HI_BIN_DIR)/fileDumpToC
WFILT =
#------------------------------------------------------
# 解説 :
# このファイルはhiClassをインストールする時に調べた
# システム構成情報です。hiClassのincludeディレクトリに
# ヘッダファイル群と一緒にインストールされます。
# 利用者は自身のmakefileでこのファイルをincludeする
# ことにより、システム構成情報を自分で取得する手間を
# 省くことができます。
#
# # 利用者makefile
# include /project/include/hi/makeConfig.mk
# TARGETS = test1 test2
# $(TARGETS) : $(DEP_OBJ)
# $(CC) $(LDFLAGS) -o $@ $@.o $(HI_LIB) $(STD_LIBS)
# .C.o :
# $(CC) $(CCFLAGS) $(HI_INCFLAG) -c $*.C $(WFILT)
# clean:
# -\rm -f $(TARGTES) *.o core
#
# 幾つかの定義の説明をします
# $(DEP_OBJ) - 複数のターゲットが同じ規則で生成される
# 場合の記述法はATT版makeとGNU版makeで異ります。
# ATT版:
# $(TARGETS): $$@.o $(COMMON_OBJECTS)
# GNU版:
# $(TARGETS): %: %o $(COMMON_OBJECTS)
# BSD版:多分ATT版と同じ
# $(DEP_OBJ)には "$$@.o" "%: %o" がセットされ
# $(TARGTES): $(DEP_OBJ) $(COMMON_OBJECTS)
# と書くことにより、両makeコマンドに対応できます
# $(STD_LIBS) - socket関係(gethostbyname等を含む)と
# p-thread関係のライブラリをリンクするオプション
# です。Linux/freeBSD/Solaris7/Solaris2.4で確認
# してあります。
#-----------------------------------------------------
configureの結果は次のinclude/hi/machine.hにセットされます。利用者
プログラムから参照し、システムの差の吸収などに利用できます。
ただし、昔と違って現在はコンパイラ、システムライブラリとも安定しており
必ずしもこのヘッダによる細かな対応は必要ではないと考えています。
なお、intのバイト並びは高位が高位になる場合HI_NORMAL_INTがセット されます。intel系の「呪われたinteger」の場合HI_NORMAL_INTは セットされません。(ENDIANという用語を使わない理由はどっちがend か不明であるためです)
例を載せます。内容はシステム毎に異なります。
/* hi/machine.h. Generated by configure. */
/* hi/machine.h.in. Generated automatically from configure.in by autoheader. */
#ifndef hi_machine_H
#define hi_machine_H
/* Define if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define if your processor stores words with the most significant
byte first (like Motorola and SPARC, unlike Intel and VAX). */
/* #undef WORDS_BIGENDIAN */
/* 残念ながらこの定義BIGENDIANはうまく検出されないものがある */
/* 自力でHI_NORMAL_INT定義をしてある。 */
/* Define if you have the gethostbyname function. */
//#undef HAVE_GETHOSTBYNAME
/* Define if you have the gethostname function. */
//#undef HAVE_GETHOSTNAME
/* <unistd.h> の検出はうまくいかない */
/* Define if you have the <pthread.h> header file. */
#define HAVE_PTHREAD_H 1
/* Define if you have the <dirent.h> header file. */
#define HAVE_DIRENT_H 1
/* Define if you have the <ndir.h> header file. */
/* #undef HAVE_NDIR_H */
/* Define if you have the <sys/dir.h> header file. */
/* #undef HAVE_SYS_DIR_H */
/* Define if you have the <sys/ndir.h> header file. */
/* #undef HAVE_SYS_NDIR_H */
/*----------------------------------------*/
/* これ以降はautoheaderでなく手で追加した */
/*----------------------------------------*/
#define HI_VERSION 10616
/* #undef HI_DEBUG */
/* regex.h(POSIX正規表現ライブラリ)があるか */
#define HI_HAVE_REGEX_H 1
/* regexp.h(BSD正規表現ライブラリ)があるか */
/* #undef HI_HAVE_V8_REGEXP_H */
/* sem.hがあるか */
#define HAVE_SEM_H 1
/* strings.h (solaris index関数等) があるか */
/* #undef HAVE_STRINGS_H */
/* 引数1個の構築子があれば=オペレータで構築できるか */
/* 本来Stroustrupの仕様ではできるはずだが,ANSIが */
/* =による構築を引数無しの構築と=オペレータと解釈した上で */
/* 引数1個の構築子を使うというとんでもない、汚く、馬鹿げていて */
/* 矛盾に満ちた仕様にしてしまった */
/* #undef HI_CTR_ALLOWS_EQ_OP */
/* lexで yy_delete_buffer(yy_current_buffer);yy_init=1;が可能か */
/* これはlexがとるバッファがメモリチェックツールにひっかかるので */
/* 解析後deleteするため */
/* #undef HI_LEX_HAS_CURBUF */
/* gcc2.8.0のバグ群を持つか */
#define HI_GCC_8_BUGS 1
/* gcc2.8か */
/* gcc2.8ではテンプレートクラスの派生となるテンプレートクラス(s_dict等) */
/* がコンパイラinternal-errorを引き越すことがある。その他2.8はバグだら */
/* けで一般的には使いものにならない */
/* #undef HI_GCC28 */
/* gcc2.7か */
/* gcc2.7は古いコンパイラであり独自対応が必要になる点がある */
/* #undef HI_GCC27 */
/* gcc2.96か */
/* gc2.96はGNUが'使うな!'と言っている版であり、使うべきではない */
/* #undef HI_GCC296 */
/* gcc3.0か */
/* gcc3.0.1~gcc3.0.3までは極めてオバカなコンパイラであり、const/非const */
/* の異常な選択をしたうえコンパイラ自身が発狂する */
/* #undef HI_GCC30E */
/* gcc3.1か */
/* gcc3.1はリテラルの型変換を苦手するようなので、例えば、doubleを */
/* 引数とする関数は同時にintを引数とする関数も用意しないと、intを */
/* 与えた場合、うまく変換できず発狂することがある */
/* その他、型変換に関連するバグの大嵐 */
/* #undef HI_GCC31 */
/* <sys/select.h>があるか */
#define HAVE_SYS_SELECT_H 1
/* <netinet/in.h>があるか */
#define HAVE_NETINET_IN_H 1
/* <string> (ANSI stringクラス) があるか */
#define HI_HAVE_STRING 1
/* wcharの衝突があるか SUNWsコンパイラ対応 */
/* #undef HI_WCHAR_CONFL */
/* <algorithm>があるか */
#define HI_HAVE_ALGORITHM 1
/* <iterator>があるか */
#define HI_HAVE_ITERATOR 1
/* <iostream>があるか */
#define HI_HAVE_IOSTREAM 1
/* stderrを書き換えできるか */
#define HI_STDERR_OVERWRITE_OK 1
/* coutはstd::で修飾する必要があるか */
#define HI_COUT_NEEDS_STD 1
/* endlはstd::で修飾する必要があるか */
#define HI_ENDL_NEEDS_STD 1
/* <memory> (ANSI クラス) があるか */
#define HI_HAVE_MEMORY 1
/* <sstream>(ANSIクラス) があるか */
#define HI_HAVE_SSTREAM 1
/* <strstream.h>(旧ANSIクラス)があるか */
/* #undef HI_HAVE_STRSTREAM_H */
/* bool/true/falseがキーワードか */
#define HI_BOOL_KEY 1
/* for内定義のスコープがあるか */
#define HI_FOR_SCOPE 1
/* namespaceがあるか */
#define HI_HAVE_NAMESPACE 1
/* exceptionがあるか */
#define HI_EXCEPTION 1
/* pthread_cancelがあるか */
#define HI_HAVE_PTHREAD_CANCEL 1
/* pthread_setconcurrency定義があるか */
#define HI_HAVE_PTHREAD_SETCONCURRENCY_IN_PTHREAD_H 1
/* pthread_setconcurrencyがあるか */
#define HI_HAVE_PTHREAD_SETCONCURRENCY 1
/* pthread_killがあるか */
#define HI_HAVE_PTHREAD_KILL 1
/* 関数プロトタイプにthrowリストが書けるか */
#define HI_THROW_LIST 1
/* pair<T>とregexp.hが衝突しないか */
/* #undef HI_HAVE_PAIR_H */
#define HI_HAVE_REGEXP_PAIR_CONFL 1
#define HI_HAVE_SYS_UN_H 1
/* #undef HI_NO_NEED_UN_H */
/* accept関数の引数型のパターン */
/* 1: int,sockaddr*,int* */
/* 2: int,sockaddr*,U int* */
/* 3: int,sockaddr*,socklen_t* */
/* 4: int,const sockaddr*,int* */
/* 5: int,const sockaddr*,U int* */
/* 6: int,const sockaddr*,socklen_t* */
/* 7: int,sockaddr*,void* */
/* 8: int,const sockaddr*,void* */
#define HI_ACCEPT_PATTERN 1
/* recvfrom関数の引数型の型 */
/* 1: int,void*,U int,int sockaddr*,U int* */
/* 2: int,void*,U int,int sockaddr*,int* */
/* 3: int,void*,U int,U int sockaddr*,U int* */
/* 4: int,void*,U int,U int sockaddr*,int* */
/* 5: int,void*,U int,int sockaddr*,int* */
/* 6: int,void*,U long,int sockaddr*,int* */
/* 7: int,void*,U long,int sockaddr*,U int* */
/* 8: int,void*,size_t,int sockaddr*,int* */
/* 9: int,void*,size_t,int sockaddr*,U int* */
/* 10: int,void*,size_t,int sockaddr*,void* */
/* 11: int,void*,size_t,int sockaddr*,void* 戻り:long */
/* 12: int,void*,int,int,sockaddr*,int* */
#define HI_RECVFROM_IN_SYS_SOCKET_H 1
#define HI_RECVFROM_PATTERN 2
/* send関数の引数型 */
/* 1: int,const void*,U long,int */
/* 2: int,const void*,long ,int */
/* 3: int,const U char*,int ,int */
/* 4: int,U char*,int ,int */
/* 5: int,const char*,int ,int */
/* 6: int,char*,int ,int */
/* 7: int,const void*,size_t,int */
/* 8: int,const void*,size_t,int 戻り:long */
/* 9: int,const void*,int,unsigned int */
/* 10:int,const void*,int,int */
#define HI_SEND_IN_SYS_SOCKET_H 1
#define HI_SEND_PATTERN 7
/* recv関数の引数型 */
/* 1: int,void*,U long,int */
/* 2: int,void*,long ,int */
/* 3: int,U char*,int ,int */
/* 4: int,char*,int ,int */
/* 5: int,void*,size_t,int */
/* 6: int,void*,size_t,int 戻り:long */
/* 7: int,void*,int,unsigned int */
/* 8: int,void*,int,int */
#define HI_RECV_IN_SYS_SOCKET_H 1
#define HI_RECV_PATTERN 5
/* write関数の引数型 */
/* 1: int,const void*,U long */
/* 2: int,const void*,long */
/* 3: int,const U char*,int */
/* 4: int,U char*,int */
/* 5: int,const char*,int */
/* 6: int,char*,int */
/* 7: int,const void*,size_t */
#define HI_WRITE_IN_UNISTD_H 1
#define HI_WRITE_PATTERN 7
/* read関数の引数型 */
/* 1: int,void*,U long,int */
/* 2: int,void*,long ,int */
/* 3: int,U char*,int ,int */
/* 4: int,char*,int ,int */
/* 5: int,void*,size_t,int */
#define HI_READ_IN_UNISTD_H 1
#define HI_READ_PATTERN 5
/* getsockopt関数の引数型のパターン */
/* 1: int,int,int,void*,int* */
/* 2: int,int,int,void*,socklen_t* */
/* 3: int,int,int,char*,int* */
/* 4: int,int,int,char*,socklen_t* */
/* 5: int,int,int,void*,void* */
#define HI_GETSOCKOPT_PATTERN 1
/* UDPのrecvfromでデータ長指定0で待てるか */
/* #undef HI_RECVFROM_ZERO_OK */
/* gethostnameが<unistd.h>で定義されているか */
#define HI_GETHOSTNAME_IN_UNISTD_H 1
/* gethostnameがあるか */
#define HI_HAVE_GETHOSTNAME 1
/* gethostnameが<netdb.h>で定義されているか */
#define HI_GETHOSTBYNAME_IN_NETDB_H 1
/* gethostnameがあるか */
/* #undef HI_HAVE_GETHOSTBYNAME */
/* <stdio.h>にfileno()があるか */
#define HI_FILENO_IN_STDIO_H 1
/* <unistd.h>にmkstemp()があるか */
#define HI_MKSTEMP_IN_UNISTD_H 1
/* <stdlib.h>にmkstemp()があるか */
#define HI_MKSTEMP_IN_STDLIB_H 1
/* <netdb.h>にgetnameinfo()が欠落しているか:Darwin */
/* #undef HI_NO_GETNAMEINFO_PROT */
/* <netdb.h>にgetnameinfo()がリンク可能か */
#define HI_HAVE_GETNAMEINFO 1
/* <time.h>にextern tznameが欠落しているか:Darwin */
#define HI_HAVE_TZNAME_EXT 1
/* timespecのtv_nsecはlongか:Darwin (普通はlong) */
#define HI_TV_NSEC_LONG 1
/* timespecのtv_secはlongか:OpenBSD (普通はlong) */
#define HI_TV_SEC_LONG 1
/* timespecが<time.h>にあるか<sys/time.h>にあるか:OpenBSD */
#define HI_TIMESPEC_IN_TIME_H 1
#define HI_TIMESPEC_IN_SYS_TIME_H 1
/* <sinst.h>にバグがあるか ? */
/* #undef HI_SINST_H_ERROR */
#define HI_LEX_TYPE 1
#define HI_SELECT_IN_TIME_H 1
#define HI_SELECT_IN_SYS_TIME_H 1
#define HI_SELECT_IN_SYS_SELECT_H 1
/* intのバイト順 */
/* #undef HI_NORMAL_INT */
/* int,long,pointerのサイズ */
#define HI_ILP32 1
/* #undef HI_LP64 */
/* #undef HI_ILP64 */
/* off_tのサイズ(ファイルの最大値となる) */
/* #undef HI_OFFT_32 */
#define HI_OFFT_64 1
/* sizeof値の型 */
/* #undef HI_SIZEOF_TYPE_INT */
#define HI_SIZEOF_TYPE_UINT 1
/* #undef HI_SIZEOF_TYPE_LONG */
/* #undef HI_SIZEOF_TYPE_ULONG */
/* diff_tの型 */
#define HI_PTR_DIFF_TYPE_INT 1
/* #undef HI_PTR_DIFF_TYPE_UINT */
/* #undef HI_PTR_DIFF_TYPE_LONG */
/* #undef HI_PTR_DIFF_TYPE_ULONG */
/* long long があるか */
#define HI_HAVE_LONGLONG 1
/* _int64があるか */
/* #undef HI_HAVE_INT64 */
/* strtoll()があるか */
#define HI_HAVE_STRTOLL 1
/* time系のリエントラント関数のプロトタイプがあるか */
#define HI_HAVE_REENT_TIME_FUNCS_PROT 1
/* asctime_rの引数パターン;ctime_rも共通 */
#define HI_ASCTIME_R_PATTERN 1
/* time系のリエントラント関数がライブラリにあるか */
#define HI_HAVE_REENT_TIME_FUNCS 1
/* */
/* メンバテンプレートが可能か */
#define HI_TMPL_MEMBER 1
#define HI_TIMEZONE_NUM 1
/* #undef HI_TM_GMTOFF */
/* POSIX */
#define HI_POSIX_1 1
#define HI_POSIX_4 1
/* nanosleep関数があるか */
#define HI_HAVE_NANOSLEEP 1
/* stat64関数があるか */
/* #undef HI_HAVE_STAT64 */
/* hstrerror関数があるか */
#define HI_HAVE_HSTRERROR 1
#define HI_POSIX_OK 1
/* #undef HI_TYPES_POSIX_OK */
/* マルチバイト<->wchar変換可能か */
/* #undef HI_MB_WC_OK */
/* 論理式でbool変換が優先されない(SunWorkShopのバグ対応) */
/* #undef HI_BOOL_NOT_PRIO */
/* インスタンスのメンバ関数アドレスを取り出せない(SunWorkShopバグ) */
#define HI_MEMB_ADDR_ERR 1
/* SunWorkShop C++5.0はextern Cの解釈にバグがある */
#define HI_EXTERN_C_BUG 1
/* Windowsか */
/* #undef HI_OS_UNIX */
#define HI_OS_WINDOWS 1
/* 戻り値型無しの関数定義をエラーとするか */
/* boo(){ return 1; }が許されるか */
#define HI_FORBIT_NO_TYPE_DECL 1
/* コンパイラはSUNWsか */
/* #undef HI_CC_IS_SUNWS */
/* コンパイラはVC++か;configureで検出しない,machine_VC.hで決め打ち */
/* #undef HI_CC_IS_VC */
/* const変換でバカなchoosingをし、あげくワーニングを出すわエラーにするわ */
/* #undef HI_FOOLISH_CHOOSING */
/* ソケットオプション SO_RCVTIMEO は有効か */
#define HI_SO_RCVTIME_OK 1
/* クライアント側でINADDR_ANYが使えるか */
/* #undef HI_CLIE_INADDR_ANY_OK */
/* getnameinfoでhost-name,port-numがとれる */
#define HI_GETNAMEINFO_OK 1
/* */
#define HI_TCP_EINPROGRESS_OK 1
/* IPV6を有効とするか(--enable-IPV6でセット) */
/* このマクロと次のHI_HAS_GETADDRINFOがセット */
/* された場合machine_def.hでHI_IPV6_ENABLEが */
/* セットされます。プログラムではHI_IPV6_ENABLEの */
/* 方を参照します。 */
#define HI_USE_IPV6 1
/* getaddrinfo()関数があるか(IPV6対応) */
#define HI_HAS_GETADDRINFO 1
/* hiSSLSockクラスを有効にするか */
/* --disable-hiSSLSockで無効になる */
#define HI_SSLSOCK_ENABLE 1
/* OpenSSL関数があるか */
#define HI_HAS_OPENSSL 1
#define HI_HAS_OPENSSL_V23 1
/* Forte6のistreamにはread(buf,1)の後read(buf,n)を行うと */
/* 2回目の先頭バイトが重複してしまうバグがある */
/* #undef HI_ISTREAM_READ_BYTES_DUP_BUG */
/* istreamにreadsomeがあるか */
/* #undef HI_ISTREAM_HAS_READSOME */
/* streambuf::overflowが呼ばれるか */
/* (SUNWs/C++では呼ばれない) */
#define HI_STREAMBUF_OVERFLOW 1
/* ctypeの関数群に::を付けて ::isalpha('z') などとしては */
/* いけない マクロになっているため */
/* #undef HI_CTYPE_IS_MACRO */
#endif
/* 最後の行:削除しないこと */