diff --git a/.gitignore b/.gitignore index 26cb2108..c4b54f3f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,3 @@ -.depend -*qmake_qmake_immediate.* -.qmake.stash -.build-stamp *.o *.obj *.rej @@ -10,19 +6,5 @@ *.h.gch ui_*.h moc_* -Local.mak -local.h -commithash.h xca -xca.exe -setup_xca*.exe -xca_db_stat -xca_db_stat.exe -aclocal.m4 -autom4te.cache/ -config.cache -config.log -config.status -configure -misc/Info.plist misc/variables.wxi diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..8acb4550 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,219 @@ +cmake_minimum_required(VERSION 3.9.0) + +project(xca + DESCRIPTION "X Certificate and Key management" + HOMEPAGE_URL http://xca.hohnstaedt.de + LANGUAGES CXX +) + +file(READ VERSION ver) +string(REGEX MATCH "([0-9\.]*)" _ ${ver}) +set(PROJECT_VERSION ${CMAKE_MATCH_1}) + +include(GNUInstallDirs) + +##### Git command to tweak the version and commit hash +include(cmake/git_version.cmake) + +##### Build specifications + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13") +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +set(CMAKE_CXX_STANDARD 11) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) +set(CMAKE_AUTOUIC_SEARCH_PATHS "${PROJECT_SOURCE_DIR}/ui") +set(CMAKE_AUTOUIC ON) + +configure_file(local.h.in local.h) +configure_file(doc/conf.py.in sphinx/rst/conf.py) + +##### Libraries and executables + +add_executable(${CMAKE_PROJECT_NAME} img/imgres.qrc) +add_executable(xcadoc xcadoc.cpp) +target_include_directories(xcadoc PRIVATE + "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/lib") + +find_package(OpenSSL REQUIRED) +find_package(Qt5 REQUIRED COMPONENTS Core Widgets Sql Help LinguistTools) +find_library(LTDL_LIB ltdl REQUIRED) +find_path(LTDL_INCLUDE_DIR ltdl.h REQUIRED) + +add_subdirectory(lib) +add_subdirectory(widgets) + +message(STATUS "OPENSSL ${OPENSSL_VERSION} - ${OPENSSL_LIBRARIES} - ${OPENSSL_INCLUDE_DIR}") +message(STATUS "LTDL_LIB ${LTDL_LIB}") + +target_link_libraries(${CMAKE_PROJECT_NAME} + core widgets core + OpenSSL::Crypto + ${LTDL_LIB} + Qt5::Widgets Qt5::Core Qt5::Sql Qt5::Help +) +target_link_libraries(xcadoc core Qt5::Core) + +###### Translations + +set(TS_FILES +lang/xca_de.ts lang/xca_ja.ts lang/xca_sk.ts +lang/xca_es.ts lang/xca_nl.ts lang/xca_tr.ts +lang/xca_fr.ts lang/xca_pl.ts lang/xca_zh_CN.ts +lang/xca_hr.ts lang/xca_pt_BR.ts +lang/xca_it.ts lang/xca_ru.ts +) +qt5_add_translation(QM_FILES ${TS_FILES}) +add_custom_target(translations DEPENDS ${QM_FILES}) +add_dependencies(${CMAKE_PROJECT_NAME} translations) +target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${QM_FILES}) + +###### ICONS + +set(ICONS "${PROJECT_BINARY_DIR}/xca-icons.icns") +file(GLOB ICON_SRC ${PROJECT_SOURCE_DIR}/img/xca-icons.iconset/*.png) +add_custom_command(OUTPUT ${ICONS} + COMMAND iconutil --convert icns -o ${ICONS} + ${PROJECT_SOURCE_DIR}/img/xca-icons.iconset + DEPENDS ${ICON_SRC} +) +add_custom_target(mac-icons DEPENDS ${ICONS}) +set_source_files_properties(${ICONS} + PROPERTIES MACOSX_PACKAGE_LOCATION Resources +) +target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${ICONS}) + +##### SPHINX Documentation and man pages + +include(cmake/sphinx-documentation.cmake) + +##### XCA Templates + +set(XCA_TEMPLATES misc/CA.xca misc/TLS_server.xca misc/TLS_client.xca) +target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${XCA_TEMPLATES}) + +##### Text Files ids.txt eku.txt dn.txt + +macro(Text_header file) + add_custom_command(OUTPUT misc/${file}.txt + COMMAND ${CMAKE_COMMAND} -DFILE=${file} -DSRC="${PROJECT_SOURCE_DIR}" + -P "${PROJECT_SOURCE_DIR}/cmake/text_header_file.cmake" + DEPENDS misc/${file}.text + ) + set_source_files_properties("${PROJECT_SOURCE_DIR}misc/${file}.text" + PROPERTIES MACOSX_PACKAGE_LOCATION Resources + ) + list(APPEND TEXT_FILES "${PROJECT_BINARY_DIR}/misc/${file}.txt") +endmacro() + +Text_header(dn) +Text_header(eku) +Text_header(oids) +add_custom_target(text_files ALL DEPENDS ${TEXT_FILES}) +target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${TEXT_FILES}) + +install(TARGETS ${CMAKE_PROJECT_NAME} + BUNDLE DESTINATION . + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + RESOURCE DESTINATION Resources +) + +############################################### +##### Host specific settings + +if (APPLE) + find_library(IOKIT_LIBRARY IOKit) + find_library(COREFOUNDATION_LIBRARY CoreFoundation) + target_link_libraries(${CMAKE_PROJECT_NAME} + ${IOKIT_LIBRARY} ${COREFOUNDATION_LIBRARY} + ) + set(CMAKE_MACOSX_BUNDLE ON) + set_property(TARGET ${PROJECT_NAME} PROPERTY MACOSX_BUNDLE_INFO_PLIST + "${PROJECT_SOURCE_DIR}/misc/Info.plist.in") + + set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES + MACOSX_BUNDLE TRUE + RESOURCE "${ICONS};${QM_FILES};${XCA_TEMPLATES};${TEXT_FILES}" + ) + add_dependencies(${CMAKE_PROJECT_NAME} mac-icons) + + # Note Mac specific extension .app + set(APPS "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app") + + # Directories to look for dependencies + set(DIRS "${CMAKE_BINARY_DIR}") + + # Path used for searching by FIND_XXX(), with appropriate suffixes added + if(CMAKE_PREFIX_PATH) + foreach(dir ${CMAKE_PREFIX_PATH}) + list(APPEND DIRS "${dir}/bin" "${dir}/lib") + endforeach() + endif() + + # Append Qt's lib folder which is two levels above Qt5Widgets_DIR + list(APPEND DIRS "${Qt5Widgets_DIR}/../..") + + include(InstallRequiredSystemLibraries) + + message(STATUS "APPS: ${APPS}") + message(STATUS "QT_PLUGINS: ${QT_PLUGINS}") + message(STATUS "DIRS: ${DIRS}") + + install(CODE "include(BundleUtilities) + fixup_bundle(\"${APPS}\" \"${QT_PLUGINS}\" \"${DIRS}\")") + + set(CPACK_GENERATOR "DRAGNDROP") + include(CPack) + +endif (APPLE) + +if (WIN32) + set(QT_USE_QTMAIN TRUE) +endif (WIN32) + +if (UNIX AND NOT APPLE) +install(FILES ${QM_FILES} ${TEXT_FILES} ${XCA_TEMPLATES} + DESTINATION ${CMAKE_INSTALL_DATADIR}/${CMAKE_PROJECT_NAME} +) +install(FILES misc/xca.desktop + DESTINATION ${CMAKE_INSTALL_DATADIR}/applications +) +install(FILES misc/xca.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages) +install(DIRECTORY "${PROJECT_BINARY_DIR}/qthelp/" + DESTINATION ${CMAKE_INSTALL_DATADIR}/doc/${CMAKE_PROJECT_NAME} + FILES_MATCHING PATTERN "*.html" PATTERN "xca.q[hc][ch]" +) +install(FILES "${PROJECT_BINARY_DIR}/xca.1.gz" + DESTINATION ${CMAKE_INSTALL_DATADIR}/man +) +install(FILES img/xca-32x32.xpm + DESTINATION ${CMAKE_INSTALL_DATADIR}/pixmaps +) + +set(ICONDIR ${CMAKE_INSTALL_DATADIR}/icons/hicolor) + +macro(Install_PNG size) + install(FILES img/xca-icons.iconset/icon_${size}.png + DESTINATION ${ICONDIR}/${size}/apps RENAME xca.png + ) + install(FILES img/xca-icons.iconset/icon_${size}.png + DESTINATION ${ICONDIR}/${size}/mimetypes RENAME x-xca-database.png + ) + install(FILES img/xca-icons.iconset/icon_${size}.png + DESTINATION ${ICONDIR}/${size}/mimetypes RENAME x-xca-template.png + ) +endmacro() + +Install_PNG(16x16) +Install_PNG(32x32) +Install_PNG(48x48) +Install_PNG(64x64) +Install_PNG(16x16) +endif() diff --git a/INSTALL b/INSTALL index 76bbc292..c08bbdc7 100644 --- a/INSTALL +++ b/INSTALL @@ -15,6 +15,12 @@ OpenSSL >= 1.1.0 from https://www.openssl.org C++11 compiler, e.g. GNU gcc >= 5 GNU make +INSTALL_DIR=/Users/chris/src/xca-dir/install \ +cmake -DCMAKE_LIBRARY_PATH="$INSTALL_DIR"/lib \ + -DCMAKE_INCLUDE_PATH="$INSTALL_DIR"/include \ + -DCMAKE_PREFIX_PATH=/usr/local/Cellar/qt\@5/5.15.2/ \ + -DCMAKE_BUILD_TYPE=Debug \ + ../xca Installation: ============= diff --git a/INSTALL.qmake b/INSTALL.qmake deleted file mode 100644 index 7be691f0..00000000 --- a/INSTALL.qmake +++ /dev/null @@ -1,22 +0,0 @@ - -Next to the usual configuration script, -there is an alternative way to build xca. - -At least on unix, one can use qmake to create a makefile -for building. Maybe this will help, if you have a weired setup. - -$ qmake -o makefile - -creates the makefile. I recommend "makefile" to not overwrite "Makefile" -and also assures, that it is used instead of the original Makefile. - -Now you need to create the file Local.h -$ cat >local.h < xca-$${HASH}.tar.gz -install: xca$(SUFFIX) $(INSTTARGET) - install -m 755 -d $(DESTDIR)$(bindir) - install -m 755 xca $(DESTDIR)$(bindir) - $(STRIP) $(DESTDIR)$(bindir)/xca - xca$(SUFFIX).signed: xca$(SUFFIX) %.signed: % @@ -241,14 +131,3 @@ trans: $(MAKE) -C lang po2ts lupdate -locations relative $(TOPDIR)/xca.pro $(MAKE) -C lang xca.pot - -.PHONY: $(SUBDIRS) $(INSTDIR) commithash.h xca-portable.zip msi-installer-dir.zip - -do.doc do.lang headers: local.h - -Local.mak: configure Local.mak.in - $(TOPDIR)/configure - -commithash.h: - @$(PRINT) " GEN $@" - $(TOPDIR)/gen_commithash.h.sh $@ diff --git a/Rules.mak b/Rules.mak deleted file mode 100644 index b285b8b3..00000000 --- a/Rules.mak +++ /dev/null @@ -1,40 +0,0 @@ -include $(BUILD)/Local.mak -export VERSION=$(shell cat $(TOPDIR)/VERSION ) - -BASENAME=$(shell basename `pwd`) - -CPPFLAGS += -I$(TOPDIR) -I$(BUILD) -I$(BUILD)/ui - -all: .build-stamp - -.build-stamp: $(OBJS) - for i in $(patsubst %, $(shell pwd)/%, $(OBJS)); do echo $$i; done > $@ - @$(PRINT) " DONE [$(BASENAME)]" - -.install-stamp: .build-stamp - touch $@ - -SRCS=$(patsubst %.o, %.cpp, $(OBJS)) -HEADERS=$(shell ls *.h 2>/dev/null) -GCH=$(patsubst %, %.gch, $(HEADERS)) - -# how to create a moc_* file -moc_%.cpp: %.h %.cpp - @$(PRINT) " MOC [$(BASENAME)] $@" - $(MOC) $< -o $@ - -# how to create the headerfile from the *.ui -ui_%.h: %.ui - @$(PRINT) " UIC [$(BASENAME)] $@" - $(UIC) -o $@ $< - -# default compile rule -%.o: %.cpp - @$(PRINT) " CC [$(BASENAME)] $@" - $(CC) $(CPPFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -c $< -o $@ - -.depend: $(SRCS) - @$(PRINT) " DEP [$(BASENAME)]" - $(CC) -MM $(CPPFLAGS) $(CFLAGS) $^ > $@ - -.SECONDARY: diff --git a/bootstrap b/bootstrap deleted file mode 100755 index 350078bd..00000000 --- a/bootstrap +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -if test -n "$1"; then - mkdir -p "$1" - O="$1/" -fi -O="${O}configure" - -aclocal -Im4 -autoconf -o $O -rm -f aclocal.m4 -rm -rf autom4te.cache/ diff --git a/cmake/database_schema.cmake b/cmake/database_schema.cmake new file mode 100644 index 00000000..92f57387 --- /dev/null +++ b/cmake/database_schema.cmake @@ -0,0 +1,13 @@ + +if (SRC AND DST) + file(READ ${SRC} DB_SCHEMA) + string(REPLACE "<<" "" DB_SCHEMA "${DB_SCHEMA}") + string(REPLACE "\\\"" "'" DB_SCHEMA "${DB_SCHEMA}") + string(REPLACE "//" "--" DB_SCHEMA "${DB_SCHEMA}") + string(REPLACE "\"" " " DB_SCHEMA "${DB_SCHEMA}") + string(REGEX REPLACE "^[ \t\r\n]+schemas\\[(.*)\\].*" + " -- Schema Version \\1" DB_SCHEMA "${DB_SCHEMA}") + file(WRITE ${DST} "${DB_SCHEMA}") +else() + message(FATAL_ERROR "Mandatory FILE or SRC variable not defined") +endif() diff --git a/cmake/git_version.cmake b/cmake/git_version.cmake new file mode 100644 index 00000000..b19097c5 --- /dev/null +++ b/cmake/git_version.cmake @@ -0,0 +1,34 @@ +find_package(Git) +if(Git_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git") + message(STATUS "Git found: ${GIT_EXECUTABLE}") + execute_process(COMMAND git rev-parse HEAD + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_VARIABLE GIT_REV + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + execute_process(COMMAND git diff-index --quiet HEAD -- + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_QUIET ERROR_QUIET + RESULT_VARIABLE GIT_LOCAL_CHANGES + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + execute_process(COMMAND git rev-list --count RELEASE.${PROJECT_VERSION}..HEAD + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_VARIABLE GIT_COMMIT_COUNTER + RESULT_VARIABLE GIT_COMMIT_COUNTER_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_QUIET + ) + if(NOT GIT_COMMIT_COUNTER_RESULT) + string(REPLACE "." ";" VERSION_LIST ${PROJECT_VERSION}) + list(GET VERSION_LIST 0 V_MAJOR) + list(GET VERSION_LIST 1 V_MINOR) + list(GET VERSION_LIST 2 V_PATCH) + math(EXPR V_PATCH "${V_PATCH} + ${GIT_COMMIT_COUNTER}") + set(PROJECT_VERSION "${V_MAJOR}.${V_MINOR}.${V_PATCH}") + message(STATUS "Commit counter: ${GIT_COMMIT_COUNTER} - ${GIT_REV} - ${PROJECT_VERSION}") + endif() +endif() +message(STATUS "VERSION: ${PROJECT_VERSION}") + diff --git a/cmake/sphinx-documentation.cmake b/cmake/sphinx-documentation.cmake new file mode 100644 index 00000000..b86e9813 --- /dev/null +++ b/cmake/sphinx-documentation.cmake @@ -0,0 +1,77 @@ + +find_program(SPHINX sphinx-build) +find_program(QTCOLLGEN qcollectiongenerator) + +if(SPHINX) + add_custom_command( + OUTPUT html/index.html + COMMAND ${SPHINX} -b html sphinx/rst html + DEPENDS "${PROJECT_BINARY_DIR}/sphinx/rst/conf.py" + sphinx-src sphinx/rst/arguments.rst + COMMENT "Create HTML documentation" + ) + add_custom_command( + OUTPUT qthelp/xca.qhcp + COMMAND ${SPHINX} -b qthelp sphinx/rst qthelp + DEPENDS "${PROJECT_BINARY_DIR}/sphinx/rst/conf.py" + sphinx-src sphinx/rst/arguments.rst + COMMENT "Create context sensitive help" + ) + add_custom_command( + OUTPUT qthelp/xca.qhc + COMMAND ${QTCOLLGEN} -o "${PROJECT_BINARY_DIR}/qthelp/xca.qhc" + "${PROJECT_BINARY_DIR}/qthelp/xca.qhcp" + DEPENDS "${PROJECT_BINARY_DIR}/qthelp/xca.qhcp" + COMMENT "Create context sensitive help index" + ) + add_custom_command( + OUTPUT sphinx/rst/database_schema.sql + COMMAND ${CMAKE_COMMAND} -E make_directory sphinx/rst/_static + COMMAND ${CMAKE_COMMAND} + -D "SRC=${PROJECT_SOURCE_DIR}/widgets/database_schema.cpp" + -D "DST=sphinx/rst/database_schema.sql" + -P "${PROJECT_SOURCE_DIR}/cmake/database_schema.cmake" + DEPENDS widgets/database_schema.cpp + COMMENT "Generating database schema SQL documentation" + ) + add_custom_command( + OUTPUT sphinx/rst/COPYRIGHT sphinx/rst/changelog + sphinx/rst/_static/bigcert.png sphinx/rst + COMMAND ${CMAKE_COMMAND} -E make_directory sphinx/rst/_static + COMMAND ${CMAKE_COMMAND} -E copy_directory + "${PROJECT_SOURCE_DIR}/doc/rst" sphinx/rst + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${PROJECT_SOURCE_DIR}/COPYRIGHT" + "${PROJECT_SOURCE_DIR}/changelog" + sphinx/rst + DEPENDS COPYRIGHT changelog doc/rst + COMMENT "Prepare Sphinx source directory" + ) + add_custom_command( + OUTPUT sphinx/rst/arguments.rst + COMMAND xcadoc rst sphinx/rst/arguments.rst + ) + add_custom_target(sphinx-html DEPENDS html/index.html) + add_custom_target(sphinx-qthelp ALL DEPENDS qthelp/xca.qhc) + add_custom_target(sphinx DEPENDS sphinx-html sphinx-qthelp) + add_custom_target(sphinx-src + DEPENDS sphinx/rst/COPYRIGHT sphinx/rst/changelog + sphinx/rst/_static/bigcert.png sphinx/rst + sphinx/rst/database_schema.sql + ) +else() + add_custom_target(sphinx-qthelp) +endif() + +if (NOT WIN32) + add_custom_command( + OUTPUT xca.1.gz + COMMAND sh -c 'cd ${PROJECT_SOURCE_DIR}/doc && cat xca.1.head "${PROJECT_BINARY_DIR}/xca.1.options" xca.1.tail | gzip > ${PROJECT_BINARY_DIR}/xca.1.gz' + DEPENDS doc/xca.1.head ${PROJECT_BINARY_DIR}/xca.1.options doc/xca.1.tail + ) + add_custom_command( + OUTPUT xca.1.options + COMMAND xcadoc man xca.1.options + ) + add_custom_target(manpage ALL DEPENDS xca.1.gz) +endif() diff --git a/cmake/text_header_file.cmake b/cmake/text_header_file.cmake new file mode 100644 index 00000000..c596657a --- /dev/null +++ b/cmake/text_header_file.cmake @@ -0,0 +1,20 @@ + +if (FILE AND SRC) + set(TEXT_PREFIX "# Do not edit this file, rather use:") + if (APPLE) + set(DIR_HINT "HOME/Library/Application Support/data/xca/${FILE}.txt") + elseif (WIN32) + set(DIR_HINT "PROFILE\Application Data\xca\${FILE}.txt") + else() + set(DIR_HINT "/usr/local/share/xca/${FILE}.txt or HOME/.local/share/xca/${FILE}.txt") + endif() + + file(READ "${SRC}/misc/${FILE}.text" CONT) + file(WRITE "misc/${FILE}.txt" + ${TEXT_PREFIX} "\n# " + ${DIR_HINT} "\n" + ${CONT}) +else() + message(FATAL_ERROR "Mandatory FILE or SRC variable not defined") +endif() + diff --git a/configure.ac b/configure.ac deleted file mode 100644 index 98303d9c..00000000 --- a/configure.ac +++ /dev/null @@ -1,314 +0,0 @@ -AC_INIT([X Certificate and Key management], - m4_esyscmd([tr -d '\n' < VERSION]), - [christian@hohnstaedt.de], - [xca], - [http://xca.hohnstaedt.de]) - -ITERATION="$(cd "$srcdir" && git rev-list --count RELEASE.${PACKAGE_VERSION}..HEAD)" -XCA_VERSION=$(IFS='.'; set - $PACKAGE_VERSION; echo $1.$2.$(($ITERATION+$3))) - -AC_MSG_NOTICE([ ***************************************************]) -AC_MSG_NOTICE([ * ${PACKAGE_NAME} ${XCA_VERSION}]) -AC_MSG_NOTICE([ ***************************************************]) -AC_CONFIG_MACRO_DIR([m4]) -AC_PROG_CXX -AC_LANG(C++) -AC_CHECK_TOOL(STRIP, [strip], [:]) -AC_CHECK_TOOL(WINDRES, [windres], [:]) - -VERSIONHASH="$(echo "${XCA_VERSION}" | shasum | cut -b -12)" -AC_SUBST([VERSIONHASH]) -AC_SUBST([XCA_VERSION]) -AC_DEFINE_UNQUOTED([XCA_VERSION], [ "${XCA_VERSION}" ], - [ XCA Version string with calculated patch level]) - -AC_ARG_WITH([macos-version], - AS_HELP_STRING([--with-macos-version], [Select macOS minimum SDK version]), - [ MACOS_VERSION="$withval" - CXXFLAGS="${CXXFLAGS} -mmacosx-version-min=$MACOS_VERSION" - case "$withval" in - 10.10) EXTRA_VERSION=-Yosemite ;; - 10.11) EXTRA_VERSION=-El-Capitan ;; - 10.12) EXTRA_VERSION=-Sierra ;; - 10.13) EXTRA_VERSION=-High-Sierra ;; - 10.14) EXTRA_VERSION=-Mojave ;; - 10.15) EXTRA_VERSION=-Catalina ;; - 11.00) EXTRA_VERSION=-Big-Sur ;; - *) echo "Unknown macOS Version $withval" - exit 1 ;; - esac - MACOS_VERSION3="${MACOS_VERSION}.0" - ] -) -AC_SUBST([EXTRA_VERSION]) -AC_SUBST([MACOS_VERSION]) -AC_SUBST([MACOS_VERSION3]) - -if test -d "$INSTALL_DIR"; then - AC_MSG_NOTICE([Using INSTALL_DIR $INSTALL_DIR]) - test -d "${INSTALL_DIR}/include" && CXXFLAGS="${CXXFLAGS} -I${INSTALL_DIR}/include" - test -d "${INSTALL_DIR}/lib" && LIBS="${LIBS} -L${INSTALL_DIR}/lib" -fi - -case "$(${CXX} -dumpmachine)" in - *apple-darwin*) - HOST=DARWIN - CXXFLAGS="${CXXFLAGS} -pipe -gdwarf-2" - LIBS="${LIBS} -framework IOKit -framework CoreFoundation" - BREW_PREFIX="$(brew --prefix)" - if test "$BREW_PREFIX"; then - PKG_CONFIG_PATH="$(find ${BREW_PREFIX}/Cellar -name 'pkgconfig' -type d | tr '\n' ':')${PKG_CONFIG_PATH}" - CXXFLAGS="${CFLAGS} -I${BREW_PREFIX}/include" - LIBS="${LIBS} -L${BREW_PREFIX}/lib" - fi - export DYLD_LIBRARY_PATH - test "${MACOS_VERSION3}" || MACOS_VERSION3="$(sw_vers -productVersion)" - ;; - *mingw*) - HOST=WINDOWS - SUFFIX=".exe" - PKG_CONFIG="$(which pkg-config) --define-prefix" - PKG_CONFIG_LIBDIR="" - CXXFLAGS="${CXXFLAGS} -mthreads -mwindows -mnop-fun-dllimport -Wno-strict-aliasing" - LIBS="${LIBS} -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -static-libgcc" - ;; - *linux*) - HOST=LINUX - ;; - *) - HOST=UNIX - ;; -esac - -AC_MSG_NOTICE([Compiling for host: $HOST]) - -AC_SUBST([HOST]) -AC_SUBST([MACDEPLOYQT]) -AC_SUBST([SUFFIX]) -AC_SUBST([INSTALL_DIR]) - -export PKG_CONFIG_PATH -export LD_LIBRARY_PATH - -if test "$srcdir" != "."; then - exist="" - for f in Local.mak local.h commithash.h; do - test ! -r "$srcdir"/"$f" || exist="$exist $f" - done - if test -n "$exist"; then - AC_ERROR([The source directory (${srcdir}) contains the file(s):$exist. - They must be removed before building here.]) - fi -fi - -# Detect the OpenSSL libraries and header -######################################### -AC_ARG_WITH([openssl], - AS_HELP_STRING([--with-openssl], [Select the OpenSSL installation directory]), - [ if test -d "$withval"; then - _OPENSSLDIR="$withval" - else - AC_MSG_WARN([OpenSSL directory '$withval' does not exist or is not a directory]) - fi - ], [_OPENSSLDIR="$OPENSSLDIR"]) - -if test -n "${_OPENSSLDIR}" && test -d "${_OPENSSLDIR}"; then - _OPENSSLDIR=`cd ${_OPENSSLDIR} && pwd` - PKG_CONFIG_PATH="${_OPENSSLDIR}/lib/pkgconfig:${PKG_CONFIG_PATH}" - LD_LIBRARY_PATH="${_OPENSSLDIR}/lib:${LD_LIBRARY_PATH}" - DYLD_LIBRARY_PATH="${_OPENSSLDIR}/lib:${DYLD_LIBRARY_PATH}" -fi - -PKG_CHECK_MODULES([OpenSSL], - [libcrypto >= 1.1.0], [ ], - [ - OpenSSL_LIBS=" -lcrypto "; - AC_MSG_WARN([OpenSSL pkg-config failed, using fallback defaults (${OpenSSL_LIBS})]); - ] -) - -OPENSSL_LIBS="$OpenSSL_LIBS" -OPENSSL_CFLAGS="$OpenSSL_CFLAGS" - -# Detect the Qt libraries and header -#################################### -AC_ARG_WITH([qt], - AS_HELP_STRING([--with-qt], [Select the Qt installation directory]), - [ if test -d "$withval"; then - _QTDIR="$withval" - else - AC_MSG_WARN([Qt directory '$withval' does not exist or is not a directory]) - fi - ], [_QTDIR="${QTDIR}"]) - -if test -n "${_QTDIR}" && test -d "${_QTDIR}"; then - _QTDIR=`cd ${_QTDIR} && pwd` - PKG_CONFIG_PATH="${_QTDIR}/lib/pkgconfig:${PKG_CONFIG_PATH}" - LD_LIBRARY_PATH="${_QTDIR}/lib:${LD_LIBRARY_PATH}" - DYLD_LIBRARY_PATH="${_QTDIR}/lib:${DYLD_LIBRARY_PATH}" -fi - -AC_ARG_WITH([qt-version], - AS_HELP_STRING([--with-qt-version], - [Select the Qt version: 5 or 6 if both are installed]), - [WANT_QT_VERSION="$withval"], - [WANT_QT_VERSION=detect]) - -if test "${WANT_QT_VERSION}" = detect -o "${WANT_QT_VERSION}" = 5; then - PKG_CHECK_MODULES(Qt5, [Qt5Core Qt5Widgets Qt5Sql Qt5Help], [ - _QT_HOST_BINS="`pkg-config --variable=host_bins Qt5Core`" - QT_MOC="${_QT_HOST_BINS}/moc" - QT_UIC="${_QT_HOST_BINS}/uic" - if test "$HOST" = "DARWIN"; then - FRAMEDIR=`pkg-config --variable=libdir Qt5Core` - Qt5_CFLAGS="$Qt5_CFLAGS -std=c++11 -F${FRAMEDIR} -I${FRAMEDIR}/QtCore.framework/Headers -I${FRAMEDIR}/QtGui.framework/Headers -I${FRAMEDIR}/QtWdgets.framework/Headers -I${FRAMEDIR}/QtSql.framework/Headers" - Qt5_LDFLAGS=" -Xlinker -rpath -Xlinker ${FRAMEDIR}" - fi - WANT_QT_VERSION=5 - QT_VERSION=5 - QT_CFLAGS="${Qt5_CFLAGS} -fPIC" - QT_LIBS="${Qt5_LIBS}${Qt5_LDFLAGS}" - ],[ : ]) -fi - -if test "${WANT_QT_VERSION}" = detect -o "${WANT_QT_VERSION}" = 6; then - PKG_CHECK_MODULES(Qt6, [Qt6Core Qt6Gui Qt6Sql Qt6Help], [ - QT_MOC="`pkg-config --variable=moc_location QtCore`" - QT_UIC="`pkg-config --variable=uic_location QtCore`" - if test -n "${QT_MOC}"; then - _QT_HOST_BINS="`dirname ${QT_MOC}`" - fi - if test "$HOST" = "DARWIN"; then - FRAMEDIR=`pkg-config --variable=libdir QtCore` - Qt6_CFLAGS="$Qt4_CFLAGS -F${FRAMEDIR} -I${FRAMEDIR}/QtCore.framework/Headers -I${FRAMEDIR}/QtGui.framework/Headers -I${FRAMEDIR}/QtSql.framework/Headers" - Qt6_LDFLAGS=" -Xlinker -rpath -Xlinker ${FRAMEDIR}" - fi - WANT_QT_VERSION=6 - QT_VERSION=6 - QT_CFLAGS="${Qt6_CFLAGS}" - QT_LIBS="${Qt6_LIBS}${Qt6_LDFLAGS}" - ],[ : ]) -fi - -if test -z "${QT_VERSION}"; then - if test -z "$DARWIN"; then - QT_LIBS=" -lQtCore -lQtGui " - else - _QT_HOST_BINS="${_QTDIR}/bin" - QT_MOC="${_QT_HOST_BINS}/moc" - QT_UIC="${_QT_HOST_BINS}/uic" - FRAMEDIR=${_QTDIR}/lib - QT_LIBS=" -framework QtGui -framework QtCore -framework QtWidgets -framework QtSql -Xlinker -rpath -Xlinker ${FRAMEDIR}" - QT_CFLAGS="-std=c++11 -F${FRAMEDIR} -I${FRAMEDIR}/QtCore.framework/Headers -I${FRAMEDIR}/QtGui.framework/Headers -I${FRAMEDIR}/QtCore.framework/Headers -I${FRAMEDIR}/QtWidgets.framework/Headers -I${FRAMEDIR}/QtSql.framework/Headers" - fi - AC_MSG_WARN([Qt pkg-config failed, using fallback defaults (${QT_LIBS})]); -fi - -QT_DIR="$_QTDIR" -# Delete trailing d (Debug) from Qt libs (@<:@ == [) (@:>@ == ]) -QT_LIBS="$(echo " $QT_LIBS " | sed 's/-lQt\(@<:@^ @:>@*\)d\s/-lQt\1 /g')" - -AC_SUBST([QT_CFLAGS]) -AC_SUBST([QT_LIBS]) -AC_SUBST([QT_DIR]) - -# Setup MOC UIC RCC LRELEASE LCONVERT with absolute PATH -if test ! -x "${QT_MOC}"; then - QT_MOC="`which moc-qt${QT_VERSION} || which moc`" -fi -if test ! -x "${QT_UIC}"; then - QT_UIC="`which uic-qt${QT_VERSION} || which uic`" -fi - -QT_BIN_PATH="${_QT_HOST_BINS}:$PATH" - -AC_PATH_PROG([QT_LRELEASEQT], [lrelease-qt${QT_VERSION}], , [$QT_BIN_PATH]) -if test "x${QT_LRELEASEQT}" = "x"; then - AC_PATH_PROG([QT_LRELEASE], [lrelease], [lrelease], [$QT_BIN_PATH]) -else - QT_LRELEASE="$QT_LRELEASEQT" -fi - -AC_PATH_PROG([QT_LCONVERTQT], [lconvert-qt${QT_VERSION}], , [$QT_BIN_PATH]) -if test "x${QT_LCONVERTQT}" = "x"; then - AC_PATH_PROG([QT_LCONVERT], [lconvert], [lconvert], [$QT_BIN_PATH]) -else - QT_LCONVERT="$QT_LCONVERTQT" -fi - -AC_PATH_PROG([QT_RCCQT], [rcc-qt${QT_VERSION}], , [$QT_BIN_PATH]) -if test "x${QT_RCCQT}" = "x"; then - AC_PATH_PROG([QT_RCC], [rcc], [rcc], [$QT_BIN_PATH]) -else - QT_RCC="$QT_RCCQT" -fi - -AC_PATH_PROG([QT_HELPCOLL], [qcollectiongenerator${QT_VERSION}], , [$QT_BIN_PATH]) -if test "x${QT_HELPCOLL}" = "x"; then - AC_PATH_PROG([QT_HELPCOLL], [qcollectiongenerator], [qcollectiongenerator], [$QT_BIN_PATH]) -else - QT_HELPCOLL="$QT_HELPCOLL" -fi - - -if test "$HOST" = "DARWIN"; then - AC_PATH_PROG([MACDEPLOYQT], [macdeployqt], [macdeployqt], [$QT_BIN_PATH]) -fi - -AC_SUBST([QT_MOC]) -AC_SUBST([QT_UIC]) -AC_SUBST([QT_LRELEASE]) -AC_SUBST([QT_LCONVERT]) -AC_SUBST([QT_RCC]) - -# The dyn_loader library libltdl -################################## -AC_CHECK_LIB(ltdl, lt_dlopen, , [ - echo "ERROR: Library 'ltdl' with symbol 'lt_dlopen' not found." - echo " Try installing the package 'libltdl-dev' or 'libtool'" - exit 1 -]) -AC_CHECK_HEADER(ltdl.h, , [ - echo "ERROR: Header 'ltdl.h' not found." - echo " Try installing the package 'libltdl-dev' or 'libtool'" - exit 1 -]) - -# Finally collect the compiler flags -##################################### -CXXFLAGS="${OPENSSL_CFLAGS} ${QT_CFLAGS} ${CXXFLAGS}" -LIBS="${OPENSSL_LIBS} ${QT_LIBS} -lstdc++ ${LIBS}" - -# Just give it a try ..... -########################## - -XCA_COMPILE_TEST() - -AX_CHECK_GNU_MAKE() - -# linuxdoc application detection -################################## -AC_CHECK_PROGS([DOCTOOL], [sphinx-build]) -AC_SUBST([DOCTOOL]) - -AC_ARG_ENABLE([doc], - AS_HELP_STRING([--disable-doc], [Disable documentation installation]), - , - [enable_doc=yes]) -if test "${enable_doc}" = "yes" && - test "${DOCTOOL}" && - test "${QT_HELPCOLL}" -then - ENABLE_DOC= -else - ENABLE_DOC='\#' -fi -AC_SUBST([ENABLE_DOC]) - -# Setup done. Write local.h and Local.mak -############################################ -AC_CONFIG_HEADERS(local.h) -AC_CONFIG_LINKS(Makefile:Makefile) -AC_CONFIG_FILES([Local.mak misc/Info.plist misc/variables.wxi doc/conf.py]) - -AC_OUTPUT diff --git a/doc/Makefile b/doc/Makefile deleted file mode 100644 index f5b6ff40..00000000 --- a/doc/Makefile +++ /dev/null @@ -1,71 +0,0 @@ -ifeq ($(TOPDIR),) -TOPDIR=.. -BUILD=.. -endif - -DELFILES=xca*.html xca.1.gz conf.py -RST_FILES=arguments common-actions object-ids smartcard \ - certificate-input database options step-by-step \ - certificates index privatekey template changelog \ - introduction requests commandline miscellaneous \ - revocationlist - -SPHINX_FILES=$(patsubst %,sphinx/%.rst,$(RST_FILES)) - -.build-stamp doc: xca.1.gz html/index.html qthelp/xca.qhc changelog.html -qthelpfiles=qthelp/*.html qthelp/xca.qhc qthelp/xca.qch -.install-stamp: doc - -include $(TOPDIR)/Rules.mak - -%.1.gz: %.1 - @$(PRINT) " MAN [$(BASENAME)] $@" - gzip -9 <$^ >$@ - -xca.1: xca.1.head xca.1.options xca.1.tail - cat $^ > $@ - -html/index.html: sphinx/conf.py - @$(PRINT) " HTML [$(BASENAME)] $@" - $(ENABLE_DOC)$(DOCTOOL) -b html $(DOCTOOLFLAGS) sphinx html - mkdir -p html && touch $@ - -qthelp/xca.qhcp: sphinx/conf.py - @$(PRINT) " QTHELP [$(BASENAME)] $@" - $(ENABLE_DOC)$(DOCTOOL) -b qthelp $(DOCTOOLFLAGS) sphinx qthelp - mkdir -p qthelp && touch $@ - -qthelp/xca.qhc: qthelp/xca.qhcp - @$(PRINT) " QTHGEN [$(BASENAME)] $@" - $(ENABLE_DOC)$(HELPCOLL) $< -o $@ - -install: $(doc) - $(ENABLE_DOC)install -m 755 -d $(DESTDIR)$(htmldir) - $(ENABLE_DOC)install -m 644 $(qthelpfiles) $(DESTDIR)$(htmldir) - install -m 755 -d $(DESTDIR)$(mandir)/man1 - install -m 644 *.1.gz $(DESTDIR)/$(mandir)/man1 - -app: $(doc) - mkdir -p $(APPDIR)/Resources - $(ENABLE_DOC)install -m 644 $(qthelpfiles) $(APPDIR)/Resources - -sphinx/conf.py: conf.py sphinx/database_schema.sql sphinx/changelog sphinx/COPYRIGHT sphinx/_static/bigcert.png $(SPHINX_FILES) - mkdir -p sphinx - cp $< $@ -sphinx/database_schema.sql: ../widgets/database_schema.cpp - mkdir -p sphinx - sed 's/< $@ -sphinx/changelog: ../changelog - mkdir -p sphinx - cp $^ $@ -sphinx/COPYRIGHT: ../COPYRIGHT - @mkdir -p sphinx - cp $^ $@ -sphinx/_static/bigcert.png: ../img/bigcert.png - @mkdir -p sphinx/_static - cp $^ $@ -sphinx/%.rst: rst/%.rst - @mkdir -p sphinx - cp $^ $@ -changelog.html: ../changelog - sed 's/&/\&/g; s//\>/g; s#^xca \([^ ]*\) *\(.*\)#

xca \1 \2