⛏️ index : haiku.git

SubDir HAIKU_TOP src apps haikudepot ;

# disable -Werror for this directory only
SubDirC++Flags -Wno-error ;

include [ FDirName $(SUBDIR) build jam HdsSchemaGenRules ] ;

UsePrivateHeaders interface kernel net netservices package shared storage ;
UsePrivateHeaders support locale ;

HAIKUDEPOT_GENERATED_SOURCES_DIRECTORY = $(TARGET_COMMON_DEBUG_LOCATE_TARGET) ;

# During the build process, some sources are generated into directories.  These
# are the directories.

local dumpExportRepositoryBulkListerTargetDirectory =
	[ FDirName $(HAIKUDEPOT_GENERATED_SOURCES_DIRECTORY)
		dumpexportrepositorybulklistener ] ;
local dumpExportPkgBulkListenerTargetDirectory =
	[ FDirName $(HAIKUDEPOT_GENERATED_SOURCES_DIRECTORY)
		dumpexportpkgbulklistener ] ;
local dumpExportReferenceListenerTargetDirectory =
	[ FDirName $(HAIKUDEPOT_GENERATED_SOURCES_DIRECTORY)
		dumpexportreferencelistener ] ;

local dumpExportPkgModelTargetDirectory =
	[ FDirName $(HAIKUDEPOT_GENERATED_SOURCES_DIRECTORY)
		dumpexportpkgmodel ] ;
local dumpExportRepositoryModelTargetDirectory =
	[ FDirName $(HAIKUDEPOT_GENERATED_SOURCES_DIRECTORY)
		dumpexportrepositorymodel ] ;
local dumpExportReferenceModelTargetDirectory =
	[ FDirName $(HAIKUDEPOT_GENERATED_SOURCES_DIRECTORY)
		dumpexportreferencemodel ] ;

# During the build process, some sources are generated into a directory.  In
# order to maintain a timestamp on that generation process, a dummy file is
# used to signify the target of the generation.  The leafname of this dummy file
# is defined here.

local dummyFile = "dummy.dat" ;

local dumpExportRepositoryBulkListerTargetFile =
	[ FDirName $(dumpExportRepositoryBulkListerTargetDirectory) $(dummyFile) ] ;
local dumpExportPkgBulkListenerTargetFile =
	[ FDirName $(dumpExportPkgBulkListenerTargetDirectory) $(dummyFile) ] ;
local dumpExportReferenceListenerTargetFile =
	[ FDirName $(dumpExportReferenceListenerTargetDirectory) $(dummyFile) ] ;

local dumpExportPkgModelTargetFile =
	[ FDirName $(dumpExportPkgModelTargetDirectory) $(dummyFile) ] ;
local dumpExportRepositoryModelTargetFile =
	[ FDirName $(dumpExportRepositoryModelTargetDirectory) $(dummyFile) ] ;
local dumpExportReferenceModelTargetFile =
	[ FDirName $(dumpExportReferenceModelTargetDirectory) $(dummyFile) ] ;

# source directories
local sourceDirs =
	edits_generic
	icon
	model
	packagemanagement
	packagemodel
	process
	textview
	ui
	ui_generic
	server
	tar
	util
;

local sourceDir ;
for sourceDir in $(sourceDirs) {
	SEARCH_SOURCE += [ FDirName $(SUBDIR) $(sourceDir) ] ;
}

SEARCH_SOURCE += [ FDirName $(HAIKU_TOP) src servers package ] ;

SEARCH_SOURCE += $(dumpExportRepositoryBulkListerTargetDirectory) ;
SEARCH_SOURCE += $(dumpExportPkgBulkListenerTargetDirectory) ;
SEARCH_SOURCE += $(dumpExportReferenceListenerTargetDirectory) ;

SEARCH_SOURCE += $(dumpExportPkgModelTargetDirectory) ;
SEARCH_SOURCE += $(dumpExportRepositoryModelTargetDirectory) ;
SEARCH_SOURCE += $(dumpExportReferenceModelTargetDirectory) ;

local textDocumentSources =
	# edits_generic
	CompoundEdit.cpp
	EditContext.cpp
	EditManager.cpp
	UndoableEdit.cpp

	# textview
	Bullet.cpp
	BulletData.cpp
	CharacterStyle.cpp
	CharacterStyleData.cpp
	MarkupParser.cpp
	Paragraph.cpp
	ParagraphLayout.cpp
	ParagraphStyle.cpp
	ParagraphStyleData.cpp
	TextDocument.cpp
	TextDocumentLayout.cpp
	TextDocumentView.cpp
	TextEditor.cpp
	TextListener.cpp
	TextSelection.cpp
	TextSpan.cpp
	TextView.cpp
	UndoableEditListener.cpp
;

