xwireless
sample Program |
FM TOWNS
-- ワイヤレスコマンダ TV/VTRリモコン |
Imakefile |
--"Xaw のプログラミングについて" 付属サンプルプログラム--1998/08/02
|
1. 概要
この Imakefile は、サンプルプログラムの xwireless のインストール用のものです。
xwireless 自体は、前のものと同じですが、Imakefile は、更新しました。
Imakefile は、X では、xmkmf で処理されます。xmkmf は、内部で imake を使用して
Imakefile から Makefile を作成します。
ここでは、そのリストとともに変更点を含めた、その要点を説明します。
2. Imakefileのリスト
▼ コメント |
cpp で処理されるため C のコメント形式が使用可能
|
/***************************************************************************
* Imakefile for xwireless
* 1st. release. 1996/9/25
* last update. 1998/5/26
*
* コンパイル条件を選択する識別子
* DEBIAN_TOWNS: TOWNS 版の Debian GNU/Linux のみ使用
*
* このアプリケーションは、TOWNS 専用なので 識別子 TOWNS が未定義なら
* Debian GNU/Linux を使用していると考えてコンパイルする。
*
***************************************************************************/
▼ Debian/TOWNS |
Debian GNU/Linux ベース TOWNS Linux モード・コンパイル
|
XCOMM **********************************************************************
XCOMM インストール環境‐指定
XCOMM **********************************************************************
#ifndef TOWNS
# define DEBIAN_TOWNS /* TOWNS 版の Debian GNU/Linux のみ使用 */
#endif /*TOWNS*/
▼ for Debian |
Debian GNU/Linux ベース TOWNS Linux 用の条件インストール設定
|
XCOMM **********************************************************************
XCOMM Debian ベース環境の TOWNS Linux でのインストール用の前処理
XCOMM **********************************************************************
#ifdef DEBIAN_TOWNS
# define INCLUDES ORIGINAL_INCLUDES
# define DEFINES ORIGINAL_DEFINES
#endif /*DEBIAN_TOWNS*/
▼ 標準的な設定 |
ライブラリ/インクルードファイル/ソース/オブジェクトの指定
|
XCOMM **********************************************************************
XCOMM 標準設定
XCOMM **********************************************************************
INCLUDES =
LOCAL_LIBRARIES = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB)
SYS_LIBRARIES = -lm
SRCS = xwireless.c
OBJS = xwireless.o
DEFINES = -DXI18N -g -Wall '-DTVMAKER=(RMC_MATUSHITA | RMC_TV1)' \
'-DVTRMAKER=(RMC_MATUSHITA | RMC_VTR1)'
▼ for Debian |
Debian GNU/Linux ベース TOWNS Linux 用のインストール条件を付加
|
/***************************************************************************
* Debian ベース環境の TOWNS Linux でのインストール用フラグ
***************************************************************************/
#ifdef DEBIAN_TOWNS
# undef INCLUDES
# undef DEFINES
INCLUDES = $(ORIGINAL_INCLUDES) -I/usr/src/kernel-headers-2.0.30-towns/include
DEFINES = $(ORIGINAL_DEFINES) -DTOWNS
#endif /*DEBIAN_TOWNS*/
▼ インストール先 |
インストール・ディレクトリの指定
|
/***************************************************************************
* Slackware ベースの TOWNS Linux でのインストール場所
***************************************************************************/
#ifdef TOWNS
BINDIR = /towns/usr/bin
MANDIR = /towns/usr/man/ja_JP.ujis/man1
#else
MANDIR = /usr/X11R6/man/ja_JP.ujis/man1
#endif /*TOWNS*/
▼ 日本語化の指定 |
日本語アプリケーションデフォルトファイルの指定
|
/***************************************************************************
* 日本語 EUC 環境のアプリケーションデフォルトファイルのインストールパス
***************************************************************************/
XAPPLOADJADIR = /usr/X11R6/lib/X11/ja_JP.ujis/app-defaults
/***************************************************************************
* 日本語 EUC 環境向けのアプリケーションデフォルトファイル
***************************************************************************/
#define InstallAppDefaultsJa(class) @@\
InstallNamedTarget(install,class.ujis.ad,$(INSTAPPFLAGS),$(XAPPLOADJADIR),class)
xwireless:$(OBJS)
xwireless.o:xwireless.c
/***************************************************************************
* 通常のインストール
***************************************************************************/
ComplexProgramTarget(xwireless)
InstallAppDefaults(Xwireless)
InstallAppDefaultsJa(Xwireless)
3. コメントについて
Imakefile には、いくつかのコメントの形式があります。ます、これらを列記します。
- C のコメント形式 (/**/)
- make のコメント形式 (#)
- X11R5 のコメント形式 (XCOMM)
3.1 C のコメント形式
C の標準コメント形式である /**/ の形式が使用できます。
しかし、この形式のコメントは、他の形式のコメントとは、意味が違います。
そもそも、 C のコメント形式が使えるのには、imake によって変換されるときに
C プログラマにとっては、非常に馴染みのある cpp (C のプリプロセッサ)を使用します。
C コンパイラでコメントは、プリプロセッサによって削除されます。
このため、Imakefile に含まれる /**/ 形式コメントは、Makefile に引き継がれることなく、
削除されます。
3.2 make のコメント形式
make のコメント形式である # の形式が使用できます。
しかし、cpp で処理されるため予期できない Makefile を作ることがあります。
3.3 X11R5 のコメント形式
make のコメント形式である # の形式を使用した場合のトラブルへの対策として、
XCOMM と言うコメント形式が使えます。
これは、Makefile には、# 形式のコメントとして残ります。
4. TOWNS 識別子について
この xwireless は、TOWNS 専用のデバイスを使用した TOWNS Linux 専用のアプリケーションです。
このため、この Imakefile は、TOWNS Linux で、コンパイルすることを前提に製作されています。
現在、TOWNS Linux には、Slackware をベースとしたものと Debian をベースとしたものの 2 種類が
存在しますが、Slackware ベースのものは、xmkmf(imake) を使用する際に TOWNS と言う識別子が事前に定義されています。
このプログラム自体が、TOWNS のみをターゲットしているので、この TOWNS の識別子があると
Slackware ベースの TOWNS Linux として認識し、無いと Debian GNU/Linux ベースの TOWNS Linux と判定します。
PC/AT 互換機など他の Linux / UNIX 環境もターゲットしたときには、この方式は使えません。
Imakefile をユーザーが直接編集するか、その他の方法で環境を判別するしかありません。
5. インクルードファイルの指定
xwireless では、TOWNS の独自デバイスを操作するため TOWNS のカーネル用の
ヘッダーファイルを使用します。
このヘッダーファイルが置かれている場所が、Slackware-3.1 ベースの TOWNS Linux と
Debian GNU/Linux 1.3.1 の TOWNS Linux では、異なります。
ここでは、この違いを以下のようにして吸収しています。
#ifndef TOWNS
INCLUDES = -I/usr/src/kernel-headers-2.0.30-towns/include
#endif /*TOWNS*/
これは、TOWNS の識別子が Slackware ベースの TOWNS Linux では、定義されているが、
Debian GNU/Linux では、定義されていないためです。
なお、この方法は、暫定的な対処であり将来においては、別の対処方が必要になるかも知れません。
6. コンパイルオプションの指定
この部分は、Makefile に引き継がれてコンパイルオプションの指定に使われます。