Files
sqlitebrowser/CMakeLists.txt
Martin Kleusberg c776af9880 dbhub: Add view of all checked out databases
The Remote dock shows a list of all databases on dbhub.io. Double
clicking a database downloads and opens it. If the database has already
been downloaded before, the local file is simply opened. This only works
for a small number of databases: To open the database you want, you just
search for it and double click it. But for a larger number of databases
on dbhub.io this does not perform very well since finding a database can
be very difficult. Because of this this commit adds a new view which
shows all checked out databases, i.e. those databases which are already
downloaded. Double clicking one of these opens it without trying to
update it first.

In the future this might also provide a place to add extra options like
deleting local copies.
2020-07-10 18:19:43 +02:00

574 lines
16 KiB
CMake

project(sqlitebrowser)
cmake_minimum_required(VERSION 2.8.12.2)
# BUILD_VERSION is the current date in YYYYMMDD format. It is only
# used by the nightly version to add the date of the build.
string(TIMESTAMP BUILD_VERSION "%Y%m%d")
# Choose between building a stable version or nightly (the default), depending
# on whether '-DBUILD_STABLE_VERSION=1' is passed on the command line or not.
option(BUILD_STABLE_VERSION "Don't build the stable version by default" OFF)
if(NOT BUILD_STABLE_VERSION)
add_definitions(-DBUILD_VERSION=${BUILD_VERSION})
endif()
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}")
OPTION(ENABLE_TESTING "Enable the unit tests" OFF)
OPTION(FORCE_INTERNAL_QSCINTILLA "Don't use the distribution's QScintilla library even if there is one" OFF)
OPTION(FORCE_INTERNAL_QCUSTOMPLOT "Don't use distribution's QCustomPlot even if available" ON)
OPTION(FORCE_INTERNAL_QHEXEDIT "Don't use distribution's QHexEdit even if available" ON)
OPTION(ALL_WARNINGS "Enable some useful warning flags" OFF)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif()
add_definitions(-std=c++11)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# Fix behavior of CMAKE_CXX_STANDARD when targeting macOS.
if (POLICY CMP0025)
cmake_policy(SET CMP0025 NEW)
endif ()
# Fix warning of AUTOMOC behavior
if (POLICY CMP0071)
# Use of AUTOMOC is set to old for now for consistency.
# Affects of 'new' behavior is as yet to be determined.
# https://cmake.org/cmake/help/latest/policy/CMP0071.html
cmake_policy(SET CMP0071 OLD)
endif()
if(WIN32 AND MSVC)
if(CMAKE_CL_64)
# Paths for 64-bit windows builds
set(OPENSSL_PATH "C:/dev/OpenSSL-Win64" CACHE PATH "OpenSSL Path")
set(QT5_PATH "C:/dev/Qt/5.12.8/5.12.8/msvc2017_64" CACHE PATH "Qt5 Path")
# Choose between SQLCipher or SQLite, depending whether
# -Dsqlcipher=1 is passed on the command line
if(sqlcipher)
set(SQLITE3_PATH "C:/git_repos/SQLCipher-Win64" CACHE PATH "SQLCipher Path")
else()
set(SQLITE3_PATH "C:/dev/SQLite-Win64" CACHE PATH "SQLite Path")
endif()
else()
# Paths for 32-bit windows builds
set(OPENSSL_PATH "C:/dev/OpenSSL-Win32" CACHE PATH "OpenSSL Path")
set(QT5_PATH "C:/dev/Qt/5.12.8/5.12.8/msvc2017" CACHE PATH "Qt5 Path")
# Choose between SQLCipher or SQLite, depending whether
# -Dsqlcipher=1 is passed on the command line
if(sqlcipher)
set(SQLITE3_PATH "C:/git_repos/SQLCipher-Win32" CACHE PATH "SQLCipher Path")
else()
set(SQLITE3_PATH "C:/dev/SQLite-Win32" CACHE PATH "SQLite Path")
endif()
endif()
set(CMAKE_PREFIX_PATH "${QT5_PATH};${SQLITE3_PATH}")
endif()
find_package(Qt5 REQUIRED COMPONENTS Concurrent Gui LinguistTools Network PrintSupport Test Widgets Xml)
if(NOT FORCE_INTERNAL_QSCINTILLA)
find_package(QScintilla 2.8.10 QUIET)
endif()
if(FORCE_INTERNAL_QCUSTOMPLOT)
set(QCustomPlot_FOUND FALSE)
else()
find_package(QCustomPlot)
endif()
if(FORCE_INTERNAL_QHEXEDIT)
set(QHexEdit_FOUND FALSE)
else()
find_package(QHexEdit)
endif()
set(JSON_DIR libs/json)
if(NOT QSCINTILLA_FOUND)
set(QSCINTILLA_DIR libs/qscintilla/Qt4Qt5)
add_subdirectory(${QSCINTILLA_DIR})
endif()
if(NOT QHexEdit_FOUND)
set(QHexEdit_DIR libs/qhexedit)
set(QHexEdit_INCL_DIR ${QHexEdit_DIR}/src)
add_subdirectory(${QHexEdit_DIR})
endif()
add_subdirectory(${JSON_DIR})
if(NOT QCustomPlot_FOUND)
set(QCustomPlot_DIR libs/qcustomplot-source)
add_subdirectory(${QCustomPlot_DIR})
endif()
set(CMAKE_AUTOMOC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
if(ENABLE_TESTING)
enable_testing()
endif()
set(SQLB_HDR
src/version.h
src/sql/sqlitetypes.h
src/sql/Query.h
src/sql/ObjectIdentifier.h
src/csvparser.h
src/sqlite.h
src/Data.h
src/IconCache.h
src/sql/parser/ParserDriver.h
src/sql/parser/sqlite3_lexer.h
src/sql/parser/sqlite3_location.h
src/sql/parser/sqlite3_parser.hpp
)
set(SQLB_MOC_HDR
src/sqlitedb.h
src/AboutDialog.h
src/EditIndexDialog.h
src/EditDialog.h
src/EditTableDialog.h
src/AddRecordDialog.h
src/ExportDataDialog.h
src/ExtendedTableWidget.h
src/FilterTableHeader.h
src/ImportCsvDialog.h
src/MainWindow.h
src/Settings.h
src/PreferencesDialog.h
src/SqlExecutionArea.h
src/VacuumDialog.h
src/sqlitetablemodel.h
src/RowLoader.h
src/RowCache.h
src/sqltextedit.h
src/docktextedit.h
src/DbStructureModel.h
src/Application.h
src/CipherDialog.h
src/ExportSqlDialog.h
src/SqlUiLexer.h
src/FileDialog.h
src/ColumnDisplayFormatDialog.h
src/FilterLineEdit.h
src/RemoteDatabase.h
src/ForeignKeyEditorDelegate.h
src/PlotDock.h
src/RemoteDock.h
src/RemoteModel.h
src/RemotePushDialog.h
src/FindReplaceDialog.h
src/ExtendedScintilla.h
src/FileExtensionManager.h
src/CondFormatManager.h
src/CipherSettings.h
src/DotenvFormat.h
src/Palette.h
src/CondFormat.h
src/RunSql.h
src/ProxyDialog.h
src/SelectItemsPopup.h
src/TableBrowser.h
src/ImageViewer.h
src/RemoteLocalFilesModel.h
)
set(SQLB_SRC
src/AboutDialog.cpp
src/EditIndexDialog.cpp
src/EditDialog.cpp
src/EditTableDialog.cpp
src/AddRecordDialog.cpp
src/ExportDataDialog.cpp
src/ExtendedTableWidget.cpp
src/FilterTableHeader.cpp
src/ImportCsvDialog.cpp
src/MainWindow.cpp
src/Settings.cpp
src/PreferencesDialog.cpp
src/SqlExecutionArea.cpp
src/VacuumDialog.cpp
src/sqlitedb.cpp
src/sqlitetablemodel.cpp
src/RowLoader.cpp
src/sql/sqlitetypes.cpp
src/sql/Query.cpp
src/sql/ObjectIdentifier.cpp
src/sqltextedit.cpp
src/docktextedit.cpp
src/csvparser.cpp
src/DbStructureModel.cpp
src/main.cpp
src/Application.cpp
src/CipherDialog.cpp
src/ExportSqlDialog.cpp
src/SqlUiLexer.cpp
src/FileDialog.cpp
src/ColumnDisplayFormatDialog.cpp
src/FilterLineEdit.cpp
src/RemoteDatabase.cpp
src/ForeignKeyEditorDelegate.cpp
src/PlotDock.cpp
src/RemoteDock.cpp
src/RemoteModel.cpp
src/RemotePushDialog.cpp
src/FindReplaceDialog.cpp
src/ExtendedScintilla.cpp
src/FileExtensionManager.cpp
src/CondFormatManager.cpp
src/Data.cpp
src/CipherSettings.cpp
src/DotenvFormat.cpp
src/Palette.cpp
src/CondFormat.cpp
src/RunSql.cpp
src/ProxyDialog.cpp
src/IconCache.cpp
src/SelectItemsPopup.cpp
src/TableBrowser.cpp
src/sql/parser/ParserDriver.cpp
src/sql/parser/sqlite3_lexer.cpp
src/sql/parser/sqlite3_parser.cpp
src/ImageViewer.cpp
src/RemoteLocalFilesModel.cpp
)
set(SQLB_FORMS
src/AboutDialog.ui
src/EditIndexDialog.ui
src/EditDialog.ui
src/EditTableDialog.ui
src/AddRecordDialog.ui
src/ExportDataDialog.ui
src/ImportCsvDialog.ui
src/MainWindow.ui
src/PreferencesDialog.ui
src/SqlExecutionArea.ui
src/VacuumDialog.ui
src/CipherDialog.ui
src/ExportSqlDialog.ui
src/ColumnDisplayFormatDialog.ui
src/PlotDock.ui
src/RemoteDock.ui
src/RemotePushDialog.ui
src/FindReplaceDialog.ui
src/FileExtensionManager.ui
src/CondFormatManager.ui
src/ProxyDialog.ui
src/SelectItemsPopup.ui
src/TableBrowser.ui
src/ImageViewer.ui
)
set(SQLB_RESOURCES
src/icons/icons.qrc
src/translations/flags/flags.qrc
src/translations/translations.qrc
src/certs/CaCerts.qrc
src/qdarkstyle/style.qrc
)
set(SQLB_MISC
src/sql/parser/sqlite3_parser.yy
src/sql/parser/sqlite3_lexer.ll
)
# Translation files
set(SQLB_TSS
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_ar_SA.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_cs.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_zh.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_zh_TW.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_de.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_es_ES.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_fr.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_ru.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_pl.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_pt_BR.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_en_GB.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_ko_KR.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_tr.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_uk_UA.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_it.ts"
"${CMAKE_SOURCE_DIR}/src/translations/sqlb_ja.ts"
)
# Windows image format plugin files
set(WIN_IMG_PLUGINS
"${QT5_PATH}/plugins/imageformats/qgif.dll"
"${QT5_PATH}/plugins/imageformats/qicns.dll"
"${QT5_PATH}/plugins/imageformats/qico.dll"
"${QT5_PATH}/plugins/imageformats/qjpeg.dll"
"${QT5_PATH}/plugins/imageformats/qsvg.dll"
"${QT5_PATH}/plugins/imageformats/qtga.dll"
"${QT5_PATH}/plugins/imageformats/qtiff.dll"
"${QT5_PATH}/plugins/imageformats/qwbmp.dll"
"${QT5_PATH}/plugins/imageformats/qwebp.dll"
)
set(WIN_IMG_PLUGINS_DEBUG
"${QT5_PATH}/plugins/imageformats/qgifd.dll"
"${QT5_PATH}/plugins/imageformats/qicnsd.dll"
"${QT5_PATH}/plugins/imageformats/qicod.dll"
"${QT5_PATH}/plugins/imageformats/qjpegd.dll"
"${QT5_PATH}/plugins/imageformats/qsvgd.dll"
"${QT5_PATH}/plugins/imageformats/qtgad.dll"
"${QT5_PATH}/plugins/imageformats/qtiffd.dll"
"${QT5_PATH}/plugins/imageformats/qwbmpd.dll"
"${QT5_PATH}/plugins/imageformats/qwebpd.dll"
)
# License files
set(LICENSE_FILES
LICENSE
LICENSE-PLUGINS
)
qt5_wrap_ui(SQLB_FORM_HDR ${SQLB_FORMS})
if(SQLB_TSS)
# add translations
foreach(SQLB_TS ${SQLB_TSS})
SET_SOURCE_FILES_PROPERTIES("${SQLB_TS}" PROPERTIES OUTPUT_LOCATION "${CMAKE_SOURCE_DIR}/src/translations")
endforeach(SQLB_TS ${SQLB_TSS})
qt5_add_translation(SQLB_QMS ${SQLB_TSS})
endif(SQLB_TSS)
qt5_add_resources(SQLB_RESOURCES_RCC ${SQLB_RESOURCES})
#icon and correct libs/subsystem for windows
if(WIN32)
#enable version check for windows
add_definitions(-DCHECKNEWVERSION)
IF( MINGW )
# resource compilation for MinGW
ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/sqlbicon.o"
COMMAND windres "-I${CMAKE_CURRENT_SOURCE_DIR}" "-i${CMAKE_CURRENT_SOURCE_DIR}/src/winapp.rc" -o "${CMAKE_CURRENT_BINARY_DIR}/sqlbicon.o" VERBATIM)
set(SQLB_SRC ${SQLB_SRC} "${CMAKE_CURRENT_BINARY_DIR}/sqlbicon.o")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-subsystem,windows")
set(WIN32_STATIC_LINK -Wl,-Bstatic -lssl -lcrypto -lws2_32)
set(ADDITIONAL_LIBS lzma)
ELSE( MINGW )
set(SQLB_SRC ${SQLB_SRC} "${CMAKE_CURRENT_SOURCE_DIR}/src/winapp.rc")
ENDIF( MINGW )
else()
set(LPTHREAD pthread)
endif(WIN32)
#enable version check for MacOS
if(APPLE)
add_definitions(-DCHECKNEWVERSION)
endif(APPLE)
# SQLCipher option
if(sqlcipher)
add_definitions(-DENABLE_SQLCIPHER)
set(LIBSQLITE_NAME sqlcipher)
else(sqlcipher)
set(LIBSQLITE_NAME sqlite3)
endif(sqlcipher)
# add extra library path for MacOS and FreeBSD
set(EXTRAPATH APPLE OR ${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
if(EXTRAPATH)
find_library(LIBSQLITE ${LIBSQLITE_NAME} HINTS /usr/local/lib /usr/local/opt/sqlite/lib)
set(ADDITIONAL_INCLUDE_PATHS /usr/local/include /usr/local/opt/sqlite/include)
else(EXTRAPATH)
find_library(LIBSQLITE ${LIBSQLITE_NAME})
endif(EXTRAPATH)
if(WIN32 AND MSVC)
find_path(SQLITE3_INCLUDE_DIR sqlite3.h)
if(sqlcipher)
find_file(SQLITE3_DLL sqlcipher.dll)
else(sqlcipher)
find_file(SQLITE3_DLL sqlite3.dll)
endif(sqlcipher)
include_directories(${SQLITE3_INCLUDE_DIR})
endif()
include_directories(
"${CMAKE_CURRENT_BINARY_DIR}"
${JSON_DIR}
${ADDITIONAL_INCLUDE_PATHS}
src)
if(QHexEdit_FOUND)
include_directories(${QHexEdit_INCLUDE_DIR})
else()
include_directories(${QHexEdit_INCL_DIR})
endif()
if(QCustomPlot_FOUND)
include_directories(${QCustomPlot_INCLUDE_DIR})
else()
include_directories(${QCustomPlot_DIR})
endif()
if(QSCINTILLA_FOUND)
include_directories(${QSCINTILLA_INCLUDE_DIR})
else()
include_directories(${QSCINTILLA_DIR})
endif()
add_executable(${PROJECT_NAME}
${SQLB_HDR}
${SQLB_SRC}
${SQLB_FORM_HDR}
${SQLB_MOC}
${SQLB_RESOURCES_RCC}
${SQLB_MISC})
# Warnings
if (ALL_WARNINGS AND CMAKE_COMPILER_IS_GNUCC)
target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Wunused -Woverloaded-virtual -Wpedantic -Wconversion -Wsign-conversion)
target_compile_options(${PROJECT_NAME} PRIVATE -Wdouble-promotion -Wformat=2 -Wlogical-op -Wuseless-cast)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 7.0)
target_compile_options(${PROJECT_NAME} PRIVATE -Wnull-dereference -Wduplicated-cond -Wduplicated-branches)
endif()
endif()
if(NOT QHexEdit_FOUND)
add_dependencies(${PROJECT_NAME} qhexedit)
endif()
if(NOT QCustomPlot_FOUND)
add_dependencies(${PROJECT_NAME} qcustomplot)
endif()
if(NOT QSCINTILLA_FOUND)
add_dependencies(${PROJECT_NAME} qscintilla2)
endif()
if(NOT QHexEdit_FOUND)
link_directories("${CMAKE_CURRENT_BINARY_DIR}/${QHexEdit_DIR}")
endif()
if(NOT QCustomPlot_FOUND)
link_directories("${CMAKE_CURRENT_BINARY_DIR}/${QCustomPlot_DIR}")
endif()
if(NOT QSCINTILLA_FOUND)
link_directories("${CMAKE_CURRENT_BINARY_DIR}/${QSCINTILLA_DIR}")
endif()
set(QT_LIBS Qt5::Gui Qt5::Test Qt5::PrintSupport Qt5::Widgets Qt5::Network Qt5::Concurrent Qt5::Xml)
target_link_libraries(${PROJECT_NAME}
${LPTHREAD}
${QT_LIBS}
${WIN32_STATIC_LINK}
${LIBSQLITE}
${ADDITIONAL_LIBS})
if(QHexEdit_FOUND)
target_link_libraries(${PROJECT_NAME} ${QHexEdit_LIBRARIES})
else()
target_link_libraries(${PROJECT_NAME} qhexedit)
endif()
if(QCustomPlot_FOUND)
target_link_libraries(${PROJECT_NAME} ${QCustomPlot_LIBRARIES})
else()
target_link_libraries(${PROJECT_NAME} qcustomplot)
endif()
if(QSCINTILLA_FOUND)
target_link_libraries(${PROJECT_NAME} ${QSCINTILLA_LIBRARIES})
else()
target_link_libraries(${PROJECT_NAME} qscintilla2)
endif()
if(WIN32 AND MSVC)
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "DB Browser for SQLite")
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_DEFINITIONS_DEBUG "_CONSOLE")
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE")
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_DEFINITIONS_RELWITHDEBINFO "_CONSOLE")
if(CMAKE_CL_64)
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS,5.02 /ENTRY:mainCRTStartup")
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:WINDOWS,5.02")
else()
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS,5.01 /ENTRY:mainCRTStartup")
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:WINDOWS,5.01")
endif()
endif()
if(NOT WIN32)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib)
endif()
if(ENABLE_TESTING)
add_subdirectory(src/tests)
endif()
if(UNIX)
install(FILES src/icons/${PROJECT_NAME}.png
DESTINATION share/icons/hicolor/256x256/apps/)
install(FILES distri/${PROJECT_NAME}.desktop
DESTINATION share/applications/)
install(FILES distri/${PROJECT_NAME}.desktop.appdata.xml
DESTINATION share/metainfo/)
endif(UNIX)
if(WIN32 AND MSVC)
install(TARGETS ${PROJECT_NAME}
RUNTIME DESTINATION "/"
LIBRARY DESTINATION lib)
set(QT5_BIN_PATH ${QT5_PATH}/bin)
# The Qt5 Debug configuration library files have a 'd' postfix
install(FILES
${QT5_BIN_PATH}/Qt5Cored.dll
${QT5_BIN_PATH}/Qt5Guid.dll
${QT5_BIN_PATH}/Qt5Networkd.dll
${QT5_BIN_PATH}/Qt5PrintSupportd.dll
${QT5_BIN_PATH}/Qt5Widgetsd.dll
${QT5_BIN_PATH}/Qt5Concurrentd.dll
DESTINATION "/"
CONFIGURATIONS Debug)
# The Qt5 Release configuration files don't have a postfix
install(FILES
${QT5_BIN_PATH}/Qt5Core.dll
${QT5_BIN_PATH}/Qt5Gui.dll
${QT5_BIN_PATH}/Qt5Network.dll
${QT5_BIN_PATH}/Qt5PrintSupport.dll
${QT5_BIN_PATH}/Qt5Widgets.dll
${QT5_BIN_PATH}/Qt5Concurrent.dll
DESTINATION "/"
CONFIGURATIONS Release)
# The files below are common to all configurations
install(FILES
${SQLITE3_DLL}
${OPENSSL_PATH}/libeay32.dll
${OPENSSL_PATH}/ssleay32.dll
DESTINATION "/")
install(FILES
${QT5_PATH}/plugins/platforms/qwindows.dll
DESTINATION platforms)
# The XML dll
install(FILES
"${QT5_PATH}/bin/Qt5Xmld.dll"
DESTINATION "/"
CONFIGURATIONS Debug)
install(FILES
"${QT5_PATH}/bin/Qt5Xml.dll"
DESTINATION "/"
CONFIGURATIONS Release)
# The image format plugins
install(FILES
${WIN_IMG_PLUGINS_DEBUG}
DESTINATION imageformats
CONFIGURATIONS Debug)
install(FILES
${WIN_IMG_PLUGINS}
DESTINATION imageformats
CONFIGURATIONS Release)
# The license files
install(FILES
${LICENSE_FILES}
DESTINATION licenses)
# The batch file launcher
install(FILES
distri/winlaunch.bat
DESTINATION "/")
endif()