diff --git a/erlang-erlydtl-0001-Verbose-testing.patch b/erlang-erlydtl-0001-Verbose-testing.patch new file mode 100644 index 0000000..593df1f --- /dev/null +++ b/erlang-erlydtl-0001-Verbose-testing.patch @@ -0,0 +1,31 @@ +From: Peter Lemenkov +Date: Thu, 19 May 2016 18:55:10 +0300 +Subject: [PATCH] Verbose testing + +Signed-off-by: Peter Lemenkov + +diff --git a/rebar-tests.config b/rebar-tests.config +index 199ac85..d2440ff 100644 +--- a/rebar-tests.config ++++ b/rebar-tests.config +@@ -1,20 +1,5 @@ + %% -*- mode: erlang -*- + +-{eunit_opts, +- [%% This turns off the default output, MUST HAVE +- no_tty, +- %% Uses the progress formatter with ANSI-colored output +- {report, {eunit_progress, [colored +- %% uncomment to get a list of slowest running tests +- %%, profile +- ]}} +- ]}. +- +-{deps, +- [{eunit_formatters, ".*", +- {git, "git://github.com/seancribbs/eunit_formatters", "35e3e6ab2db48af776a1a21bba6f1461c97caacb"}} +- ]}. +- + {pre_hooks, + [{eunit, + "erlc -I include/erlydtl_preparser.hrl -o test" diff --git a/erlang-erlydtl-0002-No-such-function-exported-gettext_compile-write_pret.patch b/erlang-erlydtl-0002-No-such-function-exported-gettext_compile-write_pret.patch new file mode 100644 index 0000000..d6d23c7 --- /dev/null +++ b/erlang-erlydtl-0002-No-such-function-exported-gettext_compile-write_pret.patch @@ -0,0 +1,34 @@ +From: Peter Lemenkov +Date: Thu, 19 May 2016 19:08:13 +0300 +Subject: [PATCH] No such function exported gettext_compile:write_pretty/1 + +Signed-off-by: Peter Lemenkov + +diff --git a/src/i18n/po_generator.erl b/src/i18n/po_generator.erl +index 99f0f6e..0fa61f5 100644 +--- a/src/i18n/po_generator.erl ++++ b/src/i18n/po_generator.erl +@@ -37,9 +37,9 @@ write_entries(Items)-> + Fi = gettext_compile:fmt_fileinfo(Finfo), + io:format(Fd, "~n#: ~s~n", [Fi]), + ok = file:write(Fd, "msgid \"\"\n"), +- gettext_compile:write_pretty(Id), ++ gettext_compile:write_pretty(Id, Fd), + ok = file:write(Fd, "msgstr \"\"\n"), +- gettext_compile:write_pretty(Translation) ++ gettext_compile:write_pretty(Translation, Fd) + end, + lists:foreach(F, Items). + +@@ -49,9 +49,9 @@ write_fuzzy_entries(Items) -> + F = fun({Id,Translation,_}) -> + ok = file:write(Fd, "#, fuzzy\n"), + ok = file:write(Fd, "msgid \"\"\n"), +- gettext_compile:write_pretty(Id), ++ gettext_compile:write_pretty(Id, Fd), + ok = file:write(Fd, "msgstr \"\"\n"), +- gettext_compile:write_pretty(Translation), ++ gettext_compile:write_pretty(Translation, Fd), + ok = file:write(Fd, "\n") + end, + lists:foreach(F, Items). diff --git a/erlang-erlydtl-0003-No-such-function-exported-gettext_compile-fmt_filein.patch b/erlang-erlydtl-0003-No-such-function-exported-gettext_compile-fmt_filein.patch new file mode 100644 index 0000000..82be49e --- /dev/null +++ b/erlang-erlydtl-0003-No-such-function-exported-gettext_compile-fmt_filein.patch @@ -0,0 +1,19 @@ +From: Peter Lemenkov +Date: Thu, 19 May 2016 19:10:47 +0300 +Subject: [PATCH] No such function exported gettext_compile:fmt_fileinfo/1 + +Signed-off-by: Peter Lemenkov + +diff --git a/src/i18n/po_generator.erl b/src/i18n/po_generator.erl +index 0fa61f5..fa7b3fb 100644 +--- a/src/i18n/po_generator.erl ++++ b/src/i18n/po_generator.erl +@@ -34,8 +34,6 @@ generate_file(Lang,Items, Fuzzy) -> + write_entries(Items)-> + Fd = get(fd), + F = fun({Id,Translation,Finfo}) -> +- Fi = gettext_compile:fmt_fileinfo(Finfo), +- io:format(Fd, "~n#: ~s~n", [Fi]), + ok = file:write(Fd, "msgid \"\"\n"), + gettext_compile:write_pretty(Id, Fd), + ok = file:write(Fd, "msgstr \"\"\n"), diff --git a/erlang-erlydtl-0004-No-such-fun-gettext_compile-open_po_file-3.patch b/erlang-erlydtl-0004-No-such-fun-gettext_compile-open_po_file-3.patch new file mode 100644 index 0000000..7b5b498 --- /dev/null +++ b/erlang-erlydtl-0004-No-such-fun-gettext_compile-open_po_file-3.patch @@ -0,0 +1,29 @@ +From: Peter Lemenkov +Date: Thu, 19 May 2016 19:14:25 +0300 +Subject: [PATCH] No such fun - gettext_compile:open_po_file/3 + +Signed-off-by: Peter Lemenkov + +diff --git a/src/i18n/po_generator.erl b/src/i18n/po_generator.erl +index fa7b3fb..0b2da0a 100644 +--- a/src/i18n/po_generator.erl ++++ b/src/i18n/po_generator.erl +@@ -15,11 +15,17 @@ + %% + %% API Functions + %% ++-define(LANG_DIR, "lang"). ++-define(POFILE, "gettext.po"). + generate_file(Lang,Items, Fuzzy) -> + Gettext_App_Name = "tmp", + GtxtDir = ".", + io:format("Opening po file"), +- gettext_compile:open_po_file(Gettext_App_Name, GtxtDir, Lang), ++ DefDir = filename:join([GtxtDir, ?LANG_DIR, Gettext_App_Name, Lang]), ++ Fname = filename:join([DefDir, ?POFILE]), ++ filelib:ensure_dir(Fname), ++ {ok,Fd} = file:open(Fname, [write]), ++ put(fd,Fd), + + gettext_compile:write_header(), + io:format("Writing entries~n"), diff --git a/erlang-erlydtl-0005-No-such-fun-gettext_compile-close_file-0.patch b/erlang-erlydtl-0005-No-such-fun-gettext_compile-close_file-0.patch new file mode 100644 index 0000000..da44e9f --- /dev/null +++ b/erlang-erlydtl-0005-No-such-fun-gettext_compile-close_file-0.patch @@ -0,0 +1,19 @@ +From: Peter Lemenkov +Date: Thu, 19 May 2016 19:14:55 +0300 +Subject: [PATCH] No such fun - gettext_compile:close_file/0 + +Signed-off-by: Peter Lemenkov + +diff --git a/src/i18n/po_generator.erl b/src/i18n/po_generator.erl +index 0b2da0a..68640a1 100644 +--- a/src/i18n/po_generator.erl ++++ b/src/i18n/po_generator.erl +@@ -32,7 +32,7 @@ generate_file(Lang,Items, Fuzzy) -> + write_entries(Items), + io:format("Writing fuzzy entries~n"), + write_fuzzy_entries(Fuzzy), +- gettext_compile:close_file(). ++ file:close(get(fd)). + + %% + %% Local Functions diff --git a/erlang-erlydtl-0006-Support-Erlang-OTP-20.0.patch b/erlang-erlydtl-0006-Support-Erlang-OTP-20.0.patch new file mode 100644 index 0000000..703435f --- /dev/null +++ b/erlang-erlydtl-0006-Support-Erlang-OTP-20.0.patch @@ -0,0 +1,31 @@ +From: Dmitry Klionsky +Date: Tue, 27 Jun 2017 17:41:18 +0300 +Subject: [PATCH] Support Erlang/OTP 20.0 + + +diff --git a/.travis.yml b/.travis.yml +index d1e5019..d50acb2 100644 +--- a/.travis.yml ++++ b/.travis.yml +@@ -2,6 +2,8 @@ language: erlang + sudo: false + otp_release: + # Test on all supported releases accepted by the `require_otp_vsn` in rebar.config ++ - 20.0 ++ - 19.3 + - 18.0 + - 17.4 + - 17.3 +diff --git a/rebar.config b/rebar.config +index 3ac7c11..4680515 100644 +--- a/rebar.config ++++ b/rebar.config +@@ -2,7 +2,7 @@ + + %% accept R15B02.., any R16B except R16B03 + %% also accept OTP v17, altough it may not work properly on that release yet.. +-{require_otp_vsn, "R15B0[^1]|R16B$|R16B[^0]|R16B0[^3]|R16B03-1|17|18|19"}. ++{require_otp_vsn, "R15B0[^1]|R16B$|R16B[^0]|R16B0[^3]|R16B03-1|17|18|19|20"}. + + {erl_opts, [debug_info]}. + {yrl_opts, [{includefile, "include/erlydtl_preparser.hrl"}]}. diff --git a/erlang-erlydtl-0007-compatibility-with-OTP-21.patch b/erlang-erlydtl-0007-compatibility-with-OTP-21.patch new file mode 100644 index 0000000..56f9611 --- /dev/null +++ b/erlang-erlydtl-0007-compatibility-with-OTP-21.patch @@ -0,0 +1,58 @@ +From: brigadier +Date: Fri, 17 Aug 2018 00:38:56 +0300 +Subject: [PATCH] compatibility with OTP 21 + + +diff --git a/rebar.config b/rebar.config +index 4680515..8712dfa 100644 +--- a/rebar.config ++++ b/rebar.config +@@ -2,7 +2,7 @@ + + %% accept R15B02.., any R16B except R16B03 + %% also accept OTP v17, altough it may not work properly on that release yet.. +-{require_otp_vsn, "R15B0[^1]|R16B$|R16B[^0]|R16B0[^3]|R16B03-1|17|18|19|20"}. ++{require_otp_vsn, "R15B0[^1]|R16B$|R16B[^0]|R16B0[^3]|R16B03-1|17|18|19|20|21"}. + + {erl_opts, [debug_info]}. + {yrl_opts, [{includefile, "include/erlydtl_preparser.hrl"}]}. +diff --git a/src/erlydtl_filters.erl b/src/erlydtl_filters.erl +index 3fe1be3..43eeae8 100644 +--- a/src/erlydtl_filters.erl ++++ b/src/erlydtl_filters.erl +@@ -355,10 +355,10 @@ floatformat(_, _) -> "". + floatformat_io(Number, []) -> + floatformat_io(Number, -1); + floatformat_io(Number, 0) -> +- hd(io_lib:format("~B", [erlang:round(Number)])); ++ lists:flatten(io_lib:format("~B", [erlang:round(Number)])); + floatformat_io(Number, Precision) when Precision > 0 -> +- hd(io_lib:format("~.*f",[Precision, Number])); +-floatformat_io(Number, Precision) when Precision < 0 -> ++ lists:flatten(io_lib:format("~.*f",[Precision, Number])); ++floatformat_io(Number, Precision) when Precision < 0 -> + Round = erlang:round(Number), + RoundPrecision = round(Number, -Precision), + if RoundPrecision == Round -> +@@ -590,11 +590,12 @@ stringformat(Input, Conversion) when is_binary(Conversion) -> + stringformat(Input, unicode:characters_to_list(Conversion)); + stringformat(Input, Conversion) -> + ParsedConversion = re:replace(Conversion, "([\-#\+ ]?)([0-9\*]+)?(\.?)([0-9]?)([diouxXeEfFgGcrs])", "\\1 ,\\2 ,\\3 ,\\4 ,\\5 ", [{return,list}]), ++ + ?debugFmt("ParsedConversion: ~p~n", [ParsedConversion]), + ParsedConversion1 = lists:map(fun(X) -> string:strip(X) end, string:tokens(ParsedConversion, ",")), + [ConversionFlag, MinFieldWidth, Precision, PrecisionLength, ConversionType] = ParsedConversion1, + ?debugFmt("ConversionFlag, MinFieldWidth, Precision, PrecisionLength, ConversionType: ~p, ~p, ~p, ~p, ~p ~n", [ConversionFlag, cast_to_integer(MinFieldWidth), Precision, cast_to_integer(PrecisionLength), ConversionType]), +- [String] = stringformat_io(Input, Conversion, ConversionFlag, cast_to_integer(MinFieldWidth), Precision, cast_to_integer(PrecisionLength), ConversionType), ++ String = stringformat_io(Input, Conversion, ConversionFlag, cast_to_integer(MinFieldWidth), Precision, cast_to_integer(PrecisionLength), ConversionType), + lists:flatten(String). + + %% @doc +@@ -640,6 +641,7 @@ stringformat_io(Input, Conversion, _ConversionFlag, _MinFieldWidth, + io_lib:format(Format, [cast_to_float(Input)]); + stringformat_io(Input, Conversion, _ConversionFlag, _MinFieldWidth, + [], [], "d")-> ++ + %?debugMsg("plain d"), + %Conversion = [ConversionFlag, MinFieldWidth, Precision, PrecisionLength, ConversionType], + Format = "~" ++ re:replace(Conversion, "d", "B", [{return, list}] ), diff --git a/erlang-erlydtl-0008-merl-bug-in-OTP-21-workaround.patch b/erlang-erlydtl-0008-merl-bug-in-OTP-21-workaround.patch new file mode 100644 index 0000000..2d35b18 --- /dev/null +++ b/erlang-erlydtl-0008-merl-bug-in-OTP-21-workaround.patch @@ -0,0 +1,42 @@ +From: brigadier +Date: Sat, 18 Aug 2018 18:55:19 +0300 +Subject: [PATCH] merl bug in OTP 21 workaround + + +diff --git a/src/erlydtl_beam_compiler.erl b/src/erlydtl_beam_compiler.erl +index 7ab3aa8..c7b149a 100644 +--- a/src/erlydtl_beam_compiler.erl ++++ b/src/erlydtl_beam_compiler.erl +@@ -861,8 +861,9 @@ blocktrans_ast(Args, Contents, PluralContents, TreeWalker) -> + Body -> + {ok, DjangoParseTree} = do_parse_template(Body, TreeWalkerAcc#treewalker.context), + {{BodyAst, BodyInfo}, BodyTreeWalker} = body_ast(DjangoParseTree, TreeWalkerAcc), ++ Clause = erl_syntax:clause([erl_syntax:abstract(Locale)], none, [BodyAst]), + {merge_info(BodyInfo, AstInfoAcc), BodyTreeWalker, +- [?Q("_@Locale@ -> _@BodyAst")|ClauseAcc]} ++ [Clause | ClauseAcc]} + end + end, + {MergedInfo, TreeWalker3, []}, TLocales), +@@ -975,14 +976,15 @@ compiletime_trans_ast(TFun, Text, LContext, + }=TreeWalker) -> + ClAst = lists:foldl( + fun(Locale, ClausesAcc) -> +- [?Q("_@Locale@ -> _@translated", +- [{translated, case TFun(Text, phrase_locale(Locale, LContext)) of +- default -> string_ast(Text, Context); +- Translated -> string_ast(Translated, Context) +- end}]) +- |ClausesAcc] ++ BodyAst = case TFun(Text, phrase_locale(Locale, LContext)) of ++ default -> string_ast(Text, Context); ++ Translated -> string_ast(Translated, Context) ++ end, ++ Clause = erl_syntax:clause([erl_syntax:abstract(Locale)], none, [BodyAst]), ++ [Clause | ClausesAcc] + end, + [], TLocales), ++ + {{?Q(["case _CurrentLocale of", + " _@_ClAst -> _;", + " _ -> _@string", diff --git a/erlang-erlydtl-0009-Make-sure-that-when-checking-if-a-function-is-export.patch b/erlang-erlydtl-0009-Make-sure-that-when-checking-if-a-function-is-export.patch new file mode 100644 index 0000000..859f918 --- /dev/null +++ b/erlang-erlydtl-0009-Make-sure-that-when-checking-if-a-function-is-export.patch @@ -0,0 +1,18 @@ +From: Seb Maynard +Date: Thu, 24 Jan 2019 14:47:14 +0000 +Subject: [PATCH] Make sure that when checking if a function is exported that + the module in question is loaded by the code server + + +diff --git a/src/erlydtl_runtime.erl b/src/erlydtl_runtime.erl +index fad5872..e7efcc8 100644 +--- a/src/erlydtl_runtime.erl ++++ b/src/erlydtl_runtime.erl +@@ -472,6 +472,7 @@ read_file(Module, Function, DocRoot, FileName, ReaderOptions) -> + throw({read_file, AbsName, Reason}) + end. + read_file_internal(Module, Function, FileName, ReaderOptions) -> ++ _ = code:ensure_loaded(Module), + case erlang:function_exported(Module, Function,1) of + true -> + Module:Function(FileName); diff --git a/erlang-erlydtl-0010-Support-Erlang-OTP-22.0.patch b/erlang-erlydtl-0010-Support-Erlang-OTP-22.0.patch new file mode 100644 index 0000000..f79f5ce --- /dev/null +++ b/erlang-erlydtl-0010-Support-Erlang-OTP-22.0.patch @@ -0,0 +1,19 @@ +From: Peter Lemenkov +Date: Mon, 11 Nov 2019 00:03:59 +0100 +Subject: [PATCH] Support Erlang/OTP 22.0 + +Signed-off-by: Peter Lemenkov + +diff --git a/rebar.config b/rebar.config +index 8712dfa..ea35569 100644 +--- a/rebar.config ++++ b/rebar.config +@@ -2,7 +2,7 @@ + + %% accept R15B02.., any R16B except R16B03 + %% also accept OTP v17, altough it may not work properly on that release yet.. +-{require_otp_vsn, "R15B0[^1]|R16B$|R16B[^0]|R16B0[^3]|R16B03-1|17|18|19|20|21"}. ++{require_otp_vsn, "R15B0[^1]|R16B$|R16B[^0]|R16B0[^3]|R16B03-1|17|18|19|20|21|22"}. + + {erl_opts, [debug_info]}. + {yrl_opts, [{includefile, "include/erlydtl_preparser.hrl"}]}. diff --git a/erlang-erlydtl.spec b/erlang-erlydtl.spec new file mode 100644 index 0000000..ffdbca5 --- /dev/null +++ b/erlang-erlydtl.spec @@ -0,0 +1,50 @@ +%global realname erlydtl +%global upstream erlydtl +Name: erlang-%{realname} +Version: 0.12.1 +Release: 1 +BuildArch: noarch +Summary: Erlang implementation of the Django Template Language +License: MIT +URL: https://github.com/%{upstream}/%{realname} +VCS: scm:git:https://github.com/%{upstream}/%{realname}.git +Source0: https://github.com/%{upstream}/%{realname}/archive/%{version}/%{realname}-%{version}.tar.gz +Patch1: erlang-erlydtl-0001-Verbose-testing.patch +Patch2: erlang-erlydtl-0002-No-such-function-exported-gettext_compile-write_pret.patch +Patch3: erlang-erlydtl-0003-No-such-function-exported-gettext_compile-fmt_filein.patch +Patch4: erlang-erlydtl-0004-No-such-fun-gettext_compile-open_po_file-3.patch +Patch5: erlang-erlydtl-0005-No-such-fun-gettext_compile-close_file-0.patch +Patch6: erlang-erlydtl-0006-Support-Erlang-OTP-20.0.patch +Patch7: erlang-erlydtl-0007-compatibility-with-OTP-21.patch +Patch8: erlang-erlydtl-0008-merl-bug-in-OTP-21-workaround.patch +Patch9: erlang-erlydtl-0009-Make-sure-that-when-checking-if-a-function-is-export.patch +Patch10: erlang-erlydtl-0010-Support-Erlang-OTP-22.0.patch +Provides: ErlyDTL = %{version}-%{release} +BuildRequires: erlang-rebar +%description +ErlyDTL is an Erlang implementation of the Django Template Language. The +erlydtl module compiles Django Template source code into Erlang bytecode. The +compiled template has a "render" function that takes a list of variables and +returns a fully rendered document. + +%prep +%autosetup -p1 -n %{realname}-%{version} + +%build +%{erlang_compile} + +%install +%{erlang_install} +cp -arv priv %{buildroot}/%{erlang_appdir}/ + +%check +%{erlang_test -C rebar-tests.config} + +%files +%license LICENSE +%doc CONTRIBUTING.md NEWS.md README.markdown README_I18N +%{erlang_appdir}/ + +%changelog +* Sat Aug 29 2020 wangyue - 0.12.1-1 +- package init diff --git a/erlang-erlydtl.yaml b/erlang-erlydtl.yaml new file mode 100644 index 0000000..dd74339 --- /dev/null +++ b/erlang-erlydtl.yaml @@ -0,0 +1,5 @@ +git_url: https://github.com/erlydtl/erlydtl +version_control: github +src_repo: erlydtl/erlydtl +tag_prefix: "^v" +seperator: "." diff --git a/erlydtl-0.12.1.tar.gz b/erlydtl-0.12.1.tar.gz new file mode 100644 index 0000000..5e65b45 Binary files /dev/null and b/erlydtl-0.12.1.tar.gz differ