%% -*- tab-width: 4;erlang-indent-level: 4;indent-tabs-mode: nil -*-
%% ex: ft=erlang ts=4 sw=4 et

%% Licensed under the Apache License, Version 2.0 (the "License"); you may not
%% use this file except in compliance with the License. You may obtain a copy of
%% the License at
%%
%%   http://www.apache.org/licenses/LICENSE-2.0
%%
%% Unless required by applicable law or agreed to in writing, software
%% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
%% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
%% License for the specific language governing permissions and limitations under
%% the License.

Arch = erlang:system_info(system_architecture),

ICUConfig = fun(Args) ->
    {0, Value} = eunit_lib:command("icu-config " ++ Args),
    [C||C <- Value, C =/= $\n]
end,

GetFlag = fun(Name, Args) ->
        case os:getenv(Name) of
            false -> ICUConfig(Args);
            Val -> Val
        end
    end,

GetFlag1 = fun(Name, Default) ->
        case os:getenv(Name) of
            false -> Default;
            Val -> Val
        end
    end,

BuildStatic = os:getenv("COUCHDB_STATIC") =:= "1" andalso
                os:getenv("USE_STATIC_ICU") =:= "1",

IsDarwin = case os:type() of
    {unix, darwin} -> true;
    _ -> false
end,

IsWindows = case os:type() of
    {win32, nt} -> true;
    _ -> false
end,

UseSystemIcu = IsDarwin andalso os:getenv("USE_STATIC_ICU") /= "1",

PortEnv = case {UseSystemIcu, BuildStatic, IsWindows} of
    {true, _, false} ->
        CFLAGS = GetFlag1("ICU_CFLAGS",
                         "-Iplatform/osx/icu -I/usr/include -fPIC"),
        LDFLAGS = GetFlag1("ICU_LDFLAGS",
                          "-lpthread -lm  -licucore -lstdc++ -L/usr/lib " ++
                          "$DRV_LDFLAGS -fPIC"),
        [
            {"CFLAGS", "$DRV_CFLAGS " ++ CFLAGS},
            {"LDFLAGS", LDFLAGS}
        ];
    {_, true, false} ->
        CFLAGS = GetFlag1("ICU_CFLAGS", "-I.libs/icu/include"),
        LDFLAGS = GetFlag1("ICU_LDFLAGS", ".libs/icu/lib/libicui18n.a " ++
                                          ".libs/icu/lib/libicuuc.a " ++
                                          ".libs/icu/lib/libicudata.a"),
        [
            {"DRV_CFLAGS", "$DRV_CFLAGS " ++ CFLAGS},
            {"DRV_LDFLAGS", "-lstdc++ -fPIC $DRV_LDFLAGS " ++ LDFLAGS},
            {"CFLAGS", "$DRV_CFLAGS " ++ CFLAGS},
            {"LDFLAGS", "-lstdc++ -fPIC $DRV_LDFLAGS " ++ LDFLAGS}
        ];
    {_, true, true} ->
        throw("Static builds not supported on Windows.");
    {_, false, false} ->
        ICUCFLAGS = GetFlag("ICU_CFLAGS", "--cflags"),
        ICUCXXFLAGS = GetFlag("ICU_CXXFLAGS", "--cxxflags"),
        ICULDFLAGS = GetFlag("ICU_LDFLAGS", "--ldflags"),
        ICUINCPATH = GetFlag("ICU_INCPATH", "--cppflags-searchpath"),

        [
            {"CFLAGS",  ICUCFLAGS ++  " $CFLAGS " ++ ICUINCPATH},
            {"CXXFLAGS", ICUCXXFLAGS ++ " $CXXFLAGS " ++ ICUINCPATH},
            {"LDFLAGS",  ICULDFLAGS ++ " $LDFLAGS"}
        ];
    {_, false, true} ->
        ICUCFLAGS = "",
        ICUCXXFLAGS = "",
        ICUINCPATH = "/I.libs\\icu\\include",
        ICULDFLAGS = ".libs\\icu\\lib\\icuin.lib " ++
                ".libs\\icu\\lib\\icuuc.lib " ++
                ".libs\\icu\\lib\\icudt.lib",
        [
            {"CFLAGS",  ICUCFLAGS ++  " $CFLAGS " ++ ICUINCPATH},
            {"CXXFLAGS", ICUCXXFLAGS ++ " $CXXFLAGS " ++ ICUINCPATH},
            {"LDFLAGS",  ICULDFLAGS ++ " $LDFLAGS"}
        ]
end,

PortInfo = [{port_env, PortEnv},
            {port_specs, [
                {filename:join(["priv", Arch, "couch_collate.so"]),
                    ["c_src/*.c"]}]},
            {pre_hooks, [
                {"(linux|solaris|freebsd|netbsd|openbsd|dragonfly|darwin)",
                    compile, "./build_icu.sh"},
                {"(win32|win64)", compile,
                    "powershell ./build_icu.ps1"}
            ]},
            {post_hooks, [
                {"(linux|solaris|freebsd|netbsd|openbsd|dragonfly|darwin)",
                    clean, "./build_icu.sh clean"},
                {"(win32|win64)", clean,
                    "powershell ./build_icu.ps1 -clean"}
            ]}
           ],

lists:keymerge(1,lists:keysort(1, PortInfo), lists:keysort(1, CONFIG)).
