Skip to content

Instantly share code, notes, and snippets.

@growler
Last active August 27, 2020 11:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save growler/731e577307bbdfa82c8c30b683dd13e7 to your computer and use it in GitHub Desktop.
Save growler/731e577307bbdfa82c8c30b683dd13e7 to your computer and use it in GitHub Desktop.
m4_divert(-1)
m4_changecom(`!')
!
! ENV(VAR) заменяется на значение переменной среды "VAR". Если переменная
! отсутствует, то заменится на пустой вывод
! ENV(VAR:default) заменяется на значение переменной среды "VAR", или на
! текст "default". Текст не должен содержать запятых
!
m4_define(`$env', `m4_pushdef(`_n',m4_divnum)m4_divert(-1)
m4_ifdef(`$e<$1>',,
m4_define(`$e<$1>',m4_esyscmd(`/bin/echo -n $$1'))
m4_define(`$e<$1>',m4_ifelse(m4_defn(`$e<$1>'),,`$2',m4_defn(`$e<$1>'))))
m4_divert(_n)m4_popdef(`_n')')
m4_define(ENV,`m4_regexp(`$1',`\([a-zA-Z_][0-9a-zA-Z_]*\)\(:\(.*\)\)?',`m4_indir(`$env',`\1',`\3')m4_defn(`$e<\1>')')')
!
m4_define(`$branch',``m4_divert(-1)
m4_pushdef(`ORELSE',`m4_divert('$3`)')
m4_pushdef(`ENDIF',`m4_popdef(`ORELSE',`ENDIF')m4_divert('$1`)m4_undivert('$2`)m4_undivert('$3`)')
m4_divert('$2`)'')
!
! IFEQ(v1,v2) block1 ENDIF
! IFEQ(v1,v2) block1 ORELSE block2 ENDIF
! выводит содержимое block1, если значение v1 равно v2 (IFNEQ наоборот)
!
m4_define(`IFEQ',`m4_pushdef(`_prev',m4_divnum)m4_divert(-1)
m4_pushdef(`_next',m4_ifelse(_prev,-1,-1,m4_incr(_prev)))
m4_ifelse($1,$2,m4_indir(`$branch',_prev,_next,-1),
m4_indir(`$branch',_prev,-1,_next))m4_popdef(`_prev',`_next')')
m4_define(`IFNEQ',`m4_pushdef(`_prev',m4_divnum)m4_divert(-1)
m4_pushdef(`_next',m4_ifelse(_prev,-1,-1,m4_incr(_prev)))
m4_ifelse($1,$2,m4_indir(`$branch',_prev,-1,_next),
m4_indir(`$branch',_prev,_next,-1))m4_popdef(`_prev',`_next')')
!
! IFDEF(VAR) block1 ENDIF
! IFDEF(VAR) block1 ORELSE block2 ENDIF
! выводит содержимое block1, если установлена переменная среды VAR,
! в противном случае, если используется форма с ORELSE, выводится
! block2 (IFNDEF наоборот)
!
m4_define(`IFDEF',`IFNEQ(ENV($1),)')
m4_define(`IFNDEF',`IFEQ(ENV($1),)')
!
m4_divert(0)m4_dnl
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment