diff --git a/cmake/modules/FindOpenWatcom.cmake b/cmake/modules/FindOpenWatcom.cmake new file mode 100644 index 0000000..9718a1b --- /dev/null +++ b/cmake/modules/FindOpenWatcom.cmake @@ -0,0 +1,86 @@ +# 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 +)