platform — 현재 시스템 아키텍처 식별하기
platform — 현재 시스템 아키텍처 식별하기
플랫폼별로 다른 동작을 해야 하는 프로그램이라면, 지금 코드가 어떤 아키텍처 위에서 돌고 있는지 알아야 해요. Tcl에는 tcl_platform 배열이 있지만, 이게 항상 충분하진 않아요. platform 패키지는 아키텍처 식별의 표준 네이밍 규칙을 정해 주는 유틸리티 모음입니다.
본문
package require platform ?1.0.10?
platform::generic
platform::identify
platform::patterns identifier
platform 패키지는 Tcl이 실행되는 머신의 아키텍처를 식별하는 데 유용한 여러 유틸리티 명령을 제공해요.
Tcl은 현재 아키텍처를 식별하기 위해 tcl_platform 배열을 제공하지만(특히 platform과 machine 요소), 이것만으로는 충분하지 않을 때가 있어요. (Unix 머신에서) tcl_platform이 uname 명령이 돌려주는 값을 그대로 반영하는데, 그 값이 플랫폼·아키텍처마다 표준화되어 있지 않기 때문이에요. 게다가 한 플랫폼(AIX)에서는 tcl_platform(machine)이 CPU 일련번호를 담고 있어요.
그래서 개별 애플리케이션이 tcl_platform의 값(과 시스템별 유틸리티의 출력)을 직접 가공해야 하는데, 이는 개발자에게 불편할 뿐 아니라 아키텍처 식별과 네이밍 규칙에서 불일치가 생길 가능성을 만들어요.
platform 패키지는 이런 파편화를 막아 줘요. 즉, Tcl을 실행하는 아키텍처에 대한 표준 네이밍 규칙을 확립하고, 개발자가 Tcl 프로그램이 실행되는 현재 아키텍처를 더 편리하게 식별할 수 있게 해 줍니다.
명령
platform::identify
Tcl 코어가 실행 중인 플랫폼을 설명하는 식별자를 돌려줘요. 반환되는 식별자는 일반적으로 OS-CPU 형식이에요. 식별자의 OS 부분에는 커널 버전, libc 버전 등의 세부 정보가 포함될 수 있고, 이 정보에는 대시(dash)도 들어갈 수 있어요. CPU 부분에는 대시가 들어가지 않으므로, 결과에서 앞의 대시가 마지막 대시가 돼요.
platform::generic
Tcl 코어가 실행 중인 플랫폼을 설명하는 단순화된 식별자를 돌려줘요. platform::identify와 달리 커널 버전, libc 버전 같은 세부 정보는 생략해요. 반환되는 식별자는 일반적으로 OS-CPU 형식이에요.
platform::patterns identifier
platform::identify가 돌려주는 것 같은 식별자를 받아, 호환되는 아키텍처를 설명하는 식별자들의 리스트를 돌려줘요.
예제
이를 활용하면 애플리케이션을 공유 라이브러리의 여러 빌드와 함께 배포해서, 같은 패키지가 여러 버전의 운영체제에서 동작하게 만들 수 있어요. 예를 들어:
package require platform
# Assume that app script is .../theapp/bin/theapp.tcl
set binDir [file dirname [file normalize [info script]]]
set libDir [file join $binDir .. lib]
set platLibDir [file join $libDir [platform::identify]]
load [file join $platLibDir support[info sharedlibextension]]
더 알아보기
platform::shell— 실행 중인 셸과 다른 셸의 아키텍처를 식별해요