読者です 読者をやめる 読者になる 読者になる

DelphiのコードをFree Pascal Compilerでコンパイルする

Free Pascalが最近どうなってるのかなーと思って試してました。
Free Pascal - Advanced open source Pascal compiler for Pascal and Object Pascal - Home Page
先日作成したファイル分割のプログラムをFree Pascal Compiler(FPC)でコンパイルしようとしました。
FPCのバージョンは2.6.0です。
FPCにはDelphi互換モードがあり、これを使うとDelphiの文法に対応してくれます。
で、まあそのままではやっぱりダメだったので、以下の点を変更しました。

  • namespaceに対応していないためユニット名をドット無しの名前に変更
  • FindCmdLineSwitch関数の4引数のオーバーロードがないのでParamStrで代用

ソースコードはbitbucketのリポジトリにfpcブランチでコミットしています。
tokibito / filesplit / source / — Bitbucket

実行結果

手元のUbuntu12.04(64bit)のVM上でコンパイルできました。Windows用のFPCでもコンパイルできました。動作も問題なさそう。

$ make fpc
fpc -Mdelphi filesplit.dpr
Free Pascal Compiler version 2.6.0 [2011/12/23] for x86_64
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling filesplit.dpr
Compiling ./Main.pas
Compiling ./SplitFile.pas
Linking filesplit
/usr/bin/ld: warning: link.res contains output sections; did you forget -T?
274 lines compiled, 0.2 sec
$ ls -l filesplit
-rwxrwxr-x 1 tokibito tokibito 653112 Jan  7 21:08 filesplit
$ ./filesplit -s 200000 filesplit
Split size: 200000
Target file: filesplit
Creating filesplit.000...
Creating filesplit.001...
Creating filesplit.002...
Creating filesplit.003...

感想

FPCの2.6.0からDelphi互換モードで、DelphiGenericsシンタックスにも対応しているのでIFDEFを使う部分が減ってて良い感じ。namespaceの互換は次期バージョン(2.7.x)で対応されるみたいです。
GUI回りは試してないけど、多分厳しいんだろうな。
SysUtilsなどユニットのよく使いそうな関数に差異があったりするので、この辺は注意が必要そう。
とはいえ、CUIならそれなりに使えそうなので良いですね。