Files
mars-dosutils/CMakeLists.txt
Mario Fetka 456349088e Split DOS utility install between legacy and new binaries
Keep the previous DOS utility binary as netold.exe and use it as the
default source for legacy command names.  Install the new net.exe only for
tools that are not available in the legacy binary, currently SLIST, FLAG
and FLAGDIR.

Add CMake selection logic so maintainers can opt into installing the new
binary for all command names with MARS_NWE_INSTALL_NEW_DOSUTILS, while the
default install remains conservative for older NETX/DOSX-style setups.

Update the staged net.exe to the current Client32-enabled build and add
netold.exe as the preserved legacy binary.
2026-05-24 02:34:17 +02:00

197 lines
6.1 KiB
CMake

# DOS utilities for mars-nwe.
#
# Default install mode uses a split:
# - legacy command names are installed from netold.exe
# - new command names that netold.exe does not contain are installed from net.exe
#
# Maintainer mode can rebuild the new net.exe with Open Watcom. The freshly
# built binary is only installed when MARS_NWE_INSTALL_NEW_DOSUTILS is ON, or
# for the new-only command names in the default split install.
set(MARS_DOSUTILS_LEGACY_NET_EXE
"${CMAKE_CURRENT_SOURCE_DIR}/netold.exe"
CACHE FILEPATH "Legacy/pre-Client32 DOS net.exe used by default for legacy command names"
)
set(MARS_DOSUTILS_NEW_NET_EXE
"${CMAKE_CURRENT_SOURCE_DIR}/net.exe"
CACHE FILEPATH "New/experimental DOS net.exe used for new-only tools or when MARS_NWE_INSTALL_NEW_DOSUTILS is ON"
)
set(MARS_DOSUTILS_LEGACY_TOOLS
net
login
profile
spawn
passwd
path
pathins
pathdel
map
mapdel
logout
capture
endcap
)
# Tools not present in netold.exe. These are installed from the new binary
# even in the default split mode.
set(MARS_DOSUTILS_NEW_ONLY_TOOLS
slist
flag
flagdir
)
if(MARS_NWE_BUILD_DOSUTILS)
find_package(OpenWatcom REQUIRED)
set(DOSUTILS_C_SOURCES
net.c
tools.c
netcall.c
ncpcall.c
login.c
map.c
slist.c
flag.c
flagdir.c
c32ncp.c
nwcrypt.c
nwdebug.c
nwtests.c
capture.c
)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/kern.obj"
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
"${OPENWATCOM_WASM}"
-q
-zq
-fo="${CMAKE_CURRENT_BINARY_DIR}/kern.obj"
"${CMAKE_CURRENT_SOURCE_DIR}/kern_wasm.asm"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/kern_wasm.asm"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
VERBATIM
)
set(DOSUTILS_OBJECTS)
foreach(src IN LISTS DOSUTILS_C_SOURCES)
get_filename_component(obj_name "${src}" NAME_WE)
set(obj "${CMAKE_CURRENT_BINARY_DIR}/${obj_name}.obj")
list(APPEND DOSUTILS_OBJECTS "${obj}")
add_custom_command(
OUTPUT "${obj}"
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
"${OPENWATCOM_WCL}"
-q
-zq
-bt=dos
-ml
-0
-c
-fo="${obj}"
"${CMAKE_CURRENT_SOURCE_DIR}/${src}"
DEPENDS
"${CMAKE_CURRENT_SOURCE_DIR}/${src}"
"${CMAKE_CURRENT_SOURCE_DIR}/net.h"
"${CMAKE_CURRENT_SOURCE_DIR}/kern.h"
"${CMAKE_CURRENT_SOURCE_DIR}/c32ncp.h"
"${CMAKE_CURRENT_SOURCE_DIR}/nwcrypt.h"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
VERBATIM
)
endforeach()
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/net.exe"
COMMAND "${CMAKE_COMMAND}" -E env ${OPENWATCOM_ENV}
"${OPENWATCOM_WCL}"
-q
-zq
-bt=dos
-ml
-0
-k32768
-fe="${CMAKE_CURRENT_BINARY_DIR}/net.exe"
${DOSUTILS_OBJECTS}
"${CMAKE_CURRENT_BINARY_DIR}/kern.obj"
DEPENDS
${DOSUTILS_OBJECTS}
"${CMAKE_CURRENT_BINARY_DIR}/kern.obj"
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
VERBATIM
)
add_custom_target(dosutils_net ALL
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/net.exe"
)
set(MARS_DOSUTILS_BUILT_NET_EXE "${CMAKE_CURRENT_BINARY_DIR}/net.exe")
else()
set(MARS_DOSUTILS_BUILT_NET_EXE "")
endif()
if(MARS_NWE_BUILD_DOSUTILS)
set(MARS_DOSUTILS_SELECTED_NEW_EXE "${MARS_DOSUTILS_BUILT_NET_EXE}")
else()
set(MARS_DOSUTILS_SELECTED_NEW_EXE "${MARS_DOSUTILS_NEW_NET_EXE}")
endif()
if(MARS_NWE_INSTALL_NEW_DOSUTILS)
set(MARS_DOSUTILS_SELECTED_LEGACY_EXE "${MARS_DOSUTILS_SELECTED_NEW_EXE}")
else()
set(MARS_DOSUTILS_SELECTED_LEGACY_EXE "${MARS_DOSUTILS_LEGACY_NET_EXE}")
endif()
if(MARS_NWE_INSTALL_DOSUTILS)
if(NOT EXISTS "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}")
message(FATAL_ERROR
"Selected legacy/default DOS utility missing: ${MARS_DOSUTILS_SELECTED_LEGACY_EXE}. "
"Commit dosutils/netold.exe, enable MARS_NWE_INSTALL_NEW_DOSUTILS, "
"or enable MARS_NWE_BUILD_DOSUTILS."
)
endif()
if(NOT EXISTS "${MARS_DOSUTILS_SELECTED_NEW_EXE}")
message(FATAL_ERROR
"Selected new DOS utility missing: ${MARS_DOSUTILS_SELECTED_NEW_EXE}. "
"Commit dosutils/net.exe or enable MARS_NWE_BUILD_DOSUTILS."
)
endif()
message(STATUS "DOS legacy/default utility binary: ${MARS_DOSUTILS_SELECTED_LEGACY_EXE}")
message(STATUS "DOS new-only utility binary: ${MARS_DOSUTILS_SELECTED_NEW_EXE}")
foreach(tool IN LISTS MARS_DOSUTILS_LEGACY_TOOLS)
if(tool STREQUAL "net")
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public"
RENAME net.exe)
else()
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public"
RENAME "${tool}.exe")
endif()
endforeach()
foreach(tool IN LISTS MARS_DOSUTILS_NEW_ONLY_TOOLS)
install(FILES "${MARS_DOSUTILS_SELECTED_NEW_EXE}"
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/public"
RENAME "${tool}.exe")
endforeach()
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
RENAME login.exe)
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
RENAME map.exe)
install(FILES "${MARS_DOSUTILS_SELECTED_LEGACY_EXE}"
DESTINATION "${MARS_NWE_INSTALL_FULL_FILEDIR}/SYS/login"
RENAME slist.exe)
endif()