{"schema":"libjg2-1",
"vpath":"/git/",
"avatar":"/git/avatar/",
"alang":"",
"gen_ut":1743401689,
"reponame":"gitohashi",
"desc":"Git web frontend with clientside rendering",
"owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://warmcat.com/repo/gitohashi",
"f":3,
"items": [
{"schema":"libjg2-1",
"cid":"51fd3e80702fa46971e8accdc2b740ab",
"oid":{ "oid": "9961e6fef5f0f2458efc1c2a40d63f7cc50ebfce", "alias": [ "refs/heads/main","refs/heads/master"]},"blobname": "CMakeLists.txt", "blob": "cmake_minimum_required(VERSION 3.0)\ninclude(CheckCSourceCompiles)\ninclude(CheckIncludeFile)\n\nset(PROJ gitohashi)\nproject (gitohashi C)\n\n#\n# You can override where gitohashi gets its dependent library and includes\n# from, at the cmake commandline. For libwebsockets, eg:\n#\n# cmake .. -DGOH_LWS_INC_PATH\u003d/usr/local/include \u005c\n# -DGOH_LWS_LIB_PATH\u003d/usr/local/lib/libwebsockets.so\n#\n# For git2, eg\n#\n# cmake .. -DJG2_GIT2_INC_PATH\u003d/usr/local/include \u005c\n# -DJG2_GIT2_LIB_PATH\u003d/usr/local/lib/libgit2.so\n#\n# and for libarchive, eg\n#\n# cmake .. -DJG2_ARCHIVE_INC_PATH\u003d/usr/local/include \u005c\n# \n\n# enable this if you want to run gitohashi from another lws application via\n# its protocol plugins alone\n#\noption(GOH_LWS_PLUGINS \u0022Also build lws protocol plugins\u0022 OFF)\noption(GOH_WITH_ASAN \u0022Build with libasan\u0022 OFF)\n\n\nset(CPACK_PACKAGE_DESCRIPTION_SUMMARY \u0022Gitohashi\u0022)\nset(CPACK_PACKAGE_VENDOR \u0022Andy Green \u003candy@warmcat.com\u003e\u0022)\nset(CPACK_PACKAGE_DESCRIPTION \u0022Advanced gitweb based on libwebsockets\u0022)\nset(CPACK_RESOURCE_FILE_LICENSE \u0022${CMAKE_CURRENT_SOURCE_DIR}/LICENSE\u0022)\nset(CPACK_PACKAGE_VERSION_MAJOR \u00220\u0022)\nset(CPACK_PACKAGE_VERSION_MINOR \u00222\u0022)\nset(CPACK_PACKAGE_VERSION_PATCH \u002299\u0022)\n\n\nset(GOH_DEPLIBS jsongit2)\nset(JG2_DEPLIBS pthread) \n\nif (NOT GOH_LWS_LIB_PATH)\n\tset(GOH_DEPLIB ${GOH_DEPLIBS} websockets)\n\tset(JG2_DEPLIBS ${JG2_DEPLIBS} websockets)\nendif()\n\n#\n# libgit2 paths\n#\nfind_path( JG2_GIT2_INC_PATH NAMES \u0022git2.h\u0022)\nfind_library(JG2_GIT2_LIB_PATH NAMES \u0022git2\u0022)\n\nif (JG2_GIT2_INC_PATH AND JG2_GIT2_LIB_PATH)\n\tset(JG2_DEPLIBS ${JG2_GIT2_LIB_PATH} ${JG2_DEPLIBS})\n\tinclude_directories(BEFORE \u0022${JG2_GIT2_INC_PATH}\u0022)\nelse()\n\tmessage(FATAL_ERROR \u0022 Unable to find libgit2\u0022)\nendif()\n\n#\n# libarchive paths\n#\nfind_path( JG2_ARCHIVE_INC_PATH NAMES \u0022archive.h\u0022)\nfind_library(JG2_ARCHIVE_LIB_PATH NAMES \u0022archive\u0022)\n\nif (JG2_ARCHIVE_INC_PATH AND JG2_ARCHIVE_LIB_PATH)\n\tset(JG2_DEPLIBS ${JG2_ARCHIVE_LIB_PATH} ${JG2_DEPLIBS})\n\tinclude_directories(BEFORE \u0022${JG2_ARCHIVE_INC_PATH}\u0022)\n\tset(JG2_HAVE_ARCHIVE_H \u0022Y\u0022)\nendif()\n\nfind_package(Git)\nif(GIT_EXECUTABLE)\n execute_process(\n WORKING_DIRECTORY \u0022${CMAKE_CURRENT_SOURCE_DIR}\u0022\n COMMAND \u0022${GIT_EXECUTABLE}\u0022 describe --tags --always\n OUTPUT_VARIABLE GIT_HASH\n OUTPUT_STRIP_TRAILING_WHITESPACE\n )\n\n set(LWS_BUILD_HASH ${GIT_HASH})\n\n # append the build user and hostname\n if (NOT LWS_REPRODUCIBLE)\n execute_process(\n WORKING_DIRECTORY \u0022${CMAKE_CURRENT_SOURCE_DIR}\u0022\n COMMAND \u0022whoami\u0022\n OUTPUT_VARIABLE GIT_USER\n OUTPUT_STRIP_TRAILING_WHITESPACE\n )\n execute_process(\n WORKING_DIRECTORY \u0022${CMAKE_CURRENT_SOURCE_DIR}\u0022\n COMMAND \u0022hostname\u0022\n OUTPUT_VARIABLE GIT_HOST\n OUTPUT_STRIP_TRAILING_WHITESPACE\n )\n string(REGEX REPLACE \u0022([^\u005c\u005c])[\u005c\u005c]([^\u005c\u005c])\u0022 \u0022\u005c\u005c1\u005c\u005c\u005c\u005c\u005c\u005c\u005c\u005c\u005c\u005c2\u0022 GIT_USER ${GIT_USER})\n set(LWS_BUILD_HASH ${GIT_USER}@${GIT_HOST}-${GIT_HASH})\n endif()\n\n message(\u0022Git commit hash: ${LWS_BUILD_HASH}\u0022)\nendif()\n\nset(CPACK_PACKAGE_VERSION_PATCH \u0022${CPACK_PACKAGE_VERSION_PATCH_NUMBER}-${LWS_BUILD_HASH}\u0022)\n\n\n#\n# libwebsockets paths\n#\nfind_path( GOH_LWS_INC_PATH NAMES \u0022libwebsockets.h\u0022)\nfind_library(GOH_LWS_LIB_PATH NAMES \u0022websockets\u0022)\n\nif (GOH_LWS_INC_PATH AND GOH_LWS_LIB_PATH)\n\tset(GOH_DEPLIBS ${GOH_LWS_LIB_PATH} ${GOH_DEPLIBS})\n\tinclude_directories(BEFORE \u0022${GOH_LWS_INC_PATH}\u0022)\nelse()\n\tmessage(FATAL_ERROR \u0022 Unable to find libwebsockets\u0022)\nendif()\n\nunset(ASAN_LIBS)\nif (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR (CMAKE_C_COMPILER_ID MATCHES \u0022Clang\u0022) OR (CMAKE_CXX_COMPILER_ID MATCHES \u0022Clang\u0022))\n include (CheckCCompilerFlag)\n \n \tif (GOH_WITH_ASAN)\n\t\tset(ASAN_FLAGS \u0022-fsanitize\u003daddress -fsanitize\u003dpointer-compare -fsanitize\u003dpointer-subtract -fsanitize\u003dleak -fsanitize\u003dundefined -fsanitize-address-use-after-scope -fsanitize-undefined-trap-on-error\u0022)\n\t\tset(ASAN_LIBS \u0022asan\u0022)\n\t\tmessage(\u0022Enabling ASAN\u0022)\n\tendif()\n \n set(CMAKE_C_FLAGS \u0022-Wall -Wsign-compare -Wignored-qualifiers -Wtype-limits -Wuninitialized -Werror -Wundef ${CMAKE_C_FLAGS} ${ASAN_FLAGS}\u0022 )\nendif()\n\nset(CMAKE_REQUIRED_INCLUDES \u0022include\u0022)\nCHECK_C_SOURCE_COMPILES(\n\t\u0022#include \u003cgit2.h\u003e\n\tint main(int argc, char **argv) { return GIT_BLAME_USE_MAILMAP; }\n\t\u0022 JG2_HAVE_BLAME_MAILMAP)\n\nset(CMAKE_REQUIRED_FLAGS \u0022-pthread\u0022)\nCHECK_C_SOURCE_COMPILES(\u0022#define _GNU_SOURCE\n\t#include \u003cpthread.h\u003e \n\tvoid *dummy(void *arg) { pthread_exit(NULL); return NULL; } \n\tint main(int argc, char *argv[]) {\n\t\tpthread_t th;\n\n\t\tif (pthread_create(\u0026th, NULL, dummy, NULL))\n\t\t\tpthread_setname_np(th, \u005c\u0022test\u005c\u0022);\n \n\t\treturn 0;\n\t}\u0022 JG2_HAS_PTHREAD_SETNAME_NP)\n\nset(JG2_SOURCES lib/cache.c\n\t lib/main.c\n\t lib/repostate.c\n\t lib/util.c\n\n\t lib/job/job.c\n\t lib/job/reflist.c\n\t lib/job/log.c\n\t lib/job/commit.c\n\t lib/job/tree.c\n\t lib/job/plain.c\n\t lib/job/repos.c\n\t lib/job/blame.c\n\t lib/job/blog.c\n\t lib/job/search.c\n\n\t lib/conf/gitolite/gitolite3.c\n\t lib/conf/gitolite/common.c\n\t lib/conf/scan-repos.c\n\n\t lib/email/md5.c\n\t lib/email/email.c\n)\n\nif (JG2_HAVE_ARCHIVE_H)\n\tset(JG2_SOURCES ${JG2_SOURCES} lib/job/snapshot.c)\n\tset(JG2_DEPLIBS ${JG2_DEPLIBS} archive)\nelse()\n\tset(JG2_SOURCES ${JG2_SOURCES} lib/job/no-snapshot.c)\nendif()\n\nconfigure_file(\u0022cmake/config.h.in\u0022 \u0022${PROJECT_BINARY_DIR}/jg2-config.h\u0022)\nadd_library(jsongit2 SHARED ${JG2_SOURCES})\nset(HDR_PUBLIC \u0022include/libjsongit2.h\u0022 \u0022${PROJECT_BINARY_DIR}/jg2-config.h\u0022)\nset_target_properties(jsongit2 PROPERTIES PUBLIC_HEADER \u0022${HDR_PUBLIC}\u0022)\ntarget_include_directories(jsongit2 PRIVATE \u0022${PROJECT_BINARY_DIR}\u0022\n\t\t\t\t\t \u0022${PROJECT_SOURCE_DIR}/include\u0022) \ntarget_link_libraries(jsongit2 ${ASAN_LIBS} ${GOH_LWS_LIB_PATH} ${JG2_DEPLIBS})\n\nset(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME \u0022Libraries\u0022)\nset(CPACK_COMPONENT_DEV_DISPLAY_NAME \u0022Development files\u0022)\n\n# jsongit2 examples \n\nadd_executable(jg2-example examples/minimal/jg2-example.c)\ntarget_link_libraries(jg2-example ${ASAN_LIBS} ${GOH_LWS_LIB_PATH} jsongit2)\ntarget_include_directories(jg2-example PRIVATE \u0022${PROJECT_SOURCE_DIR}/include\u0022)\n\nadd_executable(jg2-threadchurn examples/threadchurn/threadchurn.c)\ntarget_link_libraries(jg2-threadchurn ${ASAN_LIBS} ${GOH_LWS_LIB_PATH} jsongit2 pthread)\ntarget_include_directories(jg2-threadchurn PRIVATE \u0022${PROJECT_SOURCE_DIR}/include\u0022)\n\n\nmessage(\u0022----------------------------- dependent libs -----------------------------\u0022)\nmessage(\u0022 libgit2: include: ${JG2_GIT2_INC_PATH}, lib: ${JG2_GIT2_LIB_PATH}\u0022)\nmessage(\u0022 libgit2: has GIT_BLAME_USE_MAILMAP: ${JG2_HAVE_BLAME_MAILMAP}\u0022)\nif (NOT JG2_HAVE_ARCHIVE_H)\n\tmessage(\u0022 libarchive: not found\u0022)\nelse()\n\tmessage(\u0022 libarchive: include: ${JG2_ARCHIVE_INC_PATH}, lib: ${JG2_ARCHIVE_LIB_PATH}\u0022)\nendif()\nmessage(\u0022 libwebsockets: include: ${GOH_LWS_INC_PATH}, lib: ${GOH_LWS_LIB_PATH}\u0022)\nmessage(\u0022 lws plugins: ${GOH_LWS_PLUGINS}\u0022)\n\nset(LIB_DIR lib CACHE PATH \u0022Install dir for libraries\u0022)\nset(BIN_DIR bin CACHE PATH \u0022Install dir for executables\u0022)\nset(INCLUDE_DIR include CACHE PATH \u0022Install dir for header files\u0022)\nset(DATA_DIR share CACHE PATH \u0022Install dir for data files\u0022)\n\ninstall(TARGETS jsongit2\n\t\tjg2-example\n\t\tjg2-threadchurn\n\n\tLIBRARY DESTINATION \u0022${LIB_DIR}${LIB_SUFFIX}\u0022 COMPONENT libraries\n\tARCHIVE DESTINATION \u0022${LIB_DIR}${LIB_SUFFIX}\u0022 COMPONENT libraries\n\tRUNTIME DESTINATION \u0022${BIN_DIR}\u0022 COMPONENT libraries\n\tPUBLIC_HEADER DESTINATION \u0022${INCLUDE_DIR}\u0022 COMPONENT dev)\n\n\n\ninstall(FILES assets/github.css\n\t assets/logo.css\n\t assets/gitohashi-custom.css\n\t assets/highlight.pack.js\n\t assets/jg2.css\n\t assets/jg2.js\n\t assets/favicon.ico\n\t assets/inconsolata.ttf\n\t assets/showdown.min.js\n\t assets/showdown.min.js.map\n\t\t\tDESTINATION \u0022${DATA_DIR}/gitohashi/assets\u0022)\n\t\t\t\ninstall(FILES example-cert/localhost-100y.cert.pem\n\t example-cert/localhost-100y.key.pem\n\t\t\tDESTINATION \u0022${DATA_DIR}/gitohashi/example-cert\u0022)\n\t\t\t\ninstall(FILES templates/gitohashi-example.html\n\t\t\tDESTINATION \u0022${DATA_DIR}/gitohashi/templates\u0022)\n\t\t\t\ninstall(FILES system/gitohashi-selinux.pp\n\t\t\tDESTINATION \u0022${DATA_DIR}/gitohashi\u0022)\n\t\t\t\ninstall(FILES system/gitohashi.service\n\t\t\tDESTINATION \u0022${LIB_DIR}/systemd/system\u0022)\n\nadd_executable(${PROJ}\n\tsrc/main.c\n)\n\ntarget_link_libraries(${PROJ} ${ASAN_LIBS} ${GOH_LWS_LIB_PATH} jsongit2)\ntarget_include_directories(${PROJ} PRIVATE \u0022${PROJECT_SOURCE_DIR}/include\u0022)\n\ninstall(TARGETS ${PROJ} RUNTIME DESTINATION ${BIN_DIR})\n\n\nif (GOH_LWS_PLUGINS)\n\tadd_library(protocol_gitohashi SHARED src/protocol_gitohashi.c)\n\t\n target_link_libraries(protocol_gitohashi ${ASAN_LIBS} websockets jsongit2)\n\n\tset_property(TARGET protocol_gitohashi\n\t\t PROPERTY COMPILE_DEFINITIONS\n\t\t INSTALL_DATADIR\u003d\u0022${CMAKE_INSTALL_PREFIX}/plugins\u0022\n\t)\n\t\n\tlist(APPEND PLUGINS_LIST protocol_gitohashi)\n\t\n\t\n\tadd_library(protocol_avatar_proxy SHARED src/protocol_avatar-proxy.c)\n\t\n target_link_libraries(protocol_avatar_proxy ${ASAN_LIBS} websockets jsongit2)\n\n\tset_property(TARGET protocol_avatar_proxy\n\t\t PROPERTY COMPILE_DEFINITIONS\n\t\t INSTALL_DATADIR\u003d\u0022${CMAKE_INSTALL_PREFIX}/plugins\u0022\n\t)\n\t\n\tlist(APPEND PLUGINS_LIST protocol_avatar_proxy)\n\t\n\tinstall(TARGETS ${PLUGINS_LIST}\n\t\tPERMISSIONS OWNER_WRITE OWNER_EXECUTE GROUP_EXECUTE WORLD_EXECUTE OWNER_READ GROUP_READ WORLD_READ\n\t\tDESTINATION share/libwebsockets-test-server/plugins\n\t\tCOMPONENT plugins)\n\nendif()\n\ninclude(CPack)\n","s":{"c":1743182169,"u": 411}}
],"g": 1552,"chitpc": 0,"ehitpc": 0,"indexed":0
,
"ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "7d0a"}