
top = $(OMF_ROOT)

LIBRARIES = -L$(top)/lib
INCLUDES = -I$(top) -I..

CXX = g++
CXXFLAGS = -g -Wall $(INCLUDES) $(LIBRARIES)
mod = \
	UnlimitedInteger \
	AggregationKind \
	CallConcurrencyKind \
	ChangeableKind \
	OrderingKind \
	ParameterDirectionKind \
	ScopeKind \
	VisibilityKind \
	Name \
	Multiplicity \
	MultiplicityRange \
	Expression \
	BooleanExpression \
	TypeExpression \
	MappingExpression \
	ProcedureExpression \
	ObjectSetExpression \
	ActionExpression \
	IterationExpression \
	TimeExpression \
	ArgListsExpression \
	LocationReference \
	PseudostateKind \
	Geometry \
	A_multiplicity_range \
	Element \
	ModelElement \
	GeneralizableElement \
	Namespace \
	Classifier \
	Class \
	DataType \
	Feature \
	StructuralFeature \
	AssociationEnd \
	Interface \
	Constraint \
	Relationship \
	Association \
	Attribute \
	BehavioralFeature \
	Operation \
	Parameter \
	Method \
	Generalization \
	AssociationClass \
	Dependency \
	Abstraction \
	PresentationElement \
	Usage \
	Binding \
	Component \
	Node \
	Permission \
	Comment \
	Flow \
	ElementResidence \
	TemplateParameter \
	Primitive \
	Enumeration \
	EnumerationLiteral \
	Stereotype \
	TagDefinition \
	TaggedValue \
	ProgrammingLanguageDataType \
	Artifact \
	TemplateArgument \
	A_association_connection \
	A_owner_feature \
	A_specification_method \
	A_typedFeature_type \
	A_namespace_ownedElement \
	A_behavioralFeature_parameter \
	A_typedParameter_type \
	A_child_generalization \
	A_parent_specialization \
	A_qualifier_associationEnd \
	A_participant_association \
	A_specifiedEnd_specification \
	A_client_clientDependency \
	A_constrainedElement_constraint \
	A_supplier_supplierDependency \
	A_presentation_subject \
	A_deploymentLocation_deployedComponent \
	A_targetFlow_target \
	A_sourceFlow_source \
	A_defaultElement_defaultedParameter \
	A_binding_argument \
	A_powertype_powertypeRange \
	A_comment_annotatedElement \
	A_resident_elementResidence \
	A_container_residentElement \
	A_template_templateParameter \
	A_parameter_parameterTemplate \
	A_enumeration_literal \
	A_definedTag_owner \
	A_stereotype_extendedElement \
	A_constrainedStereotype_stereotypeConstraint \
	A_modelElement_taggedValue \
	A_type_typedValue \
	A_referenceValue_referenceTag \
	A_implementation_implementationLocation \
	A_modelElement_templateArgument \
	Instance \
	Signal \
	Action \
	CreateAction \
	DestroyAction \
	UninterpretedAction \
	AttributeLink \
	Object \
	Link \
	LinkObject \
	DataValue \
	CallAction \
	SendAction \
	ActionSequence \
	Argument \
	Reception \
	LinkEnd \
	ReturnAction \
	TerminateAction \
	Stimulus \
	Exception \
	ComponentInstance \
	NodeInstance \
	SubsystemInstance \
	A_instance_classifier \
	A_actualArgument_action \
	A_createAction_instantiation \
	A_attributeLink_attribute \
	A_attributeLink_value \
	A_instance_linkEnd \
	A_signal_reception \
	A_slot_instance \
	A_argument_stimulus \
	A_context_raisedSignal \
	A_association_link \
	A_link_connection \
	A_associationEnd_linkEnd \
	A_stimulus_sender \
	A_callAction_operation \
	A_actionSequence_action \
	A_resident_nodeInstance \
	A_resident_componentInstance \
	A_receiver_stimulus \
	A_stimulus_communicationLink \
	A_dispatchAction_stimulus \
	A_signal_sendAction \
	A_linkEnd_qualifiedValue \
	A_ownedInstance_owner \
	A_ownedLink_owner \
	UseCase \
	Actor \
	UseCaseInstance \
	Extend \
	Include \
	ExtensionPoint \
	A_base_extender \
	A_extension_extend \
	A_includer_addition \
	A_include_base \
	A_extensionPoint_useCase \
	A_extensionPoint_extend \
	StateMachine \
	Event \
	StateVertex \
	State \
	TimeEvent \
	CallEvent \
	SignalEvent \
	Transition \
	CompositeState \
	ChangeEvent \
	Guard \
	Pseudostate \
	SimpleState \
	SubmachineState \
	SynchState \
	StubState \
	FinalState \
	A_state_entry \
	A_state_exit \
	A_event_parameter \
	A_guard_transition \
	A_signal_occurrence \
	A_behavior_context \
	A_top_stateMachine \
	A_state_deferrableEvent \
	A_occurrence_operation \
	A_container_subvertex \
	A_transition_effect \
	A_state_internalTransition \
	A_transition_trigger \
	A_stateMachine_transitions \
	A_outgoing_source \
	A_incoming_target \
	A_submachineState_submachine \
	A_state_doActivity \
	Collaboration \
	ClassifierRole \
	AssociationRole \
	AssociationEndRole \
	Message \
	Interaction \
	InteractionInstanceSet \
	CollaborationInstanceSet \
	A_interaction_message \
	A_context_interaction \
	A_classifierRole_base \
	A_base_associationEndRole \
	A_base_associationRole \
	A_classifierRole_availableFeature \
	A_message_activator \
	A_message_sender \
	A_receiver_message \
	A_predecessor_successor \
	A_message_communicationConnection \
	A_classifierRole_availableContents \
	A_action_message \
	A_associationEndRole_availableQualifier \
	A_representedOperation_collaboration \
	A_collaboration_constrainingElement \
	A_context_interactionInstanceSet \
	A_playedRole_conformingStimulus \
	A_interaction_interactionInstanceSet \
	A_collaboration_collaborationInstanceSet \
	A_playedRole_conformingInstance \
	A_playedRole_conformingLink \
	A_interactionInstanceSet_participatingStimulus \
	A_collaborationInstanceSet_participatingInstance \
	A_participatingLink_collaborationInstanceSet \
	A_usedCollaboration_collaboration \
	A_representedClassifier_collaboration \
	A_collaborationInstanceSet_constrainingElement \
	ActivityGraph \
	Partition \
	SubactivityState \
	ActionState \
	CallState \
	ObjectFlowState \
	ClassifierInState \
	A_parameter_state \
	A_type_classifierInState \
	A_contents_partition \
	A_activityGraph_partition \
	A_type_objectFlowState \
	A_classifierInState_inState \
	Package \
	Model \
	Subsystem \
	ElementImport \
	A_importedElement_elementImport \
	A_package_elementImport \
	UMLPackage \
	UMLLibrary

obj = $(mod:%=%.o)
dep = $(mod:%=%.dep)
lib = $(top)/lib/libUML.so

%.o: %.cpp
	$(CXX) -c $(CXXFLAGS) -o $@ $<

%.dep: %.cpp
	$(CXX) -c -MM $(CXXFLAGS) -o $@ $<

all: $(lib)

$(lib): $(obj)
	$(CXX) -shared $(CXXFLAGS) -o $(lib) $(obj)

depend: $(dep)
	echo "" > .deps
	for i in $(dep); do \
		cat $$i >> .deps; \
	done

clean:
	rm -f $(obj) $(dep) $(lib) *~

-include .deps
