LoginSignup
0
1

More than 5 years have passed since last update.

OSXでngをmakeする。あるいはClangで古いスタイルのCソースをコンパイルする

Last updated at Posted at 2015-07-04

EDITOR=viはもういやだ!!

ということで起動が軽いngUTF-8パッチを当てたものを作ることにしました。

% curl http://tomato.sakura.ne.jp/~amura/archives/ng/ng-1.5beta1.tar.gz | tar xz
% cd ng-1.5beta1
% curl http://www002.upp.so-net.ne.jp/hidev/ng-1.5beta1-utf8.patch.gz|gzcat|patch
% ./configure && make

こんなかんじでmakeをすると、

tty.c:292:3: error: non-void function 'ttinsl' should return a value [-Wreturn-type,Semantic Issue]

とエラーを吐いてコンパイルが止まります (他に警告も大量に出ます)。こんな感じの関数がエラーになっています;

func() {
    return;
}

型指定のない関数ですね。Cの規約によりこれはintを返すと仮定されますが、returnは何も返していません。「この関数はvoidじゃねえよ!! なんか値返せよ!!」とコンパイラが怒っているわけです。エラーメッセージにもそのように出ていますね。古いソースだとこういった関数が結構ありますし、実際ngのソースにあってエラーになりました。

これを抑止するにはコンパイルオプションに -Wno-return-type をつけてやればよいです。というかこのオプションを発見するのに手間取りました(なのでここにメモを)。

Makefileを開いて

CFLAGS  = -O2 $(CDEFS)

の行を

CFLAGS  = -O2 $(CDEFS) -w -Wno-return-type

に書き換えればよいです。ついでに警告全抑止オプションの-wもつけときました。これでgit commitのときにviが起動して脱力するのを避けられます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1