# This file is part of BOINC.
# https://boinc.berkeley.edu
# Copyright (C) 2025 University of California
#
# BOINC is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
#
# BOINC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with BOINC.  If not, see <http://www.gnu.org/licenses/>.
#

# makefile for uc2 BOINC example application on Macintosh.
# This is invoked from MakeMacExample.sh shell script.
# It should not be used by itself without the script.
# Updated 7/10/12 for OS 10.7 and XCode 4.3 and later
# Updated 8/3/12 for TrueType fonts
# Updated 11/8/12 to add slide_show
# Updated 4/14/15 for compatibility with Xcode 6
# Updated 4/30/20 for compatibility with Xcode 11 and OS 10.13
# Updated 2/6/23 to unify linked libraries and update freetype library dependency
# Updated 9/28/25 to replace boinc_zip with the libzip library dependency
#
## First, build the BOINC libraries using boinc/mac_build/BuildMacBOINC.sh
## This file assumes the locations of the needed libraries are those
## resulting from following the instructions found in the file:
##     boinc/mac_build/HowToBuildBOINC_XCode.rtf
##
## NOTE: this requires the libzip library which can be installed by the
## scipt mac_build/buildlibzip.sh, which uses CMake via the command line.
##

BOINC_DIR = ../..
BOINC_API_DIR = $(BOINC_DIR)/api
BOINC_LIB_DIR = $(BOINC_DIR)/lib
BOINC_ZIP_DIR = $(BOINC_DIR)/zip
BOINC_BUILD_DIR = $(BOINC_DIR)/mac_build/build/Deployment
BOINC_CONFIG_DIR = $(BOINC_DIR)/clientgui/mac
FREETYPE_DIR = $(BOINC_DIR)/../freetype-2.11.0
FTGL_DIR = $(BOINC_DIR)/../ftgl-2.1.3~rc5
LIBZIP_DIR = $(BOINC_DIR)/../libzip
FRAMEWORKS_DIR = /System/Library/Frameworks

CXXFLAGS = $(VARIANTFLAGS) \
    -g \
    -stdlib=libc++ \
    -DAPP_GRAPHICS \
    -I$(BOINC_CONFIG_DIR) \
    -I$(BOINC_DIR) \
    -I$(BOINC_LIB_DIR) \
    -I$(BOINC_API_DIR) \
    -I$(BOINC_ZIP_DIR) \
    -I$(FREETYPE_DIR)/include \
    -I$(FTGL_DIR)/src \
    -I$(PREFIX)/include \
    -I$(PREFIX)/include/freetype2 \
    -L$(BOINC_BUILD_DIR) \
    -L$(FREETYPE_DIR)/objs/.libs \
    -L$(FTGL_DIR)/src/.libs \
    -L$(LIBZIP_DIR)/lib \
    -L$(PREFIX)/lib \
    -L.

OBJ = \
    uc2.o \
    ttfont.o \
    uc2_graphics.o \
    slide_show.o

PROGS = uc2 uc2_graphics slide_show

all: $(PROGS)

clean:
	/bin/rm -f $(PROGS) $(OBJ)

uc2.o: uc2.cpp
	$(CXX) $(CXXFLAGS) -c uc2.cpp

ttfont.o: $(BOINC_API_DIR)/ttfont.cpp
	$(CXX) $(CXXFLAGS) -c $(BOINC_API_DIR)/ttfont.cpp

uc2_graphics.o: uc2_graphics.cpp
	$(CXX) $(CXXFLAGS) -c uc2_graphics.cpp

slide_show.o: slide_show.cpp
	$(CXX) $(CXXFLAGS) -c slide_show.cpp

uc2: uc2.o $(BOINC_BUILD_DIR)/libboinc_api.a $(BOINC_BUILD_DIR)/libboinc.a
	$(CXX) $(LDFLAGS) $(CXXFLAGS) -o uc2 uc2.o -lboinc_api -lboinc

uc2_graphics: uc2_graphics.o ttfont.o $(BOINC_BUILD_DIR)/libboinc.a\
    $(BOINC_BUILD_DIR)/libboinc_graphics2.a
	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o uc2_graphics uc2_graphics.o ttfont.o\
    -lboinc_graphics2 -lboinc_api -lboinc -ljpeg -lfreetype -lftgl -lz -lbz2 -lzip\
    -framework AppKit -framework GLUT -framework OpenGL -framework IOSurface

slide_show: slide_show.o $(BOINC_BUILD_DIR)/libboinc.a\
    $(BOINC_BUILD_DIR)/libboinc_graphics2.a
	$(CXX) $(CXXFLAGS) $(LDFLAGS) -o slide_show slide_show.o\
    -lboinc_graphics2 -lboinc_api -lboinc -lboinc_zip -ljpeg -lzip -lz\
    -framework AppKit -framework GLUT -framework OpenGL -framework IOSurface

