cmake_minimum_required(VERSION 3.19.0) project(brandy LANGUAGES C) add_compile_options(-Wall) set(SRCDIR src) set(SRC ${SRCDIR}/variables.c ${SRCDIR}/tokens.c ${SRCDIR}/strings.c ${SRCDIR}/statement.c ${SRCDIR}/stack.c ${SRCDIR}/miscprocs.c ${SRCDIR}/mainstate.c ${SRCDIR}/lvalue.c ${SRCDIR}/keyboard.c ${SRCDIR}/iostate.c ${SRCDIR}/heap.c ${SRCDIR}/functions.c ${SRCDIR}/fileio.c ${SRCDIR}/evaluate.c ${SRCDIR}/errors.c ${SRCDIR}/mos.c ${SRCDIR}/editor.c ${SRCDIR}/convert.c ${SRCDIR}/commands.c ${SRCDIR}/brandy.c ${SRCDIR}/assign.c ${SRCDIR}/net.c ${SRCDIR}/mos_sys.c) add_executable(sbrandy ${SRC} ${SRCDIR}/simpletext.c) add_executable(tbrandy ${SRC} ${SRCDIR}/textonly.c) target_link_libraries(sbrandy m dl pthread) target_link_libraries(tbrandy m dl pthread) install(TARGETS sbrandy DESTINATION bin) install(TARGETS tbrandy DESTINATION bin) find_package(SDL 1.2) # We want to request a version before 2, but cmake does not support version # ranges for SDL. IF (SDL_FOUND) add_executable(brandy ${SRC} ${SRCDIR}/graphsdl.c ${SRCDIR}/soundsdl.c) target_link_libraries(brandy m dl pthread) target_include_directories(brandy PRIVATE ${SDL_INCLUDE_DIRS}) target_link_libraries(brandy m dl pthread ${SDL_LIBRARIES}) target_compile_definitions(brandy PRIVATE -DUSE_SDL) # libX11 may not be needed, eg., under Windows. find_package(X11) IF (X11_FOUND) target_link_libraries(brandy ${X11_LIBRARIES}) ENDIF() install(TARGETS brandy DESTINATION bin) ENDIF() IF (WIN32) add_compile_definitions(-DCYGWINBUILD) add_compile_definitions(-D__USE_MINGW_ANSI_STDIO) target_link_libraries(sbrandy ws2_32 psapi) target_link_libraries(tbrandy ws2_32 psapi) IF (SDL_FOUND) target_link_libraries(brandy ws2_32 psapi) ENDIF() ENDIF() IF (LINUX) target_link_libraries(sbrandy rt) target_link_libraries(tbrandy rt) IF (SDL_FOUND) target_link_libraries(brandy rt) ENDIF() ENDIF() # Inside "build-push-action" we have no .git. Rather than fighting, we put up # with it. IF (EXISTS .git) execute_process( COMMAND git rev-parse --short HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( COMMAND git rev-parse --abbrev-ref HEAD WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_BRANCH OUTPUT_STRIP_TRAILING_WHITESPACE ) execute_process( COMMAND git log -1 --format=%cd WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_DATE OUTPUT_STRIP_TRAILING_WHITESPACE ) add_compile_definitions(-DBRANDY_GITCOMMIT=\"${GIT_COMMIT}\" -DBRANDY_GITBRANCH=\"${GIT_BRANCH}\" -DBRANDY_GITDATE=\"${GIT_DATE}\") ENDIF() # Do not throw an error on missing features. add_compile_definitions(DEFAULT_IGNORE) enable_testing() # Shebang does not work on msys2, running "prove" directly does not work. IF (WIN32) find_program(PERL NAMES perl) find_program(PROVE NAMES prove) add_test(NAME Regressions COMMAND ${PERL} ${PROVE} --exec ${CMAKE_BINARY_DIR}/sbrandy -r t/) ELSE() add_test(NAME Regressions COMMAND prove --exec ${CMAKE_BINARY_DIR}/sbrandy -r t/) find_program(VALGRIND NAMES valgrind) IF (VALGRIND) add_test(NAME RegressionsValgrind COMMAND prove --exec "${VALGRIND} ${CMAKE_BINARY_DIR}/sbrandy" -r t/) ENDIF() ENDIF()