
# This holds the common definitions for Argyll that all the
# subdirectory jam's will include (even if run in the sub directory) 

Echo "Argyll Jamtop has been read" ;

# Extra config.
if [ GLOB $(TOP) : JamExtra ] {
	include $(TOP)/JamExtra ;
}

# Default install base directory is same directory as Jamtop,
# but can be overriden in the command line.
DESTDIR ?= [ NormPaths  . ] ;

# Default prefix is empty, but can be overriden in the command line.
PREFIX ?= "" ;

# Default ref file sub-directory is "ref", but can be overriden in the command line.
REFSUBDIR ?= "ref" ;

Echo "DESTDIR = '$(DESTDIR)', PREFIX = '$(PREFIX)', REFSUBDIR = '$(REFSUBDIR)'" ;

# Keep this DESTDIR anchored to Jamtop. PREFIX is used literally
ANCHORED_PATH_VARS = DESTDIR ;


# Should we also allow CFLAGS, CXXFLAGS, CPPFLAGS & LDFLAGS env. variables
# to have effect ?

# Tell standalone libraries that they are part of Argyll:
DEFINES += ARGYLLCMS ;

# Enable all instrument types by default
DEFINES += ALLINSTS ;

# enable serial instruments & support
USE_SERIAL = true ;	

# enable fast serial instruments & support
USE_FAST_SERIAL = true ;		# (Implicit in USE_SERIAL too)	

# enable USB instruments & support
USE_USB = true ;	

# enable dummy Demo Instrument (only if code is available)
USE_DEMOINST = true ;

# enable Video Test Patch Generator and 3DLUT device support 
# (Not fully implemented)
USE_VTPGLUT = false ;

# enable Printer device support 
# (Not implemented)
USE_PRINTER = false ;

# enable CMF Measurement device and accessory support (if present)
# (Not part of ArgyllCMS)
USE_CMFM = false ;	

# Compile in graph plotting code
USE_PLOT = true ;		# [true] 

# Enable UTF-8 code pages on MSWindows V 1903 or later,
# to make executable language handling consistent across MSWin/OS X/Linux
WIN_UTF8 = true ;		# [true]

# Use libusb_win32 libusb0.sys on MSWindows 
USE_LIBUSB0 = true ;	# [true]

# Use UsbDk on MSWindows 
# (Can use along side USE_LIBUSB0)
USE_USBDK = false ;	# [false]

# For testing CCast
#DEFINES += CCTEST_PATTERN ;

# Information for compiling and linking GUI programs

if $(UNIX) {
	if $(OS) = MACOSX {
		LINKFLAGS += -framework IOKit ;
		LINKFLAGS += -framework CoreFoundation ;
		LINKFLAGS += -framework AppKit ;
		LINKFLAGS += -framework AudioToolbox ;

	# Hmm. Would be nice to use pkg-config here, if system has it.
	} else {
		if [ GLOB /usr/X11R6/include/X11 : X.h ] {
			LibWinH = /usr/X11R6/include ;
		} else if [ GLOB /usr/include/X11 : X.h ] {
			LibWinH = /usr/include ;
		} else if [ GLOB /usr/local/include/X11 : X.h ] {
			LibWinH = /usr/local/include ;
		} else {
			EXIT Unable to locate the X11 include files ;
		}

		if $(HOST64) {
			if [ GLOB /usr/X11R6/lib : libX11.so libX11.a ] {
				LibWinD = /usr/X11R6/lib ;
			} else if [ GLOB /usr/lib/x86_64-linux-gnu : libX11.so libX11.a ] {
				LibWinD = /usr/lib/x86_64-linux-gnu ;
			} else if [ GLOB /usr/lib64 : libX11.so libX11.a ] {
				LibWinD = /usr/lib64 ;
			} else if [ GLOB /usr/lib : libX11.so libX11.a ] {
				LibWinD = /usr/lib ;
			} else if [ GLOB /usr/local/lib : libX11.so libX11.a ] {
				LibWinD = /usr/local/lib ;
			} else {
				ECHO Unable to locate the 64 bit X11 library files ;
			}
		} else {
			if [ GLOB /usr/X11R6/lib : libX11.so libX11.a ] {
				LibWinD = /usr/X11R6/lib ;
			} else if [ GLOB /usr/lib/i386-linux-gnu : libX11.so libX11.a ] {
				LibWinD = /usr/lib/i386-linux-gnu ;
			} else if [ GLOB /usr/lib : libX11.so libX11.a ] {
				LibWinD = /usr/lib ;
			} else if [ GLOB /usr/local/lib : libX11.so libX11.a ] {
				LibWinD = /usr/local/lib ;
			} else {
				ECHO Unable to locate the 32 bit X11 library files ;
			}
		}
		if $(OS) = FREEBSD {
			LINKFLAGS += -g -lrt -lusb ;
			GUILINKFLAGS += -L$(LibWinD) -g -lX11 -lXext -lXxf86vm -lXinerama -lXrandr -lXau -lXdmcp -lXss  ;
		} else if $(OS) = OPENBSD {
			LINKFLAGS += ;
			GUILINKFLAGS += -L$(LibWinD) -g -lX11 -lXext -lXxf86vm -lXinerama -lXrandr -lXau -lXdmcp -lXss -L/usr/local/lib ;
		} else {
			LINKFLAGS += -ldl -lrt ;
			GUILINKFLAGS += -L$(LibWinD) -lX11 -lXext -lXxf86vm -lXinerama -lXrandr -lXau -lXdmcp -lXss ;
		}
		# HDRS += $(LibWinH) ; 
	}
}

