์ ๋ํ ํ ๋ก ์ฐธ์กฐ
https://groups.google.com/d/topic/ninja-build/ZGZ2Ewxsxaw/discussion
๊ฑฐ๊ธฐ์ ์ฐ๊ฒฐ๋ ์ด์ ์ค๋ ๋.
๊ทธ ํ ๋ก ์ ์ฝ์ด๋ณด๋ฉด CreateProcess
lpCommandLine
๋ฅผ ์ฌ์ฉํ ๋ ์คํํ ์คํ ํ์ผ์ ์ฐพ๊ธฐ ์ํด PATH
์ค์ ์ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ํ๊ฒฝ ๋ณ์๊ฐ Ninja์์ ์ง์๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. lpApplicationName
? ๋ฌธ์ ๋ execvpe
๋ฐ execle
์ ๋์ผํ ์ ํ์ด ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ์ดํดํ์ง ๋ชปํฉ๋๋ค.
๋ชจ๋ ํ๋ซํผ์์ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ ํ๊ฒฝ์ ์ค์ ํ๋ ๊ฒ์ ์ ๋ง ๊ฐ๋จํ๋ฏ๋ก ์ฌ๊ธฐ์ ์ฐจ๋จ๊ธฐ๊ฐ ๋ฌด์์ธ์ง ์๊ณ ์ถ์ต๋๋ค. ๊ฑด๋ฐฐ!
FWIW, https://github.com/mesonbuild/meson/issues/266 , https://github.com/mesonbuild/meson/issues/384 ๋ฑ Meson์์ ์ด ๊ธฐ๋ฅ์ ์ ํ์ฉํ๊ฒ ์ต๋๋ค.
ํ๋ก์ ํธ๊ฐ ์ด๊ฒ์ ๊ตฌํํ๋ PR์ ๊ด์ฌ์ด ์์ต๋๊น? https://github.com/mesonbuild/meson/ ์ ๋ํ ์ฑ๊ฐ์ ์ฐจ๋จ๊ธฐ ๋ค์ด์คํธ๋ฆผ์ ๋๋ค. ํ๊ฒฝ ๋ณ์ ์ค์ ์ด ํ์ํ ๋ชจ๋ ๋ช ๋ น์ ๋ํด ๋ํผ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Makefile๊ณผ Visual Studio ํ๋ก์ ํธ ํ์ผ๋ ์ด๋ฅผ ์ง์ํ๋ฏ๋ก Ninja๋ ์ด๋ฅผ ์ง์ํ์ง ์๋๋ค๋ ์ ์ด ๋๋๋ฌ์ง๋๋ค. :)
Ninja์์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๋ฉด ๊ธฐ๊บผ์ด ๊ตฌํํ๊ฒ ์ต๋๋ค.
POSIXy ํ๋ซํผ์์๋ ๋ค์์ ์ํํ ์ ์์ต๋๋ค.
rule foo
command = ENV1=env1 ENV2=env2 my_command
๋๋
rule foo
command = $env my_command
foo out: in
env = ENV1=env1 ENV2=env2
๊ทธ๊ฒ์ผ๋ก ์ถฉ๋ถํ์ง ์์ต๋๊น? ๋๋ถ๋ถ์ ๋ช ๋ น์ env vars๊ฐ ํ์ํ์ง ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ์ ์ ํญ๋ชฉ์ ์ง์ํ๋ฏ๋ก ๋์๊ฐ ๋จ์ํด์ง๋๋ค.
์, ๊ทธ ๋ถ๋ถ ์ ๋ฌธ์ํ ๋์ด ์์ง๋ง Meson์ ํ๋ซํผ ๊ฐ ๋น๋ ์์คํ (์ง์๋๋ ๋ชจ๋ ํ๋ซํผ์์ ๊ธฐ๋ฅ ํจ๋ฆฌํฐ๋ฅผ ๊ฐ๊ธฐ ์ํ ๊ฒ)์ด๋ฉฐ ํ์ฌ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํด์ผ ํ๊ฑฐ๋ ํน์ ๋ฌธ์๊ฐ ํฌํจ๋ ์ธ์๊ฐ ํ์ํ ๋๋ง๋ค Python ์คํฌ๋ฆฝํธ ๋ํผ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. (ํนํ ๊ฐํ).
์ฒ์์๋ env vars๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ํ์ ์ฌ์ฉ ์ฌ๋ก๋ผ๊ณ ์๊ฐํ๊ณ ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋ ๋ค๋ก ๋ฏธ๋ฃจ์์ง๋ง ๋๋๊ฒ๋ ๋ง์ ์ฌ๋๋ค์ด ํ์๋ก ํ์ต๋๋ค. ์๋ฅผ ๋ค์ด, GNOME์ gobject-introspection์ ๋๊ตฌ๋ฅผ ํธ์ถํ๋ ๋์ CC
/ CXX
/etc๋ฅผ ์ค์ ํ๋๋ก ์๊ตฌํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์๋ ๊ฐ์ง ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ ์๋ชป๋ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. Meson์ "์ฌ์ฉ์ ์ง์ ๋์"์ ์์์ ๋ช
๋ น์ ์คํํ ์ ์์ผ๋ฉฐ, ์ฌ๋๋ค์ ์ข
์ข
๋์์ ๋ณ๊ฒฝํ ์ ์๋ ์ผ๋ถ ๋๊ตฌ๋ฅผ ์คํํ๋ ๋์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ฌป๋ ๋ํ๋ฉ๋๋ค.
Python ์คํฌ๋ฆฝํธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ด์ฐฎ์ง๋ง ๊ฐ ๋ช ๋ น์ ๋ํด Python ์ธํฐํ๋ฆฌํฐ๋ฅผ ํธ์ถํ๋ฉด ๋๋๋ก ์์ ์๋๊ฐ ๋๋ ค์ง๋๋ค.
gobject-introspection์ด ๋์ ๋ช ๋ น์ค ์ธ์๋ฅผ ํตํด ์ด๋ฅผ ์๋ฝํ ์ ์์ต๋๊น? (๋ด ๊ฒฝํ์ ํ๋๊ทธ ๋์ ํ๊ฒฝ ๋ณ์์ ์์กดํ๋ ๋น๋๋ ๊ฐ๋ฐ์๊ฐ ๋ก์ปฌ ํ๊ฒฝ ๋ฑ์ ๋ง์น๋ ๋ฐ ํจ์ฌ ๋ ์ทจ์ฝํ ๊ฒฝํฅ์ด ์์ต๋๋ค.)
MSVC์ cl.exe๋ ํฌํจ ๋ฐ ๊ธฐํ ํญ๋ชฉ์ ์ฐพ๊ธฐ ์ํด ๋ช ๊ฐ์ง ํ๊ฒฝ ๋ณ์๊ฐ ํ์ํฉ๋๋ค. ๊ทธ ๋์์๊ฒ๋ ํ์ผ์์ ํ๊ฒฝ์ ๋ก๋ํ ์ ์๋ -e
ninja -t msvc
๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ meson์ ์ด๋ก ์ ์ผ๋ก Windows์์ ๊ทธ๊ฒ์ ์ฌ์ฉํ ์ ์๊ณ ๋ค๋ฅธ ๊ณณ์์๋ posix๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋๋ฌธ "์ ์ฐ์ฑ์ด ํ์"ํ ๊ฒฝ์ฐ์ ํ์ด์ฌ ๋ํผ๋ฅผ ์ฌ์ฉํ๊ณ env์ ์์กดํ์ง ์๊ณ ์ผ๋ฐ์ ์ธ ๋ช ๋ น์ ์๋ํ๊ฒ ํ๋ ๊ฒ์ด ๋์๊ฒ ๊ฐ์ฅ ์ข์ ์ ๊ทผ ๋ฐฉ์์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ๋ฌธ์ ์ ๋ด์ฐฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฐฝ์์ FIPS ์คํ ํ์ผ์ ๋น๋ํ๋ ค๊ณ ํ๋๋ฐ ๋ค์ ์ง์นจ์ ๋ฐ๋ผ์ผ ํฉ๋๋ค.
https://www.openssl.org/docs/fips/UserGuide-2.0.pdf , ์น์ 5.3.2:
For the Windowsยฎ
environment a perl script fipslink.pl is provided which performs a
function similar to fipsld for Unixยฎ
/Linuxยฎ
. Several environment variables need to be set:
FIPS_LINK is the linker name, normally โlinkโ
FIPS_CC is the C compiler name, normally โclโ
FIPS_CC_ARGS is a string of C compiler arguments for compiling fips_premain.c
PREMAIN_DSO_EXE should be set to the path to fips_premain_dso.exe if a DLL is
being linked (can be omitted otherwise)
PREMAIN_SHA1_EXE is the full path to fips_standalone_sha1.exe
FIPS_TARGET is the path of the target executable or DLL file
๋ด ํ๊ฒฝ์ FIPS_CC๊ฐ ์ ์๋์ด ์์ง๋ง ๋์๊ฐ env๋ฅผ ์์ ํ๋ก์ธ์ค( perl fipslink.pl ...
)์ ์ ๋ฌํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. -๊ฐ ๋๋ฅผ ์ํด ์๋ํ๋์ง ํ์ธํ ๊ฒ์
๋๋ค.
์ด์ ๋ํ ๋ ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก๋ ํ๋ก์ ํธ์ ๋น๋๋ ์คํ ํ์ผ์ ์คํํ๊ธฐ ์ ์ LD_LIBRARY_PATH
๋ฅผ ์ค์ ํ๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ์ฌ์ฉ์ ์ ์ ์ ๋์ฌ์ ์ด๋ฏธ ์กด์ฌํ๋ ๋ฒ์ ์ด ์ฌ์ฉ๋์ง ์๋๋ก ํ๊ธฐ ์ํด ํ๋ก์ ํธ์ ๋น๋๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๊ฒฐ๋ ์คํ ํ์ผ์ ์ข
์ข
ํ์ํฉ๋๋ค( -Wl,-rpath
DT_RUNPATH
๋ฅผ ์ค์ ํ๋ ๋ฐฐํฌํ ์์๋ ์๋ํ์ง ์์ต๋๋ค . Debian ๋ฐ Ubuntu์ ๊ฐ์ DT_RPATH
์ค). Autotools(libtool)๋ ์ด๋ฅผ ์ํด ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. Python ์ธํฐํ๋ฆฌํฐ๋ฅผ ์์ฑํ๊ฑฐ๋ ์ด๋ฌํ ๊ฒฝ์ฐ์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด์ผ ํ๋ค๋ฉด ๋น๋ ์๋๊ฐ ํฌ๊ฒ ๋๋ ค์ง ๊ฒ์
๋๋ค.
๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ํฌ์ธํธ๋ก์ cmake๋ ํ๊ฒฝ์ ์ค์ ํ ๋ค์ ํ๋ก์ธ์ค๋ฅผ ํธ์ถ ํ๋ C ๋ํผ๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ด ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๋๋ฌด ๋ง์ด ์ ํ์ต๋๋ค. ๊ทธ๋ค์ ๊ทธ๋ค์ make ๋ฐฑ์๋๋ฅผ ์ํด ์ด์จ๋ ๊ทธ๊ฒ์ ํ์๋ก ํ์ง๋ง ๋์ ์ ์ฉ ๋น๋ ์์คํ ์ ์ด ๊ธฐ๋ฅ์ผ๋ก๋ถํฐ ํฐ ์ด์ ์ ์ป์ ๊ฒ์ ๋๋ค.
์ด ๋ฒ๊ทธ๊ฐ ๋ ์ด์ ๋ฌด์์ ๋ ผ์ํ๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์๋ ๋ฌธ์ ์ ๋ฐ์ดํธ์ ๋ํ ๊ฒ ๊ฐ์๊ธฐ ๋๋ฌธ์ ๋๋ค. :)
LD_LIBRARY_PATH
์ ๊ฒฝ์ฐ ๋ช
๋ น์ค์ ํตํด ์ค์ ํ๋ฉด ์์์ ์ธ๊ธํ Nico์ฒ๋ผ ์ด๋ฏธ ์๋ํฉ๋๋ค. ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ ํ์ํ์ง ์์ต๋๋ค. ์ด์จ๋ ๋ช
๋ น์ค์ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ค๋ฉด ์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. (Linux์ ํ์ ํ๋ก์ธ์ค๋ ์ด์จ๋ ๋๋ฌด ์ ๋ ดํฉ๋๋ค. ๋๋ฌด ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ /bin/sh -c "echo hello"
๋ ์ธก์ ํ ์ ์์ต๋๋ค.)
Windows์๋ ninja -t msvc
๊ฐ ์์ต๋๋ค. ๊ทธ๊ฒ์ ์ฌ์ฉํ์ฌ ์ค๊ฐ์ ๊ธฐ๋ฅ์ ์์ฑํด ๋ณด๊ณ ๊ฒฝํ์ด ์์ผ๋ฉด ๊ฐ์ ๋ฐฉ๋ฒ์ ์์๋ผ ์ ์์ต๋๋ค.
Kconfiglib์๋ ์์ค ์ธ๋ถ ๋น๋์ ๋ํ ์๊ฒฉํ $srctree
์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค. ๋ช ๊ฐ์ง ๋ค๋ฅธ ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
https://github.com/ulfalizer/Kconfiglib/blob/424d0d38e7/kconfiglib.py#L108
ํ์ฌ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํด์ผ ํ ๋๋ง๋ค Python ์คํฌ๋ฆฝํธ ๋ํผ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ฐ์ : https://github.com/ulfalizer/Kconfiglib/tree/424d0d38e7be15c5#overview
์ ์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ kconfiglib.py์ ํฌํจ๋์ด ์์ต๋๋ค. ๋ฒ๋ค ์คํฌ๋ฆฝํธ๋ ๊ทธ ์์ ๊ตฌํ๋ฉ๋๋ค. ํ์ํ ๊ฒฝ์ฐ ์์ ์ ์คํฌ๋ฆฝํธ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ๋น๊ต์ ์ฌ์์ผ ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ๋ก์ ํธ๊ฐ ์ด๊ฒ์ ๊ตฌํํ๋ PR์ ๊ด์ฌ์ด ์์ต๋๊น? https://github.com/mesonbuild/meson/ ์ ๋ํ ์ฑ๊ฐ์ ์ฐจ๋จ๊ธฐ ๋ค์ด์คํธ๋ฆผ์ ๋๋ค. ํ๊ฒฝ ๋ณ์ ์ค์ ์ด ํ์ํ ๋ชจ๋ ๋ช ๋ น์ ๋ํด ๋ํผ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
Makefile๊ณผ Visual Studio ํ๋ก์ ํธ ํ์ผ๋ ์ด๋ฅผ ์ง์ํ๋ฏ๋ก Ninja๋ ์ด๋ฅผ ์ง์ํ์ง ์๋๋ค๋ ์ ์ด ๋๋๋ฌ์ง๋๋ค. :)
Ninja์์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๋ฐ ๊ด์ฌ์ด ์๋ค๋ฉด ๊ธฐ๊บผ์ด ๊ตฌํํ๊ฒ ์ต๋๋ค.