diff --git a/graphics/CMakeLists.txt b/graphics/CMakeLists.txt index e4744e47a..c3d05adda 100644 --- a/graphics/CMakeLists.txt +++ b/graphics/CMakeLists.txt @@ -1,24 +1,28 @@ -find_package(OpenGL REQUIRED) -find_package(GLUT) -if(NOT GLUT_FOUND) - message("FreeGLUT library will be downloaded and built.") - include(ExternalProject) - # Include GLFW - ExternalProject_Add ( - FREEGLUT - URL https://sourceforge.net/projects/freeglut/files/freeglut/3.2.1/freeglut-3.2.1.tar.gz - URL_MD5 cd5c670c1086358598a6d4a9d166949d - CMAKE_ARGS -DCMAKE_BUILD_TYPE=RelWithDebInfo - -DFREEGLUT_BUILD_SHARED_LIBS=ON - -DFREEGLUT_BUILD_STATIC_LIBS=ON - -DFREEGLUT_BUILD_DEMOS=OFF - PREFIX ${CMAKE_CURRENT_BINARY_DIR}/freeglut - BUILD_IN_SOURCE ON - INSTALL_COMMAND "" - ) - ExternalProject_Get_Property(FREEGLUT SOURCE_DIR) - set(FREEGLUT_DIR ${SOURCE_DIR}) -endif(NOT GLUT_FOUND) +find_package(OpenGL) +if(OpenGL_FOUND) + find_package(GLUT) + if(NOT GLUT_FOUND) + message("FreeGLUT library will be downloaded and built.") + include(ExternalProject) + # Include GLFW + ExternalProject_Add ( + FREEGLUT + URL https://sourceforge.net/projects/freeglut/files/freeglut/3.2.1/freeglut-3.2.1.tar.gz + URL_MD5 cd5c670c1086358598a6d4a9d166949d + CMAKE_ARGS -DCMAKE_BUILD_TYPE=RelWithDebInfo + -DFREEGLUT_BUILD_SHARED_LIBS=ON + -DFREEGLUT_BUILD_STATIC_LIBS=ON + -DFREEGLUT_BUILD_DEMOS=OFF + PREFIX ${CMAKE_CURRENT_BINARY_DIR}/freeglut + BUILD_IN_SOURCE ON + INSTALL_COMMAND "" + ) + ExternalProject_Get_Property(FREEGLUT SOURCE_DIR) + set(FREEGLUT_DIR ${SOURCE_DIR}) + endif(NOT GLUT_FOUND) +else(OpenGL_FOUND) + message(WARNING "OPENGL not found. Will not build graphical outputs.") +endif(OpenGL_FOUND) # If necessary, use the RELATIVE flag, otherwise each source file may be listed # with full pathname. RELATIVE may makes it easier to extract an executable name @@ -36,15 +40,19 @@ foreach( testsourcefile ${APP_SOURCES} ) target_link_libraries(${testname} PRIVATE OpenMP::OpenMP_CXX) endif() - if(NOT GLUT_FOUND) - add_dependencies(${testname} FREEGLUT) - target_include_directories(${testname} PRIVATE ${FREEGLUT_DIR}/include) - target_link_directories(${testname} PRIVATE ${FREEGLUT_DIR}/lib) - target_link_libraries(${testname} PRIVATE freeglut OpenGL::GL) - else() - target_include_directories(${testname} PRIVATE ${GLUT_INCLUDE_DIRS}) - target_link_libraries(${testname} PRIVATE OpenGL::GL ${GLUT_LIBRARIES}) - endif() + if(OpenGL_FOUND) + if(NOT GLUT_FOUND) + add_dependencies(${testname} FREEGLUT) + target_include_directories(${testname} PRIVATE ${FREEGLUT_DIR}/include) + target_link_directories(${testname} PRIVATE ${FREEGLUT_DIR}/lib) + target_link_libraries(${testname} PRIVATE freeglut OpenGL::GL) + else() + target_include_directories(${testname} PRIVATE ${GLUT_INCLUDE_DIRS}) + target_link_libraries(${testname} PRIVATE OpenGL::GL ${GLUT_LIBRARIES}) + endif() + else(OpenGL_FOUND) + target_compile_options(${testname} NO_OPENGL) + endif(OpenGL_FOUND) if(APPLE) target_compile_options(${testname} PRIVATE -Wno-deprecated) diff --git a/graphics/spirograph.cpp b/graphics/spirograph.cpp index 8bfa9f6c0..52cf50963 100644 --- a/graphics/spirograph.cpp +++ b/graphics/spirograph.cpp @@ -112,6 +112,7 @@ void test() { fp.close(); } +#ifndef NO_OPENGL /** A wrapper that is not available in all GLUT implementations. */ static inline void glutBitmapString(void *font, char *message) { @@ -211,13 +212,14 @@ void timer_cb(int t) { glutTimerFunc(25, timer_cb, 0); glutPostRedisplay(); } - +#endif } // namespace spirograph /** Main function */ int main(int argc, char **argv) { spirograph::test(); +#ifndef NO_OPENGL glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); glutCreateWindow("Spirograph"); @@ -226,6 +228,7 @@ int main(int argc, char **argv) { glutTimerFunc(25, spirograph::timer_cb, 0); glutDisplayFunc(spirograph::test2); glutMainLoop(); +#endif return 0; }