# Standard system library support:

# Check rule. $(<) is library name, $(>) is optional alternate library name
# $(3) is optional #include sub-directory, i.e. "/openssl"
rule CheckForLibrary {
	UCASE = $(<:U) ;
	lcase = $(<:L) ;
	libname = $(lcase) ;
	subd = "" ;

	if $(>) {
		libname = $(>) ;
	}

	if $(3) {
		subd = $(3) ;
	}

	if ! $(BUILTIN_$(UCASE)) && $(UNIX) {
	    if  [ GLOB /usr/include$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/local/include$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/x86_64-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/i386-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/alpha-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/aarch64-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/arm-linux-gnueabi$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/arm-linux-gnueabihf$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/hppa-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/i386-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/x86_64-kfreebsd-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/i386-kfreebsd-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
         || [ GLOB /usr/include/loongarch64-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/m68k-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/mips-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/mipsel-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/mips64el-linux-gnuabi64$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/powerpc-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/powerpc-linux-gnuspe$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/powerpc64-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/powerpc64le-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
         || [ GLOB /usr/include/riscv64-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/s390x-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/sh4-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/sparc-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/sparc64-linux-gnu$(subd) : $(lcase).h $(lcase)lib.h ]
		 || [ GLOB /usr/include/x86_64-linux-gnux32$(subd) : $(lcase).h $(lcase)lib.h ] {
		    if  [ GLOB /usr/lib : lib$(lcase).so ]  || [ GLOB /usr/lib : lib$(lcase).a ]
			 || [ GLOB /usr/local/lib : lib$(lcase).so ]
			 || [ GLOB /usr/local/lib : lib$(lcase).a ]
			 || [ GLOB /usr/lib64 : lib$(lcase).so ]
			 || [ GLOB /usr/lib64 : lib$(lcase).a ]
			 || [ GLOB /usr/lib/x86_64-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/x86_64-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/i386-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/i386-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/alpha-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/alpha-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/aarch64-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/aarch64-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/arm-linux-gnueabi : lib$(lcase).so ]
			 || [ GLOB /usr/lib/arm-linux-gnueabi : lib$(lcase).a ]
			 || [ GLOB /usr/lib/arm-linux-gnueabihf : lib$(lcase).so ]
			 || [ GLOB /usr/lib/arm-linux-gnueabihf : lib$(lcase).a ]
			 || [ GLOB /usr/lib/hppa-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/hppa-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/i386-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/i386-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/x86_64-kfreebsd-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/x86_64-kfreebsd-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/i386-kfreebsd-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/i386-kfreebsd-gnu : lib$(lcase).a ]
             || [ GLOB /usr/lib/loongarch64-linux-gnu : lib$(lcase).so ]
             || [ GLOB /usr/lib/loongarch64-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/m68k-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/m68k-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/mips-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/mips-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/mipsel-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/mipsel-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/mips64el-linux-gnuabi64 : lib$(lcase).so ]
			 || [ GLOB /usr/lib/mips64el-linux-gnuabi64 : lib$(lcase).a ]
			 || [ GLOB /usr/lib/powerpc-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/powerpc-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/powerpc-linux-gnuspe : lib$(lcase).so ]
			 || [ GLOB /usr/lib/powerpc-linux-gnuspe : lib$(lcase).a ]
			 || [ GLOB /usr/lib/powerpc64-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/powerpc64-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/powerpc64le-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/powerpc64le-linux-gnu : lib$(lcase).a ]
             || [ GLOB /usr/lib/riscv64-linux-gnu : lib$(lcase).so ]
             || [ GLOB /usr/lib/riscv64-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/s390x-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/s390x-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/sh4-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/sh4-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/sparc-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/sparc-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/sparc64-linux-gnu : lib$(lcase).so ]
			 || [ GLOB /usr/lib/sparc64-linux-gnu : lib$(lcase).a ]
			 || [ GLOB /usr/lib/x86_64-linux-gnux32 : lib$(lcase).so ]
			 || [ GLOB /usr/lib/x86_64-linux-gnux32 : lib$(lcase).a ] {
				echo "Using system $(UCASE) library" ;
				$(UCASE)LIB = ;
				$(UCASE)INC = ;
				LINKFLAGS += $(LINKFLAG)$(lcase) ;
				HAVE_$(UCASE) = true ;
			}
		}
	}
	
	# If nothing else, use Argyll supplied $(UCASE) library
	if ! $(HAVE_$(UCASE)) || $(BUILTIN_$(UCASE)) {
		echo "Using Argyll $(UCASE) library" ;
		$(UCASE)LIB = ../$(libname)/lib$(lcase).lib ;
		$(UCASE)INC = ../$(libname) ;
	}
}

# See if we have a system TIFF, JPEG, PNG or ZLIB library.
# Note this generates: $(TIFFLIB) $(TIFFINC) $(JPEGLIB) $(JPEGINC) $(PNGLIB)
# $(PNGINC) $(ZLIBLIB) $(ZINC)
# !!!!! Add to makepackagebin.sh -sBUILTIN_XXX=true !!!!!
CheckForLibrary "TIFF" ;
CheckForLibrary "JPEG" ;
CheckForLibrary "PNG" ;
CheckForLibrary "Z" : "zlib" ;

CheckForLibrary "SSL" : : "/openssl" ;
# if OpenSSL not found:
if ! $(HAVE_SSL) {
	SSLINC = ../ccast/axTLS ; 
	SSLLIB = ../ccast/axTLS/libaxtls ; 
}

# testing
#DSTDIR = var ;
#SRCDIR = .. ;