local applicationSources =
	App.cpp
	AccessToken.cpp
	BitmapHolder.cpp
	BitmapView.cpp
	Captcha.cpp
	CreateUserDetail.cpp
	DecisionProvider.cpp
	DeskbarLink.cpp
	FeaturedPackagesView.cpp
	FilterView.cpp
	GeneralContentScrollView.cpp
	IdentityAndAccessUtils.cpp
	IncrementViewCounterProcess.cpp
	JobStateListener.cpp
	JwtTokenHelper.cpp
	LinkView.cpp
	LinkedBitmapView.cpp
	Logger.cpp
	main.cpp
	MainWindow.cpp
	MarkupTextView.cpp
	Model.cpp
	PackageContentsView.cpp
	PackageInfoListener.cpp
	PackageInfoView.cpp
	PackageListView.cpp
	PackageScreenshotRepository.cpp
	PasswordRequirements.cpp
	RatePackageWindow.cpp
	RatingView.cpp
	RatingStability.cpp
	RatingUtils.cpp
	support.cpp
	ScreenshotWindow.cpp
	ScreenshotCoordinate.cpp
	ScrollableGroupView.cpp
	SettingsWindow.cpp
	SharedIcons.cpp
	ShuttingDownWindow.cpp
	ToLatestUserUsageConditionsWindow.cpp
	UserCredentials.cpp
	UserDetail.cpp
	UserLoginWindow.cpp
	UserUsageConditions.cpp
	UserUsageConditionsWindow.cpp
	ValidationFailure.cpp
	ValidationUtils.cpp
	WorkStatusView.cpp

	# icon
	IconTarPtr.cpp
	PackageIconDefaultRepository.cpp
	PackageIconTarRepository.cpp

	# packagemanagement
	AbstractPackageProcess.cpp
	InstallPackageProcess.cpp
	OpenPackageProcess.cpp
	PackageAction.cpp
	PackageManager.cpp
	UninstallPackageProcess.cpp

	#packagemodel
	DepotInfo.cpp
	Language.cpp
	PackageCategory.cpp
	PackageClassificationInfo.cpp
	PackageCoreInfo.cpp
	PackageFilter.cpp
	PackageFilterSpecification.cpp
	PackageInfo.cpp
	PackageLocalInfo.cpp
	PackageLocalizedText.cpp
	PackagePublisherInfo.cpp
	PackageScreenshotInfo.cpp
	PackageUserRatingInfo.cpp
	PackageVersion.cpp
	ScreenshotInfo.cpp
	UserInfo.cpp
	UserRating.cpp
	UserRatingSummary.cpp

	# network + server / local processes
	AbstractProcess.cpp
	AbstractProcessNode.cpp
	AbstractServerProcess.cpp
	AbstractSingleFileServerProcess.cpp
	CacheScreenshotProcess.cpp
	LocalPkgDataLoadProcess.cpp
	LocalRepositoryUpdateProcess.cpp
	PopulatePkgChangelogFromServerProcess.cpp
	PopulatePkgSizesProcess.cpp
	PopulatePkgUserRatingsFromServerProcess.cpp
	ProcessCoordinator.cpp
	ProcessCoordinatorFactory.cpp
	ServerHelper.cpp
	ServerSettings.cpp
	ServerPkgDataUpdateProcess.cpp
	ServerReferenceDataUpdateProcess.cpp
	ServerRepositoryDataUpdateProcess.cpp
	ServerIconExportUpdateProcess.cpp
	StandardMetaDataJsonEventListener.cpp
	StandardMetaData.cpp
	ThreadedProcessNode.cpp
	UserDetailVerifierProcess.cpp
	WebAppInterface.cpp

	# tar
	TarArchiveHeader.cpp
	TarArchiveService.cpp

	# util
	AppUtils.cpp
	DataIOUtils.cpp
	LanguageMenuUtils.cpp
	LocaleUtils.cpp
	PackageKitUtils.cpp
	PackageUtils.cpp
	StorageUtils.cpp
	StringUtils.cpp

	# package_daemon
	ProblemWindow.cpp
	ResultWindow.cpp
;

local generatedPkgModelSourceFiles =
	DumpExportPkg.cpp
	DumpExportPkgCategory.cpp
	DumpExportPkgScreenshot.cpp
	DumpExportPkgVersion.cpp
;

local generatedRepositoryModelSourceFiles =
	DumpExportRepository.cpp
	DumpExportRepositorySource.cpp
	DumpExportRepositorySourceMirror.cpp
;

local generatedReferenceModelSourceFiles =
	DumpExportReference.cpp
	DumpExportReferenceNaturalLanguage.cpp
	DumpExportReferencePkgCategory.cpp
	DumpExportReferenceUserRatingStability.cpp
	DumpExportReferenceCountry.cpp
;

local generatedPkgParserSourceFiles =
	DumpExportPkgJsonListener.cpp
;

local generatedRepositoryParserSourceFiles =
	DumpExportRepositoryJsonListener.cpp
;

local generatedReferenceParserSourceFiles =
	DumpExportReferenceJsonListener.cpp
;

