Files
mars-nwe/cmake/modules/FindOpenWatcom.cmake
2026-05-22 11:53:26 +02:00

87 lines
2.2 KiB
CMake

# FindOpenWatcom.cmake
#
# Locate an Open Watcom v2 toolchain usable for building the 16-bit DOS
# mars-nwe DOS utilities on a Linux host.
#
# Result variables:
# OpenWatcom_FOUND
# OPENWATCOM_WCL
# OPENWATCOM_WCC
# OPENWATCOM_WASM
# OPENWATCOM_WLINK
# OPENWATCOM_BIN_DIR
# OPENWATCOM_ROOT
# OPENWATCOM_ENV
#
# This module intentionally does not enable a CMake language/toolchain. The
# DOS utilities are built via custom commands. OPENWATCOM_ENV is provided so
# wcl can find its helper programs such as wcc, wlink and include files.
set(_OPENWATCOM_HINTS)
if(DEFINED ENV{WATCOM})
list(APPEND _OPENWATCOM_HINTS "$ENV{WATCOM}")
endif()
list(APPEND _OPENWATCOM_HINTS
/opt/watcom
/usr/local/watcom
/usr/local/open-watcom-v2
/opt/open-watcom-v2
)
find_program(OPENWATCOM_WCL
NAMES wcl owcc
HINTS ${_OPENWATCOM_HINTS}
PATH_SUFFIXES binl binnt binw bin
)
find_program(OPENWATCOM_WCC
NAMES wcc
HINTS ${_OPENWATCOM_HINTS}
PATH_SUFFIXES binl binnt binw bin
)
find_program(OPENWATCOM_WASM
NAMES wasm
HINTS ${_OPENWATCOM_HINTS}
PATH_SUFFIXES binl binnt binw bin
)
find_program(OPENWATCOM_WLINK
NAMES wlink
HINTS ${_OPENWATCOM_HINTS}
PATH_SUFFIXES binl binnt binw bin
)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OpenWatcom
REQUIRED_VARS
OPENWATCOM_WCL
OPENWATCOM_WCC
OPENWATCOM_WASM
OPENWATCOM_WLINK
)
if(OpenWatcom_FOUND)
get_filename_component(OPENWATCOM_BIN_DIR "${OPENWATCOM_WCL}" DIRECTORY)
get_filename_component(OPENWATCOM_ROOT "${OPENWATCOM_BIN_DIR}" DIRECTORY)
# wcl starts helper tools such as wcc/wlink by name. Therefore finding the
# absolute wcl path is not enough; the Watcom bin directory must be in PATH
# at build time. WATCOM and INCLUDE are also expected by many installations.
set(OPENWATCOM_ENV
"WATCOM=${OPENWATCOM_ROOT}"
"INCLUDE=${OPENWATCOM_ROOT}/h:${OPENWATCOM_ROOT}/h/nt:${OPENWATCOM_ROOT}/h/os2"
"EDPATH=${OPENWATCOM_ROOT}/eddat"
"PATH=${OPENWATCOM_BIN_DIR}:$ENV{PATH}"
)
endif()
mark_as_advanced(
OPENWATCOM_WCL
OPENWATCOM_WCC
OPENWATCOM_WASM
OPENWATCOM_WLINK
)