workflowsim / workflowsim-1.0 Goto Github PK
View Code? Open in Web Editor NEWWiki pages
Home Page: https://github.com/WorkflowSim/WorkflowSim-1.0/wiki/_pages
License: GNU Lesser General Public License v3.0
Wiki pages
Home Page: https://github.com/WorkflowSim/WorkflowSim-1.0/wiki/_pages
License: GNU Lesser General Public License v3.0
Can I have a new version of a WorkflowSim that considers the classes of I/O operations and data transfer time, if anyone got that please try to response me ASAP?
1-How to calculate speedup which equals the ratio of parallel task running to serial task running on a resource
2-how to calculate vm or resource utilization
3- how to calculate power consumption
All for HEFT and DHEFT algorithms in workflowsim
Anyone can help please?
Only use DAX as the input file. Runtime and datasize file was optional
Should be able to support different network topologies, hierarchical.
May do that by adding different bandwidths
/**
import java.io.File;
import java.util.Calendar;
import java.util.List;
import org.cloudbus.cloudsim.Cloudlet;
import org.cloudbus.cloudsim.Log;
import org.cloudbus.cloudsim.core.CloudSim;
import org.workflowsim.CondorVM;
import org.workflowsim.WorkflowDatacenter;
import org.workflowsim.Job;
import org.workflowsim.WorkflowEngine;
import org.workflowsim.WorkflowPlanner;
import org.workflowsim.utils.ClusteringParameters;
import org.workflowsim.utils.OverheadParameters;
import org.workflowsim.utils.Parameters;
import org.workflowsim.utils.ReplicaCatalog;
import utils.Constants;
/**
This FCFS Scheduling Algorithm
@author Weiwei Chen
@SInCE WorkflowSim Toolkit 1.1
@Date Nov 9, 2013
*/
public class FCFSSchedulingAlgorithmExample extends DataAwareSchedulingAlgorithmExample {
////////////////////////// STATIC METHODS ///////////////////////
/**
Creates main() to run this example This example has only one datacenter
and one storage
*/
public static void main(String[] args) {
try {
// First step: Initialize the WorkflowSim package.
/**
* However, the exact number of vms may not necessarily be vmNum If
* the data center or the host doesn't have sufficient resources the
* exact vmNum would be smaller than that. Take care.
/
int vmNum = 2;//number of vms;
/*
* Should change this based on real physical path
*/
String daxPath = "C://Users//Lenovo//Downloads//WorkflowSim-1.0-master//WorkflowSim-1.0-master//config//dax/Montage_25.xml";
File daxFile = new File(daxPath);
if (!daxFile.exists()) {
Log.printLine("Warning: Please replace daxPath with the physical path in your working environment!");
return;
}
/**
* Since we are using HEFT planning algorithm, the scheduling
* algorithm should be static such that the scheduler would not
* override the result of the planner
*/
Parameters.SchedulingAlgorithm sch_method = Parameters.SchedulingAlgorithm.FCFS;
Parameters.PlanningAlgorithm pln_method = Parameters.PlanningAlgorithm.INVALID;
ReplicaCatalog.FileSystem file_system = ReplicaCatalog.FileSystem.LOCAL;
/**
* No overheads
*/
OverheadParameters op = new OverheadParameters(0, null, null, null, null, 0);
/**
* No Clustering
*/
ClusteringParameters.ClusteringMethod method = ClusteringParameters.ClusteringMethod.NONE;
ClusteringParameters cp = new ClusteringParameters(0, 0, method, null);
/**
* Initialize static parameters
*/
Parameters.init(vmNum, daxPath, null,
null, op, cp, sch_method, pln_method,
null, 0);
ReplicaCatalog.init(file_system);
// before creating any entities.
int num_user = 1; // number of grid users
Calendar calendar = Calendar.getInstance();
boolean trace_flag = false; // mean trace events
// Initialize the CloudSim library
CloudSim.init(num_user, calendar, trace_flag);
WorkflowDatacenter datacenter0 = createDatacenter("Datacenter_0");
/**
* Create a WorkflowPlanner with one schedulers.
*/
WorkflowPlanner wfPlanner = new WorkflowPlanner("planner_0", 1);
/**
* Create a WorkflowEngine.
*/
WorkflowEngine wfEngine = wfPlanner.getWorkflowEngine();
/**
* Create a list of VMs.The userId of a vm is basically the id of
* the scheduler that controls this vm.
*/
List<CondorVM> vmlist0 = createVM(wfEngine.getSchedulerId(0), Parameters.getVmNum());
/**
* Submits this list of vms to this WorkflowEngine.
*/
wfEngine.submitVmList(vmlist0, 0);
/**
* Binds the data centers with the scheduler.
*/
wfEngine.bindSchedulerDatacenter(datacenter0.getId(), 0);
CloudSim.startSimulation();
List<Job> outputList0 = wfEngine.getJobsReceivedList();
CloudSim.stopSimulation();
printJobList(outputList0);
} catch (Exception e) {
Log.printLine("The simulation has been terminated due to an unexpected error");
}
}
}
I want to add makespan code in this code.
This is my code for
We should have at least a few unit tests
Refactor ClusterStorage and Merge it with ReplicaCatalog
how can we take total cost as a fitness function in a meta-heuristic algorithm?
total cost= execution cost(resource)+communication cost or transfer cost(resource)
Hello, I am using workflowsim to do task flow scheduling.
In workflowsim, why didn't you see the transfer time of the two associated task on different vms?
On this link (https://github.com/WorkflowSim/WorkflowSim-1.0/wiki/More-workflow-examples-and-dax-generator) the given link (http://vtcpc.isi.edu/downloads/daxes.tar.gz) does not open, giving "Not Found" error.
[Q] Is there any additional link for this link?
SIPHT.n.1000.9.dax and some other workflows have tasks that have 0.00 runtime which will cause these tasks to be missing in CloudSim (since CloudSim will check the left cloudletLength if it is zero marked it as completed). To solve this problem, give a task a minimal runtime, let's say 0.10.
Respected Members . Anyone know how to Vary CCR ratio (communication to computation Ratio) of workflows used in workflowsim (sphit,ligo,cybershake, and montage) in order to test some parameters like execution time or VMs utilization?
like the one`s used to generate the results in the this paper."Workflow-and-Platform Aware task clustering for scientific workflow execution in Cloud environment"
https://www.sciencedirect.com/science/article/pii/S0167739X16301182
Hi,
When i'm exploring the HEFTPlanningAgorithm code, i find that the only operation that allows allocating a VM to a task is task.setVmId(chosenVM.getId());
.
And, as mentioned in "findFinishTime" method , a task can be inserted in the middle of a the scheduled tasklist of a specific VM in the "schedule" Map.
I find that this insert is not taken in consideration in the mentionned code : task.setVmId(chosenVM.getId());
Thanks
WorkflowSim needs to support submission of multiple workflows at a time
https://github.com/LAVISHDEMONN66
#-- tab-width: 4; --
FreeBSD_MAINTAINER= [email protected]
LANG= C
LC_ALL= C
.export LANG LC_ALL
PORTSDIR?= /usr/ports
LOCALBASE?= /usr/local
LINUXBASE?= /compat/linux
DISTDIR?= ${PORTSDIR}/distfiles
_DISTDIR?= ${DISTDIR}/${DIST_SUBDIR}
INDEXDIR?= ${PORTSDIR}
SRC_BASE?= /usr/src
USESDIR?= ${PORTSDIR}/Mk/Uses
SCRIPTSDIR?= ${PORTSDIR}/Mk/Scripts
LIB_DIRS?= /lib /usr/lib ${LOCALBASE}/lib
STAGEDIR?= ${WRKDIR}/stage
NOTPHONY?=
FLAVORS?=
FLAVOR?=
OVERLAYS?=
REWARNFILE= ${WRKDIR}/reinplace_warnings.txt
.if empty(FLAVOR) && !empty(.MAKEOVERRIDES:MFLAVOR)
.error FLAVOR may not be passed empty as a make argument.
.endif
.if !defined(_FLAVOR)
_FLAVOR:= ${FLAVOR}
.endif
.if !defined(PORTS_FEATURES) && empty(${PORTS_FEATURES:MFLAVORS})
PORTS_FEATURES+= FLAVORS
.endif
MINIMAL_PKG_VERSION= 1.15.9
_PORTS_DIRECTORIES+= ${PKG_DBDIR} ${PREFIX} ${WRKDIR} ${EXTRACT_WRKDIR}
${STAGEDIR}${PREFIX} ${WRKDIR}/pkg ${BINARY_LINKDIR}
.CURDIR:= ${.CURDIR:tA}
.MAKE.EXPAND_VARIABLES= yes
.include "${PORTSDIR}/Mk/bsd.commands.mk"
.MAKEOVERRIDES:= ${.MAKEOVERRIDES:NFLAVOR}
.if defined(CROSS_TOOLCHAIN)
.if !defined(CROSS_SYSROOT)
IGNORE= CROSS_SYSROOT should be defined
.endif
.include "${LOCALBASE}/share/toolchains/${CROSS_TOOLCHAIN}.mk"
.if !defined(HOSTCC)
HOSTCC:= ${CC}
HOSTCXX:= ${CXX}
.endif
.if !defined(CC_FOR_BUILD)
CC_FOR_BUILD:= ${HOSTCC}
CXX_FOR_BUILD:= ${HOSTCXX}
.endif
CONFIGURE_ENV+= HOSTCC="${HOSTCC}" HOSTCXX="${HOSTCXX}" CC_FOR_BUILD="${CC_FOR_BUILD}" CXX_FOR_BUILD="${CXX_FOR_BUILD}"
CC= ${XCC} --sysroot=${CROSS_SYSROOT}
CXX= ${XCXX} --sysroot=${CROSS_SYSROOT}
CPP= ${XCPP} --sysroot=${CROSS_SYSROOT}
.for _tool in AS AR LD NM OBJCOPY RANLIB SIZE STRINGS
${_tool}= ${CROSS_BINUTILS_PREFIX}${_tool:tl}
.endfor
LD+= --sysroot=${CROSS_SYSROOT}
STRIP_CMD= ${CROSS_BINUTILS_PREFIX}strip
STRIPBIN= ${STRIP_CMD}
.export.env STRIPBIN
.endif
.if defined(DESTDIR) && !empty(DESTDIR) && !defined(CHROOTED) &&
!defined(BEFOREPORTMK) && !defined(INOPTIONSMK)
.include "${PORTSDIR}/Mk/bsd.destdir.mk"
.else
.if !target(makepatch)
makepatch:
@${SETENV} WRKDIR=${WRKDIR} PATCHDIR=${PATCHDIR}
PATCH_WRKSRC=${PATCH_WRKSRC}
STRIP_COMPONENTS="${PATCH_STRIP:S/-p//}"
${SH} ${SCRIPTSDIR}/smart_makepatch.sh
.endif
.if defined(INOPTIONSMK) || ( !defined(USEOPTIONSMK) && !defined(AFTERPORTMK) )
MAINTAINER?= [email protected]
.if !defined(ARCH)
ARCH!= ${UNAME} -p
.endif
HOSTARCH:= ${ARCH}
.if defined(CROSS_TOOLCHAIN)
ARCH=
.endif
_EXPORTED_VARS+= ARCH
.if ${ARCH} == powerpc64
. if !defined(PPC_ABI)
PPC_ABI!= ${CC} -dM -E - < /dev/null | ${AWK} '/_CALL_ELF/{print "ELFv"$$3}'
. if ${PPC_ABI} != ELFv2
PPC_ABI= ELFv1
. endif
. endif
_EXPORTED_VARS+= PPC_ABI
.endif
.if defined(CROSS_SYSROOT)
.if !exists(${CROSS_SYSROOT}/usr/include/sys/param.h)
.error CROSS_SYSROOT does not include /usr/include/sys/param.h.
.endif
OSVERSION!=
_OSRELEASE!= ${AWK} -v version=${OSVERSION} 'END { printf("%d.%d-CROSS", version / 100000, version / 1000 % 100) }' < /dev/null
.endif
.if !defined(OPSYS)
OPSYS!= ${UNAME} -s
.endif
_EXPORTED_VARS+= OPSYS
.if !defined(_OSRELEASE)
_OSRELEASE!= ${UNAME} -r
.endif
_EXPORTED_VARS+= _OSRELEASE
OSREL?= ${_OSRELEASE:C/-.*//}
_EXPORTED_VARS+= OSREL
.if !defined(OSVERSION)
.if exists(/usr/include/sys/param.h)
OSVERSION!=
.elif exists(${SRC_BASE}/sys/sys/param.h)
OSVERSION!=
.else
.error Unable to determine OS version. Either define OSVERSION, install /usr/include/sys/param.h or define SRC_BASE.
.endif
.endif
_EXPORTED_VARS+= OSVERSION
.if (${OPSYS} == FreeBSD && ${OSVERSION} < 1202000) ||
(${OPSYS} == DragonFly && ${DFLYVERSION} < 400400)
_UNSUPPORTED_SYSTEM_MESSAGE= Ports Collection support for your ${OPSYS} version has ended, and no ports
are guaranteed to build on this system. Please upgrade to a supported release.
. if defined(ALLOW_UNSUPPORTED_SYSTEM)
WARNING+= "${_UNSUPPORTED_SYSTEM_MESSAGE}"
. else
show-unsupported-system-error:
@${ECHO_MSG} "/!\ ERROR: /!\"
@${ECHO_MSG}
@${ECHO_MSG} "${_UNSUPPORTED_SYSTEM_MESSAGE}" | ${FMT_80}
@${ECHO_MSG}
@${ECHO_MSG} "No support will be provided if you silence this message by defining ALLOW_UNSUPPORTED_SYSTEM." | ${FMT_80}
@${ECHO_MSG}
@${FALSE}
. endif
.endif
_OSVERSION_MAJOR= ${OSVERSION:C/([0-9]?[0-9])([0-9][0-9])[0-9]{3}/\1/}
.if !defined(.MAKEOVERRIDES) || !${.MAKEOVERRIDES:MOSVERSION}
.if ${_OSVERSION_MAJOR} != ${_OSRELEASE:R}
.if !defined(I_DONT_CARE_IF_MY_BUILDS_TARGET_THE_WRONG_RELEASE)
.error UNAME_r (${_OSRELEASE}) and OSVERSION (${OSVERSION}) do not agree on major version number.
.endif
.elif ${_OSVERSION_MAJOR} != ${OSREL:R}
.error OSREL (${OSREL}) and OSVERSION (${OSVERSION}) do not agree on major version number.
.endif
.endif
.include "${PORTSDIR}/Mk/bsd.commands.mk"
.if !defined(_PKG_CHECKED) && !defined(PACKAGE_BUILDING) && exists(${PKG_BIN})
.if !defined(_PKG_VERSION)
_PKG_VERSION!= ${PKG_BIN} -v
.endif
_PKG_BEFORE_PKGEXT!= ${PKG_BIN} version -t ${_PKG_VERSION:C/-.*//g} 1.17.0
.if ${_PKG_BEFORE_PKGEXT} == "<"
_PKG_TRANSITIONING_TO_NEW_EXT= yes
_EXPORTED_VARS+= _PKG_TRANSITIONING_TO_NEW_EXT
WARNING+= "It is strongly recommended to upgrade to a newer version of pkg first"
.endif
_PKG_STATUS!= ${PKG_BIN} version -t ${_PKG_VERSION:C/-.*//g} ${MINIMAL_PKG_VERSION}
.if ${_PKG_STATUS} == "<"
IGNORE= pkg(8) must be version ${MINIMAL_PKG_VERSION} or greater, but you have ${_PKG_VERSION}. You must upgrade the ${PKG_ORIGIN} port first
.endif
_PKG_CHECKED= 1
.endif
_EXPORTED_VARS+= _PKG_CHECKED
MASTERDIR?= ${.CURDIR}
.if ${MASTERDIR} != ${.CURDIR}
SLAVE_PORT?= yes
MASTER_PORT?=${MASTERDIR:C/[^\/]+/..///:C/[^\/]+/..///:C/^.*/([^\/]+/[^\/]+)$/\1/}
.else
SLAVE_PORT?= no
MASTER_PORT?=
.endif
.if ${MASTERDIR} != ${.CURDIR} && exists(${.CURDIR}/../Makefile.inc)
.include "${.CURDIR}/../Makefile.inc"
USE_SUBMAKE= yes
.endif
.if exists(${MASTERDIR}/../Makefile.inc)
.include "${MASTERDIR}/../Makefile.inc"
USE_SUBMAKE= yes
.endif
.if exists(${MASTERDIR}/Makefile.${ARCH}-${OPSYS})
.include "${MASTERDIR}/Makefile.${ARCH}-${OPSYS}"
USE_SUBMAKE= yes
.elif exists(${MASTERDIR}/Makefile.${OPSYS})
.include "${MASTERDIR}/Makefile.${OPSYS}"
USE_SUBMAKE= yes
.elif exists(${MASTERDIR}/Makefile.${ARCH})
.include "${MASTERDIR}/Makefile.${ARCH}"
USE_SUBMAKE= yes
.endif
.if exists(${MASTERDIR}/Makefile.local)
.include "${MASTERDIR}/Makefile.local"
USE_SUBMAKE= yes
.elif ${MASTERDIR} != ${.CURDIR} && exists(${.CURDIR}/Makefile.local)
.include "${.CURDIR}/Makefile.local"
USE_SUBMAKE= yes
.endif
.for _CATEGORY in ${CATEGORIES}
PKGCATEGORY?= ${_CATEGORY}
.endfor
_PORTDIRNAME= ${.CURDIR:T}
PORTDIRNAME?= ${_PORTDIRNAME}
PKGORIGIN?= ${PKGCATEGORY}/${PORTDIRNAME}
PORT_DBDIR?= /var/db/ports
UID_FILES?= ${PORTSDIR}/UIDs
GID_FILES?= ${PORTSDIR}/GIDs
UID_OFFSET?= 0
GID_OFFSET?= 0
USERS_BLACKLIST= _dhcp _pflogd _ypldap auditdistd bin bind daemon games hast kmem mailnull man news nobody operator pop proxy root smmsp sshd toor tty unbound uucp www
GROUPS_BLACKLIST= _dhcp _pflogd _ypldap audit authpf bin bind daemon dialer ftp games guest hast kmem mail mailnull man network news nobody nogroup operator proxy smmsp sshd staff sys tty unbound uucp wheel www
LDCONFIG_DIR= libdata/ldconfig
LDCONFIG32_DIR= libdata/ldconfig32
.if defined(PACKAGE_BUILDING)
TMPDIR?= /tmp
.endif # defined(PACKAGE_BUILDING)
.if defined(WITH_DEBUG_PORTS)
.if ${WITH_DEBUG_PORTS:M${PKGORIGIN}}
WITH_DEBUG= yes
.endif
.endif
.include "${PORTSDIR}/Mk/bsd.default-versions.mk"
.include "${PORTSDIR}/Mk/bsd.options.mk"
.endif
.if !defined(AFTERPORTMK) && !defined(INOPTIONSMK)
.if defined(_PREMKINCLUDED)
DEV_ERROR+= "you cannot include bsd.port[.pre].mk twice"
.endif
_PREMKINCLUDED= yes
.if defined(PORTVERSION)
.if ${PORTVERSION:M*[-,]*}x != x
IGNORE= PORTVERSION ${PORTVERSION} may not contain '-' '' or ','
.endif
.if defined(DISTVERSION)
DEV_ERROR+= "Defining both PORTVERSION and DISTVERSION is wrong, only set one, if necessary, set DISTNAME"
.endif
DISTVERSION?= ${PORTVERSION:S/:/::/g}
.elif defined(DISTVERSION)
PORTVERSION= ${DISTVERSION:tl:C/([a-z])[a-z]+/\1/g:C/([0-9])([a-z])/\1.\2/g:C/:(.)/\1/g:C/[^a-z0-9+]+/./g}
.endif
PORTREVISION?= 0
.if ${PORTREVISION} != 0
_SUF1= _${PORTREVISION}
.endif
PORTEPOCH?= 0
.if ${PORTEPOCH} != 0
_SUF2= ,${PORTEPOCH}
.endif
PKGVERSION= ${PORTVERSION:C/[-_,]/./g}${_SUF1}${_SUF2}
PKGNAME= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}-${PKGVERSION}
DISTVERSIONFULL= ${DISTVERSIONPREFIX}${DISTVERSION:C/:(.)/\1/g}${DISTVERSIONSUFFIX}
DISTNAME?= ${PORTNAME}-${DISTVERSIONFULL}
INDEXFILE?= INDEX-${OSVERSION:C/([0-9]*)[0-9]{5}/\1/}
PACKAGES?= ${PORTSDIR}/packages
TEMPLATES?= ${PORTSDIR}/Templates
KEYWORDS?= ${PORTSDIR}/Keywords
WRAPPERSDIR?= ${PORTSDIR}/Mk/Wrappers/
PATCHDIR?= ${MASTERDIR}/files
FILESDIR?= ${MASTERDIR}/files
SCRIPTDIR?= ${MASTERDIR}/scripts
PKGDIR?= ${MASTERDIR}
PREFIX?= ${LOCALBASE}
PKGCOMPATDIR?= ${LOCALBASE}/lib/compat/pkg
.if defined(USE_LOCAL_MK)
.include "${PORTSDIR}/Mk/bsd.local.mk"
.endif
.for odir in ${OVERLAYS}
.sinclude "${odir}/Mk/bsd.overlay.mk"
.endfor
.if defined(USE_JAVA)
.include "${PORTSDIR}/Mk/bsd.java.mk"
.endif
.if defined(USE_RUBY)
.include "${PORTSDIR}/Mk/bsd.ruby.mk"
.endif
.if defined(USE_OCAML)
.include "${PORTSDIR}/Mk/bsd.ocaml.mk"
.endif
.if defined(USE_APACHE_BUILD)
USES+= apache:build,${USE_APACHE_BUILD:C/2([0-9])/2.\1/g}
.elif defined(USE_APACHE_RUN)
USES+= apache:run,${USE_APACHE_RUN:C/2([0-9])/2.\1/g}
.elif defined(USE_APACHE)
USE_APACHE:= ${USE_APACHE:S/common/server,/}
USES+= apache:${USE_APACHE:C/2([0-9])/2.\1/g}
.endif
.if defined(USE_TEX)
.include "${PORTSDIR}/Mk/bsd.tex.mk"
.endif
.if defined(USE_GECKO)
.include "${PORTSDIR}/Mk/bsd.gecko.mk"
.endif
.if defined(USE_MYSQL)
USE_MYSQL:= ${USE_MYSQL:N[yY][eE][sS]:Nclient}
.if defined(WANT_MYSQL_VER)
.if empty(USE_MYSQL)
USE_MYSQL:=${WANT_MYSQL_VER}
.else
USE_MYSQL:=${USE_MYSQL},${WANT_MYSQL_VER}
.endif
.endif
USES+=mysql:${USE_MYSQL}
.endif
.if defined(WANT_WX) || defined(USE_WX) || defined(USE_WX_NOT)
.include "${PORTSDIR}/Mk/bsd.wx.mk"
.endif
.if defined(WANT_GSTREAMER) || defined(USE_GSTREAMER) || defined(USE_GSTREAMER1)
.include "${PORTSDIR}/Mk/bsd.gstreamer.mk"
.endif
.if !defined(UID)
UID!= ${ID} -u
.endif
DESTDIRNAME?= DESTDIR
.for target in sanity fetch extract patch configure build install test package stage
USES${target}?=
.endfor
.for f in ${USES}
_f:= ${f:C/:.//}
.if !defined(${_f}_ARGS)
${_f}_ARGS:= ${f:C/^[^\:](:|$)//:S/,/ /g}
.endif
.endfor
.for f in ${USES}
.undef _usefound
.for udir in ${OVERLAYS:C,$,/Mk/Uses,} ${USESDIR}
_usefile= ${udir}/${f:C/:.//}.mk
.if exists(${_usefile}) && !defined(_usefound)
_usefound=
.include "${_usefile}"
.endif
.endfor
.if !defined(_usefound)
ERROR+= "Unknown USES=${f:C/:.//}"
.endif
.endfor
.if !empty(FLAVORS)
. if ${FLAVORS:Mall}
DEV_ERROR+= "FLAVORS cannot contain 'all', it is a reserved value"
. endif
. for f in ${FLAVORS}
. if ${f:C/[[:lower:][:digit:]_]//g}
_BAD_FLAVOR_NAMES+= ${f}
. endif
. endfor
. if !empty(BAD_FLAVOR_NAMES)
DEV_ERROR+= "FLAVORS contains flavors that are not all [a-z0-9]: ${_BAD_FLAVOR_NAMES}"
. endif
.endif
.if !empty(FLAVOR)
. if empty(FLAVORS)
IGNORE= FLAVOR is defined (to ${FLAVOR}) while this port does not have FLAVORS
. elif ! ${FLAVORS:M${FLAVOR}}
IGNORE= Unknown flavor '${FLAVOR}', possible flavors: ${FLAVORS}
. endif
.endif
.if !empty(FLAVORS) && empty(FLAVOR)
FLAVOR= ${FLAVORS:[1]}
.endif
.if empty(_FLAVOR) && !empty(FLAVORS) && !empty(FLAVOR)
FLAVORS:= ${FLAVOR} ${FLAVORS:N${FLAVOR}}
.endif
.if !empty(FLAVOR) && !defined(_DID_FLAVORS_HELPERS)
_DID_FLAVORS_HELPERS= yes
_FLAVOR_HELPERS_OVERRIDE= DESCR PLIST PKGNAMEPREFIX PKGNAMESUFFIX
_FLAVOR_HELPERS_APPEND= CONFLICTS CONFLICTS_BUILD CONFLICTS_INSTALL
PKG_DEPENDS EXTRACT_DEPENDS PATCH_DEPENDS
FETCH_DEPENDS BUILD_DEPENDS LIB_DEPENDS
RUN_DEPENDS TEST_DEPENDS
.for v in ${FLAVOR_HELPERS_OVERRIDE}
.if defined(${FLAVOR}${v})
${v}= ${${FLAVOR}_${v}}
.endif
.endfor
.for v in ${FLAVOR_HELPERS_APPEND}
.if defined(${FLAVOR}${v})
${v}+= ${${FLAVOR}_${v}}
.endif
.endfor
.for v in BROKEN IGNORE
.if defined(${FLAVOR}${v})
${v}= flavor "${FLAVOR}" ${${FLAVOR}${v}}
.endif
.endfor
.if defined(FLAVORS_SUB)
PLIST_SUB+= ${FLAVORS:N${FLAVOR}:@v@${v:tu}="@comment " NO_${v:tu}=""@}
PLIST_SUB+= ${FLAVOR:tu}="" NO_${FLAVOR:tu}="@comment "
SUB_LIST+= ${FLAVORS:N${FLAVOR}:@v@${v:tu}="@comment " NO_${v:tu}=""@}
SUB_LIST+= ${FLAVOR:tu}="" NO_${FLAVOR:tu}="@comment "
.endif
.endif # defined(${FLAVOR})
EXTRACT_SUFX?= .tar.gz
.if defined(USE_LINUX_PREFIX)
PREFIX= ${LINUXBASE}
DATADIR?= ${PREFIX}/usr/share/${PORTNAME}
DOCSDIR?= ${PREFIX}/usr/share/doc/${PORTNAME}-${PORTVERSION}
NO_LICENSES_INSTALL= yes
NO_MTREE= yes
.endif
.if !defined(IGNORE_PATH_CHECKS)
.if ! ${PREFIX:M/*}
.BEGIN:
@${ECHO_MSG} "PREFIX must be defined as an absolute path so that when 'make'"
@${ECHO_MSG} "is invoked in the work area PREFIX points to the right place."
@${FALSE}
.endif
.endif
DATADIR?= ${PREFIX}/share/${PORTNAME}
DOCSDIR?= ${PREFIX}/share/doc/${PORTNAME}
ETCDIR?= ${PREFIX}/etc/${PORTNAME}
EXAMPLESDIR?= ${PREFIX}/share/examples/${PORTNAME}
WWWDIR?= ${PREFIX}/www/${PORTNAME}
WWWOWN?= www
WWWGRP?= www
PKG_ORIGIN?= ports-mgmt/pkg
PKGNG_ORIGIN= ${PKG_ORIGIN}
WITH_PKGNG?= yes
WITH_PKG?= ${WITH_PKGNG}
.endif
.if !defined(BEFOREPORTMK) && !defined(INOPTIONSMK)
.if defined(_POSTMKINCLUDED)
DEV_ERROR+= "${PKGNAME}: Makefile error: you cannot include bsd.port[.post].mk twice"
@${FALSE}
.endif
_POSTMKINCLUDED= yes
.if defined(BUNDLE_LIBS)
PKG_NOTES+= no_provide_shlib
PKG_NOTE_no_provide_shlib= yes
.endif
.if defined(DEPRECATED)
PKG_NOTES+= deprecated
PKG_NOTE_deprecated=${DEPRECATED}
.endif
.if defined(EXPIRATION_DATE)
PKG_NOTES+= expiration_date
PKG_NOTE_expiration_date= ${EXPIRATION_DATE}
.endif
.if !empty(FLAVOR)
PKG_NOTES+= flavor
PKG_NOTE_flavor= ${FLAVOR}
.endif
TEST_ARGS?= ${MAKE_ARGS}
TEST_ENV?= ${MAKE_ENV}
PKG_ENV+= PORTSDIR=${PORTSDIR}
CONFIGURE_ENV+= XDG_DATA_HOME=${WRKDIR}
XDG_CONFIG_HOME=${WRKDIR}
XDG_CACHE_HOME=${WRKDIR}/.cache
HOME=${WRKDIR}
MAKE_ENV+= XDG_DATA_HOME=${WRKDIR}
XDG_CONFIG_HOME=${WRKDIR}
XDG_CACHE_HOME=${WRKDIR}/.cache
HOME=${WRKDIR}
.if defined(TMPDIR)
MAKE_ENV+= TMPDIR="${TMPDIR}"
CONFIGURE_ENV+= TMPDIR="${TMPDIR}"
.endif # defined(TMPDIR)
QA_ENV+= STAGEDIR=${STAGEDIR}
PREFIX=${PREFIX}
LINUXBASE=${LINUXBASE}
LOCALBASE=${LOCALBASE}
REWARNFILE=${REWARNFILE}
"STRIP=${STRIP}"
TMPPLIST=${TMPPLIST}
CURDIR='${.CURDIR}'
PKGMESSAGES='${_PKGMESSAGES}'
FLAVOR=${FLAVOR}
FLAVORS='${FLAVORS}'
BUNDLE_LIBS=${BUNDLE_LIBS}
LDCONFIG_DIR="${LDCONFIG_DIR}"
PKGORIGIN=${PKGORIGIN}
LIB_RUN_DEPENDS='${_LIB_RUN_DEPENDS:C,[^:]:([^:]):?.,\1,}'
UNIFIED_DEPENDS=${_UNIFIED_DEPENDS:C,([^:]:[^:]):?.,\1,:O:u:Q}
PKGBASE=${PKGBASE}
LICENSE="${LICENSE}"
LICENSE_PERMS="${_LICENSE_PERMS}"
DISABLE_LICENSES="${DISABLE_LICENSES:Dyes}"
PORTNAME=${PORTNAME}
NO_ARCH=${NO_ARCH}
"NO_ARCH_IGNORE=${NO_ARCH_IGNORE}"
USE_RUBY=${USE_RUBY}
.if !empty(USES:Mssl)
QA_ENV+= USESSSL=yes
.endif
.if !empty(USES:Mdesktop-file-utils)
QA_ENV+= USESDESKTOPFILEUTILS=yes
.endif
.if !empty(USES:Mlibtool*)
QA_ENV+= USESLIBTOOL=yes
.endif
.if !empty(USES:Mshared-mime-info)
QA_ENV+= USESSHAREDMIMEINFO=yes
.endif
.if !empty(USES:Mterminfo)
QA_ENV+= USESTERMINFO=yes
.endif
CO_ENV+= STAGEDIR=${STAGEDIR}
PREFIX=${PREFIX}
LOCALBASE=${LOCALBASE}
WRKDIR=${WRKDIR}
WRKSRC=${WRKSRC}
MTREE_FILE=${MTREE_FILE}
TMPPLIST=${TMPPLIST}
SCRIPTSDIR=${SCRIPTSDIR}
PLIST_SUB_SED="${PLIST_SUB_SED}"
PORT_OPTIONS="${PORT_OPTIONS}"
PORTSDIR="${PORTSDIR}"
.if defined(CROSS_SYSROOT)
PKG_ENV+= ABI_FILE=${CROSS_SYSROOT}/bin/sh
MAKE_ENV+= NM=${NM}
STRIPBIN=${STRIPBIN}
PKG_CONFIG_SYSROOT_DIR="${CROSS_SYSROOT}"
CONFIGURE_ENV+= PKG_CONFIG_SYSROOT_DIR="${CROSS_SYSROOT}"
.endif
.if empty(FLAVOR)
_WRKDIR= work
.else
_WRKDIR= work-${FLAVOR}
.endif
WRKDIR?= ${WRKDIRPREFIX}${.CURDIR}/${_WRKDIR}
BINARY_LINKDIR= ${WRKDIR}/.bin
PATH:= ${BINARY_LINKDIR}:${PATH}
.if !${MAKE_ENV:MPATH=} && !${CONFIGURE_ENV:MPATH=}
MAKE_ENV+= PATH=${PATH}
CONFIGURE_ENV+= PATH=${PATH}
.endif
.if !defined(IGNORE_MASTER_SITE_GITHUB) && defined(USE_GITHUB) && empty(USE_GITHUB:Mnodefault)
.if defined(WRKSRC)
DEV_WARNING+= "You are using USE_GITHUB and WRKSRC is set which is wrong. Set GH_PROJECT correctly or set WRKSRC_SUBDIR and remove WRKSRC entirely."
.endif
WRKSRC?= ${WRKDIR}/${GH_PROJECT_DEFAULT}-${GH_TAGNAME_EXTRACT}
.endif
.if !default(IGNORE_MASTER_SITE_GITLAB) && defined(USE_GITLAB) && empty(USE_GITLAB:Mnodefault)
.if defined(WRKSRC)
DEV_WARNING+= "You are using USE_GITLAB and WRKSRC is set which is wrong. Set GL_PROJECT, GL_ACCOUNT correctly, and/or set WRKSRC_SUBDIR and remove WRKSRC entirely."
.endif
WRKSRC?= ${WRKDIR}/${GL_PROJECT}-${GL_COMMIT}
.endif
.if defined(NO_WRKSUBDIR)
WRKSRC?= ${WRKDIR}/${PKGNAME}
EXTRACT_WRKDIR:= ${WRKSRC}
.else
WRKSRC?= ${WRKDIR}/${DISTNAME}
EXTRACT_WRKDIR:= ${WRKDIR}
.endif
.if defined(WRKSRC_SUBDIR)
WRKSRC:= ${WRKSRC}/${WRKSRC_SUBDIR}
.endif
.if defined(CONFIGURE_OUTSOURCE)
CONFIGURE_CMD?= ${WRKSRC}/${CONFIGURE_SCRIPT}
CONFIGURE_WRKSRC?= ${WRKDIR}/.build
BUILD_WRKSRC?= ${CONFIGURE_WRKSRC}
INSTALL_WRKSRC?= ${CONFIGURE_WRKSRC}
TEST_WRKSRC?= ${CONFIGURE_WRKSRC}
.endif
PATCH_WRKSRC?= ${WRKSRC}
CONFIGURE_WRKSRC?= ${WRKSRC}
BUILD_WRKSRC?= ${WRKSRC}
INSTALL_WRKSRC?=${WRKSRC}
TEST_WRKSRC?= ${WRKSRC}
PLIST_SUB+= OSREL=${OSREL} PREFIX=%D LOCALBASE=${LOCALBASE}
RESETPREFIX=${PREFIX}
SUB_LIST+= PREFIX=${PREFIX} LOCALBASE=${LOCALBASE}
DATADIR=${DATADIR} DOCSDIR=${DOCSDIR} EXAMPLESDIR=${EXAMPLESDIR}
WWWDIR=${WWWDIR} ETCDIR=${ETCDIR}
PLIST_SUB_SED_MIN?= 2
PLIST_SUB_SED_tmp1= ${PLIST_SUB:C/.*=.{1,${PLIST_SUB_SED_MIN}}$//g}
PLIST_SUB_SED_tmp2= ${PLIST_SUB_SED_tmp1:NEXTRACT_SUFX=:NOSREL=:NLIB32DIR=:NPREFIX=:NLOCALBASE=:NRESETPREFIX=:N*="":N*="@comment*}
PLIST_SUB_SED_tmp3?= ${PLIST_SUB_SED_tmp2:C/(${PLIST_SUB:M*_regex=:C/_regex=./=./:Q:S/\ /|/g:S/\//g})//:C/(.)_regex=(.*)/\1=\2/}
PLIST_SUB_SED?= ${PLIST_SUB_SED_tmp3:C/([^=])="?([^"])"?/s!\2!%%\1%%!g;/g:C/./[.]/g}
CFLAGS:=
.if defined(WITHOUT_CPU_CFLAGS)
.if defined(_CPUCFLAGS)
.if !empty(_CPUCFLAGS)
CFLAGS:= ${CFLAGS:C/${_CPUCFLAGS}//}
.endif
.endif
.endif
.if defined(WITH_DEBUG)
.if !defined(INSTALL_STRIPPED)
STRIP= #none
MAKE_ENV+= DONTSTRIP=yes
STRIP_CMD= ${TRUE}
.endif
DEBUG_FLAGS?= -g
CFLAGS:= ${CFLAGS:N-O*:N-fno-strict*} ${DEBUG_FLAGS}
.if defined(INSTALL_TARGET)
INSTALL_TARGET:=
.endif
.endif
.if defined(USE_LTO)
.include "${PORTSDIR}/Mk/bsd.lto.mk"
.endif
.if !defined(WITHOUT_SSP)
.include "${PORTSDIR}/Mk/bsd.ssp.mk"
.endif
MAKE_ENV+= NO_PIE=yes
MAKE_ENV+= MK_DEBUG_FILES=no
MAKE_ENV+= MK_KERNEL_SYMBOLS=no
CONFIGURE_SHELL?= ${SH}
MAKE_SHELL?= ${SH}
CONFIGURE_ENV+= SHELL=${CONFIGURE_SHELL} CONFIG_SHELL=${CONFIGURE_SHELL}
MAKE_ENV+= SHELL=${MAKE_SHELL} NO_LINT=YES
.if defined(PATCHFILES) && ${PATCHFILES:M*.zip}
PATCH_DEPENDS+= ${LOCALBASE}/bin/unzip:archivers/unzip
.endif
.if ${ARCH} == "amd64"
.if exists(/usr/lib32)
HAVE_COMPAT_IA32_LIBS?= YES
.endif
.if !defined(HAVE_COMPAT_IA32_KERN)
HAVE_COMPAT_IA32_KERN!= if ${SYSCTL} -n compat.ia32.maxvmem >/dev/null 2>&1; then echo YES; fi; echo
.if empty(HAVE_COMPAT_IA32_KERN)
.undef HAVE_COMPAT_IA32_KERN
.endif
.endif
.endif
_EXPORTED_VARS+= HAVE_COMPAT_IA32_KERN
.if defined(IA32_BINARY_PORT) && ${ARCH} != "i386"
.if ${ARCH} == "amd64"
.if !defined(HAVE_COMPAT_IA32_KERN)
IGNORE= requires a kernel with compiled-in IA32 compatibility
.elif !defined(HAVE_COMPAT_IA32_LIBS)
IGNORE= requires 32-bit libraries installed under /usr/lib32
.endif
_LDCONFIG_FLAGS=-32
LIB32DIR= lib32
.else
IGNORE= requires i386 (or compatible) platform to run
.endif
.else
LIB32DIR= lib
.endif
PLIST_SUB+= LIB32DIR=${LIB32DIR}
.if ${WITH_PKG} == devel
PKG_ORIGIN= ports-mgmt/pkg-devel
.endif
.if !defined(PKG_DEPENDS) && !defined(CLEAN_FETCH_ENV)
PKG_DEPENDS+= ${LOCALBASE}/sbin/pkg:${PKG_ORIGIN}
.endif
.if defined(USE_GCC)
.include "${PORTSDIR}/Mk/bsd.gcc.mk"
.endif
.if defined(LLD_UNSAFE) && ${/usr/bin/ld:L:tA} == /usr/bin/ld.lld
LDFLAGS+= -fuse-ld=bfd
BINARY_ALIAS+= ld=${LD}
. if !defined(USE_BINUTILS)
. if exists(/usr/bin/ld.bfd)
LD= /usr/bin/ld.bfd
CONFIGURE_ENV+= LD=${LD}
MAKE_ENV+= LD=${LD}
. else
USE_BINUTILS= yes
. endif
. endif
.endif
.if defined(USE_BINUTILS) && !defined(DISABLE_BINUTILS)
BUILD_DEPENDS+= ${LOCALBASE}/bin/as:devel/binutils
BINUTILS?= ADDR2LINE AR AS CPPFILT GPROF LD NM OBJCOPY OBJDUMP RANLIB
READELF SIZE STRINGS
BINUTILS_NO_MAKE_ENV?=
. for b in ${BINUTILS}
${b}= ${LOCALBASE}/bin/${b:C/PP/++/:tl}
. if defined(GNU_CONFIGURE) || defined(BINUTILS_CONFIGURE)
CONFIGURE_ENV+= ${b}="${${b}}"
. endif
. if ${BINUTILS_NO_MAKE_ENV:M${b}} == ""
MAKE_ENV+= ${b}="${${b}}"
. endif
. endfor
.endif
.if defined(USE_OPENLDAP) || defined(WANT_OPENLDAP_VER)
.include "${PORTSDIR}/Mk/bsd.ldap.mk"
.endif
.if defined(USE_RC_SUBR)
SUB_FILES+= ${USE_RC_SUBR}
.endif
.if defined(USE_LDCONFIG) && ${USE_LDCONFIG:tl} == "yes"
USE_LDCONFIG= ${PREFIX}/lib
.endif
.if defined(USE_LDCONFIG32) && ${USE_LDCONFIG32:tl} == "yes"
IGNORE= has USE_LDCONFIG32 set to yes, which is not correct
.endif
.if defined(USE_LDCONFIG) || defined(USE_LDCONFIG32)
.if defined(USE_LINUX_PREFIX)
PLIST_FILES+= "@ldconfig-linux ${LINUXBASE}"
.else
PLIST_FILES+= "@ldconfig"
.endif
.endif
PKG_IGNORE_DEPENDS?= 'this_port_does_not_exist'
.if defined(_DESTDIR_VIA_ENV)
MAKE_ENV+= ${DESTDIRNAME}=${STAGEDIR}
.else
MAKE_ARGS+= ${DESTDIRNAME}=${STAGEDIR}
.endif
.if defined(NO_PREFIX_RMDIR)
CO_ENV+= NO_PREFIX_RMDIR=1
.else
CO_ENV+= NO_PREFIX_RMDIR=0
.endif
METADIR= ${WRKDIR}/.metadir
PKGPREINSTALL?= ${PKGDIR}/pkg-pre-install
PKGPOSTINSTALL?= ${PKGDIR}/pkg-post-install
PKGPREDEINSTALL?= ${PKGDIR}/pkg-pre-deinstall
PKGPOSTDEINSTALL?= ${PKGDIR}/pkg-post-deinstall
_FORCE_POST_PATTERNS= rmdir kldxref mkfontscale mkfontdir fc-cache
fonts.dir fonts.scale gtk-update-icon-cache
gio-querymodules
gtk-query-immodules
ldconfig
load-octave-pkg
ocamlfind
update-desktop-database update-mime-database
gdk-pixbuf-query-loaders catalog.ports
glib-compile-schemas
ccache-update-links
.if defined(USE_LOCAL_MK)
.include "${PORTSDIR}/Mk/bsd.local.mk"
.endif
.for odir in ${OVERLAYS}
.sinclude "${odir}/Mk/bsd.overlay.mk"
.endfor
.if defined(USE_GSTREAMER1)
.include "${PORTSDIR}/Mk/bsd.gstreamer.mk"
.endif
.if defined(USE_JAVA)
.include "${PORTSDIR}/Mk/bsd.java.mk"
.endif
.if defined(USE_OCAML)
.include "${PORTSDIR}/Mk/bsd.ocaml.mk"
.endif
.if defined(USE_WX) || defined(USE_WX_NOT)
.include "${PORTSDIR}/Mk/bsd.wx.mk"
.endif
.if defined(USE_GECKO)
.include "${PORTSDIR}/Mk/bsd.gecko.mk"
.endif
.if exists(${PORTSDIR}/Makefile.inc)
.include "${PORTSDIR}/Makefile.inc"
USE_SUBMAKE= yes
.endif
.for f in ${_USES_POST}
_f:= ${f:C/:.//}
.if !defined(${_f}_ARGS)
${_f}_ARGS:= ${f:C/^[^\:](:|$)//:S/,/ /g}
.endif
.endfor
.for f in ${_USES_POST}
.undef _usefound
.for udir in ${OVERLAYS:C,$,/Mk/Uses,} ${USESDIR}
_usefile= ${udir}/${f:C/:.//}.mk
.if exists(${_usefile}) && !defined(_usefound)
_usefound=
.include "${_usefile}"
.endif
.endfor
.if !defined(_usefound)
ERROR+= "Unknown USES=${f:C/:.//}"
.endif
.endfor
.if defined(PORTNAME)
.include "${PORTSDIR}/Mk/bsd.sanity.mk"
.endif
.if defined(USE_LOCALE)
CONFIGURE_ENV+= LANG=${USE_LOCALE} LC_ALL=${USE_LOCALE}
MAKE_ENV+= LANG=${USE_LOCALE} LC_ALL=${USE_LOCALE}
.endif
REINPLACE_ARGS?= -i.bak
.if defined(DEVELOPER)
REINPLACE_CMD?= ${SETENV} WRKSRC=${WRKSRC} REWARNFILE=${REWARNFILE} ${SH} ${SCRIPTSDIR}/sed_checked.sh
.else
REINPLACE_CMD?= ${SED} ${REINPLACE_ARGS}
.endif
FRAMEWORK_REINPLACE_CMD?= ${SED} -i.bak
EXTRACT_COOKIE?= ${WRKDIR}/.extract_done.${PORTNAME}.${PREFIX:S////g}
CONFIGURE_COOKIE?= ${WRKDIR}/.configure_done.${PORTNAME}.${PREFIX:S////g}
INSTALL_COOKIE?= ${WRKDIR}/.install_done.${PORTNAME}.${PREFIX:S////g}
BUILD_COOKIE?= ${WRKDIR}/.build_done.${PORTNAME}.${PREFIX:S////g}
PATCH_COOKIE?= ${WRKDIR}/.patch_done.${PORTNAME}.${PREFIX:S////g}
PACKAGE_COOKIE?= ${WRKDIR}/.package_done.${PORTNAME}.${PREFIX:S////g}
STAGE_COOKIE?= ${WRKDIR}/.stage_done.${PORTNAME}.${PREFIX:S///_/g}
DO_NADA?= ${TRUE}
NONEXISTENT?= /nonexistent
CHECKSUM_ALGORITHMS?= sha256
DISTINFO_FILE?= ${MASTERDIR}/distinfo
MAKE_FLAGS?= -f
MAKEFILE?= Makefile
MAKE_CMD?= ${BSDMAKE}
MAKE_ENV+= PREFIX=${PREFIX}
LOCALBASE=${LOCALBASE}
CC="${CC}" CFLAGS="${CFLAGS}"
CPP="${CPP}" CPPFLAGS="${CPPFLAGS}"
LDFLAGS="${LDFLAGS}" LIBS="${LIBS}"
CXX="${CXX}" CXXFLAGS="${CXXFLAGS}"
MANPREFIX="${MANPREFIX}"
.if !defined(WITHOUT_NO_STRICT_ALIASING)
.if ${CC} != "icc"
.if empty(CFLAGS:M-fno-strict-aliasing)
CFLAGS+= -fno-strict-aliasing
.endif
.endif
.endif
.for lang in C CXX
.if defined(USE_${lang}STD)
${lang}FLAGS:= ${${lang}FLAGS:N-std=*} -std=${USE_${lang}STD}
.endif
${lang}FLAGS+= ${${lang}FLAGS_${ARCH}}
.endfor
LDFLAGS+= ${LDFLAGS_${ARCH}}
.if defined(DISABLE_MAKE_JOBS) || defined(MAKE_JOBS_UNSAFE)
_MAKE_JOBS?= #
MAKE_JOBS_NUMBER= 1
.else
.if defined(MAKE_JOBS_NUMBER)
_MAKE_JOBS_NUMBER:= ${MAKE_JOBS_NUMBER}
.else
.if !defined(_SMP_CPUS)
_SMP_CPUS!= ${SYSCTL} -n kern.smp.cpus
.endif
_EXPORTED_VARS+= _SMP_CPUS
_MAKE_JOBS_NUMBER= ${_SMP_CPUS}
.endif
.if defined(MAKE_JOBS_NUMBER_LIMIT) && ( ${MAKE_JOBS_NUMBER_LIMIT} < ${_MAKE_JOBS_NUMBER} )
MAKE_JOBS_NUMBER= ${MAKE_JOBS_NUMBER_LIMIT}
.else
MAKE_JOBS_NUMBER= ${_MAKE_JOBS_NUMBER}
.endif
_MAKE_JOBS?= -j${MAKE_JOBS_NUMBER}
BUILD_FAIL_MESSAGE+= Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to the maintainer.
.endif
.include "${PORTSDIR}/Mk/bsd.ccache.mk"
.if !make(makesum)
FETCH_ENV?= SSL_NO_VERIFY_PEER=1 SSL_NO_VERIFY_HOSTNAME=1
.endif
FETCH_BINARY?= /usr/bin/fetch
FETCH_ARGS?= -Fpr
FETCH_REGET?= 1
FETCH_CMD?= ${FETCH_BINARY} ${FETCH_ARGS}
.if defined(RANDOMIZE_MASTER_SITES)
.if exists(/usr/games/random)
RANDOM_CMD?= /usr/games/random
.elif exists(/usr/bin/random)
RANDOM_CMD?= /usr/bin/random
.endif
.if defined(RANDOM_CMD) && !empty(RANDOM_CMD)
RANDOM_ARGS?= -w -f -
_RANDOMIZE_SITES= ${RANDOM_CMD} ${RANDOM_ARGS}
.endif
.endif
TOUCH?= /usr/bin/touch
TOUCH_FLAGS?= -f
DISTORIG?= .bak.orig
PATCH?= /usr/bin/patch
PATCH_STRIP?= -p0
PATCH_DIST_STRIP?= -p0
.if defined(PATCH_DEBUG)
PATCH_DEBUG_TMP= yes
PATCH_ARGS?= --forward -E ${PATCH_STRIP}
PATCH_DIST_ARGS?= --suffix ${DISTORIG} --forward -E ${PATCH_DIST_STRIP}
.else
PATCH_ARGS?= --forward --quiet -E ${PATCH_STRIP}
PATCH_DIST_ARGS?= --suffix ${DISTORIG} --forward --quiet -E ${PATCH_DIST_STRIP}
.endif
.if !defined(QUIET)
PATCH_SILENT= PATCH_SILENT=yes
.endif
.if defined(BATCH)
PATCH_ARGS+= --batch
PATCH_DIST_ARGS+= --batch
.endif
PATCH_ARGS+= -V simple
PATCH_DIST_ARGS+= -V simple
.if defined(PATCH_CHECK_ONLY)
PATCH_ARGS+= -C
PATCH_DIST_ARGS+= -C
.endif
.if ${PATCH} == "/usr/bin/patch"
PATCH_ARGS+= --suffix .orig
PATCH_DIST_ARGS+= --suffix .orig
.endif
TAR?= /usr/bin/tar
EXTRACT_CMD?= ${TAR}
EXTRACT_BEFORE_ARGS?= -xf
EXTRACT_AFTER_ARGS?= --no-same-owner --no-same-permissions
.if !defined(MTREE_FILE) && !defined(NO_MTREE)
.if ${PREFIX} == /usr
MTREE_FILE= /etc/mtree/BSD.usr.dist
.else
MTREE_FILE= ${PORTSDIR}/Templates/BSD.local.dist
.endif
.endif
MTREE_CMD?= /usr/sbin/mtree
MTREE_ARGS?= -U ${MTREE_FOLLOWS_SYMLINKS} -f ${MTREE_FILE} -d -e -p
_SHAREMODE?= 0644
INSTALL_PROGRAM= ${INSTALL} ${COPY} ${STRIP} -m ${BINMODE}
INSTALL_KLD= ${INSTALL} ${COPY} -m ${BINMODE}
INSTALL_LIB= ${INSTALL} ${COPY} ${STRIP} -m ${_SHAREMODE}
INSTALL_SCRIPT= ${INSTALL} ${COPY} -m ${BINMODE}
INSTALL_DATA= ${INSTALL} ${COPY} -m ${_SHAREMODE}
INSTALL_MAN= ${INSTALL} ${COPY} -m ${MANMODE}
INSTALL_MACROS= BSD_INSTALL_PROGRAM="${INSTALL_PROGRAM}"
BSD_INSTALL_LIB="${INSTALL_LIB}"
BSD_INSTALL_SCRIPT="${INSTALL_SCRIPT}"
BSD_INSTALL_DATA="${INSTALL_DATA}"
BSD_INSTALL_MAN="${INSTALL_MAN}"
MAKE_ENV+= ${INSTALL_MACROS}
SCRIPTS_ENV+= ${INSTALL_MACROS}
COPYTREE_BIN= ${SH} -c '(${FIND} -Ed $$1 $$3 |
-o -type f -exec
COPYTREE_SHARE= ${SH} -c '(${FIND} -Ed $$1 $$3 |
-o -type f -exec
.if defined(FORCE_PACKAGE)
.undef NO_PACKAGE
.endif
DESCR?= ${PKGDIR}/pkg-descr
PLIST?= ${PKGDIR}/pkg-plist
PKGHELP?= ${PKGDIR}/pkg-help
PKGINSTALL?= ${PKGDIR}/pkg-install
PKGDEINSTALL?= ${PKGDIR}/pkg-deinstall
PKGMESSAGE?= ${PKGDIR}/pkg-message
_PKGMESSAGES+= ${PKGMESSAGE}
TMPPLIST?= ${WRKDIR}/.PLIST.mktmp
.if defined(_PKG_TRANSITIONING_TO_NEW_EXT)
.if defined(PKG_NOCOMPRESS)
PKG_SUFX?= .tar
.else
PKG_SUFX?= .txz
.endif
PKG_COMPRESSION_FORMAT?= ${PKG_SUFX:S/.//}
.else
.if defined(PKG_SUFX)
PKG_COMPRESSION_FORMAT?= ${PKG_SUFX:S/.//}
WARNING+= "PKG_SUFX is defined, it should be replaced with PKG_COMPRESSION_FORMAT"
.endif
PKG_SUFX= .pkg
.endif
.if defined(PKG_NOCOMPRESS)
PKG_COMPRESSION_FORMAT?= tar
.else
#.if ${OSVERSION} > 1400000
#PKG_COMPRESSION_FORMAT?= tzst
#.else
PKG_COMPRESSION_FORMAT?= txz
#.endif
.endif
PKG_DBDIR?= /var/db/pkg
ALL_TARGET?= all
INSTALL_TARGET?= install
INSTALL_TARGET+= ${LATE_INSTALL_ARGS}
.if !defined (DISABLE_LICENSES)
.include "${PORTSDIR}/Mk/bsd.licenses.mk"
.endif
.include "${PORTSDIR}/Mk/bsd.sites.mk"
MASTER_SITES?=
PATCH_SITES?=
_MASTER_SITES_DEFAULT?=
_PATCH_SITES_DEFAULT?=
.for _S in ${MASTER_SITES}
_S_TEMP= ${_S:S/^${_S:C@/?:[^/:]+$@/@}//:S/^://}
. if !empty(_S_TEMP)
. for _group in ${_S_TEMP:S/,/ /g}
_G_TEMP= ${_group}
. if ${G_TEMP:C/[a-zA-Z0-9]//g}
check-makevars::
@${ECHO_MSG} "The ${S} MASTER_SITES line has"
@${ECHO_MSG} "a group with invalid characters, only use [a-zA-Z0-9]"
@${FALSE}
. endif
. if ${_G_TEMP} == all || ${_G_TEMP} == ALL || ${_G_TEMP} == default
check-makevars::
@${ECHO_MSG} "Makefile error: the words all, ALL and default are reserved and cannot be"
@${ECHO_MSG} "used in group definitions. Please fix your MASTER_SITES"
@${FALSE}
. endif
MASTER_SITES${_group}+= ${_S:C@^(./):[^/:]+$@\1@}
. endfor
. else
_MASTER_SITES_DEFAULT+= ${_S:C@^(./):[^/:]+$@\1@}
. endif
.endfor
.for _S in ${PATCH_SITES}
_S_TEMP= ${_S:S/^${_S:C@/:[^/:]+$@/@}//:S/^://}
. if !empty(_S_TEMP)
. for _group in ${_S_TEMP:S/,/ /g}
_G_TEMP= ${_group}
. if ${G_TEMP:C/[a-zA-Z0-9]//g}
check-makevars::
@${ECHO_MSG} "The ${S} PATCH_SITES line has"
@${ECHO_MSG} "a group with invalid characters, only use [a-zA-Z0-9]"
@${FALSE}
. endif
. if ${_G_TEMP} == all || ${_G_TEMP} == ALL || ${_G_TEMP} == default
check-makevars::
@${ECHO_MSG} "The words all, ALL and default are reserved and cannot be"
@${ECHO_MSG} "used in group definitions. Please fix your PATCH_SITES"
@${FALSE}
. endif
PATCH_SITES${_group}+= ${_S:C@^(./):[^/:]+$@\1@}
. endfor
. else
_PATCH_SITES_DEFAULT+= ${_S:C@^(./):[^/:]+$@\1@}
. endif
.endfor
.for _S in ${MASTER_SITE_SUBDIR}
_S_TEMP= ${_S:S/^${_S:C@/:[^/:]+$@/@}//:S/^://}
. if !empty(_S_TEMP)
. for _group in ${_S_TEMP:S/,/ /g}
_G_TEMP= ${_group}
. if ${_G_TEMP} == all || ${_G_TEMP} == ALL || ${_G_TEMP} == default
check-makevars::
@${ECHO_MSG} "Makefile error: the words all, ALL and default are reserved and cannot be"
@${ECHO_MSG} "used in group definitions. Please fix your MASTER_SITE_SUBDIR"
@${FALSE}
. endif
. if defined(MASTER_SITES${_group})
MASTER_SITE_SUBDIR${_group}+= ${_S:C@^(.)/:[^/:]+$@\1@}
. endif
. endfor
. else
. if defined(_MASTER_SITES_DEFAULT)
_MASTER_SITE_SUBDIR_DEFAULT+= ${_S:C@^(.)/:[^/:]+$@\1@}
. endif
. endif
.endfor
.for _S in ${PATCH_SITE_SUBDIR}
_S_TEMP= ${_S:S/^${_S:C@/:[^/:]+$@/@}//:S/^://}
. if !empty(_S_TEMP)
. for _group in ${_S_TEMP:S/,/ /g}
_G_TEMP= ${_group}
. if ${_G_TEMP} == all || ${_G_TEMP} == ALL || ${_G_TEMP} == default
check-makevars::
@${ECHO_MSG} "Makefile error: the words all, ALL and default are reserved and cannot be"
@${ECHO_MSG} "used in group definitions. Please fix your PATCH_SITE_SUBDIR"
@${FALSE}
. endif
. if defined(PATCH_SITES${_group})
PATCH_SITE_SUBDIR${_group}+= ${_S:C@^(.)/:[^/:]+$@\1@}
. endif
. endfor
. else
. if defined(_PATCH_SITES_DEFAULT)
_PATCH_SITE_SUBDIR_DEFAULT+= ${_S:C@^(.)/:[^/:]+$@\1@}
. endif
. endif
.endfor
.for _S in ${MASTER_SITES}
_S_TEMP= ${_S:S/^${_S:C@/:[^/:]+$@/@}//:S/^://}
. if !empty(_S_TEMP)
. for _group in ${_S_TEMP:S/,/ /g}
. if !defined(MASTER_SITE_SUBDIR${_group})
MASTER_SITES_TMP= ${MASTER_SITES${_group}:S^%SUBDIR%/^^}
. else
_S_TEMP_TEMP= ${MASTER_SITES${_group}:M*%SUBDIR%/}
. if empty(_S_TEMP_TEMP)
MASTER_SITES_TMP= ${MASTER_SITES${_group}}
. else
MASTER_SITES_TMP=
. for site in ${MASTER_SITES${_group}}
_S_TEMP_TEMP= ${site:M%SUBDIR%/}
. if empty(_S_TEMP_TEMP)
MASTER_SITES_TMP+= ${site}
. else
. for dir in ${MASTER_SITE_SUBDIR${_group}}
MASTER_SITES_TMP+= ${site:S^%SUBDIR%^${dir}^}
. endfor
. endif
. endfor
. endif
. endif
MASTER_SITES${_group}:= ${MASTER_SITES_TMP}
. endfor
. endif
.endfor
.if defined(_MASTER_SITE_SUBDIR_DEFAULT)
_S_TEMP= ${_MASTER_SITES_DEFAULT:M%SUBDIR%/}
. if empty(_S_TEMP)
MASTER_SITES_TMP= ${_MASTER_SITES_DEFAULT}
. else
MASTER_SITES_TMP=
. for site in ${_MASTER_SITES_DEFAULT}
_S_TEMP_TEMP= ${site:M%SUBDIR%/}
. if empty(_S_TEMP_TEMP)
MASTER_SITES_TMP+= ${site}
. else
. for dir in ${_MASTER_SITE_SUBDIR_DEFAULT}
MASTER_SITES_TMP+= ${site:S^%SUBDIR%^${dir}^}
. endfor
. endif
. endfor
. endif
.else
MASTER_SITES_TMP= ${_MASTER_SITES_DEFAULT:S^%SUBDIR%/^^}
.endif
_MASTER_SITES_DEFAULT:= ${MASTER_SITES_TMP}
MASTER_SITES_TMP=
.for _S in ${PATCH_SITES}
_S_TEMP= ${_S:S/^${_S:C@/:[^/:]+$@/@}//:S/^://}
. if !empty(_S_TEMP)
. for _group in ${_S_TEMP:S/,/ /g}
. if !defined(PATCH_SITE_SUBDIR${_group})
PATCH_SITES_TMP= ${PATCH_SITES${_group}:S^%SUBDIR%/^^}
. else
_S_TEMP_TEMP= ${PATCH_SITES${_group}:M%SUBDIR%/}
. if empty(_S_TEMP_TEMP)
PATCH_SITES_TMP= ${PATCH_SITES${_group}}
. else
PATCH_SITES_TMP=
. for site in ${PATCH_SITES${_group}}
_S_TEMP_TEMP= ${site:M%SUBDIR%/}
. if empty(_S_TEMP_TEMP)
PATCH_SITES_TMP+= ${site}
. else
. for dir in ${PATCH_SITE_SUBDIR${_group}}
PATCH_SITES_TMP+= ${site:S^%SUBDIR%^${dir}^}
. endfor
. endif
. endfor
. endif
. endif
PATCH_SITES${_group}:= ${PATCH_SITES_TMP}
. endfor
. endif
.endfor
.if defined(_PATCH_SITE_SUBDIR_DEFAULT)
_S_TEMP= ${_PATCH_SITES_DEFAULT:M%SUBDIR%/}
. if empty(_S_TEMP)
PATCH_SITES_TMP= ${_PATCH_SITES_DEFAULT}
. else
PATCH_SITES_TMP=
. for site in ${_PATCH_SITES_DEFAULT}
_S_TEMP_TEMP= ${site:M%SUBDIR%/*}
. if empty(_S_TEMP_TEMP)
PATCH_SITES_TMP+= ${site}
. else
. for dir in ${_PATCH_SITE_SUBDIR_DEFAULT}
PATCH_SITES_TMP+= ${site:S^%SUBDIR%^${dir}^}
. endfor
. endif
. endfor
. endif
.else
PATCH_SITES_TMP= ${_PATCH_SITES_DEFAULT:S^%SUBDIR%/^^}
.endif
_PATCH_SITES_DEFAULT:= ${PATCH_SITES_TMP}
PATCH_SITES_TMP=
MASTER_SITE_BACKUP?=
http://distcache.FreeBSD.org/ports-distfiles/${DIST_SUBDIR}/
MASTER_SITE_BACKUP:= ${MASTER_SITE_BACKUP:S^${DIST_SUBDIR}/^^}
.if defined(MASTER_SITE_FREEBSD)
_MASTER_SITE_OVERRIDE:= ${MASTER_SITE_BACKUP}
_MASTER_SITE_BACKUP:= # empty
.else
_MASTER_SITE_OVERRIDE= ${MASTER_SITE_OVERRIDE}
_MASTER_SITE_BACKUP= ${MASTER_SITE_BACKUP}
.endif
DISTFILES?= ${DISTNAME}${EXTRACT_SUFX}
_MASTER_SITES_ALL= ${_MASTER_SITES_DEFAULT}
_PATCH_SITES_ALL= ${_PATCH_SITES_DEFAULT}
_G_TEMP= DEFAULT
.for _D in ${DISTFILES}
_D_TEMP= ${_D:S/^${_D:C/:[^:]+$//}//}
. if !empty(_D_TEMP)
. for _group in ${_D_TEMP:S/^://:S/,/ /g}
. if !defined(MASTER_SITES${_group})
_G_TEMP_TEMP= ${_G_TEMP:M/${_group}/}
. if empty(_G_TEMP_TEMP)
_G_TEMP+= ${_group}
_MASTER_SITES_ALL+= ${MASTER_SITES${_group}}
. endif
. endif
. endfor
_DISTFILES+=
. else
_DISTFILES+= ${_D}
. endif
.endfor
_G_TEMP= DEFAULT
.for _P in ${PATCHFILES}
_P_TEMP= ${_P:C/:[^-:][^:]$//}
_P_groups= ${_P:S/^${_P:C/:[^:]+$//}//:S/^://}
_P_file= ${_P_TEMP:C/:-[^:]+$//}
_P_strip= ${_P_TEMP:S/^${_P_TEMP:C/:-[^:]$//}//:S/^://}
. if !empty(_P_groups)
. for _group in ${_P_groups:S/,/ /g}
. if !defined(PATCH_SITES${_group})
_G_TEMP_TEMP= ${_G_TEMP:M/${_group}/}
. if empty(_G_TEMP_TEMP)
_G_TEMP+= ${_group}
_PATCH_SITES_ALL+= ${PATCH_SITES${_group}}
. endif
. endif
. endfor
. endif
_PATCHFILES:= ${_PATCHFILES} ${_P_file}
. if empty(_P_strip)
_PATCHFILES2:= ${_PATCHFILES2} ${_P_file}
. else
_PATCHFILES2:= ${_PATCHFILES2} ${_P_file}:${_P_strip}
. endif
.endfor
_P_groups=
_P_file=
_P_strip=
_G_TEMP=
_G_TEMP_TEMP=
ALLFILES?= ${_DISTFILES} ${_PATCHFILES}
MASTER_SORT?=
MASTER_SORT_REGEX?=
MASTER_SORT_REGEX+= ${MASTER_SORT:S|.|\.|g:S|^|://[^/]*|:S|$|/|}
MASTER_SORT_AWK= BEGIN { RS = " "; ORS = " "; IGNORECASE = 1 ; gl = "${MASTER_SORT_REGEX:S|\|\\|g}"; }
.for srt in ${MASTER_SORT_REGEX}
MASTER_SORT_AWK+= /${srt:S|/|\/|g}/ { good["${srt:S|\|\\|g}"] = good["${srt:S|\|\\|g}"] " " $$0 ; next; }
.endfor
MASTER_SORT_AWK+= { rest = rest " " $$0; } END { n=split(gl, gla); for(i=1;i<=n;i++) { print good[gla[i]]; } print rest; }
_MASTER_SITES_ENV= _MASTER_SITES_DEFAULT=${_MASTER_SITES_DEFAULT:Q}
.for _F in ${DISTFILES}
_F_TEMP= ${_F:S/^${_F:C/:[^:]+$//}//:S/^://}
. if !empty(_F_TEMP)
. for _group in ${_F_TEMP:S/,/ /g}
. if defined(MASTER_SITES${_group})
_MASTER_SITES_ENV+= MASTER_SITES${_group}=${MASTER_SITES${_group}:Q}
. endif
. endfor
. endif
.endfor
_PATCH_SITES_ENV= _PATCH_SITES_DEFAULT=${_PATCH_SITES_DEFAULT:Q}
.for _F in ${PATCHFILES}
_F_TEMP= ${_F:S/^${_F:C/:[^-:][^:]*$//}//:S/^://}
. if !empty(_F_TEMP)
. for _group in ${_F_TEMP:S/,/ /g}
. if defined(PATCH_SITES${_group})
_PATCH_SITES_ENV+= PATCH_SITES${_group}=${PATCH_SITES${_group}:Q}
. endif
. endfor
. endif
.endfor
CKSUMFILES= ${ALLFILES}
.if defined(DIST_SUBDIR)
.if defined(CKSUMFILES) && ${CKSUMFILES}!=""
_CKSUMFILES?= ${CKSUMFILES:S/^/${DIST_SUBDIR}//}
.endif
.else
_CKSUMFILES?= ${CKSUMFILES}
.endif
EXTRACT_ONLY?= ${_DISTFILES}
.if !target(maintainer)
maintainer:
@${ECHO_CMD} "${MAINTAINER}"
.endif
.if !defined(CATEGORIES)
check-categories:
@${ECHO_MSG} "${PKGNAME}: Makefile error: CATEGORIES is mandatory."
@${FALSE}
.else
VALID_CATEGORIES+= accessibility afterstep arabic archivers astro audio
benchmarks biology cad chinese comms converters
databases deskutils devel dns docs
editors education elisp emulators enlightenment finance french ftp
games geography german gnome gnustep graphics
hamradio haskell hebrew hungarian irc japanese java
kde ${_KDE_CATEGORIES_SUPPORTED} kld korean
lang linux lisp
mail mate math mbone misc multimedia
net net-im net-mgmt net-p2p net-vpn news
parallel pear perl5 plan9 polish ports-mgmt portuguese
print python ruby rubygems russian
scheme science security shells spanish sysutils
tcl textproc tk
ukrainian vietnamese wayland windowmaker www
x11 x11-clocks x11-drivers x11-fm x11-fonts x11-servers x11-themes
x11-toolkits x11-wm xfce zope base
check-categories:
.for cat in ${CATEGORIES}
. if empty(VALID_CATEGORIES:M${cat})
@${ECHO_MSG} "${PKGNAME}: Makefile error: category ${cat} not in list of valid categories.";
${FALSE};
. endif
.endfor
.endif
PKGREPOSITORYSUBDIR?= All
PKGREPOSITORY?= ${PACKAGES}/${PKGREPOSITORYSUBDIR}
.if exists(${PACKAGES})
PACKAGES:= ${PACKAGES:S/:/:/g}
_HAVE_PACKAGES= yes
PKGFILE?= ${PKGREPOSITORY}/${PKGNAME}${PKG_SUFX}
PKGOLDFILE?= ${PKGREPOSITORY}/${PKGNAME}.${PKG_COMPRESSION_FORMAT}
.else
PKGFILE?= ${.CURDIR}/${PKGNAME}${PKG_SUFX}
.endif
WRKDIR_PKGFILE= ${WRKDIR}/pkg/${PKGNAME}${PKG_SUFX}
PKGLATESTREPOSITORY?= ${PACKAGES}/Latest
PKGBASE?= ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}
PKGLATESTFILE= ${PKGLATESTREPOSITORY}/${PKGBASE}${PKG_SUFX}
PKGOLDLATESTFILE= ${PKGLATESTREPOSITORY}/${PKGBASE}.${PKG_COMPRESSION_FORMAT}
PKGOLDSIGFILE= ${PKGLATESTREPOSITORY}/${PKGBASE}.${PKG_COMPRESSION_FORMAT}.sig
CONFIGURE_SCRIPT?= configure
CONFIGURE_CMD?= ./${CONFIGURE_SCRIPT}
CONFIGURE_TARGET?= ${HOSTARCH}-portbld-${OPSYS:tl}${OSREL}
CONFIGURE_TARGET:= ${CONFIGURE_TARGET:S/--build=//}
CONFIGURE_LOG?= config.log
CONFIGURE_FAIL_MESSAGE?= "Please report the problem to ${MAINTAINER} [maintainer] and attach the "${CONFIGURE_WRKSRC}/${CONFIGURE_LOG}" including the output of the failure of your make command. Also, it might be a good idea to provide an overview of all packages installed on your system (e.g. a ${PKG_INFO} -Ea)."
CONFIG_SITE?= ${PORTSDIR}/Templates/config.site
.if defined(GNU_CONFIGURE)
.if !defined(CONFIGURE_MAX_CMD_LEN)
CONFIGURE_MAX_CMD_LEN!= ${SYSCTL} -n kern.argmax
.endif
_EXPORTED_VARS+= CONFIGURE_MAX_CMD_LEN
GNU_CONFIGURE_PREFIX?= ${PREFIX}
GNU_CONFIGURE_MANPREFIX?= ${MANPREFIX}
CONFIGURE_ARGS+= --prefix=${GNU_CONFIGURE_PREFIX} $${_LATE_CONFIGURE_ARGS}
.if defined(CROSS_TOOLCHAIN)
CROSS_HOST= ${ARCH:S/amd64/x86_64/}-unknown-${OPSYS:tl}${OSREL}
CONFIGURE_ARGS+= --host=${CROSS_HOST}
.endif
CONFIGURE_ENV+= CONFIG_SITE=${CONFIG_SITE} lt_cv_sys_max_cmd_len=${CONFIGURE_MAX_CMD_LEN}
HAS_CONFIGURE= yes
SET_LATE_CONFIGURE_ARGS=
_LATE_CONFIGURE_ARGS="" ;
if [ -z "${CONFIGURE_ARGS:M--localstatedir=*:Q}" ] &&
${CONFIGURE_CMD} --help 2>&1 | ${GREP} -- --localstatedir > /dev/null; then
_LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --localstatedir=/var" ;
fi ;
if [ ! -z "${CONFIGURE_CMD} --help 2>&1 | ${GREP} -- '--mandir'
" ]; then
_LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --mandir=${GNU_CONFIGURE_MANPREFIX}/man" ;
fi ;
if [ ! -z "${CONFIGURE_CMD} --help 2>&1 | ${GREP} -- '--disable-silent-rules'
" ]; then
_LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --disable-silent-rules" ;
fi ;
if [ ! -z "${CONFIGURE_CMD} --help 2>&1 | ${GREP} -- '--enable-jobserver\[.*\#\]'
" ]; then
_LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --enable-jobserver=${MAKE_JOBS_NUMBER}" ;
fi ;
if [ ! -z "${CONFIGURE_CMD} --help 2>&1 | ${GREP} -- '--infodir'
" ]; then
_LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --infodir=${GNU_CONFIGURE_PREFIX}/${INFO_PATH}/${INFO_SUBDIR}" ;
fi ;
if [ -z "${CONFIGURE_CMD} --version 2>&1 | ${EGREP} -i '(autoconf.*2\.13|Unrecognized option)'
" ]; then
_LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --build=${CONFIGURE_TARGET}" ;
else
_LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} ${CONFIGURE_TARGET}" ;
fi ;
.endif
SCRIPTS_ENV+= CURDIR=${MASTERDIR} DISTDIR=${DISTDIR}
WRKDIR=${WRKDIR} WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR}
SCRIPTDIR=${SCRIPTDIR} FILESDIR=${FILESDIR}
PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} LOCALBASE=${LOCALBASE}
.if defined(BATCH)
SCRIPTS_ENV+= BATCH=yes
.endif
.if ${PREFIX} == /usr
MANPREFIX?= /usr/share
.else
MANPREFIX?= ${PREFIX}
MANDIRS+= ${PREFIX}/share/man
.endif
MANDIRS+= ${MANPREFIX}/man
.for sect in 1 2 3 4 5 6 7 8 9
MAN${sect}PREFIX?= ${MANPREFIX}
.endfor
MANLPREFIX?= ${MANPREFIX}
MANNPREFIX?= ${MANPREFIX}
INFO_PATH?= share/info
.if defined(INFO)
RUN_DEPENDS+= indexinfo:print/indexinfo
. for D in ${INFO:H}
RD:= ${D}
. if ${RD} != "."
. if !defined(INFO_SUBDIR)
INFO_SUBDIR:= ${RD}
. elif ${INFO_SUBDIR} != ${RD}
BROKEN= only one subdirectory in INFO is allowed
. endif
. endif
.undef RD
. endfor
.endif
DOCSDIR_REL?= ${DOCSDIR:S,^${PREFIX}/,,}
EXAMPLESDIR_REL?= ${EXAMPLESDIR:S,^${PREFIX}/,,}
DATADIR_REL?= ${DATADIR:S,^${PREFIX}/,,}
WWWDIR_REL?= ${WWWDIR:S,^${PREFIX}/,,}
ETCDIR_REL?= ${ETCDIR:S,^${PREFIX}/,,}
PLIST_SUB+= DOCSDIR="${DOCSDIR_REL}"
EXAMPLESDIR="${EXAMPLESDIR_REL}"
DATADIR="${DATADIR_REL}"
WWWDIR="${WWWDIR_REL}"
ETCDIR="${ETCDIR_REL}"
DESKTOPDIR?= ${PREFIX}/share/applications
.MAIN: all
################################################################
################################################################
.if defined(ONLY_FOR_ARCHS)
.for __ARCH in ${ONLY_FOR_ARCHS}
.if ${ARCH:M${__ARCH}} != ""
__ARCH_OK?= 1
.endif
.endfor
.else
__ARCH_OK?= 1
.endif
.if defined(NOT_FOR_ARCHS)
.for __NARCH in ${NOT_FOR_ARCHS}
.if ${ARCH:M${__NARCH}} != ""
.undef __ARCH_OK
.endif
.endfor
.endif
.if !defined(__ARCH_OK)
.if defined(ONLY_FOR_ARCHS)
IGNORE= is only for ${ONLY_FOR_ARCHS:O},
.else # defined(NOT_FOR_ARCHS)
IGNORE= does not run on ${NOT_FOR_ARCHS:O},
.endif
IGNORE+= while you are running ${ARCH}
.if defined(ONLY_FOR_ARCHS_REASON_${ARCH})
IGNORE+= (reason: ${ONLY_FOR_ARCHS_REASON_${ARCH}})
.elif defined(ONLY_FOR_ARCHS_REASON)
IGNORE+= (reason: ${ONLY_FOR_ARCHS_REASON})
.endif
.if defined(NOT_FOR_ARCHS_REASON_${ARCH})
IGNORE+= (reason: ${NOT_FOR_ARCHS_REASON_${ARCH}})
.elif defined(NOT_FOR_ARCHS_REASON)
IGNORE+= (reason: ${NOT_FOR_ARCHS_REASON})
.endif
.endif
.if !defined(NO_IGNORE)
.if (defined(IS_INTERACTIVE) && defined(BATCH))
IGNORE= is an interactive port
.elif (!defined(IS_INTERACTIVE) && defined(INTERACTIVE))
IGNORE= is not an interactive port
.elif (defined(NO_CDROM) && defined(FOR_CDROM))
IGNORE= may not be placed on a CDROM: ${NO_CDROM}
.elif (defined(RESTRICTED) && defined(NO_RESTRICTED))
IGNORE= is restricted: ${RESTRICTED}
.elif (defined(NO_PACKAGE) && defined(PACKAGE_BUILDING))
IGNORE= may not be packaged: ${NO_PACKAGE}
.elif defined(IGNORE_${ARCH})
IGNORE= ${IGNORE_${ARCH}}
.elif defined(IGNORE_${OPSYS}${OSREL:R}${ARCH})
IGNORE= ${IGNORE_${OPSYS}${OSREL:R}${ARCH}}
.elif defined(IGNORE_${OPSYS}${OSREL:R})
IGNORE= ${IGNORE${OPSYS}${OSREL:R}}
.elif defined(IGNORE${OPSYS})
IGNORE= ${IGNORE_${OPSYS}}
.elif defined(BROKEN)
.if !defined(TRYBROKEN)
IGNORE= is marked as broken: ${BROKEN}
.endif
.elif defined(BROKEN_${ARCH})
.if !defined(TRYBROKEN)
IGNORE= is marked as broken on ${ARCH}: ${BROKEN_${ARCH}}
.endif
.elif defined(BROKEN_${OPSYS}${OSREL:R}${ARCH})
.if !defined(TRYBROKEN)
IGNORE= is marked as broken on ${OPSYS} ${OSREL} ${ARCH}: ${BROKEN_${OPSYS}${OSREL:R}${ARCH}}
.endif
.elif defined(BROKEN_${OPSYS}${OSREL:R})
.if !defined(TRYBROKEN)
IGNORE= is marked as broken on ${OPSYS} ${OSREL}: ${BROKEN${OPSYS}${OSREL:R}}
.endif
.elif defined(BROKEN${OPSYS})
.if !defined(TRYBROKEN)
IGNORE= is marked as broken on ${OPSYS}: ${BROKEN_${OPSYS}}
.endif
.elif defined(FORBIDDEN)
IGNORE= is forbidden: ${FORBIDDEN}
.endif
.if defined(LEGAL_TEXT)
LEGAL= ${LEGAL_TEXT}
.elif defined(RESTRICTED)
LEGAL= ${RESTRICTED}
.elif defined(NO_CDROM)
LEGAL= ${NO_CDROM}
.elif defined(NO_PACKAGE) && ! defined(LEGAL_PACKAGE)
LEGAL= ${NO_PACKAGE}
.endif
.if (defined(MANUAL_PACKAGE_BUILD) && defined(PACKAGE_BUILDING))
IGNORE= has to be built manually: ${MANUAL_PACKAGE_BUILD}
clean:
@${IGNORECMD}
.endif
.if defined(IGNORE)
.if defined(IGNORE_SILENT)
IGNORECMD= ${DO_NADA}
.else
IGNORECMD= ${ECHO_MSG} "===> ${PKGNAME} "${IGNORE:Q}. | ${FMT_80} ; exit 1
.endif
_TARGETS= check-sanity fetch checksum extract patch configure all build
install reinstall test package stage restage
.for target in ${_TARGETS}
.if !target(${target})
${target}:
@${IGNORECMD}
.if defined(INSTALLS_DEPENDS)
@${FALSE}
.endif
.endif
.endfor
.endif
.endif # !defined(NO_IGNORE)
ignorelist:
.if defined(IGNORE) || defined(NO_PACKAGE)
ignorelist: package-name
.endif
ignorelist-verbose:
.if defined(IGNORE)
@${ECHO_CMD} "${PKGNAME}|IGNORE: "${IGNORE:Q}
.elif defined(NO_PACKAGE)
@${ECHO_CMD} "${PKGNAME}|NO_PACKAGE: "${NO_PACKAGE:Q}
.endif
################################################################
################################################################
.if !defined(LICENSE)
.if defined(RESTRICTED)
clean-restricted: delete-distfiles delete-package
clean-restricted-list: delete-distfiles-list delete-package-list
RESTRICTED_FILES?= ${_DISTFILES} ${_PATCHFILES}
.else
clean-restricted:
clean-restricted-list:
.endif
.if defined(NO_CDROM)
clean-for-cdrom: delete-distfiles delete-package
clean-for-cdrom-list: delete-distfiles-list delete-package-list
RESTRICTED_FILES?= ${_DISTFILES} ${_PATCHFILES}
.else
clean-for-cdrom:
clean-for-cdrom-list:
.endif
.endif # !defined(LICENSE)
.if defined(ALL_HOOK)
all:
@cd ${.CURDIR} && ${SETENV} CURDIR=${.CURDIR} DISTNAME=${DISTNAME}
DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} WRKSRC=${WRKSRC}
PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR}
FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX}
BUILD_DEPENDS="${BUILD_DEPENDS}" RUN_DEPENDS="${RUN_DEPENDS}"
CONFLICTS="${CONFLICTS}"
${ALL_HOOK}
.endif
.if !target(all)
all: stage
.endif
.if !defined(DEPENDS_TARGET)
.if defined(DEPENDS_PRECLEAN)
DEPENDS_TARGET= clean
DEPENDS_ARGS= NOCLEANDEPENDS=yes
.endif
.if make(reinstall)
DEPENDS_TARGET+= reinstall
.else
DEPENDS_TARGET+= install
.endif
.if defined(DEPENDS_CLEAN)
DEPENDS_TARGET+= clean
DEPENDS_ARGS+= NOCLEANDEPENDS=yes
.endif
.endif
.if defined(USE_GITLAB) && !${USE_GITLAB:Mnodefault} && empty(GL_COMMIT_DEFAULT)
check-makevars::
@${ECHO_MSG} "GL_COMMIT is a required 40 character hash for use USE_GITLAB"
@${FALSE}
.endif
################################################################
################################################################
.if ((!defined(OPTIONS_DEFINE) && !defined(OPTIONS_SINGLE) && !defined(OPTIONS_MULTI))
&& !defined(OPTIONS_GROUP) && !defined(OPTIONS_RADIO)
|| defined(CONFIG_DONE_${PKGBASE:tu}) ||
defined(PACKAGE_BUILDING) || defined(BATCH))
_OPTIONS_OK=yes
.endif
################################################################
################################################################
.if defined(NO_BUILD) && !target(build)
build: configure
@${TOUCH} ${TOUCH_FLAGS} ${BUILD_COOKIE}
.endif
.if defined(NO_PACKAGE) && !target(package)
package:
.if !defined(IGNORE_SILENT)
@${ECHO_MSG} "===> ${PKGNAME} may not be packaged: "${NO_PACKAGE:Q}.
.endif
.endif
################################################################
################################################################
.if defined(TRYBROKEN) && defined(BROKEN)
buildanyway-message:
@${ECHO_MSG} "Trying build of ${PKGNAME} even though it is marked BROKEN."
.endif
.if !target(check-deprecated)
check-deprecated:
.if ${MAINTAINER} == "[email protected]"
@${ECHO_MSG} "===> NOTICE:"
@${ECHO_MSG}
@${ECHO_MSG} "The ${PORTNAME} port currently does not have a maintainer. As a result, it is"
@${ECHO_MSG} "more likely to have unresolved issues, not be up-to-date, or even be removed in"
@${ECHO_MSG} "the future. To volunteer to maintain this port, please create an issue at:"
@${ECHO_MSG}
@${ECHO_MSG} "https://bugs.freebsd.org/bugzilla"
@${ECHO_MSG}
@${ECHO_MSG} "More information about port maintainership is available at:"
@${ECHO_MSG}
@${ECHO_MSG} "https://docs.freebsd.org/en/articles/contributing/#ports-contributing"
@${ECHO_MSG}
.endif
.if defined(DEPRECATED)
@${ECHO_MSG} "===> NOTICE:"
@${ECHO_MSG}
@${ECHO_MSG} "This port is deprecated; you may wish to reconsider installing it:"
@${ECHO_MSG}
@${ECHO_MSG} ${DEPRECATED:Q}.
@${ECHO_MSG}
.if defined(EXPIRATION_DATE)
@${ECHO_MSG} "It is scheduled to be removed on or after ${EXPIRATION_DATE}."
@${ECHO_MSG}
.endif
.endif
.endif
AUDITFILE?= ${PKG_DBDIR}/vuln.xml
check-vulnerable:
.if !defined(DISABLE_VULNERABILITIES) && !defined(PACKAGE_BUILDING)
&& exists(${AUDITFILE})
@${SETENV}
dp_ECHO_MSG="${ECHO_MSG}"
dp_PKG_BIN="${PKG_BIN}"
dp_PORTNAME="${PORTNAME}"
dp_PKGNAME="${PKGNAME}"
dp_SCRIPTSDIR="${SCRIPTSDIR}"
${SH} ${SCRIPTSDIR}/check-vulnerable.sh
.endif
_DO_FETCH_ENV=
dp_DISABLE_SIZE='${DISABLE_SIZE}'
dp_DISTDIR='${_DISTDIR}'
dp_DISTINFO_FILE='${DISTINFO_FILE}'
dp_DIST_SUBDIR='${DIST_SUBDIR}'
dp_ECHO_MSG='${ECHO_MSG}'
dp_FETCH_AFTER_ARGS='${FETCH_AFTER_ARGS}'
dp_FETCH_BEFORE_ARGS='${FETCH_BEFORE_ARGS}'
dp_FETCH_CMD='${FETCH_CMD}'
dp_FETCH_ENV=${FETCH_ENV:Q}
dp_FORCE_FETCH_ALL='${FORCE_FETCH_ALL}'
dp_FORCE_FETCH_LIST='${FORCE_FETCH_LIST}'
dp_MASTER_SITE_BACKUP='${_MASTER_SITE_BACKUP}'
dp_MASTER_SITE_OVERRIDE='${_MASTER_SITE_OVERRIDE}'
dp_MASTER_SORT_AWK='${MASTER_SORT_AWK}'
dp_NO_CHECKSUM='${NO_CHECKSUM}'
dp_RANDOMIZE_SITES='${_RANDOMIZE_SITES}'
dp_SCRIPTSDIR='${SCRIPTSDIR}'
dp_TARGET='${.TARGET}'
.if defined(DEVELOPER)
_DO_FETCH_ENV+= dp_DEVELOPER=yes
.else
_DO_FETCH_ENV+= dp_DEVELOPER=
.endif
.if !target(do-fetch)
do-fetch:
.if !empty(DISTFILES)
@${SETENV}
${_DO_FETCH_ENV} ${_MASTER_SITES_ENV}
dp_SITE_FLAVOR=MASTER
${SH} ${SCRIPTSDIR}/do-fetch.sh ${DISTFILES:C/./'&'/}
.endif
.if defined(PATCHFILES) && !empty(PATCHFILES)
@${SETENV}
${_DO_FETCH_ENV} ${_PATCH_SITES_ENV}
dp_SITE_FLAVOR=PATCH
${SH} ${SCRIPTSDIR}/do-fetch.sh ${PATCHFILES:C/:-p[0-9]//:C/./'&'/}
.endif
.endif
.if !target(fetch-list)
fetch-list:
.if !empty(DISTFILES)
@${SETENV}
${_DO_FETCH_ENV} ${_MASTER_SITES_ENV}
dp_SITE_FLAVOR=MASTER
${SH} ${SCRIPTSDIR}/do-fetch.sh ${DISTFILES:C/./'&'/}
.endif
.if defined(PATCHFILES) && !empty(PATCHFILES)
@${SETENV}
${_DO_FETCH_ENV} ${_PATCH_SITES_ENV}
dp_SITE_FLAVOR=PATCH
${SH} ${SCRIPTSDIR}/do-fetch.sh ${PATCHFILES:C/:-p[0-9]//:C/./'&'/}
.endif
.endif
.if !target(fetch-url-list-int)
fetch-url-list-int:
.if !empty(DISTFILES)
@${SETENV}
${_DO_FETCH_ENV} ${_MASTER_SITES_ENV}
dp_SITE_FLAVOR=MASTER
${SH} ${SCRIPTSDIR}/do-fetch.sh ${DISTFILES:C/./'&'/}
.endif
.if defined(PATCHFILES) && !empty(PATCHFILES)
@${SETENV}
${_DO_FETCH_ENV} ${_PATCH_SITES_ENV}
dp_SITE_FLAVOR=PATCH
${SH} ${SCRIPTSDIR}/do-fetch.sh ${PATCHFILES:C/:-p[0-9]//:C/./'&'/}
.endif
.endif
.if !target(fetch-urlall-list)
fetch-urlall-list:
@cd ${.CURDIR} && ${SETENV} FORCE_FETCH_ALL=yes ${MAKE} fetch-url-list-int
.endif
.if !target(fetch-url-list)
fetch-url-list: fetch-url-list-int
.endif
clean-wrkdir:
@${RM} -r ${WRKDIR}
.if !target(do-extract)
do-extract: ${EXTRACT_WRKDIR}
@for file in ${EXTRACT_ONLY}; do
if ! (cd ${EXTRACT_WRKDIR} && ${EXTRACT_CMD} ${EXTRACT_BEFORE_ARGS} ${_DISTDIR}/$$file ${EXTRACT_AFTER_ARGS});
then
${ECHO_MSG} "===> Failed to extract "${_DISTDIR}/$$file".";
exit 1;
fi;
done
@if [ ${UID} = 0 ]; then
${CHMOD} -R ug-s ${WRKDIR};
${CHOWN} -R 0:0 ${WRKDIR};
fi
.endif
.if !target(do-patch)
do-patch:
@${SETENV}
dp_BZCAT="${BZCAT}"
dp_CAT="${CAT}"
dp_DISTDIR="${_DISTDIR}"
dp_ECHO_MSG="${ECHO_MSG}"
dp_EXTRA_PATCHES="${EXTRA_PATCHES}"
dp_EXTRA_PATCH_TREE="${EXTRA_PATCH_TREE}"
dp_GZCAT="${GZCAT}"
dp_OPSYS="${OPSYS}"
dp_PATCH="${PATCH}"
dp_PATCHDIR="${PATCHDIR}"
dp_PATCHFILES="${_PATCHFILES2}"
dp_PATCH_ARGS=${PATCH_ARGS:Q}
dp_PATCH_DEBUG_TMP="${PATCH_DEBUG_TMP}"
dp_PATCH_DIST_ARGS="${PATCH_DIST_ARGS}"
dp_PATCH_CONTINUE_ON_FAIL=${PATCH_CONTINUE_ON_FAIL:Dyes}
dp_PATCH_SILENT="${PATCH_SILENT}"
dp_PATCH_WRKSRC=${PATCH_WRKSRC}
dp_PKGNAME="${PKGNAME}"
dp_PKGORIGIN="${PKGORIGIN}"
dp_SCRIPTSDIR="${SCRIPTSDIR}"
dp_UNZIP_NATIVE_CMD="${UNZIP_NATIVE_CMD}"
dp_XZCAT="${XZCAT}"
${SH} ${SCRIPTSDIR}/do-patch.sh
.endif
.if !target(run-autotools-fixup)
run-autotools-fixup:
.if !defined(WITHOUT_FBSD10_FIX)
-@for f in ${FIND} ${WRKDIR} -type f \( -name config.libpath -o \ -name config.rpath -o -name configure -o -name libtool.m4 -o \ -name ltconfig -o -name libtool -o -name aclocal.m4 -o \ -name acinclude.m4 \)
; do
${SED} -i.fbsd10bak
-e 's|freebsd1*)|freebsd1.*)|g'
-e 's|freebsd[12]*)|freebsd[12].)|g'
-e 's|freebsd[123]*)|freebsd[123].)|g'
-e 's|freebsd[[12]]*)|freebsd[[12]].)|g'
-e 's|freebsd[[123]]*)|freebsd[[123]].)|g'
$${f} ;
cmp -s
${TOUCH} ${TOUCH_FLAGS} -mr
done
.endif
.endif
.if !target(do-configure)
do-configure:
@if [ -f ${SCRIPTDIR}/configure ]; then
cd ${.CURDIR} && ${SETENV} ${SCRIPTS_ENV} ${SH}
${SCRIPTDIR}/configure;
fi
.if defined(GNU_CONFIGURE)
@CONFIG_GUESS_DIRS=$$(${FIND} ${WRKDIR} -name config.guess -o -name config.sub
| ${XARGS} -n 1 ${DIRNAME});
for _D in $${CONFIG_GUESS_DIRS}; do
${CP} ${TEMPLATES}/config.guess $${_D}/config.guess;
${CP} ${TEMPLATES}/config.sub $${_D}/config.sub;
done
.endif
.if defined(HAS_CONFIGURE)
@${MKDIR} ${CONFIGURE_WRKSRC}
@(cd ${CONFIGURE_WRKSRC} &&
${SET_LATE_CONFIGURE_ARGS}
if ! ${SETENV} CC="${CC}" CPP="${CPP}" CXX="${CXX}"
CFLAGS="${CFLAGS}" CPPFLAGS="${CPPFLAGS}" CXXFLAGS="${CXXFLAGS}"
LDFLAGS="${LDFLAGS}" LIBS="${LIBS}"
INSTALL="/usr/bin/install -c"
INSTALL_DATA="${INSTALL_DATA}"
INSTALL_LIB="${INSTALL_LIB}"
INSTALL_PROGRAM="${INSTALL_PROGRAM}"
INSTALL_SCRIPT="${INSTALL_SCRIPT}"
${CONFIGURE_ENV} ${CONFIGURE_CMD} ${CONFIGURE_ARGS}; then
${ECHO_MSG} "===> Script "${CONFIGURE_SCRIPT}" failed unexpectedly.";
(${ECHO_CMD} ${CONFIGURE_FAIL_MESSAGE}) | ${FMT_80} ;
${FALSE};
fi)
.endif
.endif
DO_MAKE_BUILD?= ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_FLAGS} ${MAKEFILE} ${_MAKE_JOBS} ${MAKE_ARGS:N${DESTDIRNAME}=*}
.if !target(do-build)
do-build:
@(cd ${BUILD_WRKSRC}; if ! ${DO_MAKE_BUILD} ${ALL_TARGET}; then
if [ -n "${BUILD_FAIL_MESSAGE}" ] ; then
${ECHO_MSG} "===> Compilation failed unexpectedly.";
(${ECHO_CMD} "${BUILD_FAIL_MESSAGE}") | ${FMT_80} ;
fi;
${FALSE};
fi)
.endif
.if !target(check-conflicts)
check-conflicts: check-build-conflicts check-install-conflicts
.endif
.if !target(check-build-conflicts)
check-build-conflicts:
.if ( defined(CONFLICTS) || defined(CONFLICTS_BUILD) ) && !defined(DISABLE_CONFLICTS) && !defined(DEFER_CONFLICTS_CHECK)
@conflicts_with=$$(
{ ${PKG_QUERY} -g "%n-%v %p %o" ${CONFLICTS:C/.+/'&'/} ${CONFLICTS_BUILD:C/.+/'&'/} 2>/dev/null || : ; }
| while read pkgname prfx orgn; do
if [ "/${PREFIX}" = "/$${prfx}" -a "/${PKGORIGIN}" != "/$${orgn}" ]; then
fi;
done);
if [ -n "$${conflicts_with}" ]; then
${ECHO_MSG};
${ECHO_MSG} "===> ${PKGNAME} conflicts with installed package(s): ";
for entry in $${conflicts_with}; do
done;
${ECHO_MSG};
${ECHO_MSG} " They will not build together.";
${ECHO_MSG} " Please remove them first with pkg delete.";
exit 1;
fi
.endif
.endif
.if !target(identify-install-conflicts)
CONFLICT_WARNING_WAIT?= 10
identify-install-conflicts:
.if ( defined(CONFLICTS) || defined(CONFLICTS_INSTALL) ) && !defined(DISABLE_CONFLICTS)
@conflicts_with=$$(
{ ${PKG_QUERY} -g "%n-%v %p %o" ${CONFLICTS:C/.+/'&'/} ${CONFLICTS_INSTALL:C/.+/'&'/} 2>/dev/null || : ; }
| while read pkgname prfx orgn; do
if [ "/${PREFIX}" = "/$${prfx}" -a "/${PKGORIGIN}" != "/$${orgn}" ]; then
fi;
done);
if [ -n "$${conflicts_with}" ]; then
${ECHO_MSG};
${ECHO_MSG} "===> ${PKGNAME} conflicts with installed package(s): ";
for entry in $${conflicts_with}; do
done;
${ECHO_MSG};
${ECHO_MSG} " They install files into the same place.";
${ECHO_MSG} " You may want to stop build with Ctrl + C.";
sleep ${CONFLICT_WARNING_WAIT};
fi
.endif
.endif
.if !target(check-install-conflicts)
check-install-conflicts:
.if ( defined(CONFLICTS) || defined(CONFLICTS_INSTALL) || ( defined(CONFLICTS_BUILD) && defined(DEFER_CONFLICTS_CHECK) ) ) && !defined(DISABLE_CONFLICTS)
.if defined(DEFER_CONFLICTS_CHECK)
@conflicts_with=$$(
{ ${PKG_QUERY} -g "%n-%v %p %o" ${CONFLICTS:C/.+/'&'/} ${CONFLICTS_BUILD:C/.+/'&'/} ${CONFLICTS_INSTALL:C/.+/'&'/} 2>/dev/null || : ; }
| while read pkgname prfx orgn; do
if [ "/${PREFIX}" = "/$${prfx}" -a "/${PKGORIGIN}" != "/$${orgn}" ]; then
fi;
done);
if [ -n "$${conflicts_with}" ]; then
${ECHO_MSG};
${ECHO_MSG} "===> ${PKGNAME} conflicts with installed package(s): ";
for entry in $${conflicts_with}; do
done;
${ECHO_MSG};
${ECHO_MSG} " Please remove them first with pkg delete.";
exit 1;
fi
.else
@conflicts_with=$$(
{ ${PKG_QUERY} -g "%n-%v %p %o" ${CONFLICTS:C/.+/'&'/} ${CONFLICTS_INSTALL:C/.+/'&'/} 2>/dev/null || : ; }
| while read pkgname prfx orgn; do
if [ "/${PREFIX}" = "/$${prfx}" -a "/${PKGORIGIN}" != "/$${orgn}" ]; then
fi;
done);
if [ -n "$${conflicts_with}" ]; then
${ECHO_MSG};
${ECHO_MSG} "===> ${PKGNAME} conflicts with installed package(s): ";
for entry in $${conflicts_with}; do
done;
${ECHO_MSG};
${ECHO_MSG} " They install files into the same place.";
${ECHO_MSG} " Please remove them first with pkg delete.";
exit 1;
fi
.endif # defined(DEFER_CONFLICTS_CHECK)
.endif
.endif
.if !target(do-install) && !defined(NO_INSTALL)
do-install:
@(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${FAKEROOT} ${MAKE_CMD} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} ${INSTALL_TARGET})
.endif
.if !target(do-test) && defined(TEST_TARGET)
DO_MAKE_TEST?= ${SETENV} ${TEST_ENV} ${MAKE_CMD} ${MAKE_FLAGS} ${MAKEFILE} ${TEST_ARGS:N${DESTDIRNAME}=*}
do-test:
@(cd ${TEST_WRKSRC}; if ! ${DO_MAKE_TEST} ${TEST_TARGET}; then
if [ -n "${TEST_FAIL_MESSAGE}" ] ; then
${ECHO_MSG} "===> Tests failed unexpectedly.";
(${ECHO_CMD} "${TEST_FAIL_MESSAGE}") | ${FMT_80} ;
fi;
${FALSE};
fi)
.endif
.if defined(_HAVE_PACKAGES)
_EXTRA_PACKAGE_TARGET_DEP+= ${PKGFILE}
_PORTS_DIRECTORIES+= ${PKGREPOSITORY}
${PKGFILE}: ${WRKDIR_PKGFILE} ${PKGREPOSITORY}
@${LN} -f ${WRKDIR_PKGFILE} ${PKGFILE} 2>/dev/null
|| ${CP} -f ${WRKDIR_PKGFILE} ${PKGFILE}
.if !defined(_PKG_TRANSITIONING_TO_NEW_EXT)
_EXTRA_PACKAGE_TARGET_DEP+= ${PKGOLDFILE}
${PKGOLDFILE}: ${PKGFILE}
${INSTALL} -l rs ${PKGFILE} ${PKGOLDFILE}
.endif
. if ${PKGORIGIN} == "ports-mgmt/pkg" || ${PKGORIGIN} == "ports-mgmt/pkg-devel"
_EXTRA_PACKAGE_TARGET_DEP+= ${PKGLATESTREPOSITORY}
_PORTS_DIRECTORIES+= ${PKGLATESTREPOSITORY}
_EXTRA_PACKAGE_TARGET_DEP+= ${PKGLATESTFILE}
${PKGLATESTFILE}: ${PKGFILE} ${PKGLATESTREPOSITORY}
${INSTALL} -l rs ${PKGFILE} ${PKGLATESTFILE}
.if !defined(_PKG_TRANSITIONING_TO_NEW_EXT)
_EXTRA_PACKAGE_TARGET_DEP+= ${PKGOLDLATESTFILE} ${PKGOLDSIGFILE}
${PKGOLDLATESTFILE}: ${PKGOLDFILE} ${PKGLATESTREPOSITORY}
${INSTALL} -l rs ${PKGOLDFILE} ${PKGOLDLATESTFILE}
${PKGOLDSIGFILE}: ${PKGLATESTREPOSITORY}
${INSTALL} -l rs pkg.pkg.sig ${PKGOLDSIGFILE}
.endif
. endif
.endif
${WRKDIR_PKGFILE}: ${TMPPLIST} create-manifest ${WRKDIR}/pkg
@if ! ${SETENV} ${PKG_ENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_CREATE} ${PKG_CREATE_ARGS} -m ${METADIR} -p ${TMPPLIST} -o ${WRKDIR}/pkg ${PKGNAME}; then
cd ${.CURDIR} && eval ${MAKE} delete-package >/dev/null;
exit 1;
fi
#
_EXTRA_PACKAGE_TARGET_DEP+= ${WRKDIR_PKGFILE}
.if !target(do-package)
PKG_CREATE_ARGS+= -f ${PKG_COMPRESSION_FORMAT}
.if defined(PKG_COMPRESSION_LEVEL)
PKG_CREATE_ARGS+= -l ${PKG_COMPRESSION_LEVEL}
.endif
PKG_CREATE_ARGS+= -r ${STAGEDIR}
. if defined(PKG_CREATE_VERBOSE)
PKG_CREATE_ARGS+= -v
. endif
do-package: ${_EXTRA_PACKAGE_TARGET_DEP} ${WRKDIR}/pkg
.endif
.if !target(delete-package)
delete-package:
@${ECHO_MSG} "===> Deleting package for ${PKGNAME}"
@${RM} ${PKGFILE} ${WRKDIR_PKGFILE} 2>/dev/null || :
.endif
.if !target(delete-package-list)
delete-package-list:
@${ECHO_CMD} "[ -f ${PKGFILE} ] && (${ECHO_CMD} deleting ${PKGFILE}; ${RM} ${PKGFILE})"
.endif
.if !target(install-package)
.if defined(FORCE_PKG_REGISTER)
_INSTALL_PKG_ARGS= -f
.endif
.if defined(INSTALLS_DEPENDS)
_INSTALL_PKG_ARGS+= -A
.endif
install-package:
@if [ -f "${WRKDIR}/pkg/${PKGNAME}${PKG_SUFX}" ]; then
_pkgfile="${WRKDIR_PKGFILE}";
else
_pkgfile="${PKGFILE}";
fi;
${PKG_ADD} ${_INSTALL_PKG_ARGS} $${_pkgfile}
.endif
.if !target(check-already-installed)
.if !defined(NO_PKG_REGISTER) && !defined(FORCE_PKG_REGISTER)
check-already-installed:
@${ECHO_MSG} "===> Checking if ${PKGBASE} is already installed";
pkgname=${PKG_INFO} -q -O ${PKGBASE}
;
if [ -n "$${pkgname}" ]; then
v=${PKG_VERSION} -t $${pkgname} ${PKGNAME}
;
if [ "$${v}" = "<" ]; then
${ECHO_CMD} "===> An older version of ${PKGBASE} is already installed ($${pkgname})";
else
${ECHO_CMD} "===> ${PKGNAME} is already installed";
fi;
${ECHO_MSG} " You may wish to ``make deinstall'' and install this port again";
${ECHO_MSG} " by ``make reinstall'' to upgrade it properly.";
${ECHO_MSG} " If you really wish to overwrite the old port of ${PKGBASE}";
${ECHO_MSG} " without deleting it first, set the variable "FORCE_PKG_REGISTER"";
${ECHO_MSG} " in your environment or the "make install" command line.";
exit 1;
fi
.endif
.endif
.if !target(check-umask)
check-umask:
@if [ ${SH} -c umask
!= 0022 ]; then
${ECHO_MSG} "===> Warning: your umask is "${SH} -c umask
"".;
${ECHO_MSG} " If this is not desired, set it to an appropriate value";
${ECHO_MSG} " and install this port again by ``make reinstall''.";
fi
.endif
.if !target(install-mtree)
install-mtree:
.endif
.if !target(install-ldconfig-file)
install-ldconfig-file:
. if defined(USE_LDCONFIG) || defined(USE_LDCONFIG32)
. if defined(USE_LDCONFIG)
. if !defined(USE_LINUX_PREFIX)
. if ${USE_LDCONFIG} != "${LOCALBASE}/lib" && !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Installing ldconfig configuration file"
. if defined(NO_MTREE) || ${PREFIX} != ${LOCALBASE}
@${MKDIR} ${STAGEDIR}${LOCALBASE}/${LDCONFIG_DIR}
. endif
@${ECHO_CMD} ${USE_LDCONFIG} | ${TR} ' ' '\n'
> ${STAGEDIR}${LOCALBASE}/${LDCONFIG_DIR}/${PKGBASE}
@${ECHO_CMD} ${LOCALBASE}/${LDCONFIG_DIR}/${PKGBASE} >> ${TMPPLIST}
. if ${PREFIX} != ${LOCALBASE}
@${ECHO_CMD} "@dir ${LOCALBASE}/${LDCONFIG_DIR}" >> ${TMPPLIST}
. endif
. endif
. endif
. endif
. if defined(USE_LDCONFIG32)
. if !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Installing 32-bit ldconfig configuration file"
. if defined(NO_MTREE) || ${PREFIX} != ${LOCALBASE}
@${MKDIR} ${STAGEDIR}${LOCALBASE}/${LDCONFIG32_DIR}
. endif
@${ECHO_CMD} ${USE_LDCONFIG32} | ${TR} ' ' '\n'
> ${STAGEDIR}${LOCALBASE}/${LDCONFIG32_DIR}/${PKGBASE}
@${ECHO_CMD} ${LOCALBASE}/${LDCONFIG32_DIR}/${PKGBASE} >> ${TMPPLIST}
. if ${PREFIX} != ${LOCALBASE}
@${ECHO_CMD} "@dir ${LOCALBASE}/${LDCONFIG32_DIR}" >> ${TMPPLIST}
. endif
. endif
. endif
. endif
.endif
.if !defined(USE_LINUX_PREFIX)
. if !target(fixup-lib-pkgconfig)
fixup-lib-pkgconfig:
@if [ -d ${STAGEDIR}${PREFIX}/lib/pkgconfig ]; then
if [ -z "$$(${FIND} ${STAGEDIR}${PREFIX}/lib/pkgconfig -maxdepth 0 -empty)" ]; then
${MKDIR} ${STAGEDIR}${PREFIX}/libdata/pkgconfig;
${MV} ${STAGEDIR}${PREFIX}/lib/pkgconfig/* ${STAGEDIR}${PREFIX}/libdata/pkgconfig;
fi;
${RMDIR} ${STAGEDIR}${PREFIX}/lib/pkgconfig;
fi
. endif
.endif
.if !target(create-users-groups)
.if defined(GROUPS) || defined(USERS)
_UG_INSTALL= ${WRKDIR}/users-groups-install.sh
_UG_DEINSTALL= ${WRKDIR}/users-groups-deinstall.sh
PKGPREINSTALL+= ${_UG_INSTALL}
PKGPOSTDEINSTALL+= ${_UG_DEINSTALL}
create-users-groups:
@${SETENV}
dp_ECHO_MSG="${ECHO_MSG}"
dp_GID_FILES="${GID_FILES}"
dp_GID_OFFSET="${GID_OFFSET}"
dp_GROUPS_BLACKLIST="${GROUPS_BLACKLIST}"
dp_INSTALL="${INSTALL}"
dp_OPSYS="${OPSYS}"
dp_OSVERSION="${OSVERSION}"
dp_PREFIX="${PREFIX}"
dp_PW="${PW}"
dp_SCRIPTSDIR="${SCRIPTSDIR}"
dp_UG_DEINSTALL="${_UG_DEINSTALL}"
dp_UG_INSTALL="${_UG_INSTALL}"
dp_UID_FILES="${UID_FILES}"
dp_UID_OFFSET="${UID_OFFSET}"
dp_USERS_BLACKLIST="${USERS_BLACKLIST}"
${SH} ${SCRIPTSDIR}/do-users-groups.sh "${USERS}" "${GROUPS}"
.endif
.endif
.if !defined(DISABLE_SECURITY_CHECK)
.if !target(security-check)
security-check: ${TMPPLIST}
-@${RM} ${WRKDIR}/.PLIST.setuid ${WRKDIR}/.PLIST.writable ${WRKDIR}/.PLIST.readelf; \
${AWK} -v prefix='${PREFIX}' ' \
match($$0, /^@cwd /) { prefix = substr($$0, RSTART + RLENGTH); if (prefix == "/") prefix=""; next; } \
/^@/ { next; } \
/^\// { print; next; } \
{ print prefix "/" $$0; } \
' ${TMPPLIST} > ${WRKDIR}/.PLIST.flattened; \
${TR} '\n' '\0' < ${WRKDIR}/.PLIST.flattened \
| ${XARGS} -0 -J % ${FIND} % -prune ! -type l -type f \( -perm -4000 -o -perm -2000 \) \( -perm -0010 -o -perm -0001 \) 2> /dev/null > ${WRKDIR}/.PLIST.setuid; \
${TR} '\n' '\0' < ${WRKDIR}/.PLIST.flattened \
| ${XARGS} -0 -J % ${FIND} % -prune -perm -0002 \! -type l 2> /dev/null > ${WRKDIR}/.PLIST.writable; \
${TR} '\n' '\0' < ${WRKDIR}/.PLIST.flattened \
| ${XARGS} -0 -J % ${FIND} % -prune ! -type l -type f -print0 2> /dev/null \
| ${XARGS} -0 ${READELF} -r ${NONEXISTENT} 2> /dev/null > ${WRKDIR}/.PLIST.readelf; \
if \
! ${AWK} -v audit="$${PORTS_AUDIT}" -f ${SCRIPTSDIR}/security-check.awk \
${WRKDIR}/.PLIST.flattened ${WRKDIR}/.PLIST.readelf ${WRKDIR}/.PLIST.setuid ${WRKDIR}/.PLIST.writable; \
then \
www_site=$$(cd ${.CURDIR} && ${MAKE} www-site); \
if [ ! -z "$${www_site}" ]; then \
${ECHO_MSG}; \
${ECHO_MSG} " For more information, and contact details about the security"; \
${ECHO_MSG} " status of this software, see the following webpage: "; \
${ECHO_MSG} "$${www_site}"; \
fi; \
fi
.endif
.else # i.e. defined(DISABLE_SECURITY_CHECK)
security-check:
@${ECHO_MSG} " WARNING: Security check has been disabled."
.endif # !defined(DISABLE_SECURITY_CHECK)
################################################################
################################################################
extract-message:
@${ECHO_MSG} "===> Extracting for ${PKGNAME}"
patch-message:
@${ECHO_MSG} "===> Patching for ${PKGNAME}"
configure-message:
@${ECHO_MSG} "===> Configuring for ${PKGNAME}"
build-message:
@${ECHO_MSG} "===> Building for ${PKGNAME}"
stage-message:
@${ECHO_MSG} "===> Staging for ${PKGNAME}"
install-message:
@${ECHO_MSG} "===> Installing for ${PKGNAME}"
test-message:
@${ECHO_MSG} "===> Testing for ${PKGNAME}"
package-message:
@${ECHO_MSG} "===> Building package for ${PKGNAME}"
.if exists(${SCRIPTDIR})
.for stage in pre post
.for name in pkg check-sanity fetch extract patch configure build stage install package
.if !target(${stage}-${name}-script)
.if exists(${SCRIPTDIR}/${stage}-${name})
${stage}-${name}-script:
@ cd ${.CURDIR} && ${SETENV} ${SCRIPTS_ENV} ${SH}
${SCRIPTDIR}/${.TARGET:S/-script$//}
.endif
.endif
.endfor
.endfor
.endif
.if !target(pretty-print-www-site)
pretty-print-www-site:
@www_site=$$(cd ${.CURDIR} && ${MAKE} www-site);
if [ -n "$${www_site}" ]; then
${ECHO_MSG} -n " and/or visit the ";
${ECHO_MSG} " for further information";
fi
.endif
################################################################
################################################################
.if !target(checkpatch)
checkpatch:
@cd ${.CURDIR} && ${MAKE} ${PATCH_SILENT} PATCH_CHECK_ONLY=yes ${_PATCH_DEP} ${_PATCH_REAL_SEQ}
.endif
.if !target(reinstall)
reinstall:
@${RM} ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
@cd ${.CURDIR} && DEPENDS_TARGET="${DEPENDS_TARGET}" ${MAKE} deinstall install
.endif
.if !target(restage)
restage:
@${RM} -r ${STAGEDIR} ${STAGE_COOKIE} ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
@cd ${.CURDIR} && ${MAKE} stage
.endif
.if !target(deinstall)
deinstall:
.if defined(UID) && ${UID} != 0 && !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Switching to root credentials for '${.TARGET}' target"
@cd ${.CURDIR} &&
${SU_CMD} "${MAKE} ${.TARGET}"
@${ECHO_MSG} "===> Returning to user credentials"
.else
@${ECHO_MSG} "===> Deinstalling for ${PKGBASE}"
@if ${PKG_INFO} -e ${PKGBASE}; then
p=${PKG_INFO} -q -O ${PKGBASE}
;
${PKG_DELETE} -f ${PKGBASE} ;
else
${ECHO_MSG} "===> ${PKGBASE} not installed, skipping";
fi
@${RM} ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
.endif
.endif
.if !target(deinstall-all)
deinstall-all:
.if ${UID} != 0 && !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Switching to root credentials for '${.TARGET}' target"
@cd ${.CURDIR} &&
${SU_CMD} "${MAKE} ${.TARGET}"
@${ECHO_MSG} "===> Returning to user credentials"
.else
@${ECHO_MSG} "===> Deinstalling for ${PKGORIGIN}"
@deinstall_names=${PKG_INFO} -q -O ${PKGORIGIN}
;
for oldpkgorigin in $$(${GREP} "|${PKGORIGIN}|" ${PORTSDIR}/MOVED | ${CUT} -f 1 -d '|' | ${SORT} -u); do
deinstall_names="$${deinstall_names} $$(
done;
if [ -n "$${deinstall_names}" ]; then
for d in $${deinstall_names}; do
done;
else
${ECHO_MSG} "===> ${PKGORIGIN} not installed, skipping";
fi;
${RM} ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
.endif
.endif
.if !target(do-clean)
do-clean:
@if [ -d ${WRKDIR} ]; then
if [ -w ${WRKDIR} ]; then
${RM} -r ${WRKDIR};
else
${ECHO_MSG} "===> ${WRKDIR} not writable, skipping";
fi;
fi
.endif
.if !target(clean)
pre-clean: clean-msg
clean-msg:
@${ECHO_MSG} "===> Cleaning for ${PKGNAME}"
.if empty(FLAVORS)
CLEAN_DEPENDENCIES=
.if !defined(NOCLEANDEPENDS)
CLEAN_DEPENDENCIES+= limited-clean-depends-noflavor
limited-clean-depends-noflavor:
@cd ${.CURDIR} && ${MAKE} limited-clean-depends
.endif
.if target(pre-clean)
CLEAN_DEPENDENCIES+= pre-clean-noflavor
pre-clean-noflavor:
@cd ${.CURDIR} && ${SETENV} ${MAKE} pre-clean
.endif
CLEAN_DEPENDENCIES+= do-clean-noflavor
do-clean-noflavor:
@cd ${.CURDIR} && ${SETENV} ${MAKE} do-clean
.if target(post-clean)
CLEAN_DEPENDENCIES+= post-clean-noflavor
post-clean-noflavor:
@cd ${.CURDIR} && ${SETENV} ${MAKE} post-clean
.endif
.ORDER: ${CLEAN_DEPENDENCIES}
clean: ${CLEAN_DEPENDENCIES}
.endif
.if !empty(_FLAVOR)
_CLEANFLAVORS= ${_FLAVOR}
.else
_CLEANFLAVORS= ${FLAVORS}
.endif
.for _f in ${_CLEANFLAVORS}
CLEAN_DEPENDENCIES=
.if !defined(NOCLEANDEPENDS)
CLEAN_DEPENDENCIES+= limited-clean-depends-${_f}
limited-clean-depends-${_f}:
@cd ${.CURDIR} && ${SETENV} FLAVOR=${_f} ${MAKE} limited-clean-depends
.endif
.if target(pre-clean)
CLEAN_DEPENDENCIES+= pre-clean-${_f}
pre-clean-${_f}:
@cd ${.CURDIR} && ${SETENV} FLAVOR=${_f} ${MAKE} pre-clean
.endif
CLEAN_DEPENDENCIES+= do-clean-${_f}
do-clean-${_f}:
@cd ${.CURDIR} && ${SETENV} FLAVOR=${_f} ${MAKE} do-clean
.if target(post-clean)
CLEAN_DEPENDENCIES+= post-clean-${_f}
post-clean-${_f}:
@cd ${.CURDIR} && ${SETENV} FLAVOR=${_f} ${MAKE} post-clean
.endif
.ORDER: ${CLEAN_DEPENDENCIES}
clean: ${CLEAN_DEPENDENCIES}
.endfor
.endif
.if !target(distclean)
distclean: clean
@cd ${.CURDIR} && ${MAKE} delete-distfiles RESTRICTED_FILES="${_DISTFILES:Q} ${_PATCHFILES:Q}"
.endif
.if !target(delete-distfiles)
delete-distfiles:
@${ECHO_MSG} "===> Deleting distfiles for ${PKGNAME}"
@(if [ "X${RESTRICTED_FILES}" != "X" -a -d ${_DISTDIR} ]; then
cd ${_DISTDIR};
for file in ${RESTRICTED_FILES}; do
dir=$${file%/*};
if [ "$${dir}" != "$${file}" ]; then
fi;
done;
fi)
.if defined(DIST_SUBDIR)
-@${RMDIR} ${_DISTDIR} >/dev/null 2>&1 || ${TRUE}
.endif
.endif
.if !target(delete-distfiles-list)
delete-distfiles-list:
@${ECHO_CMD} "# ${PKGNAME}"
@if [ "X${RESTRICTED_FILES}" != "X" ]; then
for file in ${RESTRICTED_FILES}; do
${ECHO_CMD} "[ -f ${_DISTDIR}/$$file ] && (${ECHO_CMD} deleting ${_DISTDIR}/$$file; ${RM} ${_DISTDIR}/$$file)";
dir=$${file%/*};
if [ "$${dir}" != "$${file}" ]; then
${ECHO_CMD} "(cd ${_DISTDIR} &&
fi;
done;
fi
.if defined(DIST_SUBDIR)
@${ECHO_CMD} "${RMDIR} ${_DISTDIR} 2>/dev/null || ${TRUE}"
.endif
.endif
update-patches:
@Toedit=PATCH_WRKSRC=${PATCH_WRKSRC} \ PATCHDIR=${PATCHDIR} \ PATCH_LIST=${PATCHDIR}/patch-* \ DIFF_ARGS=${DIFF_ARGS} \ DISTORIG=${DISTORIG} \ ${SH} ${PORTSDIR}/Tools/scripts/update-patches
;
case $$toedit in "");;
*) ${ECHO_CMD} -n 'edit patches: '; read i;
cd
_CHECKSUM_INIT_ENV=
dp_SHA256=${SHA256}
.if !target(makesum)
makesum: check-sanity
@cd ${.CURDIR} && ${MAKE} fetch NO_CHECKSUM=yes
DISABLE_SIZE=yes DISTFILES="${DISTFILES}"
MASTER_SITES="${MASTER_SITES}"
PATCH_SITES="${PATCH_SITES}"
@${SETENV}
${_CHECKSUM_INIT_ENV}
dp_CHECKSUM_ALGORITHMS='${CHECKSUM_ALGORITHMS:tu}'
dp_CKSUMFILES='${_CKSUMFILES}'
dp_DISTDIR='${DISTDIR}'
dp_DISTINFO_FILE='${DISTINFO_FILE}'
dp_ECHO_MSG='${ECHO_MSG}'
dp_SCRIPTSDIR='${SCRIPTSDIR}'
${SH} ${SCRIPTSDIR}/makesum.sh ${DISTFILES:C/.*/'&'/}
.endif
.if !target(checksum)
checksum: fetch
.if !empty(_CKSUMFILES) && !defined(NO_CHECKSUM)
@${SETENV}
${_CHECKSUM_INIT_ENV}
dp_CHECKSUM_ALGORITHMS='${CHECKSUM_ALGORITHMS:tu}'
dp_CURDIR='${.CURDIR}'
dp_DISTDIR='${DISTDIR}'
dp_DISTINFO_FILE='${DISTINFO_FILE}'
dp_DIST_SUBDIR='${DIST_SUBDIR}'
dp_ECHO_MSG='${ECHO_MSG}'
dp_FETCH_REGET='${FETCH_REGET}'
dp_MAKE='${MAKE}'
dp_MAKEFLAGS='${.MAKEFLAGS}'
dp_SCRIPTSDIR='${SCRIPTSDIR}'
dp_DISABLE_SIZE='${DISABLE_SIZE}'
dp_NO_CHECKSUM='${NO_CHECKSUM}'
${SH} ${SCRIPTSDIR}/checksum.sh ${_CKSUMFILES:C/.*/'&'/}
.endif
.endif
extract-fixup-modes:
@${CHMOD} -R u+w,a+rX ${WRKDIR}
################################################################
################################################################
.if !target(package-name)
package-name:
@${ECHO_CMD} ${PKGNAME}
.endif
.if !target(repackage)
repackage: pre-repackage package
pre-repackage:
@${RM} ${PACKAGE_COOKIE}
.endif
.if !target(package-noinstall)
package-noinstall: package
.endif
################################################################
################################################################
.if !target(depends)
depends: pkg-depends extract-depends patch-depends lib-depends fetch-depends build-depends run-depends
.for deptype in PKG EXTRACT PATCH FETCH BUILD LIB RUN TEST
${deptype:tl}-depends:
.if defined(${deptype}_DEPENDS) && !defined(NO_DEPENDS)
@${SETENV}
dp_RAWDEPENDS="${${deptype}_DEPENDS}"
dp_DEPTYPE="${deptype}_DEPENDS"
dp_DEPENDS_TARGET="${DEPENDS_TARGET}"
dp_DEPENDS_PRECLEAN="${DEPENDS_PRECLEAN}"
dp_DEPENDS_CLEAN="${DEPENDS_CLEAN}"
dp_DEPENDS_ARGS="${DEPENDS_ARGS}"
dp_USE_PACKAGE_DEPENDS="${USE_PACKAGE_DEPENDS}"
dp_USE_PACKAGE_DEPENDS_ONLY="${USE_PACKAGE_DEPENDS_ONLY}"
dp_PKG_ADD="${PKG_ADD}"
dp_PKG_INFO="${PKG_INFO}"
dp_WRKDIR="${WRKDIR}"
dp_PKGNAME="${PKGNAME}"
dp_STRICT_DEPENDS="${STRICT_DEPENDS}"
dp_LOCALBASE="${LOCALBASE}"
dp_LIB_DIRS="${LIB_DIRS}"
dp_SH="${SH}"
dp_SCRIPTSDIR="${SCRIPTSDIR}"
PORTSDIR="${PORTSDIR}"
dp_OVERLAYS="${OVERLAYS}"
dp_MAKE="${MAKE}"
dp_MAKEFLAGS='${.MAKEFLAGS}'
${SH} ${SCRIPTSDIR}/do-depends.sh
.endif
.endfor
.endif
_UNIFIED_DEPENDS=${PKG_DEPENDS} ${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS} ${RUN_DEPENDS} ${TEST_DEPENDS}
_DEPEND_SPECIALS= ${_UNIFIED_DEPENDS:M*:::C,^[^:]:([^:]):.*$,\1,}
.for d in ${_UNIFIED_DEPENDS:M*:/*}
_PORTSDIR_STR= $${PORTSDIR}/
DEV_WARNING+= "It looks like the
.endfor
all-depends-list:
@${ALL-DEPENDS-LIST}
_FLAVOR_RECURSIVE_SH=
if [ -z "$${recursive_cmd}" ]; then
${ECHO_MSG} "_FLAVOR_RECURSIVE_SH requires recursive_cmd to be set to the recursive make target to run." >&2;
${FALSE};
fi;
if [ "$${recursive_dirs-null}" = "null" ]; then
${ECHO_MSG} "_FLAVOR_RECURSIVE_SH requires recursive_dirs to be set to the directories to recurse." >&2;
${FALSE};
fi;
for dir in $${recursive_dirs}; do
unset flavor FLAVOR;
case $${dir} in
@/) ;;
@)
flavor=$${dir#@};
dir=$${dir%@};
;;
esac;
case $$dir in
/) ;;
*) dir=${PORTSDIR}/$$dir ;;
esac;
(cd $$dir;
done
DEPENDS-LIST=
${SETENV}
PORTSDIR="${PORTSDIR}"
dp_MAKE="${MAKE}"
dp_PKGNAME="${PKGNAME}"
dp_PKG_INFO="${PKG_INFO}"
dp_SCRIPTSDIR="${SCRIPTSDIR}"
dp_OVERLAYS="${OVERLAYS}"
${SH} ${SCRIPTSDIR}/depends-list.sh
${DEPENDS_SHOW_FLAVOR:D-f}
ALL-DEPENDS-LIST= ${DEPENDS-LIST} -r ${_UNIFIED_DEPENDS:Q}
ALL-DEPENDS-FLAVORS-LIST= ${DEPENDS-LIST} -f -r ${_UNIFIED_DEPENDS:Q}
DEINSTALL-DEPENDS-FLAVORS-LIST= ${DEPENDS-LIST} -f -r ${_UNIFIED_DEPENDS:N${PKG_DEPENDS}:Q}
MISSING-DEPENDS-LIST= ${DEPENDS-LIST} -m ${_UNIFIED_DEPENDS:Q}
BUILD-DEPENDS-LIST= ${DEPENDS-LIST} "${PKG_DEPENDS} ${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS}"
RUN-DEPENDS-LIST= ${DEPENDS-LIST} "${LIB_DEPENDS} ${RUN_DEPENDS}"
TEST-DEPENDS-LIST= ${DEPENDS-LIST} ${TEST_DEPENDS:Q}
CLEAN-DEPENDS-LIST= ${DEPENDS-LIST} -wr ${_UNIFIED_DEPENDS:Q}
CLEAN-DEPENDS-LIMITED-LIST= ${DEPENDS-LIST} -w ${_UNIFIED_DEPENDS:Q}
.if !target(clean-depends)
clean-depends:
@for dir in $$(${CLEAN-DEPENDS-LIST}); do
(cd $$dir; ${MAKE} NOCLEANDEPENDS=yes clean);
done
.endif
.if !target(limited-clean-depends)
limited-clean-depends:
@for dir in $$(${CLEAN-DEPENDS-LIMITED-LIST}); do
(cd $$dir; ${MAKE} NOCLEANDEPENDS=yes clean);
done
.endif
.if !target(deinstall-depends)
deinstall-depends:
@recursive_cmd="deinstall";
recursive_dirs="$$(${DEINSTALL-DEPENDS-FLAVORS-LIST})";
${_FLAVOR_RECURSIVE_SH}
.endif
.if !target(fetch-specials)
fetch-specials:
@${ECHO_MSG} "===> Fetching all distfiles required by ${PKGNAME} for building"
@recursive_cmd="fetch";
recursive_dirs="${_DEPEND_SPECIALS}";
${_FLAVOR_RECURSIVE_SH}
.endif
.if !target(fetch-recursive)
fetch-recursive:
@${ECHO_MSG} "===> Fetching all distfiles for ${PKGNAME} and dependencies"
@recursive_cmd="fetch";
recursive_dirs="${.CURDIR}${FLAVOR:D@${FLAVOR}} $$(${ALL-DEPENDS-FLAVORS-LIST})";
${_FLAVOR_RECURSIVE_SH}
.endif
.if !target(fetch-recursive-list)
fetch-recursive-list:
@recursive_cmd="fetch-list";
recursive_dirs="${.CURDIR}${FLAVOR:D@${FLAVOR}} $$(${ALL-DEPENDS-FLAVORS-LIST})";
${_FLAVOR_RECURSIVE_SH}
.endif
FETCH_LIST?= for i in $$deps; do
prog=$${i%%:}; dir=$${i#:};
case $$dir in
/*) ;;
) dir=${PORTSDIR}/$$dir ;;
esac;
case $$dir in
:) if [ $$prog != $${prog#/} -o ! -e $$prog ]; then
dir=$${dir%%:};
else
continue;
fi;;
*) if [ -d
continue;
fi;;
esac;
echo cd $$dir; cd $$dir;
done
.if !target(fetch-required)
fetch-required: fetch
.if defined(NO_DEPENDS)
@${ECHO_MSG} "===> NO_DEPENDS is set, not fetching any other distfiles for ${PKGNAME}"
.else
@${ECHO_MSG} "===> Fetching all required distfiles for ${PKGNAME} and dependencies"
.for deptype in PKG EXTRACT PATCH FETCH BUILD RUN
.if defined(${deptype}_DEPENDS)
@targ=fetch; deps="${${deptype}_DEPENDS}"; ${FETCH_LIST}
.endif
.endfor
.endif
.endif
.if !target(fetch-required-list)
fetch-required-list: fetch-list
.if !defined(NO_DEPENDS)
.for deptype in PKG EXTRACT PATCH FETCH BUILD RUN
.if defined(${deptype}_DEPENDS)
@targ=fetch-list; deps="${${deptype}_DEPENDS}"; ${FETCH_LIST}
.endif
.endfor
.endif
.endif
.if !target(checksum-recursive)
checksum-recursive:
@${ECHO_MSG} "===> Fetching and checking checksums for ${PKGNAME} and dependencies"
@recursive_cmd="checksum";
recursive_dirs="${.CURDIR}${FLAVOR:D@${FLAVOR}} $$(${ALL-DEPENDS-FLAVORS-LIST})";
${_FLAVOR_RECURSIVE_SH}
.endif
build-depends-list:
.if defined(PKG_DEPENDS) || defined(EXTRACT_DEPENDS) || defined(PATCH_DEPENDS) || defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || defined(LIB_DEPENDS)
@${BUILD-DEPENDS-LIST}
.endif
run-depends-list:
.if defined(LIB_DEPENDS) || defined(RUN_DEPENDS)
@${RUN-DEPENDS-LIST}
.endif
test-depends-list:
.if defined(TEST_DEPENDS)
@${TEST-DEPENDS-LIST}
.endif
package-depends-list:
.if defined(CHILD_DEPENDS) || defined(LIB_DEPENDS) || defined(RUN_DEPENDS)
@${PACKAGE-DEPENDS-LIST}
.endif
_LIB_RUN_DEPENDS= ${LIB_DEPENDS} ${RUN_DEPENDS}
PACKAGE-DEPENDS-LIST?=
if [ "${CHILD_DEPENDS}" ]; then
installed=$$(${PKG_INFO} -qO ${PKGORIGIN} 2>/dev/null ||
${TRUE});
if [ "$$installed" ]; then
break;
fi;
if [ -z "$$installed" ]; then
installed="${PKGNAME}";
fi;
for pkgname in $$installed; do
done;
fi;
checked="${PARENT_CHECKED}";
for dir in ${_LIB_RUN_DEPENDS:C,[^:]:([^:]):?.,\1,}; do
unset flavor;
case $${dir} in
@)
flavor=$${dir#@};
dir=$${dir%@};
;;
esac;
case "$$dir" in
/) ;;
) dir=${PORTSDIR}/$$dir ;;
esac ;
dir=$$(${REALPATH} $$dir);
if [ -d $$dir ]; then
case $$checked in
$$dir|$$dir\ |\ $$dir|\ $$dir\ *) continue;;
esac;
childout=$$(cd $$dir;
set -- $$childout;
childdir="";
while [ $$# != 0 ]; do
childdir="$$childdir $$2";
shift 3;
done;
checked="$$dir $$childdir $$checked";
else
${ECHO_MSG} "${PKGNAME}: "$$dir" non-existent -- dependency list incomplete" >&2;
fi;
done
ACTUAL-PACKAGE-DEPENDS?=
depfiles="" ;
for lib in ${LIB_DEPENDS:C/:.//}; do
depfiles="$$depfiles ${SETENV} LIB_DIRS="${LIB_DIRS}" LOCALBASE="${LOCALBASE}" ${SH} ${SCRIPTSDIR}/find-lib.sh $${lib}
" ;
done ;
${SETENV} PKG_BIN="${PKG_BIN}" ${SH} ${SCRIPTSDIR}/actual-package-depends.sh $${depfiles} ${RUN_DEPENDS:C/(.):.*/"\1"/}
PKG_NOTES_ENV?=
.for note in ${PKG_NOTES}
PKG_NOTES_ENV+= dp_PKG_NOTE_${note}=${PKG_NOTE_${note}:Q}
.endfor
create-manifest:
@${SETENV}
dp_SCRIPTSDIR='${SCRIPTSDIR}'
dp_ACTUAL_PACKAGE_DEPENDS='${ACTUAL-PACKAGE-DEPENDS}'
dp_CATEGORIES='${CATEGORIES:u:S/$/,/}'
dp_COMMENT=${COMMENT:Q}
dp_COMPLETE_OPTIONS_LIST='${COMPLETE_OPTIONS_LIST}'
dp_DEPRECATED=${DEPRECATED:Q}
dp_DESCR='${DESCR}'
dp_EXPIRATION_DATE='${EXPIRATION_DATE}'
dp_GROUPS='${GROUPS:u:S/$/,/}'
dp_LICENSE='${LICENSE:u:S/$/,/}'
dp_LICENSE_COMB='${LICENSE_COMB}'
dp_MAINTAINER='${MAINTAINER}'
dp_METADIR='${METADIR}'
dp_NO_ARCH='${NO_ARCH}'
dp_PKGBASE='${PKGBASE}'
dp_PKGDEINSTALL='${PKGDEINSTALL}'
dp_PKGINSTALL='${PKGINSTALL}'
dp_PKGMESSAGES='${_PKGMESSAGES}'
dp_PKGORIGIN='${PKGORIGIN}'
dp_PKGPOSTDEINSTALL='${PKGPOSTDEINSTALL}'
dp_PKGPOSTINSTALL='${PKGPOSTINSTALL}'
dp_PKGPREDEINSTALL='${PKGPREDEINSTALL}'
dp_PKGPREINSTALL='${PKGPREINSTALL}'
dp_PKGVERSION='${PKGVERSION}'
dp_PKG_BIN='${PKG_BIN}'
dp_PKG_IGNORE_DEPENDS='${PKG_IGNORE_DEPENDS}'
dp_PKG_NOTES='${PKG_NOTES}'
dp_PORT_OPTIONS='${PORT_OPTIONS}'
dp_PREFIX='${PREFIX}'
dp_USERS='${USERS:u:S/$/,/}'
dp_WWW='${WWW}'
${PKG_NOTES_ENV}
${SH} ${SCRIPTSDIR}/create-manifest.sh
package-depends:
@${PACKAGE-DEPENDS-LIST} |
actual-package-depends:
@${ACTUAL-PACKAGE-DEPENDS}
package-recursive: package
@recursive_cmd="package-noinstall";
recursive_dirs="$$(${ALL-DEPENDS-FLAVORS-LIST})";
${_FLAVOR_RECURSIVE_SH}
missing:
@for dir in $$(${MISSING-DEPENDS-LIST}); do
echo $${dir#${PORTSDIR}/};
done
missing-packages:
@_packages=$$(${PKG_INFO} -aq);
for dir in $$(${ALL-DEPENDS-LIST}); do
_p=$$(cd $$dir; ${MAKE} -VPKGNAME);
if ! $$(
fi;
done
install-missing-packages:
@_dirs=$$(${MISSING-DEPENDS-LIST});
${SU_CMD} "${XARGS} -o ${PKG_BIN} install -A"
################################################################
################################################################
. if !target(describe)
_EXTRACT_DEPENDS=${EXTRACT_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
_PATCH_DEPENDS=${PATCH_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
_FETCH_DEPENDS=${FETCH_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
_LIB_DEPENDS=${LIB_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,}
_BUILD_DEPENDS=${BUILD_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} ${_LIB_DEPENDS}
_RUN_DEPENDS=${RUN_DEPENDS:C/^[^ :]+:([^ :@]+)(@[^ :]+)?(:[^ :]+)?/\1/:O:u:C,(^[^/]),${PORTSDIR}/\1,} ${_LIB_DEPENDS}
. if exists(${DESCR})
_DESCR=${DESCR}
. else
_DESCR=/dev/null
. endif
. if defined(BUILDING_INDEX) && defined(INDEX_PORTS)
INDEX_OUT=${INDEX_TMPDIR}/${INDEXFILE}.desc.aggr
. else
INDEX_OUT=/dev/stdout
. endif
. if empty(FLAVORS) || defined(_DESCRIBE_WITH_FLAVOR)
describe:
@(${ECHO_CMD} -n "${PKGNAME}|${.CURDIR}|${PREFIX}|";
${ECHO_CMD} -n ${COMMENT:Q};
${ECHO_CMD} -n "|${_DESCR}|${MAINTAINER}|${CATEGORIES}|${_EXTRACT_DEPENDS}|${_PATCH_DEPENDS}|${_FETCH_DEPENDS}|${_BUILD_DEPENDS:O:u}|${_RUN_DEPENDS:O:u}|";
while read one two discard; do
case "$$one" in
WWW:) case "$$two" in
https://|http://|ftp://*)
*)
esac;
break;
;;
esac;
done < ${DESCR}; ${ECHO_CMD}) >>${INDEX_OUT}
. else # empty(FLAVORS)
describe: ${FLAVORS:S/^/describe-/}
. for f in ${FLAVORS}
describe-${f}:
@cd ${.CURDIR} && ${SETENV} FLAVOR=${f} ${MAKE} -B -D_DESCRIBE_WITH_FLAVOR describe
. endfor
. endif # empty(FLAVORS)
. endif
www-site:
.if exists(${DESCR})
@${AWK} '$$1 ~ /^WWW:/ {print $$2}' ${DESCR} | ${HEAD} -1
.else
@${ECHO_CMD}
.endif
.if !target(readmes)
readmes: readme
.endif
.if !target(readme)
readme:
@${RM} ${.CURDIR}/README.html
@cd ${.CURDIR} && ${MAKE} ${.CURDIR}/README.html
.endif
${.CURDIR}/README.html:
@${ECHO_MSG} "===> Creating README.html for ${PKGNAME}"
@${SED} -e 's|%%PORT%%|'$$(${ECHO_CMD} ${.CURDIR} |
${SED} -e 's|./([^/]/[^/])$$|\1|')'|g'
-e 's|%%PKG%%|${PKGNAME}|g'
-e 's|%%COMMENT%%|'"$$(${ECHO_CMD} ${COMMENT:Q})"'|'
-e '/%%COMMENT%%/d'
-e 's|%%DESCR%%|'"$$(${ECHO_CMD} ${DESCR} |
${SED} -e 's|${.CURDIR}/||')"'|'
-e 's|%%EMAIL%%|'"$$(${ECHO_CMD} "${MAINTAINER}" |
${SED} -e 's/([^)])//;s/.<//;s/>.//')"'|g'
-e 's|%%MAINTAINER%%|${MAINTAINER}|g'
-e 's|%%WEBSITE%%|'"$$(cd ${.CURDIR} && eval ${MAKE} pretty-print-www-site)"'|'
-e 's|%%BUILD_DEPENDS%%|'"$$(cd ${.CURDIR} && eval ${MAKE} pretty-print-build-depends-list)"'|'
-e 's|%%RUN_DEPENDS%%|'"$$(cd ${.CURDIR} && eval ${MAKE} pretty-print-run-depends-list)"'|'
-e 's|%%TOP%%|'"$$(${ECHO_CMD} ${CATEGORIES} |
${SED} -e 's| .||' -e 's|[^/]|..|g')"'/..|'
${TEMPLATES}/README.port >> ${.TARGET}
_PRETTY_PRINT_DEPENDS_LIST=
if [ ! -r ${INDEXDIR}/${INDEXFILE} ] ; then
${ECHO_MSG} "${.TARGET} requires an INDEX file (${INDEXFILE}). Please run make index or make fetchindex.";
else
target=${.TARGET:C/pretty-print-(.*)-depends-list/\1/} ;
if [ "$$target" = "build" ] ; then fldnum=8 ; else fldnum=9 ; fi;
${ECHO_MSG} -n 'This port requires package(s) "' ;
${ECHO_MSG} -n ${AWK} -F\| "\\$$1 ~ /^${PKGNAME}/ {print \\$$$${fldnum};}" ${INDEXDIR}/${INDEXFILE}
;
fi;
.if !target(pretty-print-build-depends-list)
pretty-print-build-depends-list:
.if defined(PKG_DEPENDS) || defined(EXTRACT_DEPENDS) || defined(PATCH_DEPENDS) ||
defined(FETCH_DEPENDS) || defined(BUILD_DEPENDS) || defined(LIB_DEPENDS)
@${_PRETTY_PRINT_DEPENDS_LIST}
.endif
.endif
.if !target(pretty-print-run-depends-list)
pretty-print-run-depends-list:
.if defined(RUN_DEPENDS) || defined(LIB_DEPENDS)
@${_PRETTY_PRINT_DEPENDS_LIST}
.endif
.endif
_SUB_LIST_TEMP= ${SUB_LIST:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/}
.if !target(apply-slist) && defined(SUB_FILES)
apply-slist:
.for file in ${SUB_FILES}
.if !exists(${FILESDIR}/${file}.in)
@${ECHO_MSG} "** Missing ${FILESDIR}/${file}.in for ${PKGNAME}."; exit 1
.else
@${SED} ${_SUB_LIST_TEMP} -e '/^@comment /d' ${FILESDIR}/${file}.in > ${WRKDIR}/${file}
.endif
.endfor
.for i in pkg-message pkg-install pkg-deinstall pkg-req
.if ${SUB_FILES:M${i}}!=""
${i:S/-//:tu}= ${WRKDIR}/${SUB_FILES:M${i}}
.endif
.endfor
.endif
PLIST_SUB_SANITIZED= ${PLIST_SUB:N*_regex=*}
.if !target(generate-plist)
generate-plist: ${WRKDIR}
@${ECHO_MSG} "===> Generating temporary packing list"
@${MKDIR} ${TMPPLIST:H}
@if [ ! -f ${DESCR} ]; then ${ECHO_MSG} "** Missing pkg-descr for ${PKGNAME}."; exit 1; fi
@>${TMPPLIST}
@for file in ${PLIST_FILES}; do
done
.if !empty(PLIST)
.for f in ${PLIST}
@if [ -f "${f}" ]; then
${SED} ${PLIST_SUB_SANITIZED:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} ${f} >> ${TMPPLIST};
for i in owner group mode; do
fi
.endfor
.endif
.for dir in ${PLIST_DIRS}
@${ECHO_CMD} ${dir} | ${SED} ${PLIST_SUB_SANITIZED:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} -e 's,^,@dir ,' >> ${TMPPLIST}
.endfor
.endif
${TMPPLIST}:
@cd ${.CURDIR} && ${MAKE} generate-plist
.for _type in EXAMPLES DOCS
.if !empty(_REALLY_ALL_POSSIBLE_OPTIONS:M${_type})
.if !target(add-plist-${_type:tl})
.if defined(PORT${_type}) && !empty(PORT_OPTIONS:M${_type})
add-plist-${_type:tl}:
.for x in ${PORT${_type}}
@if ${ECHO_CMD} "${x}"|
if [ ! -e ${STAGEDIR}${${_type}DIR}/${x} ]; then
${ECHO_CMD} ${${_type}DIR}/${x} >> ${TMPPLIST};
fi;fi
.endfor
@${FIND} -P ${PORT${_type}:S/^/${STAGEDIR}${${_type}DIR}//} ! -type d 2>/dev/null |
${SED} -ne 's,^${STAGEDIR},,p' >> ${TMPPLIST}
.endif
.endif
.endif
.endfor
.if !target(add-plist-data)
.if defined(PORTDATA)
add-plist-data:
.for x in ${PORTDATA}
@if ${ECHO_CMD} "${x}"|
if [ ! -e ${STAGEDIR}${DATADIR}/${x} ]; then
${ECHO_CMD} ${DATADIR}/${x} >> ${TMPPLIST};
fi;fi
.endfor
@${FIND} -P ${PORTDATA:S/^/${STAGEDIR}${DATADIR}//} ! -type d 2>/dev/null |
${SED} -ne 's,^${STAGEDIR},,p' >> ${TMPPLIST}
.endif
.endif
.if !target(add-plist-info)
.if defined(INFO)
add-plist-info:
.for i in ${INFO}
@${LS} ${STAGEDIR}${PREFIX}/${INFO_PATH}/$i.info* | ${SED} -e s:${STAGEDIR}:@info\ :g >> ${TMPPLIST}
.endfor
.endif
.endif
.if !target(add-plist-post)
.if (${PREFIX} != ${LOCALBASE} && ${PREFIX} != ${LINUXBASE} &&
${PREFIX} != "/usr" && ${PREFIX} != "/" && !defined(NO_PREFIX_RMDIR))
add-plist-post:
@${ECHO_CMD} "@dir ${PREFIX}" >> ${TMPPLIST}
.endif
.endif
.if !target(install-rc-script)
.if defined(USE_RC_SUBR)
install-rc-script:
@${ECHO_MSG} "===> Staging rc.d startup script(s)"
@for i in ${USE_RC_SUBR}; do
_prefix=${PREFIX};
[ "${PREFIX}" = "/usr" ] && _prefix="" ;
${INSTALL_SCRIPT} ${WRKDIR}/$${i}
done
.endif
.endif
.if !target(check-man)
check-man: stage
@${ECHO_MSG} "====> Checking man pages (check-man)"
@mdirs= ;
for dir in ${MANDIRS:S/^/${STAGEDIR}/} ; do
[ -d $$dir ] && mdirs="$$mdirs $$dir" ;
done ;
err=0 ;
for dir in $$mdirs; do
for f in $$(find $$dir -name ".gz"); do
${ECHO_CMD} "===> Checking $${f##/}" ;
gunzip -c $$f | mandoc -Tlint -Werror && continue ;
err=1 ;
done ;
done ;
exit $$err
.endif
.if !target(compress-man)
compress-man:
@${ECHO_MSG} "====> Compressing man pages (compress-man)"
@mdirs= ;
for dir in ${MANDIRS:S/^/${STAGEDIR}/} ; do
[ -d $$dir ] && mdirs="$$mdirs $$dir" ;
done ;
for dir in $$mdirs; do
${FIND} $$dir -type f ! -name ".gz" ! -links 1 -exec ${STAT} -f '%i' {} ; |
${SORT} -u | while read inode ; do
unset ref ;
for f in $$(
if [ -z $$ref ]; then
ref=$${f}.gz ;
continue ;
fi ;
(cd $${f%/}; ${LN} -f $${ref##/} $${f##/}.gz) ;
done ;
done ;
${FIND} $$dir -type l ! -name ".gz" | while read link ; do
done;
done
.endif
.if !target(stage-dir)
stage-dir: ${STAGEDIR}${PREFIX}
.if !defined(NO_MTREE)
@${MTREE_CMD} ${MTREE_ARGS} ${STAGEDIR}${PREFIX} > /dev/null
.endif
.endif
.if !target(makeplist)
makeplist: stage
@${SETENV} ${CO_ENV} ${SH} ${SCRIPTSDIR}/check-stagedir.sh makeplist
.endif
.if !target(check-plist)
check-plist: stage
@${ECHO_MSG} "====> Checking for pkg-plist issues (check-plist)"
@${SETENV} ${CO_ENV} ${SH} ${SCRIPTSDIR}/check-stagedir.sh checkplist
@${ECHO_MSG} "===> No pkg-plist issues found (check-plist)"
.endif
.if !target(check-orphans)
check-orphans: check-plist
.endif
.if !target(stage-qa)
stage-qa:
@${ECHO_MSG} "====> Running Q/A tests (stage-qa)"
@${SETENV} ${QA_ENV} ${SH} ${SCRIPTSDIR}/qa.sh
.if !defined(DEVELOPER)
@${ECHO_MSG} "/!\ To run stage-qa automatically add DEVELOPER=yes to your environment /!\"
.endif
.endif
pretty-flavors-package-names: .PHONY
.if empty(FLAVORS)
@${ECHO_CMD} "no flavor: ${PKGNAME}"
.else
.for f in ${FLAVORS}
@${ECHO_CMD} -n "${f}: "
@cd ${.CURDIR} && ${SETENV} FLAVOR=${f} ${MAKE} -B -V PKGNAME
.endfor
.endif
flavors-package-names: .PHONY
.if empty(FLAVORS)
@${ECHO_CMD} "${PKGNAME}"
.else
.for f in ${FLAVORS}
@cd ${.CURDIR} && ${SETENV} FLAVOR=${f} ${MAKE} -B -V PKGNAME
.endfor
.endif
.if !target(fake-pkg)
STAGE_ARGS= -i ${STAGEDIR}
.if defined(NO_PKG_REGISTER)
STAGE_ARGS= -N
.endif
fake-pkg:
.if defined(INSTALLS_DEPENDS)
.if !defined(NO_PKG_REGISTER)
@${ECHO_MSG} "===> Registering installation for ${PKGNAME} as automatic"
.endif
@${SETENV} ${PKG_ENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_REGISTER} -d ${STAGE_ARGS} -m ${METADIR} -f ${TMPPLIST}
.else
.if !defined(NO_PKG_REGISTER)
@${ECHO_MSG} "===> Registering installation for ${PKGNAME}"
.endif
@${SETENV} ${PKG_ENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_REGISTER} ${STAGE_ARGS} -m ${METADIR} -f ${TMPPLIST}
.endif
@${RM} -r ${METADIR}
.endif
.for _t in depend tags
.if !target(${_t})
${_t}:
.endif
.endfor
.if !defined(NOPRECIOUSMAKEVARS)
.for var in ${_EXPORTED_VARS}
.if empty(.MAKEFLAGS:M${var}=*) && !empty(${var})
.MAKEFLAGS: ${var}=${${var}:Q}
.endif
.endfor
.endif
PORTS_ENV_VARS+= ${_EXPORTED_VARS}
.if !target(pre-check-config)
pre-check-config:
CHECK_OPTIONS_NAMES= OPTIONS_DEFINE OPTIONS_GROUP OPTIONS_MULTI
OPTIONS_RADIO OPTIONS_SINGLE
CHECK_OPTIONS_NAMES+= ${OPTIONS_GROUP:S/^/OPTIONS_GROUP/}
CHECK_OPTIONS_NAMES+= ${OPTIONS_MULTI:S/^/OPTIONS_MULTI/}
CHECK_OPTIONS_NAMES+= ${OPTIONS_RADIO:S/^/OPTIONS_RADIO/}
CHECK_OPTIONS_NAMES+= ${OPTIONS_SINGLE:S/^/OPTIONS_SINGLE/}
.for var in ${CHECK_OPTIONS_NAMES}
. if defined(${var})
. for o in ${${var}}
. if ${o:C/[-[:upper:][:digit:]]//g}
OPTIONS_BAD_NAMES+= ${o}
. endif
. endfor
. endif
.endfor
.if defined(OPTIONS_BAD_NAMES) && !empty(OPTIONS_BAD_NAMES)
DEV_WARNING+= "These options name have characters outside of [-A-Z0-9]:"
DEV_WARNING+= "${OPTIONS_BAD_NAMES:O:u}"
.endif
.for single in ${OPTIONS_SINGLE}
. for opt in ${OPTIONS_SINGLE${single}}
. if empty(ALL_OPTIONS:M${single}) || !empty(PORT_OPTIONS:M${single})
. if !empty(PORT_OPTIONS:M${opt})
OPTIONS_WRONG_SINGLE${single}+= ${opt}
. if defined(OPTFOUND)
OPTIONS_WRONG_SINGLE+= ${single}
. else
OPTFOUND= true
. endif
. endif
. else
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
OPTNOCHECK= true
. endif
. endfor
. if !defined(OPTFOUND) && !defined(OPTNOCHECK)
OPTIONS_WRONG_SINGLE+= ${single}
. endif
. undef OPTFOUND
. undef OPTNOCHECK
.endfor
.undef single
.for radio in ${OPTIONS_RADIO}
. for opt in ${OPTIONS_RADIO_${radio}}
. if !empty(PORT_OPTIONS:M${opt})
OPTIONS_WRONG_RADIO_${radio}+= ${opt}
. if defined(OPTFOUND)
OPTIONS_WRONG_RADIO+= ${radio}
. else
OPTFOUND= true
. endif
. endif
. endfor
. undef OPTFOUND
.endfor
.for multi in ${OPTIONS_MULTI}
. for opt in ${OPTIONS_MULTI_${multi}}
. if empty(ALL_OPTIONS:M${multi}) || !empty(PORT_OPTIONS:M${multi})
. if !empty(PORT_OPTIONS:M${opt})
OPTFOUND= true
. endif
. else
PORT_OPTIONS:= ${PORT_OPTIONS:N${opt}}
OPTNOCHECK= true
. endif
. endfor
. if !defined(OPTFOUND) && !defined(OPTNOCHECK)
OPTIONS_WRONG_MULTI+= ${multi}
. endif
. undef OPTFOUND
. undef OPTNOCHECK
.endfor
.undef multi
.for opt in ${PORT_OPTIONS}
. for conflict in ${${opt}PREVENTS}
. if ${PORT_OPTIONS:M${conflict}}
. if empty(OPTIONS_WRONG_PREVENTS:M${opt})
OPTIONS_WRONG_PREVENTS+= ${opt}
. endif
OPTIONS_WRONG_PREVENTS${opt}+= ${conflict}
. endif
. endfor
.endfor
.undef conflict
.undef opt
.endif #pre-check-config
.if !target(check-config)
check-config: pre-check-config
.for multi in ${OPTIONS_WRONG_MULTI}
@${ECHO_MSG} "====> You must check at least one option in the ${multi} multi"
.endfor
.for single in ${OPTIONS_WRONG_SINGLE}
@${ECHO_MSG} "====> You must select one and only one option from the ${single} single"
.if defined(OPTIONS_WRONG_SINGLE${single})
@${ECHO_MSG} "=====> Only one of these must be defined: ${OPTIONS_WRONG_SINGLE${single}}"
.else
@${ECHO_MSG} "=====> No option was selected (and one must be)"
.endif
.endfor
.for radio in ${OPTIONS_WRONG_RADIO}
@${ECHO_MSG} "====> You cannot select multiple options from the ${radio} radio"
@${ECHO_MSG} "=====> Only one of these must be defined: ${OPTIONS_WRONG_RADIO_${radio}}"
.endfor
.if defined(OPTIONS_WRONG_PREVENTS)
@${ECHO_MSG} "====> Two or more enabled options conflict with each other"
. for prevents in ${OPTIONS_WRONG_PREVENTS}
@${ECHO_MSG} "=====> Option ${prevents} conflicts with ${OPTIONS_WRONG_PREVENTS_${prevents}} (select only one)"
. if defined(${prevents}_PREVENTS_MSG)
@${ECHO_MSG} "======> ${${prevents}_PREVENTS_MSG}"
. endif
. endfor
.endif
.if !empty(OPTIONS_WRONG_MULTI) || !empty(OPTIONS_WRONG_SINGLE) || !empty(OPTIONS_WRONG_RADIO) || !empty(OPTIONS_WRONG_PREVENTS)
_CHECK_CONFIG_ERROR= true
.endif
.endif # _check-config
.if !target(check-config)
check-config: _check-config
.if !empty(_CHECK_CONFIG_ERROR)
@${FALSE}
.endif
.endif # check-config
.if !target(sanity-config)
sanity-config: _check-config
.if !empty(_CHECK_CONFIG_ERROR)
@echo -n "Config is invalid. Re-edit? [Y/n] ";
read answer;
case $$answer in
[Nn]|[Nn][Oo])
exit 0;
esac;
cd ${.CURDIR} && ${MAKE} config
.endif
.endif # sanity-config
.if !target(pre-config)
pre-config:
D4P_ENV= PKGNAME="${PKGNAME}"
PORT_OPTIONS="${PORT_OPTIONS}"
ALL_OPTIONS="${ALL_OPTIONS}"
OPTIONS_MULTI="${OPTIONS_MULTI}"
OPTIONS_SINGLE="${OPTIONS_SINGLE}"
OPTIONS_RADIO="${OPTIONS_RADIO}"
OPTIONS_GROUP="${OPTIONS_GROUP}"
NEW_OPTIONS="${NEW_OPTIONS}"
DIALOG4PORTS="${DIALOG4PORTS}"
PREFIX="${PREFIX}"
LOCALBASE="${LOCALBASE}"
PORTSDIR="${PORTSDIR}"
MAKE="${MAKE}"
D4PHEIGHT="${D4PHEIGHT}"
D4PMINHEIGHT="${D4PMINHEIGHT}"
D4PWIDTH="${D4PWIDTH}"
D4PFULLSCREEN="${D4PFULLSCREEN}"
D4PALIGNCENTER="${D4PALIGNCENTER}"
D4PASCIILINES="${D4PASCIILINES}"
.if exists(${PKGHELP})
D4P_ENV+= PKGHELP="${PKGHELP}"
.endif
.for opt in ${ALL_OPTIONS}
D4P_ENV+= ${opt}DESC=""${${opt}DESC:Q}""
.endfor
.for otype in MULTI GROUP SINGLE RADIO
. for m in ${OPTIONS${otype}}
D4P_ENV+= OPTIONS${otype}${m}="${OPTIONS${otype}_${m}}"
${m}DESC=""${${m}DESC:Q}""
. for opt in ${OPTIONS${otype}${m}}
D4P_ENV+= ${opt}_DESC=""${${opt}_DESC:Q}""
. endfor
. endfor
.endfor
.undef m
.undef otype
.undef opt
.endif # pre-config
.if !target(do-config)
do-config:
.if empty(ALL_OPTIONS) && empty(OPTIONS_SINGLE) && empty(OPTIONS_MULTI) && empty(OPTIONS_RADIO) && empty(OPTIONS_GROUP)
@${ECHO_MSG} "===> No options to configure"
.else
@optionsdir=${OPTIONS_FILE:H};
if [ ! -w "${PORT_DBDIR}" -a "stat -f %u ${PORT_DBDIR:H}
" = 0 ];
then
(${SU_CMD} "${SH} -c "${MKDIR} $${optionsdir} 2> /dev/null"") ||
(
${ECHO_MSG} "===> Returning to user credentials" ;
else
(
fi
@TMPOPTIONSFILE=$$(mktemp -t portoptions);
trap "${RM} $${TMPOPTIONSFILE}; exit 1" 1 2 3 5 10 13 15;
${SETENV} ${D4P_ENV} ${SH} ${SCRIPTSDIR}/dialog4ports.sh $${TMPOPTIONSFILE} || {
${ECHO_MSG} "===> Options unchanged";
exit 0;
};
${ECHO_CMD};
if [ ! -e $${TMPOPTIONSFILE} ]; then
${ECHO_MSG} "===> No user-specified options to save for ${PKGNAME}";
exit 0;
fi;
SELOPTIONS=$$(
TMPOPTIONSFILE=$$(mktemp -t portoptions);
trap "${RM} $${TMPOPTIONSFILE}; exit 1" 1 2 3 5 10 13 15;
${ECHO_CMD} "# Options for ${PKGNAME}" >> $${TMPOPTIONSFILE};
${ECHO_CMD} "_OPTIONS_READ=${PKGNAME}" >> $${TMPOPTIONSFILE};
${ECHO_CMD} "_FILE_COMPLETE_OPTIONS_LIST=${COMPLETE_OPTIONS_LIST}" >> $${TMPOPTIONSFILE};
for i in ${COMPLETE_OPTIONS_LIST}; do
if
else
fi;
done;
if [ ! -w "${OPTIONS_FILE:H}" -a "stat -f %u ${OPTIONS_FILE:H}
" != ${UID} ];
then
${ECHO_MSG} "===> Switching to root credentials to write ${OPTIONS_FILE}";
${SU_CMD} "${CAT} $${TMPOPTIONSFILE} > ${OPTIONS_FILE}";
${ECHO_MSG} "===> Returning to user credentials";
else
fi;
@cd ${.CURDIR} && ${MAKE} sanity-config
.endif
.endif # do-config
.if !target(config)
.if !defined(NO_DIALOG)
config: pre-config do-config
.else
config:
@${ECHO_MSG} "===> Skipping 'config' as NO_DIALOG is defined"
.endif
.endif # config
.if !target(config-recursive)
config-recursive:
@${ECHO_MSG} "===> Setting user-specified options for ${PKGNAME} and dependencies";
@recursive_cmd="config-conditional";
recursive_dirs="${.CURDIR}${FLAVOR:D@${FLAVOR}} $$(${ALL-DEPENDS-FLAVORS-LIST})";
${_FLAVOR_RECURSIVE_SH}
.endif # config-recursive
.if !target(config-conditional)
config-conditional:
.if !empty(NEW_OPTIONS)
@cd ${.CURDIR} && ${MAKE} config;
.endif
.endif # config-conditional
.if !target(showconfig) && (make(config) || (!empty(.MAKEFLAGS:M-V) && !empty(.MAKEFLAGS:M*_DESC)))
.include "${PORTSDIR}/Mk/bsd.options.desc.mk"
MULTI_EOL= : you have to choose at least one of them
SINGLE_EOL= : you have to select exactly one of them
RADIO_EOL= : you can only select none or one of them
showconfig: check-config
.if !empty(COMPLETE_OPTIONS_LIST)
@${ECHO_MSG} "===> The following configuration options are available for ${PKGNAME}":
.for opt in ${ALL_OPTIONS}
@[ -z "${PORT_OPTIONS:M${opt}}" ] || match="on" ; ${ECHO_MSG} -n " ${opt}=$${match:-off}"
. if !empty(${opt}_DESC)
@${ECHO_MSG} -n ": "${${opt}_DESC:Q}
. endif
@${ECHO_MSG} ""
.endfor
#multi and conditional multis
.for otype in MULTI GROUP SINGLE RADIO
. for m in ${OPTIONS_${otype}}
. if empty(${m}_DESC)
@${ECHO_MSG} "====> Options available for the ${otype:tl} ${m}${${otype}_EOL}"
. else
@${ECHO_MSG} "====> ${${m}DESC}${${otype}EOL}"
. endif
. for opt in ${OPTIONS${otype}${m}}
@[ -z "${PORT_OPTIONS:M${opt}}" ] || match="on" ; ${ECHO_MSG} -n " ${opt}=$${match:-off}"
. if !empty(${opt}_DESC)
@${ECHO_MSG} -n ": "${${opt}_DESC:Q}
. endif
@${ECHO_MSG} ""
. endfor
. endfor
.endfor
.undef otype
.undef m
.undef opt
@${ECHO_MSG} "===> Use 'make config' to modify these settings"
.endif
.endif # showconfig
.if !target(showconfig-recursive)
showconfig-recursive:
@${ECHO_MSG} "===> The following configuration options are available for ${PKGNAME} and its dependencies";
@recursive_cmd="showconfig";
recursive_dirs="${.CURDIR}${FLAVOR:D@${FLAVOR}} $$(${ALL-DEPENDS-FLAVORS-LIST})";
${_FLAVOR_RECURSIVE_SH}
.endif # showconfig-recursive
.if !target(rmconfig)
rmconfig:
.if exists(${OPTIONS_FILE})
-@${ECHO_MSG} "===> Removing user-configured options for ${PKGNAME}";
optionsdir=${OPTIONS_FILE:H};
if [ ${UID} != 0 -a "x${INSTALL_AS_USER}" = "x" -a ! -w "${OPTIONS_FILE}" ]; then
${ECHO_MSG} "===> Switching to root credentials to remove ${OPTIONS_FILE} and $${optionsdir}";
${SU_CMD} "${RM} ${OPTIONS_FILE} ;
${ECHO_MSG} "===> Returning to user credentials";
else
${RM} ${OPTIONS_FILE};
fi
.else
@${ECHO_MSG} "===> No user-specified options configured for ${PKGNAME}"
.endif
.endif # rmconfig
.if !target(rmconfig-recursive)
rmconfig-recursive:
@${ECHO_MSG} "===> Removing user-specified options for ${PKGNAME} and its dependencies";
@recursive_cmd="rmconfig";
recursive_dirs="${.CURDIR}${FLAVOR:D@${FLAVOR}} $$(${ALL-DEPENDS-FLAVORS-LIST})";
${_FLAVOR_RECURSIVE_SH}
.endif # rmconfig-recursive
.if !target(pretty-print-config)
MULTI_START= [
MULTI_END= ]
GROUP_START= [
GROUP_END= ]
SINGLE_START= (
SINGLE_END= )
RADIO_START= (
RADIO_END= )
pretty-print-config:
.for opt in ${ALL_OPTIONS}
@[ -z "${PORT_OPTIONS:M${opt}}" ] || match="+" ;
.endfor
.for otype in MULTI GROUP SINGLE RADIO
. for m in ${OPTIONS_${otype}}
@${ECHO_MSG} -n "${m}${${otype}START} "
. for opt in ${OPTIONS${otype}_${m}}
@[ -z "${PORT_OPTIONS:M${opt}}" ] || match="+" ;
. endfor
@${ECHO_MSG} -n "${${otype}_END} "
. endfor
.endfor
.undef otype
.undef m
.undef opt
@${ECHO_MSG} ""
.endif # pretty-print-config
desktop-categories:
@${SETENV}
dp_CATEGORIES="${CATEGORIES}"
dp_ECHO_CMD=${ECHO_CMD}
dp_SCRIPTSDIR="${SCRIPTSDIR}"
dp_SORT="${SORT}"
dp_TR="${TR}"
${SH} ${SCRIPTSDIR}/desktop-categories.sh
.if defined(DESKTOP_ENTRIES)
check-desktop-entries:
@${SETENV}
dp_CURDIR="${.CURDIR}"
dp_ECHO_CMD=${ECHO_CMD}
dp_ECHO_MSG=${ECHO_MSG}
dp_EXPR="${EXPR}"
dp_GREP="${GREP}"
dp_MAKE="${MAKE}"
dp_PKGNAME="${PKGNAME}"
dp_SCRIPTSDIR="${SCRIPTSDIR}"
dp_SED="${SED}"
dp_VALID_DESKTOP_CATEGORIES="${VALID_DESKTOP_CATEGORIES}"
dp_TR="${TR}"
${SH} ${SCRIPTSDIR}/check-desktop-entries.sh ${DESKTOP_ENTRIES}
.endif
.if !target(install-desktop-entries)
.if defined(DESKTOP_ENTRIES)
install-desktop-entries:
@${SETENV}
dp_CURDIR="${.CURDIR}"
dp_ECHO_CMD=${ECHO_CMD}
dp_SCRIPTSDIR="${SCRIPTSDIR}"
dp_STAGEDIR="${STAGEDIR}"
dp_DESKTOPDIR="${DESKTOPDIR}"
dp_TMPPLIST="${TMPPLIST}"
dp_MAKE="${MAKE}"
dp_SED="${SED}"
${SH} ${SCRIPTSDIR}/install-desktop-entries.sh ${DESKTOP_ENTRIES}
.endif
.endif
.if !empty(BINARY_ALIAS)
.if !target(create-binary-alias)
create-binary-alias: ${BINARY_LINKDIR}
.for target src in ${BINARY_ALIAS:C/=/ /}
@if srcpath=which -- ${src}
; then
else
${ECHO_MSG} "===> Missing "${src}" to create a binary alias at "${BINARY_LINKDIR}/${target}"";
${FALSE};
fi
.endfor
.endif
.endif
.if !empty(BINARY_WRAPPERS)
.if !target(create-binary-wrappers)
create-binary-wrappers: ${BINARY_LINKDIR}
.for bin in ${BINARY_WRAPPERS}
@${INSTALL_SCRIPT} ${WRAPPERSDIR}/${bin} ${BINARY_LINKDIR}
.endfor
.endif
.endif
.if defined(WARNING)
WARNING_WAIT?= 10
show-warnings:
@${ECHO_MSG} "/!\ WARNING /!\"
@${ECHO_MSG}
.for m in ${WARNING}
@${ECHO_MSG} "${m}" | ${FMT_80}
@${ECHO_MSG}
.endfor
@sleep ${WARNING_WAIT}
.endif
.if defined(ERROR)
show-errors:
@${ECHO_MSG} "/!\ ERRORS /!\"
@${ECHO_MSG}
.for m in ${ERROR}
@${ECHO_MSG} "${m}" | ${FMT_80}
@${ECHO_MSG}
.endfor
@${FALSE}
.endif
.if defined(DEVELOPER)
.if defined(DEV_WARNING)
DEV_WARNING_WAIT?= 10
show-dev-warnings:
@${ECHO_MSG} "/!\ ${PKGNAME}: Makefile warnings, please consider fixing /!\"
@${ECHO_MSG}
.for m in ${DEV_WARNING}
@${ECHO_MSG} ${m} | ${FMT_80}
@${ECHO_MSG}
.endfor
.if defined(DEV_WARNING_FATAL)
@${FALSE}
.else
@sleep ${DEV_WARNING_WAIT}
.endif
.endif
.if defined(DEV_ERROR)
show-dev-errors:
@${ECHO_MSG} "/!\ ${PKGNAME}: Makefile errors /!\"
@${ECHO_MSG}
.for m in ${DEV_ERROR}
@${ECHO_MSG} "${m}" | ${FMT_80}
@${ECHO_MSG}
.endfor
@${FALSE}
.endif
.endif #DEVELOPER
${_PORTS_DIRECTORIES}:
@${MKDIR} ${.TARGET}
_TARGETS_STAGES= SANITY PKG FETCH EXTRACT PATCH CONFIGURE BUILD INSTALL TEST PACKAGE STAGE
_SANITY_SEQ= 050:post-chroot 100:pre-everything
125:show-unsupported-system-error 150:check-makefile
190:show-errors 200:show-warnings
210:show-dev-errors 220:show-dev-warnings
250:check-categories 300:check-makevars
350:check-desktop-entries 400:check-depends
450:identify-install-conflicts 500:check-deprecated
550:check-vulnerable 600:check-license 650:check-config
700:buildanyway-message 750:options-message ${_USES_sanity}
_PKG_DEP= check-sanity
_PKG_SEQ= 500:pkg-depends
_FETCH_DEP= pkg
_FETCH_SEQ= 150:fetch-depends 300:pre-fetch 450:pre-fetch-script
500:do-fetch 550:fetch-specials 700:post-fetch
850:post-fetch-script
${_OPTIONS_fetch} ${_USES_fetch}
_EXTRACT_DEP= fetch
_EXTRACT_SEQ= 010:check-build-conflicts 050:extract-message 100:checksum
150:extract-depends 190:clean-wrkdir 200:${EXTRACT_WRKDIR}
300:pre-extract 450:pre-extract-script 500:do-extract
700:post-extract 850:post-extract-script
999:extract-fixup-modes
${_OPTIONS_extract} ${_USES_extract} ${_SITES_extract}
_PATCH_DEP= extract
_PATCH_SEQ= 050:ask-license 100:patch-message 150:patch-depends
300:pre-patch 450:pre-patch-script 500:do-patch
700:post-patch 850:post-patch-script
${_OPTIONS_patch} ${_USES_patch}
_CONFIGURE_DEP= patch
_CONFIGURE_SEQ= 150:build-depends 151:lib-depends 160:create-binary-alias
161:create-binary-wrappers
200:configure-message 210:apply-slist
300:pre-configure 450:pre-configure-script
490:run-autotools-fixup 500:do-configure 700:post-configure
850:post-configure-script
${_OPTIONS_configure} ${_USES_configure}
_BUILD_DEP= configure
_BUILD_SEQ= 100:build-message 300:pre-build 450:pre-build-script
500:do-build 700:post-build 850:post-build-script
${_OPTIONS_build} ${_USES_build}
_STAGE_DEP= build
_STAGE_SEQ= 050:stage-message 100:stage-dir 150:run-depends
300:pre-install
400:generate-plist 450:pre-su-install 475:create-users-groups
500:do-install 550:kmod-post-install 600:fixup-lib-pkgconfig 700:post-install
750:post-install-script 800:post-stage 850:compress-man
860:install-rc-script 870:install-ldconfig-file
880:install-license 890:install-desktop-entries
900:add-plist-info 910:add-plist-docs 920:add-plist-examples
930:add-plist-data 940:add-plist-post ${POST_PLIST:C/^/990:/}
${_OPTIONS_install} ${_USES_install}
${_OPTIONS_stage} ${_USES_stage}
.if defined(DEVELOPER)
_STAGE_SEQ+= 995:stage-qa
.else
stage-qa: stage
.endif
_TEST_DEP= stage
_TEST_SEQ= 100:test-message 150:test-depends 300:pre-test 500:do-test
800:post-test
${_OPTIONS_test} ${_USES_test}
_INSTALL_DEP= stage
_INSTALL_SEQ= 100:install-message
200:check-already-installed
300:create-manifest
_INSTALL_SUSEQ= 400:fake-pkg 500:security-check
_PACKAGE_DEP= stage
_PACKAGE_SEQ= 100:package-message 300:pre-package 450:pre-package-script
500:do-package 850:post-package-script
${_OPTIONS_package} ${_USES_package}
.for _t in ${_TARGETS_STAGES}
. if defined(TARGET_ORDER_OVERRIDE)
_tmp_seq:=
. for entry in ${${_t}_SEQ}
. for _target in ${_entry:C/^[0-9]+://}
. if ${TARGET_ORDER_OVERRIDE:M*:${_target}}
_tmp_seq:= ${_tmp_seq} ${TARGET_ORDER_OVERRIDE:M*:${_target}}
. else
_tmp_seq:= ${_tmp_seq} ${_entry}
. endif
. endfor
. endfor
_${_t}_SEQ:= ${tmp_seq}
. endif
. for s in ${${_t}_SEQ:O:C/^[0-9]+://}
. if target(${s})
. if ! ${NOTPHONY:M${s}}
_PHONY_TARGETS+= ${s}
. endif
_${_t}REAL_SEQ+= ${s}
. endif
. endfor
. for s in ${${_t}_SUSEQ:O:C/^[0-9]+://}
. if target(${s})
. if ! ${NOTPHONY:M${s}}
_PHONY_TARGETS+= ${s}
. endif
_${_t}REAL_SUSEQ+= ${s}
. endif
. endfor
.ORDER: ${${_t}DEP} ${${_t}_REAL_SEQ}
.endfor
.for target in extract patch configure build stage install package
.if !target(${target}) && defined(_OPTIONS_OK)
_PHONY_TARGETS+= ${target}
${target}: ${${target:tu}COOKIE}
.elif !target(${target})
${target}: config-conditional
@cd ${.CURDIR} && ${MAKE} CONFIG_DONE${PKGBASE:tu}=1 ${${target:tu}_COOKIE}
.elif target(${target}) && defined(IGNORE)
.endif
.if !exists(${${target:tu}_COOKIE})
.if ${UID} != 0 && defined(_${target:tu}_REAL_SUSEQ) && !defined(INSTALL_AS_USER)
. if defined(USE_SUBMAKE)
${${target:tu}COOKIE}: ${${target:tu}DEP}
@cd ${.CURDIR} && ${MAKE} ${${target:tu}_REAL_SEQ}
. else # !USE_SUBMAKE
${${target:tu}COOKIE}: ${${target:tu}DEP} ${${target:tu}REAL_SEQ}
. endif # USE_SUBMAKE
@${ECHO_MSG} "===> Switching to root credentials for '${target}' target"
@cd ${.CURDIR} &&
${SU_CMD} "${MAKE} ${${target:tu}_REAL_SUSEQ}"
@${ECHO_MSG} "===> Returning to user credentials"
@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
.else # No SU needed
. if defined(USE_SUBMAKE)
${${target:tu}COOKIE}: ${${target:tu}DEP}
@cd ${.CURDIR} &&
${MAKE} ${${target:tu}REAL_SEQ} ${${target:tu}_REAL_SUSEQ}
@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
. else # !USE_SUBMAKE
${${target:tu}COOKIE}: ${${target:tu}DEP} ${${target:tu}REAL_SEQ} ${${target:tu}_REAL_SUSEQ}
@${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
. endif # USE_SUBMAKE
.endif # SU needed
.else # exists(cookie)
${${target:tu}_COOKIE}::
@if [ ! -e ${.TARGET} ]; then
cd ${.CURDIR} && ${MAKE} ${.TARGET};
fi
.endif # !exists(cookie)
.endfor # foreach(targets)
.PHONY: ${_PHONY_TARGETS} check-sanity fetch pkg
.if !target(check-sanity)
check-sanity: ${_SANITY_REAL_SEQ}
.endif
.if !target(fetch)
fetch: ${_FETCH_DEP} ${_FETCH_REAL_SEQ}
.endif
.if !target(pkg)
pkg: ${_PKG_DEP} ${_PKG_REAL_SEQ}
.endif
.if !target(test)
test: ${_TEST_DEP}
.if !defined(NO_TEST)
test: ${_TEST_REAL_SEQ}
.endif
.endif
.endif
.endif
As smbd1368 suggested, we should be able to support reading logs from data like Intel:
For example, in The Intel Net Batch logs, the data is as follows:
Hello,
I think there are two problems with the current implementation of HEFT (findFinishTime):
while (j >= 0) {
Event current = sched.get(i);
Event previous = sched.get(j);
if (readyTime > previous.finish) {
if (readyTime + computationCost <= current.start) {
start = readyTime;
finish = readyTime + computationCost;
}
break;
}
if (previous.finish + computationCost <= current.start) {
start = previous.finish;
finish = previous.finish + computationCost;
pos = i;
}
i--;
j--;
}
(1) This loop assumes that sched is sorted by the start time right? But in this function we simply call sched.add such that a sorted list is no more guaranteed.
(2) In the code above we set the start time to the readyTime in one case. Shouldn't it be the previous.finish time? Otherwise it could. i.e. be that two tasks get the same start time...
Thank you, David
such as isRealInputFile is widely used and should be unified
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.