Application HaikuDepot
	:
	$(applicationSources)
	$(textDocumentSources)
	$(generatedPkgModelSourceFiles)
	$(generatedRepositoryModelSourceFiles)
	$(generatedReferenceModelSourceFiles)
	$(generatedPkgParserSourceFiles)
	$(generatedRepositoryParserSourceFiles)
	$(generatedReferenceParserSourceFiles)
	:
	be package bnetapi translation libnetservices.a libcolumnlistview.a shared
	[ TargetLibstdc++ ] [ TargetLibsupc++ ] localestub
	:
	HaikuDepot.rdef
;

DoCatalogs HaikuDepot :
	x-vnd.Haiku-HaikuDepot
	:
	$(applicationSources)
;

# The following use of rules configures the generation of .cpp and .h files from
# JSON schemas that are defined in the HaikuDepotServer system.  See the
# included Jam rules and actions for the definitions.

HdsSchemaGenModel $(dumpExportPkgModelTargetFile)
	: dumpexportpkg.json : jsonschema2cppmodel.py ;

HdsSchemaGenModel $(dumpExportRepositoryModelTargetFile)
	: dumpexportrepository.json : jsonschema2cppmodel.py ;

HdsSchemaGenModel $(dumpExportReferenceModelTargetFile)
	: dumpexportreference.json : jsonschema2cppmodel.py ;

HdsSchemaGenBulkParser $(dumpExportRepositoryBulkListerTargetFile)
	: dumpexportrepository.json : jsonschema2cppparser.py ;

HdsSchemaGenBulkParser $(dumpExportPkgBulkListenerTargetFile)
	: dumpexportpkg.json : jsonschema2cppparser.py ;

HdsSchemaGenParser $(dumpExportReferenceListenerTargetFile)
	: dumpexportreference.json : jsonschema2cppparser.py ;

HdsSchemaGenAppSrcDependsOnGeneration
	[ FGristFiles $(generatedPkgParserSourceFiles) ]
	[ FGristFiles $(generatedPkgParserSourceFiles:S=.h) ]
	: $(dumpExportPkgBulkListenerTargetDirectory)
	: $(dumpExportPkgBulkListenerTargetFile) ;

HdsSchemaGenAppSrcDependsOnGeneration
	[ FGristFiles $(generatedRepositoryParserSourceFiles) ]
	[ FGristFiles $(generatedRepositoryParserSourceFiles:S=.h) ]
	: $(dumpExportRepositoryBulkListerTargetDirectory)
	: $(dumpExportRepositoryBulkListerTargetFile) ;

HdsSchemaGenAppSrcDependsOnGeneration
	[ FGristFiles $(generatedReferenceParserSourceFiles) ]
	[ FGristFiles $(generatedReferenceParserSourceFiles:S=.h) ]
	: $(dumpExportReferenceListenerTargetDirectory)
	: $(dumpExportReferenceListenerTargetFile) ;

HdsSchemaGenAppSrcDependsOnGeneration
	[ FGristFiles $(generatedRepositoryModelSourceFiles) ]
	[ FGristFiles $(generatedRepositoryModelSourceFiles:S=.h) ]
	: $(dumpExportRepositoryModelTargetDirectory)
	: $(dumpExportRepositoryModelTargetFile) ;

HdsSchemaGenAppSrcDependsOnGeneration
	[ FGristFiles $(generatedPkgModelSourceFiles) ]
	[ FGristFiles $(generatedPkgModelSourceFiles:S=.h) ]
	: $(dumpExportPkgModelTargetDirectory)
	: $(dumpExportPkgModelTargetFile) ;

HdsSchemaGenAppSrcDependsOnGeneration
	[ FGristFiles $(generatedReferenceModelSourceFiles) ]
	[ FGristFiles $(generatedReferenceModelSourceFiles:S=.h) ]
	: $(dumpExportReferenceModelTargetDirectory)
	: $(dumpExportReferenceModelTargetFile) ;

# This will ensure that if any of the generated files' header files change, then
# the application should be re-built.

Includes [ FGristFiles $(applicationSources) ]
	:
	$(dumpExportRepositoryBulkListerTargetDirectory)
	$(dumpExportPkgBulkListenerTargetDirectory)
	$(dumpExportReferenceListenerTargetDirectory)
	$(dumpExportPkgModelTargetDirectory)
	$(dumpExportRepositoryModelTargetDirectory)
	$(dumpExportReferenceModelTargetDirectory)
;

Depends [ FGristFiles $(applicationSources:S=.o) ]
	:
	[ FGristFiles $(generatedPkgParserSourceFiles:S=.h) ]
	[ FGristFiles $(generatedPkgModelSourceFiles:S=.h) ]
	[ FGristFiles $(generatedRepositoryParserSourceFiles:S=.h) ]
	[ FGristFiles $(generatedRepositoryModelSourceFiles:S=.h) ]
	[ FGristFiles $(generatedReferenceParserSourceFiles:S=.h) ]
	[ FGristFiles $(generatedReferenceModelSourceFiles:S=.h) ]
;