Friday, April 3, 2009

DtsEditのコンパイル(FreeBSD,多分Linuxも)

DtsEditはほとんどソースを変更することなくコンパイルできます。
手順
> mkdir DtsEdit
> cd DtsEdit
> unzip ../DtsEdit_src20081009.zip
  • 一部ファイルを削除する。
> rm stdint.h
  • 文字コード、改行コードを変更する。
> nkf -e -Lu hoge.cpp > hoge.cpp.euc
> mv hoge.cpp.euc hoge.cpp
  • てな感じですべてのcpp,hファイルを変更する。
  • じゃまくさいので、スクリプトで

    #!/bin/sh
    NKF=/usr/local/bin/nkf
    for file in `ls ./DtsEdit/*.cpp ./DtsEdit/*.h`; do
    echo "converting "$file
    ${NKF} -e -Lu $file > $file".euc-unix"
    mv $file".euc-unix" $file
    done

  • パッチファイル。同じ文字コード、改行コードで作成。

    diff -urN DtsEdit.orig/EditMain.cpp DtsEdit/EditMain.cpp
    --- DtsEdit.orig/EditMain.cpp 2009-03-06 22:32:51.000000000 +0900
    +++ DtsEdit/EditMain.cpp 2009-03-06 00:47:09.000000000 +0900
    @@ -54,6 +54,7 @@
    qsort(tsSort, mi.ui_sampleCount, sizeof(T_TS_LIST), (int(*)(const void*, const void*))CompareTS_PTS);

    // 最終フレームのFPS補完
    + {
    u32 i = mi.ui_sampleCount;
    tsSort[i].DTS = ts[i-1].DTS + (ts[i-1].DTS - ts[i-2].DTS);
    tsSort[i].CTS_Offset = 0;
    @@ -266,6 +267,7 @@
    goto _ERROR_RET;
    }
    }
    + }


    _ERROR_RET:
    diff -urN DtsEdit.orig/EditMain.h DtsEdit/EditMain.h
    --- DtsEdit.orig/EditMain.h 2009-03-06 22:32:51.000000000 +0900
    +++ DtsEdit/EditMain.h 2009-03-05 22:54:33.000000000 +0900
    @@ -3,7 +3,7 @@

    #pragma once

    -#define MODE_IN 0x00000001ui32
    -#define MODE_OUT 0x00000002ui32
    +#define MODE_IN ((ui32)0x00000001)
    +#define MODE_OUT ((ui32)0x00000002)

    void EditMain(T_EDIT_PARAM *prm);
    diff -urN DtsEdit.orig/Makefile DtsEdit/Makefile
    --- DtsEdit.orig/Makefile 1970-01-01 09:00:00.000000000 +0900
    +++ DtsEdit/Makefile 2009-03-05 22:54:33.000000000 +0900
    @@ -0,0 +1,17 @@
    +# Makefile for DtsEdit
    +CPP = g++
    +OBJS = DtsEdit.o EditMain.o Help.o common.o
    +#
    +DtsEdit: $(OBJS)
    + $(CPP) -o $@ $(OBJS) -lgpac -L/usr/local/lib
    +#
    +.cpp.o:
    + g++ -c $< -I /usr/local/include -I ./
    +#
    +clean:
    + @rm -f DtsEdit *.o *~
    +#
    +DtsEdit.o: stdafx.h Help.h EditMain.h windows.h
    +EditMain.o: stdafx.h Help.h EditMain.h debug.h
    +Help.o: Help.h
    +common.o: stdafx.h Help.h debug.h
    diff -urN DtsEdit.orig/common.cpp DtsEdit/common.cpp
    --- DtsEdit.orig/common.cpp 2009-03-06 22:32:51.000000000 +0900
    +++ DtsEdit/common.cpp 2009-03-05 22:54:33.000000000 +0900
    @@ -1,5 +1,5 @@
    #include "stdafx.h"
    -#include "help.h"
    +#include "Help.h"
    #include "debug.h"

    // 最大公約数の取得
    diff -urN DtsEdit.orig/stdafx.h DtsEdit/stdafx.h
    --- DtsEdit.orig/stdafx.h 2009-03-06 22:32:51.000000000 +0900
    +++ DtsEdit/stdafx.h 2009-03-06 22:34:42.000000000 +0900
    @@ -3,6 +3,7 @@
    // を記述します。
    //

    +/*
    #pragma once

    #ifndef _WIN32_WINNT // Windows XP 以降のバージョンに固有の機能の使用を許可します。
    @@ -12,8 +13,23 @@
    #include <windows.h>
    //#include <stdio.h>
    //#include <tchar.h>
    +*/

    // TODO: プログラムに必要な追加ヘッダーをここで参照してください。
    +#include <stdio.h>
    +#include <strings.h>
    +#include <unistd.h>
    +#include <sys/types.h>
    +typedef int BOOL;
    +typedef __uint32_t ui32;
    #include <gpac/isomedia.h>
    #include <gpac/internal/isomedia_dev.h>
    #include "common.h"
    +
    +#define ZeroMemory(ptr,size) memset(ptr,0,size)
    +#define _stricmp(str1,str2) strcasecmp(str1,str2)
    +#define GetFileAttributes(path) ((__uint32_t)access(path,F_OK))
    +#ifndef FALSE
    +#define FALSE 0
    +#define TRUE 1
    +#endif
    diff -urN DtsEdit.orig/windows.h DtsEdit/windows.h
    --- DtsEdit.orig/windows.h 1970-01-01 09:00:00.000000000 +0900
    +++ DtsEdit/windows.h 2009-03-06 22:27:43.000000000 +0900
    @@ -0,0 +1 @@
    +//
  • patchをあてる。スペースとかタブがうまく投稿できてないので。
> patch -l -p < DtsEdit.patch
  • makeする,これも投稿の問題で、Makefileのスペース8個をタブに書き換えてください。
> cd DtsEdit
> make
  • できあがり、のはず。
ソースファイルの投稿は難しい、うまく書き込めてなかったらお知らせください。しかし、スペースとかタブとかどんどん書き換わるのはなんとかならんのか。みんなはどうしているのでしょう。

No comments: