QT += core gui widgets opengl network xml concurrent
QT *= printsupport
TEMPLATE = app

lessThan(QT_MAJOR_VERSION, 5) {
	error("LeoCAD requires Qt5.4 or later.")
}

equals(QT_MAJOR_VERSION, 5):lessThan(QT_MINOR_VERSION, 4) {
	error("LeoCAD requires Qt5.4 or later.")
}

greaterThan(QT_MAJOR_VERSION, 5) {
	QT += openglwidgets
	win32-msvc* {
		QMAKE_CXXFLAGS += /std:c++17
	}
}

qtHaveModule(gamepad) {
	QT += gamepad
	DEFINES += LC_ENABLE_GAMEPAD
}

INCLUDEPATH += qt common
CONFIG += precompile_header incremental c++17 force_debug_info

win32 {
	RC_ICONS = resources/leocad.ico
	VERSION = 25.9.0.0
	QMAKE_TARGET_COMPANY = LeoCAD Software
	QMAKE_TARGET_DESCRIPTION = LeoCAD
	QMAKE_TARGET_COPYRIGHT = "Copyright (C) LeoCAD.org"
	QMAKE_TARGET_PRODUCT = LeoCAD
	RC_CODEPAGE = 1252
	RC_LANG = 0x0409

	LIBS += -lwininet
}
win32-msvc* {
	QMAKE_CXXFLAGS_WARN_ON += /W4 -wd4100
	QMAKE_CXXFLAGS *= /MP
	PRECOMPILED_HEADER = common/lc_global.h
	PRECOMPILED_SOURCE = common/lc_global.cpp
	DEFINES += _CRT_SECURE_NO_WARNINGS _CRT_SECURE_NO_DEPRECATE=1 _CRT_NONSTDC_NO_WARNINGS=1
	INCLUDEPATH += $$[QT_INSTALL_HEADERS]/QtZlib
	QMAKE_LFLAGS += /INCREMENTAL
	LIBS += -ladvapi32 -lshell32 -lopengl32 -luser32
} else {
	PRECOMPILED_HEADER = common/lc_global.h
	LIBS += -lz
	QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter
}

isEmpty(QMAKE_LRELEASE) {
	win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe
	else:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
	unix {
		!exists($$QMAKE_LRELEASE) { QMAKE_LRELEASE = lrelease-qt4 }
	} else {
		!exists($$QMAKE_LRELEASE) { QMAKE_LRELEASE = lrelease }
	}
}

TRAVIS_TAG = $$(TRAVIS_TAG)
TRAVIS_COMMIT = $$(TRAVIS_COMMIT)
!isEmpty(TRAVIS_COMMIT) {
	isEmpty(TRAVIS_TAG) {
		DEFINES += "LC_CONTINUOUS_BUILD=$$system(git rev-parse --short HEAD)"
	}
}

APPVEYOR_REPO_TAG = $$(APPVEYOR_REPO_TAG)
APPVEYOR_REPO_COMMIT = $$(APPVEYOR_REPO_COMMIT)
!isEmpty(APPVEYOR_REPO_COMMIT) {
	isEmpty(APPVEYOR_REPO_TAG) {
		DEFINES += "LC_CONTINUOUS_BUILD=$$system(git rev-parse --short HEAD)"
		VERSION = 0.0.0.1
		QMAKE_TARGET_DESCRIPTION = "LeoCAD Continuous Build $$system(git rev-parse --short HEAD)"
	}
}

TSFILES = resources/leocad_cs.ts resources/leocad_de.ts resources/leocad_es.ts resources/leocad_fr.ts resources/leocad_pt.ts resources/leocad_ru.ts resources/leocad_uk.ts resources/leocad_zh_CN.ts
lrelease.input = TSFILES
lrelease.output = ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.qm
lrelease.commands = $$QMAKE_LRELEASE -silent ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_PATH}/${QMAKE_FILE_BASE}.qm
lrelease.CONFIG += no_link target_predeps
QMAKE_EXTRA_COMPILERS += lrelease

system($$QMAKE_LRELEASE -silent $$TSFILES)

unix:!macx {
	TARGET = leocad
} else {
	TARGET = LeoCAD
}

CONFIG(debug, debug|release) {
	DESTDIR = build/debug
} else {
	DESTDIR = build/release
}

OBJECTS_DIR = $$DESTDIR/.obj
MOC_DIR = $$DESTDIR/.moc
RCC_DIR = $$DESTDIR/.qrc
UI_DIR = $$DESTDIR/.ui

unix:!macx {
	isEmpty(INSTALL_PREFIX):INSTALL_PREFIX = /usr
	isEmpty(BIN_DIR):BIN_DIR = $$INSTALL_PREFIX/bin
	isEmpty(DOCS_DIR):DOCS_DIR = $$INSTALL_PREFIX/share/doc/leocad
	isEmpty(ICON_DIR):ICON_DIR = $$INSTALL_PREFIX/share/icons
	isEmpty(MAN_DIR):MAN_DIR = $$INSTALL_PREFIX/share/man/man1
	isEmpty(DESKTOP_DIR):DESKTOP_DIR = $$INSTALL_PREFIX/share/applications
	isEmpty(MIME_DIR):MIME_DIR = $$INSTALL_PREFIX/share/mime/packages
	isEmpty(APPDATA_DIR):APPDATA_DIR = $$INSTALL_PREFIX/share/metainfo

	target.path = $$BIN_DIR
	docs.path = $$DOCS_DIR
	docs.files = docs/README.md docs/CREDITS.txt docs/COPYING.txt
	man.path = $$MAN_DIR
	man.files = docs/leocad.1
	desktop.path = $$DESKTOP_DIR
	desktop.files = qt/leocad.desktop
	icons.path = $$ICON_DIR/hicolor
	icons.files += tools/icon/128x128
	icons.files += tools/icon/16x16
	icons.files += tools/icon/24x24
	icons.files += tools/icon/256x256
	icons.files += tools/icon/32x32
	icons.files += tools/icon/48x48
	icons.files += tools/icon/512x512
	icons.files += tools/icon/64x64
	icons.files += tools/icon/scalable
	mime.path = $$MIME_DIR
	mime.files = qt/leocad.xml
	appdata.path = $$APPDATA_DIR
	appdata.files = tools/setup/leocad.appdata.xml

	INSTALLS += target docs man desktop icons mime appdata

	!isEmpty(DISABLE_UPDATE_CHECK) {
		DEFINES += LC_DISABLE_UPDATE_CHECK=$$DISABLE_UPDATE_CHECK
	}

	!isEmpty(LDRAW_LIBRARY_PATH) {
		DEFINES += LC_LDRAW_LIBRARY_PATH=\\\"$$LDRAW_LIBRARY_PATH\\\"
	}
}

macx {
	ICON = resources/leocad.icns
	QMAKE_INFO_PLIST = qt/Info.plist

	document_icon.files += $$_PRO_FILE_PWD_/resources/leocad_document.icns
	document_icon.path = Contents/Resources
	library.files += $$_PRO_FILE_PWD_/library.bin
	library.path = Contents/Resources
	povray.files += $$_PRO_FILE_PWD_/povray
	povray.path = Contents/MacOS

	QMAKE_BUNDLE_DATA += document_icon library povray
	DEFINES += LC_DISABLE_UPDATE_CHECK=1
}

SOURCES += \
	common/camera.cpp \
	common/group.cpp \
	common/image.cpp \
	common/lc_modelhistory.cpp \
	common/light.cpp \
	common/minifig.cpp \
	common/object.cpp \
	common/piece.cpp \
	common/pieceinf.cpp \
	common/project.cpp \
	common/texfont.cpp \
	common/lc_aboutdialog.cpp \
	common/lc_application.cpp \
	common/lc_arraydialog.cpp \
	common/lc_blenderpreferences.cpp \
	common/lc_bricklink.cpp \
	common/lc_category.cpp \
	common/lc_categorydialog.cpp \
	common/lc_collapsiblewidget.cpp \
	common/lc_colorlist.cpp \
	common/lc_colorpicker.cpp \
	common/lc_colors.cpp \
	common/lc_commands.cpp \
	common/lc_context.cpp \
	common/lc_doublespinbox.cpp \
	common/lc_edgecolordialog.cpp \
	common/lc_editgroupsdialog.cpp \
	common/lc_file.cpp \
	common/lc_filter.cpp \
	common/lc_findreplacewidget.cpp \
	common/lc_glextensions.cpp \
	common/lc_groupdialog.cpp \
	common/lc_http.cpp \
	common/lc_instructions.cpp \
	common/lc_instructionsdialog.cpp \
	common/lc_keyframewidget.cpp \
	common/lc_ladderwidget.cpp \
	common/lc_library.cpp \
	common/lc_lxf.cpp \
	common/lc_mainwindow.cpp \
	common/lc_mesh.cpp \
	common/lc_meshloader.cpp \
	common/lc_minifigdialog.cpp \
	common/lc_model.cpp \
	common/lc_modellistdialog.cpp \
	common/lc_objectproperty.cpp \
	common/lc_pagesetupdialog.cpp \
	common/lc_partpalettedialog.cpp \
	common/lc_partselectionpopup.cpp \
	common/lc_partselectionwidget.cpp \
	common/lc_previewwidget.cpp \
	common/lc_profile.cpp \
	common/lc_propertieswidget.cpp \
	common/lc_scene.cpp \
	common/lc_shortcuts.cpp \
	common/lc_string.cpp \
	common/lc_stringcache.cpp \
	common/lc_synth.cpp \
	common/lc_texture.cpp \
	common/lc_thumbnailmanager.cpp \
	common/lc_timelinewidget.cpp \
	common/lc_traintrack.cpp \
	common/lc_updatedialog.cpp \
	common/lc_view.cpp \
	common/lc_viewmanipulator.cpp \
	common/lc_viewsphere.cpp \
	common/lc_viewwidget.cpp \
	common/lc_zipfile.cpp \
	qt/qtmain.cpp \
	qt/lc_qselectdialog.cpp \
	qt/lc_qpropertiesdialog.cpp \
	qt/lc_qhtmldialog.cpp \
	qt/lc_qpreferencesdialog.cpp \
	qt/lc_qimagedialog.cpp \
	qt/lc_qutils.cpp \
	qt/lc_renderdialog.cpp \
	qt/lc_setsdatabasedialog.cpp
HEADERS += \
	common/camera.h \
	common/group.h \
	common/image.h \
	common/lc_modelhistory.h \
	common/light.h \
	common/minifig.h \
	common/object.h \
	common/piece.h \
	common/pieceinf.h \
	common/project.h \
	common/texfont.h \
	common/lc_aboutdialog.h \
	common/lc_application.h \
	common/lc_arraydialog.h \
	common/lc_blenderpreferences.h \
	common/lc_bricklink.h \
	common/lc_category.h \
	common/lc_categorydialog.h \
	common/lc_collapsiblewidget.h \
	common/lc_colorlist.h \
	common/lc_colorpicker.h \
	common/lc_colors.h \
	common/lc_commands.h \
	common/lc_context.h \
	common/lc_doublespinbox.h \
	common/lc_edgecolordialog.h \
	common/lc_editgroupsdialog.h \
	common/lc_file.h \
	common/lc_filter.h \
	common/lc_findreplacewidget.h \
	common/lc_glextensions.h \
	common/lc_global.h \
	common/lc_groupdialog.h \
	common/lc_http.h \
	common/lc_instructions.h \
	common/lc_instructionsdialog.h \
	common/lc_keyframewidget.h \
	common/lc_ladderwidget.h \
	common/lc_library.h \
	common/lc_lxf.h \
	common/lc_mainwindow.h \
	common/lc_math.h \
	common/lc_mesh.h \
	common/lc_meshloader.h \
	common/lc_minifigdialog.h \
	common/lc_model.h \
	common/lc_modellistdialog.h \
	common/lc_objectproperty.h \
	common/lc_pagesetupdialog.h \
	common/lc_partselectionpopup.h \
	common/lc_partselectionwidget.h \
	common/lc_previewwidget.h \
	common/lc_profile.h \
	common/lc_propertieswidget.h \
	common/lc_scene.h \
	common/lc_shortcuts.h \
	common/lc_string.h \
	common/lc_stringcache.h \
	common/lc_synth.h \
	common/lc_texture.h \
	common/lc_thumbnailmanager.h \
	common/lc_timelinewidget.h \
	common/lc_traintrack.h \
	common/lc_updatedialog.h \
	common/lc_view.h \
	common/lc_viewmanipulator.h \
	common/lc_viewsphere.h \
	common/lc_viewwidget.h \
	common/lc_zipfile.h \
	qt/lc_qselectdialog.h \
	qt/lc_qpropertiesdialog.h \
	qt/lc_qhtmldialog.h \
	qt/lc_qpreferencesdialog.h \
	qt/lc_qimagedialog.h \
	qt/lc_qutils.h \
	qt/lc_renderdialog.h \
	qt/lc_setsdatabasedialog.h \
	common/lc_partpalettedialog.h
FORMS += \
	common/lc_aboutdialog.ui \
	common/lc_arraydialog.ui \
	common/lc_categorydialog.ui \
	common/lc_editgroupsdialog.ui \
	common/lc_groupdialog.ui \
	common/lc_minifigdialog.ui \
	common/lc_modellistdialog.ui \
	common/lc_pagesetupdialog.ui \
	common/lc_partpalettedialog.ui \
	common/lc_updatedialog.ui \
	qt/lc_qselectdialog.ui \
	qt/lc_qpropertiesdialog.ui \
	qt/lc_qhtmldialog.ui \
	qt/lc_qpreferencesdialog.ui \
	qt/lc_qimagedialog.ui \
	qt/lc_renderdialog.ui \
	qt/lc_setsdatabasedialog.ui
OTHER_FILES +=
RESOURCES += leocad.qrc resources/stylesheet/stylesheet.qrc

!win32 {
	TRANSLATIONS = resources/leocad_cs.ts resources/leocad_de.ts resources/leocad_es.ts resources/leocad_fr.ts resources/leocad_pt.ts resources/leocad_ru.ts resources/leocad_uk.ts resources/leocad_zh_CN.ts
}
