[prev in list] [next in list] [prev in thread] [next in thread]
List: postgresql-ports
Subject: [PORTS] [RPM] 7.2devel RPM set
From: Peter Eisentraut <peter_e () gmx ! net>
Date: 2001-09-30 16:05:07
[Download RAW message or body]
Lamar, here are the patches I promised a while ago. I have included a
slightly tweaked version of the bug-fix patch to the 7.1.* spec file that
we already discussed, as well as a patch to get a 7.2devel RPM to build
and a correspondingly updated source patch file. (I didn't create a patch
for the patch file...) Note that the two spec file patches need to be
applied in order.
This patch set represents the absolute minimum to get 7.2 to build. In
particular, contrib is probably suboptimal packaged in this way. More to
come.
Changes here:
* remove patches which were merged into source or obsoleted
* follow new include layout
* follow new lib layout
* libpq version update
* new/old/renamed files
New food for thought:
* -jdbc package should be noarch? I tried this but it made all packages
noarch!
* We now have the ability to build the ODBC driver for unixODBC or iODBC
(but not both). Some distributors supply unixODBC as the "default"
driver manager and it would be nice if this could be respected somehow.
--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
["00-postgresql-spec-713.patch" (TEXT/PLAIN)]
--- postgresql.spec.orig Sat Aug 18 01:19:39 2001
+++ postgresql.spec Wed Sep 19 00:40:15 2001
@@ -44,7 +44,7 @@
# Pre-release RPM's should not be put up on the public ftp.postgresql.org server
# -- only test releases or full releases should be.
-Release: 1PGDG
+Release: 3XXX
License: BSD
Group: Applications/Databases
Source0: ftp://ftp.postgresql.org/pub/source/v%{version}/postgresql-%{version}.tar.gz
@@ -64,7 +64,9 @@
Patch3: %{name}-7.1.s390x.patch
Buildrequires: perl glibc-devel
Prereq: /sbin/ldconfig initscripts
-BuildPrereq: python-devel perl tcl /lib/cpp
+BuildPrereq: python-devel perl tcl
+BuildPrereq: readline-devel >= 4.0
+BuildPrereq: zlib-devel >= 1.0.4
%if %ssl
BuildPrereq: openssl-devel
%endif
@@ -353,10 +355,12 @@
# cp /usr/share/libtool/config.* .
#fi
+CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS
+CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS
+
# Strip out -ffast-math from CFLAGS....
-CFLAGS=`echo $RPM_OPT_FLAGS|xargs -n 1|grep -v ffast-math|xargs -n 100`
-export CXXFLAGS="$CFLAGS"
+CFLAGS=`echo $CFLAGS|xargs -n 1|grep -v ffast-math|xargs -n 100`
./configure --enable-locale --with-CXX --prefix=/usr\
%if %perl
@@ -391,7 +395,7 @@
--includedir=%{_includedir}/pgsql \
--datadir=/usr/share/pgsql
-make COPT="$CFLAGS" all
+make all
%if %plperl
pushd src/pl/plperl
@@ -457,14 +461,10 @@
%endif
-make -C doc
-
# man pages....
-pushd $RPM_BUILD_ROOT%{_mandir}
-tar xzf $RPM_BUILD_DIR/postgresql-%{version}/doc/man.tar.gz
-
# the postgresql-dump manpage.....
+pushd $RPM_BUILD_ROOT%{_mandir}
cp %{SOURCE12} man1
popd
@@ -519,7 +519,6 @@
# Fixup more permissions...
chmod 644 $RPM_BUILD_ROOT%{_mandir}/*/*
-chmod +x $RPM_BUILD_ROOT/usr/lib/lib*.so.*
# The initscripts....
# Redhat-style....
@@ -558,7 +557,6 @@
# them anyway for completeness.
mkdir -p $RPM_BUILD_ROOT/usr/lib/pgsql/test
cp -a src/test/regress $RPM_BUILD_ROOT/usr/lib/pgsql/test
- install -m 0755 config/config.guess $RPM_BUILD_ROOT/usr/lib/pgsql
install -m 0755 contrib/spi/refint.so $RPM_BUILD_ROOT/usr/lib/pgsql/test/regress
install -m 0755 contrib/spi/autoinc.so $RPM_BUILD_ROOT/usr/lib/pgsql/test/regress
pushd $RPM_BUILD_ROOT/usr/lib/pgsql/test/regress/
@@ -578,8 +576,6 @@
#chmod 0644 $RPM_BUILD_ROOT/etc/logrotate.d/postgres
# Fix some more documentation
-# no need for the OS2 client
-rm -rf contrib/os2client
gzip doc/internals.ps
cp %{SOURCE6} README.rpm-dist
mv $RPM_BUILD_ROOT%{_docdir}/postgresql/html doc
@@ -686,11 +682,6 @@
popd
-# Fix a dangling symlink
-mkdir -p $RPM_BUILD_ROOT/usr/include/pgsql/port
-cp src/include/port/linux.h $RPM_BUILD_ROOT/usr/include/pgsql/port/
-ln -sf port/linux.h $RPM_BUILD_ROOT/usr/include/pgsql/os.h
-
#more broken symlinks
rm -f $RPM_BUILD_ROOT/usr/lib/pgsql/contrib/pg_resetxlog/pg_crc.c \
$RPM_BUILD_ROOT/usr/lib/pgsql/contrib/pg_controldata/pg_crc.c cp \
src/backend/utils/hash/pg_crc.c \
$RPM_BUILD_ROOT/usr/lib/pgsql/contrib/pg_resetxlog/pg_crc.c @@ -794,6 +785,8 @@
/usr/bin/dropuser
/usr/bin/pg_dump
/usr/bin/pg_dumpall
+/usr/bin/pg_encoding
+/usr/bin/pg_id
/usr/bin/pg_restore
/usr/bin/psql
/usr/bin/vacuumdb
@@ -806,6 +799,7 @@
%{_mandir}/man1/pg_dump.1*
%{_mandir}/man1/pg_dumpall.1*
%{_mandir}/man1/psql.1*
+%{_mandir}/man1/vacuumdb.1*
%{_mandir}/manl/*
%dir %{_mandir}/manl/
@@ -831,8 +825,6 @@
/usr/bin/initlocation
/usr/bin/ipcclean
/usr/bin/pg_ctl
-/usr/bin/pg_encoding
-/usr/bin/pg_id
/usr/bin/pg_passwd
/usr/bin/postgres
/usr/bin/postgresql-dump
@@ -845,7 +837,6 @@
%{_mandir}/man1/pg_passwd.1*
%{_mandir}/man1/postgres.1*
%{_mandir}/man1/postmaster.1*
-%{_mandir}/man1/vacuumdb.1*
%{_mandir}/man1/postgresql-dump.1*
/usr/share/pgsql/global.bki
/usr/share/pgsql/global.description
@@ -867,18 +858,24 @@
/usr/include/pgsql/*
%dir /usr/include/pgsql
/usr/bin/ecpg
-/usr/lib/lib*.a
/usr/bin/pg_config
/usr/lib/libpq.so
/usr/lib/libecpg.so
/usr/lib/libpq++.so
/usr/lib/libpgeasy.so
+/usr/lib/libpgtcl.so
+/usr/lib/libpq.a
+/usr/lib/libecpg.a
+/usr/lib/libpq++.a
+/usr/lib/libpgeasy.a
+/usr/lib/libpgtcl.a
%{_mandir}/man1/ecpg.1*
+%{_mandir}/man1/pg_config.1*
%if %tcl
%files tcl
%defattr(-,root,root)
-%attr(755,root,root) /usr/lib/libpgtcl.so*
+%attr(755,root,root) /usr/lib/libpgtcl.so.*
/usr/bin/pgtclsh
%{_mandir}/man1/pgtclsh.1*
/usr/lib/pgsql/pltcl.so
@@ -900,7 +897,7 @@
%if %odbc
%files odbc
%defattr(-,root,root)
-%attr(755,root,root) /usr/lib/libpsqlodbc.so*
+%attr(755,root,root) /usr/lib/libpsqlodbc.so
%config(noreplace) /etc/pgsql/odbcinst.ini
/usr/share/pgsql/odbc.sql
%endif
@@ -937,7 +934,6 @@
%if %test
%files test
%defattr(-,postgres,postgres)
-%attr(755,postgres,postgres) /usr/lib/pgsql/config.guess
%attr(-,postgres,postgres) /usr/lib/pgsql/test/*
%attr(-,postgres,postgres) %dir /usr/lib/pgsql/test
%endif
["01-postgresql-spec-72devel.patch" (TEXT/PLAIN)]
--- postgresql.spec.prev Mon Sep 24 00:18:24 2001
+++ postgresql.spec Mon Sep 24 22:25:30 2001
@@ -15,14 +15,13 @@
# Utility feature defines.
%{!?enable_mb:%define enable_mb 1}
%{!?pgaccess:%define pgaccess 1}
-%{!?newintarray:%define newintarray 0}
# Python major version.
%{expand: %%define pyver %(python -c 'import sys;print(sys.version[0:3])')}
Summary: PostgreSQL client programs and libraries.
Name: postgresql
-Version: 7.1.3
+Version: 7.2devel
# Conventions for PostgreSQL Global Development Group RPM releases:
@@ -44,7 +43,7 @@
# Pre-release RPM's should not be put up on the public ftp.postgresql.org server
# -- only test releases or full releases should be.
-Release: 3XXX
+Release: 1pe
License: BSD
Group: Applications/Databases
Source0: ftp://ftp.postgresql.org/pub/source/v%{version}/postgresql-%{version}.tar.gz
@@ -58,10 +57,7 @@
Source12: postgresql-dump.1.gz
Source14: rh-pgdump.sh
Source15: postgresql-bashprofile
-Source16: http://www.sai.msu.su/~megera/postgres/gist/code/7.1.2/contrib-intarray.tar.gz
-Patch1: rpm-pgsql-7.1.patch
-Patch2: %{name}-7.1.plperl.patch
-Patch3: %{name}-7.1.s390x.patch
+Patch1: rpm-pgsql-7.2.patch
Buildrequires: perl glibc-devel
Prereq: /sbin/ldconfig initscripts
BuildPrereq: python-devel perl tcl
@@ -149,7 +145,7 @@
%package libs
Summary: The shared libraries required for any PostgreSQL clients.
Group: Applications/Databases
-Provides: libpq.so.2.1 libpq.so.2.0 libpq.so
+Provides: libpq.so.2 libpq.so.2.0 libpq.so
%description libs
The postgresql-libs package provides the essential shared libraries for any
@@ -318,30 +314,6 @@
%patch1 -p1
-#PL/Perl stuff
-%patch2 -p1
-%patch3 -p1
-
-%if %forceplperl
-FORCEPLPERL=--force
-%else
-FORCEPLPERL=
-%endif
-
-%if %plperl
- pushd src/pl/plperl
- EXTRA_INCLUDES=-I../../include plperl_installdir=$RPM_BUILD_ROOT/usr/lib \
perl Makefile.PL $FORCEPLPERL
- popd
-%endif
-#
-
-# Newer, optional intarray in contrib.
-%if %newintarray
- pushd contrib
- rm -fr intarray
- tar xvzf %{SOURCE16}
- popd
-%endif
%build
@@ -392,29 +364,11 @@
--sysconfdir=/etc/pgsql \
--mandir=%{_mandir} \
--docdir=%{_docdir} \
- --includedir=%{_includedir}/pgsql \
+ --includedir=%{_includedir} \
--datadir=/usr/share/pgsql
make all
-%if %plperl
- pushd src/pl/plperl
- make INC=-I../../include
- popd
-%endif
-
-%if %python
- pushd src
- pushd interfaces/python
- cp /usr/lib/python%{pyver}/config/Makefile.pre.in .
- echo *shared* > Setup
- echo _pg pgmodule.c -I../../include -I../libpq -L../libpq -lpq -lcrypt >> Setup
- make -f Makefile.pre.in boot
- make
- popd
- popd
-%endif
-
%if %test
pushd src/test
make all
@@ -426,11 +380,6 @@
make DESTDIR=$RPM_BUILD_ROOT install
-%if %plperl
-make DESTDIR=$RPM_BUILD_ROOT -C src/pl/plperl install
-#cp blib/arch/auto/plperl/plperl.so $RPM_BUILD_ROOT/usr/lib
-%endif
-
%if %perl
make PREFIX=$RPM_BUILD_ROOT/usr -C src/interfaces/perl5 -f Makefile install
@@ -476,13 +425,6 @@
make DESTDIR=$RPM_BUILD_ROOT install-all-headers
-#fixup directory permissions for SPI stuff...
-#pushd $RPM_BUILD_ROOT/usr/include/pgsql
-#chmod 755 access catalog executor nodes rewrite storage tcop utils
-#popd
-
-#popd
-
# copy over Makefile.global to the include dir....
install -m755 src/Makefile.global $RPM_BUILD_ROOT/usr/include/pgsql
@@ -498,15 +440,6 @@
popd
%endif
-%if %python
- # Python
- pushd src/interfaces/python
- # Makefile.pre.in doesn't yet support .py files anyway, so we stick to a manual \
installation
- mkdir -p $RPM_BUILD_ROOT/usr/lib/python%{pyver}/site-packages
- install -m 755 _pgmodule.so *.py \
$RPM_BUILD_ROOT/usr/lib/python%{pyver}/site-packages/
- popd
-%endif
-
%if %jdbc
# Java/JDBC
# The user will have to set a CLASSPATH to find it here, but not sure where else to \
put it... @@ -517,9 +450,6 @@
%endif
-# Fixup more permissions...
-chmod 644 $RPM_BUILD_ROOT%{_mandir}/*/*
-
# The initscripts....
# Redhat-style....
if [ -d /etc/rc.d/init.d ]
@@ -545,10 +475,6 @@
# backups of data go here...
install -d -m 700 $RPM_BUILD_ROOT/var/lib/pgsql/backups
-# Move the PL's to the right place
-mkdir -p $RPM_BUILD_ROOT/usr/lib/pgsql
-mv $RPM_BUILD_ROOT/usr/lib/pl*.so $RPM_BUILD_ROOT/usr/lib/pgsql
-
# postgres' .bash_profile
install -m 644 %{SOURCE15} $RPM_BUILD_ROOT/var/lib/pgsql/.bash_profile
@@ -660,11 +586,6 @@
perl -pi -e "s|/usr/lib/contrib|/usr/lib/pgsql/contrib/seg|" *.sql
popd
-# soundex
-pushd soundex
-perl -pi -e "s|/usr/lib/contrib|/usr/lib/pgsql/contrib/soundex|" *.sql
-popd
-
# spi
pushd spi
perl -pi -e "s|/usr/lib/contrib|/usr/lib/pgsql/contrib/spi|" *.sql
@@ -687,10 +608,10 @@
cp src/backend/utils/hash/pg_crc.c \
$RPM_BUILD_ROOT/usr/lib/pgsql/contrib/pg_resetxlog/pg_crc.c ln \
$RPM_BUILD_ROOT/usr/lib/pgsql/contrib/pg_resetxlog/pg_crc.c \
$RPM_BUILD_ROOT/usr/lib/pgsql/contrib/pg_controldata/pg_crc.c
-# Symlink libpq.so.2.0 to libpq.so.2.1 for backwards compatibility, until
+# Symlink libpq.so.2.0 to libpq.so.2 for backwards compatibility, until
# -soname patches are the norm.
pushd $RPM_BUILD_ROOT/usr/lib
-ln -s libpq.so.2.1 libpq.so.2.0
+ln -s libpq.so.2 libpq.so.2.0
popd
@@ -800,8 +721,7 @@
%{_mandir}/man1/pg_dumpall.1*
%{_mandir}/man1/psql.1*
%{_mandir}/man1/vacuumdb.1*
-%{_mandir}/manl/*
-%dir %{_mandir}/manl/
+%{_mandir}/man7/*
%files docs
%defattr(-,root,root)
@@ -838,10 +758,8 @@
%{_mandir}/man1/postgres.1*
%{_mandir}/man1/postmaster.1*
%{_mandir}/man1/postgresql-dump.1*
-/usr/share/pgsql/global.bki
-/usr/share/pgsql/global.description
-/usr/share/pgsql/template1.bki
-/usr/share/pgsql/template1.description
+/usr/share/pgsql/postgres.bki
+/usr/share/pgsql/postgres.description
/usr/share/pgsql/*.sample
/usr/lib/pgsql/plpgsql.so
%dir /usr/lib/pgsql
@@ -855,8 +773,7 @@
%files devel
%defattr(-,root,root)
-/usr/include/pgsql/*
-%dir /usr/include/pgsql
+/usr/include/*
/usr/bin/ecpg
/usr/bin/pg_config
/usr/lib/libpq.so
@@ -898,7 +815,6 @@
%files odbc
%defattr(-,root,root)
%attr(755,root,root) /usr/lib/libpsqlodbc.so
-%config(noreplace) /etc/pgsql/odbcinst.ini
/usr/share/pgsql/odbc.sql
%endif
["rpm-pgsql-7.2.patch" (TEXT/PLAIN)]
diff -uNr postgresql-7.2devel.orig/src/Makefile.global.in \
postgresql-7.2devel/src/Makefile.global.in
--- postgresql-7.2devel.orig/src/Makefile.global.in Sun Sep 16 18:11:09 2001
+++ postgresql-7.2devel/src/Makefile.global.in Mon Sep 17 02:08:29 2001
@@ -83,7 +83,7 @@
pkglibdir = $(libdir)
ifeq "$(findstring pgsql, $(pkglibdir))" ""
ifeq "$(findstring postgres, $(pkglibdir))" ""
-override pkglibdir := $(pkglibdir)/postgresql
+override pkglibdir := $(pkglibdir)/pgsql
endif
endif
@@ -91,7 +91,7 @@
pkgincludedir = $(includedir)
ifeq "$(findstring pgsql, $(pkgincludedir))" ""
ifeq "$(findstring postgres, $(pkgincludedir))" ""
-override pkgincludedir := $(pkgincludedir)/postgresql
+override pkgincludedir := $(pkgincludedir)/pgsql
endif
endif
includedir_server = $(pkgincludedir)/server
diff -uNr postgresql-7.2devel.orig/src/test/regress/GNUmakefile \
postgresql-7.2devel/src/test/regress/GNUmakefile
--- postgresql-7.2devel.orig/src/test/regress/GNUmakefile Sun Sep 16 18:11:11 2001
+++ postgresql-7.2devel/src/test/regress/GNUmakefile Mon Sep 17 01:58:31 2001
@@ -68,8 +68,8 @@
abs_builddir := $(shell pwd)
define sed-command
-sed -e 's,@abs_srcdir@,$(abs_srcdir),g' \
- -e 's,@abs_builddir@,$(abs_builddir),g' \
+sed -e 's,@abs_srcdir@,/usr/lib/pgsql/test/regress,g' \
+ -e 's,@abs_builddir@,/usr/lib/pgsql/test/regress,g' \
-e 's/@DLSUFFIX@/$(DLSUFFIX)/g' $< >$@
endef
diff -uNr postgresql-7.2devel.orig/src/test/regress/input/create_function_1.source \
postgresql-7.2devel/src/test/regress/input/create_function_1.source
--- postgresql-7.2devel.orig/src/test/regress/input/create_function_1.source Wed May \
16 18:32:20 2001
+++ postgresql-7.2devel/src/test/regress/input/create_function_1.source Mon Sep 17 \
01:58:31 2001 @@ -4,41 +4,41 @@
CREATE FUNCTION widget_in(opaque)
RETURNS widget
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/regress.so'
LANGUAGE 'c';
CREATE FUNCTION widget_out(opaque)
RETURNS opaque
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/regress.so'
LANGUAGE 'c';
CREATE FUNCTION check_primary_key ()
RETURNS opaque
- AS '@abs_builddir@/../../../contrib/spi/refint@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/refint.so'
LANGUAGE 'C';
CREATE FUNCTION check_foreign_key ()
RETURNS opaque
- AS '@abs_builddir@/../../../contrib/spi/refint@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/refint.so'
LANGUAGE 'C';
CREATE FUNCTION autoinc ()
RETURNS opaque
- AS '@abs_builddir@/../../../contrib/spi/autoinc@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/autoinc.so'
LANGUAGE 'C';
CREATE FUNCTION funny_dup17 ()
RETURNS opaque
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/regress.so'
LANGUAGE 'C';
CREATE FUNCTION ttdummy ()
RETURNS opaque
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/regress.so'
LANGUAGE 'C';
CREATE FUNCTION set_ttdummy (int4)
RETURNS int4
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/regress.so'
LANGUAGE 'C';
diff -uNr postgresql-7.2devel.orig/src/test/regress/output/create_function_1.source \
postgresql-7.2devel/src/test/regress/output/create_function_1.source
--- postgresql-7.2devel.orig/src/test/regress/output/create_function_1.source Fri Aug \
10 23:14:34 2001
+++ postgresql-7.2devel/src/test/regress/output/create_function_1.source Mon Sep 17 \
02:01:47 2001 @@ -3,34 +3,34 @@
--
CREATE FUNCTION widget_in(opaque)
RETURNS widget
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/regress.so'
LANGUAGE 'c';
NOTICE: ProcedureCreate: type widget is not yet defined
CREATE FUNCTION widget_out(opaque)
RETURNS opaque
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/regress.so'
LANGUAGE 'c';
CREATE FUNCTION check_primary_key ()
RETURNS opaque
- AS '@abs_builddir@/../../../contrib/spi/refint@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/refint.so'
LANGUAGE 'C';
CREATE FUNCTION check_foreign_key ()
RETURNS opaque
- AS '@abs_builddir@/../../../contrib/spi/refint@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/refint.so'
LANGUAGE 'C';
CREATE FUNCTION autoinc ()
RETURNS opaque
- AS '@abs_builddir@/../../../contrib/spi/autoinc@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/autoinc.so'
LANGUAGE 'C';
CREATE FUNCTION funny_dup17 ()
RETURNS opaque
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/regress.so'
LANGUAGE 'C';
CREATE FUNCTION ttdummy ()
RETURNS opaque
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/regress.so'
LANGUAGE 'C';
CREATE FUNCTION set_ttdummy (int4)
RETURNS int4
- AS '@abs_builddir@/regress@DLSUFFIX@'
+ AS '/usr/lib/pgsql/test/regress/regress.so'
LANGUAGE 'C';
diff -uNr postgresql-7.2devel.orig/src/test/regress/pg_regress.sh \
postgresql-7.2devel/src/test/regress/pg_regress.sh
--- postgresql-7.2devel.orig/src/test/regress/pg_regress.sh Sun Sep 16 18:11:11 2001
+++ postgresql-7.2devel/src/test/regress/pg_regress.sh Mon Sep 17 02:02:56 2001
@@ -70,7 +70,7 @@
: ${outputdir=.}
libdir='@libdir@'
-pkglibdir='@pkglibdir@'
+pkglibdir='/usr/lib/pgsql'
bindir='@bindir@'
datadir='@datadir@'
host_platform='@host_tuple@'
---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic