Jump to content 日本-日本語

製品  >  ソフトウェア  >  HP- UX Developer Edge

SolarisとHP-UXの間のカベを取り除く「SHPK」・前編

HP-UX/Integrityサーバー お問い合せ
コンテンツに進む
SolarisとHP-UXの間のカベを取り除く「SHPK」・前編
SolarisとHP-UXの間のカベを取り除く「SHPK」・前編
SolarisとHP-UXの間にあるカベ
SHPKとは

SHPKとは

前述のとおりSHPKは、Solaris対応のC/C++ソースコードのHP-UXへの移行を支援するツールである。SolarisとHP-UXの間のさまざまな差異、例えばライブラリのAPIやヘッダファイル、スレッドやシグナル、コンパイラオプション、makeツールなどの違いを吸収する環境を提供する。現在のところ、SHPKはトライアル版として無償でリリースされており、入手するには日本ヒューレット・パッカードへの問い合わせが必要となる。製品としての正式サポートは提供されていないが、将来的にはサポートの提供が計画されている。

SHPKがサポートする移行元環境は、Solaris 2.5以降である。一方、移行先環境はHP-UX 11i v2となる。インテル® Itanium® 2プロセッサおよびPA-RISCプロセッサの両方に対応する。プログラミング言語としてはCおよびC++に対応しており、移行に際してはSHPKの他にHP aC++/ANSI Cコンパイラ のバージョン6.xが必要となる。

ひとつ留意しておくべき点は、SHPKは“Solarisのエミュレータ”ではないということだ。あくまでソースコードの移行を支援するツールであり、バイナリ互換性を提供するものではない。また、従来のポーティング作業に比較して修正すべき部分は格段に減るものの、100%無修正でコンパイルできることを保証するツールではない。よって、SHPKだけで対応できない部分については、手作業によるソースコード修正が必要となる。

SHPKの恩恵をもっとも享受できるのは、社内開発のソフトウェアやISVソフトウェアだろう。一般的にこうしたソフトウェアは、特定のプラットフォームをターゲットに記述されることが多く、SHPKがきわめて重宝するはずだ。一方、オープンソースソフトウェアについてはもともとポータブルなビルドツール(configureなど)が整えられているものが多く、SHPKを利用するまでもないだろう。ちなみに、HPでは多数のオープンソースソフトウェアをHP-UXへ移行済みで、「Internet Express」として無償で公開している。

さて、SHPKは以下のコンポーネントから構成されている

  • ソースコードスキャナ
  • Solaris互換ライブラリとヘッダファイル
  • Solaris互換ビルドツール
 
図3:SHPKによるアプリケーション移行
図3:SHPKによるアプリケーション移行
 

以下、これらの各要素について詳しく見ていこう。


ソースコードスキャナ

SHPKには、ソースコードスキャナ「sh_src_scanner」が含まれている。このソースコードスキャナを用いてSolaris対応ソースコードを走査することで、どの部分はSHPKによってそのまま互換性が提供されるか、そしてどの部分を手直しすべきが、ログとして以下のように出力される仕組みだ。

$ cat shpk_keyword_header.txt
File Path : /home/kamei/getmntent.c
Line No : 2
"sys/mnttab.h" will be handled by SHPK

File Path : /home/kamei/getmntent.c
Line No : 8
"struct mnttab" will be handled by SHPK

File Path : /home/kamei/getmntent.c
Line No : 16
"getmntent" will be handled by SHPK

このように、SHPKが自動的に互換性を提供する項目については、「… will be handled by SHPK」(SHPKが対応)と表示される。一方、ソースコードを手作業で修正する必要がある項目には「Manual Porting is Required for …」(手作業による修正が必要)と表示される。よって後者の内容や数を見れば、ポーティング作業にかかる工数を見積もることが可能になる。

Solaris互換ライブラリとヘッダファイル

SHPKでは、以下のSolaris互換ライブラリ(SHPKライブラリ)を提供している。ソースコード中でSolaris固有のAPIを呼び出している部分については、コンパイル時にこのライブラリにリンクされる。

表:SHPKが提供するSolaris互換ライブラリ
ライブラリ 機能
libwrapsc.a システムコール関連
libwrapstream.a ネットワーク関連
libwrapstl.a Solarisスレッド関連

ちなみに、SHPKでは32ビットと64ビットのそれぞれに対応したライブラリを提供しており、32ビットと64ビットどちらの実行ファイルも作成可能だ。 一方、SHPKではSolaris互換のヘッダファイルも多数提供している。例えばソースコード内でstdio.hをインクルードしている場合、HP-UXにおける標準ヘッダファイル(/usr/include/stdio.h)ではなく、SHPKが提供するSolaris互換ヘッダファイル(/opt/shpk/include/stdio.h)がインクルードされる。このヘッダファイルにおいてSolarisとHP-UXのAPIや型などの違いを吸収することで、上述のSHPKライブラリをリンクできる仕組みになっている。

Solaris互換ビルドツール

SolarisからHP-UXへの移行に際して面倒な部分のひとつが、ビルドツールmakeのふるまいの違いである。Solarisのmakeで使用するmakefileの文法には、HP-UXのそれとは異なる部分がある。例えばSolarisでは、makefileでのファイル名やディレクトリ名の指定において「%」などのワイルドカード指定が可能だが、HP-UXのmakeにはこれに相当する機能はない。こうした違いのため、makefileの内容を逐一直していかねばならず、膨大な工数が発生してしまう。

そこでSHPKでは、Solaris互換のmakeである「sh_make」を提供している。sh_makeを用いることで、Solaris対応のmakefileをそのままHP-UX上で実行することができる。もっとも、明示的にリンクしているライブラリについてはSolarisとHP-UXで名前が異なる場合があり、その場合にはmakefileを修正する必要がある。

またSolarisとHP-UXでは、コンパイラのオプションにも違いがある。例えば、共有ライブラリなどの位置独立なオブジェクトコードを生成する場合、Solarisでは「-G」オプションを指定するが、HP-UXでは「-b」オプションを指定する必要がある。

こうした違いを吸収するために、SHPKでは、コンパイルドライバ「sh_cc」および「sh_c++」を提供している。これらのコンパイルドライバでは、Solarisコンパイラ用のオプションをHP C/aC++コンパイラ用のオプションに変換したのち、HP C/aC++コンパイラを起動する。これにより、コンパイルオプションの手直しは最小限に抑えることができる。ちなみに、オプションの対応付けはSHPKのマップファイルで定義されており、必要に応じて修正が可能である。

表:SHPKコンパイラドライバのマップファイル
$ cat /opt/shpk/lib/sun2hp.map
     :       :
-Bstatic => -Wl,-a,archive
-G => -b
-H => -Wp,-h
-KPIC => +Z
-Kpic => +z
-PIC => +Z
     :       :

SHPKではその他にも、Solarisの「ar」、「ld」、「ln」の動作を再現する「sh_ar」、「sh_ld」、「sh_ln」といったSolaris互換ユーティリティを提供している。これらも、上述のコンパイラドライバと同様に、Solarisの各コマンドのオプション指定に対応するものだ。こうした各種ツールによって、Solaris互換のビルド環境をHP-UX上に再現している。

特集の後編では、SHPKによるポーティングと工数削減の実際の例を紹介する。

トップへ 戻る    


その他のコラム(特集)もお読み下さい

 
 

本ページの内容は執筆時の情報に基づいており、異なる場合があります。
印刷用画面へ
プライバシー ご利用条件・免責事項