Sync Mk with ports
[dports.git] / Mk / Uses / elixir.mk
1 # $FreeBSD$
2 #
3 # Handle Elixir related ports
4 #
5 # Feature:      elixir
6 # Usage:        USES=elixir
7 # Valid ARGS:   does not require args
8 #
9 # Additional variables:
10 #
11 # ELIXIR_APP_NAME       - Elixir app name as installed in Elixir's lib directory
12 # ELIXIR_LIB_ROOT       - Elixir default library path
13 # ELIXIR_APP_ROOT       - Root directory for this Elixir app
14 # ELIXIR_HIDDEN         - Applications to be hidden from the code path; usually ${PORTNAME}
15 # ELIXIR_LOCALE         - An UTF-8 locale to be used by Elixir during builds (any UTF-8 locale is good)
16 # MIX_CMD               - The "mix" command
17 # MIX_COMPILE           - The "mix" command used to compile an Elixir app
18 # MIX_REWRITE           - Automatically replace Mix dependencies with code paths
19 # MIX_BUILD_DEPS        - List of BUILD_DEPENDS in category/portname format
20 #                       (commonly referenced to as "deps" in Erlang and Elixir)
21 # MIX_RUN_DEPS          - List of RUN_DEPENDS in category/portname format
22 # MIX_DOC_DIRS          - Extra doc directories to be installed in DOCSDIR
23 # MIX_DOC_FILES         - Extra doc files to be installed in DOCSDIR (usually README.md)
24 # MIX_ENV               - Environment for the Mix build (same format as MAKE_ENV)
25 # MIX_ENV_NAME          - Name of the Mix build environment, usually "prod"
26 # MIX_BUILD_NAME        - Name of the build output in _build/, usually ${MIX_ENV_NAME}
27 # MIX_TARGET            - Name of the Mix target, usually "compile"
28 # MIX_EXTRA_APPS        - List of sub-applications to be built, if any
29 # MIX_EXTRA_DIRS        - List of extra directories to be installed in ELIXIR_APP_ROOT
30 # MIX_EXTRA_FILES       - List of extra files to be installed in ELIXIR_APP_ROOT
31 #
32 # MAINTAINER: olgeni@FreeBSD.org
33
34 .if !defined(_INCLUDE_USES_ELIXIR_MK)
35 _INCLUDE_USES_ELIXIR_MK=yes
36
37 .if !empty(elixir_ARGS)
38 IGNORE= USES=elixir does not require args
39 .endif
40
41 ELIXIR_APP_NAME?=       ${PORTNAME}
42 ELIXIR_LIB_ROOT?=       ${LOCALBASE}/lib/elixir/lib
43 ELIXIR_APP_ROOT?=       ${PREFIX}/lib/elixir/lib/${ELIXIR_APP_NAME}
44 ELIXIR_HIDDEN?=         "^${ELIXIR_APP_NAME}$$"
45 ELIXIR_LOCALE?=         en_US.UTF-8
46 MIX_CMD?=               ${LOCALBASE}/bin/mix
47 MIX_COMPILE?=           ${SETENV} ${MIX_ENV} LANG=${ELIXIR_LOCALE} MIX_ENV=${MIX_ENV_NAME} ELIXIR_HIDDEN=${ELIXIR_HIDDEN} ${MIX_CMD} ${MIX_TARGET}
48 MIX_REWRITE?=
49 MIX_BUILD_DEPS?=
50 MIX_RUN_DEPS?=
51 MIX_DOC_DIRS?=
52 MIX_DOC_FILES?=         README.md
53 MIX_ENV?=
54 MIX_ENV_NAME?=          prod
55 MIX_BUILD_NAME?=        prod
56 MIX_TARGET?=            compile
57 MIX_EXTRA_APPS?=
58 MIX_EXTRA_DIRS?=
59 MIX_EXTRA_FILES?=
60
61 BUILD_DEPENDS+= elixir:lang/elixir
62 RUN_DEPENDS+=   elixir:lang/elixir
63
64 .for depend in ${MIX_BUILD_DEPS}
65 BUILD_DEPENDS+= ${depend:T}>=0:${depend}
66 .endfor
67
68 .for depend in ${MIX_RUN_DEPS}
69 RUN_DEPENDS+=   ${depend:T}>=0:${depend}
70 .endfor
71
72 .if !target(do-build)
73 do-build:
74 .if ${MIX_REWRITE} != ""
75         @${REINPLACE_CMD} -i '' -E -e "s@{.*(only|optional): .*},?@@" ${WRKSRC}/mix.exs
76 .for depend in ${MIX_BUILD_DEPS}
77         @if [ $$(echo ${depend:T} | sed -e "s/erlang-//") != ${depend:T} ]; then \
78                 ${REINPLACE_CMD} -i '' -E -e "s@{ *:(${depend:T:S/erlang-//}), *(github:|\").*} *,?@@" ${WRKSRC}/mix.exs; \
79         else \
80                 ${REINPLACE_CMD} -i '' -E -e "s@{ *:(${depend:T:S/elixir-//}), *(github:|\").*}@{ :\1, path: \"${ELIXIR_LIB_ROOT}/\\1\", compile: false }@" ${WRKSRC}/mix.exs; \
81         fi
82 .endfor
83 .endif
84         @${RM} -f ${WRKSRC}/mix.lock
85         @cd ${WRKSRC} && ${MIX_COMPILE}
86 .for app in ${MIX_EXTRA_APPS}
87         @${RM} -f ${WRKSRC}/${app}/mix.lock
88         @cd ${WRKSRC}/${app} && ${MIX_COMPILE}
89 .endfor
90 .endif # .if !target(do-build)
91
92 .if !target(do-install)
93 do-install:
94         @${MKDIR} ${STAGEDIR}${ELIXIR_APP_ROOT}
95         @${MKDIR} ${STAGEDIR}${ELIXIR_APP_ROOT}/lib
96         cd ${WRKSRC}/lib && ${COPYTREE_SHARE} \* ${STAGEDIR}${ELIXIR_APP_ROOT}/lib
97         @${MKDIR} ${STAGEDIR}${ELIXIR_APP_ROOT}/ebin
98         ${INSTALL_DATA} ${WRKSRC}/_build/${MIX_BUILD_NAME}/lib/${ELIXIR_APP_NAME}/ebin/* \
99                 ${STAGEDIR}${ELIXIR_APP_ROOT}/ebin
100         if [ -d ${WRKSRC}/priv ]; then \
101                 ${MKDIR} ${STAGEDIR}${ELIXIR_APP_ROOT}/priv; \
102                 cd ${WRKSRC}/priv && ${COPYTREE_SHARE} \* ${STAGEDIR}${ELIXIR_APP_ROOT}/priv; \
103         fi
104 .if ${MIX_DOC_FILES} != "" || ${MIX_DOC_DIRS} != ""
105         @${MKDIR} ${STAGEDIR}${DOCSDIR}
106 .endif
107 .for file in ${MIX_DOC_FILES}
108         ${INSTALL_DATA} ${WRKSRC}/${file} ${STAGEDIR}${DOCSDIR}
109 .endfor
110 .for dir in ${MIX_DOC_DIRS}
111         cd ${WRKSRC} && ${COPYTREE_SHARE} ${dir} ${STAGEDIR}${DOCSDIR}
112 .endfor
113 .for file in ${MIX_EXTRA_FILES}
114         ${INSTALL_DATA} ${WRKSRC}/${file} ${STAGEDIR}${ELIXIR_APP_ROOT}
115 .endfor
116 .for dir in ${MIX_EXTRA_DIRS}
117         @${MKDIR} ${STAGEDIR}${ELIXIR_APP_ROOT}/${dir}
118         cd ${WRKSRC}/${dir} && ${COPYTREE_SHARE} . ${STAGEDIR}${ELIXIR_APP_ROOT}/${dir}
119 .endfor
120 .for app in ${MIX_EXTRA_APPS}
121         ${INSTALL_DATA} ${WRKSRC}/${app}/_build/${MIX_BUILD_NAME}/lib/*/ebin/* \
122                 ${STAGEDIR}${ELIXIR_APP_ROOT}/ebin
123 .endfor
124 .endif # .if !target(do-install)
125
126 .endif #!defined(_INCLUDE_USES_ELIXIR_MK)