diff --git a/CMakeLists.txt b/CMakeLists.txt index 46239b27..37aca736 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,21 +47,21 @@ elseif(PDC_DOSVT_BUILD) # currently requires a unique toolchain file elseif(PDC_OS2_BUILD) # currently requires a unique toolchain file add_subdirectory(os2) - + else() add_subdirectory(ncurses) - + if(PDC_SDL2_BUILD) - + add_subdirectory(sdl2) - + endif() if(PDC_GL_BUILD) - + add_subdirectory(gl) - + endif() if(UNIX) @@ -69,13 +69,21 @@ else() endif() if(WIN32) - + add_subdirectory(wincon) add_subdirectory(wingui) add_subdirectory(vt) - + + endif() + + if(PDC_X11_BUILD) + + # set(PDC_UTF8 ON) + # set(PDC_WIDE ON) + add_subdirectory(x11new) + endif() - + endif() add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_SOURCE_DIR}/cmake/make_uninstall.cmake") diff --git a/cmake/build_options.cmake b/cmake/build_options.cmake index 718e0b78..e4db1b99 100644 --- a/cmake/build_options.cmake +++ b/cmake/build_options.cmake @@ -11,6 +11,7 @@ option(PDC_DOSVT_BUILD "Build VT Project" OFF) option(PDC_SDL2_BUILD "Build SDL2 Project" ON) option(PDC_SDL2_DEPS_BUILD "Build SDL2 and dependencies" ON) option(PDC_GL_BUILD "Build OpenGL Project" ON) +option(PDC_X11_BUILD "Build X11 Project" OFF) message(STATUS "PDC_BUILD_SHARED ....... ${PDC_BUILD_SHARED}") message(STATUS "PDC_UTF8 ............... ${PDC_UTF8}") @@ -24,6 +25,7 @@ message(STATUS "PDC_DOSVT_BUILD ........ ${PDC_DOSVT_BUILD}") message(STATUS "PDC_SDL2_BUILD ......... ${PDC_SDL2_BUILD}") message(STATUS "PDC_SDL2_DEPS_BUILD .... ${PDC_SDL2_DEPS_BUILD}") message(STATUS "PDC_GL_BUILD ........... ${PDC_GL_BUILD}") +message(STATUS "PDC_X11_BUILD .......... ${PDC_X11_BUILD}") # normalize a windows path file(TO_CMAKE_PATH "${CMAKE_INSTALL_PREFIX}" CMAKE_INSTALL_PREFIX) diff --git a/x11new/CMakeLists.txt b/x11new/CMakeLists.txt new file mode 100644 index 00000000..1d544a57 --- /dev/null +++ b/x11new/CMakeLists.txt @@ -0,0 +1,177 @@ +cmake_minimum_required(VERSION 3.11) + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "MinSizeRel" CACHE STRING "Choose the type of build, options are: Debug, Release, or MinSizeRel." FORCE) + message(STATUS "CMAKE_BUILD_TYPE not set, defaulting to MinSizeRel.") +endif() +set (CMAKE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/..") +set (CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH}" "${CMAKE_SOURCE_DIR}/cmake") +set (PDCURSES_SRCDIR "${CMAKE_SOURCE_DIR}") + +include (get_version) +project(x11 VERSION "${CURSES_VERSION}" LANGUAGES C) + +message(STATUS "**** ${PROJECT_NAME} ****") + +message(STATUS "Generator .............. ${CMAKE_GENERATOR}") +message(STATUS "Build Type ............. ${CMAKE_BUILD_TYPE}") + +option(PDC_NO_LEAKS "No Leaks" OFF) +option(PDC_CHTYPE_16 "CHTYPE_16" OFF) + +set (PDCURSES_SOURCES ${PDCURSES_SRCDIR}/pdcurses/addch.c + ${PDCURSES_SRCDIR}/pdcurses/addchstr.c + ${PDCURSES_SRCDIR}/pdcurses/addstr.c + ${PDCURSES_SRCDIR}/pdcurses/attr.c + ${PDCURSES_SRCDIR}/pdcurses/beep.c + ${PDCURSES_SRCDIR}/pdcurses/bkgd.c + ${PDCURSES_SRCDIR}/pdcurses/border.c + ${PDCURSES_SRCDIR}/pdcurses/clear.c + ${PDCURSES_SRCDIR}/pdcurses/color.c + ${PDCURSES_SRCDIR}/pdcurses/debug.c + ${PDCURSES_SRCDIR}/pdcurses/delch.c + ${PDCURSES_SRCDIR}/pdcurses/deleteln.c + ${PDCURSES_SRCDIR}/pdcurses/getch.c + ${PDCURSES_SRCDIR}/pdcurses/getstr.c + ${PDCURSES_SRCDIR}/pdcurses/getyx.c + ${PDCURSES_SRCDIR}/pdcurses/inch.c + ${PDCURSES_SRCDIR}/pdcurses/inchstr.c + ${PDCURSES_SRCDIR}/pdcurses/initscr.c + ${PDCURSES_SRCDIR}/pdcurses/inopts.c + ${PDCURSES_SRCDIR}/pdcurses/insch.c + ${PDCURSES_SRCDIR}/pdcurses/insstr.c + ${PDCURSES_SRCDIR}/pdcurses/instr.c + ${PDCURSES_SRCDIR}/pdcurses/kernel.c + ${PDCURSES_SRCDIR}/pdcurses/keyname.c + ${PDCURSES_SRCDIR}/pdcurses/mouse.c + ${PDCURSES_SRCDIR}/pdcurses/move.c + ${PDCURSES_SRCDIR}/pdcurses/outopts.c + ${PDCURSES_SRCDIR}/pdcurses/overlay.c + ${PDCURSES_SRCDIR}/pdcurses/pad.c + ${PDCURSES_SRCDIR}/pdcurses/panel.c + ${PDCURSES_SRCDIR}/pdcurses/printw.c + ${PDCURSES_SRCDIR}/pdcurses/refresh.c + ${PDCURSES_SRCDIR}/pdcurses/scanw.c + ${PDCURSES_SRCDIR}/pdcurses/scr_dump.c + ${PDCURSES_SRCDIR}/pdcurses/scroll.c + ${PDCURSES_SRCDIR}/pdcurses/slk.c + ${PDCURSES_SRCDIR}/pdcurses/termattr.c + ${PDCURSES_SRCDIR}/pdcurses/terminfo.c + ${PDCURSES_SRCDIR}/pdcurses/touch.c + ${PDCURSES_SRCDIR}/pdcurses/util.c + ${PDCURSES_SRCDIR}/pdcurses/window.c + ${PDCURSES_SRCDIR}/x11new/pdcclip.c + ${PDCURSES_SRCDIR}/x11new/pdcdisp.c + ${PDCURSES_SRCDIR}/x11new/pdcgetsc.c + ${PDCURSES_SRCDIR}/x11new/pdckbd.c + ${PDCURSES_SRCDIR}/x11new/pdcscrn.c + ${PDCURSES_SRCDIR}/x11new/pdcsetsc.c + ${PDCURSES_SRCDIR}/x11new/pdcutil.c + ${PDCURSES_SRCDIR}/x11new/pdcutil.c) + +if (PDC_BUILD_SHARED) + add_library(${PROJECT_NAME} SHARED ${PDCURSES_SOURCES}) + set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "pdcurses") +else () + add_library(${PROJECT_NAME} STATIC ${PDCURSES_SOURCES}) + set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "pdcursesstatic") +endif () + +target_include_directories(${PROJECT_NAME} PRIVATE "${PDCURSES_SRCDIR}" + "${CMAKE_CURRENT_BINARY_DIR}") + +target_compile_options (${PROJECT_NAME} PRIVATE -Wall -Wextra -pedantic -Werror -fPIC) +if (CMAKE_BUILD_TYPE STREQUAL "Debug") + target_compile_options (${PROJECT_NAME} PRIVATE -g3) + target_compile_definitions(${PROJECT_NAME} PUBLIC -DPDCDEBUG) +else () + target_compile_options (${PROJECT_NAME} PRIVATE -O3) +endif () + +if (PDC_NO_LEAKS) + target_compile_definitions(${PROJECT_NAME} PUBLIC -DNO_LEAKS) +endif () + + +if (PDC_UTF8) + target_compile_definitions(${PROJECT_NAME} PUBLIC -DPDC_FORCE_UTF8) +endif () + +if (PDC_WIDE) + target_compile_definitions(${PROJECT_NAME} PUBLIC -DPDC_WIDE) +endif () + +if (PDC_CHTYPE_32) + target_compile_definitions(${PROJECT_NAME} PUBLIC -DCHTYPE_32) +endif () + +if (PDC_CHTYPE_16) + target_compile_definitions(${PROJECT_NAME} PUBLIC -DCHTYPE_16) +endif () + +target_link_libraries (${PROJECT_NAME} -lX11 -lpthread) +set(PDCURSES_DIST ${CMAKE_INSTALL_PREFIX}/${CMAKE_BUILD_TYPE}) + +install (TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}_Targets + ARCHIVE DESTINATION ${PDCURSES_DIST}/lib/${PROJECT_NAME} + LIBRARY DESTINATION ${PDCURSES_DIST}/lib/${PROJECT_NAME} + RUNTIME DESTINATION ${PDCURSES_DIST}/bin/${PROJECT_NAME}) +install (FILES "${PDCURSES_SRCDIR}/curses.h" + "${PDCURSES_SRCDIR}/curspriv.h" + DESTINATION include) + +macro (x11_app dir targ) + set(bin_name "${PROJECT_NAME}_${targ}") + + if(${targ} STREQUAL "tuidemo") + set(src_files ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/tuidemo.c ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/tui.c) + else() + set(src_files ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/${targ}.c) + endif() + + if(${ARGV2}) + add_executable(${bin_name} WIN32 ${src_files}) + else() + add_executable(${bin_name} ${src_files}) + endif() + target_include_directories(${bin_name} PRIVATE "${PDCURSES_SRCDIR}" + "${CMAKE_CURRENT_BINARY_DIR}") + + target_link_libraries(${bin_name} ${PROJECT_NAME} -lX11 -lpthread) + + add_dependencies(${bin_name} ${PROJECT_NAME}) + set_target_properties(${bin_name} PROPERTIES OUTPUT_NAME ${targ}) + install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/${targ}" DESTINATION ${PDCURSES_DIST}/bin/${PROJECT_NAME}) +endmacro () + +# demos +x11_app(../demos calendar) +x11_app(../demos firework) +x11_app(../demos init_col) +x11_app(../demos mbrot) +x11_app(../demos newtest) +x11_app(../demos ozdemo) +x11_app(../demos picsview) +x11_app(../demos ptest) +x11_app(../demos rain) +x11_app(../demos speed) +x11_app(../demos test_pan) +x11_app(../demos testcurs) +x11_app(../demos widetest) +x11_app(../demos worm) +x11_app(../demos xmas) +x11_app(../demos tuidemo) + +# tests +x11_app(../tests brk_test) +x11_app(../tests del_test) +x11_app(../tests focus) +x11_app(../tests ins_del) +x11_app(../tests keytest) +x11_app(../tests opaque) +x11_app(../tests restart) +x11_app(../tests ripoff) +x11_app(../tests show_col) +x11_app(../tests show_uni) +